国际互联网网站,wordpress开发单页面跳转,阅读app软件开发,老域名网站不收录PyTorch的的代码主要由C10、ATen、torch三大部分组成的。其中#xff1a;
C10
C10#xff0c;来自于Caffe Tensor Library的缩写。这里存放的都是最基础的Tensor库的代码#xff0c;可以运行在服务端和移动端。PyTorch目前正在将代码从ATen/core目录下迁移到C10中。C10的代…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_ptrTensorImpl, UndefinedTensorImpl tensor_impl) c10::make_intrusiveat::TensorImpl, at::UndefinedTensorImpl 值得一提的是C10中还使用/修改了来自llvm的SmallVector在vector元素比较少的时候用以代替std::vector用以提升性能;
ATen
ATen来自于 A TENsor library for C11的缩写PyTorch的C tensor library。ATen部分有大量的代码是来声明和定义Tensor运算相关的逻辑的除此之外PyTorch还使用了aten/src/ATen/gen.py来动态生成一些ATen相关的代码。ATen基于C10Gemfield本文讨论的正是这部分
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专栏的后续文章。
部分转载自
https://zhuanlan.zhihu.com/p/55966063