ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Chinese-LLaMA-Alpaca-2 技术实战指南:中文词表扩充、16K/64K 长上下文模型与推理部署全解析

Chinese-LLaMA-Alpaca-2 技术实战指南:中文词表扩充、16K/64K 长上下文模型与推理部署全解析
  • 人工智能
  • 大模型
  • 预训练
  • 微调
  • RLHF
  • LoRA
  • 本地部署
  • 模型量化

【免费下载链接】Chinese-LLaMA-Alpaca-2

中文LLaMA-2 & Alpaca-2大模型二期项目 + 64K超长上下文模型 (Chinese LLaMA-2 & Alpaca-2 LLMs with 64K long context models)

项目地址:https://gitcode.com/gh_mirrors/ch/Chinese-LLaMA-Alpaca-2
点击查看免费下载

本指南以 Chinese-LLaMA-Alpaca-2 开源项目的官方英文文档(README_EN.md)为主体,系统讲解基于 Meta Llama-2 二次开发的中文 LLaMA-2 基座模型与 Alpaca-2 指令模型:从 55296 词表重设计、FlashAttention-2 高效注意力、PI/YaRN 长上下文扩展等核心技术,到模型选型、LoRA 合并、CPU/GPU 量化部署、训练精调与效果评测的完整实战链路。读完本文,你将掌握该项目标准版(4K)、长上下文版(16K/64K)、RLHF 版全系列模型的正确使用方法,并能够直接复现推理、部署、评测与微调流程。

一、项目概览与开源模型体系

Chinese-LLaMA-Alpaca-2 是中文 LLaMA & Alpaca 大模型项目的第二期,基于 Meta 发布的 Llama-2 开发,在保留原版模型能力的基础上扩充并优化了中文词表,并使用大规模中文数据进行增量预训练,显著提升中文基础语义与指令理解能力。项目同时开源了预训练与指令精调脚本,支持用户在自有数据上继续训练,也支持在个人电脑 CPU/GPU 上直接量化和部署体验。

1.1 已开源模型矩阵

模型系列上下文参数规模类型
Chinese-LLaMA-24K(标准版)1.3B / 7B / 13B基座模型(Base Model)
Chinese-Alpaca-24K(标准版)1.3B / 7B / 13B指令/Chat 模型
Chinese-LLaMA-2-16K16K7B / 13B长上下文基座模型(PI)
Chinese-Alpaca-2-16K16K7B / 13B长上下文指令模型(PI)
Chinese-LLaMA-2-64K64K7B超长上下文基座模型(YaRN)
Chinese-Alpaca-2-64K64K7B超长上下文指令模型(YaRN)
Chinese-Alpaca-2-RLHF4K(标准版)1.3B / 7B人类偏好对齐模型

其中基座模型(LLaMA-2 系列)适用于文本续写类任务;指令模型(Alpaca-2 系列)适用于问答、写作、聊天、交互等指令理解类任务,二者不可混用(详见下文模型选型)。

1.2 五大核心技术特点

📖 重新设计的中文词表(55296)

一期项目针对原版 LLaMA 的 32K 词表扩充了中文字词(LLaMA 词表 49953、Alpaca 词表 49954);本项目则重新设计了统一的新词表,大小为 55,296,进一步提升了中文字词的覆盖程度,同时统一了 LLaMA 与 Alpaca 的词表,避免混用词表带来的编码问题,提升了模型对中文文本的编解码效率。注意:一代与二代词表不同,请勿混用。

⚡ 基于 FlashAttention-2 的高效注意力

FlashAttention-2 相比其一代技术具有更快的速度和更优化的显存占用。当上下文长度变长时,注意力矩阵的显存开销会呈爆炸式增长,因此高效注意力技术尤为关键。本项目所有模型均使用 FlashAttention-2 进行训练,推理端也有对应加速支持(见 flash_attn_patch_for_inference.py)。

