当前位置: 首页 > news >正文

对max_seq_length参数的理解,基于open-instruct框架:中英文解释

使用open-instruct (https://github.com/allenai/open-instruct )框架,对其中的max_seq_length参数的理解记录下来。
bash脚本内容如下:

# 设置模型和训练参数
MODEL_NAME=google/gemma-2-2b
MACHINE_RANK=0
MAIN_PROCESS_IP=127.0.0.1
MAIN_PROCESS_PORT=29400
NUM_MACHINES=1
NUM_PROCESSES=4
PER_DEVICE_TRAIN_BATCH_SIZE=1
GRADIENT_ACCUMULATION_STEPS=2# 启动命令
accelerate launch \--mixed_precision bf16 \--num_machines $NUM_MACHINES \--num_processes $NUM_PROCESSES \--machine_rank $MACHINE_RANK \--main_process_ip $MAIN_PROCESS_IP \--main_process_port $MAIN_PROCESS_PORT \--use_deepspeed \--deepspeed_config_file configs/ds_configs/stage2_no_offloading_accelerate.conf \--deepspeed_multinode_launcher standard open_instruct/finetune.py \--model_name_or_path $MODEL_NAME \--tokenizer_name $MODEL_NAME \--use_slow_tokenizer \--use_flash_attn \--max_seq_length 2048 \--preprocessing_num_workers 4 \--per_device_train_batch_size $PER_DEVICE_TRAIN_BATCH_SIZE \--gradient_accumulation_steps $GRADIENT_ACCUMULATION_STEPS \--learning_rate 5e-06 \--lr_scheduler_type linear \--warmup_ratio 0.03 \--weight_decay 0.0 \--num_train_epochs 1 \--output_dir output/sft_2b \--with_tracking \--report_to wandb \--logging_steps 1 \--reduce_loss sum \--model_revision main \--dataset_mixer_list allenai/tulu-3-sft-mixture 1.0 \--checkpointing_steps epoch \--dataset_mix_dir output/sft_2b \--exp_name tulu-2b-sft \--seed 123

中文版

什么是 max_seq_length

在 BERT、GPT 或 GEMMA 等基于 Transformer 的 NLP 模型中,max_seq_length 参数表示经过 分词(tokenization)处理后输入序列的最大长度。它限制了模型在单次前向传播中处理的最大 token 数量。


源代码中的定义

在源代码中,max_seq_length 定义如下:

max_seq_length: Optional[int] = field(default=None,metadata={"help": ("The maximum total input sequence length after tokenization. ""Sequences longer than this will be truncated.")},
)

定义中的关键点

  1. Optional[int]
    表示这个参数可以是一个整数(如 512)或者是 None。如果为 None,模型或分词器中预设的默认值将会被使用。

  2. default=None
    默认值为 None,表明用户需要显式设置,否则使用模型的默认配置。

  3. metadata 中的 help 信息

    • 提供了参数的描述:
      • “经过分词处理后的最大输入序列长度。”
        (即输入句子的 token 长度上限)。
      • “长度超过该值的序列将会被截断。”
        (模型会直接裁剪掉超出部分的 token)。

max_seq_length 的作用

  1. 限制输入大小
    保证每次输入到模型中的序列不会超过设定长度。对于内存受限的显卡(如 3090),这是关键参数之一,因为它直接影响显存使用量。

  2. 影响上下文信息

    • 较短的 max_seq_length 会丢弃超长序列的后续部分,可能导致上下文信息的丢失。
    • 较长的 max_seq_length 能捕获更多的上下文,但需要更高的显存。
  3. 显存与性能的平衡

    • 较大的值会增加模型的计算成本和显存需求。
    • 较小的值可能限制任务表现,尤其是长文本任务(如文档分类、摘要生成等)。

适用场景

  1. 短文本任务
    例如情感分析、文本分类等任务,通常设置较短的 max_seq_length,如 128 或 256。

  2. 长文本任务
    对于需要处理较长输入的任务(如摘要生成、问答系统),建议根据显存容量逐步尝试更大的值(如 512 或 1024)。


如何调整 max_seq_length

以 4 张 3090 显卡为例:

  1. 如果显存不足,考虑以下措施:

    • 减小 max_seq_length:从 1024 调整为 512,甚至更小。
    • 增加梯度累积步骤(gradient_accumulation_steps:通过减少每次显存占用来实现较大 batch size。
    • 启用分布式训练:充分利用多 GPU。
  2. 平衡性能与资源

    • 对任务进行分析,确定是否需要捕获长距离上下文。
    • 在不牺牲过多性能的前提下,找到最合适的 max_seq_length

通过合理设置 max_seq_length,可以有效优化训练效率和任务性能,同时避免显存溢出的问题。

英文版

Understanding max_seq_length

max_seq_length is a critical parameter in training and fine-tuning NLP models like BERT, GPT, or GEMMA. It determines the maximum input sequence length (in tokens) that the model can process in a single forward pass after tokenization.


Definition in Code

The parameter max_seq_length is defined in the source code as follows:

max_seq_length: Optional[int] = field(default=None,metadata={"help": ("The maximum total input sequence length after tokenization. ""Sequences longer than this will be truncated.")},
)

Key Points from the Definition

  1. Optional[int]
    Indicates that the parameter can either be an integer (e.g., 512) or None. If set to None, the model or tokenizer’s default configuration is used.

  2. default=None
    The default value is None, meaning you must explicitly define this parameter if the task requires a specific sequence length.

  3. metadata Explanation

    • "The maximum total input sequence length after tokenization":
      Refers to the maximum number of tokens allowed after converting raw text into tokens.
    • "Sequences longer than this will be truncated":
      Inputs exceeding the set length will be cut off, discarding extra tokens beyond the limit.

Purpose of max_seq_length

  1. Control Input Size
    This parameter ensures that the input sequence size stays within manageable limits for a given GPU memory.

  2. Context Representation

    • A smaller max_seq_length may result in loss of context for longer inputs since tokens beyond the limit are truncated.
    • A larger max_seq_length captures more context, which is beneficial for tasks requiring longer input sequences, like summarization or QA.
  3. Impact on Memory and Performance

    • Increasing the max_seq_length raises memory requirements and computational costs.
    • Reducing it lowers memory usage but may negatively affect performance on tasks needing longer context windows.

Practical Applications

  1. For Short-Text Tasks
    Tasks like sentiment analysis or text classification often require shorter sequence lengths. max_seq_length values of 128 or 256 are typically sufficient.

  2. For Long-Text Tasks
    For summarization, document classification, or other tasks involving lengthy inputs, a higher max_seq_length (e.g., 512 or 1024) is often required.


How to Adjust max_seq_length

If you are working with 4 GPUs (e.g., NVIDIA 3090), consider the following strategies to handle memory constraints:

  1. Reduce max_seq_length
    Start with a lower value, such as 512, and increase gradually if memory permits.

  2. Use Gradient Accumulation
    Increase gradient_accumulation_steps to reduce per-GPU memory usage.

  3. Distributed Training
    Leverage multiple GPUs or distributed training to share the memory load.

  4. Mixed Precision Training
    Use mixed-precision training (bf16 or fp16) to save memory.


Finding the Optimal Value

  • Analyze the Task:
    If the task requires understanding long-range dependencies, prioritize a higher max_seq_length.

  • Balance Memory and Performance:
    Begin with a value like 256 or 512. Adjust upwards only if necessary and supported by your hardware.


By configuring max_seq_length wisely, you can ensure efficient resource utilization and maintain high task performance, all while avoiding out-of-memory errors during training.

相关文章:

对max_seq_length参数的理解,基于open-instruct框架:中英文解释

使用open-instruct (https://github.com/allenai/open-instruct )框架,对其中的max_seq_length参数的理解记录下来。 bash脚本内容如下: # 设置模型和训练参数 MODEL_NAMEgoogle/gemma-2-2b MACHINE_RANK0 MAIN_PROCESS_IP127.0.0.1 MAIN_PROCESS_PORT2…...

似然分布(Likelihood Distribution)和似然函数(Likelihood Function)有什么区别?中英双语

中文版 在统计学中,似然分布(Likelihood Distribution)和似然函数(Likelihood Function)是两个相关但有所不同的概念。它们都涉及给定参数的情况下,数据出现的概率,但是它们的使用方式和含义有…...

LINUX2.4.x网络安全框架

在分析LINUX2.4.x网络安全的实现之前先简介一下它里面包括的几个重要概念:netfilter、iptables、match、target、nf_sockopt_ops、网络安全功能点的实现。详解会在后面的分析中讲到。 首先是netfilter,它定义了协议栈中的检查点和在检查点上引用的数据结…...

Python毕业设计选题:基于django+vue的智能停车系统的设计与实现

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 车主管理 车辆信息管理 车位信息管理 车位类型管理 系统…...

AI界的信仰危机:单靠“规模化”智能增长的假设,正在面临挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

JMeter 并发策略-针对准点秒杀场景的压测实现

一、场景的压测实现 1,创建线程组,10并发用户执行5次; 2,创建 Synchronizing Timer 元件,用于同步线程,设置同步元件 Synchronizing Timer 3,创建 http 请求4,创建 view results in table 元件…...

【如何提升代码工程质量】code review篇

应该对于基本上所有软件相关的公司来说,都有committer机制,即代码写好之后会提交合并请求,待相关人员code review通过后再进行合入,所以code review就是代码合入代码仓库的最后一道关卡,对于代码质量的影响也是不容忽视…...

1041.困于环中的机器人

题目: 解题思路; 由于机器人会一直重复指令,存在重复多次指令才回到原点的情况,需要对不同情况经行分析。 当执行一次指令后回到原点,则机器人永远无法回到原点。当执行一次指令后不回到原点,只有方向向北的无法在多次…...

Python实现IP代理池

文章目录 Python实现IP代理池一、引言二、步骤一:获取代理IP1、第一步:爬取代理IP2、第二步:验证代理IP的有效性 三、步骤二:构建IP代理池四、使用示例1、完整的使用示例2、注意事项3、处理网络问题 五、总结 Python实现IP代理池 …...

【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Socket 编程预备 1.1、理解源 IP 和目的 IP 1.2、认识端口号 1.2.1、端口号范围划分 1.2.2、理解 &q…...

【机器学习】机器学习学习笔记 - 监督学习 - 多项式回归决策树回归 - 03

多项式回归 解决线性回归的准备性不足问题(线性回归只能是直线,多项式回归引入多项式可以是曲线)通过对预测值进行多项式转换, 使得回归模型可以是非线性的多项式回归的优点是可以处理非线性的数据多项式回归的缺点是它对数据进行了多项式转换 加菲工具&#xff0…...

篡改猴(Tampermonkey)使用指南:为您的浏览器增添超级能力

篡改猴(Tampermonkey)使用指南:为您的浏览器增添超级能力 篡改猴(Tampermonkey) 是一款流行的用户脚本管理工具,可以在浏览器中安装和运行用户脚本,从而增强或自定义网页的功能。无论是去广告、…...

23省赛区块链应用与维护(房屋租凭【下】)

23省赛区块链应用与维护(房屋租凭) 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或…...

Java中三种常用布局方式

引言 在Java Swing和JavaFX中,布局管理器(Layout Managers)用于控制组件(如按钮、文本框等)在容器(如窗口、面板等)内的位置和大小。下面介绍Java Swing中常用的三种布局方式: 1. Fl…...

06_数据类型

数据类型 数据类型分类 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值和第八种 BigInt类型,当前课程暂不涉及) 据类型分类 原始类型(基础类型) var age = 20, var name = 尚学堂"; var le…...

及时+准确|主动元数据平台在监管报送场景中的应用实践

面对海量的数据报送需求和日益严格的监管要求,如何实现监管报送的全链路自动化数据质量保障,是金融机构亟待解决的重要课题。本文旨在介绍一种全新的监管报送场景方案,帮助金融机构通过“一键溯源与口径自动盘点、指标同源自动化分析、全链路…...

[python脚本处理文件入门]-18.使用Python进行PDF文件的合并与拆分

哈喽,大家好,我是木头左! Python PDF处理库概览 1. PyPDF2 PyPDF2是一个纯Python编写的库,用于PDF文件的读写和操作。它提供了丰富的功能,包括PDF文件的合并、拆分、加密、解密等。PyPDF2的安装非常简单,只需通过pip即可安装: pip install PyPDF2安装完成后,你就可以…...

4、常量和进制转换

1、常量 1.1、常量 常量是在程序运行中值不能内改变(常数)。 整型:12 55 实型:21.5 字符型常量: ‘A’ 1.2、常量不同进制表示 常量数据在计算机中除了用 十进制 表示,还可以用 二进制、八进制、十六进制表示。 十进制数据&…...

C++:探索哈希表秘密之哈希桶实现哈希

文章目录 前言一、链地址法概念二、哈希表扩容三、哈希桶插入逻辑四、析构函数五、删除逻辑六、查找七、链地址法代码实现总结 前言 前面我们用开放定址法代码实现了哈希表: C:揭秘哈希:提升查找效率的终极技巧_1 对于开放定址法来说&#…...

java函数式编程和Lambda表达式

https://www.bilibili.com/video/BV1fz421C7tj?spm_id_from333.788.videopod.episodes&vd_source12d5954938d20d50645e227a6a728c76 如果一个接口中只有一个方法,那么就可以函数对象化: interface Add {int add(int a, int b);}Add add (a, b) -&…...

【线程】Java多线程代码案例(2)

【线程】Java多线程代码案例(2) 一、定时器的实现1.1Java标准库定时器1.2 定时器的实现 二、线程池的实现2.1 线程池2.2 Java标准库中的线程池2.3 线程池的实现 一、定时器的实现 1.1Java标准库定时器 import java.util.Timer; import java.util.Timer…...

IOU Loss详解

IoU(Intersection over Union是目标检测中常用的指标,用于评估预测框和真实框的重叠程度。基于 IoU 的损失函数(IoU Loss)是通过优化 IoU 值来提升模型预测框的精度。 IoU 的计算公式 给定预测框 ( B_p ) 和真实框 ( B_g )&#…...

nfs服务器

1、简介 NFS (Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上…...

Diving into the STM32 HAL----- IWDG and WWDG Timers笔记

墨菲定律指出,任何可能出错的事情都会出错。尤其是对于嵌入式系统来说,情况尤其如此。除了硬件故障也会对软件产生影响外,即使是最仔细的设计也可能会出现一些意外情况,导致我们设备的异常行为。这可能会产生重大成本,…...

使用statefulset管理pod

deployment主要管理无状态的pod,就算需要磁盘也是期望做动态扩容的。而对于那种有状态需要存储数据的,如log、数据库、消息中间件需要持久化数据的,则建议使用StatefulSet,我们的pod现在扩充了pv和pvc,那就使用Statefu…...

6个AI生成PPT的网站,pptai一键生成

演讲和展示PPT是当今办公和学习中的重要组成部分,无论是工作汇报、发表研究成果,还是课件培训,一款精心制作的PPT能够有效吸引观众的参与,并将你的信息深入人心。借助不断进步的人工智能技术,众多免费的AI PPT生成器可…...

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候,判断,同时若剩余字符>k,只对前k个进行判断(这是重点)因为字符串是不可变变量,所以将其转化为字符串数组,最后才将结果重新转变为字符串 字符串->字符数组 …...

如何优雅的用PyQt访问http(仅供参考)

使用pydantic或dataclaass创建一个数据存储对象 第一种 # coding: utf-8 from typing import Anyimport requests from pydantic import Field, BaseModelclass ResponseModel(BaseModel):status: bool Field(True, description"响应状态")message: str Field(请求…...

小程序租赁系统开发的优势与应用解析

内容概要 随着科技的迅猛发展,小程序租赁系统应运而生,成为许多企业优化业务的重要工具。首先,它提升了用户体验。想象一下,用户只需轻轻一点,就能够浏览和租赁心仪的商品,这种便捷的过程使繁琐的操作大大…...

Group Convolution(分组卷积)

分组卷积的优点: 减少参数数量: 在分组卷积中,每个分组只与一部分输入通道进行卷积运算,这意味着模型的参数数量会减少。例如,如果一个卷积层有8个输入通道和8个输出通道,且不使用分组,那么将有…...

uniapp在H5使用vue-router路由返回上一页不会触发销毁函数解决方法

问题:uniapp在H5使用vue-router路由,如果在H5平台上进行页面刷新操作,再返回上一页,可能会遇到beforeDestroy、destroyed、onUnload生命周期钩子不被触发的问题。这是因为在H5中,页面的刷新实际上是整个应用的重新加载…...

YOLOv8配置文件应该如何命名?

文末有重点 1.配置文件解析代码yolov8/ultralytics/nn/tasks.py 如下: def yaml_model_load(path):"""Load a YOLOv8 model from a YAML file."""import repath Path(path)if path.stem in (fyolov{d}{x}6 for x in nsmlx for d i…...

扫雷-完整源码(C语言实现)

云边有个稻草人-CSDN博客 在学完C语言函数之后,我们就有能力去实现简易版扫雷游戏了(成就感满满),下面是扫雷游戏的源码,快试一试效果如何吧! 在test.c里面进行扫雷游戏的测试,game.h和game.c…...

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载:MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…...

UE5 Line Trace By Channel(通道线条追踪)节点

在 Unreal Engine 5 (UE5) 中,Line Trace By Channel 是一个常用于进行物理射线检测(raycasting)的节点。它会沿着一条从起点到终点的直线发射一条射线,并检测射线与世界中任何物体的碰撞。这个节点广泛应用于枪械射击、检测物体、…...

How to use the ‘git log‘ command to get change log for each file?

1. Using git log command #!/bin/bash# 目标文件名 output_file"git_log.csv"# 打印 CSV 文件的标题行 echo "CommitID,Author,Author Email,Date,Added-Lines Removed-Lines File" > $output_file echo "CommitID,Author,Author Email,Date,Add…...

node.js中实现router模块化管理

index.js const express require(express); const app express()// 导入路由模块 const router require(./router/index)// 注册路由模块 app.use(router)app.listen(3000, ()>{console.log(http://127.0.0.1:3000) })router/index.js const express require(express…...

突破性算法:让无人机集群在狭窄空间内穿针引线

导读 在建筑救援、森林搜索等任务中,无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突,或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化,而局部避…...

人工智能如何改变你的生活?

在我们所处的这个快节奏的世界里,科技融入日常生活已然成为司空见惯的事,并且切实成为了我们生活的一部分。在这场科技变革中,最具变革性的角色之一便是人工智能(AI)。从我们清晨醒来直至夜晚入睡,人工智能…...

C语言main()函数

C语言main()函数 argc(argument count) 在C或C程序中,argc(argument count的缩写)是一个由程序运行时环境自动提供的整数,用于指示传递给main函数的命令行参数的数量。因此,不需要&#xff08…...

【LC】162. 寻找峰值

题目描述: 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须…...

Zero to JupyterHub with Kubernetes上篇 - Kubernetes 离线二进制部署

前言: 纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 k8s二进…...

HTML5+JavaScript实现消消乐游戏

HTML5JavaScript实现消消乐游戏 点击两个相邻的方块来交换它们位置。 如果交换后形成三个或更多相同图案的方块连成一线,这些方块会被消除。 消除后,上方的方块会下落填补空缺,顶部会生成新的方块。 每消除一个方块得10分。例如&#xff0…...

深度学习:在PyTorch中进行模型验证完整流程

深度学习:在PyTorch中进行模型验证完整流程(以图像为例) 详细说明在PyTorch中进行模型验证的全过程。 模型验证的详细步骤和流程 1. 设置计算设备 选择合适的计算设备是性能优化的第一步。基于系统的资源(GPU的可用性&#xf…...

洛谷 P1747 好奇怪的游戏 C语言 bfs

题目: https://www.luogu.com.cn/problem/P1747#submit 题目描述 爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但…...

豆包MarsCode

01 AI代码陪练 来到豆包MarsCode官网:http://sqllb.com/6FRiH76 ,点击左上方的代码练习,就能看到一个AI代码陪练的练习场。 在左边栏,可以看到各种各样的算法题目,在右侧是MarsCode AI,中间是算法题目和…...

Docker网络模式:桥接(Bridge)模式与主机模式(Host)实操对比(一)

文章目录 前言一、桥接模式(Bridge Mode)前言 随着容器化技术的发展,Docker 已成为开发和部署应用的首选工具之一。Docker 不仅简化了应用的打包过程,还提供了多种网络模式来满足不同应用场景下的需求。本文将重点探讨两种常用的 Docker 网络模式——桥接模式(Bridge Mod…...

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信: 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信: 单工通信:数据只能沿一个方向传输 半双工通信:数据可以沿两个方向…...

【Git】Git 命令参考手册

目录 Git 命令参考手册1. 创建仓库1.1 创建一个新的本地仓库1.2 克隆一个仓库1.3 克隆仓库到指定目录 2. 提交更改2.1 显示工作目录中已修改的文件,准备提交2.2 将文件添加到暂存区,准备提交2.3 将所有已修改的文件添加到暂存区,准备提交2.4 …...

EBS 中 Oracle Payables (AP) 模块的相关集成

Oracle E-Business Suite (EBS) 中的 Oracle Payables (AP) 模块是一个全面的应付账款管理系统,它不仅提供了丰富的功能来管理与供应商的财务交易,还通过与其他模块的紧密集成,实现了企业内部各个业务流程的无缝衔接。以下是 Oracle Payables…...