机器学习容器化:TensorFlow、Kubernetes和Kubeflow
虽然ML迄今已成功解决了特定的任务,但分析参数更复杂的数据需要能够大规模部署简化操作的模型。这种机器学习将使计算机能够从更多数量的信息中找到解决方案并使之自动化。由于这些原因,估计到2020年AI和ML会成为推动云计算采用的主要催化剂。ML需要大规模高效学习,并与云原生技术(尤其是容器化)集成,以便处理云端的一大批可用信息。
为此,谷歌最近宣布开发Kubeflow,这种可组合、可移植、可扩展的ML堆栈基于Kubernetes构建而成。它为ML模型连接到容器上提供了一个开源平台,将数据与计算放在一块执行,而不是在叠加层内执行。
Kubeflow有助于解决实现ML堆栈的固有难题。构建生产级ML解决方案需要导入、转换和可视化数据,然后大规模构建、验证、训练和部署模型。这些堆栈经常用不同的工具构建而成,使得算法管理起来很复杂、结果不一致。Kubeflow 1.0提供的软件包将各种ML工具(尤其是TensorFlow和JupyterHub)合并成一个堆栈,在拥有Kubernetes的多云环境中可以轻松传输。
TensorFlow
Kubeflow依靠开源编程系统TensorFlow来构建机器学习模型。它的软件库使用张量几何结构,以有状态的数据流图这种形式来表示数据之间的线性关系。它将硬件平台抽取出来,让模型可以在CPU(中央处理单元)、GPU(图形处理单元)或TPU(张量处理单元)上运行。这些共同为低精度算术计算的高吞吐量构筑了基础。这种灵活的架构让它得以汇集来自各个对象的信息,从桌面系统、集群、服务器、移动设备到边缘设备,不一而足。
虽然TensorFlow用起来困难且复杂,但非常适合创建高级复杂的ML模型,这种模型需要可移植、可扩展的数据管理。
JupyterHub
Kubeflow直接从Jupyter笔记本(notebook)执行TensorFlow计算图。Jupyter笔记本对容器友好,可以在Kubernetes或任何类型的开源基础设施上运行。它们为用户提供了可轻松实现ML模型的环境和资源,没有安装和维护带来的开销。它们的文档样式格式将代码和标记(markdown)嵌入到同样的文件中,从而提供计算的可见性。JupyterHub让工程师可以立即执行TensorFlow图或存储供以后使用,从而更有效地控制TensorFlow模型的配置。 Kubeflow依赖JupyterHub用于协作和交互式训练。
Kubeflow的堆栈包含另外几个解决方案,可以补充TensorFlow模型的执行。Argo用于工作流调度,SeldonCore用于复杂推理和非TensorFlow Python模型,Ambassador用作反向代理。该堆栈与Kubernetes集成,让工程师可以高效地大规模开发、训练和部署ML模型。
Kubernetes
Kubernetes是一种可靠的开源容器编排工具。它将应用程序设计标准化为模块化、可移植、可扩展的微服务,以便将复杂的工作负载部署到不同环境中。它采用丰富的API,可以自动执行众多操作功能。Kubeflow的平台利用Kubernetes简化TensorFlow模型的操作,并使其执行具有云原生特性。
- 可移植性和可扩展性:Kubernetes让TensorFlow模型可以作为微服务加以模块化管理,使其具有高度可移植性和可扩展性。它们可以在不同的环境、平台和云提供商之间轻松移动。传统上,ML堆栈是不可移动的,将模型及其相关依赖项从笔记本电脑迁移到云集群的过程需要重新设计架构方面的大量工作。Kubeflow让这些算法访问数据的速度可以与执行速度一样快。
- 自动化和易操作性:Kubernetes提供用于管理微服务的丰富的声明式API库,帮助应用程序采用端到端自动化。Kubernetes负责处理资源管理、作业分配以及历来很费时的其他操作问题。Kubeflow让工程师得以专注于编写ML算法而不是管理操作。