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
张量autograd API和
torch::autograd
包对于在C++前端构建动态神经网络至关重要。更多详情,请参阅: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进行选择。