前言
PyTorch框架作为一种主流的、对新手友好的深度学习框架,应用的范围越来越广泛,但是作为一种深度学习框架,使用显卡进行加速训练是一种常见的需求,而PyTorch框架官方支持对NVIDIA卡支持更加友好,这一点从官方的安装指引也可以看出:
但是个人计算机(特别是本地Windows系统),很多时候并没有N卡,而只有AMD的Radeon卡或者Intel卡,同时很多时候还是核显而非独显,此时如果需要使用显卡,需要通过DML(DirectML)进行PyTorch模型训练的环境配置。
1.创建虚拟环境
虚拟环境使用Python3.9,使用conda进行虚拟环境管理:
conda create -n deepbase python=3.9 -y
2.安装PyTorch(可省略)
因为显卡使用A卡或者I卡、而非N卡,因此不选择cuda版本的PyTorch、而直接安装CPU版即可。切换到虚拟环境后,使用conda安装CPU版PyTorch:
conda install pytorch==2.0.0 cpuonly -c pytorch -y
3.安装DirectML接口
如果PyTorch需要支持AMD等非N卡,一种方式是选择DirectML接口进行加速,DirectML 是用于机器学习的高性能硬件加速 DirectX 12 库。DirectML 在广泛支持的硬件和驱动程序上为常见的机器学习任务提供 GPU 加速,其中包括 AMD、英特尔、英伟达和高通等供应商生产的所有支持 DirectX 12 的 GPU。
PyTorch与DirectML的版本对应关系如下:
torch-directml | PyTorch |
---|---|
0.1.13+ | 1.13+ |
1.8.0a0.* | 1.8 |
安装命令如下:
pip install torch-directml
当前安装的torch-directml版本为0.2.0。
因为安装torch-directml依赖PyTorch,同时有明确的版本对应关系,因此步骤2也可以省略,在安装torch-directml时即会自动安装对应版本的PyTorch。
4.使用测试
可以查看DML是否安装成功并且可用:
>>> import torch
>>> torch.cuda.is_available() # cuda不可用
False
>>> import torch_directml
>>> torch_directml.is_available() # DML可用
True
查看可用的GPU显卡名称:
>>> torch_directml.device_name(0)
'Radeon RX550/550 Series'
>>> torch_directml.device_name(1)
'Intel(R) UHD Graphics 630'
使用DML进行计算:
>>> import time
>>> import torch
>>> import torch_directml
>>>
>>>
>>> a=torch.randn(40000000,1)
>>> b=torch.randn(40000000,1)
>>> t0=time.time()
>>> r=a*b
>>> print(r)
tensor([[-1.1785],
[-1.3836],
[-0.6546],
...,
[ 0.1480],
[-0.7637],
[-0.7420]])
>>> print(time.time()-t0)
0.048870086669921875
>>>
>>> c=a.to(torch_directml.device(0))
>>> d=b.to(torch_directml.device(0))
>>> t1=time.time()
>>> r=c*d
>>> print(r)
tensor([[-1.1785],
[-1.3836],
[-0.6546],
...,
[ 0.1480],
[-0.7637],
[-0.7420]], device='privateuseone:0')
>>> print(time.time()-t1)
0.1271059513092041
>>>
>>> e=a.to(torch_directml.device(1))
>>> f=b.to(torch_directml.device(1))
>>> t2=time.time()
>>> r=e*f
>>> print(r)
tensor([[-1.1785],
[-1.3836],
[-0.6546],
...,
[ 0.1480],
[-0.7637],
[-0.7420]], device='privateuseone:1')
>>> print(time.time()-t2)
0.2713508605957031
可以看到,此时使用A卡和I卡得计算速率都比使用CPU更慢,一方面可能是因为A卡等显卡的版本和配置等原因,有可能其计算性能还低于CPU,另一方面可能是需要进行梯度下降和反向传播时才能体现显卡的优势。具体使用时还是需要根据表现进行灵活选择。
总结
PyTorch对NVIDIA显卡的支持最好,但是通过额外配置,也可以支持其他常见显卡,但是性能上可能存在一定的区别,需要根据需要和表现进行灵活选择。