Keras作者力推開源框架Lore:15分鐘搞定深度學習模型從配置到部署
本文由 「AI前線」原創,原文鏈接:Keras作者力推開源框架Lore:15分鐘搞定深度學習模型從配置到部署
作者|Montana Low譯者|Debra編輯|Emily
AI 前線導讀:今天,Keras 的作者 Francois Chollet 轉推了一篇文章,教大家基於開源框架 Lore 在 15 分鐘內建立深度學習模型,用 Python 配置、構建、部署和維護深度學習模型。真的能在這麼短的時間內構建深度學習模型嗎?我們來一探究竟。
隨著 Instacart 的發展,我們學到了一些知識,但是獲取知識的方法卻並不簡單。我們的開源框架 Lore ,可以讓工程師距離機器學習更進一步,而且機器學習研究人員也可以操作。
開源框架 Lore 鏈接:
https://github.com/instacart/lore
機器學習一般給人的印象是這樣的:
呃,這張紙並沒有告訴我它的工作方式......
常見問題
- 當你在 Python 或 SQL 等高層級編寫定製代碼時,很容易觸及性能瓶頸。
- 代碼複雜性增大的原因在於有價值的模型是多次迭代變化的結果,因此隨著代碼以非結構化方式演變,個人會感覺到力不從心。
- 隨著數據和庫的依賴關係不斷變化,可重複性將受到影響。
- 當我們努力跟上最新的論文、組件、功能和錯誤的腳步時,信息過載很容易導致錯過新的容易實現的目標。對於剛進入該領域的人來說,情況會更加糟糕。
為了解決這些問題,我們正在對 Lore 中的機器學習進行標準化。在 Instacart,我們的三個團隊正在使用 Lore 進行機器學習開發,目前已經可以運行十幾種 Lore 模型。
TLDR
以下是在沒有上下文的情況下進行快速預測的演示,你可以從 github 複製my_app
。如果想了解全程,請跳至大綱。
$ pip3 install lore $ git clone https://github.com/montanalow/my_app.git$ cd my_app $ lore install # caching all dependencies locally takes a few minutes the first time$ lore server & $ curl "http://localhost:5000/product_popularity.Keras/predict.json?product_name=Banana&department=produce"
功能規格
在 15 分鐘內將自己的深度學習項目投入生產,你就能充分體會到 Lore 的優勢在哪裡了。如果你想在編寫代碼之前查看一下功能規格,請參閱以下簡要概述:
- 模型 支持使用數據管道對估算器進行超參數搜索。他們將有效地利用多個 GPU(如果可用)和兩種不同的策略,並且因水平可伸縮性可以保存和分發。
- 支持來自多個軟體包的 估算器:Keras、XGBoost 和 SciKit Learn。它們都可以通過構建、調試或預測覆蓋來進行分類,以完全自定義你的演算法和架構,同時還可以從其他很多方面受益。
- 管道 可以避免訓練和測試之間的信息泄漏,一條管道可以用許多不同的估算器進行實驗。如果機器可用 RAM 空間不夠,則可使用基於磁碟的管道。
- 轉化器對高級功能編程進行標準化。例如,根據美國人口普查數據將美國名字轉換為其統計年齡或性別;從自由格式的電話號碼字元串中提取地理區號;pandas 可有效支持常見的日期、時間和字元串操作。
- 編碼器 為估算器提供足夠的輸入,並可以避免常見的缺失和長尾值問題。經過充分測試,它們可以幫助你節省從垃圾中檢索信息的精力。
- 對於流行的 (No)SQL 資料庫,整個應用程序以標準化的方式配置 IO 連接,對批量數據進行交易管理和讀寫優化,而不是使用典型的 ORM 操作。除了用於分發模型和數據集的加密 S3 存儲桶之外,連接還共享一個可配置的查詢緩存。
- 對開發中的每個應用程序進行依賴關係管理,並可以 100%複製到生產環境中。無需手動激活,沒有破壞 Python 的環境變數或隱藏的文件。無需 venv、pyenv、pyvenv、virtualenv、virtualenvwrapper、pipenv、conda 相關知識,不用在這種事情上費心。
- 可以在自己的持續集成環境中進行模型 測試,支持代碼和訓練更新持續部署,而無需增加基礎架構團隊的工作量。
- 工作流程支持 命令行、Python 控制台、jupyter 筆記本或 IDE。每個環境都可以為生產和開發配置可讀的日誌和時序語句。
15 分鐘構建深度學習框架大綱
只要懂得基本的 Python 知識,就可以開始這個任務了。如果你的機器不能進行學習,就可以用剩下的時間好好探索機器學習的複雜性。
- 創建一個新應用(3 分鐘)
- 設計模型(1 分鐘)
- 生成框架(2 分鐘)
- 管道部署(5 分鐘)
- 測試代碼(1 分鐘)
- 訓練模型(1 分鐘)
- 投入生產(2 分鐘)
創建一個新的應用程序
Lore 獨立管理每個項目的依賴關係,以避免與你的系統 Python 或其他項目發生衝突。將 Lore 以標準的 pip 軟體包安裝:
# On Linux$ pip install lore# On OS X use homebrew python 2 or 3$ brew install python3 && pip3 install lore
當你無法創建相同的環境時,就很難重複別人的工作。 Lore 保留你的操作系統 Python 的工作方式,以防止依賴性錯誤和項目之間發生衝突。每個 Lore 應用程序都有它自己的目錄,有自己的 Python 安裝,以及把各自需要的依賴關係鎖定到 runtime.txt 和 requirements.txt 中的特定版本。這使得分享 Lore 應用程序的效率更高,並使我們的機器學習項目向避免重複性方面邁進了一步。
安裝 Lore 後,你就可以創建一個新的深度學習項目應用程序。Lore 默認是模塊化的,因此我們需要指定keras
來安裝此項目的深度學習依賴項。
$ lore init my_app --python-version=3.6.4 --keras
設計模型
我們將演示如何建立一個模型,僅根據名稱和所屬的分類預測商品在 Instacart 網站上受歡迎的程度。世界各地的製造商都會測試各種類產品的名稱,零售商則通過優化產品以最大限度地提高產品的吸引力。我們這個簡單的人工智慧將提供相同的服務。
機器學習最難的挑戰之一就是獲取優質數據。幸運的是,Instacart 已經為此任務公開了 300 萬份匿名貨物訂單,並重新進行調整。然後,我們可以將問題創建成一個監督式學習回歸模型,該模型根據 2 個特徵預測年銷售量:產品名稱和分類。
請注意,我們將建立的模型僅用於演示,並無沒有實際用途。我們給好奇的讀者提供了一個很好的模型,僅供練習。
生成框架
$ cd my_app$ lore generate scaffold product_popularity --keras --regression --holdout
每個 Lore 模型包括一個用於載入和編碼數據的管道,以及一個部署特定機器學習演算法的估算器。這個模型有趣的地方在於類別生成實現過程的細節。
整個過程從左側的原始數據開始,並將其編碼為右側所需的形式。然後使用編碼數據、驗證測試提前終止數據對估算器進行訓練,並在測試集上進行評估。所有內容都可以在模型存儲區進行序列化,然後再次載入數據循環進行訓練。
模型工作原理示意圖
管道部署
很少有原始數據完全適用於機器學習演算法。通常我們從資料庫獲得原始數據或下載一個 CSV 文件,進行調整以適應演算法,然後將其分為為訓練集和測試集。 lore.pipelines
中的基類將此邏輯按照標準化流程執行。
lore.pipelines.holdout.Base
將數據分成訓練、驗證和測試集,並對我們的機器學習演算法進行編碼。我們的子類將負責定義 3 種方法:get_data
,get_encoders
和get_output_encoder
。
Instacart 公布的數據分布在多個 csv 文件中。
管道的get_data
將下載原始 Instacart 數據,並使用 pandas 將其加入到具有(product_name,department)
和對應的銷售總量(sales)
的DataFrame
中:
這是get_data
的部署:
接下來,我們需要為每列指定一個編碼器。計算機科學家可能會認為編碼器是有效機器學習的一種類型注釋形式。有些產品的名字挺好笑,所以我們會選取它們的前 15 個單詞。
這就是整個工作流程。我們的初始估算器將作為 lore.estimators.keras.Regression 的一個簡單子類,它構建了一個具有合理默認值的經典深度學習框架。
# my_app/estimators/product_popularity.pyimport lore.estimators.kerasclass Keras(lore.estimators.keras.Regression): pass
最後,我們的模型通過將它們返回估算器,並從構建的框架中提取數據,來實現深度學習架構的高級屬性。
測試代碼
生成框架時,該模型會自動進行冒煙測試。第一次運行測試需要多花一些時間來下載 200MB 的測試數據集。最好先處理一下./tests/data
中的文件緩存,將其放入 repo 中,以消除網路依賴,加速測試。
$ lore test tests.unit.test_product_popularity
訓練模型
訓練模型的數據將緩存在./data
中,並將工件保存在./models
中。
$ lore fit my_app.models.product_popularity.Keras --test --score
按照第二個終端中的日誌查看 Lore 的耗時情況。
$ tail -f logs/development.log
試著添加更多的隱藏圖層,看看是否對模型score
有幫助。你可以編輯模型文件,或直接通過命令行調用屬性以適應 --hidden_layers = 5
。緩存數據集可能需要大約 30 秒。
檢查模型的功能
你可以在你的 Lore 環境中運行 jupyter 筆記本。Lore 將安裝一個自定義 jupyter 內核,並使用你創建的應用程序的虛擬 env,用於lore notebook
和lore console
。
瀏覽notebooks / product_popularity / features.ipynb
並「全部運行」以查看模型最後一次適配的可視化效果。
「生產」部門被編碼為「20」
可以看到,針對特定功能時,該模型的預測值和測試集(金色)吻合程度很高。在這個案例中,有 21 個種類都達到了很好的重疊效果,除了「produce」這個類別,因為模型沒有完全計算其有多少異常值。
你還可以看到由/ product_popularity / architecture.ipynb
腳本生成的深度學習框架。
15 個標記名稱通過左側的 LSTM 運行,種類名稱放入右側的嵌入,然後兩者均通過隱藏層。
為模型提供服務
Lore 應用程序可以作為一個本地模型 HTTP API。默認情況下,模型將通過 HTTP GET 端點公開他們的「預測」方法。
我的結果表明,將「有機」添加到「香蕉」,"農產品"的銷量將提高兩倍。 「綠色香蕉」的銷量預計會比「布朗香蕉」差。
投入生產
Lore 可以通過所有支持 Heroku buildpack 的基礎架構進行部署。 部署容器的runtime.txt
和requirements.txt
中的 Buildpacks 安裝有具體規範。如果你想在雲端橫向擴展,可以按照 heroku 的入門指南進行操作。
你可以查看每次在
./models/my_app.models.product_popularity/Keras/
中進行 lore fit 命令的結果。該目錄和./data/
默認位於.gitignore
中,因為你的代碼可以隨時重建它們。一個簡單的部署策略,是插入所要發布的模型版本。
$ git init .$ git add .$ git add -f models/my_app.models.product_popularity/Keras/1 # or your preferred fitting number to deploy$ git commit -m "My first lore app!"
Heroku 可以輕鬆發布應用程序。這是他們的入門指南。
https://devcenter.heroku.com/articles/getting-started-with-python#introduction
這是 TLDR:
$ heroku login$ heroku create$ heroku config:set LORE_PROJECT=my_app$ heroku config:set LORE_ENV=production$ git push heroku master$ heroku open$ curl 「`heroku info -s | grep web_url | cut -d= -f2`product_popularity.Keras/predict.json?product_name=Banana&department=produce」
下一步
我們認為這個框架的 0.5 版本為社區一起構建 1.0 版本奠定了堅實的基礎。發布修補程序版本可以避免重大改動,但次要版本可能會根據社區需求更改功能,棄用舊版本並進行更新升級。
以下是我們計劃在 1.0 版本之前添加的一些功能:
- 帶有可視化模型 / 估算器 / 特徵分析的 Web UI
- 整合在模型訓練和數據處理期間分散式計算支持,即排隊問題
- 測試不良數據或框架,而不僅僅是損壞的代碼
- 更多文檔、估算器、編碼器和轉換器
- 完整的 Windows 支持
感謝 Jeremy Stanley、Emmanuel Turlay 和 Shrikar Archak 對代碼的貢獻。
原文鏈接:
https://tech.instacart.com/how-to-build-a-deep-learning-model-in-15-minutes-a3684c6f71e
更多乾貨內容,可關注AI前線,ID:ai-front,後台回復「AI」、「TF」、「大數據」可獲得《AI前線》系列PDF迷你書和技能圖譜。
推薦閱讀:
※百年奧運是一部科技史,智能奧運在平昌冬奧會浮出水面
※在下一波人工智慧的創新中,大數據是您的競爭優勢
※中國智能製造行業市場前瞻與投資戰略規劃分析
※福布斯盤點21位AI領域的傑出女性,李飛飛吳華等在列
※聚焦解析:視頻用AI與圖像用AI的區別
TAG:人工智慧 |