torch、vllm、flashattn各种版本对不齐、abi错误;codex跑了4个小时终于给4090装上了,最后让总结成一个经验prompt
bash
# 所有需要联网下载的内容必须先配置国内镜像
# ============================================================
# 步骤 1:创建干净的环境
# ============================================================
conda create -n verl_train python=3.11 -y
conda activate verl_train
# ============================================================
# 步骤 2:安装 PyTorch(控制版本,不让 pip 自动拉)
# 关键:用 --no-deps 防止 pip 拉其他 torch 版本覆盖
# torch版本选择:CUDA版本必须和显卡驱动兼容
# - RTX 3090/4090/A100/H100 等 → 用 cu124(推荐)
# - 确认方法:nvidia-smi 显示的 CUDA 版本
# ============================================================
pip install torch==2.5.1 torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu124 \
--no-deps
# 验证
python -c "import torch; print(torch.__version__, torch.version.cuda)"
# ============================================================
# 步骤 3:安装 PyTorch 缺失的纯 Python 依赖
# (因为步骤2用了 --no-deps,所以要手动补全)
# ============================================================
pip install nvidia-cuda-runtime-cu124 nvidia-cuda-nvrtc-cu124 \
nvidia-cuda-cupti-cu124 nvidia-cudnn-cu124 nvidia-cutensor-cu124 \
nvidia nccl_cu124 cusolver-lapack-dev-cu124 \
triton filelock networkx sympy jinja2 fsspec
# ============================================================
# 步骤 4:安装 flash-attn(最关键的一步)
# 关键:torch 版本 + CUDA 版本 + ABI 版本 三个必须完全匹配
# ============================================================
# 4a. 先尝试从 PyPI 找预编译 wheel(最快)
# 访问 https://https://flash-attn.github.io/ 查最新可用 wheel
# 或用下面的命令查可安装版本
pip install flash-attn --no-build-isolation --no-cache-dir 2>&1 | head -5
# 4b. 如果上面失败(ABI 不匹配),从源码编译
FLASH_ATTENTION_FORCE_BUILD=TRUE \
MAX_JOBS=4 \
TORCH_CUDA_ARCH_LIST="8.0;8.6;8.9;9.0" \
pip install flash-attn --no-build-isolation --no-cache-dir
# 4c. 如果编译超时/失败,用精确匹配的预编译 wheel
# 去 https://my HuggingFace 下载(需要注册账号):
# 路径:flash-attn → releases → 找对应版本
# 文件名格式:flash_attn-2.x.x+cu12torch2.5torcha2.18-cp311-cp311-linux_x86_64.whl
pip install /path/to/flash_attn-*.whl
# 验证(两个都成功才算过)
python -c "import flash_attn; print('flash_attn:', flash_attn.__version__)"
python -c "from flash_attn import flash_attn_func; print('flash_attn_func OK')"
# ============================================================
# 步骤 5:从源码编译安装 vLLM(链接到现有 torch)
# 关键:用 use_existing_torch.py + --no-build-isolation
# ============================================================
git clone https://github.com/vllm-project/vllm.git
cd vllm
git checkout v0.7.3 # 选一个稳定版本
# 让 vLLM 使用已有的 torch,而不是重新下载
python use_existing_torch.py
# 安装构建依赖
pip install -r requirements/build.txt
# 编译安装(-e 是可编辑模式,方便调试)
pip install --no-build-isolation -e .
cd .. # 退出 vllm 目录
# 验证
python -c "import vllm; print('vllm:', vllm.__version__)"
# ============================================================
# 步骤 6:安装 verl 和其他训练依赖
# ============================================================
pip install verl
# 训练需要的其他包
pip install transformers huggingface_hub hf_transfer
pip install ray[default] pyarrow pandas
# ============================================================
# 步骤 7:全局锁定 torch 相关包,防止后续 pip upgrade 覆盖
# ============================================================
pip install torch==2.5.1 --no-deps
pip install flash-attn --no-deps # 锁定不升级
# ============================================================
# 步骤 8:最终验证(全部导入成功才算完成)
# ============================================================
python << 'EOF'
import torch
import flash_attn
import vllm
print(f"torch: {torch.__version__} ({torch.version.cuda})")
print(f"flash-attn: {flash_attn.__version__}")
print(f"vllm: {vllm.__version__}")
print(f"CUDA avail: {torch.cuda.is_available()}")
from flash_attn import flash_attn_func
print("flash_attn_func: OK")
print("ALL OK ✓")
EOF
三句话总结成功关键:
- 先装 torch,用
--no-deps,再补全 CUDA 依赖:控制 torch 版本是一切的起点 - flash-attn 必须 ABI 精确匹配:预编译 wheel 找不到就源码编译,别混用不同 ABI 的版本
- vLLM 必须从源码编译:
use_existing_torch.py+--no-build-isolation是让它链接到现有 torch 的官方方法