天天看點

前端機器學習的利器,更快的 Pipcook 1.2

作者 | 雷姆(Yorkie)

轉眼兩個月的時間過去了,Pipcook 迎來了第二個穩定版(v1.2)的釋出,接下來就看看,在這個版本中都有哪些改進和提升吧。

前端機器學習的利器,更快的 Pipcook 1.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 部署成了線上服務,并将代碼全部遷移到了

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 了,隻需從下面兩個連結開始,即可開始你的前端元件識别之旅:

面向算法工程師的插件 Python 運作時

為了友善算法工程師以更低門檻地為 Pipcook 貢獻模型,我們增加了對純 Python 運作時的支援,對于貢獻者來說,除了需要額外定義一個 package.json 外,不需要寫任何 JavaScript 代碼就能完成插件(模型類)的開發,并且為了友善算法工程師簡單地上手,我們基于 Python 的插件運作時,開發了一條 NLP(NER)的 Pipeline,相關的插件如下:

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 的規範

下版本計劃(v.1.4)

按照計劃,我們将于兩個月後釋出 Pipcook v1.4,開發團隊仍然會将如何讓 Pipcook 更“快”,作為工作重心。

比如,現在訓練完模型後,如果想要在 Node.js 環境下使用,還是需要非常冗長的步驟來執行 NPM 的安裝(其中會安裝 Python 和相關依賴),我們希望訓練完成後的模型就能直接使用,而不再需要任何繁瑣的前置步驟。

模型方面,我們将支援更輕量級的目标檢測模型(YOLO/SSD),這對于一些簡單場景的目标檢測任務也能輕松勝任。

拓展閱讀

前端機器學習的利器,更快的 Pipcook 1.2

關注「Alibaba F2E」

把握阿裡巴巴前端新動向