dyweb / papers-notebook

:page_facing_up: :cn: :page_with_curl: 论文阅读笔记(分布式系统、虚拟化、机器学习)Papers Notebook (Distributed System, Virtualization, Machine Learning)
https://github.com/dyweb/papers-notebook/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3ATODO-%E6%9C%AA%E8%AF%BB
Apache License 2.0
2.12k stars 244 forks source link

TensorFlow-Serving: Flexible, High-Performance ML Serving #148

Open gaocegege opened 5 years ago

gaocegege commented 5 years ago

https://arxiv.org/abs/1712.06139

gaocegege commented 5 years ago

这篇文章介绍了 https://github.com/tensorflow/serving/ 和谷歌内部的 Cloud ML 上的 Serving 服务两方面的内容。

TFServing 本身是一个高度模块化的实现,不过文章里提到的模块与 TFServing 自身的文档相比,已经有些变化了,最新应该去看文档:https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/architecture.md

这里着重讲一下 Google Cloud 上的模型服务是怎么工作的。

Screenshot from 2019-06-13 14-07-29

这个系统叫做 TFS,系统被抽象地很高级,用户只需要添加或者删除模型,或者是模型的版本,就可以使用。这些请求会被 Controller 处理。它会估计一下模型大致需要多少的内存,然后选择一个有足够内存的 Serving Job,把它运行上去。资源需求的计算是根据用户提供的一些信息来进行的。Controller 本身依靠 Spanner 保持状态。

一旦被分配给了一个 Serving Job,模型会首先由 Synchronizer 通知 Serving Job 去 load 进去。然后它会指示 Serving Job 要把哪些 model load 到内存里,并且 Serving Job 会给它汇报状态。然后接下来 Synchronizer 会通知 router,哪些 model 已经 load 好了,可以把流量打过去。Router 这一层也用了跟微软那篇 #147 一样的 Backup Request 的方式保证 Serving 的 SLA。