PyTorch C++ API libtorch 簡介

PyTorch C++ API libtorch 簡介

翻譯自 PyTorch 官方文檔:https://pytorch.org/cppdocs/index.html#acknowledgements

整體劃分

根據 PyTorch 官方文檔 的介紹,PyTorch的C++ API可以粗略分為以下五個部分:

  • ATen:基礎的張量和數學計算庫,其他的部分都以此為基礎。
  • Autograd:多 ATen 的擴展,包含自動微分功能。
  • C++ Frontend:用于訓練和驗證機器學習模型的高層架構。
  • TorchScript:TorchScipt JIT 編譯器 / 解釋器的接口。
  • C++ Extensions:一系列使用 C++ 和 CUDA 例程擴展 Python API 的方法。

ATen

ATen 是一個基礎的張量庫,幾乎所有 PyTorch 中的 Python 和 C++ 接口的以此為基礎。ATen 提供了一個核心的 Tensor 類,并定義了它的幾百種操作。大部分這些操作既可以在 CPU 上進行,也可以在 GPU 上進行。Tensor 類可以根據其類型動態地調度它們。一個 ATen 的小例子:

#include <ATen/ATen.h>at::Tensor a = at::ones({2, 2}, at::kInt);
at::Tensor b = at::randn({2, 2});
auto c = a + b.to(at::kInt);

Tensor 類在 ATen 中所有其他的符號都可以在 at:: 命名空間中,可參考文檔。

Autograd

Autograd 是 PyTorch 的 C++ API 的一部分,它通過增加自動求導功能擴展增強了 Tensor 類。自動求導系統記錄了 Tensor 的操作來形成一張自動求導圖。并在該圖的葉節點上調用 backward() 通過跨越圖中的函數和張量網絡執行反向模式微分,最終產生梯度。以下是一個示例:

#include <torch/csrc/autograd/variable.h>
#include <torch/csrc/autograd/function.h>torch::Tensor a = torch::ones({2, 2}, torch::requires_grad());
torch::Tensor b = torch::randn({2, 2});
auto c = a + b;
c.backward(); // a.grad()將會保存c關于a的導數

ATen 中的類 at::Tensor 默認是不可微的。要添加 Autograd API 提供的張量的可微性,要使用torch:: 命名空間而不是 at:: 命名空間的張量工廠函數。也就是說,使用 at::ones 創建的張量是不可微的,但使用torch::ones 創建的張量是可微的。

C++ Frontend

PyTorch C++ 前端為神經網絡和通用 ML(機器學習)研究和生產用例提供了一個高級的純 C++ 建模接口,在設計和提供的功能上很大程度上與 Python API 保持一致。C++ 前端包括以下內容:

  • 通過多層模塊系統(如torch.nn.Module)定義機器學習模型的接口;
  • 一些已有模塊的的常見的建模方法(例如卷積、RNN、BN等)的“標準庫”;
  • 優化器 API,包括流行優化器的實現,如 SGD、Adam、RMSprop 等;
  • 一系列表示數據集和數據處理管道的方法,包括在多個 CPU 內核上并行加載數據的功能;
  • 用于保存和加載訓練會話 checkpoint 的序列化格式(如torch.utils.data.DataLoader);
  • 將模型自動并行化到多個 GPU(如torch.nn.parallel.DataParallel);
  • 支持使用pybind11輕松將C++模型綁定到Python的代碼;
  • TorchScript JIT 編譯器的入口點;
  • 有助于與 ATen 和 Autograd API 接口的有用實用程序。

有關C++ 前端的更詳細說明,可參閱此文檔。 與 C++ 前端相關的torch::命名空間的相關部分包括torch::nn、 torch::optim、 torch::data、 torch::serialize、 torch::jit 和torch::python。C++ 前端的示例可以在此存儲庫中找到,該存儲庫正在持續且積極地擴展。

一般不推薦用 ATen 和 Autograd,除非有定制化的需求,否則建議直接使用更穩定的 C++ 前端

TorchScript

TorchScript 是一種 PyTorch 模型的表示,可以被 TorchScript 編譯器理解、編譯和序列化。從根本上說,TorchScript 本身就是一種編程語言。它是使用 PyTorch API 的 Python 子集。TorchScript 的 C++ 接口包含三個主要功能:

  • 一種在 Python 中定義的用于加載和執行序列化 TorchScript 模型的機制;
  • 用于定義擴展 TorchScript 標準操作庫的自定義操作符的 API;
  • 從 C++ 實時編譯 TorchScript 程序。

