Facebook釋出PyTorch 1.1,開源AI模型優化簡化工具BoTorch & Ax

機器之心發表於2019-05-02
美國時間4月30日,Facebook F8 開發者大會在美國加利福尼亞州的聖荷西舉辦。在此次開發者大會期間,Facebook開源了簡化模型優化的工具——BoTorch和Ax,還發布了Pytorch 1.1。

Facebook F8 大會主要面向圍繞該網站開發產品和服務的開發人員及企業家,大會通常包括主題演講以及 Facebook 新產品、新工具的釋出。其名稱源自 Facebook 的 8 小時黑客馬拉松競賽。

在今年的 Facebook F8 大會上,祖克伯談到了過去一年最敏感的隱私問題,稱「過去我們常常是先發布,然後發現問題後再解決」,「未來我們會更加謹慎,諮詢專家做出評估,並採取更為主動積極的應對策略」。

除此之外,Facebook 還發布了 PyTorch 的最新迭代版本——Pytorch 1.1 以及用於簡化模型優化流程的新工具 BoTorch 和 Ax。

開源 Ax 和 BoTorch 簡化 AI 模型優化

在 F8 開發者大會上,Facebook 開源了兩款全新的 AI 工具:Ax 和 BoTorch,讓開發者無需大量資料就能在研究與產品中解決 AI 難題。

據 Facebook 部落格介紹:

  • BoTorch 是一個基於 PyTorch 的靈活、新式的貝葉斯優化庫;

  • Ax 是一個理解、管理、部署、自適應實驗的易獲取、通用 AI 平臺;

貝葉斯優化庫 BoTorch

Facebook釋出PyTorch 1.1,開源AI模型優化簡化工具BoTorch & Ax

專案地址:https://botorch.org (https://botorch.org/)

其實,BoTorch 並非首個貝葉斯優化工具,但 Facebook 發現已有的工具難以擴充套件或者自定義,無法滿足他們日益增長的需求。所以,Facebook 開發了全新的方法,讓它能夠支援多噪聲目標函式優化,可擴充套件到高度並行的測試環境,利用低保真度逼近、優化高維引數空間。

Facebook 利用 PyTorch 的計算能力,重新思考了實現模型和優化程式的路徑,開發出了 BoTorch。整體來說,BoTorch 提供了一個模組化以及用於組合貝葉斯優化原語的易擴充套件介面,包括概率代理模型,採集函式(acquisition functions)和優化器。它還提供以下支援:

當前硬體(包括 GPU)上的自動差分、高度並行化計算,以及通過 PyTorch 與深度學習模組的無縫整合。

GPyTorch 中最頂級的概率建模,包括支援多工高斯過程(GP)、可擴充套件 GP、深度核學習、深度 GP 和近似推理。

通過再引數化技巧的基於蒙特卡羅的採集函式,使得實現新思想變得簡單,不需要對基礎模型施加限制性假設。

Facebook 表示,BoTorch 大大提高了貝葉斯優化研究的開發效率。它為無法分析解決方案的新方法開啟了大門,包括批量採集函式和正確處理具有多個相關結果的豐富多工模型。BoTorch 的模組化設計使研究人員能夠更換或重新排列單個元件,自定義演算法的各個方面,從而使他們能夠對現代貝葉斯優化方法進行最前沿的研究。

自適應實驗可擴充套件平臺 Ax

為了配合 BoTorch,Ax 提供了易於使用的 API,以及面向產品和研究復現所需的管理。在開發層面,這使得開發人員能夠專注於應用的問題,例如探索配置等;在研究層面,它讓研究人員能夠花更多時間專注於貝葉斯優化的構建塊。

下圖展示了 Ax 和 BoTorch 在優化生態系統中的應用。以 Facebook 為例,Ax 與其主要 A / B 測試、機器學習平臺,以及模擬器、其他後端系統相接,需要最少的使用者參與來部署配置以及收集結果。

Facebook釋出PyTorch 1.1,開源AI模型優化簡化工具BoTorch & Ax

Ax 讓開發人員能夠建立自定義優化應用程式,或者從 Jupyter 筆記本中臨時優化。新演算法可以使用 BoTorch 庫或其他應用程式實現。

通過以下核心功能,Ax 降低了開發人員和研究人員進行自適應實驗的障礙:

  • 跨框架介面:實現新的自適應實驗演算法。雖然 Ax 大量使用 BoTorch 作為其優化演算法,但提供了通用的 NumPy 和 PyTorch 介面,以便研究人員和開發人員可以插入任何框架中可實現的方法。

  • 可定製的自動化優化程式。根據實驗的特徵,Ax 從貝葉斯優化、 bandit 優化以及其他技術中選擇適當的優化策略。使用者可以輕鬆定製這些預設例程,以滿足其特定應用程式的需求。

  • 系統理解工具。互動式的視覺化讓使用者可以檢視代理模型、執行診斷,以及瞭解不同結果之間的權衡。

  • 人可參與的優化。除了支援多個 objective 和系統理解之外,Ax 的底層資料模型還使實驗者能夠在收集新資料時安全地介入其搜尋空間和目標。

  • 建立自定義優化服務的能力。多個 API 使得 Ax 既可用作部署控制、收集資料的框架,也可用作可通過遠端服務呼叫的輕量級庫。

  • 用於評估新的自適應實驗演算法的基準測試套件。輕鬆比較不同演算法在測試問題上的優化效能,並儲存結果,以便進行可重複的研究。

