深度学习模型训练速度分析
首先深度学习模型的训练速度收到以下几个因素的影响
- 显存大小
- 显卡计算速度及显卡数量
- 数据加载速度
- CPU频率及核心数
- 磁盘IO速率
- 数据大小
- 数据处理步骤
- 模型大小
下面逐个进行分析:
首先是显存大小,这个显而易见,显存大得显卡可以将batch_size的值设置的高,这样同时可以处理的数据量多,速度自然快
显卡计算速度和显卡数量因素也很明显,4090的计算速度肯定是比1080ti的计算速度快,训练起来肯定也更快,当你有多个显卡的时候,你就可以进行分布式训练,多卡同时跑模型,速度肯定也会提升。
数据加载速度这个是很多人会忽视的一个重要因素,为什么数据加载速度也很重要,因为如果你的数据加载的很慢,即使你有很多A100显卡,但是显卡得不到数据就导致长时间处于等待状态,训练速度也不会得到提升。比如很多人在训练的时候通过nvidia-smi命令查看显卡状态
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.54.03 Driver Version: 535.54.03 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 4090 On | 00000000:01:00.0 Off | Off |
| 30% 37C P2 63W / 450W | 22561MiB / 24564MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce RTX 4090 On | 00000000:82:00.0 Off | Off |
| 31% 44C P2 78W / 450W | 22561MiB / 24564MiB | 100% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
发现显存虽然已经跑满了,但是GPU-Util 的利用率很低,甚至只有10%左右,这就说明你的GPU利用的不够充分,很有可能是由于你的数据加载速度过慢,导致GPU长时间处于等待状态导致的。
那么数据加载速度取决于什么呢,首先是CPU的频率,这个其实不同的机器CPU频率相差不大,但是CPU的核心数,影响还是挺大的,比如你只有一台2核4线程的CPU,那么你只能够给你的GPU分配4个线程进行数据处理,但是如果你有一台8核16线程的CPU,那么你就能够给你的GPU分配16个线程进行数据处理。速度肯定更快。然后就是数据大小和数据处理步骤,这个也很简单,你的数据是1024×1024的图片肯定加载速度要比214×214的图片更慢,另外如果你的数据在进行处理之前要进行拼接,旋转,裁剪等一系列前置操作,那肯定也是需要消耗时间的。
还有一个影响比较大的因素就是磁盘的IO速率,建议有条件用使用NVMe协议的高速固态硬盘存储你的训练数据,不要使用机械硬盘或者采用SATA协议的早期固态硬盘存储数据,这个对于数据加载速度影响是非常大的
最后就是模型的大小,很显然模型大的话,计算多,就慢,模型小,计算少,就快