如果您想盡可能在 Python 中定義模型,但隨后將它們導出到 C++ 以用于生產環境和非 Python 推理,則第一種機制可能對您很感興趣。您可以通過此鏈接了解更多信息。第二個 API 涉及您希望使用自定義算子擴展 TorchScript 的場景,這些算子同樣可以在推理期間從 C++ 序列化和調用。最后,torch::jit::compile 函數可用于直接從 C++ 訪問 TorchScript 編譯器。

C++ Extension

C++ Extension 提供了一種訪問上述所有接口的簡單而強大的方法,目的是擴展 PyTorch 的常規 Python 用例。C++ 擴展最常用于在 C++ 或 CUDA 中實現自定義算子。C++ 擴展 API 沒有向 PyTorch C++ API 添加任何新功能。而是提供了與 Python setuptools 的集成以及允許從 Python 訪問 ATen、Autograd 和其他 C++ API 的 JIT 編譯機制來進行自定義擴展。要了解有關 C++ 擴展 API 的更多信息,請閱讀 本教程。

Ref:

https://pytorch.org/cppdocs/index.html#acknowledgements

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DVWA upload

LOW medium high impossible

安裝 PyTorch C++ API libtorch 及一個最小例子

安裝 PyTorch C API libtorch 及一個最小例子 翻譯自&#xff1a;https://pytorch.org/cppdocs/installing.html 我們提供依賴 PyTorch 所需的所有頭文件、庫和 CMake 配置文件的二進制分發版。我們將此發行版稱為 LibTorch&#xff0c;您可以在我們的網站上下載包含最新 Lib…

ImageNet 1K 類別名與索引的對應關系

ImageNet 1K 類別名與索引的對應關系 轉自&#xff1a;http://befree2008.github.io/2018/10/05/20181005_ImageNet1000%E5%88%86%E7%B1%BB%E5%90%8D%E7%A7%B0%E5%92%8C%E7%BC%96%E5%8F%B7/ ImageNet 2012 1000個類名稱和編號。ILSVRC2012_img_train.tar 這個文件解壓出來都是…

sqlilab--writeup (5~6) 布爾盲注

1.# 和 – &#xff08;有個空格&#xff09;表示注釋&#xff0c;可以使它們后面的語句不被執行。在url中&#xff0c;如果是get請求**(記住是get請求&#xff0c;也就是我們在瀏覽器中輸入的url)** &#xff0c;解釋執行的時候&#xff0c;url中#號是用來指導瀏覽器動作的&am…

PyTorch導出JIT模型并用C++ API libtorch調用

PyTorch導出JIT模型并用C API libtorch調用 本文將介紹如何將一個 PyTorch 模型導出為 JIT 模型并用 PyTorch 的 CAPI libtorch運行這個模型。 Step1&#xff1a;導出模型 首先我們進行第一步&#xff0c;用 Python API 來導出模型&#xff0c;由于本文的重點是在后面的部署…

sqli-lab--writeup(7~10)文件輸出,時間布爾盲注

前置知識點&#xff1a; 1、outfile是將檢索到的數據&#xff0c;保存到服務器的文件內&#xff1a; 格式&#xff1a;select * into outfile “文件地址” 示例&#xff1a; mysql> select * into outfile ‘f:/mysql/test/one’ from teacher_class; 2、文件是自動創建…

樹莓派4B (aarch64) 安裝PyTorch 1.8 的可行方案

樹莓派4B (aarch64) 安裝PyTorch 1.8 的可行方案 最終可行方案 試了一堆方案&#xff08;源碼編譯、Fast.ai的安裝文件等&#xff09;之后&#xff0c;終于找到一個可行的方案。是在 PyTorch 官方討論社區的一個帖子中找到的&#xff0c;在回復中一個大佬給出了自己在2021年1…

sqli-lab———writeup(11~17)

less11 用戶名提交單引號顯示sql語法錯誤&#xff0c;故存在sql注入 根據單引號報錯&#xff0c;在用戶名和密碼任意行輸入 萬能密碼&#xff1a;‘ or 11# 輸入后username語句為&#xff1a;SELECT username, password FROM users WHERE username or 11; 雙引號 password語…

深入理解Python中的全局解釋鎖GIL

深入理解Python中的全局解釋鎖GIL 轉自&#xff1a;https://zhuanlan.zhihu.com/p/75780308 注&#xff1a;本文為蝸牛學院資深講師卿淳俊老師原創&#xff0c;首發自公眾號https://mp.weixin.qq.com/s/TBiqbSCsjIbNIk8ATky-tg&#xff0c;如需轉載請私聊我處獲得授權并注明出處…

