专访田渊栋 | Torch升级版PyTorch开源,Python为先,强GPU加速

简介:

专访Facebook研究员田渊栋和PyTorch作者Soumith


新智元 :田博士,关于PyTorch的发布,请问可以采访您几个问题嘛?

田渊栋 :哦,你要问什么?我可以把问题转给Soumith。


新智元 :请问 PyTorch 除了是基于 Python,其它架构是否与 Torch 一样?

田渊栋 :基本C/C++这边都是用的torch原来的函数,但在架构上加了 autograd 这样就不用写backward 函数,可以自动动态生成computational graph 并且自动求导,反向传递后自动回收内存,这个让写程序变得更方便了。另一个重要的不同是权值(weights)和activation/gradInput分开了,这样同一个layer 可以复用很多次,存储的时候也不用 clear gradient,不像以前 torch 需要clone_many_times。另外从 numpy ndarray 可以转到torch.Tensor,不需要copy。


Lua这边一直有每个 thread 2G的限制,这个对写多线程的程序不是很有利。Python有GIL,所以一般用 multiprocessing 写程序,PyTorch针对这个有比较好的支持,比如支持进程间共享内存(这个对parameter server有利),支持shared Cuda context,等等。


我自己已经在用了,写了一个增强学习的框架,效果还是不错的。


新智元 :tensorflow也支持 python,请问这两种有什么区别呢?

Pytorch作者Soumith:像TensorFlow, Theano,Caffe以及CNTK都是静态的计算图结构。而PyTorch这边是动态地生成计算图结构(Computational Graph)的,所以可以在训练时动态改变图的拓扑,而不用改代码重新开始。


新智元:对GAN 和 深度强化学习支持怎么样?

田渊栋 :自带的tutorial里面已经有GAN的样本了,RL的框架我在写,在一些例子上已经达到了目前的最好水平。


新智元:您指的一些例子是什么类型的例子呢?


比如说OpenAI Gym Atari game Breakout-v0。


HN评论:深度学习库生态没有停滞


几个月前人们还说,深度学习库生态系统开始稳定。我从来不这么认为。深度学习库的最新前沿是确保对动态计算图的有效支持。


当需要完成的工作量是可变的时,动态计算图形出现。这可能是在我们处理文本时,一个例子是几个字,而另一个是文本的段落,或者当我们对可变大小的树结构执行操作时。这个问题在某些的领域尤其突出,例如自然语言处理。


PyTorch 很好地解决了这个问题,如 Chainer 和 DyNet。事实上,Pytorch 的构建直接从 Chainer 获得,尽管重构了并且设计得更快了。我已经看到所有这些在最近几个月,特别是在许多研究人员进行领域的前沿研究重新产生兴趣。当你使用新的架构时,你希望在框架允许范围内,获得最大的灵活性。


另一面,TensorFlow 不能很好地处理这些动态图问题。虽然有一些原始的动态结构,但它们不灵活,通常相当有限。在不久的将来,有计划允许 TensorFlow 变得更加动态,但添加它是一个挑战,特别是还要有效地做。


披露:我的Salesforce Research团队广泛使用Chainer,我的同事James Bradbury是PyTorch的贡献者,而它处于隐身模式。我们计划从Chainer过渡到PyTorch,以便将来的工作。


PyTorch 官网介绍


PyTorch 是一个 python 包,提供以下两个高级功能:


强大的 GPU 加速的张量计算(类似numpy)

构建基于 tape 的 autograd 系统的深度神经网络


在需要时,你可以再使用你喜欢的其他 python 包来扩展 PyTorch,例如 numpy,scipy 和Cython。


在粒度级别上,PyTorch 是一个由以下部分组成的库:




通常可以把 PyTorch 作为:


numpy 的替代,以使用 GPU 的能力;

一个深度学习研究平台,能够提供最大的灵活性和速度。


以下是更详细介绍:


一个支持 GPU 的 Tensor 库


如果你使用 numpy,那么你已经在使用 Tensors(也就是 ndarray)。






PyTorch 提供的 Tensors 支持 CPU 或 GPU,并为大量的计算提供加速。


我们提供多样的 tensor 程序以加速并适应用户的科学计算需要,如 slicing, 索引, 数学运算,线性代数,缩减。而且,速度非常快!


动态神经网络:基于 tape 的 Autograd


PyTorch 具有独特的构建神经网络的方法:使用并重放 tape recorder。


大多数框架,如 TensorFlow,Theano,Caffe 和 CNTK 都是静态的。使用者必须构建一个神经网络,并重复使用相同的结构。更改网络表现的方式意味着必须从头开始。


PyTorch 使用一种被称为反向模式自动微分(Reverse-mode auto-differentiation)的技术,能够让用户以零延迟或开销的方式任意改变网络表现。我们的灵感来源于几个相关话题如 autograd,autograd,Chainer 等的研究论文,包括当前的和过去的论文。


虽然这种技术不是 PyTorch 独有的,但它是迄今为止最快的实现之一。在研究中使用 PyTorch,你将得到最快的速度和最好的灵活性。




以Python为先


