前端机器学习的利器,更快的 Pipcook 1.2
转眼两个月的时间过去了,Pipcook 迎来了第二个稳定版(v1.2)的发布,接下来就看看,在这个版本中都有哪些改进和提升吧。
在过去的两个多月,开发团队针对服务的启动、插件安装以及 Pipeline 的执行时间都做了针对性的优化,尤其是之前被内部用户吐槽最多的执行 Pipeline 开始训练的时间,从之前的需要5分钟以上才能开始训练模型,到现在优化过的 Pipeline 只需要10秒内就可以开始了。
训练模型更快
在 v1.0 版本中,每个 Pipeline 中分为不同的阶段,比如负责收集数据集的 DataCollect,以及负责定义模型的 ModelDefine,或者是用于处理数据集的 DatasetProcess。在上一个稳定版本中,训练一个简单的组件(图片)分类的任务就需要花费将近2分钟来处理数据(时间随数据集的大小线性增长)。
这其中的原因有两个:
在 v1.0 Pipeline 的定义中,在前一个阶段没有完全处理完数据前,是不会进入下一个阶段的,但其实比如在数据收集和处理的过程中,有大量的 I/O 等待时间和 CPU 空闲时间。
在 v1.0 Pipeline 的定义中,数据类插件(DataCollect、DataAccess、DataProcess)之前都是通过文件的路径来传递的,这不仅使得在一次 Pipeline 的过程中会增长大量重复的磁盘读写操作,还使得一些像归一化(Normalization)这样针对数字进行的计算无从做起。
于是在 PR#410(https://github.com/alibaba/pipcook/pull/410) 中,通过引入了异步 Pipeline 的机制,并使用 Sample 作为插件之间传递数据的单元,这样做的好处是:
一旦前一个插件产出第一个 Sample,便能够开始加载后面的插件,这样就解决了之前后续插件需要等待数据全部处理完的问题,大大提前了训练开始的时间。
减少了不必要且重复的读写操作,插件之间将 Sample 放到内存中传递,并且处理后的值就存储在内存中,供后面阶段的插件使用。
在异步 Pipeline 的帮助下,我们成功将 Pipeline 进入训练的时间由1分15秒降低到11秒,同时也缩短了整体的训练时间。
插件安装更快
在新版本中,我们也优化了插件安装的流程,在现在 Pipcook 中的大部分 Pipeline 还是依赖于 Python 生态的,因此在安装这些插件时,会同时安装 Python 和 Node.js 的依赖,而在 v1.2 之前,Pipcook 都是串行安装的,于是在 PR#477(https://github.com/alibaba/pipcook/pull/477) 中,我们将 Python 和 Node.js 包的安装并行化,从而减少了总体的安装时间。
在后续的版本中,我们依然会继续挖掘并行化所带来的优化,尝试将每个安装任务(Python 和 Node.js 包)统一分析后调度安装任务,以实现更合理的并行安装。
初次启动更快
从 Pipcook 1.2 开始,用户将不再需要在本地安装 Pipboard 了,我们将 Pipboard 通过 Vercel 部署成了在线服务,并将代码全部迁移到了 https://github.com/imgcook/pipboard 下。
用户通过 https://pipboard.vercel.app/ 即可使用 Pipboard 的功能,不过目前仍然有一些需要调整的部分,比如还不支持使用远程的 Pipcook Daemon 等。
Pipboard 后续的发布周期将独立于 Pipcook,也就是说,我们鼓励大家基于 Pipcook SDK 开发属于自己的 Pipboard,而 Pipboard 本身将是作为 Demo 或者默认提供的示例性应用提供。
支持 Google Colab
如果持续关注 Pipcook 的用户一定很早就发现,官方文档中的部分教程的开头增加了 Google Colab 的链接!是的,Pipcook 支持在 Google Colab 上运行了,这意味着对于受困于没有 GPU 的初学者而言,可以通过 Google Colab 上免费的 GPU/TPU 来学习 Pipcook 了,只需从下面两个链接开始,即可开始你的前端组件识别之旅:
分类图片中的前端组件(https://alibaba.github.io/pipcook/#/zh-cn/tutorials/component-image-classification)
识别图片中的前端组件(https://alibaba.github.io/pipcook/#/zh-cn/tutorials/component-object-detection)
面向算法工程师的插件 Python 运行时
为了方便算法工程师以更低门槛地为 Pipcook 贡献模型,我们增加了对纯 Python 运行时的支持,对于贡献者来说,除了需要额外定义一个 package.json 外,不需要写任何 JavaScript 代码就能完成插件(模型类)的开发,并且为了方便算法工程师简单地上手,我们基于 Python 的插件运行时,开发了一条 NLP(NER)的 Pipeline,相关的插件如下:
https://github.com/imgcook/pipcook-plugin-tensorflow-bert-ner-model
https://github.com/imgcook/pipcook-plugin-tensorflow-bert-ner-model-train
https://github.com/imgcook/pipcook-plugin-tensorflow-bert-ner-model-evaluate
Pipcook SDK 发布
正如前面提到的,我们将 Pipboard 移出了 Pipcook 并独立发布,就是希望开发者们通过 Pipcook SDK 能够开发适合自己需要的 Pipboard 或者其他任何形式的应用,因此我们将在 v1.2 正式发布 Pipcook SDK,它支持在 Node.js 与 JavaScript 运行环境使用指定 Pipcook 服务来完成 Pipeline 和训练任务的管理。
const client = new PipcookClient('your pipcook daemon host', port);
const pipelines = await client.pipeline.list(); // 显示当前所有的 pipeline
Pipcook SDK API 文档:https://alibaba.github.io/pipcook/typedoc/sdk/
Daily(Beta)版本与 Release 版本
为了让用户有选择性的使用 Pipcook,我们这过去两个月针对我们的版本发布周期进行了更新,具体规则如下:
Beta 版本或 Daily 版本,每天会由 CI(GitHub Actions) 系统自动构建与发布,如果你想尝试最新版本的用户可以使用 pipcook init beta 或 pipcook init --beta 获取。
Release 版本
基数版本(如 1.1、1.3 等)为非稳定版,主要合入一些较大的实验性质特性
偶数版本(如 1.0、1.2 等)为稳定版,主要针对稳定性、性能等进行较多的修复和优化
所有 Release 版本都会遵循 Semver2.0 的规范
按照计划,我们将于两个月后发布 Pipcook v1.4,开发团队仍然会将如何让 Pipcook 更“快”,作为工作重心。
比如,现在训练完模型后,如果想要在 Node.js 环境下使用,还是需要非常冗长的步骤来执行 NPM 的安装(其中会安装 Python 和相关依赖),我们希望训练完成后的模型就能直接使用,而不再需要任何繁琐的前置步骤。
模型方面,我们将支持更轻量级的目标检测模型(YOLO/SSD),这对于一些简单场景的目标检测任务也能轻松胜任。
拓展阅读
Pipcook 1.2 roadmap(https://github.com/alibaba/pipcook/issues/441)
Pipcook 1.3 roadmap(https://github.com/alibaba/pipcook/issues/557)
imgcook/awesome-imgcook(https://github.com/imgcook/awesome-imgcook) 包括 Pipcook Book、插件列表以及前端智能化教程
社区
钉钉群号:30624012
Discord 聊天室:https://discord.gg/UbfXzGY