nvidia-docker2容器的首次运行非常缓慢

nvidia-docker2容器的首次运行非常缓慢,docker,amazon-ec2,nvidia,nvidia-docker,Docker,Amazon Ec2,Nvidia,Nvidia Docker,在EC2 p2.xlarge实例上运行启用GPU的docker容器时,在容器开始运行之前,我会经历30到90秒的延迟。后续容器快速启动(延迟1秒) EC2使用NVIDIA驱动程序版本396.54和NVIDIA-docker2运行Ubuntu18.04(遵循官方安装指南:) 我正在使用最新的CUDA官方图像进行测试: docker run--rm nvidia/cuda nvidia smi 我的机器上已启用PersInstance模式。正如在“为什么我的容器从2.0开始很慢?”中所述,它应该是解

在EC2 p2.xlarge实例上运行启用GPU的docker容器时,在容器开始运行之前,我会经历30到90秒的延迟。后续容器快速启动(延迟1秒)

EC2使用NVIDIA驱动程序版本396.54和NVIDIA-docker2运行Ubuntu18.04(遵循官方安装指南:)

我正在使用最新的CUDA官方图像进行测试: docker run--rm nvidia/cuda nvidia smi

我的机器上已启用PersInstance模式。正如在“为什么我的容器从2.0开始很慢?”中所述,它应该是解决方案,但对我不起作用


非常感谢您提供可能导致延迟的原因和解决方法。

我在评论中看到您已经从internet上提取了Docker映像,但是您确定该映像没有保存到EBS快照吗?例如,在使用NVIDIA Docker创建AMI的过程中,您可能已提取该图像并将其保存到根AMI卷

如果是这种情况,则会出现此延迟,因为EBS卷是如何从快照恢复的

来自AWS文档():

。。。从快照还原的卷上的存储块必须初始化(从Amazon S3下拉并写入卷),然后才能访问该块。此初步操作需要时间,并且在第一次访问每个块时会导致I/O操作的延迟显著增加


因此,当您第一次运行Docker容器时,AWS将数据从S3下载到您的EBS卷,这需要一些时间。第二次容器启动时速度很快,因为数据已经在卷上。

可能会问明显的问题,但您是否在第一次执行之前提取了nvidia/cudai映像?如果不是,这是预期的行为,因为它必须首先提取图像,它们至少是0,5 GB。是的,我确实首先提取了图像。30到90秒的延迟时间中不包括提取图像所需的时间。您的答案似乎指向了正确的方向-初始化EBS卷后,容器启动速度要快得多。但与您假设的相反,映像是在EC2启动后下载的,并且不包含在AMI中。我还注意到,当容器在EC2上运行后从EC2创建AMI时(新的AMI包含已退出的容器),延迟要短得多。你确定要下载图像的所有层吗?可能是您正在下载的图像基于已下载到卷中的另一个图像。在下载之前,请使用以下命令检查现有图像:
$docker images-a
。如果您有一些图像,请尝试删除所有图像:
$docker rmi$(docker images-a-q)
,然后下载您的图像。卷上没有图像。所有图像层都在Instance启动后下载。