【指南】同时安装 vllm 与 flashinfer

注意:本文已过时(2026.1.11)

现在直接用python自带的pip命令直接安装两者,不会再有奇怪的依赖冲突问题,无需再自己编译

-----------------------------

省流无废话版(Markdown 源码),自行保存查看,体验更佳

关键字: Ubuntu 24,Python 12,vllm,flashinfer

前言

本文从零配置了一个最小的、能够同时编译 vllm 与 flashinfer 的 构建环境,使得能在 推理环境一致地 安装 任意版本组合的 vllm 与 flashinfer

完整的项目,可以形如:

.                   
├── .venv                    # 推理环境,本文流程结束后,在该环境运行命令 pip install Env_pre/build/XXX.whl 
└── Env_pre                  # 本文流程的工作目录 
    ├── .venv                # 构建环境 
    └── 待编译包的源代码          
├── LLM模型文件夹      
└── LLM推理服务启动.sh          

构建环境推理环境 分离
两个环境需要完全一致的Pytorch版本

相关链接

flashinfer 文档
flashinfer 仓库
vLLM 文档
vLLM 仓库

开始

推荐使用 VS Code + Remote - SSH 的工作方式

首先,cd Env_pre创建 Python 虚拟环境,作为本文的工作区:

Env_pre                 
    └── .venv              

配环境流程

sudo apt install git
sudo apt install ccache

ccache 是一个优化C/C++编译效率的工具
如果 which ccache 能找到则说明安装成功,vllm 的构建系统会自动用,但flashinfer 的AOT构建系统好像没办法直接用
当然ninja/cmake这样的工具编译像git管理的项目时本身也可以只编译有修改的部分,ccache用不上问题也不大

Nvidia 相关环境

请自行确认合适的 Nvidia显卡驱动 已在你的机器上成功安装
本文驱动为 575.64.03,将安装 CUDA 12.9
请注意 vllm 及 pytorch 目前(2025.08)没适配 CUDA13.0

FlashInfer 最近已不再强制要求依赖 NVSHMEM,本文原相关内容废弃:
NVSHMEM 安装:注册为Nvidia的开发者
文档
NVSHMEM
pip install nvidia-nvshmem-cu12

FlashInfer PR #1261: add nvshmem module for aot compilation
FlashInfer PR #1426: remove nvidia-nvshmem-cu12 from package dependency

CUDA 安装

首先 nvidia-smi 检查版本支持

CUDA下载地址与安装指引

如何卸载已有的CUDA

成功安装在默认路径后,在 ~/.bashrc 这个文件里面加以下两行,就能用 nvcc -V 验证了

export PATH=/usr/local/cuda-12.9/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.9/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

PyTorch

PyTorch_cuda12.9

下载某个特定版本并在本地可持久化
pip download torch torchvision --index-url https://download.pytorch.org/whl/cu129 -d ./wheels

从本地安装该版本
pip install --no-index --find-links=./wheels torch torchvision

从源代码构建

git clone https://github.com/vllm-project/vllm.git

git clone https://github.com/flashinfer-ai/flashinfer.git --recursive

文件结构示意:

Env_pre             # 当前工作目录
├── .venv           # 构建工作所用的Python虚拟环境 
├── vllm            
├── flashinfer      
└── build           # 将用于储存构建结果

代码更新

cd flashinfer
git pull
cd ../vllm
git pull
cd ../

用 git 可以切换到特定 release 分支

环境变量

根据你自己的 GPU 型号来填 TORCH_CUDA_ARCH_LIST 的值,参考,填多了增加编译成本
根据你自己的 CPU 线程数来填写 MAX_JOBS 的值,如果部分环节内存不够,将该值调小后再尝试编译

export CCACHE_NOHASHDIR="true"
export TORCH_CUDA_ARCH_LIST="8.6;8.9"
export MAX_JOBS=16
export VLLM_CUTLASS_SRC_DIR=../flashinfer/3rdparty/cutlass

构建依赖安装

cd vllm
python use_existing_torch.py
pip install -r requirements/build.txt
git restore
cd ../
pip install build requests

构建

# vLLM
cd vllm
python use_existing_torch.py
python -m build --wheel --no-isolation --o ../build/
git restore .
cd ../

# FlashInfer
cd flashinfer
python -m flashinfer.aot
python -m build --no-isolation --wheel -o ../build/
cd ../

结果

Env_pre                        # 当前工作目录      
├── ......            
└── build  
    ├── flashinfer_xxxxx.whl   # 构建结果
    └── vllm-xxxxx.whl         # 构建结果

附录

  • 本文在环境管理上简单地基于 pip,目前更加符合开发场景的实践是 跟随 uv 的工作流

  • 首次编译时间非常长,之后的编译一般不会消耗太长时间

  • 本文动机

    • 用vllm运行推理服务时发现会报警告 “你没有装flashinfer,所以性能下降”
    • 但是实际去安装使用时,发现flashinfer它并非vllm的插件,适配起来不是一插就用这么理想,各种Warning、Error,且官方预构建包的pytorch、cuda版本不统一,而且将其中的某些包单独回退并不总能work,遂决定尝试“自己用同一个环境(pytorch+cuda)来从源代码构建这两个包”,以从根源上解决各种冲突、以一致的方式去使用这两个包
    • 经过稍长时间的查阅各种文档、反复折腾,也算是掌握了一些原先陌生的知识,跑通了流程,至于 flashinfer 究竟提升几何,可以参考 知乎上一篇测评,不过我认为本文还是折腾的意义要更大些
  • 更进一步:显卡驱动、CUDA这部分过程的可以用命令行自动化安装

posted @ 2025-08-14 04:25  ilxT  阅读(688)  评论(0)    收藏  举报