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++中¶
PyTorch Python API 中的大多数张量和自动梯度操作在 C++ API 中也是可用的。这些包括:
torch::Tensor方法,如add/reshape/clone。有关可用方法的完整列表,请参见:https://pytorch.org/cppdocs/api/classat_1_1_tensor.htmlC++ 张量索引API,其外观和行为与Python API相同。有关其用法的详细信息,请参阅:https://pytorch.org/cppdocs/notes/tensor_indexing.html
张量自动梯度API和对于在C++前端构建动态神经网络至关重要的
torch::autograd包。有关详细信息,请参阅:https://pytorch.org/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.org/cppdocs/frontend.html
有关如何使用API的详细教程,请参见:https://pytorch.org/tutorials/advanced/cpp_frontend.html
如
torch::nn/torch::nn::functional/torch::optim等组件的文档可以在以下位置找到: https://pytorch.org/cppdocs/api/library_root.html
C++的打包¶
有关如何安装和链接libtorch(包含上述所有C++ API的库)的指导,请参阅:https://pytorch.org/cppdocs/installing.html。请注意,在Linux上提供了两种类型的libtorch二进制文件:一种是使用GCC pre-cxx11 ABI编译的,另一种是使用GCC cxx11 ABI编译的,你应该根据系统使用的GCC ABI进行选择。