LongAlign:ChatGLM 团队发布的超长文指令数据及训练评估方案

前言

LongAlign: A Recipe for Long Context Alignment of Large Language Models

这是一个由清华 ChatGLM 团队提出的长上下文指令微调数据、模型训练评测方案一条龙。主要包括:

  • 长文数据集:从九个来源收集长序列,通过 Self-Instruct 用 Claude 2.1 构建的一个长指令遵循数据集,10000条,长度在8k到64k之间,10%中文数据。
  • 长文训练:通过 packing 和 sorted batching 策略加速不同长度分布数据的 sft 效率。
    • packing:将序列打包到最大长度后再将它们分派到GPU。然而因为包含不同数量序列的 pack 在最终 loss 计算中被赋予了相等的权重,所以损失平均计算存在偏差。为了减轻这种偏差,我们提出了一种损失加权策略,以平衡不同序列对 loss 的贡献。
    • sorted batching:排序批处理方法,将长度相似的序列组合在一起,以减少批内空闲时间。
    • 训练了三个模型 (rope调整、继续与训练等过程见实验部分)
      • ChatGLM3-6B → LongAlign-6B-64k
      • Llama-2-7B → LongAlign-7B-64k
      • Llama-2-13B → LongAlign-13B-64k
  • 长文评测基准:由博士生们标注搞了个 LongBench-Chat 长文基准测试,评估长度为10k-100k的模型能力,包含40个英文任务+10个中文任务。它涵盖了指令遵循能力的多个方面,如推理、编码、摘要和多语言翻译等长上下文。用 GPT-4 标注参考答案,结合一些少样本评分示例给LLM生成的响应打分。

附录里还整了个活,为了测试模型在长文 OOD(Out-Of-Distribution)场景的能力,作者把这篇论文本身送给了模型,“从专业审稿人的角度,指出本文的优点和缺点” 和 “用 Rap 来讲述这篇论文”,作者是懂整活的😂。

Github:https://github.com/THUDM/LongAlign
数据集:https://huggingface.co/datasets/THUDM/LongAlign-10k
论文:https://arxiv.org/abs/2401.18058

介绍

大型语言模型(LLMs)具有大的上下文窗口,有助于完成诸如长文本摘要、长文本和代码问答等任务(Bai et al., 2023a)。现有的构建长上下文LLMs的工作主要集中在上下文扩展上,即位置编码扩展和对长文本的继续预训练(Chen et al., 2023a; Xiong et al., 2023; Peng et al., 2023)。在这项工作中,我们关注长上下文对齐,即通过指令微调LLMs来处理超长Query。然而缺数据、训练效率低、没有一个强大的benchmark,于是有了这篇work。

除了前面简介中的主要工作之外,还有几个有趣发现:

  • 数据量和多样性的影响:长指令数据量和多样性显著影响对齐模型处理长上下文的能力,影响最终性能高达30%。
  • 长指令数据的好处:长指令数据的数量对长上下文任务的性能有积极影响,同时不会损害模型处理短上下文的能力
  • 训练策略的有效性:采用的打包和排序批处理策略可以加速训练100%以上,而不会牺牲性能。此外,提出的损失加权技术提高了10%长上下文性能。

相关工作

关于长文模型(Long Context Scaling)

当前的长文本扩展方法可以分为两类:

  • 在更长序列上进行微调或继续预训练。著名的微调方法位置插值等通常涉及位置编码扩展和对更长序列的持续预训练。
  • 不需要微调。采用滑动窗口注意力邻近标记压缩等技术来处理长文本中的注意力计算中的位置O.O.D.问题。虽然即插即用,但仍然无法与经过微调的方法相匹配。

关于长文数据(LLM Alignment)

  • Xiong et al. (2023) 提出了一种通过连接短指令数据生成长指令数据的方法,但他们的数据集和模型权重并未开源
  • 尽管Chen et al. (2023b) 提供了他们的长指令数据集LongAlpaca-12k,并使用LoRA (Hu et al., 2022) 进行了高效的微调,但缺乏对数据和训练方法影响的深入讨论和比较分析。

