開發與維運

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

作者 | 雷姆(Yorkie)

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

重要特性一覽

在過去的兩個多月,開發團隊針對服務的啟動、插件安裝以及 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),這對於一些簡單場景的目標檢測任務也能輕鬆勝任。

拓展閱讀


image.png
關注「Alibaba F2E」
把握阿里巴巴前端新動向

Leave a Reply

Your email address will not be published. Required fields are marked *