金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评

背景

在Win10游戏本中搭建MindSpore-GPU的深度学习环境中,MindSpore-GPU利用Windows,WSL,Ubuntu和Docker的环境终于可以跑起来,而且肉眼可见GPU的确参与了运算。这一段时间用下来,我并没有踩上风火轮的欣快,总感觉哪里不对劲呢。本人不谙测试之道,但是看着慢吞吞的进度实在难以忍受,故而赶鸭子上架,用些笨办法做一点性能量化对比实验。虽然方法不严谨,但对于展示各种环境下的运行表现已经足够了。

闲话到此,以下干货。

一、运行环境

除了上一篇文中所搭建的环境之外,为了对比MindSpore在宿主机与虚拟机表现差别,我在主机内安装了MindSpore-CPU版本,环境参数如下:

  • conda:4.8.4

  • python:3.7.5

  • MindSpore: 1.0.0 (cpu)

二、实验过程和结果

1、从MindSpore官方代码仓下载Lenet示例代码。

2、分别在宿主机、WSL Ubuntu docker环境下运行该代码。

3、在docker下运行时,分别指定目标设备为CPU,GPU

4、由于机器上有两块显卡,因此在把GPU指定为目标设备时,可能会选择Intel HD-630或NVidia GTX1050Ti,根据资源管理器的图表记录对应的数据

5、当GPU为指定设备时,分别选择数据下沉和数据不下沉两种模式

6、每个配置下分别运行三次,把第10轮训练结束时报告的用时记录下来。

7、实验数据

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第1张图片

使用GPU与使用CPU对比性能有提升吗?我反正看不出来。我不由开始怀疑,我的英伟达,你是不是怀揣着一颗扣肉的心

三、使用PyTorch进一步实验

MindSpore-GPU不支持Windows,因此无法让我在的宿主机上做对照实验。我不得不换个思路,用PyTorch再作一次对比测试——因为PyTorch可以做到WL双修。

  • 宿主机环境:  

    CPU: Intel Core-i7-7700HQ @2.8GHz  

    RAM: 16GB  

    GPU: NVidia GeForce 1050Ti  

    OS: 64-bit Windows Home 2004 (20241.1005)  

    CUDA: 11.2  conda: 4.8.4  

    Python: 3.7.5  

    Pytorch: 1.5.1  

    cudatoolkit: 10.1  

    CuDNN:7  

  • WSL2 Ubuntu 环境:  

    OS: Ubuntu 18.04  

    conda: 4.8.4    

    Python: 3.7.5  

    Pytorch: 1.5.1

     cudatoolkit: 10.1  

    CuDNN:7  

  • WSL Ubuntu Docker环境  

    Docker: 19.03.13  

    conda: 4.8.4  

    Python: 3.7.5  

    Pytorch: 1.5.0  

    cudatoolkit: 10.1  

    CuDNN:7  

实验步骤:

1、从 Dive-into-DL-PyTorch代码仓获取PyTorch版的Lenet脚本

2、在上述三个环境中,分别指定CPU和GPU设备运行,记录用时

对比性能输出如下:

  • Windows

    • 使用CPU的用时

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第2张图片

    • 使用GPU的用时

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第3张图片

    可以看出,在物理机Windows中,使用GPU的用时是使用CPU的1/3。看到这样的对比结果是比较舒适的。

    • 使用CPU的系统资源开销

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第4张图片

    • 使用GPU的系统资源开销

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第5张图片

    以看到,当使用CPU时,任务启动瞬间已经把负载跑满,只有当一轮训练完成时才小小喘口气,当下一轮启动时,系统负载又马上回到100%。而使用GPU时,CPU的负载在30%    以下,同时显存利用率提升,说明GPU承担了运算任务。

  • WSL Ubuntu

    • 使用CPU的用时

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第6张图片

    • 使用GPU的用时    

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第7张图片

    与物理机数据对比,有3个现象非常明显:

    1、使用CPU的用时是使用GPU的一半(我去!!!)。

    2、不过稍感安慰的是,在虚拟机Ubuntu中使用GPU的用时是在物理机Windows中使用CPU用时的一半(有点绕,就是虚拟机GPU用10秒,物理机CPU用时20秒)

    3、虚拟机中使用CPU的用时竟然还要优于在物理机Windows中使用GPU(惊讶!!!)。

    我现在大概有点明白,为什么业内大佬们都愿意用Linux炼丹了。不过性能有这么大的差别,不太好解释,或许是由于PyTorch有针对性地做过Linux系统下的优化?

  • 使用CPU的系统资源开销    

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第8张图片

    • 使用GPU的系统资源开销

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第9张图片

    可以看出使用CPU时,任务前半段负载达到100%,后半段下降到80%左右。任务结束很快,负载也回到1%上下。使用GPU时,CPU的负载在30左右,与使用物理机时相比稍有    提高。

  • WSL Ubuntu Docker

    • 使用CPU的用时

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第10张图片

    • 使用GPU的用时

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第11张图片

    • 使用CPU的系统资源开销

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第12张图片

    • 使用GPU的系统资源开销

金字塔项目(二):MindSpore-GPU在同一主机的不同环境中的性能粗评_第13张图片

    使用WSL Ubuntu Docker运行的表现几乎复制了WSL Ubuntu。可以看出Docker对资源占用很小。

四、总结

  • 看来使用虚拟机对GPU的性能损失非常大。

  • 对比用PyTorch和Mindspore的运行结果,PyTorch在虚拟机中用GPU相对于宿主机Windows中使用CPU有性能上的大幅提升,而MindSpore无论使用CPU还是GPU性能都接近,我猜是因为PyTorch针对Linux和虚拟化的GPU环境做了优化,而MindSpore重点是发挥自研的Atlas芯片的威力,对GPU(尤其是消费级产品,而且是经虚拟化后的GPU)还没有优化充分。

  • 虽然这个对比结果让我非常失望,不过我还是决定暂时保留现在的环境,毕竟我只有这一台机器可用,Windows上的很多应用一时也不太容易在Ubuntu上找到替代品,而且MindSpore对消费级GPU的适配还是未知数,因此,贸然完全切换到Ubuntu不是我当前的首选。

  • 那么还有必要保存WSL+Docker运行MindSpore-GPU的环境吗?我觉得还是有必要的。查一下MindSpore网络支持就能发现,大部分的网络还不支持CPU。所以从学习和体验的角度来看,有一套GPU的环境是必要的。

转自文章链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=86010

感谢作者的努力与分享,侵权立删!

你可能感兴趣的:(算法,python)