在使用 Xinference 运行嵌入模型时遇到 CUDA 错误提示:
CUDA error: no kernel image is available for execution on the device
这通常表明 PyTorch 或相关框架尝试在 GPU 上执行操作时,无法找到与当前 GPU 架构兼容的编译内核。此问题可能出现在 Xinference 启动模型服务或执行推理过程中,尤其是在使用 GPU 加速时。以下是可能的原因与对应的解决方法。
使用非vLLM模型引擎如 sentence_transformers
检查 CUDA 和 PyTorch 版本兼容性
Xinference 依赖 PyTorch 来运行深度学习模型,因此必须确保所安装的 PyTorch 版本与系统中的 CUDA 驱动兼容。可以通过以下命令查看当前 PyTorch 的 CUDA 支持情况:
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.version.cuda)
若输出显示 torch.version.cuda
与系统中安装的 CUDA 版本不一致,可能导致内核镜像无法加载。建议访问 PyTorch 官网选择与系统环境匹配的安装命令。
更新 NVIDIA 驱动程序
过时的 NVIDIA 驱动程序可能无法支持当前 GPU 架构,从而导致 CUDA 内核加载失败。可通过 NVIDIA 官网下载并安装最新驱动程序,确保其支持当前 GPU 的计算能力。例如,RTX 30 系列 GPU 需要至少支持 CUDA 计算能力 8.6 的驱动和内核。
设置 TORCH_CUDA_ARCH_LIST 环境变量
若使用自定义编译的 PyTorch 或通过源码安装,应确保在构建时设置了正确的 TORCH_CUDA_ARCH_LIST
环境变量,以包含目标 GPU 的架构。例如:
export TORCH_CUDA_ARCH_LIST="8.6"
这将确保 PyTorch 编译时包含适用于 Ampere 架构(如 RTX 30 系列)的内核。
使用 Conda 安装 PyTorch 以获得稳定依赖
使用 conda
安装 PyTorch 可以更好地管理依赖版本,避免因多个 CUDA 版本共存导致的问题。例如:
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch
此命令将安装与 CUDA 11.8 兼容的 PyTorch 构建版本,适用于大多数现代 GPU。
避免混合使用多个 CUDA 版本
如果系统中存在多个 CUDA 版本,可能导致 PyTorch 加载错误的库文件。可以通过检查 LD_LIBRARY_PATH
环境变量确保其仅包含与当前 PyTorch 构建版本匹配的 CUDA 库路径。此外,使用 ldd
命令可验证 PyTorch 的 CUDA 依赖:
ldd $(python -c "import torch; print(torch.utils.cmake_prefix_path)")
重新安装 PyTorch
若上述方法无效,建议卸载并重新安装 PyTorch,确保使用与系统环境匹配的版本。例如:
pip uninstall torch
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
这将安装与 CUDA 11.8 兼容的 PyTorch 构建版本。