一、部署环境准备 🛠️
1. 硬件配置
- 显卡:NVIDIA RTX 4090(24GB显存)
- 服务器:AutoDL云端服务器(Ubuntu 22.04)
2. 软件环境
确保你的基础配置为如下:
# 基础镜像
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
3. 依赖安装
# 换源加速
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安装核心库
pip install modelscope==1.22.3 openai==1.61.0 tqdm==4.67.1 transformers==4.48.2 vllm==0.7.1 streamlit==1.41.1
二、模型下载与加载 📥
1. 模型选择
- 模型名称:Qwen/QwQ-32B-AWQ(4bit量化版)
- 模型大小:约12GB(原始32B模型体积的37.5%)
2. 下载脚本
# model_download.py
from modelscope import snapshot_download
model_dir = snapshot_download(
'Qwen/QwQ-32B-AWQ',
cache_dir='/root/autodl-tmp',
revision='master'
)
3. 执行下载
python model_download.py
三、vLLM推理部署 🔄
1. 基础推理测试
# vllm_model.py
from vllm import LLM, SamplingParams
import os
os.environ['VLLM_USE_MODELSCOPE'] = 'True'
def get_completion(prompts, model, max_tokens=8192, temperature=0.6, top_p=0.95):
sampling_params = SamplingParams(
temperature=temperature,
top_p=top_p,
max_tokens=max_tokens,
stop_token_ids=[151329, 151336, 151338]
)
llm = LLM(model=model, max_model_len=2048, trust_remote_code=True)
return llm.generate(prompts, sampling_params)
if __name__ == "__main__":
model_path = '/root/autodl-tmp/Qwen/QwQ-32B-AWQ'
outputs = get_completion(
["9.11与9.9哪个更大"],
model=model_path,
max_tokens=8192
)
print(outputs[0].outputs[0].text)
2. 性能表现
- 推理时间:21.39秒
- 显存占用:约19GB
- 生成质量:完整数学推理过程+LaTeX格式答案
四、OpenAI API服务搭建 🌐
1. 启动服务
python -m vllm.entrypoints.openai.api_server \
--model /root/autodl-tmp/Qwen/QwQ-32B-AWQ \
--served-model-name QwQ-32B \
--max-model-len=4096
2. 接口测试
# 测试Completions接口
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "QwQ-32B",
"prompt": "10的阶乘是多少?</think>\n",
"max_tokens": 1024
}'
3. Python调用示例
# vllm_openai_completions.py
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1")
response = client.chat.completions.create(
model="QwQ-32B",
messages=[
{"role": "user", "content": "10的阶乘是多少?</think>\n"}
]
)
print(response.choices[0].message.content)
五、Web交互界面开发 🖥️
1. 代码实现
# app.py
import streamlit as st
import requests
import re
st.title("💬 QwQ-32B Chatbot")
st.caption("Powered by vLLM & Streamlit")
max_length = st.slider("Max Tokens", 0, 2048, 1024)
if "messages" not in st.session_state:
st.session_state.messages = [{"role": "assistant", "content": "你好!"}]
for msg in st.session_state.messages:
st.chat_message(msg["role"]).write(msg["content"])
if prompt := st.chat_input():
st.chat_message("user").write(prompt)
st.session_state.messages.append({"role": "user", "content": prompt})
try:
response = requests.post(
"http://localhost:8000/v1/chat/completions",
json={
"model": "QwQ-32B",
"messages": st.session_state.messages,
"max_tokens": max_length
}
)
if response.status_code == 200:
assistant_text = response.json()["choices"][0]["message"]["content"]
st.session_state.messages.append({"role": "assistant", "content": assistant_text})
st.chat_message("assistant").write(assistant_text)
except Exception as e:
st.error(f"请求失败: {str(e)}")
2. 运行与访问
python app.py
访问 http://localhost:8501
即可进行对话交互。
六、性能优化建议 ⚙️
-
显存优化
- 降低
max_model_len
(推荐4096) - 使用
--swap-space
参数启用虚拟内存
- 降低
-
推理加速
- 关闭后台进程
- 调整
temperature
为0.5-0.7 - 使用
--gpu-memory
限制显存分配
-
多卡部署
python -m vllm.entrypoints.openai.api_server \
--model QwQ-32B-AWQ \
--tensor-parallel-size 2
七、总结 📊
通过本教程,您可以在RTX 4090显卡上实现:
✅ 32B参数模型的高效部署
✅ 兼容OpenAI API的服务接口
✅ 完整的Web交互界面
✅ 实时性能监控
关键技术点:
- 4bit量化技术(减少60%显存占用)
- vLLM推理引擎(提升30%推理速度)
- Streamlit界面开发(快速构建交互系统)
🎉 现在您可以开始用这个强大的AI助手进行代码开发、数据分析和知识问答啦!