我有一些使用张量流训练神经网络的 python 代码。
我已经基于运行 python 脚本的 tensorflow/tensorflow:latest-gpu-py3 图像创建了一个 docker 图像。
当我启动 EC2 p2.xlarge 实例时,我可以使用以下命令运行我的 docker 容器
docker run --runtime=nvidia cnn-userpattern train
包含我的代码的容器运行时没有错误并使用主机 GPU。
问题是,当我尝试在 AWS Sagemaker 训练作业中使用实例 ml.p2.xlarge 运行相同的容器(我也尝试使用 ml.p3.2xlarge)时,算法失败并显示错误代码:
导入错误:libcuda.so.1:无法打开共享对象文件:没有这样的文件或目录
现在我知道该错误代码的含义了。说明docker主机的运行环境没有设置为“nvidia”。 AWS文档说用于运行docker镜像的命令始终是
docker run image train
如果 docker/daemon.json 中的默认运行时设置为“nvidia”,则该方法可以工作。有没有办法编辑主机 daemon.json 或告诉 Dockerfile 中的 docker 使用“--runtime=nvidia”?
在 AWS 支持服务的帮助下,我们找到了问题。
正如我所说,我用来运行代码的 docker 镜像是tensorflow/tensorflow:latest-gpu-py3(可在https://github.com/aws/sagemaker-tensorflow-container https://github.com/aws/sagemaker-tensorflow-container)
“最新”标签此时指的是版本 1.12.0。问题不是我自己的,而是这个版本的 docker 镜像的问题。
如果我将 docker 镜像基于tensorflow/tensorflow:1.10.1-gpu-py3,它会按预期运行并完全使用 GPU。
显然,AWS sagemaker的所有GPU实例上的docker/daemon.json中的默认运行时设置为“nvidia”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)