Qwen3-0.6B实战笔记:从安装到输出结果全过程

1. 环境准备与镜像启动

1.1 启动Qwen3-0.6B镜像并进入Jupyter环境

在使用Qwen3-0.6B模型前,首先需要正确配置运行环境。推荐通过GPU云服务器实例部署该模型,以确保推理效率和稳定性。

建议选择预装NVIDIA GPU驱动的Ubuntu镜像(如Ubuntu 22.04 + NVIDIA驱动550.90.07),避免手动安装CUDA、cuDNN等复杂依赖。创建实例时可选用ecs.gn7i-c8g1.2xlarge或更高规格的GPU机型,并分配至少50GiB ESSD云盘用于存储模型文件。

完成实例创建后,通过Workbench远程连接登录服务器,在终端执行以下命令进入工作目录:

cd /root

随后启动Jupyter Notebook服务,可通过浏览器访问指定端口进行交互式开发调试。


2. 使用LangChain调用Qwen3-0.6B模型

2.1 配置LangChain接口参数

LangChain为大语言模型集成提供了统一抽象层,便于快速接入不同模型。以下是基于langchain_openai模块调用Qwen3-0.6B的具体实现方式。

from langchain_openai import ChatOpenAI
import os

chat_model = ChatOpenAI(
    model="Qwen-0.6B",
    temperature=0.5,
    base_url="https://gpu-pod694e6fd3bffbd265df09695a-8000.web.gpu.csdn.net/v1",  # 替换为实际Jupyter服务地址,注意端口8000
    api_key="EMPTY",  # 当前环境无需认证
    extra_body={
        "enable_thinking": True,
        "return_reasoning": True,
    },
    streaming=True,
)

关键参数说明

  • base_url:指向本地部署的vLLM或FastChat后端服务地址。
  • api_key="EMPTY":表示不启用API密钥验证。
  • extra_body中启用思维链(CoT)功能,提升复杂任务推理能力。
  • streaming=True:开启流式输出,降低响应延迟。

2.2 执行模型推理请求

调用invoke()方法发送用户输入并获取回复:

response = chat_model.invoke("你是谁?")
print(response.content)

预期输出将包含模型自我介绍信息,例如:“我是通义千问系列中的小型版本Qwen3-0.6B,适用于轻量级自然语言处理任务。”


3. 模型微调全流程实践

3.1 数据准备:构建SFT训练集

高质量监督微调(Supervised Fine-Tuning, SFT)数据是提升小模型性能的关键。本案例目标是从非结构化文本中提取结构化物流信息(省、市、区、详细地址、姓名、电话)。

原始数据格式示例如下:

长沙市岳麓区桃花岭路189号润丰园B座1202室 | 电话021-17613435 | 联系人江雨桐

期望输出JSON格式:

{
  "province": "湖南省",
  "city": "长沙市",
  "district": "岳麓区",
  "specific_location": "桃花岭路189号润丰园B座1202室",
  "name": "江雨桐",
  "phone": "021-17613435"
}

由于真实业务数据涉及隐私,可采用“模型蒸馏”策略:利用Qwen3-235B-A22B作为教师模型生成标注数据。执行以下命令下载已准备好的训练集:

cd /root && \
curl -f -o train.jsonl "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250610/azvmpb/train_with_system.jsonl"

每条样本遵循对话格式:

{
  "messages": [
    {
      "role": "system",
      "content": "你是一个专业的信息抽取助手..."
    },
    {
      "role": "user",
      "content": "原始地址字符串"
    },
    {
      "role": "assistant",
      "content": "{\"province\": \"...\"}"
    }
  ]
}

3.2 安装微调框架ms-swift

为简化微调流程,采用魔搭社区提供的ms-swift工具包,支持一键完成模型下载、LoRA微调、权重合并等操作。

安装必要依赖:

pip3 install vllm==0.9.0.1 ms-swift==3.5.0

该过程约耗时5分钟,完成后即可开始微调任务。


3.3 执行LoRA微调脚本

运行以下命令自动执行完整微调流程:

cd /root && \
curl -f -o sft.sh "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250623/cggwpz/sft.sh" && \
bash sft.sh

sft.sh核心配置如下:

swift sft \
  --model Qwen/Qwen3-0.6B \
  --train_type lora \
  --dataset 'train.jsonl' \
  --torch_dtype bfloat16 \
  --num_train_epochs 10 \
  --per_device_train_batch_size 20 \
  --learning_rate 1e-4 \
  --lora_rank 8 \
  --lora_alpha 32 \
  --target_modules all-linear \
  --gradient_accumulation_steps 16 \
  --max_length 2048 \
  --output_dir output \
  --warmup_ratio 0.05

