是否可以同时安装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——或者是否可以安装 tensorflow
和 tensorflow-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
。我们通过三个步骤设法为不同的主机使用相同的图像:
- Link 库存根
/usr/local/cuda/lib64/stubs/libcuda.so
到 libcuda.so.1
在同一目录中。
- 将 stubs 目录作为搜索路径添加到
/etc/ld.so.conf.d
,其优先级低于 nvidia-docker
安装 libcuda.so.1
的目录。
- 调用
ldconfig
刷新库缓存。
如果通过正常 docker
在没有 GPU 的主机上使用图像,tensorflow 会加载存根并将所有操作放在 CPU 上。如果图像通过 nvidia-docker
在具有 GPU 的主机上使用,tensorflow 会加载已安装的库并在 GPU 上放置适当的操作。完整示例 here.
我正在使用 nvidia-docker
从 docker 容器访问 GPU。然而,并不是我们所有的机器都有 GPU,我想在 GPU 不可用时自动回退到 CPU 版本。
我是否必须构建单独的 docker 图像——一个用于 CPU,一个用于 GPU——或者是否可以安装 tensorflow
和 tensorflow-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
。我们通过三个步骤设法为不同的主机使用相同的图像:
- Link 库存根
/usr/local/cuda/lib64/stubs/libcuda.so
到libcuda.so.1
在同一目录中。 - 将 stubs 目录作为搜索路径添加到
/etc/ld.so.conf.d
,其优先级低于nvidia-docker
安装libcuda.so.1
的目录。 - 调用
ldconfig
刷新库缓存。
如果通过正常 docker
在没有 GPU 的主机上使用图像,tensorflow 会加载存根并将所有操作放在 CPU 上。如果图像通过 nvidia-docker
在具有 GPU 的主机上使用,tensorflow 会加载已安装的库并在 GPU 上放置适当的操作。完整示例 here.