前言
前文所谈都是基于CPU搭建深度学习的模型,利用CPU来优化模型,数据处理,实际上CPU在运算速度运算能力上不及GPU,随着现如今游戏的发展,挖矿的需求,GPU变得越来越强,GPU可以实现并行计算,对于极高算力要求的深度学习来说,GPU是用来运行深度学习更好的选择。
查看本地GPU状态
这行代码可以看到自己设备的或者云端的GPU型号等信息
!nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 511.79 Driver Version: 511.79 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... WDDM | 00000000:01:00.0 Off | N/A |
| N/A 44C P8 N/A / N/A | 0MiB / 4096MiB | 1% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
这行代码可以看到可用的GPU有几张
import torch
from torch import nn
torch.cuda.device_count()
如果自己本地是有gpu的却返回0,可以安装一下GPU所需的pytorch和cuda,代码如下:
pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
23/4/24补充:这里大家可以根据自己电脑的cuda版本,下载对应的pytorch-gpu,网址:https://pytorch.org/get-started/locally/ 直接在命令行输入pip install那句话就行了。
这里顺便说一句,python或者tensorflow这些深度学习包和cuda版本还有python版本其实是有对应关系的,大家在安装的时候要注意,如果你的cuda版本比较低,但又因为身处实验室不方便升级cuda,或者更喜欢稳定的旧版本cuda,那么就可能需要安装旧版本的tensorflow包,然而在安装包的时候命令行可能会告知我们找不到对应版本,那是因为python的版本可能过高了,自动检测发现当前python版本无法不兼容旧版本的深度学习包,这时候可能需要我们去降python版本或者就是再创一个虚拟环境。
顺便再提一句,tensorflow这个包,他可能会在运行的时候直接把显存占满,或者几乎占满,我也不知道啥原因。这里网上有一种方案可以解决,我忘了出处了,就不给引用了。
import os
config=tf.compat.v1.ConfigProto()
# 设置最大占有GPU不超过显存的50%(可选)
config.gpu_options.per_process_gpu_memory_fraction=0.5
config.gpu_options.allow_growth = True # 设置动态分配GPU内存
sess=tf.compat.v1.Session(config=config)
运行例子
这个函数方便调用GPU,如果碰到没有GPU的情况,那就可以调用CPU,避免报错,方便使用
def try_gpu(i=0): #@save
"""如果存在,则返回gpu(i),否则返回cpu()"""
if torch.cuda.device_count() >= i + 1:
return torch.device(f'cuda:{i}')
return torch.device('cpu')
def try_all_gpus(): #@save
"""返回所有可用的GPU,如果没有GPU,则返回[cpu(),]"""
devices = [torch.device(f'cuda:{i}')
for i in range(torch.cuda.device_count())]
return devices if devices else [torch.device('cpu')]
try_gpu(), try_gpu(10), try_all_gpus()
# 这里将输入的数据存入GPU的内存中
X = torch.ones(2, 3, device=try_gpu(0))
# 这里将神经网络模型也存入GPU内存忠
net = nn.Sequential(nn.Linear(3, 1))
net = net.to(device=try_gpu())
net(X)
# 结果
tensor([[-0.3039],
[-0.3039]], device='cuda:0', grad_fn=<AddmmBackward0>)
小结
要使用GPU跑深度学习,就必须把模型要用的训练数据测试数据、模型全部都放在GPU的内存中,千万不能CPU、GPU内存混用。
后面的学习过程中会更多的使用GPU,极大提高算力。