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.com.tw/cppdocs/api/classat_1_1_tensor.html行為與 Python API 相同、外觀相似的 C++ Tensor 索引 API。有關其用法詳情,請參閱:https://pytorch.com.tw/cppdocs/notes/tensor_indexing.html
對於在 C++ 前端構建動態神經網路至關重要的 Tensor Autograd API 和
torch::autograd包。更多詳情請參閱:https://pytorch.com.tw/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.com.tw/cppdocs/frontend.html
有關如何使用該 API 的詳細教程,請參閱:https://pytorch.com.tw/tutorials/advanced/cpp_frontend.html
torch::nn/torch::nn::functional/torch::optim等元件的文件可在以下位置找到:https://pytorch.com.tw/cppdocs/api/library_root.html
C++ 打包¶
有關如何安裝 libtorch(包含上述所有 C++ API 的庫)並進行連結的指導,請參閱:https://pytorch.com.tw/cppdocs/installing.html。請注意,在 Linux 上提供了兩種型別的 libtorch 二進位制檔案:一種使用 GCC pre-cxx11 ABI 編譯,另一種使用 GCC cxx11 ABI 編譯,您應根據系統使用的 GCC ABI 進行選擇。