问题描述:
mindspore npu 多卡训练自定义数据集如何给不同npu传递不同数据?
是在ds.GeneratorDataset传递num_shards=num_shards, shard_id=device_id还是自定义数据集__getitem__里面用rank id取不同数据?
解决方案:
使用GeneratorDataset的时候,可以使用 num_shards=num_shards, shard_id=device_id 参数来控制不同卡读取哪个分片的数据,__getitem__ 和 __len__ 按全量数据集处理即可。
举例:
卡0:ds.GeneratorDataset(..., num_shards=8, shard_id=0, ...)
卡1:ds.GeneratorDataset(..., num_shards=8, shard_id=1, ...)
卡2:ds.GeneratorDataset(..., num_shards=8, shard_id=2, ...)
...
卡7:ds.GeneratorDataset(..., num_shards=8, shard_id=7, ...)