什么是 PyTorch?

作者

Dave Bergmann

Senior Staff Writer, AI Models

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

什么是 PyTorch?

PyTorch 是一个基于软件的开源深度学习框架,用于构建神经网络,将 Torch 的机器学习 (ML) 库与基于 Python 的高级 API 相结合。作为一款主流的深度学习框架,PyTorch 具备灵活性和易用性,支持多种 AI 模型训练与部署方式。这些优点使 PyTorch 成为学术和研究界领先的机器学习框架,也越来越受到企业在自然语言处理、图像识别等 AI 应用场景中的关注。

PyTorch 支持多种神经网络架构,从简单的线性回归算法到复杂的卷积神经网络和用于计算机视觉自然语言处理 (NLP) 等任务的生成式转换器模型。PyTorch 基于广为人知的 Python 编程语言构建,并提供广泛的预配置(甚至预训练)模型库,使数据科学家能够构建和运行复杂的深度学习网络,同时最大限度地减少在代码和数学结构上花费的时间和精力。

PyTorch 还允许数据科学家实时运行和测试部分代码,而不是等待整个代码实现 – 对于大型深度学习模型来说,这可能需要很长时间。这使得 PyTorch 成为快速原型设计的绝佳平台,并且还大大加快了调试流程。

PyTorch 最初由 Facebook AI Research(现为 Meta)开发,于 2017 年配置为开源语言,自 2022 年起由 PyTorch Foundation(隶属于大型 Linux Foundation)管理。该基金会为深度学习社区提供一个中立空间,以合作并进一步开发 PyTorch 生态系统。

2023 年,IBM 成为 PyTorch Foundation 的主要成员,他们已合作开展两个重大项目:支持更高效地训练具有数十亿参数的灵活 AI 基础模型,以及大大提高 AI 训练检查点操作的成本效益。IBM watsonx 产品组合使用 PyTorch 为人工智能基础模型提供企业级软件堆栈,从端到端训练到模型微调。

专家为您带来最新的 AI 趋势

获取有关最重要且最有趣的 AI 新闻的精选洞察分析。订阅我们的每周 Think 时事通讯。请参阅 IBM 隐私声明

谢谢!您已订阅。

您的订阅将以英语提供。您会在每份时事通讯中找到一个取消订阅链接。您可以在此处管理您的订阅或取消订阅。有关更多信息,请参阅我们的 IBM 隐私声明

PyTorch 的工作原理是什么?

PyTorch 的数学和编程结构可以简化机器学习工作流程,而不会限制深度神经网络的复杂性或性能。

Python

Python 是一种广泛用于数据科学的通用高级编程语言,使其成为数据科学家将工作扩展到深度学习网络主动建模的直观选择。Python 的简单语法易于阅读,学习时间相对较少,并且可以在任何操作系统上运行,如 Windows、macOS、Linux 或 Unix。三年多来,Python 一直是 GitHub 上第二大最常用的编程语言,并于 2019 年超过 Java。它的受欢迎程度持续增长,2022 年提升了 22.5%。1

这种灵活性和简洁性帮助培育了一个强大的 Python 开发人员在线社区,他们在各种 Python 库和 API 上进行协作,例如用于数学运算的 Numerical Python (NumPy)、用于数据操作的 Pandas 或用于数据可视化的 matplotlib 以及教育资源。该社区还制作了大量 PyTorch 库,旨在减少机器学习编码的单调性和猜测,使开发人员和数据科学家能够专注于创新,而不是机械式任务编写。

张量

对于任何机器学习算法,即使是用于表面上非数字信息(如声音或图像)的算法,数据也必须以数字形式表征。PyTorch 则通过张量实现数据表征,张量是该平台计算的数据的基本单位。