🚄 基于 PI 和 YaRN 的自适应上下文扩展

  • 一期项目曾实现基于 NTK 的上下文扩展,可在不继续训练的情况下支持更长上下文;
  • 本项目基于位置插值 PI(Position Interpolation)和 NTK 等方法推出 16K 长上下文版模型,支持 16K 上下文,并可通过 NTK 方法进一步扩展至 24K~32K;
  • 基于YaRN方法进一步推出 64K 长上下文版模型;
  • 在此基础上设计了自适应经验公式,无需针对不同上下文长度手动设置 NTK 超参,显著降低使用难度(源码实现在 attn_and_long_ctx_patches.py 中,alpha参数支持传具体数值或'auto',传入'auto'时会依据序列长度自动计算扩展系数)。

🤖 简化的中英双语系统提示语

一期项目的 Alpaca 模型使用 Stanford Alpaca 的指令模板与冗长系统提示语;初步实验发现 Llama-2-Chat 的长系统提示语未带来统计显著的性能提升。本项目 Alpaca-2 系列简化了系统提示语,同时遵循 Llama-2-Chat 指令模板,以便更好地适配相关生态。实际使用的系统提示语为"You are a helpful assistant. 你是一个乐于助人的助手。",完整模板见 prompts/alpaca-2.txt:

[INST] <<SYS>> You are a helpful assistant. 你是一个乐于助人的助手。 <</SYS>> {instruction} [/INST]

该模板同时贯穿于推理(inference_hf.py)、训练(build_dataset.py)、Gradio 演示(gradio_demo.py)、LangChain(langchain_qa.py)与 privateGPT(privateGPT.py)等全部配套脚本中。

👮 人类偏好对齐(RLHF)

一期 Alpaca 模型仅完成预训练与指令精调;本项目通过基于人类反馈的强化学习(RLHF)实验发现可显著提升模型传递正确价值观的能力,由此推出 Alpaca-2-RLHF 系列模型,其使用方式与 SFT 模型一致。

二、模型下载与选型指引

2.1 基座模型 vs 指令模型:如何选型

官方文档给出了明确的对比结论——如需聊天交互,请选择 Alpaca 而不是 LLaMA。核心差异如下:

对比项Chinese LLaMA-2Chinese Alpaca-2
模型类型基座模型指令/Chat 模型(类 ChatGPT)
已开源大小1.3B、7B、13B1.3B、7B、13B
训练类型Causal-LM(CLM)指令精调(SFT)
训练方式7B/13B:LoRA + 全量 emb/lm-head;1.3B:全量参数7B/13B:LoRA + 全量 emb/lm-head;1.3B:全量参数
基于什么模型训练原版 Llama-2(非 chat 版)Chinese LLaMA-2
训练语料无标注通用语料(120G 纯文本)有标注指令数据(500 万条)
词表大小55,29655,296
上下文长度标准 4K(NTK 可扩至 12K-18K);16K 版(NTK 可扩至 24K-32K);64K 版(YaRN)同左
输入模板不需要需要套用特定模板(类似 Llama-2-Chat)
适用场景文本续写指令理解、问答、写作、聊天、交互
不适用场景指令理解、多轮聊天无限制自由文本生成
偏好对齐无RLHF 版本(1.3B、7B)

几点补充说明(来自官方注释):括号内表示基于 NTK 上下文扩展支持的最大长度;Alpaca-2 采用 Llama-2-chat 系列模板(格式相同、提示语不同),而非一代 Alpaca 模板;1.3B 模型不建议单独使用,而是通过投机采样搭配更大的 7B/13B 模型使用(仓库配套脚本见 speculative_sample.py)。

2.2 完整模型(直接可用,推荐带宽充足用户)

完整版模型下载后即可直接使用,无需合并步骤。各模型均提供 Hugging Face、ModelScope、百度网盘三个渠道,并附对应 GGUF 量化版:

模型名称类型大小
Chinese-LLaMA-2-13B基座模型24.7 GB
Chinese-LLaMA-2-7B基座模型12.9 GB
Chinese-LLaMA-2-1.3B基座模型2.4 GB
Chinese-Alpaca-2-13B指令模型24.7 GB
Chinese-Alpaca-2-7B指令模型12.9 GB
Chinese-Alpaca-2-1.3B指令模型2.4 GB

2.3 长上下文版模型(推荐长文本下游任务)

