DALI使用指南 (v2.1)
Nvidia DALI是一个在模型训练时做并行data loader的开源框架,支持硬件编解码加速。T-Head SAIL SDK支持DALI框架,在CPU-bounding的模型训练场景下会有明显加速模型训练性能的效果。PPU版DALI基于社区DALI进行适配,最新已经支持到了DALI 1.53。
官网链接:https://docs.nvidia.com/deeplearning/dali/user-guide/docs/index.html
1. 安装DALI
1.1 Docker
如果直接使用SAIL SDK发布的docker,可以直接使用 docker里已经安装好的DALI
pip list | grep nvidia-dali1.2 通过PIP源安装
PPU 平台维护了专属的 pypi 软件源, 推荐通过指定平头哥 PPU pip 源进行安装,请根据当前的CUDA major版本决定具体安装那个库:
# 如果当前为CUDA 13.x
pip install nvidia_dali_cuda130==1.53.0 -i https://art-pub.eng.t-head.cn/artifactory/api/pypi/pypi_index/simple
# 如果当前为CUDA 12.x
pip install nvidia_dali_cuda120==1.44.0 -i https://art-pub.eng.t-head.cn/artifactory/api/pypi/pypi_index/simple
# 如果当前为CUDA 11.x
pip install nvidia_dali_cuda110==1.22.0 -i https://art-pub.eng.t-head.cn/artifactory/api/pypi/pypi_index/simplenvidia_dali_cuda110支持的版本:1.22.0
nvidia_dali_cuda120支持的版本:1.44.0,1.50.0,1.53.0
nvidia_dali_cuda130支持的版本:1.53.0
如需使用视频Video DataLoader的功能,请使用1.44.0以上的DALI版本
1.3 直接下载NV提供的WHL安装文件
不建议,无法直接使用NV提供的DALI安装包。
1.4 从源代码编译
下载DALI dependencies并编译安装:
git clone --depth 1 --branch v1.44.0 --recurse-submodules https://github.com/NVIDIA/DALI_deps.git /tmp/DALI_deps
cd /tmp/DALI_deps
bash build_scripts/build_deps.sh下载并编译DALI
git clone --branch release_v1.44 --recurse-submodules https://github.com/NVIDIA/DALI.git
cd /workspace/DALI
git apply t-head_dali.patch # !!!需要patch
mkdir build && cd build
cmake .. -DBUILD_BENCHMARK=OFF -DWITH_DYNAMIC_NVIMGCODEC=OFF -DBUILD_CVCUDA=OFF # Will fix CVCUDA compile issue soon
make -jpatch的主要内容如下:
- #if !(defined(__clang__) && defined(__CUDA__))
+#if !(defined(__clang__) && defined(__CUDA__)) && !defined(__HGGCCC__)- set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --compiler-options \"-fvisibility=hidden -Wno-free-nonheap-object\" --Wno-deprecated-gpu-targets -Xfatbin -compress-all")
+set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --compiler-options \"-fvisibility=hidden -Wno-free-nonheap-object -fno-delayed-template-parsing\" --Wno-deprecated-gpu-targets -Xfatbin -compress-all")2. 使能DALI
可以参考Nvidia官方从0开始enable DALI的文档实现代码:
https://docs.nvidia.com/deeplearning/dali/user-guide/docs/examples/
一些深度学习框架的使能可以参考以下示例代码:
3. 开源库DALI的支持
3.1 DLE
Nvidia Deep Learning Examples (DLE)的一些模型原生支持了DALI dataloader。GitHub - NVIDIA/DeepLearningExamples: State-of-the-Art Deep Learning scripts organized by models - easy to train and deploy with reproducible accuracy and performance on enterprise-grade infrastructure.
运行指令指定dali-gpu作为data backend即可。
以ResNet50训练为例:
python ./multiproc.py --nproc_per_node 8 ./main.py --arch resnet50 -c fanin --label-smoothing 0.1 --data-backends dali-gpu <path to imagenet>3.2 Pytorch image models
Pytorch image models (timm):https://github.com/huggingface/pytorch-image-models
我们在pytorch image model里也支持了DALI的使能,参考这个patch:
https://code.alibaba-inc.com/jun.shang/pytorch-image-models以mobilenet_v3训练为例:
bash ./distributed_train.sh 2 /root/datasets/vision/imagenet --model mobilenetv3_large_100 -b 512 --sched step --epochs 1 --decay-epochs 2.4 --decay-rate .973 --opt rmsproptf --opt-eps .001 -j 7 --warmup-lr 1e-6 --weight-decay 1e-5 --drop 0.2 --model-ema --model-ema-decay 0.9999 --aa rand-m9-mstd0.5 --remode pixel --reprob 0.2 --lr .064 --lr-noise 0.42 0.9 --amp --data-backends dali-gpu