Pytorch1.3源码解析-第一篇

pytorch$ tree -L 1
.
├── android
├── aten
├── benchmarks
├── binaries
├── c10
├── caffe2
├── CITATION
├── cmake
├── CMakeLists.txt
├── CODEOWNERS
├── CONTRIBUTING.md
├── docker
├── docs
├── ios
├── LICENSE
├── Makefile
├── modules
├── mypy-files.txt
├── mypy.ini
├── mypy-README.md
├── NOTICE
├── README.md
├── requirements.txt
├── scripts
├── setup.py
├── submodules
├── test
├── third_party
├── tools
├── torch
├── ubsan.supp
└── version.txt

17 directories, 15 files

解读如下:

.

├── android

├── aten(aten -A TENsor library for C++11,PyTorch的C++ tensor library,aten有大量的代码是来声明和定义Tensor运算相关的逻辑)

├── benchmarks (PyTorch Benchmarks)

├── binaries (用于移动端基准测试,在PEP中运行pytorch移动基准测试,Run pytorch mobile benchmark in PEP)

├── c10(c10-Caffe Tensor Library,核心Tensor实现(手机端+服务端))

├── caffe2 (TensorRT 6.0 support and PyTorch->ONNX->TRT6 unit test。为了复用,2018年4月Facebook宣布将Caffe2的仓库合并到了PyTorch的仓库,从用户层面来复用包含了代码、CI、部署、使用、各种管理维护等。caffe2中network、operators等的实现,会生成libcaffe2.so、libcaffe2_gpu.so、caffe2_pybind11_state.cpython-37m-x86_64-linux-gnu.so(caffe2 CPU Python 绑定)、caffe2_pybind11_state_gpu.cpython-37m-x86_64-linux-gnu.so(caffe2 CUDA Python 绑定),基本上来自旧的caffe2项目)

├── cmake (TensorRT 6.0 support and PyTorch->ONNX->TRT6 unit test)

├── ios (与性能测试有关脚本)

├── modules (与iOS相关)

├── scripts (与iOS应用测试相关,增加 benchmark code to iOS TestApp)

├── submodules (Re-sync with internal repository)

├── third_party (谷歌、Facebook、NVIDIA、Intel等开源的第三方库)

├── tools (用于PyTorch构建的脚本)

├── torch (TH / THC提供了一些hpp头文件,它们是标准的C ++头文件,而不是C头文件。pytorch的variable、autograd、jit、onnx、distribute、model接口、python接口等都在这里声明定义。其中,PyTorch会使用tools/setup_helpers/generate_code.py来动态生成)

细节 展开2级目录

