手把手教你用 RTX 3090 本地部署 27B 大模型
在单张或双张 RTX 3090 上跑起 27B 级大语言模型,本文带你从零完成模型下载、引擎配置、服务启动与 API 调用全流程。掌握 vLLM 与 llama.cpp 的选型逻辑,避开长上下文 OOM 等高频坑,跑通属于自己的本地 LLM 服务。

手把手教你用 RTX 3090 本地部署 27B 大模型
24GB 显存的 RTX 3090 放在本地不用来跑大模型确实可惜。实际动手部署 LLM 会遇到不少坑:模型下载慢、显存不够导致 OOM、引擎选择困难、启动后各种报错。这篇教程带你在一台带单张或双张 RTX 3090 的 Linux 机器上,完整跑起支持 OpenAI 兼容 API 的本地 LLM 服务。学完后你能用 GPU 跑 Qwen3.6-27B 这类模型,并掌握 vLLM 和 llama.cpp 的选型逻辑。
环境准备
开始前确认环境满足以下要求:
| 项目 | 要求 | 说明 |
|---|---|---|
| GPU | 1× 或 2× NVIDIA RTX 3090(24GB/张) | 4090/5090 兼容,12GB 卡跑不动 27B |
| 系统 | Linux(Ubuntu 22.04+) | Windows 需先装 WSL2 |
| Docker | 已安装 + NVIDIA Container Toolkit | 本项目基于容器化部署 |
| NVIDIA 驱动 | 580.x 及以上 | 需要 CUDA 13 运行时 |
| 磁盘空间 | 至少 30GB 空余 | 每个模型约 30GB |
驱动版本低于 580 会导致 vLLM 容器无法启动,先运行 nvidia-smi 确认版本。
克隆项目与安装依赖
克隆项目到本地:
bash
git clone https://github.com/noonghunna/club-3090.git
cd club-3090
安装 PyYAML 依赖:
bash
python3 -m pip install pyyaml
## Ubuntu/Debian 也可用 apt:sudo apt install python3-yaml
核心工具全部封装在 scripts/ 目录下,包含下载模型、启动服务、切换配置的交互式脚本,省去了手动编写 Docker Compose 文件和查文档的时间。
下载模型
运行交互式下载脚本:
bash
bash scripts/setup.sh
或直接指定模型名称:
bash
bash scripts/setup.sh qwen3.6-27b
脚本自动完成三件事:硬件预检(确认 GPU 数量、驱动版本、磁盘空间)、模型权重下载(默认拉取量化好的 AutoRound INT4 版本,保留 BF16 的 MTP head)、SHA 校验(验证完整性防损坏文件)。
27B 模型的 INT4 量化版本约 15-20GB,下载时间取决于网络状况,建议配置代理或使用镜像站。脚本提供路径选择功能,磁盘空间不足时可指定到挂载的额外硬盘。通过 MODEL_DIR 环境变量可跳过交互式确认。
选择引擎并启动服务
项目支持三种推理引擎:
- vLLM:双卡推荐,高吞吐,支持视觉、tool calling、MTP。双卡 code 场景可达 127 TPS
- llama.cpp:单卡推荐,极致鲁棒性,支持 200K 上下文,不会出现长上下文 prefill OOM
- ik_llama:单卡最快,基于 IQ4_KS 量化,约 69 TPS
单卡体验推荐 llama.cpp 或 ik_llama,追求生产级吞吐用双卡 vLLM。
启动服务:
bash
bash scripts/launch.sh
脚本交互式询问模型、GPU 数量和显存预算后自动启动。跳过向导直接指定配置:
bash
## 单卡 vLLM(轻量模式,32K 上下文,约 32-33 TPS)
bash scripts/launch.sh --variant vllm/minimal
## 双卡 vLLM(262K 上下文 + 视觉支持)
bash scripts/launch.sh --variant vllm/dual
## 单卡 llama.cpp(稳健路线,大上下文不 OOM)
bash scripts/switch.sh llamacpp/default
启动完成后脚本自动调用 verify-full.sh 跑健康检查(8 项检查约 1-2 分钟),确保服务正常响应,比直接 curl 祈祷的方式靠谱得多。
发起 API 调用
服务在 localhost:8020 暴露 OpenAI 兼容 API,任何兼容 OpenAI SDK 的代码都能直接使用。
快速验证:
bash
curl -sf http://localhost:8020/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.6-27b",
"messages": [
{"role": "user", "content": "用中文解释一下什么是 Transformer 架构的核心思想?"}
],
"max_tokens": 500
}'
Python 调用示例:
python
from openai import OpenAI
client = OpenAI(
api_key="local-not-needed",
base_url="http://localhost:8020/v1"
)
response = client.chat.completions.create(
model="qwen3.6-27b",
messages=[
{"role": "system", "content": "你是一个资深的技术博主"},
{"role": "user", "content": "用一段话给刚入门的后端开发者解释 Docker 的价值"}
],
max_tokens=300,
temperature=0.7
)
print(response.choices[0].message.content)
只需将 base_url 从 api.openai.com 改为 localhost:8020/v1 即可无缝切换本地模型,开发阶段做功能联调无需每次请求都烧钱。
性能基准测试
项目提供现成测试脚本:
bash
## 吞吐量测试(3 次预热 + 5 次正式测量)
bash scripts/bench.sh
## 行为质量测试(工具调用正确性、指令遵循、结构化输出等)
bash scripts/quality-test.sh --medium # 5 个测试包,约 15-25 分钟
bench.sh 打印 TPS(每秒 token 数)用于评估吞吐能力。双卡 vLLM code 场景 89-127 TPS,单卡 llama.cpp 约 51-60 TPS。
常见问题
单卡 vLLM 长文本 OOM
单卡 24GB 在处理超过 50K 的长 prompt prefill 时会 OOM。换双卡 vLLM(vllm/dual,TP=2 可绕过此问题)或单卡切回 llama.cpp 可解决。
HuggingFace 下载慢
国内网络不佳时,先手动下载模型权重到 MODEL_DIR,运行 setup.sh 时指定已存在路径,或设环境变量跳过下载。
启动失败排查
检查日志:
bash
docker logs <容器名称> 2>&1 | tail -50
常见原因:显存不足或驱动版本不对。预检脚本误判时用 --force 跳过:
bash
bash scripts/switch.sh --force llamacpp/default
Windows 用户
原生 Windows 无法运行 Docker 方案,需先装 WSL2,参考 docs/WSL_SETUP.md 在 WSL2 中完成部署。
后续拓展
服务跑起来后可按需拓展:
- 切换配置:
bash scripts/switch.sh vllm/dual一键切换引擎和参数,无需停服务重装 - 添加模型:支持 Qwen3.6-27B、Gemma 4 31B、Qwen3.6 35B-A3B(MoE)等,运行
bash scripts/setup.sh <model_name> - 接 Open WebUI:Web 聊天界面后端地址指向
localhost:8020 - 保持更新:
bash scripts/update.sh获取引擎版本和新补丁 - 终端 UI:安装
c3驾驶舱获得可视化操作:bashuv pip install -e tools/serve-cockpit c3
把量化方案、引擎配置、上下文长度都验证好并封装成可用的一键脚本,能节省大量时间。按教程步骤操作,跑通本地 LLM 服务后,把精力放在用模型创造价值上,而不是跟 OOM 较劲。