cuda build_error ai_generated true

RuntimeError: NVRTC compilation failed: error: cannot open source file 'cuda_runtime.h'

ID: cuda/nvrtc-include-path-missing

Also available as: JSON · Markdown · 中文
90%Fix Rate
87%Confidence
1Evidence
2023-09-05First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
CUDA 11.8 active
CUDA 12.0 active
PyTorch 2.1 active
TensorFlow 2.13 active

Root Cause

NVRTC (CUDA runtime compilation) cannot find the CUDA include path because the CUDA toolkit headers are not in the default search path or the CUDA_HOME environment variable is not set correctly.

generic

中文

NVRTC(CUDA 运行时编译)找不到 CUDA 包含路径,因为 CUDA 工具包头文件不在默认搜索路径中,或者 CUDA_HOME 环境变量未正确设置。

Official Documentation

https://docs.nvidia.com/cuda/nvrtc/index.html

Workarounds

  1. 90% success Set the CUDA_HOME environment variable to the root of your CUDA installation (e.g., /usr/local/cuda-12.1) before running the script. For Python, add it in the code using os.environ.
    Set the CUDA_HOME environment variable to the root of your CUDA installation (e.g., /usr/local/cuda-12.1) before running the script. For Python, add it in the code using os.environ.
  2. 85% success Create a symlink from the CUDA toolkit include directory to a standard location, or add it to the CPLUS_INCLUDE_PATH environment variable.
    Create a symlink from the CUDA toolkit include directory to a standard location, or add it to the CPLUS_INCLUDE_PATH environment variable.

中文步骤

  1. Set the CUDA_HOME environment variable to the root of your CUDA installation (e.g., /usr/local/cuda-12.1) before running the script. For Python, add it in the code using os.environ.
  2. Create a symlink from the CUDA toolkit include directory to a standard location, or add it to the CPLUS_INCLUDE_PATH environment variable.

Dead Ends

Common approaches that don't work:

  1. 90% fail

    NVRTC relies on the system's CUDA installation, not the deep learning framework's bundled headers; reinstalling the framework does not fix the include path.

  2. 70% fail

    This may work temporarily but breaks portability and version compatibility; also other headers may be missing.