如何在我的 docker 容器中启动具有 GPU 访问权限的 AWS Sagemaker 训练作业?

How do I start an AWS Sagemaker training job with GPU access in my docker container?

我有一些 python 代码可以使用 tensorflow 训练神经网络。

我根据 tensorflow/tensorflow:latest-gpu-py3 图像创建了一个 docker 图像,运行 是我的 python 脚本。 当我启动 EC2 p2.xlarge 实例时,我可以使用命令 运行 我的 docker 容器

docker run --runtime=nvidia cnn-userpattern train

和包含我的代码 运行 的容器没有错误,并且使用主机 GPU。

问题是,当我尝试 运行 实例 ml 的 AWS Sagemaker 训练作业中的同一容器时。p2.xlarge(我也尝试过 ml.p3.2xlarge),算法失败,错误代码:

ImportError: libcuda.so.1: cannot open shared object file: No such file or directory

现在我知道那个错误代码是什么意思了。这意味着 运行 主机的 docker 时间环境未设置为 "nvidia"。 AWS 文档说用于 运行 docker 图像的命令总是

docker run image train

如果在 docker/deamon.json 中将默认 运行 时间设置为 "nvidia",这将起作用。有什么方法可以编辑主机 deamon.json 或告诉 Dockerfile 中的 docker 使用“--运行time=nvidia”?

在 AWS 支持服务的帮助下,我们找到了问题所在。 正如我所说,docker 我用来 运行 我的代码的图像是 tensorflow/tensorflow:latest-gpu-py3(在 https://github.com/aws/sagemaker-tensorflow-container 上可用)

"latest"标签此时指的是1.12.0版本。问题不是我自己的,而是这个版本的 docker 图像。

如果我的 docker 图像基于 tensorflow/tensorflow:1.10.1-gpu-py3,它 运行 会正常使用 GPU。

显然在 AWS sagemaker 的所有 GPU 实例上 docker/deamon.json 中的默认 运行time 设置为 "nvidia"。