当前位置: 首页 > news >正文

pytorch底层原理学习--PyTorch 架构梳理

文章目录

      • PyTorch 完整架构流程图
    • 训练部署完整架构:
      • 关键组件详解
      • 完整执行流程示例

PyTorch 架构梳理

PyTorch 完整架构流程图

Hardware Layer
Backend Layer
Core Engine (C++)
Binding Layer
Python Layer
JIT Compiler
CPU指令
GPU执行
(CUDA/Shader)
专用加速器
CPU Kernels
(MKL/oneDNN/OpenMP)
CUDA Kernels
(cuDNN/cuBLAS)
其他后端
(ROCm/XLA)
C++ Frontend
(libtorch)
Autograd Engine
(动态图构建/梯度计算)
ATen
(张量库)
Operator Dispatch
(算子分发)
JIT 核心引擎
TorchScript IR
(中间表示)
Graph Optimization
(图优化)
Graph Execution
(图执行)
pybind11 Bindings
(Python-C++接口)
Python Code
(模型定义/训练脚本)
Python Frontend
(torch.nn, torch.optim)
Eager Execution
(动态图即时操作执行)
JIT/TorchScript
(静态图编译接口)

训练部署完整架构:

如下图:

硬件层
后端层
C++ 部署层
核心引擎 (C++)
绑定层
Python 层
推理路径
Eager 执行
JIT 编译
模型文件
调用
训练模式
推理模式
CPU
GPU
加速器
CPU Kernels
CUDA Kernels
其他后端
C++ 代码
模型加载
模型推理
C++ Frontend
(libtorch)
训练路径
Autograd Engine
动态图记录
梯度计算
ATen
(张量库)
算子分发
JIT 执行引擎
设备特定优化
无梯度模式
pybind11 Bindings
Python 代码
Python Frontend
(torch, torch.nn, torch.optim)
JIT 接口
torch.jit.script/trace
语法解析
生成 IR
图优化
序列化为 .pt 文件
Eager 操作
动态图构建

关键组件详解

  1. Python Code

    • 作用:用户编写的模型定义、训练脚本
    • 示例model = nn.Linear(10, 2); output = model(input)
    • 特点:高级API,易用性强
  2. Python Frontend

    • 组成torch, torch.nn, torch.optim等模块
    • 功能:提供神经网络层、优化器、张量操作等高级接口
    • 关键类Tensor, Module, Optimizer
  3. Eager Execution

    • 机制:命令式编程模式,操作立即执行
    • 优点:调试方便,动态图灵活性高
    • 示例x = torch.tensor([1.0]); y = x * 2 (立即计算)
  4. JIT/TorchScript

    • 作用:将Python模型编译为优化后的静态图
    • 流程torch.jit.script(model) → 生成IR → 优化
    • 优势:部署友好,性能优化空间大
  5. pybind11 Bindings

    • 功能:Python与C++间的双向绑定层
    • 实现:自动生成包装代码,实现无缝调用
    • 效率:接近原生C++性能的跨语言调用
  6. C++ Frontend (libtorch)

    组件功能
    TorchScript 支持加载/执行 Python 导出的模型(.pt 文件)
    ATen 张量库核心张量操作(CPU/CUDA)
    神经网络模块torch::nn 命名空间下的层实现
    自动求导引擎C++ 环境下的 autograd 支持
    序列化工具模型保存/加载(torch::save()/load())
    多后端支持CPU/CUDA/ROCM 硬件加速
    • 定位:PyTorch的C++核心库
    • 功能:提供与Python API对应的C++接口
    • 使用场景:高性能推理、嵌入式部署
  7. Autograd Engine

    • 核心功能:动态构建计算图并管理梯度计算
  8. ATen (A Tensor Library)

    • 角色:PyTorch的核心张量库
    • 特性
      • 500+张量操作
      • 统一CPU/CUDA接口
      • 自动微分支持
    • 路径aten/src/ATen/native/ (算子实现)
  9. Intermediate Representation (IR)

    • 作用:TorchScript的中间表示形式
    • 结构:基于图的表示,包含节点(Node)、边(Edge)
    • 优化:常量折叠、算子融合等
  10. Operator Dispatch

    • 机制:根据设备类型分发算子

    • 伪代码

      def add(tensor):if tensor.device == 'cuda':return cuda_add_kernel(tensor)else:return cpu_add_kernel(tensor)
      
  11. CPU Kernels

    • 优化技术
      • SIMD指令集 (AVX2/AVX512)
      • 多线程并行 (OpenMP)
      • 数学加速库 (MKL, oneDNN)
    • 典型操作:矩阵乘法、卷积等
  12. CUDA Kernels

    • 架构

      CUDA Kernel
      线程块
      32线程束
      单个线程
    • 加速库:cuDNN (深度学习), cuBLAS (线性代数)

    • 异步执行:通过CUDA流实现计算/传输并行

