0

我有自定义 data_loader 和 data_collat​​or 用于使用 HuggingFace API 在 Transformer 模型中进行训练。它还进行数据集的映射,其中也进行了标记化。我的 data_loader 脚本是一个固有的类,datasets.GeneratorBasedBuilder因此包含_generate_examples产生样本的函数。

在开始训练时,它会缓存整个数据集(在系统上只缓存一次),然后开始训练。我可以在本地系统上重用该缓存,但不能.arrow在任何其他系统上使用该缓存文件,因此缓存过程重新启动。我想通过使用流媒体功能来避免缓存。我当前的代码如下所示:

from datasets import load_dataset
dataset = load_dataset ("/../my_data_loader.py", streaming =True)
train_dataset = dataset["train"]
train_datatset = train_dataset.map (..... )
data_collator = MyDataCollaor (......)
...
...
trainer = Trainer (model=model, arg= training_arg, train_dataset=train_dataset, data_collaor...)

注意:我不需要在我必须编码的地方:__len____iter__我身边的功能。

4

1 回答 1

0

使用 1.12 或更高版本的数据集,我们可以通过streaming =True如下设置来流式传输数据集(无缓存)。

 dataset = load_dataset ("/../my_data_loader.py", streaming =True)

在这种情况下,数据集将是 Iterable 数据集,因此mapping也略有不同。假设以下脚本在caching模式下使用:

train_dataset = datasets["train"]
train_dataset = train_dataset.map(
            tokenize_and_align_labels,
            batched=True,
            remove_columns=remove_columns,
            num_proc= preprocessing_num_workers,
            load_from_cache_file= not overwrite_cache,
        )

然后打开流式传输后,您还可以转换数据集格式并更改映射函数的参数。

train_dataset = datasets["train"]
train_dataset = train_dataset.with_format("torch")
train_dataset = train_dataset.map(
        tokenize_and_align_labels,
        batched=True,
         )
于 2021-10-29T19:16:04.077 回答