模型名称类型大小上下文
Chinese-LLaMA-2-7B-64K基座模型12.9 GB64K(YaRN)
Chinese-Alpaca-2-7B-64K指令模型12.9 GB64K(YaRN)
Chinese-LLaMA-2-13B-16K基座模型24.7 GB16K(PI,NTK 可扩至 24K-32K)
Chinese-LLaMA-2-7B-16K基座模型12.9 GB16K(PI,NTK 可扩至 24K-32K)
Chinese-Alpaca-2-13B-16K指令模型24.7 GB16K(PI,NTK 可扩至 24K-32K)
Chinese-Alpaca-2-7B-16K指令模型12.9 GB16K(PI,NTK 可扩至 24K-32K)

长上下文版模型可直接应用于下游任务(如 privateGPT 多文档问答);若非长文本任务,建议仍使用标准版。

2.4 RLHF 版与 AWQ 版模型

  • RLHF 版:Chinese-Alpaca-2-7B-RLHF(12.9 GB)与 Chinese-Alpaca-2-1.3B-RLHF(2.4 GB),对涉及法律、道德等问题较标准版有更优的价值导向;
  • AWQ 版:AWQ(Activation-aware Weight Quantization)是一种高效的模型量化方案,可兼容 transformers、llama.cpp 等主流框架。本项目模型的 AWQ 预搜索结果公开在 Hugging Face 仓库hfl/chinese-llama-alpaca-2-awq中,用户可据此生成对应 AWQ 量化模型并在 llama.cpp 中使用。

2.5 LoRA 模型:轻量下载与合并

LoRA 模型(含 emb/lm-head,与完整模型一一对应)无法直接使用,必须与原版 Llama-2 合并后才能推理、量化或继续训练。适用于网络带宽不足、手头已有原版 Llama-2 的用户:

模型名称类型合并所需基模型LoRA 大小
Chinese-LLaMA-2-LoRA-13B基座模型Llama-2-13B-hf1.5 GB
Chinese-LLaMA-2-LoRA-7B基座模型Llama-2-7B-hf1.1 GB
Chinese-Alpaca-2-LoRA-13B指令模型Llama-2-13B-hf1.5 GB
Chinese-Alpaca-2-LoRA-7B指令模型Llama-2-7B-hf1.1 GB
Chinese-LLaMA-2-LoRA-7B-64K / Chinese-Alpaca-2-LoRA-7B-64K长上下文Llama-2-7B-hf1.1 GB
Chinese-LLaMA-2-LoRA-13B-16K / 7B-16K、Chinese-Alpaca-2-LoRA-13B-16K / 7B-16K长上下文对应 Llama-2-hf1.5/1.1 GB

仓库提供了低显存版合并脚本merge_llama2_with_chinese_lora_low_mem.py,命令行用法如下:

python merge_llama2_with_chinese_lora_low_mem.py \ --base_model path/to/llama2-hf-model \ --lora_model path/to/chinese-llama2-or-alpaca2-lora \ --output_type [huggingface|pth] \ --output_dir path/to/output-dir

关键参数说明:--base_model为原版 Llama-2 的 Hugging Face 格式权重路径;--lora_model为下载的 LoRA 权重路径;--output_type可选huggingface(默认,供 transformers 推理)或pth(供量化工具使用);--output_dir为合并输出目录。从源码看,脚本会校验 LoRA 词表与 tokenizer 词表一致性(不一致会报错并提示),合并时通过lora_A.weight @ lora_B.weight计算增量并乘上lora_alpha / r缩放系数后叠加进原权重;pth输出模式还会自动按模型层数识别规格(1.3B/7B/13B/70B)并执行权重分片与unpermute等处理。离线转换通常先生成 Hugging Face 格式再转 GGUF 供 llama.cpp 量化。

三、推理与部署实战

3.1 部署方式总览

项目官方文档给出了七种主流部署方案的特性对比(✅ 表示支持、❌ 表示不支持):