针对机器学习,张量是一个多维数字数组,其功能类似于数学簿记设备。在语言上,“张量”是个通用术语,包含一些更熟悉的数学实体:

  • 标量是一种零维张量,包含一个数字。

  • 向量是一种一维张量,包含多个相同类型的标量。元组是一种一维张量,包含不同数据类型。

  • 矩阵是一种二维张量,包含多个相同类型的向量。

  • 具有三个或更多维度的张量(如计算机视觉算法中用于表示 RGB 图像的三维张量)统称为 N 维张量

PyTorch 张量的功能与 NumPy 中使用的 ndarray 类似,但与只能在中央处理单元 (CPU) 上运行的 ndarray 不同,张量也可以在图形处理单元 (GPU) 上运行。GPU 的计算速度比 CPU 快得多,考虑到深度学习常见的海量数据和并行处理,这是一个主要优势。

除了对模型的输入和输出进行编码之外,PyTorch 张量还对模型参数进行编码:在机器学习中“学习”的权重、偏差和梯度。张量的这一属性可以实现自动微分,这是 PyTorch 最重要的功能之一。

模块

PyTorch 使用模块作为深度学习模型的构建块,可以快速、直接地构建神经网络,而无需手动编码每个算法的繁琐工作。

模块可以(而且经常)包含其他嵌套模块。除了可以创建更复杂的多层神经网络外,还可以轻松地将这些复杂的深度学习模型保存为单个命名模块,并在不同的机器、CPU 或 GPU 之间传输。PyTorch 模型甚至可以使用 Torchscript 在非 Python 环境(如 C++)中运行,帮助弥合研究原型和生产部署之间的差距。

从广义上讲,PyTorch 中用于构建和优化深度学习模型的模块主要分为三类:

  • nn 模块部署为神经网络的层。torch.nn 软件包包含一个大型模块库,可以执行卷积、池化和回归等常见操作。例如,torch.nn.Linear(n,m) 调用了一个具有 n 个输入和 m 个输出的 线性回归算法(其初始输入和参数将在随后的代码行中设置)。

  • autograd 模块提供一种自动计算梯度的简单方法,用于通过梯度下降优化模型参数,适用于神经网络中运行的任何函数。将任何张量附加上 requires_grad=True 会向 autograd 发出信号,表示对该张量的每一个操作都应该被跟踪,从而启用自动微分。

  • Optim 模块将优化算法应用于这些梯度。Torch.optim 提供适用于各种优化方法的模块,例如随机梯度下降 (SGD) 或均方根传播 (RMSprop),以满足特定的优化需求。

动态计算图

动态计算图 (DCG) 是深度学习模型在 PyTorch 中的表示方式。抽象地说,计算图映射数学系统中不同操作之间的数据流:在深度学习中,计算图实质上是将神经网络的代码转化为流程图,指示每个节点执行的操作以及网络中不同层之间的依赖关系 – 将输入数据转化为输出数据的步骤和序列安排。

动态计算图(如 PyTorch 中使用的计算图)与静态计算图(如 TensorFlow 中使用的计算图)的区别在于前者将计算的准确规范以及它们之间的关系推迟到运行时。换言之,静态计算图需要完全确定并编译整个神经网络的架构才能运行,而动态计算图可以在运行中进行迭代和修改。

因此动态计算图对于调试和原型设计特别有用,因为可以单独更改或运行模型代码的特定部分,而无需重置整个模型。对于面向复杂计算机视觉和 NLP 任务的超大型深度学习模型来说,重置模型可能会浪费时间和计算资源。这种灵活性可扩展到模型训练,因为在反向传播过程中可以轻松地反向生成动态计算图。

虽然它们的固定结构可以提高计算效率,但静态计算图的灵活性有限:例如,构建一个根据输入数据使用不同层数的模型(例如可以处理不同图像尺寸的卷积神经网络 (CNN))对于使用静态图来说是极其困难的。

自动微分