為了展示 Ax 是如何工作的,以下是一個使用人工 Booth 函式作為評估函式的簡單優化迴圈示例:

from ax import optimize

best_parameters, _, _, _ = optimize(
    parameters=[{"name": "x1","type": "range","bounds": [-10.0, 10.0],},{"name": "x2","type": "range","bounds": [-10.0, 10.0],},],
    evaluation_function=lambda p: (p["x1"] + 2*p["x2"] - 7)**2 + (2*p["x1"] + p["x2"] - 5)**2, 
    minimize=True,)

best_parameters# returns {'x1': 1.02, 'x2': 2.97}; true min is (1, 3)

釋出 PyTorch1.1

自 2017 年開源以來,PyTorch 已經成為全世界最受歡迎的深度學習框架之一。去年秋季釋出的《2018 年 GitHub Octoverse 報告》稱 PyTorch 是 GitHub 平臺上最受歡迎的開源專案之一,全世界有 3100 萬開發者使用 PyTorch。去年 12 月,在 NeurIPS 2018 大會上,Facebook 釋出了 PyTorch 1.0 正式版。時隔半年,今天,Facebook 釋出了 PyTorch1.1。

專案地址:https://github.com/pytorch/pytorch/releases/tag/v1.1.0

官方部落格:https://pytorch.org/blog/optimizing-cuda-rnn-with-torchscript/

與之前的版本相比,PyTorch 1.1 具備以下特性:

  • 提供 TensorBoard 的官方支援;

  • 升級了即時編譯(JIT)編譯器;

  • 提供新的 API;

  • 不再支援 CUDA 8.0。

提供 TensorBoard 的官方支援

TensorBoard 是 Tensorflow 中的一個在瀏覽器內直接視覺化機器學習模型的工具。作為一個用於檢查和理解訓練指令碼、張量和圖的 web 應用程式套件,使用者可利用 TensorBoard 進行第一級和原生視覺化支援以及模型除錯。PyTorch 中沒有這樣的工具,之前有一些方法可以讓開發者們在 PyTorch 中使用 TensorBoard,但 PyTorch 一直沒有提供官方支援。

現在,PyTorch 1.1 開始官方支援 TensorBoard,只要寫入一個簡單的「from torch.utils.tensorboard import SummaryWriter」命令即可。直方圖、嵌入、影像、文字、圖等可在訓練中實現視覺化。不過,PyTorch 對 TensorBoard 的官方支援目前還處於試驗階段。文件瀏覽地址:https://pytorch.org/docs/stable/tensorboard.html。

升級了即時編譯(JIT)編譯器

PyTorch 發明者 Soumith Chintala 認為,JIT 編譯器促成了深度學習框架的里程碑式效能改進。PyTorch1.1 升級了用於優化計算圖的 JIT 編譯器。

Chintala 說道:「一直以來,我們都與英偉達緊密合作,基本上將所有優化都新增到 JIT 編譯器中……新版 JIT 編譯器實際上接近 cuDNN 的速度,這意味著使用者的工作效率會提高很多。」

Chintala 稱:「JIT 編譯器初版在 PyTorch1.0 中即可使用,但其工作速度並沒有比 PyTorch 的基本模式快多少。新的 JIT 編譯器是研究者和自動駕駛模型構建者非常需要的一種工具。」JIT 編譯器還將為 PyTorch 帶來更多的 Python 程式語言概念。

現在,JIT 編譯器能夠在執行時確定如何生成最有效率的程式碼。Chintala 希望 JIT 編譯器可以為自定義 RNN 模型提供更佳的效能。

提供新的 API

PyTorch1.1 具有新的 API,支援布林張量以及自定義迴圈神經網路。

不再支援 CUDA 8.0。

CUDA 8.0 與 PyTorch 1.0 搭配使用效果較好,但 PyTorch 1.1 將不再支援 CUDA 8.0。

主要效能提升

  • nn.BatchNorm CPU 推理速度增加 19 倍

  • nn.AdaptiveAvgPool:將常見情況下 size 為 1 的輸出加速 30 倍

  • nn.Embedding Bag:CPU 效能提高了 4 倍

  • Tensor.copy_:將更大的張量複製加速 2-3 倍。

  • torch.nonzero:比 CPU 上的 numpy 快 2 倍

  • 改進用於 Pascal 和新 GPU 的快取分配器;Mask-RCNN 上的記憶體使用率提升了 10-20%

  • reducation functions:將一些大張量加速 50-80%

  • [JIT] 圖融合器:在廣播的情況下更好地融合反向圖

  • [JIT] 圖融合器:用於推理的 batch_norm 融合

  • [JIT] 圖融合器:用於推理的 layer_norm 融合 

參考連結:

  • https://github.com/pytorch/pytorch/releases/tag/v1.1.0

  • https://venturebeat.com/2019/05/01/facebook-launches-pytorch-1-1-with-tensorboard-support/

相關文章