簡體   English   中英

Tensorflow 源構建配置失敗:找不到任何 cuda.h 匹配版本和字典值錯誤

[英]Tensorflow source build configuration fails: Could not find any cuda.h matching version and dictionary value error

我正在嘗試從源代碼構建 Tensorflow,因為我具有 6.1 的計算能力 GPU,但是我的 CPU 不支持 AVX 命令。 我第一次嘗試使用 docker 容器失敗了,因為 Tensorflow 也無法在 tensorflow:latest-jupyter-gpu 上導入。 我已經安裝並驗證了 CUDA 驅動程序,並從 nvidia 網站手動安裝 cuda 驅動程序。 當前安裝的是NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0根據nvidia-smi output。 此外,我已經按照指南安裝並驗證了 CUDA 11 的 cudnn-8.0.1 安裝。 我的系統運行 Linux Mint 19.1。 我已經下載了 TF 源碼並簽出了分支 r2.2 來構建相應的版本。 盡管提出了通過 Bazelisk 安裝 Bazel 的方法(來自本指南),但唯一有效的方法是應用命令

cd "/home/user/.bazel/bin" && curl -LO https://releases.bazel.build/2.0.0/release/bazel-2.0.0-linux-x86_64 && chmod +x bazel-2.0.0-linux-x86_64

但是在配置構建中我必須處理兩個問題:

  1. 在選擇支持的庫時,如果只有 select CUDA 在 4 個受質疑的庫中,我會收到以下錯誤:
File "./configure.py", line 1440, in main
    if validate_cuda_config(environ_cp):
  File "./configure.py", line 1323, in validate_cuda_config
    tuple(line.decode('ascii').rstrip().split(': ')) for line in proc.stdout)
ValueError: dictionary update sequence element #9 has length 1; 2 is required

因此,我必須 select 至少兩個庫(CUDA 和 TensorRT)。

  1. 在選擇這兩個庫的情況下,腳本會繼續執行,但是會出現以下消息Could not find any NvInferVersion.h matching version '' in any subdirectory 在相應的腳本提示符處提供 CUDA 和 cudnn 版本后,我設法通過在我的系統cudnn.hcuda.h路徑中找到並在附加腳本提示符中添加它們的路徑來進一步進行:
Please specify the comma-separated list of base paths to look for CUDA libraries and headers. [Leave empty to use the default]: /usr/local/cuda-11.0/targets/x86_64-linux/include/cuda.h,/usr/include/hwloc/cuda.h,/usr/local/cuda-11.0/targets/x86_64-linux/include/cudnn.h,/usr/include/cudnn.h,/usr/include/linux,/usr/local/cuda/include

但是,由於腳本不斷失敗並顯示消息,我無法繼續進行:

Could not find any cuda.h matching version '11' in any subdirectory:
        ''
        'include'
        'include/cuda'
        'include/*-linux-gnu'
        'extras/CUPTI/include'
        'include/cuda/CUPTI'
of:
        '/usr/include/hwloc/cuda.h'
        '/usr/local/cuda-11.0/targets/x86_64-linux/include/cuda.h'
        '/usr/local/cuda-11.0/targets/x86_64-linux/include/cudnn.h'
Asking for detailed CUDA configuration...

關於如何繼續的任何提示? 我必須提供哪些路徑?

謝謝!

我最近遇到了同樣的問題:

File "./configure.py", line 1440, in main
    if validate_cuda_config(environ_cp):
  File "./configure.py", line 1323, in validate_cuda_config
    tuple(line.decode('ascii').rstrip().split(': ')) for line in proc.stdout)
ValueError: dictionary update sequence element #9 has length 1; 2 is required`

我認為這意味着我的 CUDA 和 Cudnn 版本不符合構建 tensorflow-gpu 的需求。 請在“configure.py”中找到正確的版本。 TensorRT 並不是不可或缺的。

將此文件: /tensorflow/tensorflow/core/platform/cuda.h復制到列出的目錄之一中。

因此,如先前的答案所述,CUDA 11 顯然錯過了在某些 header 中引用 cudnn 版本,這實際上阻礙了元組的創建。 發生這種情況是因為缺少第二個元素(實際版本號),然后配置崩潰。

因此,您必須以某種方式將該 cudnn 版本號解析為 tensorflow 中的配置文件。 我所做的是對 cudnn 版本進行硬編碼,只需將“8.1”替換為您的版本即可。

我用以下代碼替換了 configure.py 文件tuple(line.decode('ascii').rstrip().split(': ')) for line in proc.stdout)的 1323 行。 我相信有一個非常有效的方法來寫這個。

  config = {}
  for line in proc.stdout:

    parameter_split = line.decode('ascii').rstrip().split(': ')
    if len(parameter_split) == 1:
        # had to manually add here the cudnn version
        config[parameter_split[0][:-1]] = '8.1'
    else:
        config[parameter_split[0]] = parameter_split[1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM