SuperAPI AI 工具集

dali-dynamic-mode

通用与其它

查看项目

更新于 10-16 03:49

技能介绍

用途:指导 AI 智能体编写、审阅与迁移使用 NVIDIA DALI 命令式动态模式 API(nvidia.dali.experimental.dynamic,简称 ndd)的代码。适用于 ndd 相关任务或从 pipeline 模式迁移,纯 pipeline-only 任务可跳过。

主要能力:以普通 Python 控制流直接调用 DALI 算子,无需构建和运行 pipeline 图。核心数据类型包括 Tensor(单样本,支持切片、算术、dlpack、cuda_array_interface、array)与 Batch(样本集合,支持变长形状,可用 for 迭代逐个产出 Tensor)。Batch 无 getitem,选取样本用 batch.select(i),取样本子集用 batch.select(slice/list),样本内切片用 batch.slice[...]。转 PyTorch 用 batch.torch(),不齐整批次可用 pad=True;Tensor 默认 torch(copy=False)。

使用方式:导入写作 import nvidia.dali.experimental.dynamic as ndd。Reader 是具有状态的对象,应创建一次并跨 epoch 复用,batch_size 传给 reader.next_epoch(batch_size=N),其迭代器需完全消费后才能再次调用;同一 reader 的 batch_size 与批次/样本模式不可中途切换。随机算子须显式传入 batch_size。设备由输入推断,混合解码用 device="gpu"(非 pipeline 模式的 "mixed")。默认 eager 异步执行,消费数据时自动求值;调试可用 with ndd.EvalMode.sync_full:(模式顺序 deferred < eager < sync_cpu < sync_full)。线程用 ndd.set_num_threads(4)(启动时一次)。随机性用 ndd.random.set_seed(42) 或显式 ndd.random.RNG(seed=42),二者取其一。检查点用 ndd.checkpoint.Checkpoint,仅对 reader 与 RNG 等有状态对象生效,reader 需 enable_checkpointing=True,在首次 next_epoch 前注册;与 compile=True 不兼容;格式版本严格,非线程安全。

适用场景:图像分类等迭代式数据加载与预处理、分布式分片读取(shard_id/num_shards 等)、变长音频或检测框处理。

限制:动态模式虽更灵活,性能可能略低于 pipeline 模式,追求最大吞吐建议用 pipeline 模式;其余前置条件(DALI 安装、CUDA 构建、目标框架安装)需满足才能运行或验证。