系统环境: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 来适配的,还不熟悉,改天再研究。。。