目录

Tensorflow是如何找到CUDA

目录

概述

Tensorflow 跟 CUDA 关系密切,以至于初用者会经常遇到 CUDA 的问题,另外就是利用 Kubernetes 来进行 Tensorflow 的计算,还需要与 nvidia-docker,而 CUDA 版本近年来升级比以前频繁了,Tensorflow 的新版本默认都会和最新的 CUDA 来编译,如果不理解 Tensorflow 的版本和 CUDA 版本的关系,很容易出现一些麻烦,不过幸运的是,根据错误日志,以及追溯源码,还是很容易能找到问题的解决方法的,要么就是版本问题,要么就是显卡驱动安装的问题,又或者是跟 K8S 结合的时候,CUDA 库没有挂载成功等等。

操作

拿一个测试镜像来举个实际排查的问题。镜像是 tensorflow-gpu,tf 的版本是 1.9,对应的 CUDA 是 9.2,可以看到配置上显示没问题。

关于 CUDA 的错误可以查询官网的介绍。

/tensorflow%E6%98%AF%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0cuda/image_1djvpsr3anul1jve1j8ert615dtp.png

一开始其实不了解这个错误是什么意思,谷歌后也没多少有效的信息。大概理解是注册的过程失败了,因为未知的原因。比较常见的错误是 -1 之类的。所以查一下 Nvidia 驱动的问题,以及 CUDA 包是否找得到。由于是运行在 K8S 上的,所以需要 nvidia-docker。

关于 CUDA 的兼容性,可以看官网介绍。

看一下 tensorflow 的代码

针对 MPS,K8S 需要开通 IPC 也就是进程间通信,通过内存通信。

关于 Docker 的 IPC,具体可以参考这篇文章

nvidia-docker 关于 IPC,还有个 issue

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。