反向传播是一种广泛使用的神经网络训练方法,尤其是在监督学习中。首先,在前向传递中,模型获得输入 (x) 并预测输出 (y);从该输出向后推算,使用损失函数测量模型在不同 x 值下的预测误差。梯度下降法通过对损失函数微分求导,可一次一层地调整神经网络中的权重。

PyTorch 的 autograd 模块使用称为链式法则的微积分公式为其自动微分技术提供支持,通过将复杂导数拆分为简单导数,稍后组合简单导数,从而计算复杂导数。Autograd 自动计算并记录计算图中执行的所有操作的梯度,大大减少反向传播工作。

当运行已训练模型时,autograd 就没有必要使用计算资源。附加任何 require_grad=False 的张量操作将指示 PyTorch 停止跟踪梯度。

数据集和数据加载器

使用训练深度学习模型所需的大型数据集可能非常复杂且计算要求较高。PyTorch 提供两种数据原语:数据集和数据加载器,以方便数据加载并使代码更易于阅读。

  • torch.utils.data.Dataset 存储数据样本及对应标签
  • torch.utils.data.Dataloader 在数据集周围包装了一个可迭代对象(可以对其进行操作的对象),以便轻松访问样本
Mixture of Experts | 12 月 12 日,第 85 集

解码 AI:每周新闻摘要

加入我们世界级的专家小组——工程师、研究人员、产品负责人等将为您甄别 AI 领域的真知灼见,带来最新的 AI 资讯与深度解析。

PyTorch 生态系统

借助 PyTorch 社区成员开发的强大的工具、库和扩展生态系统,PyTorch 的核心功能得以完善。许多其他开源库(包含特定用途的模块、预配置神经网络甚至预训练模型)可用于完善预安装 Torch 库。

Torchvision

Torchvision 是一个工具包,包含用于各种图像分类、物体检测和图像分割任务的模块、网络架构和数据集。

深入了解 Torchvision
TorchText

TorchText 提供数据集、基本文本处理转换和预训练模型等资源以用于 NLP。

深入了解 TorchText
开放神经网络交换

开放神经网络交换 (ONNX) 确保 AI 框架之间的互操作性,支持用户轻松将 PyTorch 模型转移到其他平台。

深入了解开放神经网络交换 (ONNX)
教程

PyTorch.org 上提供许多有用的教程。例如,本中级教程通过训练 AI 玩电子游戏来教授深度强化学习的基础知识。

浏览 PyTorch 教程

安装和运行 PyTorch

PyTorch 可以在本地系统和云平台上以不同的配置安装和运行。

在本地运行 PyTorch 需要使用 Anaconda 软件包管理器、HomebrewPython 网站安装 Python。

PyTorch 可以通过 Anaconda 使用命令 conda install pytorch torchvision -c pytorch 在本地安装,也可以使用命令 pip3 install torch torchvision 通过 pip 进行本地安装。建议使用 Anaconda,因为它在一个沙盒安装中提供了所有 PyTorch 依赖项(包括 Python)2

PyTorch 还可在云平台上运行,包括 Amazon Web Services、Google Cloud 和 Microsoft Azure。

建议(但不是必需)使用 NVIDIA GPU,以便利用 PyTorch 对 CUDA(统一计算设备架构)的支持,该架构提供的训练和性能远超 CPU。

相关解决方案
IBM watsonx.ai

使用面向 AI 构建器的新一代企业级开发平台 IBM watsonx.ai,可以训练、验证、调整和部署生成式 AI、基础模型和机器学习功能。使用一小部分数据,即可在很短的时间内构建 AI 应用程序。

了解 watsonx.ai
人工智能 (AI) 解决方案

借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。

深入了解 AI 解决方案
AI 咨询与服务

通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。

深入了解人工智能服务
采取后续步骤

一站式访问跨越 AI 开发生命周期的功能。利用用户友好型界面、工作流并访问行业标准 API 和 SDK,生成功能强大的 AI 解决方案。

深入了解 watsonx.ai 预约实时演示