Uber開源Neuropod:可統一AI框架並將模型轉化爲產品

近日,Uber在其官方博客宣佈正式開源Neuropod,該工具是一個提供統一界面的庫,用於從C ++和Python的多個框架中運行深度學習模型。Uber表示,Neuropod使研究人員可以輕鬆地在所選擇的框架內構建模型,同時還簡化了這些模型的生產。

在工業和學術界,數據科學家在開發過程中使用多個框架的情況並不少見。例如,Uber的高級技術小組(ATG)在過渡到Facebook的PyTorch之前整合了Google的TensorFlow,這導致與TensorFlow一起運行時出現了內存損壞和調試問題。

爲了解決這類問題,Uber發佈了Neuropod,通過使框架在運行模型時看起來相同,從而防止了不兼容問題的出現,併爲TensorFlow,PyTorch,Keras和TorchScript提供開箱即用的支持。

GitHub地址:https://github.com/uber/neuropod

自2019年初內部發布以來,Neuropod一直在快速部署新模型方面發揮了作用。去年,Uber在其ATG、AI和其他核心業務中部署了數百種Neuropod模型。這些模型包括用於需求預測的模型、用於乘車的到達時間(ETA)預測、用於Uber Eats的菜單轉錄以及用於自動駕駛車輛的對象檢測模型。

Neuropod從問題定義的概念開始——對模型要解決的“問題”的正式描述。在這種情況下,問題可能是圖像的語義分割或文本的語言翻譯。通過正式定義問題,可以將其視爲接口並抽象出具體的實現。每個Neuropod模型都實現問題定義,結果,解決相同問題的任何模型都可以互換,即使它們使用不同的框架也是如此。

Neuropod的工作原理是:將現有模型包裝在Neuropod包中,該軟件包包含原始模型以及元數據、測試數據和自定義操作(如果有)。

使用Neuropod,任何模型都可以從任何受支持的語言下執行。例如,如果用戶想從C ++運行PyTorch模型,Neuropod將在後臺啓動一個Python解釋器,並與之通信以運行模型。這是必需的,因爲PyTorch模型需要運行Python解釋器。此功能使開發者能夠快速測試PyTorch模型,然後再嘗試將其轉換爲TorchScript,該模型可以從C ++本地運行。

Neuropod當前支持從Python和C ++運行模型。但是,爲該庫編寫其他語言綁定很簡單。例如,Uber的ML平臺Michelangelo使用Neuropod作爲其核心DL模型格式,並實現了Go綁定以從Go運行其生產模型。

應用程序與框架無關的API進行交互,並且Neuropod將這些與框架無關的調用轉換爲對基礎框架的調用。最後,Neuropod導出模型並建立度量標準管道以將性能與定義的基準進行比較。

Uber在博客中寫道,Neuropod僅僅是開始,未來將實現的一些功能包括:

  1. 版本選擇:此功能使用戶能夠在導出模型時指定框架的所需版本範圍。例如,一個模型可能需要TensorFlow 1.13.1,而Neuropod將使用帶有正確版本框架的OPE自動運行該模型,使用戶可以在單個應用程序中使用多個框架和每個框架的多個版本。

  2. 封裝操作:此功能使應用程序可以指定使用張量“完成”的時間。一旦張量被封裝,Neuropod可以在運行推理之前將數據異步傳輸到正確的目的地(例如本地GPU或工作進程等)。這有助於用戶並行化數據傳輸和計算。

  3. Dockerized工作進程:這樣可以在模型之間提供更多的隔離。例如,使用此功能,即使需要不同CUDA版本的模型也可以在同一應用程序中運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章