【指南】同时安装vllm与flashinfer

系统环境:Ubuntu 24,Cuda

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

配环境

建议:启用 ccache 工具 以优化编译效率
sudo apt install ccache

示例
ccache -s
export CCACHE_MAXSIZE=5G
export CCACHE_NOHASHDIR="true"

Nvidia 环境

FlashInfer 的编译需要依赖 CUDA 和 NVSHMEM

CUDA 安装

nvidia-smi 检查版本支持

CUDA

卸载

NVSHMEM 安装

安装导引

NVSHMEM

PyTorch

pytorch for cuda12.9

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu129

从源代码构建

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 ../

导入环境变量

根据你自己的GPU来填写TORCH_CUDA_ARCH_LIST的值,请参考

export CCACHE_NOHASHDIR="true"
export CCACHE_MAXSIZE=10G
export TORCH_CUDA_ARCH_LIST="7.5 8.6"
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 nvidia-nvshmem-cu12 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         # 构建结果

后记

注意事项

本流程并非“教程”,更像“菜谱”或者“操作手册”,请注意:

  • 编译时间很长

建议在服务器上玩,一方面编译可以吃满多核,另一方面等待编译的时候可以去干别的事情,反正是设计好的命令行流程,也没啥需要费心操作的

动机

用vllm运行推理服务时发现会报警告 “你没有装flashinfer,所以性能下降”
但是实际去安装使用时,发现flashinfer其实并非vllm的插件,适配起来也不是一插就完事了这么理想,各种Warning/Error,主要是官方预构建包的pytorch、cuda版本不统一,遂决定尝试“自己用同一个环境(pytorch+cuda)来编译这两个包”
经过稍长时间的折腾、阅读文档,也算是掌握了一些原先陌生的知识,跑通了流程,至于 flashinfer 究竟提升几何,可以参考 知乎上一篇测评,不过我认为本文还是折腾的意义要更大些

更进一步

增量编译工作流
似乎是通过 uv 来适配的,还不熟悉,改天再研究。。。