LLM长度外推——位置插值(llama/baichuan)

ops/2025/1/16 2:43:09/

位置插值(position Interpolation, PI)通过将超出训练长度的位置索引等比例缩小,映射到模型已经学习的位置范围内,实现长度外推。
好处是不用重新训练,直接在推理时加入。

llama_3">llama的实现方式

论文提出 Extending Context Window of Large Language Models via Positional Interpolation
llama采用Rope位置编码,因此其实现都是针对rope编码的位置插值。

官方实现的代码:

https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/modeling_llama.py#L148

class LlamaLinearScalingRotaryEmbedding(LlamaRotaryEmbedding):"""LlamaRotaryEmbedding extended with linear scaling. Credits to the Reddit user /u/kaiokendev"""def forward(self, x, position_ids):# difference to the original RoPE: a scaling factor is aplied to the position idsposition_ids = position_ids.float() / self.scaling_factorcos, sin = super().forward(x, position_ids)return cos, sin

Super-HOT项目的实现

位置插值原理介绍: https://kaiokendev.github.io/til#extending-context-to-8k

源代码:https://huggingface.co/kaiokendev/superhot-13b-8k-no-rlhf-test/blob/main/llama_rope_scaled_monkey_patch.py

class ScaledRotaryEmbedding(torch.nn.Module):def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None):super().__init__()inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim))self.register_buffer("inv_freq", inv_freq)max_position_embeddings = 8192# Build here to make `torch.jit.trace` work.self.max_seq_len_cached = max_position_embeddingst = torch.arange(self.max_seq_len_cached,device=self.inv_freq.device,dtype=self.inv_freq.dtype,)# These two lines:self.scale = 1 / 4t *= self.scale

参考:
1.https://zhuanlan.zhihu.com/p/679147878
2.https://blog.csdn.net/v_JULY_v/article/details/135072211
3.https://kaiokendev.github.io/til#extending-context-to-8k

百川的实现方式

百川13B的位置编码是Alibi。因此是针对Alibi的长度外推。
有测试表明外推最大长度大约是训练的8倍时可以达到最佳性能:评论区
实现代码和步骤:
https://github.com/seanzhang-zhichen/baichuan-Dynamic-NTK-ALiBi

参考:
1.https://zhuanlan.zhihu.com/p/657161287
2.https://zhuanlan.zhihu.com/p/647628295

介绍ntk-alibi和动态ntk的文章:
https://github.com/keezen/ntk_alibi


http://www.ppmy.cn/ops/27502.html

相关文章

天地图路径规划功能实现

目录 1、天地图路径规划2、路径规划3、参数说明4、Demo 1、天地图路径规划 天地图Web服务API为用户提供HTTP/HTTPS接口,即开发者可以通过这些接口使用各类型的地理信息数据服务,可以基于此开发跨平台的地理信息应用。 Web服务API对所有用户开放。使用本…

Vue开发者工具Vue.js devtools Vue开发者工具安装步骤前端开发工具免费附带教程

下载地址: 链接: https://pan.baidu.com/s/1JaGvhS4NoD8lL07n2ScE9A 密码: 9rfs 安装步骤: 以谷歌浏览器为例 第一步:打开Chrome的拓展程序 如图 第二步: 将下载好的拓展程序拖入即可,如下图 第三步:…

React | React.cloneElement 的使用

我看到同事的代码里有 cloneElement,于是去了解了一下这个函数。 就跟它的名字一样,克隆元素,可以基于一个元素创建一个新的元素,并且为新元素添加新的属性或者覆盖已有的属性。 下面是一个简单例子: .node1 {backg…

设置UIProgressView的样式

UIProgressView是UIKit框架中的一个控件,用于显示任务的完成进度。你可以使用UIProgressView来展示任务的完成情况,例如下载文件、上传数据等。 要设置UIProgressView的样式,包括粗细、颜色等,你可以使用UIProgressView的一些属性…

PotatoPie 4.0 实验教程(34) —— FPGA实现摄像头图像二值化腐蚀效果

链接直达 https://item.taobao.com/item.htm?ftt&id776516984361 图像二值化腐蚀处理有什么作用? 图像二值化腐蚀处理在图像处理中起到了以下作用: 物体分割与提取:在图像二值化之后,通过腐蚀操作可以消除噪声、连接相邻的…

深入理解多层感知机MLP

1. 基础理论 神经网络基础: 目标:了解神经网络的结构,包括神经元、权重、偏置和激活函数。 神经网络是由多个层次的神经元组成的网络,它模拟了人脑处理信息的方式。每个神经元可以接收输入、处理输入并生成输出。这一过程涉及到…

[1671]jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

第三章:信息系统基础知识之信息系统概述

信息系统概述 信息系统(Information System,IS)一般泛指收集、存储、处理和传播各种信息的具有完整功能的集合体。现代信息系统总是与计算机技术和互联网技术的应用联系在一起,主要是指以计算机为信息处理工具,以网络为信息传输手段的信息系统…