转眼两个月的时间过去了,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 中,通过引入了异步 Pipeline 的机制,并使用 Sample 作为插件之间传递数据的单元,这样做的好处是:
- 一旦前一个插件产出第一个 Sample,便能够开始加载后面的插件,这样就解决了之前后续插件需要等待数据全部处理完的问题,大大提前了训练开始的时间。
- 减少了不必要且重复的读写操作,插件之间将 Sample 放到内存中传递,并且处理后的值就存储在内存中,供后面阶段的插件使用。
在异步 Pipeline 的帮助下,我们成功将 Pipeline 进入训练的时间由1分15秒降低到11秒,同时也缩短了整体的训练时间。
插件安装更快
在新版本中,我们也优化了插件安装的流程,在现在 Pipcook 中的大部分 Pipeline 还是依赖于 Python 生态的,因此在安装这些插件时,会同时安装 Python 和 Node.js 的依赖,而在 v1.2 之前,Pipcook 都是串行安装的,于是在 PR#477 中,我们将 Python 和 Node.js 包的安装并行化,从而减少了总体的安装时间。
在后续的版本中,我们依然会继续挖掘并行化所带来的优化,尝试将每个安装任务(Python 和 Node.js 包)统一分析后调度安装任务,以实现更合理的并行安装。
初次启动更快
从 Pipcook 1.2 开始,用户将不再需要在本地安装 Pipboard 了,我们将 Pipboard 通过 Vercel 部署成了在线服务,并将代码全部迁移到了 imgcook/pipboard 下。
用户通过 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 了,只需从下面两个链接开始,即可开始你的前端组件识别之旅:
面向算法工程师的插件 Python 运行时
**
为了方便算法工程师以更低门槛地为 Pipcook 贡献模型,我们增加了对纯 Python 运行时的支持,对于贡献者来说,除了需要额外定义一个 package.json 外,不需要写任何 JavaScript 代码就能完成插件(模型类)的开发,并且为了方便算法工程师简单地上手,我们基于 Python 的插件运行时,开发了一条 NLP(NER)的 Pipeline,相关的插件如下:
- pipcook-plugin-tensorflow-bert-ner-model
- pipcook-plugin-tensorflow-bert-ner-model-train
- 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 文档:点击这里。
Daily(Beta) 版本与 Release 版本
**
为了让用户有选择性的使用 Pipcook,我们这过去两个月针对我们的版本发布周期进行了更新,具体规则如下:
- Beta 版本或 Daily 版本,每天会由 CI(GitHub Actions) 系统自动构建与发布,如果你想尝试最新版本的用户可以使用 pipcook init beta 或 pipcook init --beta 获取。
- Release 版本
下版本计划(v1.4)
按照计划,我们将于两个月后发布 Pipcook v1.4,开发团队仍然会将如何让 Pipcook 更“快”,作为工作重心。
比如,现在训练完模型后,如果想要在 Node.js 环境下使用,还是需要非常冗长的步骤来执行 NPM 的安装(其中会安装 Python 和相关依赖),我们希望训练完成后的模型就能直接使用,而不再需要任何繁琐的前置步骤。
模型方面,我们将支持更轻量级的目标检测模型(YOLO/SSD),这对于一些简单场景的目标检测任务也能轻松胜任。
拓展阅读
- Pipcook 1.2 roadmap(已关闭)
- Pipcook 1.3 roadmap
- imgcook/awesome-imgcook 包括 Pipcook Book、插件列表以及前端智能化教程
- 社区
- 钉钉群号:30624012
- Discord 聊天室:discord.gg/UbfXzGY