一、相关背景
基于intel自己的硬件,出了一个专门用于pytorch 的加速包,需要cpu或者显卡是intel的。具体的适用型号没看。
二、加速实验
2.1 resnet 50
- input shape 1, 3, 224, 224, model resnet 50,
- 未优化2 是在 优化 之后运行
- 耗时单位为秒
第一次 | 第二次 | 第三次 | 第四次 | 平均 | |
未优化1 | 0.036 | 0.029 | 0.030 | 0.030 | 0.03125 |
未优化2 | 0.029 | 0.030 | 0.030 | 0.033 | 0.0305 |
优化 | 0.025 | 0.025 | 0.025 | 0.023 | 0.0245 (平均耗时降低20.65%) |
RTX 3090 | 0.002 |
input shape 16, 3, 224, 224, model resnet 50
第一次 | 第二次 | 第三次 | 第四次 | 平均 | |
未优化1 | 0.555 | 0.561 | 0.559 | 0.568 | 0.56075 |
未优化2 | 0.561 | 0.559 | 0.560 | 0.543 | 0.55575 |
优化 | 0.383 | 0.385 | 0.386 | 0.385 | 0.38475 (平均耗时降低31.18%) |
RTX 3090 | 0.012 |
核心代码如下
import os
import os.path as osp
import torch
import torchvision.models as models
import time
model = models.resnet50(pretrained=True)
model.eval()
data = torch.rand(1, 3, 224, 224)
import intel_extension_for_pytorch as ipex
model = ipex.optimize(model)
with torch.no_grad():
for i in range(10):
model(data)
t1 = time.time()
for i in range(10):
model(data)
print(f'average time is {(time.time()-t1) / 10.0 :.3f} seconds')
2.2 mobileNet v2
第一次 | 第二次 | 第三次 | 第四次 | 平均 | |
未优化1 | 0.011 | 0.008 | 0.007 | 0.008 | 0.0085 |
优化 | 0.006 | 0.006 | 0.005 | 0.006 | 0.00575 平均用时降低 32.36% |
RTX 3090 | 0.00130 |
第一次 | 第二次 | 第三次 | 第四次 | 平均 | |
未优化1 | 0.161 | 0.162 | 0.162 | 0.164 | 0.16225 |
优化 | 0.062 | 0.060 | 0.060 | 0.065 | 0.06175 平均用时降低62% |
RTX 3090 | 0.00423 |
三、结论
- 确实有效,提升幅度不小
- 对于depthwise separable conv 效果更加,batchisze大一些效果比较好,但是没进行更多batchsize的测试
- GPU好强
四、其他
使用top命令观察了一下CPU的利用率,硬件表现来看,未优化前CPU利用率大约为57.2% 优化后CPU利用率越有上升,60.0%