具体流程参考
FoundationPose 复现
引言:
公司不让用conda 使用,替换方案 :UV或者 pip。
UV(和所有 Python 虚拟环境)只管 Python 包,不管系统的 CUDA 编译器(nvcc)。所以才会出现:
- 虚拟环境里:PyTorch 是 cu128(编译时绑定了 CUDA 12.8)
- 系统里:nvcc 是 11.8(真・本地编译器)
- 编译 flash-attn 这种 CUDA 扩展时:会去调用系统 nvcc → 版本 mismatch → 报错
下面把这事拆清楚:
1. UV/venv 隔离的是什么?
只隔离:
- Python 解释器
- site-packages(pip/uv 装的包,包括 PyTorch)
- 环境变量里的
PATH前缀(优先用虚拟环境里的 Python/pip)不隔离、不管的:
系统的
nvcc(CUDA Toolkit 编译器)系统的
libcuda.so/libcudart.so(驱动和系统 CUDA 库)
LD_LIBRARY_PATH等系统级动态库路径所以:
uv run python -c "import torch; print(torch.version.cuda)" # 12.8(来自 PyTorch 包) nvcc -V # 11.8(来自系统)这俩本来就可以不一样,平时用 PyTorch 跑模型没问题,但编译 CUDA 扩展(如 flash-attn、cc_torch)就会炸。
2. 为什么编译 flash-attn 必须要 "系统 nvcc" 和 "PyTorch CUDA" 一致?
flash-attn 是 CUDA 扩展,安装时会:
调用系统
nvcc编译.cu源码链接到 PyTorch 对应的 CUDA runtime 库(12.8)
要求:编译器版本(nvcc) ≈ 链接库版本(torch.cuda),主版本必须一致(12.x vs 11.x 不行)
你的情况:
编译器:nvcc 11.8
链接库:PyTorch cu128→ 主版本 11 vs 12 不兼容 → 直接报错
准备
注意 :
编译器版本 : gcc-10/g++-10
sudo apt update
sudo apt install gcc-10 g++-10 ninja-build
【nvcc = 编译 C++/CUDA 代码用的】
本机的nvcc 版本要是 CUDA 11.8,如果不是则执行命令
cd ~/Downloads
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt install cuda-toolkit-11-8
使用UV安装
先进入项目文件夹,创建python3.9环境
uv venv --python 3.9
激活环境
source .venv/bin/activate
安装依赖包
uv pip install -r requirements.txt
安装Install Kaolin 和 PyTorch3D
uv pip install pytorch3d-0.7.3-cp39-cp39-linux_x86_64.whl
uv pip install kaolin-0.15.0-cp39-cp39-linux_x86_64.whl
两个包下载地址
https://nvidia-kaolin.s3.us-east-2.amazonaws.com/torch-2.0.0_cu118.html
https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py39_cu118_pyt200/download.html
安装NVDiffRast
手动git项目到文件夹下:
~/Downloads/FoundationPose/external/
https://github.com/NVlabs/nvdiffrast.git
然后进入external目录执行:
注意setuptools版本一定要69.0.0,其他版本会编译报错
参考github issue中回答
cd ~/Downloads/FoundationPose/external/nvdiffrast
rm -rf build *.egg-info
export CC=/usr/bin/gcc-10
export CXX=/usr/bin/g++-10
export CUDAHOSTCXX=/usr/bin/g++-10
# 1. 先安装必须的构建依赖
uv pip install wheel setuptools==69.0.0
# 2. 再安装 nvdiffrast(无构建隔离 + 本地安装)
uv pip install --no-build-isolation .
打印日志,即成功

构建项目 Build and install extensions in repo
需要修改项目下build_all_conda.sh 编译指令,如下:

然后 执行指令
CMAKE_PREFIX_PATH=$(python -c "import pybind11; print(pybind11.get_cmake_dir())") bash build_all_conda.sh
编译成功,打印日志

然后直接运行 run_demo.py 。