作为一名Cortex项目的贡献者,我深知在消费环境中部署机器学习模型的复杂性。这篇文章基于我对机器学习团队的一些观察总结,而非学术研究。
在软件开发中,数据库的例子很典型。对于Postgres的贡献者来说,创建一个数据库可能涉及百万行代码。而对于Rails开发者来说,这只是一个简单的命令行操作。这两种说法都没有错,只是它们适用的场景和使用者有所不同。
同样,软件开发过程中有许多基础组件,如数据库、Web服务器、请求路由器等,因为它们的抽象层使得非专业人士也能使用。然而,机器学习领域长期缺乏类似的抽象层,这限制了其广泛应用。但现在情况正在改变,一系列旨在简化机器学习使用的项目正在涌现。
要在生产环境中使用机器学习,你需要具备以下几点: - 设计模型的专业知识 - 足够的数据和资金来训练模型 - 对机器学习基础设施的知识(用于部署模型)
这些因素导致了每个使用机器学习的项目都需要多位专家亲自参与。这种瓶颈亟需解决。
我们应该让没有机器学习背景的开发者也能在生产环境中使用机器学习,就像开发者不需要密码学背景也可以使用哈希库来保护用户数据一样。
幸运的是,这种情况正在改善。
为了让机器学习得到普及,开发者需要对机器学习有较高的理解水平,并且可以通过可用的抽象层来构建应用程序。许多必要的抽象已经在研究中,它们集中在以下几个关键领域:
理想情况下,对于许多机器学习应用场景,不需要从头开始训练新模型。例如,如果你正在开发一个对话代理,那么Google的Meena可能会比你的模型表现更好。如果你正在开发一个文本生成器,使用OpenAI的GPT-2会比自己构建更好。对于物体检测,YOLOv3可能是最佳选择。
借助迁移学习(即将神经网络的知识微调到新领域的过程),你可以用较少的数据量对开源模型进行微调。例如,使用gpt-2-simple库,你可以通过简单的命令行界面微调GPT-2:
bash
$ gpt_2_simple finetune your_custom_data.txt
通过这一抽象层,开发者不需要深入了解机器学习专业知识,只需要知道如何微调即可。
此外,还有许多其他可用的训练抽象,例如Google Cloud AutoML提供了用户图形界面,用户可以选择自己的数据集并自动生成新模型,而无需编写代码:
Sundar Pichai在一篇文章中提到:“目前设计新的神经网络需要汇集几位博士,而我们希望AutoML能在三到五年内让成千上万的开发者为他们的特定需求设计新的神经网络。”
假设你已经能够轻松地获得一个针对特定任务训练好的模型。如何根据该模型生成预测呢?
有许多项目可以提供模型服务功能,其中许多与流行的机器学习框架相关。例如,TensorFlow有TF Serving,而ONNX有ONNX Runtime。
除了科技巨头外,还有许多独立的开源项目专注于解决这个问题。例如,Bert Extractive Summarizer项目使得使用Google的BERT进行文本摘要变得更加简单。以下是文档中的示例:
python
from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'
body2 = 'Something else you want to summarize with BERT'
model = Summarizer()
model(body)
model(body2)
通过使用这个库,生成预测的过程就像导入一个库并调用一次函数一样简单。
随着更多此类项目的启动和开发,开发者无需深入了解模型本身就能更轻松地生成预测。
最后一个瓶颈在于基础架构。为一个小型应用提供预测是简单而直接的,但当应用需要扩展时,情况就会变得复杂。以GPT-2为例: - GPT-2超过5GB,需要更大的、更昂贵的服务器来托管。 - GPT-2消耗大量计算资源。为了提供单个预测,GPT-2可能需要占用CPU几分钟,即使有GPU也可能需要几秒钟。 - GPT-2消耗大量内存。除了巨大的磁盘空间和计算需求外,GPT-2还需要大量内存才能正常运行。
为了应对大量用户增长,你需要将基础架构扩展到多个应用实例。这意味着需要使用Docker对模型进行容器化,使用Kubernetes对容器进行编排,并通过云平台配置自动扩展。
你需要掌握一系列工具才能搭建好用于处理机器学习部署的基础架构,而大多数不具备专业背景的开发者对这些工具不够熟悉。
为了让开发者能够使用机器学习,需要对机器学习的基础架构进行抽象。这就是像Cortex这样的项目出现的原因。
Cortex通过配置文件和命令行界面对模型部署的基础开发进行了抽象:
Cortex这类项目的目标很简单:将训练好的模型转化为任何开发者都能使用的预测API。
我想强调的是,机器学习背后的数学原理将永远难以理解。仅会调用predict函数并不能成为机器学习专家。重点在于,开发者不必成为机器学习专家就能在自己的应用中使用机器学习。
机器学习生态系统终于开始重视简化应用型机器学习。即使是只有少量机器学习知识的开发者也可以对最新模型进行微调,将其封装在API中,并通过开源、直观的抽象层将其部署在可扩展的基础架构上。
最终结果是,应用型机器学习将变得更容易——并且通过这种扩展,几乎所有开发者都能使用机器学习了。
原文链接:https://towardsdatascience.com/machine-learning-is-still-too-hard-to-use-e344773725af
作者简介:Caleb Kaiser,Cortex Labs创始团队成员。