课题组23-11-15周报
实验关于fp16参数转换速度的问题
本周进行了一个实验,主要用于观察pytorch中对张量转移的各种方法的性能差异。
实验思路
几种不同的传输方向
- cpu -> cpu
- cpu -> gpu
- gpu -> cpu
- gpu -> gpu
几种不同的数据
- fp32 -> fp32
- fp32 -> fp16
调用half()函数,将fp32数据转换为fp16数据
- fp16 -> fp16
- fp16 -> fp32
调用float()函数,将fp16数据转换为fp32数据
目前第三、四种暂未测试
几种不同的传输方式
- copy_()
- to()
实验过程
准备一个目的地矩阵,一个源矩阵组(100个)。分别用随机数初始化。
循环100次,每次都遍历整个矩阵组,传输至对应的目的地矩阵。
测量总时长,对不同情况进行比较
代码模板如下:
1 |
|
如上代码展示了从cpu到cpu传输fp32的过程。最终展示了传输十万个1000*1000的矩阵所耗费的总时间。
经过实验,结果如下表所示:
记录数据如下:
传输方向 | 传输方式 | 数据类型 | 时间 |
---|---|---|---|
cpu -> cpu | copy_() | fp32 -> fp32 | 2.187 |
cpu -> cpu | to() | fp32 -> fp32 | 0.025 |
cpu -> cpu | copy_() | fp32 -> fp16 | 5.855 |
cpu -> cpu | to() | fp32 -> fp16 | 5.634 |
cpu -> gpu | copy_() | fp32 -> fp32 | 9.663 |
cpu -> gpu | to() | fp32 -> fp32 | 9.555 |
cpu -> gpu | copy_() | fp32 -> fp16 | 9.876 |
cpu -> gpu | to() | fp32 -> fp16 | 10.264 |
gpu -> cpu | copy_() | fp32 -> fp32 | 8.895 |
gpu -> cpu | to() | fp32 -> fp32 | 13.649 |
gpu -> cpu | copy_() | fp32 -> fp16 | 10.051 |
gpu -> cpu | to() | fp32 -> fp16 | 7.320 |
gpu -> gpu | copy_() | fp32 -> fp32 | 0.605 |
gpu -> gpu | to() | fp32 -> fp32 | 0.029 |
gpu -> gpu | copy_() | fp32 -> fp16 | 0.484 |
gpu -> gpu | to() | fp32 -> fp16 | 0.591 |
- 注意,测试时间可能会有波动,尤其是在时间较短时,考虑到这种传输主要出现在gpu->gpu中,不是主要考虑内容
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!