什么是 PyTorch?

复制 URL

PyTorch 是一个开源软件库,开发人员可以利用它将不同代码组合起来,构建能够学习并识别数据模式的 AI“大脑”。从更专业的技术层面来讲,PyTorch 支持开发人员利用模块化层来搭建并训练复杂的神经网络,用于执行高级机器学习任务。 

探索红帽 AI

PyTorch 之所以越来越受欢迎,是因为它优先考虑开发人员体验,并支持实时灵活调整模型结构。用户在前端使用 Python 作为编程语言与它交互,而 PyTorch 则在后端采用 C++(如果有 NVIDIA 图形处理单元,则使用 CUDA)来执行繁重的计算任务。这种混合方法既提供了简洁的用户界面,又能充分发挥计算能力。

PyTorch 是 PyTorch 基金会(隶属于 Linux® 基金会)旗下的开源项目。这种开放治理模式意味着 PyTorch 可以免使用,由开源社区持续迭代优化,并且完全可审计。开发人员可以查阅源代码,并验证该框架处理数据的方式。 

除了秉承开源理念之外,PyTorch 的底层架构设计还兼顾灵活性与可扩展性,并确保不同硬件平台或云提供商的每位用户都能轻松使用。 

为何 PyTorch 生态系统对 AI 的未来至关重要

实施 AI 技术的 4 个关键注意事项

PyTorch 可为开发人员提供设计和部署人工智能所需的基础组件。PyTorch 不仅让开发人员无需从头构建复杂系统,还提供直观的 Python 原生开发体验和丰富的开箱即用机器学习模型。其核心优势在于灵活性,使开发人员能够在 AI 模型运行过程中实时进行修改和实验。 

让我们逐步拆解机器学习模型的构建与运行流程,看看 PyTorch 在其中发挥的作用:

规划与数据准备
第一步需要明确问题并准备数据。PyTorch 并非数据清理工具,因此开发人员会使用其他独立工具(如 Pandas 或 SQL)来整理数据。他们还可能使用 Docling 来解析文档,并将其转换为结构化数据。PyTorch 随后获取这些准备好的数据,并将其输送到神经网络中。 

模型训练
在此阶段,PyTorch 充当开发人员用于设计和训练 AI 模型的主要工作空间。代码编写完成后,PyTorch 会充当通用桥梁,将数据张量推送到您的硬件加速器中:无论是使用 CUDA 的 NVIDIA 图形处理单元(GPU)、通过 ROCm 运行的 AMD GPU,还是采用 Intel 和 Apple Silicon 的系统(下文将详细介绍 CUDA 与张量)。对于企业 AI 模型,一种常见的做法是将训练代码打包到一个 Docker 容器中,然后将其部署到 Kubernetes 云集群(下文也将详细介绍 Docker 与 Kubernetes。)。

模型评估
在此阶段,开发人员使用 PyTorch,通过一组全新的数据来测试模型的性能。此时,开发人员会冻结模型的内部设置(即暂停学习),以便评估其本身的预测性能。

部署
开发人员使用 PyTorch 完成模型训练后,会得到一个包含大量经调优数学设置(即权重与偏置,也称为模型参数)的大型文件。此时,AI 将从训练阶段转入推理阶段。此时 AI 将停止学习,开始基于已有训练成果进行预测。要将模型投入使用,可以将这个 AI“大脑”打包成生产环境使用的 Docker 镜像,并发送到 Amazon Web Services(AWS)、Google Cloud 或 Microsoft Azure 等云平台。模型部署到云端后,Kubernetes 将负责管理基础架构和弹性扩展,而 vLLM 等推理引擎则负责优化计算速度与性能。 

您可以使用 PyTorch 来构建机器学习和深度学习应用。它广泛用于训练:

大语言模型(LLM):OpenAI 早期的 GPT 模型以及 Meta 的 Llama 系列,均依托 PyTorch 进行开发训练。

计算机视觉:自动驾驶汽车、医学影像和人脸识别软件通常使用 PyTorch(特别是 TorchVision 库包)来构建需要图像分类和对象检测辅助的管道。 

图像生成器:您可以使用 PyTorch 来训练文本转图像模型,它提供必要的底层数学运算能力,能够分析数百万乃至数十亿张图像,并教会 AI 如何生成视觉内容。 

