TensorFlow/PyTorch 使用核显训练(仅限win平台)

在win10/win11上可以通过DirectML使用 AMD/Intel的核显或是独立显卡进行训练

首先要更新显卡驱动:

AMD驱动在这里更新,如果是核显选择具体CPU型号即可:

AMD核显驱动icon-default.png?t=N7T8https://www.amd.com/en/support/download/drivers.htmlIntel CPU的驱动下载地址

Intel核显驱动icon-default.png?t=N7T8https://www.intel.cn/content/www/cn/zh/search.html?ws=text#sort=relevancy&layout=table&f:@tabfilter=%5BDownloads%5D&f:@stm_10385_zh=%5B%E5%A4%84%E7%90%86%E5%99%A8%5D如果是安装TensorFlow 1.x版本可以参考微软官方方法

在 Windows 上通过 DirectML 启用 TensorFlow1.xicon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/ai/directml/gpu-tensorflow-windows

对应的 whl 文件在这里:

tensorflow-directmlicon-default.png?t=N7T8https://pypi.tuna.tsinghua.edu.cn/simple/tensorflow-directml/

如果是TensorFlow 2.x,需要安装 tensorflow-directml-plugin,详细可以参考微软官方文档:

使用tensorflow-directml-plugin为TensorFlow 2启用GPU加速icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/ai/directml/gpu-tensorflow-plugin

同样对于Pytorch也有对应的DirectML加速版本:

在 Windows 上通过 DirectML 启用 PyTorch 加速icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/ai/directml/gpu-pytorch-windows

我安装的是 tensorflow-directml-1.15.8,在NVIDIA GTX 1070-Ti 显卡上分别测试了原始cuDNN进行训练和用 DML 进行训练的速度差异,写了一个6层的卷积神网用于做图像增强,并且在AMD最新的zen4架构CPU R7-7840H(核显 Radeon 780M 满血为12CU,实测只有6CU)上也进行了测试,训练每一轮的速度如下(1070Ti在cuda11.1上原生/dml分别35.2/44.9ms,更新cuda11.8后速度明显提升30.5/43.5ms),另外后面发现台式机的核显可以在主板BIOS里面设置打开iGPU,补上核显的数据(Intel的核显还是一如既往的烂)

cuDNNdirectMLCPUGPU-TFlopsCPU-TFlops
GTX 1070-Ti30.5 ms43.5 ms-8.3-
I7-8700K-932 ms700 ms0.450.79
R7-5700U-160 ms930 ms1.6-2.00.5-0.9
R7-7840H (6CU) -53.5 ms426 ms4.141.24

上面GTX 1070Ti用的CPU是I7-8700K,速度要明显比R7-7840H慢,CPU版本用的TensorFlow是编译了avx2指令集的版本,可以在这里下载:

Tensorflow-1.14.0-avx2icon-default.png?t=N7T8https://github.com/fo40225/tensorflow-windows-wheel/blob/master/1.14.0/py37/CPU/avx2/tensorflow-1.14.0-cp37-cp37m-win_amd64.whl另外测了一下家里笔记本上Intel I5-1135G7和GeForce MX450显卡的速度

cuDNNdirectMLCPUGPU-TFlopsCPU-TFlops
I5-1135G7-585 ms900 ms1.4-1.60.47
MX45080 ms110 ms-1.3-2.8-
I7-11800H-760 ms496 ms0.7-0.80.95

从上面两组数据可以看出,采用directML接口比原生cuDNN接口慢30%左右

另外多GPU在directML模式下,可以通过设置Session里gpu_options.visible_device_list 的方式指定运行哪个GPU:

def CreateSession(graph=None):
    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    config.gpu_options.visible_device_list = "1"
    return tf.Session(config=config, graph=graph)

具体参考微软的文档:

DirectML FAQ

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值