Torch 是一个早期的机器学习框架,具有 Lua 接口和 C/CUDA 核心。PyTorch 是其后继生态系统:它保留了该名称和部分实现传承,但现在是一个围绕 Python 和 C++ API 构建的活跃开发框架。LibTorch 是 PyTorch 的 C++ 发行版。
安装 PyTorch #
对于大多数 Python 项目,应使用 PyTorch 安装选择器 生成的命令安装已发布的软件包。合适的软件包取决于操作系统、Python 版本,以及应用使用 CPU、CUDA 还是其他加速器后端。
python -m pip install torch torchvision验证安装,并在适用时验证 CUDA 是否可用:
import torch
print(torch.__version__)
print(torch.cuda.is_available())从源代码构建 LibTorch #
从源代码构建通常没有必要;除非需要自定义构建,否则应使用预构建软件包或 LibTorch 归档文件。源代码构建需要兼容的 C++ 编译器、CMake、Ninja、Python 工具,以及构建选择的任何加速器 SDK。克隆发行版及其子模块,然后按照该发行版的构建说明操作:
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
git checkout <release-tag>
git submodule sync
git submodule update --init --recursive
cmake -S . -B build -GNinja -DBUILD_PYTHON=OFF
cmake --build build构建标志和支持的编译器会随发行版变化,因此在检查发行版文档前,不要将过时的命令行复制到生产自动化中。
张量 #
torch.Tensor 是具有形状、数据类型和设备的同质多维数组。与典型的 NumPy 数组不同,张量可以位于 CPU 或加速器上,并且可以参与自动微分。
import torch
x = torch.randn(3, 4, device="cpu")
y = x.mean(dim=1)某些操作返回现有存储的视图,而不是复制数据。视图可能不是连续的,例如转置之后,因此需要连续存储的操作可能需要 tensor.contiguous()。
构建模块 #
神经网络通常通过继承 torch.nn.Module 进行组合。在 __init__ 中注册参数和子模块,然后在 forward 中描述前向计算:
import torch
class MyLinear(torch.nn.Module):
def __init__(self, in_features: int, out_features: int) -> None:
super().__init__()
self.weight = torch.nn.Parameter(torch.randn(in_features, out_features))
self.bias = torch.nn.Parameter(torch.zeros(out_features))
def forward(self, inputs: torch.Tensor) -> torch.Tensor:
return inputs @ self.weight + self.bias调用模块会在 forward 周围调用框架管理的逻辑,包括钩子。相比直接调用
model.forward(inputs),应优先使用 model(inputs)。
检查点和互操作性 #
使用 state_dict() 保存模型参数,并且只从可信来源加载参数。PyTorch 序列化可以使用 Python pickle,而反序列化期间可能执行代码。对于不可信的模型权重,在工具支持时应优先使用 safetensors 等更安全的格式。
LibTorch 提供用于在原生应用中嵌入 PyTorch 模型的 C++ API,但 Python 和 C++ 产物必须使用兼容的版本和 API 生成。测试部署中使用的确切推理路径、设备放置和输入预处理。
评论
在 GitHub 上阅读或评论(发表评论需要登录)