$ tree -L 2
.
├── android
│       ├── build.gradle
│       ├── gradle
│       ├── gradle.properties
│       ├── libs
│       ├── pytorch_android
│       ├── pytorch_android_torchvision
│       ├── run_tests.sh
│       └── settings.gradle
├── aten
│       ├── CMakeLists.txt
│       ├── conda
│       ├── src
│       └── tools
├── benchmarks
│       ├── fastrnns
│       ├── framework_overhead_benchmark
│       ├── operator_benchmark
│       └── README.md
├── binaries
│       ├── at_launch_benchmark.cc
│       ├── bench_gen
│       ├── benchmark_args.h
│       ├── benchmark_helper.cc
│       ├── benchmark_helper.h
│       ├── caffe2_benchmark.cc
│       ├── CMakeLists.txt
│       ├── convert_and_benchmark.cc
│       ├── convert_caffe_image_db.cc
│       ├── convert_db.cc
│       ├── convert_encoded_to_raw_leveldb.cc
│       ├── convert_image_to_tensor.cc
│       ├── core_overhead_benchmark.cc
│       ├── core_overhead_benchmark_gpu.cc
│       ├── db_throughput.cc
│       ├── inspect_gpu.cc
│       ├── intra_inter_benchmark.cc
│       ├── make_cifar_db.cc
│       ├── make_image_db.cc
│       ├── make_mnist_db.cc
│       ├── parallel_info.cc
│       ├── predictor_verifier.cc
│       ├── print_core_object_sizes_gpu.cc
│       ├── print_registered_core_operators.cc
│       ├── run_plan.cc
│       ├── run_plan_mpi.cc
│       ├── speed_benchmark.cc
│       ├── speed_benchmark_torch.cc
│       ├── split_db.cc
│       ├── tsv_2_proto.cc
│       ├── tutorial_blob.cc
│       └── zmq_feeder.cc
├── c10
│       ├── CMakeLists.txt
│       ├── core
│       ├── cuda
│       ├── hip
│       ├── macros
│       ├── test
│       └── util
├── caffe2
│       ├── c2_aten_srcs.bzl
│       ├── CMakeLists.txt
│       ├── contrib
│       ├── core
│       ├── cuda_rtc
│       ├── db
│       ├── distributed
│       ├── experiments
│       ├── ideep
│       ├── image
│       ├── __init__.py
│       ├── mobile
│       ├── mpi
│       ├── observers
│       ├── onnx
│       ├── operators
│       ├── opt
│       ├── perfkernels
│       ├── predictor
│       ├── proto
│       ├── python
│       ├── quantization
│       ├── queue
│       ├── README.md
│       ├── release-notes.md
│       ├── requirements.txt
│       ├── serialize
│       ├── sgd
│       ├── share
│       ├── test
│       ├── transforms
│       ├── utils
│       ├── VERSION_NUMBER
│       └── video
├── CITATION
├── cmake
│       ├── BuildVariables.cmake
│       ├── Caffe2Config.cmake.in
│       ├── Caffe2ConfigVersion.cmake.in
│       ├── cmake_uninstall.cmake.in
│       ├── Codegen.cmake
│       ├── Dependencies.cmake
│       ├── External
│       ├── GoogleTestPatch.cmake
│       ├── iOS.cmake
│       ├── MiscCheck.cmake
│       ├── Modules
│       ├── Modules_CUDA_fix
│       ├── ProtoBuf.cmake
│       ├── ProtoBufPatch.cmake
│       ├── public
│       ├── Summary.cmake
│       ├── TorchConfig.cmake.in
│       ├── TorchConfigVersion.cmake.in
│       ├── Utils.cmake
│       └── Whitelist.cmake
├── CMakeLists.txt
├── CODEOWNERS
├── CONTRIBUTING.md
├── docker
│       ├── caffe2
│       └── pytorch
├── docs
│       ├── caffe2
│       ├── cpp
│       ├── libtorch.rst
│       ├── make.bat
│       ├── Makefile
│       ├── requirements.txt
│       └── source
├── ios
│       ├── LibTorch.h
│       ├── LibTorch.podspec
│       ├── README.md
│       └── TestApp
├── LICENSE
├── Makefile
├── modules
│       ├── CMakeLists.txt
│       ├── detectron
│       ├── module_test
│       ├── observers
│       └── rocksdb
├── mypy-files.txt
├── mypy.ini
├── mypy-README.md
├── NOTICE
├── README.md
├── requirements.txt
├── scripts
│       ├── add_apache_header.sh
│       ├── apache_header.txt
│       ├── apache_python.txt
│       ├── appveyor
│       ├── build_android.sh
│       ├── build_host_protoc.sh
│       ├── build_ios.sh
│       ├── build_local.sh
│       ├── build_mobile.sh
│       ├── build_pytorch_android.sh
│       ├── build_raspbian.sh
│       ├── build_tegra_x1.sh
│       ├── build_tizen.sh
│       ├── build_windows.bat
│       ├── diagnose_protobuf.py
│       ├── fbcode-dev-setup
│       ├── get_python_cmake_flags.py
│       ├── model_zoo
│       ├── onnx
│       ├── proto.ps1
│       ├── read_conda_versions.sh
│       ├── README.md
│       ├── remove_apache_header.sh
│       ├── run_mobilelab.py
│       ├── temp.sh
│       └── xcode_build.rb
├── setup.py
├── submodules
│       └── nervanagpu-rev.txt
├── test
│       ├── backward_compatibility
│       ├── bottleneck
│       ├── common_cuda.py
│       ├── common_device_type.py
│       ├── common_distributed.py
│       ├── common_methods_invocations.py
│       ├── common_nn.py
│       ├── common_quantization.py
│       ├── common_quantized.py
│       ├── common_utils.py
│       ├── cpp
│       ├── cpp_api_parity
│       ├── cpp_extensions
│       ├── custom_operator
│       ├── data
│       ├── dist_autograd_test.py
│       ├── dist_utils.py
│       ├── error_messages
│       ├── expect
│       ├── expecttest.py
│       ├── HowToWriteTestsUsingFileCheck.md
│       ├── hypothesis_utils.py
│       ├── jit
│       ├── jit_utils.py
│       ├── onnx
│       ├── optim
│       ├── rpc_test.py
│       ├── run_test.py
│       ├── simulate_nccl_errors.py
│       ├── test_autograd.py
│       ├── test_c10d.py
│       ├── test_c10d_spawn.py
│       ├── test_cpp_api_parity.py
│       ├── test_cpp_extensions.py
│       ├── test_cuda_primary_ctx.py
│       ├── test_cuda.py
│       ├── test_dataloader.py
│       ├── test_data_parallel.py
│       ├── test_dist_autograd_fork.py
│       ├── test_dist_autograd_spawn.py
│       ├── test_distributed.py
│       ├── test_distributions.py
│       ├── test_docs_coverage.py
│       ├── test_expecttest.py
│       ├── test_fake_quant.py
│       ├── test_function_schema.py
│       ├── test_indexing.py
│       ├── test_jit_disabled.py
│       ├── test_jit_fuser.py
│       ├── test_jit.py
│       ├── test_jit_py3.py
│       ├── test_jit_string.py
│       ├── test_logging.py
│       ├── test_mkldnn.py
│       ├── test_module
│       ├── test_multiprocessing.py
│       ├── test_multiprocessing_spawn.py
│       ├── test_namedtensor.py
│       ├── test_namedtuple_return_api.py
│       ├── test_nccl.py
│       ├── test_nn.py
│       ├── test_numba_integration.py
│       ├── test_optim.py
│       ├── test_qat.py
│       ├── test_quantization.py
│       ├── test_quantized_models.py
│       ├── test_quantized_nn_mods.py
│       ├── test_quantized.py
│       ├── test_quantized_tensor.py
│       ├── test_quantizer.py
│       ├── test_rpc_fork.py
│       ├── test_rpc_spawn.py
│       ├── test_sparse.py
│       ├── test_tensorboard.py
│       ├── test_throughput_benchmark.py
│       ├── test_torch.py
│       ├── test_type_hints.py
│       ├── test_type_info.py
│       ├── test_type_promotion.py
│       └── test_utils.py
├── third_party(谷歌、Facebook、NVIDIA、Intel等开源的第三方库)
│       ├── benchmark(谷歌开源的benchmark库)
│       ├── cpuinfo(Facebook开源的cpuinfo,检测cpu信息)
│       ├── cub(NVIDIA开源的CUB is a flexible library of cooperative threadblock primitives and other utilities for CUDA kernel programming)
│       ├── eigen(线性代数矩阵运算库)
│       ├── fbgemm(Facebook开源的低精度高性能的矩阵运算库,目前作为caffe2 x86的量化运算符的backend)
│       ├── foxi(ONNXIFI with Facebook Extension)
│       ├── FP16(Conversion to/from half-precision floating point formats)
│       ├── FXdiv(C99/C++ header-only library for division via fixed-point multiplication by inverse)
│       ├── gemmlowp(谷歌开源的矩阵乘法运算库Low-precision matrix multiplication,https://github.com/google/gemmlowp)
│       ├── gloo(Facebook开源的跨机器训练的通信库Collective communications library with various primitives for multi-machine training)
│       ├── googletest(谷歌开源的UT框架)
│       ├── ideep(Intel开源的使用MKL-DNN做的神经网络加速库)
│       ├── ios-cmake(用于ios的cmake工具链文件)
│       ├── miniz-2.0.8(数据压缩库,Miniz is a lossless, high performance data compression library in a single source file)
│       ├── nccl(NVIDIA开源的多GPU通信的优化原语,Optimized primitives for collective multi-GPU communication)
│       ├── neon2sse(与ARM有关,intende to simplify ARM->IA32 porting)
│       ├── NNPACK(多核心CPU加速包用于神经网络,Acceleration package for neural networks on multi-core CPUs)
│       ├── onnx(Open Neural Network Exchange,Facebook开源的神经网络模型交换格式,目前Pytorch、caffe2、ncnn、coreml等都可以对接)
│       ├── onnx-tensorrt(ONNX-TensorRT: TensorRT backend for ONNX)
│       ├── protobuf(谷歌开源的protobuf)
│       ├── psimd(便携式128位SIMD内部函数,Portable 128-bit SIMD intrinsics)
│       ├── pthreadpool(用于C/C++的多线程池,pthread-based thread pool for C/C++)
│       ├── pybind11(C ++ 11和Python之间的无缝可操作性支撑库,Seamless operability between C++11 and Python)
│       ├── python-enum(Python标准枚举模块,Mirror of enum34 package (PeachPy dependency) from PyPI to be used in submodules)
│       ├── python-peachpy(用于编写高性能汇编内核的Python框架,PeachPy is a Python framework for writing high-performance assembly kernels)
│       ├── python-six(Python 2 and 3兼容性库)
│       ├── QNNPACK(Facebook开源的面向移动平台的神经网络量化加速库)
│       ├── README.md
│       ├── sleef(SIMD Library for Evaluating Elementary Functions,SIMD库,用于评估基本函数)
│       ├── tbb(Intel开源的官方线程构建Blocks,Official Threading Building Blocks (TBB))
│       └── zstd((Facebook开源的Zstandard,快速实时压缩算法库)
├── tools
│       ├── amd_build
│       ├── aten_mirror.sh
│       ├── autograd
│       ├── build_libtorch.py
│       ├── build_pytorch_libs.py
│       ├── build_variables.py
│       ├── clang_format.py
│       ├── clang_tidy.py
│       ├── docker
│       ├── download_mnist.py
│       ├── flake8_hook.py
│       ├── generated_dirs.txt
│       ├── git_add_generated_dirs.sh
│       ├── git-pre-commit
│       ├── git_reset_generated_dirs.sh
│       ├── __init__.py
│       ├── jit
│       ├── pyi
│       ├── pytorch.version
│       ├── README.md
│       ├── setup_helpers
│       └── shared
├── torch
│       ├── abi-check.cpp
│       ├── autograd
│       ├── backends
│       ├── _classes.py
│       ├── CMakeLists.txt
│       ├── __config__.py
│       ├── contrib
│       ├── csrc
│       ├── cuda
│       ├── custom_class.h
│       ├── distributed
│       ├── distributions
│       ├── extension.h
│       ├── for_onnx
│       ├── functional.py
│       ├── __future__.py
│       ├── hub.py
│       ├── __init__.py
│       ├── __init__.pyi.in
│       ├── jit
│       ├── _jit_internal.py
│       ├── legacy
│       ├── lib
│       ├── multiprocessing
│       ├── _namedtensor_internals.py
│       ├── nn
│       ├── onnx
│       ├── _ops.py
│       ├── optim
│       ├── py.typed
│       ├── quantization
│       ├── quasirandom.py
│       ├── random.py
│       ├── README.txt
│       ├── script.h
│       ├── serialization.py
│       ├── _six.py
│       ├── sparse
│       ├── _storage_docs.py
│       ├── storage.py
│       ├── _tensor_docs.py
│       ├── tensor.py
│       ├── _tensor_str.py
│       ├── testing
│       ├── _torch_docs.py
│       ├── utils
│       ├── _utils_internal.py
│       └── _utils.py
├── ubsan.supp
└── version.txt

148 directories, 219 files

其中 第三方库:third_party(谷歌、Facebook、NVIDIA、Intel等开源的第三方库):

├── third_party(谷歌、Facebook、NVIDIA、Intel等开源的第三方库)

│ ├── benchmark(谷歌开源的benchmark库)

│ ├── cpuinfo(Facebook开源的cpuinfo,检测cpu信息)

│ ├── cub(NVIDIA开源的CUB is a flexible library of cooperative threadblock primitives and other utilities for CUDA kernel programming)

│ ├── eigen(线性代数矩阵运算库)

│ ├── fbgemm(Facebook开源的低精度高性能的矩阵运算库,目前作为caffe2 x86的量化运算符的backend)

│ ├── foxi(ONNXIFI with Facebook Extension)

│ ├── FP16(Conversion to/from half-precision floating point formats)

│ ├── FXdiv(C99/C++ header-only library for division via fixed-point multiplication by inverse)

│ ├── gemmlowp(谷歌开源的矩阵乘法运算库Low-precision matrix multiplication,https://github.com/google/gemmlowp)

│ ├── gloo(Facebook开源的跨机器训练的通信库Collective communications library with various primitives for multi-machine training)

│ ├── googletest(谷歌开源的UT框架)

│ ├── ideep(Intel开源的使用MKL-DNN做的神经网络加速库)

│ ├── ios-cmake(用于ios的cmake工具链文件)

│ ├── miniz-2.0.8(数据压缩库,Miniz is a lossless, high performance data compression library in a single source file)

│ ├── nccl(NVIDIA开源的多GPU通信的优化原语,Optimized primitives for collective multi-GPU communication)

│ ├── neon2sse(与ARM有关,intende to simplify ARM->IA32 porting)

│ ├── NNPACK(多核心CPU加速包用于神经网络,Acceleration package for neural networks on multi-core CPUs)

│ ├── onnx(Open Neural Network Exchange,Facebook开源的神经网络模型交换格式,目前Pytorch、caffe2、ncnn、coreml等都可以对接)

│ ├── onnx-tensorrt(ONNX-TensorRT: TensorRT backend for ONNX)

│ ├── protobuf(谷歌开源的protobuf)

│ ├── psimd(便携式128位SIMD内部函数,Portable 128-bit SIMD intrinsics)

│ ├── pthreadpool(用于C/C++的多线程池,pthread-based thread pool for C/C++)

│ ├── pybind11(C ++ 11和Python之间的无缝可操作性支撑库,Seamless operability between C++11 and Python)

│ ├── python-enum(Python标准枚举模块,Mirror of enum34 package (PeachPy dependency) from PyPI to be used in submodules)

│ ├── python-peachpy(用于编写高性能汇编内核的Python框架,PeachPy is a Python framework for writing high-performance assembly kernels)

│ ├── python-six(Python 2 and 3兼容性库)

│ ├── QNNPACK(Facebook开源的面向移动平台的神经网络量化加速库)

│ ├── README.md

│ ├── sleef(SIMD Library for Evaluating Elementary Functions,SIMD库,用于评估基本函数)

│ ├── tbb(Intel开源的官方线程构建Blocks,Official Threading Building Blocks (TBB))

│ └── zstd((Facebook开源的Zstandard,快速实时压缩算法库)

Pytorch核心分为5大块:

1. c10(c10-Caffe Tensor Library,核心Tensor实现(手机端+服务端))

2. aten(aten -A TENsor library for C++11,PyTorch的C++ tensor library,aten有大量的代码是来声明和定义Tensor运算相关的逻辑)

3. caffe2 (TensorRT 6.0 support and PyTorch->ONNX->TRT6 unit test。为了复用,2018年4月Facebook宣布将Caffe2的仓库合并到了PyTorch的仓库,从用户层面来复用包含了代码、CI、部署、使用、各种管理维护等。caffe2中network、operators等的实现,会生成libcaffe2.so、libcaffe2_gpu.so、caffe2_pybind11_state.cpython-37m-x86_64-linux-gnu.so(caffe2 CPU Python 绑定)、caffe2_pybind11_state_gpu.cpython-37m-x86_64-linux-gnu.so(caffe2 CUDA Python 绑定),基本上来自旧的caffe2项目)

4. torch (TH / THC提供了一些hpp头文件,它们是标准的C ++头文件,而不是C头文件。pytorch的variable、autograd、jit、onnx、distribute、model接口、python接口等都在这里声明定义。其中,PyTorch会使用tools/setup_helpers/generate_code.py来动态生成)

5. third_party (谷歌、Facebook、NVIDIA、Intel等开源的第三方库)

具体详情如下:

c10下的核心部件(c10-Caffe Tensor Library,最核心Tensor实现(手机端+服务端)。请注意,C10库应保持最小的依赖关系-特别是,它不应该依赖于任何特定于实现或后端的库。它尤其不应依赖于任何生成的protobuf头文件,因为protobuf头文件将可传递性地迫使一个人链接到特定的protobuf版本),具体包括如下:

├── c10

│ ├── CMakeLists.txt

│ ├── core

│ ├── cuda

│ ├── hip

│ ├── macros

│ ├── test

│ └── util

Aten下的核心部件(aten -A TENsor library for C++11,PyTorch的C++ tensor library,aten有大量的代码是来声明和定义Tensor运算相关的逻辑):

$ tree -L 2

.

├── CMakeLists.txt

├── conda

│ ├── build.sh

│ └── meta.yaml

├── src

│ ├── ATen

│ ├── README.md

│ ├── TH

│ ├── THC

│ ├── THCUNN

│ └── THNN

└── tools

├── run_tests.sh

├── test_install.sh

└── valgrind.sup

8 directories, 7 files

其中,Aten/ src下

该目录包含PyTorch低级别的tensor libraries库,同时新的C++版Aten被构建,这些低级别的tensor libraries库可以追溯到最原始的Torch项目,该目录包含库如下:

* TH = TorcH

* THC = TorcH Cuda

* THCS = TorcH Cuda Sparse (now defunct)—不使用了

* THCUNN = TorcH CUda Neural Network (see cunn)

* THNN = TorcH Neural Network

* THS = TorcH Sparse (now defunct) —不使用了

caffe2模块

Caffe2是一个轻量级,模块化和可扩展的深度学习框架。支持TensorRT 6.0 (优化加速) and PyTorch->ONNX->TRT6 unit test。为了复用,2018年4月Facebook宣布将Caffe2的仓库合并到了PyTorch的仓库,从用户层面来复用包含了代码、CI、部署、使用、各种管理维护等。caffe2中network、operators等的实现,会生成libcaffe2.so、libcaffe2_gpu.so、caffe2_pybind11_state.cpython-37m-x86_64-linux-gnu.so(caffe2 CPU Python 绑定)、caffe2_pybind11_state_gpu.cpython-37m-x86_64-linux-gnu.so(caffe2 CUDA Python 绑定),基本上来自旧的caffe2项目。

torch下核心部件(TH / THC提供了一些hpp头文件,它们是标准的C ++头文件,而不是C头文件。pytorch的variable、autograd、jit、onnx、distribute、model接口、python接口等都在这里声明定义。理想情况下,根本不会安装这些标头。相反,应该使用公共函数(在类似THTensor.h的头文件中,而不是THTensor.hpp的头文件中)来操纵这些结构。但是,在Torch / csrc中有一些地方违反了这种抽象。它们头文件有指向此注释的指针。当重构THTensor的核和相关结构时,必须重构每个站点。其中,PyTorch会使用tools/setup_helpers/generate_code.py来动态生成):

.

├── autograd (梯度处理)

├── backends (后向处理,包含cuda、cudnn、mkl、mkldnn、openmp和quantized库)

├── csrc (csrc目录包含与Python集成有关的所有代码。这与lib(它包含与Python无关的Torch库)形成对比。csrc取决于lib,反之则不然。具体包含api、autograd、cuda、distributed、generic、jit、multiprocessing、onnx、tensor和utils)

├── cuda (cuda)

├── distributed (分布式处理,包括autograd)

├── distributions

├── jit (用于最优性能编译)

├── legacy (低于0.5版本才有)

├── lib (它包含与Python无关的Torch库,具体包括:c10d、libshm和libshm_windows)

├── multiprocessing (cuda多线程处理)

├── nn (与神经网络有关的操作与声明,具体包括backends、intrinsic、modules、parallel、qat、quantized和utils)

├── onnx (模型交换格式)

├── optim (优化)

├── quantization (量化)

├── utils (具体包括backcompat、bottleneck、data、ffi、hipify和tensorboard)

third_party三方模块

谷歌、Facebook、NVIDIA、Intel等开源的第三方库,具体包含请见前文。

分层的视角看待:

1 第一层C10: 最核心的Tensor实现,手机端、服务端都用;

2 第二层ATen + TH*: Tensor算法的实现,由ATen和TH*组成这一层面;这一层依赖上一层(第一层)。目前已将ATen 某些core往C10上移植,并且将Torch往ATen上移植;

3 第三层Caffe2: 是一个轻量级,模块化和可扩展的深度学习框架。支持TensorRT 6.0 (优化加速) and PyTorch->ONNX->TRT6 unit test。caffe2中network、operators等的实现,会生成libcaffe2.so、libcaffe2_gpu.so、caffe2_pybind11_state.cpython-37m-x86_64-linux-gnu.so(caffe2 CPU Python 绑定)、caffe2_pybind11_state_gpu.cpython-37m-x86_64-linux-gnu.so(caffe2 CUDA Python 绑定);基本上来自于旧的caffe2项目,这一层依赖上一层(第二层);

4 第四层Torch,PyTorch的实现,TH / THC提供了一些hpp头文件,它们是标准的C ++头文件,而不是C头文件。pytorch的variable、autograd、jit、onnx、distribute、model接口、python接口等都在这里声明定义,这一层会生成libtorch.so和libtorch_python.so(Python绑定),依赖ATen+TH*(第二层),不过因为ATen+TH*的逻辑被封装在了libcaffe2.so,因此这一层要直接依赖上一层(第三层)。

5 其他,如hird_party三方库:谷歌、Facebook、NVIDIA、Intel等开源的第三方库,用于支撑ATen + TH*、Caffe2和Torch。