Jina 是一个基于云原生的多模态应用框架,开发者使用 Jina 可以轻松构建、部署和维护高性能的云原生应用。你可能认为这些都只是空泛的营销口号,甚至产生疑问,到底什么是云原生?对构建多模态应用有什么帮助?它是否只是 Jina 为了获得投资而许下的空洞承诺呢?
在本文里,我们将跟随一家电商公司的机器学习工程师小博,一起回顾他最近所负责的项目:搭建一个 以图搜图服务。通过这项服务,用户只需上传一张图片,便可以使用机器学习技术精准地搜索出相似的商品。我们将深入探究小博是如何完成这一挑战的,并解答文章开头提到的云原生相关问题。
小博的开发之旅
01
原型设计
以图搜图系统通常有两种模式:
索引,创建库存中所有商品的可视化表示。
检索,接收用户上传的照片,并搜索库存中相似的商品。
索引就是创建所有商品的可视化表示,首先利用卷积神经网络提取商品图像的特征,再将提取到的特征存储到数据库中。
检索则是根据用户上传的图片搜索外观相似的商品,因此,需要提取用户上传图像的特征,然后就可以根据向量间的相似度度量(如余弦相似度),搜索得到相似的商品。
为了完成以上任务,小博需要像 PyTorch 这样的深度学习框架,类似 MongoDB 的键值数据库,可能还需要像 Faiss 或 Elasticsearch 这样的向量搜索引擎。作为一名机器学习工程师,小博很熟悉 PyTorch 和原型设计,并且他聪明过人,精力充沛,所以很轻松就将它们连接在一起,完成了第一个原型设计。
原型 —— 工程界最性感的工具
02
将原型升级为服务
这样就完成了吗?当然没有,一切才刚刚开始。小博的目标可不只是写一堆 Python 函数,为了建立 Web 服务,并且方便其它服务调用,小博还需要利用带有 API 的 Web 框架重构应用。
建立 Web 服务的方法很多,例如:利用 Django 框架。小博创建了一个接收用户上传图片的终端,根据相似度度量,从库存中检索相似的商品。最后,检索的结果会以 JSON 对象的格式返回给用户。
在建立 Web 服务的过程中,小博学习了很多新知识,例如 REST API、Web 服务和 Web 框架,但这些似乎已经超出“机器学习工程师”的能力范围。所以他内心开始产生疑问,是否值得花费这么多时间来学习,但学习新知识总归是好的。
但在内心深处,小博其实觉得他的技能可能还不足以让 Web 服务投入生产。但无论如何,经过一段时间的努力,终于把它们粘合在一起了。
SaaS,Soft-as-Service ——商业中最性感的东西
03
在云端部署
小博的进展成功地吸引了产品团队的注意,他们要求小博将服务部署在 AWS 上,并且提供一些真实的流量进行 A/B 测试。这意味着这个 PoC 将面向公众并拥有第一批用户。在将 Web 服务迁移到云端的过程中,小博遇到了很多问题,主要是依赖问题、CUDA 驱动以及 GPU 的麻烦。最终,他通过将所有内容打