Qwen2.5-1.5B模型的LoRA微调-SmoothW8A6量化-vLLM推理部署-Http服务API-并发测试流程
本文主要展示大模型微调量化的过程,不涉及调优
数据集构建
1、本文大模型微调目标是训练出一个能够高度抽取文本信息的大模型
2、本研究选取新闻简讯作为语料信息
3、样本的构造风格采用shareGPT,格式如下:
{"meesage":
[
{"role":system,"content":text},
{"role":user,"content":text},
{"role":assistant,"content":text}
]
}
4、样本量是300,训练集:验证集:测试集=8:1:1
5、数据集质量未作评估
模型选择
1、本机硬件信息:
显卡:NVIDIA5060,8GB显存
2、2B参数量(精度为FP16)的内存占用为
20e8X2Byte/1024**3 = 4GB
采用LORA微调
Linux的vLLM启动和后台挂载
1、启动vLLM
点击查看代码
python -m vllm.entrypoints.openai.api_server \
--model /mnt/d/NaturalLanguage-P/LoRAQwen3/Q_model \
--host 0.0.0.0 --port 8000 \
--max-model-len 1024 \
--gpu-memory-utilization 0.85 \
--enforce-eager \
--max-num-seqs 8 \
后台启动
点击查看代码
nohup env \
VLLM_USE_V1=0 \
VLLM_WSL2_ENABLE_PIN_MEMORY=1 \
VLLM_USE_FLASHINFER_SAMPLER=0 \
VLLM_ENABLE_V1_MULTIPROCESSING=0 \
VLLM_USE_DEEP_GEMM=0 \
VLLM_DEEP_GEMM_WARMUP=skip \
VLLM_WORKER_MULTIPROC_METHOD=spawn \
python -m vllm.entrypoints.openai.api_server \
--model /mnt/d/NaturalLanguage-P/LoRAQwen3/Q_model \
--host 0.0.0.0 --port 8000 \
--max-model-len 1024 \
--gpu-memory-utilization 0.85 \
--enforce-eager \
--max-num-seqs 8 \
> /mnt/d/NaturalLanguage-P/LoRAQwen3/vllm_server.log 2>&1 &
3、curl测试
点击查看代码
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Q_model",
"messages": [
{"role": "system", "content": "你是一个人民日报新闻事件要素抽取器。只输出合法JSON。"},
{"role": "user", "content": "日期:1946-10-15\n标题:英保守党举行年会\n正文:英保守党于本月三日在布拉克浦尔举行年会,邱吉尔发表演说抨击工党。\n请抽取故事情节要素。"}
],
"max_tokens": 100,
"temperature": 0.2
}' | python -c "import sys,json; print(json.load(sys.stdin)['choices'][0]['message']['content'])"
点击查看代码
curl -N http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/mnt/d/NaturalLanguage-P/LoRAQwen3/Q_model",
"messages": [
{"role": "user", "content": "请用中文简单介绍一下vLLM流式输出。"}
],
"max_tokens": 256,
"temperature": 0.7,
"stream": true
}'
2、查看进程和杀死进程:
点击查看代码
ps -au
kill -9 pid
3、脚本文件.sh相当于是将交互终端改为多命令执行终端
4、evalscope压力测试
点击查看代码
\#!/bin/bash
\# eval_test.sh — 模型压力测试(通过 vLLM API)
set -e
\# ═══ 配置 ═══
BASE="/mnt/d/NaturalLanguage-P/LoRAQwen3"
DATA_JSONL="/mnt/d/NaturalLanguage-P/Text-DatasetOfme/news/renminribao_1946_sharegpt_300_fixed_json.jsonl"
PROMPT_FILE="$BASE/data/test/prompts.txt"
OUTPUT_DIR="$BASE/output"
API_URL="http://127.0.0.1:8000/v1/chat/completions"
\# ═══ 激活虚拟环境 ═══
source /mnt/d/NaturalLanguage-P/evalscope/bin/activate
\# ═══ Step 1: 提取 prompt 文本 ═══
echo "========================================"
echo " Step 1: 提取 prompt 文本"
echo "========================================"
mkdir -p "$(dirname "$PROMPT_FILE")"
python3 -c "
import json
prompts = []
with open('$DATA_JSONL', 'r', encoding='utf-8') as f:
for line in f:
if not line.strip():
continue
sample = json.loads(line)
messages = sample['messages']
prompt_msgs = [m for m in messages if m['role'] in ('system', 'user')]
text = ' '.join(m['content'] for m in prompt_msgs)
prompts.append(text.replace('\n', ' '))
with open('$PROMPT_FILE', 'w', encoding='utf-8') as f:
for p in prompts:
f.write(p + '\n')
print(f'提取完成,共 {len(prompts)} 条 prompt')
"
\# ═══ Step 2: 压测当前 vLLM 服务的模型 ═══
echo ""
echo "========================================"
echo " Step 2: 压测 (API: $API_URL)"
echo "========================================"
evalscope perf \
--model "$BASE/Q_model" \
--url "$API_URL" \
--api openai \
--dataset line_by_line \
--dataset-path "$PROMPT_FILE" \
--parallel 1 2 4 8 \
--number 50 50 50 50 \
--max-tokens 128 \
--min-tokens 64 \
--outputs-dir "$OUTPUT_DIR/perf_quantized_w8a8"
echo ""
echo "========================================"
echo " 压测完成,结果: $OUTPUT_DIR/perf_quantized_w8a8"
echo "========================================"
Qwen2.5_1.5B_Instruct
新闻:
1946-10-21 第2版() 专栏: 郓钜群众誓败蒋贼拔穷根 诉冤苦燃起复仇怒火 六区四天内二百五十人奋起参军 【本报冀鲁豫十九日电】
郓钜六区召开全体干部会议,座谈时事,打通思想,并召开全区积极分子诉苦大会,会上,千百人痛哭流涕,控诉地主与蒋介石的罪恶,当场,更有大批青壮年参军,造成空前的参军热潮。在干部座谈时事的会议中,
大家一致认识到:蒋介石是卖国贼,对老百姓绝不会客气。为了保卫果实,保卫爹娘,只有打垮蒋介石的进攻。群众沸腾起来了,有人激昂的高呼:有血性吗?参军去!父亲替儿子报名,
兄弟俩争着报名,当场报名者即达一百三十七名。会后,各村又展开了诉苦运动与热烈的参军竞赛,仅仅在四天内,全区即有二百五十名青壮年走上自卫战场
{ "故事情节": [ { "时间": "1946-10-21", "地点": "郓钜六区", "主要人物": "郓钜群众", "故事类型": "诉冤苦燃起复仇怒火", "故事组织": "干部座谈、诉苦大会、参军热潮" } ] }
Qwen2.5_1.5B_Instruct_LoRA
{"故事情节":[{"时间":"1946-10-21","地点":"冀鲁豫","主要人物":"六区四天内及积极","故事类型":"军事行动","故事组织":"蒋、全区四十人"}]}
Qwen_1.5B_Instruct_LoRA_Quant
{"故事情节":[{"时间":"1946-10-21","地点":"冀鲁豫","主要人物":"六区四天内二百 fifty人、积极分子","故事类型":"军事行动","故事组织":"冀鲁豫、郓钜六区"})}
量化前后vllm部署显存占用
Qwen_1.5B_Instruct_LoRA_Quant:(EngineCore pid=1795) INFO 08-03 10:13:23 [model_runner.py:305] Model loading took 1.77 GiB and 30.306319 seconds
Qwen_1.5B_Instruct_LoRA:(EngineCore pid=2218) INFO 08-03 11:27:58 [model_runner.py:305] Model loading took 2.98 GiB and 37.281447 seconds
并发压测
Qwen_1.5B_Instruct_LoRA_Quant

Qwen2.5_1.5B_Instruct_LoRA

浙公网安备 33010602011771号