attention标点fp16和fp32速度对比
NVIDIA-SMI Driver Version: 410.104 CUDA Version: 10.0 使用TensorFlow Serving Docker方式
model\batch | length | 1 | 8 | 16 | 32 | 64 | 128 |
---|---|---|---|---|---|---|---|
fp32+freeze | length64 | 2.67ms | 3.95ms | 5.61ms | 10.30ms | 17.45ms | 33.21ms |
length128 | 2.81ms | 6.06ms | 10.50ms | 17.70ms | 34.18ms | 65.86ms | |
fp16+freeze | length64 | 7.94ms | 3.13ms | 4.08ms | 5.36ms | 9.46ms | 16.18ms |
length128 | 2.79ms | 4.05ms | 5.59ms | 9.44ms | 16.17ms | 31.35ms |
freeze指固化后的模型,此处使用tfs方式,其他方式见[保存格式转换(https://blog.csdn.net/qq_43208303/article/details/106528606)
NVIDIA-SMI Driver Version: 418.56 CUDA Version: 10.1 TensorFlow Version: 1.13(GPU)
model\batch | length | 1 | 8 | 16 | 32 | 64 | 128 |
---|---|---|---|---|---|---|---|
fp32+freeze | length64 | 4.7ms | 13.55ms | 21.47ms | 38.20ms | ||
length128 | 6.09ms | 27.52ms | 39.60ms | 98.16ms | |||
fp16+freeze | length64 | 7.94ms | 29.08ms | 49.44ms | 82.36ms | ||
length128 | 10.44ms | 54.47ms | 80.03ms | 170.35ms |
由结果可知运算速度有大幅提升,且模型文件转换前fp32模型大小118M,转换后fp16模型大小74M;
实验结果直接跑GPU无加速甚至速度降低,对比同精度同batch和length下的tfs和cpu计算结果,考虑计算瓶颈占比过大,硬件计算方面fp32比fp16明显快更多;
而tfs速度加速明显,大batch下接近一倍,考虑模型大小降低和参数量大小降低,优化时间主要在数据读取方面;
转换代码如下:
1 | import os,sys |
转换完在 同样的sess下保存即可(不是sess1):
1 | #2. 保存为pb 在sess中两行 |