ray.data.Dataset.split#

Dataset.split(n: int, *, equal: bool = False, locality_hints: List[Any] | None = None) List[MaterializedDataset][源代码]#

将数据集物化并分割成 n 个不相交的部分。

此方法返回一个 MaterializedDataset 列表,该列表可以传递给 Ray 任务和角色,并用于并行读取数据集行。

备注

此操作将触发对此数据集执行的延迟转换。

示例

@ray.remote
class Worker:

    def train(self, data_iterator):
        for batch in data_iterator.iter_batches(batch_size=8):
            pass

workers = [Worker.remote() for _ in range(4)]
shards = ray.data.range(100).split(n=4, equal=True)
ray.get([w.train.remote(s) for w, s in zip(workers, shards)])

时间复杂度: O(1)

参数:
  • n – 要返回的子数据集数量。

  • equal – 是否保证每个拆分具有相同数量的记录。如果行不能在拆分之间平均分配,则可能会删除记录。

  • locality_hints – [实验性] Ray 角色句柄的列表,大小为 n。系统尝试将第 i 个数据集的块与第 i 个角色放在一起,以最大化数据局部性。

返回:

n 个不相交数据集分片的列表。

参见

Dataset.split_at_indices()

split() 不同,后者将数据集分割成大致相等的子集,而 Dataset.split_proportionately() 允许你将数据集分割成不同大小的部分。

Dataset.split_proportionately()

此方法等效于 Dataset.split_at_indices() 如果你手动计算索引。

Dataset.streaming_split()

split() 不同,streaming_split() 不会在内存中具体化数据集。