首页/新闻资讯/正文详情

LMFlow 位置插值(Position Interpolation)实战指南:为 LLaMA 模型扩展上下文长度的 Linear 与 NTK RoPE 缩放

发布时间:2026/9/25 9:53:25 来源:云帆数科 栏目:资讯中心
LMFlow 位置插值(Position Interpolation)实战指南:为 LLaMA 模型扩展上下文长度的 Linear 与 NTK RoPE 缩放
人工智能大模型微调模型评测强化学习多模态【免费下载链接】LMFlowAn Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.项目地址https://gitcode.com/gh_mirrors/lm/LMFlow点击查看免费下载位置插值Position Interpolation, PI是突破大模型固定上下文窗口的关键技术之一。LMFlow 已内置对 LLaMA 系列模型的 Linear 缩放与 NTKNeural Tangent Kernel缩放支持仅需在命令行中开启--do_rope_scaling并指定缩放比例即可让原本最长 2048/4096 上下文的模型在更长序列上继续训练、微调与评估。读完本文你将掌握 LMFlow 中位置插值两个开关与两个比例参数的完整含义、底层CondenseRotaryEmbedding的实现原理以及一份可直接复用的长上下文评估脚本。为什么需要位置插值RoPE 与上下文长度瓶颈LLaMA 系列模型采用旋转位置编码Rotary Position Embedding, RoPE。RoPE 通过一组随位置变化的旋转频率inv_freq为每个 token 的位置注入旋转角使注意力分数天然带有相对位置信息。模型预训练时位置编码表只在有限的max_position_embeddings例如 2048内完成计算一旦输入序列超过该长度注意力计算就会超出位置编码的支撑区间导致困惑度perplexity急剧恶化、生成质量大幅下降。位置插值的思路是不改变频率本身的分布形态而是把更长序列的坐标压缩回预训练阶段见过的位置区间内。具体有两类主流做法Linear scaling线性缩放PI将位置坐标直接除以一个比例因子s即t t / s。原始 2048 的位置编码被拉伸覆盖到2048 × s的长度模型无需任何训练即可在更长上下文上工作配合少量长文本微调效果更佳。理论依据见论文Extending Context Window of Large Language Models via Positional InterpolationarXiv:2306.15595。NTK-aware scalingNTK 缩放不直接压缩坐标而是按公式放大 RoPE 的 base频率基数使高频分量保持原有分辨率、低频分量获得更大波长从而在不改变短序列行为的同时扩展可表示的最大位置。该思路源自社区对 Neural Tangent KernelNTK外推特性的讨论Reddit r/LocalLLaMA 上的 NTK-aware scaled RoPE 帖子。LMFlow 将这两种技术统一收口为四个模型参数在加载 LLaMA 模型时以模块替换的方式生效。参数速览位置插值的四个核心开关位置插值相关参数统一定义在src/lmflow/args.py的ModelArguments中args.py因此微调examples/finetune.py、评估examples/evaluation.py、推理examples/inference.py等所有基于模型加载的流水线均能复用同一套参数。参数默认值类型含义--truncate_to_model_max_lengthTruebool是否将数据集截断到模型最大长度。使用位置插值前必须设为False否则长序列会被预处理阶段直接截断插值无从发挥作用--do_rope_scalingFalsebool是否对 LLaMA 模型启用 RoPE 缩放即位置插值。False时比例参数即使传入也不生效--rope_pi_ratio1intLinear 缩放PI的比例因子s。例如4表示把上下文扩展为原来的 4 倍--rope_ntk_ratio1intNTK 缩放的比例因子。例如4表示按 4 倍扩展 NTK 频率范围参数帮助文本中 LMFlow 也明确标注了技术来源Linear scaling 归功于 Reddit 用户 /u/kaiokendev 与论文 arXiv:2306.15595NTK scaling 归功于 Reddit 用户 /u/bloc97 与 /u/emozilla见 args.py。源码级原理CondenseRotaryEmbedding与 monkey patch位置插值的核心实现位于src/lmflow/utils/position_interpolation/llama_rope_scaled_monkey_patch.py通过猴子补丁替换 Transformers 库中 LLaMA 的默认旋转嵌入模块。触发链路从命令行参数到模块替换在src/lmflow/models/hf_model_mixin.py的__model_module_inject中hf_model_mixin.py模型加载时会检查两个条件model_args.do_rope_scaling为True模型架构列表self.model_config.architectures中包含LlamaForCausalLM。两者同时满足时才从lmflow.utils.position_interpolation.llama_rope_scaled_monkey_patch导入replace_llama_with_condense并把rope_pi_ratio、rope_ntk_ratio传入。该方法在__init__阶段即被调用hf_model_mixin.py因此替换发生在任何前向传播之前。替换逻辑replace_llama_with_condensedef replace_llama_with_condense(pi_ratio, ntk_ratio): transformers.models.llama.modeling_llama.LlamaRotaryEmbedding partial( CondenseRotaryEmbedding, pi_ratiopi_ratio, ntk_rationtk_ratio )它通过functools.partial把 Transformers 内部的LlamaRotaryEmbedding替换为CondenseRotaryEmbedding并将两个比例参数预先绑定。从此所有LlamaForCausalLM实例化时都会使用压缩过的旋转嵌入训练与推理路径同步生效。核心实现CondenseRotaryEmbedding该类同时融合了 NTK 与 Linear 两种缩放llama_rope_scaled_monkey_patch.py初始化逻辑可分三步理解NTK 缩放先作用于 basebase 10000 × ntk_ratio^(dim/(dim-2))同时max_position_embeddings * ntk_ratio。base 放大后低频分量的波长相应变长模型可表示的位置范围随之扩展dim为注意力头维度dim/(dim-2)这一指数是 NTK 缩放保持相邻分量比值的经典构造。Linear 缩放再压缩坐标max_position_embeddings * pi_ratio随后位置序列按比例缩放t torch.arange(self.max_seq_len_cached, deviceself.inv_freq.device, dtypeself.inv_freq.dtype) / pi_ratio freqs torch.einsum(i,j-ij, t, self.inv_freq)缓存 sin/cos 表将freqs复制拼接后取cos/sin并注册为cos_cached、sin_cached缓冲区供注意力计算直接查表。forward中还保留了防御性逻辑若实际seq_len超过缓存的最大长度会按相同公式重新生成更长的 cos/sin 表保证超长输入不会越界llama_rope_scaled_monkey_patch.py。值得注意注释明确指出其排列方式与论文略有不同——它采用torch.cat((freqs, freqs), dim-1)而非论文中的交错排列但二者在最终旋转计算中等价。实战长上下文困惑度评估完整脚本原文档给出了一份可直接运行的评估脚本。要点在于必须同时关闭数据截断--truncate_to_model_max_length False并开启 RoPE 缩放--do_rope_scaling True然后用--block_size指定目标上下文长度用--rope_pi_ratio与--rope_ntk_ratio指定扩展比例。#!/bin/bash CUDA_VISIBLE_DEVICES0 \ deepspeed examples/evaluation.py \ --answer_type text \ --model_name_or_path pinkmanlove/llama-7b-hf \ --dataset_path data/wiki_en_eval \ --deepspeed examples/ds_config.json \ --inference_batch_size_per_device 1 \ --truncate_to_model_max_length False \ --block_size 4096 \ --use_flash_attention True \ --do_rope_scaling True \ --rope_pi_ratio 2 \ --rope_ntk_ratio 4 \ --metric ppl对这份脚本的逐项说明--deepspeed指定 DeepSpeed 配置文件。若示例路径examples/ds_config.json在你的仓库中不存在可替换为仓库自带配置例如 configs/deepspeed/zero2_no_offload.json 或 configs/deepspeed/zero3_no_offload.json。--block_size 4096评估时把序列按 4096 token 切块配合位置插值即可在 4K 上下文中计算困惑度。evaluate_block_size参数默认值为 1控制评估时每个 token 的条件似然计算所依赖的前置上下文长度必要时可一并调整见 args.py。--use_flash_attention True启用 Flash Attention 降低长序列注意力计算的内存开销该参数默认关闭args.py长上下文场景建议开启。--rope_pi_ratio 2 --rope_ntk_ratio 4同时指定两种比例时实现会先应用 NTK 缩放作用于 base再应用 PI 缩放作用于坐标最终等效扩展倍数为ntk_ratio × pi_ratio 8。实际使用时通常只需二选一。--dataset_path data/wiki_en_eval示例数据集路径请替换为你自己准备好的长文本评测集data/目录下提供的是下载脚本 data/download.sh。--metric ppl使评估以困惑度作为指标——这正是检验位置插值是否生效最直观的方式插值前后在同一长序列上的困惑度应显著下降。常见问题与使用限制只支持 LLaMA 架构__model_module_inject明确校验architectures中必须包含LlamaForCausalLM因此该特性当前只对 LLaMA 系列含 Llama-7B 等生效。若模型配置中不存在该架构标识do_rope_scaling会被静默忽略不会报错。比例默认值为 1rope_pi_ratio与rope_ntk_ratio默认均为1此时不产生任何扩展效果必须显式传入大于 1 的整数。不要忘记关闭截断truncate_to_model_max_length默认True若保持默认长序列在数据预处理阶段就被截断到模型原始最大长度位置插值形同虚设两个开关必须成对使用。插值 ≠ 免费午餐位置插值可以在零训练的情况下让模型看懂更长的序列但要让长上下文能力稳定可用通常还需配合长文本数据的继续微调。本文的评估脚本即是验证插值效果的标准手段可在此基础上对长文本数据集执行examples/finetune.py微调以进一步巩固长程能力。实现路径参考完整实现位于 llama_rope_scaled_monkey_patch.py参数定义见 args.py模块注入逻辑见 hf_model_mixin.py需要深入定制如更换频率公式或增加动态缩放时可从这三处入手修改。赞分享人工智能大模型微调模型评测强化学习多模态【免费下载链接】LMFlowAn Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.项目地址https://gitcode.com/gh_mirrors/lm/LMFlow点击查看免费下载相关推荐Long-Context 上下文扩展微调实战AI-Research-SKILLs 中 RoPE 位置插值与 YaRN 微调全流程指南Long Context 上下文扩展微调实战AI Research SKILLs 中 RoPE 位置插值与 YaRN 微调全流程指南 本指南以 fine_tuAI 技能人工智能大模型深度学习深入理解 RoPE 旋转位置编码数学推导、PyTorch 实现与长上下文扩展实战指南深入理解 RoPE 旋转位置编码数学推导、PyTorch 实现与长上下文扩展实战指南 RoPERotary Position Embeddings旋转位置AI 技能人工智能大模型深度学习突破100万字上下文LMDeploy动态NTK-RoPE与logN缩放技术全解析突破100万字上下文LMDeploy动态NTK RoPE与logN缩放技术全解析 长文本外推LLM推理的关键挑战 长文本外推指LLM大语言模型推理时处理人工智能大模型模型推理服务推理引擎本地部署模型量化上一篇终极iOS设备降级指南让旧iPhone/iPad重获新生下一篇终极iOS降级工具实战指南Legacy-iOS-Kit完整配置与应用解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

