尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

vLLM 源码编译实战指南:3条硬件路线 × 4步完成定制构建

vLLM 源码编译实战指南:3条硬件路线 × 4步完成定制构建 vLLM 源码编译实战指南3条硬件路线 × 4步完成定制构建【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllmvLLM 是一个高吞吐、显存高效的 LLM 推理与服务引擎核心是大量编译好的 CUDA/HIP 内核。官方 wheel 绑定 CUDA 12.9 和特定 PyTorch 版本换硬件、换 PyTorch、改内核就必须走 vLLM 源码编译。读完本文你能在 NVIDIA/AMD/CPU 三条路线上完成定制构建并处理编译报错、加速重复构建。图引擎各进程与模块的分工——你编译产出的内核最终被模型执行器调用为什么值得从源码编译改内核或算子。内核目录 里的 PagedAttention、MoE、量化算子一旦修改预编译 wheel 一律失效只能全量编译。预编译二进制有版本耦合。官方文档明确CUDA 版本、PyTorch 版本甚至同版本 PyTorch 的不同构建配置都会导致 wheel 不兼容此时必须源码编译。编译期开关只在构建时生效。MAX_JOBS、NVCC_THREADS、TORCH_CUDA_ARCH_LIST这类变量决定并行度和目标架构装完 wheel 之后改不了。反过来如果只改 Python 代码用VLLM_USE_PRECOMPILED1 uv pip install -e .复用预编译产物即可几秒装完——这条捷径后面会用上。图PagedAttention 的分页存储——这类核心逻辑都在 csrc/ 里改动后需要重新编译先选路线硬件决定依赖清单硬件平台系统要求核心依赖推荐配置NVIDIA GPULinux计算能力 7.5T4/A100/H100 等B200/GB200 需 CUDA 12.8CUDA Toolkitnvcc在 PATH 中 GCC 11.332GB 内存跑全量构建AMD GPULinuxROCm 6.3MI350 需 7.0ROCm PyTorch ROCm 版MI300gfx942或 RX 7900/9000CPULinux x86/ARM/s390xPython 3.10–3.13PyTorch CPU 版 cmake/ninja32GB 内存默认推荐 NVIDIA CUDA 路线文档覆盖最全、问题排查资料最多另外两条路线只是换依赖清单流程相同。setup.py会按 PyTorch 自动探测cuda/rocm/xpu/cpu探测结果对应VLLM_TARGET_DEVICE通常不用手动设。四步构建vLLM 源码编译完整流程① 拉源码克隆仓库git clone https://gitcode.com/GitHub_Trending/vl/vllm cd vllm构建系统锁定 Python 3.10–3.14macOS 上会自动把VLLM_TARGET_DEVICE置为 cpu只做开发用二进制不编译。② 装依赖安装构建依赖# CUDA 路线torch 2.13.0、cmake3.26.1、ninja、setuptools-rust 等 uv pip install -r requirements/build/cuda.txt # 已有自己的 PyTorchnightly/定制版时跳过上面一行 python use_existing_torch.py依赖版本定义在pyproject.toml的 build-system 段装错版本会在 ③ 步直接报错。③ 编译全量编译或复用预编译# 全量构建编译 csrc/ 下全部 C/CUDA 内核官方说明需数分钟 uv pip install -e . --torch-backendauto # 只改 Python 时的捷径复用基线 commit 的预编译 wheel跳过编译 VLLM_USE_PRECOMPILED1 uv pip install -e . --torch-backendauto重复构建时装好ccachewhich ccache能命中即自动启用配合CCACHE_NOHASHDIRtrue pip install --no-build-isolation -e .后续构建明显变快。④ 安装验证验证导入与内核产物python -c import vllm; print(vllm.__version__) python examples/basic/offline_inference/basic.py导入通过且离线推理跑通即构建完成内核方向频繁迭代的开发者可改用python tools/generate_cmake_presets.py生成 CMake preset之后cmake --build --preset release --target install只重编改动的文件。编译失败排查决策树与高频修复报错先对号入座从依赖层往下排构建失败 ├─ 依赖层pip / 构建隔离 │ ├─ torch 版本冲突 → 按 requirements/build/cuda.txt 重装或 use_existing_torch.py │ └─ 缺 cmake/ninja/setuptools-rust → uv pip install -r requirements/build/cuda.txt ├─ 配置层环境变量 │ ├─ nvcc 找不到 → 设 CUDA_HOME 并把 $CUDA_HOME/bin 加进 PATH │ └─ C20 头文件报错 → GCC/G 低于 11.3升级 gcc-11/g-11 ├─ 内核层nvcc 编译 │ ├─ 进程被 OOM 杀掉 → 降低并行度 export MAX_JOBS4WSL 用 1 │ └─ 架构不匹配 → 收窄 TORCH_CUDA_ARCH_LIST 到显卡实际架构 └─ 绑定层链接 / 导入 ├─ undefined symbol / library not found → 改了内核却走了 VLLM_USE_PRECOMPILED 捷径 └─ vllm-rs 二进制缺失 → ./build_rust.sh --debug 单独重编 Rust 前端错误现象可能原因修复动作nvcc: command not foundCUDA_HOME未设或不在 PATHexport CUDA_HOME/usr/local/cuda后验证nvcc --versionC20 头文件编译错误GCC 版本低于 11.3apt-get install gcc-11 g-11并用update-alternatives切换编译进程被 Killed并行任务吃光内存export MAX_JOBS1重试WSL 默认只给一半内存libcudart.so: cannot open shared object fileAMD 卡上装了 CUDA 版 wheel源码编译或用 ROCm 7.0/7.2.1 的预编译变体undefined symbol、import 报错改了 C/内核却用预编译 wheel去掉VLLM_USE_PRECOMPILED做全量构建预编译 wheel not found基线 commit 的 wheel 还没构建好等约 1 小时重试或设VLLM_PRECOMPILED_WHEEL_COMMITnightly实用提示疑难杂症最快的出口是官方 NVIDIA PyTorch 容器--ipchost保证共享内存足够。宿主机环境越干净排查路径越短。性能开关一览构建期变量表配置项取值作用预期收益MAX_JOBS整数如 4限制并行编译任务数低内存机器不 OOMWSL 场景设 1NVCC_THREADS整数如 2单个 nvcc 进程线程数避免 CPU 超订与大MAX_JOBS搭配TORCH_CUDA_ARCH_LIST如9.0指定编译的 GPU 架构少编无用架构缩短构建时间、减小体积VLLM_USE_PRECOMPILED1复用基线 commit 的预编译 wheel跳过整个编译阶段改动 C/内核时失效VLLM_PRECOMPILED_WHEEL_COMMITcommit 号或nightly指定取哪个 commit 的预编译 wheel基线 wheel 未就绪时自动兜底到最新已构建 commitVLLM_CUTLASS_SRC_DIR本地目录指向本地 cutlass 源码构建期不再从网络拉取 cutlassVLLM_TARGET_DEVICEcuda/rocm/xpu/cpu/empty目标设备默认自动探测empty用于非 Linux 机器仅做 Python 开发开发机与生产机的取舍开发环境追求迭代速度默认VLLM_USE_PRECOMPILED1 ccache 按需降MAX_JOBS内核改动再切全量构建生产构建则去掉预编译捷径把TORCH_CUDA_ARCH_LIST收窄到实际显卡架构如 GH200 官方示例用max_jobs66、nvcc_threads2内存占用约 15GB并保留 ccache 加速 CI 重复构建。实用提示所有构建期变量都要记进你的构建脚本否则下个月没人复现得出一模一样的 wheel。验证构建结果功能与性能双重验证# 功能小模型离线推理跑通 python examples/basic/offline_inference/basic.py # 量化跑固定 prompt 数量的吞吐基准 python benchmarks/benchmark_throughput.py --num-prompts 100读三个数总吞吐token/s改过内核后与改前对比持平或上升才算改动无回退。单请求平均延迟反映首 token 到输出的时间批量推理看吞吐、交互场景看它。显存峰值基准运行期间用nvidia-smi盯住构建配置不当如 KV cache 页大小变化会推高峰值直接影响能部署多大的模型。首次构建建议先装一个官方 wheel 在同环境跑同一条基准命令存下数字作为 baseline之后每次改动都以它为判据。收尾构建习惯清单隔离构建环境每个平台一个干净 venv依赖只从 requirements 清单装缓存编译结果安装 ccache配合--no-build-isolation和CCACHE_NOHASHDIRtrue收窄编译范围TORCH_CUDA_ARCH_LIST只填显卡实际架构保留预编译捷径只改 Python 时始终带VLLM_USE_PRECOMPILED1记录构建变量MAX_JOBS、NVCC_THREADS等写进脚本保证可复现构建成功只是拿到了一份可量化的引擎——改任何内核后重跑一次benchmark_throughput.py用吞吐和延迟的数字而不是日志来决定改动去留。【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表