是否可以同时安装CPU和GPU版本的tensorflow

Is it possible to install the CPU and GPU versions of tensorflow at the same time

我正在使用 nvidia-docker 从 docker 容器访问 GPU。然而,并不是我们所有的机器都有 GPU,我想在 GPU 不可用时自动回退到 CPU 版本。

我是否必须构建单独的 docker 图像——一个用于 CPU,一个用于 GPU——或者是否可以安装 tensorflowtensorflow-gpu 以及根据 GPU 是否可用选择正确的变体?

你可能想看看官方的 Tensorflow docker images GPU 版本使用 nvidia-docker 访问 GPU。

我过去所做的是拥有两个几乎相同的 Dockefile。 Dockerfile 中的唯一区别是 FROM 指令:

FROM tensorflow/tensorflow:latest-py3

FROM tensorflow/tensorflow:latest-gpu-py3

(如果需要,您也可以选择 Python2 图片)

其他一切都是一样的,您甚至可以自动执行此操作,以便在构建映像时设置适当的 FROM 标记。我已经使用 makefile 来根据主机是否有 GPU 构建适当的映像。

当使用正常 docker(而不是 nvidia-docker)启动时,tensorflow 的 GPU 版本无法加载到容器中,因为缺少库 libcuda.so.1。我们通过三个步骤设法为不同的主机使用相同的图像:

  1. Link 库存根 /usr/local/cuda/lib64/stubs/libcuda.solibcuda.so.1 在同一目录中。
  2. 将 stubs 目录作为搜索路径添加到 /etc/ld.so.conf.d,其优先级低于 nvidia-docker 安装 libcuda.so.1 的目录。
  3. 调用ldconfig刷新库缓存。

如果通过正常 docker 在没有 GPU 的主机上使用图像,tensorflow 会加载存根并将所有操作放在 CPU 上。如果图像通过 nvidia-docker 在具有 GPU 的主机上使用,tensorflow 会加载已安装的库并在 GPU 上放置适当的操作。完整示例 here.