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…

趣味数据结构之——数组

你们一定都听说过它的故事…… 是的没错,就是一个萝卜一个坑。ಥ◡ಥ 想象一下数组就是那个坑,那么定义数组就是在挖坑。 元素就是萝卜。 坑就在那里(地上),整整齐齐地排在那里。 于是数组最重要的一个特性就显现出来了——随机存取。还…