从零开始学习 NVIDIA DALI,掌握如何从 MinIO 构建高性能深度学习数据流水线。
本项目提供完整的 NVIDIA DALI 学习材料,包括:
python basic/check_environment.py
快速路径(1 小时):
# 阅读快速入门
cat basic/QUICKSTART.md
# 运行核心示例
python basic/01_hello_dali.py
python basic/03_augmentation.py
python basic/04_pytorch_integration.py
python basic/09_minio_basic.py
完整路径(3 小时):
# 阅读完整大纲
cat basic/README.md
# 按顺序学习所有示例
python basic/01_hello_dali.py
python basic/02_basic_image_processing.py
python basic/03_augmentation.py
python basic/04_pytorch_integration.py
python basic/05_external_source.py
python basic/06_to_08_advanced_features.py
python basic/09_minio_basic.py
python basic/10_minio_production_pipeline.py
| 示例 | 内容 | 时长 | 难度 |
|---|---|---|---|
| 01_hello_dali.py | Pipeline 基础 | 15 min | ⭐ |
| 02_basic_image_processing.py | 图像处理操作 | 15 min | ⭐⭐ |
| 03_augmentation.py | 数据增强 | 30 min | ⭐⭐⭐ |
| 04_pytorch_integration.py | PyTorch 集成 | 30 min | ⭐⭐⭐ |
| 示例 | 内容 | 时长 | 难度 |
|---|---|---|---|
| 05_external_source.py | 外部数据源 | 15 min | ⭐⭐⭐ |
| 06_to_08_advanced_features.py | 并行、多GPU、动态配置 | 30 min | ⭐⭐⭐⭐ |
| 示例 | 内容 | 时长 | 难度 |
|---|---|---|---|
| 09_minio_basic.py | MinIO 基础 | 20 min | ⭐⭐⭐ |
| 10_minio_production_pipeline.py | 生产级 Pipeline | 30 min | ⭐⭐⭐⭐⭐ |
完成本教程后,你将能够:
✅ 理解 DALI 的核心概念和工作原理
✅ 构建高效的数据预处理 Pipeline
✅ 使用各种图像增强操作
✅ 将 DALI 与 PyTorch 集成
✅ 从对象存储(MinIO)读取数据
✅ 构建生产级数据流水线
✅ 优化数据加载性能(2-5x 提升)
dali-tutorial/
├── README.md # 本文件
├── .devcontainer/ # Dev Container 配置
│ ├── Dockerfile
│ ├── devcontainer.json
│ └── post-create.sh
├── basic/ # 学习材料
│ ├── README.md # 完整学习大纲
│ ├── QUICKSTART.md # 快速入门指南
│ ├── INDEX.md # 详细索引
│ ├── requirements.txt # Python 依赖
│ ├── check_environment.py # 环境检查
│ ├── 01_hello_dali.py # 示例 1
│ ├── ... # 更多示例
│ └── 10_minio_production_pipeline.py
├── notebooks/ # Jupyter 笔记本
├── scripts/ # 工具脚本
└── .claude/ # Claude Code 配置
└── CLAUDE.md
本教程重点介绍如何从 MinIO 对象存储读取数据:
docker run -d -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
minio/minio server /data --console-address ":9001"
from minio import Minio
import nvidia.dali.fn as fn
# 连接 MinIO
client = Minio("localhost:9000",
access_key="minioadmin",
secret_key="minioadmin",
secure=False
)
# 自定义数据源
class MinIOSource:
def __call__(self, sample_info):
# 从 MinIO 读取图像
obj = self.client.get_object(bucket, object_name)
data = obj.read()
# 解码并返回
return image_array, label
# 集成到 DALI
@pipeline_def
def minio_pipeline(source):
images, labels = fn.external_source(source=source, num_outputs=2)
# 处理...
return images, labels
详见:09_minio_basic.py 和 10_minio_production_pipeline.py
典型性能提升(vs PyTorch DataLoader):
| 场景 | 图像大小 | Batch Size | 提升 |
|---|---|---|---|
| 基础增强 | 224x224 | 64 | 2.5x |
| 复杂增强 | 224x224 | 64 | 3.8x |
| 大图像 | 512x512 | 32 | 4.2x |
| 高分辨率 | 1024x1024 | 16 | 5.1x |
Q: 需要什么硬件? A: NVIDIA GPU(计算能力 6.0+),建议 8GB+ 显存。
Q: 支持哪些数据格式? A: JPEG、PNG、TIFF、WebP 等常见图像格式,以及视频、音频等。
Q: 可以用于非深度学习任务吗? A: 可以!DALI 适合任何需要高性能数据加载的场景。
Q: 如何调试 Pipeline? A: 使用小 batch_size,打印中间结果 shape,使用 fn.dump_image 保存图像。
Q: 性能没有提升? A: 检查是否使用 GPU 解码(device=”mixed”),增加线程数,启用预取。
# 核心依赖
pip install nvidia-dali-cuda120
pip install torch torchvision
# MinIO 集成
pip install minio
# 其他工具
pip install Pillow numpy pandas matplotlib
或一键安装:
pip install -r basic/requirements.txt
欢迎提 Issue 和 PR!
本项目仅用于学习目的。
开始学习: python basic/check_environment.py
快速入门: cat basic/QUICKSTART.md
祝学习愉快!🚀