阿里通义千问 Qwen1.5 实践案例来了

大模型落地一直受到算力的约束,今天分享一个参数相对较小的模型: Qwen1.5 的落地方法。

文章目录

Qwen1.5 划重点

1. 更全的模型系列: 提供6个不同size模型,以及GPTQ/AWQ/GGUF量化版,总有一款适合你

2. 更好的生态融入: 接入huggingface transformers,以及主流的第三方部署、量化、微调、服务等框架,方便你我他

3.更强大的性能: Chat模型性能大幅提升,即便在英文的MT-Bench上,Qwen1.5-Chat系列也取得了优秀的性能

4.更全面统一的功能: 全系列均统一支持至少32k的最大长度,多语言能力全面提升并提供了更丰富的多语言评测,全系列统一支持system prompt,统一具备强大的链接外部系统能力(agent/RAG/Tool-use/Code-interpreter)

技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了大模型面试和技术交流群,相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群

方式②、添加微信号:mlc2040,备注:来自CSDN + 技术交流

最佳实践

体验地址:

https://modelscope.cn/studios/qwen/Qwen1.5-72B-Chat-Demo/summary

例如,多语言能力:

角色扮演:

工具调用能力:

模型下载

模型链接: https://modelscope.cn/organization/qwen

python 复制代码
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen1.5-7B-Chat')

模型推理

环境依赖:

python 复制代码
pip install transformers>=4.37.0

推理代码:

python 复制代码
from modelscope import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
    "qwen/Qwen1.5-0.5B-Chat",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen1.5-7B-Chat")

prompt = "Give me a short introduction to large language model."
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

模型训练

微调框架SWIFT(https://github.com/modelscope/swift)已经支持了Qwen1.5全系列模型的微调和推理。

下面我们以自我认知任务为例针对千问1.5-7b-chat模型为例给出训练参数配置:

bash 复制代码
# Experimental environment: A100
# 30GB GPU memory
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0 \
python llm_sft.py \
    --model_type qwen1half-7b-chat \
    --sft_type lora \
    --tuner_backend swift \
    --dtype AUTO \
    --output_dir output \
    --dataset ms-bench \
    --train_dataset_sample 5000 \
    --num_train_epochs 2 \
    --max_length 1024 \
    --check_dataset_strategy warning \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0.05 \
    --lora_target_modules ALL \
    --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 \
    --use_flash_attn false \
    --self_cognition_sample 1000 \
    --model_name 卡卡罗特 \
    --model_author 陶白白 \

其中的ms-bench数据集是通用知识数据集,用来做数据混合防止知识遗忘。训练的Loss收敛情况:

可以看到其收敛非常平滑。

训练的显存使用情况:

训练后推理可以使用如下脚本(注意将--ckpt_dir替换为训练log输出的weights路径):

bash 复制代码
# Experimental environment: A100
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0 \
python llm_infer.py \
    --ckpt_dir "/xxx/xxx/Qwen1.5-7b-chat/vx-xxx/checkpoint-xx" \
    --load_dataset_config true \
    --max_length 2048 \
    --eval_human true \
    --use_flash_attn false \
    --max_new_tokens 2048 \
    --temperature 0.1 \
    --top_p 0.7 \
    --repetition_penalty 1. \
    --do_sample true \
    --merge_lora_and_save false \

自我认识微调后的模型推理效果:

模型部署

使用vllm部署千问1.5开源版本

设置环境变量:export VLLM_USE_MODELSCOPE=True

vllm拉起openai server

bash 复制代码
python -m vllm.entrypoints.openai.api_server \
    --model qwen/Qwen1.5-7B-Chat --max-model-len 8192  --gpu-memory-utilization 0.95

访问服务

bash 复制代码
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen/Qwen1.5-7B-Chat",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "写一篇春天为主题的作文"}
        ],
        "stop": ["<|im_end|>", "<|endoftext|>"]
    }'

使用llama.cpp部署千问1.5开源的GGUF的版本

下载GGUF文件:

python 复制代码
from modelscope.hub.file_download import model_file_download

model_dir = model_file_download(model_id='qwen/Qwen1.5-1.8B-Chat-GGUF',file_path='qwen1.5-1_8b-chat-q8_0.gguf',revision='master',cache_dir='/mnt/workspace/')

git clone llama.cpp代码并推理:

python 复制代码
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j && ./main -m /mnt/workspace/qwen/Qwen1.5-1.8B-Chat-GGUF/qwen1.5-1_8b-chat-q8_0.gguf -p "Building a website can be done in 10 simple steps:\nStep 1:" -n 400 -e

通俗易懂讲解大模型系列

相关推荐
小馒头学python3 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯12 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠15 分钟前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon25 分钟前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
羊小猪~~31 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
AI小杨33 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
晨曦_子画37 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云39 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
人工智能培训咨询叶梓1 小时前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调
zzZ_CMing1 小时前
大语言模型训练的全过程:预训练、微调、RLHF
人工智能·自然语言处理·aigc