我有一个持久性服务器,它无法预测地从用户那里接收新数据,需要大约10个GPU实例在大约5分钟内解决该问题,然后将答案发送给用户。服务器本身是一个便宜的,永久持久的单CPU Google Cloud实例。收到用户请求时,我的代码会使用
启动我创建的10个但已停止的Google Cloud GPU实例gcloud compute instances start (instance list)
在极少数情况下,如果检测到停止的实例不存在(有时将它们擦除),并使用它们重新创建
gcloud beta compute instances create (...)
此系统一切正常。我唯一的抱怨是,即使使用已创建但已停止的实例,在我的GPU代码最终开始运行之前的启动时间约为5分钟。大部分时间只是实例本身启动其Ubuntu主机并调用我的代码的时间。.Ubuntu运行后启动GPU的延迟仅约10秒。
如何减少5分钟的延迟?我想其中大部分来自Google,必须将4GB的实例数据复制到目标计算机,但是(普通)Ubuntu的启动时间可能会增加1分钟。我什至不确定是否可以单独量化这两个数字,我只能测量从启动到代码开始响应之间的3-7分钟的总延迟。
我不认为Ubuntu操作系统的启动时间是启动延迟的主要因素,因为我从开机启动开始就在台式机上为具有相同Ubuntu和GPU的实际计算机计时,并且它在46秒内开始运行我的GPU代码。 / p>
我的目标是尽快将结果返回给用户,而5分钟的启动延迟是一个瓶颈。
是否可以将SIZE缩小为2GB?我还能做些什么来减少延迟?
答案 0 :(得分:3)
2GB大。那是一个heckuva的大形象。您应该能够将其减少到100MB,也许使用Alpine而不是Ubuntu。
复制4GB数据也不理想。鉴于此,我怀疑解决方案将更多是架构更改而不是代码更改。
但是,如果您想对不涉及4GB数据的所有内容大加赞赏,则可以为VM准备自定义映像。如果您可以构建一个苗条的自定义图片,这会有所帮助。
这里有很多可供学习的资源,我将首先介绍的两个资源包括: -Improve GCE Boot Times with Custom Images -Three steps to Compute Engine startup-time bliss: Google Cloud Performance Atlas