pytorch底層原理學習--Libtorch

libtorch

libtorch 是 PyTorch 的 C++ 實現版本,可以認為所有的pytorch底層都是由c++實現,而pytorch的所有C++實現就叫libtorch,也就是我們在pytorch官網getstart頁面下載的c++pytorch版本。我們用python寫的pytorch神經網絡代碼都會通過pybind11將python轉換為libtorch的C++代碼。

[官方文檔](PyTorch C++ API — PyTorch main documentation)

libtorch由以下幾部分組成:

  • ATen: The foundational tensor and mathematical operation library on which all else is built.
  • Autograd: Augments ATen with automatic differentiation.
  • C++ Frontend: High level constructs for training and evaluation of machine learning models.
  • TorchScript: An interface to the TorchScript JIT compiler and interpreter.
  • C++ Extensions: A means of extending the Python API with custom C++ and CUDA routines.

libtorch C++ Frontend可以看作是 PyTorch Python Frontend(也就是dataset, dataloader, torch.nn那一套)的 C++ 版本,為機器學習和神經網絡提供自動微分和各種更高級別的抽象。具體而言,它由以下組件組成:

ComponentDescription
torch::TensorAutomatically differentiable, efficient CPU and GPU enabled tensors
torch::nnA collection of composable modules for neural network modeling
torch::optimOptimization algorithms like SGD, Adam or RMSprop to train your models
torch::dataDatasets, data pipelines and multi-threaded, asynchronous data loader
torch::serializeA serialization API for storing and loading model checkpoints
torch::pythonGlue to bind your C++ models into Python
torch::jitPure C++ access to the TorchScript JIT compiler

可以簡單的認為 C++ Frontend調用ATenAutogradTorchScriptC++ Extensions,為用戶提供了libtorch的C++用戶API,下圖清晰展示了 C++ FrontendATenAutogradTorchScriptC++ Extensions 之間的交互關系:

調用張量操作
構建模型
自動梯度計算
訓練支持
加載/運行
序列化模型
調用
自定義操作
提供基礎
張量操作
編譯為
操作序列
實現
自定義內核
運行在
構建
計算圖
支持訓練
模型序列化
自定義
反向傳播
依賴
張量操作
集成
自動微分
注冊
自定義操作
基于
ATen API
定義
梯度函數
注冊到
TorchScript
運行在
C++ Frontend
(torch::nn, torch::optim, torch::data, torch::jit)
ATen
(A Tensor Library)
Autograd
(自動微分引擎)
TorchScript
(模型序列化與部署)
C++ Extensions
(自定義操作)
硬件后端
(CPU/CUDA/Metal)
組件角色說明:
? C++ Frontend:高級用戶接口(類似Python體驗)
? ATen:核心張量計算基礎庫
? Autograd:自動微分引擎
? TorchScript:模型序列化與跨平臺部署
? C++ Extensions:自定義操作擴展
? 硬件后端:底層計算執行

關鍵關系說明:

  1. C++ Frontend 是核心用戶接口

    • 直接調用其他所有組件
    • 提供類似 Python 的編程體驗
    • 示例:model->forward() 觸發 ATen 操作和 Autograd 記錄
  2. ATen 是計算基礎

    張量操作
    數學運算
    內存管理
    ATen
    線性層
    卷積運算
    張量創建
    • 所有組件最終都依賴 ATen 執行計算
    • 提供跨硬件(CPU/GPU)的統一接口
  3. Autograd 實現自動微分

    • 在 ATen 操作上構建計算圖
    • C++ Frontend 訓練時自動調用
    • 支持自定義梯度(通過 C++ Extensions)
  4. TorchScript 橋接 Python/C++

    torch.jit.script
    保存為.pt
    torch::jit::load
    Python模型
    TorchScript
    C++加載
    推理
    • 序列化模型依賴 ATen 操作定義
    • C++ Frontend 直接加載運行
  5. C++ Extensions 擴展系統

    • 使用 ATen API 實現自定義操作
    • 可集成到 Autograd(定義反向傳播)
    • 可注冊到 TorchScript(模型中使用)

典型工作流示例:

訓練流程