我们的工作旨在通过调整数据、训练方法,并在广泛的任务上评估对齐模型,找到在全注意力下对长文本进行监督(全参数)微调的最佳解决方案。

LongAlign 详情

一. 数据:长文SFT数据集构建

长指令数据通常涉及长篇的上下文材料,如书籍、百科、论文、长代码,并伴随着需要根据材料进行摘要、推理或计算的任务 Query。在构建过程中,我们首先从9个不同的来源收集长文章和文档,然后我们使用Claude 2.1(Anthropic, 2023)根据给定的长上下文生成任务和答案,如图2所示。
在这里插入图片描述9个来源包括:

  • Arxiv(学术论文):开放获取,任何人都可以自由下载。
  • Books3(书籍):来自The Pile,目前没有授权下载。
  • C4 数据集(各类文章):公开可用的数据集,带有ODC-BY许可。
  • CLUECorpus2020(各类中文文章):由Xu等人(2020)从CommonCrawl语料库中提取的中文实例。
  • CommonCrawl 语料库(各类文章):公开可用的数据集,任何人都可以自由下载。
  • Github(代码库):开放获取,任何人都可以自由下载。
  • Stack Exchange(问答网站):可自由下载,采用CC BY-SA许可。
  • Wikipedia(百科全书):提供免费访问,采用CC BY-SA许可。
  • WuDaoCorpora(各类文章):开放获取的数据集。

为了促进生成任务的多样性,我们将任务类型描述纳入提示中,例如用于总结、信息提取、推理等任务。通过这种方法,我们为10k长文本创建了任务和答案,总共产生了10k个监督数据实例,其中10%是中文。这些数据采样时长度范围从8k到64k,长度用中文字符的更高压缩率的ChatGLM3-6B tokenizer计算出来的。而且对更长的文章进行了上采样(采的比例高一些),以确保长文数据平衡。

用 Claude 构造数据时用的 Prompt(基本都是根据上文提出5个xxx问题):
在这里插入图片描述

二. 训练:长文训练策略(打包和排序)

