Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pytorch 为什么剪枝后的量化会导致性能下降?_Pytorch_Libtorch - Fatal编程技术网

Pytorch 为什么剪枝后的量化会导致性能下降?

Pytorch 为什么剪枝后的量化会导致性能下降?,pytorch,libtorch,Pytorch,Libtorch,我对我的18个模型进行了量化,使用了图形量化,这导致了大约100ms的前向传递(在我的cpu上)和40MBs的大小缩减(从最初的85到45Mbs) 然后,我继续将这个模型的参数从最初的25M缩减到1450万,其大小从85MB缩减到58MB。然后,我量化了结果模型,希望进一步改进,但结果却越来越小 也就是说,我没有看到我对推理速度的期望。新模型没有更快,只是比初始模型更差(从初始模型量化) 这是预期的行为吗?以下是两个模型进行比较: 这是他们的运行时基准测试结果: 量化(事先不进行修剪): 修剪

我对我的18个模型进行了量化,使用了图形量化,这导致了大约100ms的前向传递(在我的cpu上)和40MBs的大小缩减(从最初的85到45Mbs)

然后,我继续将这个模型的参数从最初的25M缩减到1450万,其大小从85MB缩减到58MB。然后,我量化了结果模型,希望进一步改进,但结果却越来越小

也就是说,我没有看到我对推理速度的期望。新模型没有更快,只是比初始模型更差(从初始模型量化)

这是预期的行为吗?以下是两个模型进行比较:

这是他们的运行时基准测试结果:

量化(事先不进行修剪): 修剪量化模型: 简单地说,在10次迭代之后,每次迭代:

r18_default : 805.72 ms (mean) 
quantized_model : 560 ms (mean)
r18_pruned : 7,466.78  ms
pruned_then_quantized: 578 ms (mean) 
不仅第二个模型没有更快,更糟糕的是,它变得更慢了!您还可以看到,经过修剪的模型非常慢。比默认型号慢10倍

注意: 如果有必要,使用pytorch 1.5.1进行训练(修剪和微调模型),并在windows下使用pytorch 1.6进行最终图形量化

注2:
这是在Windows 10机器上使用LIBLARK(1.6)进行测试和评估的,但是Python和C++之间不应该有任何差异。我不打算下载这些模型,但是像keras这样的总结可能会有所帮助。你所说的每一步的架构是什么意思?您需要jit生成的模型定义还是python模型定义本身?因为它们是jit跟踪的,并且内部不是人性化的。如果要查看默认模型定义。这是保存tsm的
r18_default.tsm
的模型(这是jit跟踪的)。然后使用图形量化对其进行量化,并生成jit<代码>r18_默认值也会被修剪,并且
r18_会被修剪。在修剪之前和之后都会生成jit
。我想你没有把神经元归零,而是修剪了整个卷积层,比如说从
256
通道修剪后剩下
128
。如果你用零剪枝的方法进行剪枝,它不会提供任何速度,因为在剪枝之后PyTorch不会优化稀疏矩阵。我非常怀疑这种情况。我进一步研究了这一点,注意到新修剪的模型在推理时确实享受到了显著的速度提升,但经过微调后,速度会慢10倍!图形量化以某种方式设法忽略了导致速度减慢的原因,并获得了合理的性能(但仍然不如使用新修剪的体系结构的版本好(即,没有进行进一步的微调)你的修剪程序到底是什么?在测试中有没有图形优化的C++?
1>[ RUN      ] EmbedderModelForwardFixture.ModelEmbedderBench (10 runs, 10 iterations per run)
1>[     DONE ] EmbedderModelForwardFixture.ModelEmbedderBench (5778.116020 ms)
1>[   RUNS   ]        Average time: 577811.602 us (~26296.168 us)
1>                    Fastest time: 537246.562 us (-40565.040 us / -7.020 %)
1>                    Slowest time: 617859.662 us (+40048.060 us / +6.931 %)
1>                     Median time: 585275.362 us (1st quartile: 554311.262 us | 3rd quartile: 594753.362 us)
1>
1>             Average performance: 1.73067 runs/s
1>                Best performance: 1.86134 runs/s (+0.13067 runs/s / +7.55054 %)
1>               Worst performance: 1.61849 runs/s (-0.11218 runs/s / -6.48174 %)
1>              Median performance: 1.70860 runs/s (1st quartile: 1.80404 | 3rd quartile: 1.68137)
1>
1>[ITERATIONS]        Average time: 57781.160 us (~2629.617 us)
1>                    Fastest time: 53724.656 us (-4056.504 us / -7.020 %)
1>                    Slowest time: 61785.966 us (+4004.806 us / +6.931 %)
1>                     Median time: 58527.536 us (1st quartile: 55431.126 us | 3rd quartile: 59475.336 us)
1>
1>             Average performance: 17.30668 iterations/s
1>                Best performance: 18.61343 iterations/s (+1.30675 iterations/s / +7.55054 %)
1>               Worst performance: 16.18491 iterations/s (-1.12177 iterations/s / -6.48174 %)
1>              Median performance: 17.08597 iterations/s (1st quartile: 18.04041 | 3rd quartile: 16.81369)
r18_default : 805.72 ms (mean) 
quantized_model : 560 ms (mean)
r18_pruned : 7,466.78  ms
pruned_then_quantized: 578 ms (mean)