当我们使用 Visual Studio 进行机器学习开发时,一般都会推荐安装 ML.NET Model Builder ,这让我们的开发更加可视化,并且按照步骤载入相关的训练集,选择好模型就够了,一切就是如此朴实无华。
说到 ML.NET Model Builder ,之前的更新发布中有提到说,开发者有3种指定的训练环境可选择:本地 CPU,本地 GPU,Azure。我们在无数的机器学习介绍中都了解到,GPU 对于机器学习加速的优势,在 ML.NET 中表现如何呢?说实话,很长一段时间我没有深究过,对于小型图像识别模型,由于图像训练集也很小,训练时长在 CPU 和 GPU 之间相差几乎看不到,所以我决定来点更具挑战性的数据集认真做下对比测试。
在新的测试中我将采用来自 Kaggle 挑战赛的一项计算机视觉方向的任务叫【State Farm Distracted Driver Detection】。这个任务旨在探索一种能够识别开车中的司机分心,有可能导致危险驾驶的图像识别模型。这个任务有一个 1GB 左右的训练用图像集,2.2 w+ 张照片,覆盖了包括打电话、发短信、饮酒、往后看、操作收音机、与他人交谈、化妆等10个分心的标注类型。打开 Visual Studio 后,我在 ML.NET Model Builder 中配置了如下的训练图像分类模型的方案:
CPU 训练
这个训练场景比以往的数据集要重得多。总时间为39.2分钟。实验总时间 : 2353.6729442 秒
------------------------------------------------------------------------------------------------------------------ | Summary | ------------------------------------------------------------------------------------------------------------------ |ML Task: image-classification | |Dataset: C:\Users\bean\AppData\Local\Temp\5e873581-2dab-4d46-911d-cfc0a0455eb1.tsv | |Label : Label | |Total experiment time : 2353.6729442 Secs | |Total number of models explored: 1 | ------------------------------------------------------------------------------------------------------------------
GPU 训练
使用 GPU 后,简直了!以 1/4 的时间完爆 CPU!仅用了9.6 分钟。实验总时间 : 581.1946062 秒
------------------------------------------------------------------------------------------------------------------ | Summary | ------------------------------------------------------------------------------------------------------------------ |ML Task: image-classification | |Dataset: C:\Users\bean\AppData\Local\Temp\cccb2b3f-dbce-45e5-b17e-872b6cc3f116.tsv | |Label : Label | |Total experiment time : 581.1946062 Secs | |Total number of models explored: 1 | ------------------------------------------------------------------------------------------------------------------
结论
GPU 对深度学习的加持再合适不过了,因为它们被设计用于处理的计算类型与深度学习中遇到的计算类型相同,专门处理图像、视频和其他图形的矩阵结构,执行类似放大效果或旋转操作时,本质上做的只是对矩阵应用一些数学变换而已,机器学习过程中的数据运算刚好适配它。另一方面,ML.NET Model Builder 仅依赖于配置 CUDA 10.0 环境的 GPU,大多数 NVIDIA 显卡就能满足。所以没有理由拒绝 GPU 对于 ML.NET 在机器学习中的提升对吧!