我有一些使用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培训作业中运行相同的容器时,算法失败,并显示错误代码:
ImportError:libcuda.so.1:无法打开共享对象文件:没有这样的文件或目录
现在,我知道该错误代码的含义。这意味着Docker主机的运行时环境未设置为“ nvidia”。 AWS文档说,用于运行docker映像的命令始终为
docker run image train
如果将默认运行时在docker / deamon.json中设置为“ nvidia”,它将起作用。有什么方法可以编辑主机deamon.json或告诉Dockerfile中的docker使用“ --runtime = nvidia”?
答案 0 :(得分:0)
在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”。