PyTorch
PyTorch 是一个 Python 包,提供两项高级功能:
- 具有强大 GPU 加速能力的张量计算(类似 NumPy)
- 基于 tape 的自动微分系统构建的深度神经网络
你可以在需要时复用你喜欢的 Python 包(如 NumPy、SciPy 和 Cython)来扩展 PyTorch。我们的主干健康状态(持续集成信号)可以在 hud.pytorch.org 查看。
关于 PyTorch 的更多信息
- 支持 GPU 的张量库
- 动态神经网络:基于 Tape 的自动微分
- Python 优先
- 命令式体验
- 快速且精简
- 无痛扩展
- 二进制包
- NVIDIA Jetson 平台
- 从源码安装
- 前置条件
- NVIDIA CUDA 支持
- AMD ROCm 支持
- Intel GPU 支持
- 获取 PyTorch 源码
- 安装依赖
- 安装 PyTorch
- 调整构建选项(可选)
- Docker 镜像
- 使用预构建镜像
- 自行构建镜像
- 历史版本
安装
快速开始
资源
交流
版本发布与贡献
团队
许可证
关于 PyTorch 的更多信息
学习 PyTorch 基础知识
从细粒度层面来看,PyTorch 是一个由以下组件组成的库:
| 组件 | 描述 | |------|------| | torch | 一个类似 NumPy 的张量库,具有强大的 GPU 支持 | | torch.autograd | 一个基于 tape 的自动微分库,支持 torch 中所有可微分的 Tensor 操作 | | torch.nn | 一个与 autograd 深度集成的神经网络库,专为最大灵活性而设计 | | torch.multiprocessing | Python 多进程处理,但具有跨进程共享 torch Tensor 的神奇内存共享功能。适用于数据加载和 Hogwild 训练 | | torch.utils | DataLoader 和其他便利工具函数 |
通常,PyTorch 被用作以下两种用途之一:
- 作为 NumPy 的替代品,以利用 GPU 的强大算力。
- 作为深度学习研究平台,提供最大的灵活性和速度。
进一步阐述:
支持 GPU 的张量库
如果你使用过 NumPy,那么你就使用过张量(也称为 ndarray)。PyTorch 提供的张量可以存在于 CPU 或 GPU 上,并能大幅加速计算。
我们提供了丰富多样的张量例程来加速并满足你的科学计算需求,例如切片、索引、数学运算、线性代数、归约操作。而且它们非常快!
动态神经网络:基于 Tape 的自动微分
PyTorch 有一种独特的构建神经网络的方式:使用并重放一台磁带录音机。
大多数框架(如 TensorFlow、Theano、Caffe 和 CNTK)对世界持有静态视角。人们必须构建一个神经网络,然后一遍又一遍地复用相同的结构。改变网络的行为方式意味着必须从头开始。
使用 PyTorch,我们使用一种称为反向模式自动微分的技术,它允许你以零延迟或开销任意改变网络的行为方式。我们的灵感来自多篇关于此主题的研究论文,以及当前和过去的工作,如 torch-autograd、autograd、Chainer 等。
虽然这项技术并非 PyTorch 独有,但它是迄今为止最快的实现之一。你可以在疯狂的研究中获得速度和灵活性的最佳组合。
Python 优先
PyTorch 不是对单体 C++ 框架的 Python 绑定。它被构建为深度集成到 Python 中。你可以像使用 NumPy / SciPy / scikit-learn 等一样自然地使用它。你可以用 Python 本身编写新的神经网络层,使用你喜欢的库,并使用 Cython 和 Numba 等包。我们的目标是在适当的地方不重复造轮子。
命令式体验
PyTorch 被设计为直观、思维线性且易于使用。当你执行一行代码时,它就会被执行。不存在异步的世界观。当你进入调试器或收到错误消息和堆栈跟踪时,理解它们非常直接。堆栈跟踪准确指向你的代码定义的位置。我们希望您永远不会因为糟糕的堆栈跟踪或异步且不透明的执行引擎而花费数小时调试代码。
快速且精简
PyTorch 具有最小的框架开销。我们集成了加速库,如 Intel MKL 和 NVIDIA(cuDNN、NCCL)以最大化速度。在核心层面,其 CPU 和 GPU 张量及神经网络后端已经成熟,并经过了多年的测试。因此,无论你运行小型还是大型神经网络,PyTorch 都相当快。
与 Torch 或某些替代方案相比,PyTorch 的内存使用极其高效。我们为 GPU 编写了自定义内存分配器,以确保你的深度学习模型具有最大化的内存效率。这使你能够训练比以前更大的深度学习模型。
无痛扩展
编写新的神经网络模块,或与 PyTorch 的 Tensor API 对接,被设计为直接且具有最少的抽象。你可以使用 torch API 或你喜欢的基于 NumPy 的库(如 SciPy)用 Python 编写新的神经网络层。如果你想用 C/C++ 编写层,我们提供了一个方便的扩展 API,它高效且具有最少的样板代码。无需编写包装代码。你可以在此处查看教程,在此处查看示例。
安装
二进制包
通过 Conda 或 pip wheel 安装二进制包的命令在我们的网站上:https://pytorch.org/get-started/locally/
NVIDIA Jetson 平台
NVIDIA 的 Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX 和 Jetson AGX Orin 的 Python wheel 在此处提供,L4T 容器在此处发布。它们需要 JetPack 4.2 及以上版本,由 @dusty-nv 和 @ptrblck 维护。
从源码安装
前置条件
如果你从源码安装,你需要:
- Python 3.10 或更高版本
- 完全支持 C++20 的编译器,如 clang 或 gcc(Linux 上需要 gcc 11.3.0 或更新版本)
- Visual Studio 或 Visual Studio Build Tool(仅限 Windows)
- 至少 10 GB 的可用磁盘空间
- 初始构建需要 30-60 分钟(后续重新构建会快得多)
- PyTorch CI 使用 Visual C++ BuildTools,它随 Visual Studio Enterprise、Professional 或 Community 版本提供。你也可以安装