home/tutorial/01 · Week 0 环境

Week 0 · 环境与工具链

目标:周末两天内能在云上 GPU 跑通 vllm serve,并提交一个空白 commit 的 fork PR 走通流程。

这一节不教 AI,只解决"我连环境都跑不起来"这个最劝退的问题。 vLLM 有 C++/CUDA 部分,新手最容易栽在这。读完这页后你应该有: 一份能复现的 Python 环境、一台能开关的云 GPU、一个 fork 好的 vLLM、和一次成功跑通的对话推理。

驱动问题
Apple Silicon Mac 上能真的学 vLLM 吗?还是必须先开云?
先猜,再看答案

能学,能贡献,不能跑大模型推理

  • Mac 上可以:读代码、跑 Python 部分的单测(vLLM 有大量 CPU-only 测试)、写 mini-vLLM、写 blog。
  • Mac 上不行:跑 CUDA kernel、benchmark、用 7B+ 模型测延迟。这些必须上云。
  • 实际节奏:90% 时间本地、10% 时间云上验证。云 GPU 按需开关,每月 $30–80 完全够。

01硬件实情核对

场景最低推荐预算
读代码 / 跑 CPU 单测 / 写 blog任意笔记本16GB RAM Mac/PC$0
跑 7B fp16 推理 (验证)A10 24GB (~$0.4/h)A100 40GB$30–80/月
跑 benchmark / 多并发压测A100 40GBA100 80GB$80–200/月
多卡 TP/PP 实验 (Month 4+)2× A102× A100$200+/月
训练 / 大模型微调这不在本路径里。要做就单独申请实习或学校 cluster。
💡 GPU 怎么选 provider
  • RunPod — UI 最友好,spot 价格便宜,A10 ~$0.30/h,A100 80GB ~$1.5/h。
  • Vast.ai — 拍卖市场,比 RunPod 更便宜但不稳定。适合非交互式 batch 任务。
  • Lambda Labs / Modal / Together — 更贵但官方 image 体验好。
都支持按秒计费 + 镜像快照。规则:每次开机最多 2 小时,下机前 push 代码 + 关机。

02本地环境(Mac / Linux 都行)

2.1 工具版本

# Python 3.11 (vLLM 当前支持 3.9-3.12,3.11 最稳)
python --version    # → Python 3.11.x

# uv 是最快的 Python 包管理器,强推
curl -LsSf https://astral.sh/uv/install.sh | sh

# git 配好用户名 / SSH key
git config --global user.name "WeishuZ"
git config --global user.email "myludus@outlook.com"

2.2 Fork 并 clone vLLM

第一件事:到 vllm-project/vllm 点 fork。然后:

# 你的 fork
git clone git@github.com:WeishuZ/vllm.git
cd vllm

# 加 upstream remote,方便日后 sync 主仓
git remote add upstream https://github.com/vllm-project/vllm.git
git remote -v
# origin    git@github.com:WeishuZ/vllm.git (fetch/push)
# upstream  https://github.com/vllm-project/vllm.git (fetch/push)

2.3 安装(本地 CPU-only 模式)

在 Mac 上你不能编译 CUDA 部分,但可以装 CPU 版用来跑 Python 测试和读代码:

uv venv --python 3.11
source .venv/bin/activate

# vLLM 提供 CPU-only wheel(适合 Mac 阅读和单测)
VLLM_TARGET_DEVICE=cpu pip install -e . --extra-index-url https://download.pytorch.org/whl/cpu

# 或者只装 dev deps 不 build C++ 部分(更快,只能读代码不能 run)
pip install -r requirements/dev.txt
⚠ 编译易踩坑
vLLM 的 setup.py 会调 CMake 编译 C++/CUDA 部分。在 Mac 上首次 build 容易挂 —— 报错很正常。先 跳过 build,纯读源码,等上云再 build。
具体 build 文档:docs.vllm.ai/installation

2.4 pre-commit hooks

vLLM reviewer 看到没过 lint 的 PR 会直接关。装上 pre-commit,每次 commit 自动跑 ruff / mypy / typos:

pip install pre-commit
pre-commit install
pre-commit run --all-files   # 第一次跑会慢,之后只检查 diff

03云上 GPU:第一次跑通

下面以 RunPod 为例(其他 provider 类似)。跟着做,全程不超过 30 分钟。

3.1 开机

  1. RunPod → Deploy → 选 Community Cloud → A10 24GB(spot $0.20–0.30/h)。
  2. 镜像:runpod/pytorch:2.4.0-py3.11-cuda12.4.1-devel-ubuntu22.04
  3. 磁盘:50GB volume 够(模型 ~14GB + 代码 + 缓存)。
  4. SSH 启用,开 port 8000。
  5. 点 Deploy → 30 秒后 SSH 上去。

3.2 装 vLLM

# 在 pod 内
git clone https://github.com/WeishuZ/vllm.git
cd vllm

# 用官方 wheel 装最新稳定版(推荐,省得 build CUDA)
pip install vllm

# 验证
python -c "import vllm; print(vllm.__version__)"

3.3 第一次推理

# 起 OpenAI-compatible server
vllm serve meta-llama/Llama-3.1-8B-Instruct \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.85

# 等到看到 "Application startup complete." 约 60-90 秒
# 在另一个终端:
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-3.1-8B-Instruct",
    "messages": [{"role": "user", "content": "用一句话解释 PagedAttention"}]
  }'
✓ 这一步成功 = Week 0 已完成 70%
你现在有一台能 serve LLM 的机器。立刻看一下日志 —— vLLM 会打印它分配了多少 KV blocks、block size 多少。 这些数字将在 Month 2 里被你彻底理解。

3.4 下机习惯

# 退出 server,commit 任何改动
git add -A && git commit -m "wip: notes" && git push

# 立刻在 RunPod 控制台 Stop pod
# 不 stop 一直按时计费!
⚠ 账单事故
忘关 GPU 是最常见的破产事故。建议:
  1. 设手机闹钟 90 分钟提醒。
  2. RunPod 账户里设 spending limit($50/月硬限)。
  3. 把 stop 操作写成 shell alias alias byepod='runpodctl stop pod $POD_ID'

04走通第一个 PR 流程(保底 PR)

Month 1 的 KPI 是"第一个 merged PR",无论多小都行。 Week 0 末尾就先跑一遍 PR 流程,把陌生感消掉。

行动
vllm/docs/
打开 vLLM 文档目录,找一个 typo / 措辞不清 / 链接失效。有,几乎一定有。
把它修了,提一个 docs-only PR。
# 在 fork 里
git checkout -b docs/fix-typo
# 改 docs/source/xxx.md
git add docs/source/xxx.md
git commit -m "docs: fix typo in xxx"
git push -u origin docs/fix-typo

# 然后到 GitHub UI 提 PR,目标是 vllm-project/vllm:main
# 等 CI 跑完(约 10 分钟),把 reviewer 标签贴上

Reviewer 期望的最低标准

05选填:本地开发循环

如果你完全本地开发,下面这套 loop 最高效:

┌──────────────────┐    ┌──────────────────┐    ┌──────────────────┐
│ Mac: 编辑代码    │ →  │ git push to fork │ →  │ pod: pull + 验证 │
│ (vim / cursor)   │    │ (1s)             │    │ (10s)            │
└──────────────────┘    └──────────────────┘    └──────────────────┘
       ↑                                                  │
       └──────────────────  iterate  ────────────────────┘
把 pod 当远程 runner。本地代码、远程执行。

或者直接 VSCode Remote SSH 进 pod 改代码,简单粗暴。

06本页自检

Week 0 结束时这些应该全部 ✓