Home

Awesome

<div align="center"> <h1> BlueLM </h1> </div> <p align="center"> 🤗 <a href="https://huggingface.co/vivo-ai" target="_blank">Hugging Face</a> • 👾 <a href="https://www.modelscope.cn/organization/vivo-ai" target="_blank">ModelScope</a> • 🤖 <a href="https://www.wisemodel.cn/organization/vivo-ai" target="_blank">wisemodel</a> • 📜 <a href="MODEL_LICENSE.pdf" target="_blank">LICENSE</a> • 🎯 <a href="https://developers.vivo.com/product/ai/bluelm" target="_blank">vivo Developers</a> • 🗨 <a href="resources/wechat.png" target="_blank">WeChat</a> </p> <div align="center"> <h4 align="center"> <p> <b>中文</b> | <a href="README_EN.md">English</a> <p> </h4> </div>

目录

新闻

模型介绍

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 的通用能力、数学能力和代码能力进行了测试。

测评榜单

7B 模型结果

ModelC-EvalMMLUCMMLUGaokaoAGIEvalBBHGSM8KMATHHumanEval
5-shot5-shot5-shot0-shot0-shot3-shot4-shot5-shot0-shot
GPT-469.986.471.272.355.186.791.445.874.4
ChatGPT52.570.053.951.139.970.178.22873.2
LLaMA2-7B32.545.331.818.921.838.216.73.312.8
ChatGLM2-6B(Base)51.747.950.0--33.732.46.5-
Baichuan2-7B56.354.757.034.834.641.824.65.417.7
BlueLM-7B-Base67.555.266.658.943.441.727.26.218.3
BlueLM-7B-Chat72.750.774.248.743.465.651.913.421.3

7B-32K 模型结果

我们还在 LongBench 和 T-Eval 评测集上对我们的 BlueLM-7B-Chat-32K 模型进行了测试,具体结果如下表所示:

LongBench

Model平均SummarySingle-Doc QAMulti-Doc QACodeFew-shotSynthetic
BlueLM-7B-Chat-32K41.218.835.636.254.256.945.5

T-Eval-ZH

Modelinstructplanreasonretrieveunderstandreviewoverall
Qwen-7B82.362.250.059.167.057.163.0
Qwen-14B96.577.157.073.076.543.770.6
BlueLM-7B-Chat-32K79.663.461.573.974.273.971.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。

代码调用

Base 模型推理示例

>>> 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))
儒林外史->吴敬梓
隋唐演义->褚人获
红楼梦->曹雪芹
三国演义->罗贯中
水浒传->施耐庵
西游记->吴承恩
聊斋志异->蒲松龄
封神演义->许仲琳
东周列国志->冯梦龙
三侠五义->石玉昆
七剑十三侠->唐芸洲

命令行 Demo

cli-demo

python cli_demo.py

本命令行 Demo 仅支持 Chat 场景。

网页 Demo

web-demo

streamlit run web_demo.py --server.port 8080

本网页 Demo 仅支持 Chat 场景。

OpenAI API Demo

运行 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

Tool Demo

可在命令行运行工具使用 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 示例输出

<details><summary><b>代码</b></summary>
User:某在线教育平台的课程数据存储在一个名为courses的列表中,每门课程用字典表示,包含课程名称(name)、教师姓名(teacher)和学生人数(students)三个字段。请编写一个Python函数,根据学生人数,计算课程的平均学生人数,并返回。

BlueLM-7B:下面是实现代码:

```python
def average_students(courses):
    total_students = 0
    count = 0
    for course in courses:
        total_students += course['students']
        count += 1
    if count == 0:
        return 0
    else:
        return total_students / count
```

这个函数接受一个课程列表作为参数,然后遍历列表中的每个课程,累加学生人数的总和,同时记录课程的数量。最后,如果列表为空,则返回0;否则,返回学生人数的平均值。
</details> <details><summary><b>数学</b></summary>
User:朵朵有100元,她要买两本绘画书,绘画书每本40元,朵朵买完绘画书还剩多少元?

BlueLM-7B:可以先计算两本绘画书需要支付的总金额,然后计算购买后还剩下的金额。

已知朵朵有的钱数为:100元;

已知每本绘画书的价格为:40元;

因此,两本绘画书需要支付的总金额为:$40 \times 2 = 80$元;

购买两本绘画书后,还剩下的金额为:$100 - 80 = 20$元;

所以,朵朵买完绘画书还剩下20元。
</details> <details><summary><b>角色扮演</b></summary>
User:我是一名营销经理,最近我们推出了一款新产品,但是销售情况并不理想。这款产品是一款健康食品,主打低脂低糖,适合健身人群和需要控制饮食的人群。我们已经尝试过线上营销、线下推广、与知名健身房合作等方式,但是效果都不明显。你能帮我分析一下可能的原因以及提供一些销售策略吗?

BlueLM-7B:分析:

1. 竞争激烈:市场上已经存在许多类似的产品,消费者有更多的选择,导致新产品的市场占有率为零或很低。

2. 价格过高:该产品的价格比同类其他产品更高,可能会使消费者更倾向于购买其他品牌或更便宜的选项。

3. 缺乏宣传:没有足够的宣传使得消费者对该产品的了解程度不够,从而无法吸引更多的消费者。

4. 销售渠道不当:虽然已经尝试了多种销售方式,但可能没有选择到最适合的渠道,导致销售情况不佳。

策略:

1. 降低价格:考虑降低价格以吸引更多的消费者,同时保持产品质量和品质。

2. 加强宣传:增加宣传力度,包括在社交媒体上发布广告、增加线上营销等方式,提高消费者对产品的认知度。

3. 寻找合适的销售渠道:考虑与健身房等机构进行合作,或者寻找更符合目标消费者的销售渠道。

4. 改进产品:根据消费者的反馈意见,对产品进行改进,提高其质量和受欢迎程度。
</details>

量化部署

我们提供了 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 环境准备

我们基于 vllm 推理框架,添加了 BlueLM 模型推理代码,代码在 example/vllm 目录中。

环境准备及编译:

运行环境需要英伟达驱动版本为 525.125.06,同时 cuda 版本为 12.1。

python -m venv vllm
source vllm/bin/activate

cd example/vllm
pip install -e .

vLLM 模型推理示例

python vllm_demo.py

模型微调

环境依赖

pip install deepspeed==0.10.3

数据准备

为了简单展示模型的微调流程,我们在 BELLE 项目 50w 中文指令 中随机抽取了 1w 条中文指令数据,处理后的数据路径为 data/bella_train_demo.jsondata/bella_dev_demo.json

全量微调训练

获得处理完的数据后,可通过训练脚本 script/bluelm-7b-sft.sh 配置相应的路径和超参数,进行全量微调训练。

相关参数的说明如下所示:

ParameterDescription
num_gpus对应 GPU 的卡数
train_file训练数据的路径
prompt_column数据集指令问题的列名
response_column数据集指令回复的列名
model_name_or_path预加载模型的存储路径
output_dir微调模型的保存路径
tensorboard_dirtensorboard的保存路径
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 的详细介绍可以参考论文 LoRA: Low-Rank Adaptation of Large Language Models 以及 Github 仓库 LoRA

主要参数说明如下:

ParameterDescription
lora_ranklora 矩阵的秩。一般设置为 8、16、32、64 等。
lora_alphalora 中的缩放参数。一般设为 16、32 即可
lora_dropoutlora 权重的 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 微信交流群探讨。

wechat