导读
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))
资源消耗:
微调代码开源地址:
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开源链接
所有评论(0)