-
【注】:本篇文章同样适用于NVIDIA RTX 4060 及以上版本 40系列的显卡,因为 pytorch 支持到的 CUDA 的12.1版本已经是最高的了,但是 4060 显卡可以使用的 CUDA 版本是 12.3,所以这样理解的话(根据向下兼容特性),40系列显卡都是适用的
-
(若说错了,请友好评论,俺懂得并不多哈)
环境要求
- windows 11
- GPU:RTX4060
- CUDA
- anaconda
- python39
- pytorch
前言
- 前面2篇文章中,我成功使用了 CPU 进行模型训练,也成功做到了对正在运行的游戏应用程序进行目标识别(同时实现了简单的实时监控检测结果)
- 在本篇中的小目标就是把 CPU 换成 GPU 进行模型训练,因为随着后续功能慢慢提升,GPU 进行模型训练会更高效
- 严格按照本篇文章说的步骤去操作的话,可以避免遇到一些不必要的问题(我通过网上现有的一些材料就遇到了不少问题,大多数都没把细节步骤写清楚,所以我为了自己以后方便查阅,也为了分享,就整理出了这篇文章)。
1 - 环境安装准备 在此!
- windows 11 安装就不用多说了
1.1 - 安装 NVIDIA 基础驱动
- 1.1 - 基础驱动
-
- 1.1.1 - 其中 [NVIDIA PhysX 系统软件] 和 [NVIDIA 图形驱动程序] 是只要有 NVIDIA控制面板 就会有的
-
- 1.1.2 - 而其中 [NVIDIA GeForce Experience] 和 [NVIDIA FrameView SDK] 是需要去安装 NVIDIA GeForce Experience 才会有的,官方下载安装链接:NVIDIA GeForce Experience; 需要特别提醒的是国内安装时会出现下载更新失败的问题,我是直接通过迅游加速器来加速的(新人输入兑换口令"游戏王"可有3天免费试用,然后搜索“英伟达”找到“英伟达注册登录”进行加速,再来重新安装 [NVIDIA GeForce Experience] 就能很快自动更新且安装好了,当然网上也提供了别的方式,我就图这个加速器方便而已)
1.2 - 安装 NVIDIA CUDA
- 【CUDA介绍】:NVIDIA CUDA 是一个强大的并行计算平台,通过利用GPU的高度并行计算能力,可以显著加速各种计算密集型应用程序的运行速度。这使得GPU不仅可用于图形处理,还可以广泛应用于科学计算、机器学习、数据分析等领域;在使用 Pytorch 模型训练时,需要 CUDA 的配合来使用。
- 1.2 - CUDA 12.1.0 下载(我目前2024年4月6日能选择的 Pytorch 对应可以使用到最新的 CUDA 版本就是 12.1)
-
- 1.2.1 - 官方下载地址链接:CUDA 12.1.0
- 1.2.1 - 官方下载地址链接:CUDA 12.1.0
-
- 1.2.2 - 附:官方CUDA 历史版本列表
- 1.2.2 - 附:官方CUDA 历史版本列表
-
- 1.2.3 - 测试是否安装成功
# 在随便哪个终端输入指令
nvcc -V
-
-
- 能成功打印相关信息的话,就说明 cuda 安装成功了,若提示没有 nvcc 指令,要么关闭终端重新打开再试试,要么重新安装 cuda 12.1.0 再试试(重新安装 cuda 12.1.0 的话,需要到[控制面板 > 卸载或更改程序]中去手动删除有关 cuda 12.1.0 的所有驱动,即只保留上面提到的“NVIDIA 基础驱动”就行)
- 能成功打印相关信息的话,就说明 cuda 安装成功了,若提示没有 nvcc 指令,要么关闭终端重新打开再试试,要么重新安装 cuda 12.1.0 再试试(重新安装 cuda 12.1.0 的话,需要到[控制面板 > 卸载或更改程序]中去手动删除有关 cuda 12.1.0 的所有驱动,即只保留上面提到的“NVIDIA 基础驱动”就行)
-
创建 anaconda pytorch 虚拟环境
- anaconda 的安装这里多说了,我给个官方链接下载安装即可:anaconda
- 1.3 - 创建虚拟环境
-
- 1.3.1 - 一定要以管理员身份打开 anaconda prompt 终端窗口(否则后续安装容易遇到权限不足的报错问题),然后在anaconda prompt 终端执行下面指令:
# 创建 python3.9 并命名为 pytorch 的虚拟环境
conda create -n pytorch python=3.9
# 激活刚创建的环境
conda activate pytorch
-
- 1.3.2 - 根据 pytorch 官网提供的安装指令,在刚才激活的 conda 虚拟环境中安装 pytorch,pytorc官网链接
- 1.3.2 - 根据 pytorch 官网提供的安装指令,在刚才激活的 conda 虚拟环境中安装 pytorch,pytorc官网链接
-
- 若你安装过程中遇到了报错问题,一般情况下是你忘记以管理员身份运行 anaconda prompt 终端窗口了
1.3 - 写代码测试能否成功调用 GPU
- yolo_try_gpu.py
import torch
# 检查torch是否有CUDA支持,即是否能用GPU
print(torch.cuda.is_available())
# 如果CUDA可用,它还会打印出当前默认的CUDA设备(通常是第一个GPU)
if torch.cuda.is_available():
print(torch.cuda.get_device_name(0))
print(torch.version.cuda)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)
- 以管理运行 anaconda prompt 终端窗口,并激活前面提到的 pytorch 虚拟环境,然后一定要记得通过 cd 指令把终端定位到 yolo_try_gpu.py 这个脚本所在的目录下
# 激活名称为 pytorch 的虚拟环境
conda activate pytorch
# cd 定位到 yolo_try_gpu.py 这个脚本所在的目录下
# 执行前面写好的测试脚本
python yolo_try_gpu.py
-
- 若打印如下信息,说明我们之前的操作都成功了,现在可以调用 GPU RTX 4060 来进行模型训练了
- 若打印如下信息,说明我们之前的操作都成功了,现在可以调用 GPU RTX 4060 来进行模型训练了
2 - 真实调用 GPU RTX 4060 进行模型训练代码在此!!!
- yolo_train_by_gpu.py
# --------------------------------------------------------
# 一定要把 from ultralytics import YOLO 下载 __main__ 函数中,否则会报错以下信息:
# > 错误信息: RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.
# > > 通常是由于多进程执行导致的问题。在 Windows 平台上,使用 Python 的 multiprocessing 模块时会遇到这种情况。
# 出现这个错误的原因是:
# Windows 平台的多进程启动机制:
# Windows 平台不支持 Unix 的 fork() 系统调用来创建子进程。相反,它需要使用 spawn() 方法来创建新进程,这需要在主模块中进行一些特殊的处理。
# YOLOv8 中的多进程操作:
# YOLOv8 使用 PyTorch 的多进程数据加载功能来加快训练过程。但是,如果没有正确地处理多进程的启动,就会出现这个错误。
# 为了解决这个问题,需要在主模块中写入以下代码:
# --------------------------------------------------------
if __name__ == '__main__':
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.train(data='./data/mario.yaml', epochs=100, imgsz=640, device='cuda:0')
-
- 【这里需要再次特别说明一下,若跟之前使用 cpu 模型训练一样写代码的话,会无法成功调用 gpu 的,会出现如下这样的报错,原因在上面的注释中已经说明了】
- 【这里需要再次特别说明一下,若跟之前使用 cpu 模型训练一样写代码的话,会无法成功调用 gpu 的,会出现如下这样的报错,原因在上面的注释中已经说明了】
-
以管理运行 anaconda prompt 终端窗口,并激活前面提到的 pytorch 虚拟环境,然后一定要记得通过 cd 指令把终端定位到 yolo_train_by_gpu.py 这个脚本所在的目录下
# 执行脚本进行模型训练
python yolo_train_by_gpu.py
- 我们使用 cpu 进行模型训练的时候,下图中 GPU_mem 这列参数都是 0.0G,现在已经可以发现在调用 GPU 进行模型训练了
总结
- 之前为了尝试使用 GPU 进行模型训练,总是遇到各种报错,外加近期加班频繁,家里事情也繁多,导致时间过于碎片零散,导致思绪混乱;
- 这次清明3天假期特意多请一天(2024年4月6日),就为了争取多那么一点时间,好好理解一下;这次就特意重装了系统,重新整理思路,重新查阅相关材料,终于成功调用 GPU 实现了模型训练;
- 现在爽了,后面可以继续慢慢迈进下一步了,开始正式的模型训练了;
- 如果你也对游戏目标识别有兴趣,想让AI进行自动游戏的话,可以试着关注我,我会不定期进行更新文章;不过呢,后面的文章可能会间隔较长一段时间才更新,因为真正的 AI 模型训练学习才刚刚开始,这方面还是相当有难度的,opencv 图形学这块我能学多少,又能把我的目标实现到什么程度,都是很难确定的,一起加油吧!