开启中文智能之旅:探秘超乎想象的 Llama2-Chinese 大模型世界
“开启中文智能之旅:探秘超乎想象的 Llama2-Chinese 大模型世界”
1.国内 Llama2 最新下载地址
本仓库中的代码示例主要是基于 Hugging Face 版本参数进行调用,我们提供了脚本将 Meta 官网发布的模型参数转换为 Hugging Face 支持的格式,可以直接通过 transformers 库进行加载:参数格式转化
Llama2-7B 官网版本:https://pan.xunlei.com/s/VN_kR2fwuJdG1F3CoF33rwpIA1?pwd=z9kf
Llama2-7B-Chat 官网版本:https://pan.xunlei.com/s/VN_kQa1_HBvV-X9QVI6jV2kOA1?pwd=xmra
Llama2-13B 官网版本:https://pan.xunlei.com/s/VN_izibaMDoptluWodzJw4cRA1?pwd=2qqb
Llama2-13B-Chat 官网版本:https://pan.xunlei.com/s/VN_iyyponyapjIDLXJCNfqy7A1?pwd=t3xw
Llama2-7B Hugging Face 版本:https://pan.xunlei.com/s/VN_t0dUikZqOwt-5DZWHuMvqA1?pwd=66ep
Llama2-7B-Chat Hugging Face 版本:https://pan.xunlei.com/s/VN_oaV4BpKFgKLto4KgOhBcaA1?pwd=ufir
Llama2-13B Hugging Face 版本:https://pan.xunlei.com/s/VN_yT_9G8xNOz0SDWQ7Mb_GZA1?pwd=yvgf
Llama2-13B-Chat Hugging Face 版本:https://pan.xunlei.com/s/VN_yA-9G34NGL9B79b3OQZZGA1?pwd=xqrg
Llama2-70B-Chat Hugging Face 版本:https://pan.xunlei.com/s/VNa_vCGzCy3h3N7oeFXs2W1hA1?pwd=uhxh#
CodeLlama-7b 官网版本:https://pan.baidu.com/s/1cIPzdNywWLvQI7_2QanOEQ?pwd=zfwi
CodeLlama-7b-Python 官网版本:https://pan.baidu.com/s/1liY8klGoDagYbpw-g-oFag?pwd=i952
CodeLlama-7b-Instruct 官网版本:https://pan.baidu.com/s/108o9_DT2E_vfSGtOnDCQVw?pwd=zkt9
CodeLlama-13b 官网版本:https://pan.baidu.com/s/1lLaeHv0XEBv0iiZzI1dpnw?pwd=qn99
CodeLlama-13b-Python 官网版本:https://pan.baidu.com/s/1OLVfvZS_oqL3oqMKwsI87w?pwd=a78k
CodeLlama-13b-Instruct 官网版本:https://pan.baidu.com/s/1HyxJl4w8wElgkZRh2ATrXQ?pwd=seg6
CodeLlama-34b 官网版本:https://pan.baidu.com/s/1vEw0pFgIkctPUN4_5_6pIQ?pwd=q8eu
2.Atom 大模型
原子大模型 Atom 由 Llama 中文社区和原子回声联合打造,在中文大模型评测榜单 C-Eval 中位居前十(8 月 21 日评测提交时间)。
Atom 系列模型包含 Atom-7B 和 Atom-13B,基于 Llama2 做了中文能力的持续优化。Atom-7B 和 Atom-7B-Chat 目前已完全开源,支持商用,可在Hugging Face仓库获取模型,详情见Atom-7B下载。Atom 大模型针对中文做了以下优化:
大规模的中文数据预训练
原子大模型 Atom 在 Llama2 的基础上,采用大规模的中文数据进行持续预训练,包含百科、书籍、博客、新闻、公告、小说、金融数据、法律数据、医疗数据、代码数据、专业论文数据、中文自然语言处理竞赛数据集等,详见📝 数据来源。
同时对庞大的数据进行了过滤、打分、去重,筛选出超过 1T token 的高质量中文数据,持续不断加入训练迭代中。
更高效的中文词表为了提高中文文本处理的效率,我们针对 Llama2 模型的词表进行了深度优化。首先,我们基于数百 G 的中文文本,在该模型词表的基础上扩展词库至 65,000 个单词。经过测试,我们的改进使得中文编码/解码速度提高了约 350%。此外,我们还扩大了中文字符集的覆盖范围,包括所有 emoji 符号😊。这使得生成带有表情符号的文章更加高效。
自适应上下文扩展 Atom 大模型默认支持 4K 上下文,利用位置插值 PI 和 Neural Tangent Kernel (NTK)方法,经过微调可以将上下文长度扩增到 32K。
2.1 中文数据
我们通过以下数据来优化 Llama2 的中文能力:
2.2 模型部署
Meta 在🤗Hugging Face 上提供了所有模型的下载链接:https://huggingface.co/meta-llama
Llama 中文社区的中文模型下载链接:https://huggingface.co/FlagAlpha
2.2.1 模型下载
Meta 官方 Llama2 模型
Llama2 预训练模型包含 7B、13B 和 70B 三个版本。Llama2-Chat 模型基于预训练模型进行了监督微调,具备更强的对话能力。
基于 Llama2 的中文微调模型
我们基于中文指令数据集对 Llama2-Chat 模型进行了微调,使得 Llama2 模型有着更强的中文对话能力。LoRA 参数以及与基础模型合并的参数均已上传至Hugging Face,目前包含 7B 和 13B 的模型。
基于 Llama2 的中文预训练模型 Atom
社区提供预训练版本 Atom-7B 和基于 Atom-7B 进行对话微调的模型参数供开放下载,模型参数会持续不断更新,关于模型的进展详见社区官网llama.family。
2.2.2 模型调用代码示例
2.2.3 FastAPI 接口搭建
为了方便通过 API 方式调用模型,我们提供了脚本用来快速搭建FastAPI接口,相关测试代码与 API 参数设置见API 调用。
2.2.4 Gradio 快速搭建问答平台
基于 gradio 搭建的问答界面,实现了流式的输出,将下面代码复制到控制台运行,以下代码以 Atom-7B 模型为例,<font color="#006600">不同模型只需修改一下代码里的模型名称就好了😊</font><br/>
2.2.5 Docker 部署问答接口
详情参见:Docker部署
第一步:准备 docker 镜像,通过 docker 容器启动chat_gradio.py
第二步:通过 docker-compose 启动 chat_gradio
2.3 模型预训练
虽然 Llama2 的预训练数据相对于第一代 LLaMA 扩大了一倍,但是中文预训练数据的比例依然非常少,仅占 0.13%,这也导致了原始 Llama2 的中文能力较弱。为了能够提升模型的中文能力,可以采用微调和预训练两种路径,其中:
微调需要的算力资源少,能够快速实现一个中文 Llama 的雏形。但缺点也显而易见,只能激发基座模型已有的中文能力,由于 Llama2 的中文训练数据本身较少,所以能够激发的能力也有限,治标不治本。
基于大规模中文语料进行预训练,成本高,不仅需要大规模高质量的中文数据,也需要大规模的算力资源。但是优点也显而易见,就是能从模型底层优化中文能力,真正达到治本的效果,从内核为大模型注入强大的中文能力。
我们为社区提供了 Llama 模型的预训练代码,以及中文测试语料,更多数据可以参考中文语料。具体代码和配置如下:
模型预训练脚本:train/pretrain/pretrain.sh
预训练实现代码:train/pretrain/pretrain_clm.py
DeepSpeed加速:
对于单卡训练,可以采用 ZeRO-2 的方式,参数配置见 train/pretrain/ds_config_zero2.json
对于多卡训练,可以采用 ZeRO-3 的方式,参数配置见 train/pretrain/ds_config_zero3.json
训练效果度量指标:train/pretrain/accuracy.py
2.4 模型微调
本仓库中同时提供了 LoRA 微调和全量参数微调代码,关于 LoRA 的详细介绍可以参考论文“LoRA: Low-Rank Adaptation of Large Language Models”以及微软 Github 仓库LoRA。
Step1: 环境准备
根据requirements.txt安装对应的环境依赖。
Step2: 数据准备
在 data 目录下提供了一份用于模型 sft 的数据样例:
训练数据:data/train_sft.csv
验证数据:data/dev_sft.csv
每个 csv 文件中包含一列“text”,每一行为一个训练样例,每个训练样例按照以下格式将问题和答案组织为模型输入,您可以按照以下格式自定义训练和验证数据集:
例如,
Step3: 微调脚本
LoRA 微调
LoRA 微调脚本见:train/sft/finetune_lora.sh,关于 LoRA 微调的具体实现代码见train/sft/finetune_clm_lora.py,单机多卡的微调可以通过修改脚本中的--include localhost:0
来实现。
全量参数微调
全量参数微调脚本见:train/sft/finetune.sh,关于全量参数微调的具体实现代码见train/sft/finetune_clm.py。
Step4: 加载微调模型
LoRA 微调
基于 LoRA 微调的模型参数见:基于Llama2的中文微调模型,LoRA 参数需要和基础模型参数结合使用。
通过PEFT加载预训练模型参数和微调模型参数,以下示例代码中,base_model_name_or_path 为预训练模型参数保存路径,finetune_model_path 为微调模型参数保存路径。
全量参数微调
对于全量参数微调的模型,调用方式同模型调用代码示例,只需要修改其中的模型名称或者保存路径即可。
2.5 模型量化
我们对中文微调的模型参数进行了量化,方便以更少的计算资源运行。目前已经在Hugging Face上传了 13B 中文微调模型FlagAlpha/Llama2-Chinese-13b-Chat的 4bit 压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4bit,具体调用方式如下:
2.6 推理加速
随着大模型参数规模的不断增长,在有限的算力资源下,提升模型的推理速度逐渐变为一个重要的研究方向。常用的推理加速框架包含 lmdeploy、FasterTransformer、vLLM 和 JittorLLMs 等。
FasterTransformer
FasterTransformer由 NVIDIA 开发,采用 C++/CUDA 编写,支持分布式推理,transformer 编码器和解码器均可进行加速。通过 FasterTransformer 和Triton加速 LLama2 模型推理,目前支持 FP16 或者 Int8 推理,Int4 目前还不支持。
详细的推理文档见:inference-speed/GPU/FasterTransformer_example
vLLM
vLLM由加州大学伯克利分校开发,核心技术是 PageAttention,吞吐量比 HuggingFace Transformers 高出 24 倍。相较与 FasterTrainsformer,vLLM 更加的简单易用,不需要额外进行模型的转换,支持 fp16 推理。
详细的推理文档见:inference-speed/GPU/vllm_example
JittorLLMs
JittorLLMs由非十科技领衔,与清华大学可视媒体研究中心合作研发,通过动态 swap 机制大幅降低硬件配置要求(减少 80%),并且 Jittor 框架通过零拷贝技术,大模型加载相比 Pytorch 开销降低 40%,同时,通过元算子自动编译优化,计算性能提升 20%以上。
详细的推理文档见:inference-speed/GPU/JittorLLMs
lmdeploy
lmdeploy 由上海人工智能实验室开发,推理使用 C++/CUDA,对外提供 python/gRPC/http 接口和 WebUI 界面,支持 tensor parallel 分布式推理、支持 fp16/weight int4/kv cache int8 量化。
详细的推理文档见:inference-speed/GPU/lmdeploy_example
2.7 模型评测
为了能够更加清晰地了解 Llama2 模型的中文问答能力,我们筛选了一些具有代表性的中文问题,对 Llama2 模型进行提问。我们测试的模型包含 Meta 公开的 Llama2-7B-Chat 和 Llama2-13B-Chat 两个版本,没有做任何微调和训练。测试问题筛选自AtomBulb,共 95 个测试问题,包含:通用知识、语言理解、创作能力、逻辑推理、代码编程、工作技能、使用工具、人格特征八个大的类别。
测试中使用的 Prompt 如下,例如对于问题“列出 5 种可以改善睡眠质量的方法”:
Llama2-7B-Chat 的测试结果见meta_eval_7B.md,Llama2-13B-Chat 的测试结果见meta_eval_13B.md。
通过测试我们发现,Meta 原始的 Llama2 Chat 模型对于中文问答的对齐效果一般,大部分情况下都不能给出中文回答,或者是中英文混杂的形式。因此,基于中文数据对 Llama2 模型进行训练和微调十分必要,我们的中文版 Llama2 模型也已经在训练中,近期将对社区开放。
2.8 外延能力
除了持续增强大模型内在的知识储备、通用理解、逻辑推理和想象能力等,未来,我们也会不断丰富大模型的外延能力,例如知识库检索、计算工具、WolframAlpha、操作软件等。我们首先集成了 LangChain 框架,可以更方便地基于 Llama2 开发文档检索、问答机器人和智能体应用等,关于 LangChain 的更多介绍参见LangChain。
LangChain
针对 LangChain 框架封装的 Llama2 LLM 类见examples/llama2_for_langchain.py,简单的调用代码示例如下:
2.9 代码模型
Meta 官方在 2023 年 8 月 24 日发布了 Code Llama,基于代码数据对 Llama2 进行了微调,提供三个不同功能的版本:基础模型(Code Llama)、Python 专用模型(Code Llama - Python)和指令跟随模型(Code Llama - Instruct),包含 7B、13B、34B 三种不同参数规模。不同模型能力区别如下表所示:
我们提供了 Code Llama 的国内下载链接以及在线体验地址llama.family,关于 Code Llama 的详细信息可以参考官方 Github 仓库codellama。
3.学习资料
Meta 官方对于Llama2的介绍自从 Meta 公司发布第一代 LLaMA 模型以来,羊驼模型家族繁荣发展。近期 Meta 发布了 Llama2 版本,开源可商用,在模型和效果上有了重大更新。Llama2 总共公布了 7B、13B 和 70B 三种参数大小的模型。相比于 LLaMA,Llama2 的训练数据达到了 2 万亿 token,上下文长度也由之前的 2048 升级到 4096,可以理解和生成更长的文本。Llama2 Chat 模型基于 100 万人类标记数据微调得到,在英文对话上达到了接近 ChatGPT 的效果。
Llama 相关论文
Llama2 的评测结果
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/509aaf485ccfef1f7db405595】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论