前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyTorch 1.8发布,支持AMD GPU和Python函数转换

PyTorch 1.8发布,支持AMD GPU和Python函数转换

作者头像
机器之心
发布于 2021-03-14 12:24:10
发布于 2021-03-14 12:24:10
6580
举报
文章被收录于专栏:机器之心机器之心

机器之心报道

编辑:魔王

近日,PyTorch 团队发布了 PyTorch 1.8 版本。该版本整合了自去年 10 月 1.7 版本发布以来的 3000 多次 commit,提供了编译、代码优化、科学计算前端 API 方面的主要更新和新特性。值得一提的是,该版本新增了对 AMD ROCm 的支持。

此外,PyTorch 1.8 版本还为大规模训练 pipeline 和模型并行化、梯度压缩提供了特性改进。该版本的主要亮点如下:

  • 支持 Python 函数转换;
  • 添加或稳定化 API,以支持 FFT (torch.fft)、线性代数函数 (torch.linalg);
  • 添加对复杂张量 autograd 的支持;
  • 多项更新用于提升 Hessian 与 Jacobian 矩阵计算的性能;
  • 改进分布式训练,包括提升 NCCL 可靠性、支持 pipeline 并行化、RPC profiling,以及通过添加梯度压缩来支持通信钩子(hook)。

