Pytorch源码搜索与分析

PyTorch的的代码主要由C10、ATen、torch三大部分组成的。其中:

C10

C10,来自于Caffe Tensor Library的缩写。这里存放的都是最基础的Tensor库的代码,可以运行在服务端和移动端。PyTorch目前正在将代码从ATen/core目录下迁移到C10中。C10的代码有一些特殊性,体现在这里的代码除了服务端外还要运行在移动端,因此编译后的二进制文件大小也很关键,因此C10目前存放的都是最核心、精简的、基础的Tensor函数和接口。

C10目前最具代表性的一个class就是TensorImpl了,它实现了Tensor的最基础框架。继承者和使用者有:

Variable的Variable::Impl

SparseTensorImpl

detail::make_tensor(storage_impl, CUDATensorId(), false)

Tensor(c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> tensor_impl)

c10::make_intrusive<at::TensorImpl, at::UndefinedTensorImpl>

值得一提的是,C10中还使用/修改了来自llvm的SmallVector,在vector元素比较少的时候用以代替std::vector,用以提升性能;

ATen

ATen,来自于 A TENsor library for C++11的缩写;PyTorch的C++ tensor library。ATen部分有大量的代码是来声明和定义Tensor运算相关的逻辑的,除此之外,PyTorch还使用了aten/src/ATen/gen.py来动态生成一些ATen相关的代码。ATen基于C10,Gemfield本文讨论的正是这部分;

torch._VF

torch._VF is a subset of those functions are mapped to ATen functions in torch/jit/_builtins.py.

例如如果沿着torch.nn.dropout去找,会发现找到torch._VF这个库,IDE无法继续navigate:

这时候直接去github的pytorch源码repo(https://github.com/pytorch/pytorch/tree/b3bb234e16780ea3f3d749d2c8c156c9245eb797)搜dropout_就能很快看到在cpu上cpp的实现:

加上cuda的限制就是gpu的实现:

另外在pytorch的老旧版本,像dropout这种由python实现的算子在pytorch v1.0.4版本的https://github.com/pytorch/pytorch/blob/v0.1.4/torch/nn/functions/dropout.py 这个目录下还能找到,但是github并没有提供历史tag的搜索功能,不如就去https://github.com/colesbury/pytorch-old/tree/master/torch/nn/functions 这个古早目录下面找吧

Torch

Torch,部分代码仍然在使用以前的快要进入历史博物馆的Torch开源项目,比如具有下面这些文件名格式的文件:

TH* = TorcH

THC* = TorcH Cuda

THCS* = TorcH Cuda Sparse (now defunct)

THCUNN* = TorcH CUda Neural Network (see cunn)

THD* = TorcH Distributed

THNN* = TorcH Neural Network

THS* = TorcH Sparse (now defunct)

THP* = TorcH Python

PyTorch会使用tools/setup_helpers/generate_code.py来动态生成Torch层面相关的一些代码,这部分动态生成的逻辑将不在本文阐述,你可以关注Gemfield专栏的后续文章。

部分转载自

  1. https://zhuanlan.zhihu.com/p/55966063
相关推荐
火山引擎开发者社区6 小时前
VeOps CLI:你的火山引擎可观测排障助手
人工智能
To_OC7 小时前
调用远程MCP,手搓一个能查酒店、自动打开浏览器的 Agent
人工智能·agent·mcp
启雀AI8 小时前
生物医疗行业如何建设合规、安全、可复用的知识库?
人工智能·安全·软件构建·知识图谱·知识库
x-cmd8 小时前
Mac 涨价后,本地 AI 还能千元入门吗?
linux·人工智能·macos·ai·agent·amd·本地ai入门
To_OC8 小时前
跑通第一个 MCP Server 后,我终于搞懂它到底解决了什么问题
人工智能·agent·mcp
楷哥爱开发8 小时前
如何使用 Claude Fable 5 进行网页抓取?2026最新实战教程
大数据·网络·人工智能
YMWM_8 小时前
lerobot中use_relative_actions=True需要重新计算meta/stats.json等信息
人工智能·深度学习·lerobot
触底反弹8 小时前
🔥 DeepSeek 560 万美金干翻 OpenAI?一文讲透「蒸馏」的来龙去脉
人工智能
私人珍藏库8 小时前
[Android] 会计快题库 -财会职称考试刷题学习
android·人工智能·学习·app·软件·多功能
Sirius Wu8 小时前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc