终于可用可组合函数转换库!PyTorch 1.11发布,弥补JAX短板,支持Python 3.10

简介: 终于可用可组合函数转换库!PyTorch 1.11发布,弥补JAX短板,支持Python 3.10

PyTorch 1.11、TorchData 和 functorch 现已推出。


近日,PyTorch 官方宣布推出 PyTorch 1.11,此版本由 1.10 版本以来的 3,300 多次 commits 组成,由 434 位贡献者完成。此外,本次 PyTorch 官方同时发布了受 JAX 启发的库 TorchData 和 functorch 的 Beta 版本。

假如你是一名长期的 TensorFlow 用户,你一直想切换到 JAX 或 PyTorch,或许 1.11 版本能为你带来帮助。


PyTorch地址:https://pytorch.org/blog/pytorch-1.11-released/

本次亮点可总结为如下:

TorchData 是一个新的库,用于通用模块化数据加载原型,可以轻松构建灵活、高性能的数据 pipeline。

functorch 是一个向 PyTorch 添加可组合函数转换的库。

分布式数据并行 (DDP) 静态图优化趋于稳定。


网友也不禁感叹:终于可以安装 functorch,一套受 JAX 启发的 ops!vjp、 jvp、 vmap... 终于可用了!!!


推出 TorchData

TorchData Beta 版:这是一个通用模块化数据加载原型库,用于轻松构建灵活且高性能的数据 pipeline。根据社区反馈,PyTorch 官方发现现有的 DataLoader 将太多的功能捆绑在一起,难以扩展。此外,不同的用例通常必须重写相同的数据加载实用程序。TorchData 的目标是通过 Iterable-style 和 Map-style 的构建块 DataPipes 来实现可组合数据加载,这些构建块与 PyTorch 的 DataLoader 达到开箱即用。

DataPipe 接受 Python 数据结构上一些访问函数:__iter__用于 IterDataPipe,__getitem__用于 MapDataPipe,它们会返回一个新的访问函数。你可以将多个 DataPipe 连接在一起,形成数据 pipeline,以执行必要的数据转换工作。PyTorch 官方已经实现了超过 50 个 DataPipes,它们提供了不同的核心功能,比如打开文件、解析文本、转换样本、缓存、shuffling 和批处理。那些对连接到云提供商(如谷歌 Drive 或 AWS S3)感兴趣的用户, fsspec 和 iopath DataPipes 会提供帮助。想了解更对关于 IterDataPipe 和 MapDataPipe 的研究者,可以参考官方文档。

在 PyTorch1.1 版本中,一些 PyTorch 域库已经将数据集迁移到 DataPipes。在 TorchText 中提供的流行数据集是使用 DataPipes 实现的,其 SST-2 二进制文本分类教程的一部分演示了如何使用 DataPipes 为模型预处理数据。在 TorchVision 和 TorchRec 中还有其他数据集的原型实现。你可以参考官方提供的具体的示例。

TorchData 文档已经上线,它包含一个教程,教程介绍了如何使用 DataPipes、将它们与 DataLoader 一起使用、如何实现自定义。

推出 functorch

PyTorch 官方宣布推出 functorch 的首个 beta 版本。受到 Google JAX 的极大启发,functorch 是一个向 PyTorch 添加可组合函数转换的库。该库旨在提供可组合的 vmap(向量化)和 autodiff 转换,可与 PyTorch 模块和 PyTorch autograd 一起使用,并具有良好的渴望模式(eager-mode)性能。

可组合的函数转换可以帮助解决当前在 PyTorch 中难以实现的许多用例:

计算每样本梯度(per-sample-gradients)(或者其他每样本量)

单机运行模型集合

在 MAML 内循环中高效地批处理任务

高效地计算(批处理)雅可比矩阵(Jacobians)和黑塞矩阵(Hessians)


vmap(向量化)、vjp(反向模式 AD)和 jvp(前向模式 AD)转换的组合使得用户毫不费劲地表达上述内容,无需为每个转换设计单独的库。

分布式训练:稳定的 DDP 静态图

DDP 静态图假设用户的模型在每次迭代中都使用相同的一组已使用 / 未使用的参数,因此它可以确定地了解相关状态,例如哪些钩子(hook)将触发、钩子将触发多少次以及第一次迭代后的梯度计算就绪顺序。

静态图在第一次迭代中缓存这些状态,因此它可以支持 DDP 在以往版本中无法支持的功能,例如无论是否有未使用的参数,在相同参数上支持多个激活检查点。当存在未使用的参数时,静态图功能也会应用性能优化,例如避免遍历图在每次迭代中搜索未使用的参数,并启用动态分桶(bucketing)顺序。DDP 静态图中的这些优化为一些推荐模型带来了 10% 的 QPS 增益。

要启用静态图,只需在 DDP API 中设置 static_graph=True ,如下代码所示:


ddp_model = DistributedDataParallel(model, static_graph=True)


PyTorch 1.11一些更新

在 Python API 方面:修复了 python deepcopy 以正确复制 Tensor 对象上的所有属性,此更改可确保 Tensor 上的 deepcopy 操作能正确复制所有属性(而不仅仅是普通的 Tensor 属性)。


在 torch.linspace 和 torch.logspace 中,steps 参数不再是可选的。此参数在 PyTorch 1.10.2 中默认为 100,但已被弃用。在 PyTorch 1.11 中,它不再是可选的。


在 CUDA 方面,删除了 THCeilDiv 函数和相应的 THC/THCDeviceUtils.cuh header;删除 THCudaCheck;删除 THCudaMalloc(), THCudaFree(), THCThrustAllocator.cuh。

添加复数支持 Adagrad 和 Adadelta 优化器;

添加 torch.nn.utils.rnn.{unpack_sequence,unpad_sequence}函数;

为 GPU 上的 CSR 张量添加了 torch.sparse.sampled_addmm;


基础设施支持:

添加了对 ROCm 4.3.1 的支持

添加了对 ROCm 4.5.2 的支持

添加了对 CUDA 11.5 的支持

添加了对启用 CUDA 的 Bazel 构建的支持

添加了对 Python 3.10 的支持


更多内容请参考:https://github.com/pytorch/pytorch/releases/tag/v1.11.0

网友评论

PyTorch 1.11 的发布,给用户带来了一些惊喜。有网友表示,我都转到 JAX 了,这波是要诱惑我回归 PyTorch 啊。


更有网友认为,PyTorch 1.11 将成为游戏改变者(game-changer)。


还有网友对首个 beta 版本的 functorch 库表示了肯定,有了它,终于补足了与 JAX 相比的一块短板。

相关文章
|
16天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
20天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
51 0
|
6天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
13天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
49 4
|
13天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
25 2
|
18天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
38 7
|
19天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
24 3
|
21天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
31 2
|
12天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
18天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
37 0
下一篇
无影云桌面