Skip to content

zhengxuan-luan/-ai-system-lab2

Repository files navigation

Lab 2 - 定制一个新的张量运算

实验目的

  1. 理解DNN框架中的张量算子的原理
  2. 基于不同方法实现新的张量运算,并比较性能差异

实验环境

  • PyTorch==1.5.0

实验原理

  1. 深度神经网络中的张量运算原理
  2. PyTorch中基于Function和Module构造张量的方法
  3. 通过C++扩展编写Python函数模块

实验内容

实验流程图

具体步骤

  1. 在MNIST的模型样例中,选择线性层(Linear)张量运算进行定制化实现

  2. 理解PyTorch构造张量运算的基本单位:Function和Module

  3. 基于Function和Module的Python API重新实现Linear张量运算

    1. 修改MNIST样例代码
    2. 基于PyTorch Module编写自定义的Linear 类模块
    3. 基于PyTorch Function实现前向计算和反向传播函数
    4. 使用自定义Linear替换网络中nn.Linear() 类
    5. 运行程序,验证网络正确性
  4. 理解PyTorch张量运算在后端执行原理

  5. 实现C++版本的定制化张量运算

    1. 基于C++,实现自定义Linear层前向计算和反向传播函数,并绑定为Python模型
    2. 将代码生成python的C++扩展
    3. 使用基于C++的函数扩展,实现自定义Linear类模块的前向计算和反向传播函数
    4. 运行程序,验证网络正确性
  6. 使用profiler比较网络性能:比较原有张量运算和两种自定义张量运算的性能

  7. 【可选实验,加分】实现卷积层(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++层次定制张量运算的差别并不大。

参考代码

  1. 基于Python API实现定制化张量运算Linear

    代码位置:Lab2/mnist_custom_linear.py

    运行命令:python mnist_custom_linear.py

  2. 基于C++ API实现定制化张量运算Linear

    代码位置:Lab2/mnist_custom_linear_cpp.py

    运行命令:

    cd mylinear_cpp_extension
    python setup install --user
    cd ..
    python mnist_custom_linear_cpp.py
    

参考资料

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published