我创建了一个 cloudformation 模板,希望能够启动具有必要依赖项的 ec2 实例(这些依赖项在 UserData 中作为 bash 安装),以利用 docker 容器中的 GPU 硬件。主要依赖项有:1) nvidia 驱动程序、2) docker 和 3) nvidia-docker2。
前两个依赖项按预期安装,运行一段时间后可以通过 1) nvidia-smi
进行验证,和docker --version
。然而,第三个依赖项始终不安装。
这里是我的 UserData bash 的相关部分供引用:
# install gpu stuff
apt-get install linux-headers-$(uname -r)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-$distribution.pin
mv cuda-$distribution.pin /etc/apt/preferences.d/cuda-repository-pin-600
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/7fa2af80.pub
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64 /" | tee /etc/apt/sources.list.d/cuda.list
apt-get update
apt-get -y install cuda-drivers
# install docker on system
curl https://get.docker.com | sh
systemctl start docker && systemctl enable docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get -y install nvidia-docker2 > /var/log/mason
# add nvidia runtime stuff
# echo "{ \"runtimes\": { \"nvidia\": { \"path\": \"/usr/bin/nvidia-container-runtime\", \"runtimeArgs\": [] } } }" >> /etc/docker/daemon.json
systemctl restart docker
我尝试从 apt-get -y install nvidia-docker2
通过管道传输标准输出到日志文件,但日志仅显示:
Reading package lists...
Building dependency tree...
Reading state information...
似乎被困在那里。
其他潜在的有用信息:
- AMI:ubuntu 18.04 镜像
我还将注意到,我能够通过 SSH 进入实例并安装 apt-get -y install nvidia-docker2
在命令终端中顺利(或任何用户提示或任何东西)。
任何人都可以帮我弄清楚如何解决此问题,或者有人在我上面分享的内容中发现任何潜在的问题吗?到文件的标准输出管道是我所知道的调试此类问题的唯一技巧。如果我可以更新/编辑这篇文章以使这个问题更容易调试,请告诉我。
最佳答案
基于评论。
该问题是由于添加 nvidia-docker2
存储库后未更新 ubuntu 的存储库而导致的。
解决方案是在添加存储库后运行apt-get update
。
关于bash - Nvidia-Docker2 不会安装在 Cloudformation UserData bash 脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64357252/