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 分钟前
如何接手一个数据团队?
大数据·人工智能
后端研发Marion13 分钟前
【JoyAgent-JDGenie 全栈多智能体系统技术文档】
人工智能·大模型·智能体·langflow·joyagent
多则惑少则明13 分钟前
AI测试、大模型测试(一)
人工智能·ai测试·大模型测试
灰灰勇闯IT24 分钟前
飞桨平台实战:从零训练中文文本分类模型,附完整开发流程
人工智能·分类·paddlepaddle
新智元27 分钟前
GPT-5.2 提前泄露?今夜,OpenAI 要拿 Gemini 3 祭天!
人工智能·openai
catchadmin28 分钟前
用 Laravel 官方 AI 工具提升开发效率 效率提示数倍
人工智能·php·laravel
李小星同志32 分钟前
DPO,PPO,GRPO的学习
人工智能·深度学习·学习
维构lbs智能定位39 分钟前
室内定位无线技术的分类和原理全解析(一)
人工智能·分类·数据挖掘·室内定位无线技术
范男39 分钟前
Qwen3-VL + LLama-Factory进行针对Grounding任务LoRA微调
人工智能·深度学习·计算机视觉·transformer·llama
luod43 分钟前
pymysql执行DDL语句
python