随着深度学习不断渗透到各个AI应用场景,越来越多的研发人员开始依赖GPU算力加速深度学习模型的训练。也有人戏称GPU为深度学习领域的核武器,虽然很多芯片公司都提供了相应的芯片解决方案,但是较为主流的方式还是选用英伟达的GPU并使用上层的CUDA和cuDNN驱动生态进行深度学习应用的开发。由于英伟达新品不断推出,我们列举特定型号的GPU没有太大意义,所以结合选型的不同场景和需求,根据场景进而选择型号的形式更容易应对更迭。
当然除了深度学习,GPU还用于比特币挖矿,游戏渲染和科学计算吗,所以相应设备和服务之前就已经有很多厂商进行提供。
1 公有云方案
Amazon,微软,阿里云等是较为有代表性的厂商,相继提供了不同的解决方案,不同厂商比价较为严重,所以一般价格不会相差悬殊。
1.1 微软Azure
以Azure为例,相应配置和价格可以参考:
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-gpu
1.2 Amazon AWS
1.3 阿里云
2 超算中心方案
由于之前很多自然科学的科学计算负载需要运行在GPU上,所以很多超算中心也会提供相应的资源。
2.1 天河超算
http://jyzd.cumt.edu.cn/campus/view/id/714969
3 物理服务器方案
具体可以参考独立供应商,通过网络或实体进行购买
购买可通过淘宝等网站。
参考:
GPU集群折腾手记:http://mli.github.io/gpu/2016/01/17/build-gpu-clusters/
一起“剁手”之GPU购买指南:http://www.sohu.com/a/193300974_494939
4 个人PC方案
因为GPU之前很多内置于适用于游戏的PC中,例如Geforce系列,较为经济的方式也可以个人安装尝鲜。
5 如何使用GPU服务器
5.1 GPU驱动软件栈及版本查询
硬件:英伟达GPU
软件栈:OS -> CUDA -> cuDNN -> Tensorflow - > Keras
CUDA和cuDNN也就是我们常说的GPU驱动。
首先可以检验软件栈的相应版本软件是否存在和相应版本为何种版本。
5.1.0 安装
方式1-云服务器内置镜像:由于测试环境如果使用的为云服务器带相应驱动的镜像,则会内置相应的驱动。
方式2-可以通过docker使用内置相关镜像的容器。
方式3-自己手动安装相应驱动。
5.1.1 操作系统版本
执行命令:
lsb_release -a
即可查询。
5.1.2 CUDA版本
cuda一般安装在 /usr/local/cuda/ 路径下,该路径下有一个version.txt文档,里面记录了cuda的版本信息
cat /usr/local/cuda/version.txt
即可查询
5.1.3 cuDNN版本
同理,cudnn的信息在其头文件里
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
即可查询
5.1.4 tensorflow-gpu和Keras版本
执行:
pip list
或者
conda list
可以打印tensorflow-gpu和keras版本。
5.2 运行一个使用GPU的样例验证安装成功
测试程序:https://github.com/HC-2016/minist_template
注意:修改测试程序,将引用依赖中的from src都去掉。
5.3 如何使用GPU
5.3.0 如果为云虚拟机,镜像已经内置环境,则默认实例可以直接使用相应的GPU资源
注意:
保持环境中只有tensorflow-gpu版本,且和自己的程序需要的tensorflow版本一致,避免使用过高或者
过低的tensorflow-gpu版本。
5.3.1 Tensorflow使用GPU
(1)代码中指定:
tensorflow在训练模型的时候如何指定GPU进行训练
https://blog.csdn.net/u010238520/article/details/76165736
Keras指定使用GPU [和tf一致]
From <https://blog.csdn.net/silent56_th/article/details/60155072>
可以参考多GPU 形式
https://github.com/kuza55/keras-extras/blob/master/utils/multi_gpu.py
for i in range(gpu_count):
with tf.device('/gpu:%d' % i):
with tf.name_scope('tower_%d' % i) as scope:
(2)通过环境变量:
import os
os.environ['CUDA_VISIBLE_DEVICES']='2'
或者
CUDA_VISIBLE_DEVICES=1 python train.py
如何让keras训练深度网络时使用两张显卡?
From <https://www.zhihu.com/question/67239897/answer/269003621>
5.4 GPU监控
5.4.1 nvidia-smi
执行一次:
nvidia-smi
持续执行:
nvidia-smi -l
5.4.2 其他资源监控
磁盘:因为经常会存储大量训练数据,磁盘很容易变满。
df -lh
友情推荐:ABC技术研习社
为技术人打造的专属A(AI),B(Big Data),C(Cloud)技术公众号和技术交流社群。