C++ 篇
注意
如果您正在寻找 PyTorch C++ API 文档,请直接前往此处。
PyTorch 为 C++ 提供了多个功能,您可以根据需求选择使用。从宏观层面来看,以下支持是可用的:
TorchScript C++ API 篇
TorchScript 允许将用 Python 定义的 PyTorch 模型进行序列化,然后通过编译捕获模型代码或通过跟踪其执行来加载和运行。您可以在《在 C++ 中加载 TorchScript 模型》教程中了解更多信息。这意味着您可以在 Python 中尽可能多地定义您的模型,但随后可以通过 TorchScript 导出它们,以便在生产和嵌入式环境中进行无 Python 执行。TorchScript C++ API 用于与这些模型和 TorchScript 执行引擎进行交互,包括:
加载从 Python 保存的序列化 TorchScript 模型
如有必要进行简单的模型修改(例如,提取子模块)
使用 C++ Tensor API 构建输入并进行预处理
使用 C++ 扩展扩展 PyTorch 和 TorchScript ¶
通过自定义操作符和自定义类,TorchScript 可以通过用户提供的代码进行扩展。一旦与 TorchScript 注册,这些操作符和类就可以在从 Python 或 C++ 运行的 TorchScript 代码中调用,作为序列化 TorchScript 模型的一部分。在《使用自定义 C++ 操作符扩展 TorchScript》教程中,我们将介绍如何将 TorchScript 与 OpenCV 进行接口交互。除了使用自定义操作符包装函数调用外,C++ 类和结构体还可以通过类似于 pybind11 的接口绑定到 TorchScript 中,这在《使用自定义 C++ 类扩展 TorchScript》教程中有详细解释。
C++ 中的张量和 Autograd ¶
PyTorch Python API 中的大多数张量和 autograd 操作也在 C++ API 中可用。这些包括:
torch::Tensor
方法,如add
/reshape
/clone
等。有关可用方法的完整列表,请参阅:https://pytorch.org/cppdocs/api/classat_1_1_tensor.html与 Python API 看起来和表现相同的 C++ 张量索引 API。有关其使用方法的详细信息,请参阅:https://pytorch.org/cppdocs/notes/tensor_indexing.html
张量自动微分 API 和
torch::autograd
包对于在 C++ 前端构建动态神经网络至关重要。有关更多详细信息,请参阅:https://pytorch.org/tutorials/advanced/cpp_autograd.html
C++包装
关于如何安装和链接 libtorch(包含上述所有 C++ API 的库)的指南,请参阅:https://pytorch.org/cppdocs/installing.html。请注意,在 Linux 上提供了两种类型的 libtorch 二进制文件:一种是用 GCC pre-cxx11 ABI 编译的,另一种是用 GCC cxx11 ABI 编译的,您应根据系统使用的 GCC ABI 进行选择。