C++ Frontend Autograd ATen CUDA 構建計算圖 記錄前向操作 執行矩陣乘法 返回結果 前向輸出 前向輸出 觸發反向傳播 執行梯度計算 計算張量導數 返回梯度 梯度結果 反向傳播完成 C++ Frontend Autograd ATen CUDA

部署流程

Python TorchScript C++ Frontend ATen torch.jit.script(model) 執行JIT編譯 生成優化后的IR 返回IR圖 生成model.pt 部署模型文件 torch::jit::load() 執行序列化操作 加載計算圖 返回ScriptModule 準備輸入張量 返回推理結果 Python TorchScript C++ Frontend ATen

此圖展示了 PyTorch C++ 生態中各組件的協作關系,其中:

  • C++ Frontend 是用戶入口點
  • ATen 是計算基石
  • Autograd 提供訓練能力
  • TorchScript 實現跨平臺部署
  • C++ Extensions 允許底層擴展
    所有組件最終通過硬件后端執行實際計算。

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

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

相關文章

TCP 三次握手協商 MSS 前,如何確定 MSS 值(附 Linux 內核源碼)

文章目錄 一、SYN總結影響 SYN MSS 的因素 二、SYNACK總結影響 SYNACK MSS 的因素 結合 Linux 內核源碼 一、SYN 總結影響 SYN MSS 的因素 套接字選項 TCP_MAXSEG路由選項 advmss出口 MTU 減去 40(TCP 和 IP 的固定首部大小)IPV4_MAX_PMTU - 40(同上) 二、SYNACK 總結影響 SY…

掃描電子顯微鏡(SEM)夏令營面試基礎題及答案

第二期表征問題SEM,后續會陸續更新其他表征 SEM和XRD一樣,都是表征里面很常見的手段,基本上看論文這兩個都是必不可少的 對于這部分內容,理解記憶>死記硬背,到時會問起來回答個大概就行, 像上…

Leetcode力扣解題記錄--第49題(map)

