「机器学习」我们想研发一个机器学习框架,6 个月后失败了


「机器学习」我们想研发一个机器学习框架,6 个月后失败了
本文插图
「机器学习」我们想研发一个机器学习框架,6 个月后失败了
本文插图
如何从先期的失败中找到一条成功之路 , 本文试图作了一番探讨 。 ——Caleb Kaiser写于2020年4月24日 。
作者 | Caleb Kaiser
编译 | 苏本如
出品 | AI科技大本营(ID:rgznai100)
2019年初 , 我们几个人尝试构建一个端到端的机器学习(ML – Machine Learning)框架 。 我们从这次尝试中得到的基本体会是 , 构建机器学习管道是一个令人沮丧的、毫无逻辑的体验 , 而且我们应该可以构建更好的东西 。
这次尝试并没有按照原先计划地进行 。
我将在本文对这次尝试作一个详尽地介绍 , 下面先介绍大致情况:

  • 我们使用Kaggle数据集为机器学习管道的数据接收、训练、部署等不同阶段编写了抽象 。
  • 我们将代码库开源并共享 。 一个月后 , 我们的项目登上了HN的首页 。 每个人都喜欢那些改进机器学习用户体验的想法 。
  • 六个月后 , 我们只收获了几百颗GitHub星星 , 几乎没有人使用它 。 我们不得不将我们的傲气搁到一边 , 删除了代码库中90%的代码 。
在经历了以上这些过程后 , 我们构建了一个更好的项目 - Cortex , 我们的模型服务基础设施 。 对于任何对机器学习研究和/或应用感兴趣的人来说 , 我们想让这个过程成为一种警示:
生产型机器学习系统确实需要更好的用户体验 , 但是机器学习生态系统是非常复杂和不断变化的 , 这使得构建一个涵盖大量用例的解决方案非常困难 。
「机器学习」我们想研发一个机器学习框架,6 个月后失败了
本文插图
为什么想构建端到端的机器学习框架? 我们大多数人(Cortex的贡献者)都有devops和web开发的背景 , 习惯于将应用程序的不同层抽象为单个接口的框架 。
当我们进入机器学习时 , 每个人都被工具的支离破碎所震惊 。 我们想构建推荐引擎和聊天机器人(或者更确切地说 , 会话代理) , 但在这样做的过程中 , 我们发现自己不得不在不同的环境之间(Jupyter Notebook、终端、AWS控制台等等)跳跃 。 然后把包含有胶水代码和TensorFlow样板文件的整个文件夹写到一起 , 用一个称为“管道”的强力胶带粘合起来 。
如果我们可以用一个配置文件和命令粘合在一起来代替以上所有的步骤 , 比如:
$ deploy recommendation_engine 那显然是个好的主意 。
所以我们就这么做了 。 我们构建了这样的一个框架 , 它使用Python转换数据 , 使用YAML构建管道 , 并使用一个CLI(命令行界面)控制所有步骤:
「机器学习」我们想研发一个机器学习框架,6 个月后失败了
本文插图
当你使用我们支持的窄技术堆栈 , 同时加上对API的限制 , 向它提供Kaggle数据集时 , 成为了一个非常好的框架 。
然而 , 如果你想尝试在现实世界中使用它 , 基本上很可能它不会与你的技术堆栈一起工作 。 毫无疑问这是一个问题 。 虽然这个问题的其中一部分原因归结于我们的设计 , 但很大一部分原因实际上是因为构建端到端机器学习框架的固有局限 , 我们只是在构建了这个端到端机器学习框架之后才发现这一点 。
「机器学习」我们想研发一个机器学习框架,6 个月后失败了
本文插图
端到端机器学习框架的问题
简单的一种说法是:对于端到端的框架来说 , 生产型机器学习生态系统太简单 , 不可能既不灵活又正确无误 。
机器学习工程师希望使用更好的UX工具 , 这一点我们没有错 。 我们的错误在于我们以为可以构建一个覆盖多个用例的端到端机器学习框架(特别在只有几个贡献者的情况下) 。