NVIDIA DALI 动态模式
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/dali-dynamic-mode。
技能介绍
要解决什么问题
NVIDIA DALI 长期以流水线模式(Pipeline、@pipeline_def、pipe.run())为主:先建图再跑 epoch,和 PyTorch 训练循环里的命令式写法容易脱节。nvidia.dali.experimental.dynamic(ndd)提供动态模式——在普通 Python 控制流里直接调 DALI 算子,更适合让 AI 代理生成、审查和从流水线迁移数据加载代码。
技能如何约束与指导
- 导入与风格:统一
import nvidia.dali.experimental.dynamic as ndd,禁止混用流水线 API。 - Batch 语义:
Batch无__getitem__;取样本用batch.tensors[i],样本内切片用batch.slice[...];转 PyTorch 用batch.torch(),形状不齐时用pad=True。 - 读取器:
ndd.readers.File等有状态对象——创建一次、跨 epoch 复用;batch_size传给next_epoch(batch_size=N),且 epoch 间 batch 模式不可切换。 - 设备与执行:混合解码用
device="gpu"(勿用流水线里的"mixed");进 GPU 模型前不必.cpu(),.torch()可走 GPU;调试时用EvalMode.sync_cpu/sync_full定位异步队列里的错。 - 随机与检查点:随机算子需显式
batch_size;检查点按读取器/RNG 注册,enable_checkpointing=True且状态须在第一次next_epoch前恢复。
适用边界
动态模式更灵活,峰值吞吐通常低于流水线模式;大规模训练若只追求吞吐,仍应优先流水线。运行与验证需已安装支持 dynamic 的 DALI,GPU 路径还需 CUDA 构建与可用 GPU。
使用场景
- 把现有 `@pipeline_def` 图像分类流水线改写成训练循环里直接调 `ndd.readers.File` 与 `next_epoch` 的动态模式代码
- 审查 Copilot 生成的 DALI 片段,对照技能里的常见错误表修正 `device="mixed"`、`batch[i]` 等用法
- 在可变长度检测框或音频 batch 上实现 `batch.torch(pad=True)`,并确认未在进 GPU 模型前多余调用 `.cpu()`
- 为分布式 epoch 恢复配置读取器 `enable_checkpointing=True`,并在首次 `next_epoch` 前完成 checkpoint `register` 与 `load`
适合人员
- 维护 PyTorch 训练仓库、要把 DALI 流水线嵌进命令式 epoch 循环的机器学习工程师
- 手头仍是 `pipe.run()` 与 `fn.readers.file`,需要对照迁移表改成 `ndd` 大驼峰读取器与 `device="gpu"` 的 CV 研究员
- 合并前负责核对 AI 生成数据加载代码、需按 Batch `.tensors`/`.slice` 语义做 code review 的 infra 同学
- 做多卡/断点续训、要在读取器与 RNG 层面正确聚合 checkpoint 而非流水线级 `pipe.checkpoint()` 的平台开发者