PyTorch 不是把 Python 绑到 C++ 框架上去,而是深度集成到 Python 语言中。你可以可以就像你用 numpy / scipy / scikit-learn 之类的一样使用。你可以用 Python 本身写新的神经网络层,可以用你最喜欢的库或者包,例如 Cython 和 Numba。我们的目标是尽量不要重新造轮子。


实践经验


PyTorch 符合直觉、好理解、易用。当你执行一行代码,它马上运行,不是跟异步的。当你进入 debug 或者收到错误信息进行 stack trace,都很容易理解。stack trace point 就是你代码的地方。我们不希望你因为差劲的 stack trace 或者 不同步和模糊的运行,而花上几个小时 debug。


又快又稳


PyTorch 具有最小的框架开销。 我们集成加速库,如英特尔MKL和NVIDIA(CuDNN,NCCL),以最大化速度。 在核心,它的CPU和GPU Tensor和神经网络后端(TH,THC,THNN,THCUNN)作为独立的库用 C99 API编写。


它们是成熟的,已经测试了多年。


因此,PyTorch是相当快 - 无论你运行小或大的神经网络。


相比 Torch 或其他一些框架,PyTorch的内存使用是非常高效的。 我们为GPU编写了自定义内存分配器,以确保您的深度学习模型具有最大的内存效率。 这使你能够训练比以前更大的深度学习模型。


轻松扩展


编写新的神经网络模块,或 PyTorch的Tensor API 的使用,其设计非常直接和最小的抽象。


你可以使用torch API或你最喜欢的基于numpy的库(如SciPy)在 Python 中编写新的神经网络层。


如果你想用C / C ++编写你的图层,我们提供一个基于cffi的扩展API,它是高效的,并且有最小的样板。没有需要编写的包装代码。


文章转自新智元公众号,原文链接

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
6月前
|
人工智能 中间件 数据库
沐曦 GPU 融入龙蜥,共筑开源 AI 基础设施新底座
沐曦自加入社区以来,一直与龙蜥社区在推动 AIDC OS 的开源社区建设等方面保持合作。
|
6月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
470 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
python torch基础用法
本教程系统讲解PyTorch基础,涵盖张量操作、自动求导、神经网络构建、训练流程、GPU加速及模型保存等核心内容,结合代码实例帮助初学者快速掌握深度学习开发基础,是入门PyTorch的实用指南。
747 6
|
12月前
|
人工智能 Linux API
119K star!无需GPU轻松本地部署多款大模型,DeepSeek支持!这个开源神器绝了
"只需一行命令就能在本地运行Llama 3、DeepSeek-R1等前沿大模型,支持Windows/Mac/Linux全平台,这个开源项目让AI开发从未如此简单!"
734 0
|
12月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
2147 0
|
12月前
|
机器学习/深度学习 并行计算 PyTorch
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
本文记录了在RTX 5070 Ti上运行PyTorch时遇到的CUDA兼容性问题,分析其根源为预编译二进制文件不支持sm_120架构,并提出解决方案:使用PyTorch Nightly版本、更新CUDA工具包至12.8。通过清理环境并安装支持新架构的组件,成功解决兼容性问题。文章总结了深度学习环境中硬件与框架兼容性的关键策略,强调Nightly构建版本和环境一致性的重要性,为开发者提供参考。
7852 64
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
|
11月前
|
人工智能 并行计算 开发者
CUDA重大更新:原生Python可直接编写高性能GPU程序
NVIDIA在2025年GTC大会上宣布CUDA并行计算平台正式支持原生Python编程,消除了Python开发者进入GPU加速领域的技术壁垒。这一突破通过重新设计CUDA开发模型,引入CUDA Core、cuPyNumeric、NVMath Python等核心组件,实现了Python与GPU加速的深度集成。开发者可直接用Python语法进行高性能并行计算,显著降低门槛,扩展CUDA生态,推动人工智能、科学计算等领域创新。此更新标志着CUDA向更包容的语言生态系统转型,未来还将支持Rust、Julia等语言。
736 3
CUDA重大更新:原生Python可直接编写高性能GPU程序
|
11月前
|
SQL 安全 算法
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
Python 3.14 引入了七大核心技术特性,大幅提升开发效率与应用安全性。其中包括:t-strings(PEP 750)提供更安全灵活的字符串处理;类型注解惰性求值(PEP 649)优化启动性能;外部调试器API标准化(PEP 768)增强调试体验;原生支持Zstandard压缩算法(PEP 784)提高效率;REPL交互环境升级更友好;UUID模块扩展支持新标准并优化性能;finally块语义强化(PEP 765)确保资源清理可靠性。这些改进使Python在后端开发、数据科学等领域更具竞争力。
509 5
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
|
10月前
|
IDE 开发工具 Python
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
259 4
|
人工智能 自然语言处理 API
Proxy Lite:仅3B参数的开源视觉模型!快速实现网页自动化,支持在消费级GPU上运行
Proxy Lite 是一款开源的轻量级视觉语言模型,支持自动化网页任务,能够像人类一样操作浏览器,完成网页交互、数据抓取、表单填写等重复性工作,显著降低自动化成本。
939 11
Proxy Lite:仅3B参数的开源视觉模型!快速实现网页自动化,支持在消费级GPU上运行