硬件配置:
机型:机械革命s1,2018年
CPU:i7-8550U
GPU:Nvidia Geforce MX150(满血版),2G显存
内存:单条16g (自己更换的)
软件信息:
CUDA:v10.2.89
Display Driver:441.66
最近做机器学习,想测试一下自己的顶配轻薄本上的MX150独显,相比cpu和集显来讲,到底能有多少提速。因此就有了这次测试。
按照官网guidance走,十分顺利。由于不是本文的重点,就简单讲下。
Guidance有2个:一个是 Quick Start Guide,另一个是 Cuda Installation Guide for Windows
安装步骤第一步:更新显卡驱动 为441.66;第二步:安装 Microsoft Visual Studio 2019,Community版本即可,安装时记得勾选C++组件,cuda程序编译时会用到,需要大概7GB硬盘空间;第三步:安装 cuda10.2,显卡驱动已经更新过了记得选自定义安装,然后untick显卡驱动Display Driver,还有Geforce Experience也不是必须的那个是打游戏用的,也可以untick。
不过在做之前要注意一下cuda版本和Display Driver版本,以及MSVC的对应关系:Cuda Toolkit Release Notes,根据自己要装的cuda版本,去选择显卡驱动的版本。
搜索Google可以查到,
i7-8550u自带的集显UHD 620理论算力应该在 430 GFlops 左右,
而Geforce MX150的理论算力应该在 1,177 GFlops 左右,
因此独显比集显的理论倍数大约应为2.7倍左右,
下面进行测试。
这里的测试用例来自这位csdn的朋友的文章:pycuda 之 安装与简单使用,基本就是两个长向量加加减减再求内积,N为原始向量长度。
注:这里碰到一个bug:
nvcc fatal : Cannot find compiler 'cl.exe' in PATH
错误原因是C++编译器cl.exe不在系统环境变量里,解决方法是把带有cl.exe编译器的目录,放进PATH中,然后重启计算机即可。
这里根据我的VS 2019版本,添加的路径为:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\Hostx64\x64
测试结果:
------------1---------------
N = 10485760
gpu run time 0.064494 seconds
cpu run time 0.144696 seconds
-0.0014648438 0.001953125
------------2---------------
N = 20971520
gpu run time 0.125063 seconds
cpu run time 0.302542 seconds
-0.0014648438 0.0014648438
------------3---------------
N = 31457280
gpu run time 0.187235 seconds
cpu run time 0.439143 seconds
-0.0014648438 0.0014648438
------------4---------------
N = 41943040
gpu run time 0.250251 seconds
cpu run time 0.567680 seconds
-0.0014648438 0.0014648438
------------5---------------
N = 52428800
gpu run time 0.311149 seconds
cpu run time 0.697281 seconds
-0.0014648438 0.0014648438
------------6---------------
N = 62914560
gpu run time 0.375471 seconds
cpu run time 0.857080 seconds
-0.0014648438 0.0014648438
------------7---------------
N = 73400320
gpu run time 0.434704 seconds
cpu run time 1.031650 seconds
-0.0014648438 0.0014648438
------------8---------------
N = 83886080
gpu run time 0.844024 seconds
cpu run time 1.146626 seconds
-0.0014648438 0.0014648438
------------9---------------
N = 94371840
gpu run time 1.228094 seconds
cpu run time 1.327372 seconds
-0.0014648438 0.0014648438
然后往后跳过了一些:
------------15---------------
N = 157286400
gpu run time 0.938998 seconds
cpu run time 2.088095 seconds
-0.0014648438 0.0014648438
------------16---------------
N = 167772160
gpu run time 1.682067 seconds
cpu run time 2.222236 seconds
-0.0014648438 0.0014648438
------------17---------------
N = 178257920
gpu run time 1.728806 seconds
cpu run time 2.381657 seconds
-0.0014648438 0.0014648438
直接跳到20:
------------20---------------
N = 209715200
gpu run time 1.238891 seconds
cpu run time 3.056840 seconds
-0.0014648438 0.0014648438
21就OOM了:pycuda._driver.MemoryError: cuMemAlloc failed: out of memory
可以看到在pycuda的测试用例中,GPU的速度基本上在CPU的1.5-2.7倍左右,偶尔不稳定。
xgboost的测试用例来自xgboost官方github:https://github.com/dmlc/xgboost/tree/master/tests/benchmark 中的benchmark_tree.py,用hist方法对750000×50的随机矩阵进行500次的迭代查找分割点。
测试结果:
hist | 118.29 s |
gpu_hist | 48.70 s |
可以看到在xgboost的测试用例中,GPU的速度大概是CPU的2.5倍左右,基本符合理论值。
注:关于如何查看是否成功开启CUDA GPU加速,我这边踩了个坑,记录了下来,具体可以查看我的另一篇文章:
XGBoost源码编译教程,以及编译后.dll文件下载
虽然笔记本很破,但cuda还是可以玩的!折腾至上!
通过此次测试,一方面熟悉了windows上cuda环境的部署,另一方面也对显卡的计算力有了一个更直观的了解,比如通过TechPowerUp提供的相对性能表,就可以很容易的推算出与各大主流显卡的性能差距,进而选择合适的升级方案了。
另:MX150这块卡应该算是主流的顶配轻薄游戏本上的常见配置了(MX150市面上有2款,一款满血版25w的,另一款10w续航版,后者性能很差,机械革命s1的是前者),这里我根据相对性能列了一张表,大家可以参考一下:
i7-8550u (with UHD 620) | 0.37 |
MX150 | 1倍 |
1050 | 1.9 |
1060 |
3.78 |
1070 | 5.1 |
1080 | 6 |
1080Ti | 7.65 |
2060 | 6 |
2070 | 7 |
2080 | 8.22 |
2080Ti | 9.62 |
Tesla M60 | 3.38 |
Tesla P4 | 3.85 |
Tesla P40 | 7.90 |
Tesla P100-PCIe-16GB (Kaggle Kernel配置) |
6.42 |
Tesla K40 | 3.38 |
Tesla K80 (Colab旧配置) | (无数据,理论上是2块K40的叠加: 6.76) |
Tesla T4 (Colab新配置) | 7 |
Tesla v100 (Baidu AI Studio配置) | 10.57 |
(实际性能不一定同理论一样,有文章就反映说Colab的T4比他本地的1080Ti慢了将近2倍,所以仅供参考,实际性能还要和环境,CPU,内存等挂钩)
基于Xgboost的基准测试:
Colab hist (with CPU Kernel) | 183.20 s |
Colab hist (with GPU Kernel) | 137.50 s |
Colab gpu_hist (with GPU Kernel Tesla P4) | 14.54 s |
Kaggle hist (with CPU Kernel) | 109.93 s |
Kaggle gpu_hist (with GPU Kernel Tesla P100) | 7.09 s |
Baidu AI Studio gpu_hist (with GPU Kernel Tesla V100) | 4.09 s |