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
Qmodel-c
Qwen2.5_1.5B_Instruct_LoRA
loramodel-c

posted @ 2026-08-01 20:44  白氏可乐可乐  阅读(22)  评论(0)    收藏  举报