工具特点CPUGPU量化GUIAPIvLLM16K64K投机采样
llama.cpp丰富量化选项 + 高效本地推理✅✅✅❌✅❌✅✅✅
🤗 Transformers原生 transformers 推理接口✅✅✅✅❌✅✅✅✅
Colab Demo在 Colab 中启动 Gradio 交互界面✅✅✅✅❌✅✅✅✅
OpenAI API Calls仿 OpenAI API 接口的服务器 Demo✅✅✅❌✅✅✅✅❌
text-generation-webui前端 Web UI 部署✅✅✅✅✅❌✅❌❌
LangChain适合二次开发的应用框架✅✅✅❌❌❌✅✅❌
privateGPT基于 LangChain 的多文档本地问答✅✅✅❌❌❌✅❌❌

说明:长上下文支持(16K/64K 列)需要第三方库支持自定义 RoPE;vLLM 后端不支持本项目长上下文版模型;text-generation-webui 的 API 与 LangChain 的 CPU/量化特性虽被工具本身支持但官方教程未实现。

3.2 🤗 Transformers 推理:核心参数逐项解读

项目提供了功能最完整的推理脚本 inference_hf.py,支持交互式单轮问答、批量文件推理、8/4 bit 量化、vLLM 后端、CFG 采样、投机采样、FlashAttention-2 与 NTK 扩展。核心命令行参数:

参数默认值说明
--base_model必填基座模型路径(完整模型或合并后模型)
--lora_modelNoneLoRA 路径;为 None 时直接基于 base_model 推理
--tokenizer_pathNone未指定时依次回退到 lora_model / base_model
--data_fileNone含指令的文本文件(每行一条),缺省使用内置示例
--interactiveFalse进入单轮问答模式(不支持多轮)
--with_promptFalse自动套用[INST]...[/INST]模板
--gpus"0"指定 GPU 编号,多卡用逗号分隔
--only_cpuFalse纯 CPU 推理
--alpha"1.0"NTK 方法缩放因子,可为浮点数或'auto'
--use_ntkFalse启用动态 NTK 扩展上下文
--load_in_8bit/--load_in_4bitFalse8/4 bit 量化加载(仅 GPU)
--use_vllmFalse使用 vLLM 后端
--system_prompt内置双语提示语自定义系统提示语
--negative_prompt/--guidance_scaleNone / 1.0CFG 采样;guidance_scale > 1时启用
--speculative_samplingFalse启用投机采样加速
--draft_base_model/--draft_lora_modelNone投机采样的草稿模型
--draft_k-1草稿模型每次猜测的 token 数;<=0 时使用自适应 K
--use_flash_attention_2False用 FlashAttention 替换 LLaMA 注意力

典型命令(批量文件推理,套用 Alpaca-2 模板并开启 NTK 扩展):

python scripts/inference/inference_hf.py \ --base_model path/to/chinese-alpaca-2-model \ --data_file path/to/instructions.txt \ --with_prompt \ --predictions_file predictions.json \ --use_ntk --alpha auto

从源码看,脚本内部默认GenerationConfig为temperature=0.2、top_k=40、top_p=0.9、do_sample=True、num_beams=1、repetition_penalty=1.1、max_new_tokens=400,与项目官方评测所用解码参数保持一致。此外脚本对冲突参数做了防御性校验:--load_in_8bit与--load_in_4bit不能同时开启;CPU 模式不支持量化;vLLM 模式不支持 LoRA、量化、CFG 与投机采样(会直接抛出 ValueError)。加载时若检测到模型词表与 tokenizer 词表不一致,会自动执行resize_token_embeddings适配新词表。

3.3 FlashAttention-2 推理加速

推理侧通过 flash_attn_patch_for_inference.py 将LlamaAttention.forward替换为基于flash_attn_with_kvcache的实现(要求 flash-attention >= 2.2),并重写_prepare_decoder_attention_mask以保证 mask 语义正确。推理时加--use_flash_attention_2即可启用,长上下文场景下可显著降低显存占用并提升速度。

3.4 NTK 动态扩展:自适应经验公式

长上下文支持的关键在于 attn_and_long_ctx_patches.py。apply_ntk_scaling_patch(alpha)会替换LlamaRotaryEmbedding的初始化与 forward:当alpha为数值时直接按base * alpha ** (dim / (dim - 2))调整 RoPE base;当alpha == 'auto'时进入自适应模式——根据当前seq_len与max_position_embeddings动态计算alpha,无需为不同上下文长度手动设置超参。该文件同时提供 xformersmemory_efficient_attention替换(apply_attention_patch),供非 FlashAttention 环境使用。

