🤗 Hugging Face • 👾 ModelScope • 🤖 wisemodel • 📜 LICENSE • 🎯 vivo Developers • 🗨 WeChat
BlueLM 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,本次发布包含 7B 基础 (base) 模型和 7B 对话 (chat) 模型,同时我们开源了支持 32K 的长文本基础 (base) 模型和对话 (chat) 模型。
本次发布基座模型下载链接见:
基座模型 | 对齐模型 | 量化模型 | |
---|---|---|---|
7B-2K | 🤗 BlueLM-7B-Base | 🤗 BlueLM-7B-Chat | 🤗 BlueLM-7B-Chat-4bits |
7B-32K | 🤗 BlueLM-7B-Base-32K | 🤗 BlueLM-7B-Chat-32K | 🤗 BlueLM-7B-Chat-32K-AWQ / BlueLM-7B-Chat-32K-GPTQ |
欢迎阅读我们的技术报告BlueLM: An Open Multilingual 7B Language Model!
我们后续将开源 13B 模型和支持多模态的 7B-vl 模型,还请期待!
为了保证模型评测的一致性,我们采用 OpenCompass 进行相关榜单的评测。我们分别在 C-Eval、MMLU、CMMLU、GaoKao、AGIEval、BBH、GSM8K、MATH 和 HumanEval 榜单对 BlueLM 的通用能力、数学能力和代码能力进行了测试。
Model | C-Eval | MMLU | CMMLU | Gaokao | AGIEval | BBH | GSM8K | MATH | HumanEval |
---|---|---|---|---|---|---|---|---|---|
5-shot | 5-shot | 5-shot | 0-shot | 0-shot | 3-shot | 4-shot | 5-shot | 0-shot | |
GPT-4 | 69.9 | 86.4 | 71.2 | 72.3 | 55.1 | 86.7 | 91.4 | 45.8 | 74.4 |
ChatGPT | 52.5 | 70.0 | 53.9 | 51.1 | 39.9 | 70.1 | 78.2 | 28 | 73.2 |
LLaMA2-7B | 32.5 | 45.3 | 31.8 | 18.9 | 21.8 | 38.2 | 16.7 | 3.3 | 12.8 |
ChatGLM2-6B(Base) | 51.7 | 47.9 | 50.0 | - | - | 33.7 | 32.4 | 6.5 | - |
Baichuan2-7B | 56.3 | 54.7 | 57.0 | 34.8 | 34.6 | 41.8 | 24.6 | 5.4 | 17.7 |
BlueLM-7B-Base | 67.5 | 55.2 | 66.6 | 58.9 | 43.4 | 41.7 | 27.2 | 6.2 | 18.3 |
BlueLM-7B-Chat | 72.7 | 50.7 | 74.2 | 48.7 | 43.4 | 65.6 | 51.9 | 13.4 | 21.3 |
我们还在 LongBench 和 T-Eval 评测集上对我们的 BlueLM-7B-Chat-32K 模型进行了测试,具体结果如下表所示:
Model | 平均 | Summary | Single-Doc QA | Multi-Doc QA | Code | Few-shot | Synthetic |
---|---|---|---|---|---|---|---|
BlueLM-7B-Chat-32K | 41.2 | 18.8 | 35.6 | 36.2 | 54.2 | 56.9 | 45.5 |
Model | instruct | plan | reason | retrieve | understand | review | overall |
---|---|---|---|---|---|---|---|
Qwen-7B | 82.3 | 62.2 | 50.0 | 59.1 | 67.0 | 57.1 | 63.0 |
Qwen-14B | 96.5 | 77.1 | 57.0 | 73.0 | 76.5 | 43.7 | 70.6 |
BlueLM-7B-Chat-32K | 79.6 | 63.4 | 61.5 | 73.9 | 74.2 | 73.9 | 71.3 |
首先需要下载本仓库:
git clone https://github.com/vivo-ai-lab/BlueLM
cd BlueLM
然后使用 pip 安装依赖:
pip install -r requirements.txt
使用 BlueLM-7B-Base-32K 或 BlueLM-7B-Chat-32K,请额外安装 flash_attn:
pip install flash_attn==2.3.3
如果安装失败,建议安装预编译版本的 flash_attn。
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("vivo-ai/BlueLM-7B-Base", trust_remote_code=True, use_fast=False)
>>> model = AutoModelForCausalLM.from_pretrained("vivo-ai/BlueLM-7B-Base", device_map="cuda:0", trust_remote_code=True)
>>> model = model.eval()
>>> inputs = tokenizer("儒林外史->吴敬梓\n隋唐演义->褚人获\n红楼梦->", return_tensors="pt")
>>> inputs = inputs.to("cuda:0")
>>> pred = model.generate(**inputs, max_new_tokens=64, repetition_penalty=1.1)
>>> print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
儒林外史->吴敬梓
隋唐演义->褚人获
红楼梦->曹雪芹
三国演义->罗贯中
水浒传->施耐庵
西游记->吴承恩
聊斋志异->蒲松龄
封神演义->许仲琳
东周列国志->冯梦龙
三侠五义->石玉昆
七剑十三侠->唐芸洲
python cli_demo.py
本命令行 Demo 仅支持 Chat 场景。
streamlit run web_demo.py --server.port 8080
本网页 Demo 仅支持 Chat 场景。
运行 api_server.py 部署 OpenAI 格式的代码,支持基于 ChatGPT 应用后端。
cd openai_api_demo
python api_server.py
python 测试代码,包括支持流式响应和 function calling 的请求。
cd openai_api_demo
python openai_api_request.py
可在命令行运行工具使用 Demo cli_demo_tool.py, demo 中已提供可作为测试的工具 sample。
python cli_demo_tool.py
根据命令行提示分别输入问题与外部工具的执行结果,完成一次工具调用需进行两轮对话。
示例:"<>"内为待用户输入内容。
用户: <杭州今天的湿度是多少?>
BlueLM:
{\"answer\": null, \"function_calls\": [{\"name\": \"current-weather\", \"parameters\": {\"city\": \"杭州\"}}]}
工具结果: <{\"city\": \"杭州\", \"weather\": \"当前天气 晴,气温20摄氏度,风力2级,湿度40%\"}>
BlueLM:
{"answer": "杭州湿度40%。", "function_calls": null}
我们提供了 BlueLM-7B-Chat 的 4bits 版本 BlueLM-7B-Chat-4bits。如果你的 GPU 显存有限,可以尝试加载 4-bits 模型,只需要 5GB 显存。且经过测试,BlueLM 在 4-bits 量化下仍能流畅地生成文本。
安装依赖:
cd BlueLM/quant_cuda
python setup_cuda.py install
加载模型推理示例:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> tokenizer = AutoTokenizer.from_pretrained("vivo-ai/BlueLM-7B-Chat-4bits", trust_remote_code=True, use_fast=False)
>>> model = AutoModelForCausalLM.from_pretrained("vivo-ai/BlueLM-7B-Chat-4bits", device_map="cuda:0", trust_remote_code=True)
>>> model = model.eval()
>>> inputs = tokenizer("[|Human|]:三国演义的作者是谁?[|AI|]:", return_tensors="pt")
>>> inputs = inputs.to("cuda:0")
>>> outputs = model.generate(**inputs, max_new_tokens=128)
>>> print(tokenizer.decode(outputs.cpu()[0], skip_special_tokens=True))
三国演义的作者是谁? 《三国演义》是由元末明初小说家罗贯中所著,是中国古典四大名著之一,也是中国古代历史小说发展的巅峰之作。
我们基于 vllm 推理框架,添加了 BlueLM 模型推理代码,代码在 example/vllm
目录中。
环境准备及编译:
运行环境需要英伟达驱动版本为 525.125.06,同时 cuda 版本为 12.1。
python -m venv vllm
source vllm/bin/activate
cd example/vllm
pip install -e .
python vllm_demo.py
pip install deepspeed==0.10.3
为了简单展示模型的微调流程,我们在 BELLE 项目 50w 中文指令 中随机抽取了 1w 条中文指令数据,处理后的数据路径为 data/bella_train_demo.json
和 data/bella_dev_demo.json
。
获得处理完的数据后,可通过训练脚本 script/bluelm-7b-sft.sh
配置相应的路径和超参数,进行全量微调训练。
相关参数的说明如下所示:
Parameter | Description |
---|---|
num_gpus | 对应 GPU 的卡数 |
train_file | 训练数据的路径 |
prompt_column | 数据集指令问题的列名 |
response_column | 数据集指令回复的列名 |
model_name_or_path | 预加载模型的存储路径 |
output_dir | 微调模型的保存路径 |
tensorboard_dir | tensorboard的保存路径 |
seq_len | 训练序列的最大长度 |
batch_size_per_device | 训练迭代中每个 GPU 输入的样本数量 |
gradient_accumulation_steps | 梯度累积的步长,默认为 1,表示不进行梯度累积 |
gradient_checkpointing | 是否开启激活重算 |
max_steps | 模型训练的迭代数 |
save_steps | 模型训练的保存周期 |
learning_rate | 初始学习率 |
finetune | 是否开启模型微调 |
使用全量微调的启动命令如下:
cd train
sh script/bluelm-7b-sft.sh
本项目支持 LoRA 的微调训练。关于 LoRA 的详细介绍可以参考论文 LoRA: Low-Rank Adaptation of Large Language Models 以及 Github 仓库 LoRA。
主要参数说明如下:
Parameter | Description |
---|---|
lora_rank | lora 矩阵的秩。一般设置为 8、16、32、64 等。 |
lora_alpha | lora 中的缩放参数。一般设为 16、32 即可 |
lora_dropout | lora 权重的 dropout rate。 |
使用 LoRA 微调的启动命令如下:
cd train
sh script/bluelm-7b-sft-lora.sh
我们在此郑重声明,对于所有使用开源模型的有关方,强烈呼吁不要进行任何损害国家社会安全或违反相关法律的行为,也恳请使用者不把 BlueLM 模型用于未经适当安全审批和备案的产品应用中。请务必在合法、合规的前提下开展一切业务活动,我们期望所有使用者都能以此为准。
同时,本模型“按原样”提供,我们也已尽全力确保数据的合规性,但由于模型训练和数据的复杂性,仍可能存在一些无法预估的问题,我们也强烈建议使用者对模型应用风险做详尽评估,确保应用的合法合规,如使用 BlueLM 开源模型而导致的任何问题,我们将不承担任何责任。
社区使用代码依照 Apache-2.0 协议开源,且使用 BlueLM 模型权重需要遵循 vivo BlueLM模型许可协议。BlueLM 模型权重对学术研究完全开放,同时在填写问卷进行登记认证后可免费商业使用。
@misc{2023bluelm,
title={BlueLM: An Open Multilingual 7B Language Model},
author={BlueLM Team},
howpublished = {\url{https://github.com/vivo-ai-lab/BlueLM}},
year={2023}
}
如有任何疑问,可以通过邮件(developers-ai@vivo.com)联系我们,也可以加入 BlueLM 微信交流群探讨。