自然语言处理(NLP)与语音:您可以使用 PyTorch 来训练文本转语音和语音转文本模型,它能够解读声波与结构化可读文本之间的关联。此外,PyTorch 还可用于开发翻译工具。

张量是现代 AI 的基本构成要素。文字、图像、视频以及音频波形,都要先转换为张量,才能交由 AI 模型进行处理。 

PyTorch 有时被称为一种用于对张量进行编程的库。张量是由数字按一定结构排列而成的数据,用于表示原始数据与模型参数。PyTorch 提供了构建和运行深度神经网络所需的各类工具。将结构化张量输入这些网络,PyTorch 为 AI 模型的计算“大脑”提供支持。 

简单来说,张量就是一个用于存放数字的容器。它既可以是一个单独的数字(也称为标量),也可以是一个由数字组成的多维网格。根据维度数量的不同,张量分为以下不同规格:

  • 标量是一个零维张量,仅包含一个单独的数字。
  • 向量是一个一维张量‌,即一排标量或一行数字。
  • 矩阵是一个二维张量,即一个数字网格,类似于电子表格。
  • 三维或更高维的张量被称为高维张量。它由多层网格嵌套而成,类似于魔方。 
A diagram illustrating tensors from 0D to 3D as a scalar, a vector, a matrix, and a cube

张量还可以继续增加维度,例如形成四维和五维张量。更高维度的张量能让 PyTorch 对彩色图像或视频序列等复杂数据进行堆叠与结构化处理。

 

A diagram of tensors: a single 3D cube, a row of 4D cubes, and a 3x3 block of 5D cubes

不过等等,我们为什么要探讨维度呢?

PyTorch 在处理数据时,会将信息以张量的形式存放于高维空间中。高维空间是一个抽象的数学领域,拥有数十甚至数千个方向和维度。AI 模型可以在这个空间中,通过映射和测量坐标来绘制和分析概念。

由于我们身处三维世界,人类很难想象一个拥有数千个维度的空间。但对于计算机而言,借助线性代数将数据映射到高维空间,并计算各数据点之间的空间关系,正是 AI 实现学习的一种方式。 

使用 PyTorch,您可以将数据转换为结构化的数字网格(张量),并将张量传递给神经网络。当神经网络处理这些数据时,它会利用数据逐步调整内部参数(根据模型的不同,参数数量可以从几十、几百到数万亿不等)。这一过程可以教会模型逐渐识别数据中的规律和关联。通过学习这些模式,模型便能够对从未见过的新信息进行预测。正是这种习得的能力,最终形成了所谓的 AI“大脑”。

PyTorch 和 TensorFlow 都是开源工具,二者通过将数据转化为张量并将这些张量映射到数字空间,助力计算机进行学习。PyTorch 侧重于灵活性与易用性,而 TensorFlow 则注重可扩展性与结构化。 

PyTorch 由 Meta(原 Facebook)于 2017 年作为开源产品发布。它最初是一款内部工具,从一开始就被设计为以研究为先的框架,旨在提供一种更快速、更灵活的神经网络架构测试方式。由于开发人员认为它比 TensorFlow 更易上手,并且支持快速迭代,因此 PyTorch 逐渐得到广泛采用。

TensorFlow 由 Google 于 2015 年作为开源产品发布。它最初是一款用于研究和生产的内部工具,专为在大型企业级系统上运行而设计。因此,TensorFlow 在需要服务数百万用户和运行大规模云服务器的企业环境中得到广泛应用。

如今,PyTorch 和 TensorFlow 拥有许多共同特性,并在发展过程中相互借鉴,不断改进。 

CUDA(全称为统一计算设备架构)是一款软件平台,支持开发人员编写可在 NVIDIA GPU 上运行的代码,以进行并行处理。PyTorch 将 CUDA 作为一座数字桥梁,将计算任务从计算机的主处理器转移到 NVIDIA GPU 上,从而高速执行数十亿次计算。 

不过,使用 PyTorch 并不强制要求配备显卡或 CUDA。如果没有 CUDA 或 ROCm 等受支持的 GPU 平台,PyTorch 会自动默认在计算机的中央处理单元(CPU)中运行工作负载。使用 CPU 运行 PyTorch 完全可以满足调试或运行小型模型的需求,但如果您想让大规模神经网络的数小时级数据处理任务压缩到毫秒级完成,CUDA 便是 PyTorch 最理想的搭档。 

