我有自定义的data_loader和data_collator,我正在使用HuggingFace应用程序接口进行变压器模型的训练。它还执行数据集的映射,其中还执行了标记化。我的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__函数。
发布于 2021-10-29 19:16:04
使用1.12或更高版本的数据集,我们可以通过如下设置streaming =True来流式传输数据集(不需要缓存)。
dataset = load_dataset ("/../my_data_loader.py", streaming =True)在这种情况下,数据集将是可迭代的数据集,因此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,
)https://stackoverflow.com/questions/69501067
复制相似问题