sqli-lab————Writeup(18~20)各種頭部注入

less18 基于錯誤的用戶代理&#xff0c;頭部POST注入 admin admin 登入成功&#xff08;進不去重置數據庫&#xff09; 顯示如下 有user agent參數&#xff0c;可能存在注入點 顯示版本號&#xff1a; 爆庫&#xff1a;User-Agent:and extractvalue(1,concat(0x7e,(select …

Python GIL

轉自&#xff1a;https://blog.csdn.net/weixin_41594007/article/details/79485847 Python GIL 在進行GIL講解之前&#xff0c;我們可以先回顧一下并行和并發的區別&#xff1a; 并行&#xff1a;多個CPU同時執行多個任務&#xff0c;就好像有兩個程序&#xff0c;這兩個程序…

sqli-lab——Writeup21~38(各種過濾繞過WAF和)

Less-21 Cookie Injection- Error Based- complex - string ( 基于錯誤的復雜的字符型Cookie注入) base64編碼&#xff0c;單引號&#xff0c;報錯型&#xff0c;cookie型注入。 本關和less-20相似&#xff0c;只是cookie的uname值經過base64編碼了。 登錄后頁面&#xff1a;…

Libtorch報錯:terminate called after throwing an instance of ‘c10::Error‘ what():isTensor()INTERNAL ASS

Libtorch報錯&#xff1a;terminate called after throwing an instance of ‘c10::Error’ what(): isTensor() INTERNAL ASSERT FAILED 報錯 問題出現在筆者想要將 yolov5 通過 PyTorch 的 C 接口 Libtorch 部署到樹莓派上。 完整報錯信息&#xff1a; terminate called …

sqli-lab——Writeup(38~over)堆疊等......

知識點&#xff1a; 1.堆疊注入原理&#xff08;stacked injection&#xff09; 在SQL中&#xff0c;分號&#xff08;;&#xff09;是用來表示一條sql語句的結束。試想一下我們在 ; 結束一個sql語句后繼續構造下一條語句&#xff0c;會不會一起執行&#xff1f;因此這個想法…

mysql常規使用(建立,增刪改查,視圖索引)

目錄 1.數據庫建立 2.增刪改查 3.視圖建立&#xff1a; 1.數據庫建立 mysql> mysql> show databases; ----------------------------------- | Database | ----------------------------------- | information_schema | | ch…

php操作mysql數據庫

phpmyadmin phpadmin是一個mysql圖形化管理工具&#xff0c;是一款實用php開發的mysql苦戶端軟件&#xff0c;基于web跨平臺的管理系統&#xff0c;支持簡體中文&#xff0c;官網&#xff1a;www.phpmyadmin.net可以下載免費最新版。提供圖形化操作界面&#xff0c;完成對mysq…

C:C++ 函數返回多個參數

C/C 函數返回多個參數 轉自&#xff1a;https://blog.csdn.net/onlyou2030/article/details/48174461 筆者是 Python 入門的&#xff0c;一直很困惑 C/C 中函數如何返回多個參數。 如果一個函數需要返回多個參數&#xff0c;可以采用以下兩種方法&#xff1a; 傳引用或指針…

sql預編譯

一.數據庫預編譯起源: 數據庫接受sql語句,需要解析和制定執行,中間需要花費一段時間. 有時候同一語句可能會多次執行, 那么就會造成資源的浪費 如何減少編譯執行的時間 ? 就有了預編譯,預編譯是將這類語句提前用占位符替代,一次編譯,多次執行. 預編譯后的執行代碼會被緩存下來…

C++中智能指針的原理、使用、實現

C中智能指針的原理、使用、實現 轉自&#xff1a;https://www.cnblogs.com/wxquare/p/4759020.html 1 智能指針的作用 C程序設計中使用堆內存是非常頻繁的操作&#xff0c;堆內存的申請和釋放都由程序員自己管理。程序員自己管理堆內存可以提高了程序的效率&#xff0c;但是…

Xctf練習sql注入--supersqli

三種方法 方法一 1 回顯正常 1’回顯不正常,報sql語法錯誤 1’ -- 回顯正常,說明有sql注入點,應該是字符型注入(# 不能用) 1’ order by 3 -- 回顯失敗,說明有2個注入點 1’ union select 1,2 -- 回顯顯示過濾語句: 1’; show databases -- 爆數據庫名 -1’; show tables …