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

时间:2017-11-01 14:42:17

标签: docker tensorflow tensorflow-gpu

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

我是否必须构建单独的docker镜像 - 一个用于CPU,一个用于GPU - 或者是否可以安装tensorflowtensorflow-gpu并选择正确的变体,具体取决于GPU是否为可用?

2 个答案:

答案 0 :(得分:1)

使用普通$output .= ' <img src="http://localhost/banner/'.$row["banner_image"].'" alt="'.$row["banner_title"].'" /> (而不是docker)启动时,GPU版本的tensorflow无法加载到容器中,因为缺少库nvidia-docker。我们设法通过三个步骤为不同的主机使用相同的图像:

  1. 将库存libcuda.so.1链接到同一目录中的/usr/local/cuda/lib64/stubs/libcuda.so
  2. 将存根目录添加为libcuda.so.1的搜索路径,其优先级低于/etc/ld.so.conf.d挂载libcuda.so.1的目录。
  3. 调用nvidia-docker刷新库缓存。
  4. 如果图像在没有GPU的主机上通过普通ldconfig使用,则tensorflow将加载存根并将所有操作放在CPU上。如果图像通过docker在具有GPU的主机上使用,则tensorflow会加载已安装的库并在GPU上放置适当的操作。完整示例here

答案 1 :(得分:0)

您可能需要查看官方Tensorflow docker images GPU版本使用nvidia-docker来访问GPU。

我过去所做的是有两个几乎相同的Dockefiles。 Dockerfiles的唯一区别是FROM指令:

FROM tensorflow/tensorflow:latest-py3

OR

FROM tensorflow/tensorflow:latest-gpu-py3

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

其他所有内容都是相同的,您甚至可以自动执行此操作,以便在构建映像时设置相应的FROM标记。我已经使用makefile来构建适当的图像,具体取决于主机是否具有GPU。