Skip to content

进阶文档‐训练加速

Bubbliiiing edited this page Sep 22, 2023 · 1 revision

数据加载dataloader(Linux下默认开启)

由于easyphoto训练场景是总样本数少,epoch多的场景,可以将torch.utils.data.DataLoader中persistent_workers=True。

该参数是保证每个epoch结束后数据加载迭代器不释放,不用每个epoch都初始化,从而节约时间。

batch_size等参数调优(修改ui界面的参数开启)

参数调优和GPU型号相关,为了充分利用GPU,可以修改训练启动脚本将batch_size调大.

当前代码中使用的train_batch_size=1, gradient_accumulation_steps=4,单卡的话,每4个训练样本更新一次梯度。

1、显存16G左右(V100)

train_batch_size=2, gradient_accumulation_steps=2; 
train_batch_size=4, gradient_accumulation_steps=1;

2、显存23G左右(A10)

# 上述修改保证训练总样本数和val次数保持不变,当然这种情况下,梯度更新的次数降低了,由于相比之前batch_size仅扩大了1倍,因此lr暂时保持不变。
train_batch_size=8, gradient_accumulation_steps=1;

max_train_steps = default_max_train_steps / 2;
validation & save steps = default_validation & save steps / 2;

卷积计算(默认开启)

在训练循环之前设置torch.backends.cudnn.benchmark = True可以加速计算。

由于计算不同内核大小卷积的 cuDNN 算法的性能不同,自动调优器可以运行一个基准来找到最佳算法。当你的输入大小不经常改变时,建议开启这个设置。

优化器(环境变量开启)

可以用nvidia/apex的优化器fusedAdam,该优化器对参数更新的方式做了融合,使得参数更新变快。

使用方式需2步:

1、Linux安装

git clone https://github.com/NVIDIA/apex
cd apex
# if pip >= 23.1 (ref: https://pip.pypa.io/en/stable/news/#v23-1) which supports multiple `--config-settings` with the same key... 
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings "--build-option=--cpp_ext" --config-settings "--build-option=--cuda_ext" ./
# otherwise
pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --global-option="--cpp_ext" --global-option="--cuda_ext" ./

2、打开环境变量即可启用

代码已经内置,仅需打开环境变量即可启用

export ENABLE_APEX_OPT=1

混合精度

1、tf32 (环境变量开启)

目前,NVIDIA的Ampere架构的GPU(例如A100、RTX 30系列)支持TF32。

在代码中,如果加载了一些fp32的预训练模型,或者训练过程中使用了fp32的操作,可以使用tf32去加速。TF32使用32位浮点数格式来进行计算,同时使用16位浮点数格式来进行累积操作和存储。这种格式可以提供接近FP32精度的计算结果,同时在存储需求和计算成本方面更加高效。

代码已经内置,仅需打开环境变量即可启用

export ENABLE_TF32=1

2、bf16 (修改启动脚本开启)

目前,NVIDIA的Ampere架构的GPU(例如A100、RTX 30系列)支持BF16。

BF16(BFloat16)是一种特殊的浮点数格式,用于在深度学习和人工智能计算中进行计算和存储。BF16使用16位浮点数来表示数字,但与传统的IEEE 754浮点数格式不同,它将低精度位(低8位)用于表示小数部分,而将高精度位(高8位)用于表示指数部分。

可以修改train_lora.py脚本使用bf16去加速。

image

加入:

--mixed_precision=bf16