参数解析

  • --train_type lora:使用低秩适配(LoRA)进行高效微调。
  • --lora_rank 8:控制新增参数维度,平衡表达力与过拟合风险。
  • --num_train_epochs 10:训练轮次,需结合损失曲线判断是否收敛。
  • --gradient_accumulation_steps 16:累积梯度以模拟更大批量。

微调成功后将在output/目录生成checkpoint,并自动执行权重合并,最终模型路径形如output/checkpoint-50-merged


4. 效果验证与评估

4.1 准备独立测试集

为客观评估泛化能力,应使用未参与训练的新样本进行测试。下载测试数据集:

cd /root && \
curl -o test.jsonl "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250610/mhxmdw/test_with_system.jsonl"

测试集同样采用标准JSONL格式,每行一条对话记录。


4.2 编写评测逻辑

定义函数比较预测结果与真实标签的一致性:

def compare_address_info(actual_address_str, predicted_address_str):
    """比较两个JSON字符串表示的地址信息是否相同"""
    try:
        actual_json = json.loads(actual_address_str) if actual_address_str else {}
        pred_json = json.loads(predicted_address_str) if predicted_address_str else {}
        is_same = actual_json == pred_json
        
        return {
            "is_same": is_same,
            "actual_parsed": actual_json,
            "predicted_parsed": pred_json,
            "error": None
        }
    except json.JSONDecodeError as e:
        return {"is_same": False, "error": f"JSON解析错误: {str(e)}"}
    except Exception as e:
        return {"is_same": False, "error": f"其他错误: {str(e)}"}

4.3 对比微调前后性能差异

基线模型表现(未微调)

使用优化后的系统提示词对原始Qwen3-0.6B进行测试:

你是一个专业的信息抽取助手...
请严格按照JSON格式输出...

执行评测脚本:

bash evaluate_without_sft.sh

结果表明准确率仅为 14%(400条样本中仅56条正确),说明零样本推理能力有限。

微调后模型表现

对合并后的模型重新评估:

bash evaluate.sh

即使使用更简洁的提示词:

“你是一个专业的信息抽取助手,专门负责从中文文本中提取收件人的JSON信息…”

微调模型准确率达到 98%(392/400),显著优于基线。


5. 部署为API服务

5.1 使用vLLM部署高性能推理服务

将微调后的模型发布为RESTful API,供业务系统调用:

curl -o deploy.sh "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250613/hbojjv/deploy.sh" && \
bash deploy.sh

部署成功后输出提示:

API密钥: sk-xxx
服务地址: http://0.0.0.0:8000
日志查看: tail -f vllm.log

安全建议:若需公网访问,请在ECS安全组中开放8000端口,并限制源IP范围。


5.2 调用API示例

Python客户端
from openai import OpenAI
from pydantic import BaseModel

class Labels(BaseModel):
    province: str
    city: str
    district: str
    specific_location: str
    name: str
    phone: str

JSON_SCHEMA = Labels.model_json_schema()

def main(user_message: str):
    client = OpenAI(
        api_key="sk-xxx",
        base_url="http://xx.xx.xx.xx:8000/v1",  # 替换为公网IP
    )

    completion = client.chat.completions.create(
        model="Qwen3-0.6B-SFT",
        messages=[
            {"role": "system", "content": "你是一个专业的信息抽取助手..."},
            {"role": "user", "content": user_message},
        ],
        extra_body={
            "chat_template_kwargs": {"enable_thinking": False},
            "guided_json": JSON_SCHEMA,
        },
    )
    print(completion.choices[0].message.content)

if __name__ == "__main__":
    main("号码021-3439592西宁市城东区昆仑东路289号海湖新区万新广场3号楼18层索南扎西")
curl调用方式
curl -X POST http://xx.xx.xx.xx:8000/v1/chat/completions \
  -H "Authorization: Bearer sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen3-0.6B-SFT",
    "messages": [
      {"role": "system", "content": "你是一个专业的信息抽取助手..."},
      {"role": "user", "content": "原始输入文本"}
    ],
    "guided_json": {...}  # JSON Schema定义
  }'

6. 总结

本文详细记录了Qwen3-0.6B从环境搭建、模型调用、监督微调到部署上线的全生命周期实践流程。通过引入模型蒸馏思想,利用大模型生成高质量标注数据,再对小模型进行LoRA微调,实现了从14%到98%的准确率飞跃。

该方案具备以下优势:

  • 低成本高效益:0.6B小模型适合边缘设备部署,大幅降低推理成本。
  • 快速迭代:借助ms-swift框架,微调任务可由非专业人员完成。
  • 易于集成:通过vLLM暴露标准OpenAI兼容接口,便于现有系统对接。

未来可进一步探索持续学习机制,结合线上反馈数据动态更新模型,提升长期稳定性。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