为什么虚拟机和主机上运行同样的分词模型,速度会差这么多?

这是主机的:(windows 10, i7-9750H,GTX-1650,4g显存,16g内存)


这是虚拟机的:(debian 11,8个处理器,8g内存)
linux
我从我的训练集中又取了一些数据,二者的计算速度差了数十倍,主机的运算速度在2s左右,而虚拟机的运算速度基本都在0.1秒以内
显然我的显卡没有虚拟化,虚拟机是无法使用gpu的,hanlp的分词模型在虚拟机上是用cpu运行的。为什么虚拟机的cpu反而比主机的gpu更快?是因为分词模型较小吗?
然后,如果对于分词模型cpu真的比gpu更快,为了追求更快的分词速度,我应该需要使用cpu运行分词模型。如果对于多个句子并行分词,cpu还会比gpu更快吗?

好问题,但你的方法得出的速度并不准确,原因是:

  1. 你必须安装正确的cuda、cudnn、mkl等加速library,一般conda比较方便。同时显卡驱动不能太低,否则很多cuda kernel可能会fallback到CPU。
  2. PyTorch在首次forward的时候会“编译”计算图,并加载相应的library。GPU上这些过程可能耗时更长。
  3. GPU的算力价值体现在并行而不是峰值主频,你的GPU显存只有4G应该很旧了,主频可能比CPU低。

正确的评测方法见:Google Colab

用了batching后,GPU比CPU快10倍以上;不用的话,也要快2倍。

1 Like

感谢作者的回答,是的,我的cuda等配置环境没有问题,真正的原因是我的显卡不行 :rofl:之后我又在算力平台的实例上测试了一遍,配置是RTX3090(24g显存),使用gpu的速度:


cpu:

加上其它的一些测试数据,gpu的速度比cpu要快好几倍不止,这还只是单个gpu,如果是多个gpu,速度会更快

1 Like