首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HuggingFace:使用自定义data_loader和data_collator从本地目录流式传输数据集

HuggingFace:使用自定义data_loader和data_collator从本地目录流式传输数据集
EN

Stack Overflow用户
提问于 2021-10-08 19:48:59
回答 1查看 75关注 0票数 0

我有自定义的data_loader和data_collator,我正在使用HuggingFace应用程序接口进行变压器模型的训练。它还执行数据集的映射,其中还执行了标记化。我的data_loader脚本是一个继承了datasets.GeneratorBasedBuilder的类,所以包含了生成样本的_generate_examples函数。

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

代码语言:javascript
复制
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__函数。

EN

回答 1

Stack Overflow用户

发布于 2021-10-29 19:16:04

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

代码语言:javascript
复制
 dataset = load_dataset ("/../my_data_loader.py", streaming =True)

在这种情况下,数据集将是可迭代的数据集,因此mapping也会稍有不同。假设以下脚本是在caching模式下使用的:

代码语言:javascript
复制
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,
        )

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

代码语言:javascript
复制
train_dataset = datasets["train"]
train_dataset = train_dataset.with_format("torch")
train_dataset = train_dataset.map(
        tokenize_and_align_labels,
        batched=True,
         )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69501067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档