vLLM和SGLang部署Qwen3.5-0.8B模型

背景

普通python包对版本依赖没有太多问题,但是涉及到模型微调和部署环境,版本依赖就非常严格,因为不仅涉及到包与包之间的依赖兼容性,还有python版本,CUDA版本之间的兼容性,因此有必要确定一个合适的版本,在此记录一下一张卡的机器上同时使用vLLM和SGLang部署Qwen3.5-0.8B模型的流程。

基础环境

Python 3.12(ubuntu22.04)
CUDA 12.4
RTX 4090
使用以上版本安装新的机器,本文使用autodl租用的GPU机器。

虚拟环境

因为vLLM和SGLang有版本依赖冲突(sgl-kernel、triton 等),因此两者环境必须隔离,另外还需要给客户端一个虚拟环境。

为避免将系统盘撑爆,因此需要设置pip缓存到数据盘,并在数据盘创建独立环境

cd /root/autodl-tmp
python -m venv vllm_env
python -m venv sglang_env
python -m venv client_env

为避免将系统盘撑爆,因此设置pip缓存到数据盘,在~/.bashrc最后添加:

export PIP_CACHE_DIR=/root/autodl-tmp/pip-cache

并执行source ~/.bashrc

下载模型

激活客户端环境

source /root/autodl-tmp/client_env/bin/activate

下载Qwen3.5-0.8B模型到/root/autodl-tmp/models

安装vLLM

激活vllm环境

source /root/autodl-tmp/vllm_env/bin/activate

执行以下脚本download_model.py下载模型

# -*- coding: utf-8 -*-
"""
模型下载脚本
课程:高质量微调数据工程与评估
功能:下载 Qwen3.5-0.8B 模型到本地目录
"""

import os
import sys

# ========================================
# 配置区域(根据环境修改)
# ========================================

MODEL_ID = "Qwen/Qwen3.5-0.8B"

# AutoDL环境
AUTODL_CACHE_DIR = "/root/autodl-tmp/models"

# 本地Windows环境
LOCAL_CACHE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "models")


def detect_environment():
    """检测当前运行环境"""
    if sys.platform == "win32":
        return "windows", LOCAL_CACHE_DIR
    elif os.path.exists("/root/autodl-tmp"):
        return "autodl", AUTODL_CACHE_DIR
    else:
        return "linux", LOCAL_CACHE_DIR


def download_with_modelscope(model_id, cache_dir):
    """使用ModelScope下载模型(国内推荐)"""
    from modelscope import snapshot_download

    print(f"使用ModelScope下载模型: {model_id}")
    print(f"下载目录: {cache_dir}")

    os.makedirs(cache_dir, exist_ok=True)
    model_dir = snapshot_download(model_id, cache_dir=cache_dir)

    print(f"模型下载完成: {model_dir}")
    return model_dir


def download_with_huggingface(model_id, cache_dir):
    """使用HuggingFace下载模型"""
    from huggingface_hub import snapshot_download

    print(f"使用HuggingFace下载模型: {model_id}")
    print(f"下载目录: {cache_dir}")

    os.makedirs(cache_dir, exist_ok=True)
    model_dir = snapshot_download(
        model_id,
        cache_dir=cache_dir,
        local_dir=os.path.join(cache_dir, model_id.split("/")[-1]),
    )

    print(f"模型下载完成: {model_dir}")
    return model_dir


def main():
    env_name, cache_dir = detect_environment()
    print(f"检测到环境: {env_name}")
    print(f"模型: {MODEL_ID}")
    print(f"下载目录: {cache_dir}")
    print()

    # 优先使用ModelScope(国内速度更快)
    try:
        model_dir = download_with_modelscope(MODEL_ID, cache_dir)
    except ImportError:
        print("ModelScope未安装,尝试使用HuggingFace...")
        print("提示: pip install modelscope")
        try:
            model_dir = download_with_huggingface(MODEL_ID, cache_dir)
        except ImportError:
            print("HuggingFace Hub也未安装")
            print("请先安装: pip install modelscope 或 pip install huggingface_hub")
            return

    print()
    print("=" * 60)
    print("下载完成!")
    print(f"模型路径: {model_dir}")
    print()
    print("在微调脚本中使用此路径:")
    print(f'  model_name = "{model_dir}"')
    print("=" * 60)


if __name__ == "__main__":
    main()

安装命令

pip install --upgrade pip
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu124

安装成功后,执行vllm -v查看安装版本
image

启动模型,执行命令

vllm serve /root/autodl-tmp/models/Qwen/Qwen3___5-0___8B --tensor-parallel-size 1 --max-model-len 4096 --enforce-eager

验证vLLM推理模型

激活客户端环境

source /root/autodl-tmp/client_env/bin/activate

在客户端环境下执行以下脚本1-qwen3-vllm.py:

#!/usr/bin/env python
# coding: utf-8

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="dummy"  # vLLM 不验证 key,但必须填
)

response = client.chat.completions.create(
    model="/root/autodl-tmp/models/Qwen/Qwen3___5-0___8B",
    messages=[{"role": "user", "content": "你好,请介绍下自己"}],
    max_tokens=512
)

print(response.choices[0].message.content)

执行结果如下:
image
正常返回,说明部署没有问题。

安装SGLang

激活sglang环境

source /root/autodl-tmp/sglang_env/bin/activate

安装命令

pip install --upgrade pip
pip install "sglang[all]>=0.4.6.post1"

安装成功后,执行sglang version查看安装版本
image

启动模型,执行命令

python -m sglang.launch_server
--model-path /root/autodl-tmp/models/Qwen/Qwen3___5-0___8B
--port 8001
--host 0.0.0.0
--mem-fraction-static 0.4
--max-running-requests 16
--context-length 4096
--chunked-prefill-size 2048
--enable-metrics

发现有报错:
image
根据提示,因为当前cudnn版本有漏洞,执行以下命令升级cudnn:

pip install nvidia-cudnn-cu12==9.16.0.29

验证SGLang推理模型

激活客户端环境

source /root/autodl-tmp/client_env/bin/activate

在客户端环境下执行以下脚本2-qwen3-sglang.py:

#!/usr/bin/env python
# coding: utf-8
from openai import OpenAI

# 只需要改 base_url,其他代码完全不变
client = OpenAI(
    base_url="http://localhost:8001/v1",
    api_key="not-needed"  # 本地部署不需要 key
)

response = client.chat.completions.create(
    model="Qwen3.5-0.8B",
    messages=[
        {"role": "system", "content": "你是一个有帮助的AI助手。"},
        {"role": "user", "content": "用一句话解释什么是大语言模型。"}
    ],
    temperature=0.7,
    max_tokens=200
)

print(response.choices[0].message.content)

执行结果如下:
image

正常返回,说明部署没有问题,而且同样的提示词,明显肉眼可见SGLang比vLLM快很多。

结论

本文在同一台机器上安装vLLM和SGLang,命令其实很简单,主要是要安装很多包,因此一定要配置国内源,否则时间会超级长。还有最重要的一点就是要做环境隔离,否则会越多各种奇怪的问题。另外因为本地只有一张4090的显卡,只有24GB显存,因此需要对vLLM和SGLang配置显存大小,否则会报OOM。vLLM和SGLang还有很多参数,本次没有涉及,下次再详细说明。

posted @ 2026-03-30 23:45  星辰下的键盘  阅读(613)  评论(0)    收藏  举报