Agent Skills
返回列表
💻

NVIDIA DALI 动态模式

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 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()` 的平台开发者