计算图是数学步骤的可视化表示。它会追踪数据在数学系统内的流转路径,标明 PyTorch 在每个节点执行的运算,并突出显示各网络层之间的依赖关系。

在 AI 开发中,计算图为模型学习提供了蓝图。它会追踪输入如何转化为输出,从而为计算机提供一条清晰的路径,以便在需要计算误差和调整内部参数时进行反向追溯。

什么是动态计算图(DCG)?

PyTorch 使用动态计算图(DCG)来运行深度学习模型。DCG 与常规计算图(也称为静态图)之间的区别,归根结底在于灵活性。 

要直观理解静态计算图与动态计算图的区别,可以将数据想象成一列火车,深度学习模型的架构则是火车行驶的轨道。 

静态图就好比要先铺完整条轨道,才能让火车在上面行驶。每列火车都必须沿着同一条路线行驶,任何必要的绕行或转弯都必须预先考虑并提前铺设好。如果一列火车载着数据驶来,而您尚未针对所需路线铺设轨道,系统就会崩溃,您不得不重新铺设轨道。换句话说,静态图要求您在运行任何数据之前,必须先将整个模型完整构建出来。 

而动态图就好比在每列火车出发前才为它设计一条新路线,并根据火车所载内容来定制路线。如果数据是一个短句,PyTorch 就搭建一条短轨道,让数据沿其通过模型。如果数据是一大段文本,PyTorch 中的动态图则会铺设一条更长的轨道,来让数据通过模型。

动态方法的优势在于每轮迭代都具有灵活性,并且更便于调试。由于 PyTorch 是实时逐行铺设轨道,一旦出现问题,火车就会停在导致错误的那一行,从而更容易定位问题。 

相比之下,静态计算图只有在整条轨道铺设完毕后才会暴露错误,而且往往无法明确指出问题所在。可想而知,这会给人带来很强的挫败感。 

什么是 Autograd?

Autograd(自动微分)是 PyTorch 的内置引擎,可自动进行导数与梯度计算。PyTorch 采用一种称为“磁带式”(或“记录器式”)系统的特定方法,其工作原理类似于盒式磁带或录像带。 

在训练过程中将数据输入 PyTorch 模型时,Autograd 会启动前向传播,也就是“磁带录制”功能,捕获并记录每一步数学运算及其执行顺序。它还可以执行反向传播或“倒带”功能。通过反向执行数学运算,Autograd 可以计算出每个参数对误差的影响程度,并确定如何调整该参数。 

Autograd 的“倒带”,类似于数学老师批改学生的详细解题过程:从错误的最终结果出发,回溯每一步计算过程,精准定位公式出错的环节,并明确下次尝试时应调整的地方。 

利用 Autograd 优化 PyTorch 训练

让 AI 模型给出正确的答案只是成功了一半。企业组织还需要了解模型为什么会做出特定的决策。通过重视透明度与可说明性,开发人员能够构建出不仅技术先进,而且安全、公平、符合人类价值观​和需求的 AI 系统。 

虽然动态计算图和 Autograd 等 PyTorch 的基础特性能够追踪数据的数学运算流程,但这些信息并不是以便于人类理解的方式呈现的。为弥合这一差距,PyTorch 提供了一个专门的可解释的 AI 库,名为 Captum。Captum 利用 Autograd 提供的数据来计算对最终输出具有最大数学运算影响的输入项,帮助开发人员一窥 AI 模型的“黑箱”内部运作。 

这种透明度可以带来诸多益处:

加速故障排除: 当数据科学家能够理解模型生成输出的内在逻辑后,便可更加轻松快捷地开展开发、调试和决策工作。

更符合监管合规要求: 借助可解释的 AI,企业能够更好地遵守法规和隐私法律要求。

增强信任: 要实施智能体 AI 等技术,必须在算法与人类之间建立信任。

通往主权 AI 之路: 主权 AI 的核心在于拥有对自身 AI 系统的控制权。这就要求深度掌握模型如何处理数据并生成见解。 

主权 AI 架构:扩展分布式训练

您可以在本地系统和云平台上安装并运行 PyTorch。只需预先安装好 Python 即可。只要您具备 Python 编程基础,那么即便作为新手,也能轻松上手使用 PyTorch。 