保姆级 OpenClaw 部署教程:Windows 可视化安装启动全步骤拆解(TaoToken 统一 Key 接入版)
保姆级 OpenClaw 部署教程:Windows 可视化安装启动全步骤拆解(TaoToken 统一 Key 接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 9:53:25

PHP反序列化漏洞实战:CVE-2016-7124绕过__wakeup原理与复现
PHP反序列化漏洞实战:CVE-2016-7124绕过__wakeup原理与复现

最近在攻防世界刷题的时候,看到一道叫 unserialize3 的 PHP 反序列化题。光看名称就知道考点很直接,就是unserialize函数配合魔术方法做文章。很多教程把这道题一笔带过,直接甩 payload 让你复制粘贴,但对为什么能绕过、为什么要改… · 2026/9/25 9:53:25

Oracle 11g客户端安装与连接配置全指南
Oracle 11g客户端安装与连接配置全指南

简介:本资源为Oracle 11g官方客户端完整安装包(rar格式),面向数据库开发人员、DBA及Java/.NET应用工程师,解决本地连接Oracle数据库服务器的核心依赖问题。包内共710个文件,含619个JAR(支撑JDBC… · 2026/9/25 9:53:19

dataDemo.rar数据交付校验:工业场景下的标准化探查与清洗闭环
dataDemo.rar数据交付校验:工业场景下的标准化探查与清洗闭环

简介:本资源是一个面向C#数据库开发初学者与中级工程师的多数据库操作实战示例包,聚焦Oracle、SQL Server、MySQL及SQLite四大主流数据库在.NET环境下的集成实践,解决跨数据库连接、CRUD操作、事务管理及工具类封装等核心开发痛点。压缩包共3… · 2026/9/25 10:17:21

本地可编程代码模板系统:CLI驱动的动态代码生成实践
本地可编程代码模板系统:CLI驱动的动态代码生成实践

1. 项目概述:一个被误读的CLI工具命名陷阱“claude-code-templates”这个标题,第一眼容易让人联想到Anthropic官方推出的Claude大模型生态工具——尤其是结合热搜词里高频出现的claude cli、codex cli、npm安装、vscode配置等关键词,很多人会… · 2026/9/25 10:17:15

AI时代下的前端求生之路:用TaoToken统一Key打通Cline与本地配置文件
AI时代下的前端求生之路:用TaoToken统一Key打通Cline与本地配置文件

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 10:17:15

Atlas 300V 24G是运算加速卡吗?NPU推理卡部署YOLO实战
Atlas 300V 24G是运算加速卡吗?NPU推理卡部署YOLO实战

“atlas 300v 24g 是运算加速卡吗”这个问题最近频繁出现,通常还连着“atlas部署yolo”一起被搜索。说实话,我第一次拿到Atlas 300V 24G这块卡时也愣过一下:它长得像显卡,插在PCIe槽位上,散热器和显存颗粒齐全&#xf… · 2026/9/25 10:17:15

C++代码风格检查工具详解:Clang-Tidy与Cppcheck配置实战
C++代码风格检查工具详解:Clang-Tidy与Cppcheck配置实战

1. 项目概述1.1 为什么你需要一个代码风格检查工具这次想聊的是C代码风格检查工具。先别急着划走,我知道这话题听起来不性感,远不如“C小游戏编程100例”或者“用C制作僵尸末日小游戏”吸引眼球,但恰恰是这个不性感的环节,决定了你… · 2026/9/25 10:17:14

Atlas 300V 24G部署YOLOv5实战:NPU推理加速与踩坑全记录
Atlas 300V 24G部署YOLOv5实战:NPU推理加速与踩坑全记录

这块卡刚到我手上的时候,我第一反应也是那三个字:能跑吗?当时项目里已经有现成的YOLOv5检测流程,推理侧跑在一张老旧的消费级GPU上,显存捉襟见肘。同事丢过来一块Atlas 300V 24G,问我“这玩意算运算加速卡吗… · 2026/9/25 10:17:14

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码