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 中注册,这些运算符和类就可以在从 Python 或 C++ 运行的 TorchScript 代码中作为序列化 TorchScript 模型的一部分调用。 使用自定义 C++ 运算符扩展 TorchScript 教程介绍了 TorchScript 与 OpenCV 的接口。 除了使用自定义运算符包装函数调用之外,C++ 类和结构可以通过类似于 pybind11 的接口绑定到 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.htmlC++ tensor 索引 API,其外观和行为与 Python API 相同。 有关其用法的详细信息,请参阅: https://pytorch.ac.cn/cppdocs/notes/tensor_indexing.html
tensor autograd API 和
torch::autograd
包,它们对于在 C++ 前端构建动态神经网络至关重要。 有关更多详细信息,请参阅: 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 进行选择。