[英]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
但是在配置構建中我必須處理兩個問題:
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)。
Could not find any NvInferVersion.h matching version '' in any subdirectory
。 在相應的腳本提示符處提供 CUDA 和 cudnn 版本后,我設法通過在我的系統cudnn.h
和cuda.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.