3.5 投机采样加速

投机采样(Speculative Sampling)用轻量 1.3B 模型作草稿模型、7B/13B 作目标模型,保持输出分布等价的同时显著提速。仓库实现(speculative_sample.py)参考 DeepMind 论文思路:草稿模型每次先串行生成draft_k个候选 token,目标模型单次前向并行校验,按min(1, p_target/p_draft)概率逐个接受,被拒绝的位置用归一化后的残差分布重新采样;draft_k <= 0时启用自适应 K(全部接受则draft_k += 2,有拒绝则draft_k = max(1, draft_k - 1))。启用方式:

python scripts/inference/inference_hf.py \ --base_model path/to/chinese-alpaca-2-7b \ --draft_base_model path/to/chinese-alpaca-2-1.3b \ --speculative_sampling --draft_k 4 --interactive

3.6 vLLM 与 OpenAI 兼容 API

  • vLLM 加速:--use_vllm将推理切换到 vLLM 后端(tokenizer_mode='slow'、trust_remote_code=True,可按--gpus=0,1,...做张量并行);注意 vLLM 当前不支持 LoRA、量化、CFG、投机采样以及长上下文版模型。
  • OpenAI 兼容服务:仓库提供 openai_api_server.py,基于 FastAPI + uvicorn 实现/v1/chat/completions、/v1/completions、/v1/embeddings等 OpenAI 风格接口(协议定义见同目录 openai_api_protocol.py),支持流式 SSE 输出与多轮对话,方便将模型无缝接入既有 OpenAI SDK 生态。

3.7 llama.cpp、Gradio、LangChain 与 privateGPT

  • llama.cpp:支持从 GGUF 模型出发做 CPU/GPU 量化推理,仓库示例脚本见 scripts/llama-cpp(chat.sh提供与 Alpaca-2 对话的调用封装,server_curl_example.sh演示架设 server 后用 curl 调用);
  • Gradio 多轮对话:gradio_demo.py 提供带历史记录的多轮 Web 界面(默认端口 19324,支持 8/4 bit、CPU、vLLM、NTK 等选项),并内置"回复尽可能多内容"等长回复提示语模板;
  • LangChain 二次开发:langchain_qa.py 演示了RecursiveCharacterTextSplitter切分文档 →HuggingFaceEmbeddings+ FAISS 建库 →RetrievalQA问答的完整链路,支持stuff与refine两种 chain 类型;
  • privateGPT 多文档问答:privateGPT.py 基于 Chroma 向量库 + LlamaCpp/GPT4All 后端,并针对 Chinese-Alpaca-2 定制了[INST]...[/INST]提示模板,长上下文版(16K)可直接用于多文档问答。

环境依赖(requirements.txt):peft==0.3.0、torch==2.0.1、transformers==4.35.0、sentencepiece==0.1.99、bitsandbytes==0.41.1。

四、系统效果评测

4.1 生成效果:模型竞技场

项目仿照 Fastchat Chatbot Arena 推出在线对战平台,提供胜率与Elo 评分指标,题库源自一期项目人工制作的 200 题及新增题目。需要注意:生成回复具有随机性,受解码超参与随机种子影响,相关评测并非绝对严谨,结果仅供参考。截至 2023 年 9 月 1 日的部分结果:

系统对战胜率(无平局)Elo 评分
Chinese-Alpaca-2-13B-16K86.84%1580
Chinese-Alpaca-2-13B72.01%1579
Chinese-Alpaca-Pro-33B(一期)64.87%1548
Chinese-Alpaca-2-7B64.11%1572
Chinese-Alpaca-Pro-7B(一期)62.05%1500
Chinese-Alpaca-2-7B-16K61.67%1540
Chinese-Alpaca-Pro-13B(一期)61.26%1567
Chinese-Alpaca-Plus-33B(一期)31.29%1401
Chinese-Alpaca-Plus-13B(一期)23.43%1329
Chinese-Alpaca-Plus-7B(一期)20.92%1379

部分生成样例可查看仓库 examples 目录。

4.2 客观效果评测:C-Eval

C-Eval 是全面的中文基础模型评测套件:验证集 1.3K 题、测试集 12.3K 题、覆盖 52 个学科,结果以"zero-shot / 5-shot"呈现。仓库配套推理脚本为 scripts/ceval/eval.py(基于 C-Eval 官方代码改造,支持 few-shot、CoT、约束解码、测试集输出 submission.json 等选项):

LLaMA 模型ValidTestAlpaca 模型ValidTest
Chinese-LLaMA-2-13B40.6 / 42.738.0 / 41.6Chinese-Alpaca-2-13B44.3 / 45.942.6 / 44.0
Chinese-LLaMA-2-7B28.2 / 36.030.3 / 34.2Chinese-Alpaca-2-7B41.3 / 42.940.3 / 39.5
Chinese-LLaMA-Plus-33B(一期)37.4 / 40.035.7 / 38.3Chinese-Alpaca-Plus-33B(一期)46.5 / 46.344.9 / 43.5
Chinese-LLaMA-Plus-13B(一期)27.3 / 34.027.8 / 33.3Chinese-Alpaca-Plus-13B(一期)43.3 / 42.441.5 / 39.9
Chinese-LLaMA-Plus-7B(一期)27.3 / 28.326.9 / 28.4Chinese-Alpaca-Plus-7B(一期)36.7 / 32.936.4 / 32.3

4.3 客观效果评测:CMMLU

CMMLU 专用于评估模型在中文语境下的知识与推理能力:覆盖 67 个主题、共 11.5K 道选择题。仓库配套脚本为 scripts/cmmlu/eval.py:

LLaMA 模型Test (0/few-shot)Alpaca 模型Test (0/few-shot)
Chinese-LLaMA-2-13B38.9 / 42.5Chinese-Alpaca-2-13B43.2 / 45.5
Chinese-LLaMA-2-7B27.9 / 34.1Chinese-Alpaca-2-7B40.0 / 41.8
Chinese-LLaMA-Plus-33B(一期)35.2 / 38.8Chinese-Alpaca-Plus-33B(一期)46.6 / 45.3
Chinese-LLaMA-Plus-13B(一期)29.6 / 34.0Chinese-Alpaca-Plus-13B(一期)40.6 / 39.9
Chinese-LLaMA-Plus-7B(一期)25.4 / 26.3Chinese-Alpaca-Plus-7B(一期)36.8 / 32.6

4.4 长上下文评测:LongBench

LongBench 由 6 大类、20 个任务组成,多数任务平均长度 5K~15K,共约 4.75K 条测试样本。以下为中文任务(含代码任务)结果,仓库配套脚本为 scripts/longbench/pred_llama2.py:

模型单文档QA多文档QA摘要Few-shot 学习代码补全合成任务Avg
Chinese-Alpaca-2-7B-64K44.728.114.439.044.65.029.3
Chinese-LLaMA-2-7B-64K27.216.46.533.07.85.016.0
Chinese-Alpaca-2-13B-16K47.926.713.022.346.621.529.7
Chinese-Alpaca-2-13B38.420.011.917.346.58.023.7
Chinese-Alpaca-2-7B-16K46.423.314.329.049.69.028.6
Chinese-Alpaca-2-7B34.017.411.821.350.34.523.2
Chinese-LLaMA-2-13B-16K36.717.73.129.813.83.017.3
Chinese-LLaMA-2-13B28.314.44.616.310.45.413.2
Chinese-LLaMA-2-7B-16K33.215.96.523.510.35.315.8
Chinese-LLaMA-2-7B19.013.96.411.011.04.711.0

可见长上下文版模型在长文本任务上相较标准版有系统性提升(如 Chinese-Alpaca-2-13B-16K 相对 13B 在单文档 QA 上由 38.4 提升至 47.9)。

4.5 量化效果评测

以 Chinese-LLaMA-2-7B 为例,不同精度下的模型大小、PPL(4K 上下文)与 C-Eval(valid 集 zero-shot / 5-shot):

精度模型大小PPLC-Eval
FP1612.9 GB9.37328.2 / 36.0
8-bit 量化6.8 GB9.47626.8 / 35.4
4-bit 量化3.7 GB10.13225.5 / 32.8

