Facebook發布PyTorch 1.1,開源AI模型優化簡化工具BoTorch & Ax
美國時間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
打開今日頭條,查看更多圖片項目地址: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 測試、機器學習平台,以及模擬器、其他後端系統相接,需要最少的用戶參與來部署配置以及收集結果。
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/
※出神入化:特斯拉AI主管、李飛飛高徒Karpathy的33個神經網路「煉丹」技巧
※波音空難啟示錄:我信任這家公司,所以我才信任自動駕駛
TAG:機器之心 |