PyTorch1.9:适配移动开发,优化模型推理部署

PyTorch1.9:适配移动开发,优化模型推理部署
PyTorch 团队在官⽅博客宣布 PyTorch 1.9 发布。该版本包括了 1.8 版本发布以来,398 位贡献者提交的 3400 多条 PR,详情访问
在官⽅博客中,团队总结了 PyTorch 1.9 版本的亮点,包括:
为⽀持科学计算进⾏了重⼤改进,包括 torch.linalg 、 torch.special 和 Complex Autograd;
针对移动开发,对解释器适配设备上的⼆进制⼤⼩的重⼤改进;
通过将 TorchElastic 上传到 PyTorch Core 中,实现了对弹性容错训练的本地⽀持;
对 PyTorch RPC 框架的重⼤更新,以⽀持具有 GPU ⽀持的⼤规模分布式训练;
为优化模型推理部署的性能和包装,设计的新 API;
在 PyTorch 分析器中⽀持分布式训练、GPU 利⽤率和 SM 效率;
在发布 1.9 版本的同时,官⽅还发布了 PyTorch 库的重⼤更新。
PyTorch 版本中的功能被分为稳定版、测试版和原型版。你可以在 中了解详情。
前端 APIs
(稳定版) torch.linalg
在 1.9 版本中, torch.linalg 模块正在向稳定版本过渡。线性代数对于深度学习和科学计算⾄关重要,torch.linalg 模块通过实现 NumPy 线性代数模块(现在⽀持加速器和 autograd)中的每个函数, 如 torch.linalg.matrix_norm 和 torch.linalg.householder_product ,扩展了 PyTorch 对它的⽀持。
曾使⽤过 NumPy 的⽤户对该模块会⾮常熟悉。
(稳定版) Complex Autograd
在 PyTorch 1.8 中作为测试版发布的 Complex Autograd 功能现在已经稳定可⽤。 ⾃测试版发布以来,我们在 PyTorch 1.9 中为 98%以上的运算符扩展了对 Complex Autograd 的⽀持,通过增加更多的 OpInfos 改进了对复杂运算符的测试,并通过 TorchAudio 迁移到本地复杂张量增加了更多的验证。
(稳定版) torch.use_deterministic_algorithms()
为了便于调试和编写可重复的程序,PyTorch 1.9 包括⼀个 torch.use_determinstic_algorithms 选项。
启⽤该设置后,如果可能的话,操作将以确定的⽅式进⾏,如果可能以⾮确定的⽅式进⾏,则抛出运⾏时错误。这⾥有⼏个例⼦。
>>> a = torch.randn(100, 100, 100, device='cuda').to_sparse()
>>> b = torch.randn(100, 100, 100, device='cuda')
# Sparse-dense CUDA bmm is usually nondeterministic
>>> torch.bmm(a, b).eq(torch.bmm(a, b)).all().item()
False
>>> torch.use_deterministic_algorithms(True)
# Now torch.bmm gives the same result each time, but with reduced performance
>>> torch.bmm(a, b).eq(torch.bmm(a, b)).all().item()
True
# CUDA kthvalue has no deterministic algorithm, so it throws a runtime error
>>> s(10000, device='cuda').kthvalue(1)
RuntimeError: kthvalue CUDA does not have a
(Beta版) torch.special
类似于 SciPy 的 special 模块的 torch.special 模块,现在已经有了测试版本。这个模块包含了许多对科学计算和处理 IV、VE、ERFCX、logerfc 和 logerfcx 等分布有⽤的功能。212资源
(Beta版) nn.Module parameterization
nn.Module 允许⽤户对 nn.Module 的任何参数或缓冲区进⾏参数化,⽽⽆需修改 nn.Module 本⾝。它允许你约束你的参数所处的空间,⽽不需要特殊的优化⽅法。
这也包含了 PyTorch 1.9 的 spectral_norm 参数化的⼀个新实现。更多的参数化将被添加到该功能中(权重_norm、矩阵约束和部分修剪),以便该功能在 1.10 中更稳定。更多细节,请参考⽂档和教程。
土工格室护坡PyTorch 移动端
(Beta 版) Mobile Interpreter
发布 Mobile Interpreter,这是 PyTorch 运⾏时的精简版,处于测试阶段。解释器将在边缘设备中执⾏ PyTorch 程序,并减少⼆进制⼤⼩的⾜迹。
移动解释器是 PyTorch Mobile 最受欢迎的功能之⼀。与⽬前的设备上运⾏时间相⽐,这个新版本将⼤⼤减少⼆进制⼤⼩。⽬前在
arm64-v8a 安卓系统中,使⽤ MobileNetV2 的 pt ⼤⼩为 8.6 MB,未压缩为 17.8 MB。使⽤ Mobile Interpreter,我们的⽬标是压缩后的⼤⼩低于 4MB,未压缩的⼤⼩低于 8MB 。更多细节,请参考该教程。
TorchVision Library
从 1.9 版本开始,⽤户可以在其 iOS/Android 应⽤程序中使⽤ TorchVision 库。Torchvision 库包含了 C++ TorchVision 操作,对于iOS 来说,它需要与 PyTorch 主库链接在⼀起,对于 Android 来说,它可以作为 gradle 依赖项添加。这允许使⽤ TorchVision 预先构建的 MaskRCNN 操作符进⾏对象检测和分割。要了解更多关于该库的信息,请参考我们的教程和演⽰应⽤程序。
Demo apps
我们正在发布⼀个基于 PyTorch 视频库的新视频应⽤和⼀个基于最新 torchaudio、wave2vec 模型的
更新的语⾳识别应⽤。两者都可以在 iOS 和 Android 上使⽤。此外,我们还⽤ PyTorch Mobile v1.9 更新了七个计算机视觉和三个⾃然语⾔处理演⽰应⽤程序,包括HuggingFace DistilBERT,以及 DeiT 视觉变换器模型。随着这两个应⽤程序的加⼊,我们现在提供了⼀整套涵盖图像、⽂本、⾳频和视频的演⽰应⽤程序。要开始使⽤,请查看我们的 iOS 演⽰ app和 Android 演⽰ app。
分布式训练
(Beta) TorchElastic is now part of core
TorchElastic 是⼀年多前在 pytorch/elastic github 仓库中开源的,是 PyTorch ⼯作进程的运⾏器和协调器。从那时起,它已经被各种分布式 Torch 的使⽤场景所采⽤。1) deepspeech.pytorch 2) pytorch-lightning 3) Kubernetes CRD。现在,它是 PyTorch 核⼼的⼀部分。
正如其名称所⽰,TorcheElastic 的核⼼功能是优雅地处理缩放事件。弹性的⼀个值得注意的推论是,对等体发现和等级分配是内置于TorchElastic 的,使⽤户能够在可抢占的实例上运⾏分布式训练,⽽不需要帮派调度器。顺便提⼀下,etcd 曾经是 TorchElastic 的⼀个硬依赖。在上游版本中,这种情况不再存在,因为我们已经添加了⼀个基于 c10d::Store 的 "独⽴ "交会点。更多细节,请参考⽂档。
(Beta 版) Distributed Training Updates
除了 TorchElastic 之外,在分布式软件包中还有⼀些测试版的功能。
1. (测试版)在 RPC 中提供了 CUDA ⽀持。
2. (测试版)ZeroRedundancyOptimizer。ZeroRedundancyOptimizer 可以和 DistributedDataParallel ⼀起使⽤,以减少每个进
锰氧化物程优化器状态的⼤⼩。
气吸式玉米播种机
3. (测试版)⽀持对分布式集体进⾏性能分析。PyTorch 的性能分析⼯具 torch.profiler 和 torch.autograd.profiler 能够优化分布式
集体和点对点通信原语,包括 allreduce、alltoall、allgather、send/recv 等。
性能优化与⼯具
(稳定版) Freezing API原水管
模块冻结是将模块参数和属性值作为常量纳⼊ TorchScript 内部表⽰的过程。这允许进⼀步优化和专门化你的程序,既可⽤于
TorchScript 的优化,⼜可降低到其他后端。它被 optimation_for_mobile API、ONNX 等使⽤。
冻结被推荐⽤于模型部署。它可以帮助 TorchScript JIT 优化消除训练、调整或调试 PyTorch 模型所需的开销和簿记。它可以实现在⾮冻结图上语义上⽆效的图融合–⽐如融合 Conv-BN。更多细节,请参考⽂档。
(Beta 版) PyTorch Profiler
新的 PyTorch profiler 已经升级为测试版,利⽤ Kineto 进⾏ GPU 进⾏性能分析,利⽤ TensorBoard 进⾏可视化,现在是我们整个教程和⽂档的标准。
PyTorch 1.9 将对新的 torch.profiler API 的⽀持扩展到了更多的构建中,包括 Windows 和 Mac,并在⼤多数情况下推荐使⽤,⽽不是以前的 torch.autograd.profiler API。新的 API ⽀持现有的性能分析功能,集成了 CUPTI 库(仅限 Linux)以跟踪设备上的 CUDA 内核,并提供了对长期运⾏的作业的⽀持,例如。
def trace_handler(p):
output = p.key_averages().table(sort_by="self_cuda_time_total", row_limit=10)
print(output)
with profile(
activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],
# schedule argument specifies the iterations on which the profiler is active
schedule=torch.profiler.schedule(
wait=1,
warmup=1,
active=2),
# on_trace_ready argument specifies the handler for the traces
on_trace_ready=trace_handler
) as p:
for idx in range(8):
model(inputs)
# profiler will trace iterations 2 and 3, and then 6 and 7 (counting from zero)
p.step()
更多的使⽤例⼦可以在性能分析页⾯到。
PyTorch Profiler Tensorboard 插件具有以下新功能。
1. 带有 NCCL 通信概述的分布式训练摘要视图
冰晶画设备2. 追踪视图和 GPU 操作者视图中的 GPU 利⽤率和 SM 效率
3. 内存分析视图
4. 从微软 VSCod e启动时跳到源头
5. 能够从云对象存储系统加载轨迹
(Beta 版) Inference Mode API
推理模式 API 可以显著提⾼推理⼯作负载的速度,同时保持安全,确保永远不会计算出错误的梯度。当 no autograd 状态时,它提供了最好的性能。更多的细节,请参考推理模式本⾝的⽂档和解释何时使⽤它以及与 no_grad 模式区别的⽂档。
(Beta 版) torch.package
torch.package 是⼀种将 PyTorch 模型以独⽴、稳定的格式打包的新⽅法。⼀个包将包括模型的数据(如参数、缓冲区)和它的代码(模型架构)。将⼀个模型与它的全套 Python 依赖关系打包,再加上⼀个带有钉⼦的版本的 conda 环境描述,可以⽤来轻松复制训练。在⼀个独⽴的⼯件中表⽰⼀个模型,也将允许它在整个⽣产 ML 管道中发布和传输,同时保留纯 Python 表⽰的灵活性。更多细节,请参考⽂档。
(原型版) prepare_for_inference (for TorchScript Modules)
prepare_for_inference 是⼀个新的原型功能,它可以接收⼀个模块并进⾏图级优化,以提⾼推理性能,具体取决于设备。它旨在成为PyTorch 的原⽣选项,需要对⽤户的⼯作流程进⾏最⼩的改动。更多细节,请参见⽂档。
(原型版) Profile-directed typing in TorchScript
TorchScript 有⼀个硬性要求,即源代码必须有类型注释,这样才能编译成功。长期以来,我们只能通过尝试和错误(即通过逐⼀修复torch.jit.script 产⽣的类型检查错误)来添加缺失或不正确的类型注释,这既低效⼜费时。现在,我们通过利⽤现有的⼯具(如MonkeyType),为 torch.jit.script 启⽤了配置⽂件定向键⼊,这使得这个过程更加简单、快速和⾼效。更多细节,请参考⽂档。

本文发布于:2024-09-23 00:33:43,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/307717.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:优化   模型   性能   版本   功能   训练
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议