用途:本技能用于调优 nvalchemi 的 Zarr 后台读取管线,覆盖 AtomicDataZarrReader、Dataset、DataLoader,以及为后续经 DataLoader 读取而写入存储的场景。
管线边界:Reader 只负责存储 I/O,返回原始 CPU 张量字典与元数据;Dataset 负责校验、可选跳过校验、设备搬运与异步预取编排,显式批量 API 为 load_batches(batch_index_lists);DataLoader 负责采样/批迭代、融合预取、流使用与批构造;MultiDataset 做全局索引组合;Sampler 只负责语义顺序与批成员,不用于优化存储 I/O。Reader 公开方法为 read(index) 与 read_many(indices),后端钩子为 _load_sample、_load_many_samples 和 len。
推荐配置:AtomicDataZarrReader 配 Dataset(device="cuda", num_workers=1, skip_validation=True) 与 DataLoader(batch_size=64, shuffle=True, prefetch_factor=16, num_streams=2, use_streams=True, pin_memory=True)。prefetch_factor 控制融合读取窗口,effective_read_window = batch_size * prefetch_factor;顺序读建议 2-4,乱序读 16-64,块乱序 2-8,设为 0 可关闭融合预取。
限制与注意:skip_validation 绕过逐样本校验(约 4 ms/样本),仅用于由 AtomicDataZarrWriter 写出或已外部校验的可信存储,不可用于不可信或第三方数据。num_workers 建议从 1 开始,并发 Zarr 读取会争用。pin_memory 需配合 CUDA 目标与 use_streams=True。写入端可调 chunk_size(沿维度 0 的行数)与 shard_size,Zstd level 3 为默认取舍,LZ4 适合更重视速度的场景。
基准:用 nvalchemi-io-test roundtrip 或 read 子命令,可扫描 prefetch_factor 并与 read-mode=single 基线对比;训练变慢时检查校验、批构造与设备搬运开销。