已知 LLM SFT 在训练期间,指令和响应通常被串联形成一个序列 [ x , y ] [x, y] [x,y] ,然后通过自回归语言模型 π π π 处理,以最大化概率 P π ( y ∣ x ) P_{\pi}(y|x) Pπ(y<

<think>好的,我现在需要帮用户解决如何在云服务器上部署GLM-4-9B-Chat模型并集成到RAG应用的问题。首先,我得理清楚用户的需求。用户提到了云服务器部署和RAG应用集成,所以可能需要分步骤来讲解,从环境准备到模型部署,再到RAG的整合。 先看看用户提供的引用内容。引用[1]提到老牛同学通过Git下载PyTorch参数文件在本地部署,但用户问的是云服务器,所以可能需要类似的步骤,但需要考虑云环境的不同。引用[4]提到了使用Xinference部署本地模型,还有百度网盘和ModelScope的下载链接,这可能对获取模型文件有帮助。此外,引用[3]提到了使用LongAlign的代码和环境来训练,但用户需要的是部署,可能这部分暂时用不上。引用[2]说明了GLM-4-9B的不同版本,包括Chat版本,所以需要确认用户下载的是正确的模型文件。 接下来,我需要考虑部署的基本流程。首先,云服务器的选择,可能推荐主流的比如AWS、阿里云或者腾讯云,特别是GPU实例,因为大模型需要GPU加速。然后,安装必要的依赖,比如Python、PyTorch、CUDA等。接着,下载模型文件,用户提供的引用里有Git和百度网盘的链接,可能需要指导用户如何下载和解压。然后,部署模型,这里可能需要使用像Xinference或者Hugging Face的transformers库来加载模型。还要考虑如何启动API服务,以便RAG应用调用。 关于RAG集成,可能需要介绍RAG的基本流程,包括文档处理、向量数据库的使用、检索和生成。引用[3]提到Embedding模型,用户可能需要下载并使用合适的Embedding模型来处理文档,比如BGE或OpenAI的text-embedding。然后,结合检索结果和用户查询,调用GLM模型生成答案。此外,引用[4]提到Dify平台,或许可以介绍如何使用Dify来搭建本地知识库,但用户的问题更偏向于自己集成到RAG,所以可能需要详细说明如何将模型嵌入到现有的RAG架构中。 需要注意的潜在问题包括云服务器的GPU配置是否足够,模型文件的大小和下载方式,以及依赖库的版本兼容性。例如,PyTorch和CUDA的版本需要匹配,否则可能导致运行错误。此外,部署后的API需要考虑网络配置,比如端口开放和安全设置,确保外部应用可以访问。 用户可能还关心性能优化,比如如何利用云服务器的多GPU进行模型并行,或者如何量化模型以减少内存占用。引用[2]提到GLM-4-9B有不同上下文长度的版本,用户需要根据应用场景选择合适的模型,比如需要处理长文本的话选择1M版本。 最后,生成相关问题的时候,需要考虑用户可能进一步的问题,比如性能调优、处理长文本的方法,或者如何与其他工具集成。需要确保这些问题与当前主题相关,并且能够帮助用户深入理解部署和应用的细节。 总结一下,回答的结构应该是分步骤的教程,涵盖环境准备、模型部署、RAG集成,以及注意事项和优化建议。同时,引用相关的资料来支持步骤的可行性,比如模型下载链接和部署工具。</think>### 在云服务器部署GLM-4-9B-Chat并集成到RAG的教程 #### 一、环境准备 1. **云服务器配置** - 选择支持GPU的实例(如NVIDIA A10/A100),建议显存≥24GB,内存≥32GB,存储≥100GB(模型文件约18GB)[^2][^4]。 - 安装CUDA 11.8+、cuDNN 8.9+,配置Python 3.9+环境。 2. **依赖安装** ```bash pip install torch==2.1.0 transformers==4.35.0 xinference huggingface_hub ``` #### 二、模型部署 1. **下载模型文件** 通过ModelScope或百度网盘获取模型(需提前申请权限): ```bash git clone https://www.modelscope.cn/zhipuai/glm-4-9b-chat.git # 或从网盘解压后上传至云服务器 /models/glm-4-9b-chat 目录 ``` 2. **启动Xinference服务** 使用轻量级框架部署API: ```bash xinference-local --host 0.0.0.0 --port 9997 \ --model-engine pytorch \ --model-path /models/glm-4-9b-chat \ --device gpu ``` 验证接口: ```python import requests response = requests.post("http://IP:9997/v1/chat/completions", json={ "model": "glm-4-9b-chat", "messages": [{"role": "user", "content": "你好"}] }) print(response.json()) ``` #### 三、RAG集成 1. **文档处理与向量化** - 使用BGE-Chinese-1.5模型生成向量: ```python from sentence_transformers import SentenceTransformer encoder = SentenceTransformer('BAAI/bge-large-zh-v1.5') embeddings = encoder.encode(["文本示例"]) ``` - 存入向量数据库(如FAISS或Milvus)。 2. **检索增强生成流程** ```python def rag_query(question): # 1. 检索相关文档 query_vec = encoder.encode(question) results = vector_db.search(query_vec, top_k=3) # 2. 构造提示词 context = "\n".join(results) prompt = f"基于以下信息回答问题:\n{context}\n\n问题:{question}" # 3. 调用GLM-4-9B生成 response = requests.post("http://localhost:9997/v1/chat/completions", json={ "model": "glm-4-9b-chat", "messages": [{"role": "user", "content": prompt}], "temperature": 0.3 }) return response.json()["choices"][0]["message"]["content"] ``` #### 四、优化建议 1. **性能调优** - 启用动态批处理:通过`xinference`的`--batch-size`参数提高GPU利用率 - 量化压缩:使用`bitsandbytes`库实现8-bit量化[^3] 2. **长上下文支持** 若需处理长文本(如1M token版本),需修改推理代码的注意力窗口参数: ```python model = AutoModel.from_pretrained("glm-4-9b-chat", trust_remote_code=True, max_sequence_length=1024000) ``` #### 五、注意事项 - 网络安全:建议在API层添加HTTPS和鉴权(如API Key) - 成本控制:云服务器按需启停实例,监控GPU使用率 - 版本兼容性:确保`transformers`库≥4.35以支持GLM架构 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值