題目鏈接:49. 字母異位詞分組 - 力扣(LeetCode) 題目描述 給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 示例 1: 輸入: strs ["eat", "tea", "tan", &quo…

AI賦能智慧餐飲:Spring Boot+大模型實戰指南

? 餐飲行業三大痛點 高峰期點餐擁堵:300人餐廳,15個服務員仍排長隊 后廚浪費嚴重:食材損耗率高達25%,成本失控 顧客體驗同質化:復購率不足30% 🚀 智慧餐飲解決方案架構 🔥 核心模塊代碼實現…

用鴻蒙打造真正的跨設備數據庫:從零實現分布式存儲

網羅開發 (小紅書、快手、視頻號同名) 大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等…

【Docker基礎】Docker數據卷:數據卷的作用與使用場景

目錄 1 Docker數據卷概述 1.1 什么是數據卷 1.2 數據卷的核心特性 3 數據卷與綁定掛載的對比 2.1 技術對比 2.2 選擇建議 3 數據卷的核心作用 3.1 數據持久化 3.2 數據共享 3.3 備份與遷移 4 數據卷使用場景詳解 4.1 數據庫應用 4.2 日志集中管理 5 數據卷操作全…

安裝GPU版本的Pytorch

前言 Pytorch是深度學習框架,在工作中我們一般是使用GPU版本的Pytorch,提高運行效率 安裝GPU版本的Pytorch需要先安裝CUDA和CUANN這兩個GPU環境 如果準備安裝GPU版本的Pytorch安裝同志沒有安裝CUDA和CUANN,請看我上一篇文章 RTX5070顯卡安裝CUDA和CUDNN-CSDN博客 目錄 安裝…

微信小程序學習筆記

微信小程序學習筆記 一、文件和目錄結構介紹 小程序包括:主體文件、頁面文件 主體文件: app.js:小程序入口文件app.json:小程序的全局配置文件app.wxss:小程序的全局樣式 頁面文件:是每個頁面所需的文…

抓包之通過wireshark抓ping包

寫在前面 本文看下如何抓ping包。 1:正文 因為ping使用的是icmp協議,所以這里我們可以通過過濾icmp協議來進行抓包: 其中對于icmp請求報文狀態碼是8,如下: 響應狀態碼是0: 如下圖是一個局域網環境中…

大文件分片上傳 — nodejs

上傳文件路由: var express require(express); var router express.Router(); const multer require(multer); const fs require(fs); const path require(path);// 確保上傳目錄存在 const uploadDir path.join(__dirname, ../backend/uploads); const temp…

HarmonyOS File和base64字符串轉換

1. HarmonyOS File和base64字符串轉換 1.1. Base64 1.1.1. Base64認知 Base64 是一種基于64個 ASCII 字符來表示二進制數據的表示方法,這個64個不同的字符為: ??(1)大、小寫字母(A– Z、a–z)。52個 ?…

【NodeJs】【npm】npm安裝electron報錯

解決問題 npm安裝electron報錯一般來說是鏡像源的問題。 electron的鏡像源與一般的 vue 之類的鏡像源地址不一樣需要單獨配置。 npm讀取的全局配置一般是在 C:\Users\{用戶}\.npmrc 這個配置文件中。 如果你找不到你的配置文件可以執行如下命令, # 執行后會直接用txt打開你的…

植物small RNA靶基因預測軟件,psRobot

psRoto軟件安裝 網址 http://omicslab.genetics.ac.cn/psRobot/downloads.php下載和安裝 wget http://omicslab.genetics.ac.cn/psRobot/program/WebServer/psRobot_v1.2.tar.gz # tar -zxvf psRobot_v1.2.tar.gz # cd psRobot_v1.2 ## ./configure make make installpsRot…

翻譯服務器

基于UDP編程博客里的回顯服務器代碼,翻譯服務只需要改process方法即可 所以我們可以創建一個UdpDictServer直接繼承UdpEchoServer然后重寫process方法 在重寫的方法中完成翻譯的過程 代碼: package network;import java.io.IOException; import java.net.SocketException; …

初等變換 線性代數

初等變換 介紹了三種初等變換的操作。 初等矩陣 初等矩陣是干嘛的呢?實際上初等矩陣就是我們矩陣的初等操作,每一個對矩陣的初等變換操作都相當于乘上一個初等矩陣。 左乘初等矩陣就相當于對行進行初等操作,右乘則相當于對列進行初等操作。…

Java基礎 集合框架 隊列架構 雙端隊列 Deque

雙端隊列 Deque Deque 方法簡介Deque 核心特點Deque實現類 ArrayDequeArrayDeque 構造方法ArrayDeque 的數據結構及實現原理ArrayDeque 方法介紹ArrayDeque 核心特性ArrayDeque 總結ArrayDeque 使用樣例代碼 Deque實現類 LinkedListDeque實現類 ConcurrentLinkedDeque (非阻塞線…

【Spring】——事務、整合、注解

目錄 一.Spring與mybatis的整合 1.配置文件 ?編輯2. 二.事務 1.事務屬性 2.傳播屬性 3.異常屬性 4.常見配置 三.注解 1.什么是注解 2.Autowired 1.用戶自定義注解 ?編輯?編輯2.JDK類型注入value 3.Bean 1.對象的創建 2.對象創建次數 3.Bean注解的注入 1.自…

Linux 離線下安裝gcc、g++

描述 離線時編譯Redis、nginx等編譯包,需要gcc安裝包,評論提醒我 上傳補充 操作 1、進入gcc目錄,并執行安裝命令 rpm -ivh *.rpm --nodeps --force查看版本 gcc -v2、進入gcc-c目錄,并執行安裝 rpm -ivh *.rpm --nodeps --f…

融智學定律3:流動創造價值僅當跨域協同

關鍵公式意義: 人流方程中的 α/β 反映城市吸引力不對稱性 物流優化中的 η 實現時間價值貨幣化 金流模型的 σ(?) 捕捉市場情緒突變點 信息熵的 ∥gi??gj?∥ 度量知識勢差驅動 當五流在黎曼流形上滿足 ?_μ?T^μν0(能量動量守恒&#xff09…

趣味數據結構之——數組

你們一定都聽說過它的故事…… 是的沒錯,就是一個蘿卜一個坑。??? 想象一下數組就是那個坑,那么定義數組就是在挖坑。 元素就是蘿卜。 坑就在那里(地上),整整齊齊地排在那里。 于是數組最重要的一個特性就顯現出來了——隨機存取。還…