首页 > 编程问答 >TRL SFTTrainer 对截断的说明

TRL SFTTrainer 对截断的说明

时间:2024-07-21 04:48:26浏览次数:11  
标签:python large-language-model huggingface llama

我目前正在使用 Huggingface 中的 SFTTrainer 微调 LLama 模型。但是,我提出了一个问题,我无法通过文档回答(至少,它有点模糊)。

我的数据集包含从 20 个令牌到 5k 个令牌的样本。

目前我正在使用 || |和 max_seq_length=512, . packing=True 但是,我不清楚的是,具有 >512 个标记的样本会发生什么情况。它们是否被简单截断?

如果是,是否有任何简单的选项来分割它们,而不是截断它们?

If yes, is there any simple option to split them, rather to truncate them?


是的,在 SFTTrainer 中使用 max_seq_length=512 时,长度超过 512 个标记的样本会被 截断 。 这意味着只会保留前 512 个标记,其余标记将被丢弃。

你有几个选项可以避免截断并利用你的长序列样本:

  1. 增加 max_seq_length :
  2. 这是最简单的选择,但它会增加内存使用量并可能导致训练速度变慢。
  3. 你需要找到一个在模型能力和内存限制之间取得平衡的值。
  4. 尝试不同的 max_seq_length 值,看看哪个值最适合你的硬件和数据集。

  5. 将长样本分割成较小的块:

  6. 你可以使用数据预处理步骤将长样本分割成多个较小的块,这些块可以容纳在 max_seq_length 限制内。
  7. 例如,你可以将 1024 个标记的样本分割成两个 512 个标记的样本。
  8. 你需要确保在分割样本时保留上下文信息。这可以通过以下方式实现:

    • 重叠窗口: 使用重叠的窗口来分割样本,以便每个块都包含来自先前块的一些上下文信息。
    • 添加特殊标记: 在每个块的开头添加特殊标记,以指示它是较长序列的一部分,并在块之间提供上下文信息。
  9. 使用支持长序列的模型/方法:

  10. 一些模型和方法专门设计用于处理长序列,例如 Transformer-XL、Reformer 和 Longformer。
  11. 这些模型使用不同的技术来有效地处理长距离依赖关系,并且可以处理比传统 Transformer 更长的序列。
  12. 但是,切换到不同的模型或方法需要对代码进行更重要的更改。

关于你的问题的直接答案: 目前, SFTTrainer 没有提供自动分割长序列的内置选项。你需要在将数据传递给训练器之前预处理数据以分割样本。

我建议首先尝试增加 max_seq_length ,看看它是否有助于你的特定任务和数据集。如果内存使用量成为一个问题,那么将长样本分割成较小的块是一个不错的选择。

标签:python,large-language-model,huggingface,llama
From: 78773889

相关文章

  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 使用 python print 和 gdb 时出现 BrokenPipeError
    我正在尝试在Linux中运行应用程序并使用Python生成输入:python3-c'print(".....")'|./someapp但出现下一个错误:Exceptionignoredin:<_io.TextIOWrappername='<stdout>'mode='w'encoding='utf-8'>BrokenPipeError:......
  • python 舰队容器
    我正在尝试使用容器在flet中制作一个菜单,它应该是半透明的,但其中的项目不是。我尝试将opacity=1分配给元素,但没有成功-它们与容器一样透明感谢任何帮助我的代码:nickname=ft.TextField(label="xxx",hint_text="xxx")column=ft.Column(controls=[nickname......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • python中时间序列数据的梯度计算
    我正在尝试编写一个函数,它可以从最适合下面的线返回梯度dataframe在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。我明白最佳拟合线的计算公式为:y=mx+b将因变量(y)设置为foos,将自变量(x)设置为DateTimeDatafram......
  • 调试用 C 编写的 Python 扩展
    我非常熟悉编写C代码,并且很擅长编写Python代码。我正在尝试学习如何用C编写可以从OSX10.15.7上的Python-3.9.X调用的模块。我已经得到了几个“helloworld”类型的示例,但是对于复杂的示例,我正在努力弄清楚如何调试我编写的C扩展。MWE:src/add.c//......
  • 具有块大小选项的 Python pandas read_sas 因索引不匹配而失败并出现值错误
    我有一个非常大的SAS文件,无法容纳在我的服务器内存中。我只需要转换为镶木地板格式的文件。为此,我使用pandas中chunksize方法的read_sas选项分块读取它。它主要是在工作/做它的工作。除此之外,一段时间后它会失败并出现以下错误。此特定SAS文件有794......
  • 使用 requests 包 python 时打开文件太多
    我正在使用Pythonrequests包向API发出大量请求。然而,在某些时候,我的程序由于“打开的文件太多”而崩溃。当我明确关闭我的会话时,我真的不知道这是怎么回事。我使用以下代码:importrequestsimportmultiprocessingimportnumpyasnps=requests.session()s.keep......
  • Python 是一种选择性解释语言吗?为什么下面的代码不起作用?
    由于程序是从上到下运行的,为什么下面的代码不执行块中的第一行就直接抛出错误?if5>2:print("TwoislessthanFive!")print("Fiveisgreaterthantwo!")错误:文件“/Users/____/Desktop/Pythonpractise/practise.py”,第3行print("五比二大!")Indentati......
  • 裁剪时间变量 Python Matplotlib Xarray
    我不确定这是否是一个愚蠢的问题,但我想按时间变量剪辑.nc文件。我在xarray中打开了数据集,但以下ds.sel行(之前已运行)仅返回错误。ds=xr.open_dataset('/Users/mia/Desktop/RMP/data/tracking/mcs_tracks_2015_11.nc')selected_days=ds.sel(time=slice('2015-11-22',......