llama.cpp 下不同量化方法的详细基准(速度 ms/tok,测试设备 M1 Max):

llama.cppF16Q2_KQ3_KQ4_0Q4_1Q4_KQ5_0Q5_1Q5_KQ6_KQ8_0
PPL9.12811.1079.5769.4769.5769.2409.1569.2139.1689.1339.129
Size12.91G2.41G3.18G3.69G4.08G3.92G4.47G4.86G4.59G5.30G6.81G
CPU 速度11742513944434851505465
GPU 速度531921171820xx2526x

总体规律:Q4_K 与 Q5_K 在速度、体积与 PPL 损失之间取得较均衡的取舍,是个人电脑本地部署的常用档位。

4.6 投机采样加速效果

在 1×A40-48G 上、模型均为 fp16、按官方竞技场题目测得的平均解码速度(ms/token):

草稿模型草稿模型速度目标模型目标模型速度投机采样速度(加速比)
Chinese-LLaMA-2-1.3B7.6Chinese-LLaMA-2-7B49.336.0(1.37x)
Chinese-LLaMA-2-1.3B7.6Chinese-LLaMA-2-13B66.047.1(1.40x)
Chinese-Alpaca-2-1.3B8.1Chinese-Alpaca-2-7B50.234.9(1.44x)
Chinese-Alpaca-2-1.3B8.2Chinese-Alpaca-2-13B67.041.6(1.61x)

这解释了官方推荐"1.3B 模型与 7B/13B 搭配使用"的原因:小模型本身推理极快,作为草稿模型能带来约 1.4~1.6 倍的目标模型加速。

4.7 RLHF 版模型评测

对齐水平:官方自建评测数据集覆盖道德、色情、毒品、暴力等价值偏好维度,以价值体现正确率(正确体现价值观题数 / 总题数)呈现:

Alpaca 模型AccuracyAlpaca 模型Accuracy
Chinese-Alpaca-2-1.3B79.3%Chinese-Alpaca-2-7B88.3%
Chinese-Alpaca-2-1.3B-RLHF95.8%Chinese-Alpaca-2-7B-RLHF97.5%

RLHF 后价值对齐水平提升约 9~16 个百分点,同时客观评测基本持平:

Alpaca 模型C-Eval (0/few-shot)CMMLU (0/few-shot)
Chinese-Alpaca-2-1.3B23.8 / 26.824.8 / 25.1
Chinese-Alpaca-2-7B42.1 / 41.040.0 / 41.8
Chinese-Alpaca-2-1.3B-RLHF23.6 / 27.124.9 / 25.0
Chinese-Alpaca-2-7B-RLHF40.6 / 41.239.5 / 41.0

五、训练与精调

项目开源了完整的预训练与指令精调脚本(LoRA + 全量 emb/lm-head 方案,1.3B 为全量参数训练),并配套 DeepSpeed ZeRO-2 配置文件(ds_zero2_no_offload.json)。

5.1 增量预训练(Chinese LLaMA-2)

在原版 Llama-2 基础上用大规模无标注数据增量训练,训练语料与一期 Plus 版本一致(约 120G 纯文本)。入口脚本为 run_pt.sh,核心参数(主脚本 run_clm_pt_with_peft.py):

lr=2e-4 lora_rank=64 lora_alpha=128 lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj" modules_to_save="embed_tokens,lm_head" lora_dropout=0.05 block_size=512

即:对 7 个线性投影模块应用 LoRA(rank=64、alpha=128),同时对embed_tokens与lm_head做全量微调以适配新词表;单卡 batch size 1、梯度累积 8 步、fp16、cosine 学习率、warmup 5%。脚本由 transformers 官方run_clm.py改造而来,使用torchrun启动并接入 DeepSpeed。

5.2 指令精调(Chinese Alpaca-2)

在 Chinese-LLaMA-2 基础上用约 500 万条标注指令数据精调(比一期略增)。入口脚本为 run_sft.sh,与预训练的主要差异:学习率降至lr=1e-4、增加验证集与--do_eval、max_seq_length=512、warmup 3%。

