我真傻,真的,我单知道做ai用python和torch就够了…
翻rwkv文档的时候知道这个模型可能会用到一些自定义算子(?)但是直到导入它的AutoTokenizer,程序突然Warning:

这怎么跟CUDA有关了……后来Claude
什么是CUDA-Toolkit,为什么要装它?
省流:由NVIDIA开发的软件工具,主要用于利用GPU的强大并行计算能力来加速各种计算任务。
有些模型会自己写一些算子(例如flash-attn/自定义op/某些Triton场景)用于加速计算,这就要求环境有完整、正确的CUDA-Toolkit。
如果日常用torch做训练推理,其实torch内部就有CUDA运行库;但是要编译CUDA扩展的话(开头的rwkv),就需要系统级的CUDA-Toolkit了。
怎么配置它?
CUDA-Toolkit的版本要跟着torch的CUDA走。首先记下torch使用的CUDA版本:
python -c "import torch; print(torch.__version__, torch.version.cuda)"
假设CUDA版本为X.Y。第一步,清理环境里原有的CUDA-Toolkit(如有):
conda list | grep -iE "^cuda|nvjitlink|cusparse"
conda remove cuda-toolkit
# 如果这个环境列出的包还有cuda/libnvjitlink包,一块清掉
重新装一遍torch与它自带的CUDA:
pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cuXY # XY为CUDA版本号,记得改
python -c "import torch; print(torch.cuda.is_available())" # 应该输出 True
第二步,装一个版本为X.Y的独立toolkit。单独建一个conda环境只放toolkit:
conda create -n cudaXY -c nvidia/label/cuda-X.Y.0 cuda-toolkit -y
创造这个环境只是为了放CUDA-Toolkit,把环境变量扔到它上面;不要用这个环境跑代码。
第三步,设置环境变量,把下列sh写进$CONDA_PREFIX/etc/conda/activate.d/cuda.sh里(其中$CONDA_PREFIX是当前conda环境所在的路径):
export CUDA_HOME=~/miniconda3/envs/cudaXY
export PATH=$CUDA_HOME/bin:$PATH
export TORCH_CUDA_ARCH_LIST="8.9" # 适用于4090显卡,只编译这一种架构,更快,也不依赖 PTX
export MAX_JOBS=8 # 防止编译 flash-attn 时内存不够
最后验证CUDA-Toolkit是否被正确安装:
nvcc --version # 应该是 X.Y
python -c "from torch.utils.cpp_extension import CUDA_HOME; print(CUDA_HOME)"
python - <<'PY'
import torch
from torch.utils.cpp_extension import load_inline
src = "torch::Tensor f(torch::Tensor x){return x*2;}"
m = load_inline("t", cpp_sources=src, cuda_sources="", functions=["f"], with_cuda=True)
print(m.f(torch.ones(2, device="cuda")))
PY
这样就可以欢乐地用GPU编程啦虽然完全不想碰
配好对应的torchvision与torchaudio
装好torch与CUDA-Toolkit后,我的torchvision又崩了:

RuntimeError: operator torchvision::nms does not exist,Claude告诉我这是torchvision和torch版本不匹配时的报错(换了torch的CUDA后,torchvision的C++扩展加载失败,而且不会报错,算子nms因此没有注册上);俺寻思还是把torch相关的库也一块重装了:
pip install -U "torch==?.?.?" torchvision torchaudio --index-url https://download.pytorch.org/whl/cuXY
这里torch的版本是你前面装好的版本,可用torch.__version__查看。-U参数代表要升级库,如果不加它,pip会发现torchvision/torchaudio已经装好了,就不会检查版本匹不匹配了。