(注:从 PyTorch 1.6 版本开始,PyTorch 特性分为 Stable(稳定版)、Beta(测试版)和 Prototype(原型版)。

此外,PyTorch 团队还对多个 PyTorch 库进行了主要更新,包括 TorchCSPRNG、TorchVision、TorchText 和 TorchAudio。

新增和更新 API

通过 torch.fft 支持 NumPy 兼容的 FFT 操作

PyTorch 1.7 版本提出了这一特性的 Beta 版,而在 1.8 版本中该特性更新为稳定版。FFT 支持旨在完成 PyTorch 支持科学计算的目的。torch.fft 模块和 NumPy 的 np.fft 模块实现了同样的功能,并且支持硬件加速和 autograd。

通过 torch.linalg 支持 NumPy 式的线性代数函数

torch.linalg 模块类似于 NumPy 中的 np.linalg 模块,支持 NumPy 式的线性代数操作,包括 Cholesky 分解、行列式、特征值等。

使用 torch.fx 进行 Python 代码转换

这一 Beta 特性支持 Python 代码转换,开发者可以利用它做 Conv/BN 融合、图模式量化、实现 vmap 等。鉴于 torch.fx 提供 PyTorch 代码的图表示,开发者可以用 Python 写任意变换或分析。

分布式训练

pipeline 并行化

这一新增的 Beta 特性提供了一个易用的 PyTorch API,可将 pipeline 并行化作为训练 loop 的一部分。

DDP 通信钩子

DDP 通信钩子是一个通用接口,用于控制 workers 间的梯度通信。

此外,PyTorch 1.8 还增加了一些 prototype 特性:

  • ZeroRedundancyOptimizer:有助于减少每个线程的内存占用;
  • Process Group NCCL Send/Recv:该特性允许用户在 Python 层(而非 C++ 层)实现集合操作;
  • CUDA-support in RPC using TensorPipe:该特性为使用 PyTorch RPC 和多 GPU 机器的用户带来速度提升;
  • Remote Module:该特性允许用户像操作本地模块那样操作远程 worker 上的模块。

支持 PyTorch Mobile

此次版本更新发布了一组新的移动端教程,包括在 iOS 端和安卓端实现图像分割 DeepLabV3 模型。PyTorch 还发布了新的 demo app,包括图像分割、目标检测、神经机器翻译、问答和视觉 transformer。

此外,这次发布还包括 PyTorch Mobile Lite Interpreter,该解释器可降低运行时二进制文件大小。

性能优化

为了帮助用户更好地监控性能变化,PyTorch 1.8 版本支持 benchmark utils,并开放了新的自动量化 API——FX Graph Mode Quantization。

硬件支持

在硬件支持方面,PyTorch 1.8 版本新增了两个 Beta 特性:

扩展 PyTorch Dispatcher,使之适应新型 C++ 后端;

支持 AMD ROCm。

需要注意的是,PyTorch 1.8 仅在 Linux 系统中支持 AMD ROCm。

参考链接:

https://pytorch.org/blog/pytorch-1.8-released/

https://github.com/pytorch/pytorch

https://pytorch.org/

https://twitter.com/cHHillee/status/1367621538791317504

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python中map()函数用法
对可迭代函数*iterables中的每个元素应用func方法,将结果作为迭代器对象返回。
王大力测试进阶之路
2020/07/23
6.3K0
装饰器、生成器,迭代器、Json & pickle 数据序列化
1、 列表生成器:代码例子 1 a=[i*2 for i in range(10)] 2 print(a) 3 4 运行效果如下: 5 D:\python35\python.exe D:/pytho
coders
2018/01/04
6370
装饰器、生成器,迭代器、Json & pickle 数据序列化
Python迭代器与生成器
当执行生成器的__next__的时候,代码会按照顺序去执行,当执行到yield时会返回并提出,yield后面的值就是返回值,然后记录代码执行的位置,并退出
py3study
2020/01/15
4620
python生成器和迭代器
第二,本次迭代的要依赖上一次的结果继续往下做,如果中途有任何停顿,都不能算是迭代。
用户7886150
2020/11/30
4990
迭代器与生成器
这一部分待加强!                 (一)迭代器 一:简介     迭代是Python最强大的功能之一,是访问集合元素的一种方式。     迭代器是一个可以记住遍历的位置的对象。     迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。     迭代器只能往前不会后退。     迭代器有两个基本的方法:iter() 创建迭代器对象和 next()访问迭代器。     字典、字符串、列表或元组对象都可用于创建迭代器 二:迭代器的创建     ①把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__()     ②__iter__() 方法返回一个特殊的迭代器对象,     这个迭代器对象实现了 __next__() 方法     并通过 StopIteration 异常标识迭代的完成。     ③__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象 三:迭代器协议的后台机制     for element in (1, 2, 3):             print(element)     在后台,for 语句在容器对象中调用 iter() 。     该函数返回一个定义了 __next__() 方法的迭代器对象,它在容器中逐一访问元素。     没有后续的元素时, __next__() 抛出一个 StopIteration 异常,     通知 for 语句循环结束。     可以用内建的 next() 函数调用 __next__() 方法;     了解了迭代器协议的后台机制,就可以很容易的给自己的类添加迭代器行为。     定义一个 __iter__() 方法,使其返回一个带有 __next__() 方法的对象。     如果这个类已经定义了 __next__() ,那么 __iter__() 只需要返回 self: 三:迭代器使用的必要性     列表效率高,但是需要将内容一次性读入,可能增加内存的负担,     如果列表太大,内存溢出。     range 返回一个列表     xrange 返回一个对象                 (二)生成器 一:简介     ①在 Python 中,使用了 yield 的函数被称为生成器(generator)     跟普通函数不同的是,生成器是一个返回迭代器的函数,     只能用于迭代操作,更简单点理解生成器就是一个迭代器     ②在调用生成器运行的过程中,每次遇到 yield 时函数会暂停,     并保存当前所有的运行信息,返回 yield 的值,     并在下一次执行 next() 方法时从当前位置继续运行。 二:创建生成器     ①一个简单的生成器:my_generator = (x*x for x in range(4))     和列表解析式只是括号不同,大数据处理时代替列表解析式。     ②和return的区别:一般的函数都是止于return,作为生成器的函数,由于有了yield,     遇到他则会暂时挂起,如果之后还有return,则直接抛出StopIteration异常。 三:本节最后一句:编程中可以不使用生成器。
py3study
2020/01/19
4010
Python基础11-迭代器,生成器
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
2860
Python基础11-迭代器,生成器
python 可迭代对象 迭代器 生成器_Python3迭代器获取
初学者在日常提升Python基本功的时候,可能会被Python的迭代器和生成器搞晕,之前在学习和使用时,本来for in 循环体和enumerate函数用的飞起,觉得自己已经彻底了解了Python的迭代特性,但接触了迭代器和生成器后,突然感觉懵逼,大概率会被可迭代、迭代器、生成器等概念搞的不知所向,本文就是结合日常项目应用,对Python的迭代概念进行系统性的全面解析,包括其底层实现原理,还有一些常见的应用,希望能帮助更多人,同时也算作给自己梳理思路。
全栈程序员站长
2022/11/10
1.1K0
Pytest标记预期失败得测试用例@pytest.mark.xfail()
除了测试函数中使用这个方法pytest.xfail()外,xfail还有一种使用方法。就是@pytest.mark.xfail()标记预期会失败的用例,即期望测试用例是失败的,但是不会影响测试用例的的执行。
王大力测试进阶之路
2020/07/23
9590
python 迭代器/iterator与生成器/generator的区别
可以看到,i和g是不同类的实例,拥有的属性也不同,虽然都可以使用next方法取值,但是i可以序列化,g不可以序列化,说明g的值是运行时动态生成,而i值是固定生成
未来sky
2020/09/29
5750
干货推荐:看过介绍 Python 迭代器和生成器最易懂、最全面的文章
迭代器:是访问数据集合内元素的一种方式,一般用来遍历数据,但是他不能像列表一样使用下标来获取数据,也就是说迭代器是不能返回的。
崔庆才
2019/05/06
6110
Python 迭代器和生成器有什么用?
本文将探讨python的迭代器和生成器在实际场景中的一些巧妙用法。掌握迭代器和生成器的使用,能够让开发者在解决实际问题时更加得心应手。
每周聚焦
2024/06/14
1520
Python 迭代器和生成器有什么用?
一文彻底搞懂Python可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)的概念
在Python中可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)这几个概念是经常用到的,初学时对这几个概念也是经常混淆,现在是时候把这几个概念搞清楚了。
阳仔
2019/08/01
6.5K0
Python3 迭代器与生成器
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
AlexZhang
2021/12/02
3800
[快学Python3]迭代器和生成器
迭代器 迭代是Python最强大的功能特色,是遍历访问序列元素的一种方式。 迭代器的特性是: 可以记住当前遍历位置 只能往前遍历,不能后退 从序列的第一个元素开始访问,直至所有元素被访问完 有两个基本方法: iter() 和 next() 字符串、列表或元组对象可以用于创建迭代器 下面看以下实例: # -*- coding:utf-8 -*- __author__ = '苦叶子' import sys if __name__ == "__main__": seq_tuple = (1, 2, 3
苦叶子
2018/04/09
1.3K0
Python教程第5章 | Python迭代器和生成器
比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历这个 list 或 tuple ,这种遍历就是迭代。
仲君Johnny
2024/01/24
2650
Python教程第5章 | Python迭代器和生成器
python基础-迭代器和生成器
我们可以使用__closure__ 来检测函数是否是闭包. 使用函数名.__closure__返回cell就是 闭包. 返回None就不是闭包
以谁为师
2019/05/28
7310
Python3 | 筑基期, 推导式、迭代器、生成器!
描述:前面,我们一起学习了Python3开发中使用最多的函数(Function),相信大家在作者的实践下也已经掌握函数的创建、多参数的传递,以及匿名函数、闭包了吧,这一章我们一起学习Python3编程中的推导式、迭代器以及生成器等相关知识,它也是Python编程中进阶常用的部分,对于程序健壮性以及效率都有所帮助,所以说也是需要我们掌握的。
全栈工程师修炼指南
2024/07/29
1260
Python3 | 筑基期, 推导式、迭代器、生成器!
迭代器和生成器
Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。
全栈程序员站长
2022/07/21
4950
python3.7 迭代器和生成器
#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 迭代器和生成器 #迭代器协议: ''' 1、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项, 要么就引起一个StopIteration异常,已终止迭代,只能往后走,不能往前退. 2、可迭代对象:实现了迭代器协议的对象(对象内部定义一个__iter__()方法),节省内存 3、协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(如for、sum
py3study
2020/01/19
4610
python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05
迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的)
suwanbin
2019/09/26
1.5K0
python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05
推荐阅读
相关推荐
Python中map()函数用法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档