指令数据的组织方式可参考 build_dataset.py:每条样本由instruction / input / output三字段组成,处理时把instruction(含 input)套入[INST]...[/INST]模板作为源,output + eos_token作为目标;训练标签中源部分全部置为IGNORE_INDEX = -100不参与损失计算,即只监督模型生成"答案"部分——这与推理时的模板完全一致,保证了"训练-推理一致性"。

5.3 RLHF 精调(Chinese Alpaca-2-RLHF)

在 Chinese-Alpaca-2 基础上利用偏好数据与PPO 算法进行人类偏好对齐精调:偏好数据基于多个开源项目的人类偏好数据与本项目指令精调数据采样而来,奖励模型阶段约 69.5K 条、强化学习阶段约 25.6K 条样本;训练代码基于 DeepSpeed-Chat 开发,分为奖励建模与强化学习两个阶段,输出即 Chinese-Alpaca-2-RLHF 系列。

六、常见问题(FAQ)

官方文档建议提 Issue 前先核对 FAQ(完整问答见项目 Wiki),问题清单如下:

  1. 本项目和一期项目的区别?
  2. 模型能否商用?
  3. 接受第三方 Pull Request 吗?
  4. 为什么不对模型做全量预训练而是用 LoRA?
  5. 二代模型支不支持某些支持一代 LLaMA 的工具?
  6. Chinese-Alpaca-2 是 Llama-2-Chat 训练得到的吗?
  7. 为什么 24G 显存微调 Chinese-Alpaca-2-7B 会 OOM?
  8. 可以使用 16K 长上下文版模型替代标准版模型吗?
  9. 如何解读第三方公开榜单的结果?
  10. 会出 34B 或者 70B 级别的模型吗?
  11. 为什么长上下文版模型是 16K,不是 32K 或者 100K?
  12. 为什么 Alpaca 模型会回复说自己是 ChatGPT?
  13. 为什么 pt_lora_model 或者 sft_lora_model 下的 adapter_model.bin 只有几百 k?(因为只保存了 LoRA 适配器权重,并非完整模型)

其中第 13 个问题正是 merge_llama2_with_chinese_lora_low_mem.py 存在的原因;第 4 问则解释了 run_pt.sh、run_sft.sh 采用 LoRA 训练的原因。

七、引用、致谢与使用说明

若在论文或产品中使用本项目资源,官方建议引用技术报告《Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca》:

@article{Chinese-LLaMA-Alpaca, title={Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca}, author={Cui, Yiming and Yang, Ziqing and Yao, Xin}, journal={arXiv preprint arXiv:2304.08177}, year={2023} }

本项目主要基于 Meta Llama-2、llama.cpp、FlashAttention-2 等开源项目二次开发,使用时应遵守 Llama-2 开源许可协议及第三方代码的相应协议。需要特别留意的是:模型生成内容可能因计算方法、随机因素、量化精度损失等产生误差,官方不对输出准确性作任何保证;用于商业用途时开发者应遵守当地法律法规并确保内容合规。官方同时声明了局限性:模型可能产生不可预测的有害内容、因算力与数据限制训练并不充分、中文理解能力有待提升。

实践建议汇总:聊天交互选 Alpaca-2(模板用 Llama-2-Chat 风格[INST]...[/INST],勿用一代模板);长文本任务选 16K/64K 长上下文版(注意 vLLM 不支持);带宽有限选 LoRA 版并按 merge_llama2_with_chinese_lora_low_mem.py 合并;个人电脑本地部署优先 llama.cpp + Q4_K/Q5_K GGUF;追求推理速度可将 1.3B 草稿模型与 7B/13B 目标模型搭配启用投机采样;涉及价值观敏感场景优先选用 RLHF 版。

  • 人工智能
  • 大模型
  • 预训练
  • 微调
  • RLHF
  • LoRA
  • 本地部署
  • 模型量化

【免费下载链接】Chinese-LLaMA-Alpaca-2

中文LLaMA-2 & Alpaca-2大模型二期项目 + 64K超长上下文模型 (Chinese LLaMA-2 & Alpaca-2 LLMs with 64K long context models)

项目地址:https://gitcode.com/gh_mirrors/ch/Chinese-LLaMA-Alpaca-2
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进