Skip to content

Commit

Permalink
Merge pull request #691 from jiangzhonglian/main
Browse files Browse the repository at this point in the history
更新 pytorch 新特性
  • Loading branch information
jiangzhonglian authored Feb 9, 2025
2 parents 4706bfc + 026c1a7 commit cc433c5
Show file tree
Hide file tree
Showing 9 changed files with 374 additions and 41 deletions.
6 changes: 3 additions & 3 deletions docs/LatestChanges/PyTorch_V1.10.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ CUDA图形大大减少了CPU绑定的cuda工作负载的CPU开销,从而通过

阅读[说明](https://pytorch.org/docs/master/notes/cuda.html#cuda-graphs)以了解更多详细信息和示例,并参考一般[文档](https://pytorch.org/docs/master/generated/torch.cuda.CUDAGraph.html#torch.cuda.CUDAGraph)以获取更多信息。

### \[Beta\]共轭视图
### [Beta]共轭视图

PyTorch对复tensor([torch.conj()](https://pytorch.org/docs/1.10.0/generated/torch.conj.html?highlight=conj#torch.conj))的共轭现在是一个常数时间操作,并返回具有共轭位集的输入tensor的视图,可以通过调用[torch.is\_conj()](https://pytorch.org/docs/1.10.0/generated/torch.is_conj.html?highlight=is_conj#torch.is_conj)看到。这已经在矩阵乘法、点积等其他各种PyTorch操作中得到了利用,将共轭与操作融合,从而在CPU和CUDA上实现显著的性能增益和内存节省。
PyTorch对复tensor([torch.conj()](https://pytorch.org/docs/1.10.0/generated/torch.conj.html?highlight=conj#torch.conj))的共轭现在是一个常数时间操作,并返回具有共轭位集的输入tensor的视图,可以通过调用[torch.is_conj()](https://pytorch.org/docs/1.10.0/generated/torch.is_conj.html?highlight=is_conj#torch.is_conj)看到。这已经在矩阵乘法、点积等其他各种PyTorch操作中得到了利用,将共轭与操作融合,从而在CPU和CUDA上实现显著的性能增益和内存节省。

## 分布式训练

Expand All @@ -67,7 +67,7 @@ PyTorch对复tensor([torch.conj()](https://pytorch.org/docs/1.10.0/generated/tor

## 性能优化和工具

### \[Beta\]在TorchScript中进行配置文件定向输出
### [Beta]在TorchScript中进行配置文件定向输出

TorchScript硬性要求源代码具有类型注释,以便编译成功。长期以来,只能通过反复试验(即通过逐一修复torch.jit.script生成的类型检查错误)来添加缺失或不正确的类型注释,这是低效和耗时的。

Expand Down
16 changes: 8 additions & 8 deletions docs/LatestChanges/PyTorch_V1.6.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ PyTorch 1.6 版本包括许多新的 API、用于性能改进和分析的工具

## 性能与分析

### \[STABLE\] 自动混合精度 (AMP) 训练
### [Stable] 自动混合精度 (AMP) 训练

AMP 允许用户轻松启用自动混合精度训练,从而在 Tensor Core GPU 上实现更高的性能和高达 50% 的内存节省。使用本机支持的`torch.cuda.amp`​​API,AMP 提供了混合精度的便捷方法,其中某些操作使用`torch.float32 (float)`数据类型,其他操作使用`torch.float16 (half)`. 一些操作,如线性层和卷积,在`float16`. 其他操作(例如缩减)通常需要 的动态范围`float32`。混合精度尝试将每个操作与其适当的数据类型相匹配。

* 设计文档([链接](https://github.com/pytorch/pytorch/issues/25081))
* 文档([链接](https://pytorch.org/docs/stable/amp.html))
* 使用示例([链接](https://pytorch.org/docs/stable/notes/amp_examples.html))

### \[BETA\] FORK/JOIN 并行性
### [Beta] FORK/JOIN 并行性

此版本增加了对语言级构造的支持以及对 TorchScript 代码中粗粒度并行性的运行时支持。这种支持对于并行运行集成中的模型或并行运行循环网络的双向组件等情况非常有用,并且允许释放并行架构(例如多核CPU)的计算能力以实现任务级并行。

Expand All @@ -56,7 +56,7 @@ print(example(torch.ones([])))

* 文档([链接](https://pytorch.org/docs/stable/jit.html))

### \[BETA\] 内存分析器
### [Beta] 内存分析器

`torch.autograd.profiler`API 现在包含一个内存分析器,可让您检查 CPU 和 GPU 模型内不同运算符的tensor内存成本。

Expand Down Expand Up @@ -90,7 +90,7 @@ print(prof.key_averages().table(sort_by="self_cpu_memory_usage", row_limit=10))

## 分布式训练和 RPC

### \[BETA\] 用于 RPC 的 TensorPipe 后端
### [Beta] 用于 RPC 的 TensorPipe 后端

PyTorch 1.6 引入了 RPC 模块的新后端,该模块利用 TensorPipe 库,这是一种针对机器学习的tensor感知点对点通信原语,旨在补充 PyTorch 中分布式训练的当前原语(Gloo、MPI 等)这是集体性和阻塞性的。TensorPipe 的成对和异步性质使其适合超越数据并行的新网络范例:客户端-服务器方法(例如,用于嵌入的参数服务器、Impala 式 RL 中的参与者-学习者分离等)以及模型和管道并行训练(想想 GPipe)、八卦 SGD 等。

Expand All @@ -108,7 +108,7 @@ torch.distributed.rpc.rpc_sync(...)
* 设计文档([链接](https://github.com/pytorch/pytorch/issues/35251))
* 文档([链接](https://pytorch.org/docs/stable/rpc/index.html))

### \[BETA\] DDP+RPC
### [Beta] DDP+RPC

PyTorch Distributed 支持两种强大的范例:用于模型的完全同步数据并行训练的 DDP 和允许分布式模型并行的 RPC 框架。以前,这两个功能独立工作,用户无法混合和匹配它们来尝试混合并行范例。

Expand All @@ -131,7 +131,7 @@ for data in batch:
* 文档([链接](https://pytorch.org/docs/stable/rpc/index.html))
* 使用示例([链接](https://github.com/pytorch/examples/pull/800))

### \[BETA\] RPC - 异步用户函数
### [Beta] RPC - 异步用户函数

RPC 异步用户函数支持执行用户定义函数时在服务器端产生和恢复的能力。在此功能之前,当被调用者处理请求时,一个 RPC 线程会等待,直到用户函数返回。如果用户函数包含 IO(例如,嵌套 RPC)或信令(例如,等待另一个请求解除阻塞),则相应的 RPC 线程将闲置等待这些事件。因此,某些应用程序必须使用大量线程并发送额外的 RPC 请求,这可能会导致性能下降。要使用户函数在此类事件上屈服,应用程序需要: 1) 使用装饰器装饰函数`@rpc.functions.async_execution`;2) 让函数返回 a`torch.futures.Future`并将恢复逻辑安装为回调`Future`目的。请参阅下面的示例:

Expand All @@ -157,15 +157,15 @@ print(ret) # prints tensor([3., 3.])

## 前端 API 更新

### \[BETA\] 复数
### [Beta] 复数

PyTorch 1.6 版本为复杂tensor(包括 torch.complex64 和 torch.complex128 dtypes)提供了 beta 级支持。复数是可以用 a + bj 形式表示的数字,其中 a 和 b 是实数,j 是方程 x^2 = −1 的解。复数经常出现在数学和工程中,特别是在信号处理中,而复数神经网络领域是一个活跃的研究领域。复杂tensor的测试版将支持常见的 PyTorch 和复杂tensor功能,以及 Torchaudio、ESPnet 等所需的功能。虽然这是此功能的早期版本,我们预计它会随着时间的推移而改进,

## 移动更新

PyTorch 1.6 为移动设备上的推理带来了更高的性能和总体稳定性。我们消除了一些错误,继续维护并添加了一些新功能,同时提高了 CPU 后端上各种 ML 模型推理的 fp32 和 int8 性能。

### \[BETA\] 移动功能和性能
### [Beta] 移动功能和性能

* 无状态和有状态 XNNPACK Conv 和 Linear 运算符
* 无状态 MaxPool2d + JIT 优化过程
Expand Down
38 changes: 19 additions & 19 deletions docs/LatestChanges/PyTorch_V1.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

## 前端API

### \[BETA\] NumPy 兼容 torch.fft模块
### [Beta] NumPy 兼容 torch.fft模块

FFT相关功能通常用于各种科学领域,如信号处理。虽然PyTorch历来支持一些与FFT相关的功能,但1.7版本增加了一个新的torch.fft模块,该模块使用与NumPy相同的API实现FFT相关功能。

Expand All @@ -56,13 +56,13 @@ tensor([12.+16.j, -8.+0.j, -4.-4.j, 0.-8.j])

* [文稿](https://pytorch.org/docs/stable/fft.html#torch-fft)

### \[BETA\] C++支持变压器NN模块
### [Beta] C++支持变压器NN模块

[PyTorch 1.5以来](https://pytorch.org/blog/pytorch-1-dot-5-released-with-new-and-updated-apis/),我们继续保持python和C++前端API之间的奇偶校验。此更新允许开发人员使用来自C++前端的nn.transformer模块抽象。此外,开发人员不再需要从python/JIT中保存模块并加载到C++中,因为它现在可以直接在C++中使用。

* [文稿](https://pytorch.org/cppdocs/api/classtorch_1_1nn_1_1_transformer_impl.html#_CPPv4N5torch2nn15TransformerImplE)

### \[BETA\] torch.set_deterministic
### [Beta] torch.set_deterministic

可重现性(位对位确定性)可能有助于在调试或测试程序时识别错误。为了促进可重现性,PyTorch 1.7添加了`torch.set_deterministic(bool)`函数,该函数可以指导PyTorch操作员在可用时选择确定性算法,并在操作可能导致非确定性行为时抛出运行时错误。默认情况下,此函数控制的标志为假,行为没有变化,这意味着默认情况下,PyTorch可以非确定性地实现其操作。

Expand All @@ -81,7 +81,7 @@ tensor([12.+16.j, -8.+0.j, -4.-4.j, 0.-8.j])

## 性能评测

### \[BETA\] 堆栈跟踪已添加到分析器
### [Beta] 堆栈跟踪已添加到分析器

用户现在不仅可以在分析器输出表中看到运算符名称/输入,还可以看到运算符在代码中的位置。工作流程几乎不需要改变就能利用这种能力。用户像以前一样使用[autograd分析器](https://pytorch.org/docs/stable/autograd.html#profiler),但具有可选的新参数:`with_stack``group_by_stack_n`。注意:定期分析运行不应使用此功能,因为它增加了大量开销。

Expand All @@ -90,36 +90,36 @@ tensor([12.+16.j, -8.+0.j, -4.-4.j, 0.-8.j])

## 分布式训练和RPC

### \[STABLE\] torchelastic 现在捆绑到 pytorch docker 图像中
### [Stable] torchelastic 现在捆绑到 pytorch docker 图像中

Torchelastic 提供了当前 `torch.distributed.launch` CLI 的严格超集,并添加了容错和弹性功能。 如果用户对容错不感兴趣,他们可以通过设置 `max_restarts=0` 来获得准确的功能/行为奇偶校验,并增加自动分配的 `RANK``MASTER_ADDR|PORT` 的便利(与在 `torch.distributed.launch` 中手动指定相比)。

通过将`torchelastic`捆绑在与PyTorch相同的docker图像中,用户可以立即开始尝试TorchElastic,而无需单独安装`torchelastic`。除了方便之外,在现有的Kubeflow分布式PyTorch运算符中添加对弹性参数的支持时,这项工作也不错。

* [用法示例以及如何开始](https://pytorch.org/elastic/0.2.0/examples.html)

### \[BETA\] 支持DDP中不均匀的数据集输入
### [Beta] 支持DDP中不均匀的数据集输入

PyTorch 1.7引入了一个新的上下文管理器,与使用`torch.nn.parallel.DistributedDataParallel`训练的模型一起使用,以便在不同进程中进行数据集大小不均匀的训练。此功能在使用DDP时具有更大的灵活性,并防止用户必须手动确保数据集大小在不同过程中相同。使用此上下文管理器,DDP将自动处理不均匀的数据集大小,这可以防止在训练结束时出现错误或挂起。

* [RFC](https://github.com/pytorch/pytorch/issues/38174)
* [文稿](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataParallel.join)

### \[BETA\] NCCL可靠性-异步错误/超时处理
### [Beta] NCCL可靠性-异步错误/超时处理

过去,由于集体陷入困境,NCCL的训练运行会无限期地挂起,给用户带来非常不愉快的体验。如果检测到潜在的挂起,此功能将中止卡住的集体,并抛出异常/崩溃过程。当与torchelastic(可以从最后一个检查点恢复训练过程)一起使用时,用户可以在分布式训练中具有更大的可靠性。此功能完全选择加入,位于需要显式设置的环境变量后面,以启用此功能(否则用户将看到与以前相同的行为)。

* [RFC](https://github.com/pytorch/pytorch/issues/46874)
* [文稿](https://pytorch.org/docs/stable/distributed.html?highlight=init_process_group#torch.distributed.init_process_group)

### \[BETA\] torchscript `RPC_REMOTE``RPC_SYNC`
### [Beta] torchscript `RPC_REMOTE``RPC_SYNC`

`torch.distributed.rpc.rpc_async`在之前的版本中已在torchscript中可用。对于PyTorch 1.7,此功能将扩展到其余两个核心RPC API,`torch.distributed.rpc.rpc_sync``torch.distributed.rpc.remote`。这将完成torchscript中支持的主要RPC API,它允许用户在torchscript中使用现有的python RPC API(在脚本函数或脚本方法中,它释放了python全局解释器锁),并可能提高多线程环境中的应用程序性能。

* [文稿](https://pytorch.org/docs/stable/rpc.html#rpc)
* [例句](https://github.com/pytorch/pytorch/blob/58ed60c259834e324e86f3e3118e4fcbbfea8dd1/torch/testing/_internal/distributed/rpc/jit/rpc_test.py#L505-L525)

### \[BETA\] 支持 torchscript 的分布式优化器
### [Beta] 支持 torchscript 的分布式优化器

PyTorch为训练算法提供了广泛的优化器,这些优化器已作为python API的一部分被反复使用。然而,用户通常希望使用多线程训练而不是多进程训练,因为它在大规模分布式训练中提供了更好的资源利用率和效率(例如分布式模型并行)或任何基于RPC的训练应用程序)。用户以前无法使用分布式优化器执行此操作,因为我们需要摆脱python全局解释器锁(GIL)限制来实现这一目标。

Expand Down Expand Up @@ -155,7 +155,7 @@ with dist_autograd.context() as context_id:
* [RFC](https://github.com/pytorch/pytorch/issues/46883)
* [文稿](https://pytorch.org/docs/stable/rpc.html#module-torch.distributed.optim)

### \[BETA\] 基于RPC的剖析增强
### [Beta] 基于RPC的剖析增强

PyTorch 1.6中首次引入了将PyTorch分析器与RPC框架结合使用的支持。在PyTorch 1.7中,进行了以下增强:

Expand All @@ -168,7 +168,7 @@ PyTorch 1.6中首次引入了将PyTorch分析器与RPC框架结合使用的支
* [设计文档](https://github.com/pytorch/pytorch/issues/39675)
* [例句](https://pytorch.org/tutorials/recipes/distributed_rpc_profiling.html)

### \[Prototype\] WINDOWS支持分布式训练
### [Prototype] WINDOWS支持分布式训练

PyTorch 1.7为Windows平台上的`DistributedDataParallel`和集体通信提供了原型支持。在此版本中,支持仅涵盖基于Gloo的`ProcessGroup``FileStore`

Expand Down Expand Up @@ -196,7 +196,7 @@ model = DistributedDataParallel(local_model, device_ids=[rank])

PyTorch Mobile支持[iOS](https://pytorch.org/mobile/ios)[Android](https://pytorch.org/mobile/android/)[Cocoapods](https://cocoapods.org/)[JCenter](https://mvnrepository.com/repos/jcenter)分别提供二进制包。您可以在[此处](https://pytorch.org/mobile/home/)了解有关PyTorch Mobile的更多信息。

### \[BETA\] PYTORCH移动缓存分配器用于性能改进
### [Beta] PYTORCH移动缓存分配器用于性能改进

在一些移动平台上,如Pixel,我们观察到内存被更积极地返回到系统中。这导致频繁的页面故障,因为PyTorch是一个功能框架,无法为运营商保持状态。因此,对于大多数操作,每次执行时都会动态分配输出。为了改善由此导致的性能惩罚,PyTorch 1.7为CPU提供了一个简单的缓存分配器。分配器按tensor大小缓存分配,目前只能通过PyTorch C++ API使用。缓存分配器本身由客户端拥有,因此分配器的生命周期也由客户端代码维护。然后,这种客户端拥有的缓存分配器可以与作用域保护`c10::WithCPUCachingAllocatorGuard`一起使用,以便在该范围内使用缓存分配。**示例用法:**

Expand Down Expand Up @@ -225,7 +225,7 @@ c10::CPUCachingAllocator caching_allocator;

## torchvision

### \[STABLE\] 变换现在支持 Tensor 输入、批处理计算、GPU和torchscript
### [Stable] 变换现在支持 Tensor 输入、批处理计算、GPU和torchscript

torchvision变换现在从`nn.Module`继承,可以进行火炬脚本并应用于火炬tensor输入以及PIL图像。它们还支持具有批处理尺寸的Tensors,并在CPU/GPU设备上无缝工作:

Expand Down Expand Up @@ -267,7 +267,7 @@ out_image2 = scripted_transforms(tensor_image)
* 转换多波段火炬tensor图像(超过3-4个通道)
* torchscript与您的模型一起转换,用于部署**注意:**torchscript支持的例外情况包括`Compose``RandomChoice``RandomOrder``Lambda`以及应用于PIL图像(如`ToPILImage`)。

### \[STABLE\] 用于JPEG和PNG格式的原生图像IO
### [Stable] 用于JPEG和PNG格式的原生图像IO

torchvision 0.8.0引入了JPEG和PNG格式的原生图像读写操作。这些运算符支持torchscript,并以`uint8`格式返回`CxHxW`tensor,因此现在可以成为您在C++环境中部署模型的一部分。

Expand All @@ -288,11 +288,11 @@ tensor_image = decode_image(raw_data)
scripted_read_image = torch.jit.script(read_image)
```

### \[STABLE\] 视网膜检测模型
### [Stable] 视网膜检测模型

此版本为视网膜网添加了预训练的模型,该模型具有来自[密集物体检测](https://arxiv.org/abs/1708.02002)[焦距损失](https://arxiv.org/abs/1708.02002)的ResNet50主干。

### \[BETA\] 新视频阅读器API
### [Beta] 新视频阅读器API

此版本引入了新的视频阅读抽象,可以对视频的迭代进行更精细的控制。它支持图像和音频,并实现了迭代器接口,以便与迭代工具等其他python库互操作。

Expand Down Expand Up @@ -330,15 +330,15 @@ for frame in takewhile(lambda x: x["pts"] < 5, reader):

随着这个版本,torchaudio正在扩大对模型和[端到端应用程序](https://github.com/pytorch/audio/tree/master/examples)的支持,增加了wav2letter训练管道和端到端文本到语音和源分离管道。请在[github](https://github.com/pytorch/audio/issues/new?template=questions-help-support.md)上提交问题,以提供有关他们的反馈。

### \[STABLE\] 语音识别
### [Stable] 语音识别

在上一个版本中添加了用于语音识别的wav2letter模型的基础上,我们现在添加了一个带有LibriSpeech数据集的[wav2letter训练管道示例](https://github.com/pytorch/audio/tree/master/examples/pipeline_wav2letter)

### \[STABLE\] 文本到语音
### [Stable] 文本到语音

为了支持文本到语音应用程序,我们根据[该存储库](https://github.com/fatchord/WaveRNN)的实现,添加了一个基于WaveRNN模型的声码器。最初的实现是在“高效的神经音频合成”中引入的。我们还提供了一个[WaveRNN训练管道示例](https://github.com/pytorch/audio/tree/master/examples/pipeline_wavernn),该[管道](https://github.com/pytorch/audio/tree/master/examples/pipeline_wavernn)使用本版本中添加到torchaudio的LibriTTS数据集。

### \[STABLE\] 源头分离
### [Stable] 源头分离

随着ConvTasNet模型的加入,基于论文“Conv-TasNet:超越语音分离的理想时间频率大小屏蔽”,torchiaudio现在也支持源分离。wsj-mix数据集提供了[ConvTasNet训练管道示例](https://github.com/pytorch/audio/tree/master/examples/source_separation)

Expand Down
Loading

0 comments on commit cc433c5

Please sign in to comment.