繁体   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