完整执行流程示例

Python Code Python Frontend pybind11 C++ Frontend Autograd Engine ATen CUDA Kernel model(input) 张量操作请求 调用libtorch 记录前向图 执行张量计算 分发到CUDA内核 结果返回 存储梯度函数 返回输出张量 C++ → Python 返回结果 获得预测结果 Python Code Python Frontend pybind11 C++ Frontend Autograd Engine ATen CUDA Kernel

参考资料:

《deep learning with pytorch》15.3 与PyTorch JIT 编译器交互,第一版中文版

PyTorch

PyTorch Architecture | harleyszhang/llm_note | DeepWiki

(PyTorch源码分析(1)- 整体预览 - 知乎

《PyTorch: An Imperative Style, High-Performance Deep Learning Library》
https://pytorch.org/blog/a-tour-of-pytorch-internals-1/
https://pytorch.org/blog/a-tour-of-pytorch-internals-2/
https://zhuanlan.zhihu.com/p/598044604
https://zhuanlan.zhihu.com/p/708375873
https://zhuanlan.zhihu.com/p/338256656
https://blog.ezyang.com/2019/05/pytorch-internals/
https://deepwiki.com/harleyszhang/llm_note/5.2-pytorch-architecture?utm_source=chatgpt.com
https://medium.com/@hxu296/a-trip-to-kernels-understanding-pytorchs-internal-architecture-fc955aafd54c
https://zhuanlan.zhihu.com/p/609288586
https://mlfrontiers.substack.com/p/understanding-ml-compilers-the-journey
https://se.ewi.tudelft.nl/desosa2019/chapters/pytorch/#fnref:3
https://medium.com/@hxu296/a-trip-to-kernels-understanding-pytorchs-internal-architecture-fc955aafd54c
https://blog.christianperone.com/2018/03/pytorch-internal-architecture-tour/
https://docs.pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-a-general-checkpoint-for-inference-and-or-resuming-training

http://www.lqws.cn/news/584605.html

相关文章:

  • FreePDFv3.0.0:颠覆你的文献阅读习惯
  • 16014.rtsp推流服务器
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • TDH社区开发版安装教程
  • [学习]M-QAM的数学原理与调制解调原理详解(仿真示例)
  • [面试]手写题-Promise.all() Promise.race()
  • 机器学习20-线性网络思考
  • 第三十六章 CAN——控制器局域网络接口
  • 字节跳动 C++ QT PC客户端面试
  • 论文中用matplotlib画的图,如何保持大小一致。
  • Vue2中使用DHTMLX Gantt
  • 深入理解Webpack的灵魂:Tapable插件架构解析
  • 使用Dirichlet分布进行随机初始化
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • StackGAN(堆叠生成对抗网络)
  • vscode 改注释的颜色,默认是灰色的,想改成红色
  • Prompt Enginering
  • 会议室预约系统的典型架构
  • Prompt 精通之路(一)- AI 时代的新语言:到底什么是 Prompt?为什么它如此重要?
  • Python 数据分析与机器学习入门 (五):Matplotlib 数据可视化基础
  • ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
  • 使用nomachine远程连接ARM设备桌面
  • 【Vscode】Vscode切换成中文语言
  • Java历史:从橡树到火星探索,从微软法律战到Spring、Gradle
  • Java web1(黑马)
  • django 数据表外键 删除时 对应表的数据不删除如何设置
  • 卫朋:华为流程体系拆解系列——IPD流程L1-L6分级导入实战演练
  • Junit_注解_枚举
  • 机器学习在智能仓储中的应用:库存管理与物流优化
  • SpringCloud系列(43)--搭建SpringCloud Config客户端