族谱网站建设,深圳市华汇设计有限公司,石家庄最新事件,网站的国际化 怎么做“开启中文智能之旅#xff1a;探秘超乎想象的 Llama2-Chinese 大模型世界” 1.国内Llama2最新下载地址
本仓库中的代码示例主要是基于Hugging Face版本参数进行调用#xff0c;我们提供了脚本将Meta官网发布的模型参数转换为Hugging Face支持的格式#xff0c;可以直接通过…“开启中文智能之旅探秘超乎想象的 Llama2-Chinese 大模型世界” 1.国内Llama2最新下载地址
本仓库中的代码示例主要是基于Hugging Face版本参数进行调用我们提供了脚本将Meta官网发布的模型参数转换为Hugging Face支持的格式可以直接通过transformers库进行加载参数格式转化 Llama2-7B官网版本https://pan.xunlei.com/s/VN_kR2fwuJdG1F3CoF33rwpIA1?pwdz9kf Llama2-7B-Chat官网版本https://pan.xunlei.com/s/VN_kQa1_HBvV-X9QVI6jV2kOA1?pwdxmra Llama2-13B官网版本https://pan.xunlei.com/s/VN_izibaMDoptluWodzJw4cRA1?pwd2qqb Llama2-13B-Chat官网版本https://pan.xunlei.com/s/VN_iyyponyapjIDLXJCNfqy7A1?pwdt3xw Llama2-7B Hugging Face版本https://pan.xunlei.com/s/VN_t0dUikZqOwt-5DZWHuMvqA1?pwd66ep Llama2-7B-Chat Hugging Face版本https://pan.xunlei.com/s/VN_oaV4BpKFgKLto4KgOhBcaA1?pwdufir Llama2-13B Hugging Face版本https://pan.xunlei.com/s/VN_yT_9G8xNOz0SDWQ7Mb_GZA1?pwdyvgf Llama2-13B-Chat Hugging Face版本https://pan.xunlei.com/s/VN_yA-9G34NGL9B79b3OQZZGA1?pwdxqrg Llama2-70B-Chat Hugging Face版本https://pan.xunlei.com/s/VNa_vCGzCy3h3N7oeFXs2W1hA1?pwduhxh# CodeLlama-7b官网版本https://pan.baidu.com/s/1cIPzdNywWLvQI7_2QanOEQ?pwdzfwi CodeLlama-7b-Python官网版本https://pan.baidu.com/s/1liY8klGoDagYbpw-g-oFag?pwdi952 CodeLlama-7b-Instruct官网版本https://pan.baidu.com/s/108o9_DT2E_vfSGtOnDCQVw?pwdzkt9 CodeLlama-13b官网版本https://pan.baidu.com/s/1lLaeHv0XEBv0iiZzI1dpnw?pwdqn99 CodeLlama-13b-Python官网版本https://pan.baidu.com/s/1OLVfvZS_oqL3oqMKwsI87w?pwda78k CodeLlama-13b-Instruct官网版本https://pan.baidu.com/s/1HyxJl4w8wElgkZRh2ATrXQ?pwdseg6 CodeLlama-34b官网版本https://pan.baidu.com/s/1vEw0pFgIkctPUN4_5_6pIQ?pwdq8eu
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的中文能力:
类型描述网络数据互联网上公开的网络数据挑选出去重后的高质量中文数据涉及到百科、书籍、博客、新闻、公告、小说等高质量长文本数据。Wikipedia中文Wikipedia的数据悟道中文悟道开源的200G数据ClueClue开放的中文预训练数据进行清洗后的高质量中文长文本数据竞赛数据集近年来中文自然语言处理多任务竞赛数据集约150个MNBVCMNBVC 中清洗出来的部分数据集
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-7Bmeta-llama/Llama-2-7b-hf模型下载预训练Llama2-13Bmeta-llama/Llama-2-13b-hf模型下载预训练Llama2-70Bmeta-llama/Llama-2-70b-hf模型下载ChatLlama2-7B-Chatmeta-llama/Llama-2-7b-chat-hf模型下载ChatLlama2-13B-Chatmeta-llama/Llama-2-13b-chat-hf模型下载ChatLlama2-70B-Chatmeta-llama/Llama-2-70b-chat-hf模型下载
基于Llama2的中文微调模型
我们基于中文指令数据集对Llama2-Chat模型进行了微调使得Llama2模型有着更强的中文对话能力。LoRA参数以及与基础模型合并的参数均已上传至Hugging Face目前包含7B和13B的模型。
类别模型名称模型加载名称基础模型版本下载地址合并参数Llama2-Chinese-7b-ChatFlagAlpha/Llama2-Chinese-7b-Chatmeta-llama/Llama-2-7b-chat-hf模型下载合并参数Llama2-Chinese-13b-ChatFlagAlpha/Llama2-Chinese-13b-Chatmeta-llama/Llama-2-13b-chat-hf模型下载LoRA参数Llama2-Chinese-7b-Chat-LoRAFlagAlpha/Llama2-Chinese-7b-Chat-LoRAmeta-llama/Llama-2-7b-chat-hf模型下载LoRA参数Llama2-Chinese-13b-Chat-LoRAFlagAlpha/Llama2-Chinese-13b-Chat-LoRAmeta-llama/Llama-2-13b-chat-hf模型下载
基于Llama2的中文预训练模型Atom
社区提供预训练版本Atom-7B和基于Atom-7B进行对话微调的模型参数供开放下载模型参数会持续不断更新关于模型的进展详见社区官网llama.family。
类别模型名称模型加载名称下载地址预训练Atom-7BFlagAlpha/Atom-7B模型下载ChatAtom-7B-ChatFlagAlpha/Atom-7B-Chat模型下载
2.2.2 模型调用代码示例
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model AutoModelForCausalLM.from_pretrained(FlagAlpha/Atom-7B,device_mapauto,torch_dtypetorch.float16,load_in_8bitTrue)
model model.eval()
tokenizer AutoTokenizer.from_pretrained(FlagAlpha/Atom-7B,use_fastFalse)
tokenizer.pad_token tokenizer.eos_token
input_ids tokenizer([sHuman: 介绍一下中国\n/ssAssistant: ], return_tensorspt,add_special_tokensFalse).input_ids.to(cuda)
generate_input {input_ids:input_ids,max_new_tokens:512,do_sample:True,top_k:50,top_p:0.95,temperature:0.3,repetition_penalty:1.3,eos_token_id:tokenizer.eos_token_id,bos_token_id:tokenizer.bos_token_id,pad_token_id:tokenizer.pad_token_id
}
generate_ids model.generate(**generate_input)
text tokenizer.decode(generate_ids[0])
print(text)2.2.3 FastAPI接口搭建
为了方便通过API方式调用模型我们提供了脚本用来快速搭建FastAPI接口相关测试代码与API参数设置见API 调用。
2.2.4 Gradio快速搭建问答平台
基于gradio搭建的问答界面实现了流式的输出将下面代码复制到控制台运行以下代码以Atom-7B模型为例不同模型只需修改一下代码里的模型名称就好了
python examples/chat_gradio.py --model_name_or_path FlagAlpha/Atom-7B2.2.5 Docker部署问答接口
详情参见Docker部署
第一步准备docker镜像通过docker容器启动chat_gradio.py
git clone https://github.com/FlagAlpha/Llama2-Chinese.gitcd Llama2-Chinesedocker build -f docker/Dockerfile -t flagalpha/llama2-chinese-7b:gradio .第二步通过docker-compose启动chat_gradio
cd Llama2-Chinese/docker
doker-compose up -d --build2.3模型预训练
虽然Llama2的预训练数据相对于第一代LLaMA扩大了一倍但是中文预训练数据的比例依然非常少仅占0.13%这也导致了原始Llama2的中文能力较弱。为了能够提升模型的中文能力可以采用微调和预训练两种路径其中 微调需要的算力资源少能够快速实现一个中文Llama的雏形。但缺点也显而易见只能激发基座模型已有的中文能力由于Llama2的中文训练数据本身较少所以能够激发的能力也有限治标不治本。 基于大规模中文语料进行预训练成本高不仅需要大规模高质量的中文数据也需要大规模的算力资源。但是优点也显而易见就是能从模型底层优化中文能力真正达到治本的效果从内核为大模型注入强大的中文能力。
我们为社区提供了Llama模型的预训练代码以及中文测试语料更多数据可以参考中文语料。具体代码和配置如下
模型预训练脚本train/pretrain/pretrain.sh预训练实现代码train/pretrain/pretrain_clm.pyDeepSpeed加速 对于单卡训练可以采用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”每一行为一个训练样例每个训练样例按照以下格式将问题和答案组织为模型输入您可以按照以下格式自定义训练和验证数据集
sHuman: 问题\n/ssAssistant: 答案例如
sHuman: 用一句话描述地球为什么是独一无二的。/ssAssistant: 因为地球是目前为止唯一已知存在生命的行星。/sStep3: 微调脚本
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为微调模型参数保存路径。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel,PeftConfig
#例如: finetune_model_pathFlagAlpha/Llama2-Chinese-7b-Chat-LoRA
finetune_model_path
config PeftConfig.from_pretrained(finetune_model_path)
#例如: base_model_name_or_pathmeta-llama/Llama-2-7b-chat
tokenizer AutoTokenizer.from_pretrained(config.base_model_name_or_path,use_fastFalse)
tokenizer.pad_token tokenizer.eos_token
model AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path,device_mapauto,torch_dtypetorch.float16,load_in_8bitTrue)
model PeftModel.from_pretrained(model, finetune_model_path, device_map{: 0})
model model.eval()
input_ids tokenizer([sHuman: 介绍一下北京\n/ssAssistant: ], return_tensorspt,add_special_tokensFalse).input_ids.to(cuda)
generate_input {input_ids:input_ids,max_new_tokens:512,do_sample:True,top_k:50,top_p:0.95,temperature:0.3,repetition_penalty:1.3,eos_token_id:tokenizer.eos_token_id,bos_token_id:tokenizer.bos_token_id,pad_token_id:tokenizer.pad_token_id
}
generate_ids model.generate(**generate_input)
text tokenizer.decode(generate_ids[0])
print(text)全量参数微调
对于全量参数微调的模型调用方式同模型调用代码示例只需要修改其中的模型名称或者保存路径即可。 2.5模型量化
我们对中文微调的模型参数进行了量化方便以更少的计算资源运行。目前已经在Hugging Face上传了13B中文微调模型FlagAlpha/Llama2-Chinese-13b-Chat的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4bit具体调用方式如下
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
model AutoGPTQForCausalLM.from_quantized(FlagAlpha/Llama2-Chinese-13b-Chat-4bit, devicecuda:0)
tokenizer AutoTokenizer.from_pretrained(FlagAlpha/Llama2-Chinese-13b-Chat-4bit,use_fastFalse)
input_ids tokenizer([sHuman: 怎么登上火星\n/ssAssistant: ], return_tensorspt,add_special_tokensFalse).input_ids.to(cuda)
generate_input {input_ids:input_ids,max_new_tokens:512,do_sample:True,top_k:50,top_p:0.95,temperature:0.3,repetition_penalty:1.3,eos_token_id:tokenizer.eos_token_id,bos_token_id:tokenizer.bos_token_id,pad_token_id:tokenizer.pad_token_id
}
generate_ids model.generate(**generate_input)
text tokenizer.decode(generate_ids[0])
print(text)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倍。相较与FasterTrainsformervLLM更加的简单易用不需要额外进行模型的转换支持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种可以改善睡眠质量的方法”
[INST]
SYS
You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature. The answer always been translate into Chinese language.If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you dont know the answer to a question, please dont share false information.The answer always been translate into Chinese language.
/SYS列出5种可以改善睡眠质量的方法
[/INST]Llama2-7B-Chat的测试结果见meta_eval_7B.mdLlama2-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简单的调用代码示例如下
from llama2_for_langchain import Llama2#这里以调用4bit量化压缩的Llama2-Chinese参数FlagAlpha/Llama2-Chinese-13b-Chat-4bit为例
llm Llama2(model_name_or_pathFlagAlpha/Llama2-Chinese-13b-Chat-4bit, bit4True)while True:human_input input(Human: )response llm(human_input)print(fLlama2: {response})2.9 代码模型
Meta官方在2023年8月24日发布了Code Llama基于代码数据对Llama2进行了微调提供三个不同功能的版本基础模型Code Llama、Python专用模型Code Llama - Python和指令跟随模型Code Llama - Instruct包含7B、13B、34B三种不同参数规模。不同模型能力区别如下表所示
模型类别模型名称代码续写代码填充指令编程Code LlamaCodeLlama-7b✅✅❌CodeLlama-13b✅✅❌CodeLlama-34b✅❌❌Code Llama - PythonCodeLlama-7b-Python✅❌❌CodeLlama-13b-Python✅❌❌CodeLlama-34b-Python✅❌❌Code Llama - InstructCodeLlama-7b-Instruct❌✅✅CodeLlama-13b-Instruct❌✅✅CodeLlama-34b-Instruct❌❌✅
我们提供了Code Llama的国内下载链接以及在线体验地址llama.family关于Code Llama的详细信息可以参考官方Github仓库codellama。
3.学习资料 Meta官方对于Llama2的介绍 自从Meta公司发布第一代LLaMA模型以来羊驼模型家族繁荣发展。近期Meta发布了Llama2版本开源可商用在模型和效果上有了重大更新。Llama2总共公布了7B、13B和70B三种参数大小的模型。相比于LLaMALlama2的训练数据达到了2万亿token上下文长度也由之前的2048升级到4096可以理解和生成更长的文本。Llama2 Chat模型基于100万人类标记数据微调得到在英文对话上达到了接近ChatGPT的效果。 Llama相关论文 LLaMA: Open and Efficient Foundation Language Models Llama 2: Open Foundation and Fine-Tuned Chat Models Code Llama: Open Foundation Models for Code Llama2的评测结果 更多优质内容请关注公号汀丶人工智能会提供一些相关的资源和优质文章免费获取阅读。