我正在使用nvidia-docker
从docker容器访问GPU。但是,并非我们所有的机器都有GPU,而且当GPU不可用时,我想自动回退到CPU版本。
我是否必须构建单独的docker镜像 - 一个用于CPU,一个用于GPU - 或者是否可以安装tensorflow
和tensorflow-gpu
并选择正确的变体,具体取决于GPU是否为可用?
答案 0 :(得分:1)
使用普通$output .= '
<img src="http://localhost/banner/'.$row["banner_image"].'" alt="'.$row["banner_title"].'" />
(而不是docker
)启动时,GPU版本的tensorflow无法加载到容器中,因为缺少库nvidia-docker
。我们设法通过三个步骤为不同的主机使用相同的图像:
libcuda.so.1
链接到同一目录中的/usr/local/cuda/lib64/stubs/libcuda.so
。libcuda.so.1
的搜索路径,其优先级低于/etc/ld.so.conf.d
挂载libcuda.so.1
的目录。nvidia-docker
刷新库缓存。如果图像在没有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。