我有一些使用tensorflow训练神经网络的python代码。
我已经基于运行我的python脚本的tensorflow / tensorflow:latest-gpu-py3镜像创建了一个docker镜像。
当我启动EC2 p2.xlarge实例时,可以使用以下命令运行docker容器
docker run --runtime=nvidia cnn-userpattern train
并且包含我的代码的容器运行没有错误,并使用了主机GPU。
问题是,当我尝试使用实例ml.p2.xlarge(我也尝试使用ml.p3.2xlarge)在AWS Sagemaker培训作业中运行相同的容器时,该算法失败,并显示错误代码:
现在,我知道该错误代码的含义。这意味着Docker主机的运行时环境未设置为“nvidia”。 AWS文档说,用于运行docker镜像的命令始终是
docker run image train
如果在docker / deamon.json中将默认运行时设置为“nvidia”,这将起作用。有什么方法可以编辑主机deamon.json或告诉Dockerfile中的docker使用“--runtime = nvidia”?
最佳答案
借助AWS支持服务的一些帮助,我们得以找到问题所在。
正如我所说的tensorflow / tensorflow:latest-gpu-py3(可在https://github.com/aws/sagemaker-tensorflow-container上使用)一样,我用来在其上运行代码的docker镜像是
“最新”标签目前是指1.12.0版。问题不是我自己的,而是此版本的docker镜像。
如果我将docker镜像基于tensorflow / tensorflow:1.10.1-gpu-py3,它将按需运行并完全使用GPU。
显然,在AWS sagemaker的所有GPU实例上的docker / deamon.json中,默认运行时设置为“nvidia”。