您还可以通过基于浏览器的云环境(如 Google Colab)来访问 PyTorch,该环境已预装 PyTorch 并提供 GPU 访问权限。随着进一步的使用,您会发现 PyTorch 生态系统还涵盖了许多常用工具,例如:

  • Hugging Face:开发人员可以在此下载预训练的 PyTorch 模型,而无需从头开始构建。
  • PyTorch Lightning:PyTorch 的高级“封装”工具,能隐藏复杂的工程代码,从而提供更简洁的开发体验。
  • ONNX:开放神经网络交换格式(ONNX)可将 PyTorch 模型转换为标准化蓝图,使其能在不同软件系统或硬件芯片上读取和运行,而无需重写任何代码。 

探索 PyTorch 的官方教程

Docker 就像一个数字化集装箱,可以装载计算机环境的快照。将 Docker 与 PyTorch 结合使用,旨在方便在不同计算机之间共享代码,同时避免配置错误和系统崩溃。

将 PyTorch 代码封装进 Docker 镜像文件后,您便可以将运行代码所需的一切打包进一个容器中,并使其与计算机上的其他环境相互隔离。当您将该容器发送给团队成员或部署至云服务器时,只需下载即可直接运行,并且所有必要配置均已就绪。

PyTorch 的创建者及社区成员负责维护预构建的官方 Docker 镜像。这可以大大简化开发与部署流程,因为您无需在本地计算机上安装 PyTorch,直接下载 PyTorch Docker 镜像即可使用。 

当您准备将 PyTorch 模型扩展至百万级用户规模时,就需要由大量服务器组成的集群来处理工作负载。将 PyTorch 模型连同其全部运行依赖项打包进 Docker 镜像后,Kubernetes 便可帮助将这些容器调度至所需位置。在 Kubernetes 上运行 AI 工作负载具有以下优势:

自动化资源编排:PyTorch 模型运行需要大量计算资源,包括 GPU、CPU、内存和网络带宽。Kubernetes 可通过追踪各服务器的可用资源,并将工作负载调度至合适的节点,保障 PyTorch 模型稳定运行。如果服务器发生故障,Kubernetes 能够立即检测到错误并重定向数据流量,全程无需人工干预。 

可扩展性:AI 工作负载往往难以预测。如果模型突然面临流量激增,Kubernetes 可以通过在多台服务器上创建 Docker 容器的副本来进行纵向扩展,从而应对流量高峰。当流量降低时,Kubernetes 又会自动缩减资源规模,从而节省成本。

分布式训练支持:当 AI 模型过大而无法在单台计算机上完成训练时,开发人员可以使用容器将工作负载扩展到多台机器上。通过将模型打包为 Docker 容器并利用云架构,PyTorch 可以将繁重的数学运算分布到互联的 GPU 集群上并行处理。

随后,Kubernetes 负责管理 Docker 容器之间的网络通信,使它们能够相互通信、同步张量,并像一个统一的“大脑”一样协同计算。这种并行处理方式可大幅缩短整体训练时长。

在红帽 OpenShift 上运行分布式 AI 训练

红帽® AI 旨在通过 vLLM 驱动的服务器实现快速、灵活且高效的推理。它将模型与数据进行可靠连接,在单个平台上统一实现专业智能体的自定义和开发工作。我们的产品建立在开源基础之上,让您能够端到端全方位掌控任意规模的 AI 工作流。 

红帽 AI 产品组合包含红帽 AI Enterprise:这是一个用于在任何基础架构上部署、管理和扩展 AI 推理、智能体 AI 工作流和 AI 赋能应用的平台。

探索红帽 AI

博客

Artificial Intelligence (AI)

See how our platforms free customers to run AI workloads and models anywhere

携手红帽探索 AI 之旅:为您的 AI 之旅提供专业知识、培训和支持服务

探索红帽独特的 AI 产品组合。红帽 AI 可以通过人工智能(AI)帮助您实现业务和 IT 目标。

扩展阅读

什么是生成式 AI?

生成式 AI 是一种人工智能技术,依赖基于大数据集训练的深度学习模型来创建新内容。

RAG 与微调:有何区别

检索增强生成(RAG)和微调的目标都是改进大型语言模型(LLM)。RAG 无需改变模型,而微调则需要调整大语言模型的参数。

AIOps 详解

AIOps 即“面向 IT 运维的 AI”(AI for IT operations),是一种利用机器学习及其他先进 AI 技术来实现 IT 运维自动化的方法。

AI/ML 相关资源

特色产品

  • 红帽 AI

    灵活的解决方案,可加快 AI 解决方案在混合云环境中的开发和部署。