容器成运行机器学习模型的绝佳工具?

机器学习(ML)和人工智能(AI)现在是IT行业的热门话题,当然,容器也实属热门话题之一。在这篇文章中,将两种东西融合在一起,看看是否有协同作用。

目标

虽然纯粹的实验总是很有趣,但至少有一些目标的设定可能会更有针对性。对于这次的实验,设定了以下目标:

·了解一般ML和TensorFlow

·看看ML和容器之间是否有协同作用

·在Kontena上部署正在运行的ML解决方案

在过程中,添加了一个额外的“延伸”的目标,学习一点围棋。设想的最终目标如下:

容器成运行机器学习模型的绝佳工具?

大的想法主要是三重的:

1.有一个简单的使用API,用户可以发送一个JPG图片进行分类

2.在多个实例上运行ML模型,以便在需要时进行扩展处理

3.遵循微服务模式

所有的代码都可以在https://github.com/jnummelin/tensorflow-inception-example上找到。

TensorFlow

TensorFlow是一个使用数据流图进行数值计算的开源软件库。图节点表示数学运算,而图边表示在它们之间流动的多维数据阵列(张量)。这种灵活的架构允许在不重写代码的情况下将计算部署到桌面、服务器或移动设备上的一个或多个CPU或GPU。

非常简单,使用TensorFlow来训练一套训练数据的计算机模型。一旦模型被训练,它可以被用来分析尚未知的数据。分析可以是例如图像分类。一般来说,模型可以预测输入数据与训练模型中某些“已知”模式的匹配程度。

在这篇文章中,不会深入探讨如何训练模型,因为这需要更深入地理解机器学习的概念以及对TensorFlow的深入了解。 TensorFlow人员已经准备好模型训练的好教程,但仍需要检查一下。一个小建议,你可以看看HBO的硅谷是如何建立起他们著名的识别热狗的移动应用的程序。

一旦TensorFlow模型建立起来,它可以很容易地使用,而不需要任何沉重的后端服务器。

TensorFlow模型和容器

实验的目标之一是找出机器学习和容器之间是否有协同作用。从作者的角度来看事实如此。

TensorFlow允许导出预先训练好的模型,稍后在其他地方使用。这使得甚至可以在移动设备上使用ML模型来查看图片是否包含热狗。这也使容器真正成为运送和运行机器学习模型的绝佳工具。

使用容器的一个看似不错的方法是使用Docker的新的多阶段构建。

容器成运行机器学习模型的绝佳工具?

第一步,命名模型构建器,下载一个预先训练的模型检查点。然后输出模型供TensorFlow服务系统使用。

第二步将准备好的模型数据从第一步复制到图中,以供其服务。所以最终的输出是一个Docker镜像,其中包含了预先打包好的所有东西,所以可以用一个docker run命令为我们的机器学习模型服务。从机器学习新手的角度来看,使用单个命令运行机器学习听起来相当不错。

可以使用现成的基础镜像作为起点,以节省安装TensorFlow软件包的一些工作。这些资源可以在https://github.com/bitnami/bitnami-docker-tensorflow-serving和https://github.com/bitnami/bitnami-docker-tensorflow-inception中找到。

API

TensorFlow Serving使用grpc API来为模型服务。由于一般机器学习的复杂性,API也有些复杂。至少它不适合任何随机客户端程序,以轻松发送jpg图像进行分类。使用grpc API将意味着编译protobuf IDL并发出复杂的请求。所以我认为这个解决方案确实需要一个更合适的API,可以通过网页发布一个图像,并获得分类结果。

如上所述,最终还添加了一个新的目标:学习一点围棋游戏。 Go进入了API目标列表,这样编写一个接收jpg图像的API,将其称为grpc 并进行分类。一如既往,理论和实践是两回事。 API本身实际上很容易启动和运行。只有使用生成的grpc协议缓冲区代码才会遇到困难。看来有一些协议问题 - >对多个包进行转换处理。最终用一个快速的搜索和替换来“修复”了一些包导入到生成的代码中。

所以基本上API只接受一个jpg文件,将其转换为grpc请求,用于提供TensorFlow服务,并以JSON的方式返回给定的分类结果。

运行模型和API

一旦所有东西都在容器图像中,将它全部部署在任何容器业务流程系统上当然是相当简单的。因此,这儿会使用Kontena作为部署目标。

解决方案中最复杂的部分是机器学习模型,但现在即使是作为独立容器运行,事情也变得非常简单:

容器成运行机器学习模型的绝佳工具?

在这个例子中省略了loadbalancer配置。查看GitHub存储库以获取更详细的部署。

测试

现在使用TensorFlow模型前面的简化API,可以很容易地使用普通卷曲测试图像分类:

容器成运行机器学习模型的绝佳工具?

分数越高越好。所以,我们的ML模型能够弄清楚这张照片是一只熊猫。作为参考,这是张贴的图像:

容器成运行机器学习模型的绝佳工具?

想知道这个设置如何处理热狗图像嘛?

容器成运行机器学习模型的绝佳工具?

看起来相当不错,与其他任何类别相比,识别热狗这一组有不错的成绩。

总结

在容器中使用TensorFlow模型确实提供了一个非常好的部署方法。通过使用示例中显示的架构模式,设置可扩展的解决方案以基本服务于TensorFlow模型非常简单。

接下来是什么?

在许多情况下,使用预先创建的模型当然不符合现实情况。与任何学习一样,这是一个需要反馈的过程,它会放大学习,产生更多更准确的结果。作者考虑通过建立一个恒定的模型训练器来扩展方法,在这个模型训练器中可以推回结果。用户可以选择一些Web UI,例如哪个类是正确的,甚至发布新的类。这会将信息提供给不断建立模型的东西。也可以定期导出模型,从而为模型容器触发一个新的构建,这将是相当直接的。

相关推荐