C++¶
注意
如果您正在查找 PyTorch C++ API 文档,请直接点击此处。
PyTorch 提供了多种用于 C++ 开发的功能,您可以根据自己的需求选择最适合的。从高层次来看,提供了以下支持:
TorchScript C++ API¶
TorchScript 允许将用 Python 定义的 PyTorch 模型序列化,然后通过编译或跟踪其执行来捕获模型代码,并在 C++ 中加载和运行。您可以在在 C++ 中加载 TorchScript 模型教程中了解更多信息。这意味着您可以尽可能在 Python 中定义模型,然后通过 TorchScript 将其导出,以便在生产或嵌入式环境中执行无 Python 代码。TorchScript C++ API 用于与这些模型和 TorchScript 执行引擎交互,包括:
加载从 Python 保存的序列化 TorchScript 模型
如果需要,进行简单的模型修改(例如提取子模块)
使用 C++ Tensor API 构建输入并进行预处理
使用 C++ 扩展来扩展 PyTorch 和 TorchScript¶
可以通过自定义操作符和自定义类来增强 TorchScript 的功能。一旦注册到 TorchScript 中,这些操作符和类就可以作为序列化 TorchScript 模型的一部分,在从 Python 或 C++ 运行的 TorchScript 代码中调用。使用自定义 C++ 操作符扩展 TorchScript 教程详细介绍了如何将 TorchScript 与 OpenCV 对接。除了使用自定义操作符包装函数调用之外,还可以通过类似于 pybind11 的接口将 C++ 类和结构绑定到 TorchScript 中,这在使用自定义 C++ 类扩展 TorchScript 教程中进行了说明。
C++ 中的 Tensor 和 Autograd¶
PyTorch Python API 中的大多数 Tensor 和 Autograd 操作在 C++ API 中也可用。其中包括:
torch::Tensor
方法,例如add
/reshape
/clone
。有关可用方法的完整列表,请参阅:https://pytorch.ac.cn/cppdocs/api/classat_1_1_tensor.html行为与 Python API 相同、外观相似的 C++ Tensor 索引 API。有关其用法详情,请参阅:https://pytorch.ac.cn/cppdocs/notes/tensor_indexing.html
对于在 C++ 前端构建动态神经网络至关重要的 Tensor Autograd API 和
torch::autograd
包。更多详情请参阅:https://pytorch.ac.cn/tutorials/advanced/cpp_autograd.html
在 C++ 中构建模型¶
“在 TorchScript 中构建,在 C++ 中推理”的工作流程要求模型构建在 TorchScript 中完成。然而,在某些情况下可能必须在 C++ 中构建模型(例如,在不希望包含 Python 组件的工作流程中)。为了满足此类用例,我们提供了完全在 C++ 中构建和训练神经网络模型的能力,其中包含 torch::nn
/ torch::nn::functional
/ torch::optim
等与 Python API 高度相似的熟悉组件。
有关 PyTorch C++ 模型构建和训练 API 的概述,请参阅:https://pytorch.ac.cn/cppdocs/frontend.html
有关如何使用该 API 的详细教程,请参阅:https://pytorch.ac.cn/tutorials/advanced/cpp_frontend.html
torch::nn
/torch::nn::functional
/torch::optim
等组件的文档可在以下位置找到:https://pytorch.ac.cn/cppdocs/api/library_root.html
C++ 打包¶
有关如何安装 libtorch(包含上述所有 C++ API 的库)并进行链接的指导,请参阅:https://pytorch.ac.cn/cppdocs/installing.html。请注意,在 Linux 上提供了两种类型的 libtorch 二进制文件:一种使用 GCC pre-cxx11 ABI 编译,另一种使用 GCC cxx11 ABI 编译,您应根据系统使用的 GCC ABI 进行选择。