windows下A卡、I卡跑AI的救星:DirectML炼丹指南 您所在的位置:网站首页 安装了direct用不了 windows下A卡、I卡跑AI的救星:DirectML炼丹指南

windows下A卡、I卡跑AI的救星:DirectML炼丹指南

2024-06-28 05:15| 来源: 网络整理| 查看: 265

摘要:当今硬件,N卡独占AI鳌头,而为了防止用户拿普通游戏卡用于AI用途,英伟达很贴心地削弱了40系显卡的显存规格。本该给48G才能充分发挥核心优势的4090只给了24G,还取消了所有非计算卡的NVLINK。

So NVIDIA...

AMD这边7900XTX拥有得天独厚的24G显存,理论计算速度在4070ti至4080,但价格仅为7k出头,那么,如果我手上的是一张7900xtx,我是否可以用它来进行AI训练,来节约一定的成本呢?

又或者我手上有一张A77016G,目前性价比极高的16G显卡,单精度能跑到P100的两倍,我能拿它来炼丹吗?

更有甚至,我用的是尔英的笔记本核心桌面主板,CUDA0位置上的卡已经在跑了,但我这还有个96EU的核显,我这有个鸡哥的无界14给了7840HS,核显单精度性能快9Tflops了,能顶一张P10,那么我该怎么利用这些核显扛起我们炼丹的大旗呢?

在lx端,有opencl,是torch官方支持的硬件接口,windows端,则由微软提供的DML来提供这条计算速度起飞的“跑道”。本教程将通过英特尔核显UHD620作为例子,以展示通过DML进行模型训练的环境配置。

关键词:GPU加速、AI训练、DML

第1章 设备配置要求

1.1 显卡选择

      对于显卡类型的选择,在windows环境下,一张符合微软DirectX标准的显卡显然是使用DML接口炼丹的充分必要条件,目前市面上大多数显卡都符合该标准,都可以作为DML的炼丹卡。

      在不确定自己的显卡是否支持DML时,可下载gpuz:GPU-Z Graphics Card GPU Information Utility (techpowerup.com)

      安装并进入软件后,如下所示:

左下角可切换查看的显卡,如果你的设备上插了不止一张显卡的话

       下方DirctML前面的方框中打勾,说明这张显卡可以进行接下来的DML配置,以参与到模型训练中。

       对于一些低计算能力的显卡,如果想比较其性能与CPU相比谁胜谁负,可参考:关于CPU的浮点运算能力计算 - 简书 (jianshu.com),因此,对目前常见的CPU,没有必要为了所谓的“快一点”而特意选配一些老古董级别的显卡。而且,由于DML接口需要CPU进行逻辑性的处理,使用DML时,“显卡偷U”的现象很明显,因此进行DML加速的显卡最好要比CPU强。

 1.2 内存选择

      对于使用核显或者有计划超显存使用显卡的DML用户,内存应尽量大,频率应尽量高,由于DML接口由windows操作系统直接进行调度,因此通过该办法可以使用“共享GPU内存”来扩增显存,提高吞吐量,综合显存带宽由显存和内存的使用部分加权乘以各自的等效带宽而来,因此,有使用高频内存的必要。内存的选择至少应该大于8G以保证操作系统正常运行,同时,如果需要“小马拉大车”,还应大于显存容量+8G。

第2章 环境配置

2.1 python版本选择

      目前,pytorch_directml支持的最大python版本为3.10,本教程选择该版本python作为解释器使用。

      在anaconda环境下,可以通过输入:

conda create -n 此次填写环境名字 python==3.10.x(x为任意版本,视需要而定,但通常来讲,一个大版本内的python区别不大)

指令来创建环境。

2.2 pytorch_directml版本选择

      进入微软torch下的DirectML仓库,以获得torch_dircetml:DirectML/PyTorch at master · microsoft/DirectML · GitHub

      

根据名称获得相应torch

其中,1.13版本以后的torch需要搭配0.1.13+的torch_directml,1.8以下的需要搭配1.8.0a0的torch_directml。这两个版本前者作为一个独立的三方包,提供一个torch和一个torch_directml,torch版本视下载的torch_directml而定,0.2.0版本附带的是2.0.0+cpu版本的torch。(细心的你可能已经发现了torch_directml版本和torch版本间的关系)

后者则默认附带一个魔改版的1.8.0的torch。

第3章 使用方法与效果

3.1 使用方法

       对于1 .8 版本的torch_directml:

       查找dml设备是否可用:torch.dml.is_available()

       查找dml设备名称:torch.dml.device_name(),括号内填写设备序号

       调用dml设备:torch.dml.device(),括号内填写设备序号

       对于1.13之后的版本:

       查找dml设备是否可用:torch_directml.is_available()

       查找dml设备名称:torch_directml.device_name(),括号内填写设备序号

       调用dml设备:torch_directml.device(),括号内填写设备序号

3.2 使用案例

#如下为python代码

import torch_directml

import torch

import time

a=torch.randn(40000000,1).cpu()

b=torch.randn(40000000,1).cpu()

t0=time.time()

c=a*b

print(c)

print(time.time()-t0)

a=a.to(dtype=torch.float32,device=torch_directml.device(1))

b=b.to(dtype=torch.float32,device=torch_directml.device(1))

t1=time.time()

d=a*b

print(d)

print(time.time()-t1)

#代码结尾

运行效果:

上面为CPU计算结果,下面是核显计算结果

由于UHD620单精度性能仅有384GFlops,低于8250U短时睿频的435.2GFlops,且需要调用双倍内存来处理设备化的数组与等待DML接口处理和相应,内存也到达了这台电脑的瓶颈,因此,这颗核显比CPU慢。将数组大小扩大至80000000*2后,核显跟cpu用时的比例进一步下降:

计算时的系统状态:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有