Booking.com如何使用Kubernetes进行机器学习

2018年04月02日 由 nanan 发表 471068 0
Booking.com如何使用Kubernetes进行机器学习

在今年的QCon伦敦会议上,Booking.com的开发者Sahil Dua介绍了他们是如何使用Kubernetes为他们的客户推荐目的地和住宿的机器学习(ML)模型。他特别强调了Kubernetes如何避免容器的弹性和资源匮乏,帮助他们在计算(和数据)密集型且难以并行化的机器学习模型上运行。

Kubernetes隔离(过程不需要争夺资源)、弹性(基于资源消耗的自动扩展或缩减)、灵活性(能够快速尝试新的库或框架)和GPU支持(尽管Kubernetes支持NVIDIA GPU仍在α,它允许20到50倍的速度改进)是Booking.com在其规模上运行大量ML模型的关键(大约每天预订150万个房间和每月4亿个访问者)。指定一个pod而需要一个GPU资源,这告诉Kubernetes将其安排在具有GPU单元的节点上:
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1

每个模型在容器内作为无状态应用程序运行。容器映像不包含模型本身,它是在启动时从Hadoop中进行检索。这样可以保持图像较小,避免每次有新模型时都需要创建新图像,从而加快部署速度。一旦部署完毕,模型将通过REST API公开,Kubernetes将开始探测容器,以便随时接收预测请求,直到最终流量开始指向新容器。

除了Kubernetes的自动缩放和负载平衡之外,Dua还透露了在Booking.com上使用的其他技术,用于优化模型的延迟,即将模型保存在容器的内存中,并在启动后对其进行预热(谷歌的ML框架—TensorFlow,发出初始请求的运行速度通常比其他运行速度慢)。但并不是所有的请求都来自实时系统,在某些情况下,预测可以预先计算并存储以便以后使用。对于后者来说,优化吞吐量(每单位时间完成的工作量)更为重要。Dua说,分批请求和并行处理异步请求可以减少网络开销并提高吞吐量。

ML模型需要接受预先选择的数据集进行训练,然后才能提供Booking.com所需的预测。该过程的训练部分也在Kubernetes基础设施上运行。容器中训练发生的基础图像仅包含所需的框架(如TensorFlow和Torch),并从Git存储库获取实际的训练代码。同样,这使得容器图像变小,避免了新版本代码的图像泛滥。训练数据是从Hadoop集群获取的,一旦模型准备就绪(训练工作量完成),它将被导出回Hadoop。
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消