時間:2019-12-31 來源:互聯網 瀏覽量:
項目作者:微軟NNI團隊
參與:思源、一鳴
根據 GitHub 項目上的介紹,NNI(Neural Network Intelligence)意圖幫助用戶使用自動機器學習算法、幫助進行算法加速、實現更好的超參數、神經架構和模型壓縮,以及進行平台部署。大約一周前,這一開源項目更新到了 1.2 版本,並有了一個中文的官方文檔。
項目地址:https://github.com/microsoft/nni
從觀察來看,NNI 是相當全麵的 AutoML 庫了,支持很多模型、部署環境、框架和庫,也提供了很多工具和數據集。不僅如此,除了使用 CLI 進行操作之外,還提供了可視化界麵。
NNI 庫特性有什麼
根據微軟 NNI 項目文檔頁麵,我們可以了解到該項目希望自動設計並調優神經網絡架構、複雜係統的參數等。NNI 擁有如下非常優秀的特性。
NNI (Neural Network Intelligence) 是一個工具包,可有效的幫助用戶設計並調優機器學習模型的神經網絡架構,複雜係統的參數(如超參)等。NNI 的特性包括:易於使用,可擴展,靈活,高效。
易於使用:NNI 可通過 pip 安裝,隻需要在代碼中添加幾行,就可以利用 NNI 來調優超參數與模型架構。可擴展:調優超參或網絡結構通常需要大量的計算資源。NNI 在設計時就支持了多種不同的計算資源,如遠程服務器組、OpenPAI 和 Kubernetes 等訓練平台。靈活:除了內置的算法,NNI 中還可以輕鬆集成自定義的超參調優算法、神經網絡架構搜索算法、提前終止算法等等。還可以將 NNI 連接到更多的訓練平台上,如雲計算虛擬機集群、Kubernetes 服務等等。高效:NNI 在係統及算法級別上不停地優化,例如可通過 Trial 早期的反饋來加速調優過程。下圖顯示了 NNI 的體係結構:
在 NNI 中,Experiment 指搜索最優超參組合的任務,它的運行過程可以分為:Tuner 接收搜索空間並生成配置;配置被提交到訓練平台;執行結果返回 Tuner。在每次執行超參搜索時,我們隻需要定義搜索空間,就能利用 NNI 內置的 Tuner/Assessor 以及訓練平台搜索最好的超參組合。
這樣的搜索三步走可以展示為:
NNI 庫的廣泛支持
從功能上,NNI 庫具有命令行(NNICTL)和可視化界麵(NNI Board)兩個部分,用戶可以使用它們進行管理。在 NNI 中,它內置了自動機器學習算法,並為流行的訓練平台提供了很多支持。
具體而言,NNI 支持各種深度學習框架、機器學習庫、很多機器學習算法(如超參調優搜索、神經架構搜索、模型剪枝和壓縮、特征工程等)。除了這些之外,NNI 庫還對部署環境進行了支持,不論是本地、遠程還是基於 Kubernetes 平台都可以使用。
完整的支持功能列表如下:
正確的使用姿勢
在 NNI 的整個架構中,自動模型壓縮、自動特征工程都非常吸引人,但下麵我們主要展示如何三步走搜索模型超參與架構。
超參搜索 超參搜索是 NNI 最核心、基本的功能,其中提供了許多流行的自動調優算法(Tuner)以及提前終止算法(Assessor)。這裏我們可以通過 MNIST 展示如何使用 NNI 搜索最優超參。
首先對於一般的 MNIST 建模,它的主要過程可以描述為:
NNI 項目中使用的是論文 Efficient Neural Architecture Search via Parameter Sharing 中的實現。使用的 py 文件可以在相關文件夾中找到。
目前項目仍在進一步開發的過程中,項目作者表示,希望有更多的誌願者加入到 NNI 的開源工作中,貢獻新的代碼和模型。