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
相关推荐
楚楚2511 分钟前
2026企业AI办公工具选型指南:从需求匹配到平台评估
大数据·人工智能
三小河2 分钟前
从 Markdown 到 Generative UI:AI 如何从“生成答案”进化到“生成界面”?
前端·人工智能·后端
王立志_LEO15 分钟前
HTTPX 完整用法总结
python
ggb喔17 分钟前
52pojie 的图片工具:为什么无损转换后体积涨了 6 倍、照片方向还是歪的
图像处理·python·算法·计算机视觉·图形渲染·媒体
hnxaoli18 分钟前
win10小程序(二十三)新建带时间文件夹
python
企业数字化笔记24 分钟前
AI工具参数很多怎么办?预设、表单校验、危险参数与配置审计
java·spring boot·python·音视频
a努力。25 分钟前
三插件协同破局前端故障排查困局
人工智能
要吃这碗饭31 分钟前
AI 智能体如何通过 auth.md 注册 Bright Data 账号
数据库·人工智能·php
天远Date Lab39 分钟前
零信任架构实战:基于天远学籍核验三要素构建自动化竞赛资格审查网关
运维·人工智能·架构·自动化