导读
BlueLM 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,本次发布包含 7B 基础模型、7B 对话模型,4bits量化的7B对话模型,支持 32K 的长文本基础模型和对话模型。
- 更大量的优质数据:高质量语料库进行训练,规模达到了 2.6 万亿 的 token 数,该语料库包含中文、英文以及少量日韩数据。
- 更优的效果:其中 BlueLM-7B-Chat 在 C-Eval 和 CMMLU 上均取得领先结果,对比同尺寸开源模型中具有较强的竞争力。
- 长文本支持:BlueLM-7B-Base-32K 和 BlueLM-7B-Chat-32K 均支持 32K 长文本,在保持基础能力相当情况下,能够支持更长上下文理解。
- 协议说明:BlueLM 系列欢迎开发者进行学术研究和商业应用。
BlueLM系列已全线在魔搭社区开源,以下是社区最新鲜的模型推理、微调最佳实践教程,欢迎开发者小伙伴们体验!
环境配置与安装
- python 3.8及以上版本
- pytorch 1.12及以上版本,推荐2.0及以上版本
- 建议使用CUDA 11.4及以上
使用步骤
本文主要演示的模型为 BlueLM-7B-Chat,在ModelScope的Notebook的环境(这里以PAI-DSW为例)的配置下运行(显存24G) :
服务器连接与环境准备
1、进入ModelScope首页:modelscope.cn,进入我的Notebook
2、选择GPU环境,进入PAI-DSW在线开发环境
3、新建Notebook
模型链接和下载
BlueLM系列模型现已在ModelScope社区开源,包括:
BlueLM-7B-Base模型:
https://modelscope.cn/models/vivo-ai/BlueLM-7B-Base
BlueLM-7B-Chat模型:
https://modelscope.cn/models/vivo-ai/BlueLM-7B-Chat
BlueLM-7B-Base-32K模型:
https://modelscope.cn/models/vivo-ai/BlueLM-7B-Base-32K
BlueLM-7B-Chat-32K模型:
https://modelscope.cn/models/vivo-ai/BlueLM-7B-Chat-32K
BlueLM-7B-Chat-4bits模型:
https://modelscope.cn/models/vivo-ai/BlueLM-7B-Chat-4bits
社区支持直接下载模型的repo:
from modelscope import snapshot_download model_dir = snapshot_download("vivo-ai/BlueLM-7B-Chat", revision="v1.0.2")
模型推理
推理代码:
import torch from modelscope import AutoModelForCausalLM, AutoTokenizer, snapshot_download model_dir = snapshot_download("vivo-ai/BlueLM-7B-Chat", revision="v1.0.2") tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True, use_fast=False) model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="cuda:0", torch_dtype=torch.bfloat16, trust_remote_code=True) model = model.eval() inputs = tokenizer("[|Human|]:三国演义的作者是谁?[|AI|]:", 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))
资源消耗:
BlueLM-7b-chat微调和微调后推理
微调代码开源地址:
https://github.com/modelscope/swift/tree/main/examples/pytorch/llm
以下微调脚本可以在ModelScope的免费算力DSW-PAI下运行.
clone swift仓库并安装swift
# 设置pip全局镜像和安装相关的python包 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ git clone https://github.com/modelscope/swift.git cd swift pip install .[llm] # 下面的脚本需要在此目录下执行 cd examples/pytorch/llm # 如果你想要使用deepspeed. pip install deepspeed -U # 如果你想要使用基于bnb的qlora训练. pip install bitsandbytes -U
模型微调脚本 (lora)
# Experimental environment: A10, 3090 # 17GB GPU memory PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0 \ python llm_sft.py \ --model_id_or_path vivo-ai/BlueLM-7B-Chat \ --model_revision master \ --sft_type lora \ --tuner_backend swift \ --template_type bluelm \ --dtype bf16 \ --output_dir output \ --dataset blossom-math-zh \ --train_dataset_sample -1 \ --num_train_epochs 1 \ --max_length 2048 \ --check_dataset_strategy warning \ --lora_rank 8 \ --lora_alpha 32 \ --lora_dropout_p 0.05 \ --lora_target_modules AUTO \ --gradient_checkpointing true \ --batch_size 1 \ --weight_decay 0.01 \ --learning_rate 1e-4 \ --gradient_accumulation_steps 16 \ --max_grad_norm 0.5 \ --warmup_ratio 0.03 \ --eval_steps 100 \ --save_steps 100 \ --save_total_limit 2 \ --logging_steps 10 \ --push_to_hub false \ --hub_model_id bluelm-7b-chat-lora \ --hub_private_repo true \ --hub_token 'your-sdk-token' \
模型微调后的推理脚本
# Experimental environment: A10, 3090 PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0 \ python llm_infer.py \ --ckpt_dir "output/bluelm-7b-chat/vx_xxx/checkpoint-xxx" \ --load_args_from_ckpt_dir true \ --eval_human false \ --max_length 2048 \ --max_new_tokens 2048 \ --temperature 0.9 \ --top_k 20 \ --top_p 0.9 \ --repetition_penalty 1.05 \ --do_sample true \ --merge_lora_and_save false \
微调的可视化结果
训练损失:
评估损失:
训练后生成样例:
[PROMPT]<s> [|Human|]: 学校需新添28套课桌椅,共付款1820元,椅子每把17元,课桌每张多少元?[|AI|]:[OUTPUT]设课桌每张的价格为x元。 根据题意,椅子总价格为28 * 17 = 476元。 课桌的总价格为1820 - 476 = 1344元。 设课桌每张的价格为x元,则28 * x = 1344。 解方程得:x = 1344 / 28 = 48。 所以,课桌每张的价格为48元。 Answer: 48</s> [LABELS]假设课桌的价格为x元每张。 根据题意可得方程: 28(17+x) = 1820 化简得: 476 + 28x = 1820 移项得: 28x = 1820 - 476 化简得: 28x = 1344 将等式两边同时除以28,得: x = 1344 / 28 化简得: x = 48 所以,每张课桌的价格为48元。 Answer: 48 -------------------------------------------------------------------------------- [PROMPT]<s> [|Human|]: 一种小家电,打0.8后的价格是160元,这种小家电原价多少元. [|AI|]:[OUTPUT]根据题意,打0.8后的价格为160元,我们可以表示为: 原价 × 0.8 = 160元 移项得: 原价 = 160元 / 0.8 计算可得: 原价 = 200元 因此,这种小家电的原价为200元。 Answer: 200</s> [LABELS]设小家电的原价为x元。 根据题意,打0.8折扣后的价格为0.8x元。 根据题意,0.8x = 160。 解这个方程可以得到x = 200。 所以,这种小家电的原价为200元。 Answer: 200
资源消耗:
点击阅读原文,直达BlueLM-7B开源链接