- 理解DNN框架中的张量算子的原理
- 基于不同方法实现新的张量运算,并比较性能差异
- PyTorch==1.5.0
- 深度神经网络中的张量运算原理
- PyTorch中基于Function和Module构造张量的方法
- 通过C++扩展编写Python函数模块
-
在MNIST的模型样例中,选择线性层(Linear)张量运算进行定制化实现
-
理解PyTorch构造张量运算的基本单位:Function和Module
-
基于Function和Module的Python API重新实现Linear张量运算
- 修改MNIST样例代码
- 基于PyTorch Module编写自定义的Linear 类模块
- 基于PyTorch Function实现前向计算和反向传播函数
- 使用自定义Linear替换网络中nn.Linear() 类
- 运行程序,验证网络正确性
-
理解PyTorch张量运算在后端执行原理
-
实现C++版本的定制化张量运算
- 基于C++,实现自定义Linear层前向计算和反向传播函数,并绑定为Python模型
- 将代码生成python的C++扩展
- 使用基于C++的函数扩展,实现自定义Linear类模块的前向计算和反向传播函数
- 运行程序,验证网络正确性
-
使用profiler比较网络性能:比较原有张量运算和两种自定义张量运算的性能
-
【可选实验,加分】实现卷积层(Convolutional)的自定义张量运算
硬件环境 | CPU(vCPU数目) | 8 Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz |
GPU(型号,数目) | GeForce GTX 1050 Ti Mobile | |
软件环境 | OS版本 | ubuntu 18.04 |
深度学习框架 python包名称及版本 |
pytorch-gpu 1.5.0 | |
CUDA版本 | cuda 10.01 | |
实现方式(Linear层为例) | 性能评测 |
PyTorch原有张量运算 |
![]() |
基于Python API的定制化张量运算 |
![]() |
基于C++的定制化张量运算 |
![]() |
相较于使用torch.nn.Linear(),自己定制张量运算会使运行速度变为原来的1/15,极大提高了运行效率。无论是通过pytorch的API定制运算或是直接从c++层次定制张量运算的差别并不大。
-
基于Python API实现定制化张量运算Linear
代码位置:
Lab2/mnist_custom_linear.py
运行命令:
python mnist_custom_linear.py
-
基于C++ API实现定制化张量运算Linear
代码位置:
Lab2/mnist_custom_linear_cpp.py
运行命令:
cd mylinear_cpp_extension python setup install --user cd .. python mnist_custom_linear_cpp.py
- EXTENDING PYTORCH: https://pytorch.org/docs/master/notes/extending.html