在 Heroku 上部署機器學習模型
已發表: 2021-01-05機器學習是一個持續的過程,包括數據提取、清理、挑選重要特徵、模型構建、驗證和部署,以在看不見的數據上測試模型。
雖然最初的數據工程和模型構建階段是一個相當乏味的過程,並且需要花費大量時間來處理數據,但模型部署可能看起來很簡單,但它是一個關鍵過程,並且取決於您想要定位的用例。 您可以為移動用戶、網站、智能設備或任何其他物聯網設備提供模型。
可以選擇將模型集成到主應用程序中,將其包含在 SDLC 或云中。 在雲平台中部署和運行模型有多種策略,對於大多數情況來說,這似乎是一個更好的選擇,因為谷歌云平台、Azure、亞馬遜網絡服務和 Heroku 等工具的可用性。
雖然您可以選擇以 Pub/Sub 方式公開模型,但 API(應用程序接口)或 REST 包裝器更常用於在生產中部署模型。 隨著模型複雜性的增加,不同的團隊被分配來處理通常稱為機器學習工程師的這種情況。 有了這麼多的介紹,讓我們看看如何在 Heroku 平台上將機器學習模型部署為 API。
目錄
什麼是 Heroku?
Heroku 是一個平台即服務工具,允許開發人員託管他們的無服務器代碼。 這意味著人們可以開發腳本來為特定目的服務其中一個或另一個。 Heroku 平臺本身託管在 AWS(亞馬遜網絡服務)上,這是一種基礎設施即服務工具。
Heroku 是一個免費平台,但正常運行時間限制為 500 小時。 這些應用程序作為測功機託管,在不活動 30 分鐘後進入睡眠模式。 這可確保您的應用在不活動期間不會佔用所有空閒時間。 該平台支持 Ruby、Java、PHP、Python、Node、Go、Scala。 大多數數據科學初學者都會參考這個平台來獲得在雲中運行和部署模型的經驗。

準備模型
現在您已經了解了這個平台,讓我們為它準備模型。 訓練機器學習模型時,相應的參數存儲在內存本身中。 這個模型需要導出到一個單獨的文件中,這樣我們就可以直接加載這個模型,傳遞看不見的數據,並獲得輸出。
通常使用不同的模型格式,例如 Pickle、將 Python 對像模型轉換為比特流的 job-lib、ONNX、PMML 或 MOJO,它是一種 H20.ai 導出格式,並提供模型也可以集成到 Java 應用程序中。 為簡單起見,假設我們想通過 pickle 導出模型,那麼您可以通過以下方式完成:
進口泡菜
Pkl_Filename = “model.pkl”
使用 open(Pkl_Filename, 'wb') 作為文件:
pickle.dump(模型名稱,文件)
該模型現在存儲在一個單獨的文件中,並準備好集成到 API 中使用。
服務器邏輯
為了提供對該模型的訪問以進行預測,我們需要一個可以重定向和處理所有客戶端請求的服務器代碼。 Python 支持 Web 開發框架,其中一個著名的就是 Flask。
它是一個簡約的框架,允許用幾行代碼設置服務器。 由於它是一個最小的包,因此沒有明確支持許多功能,例如身份驗證和 RESTful 特性。 這些可以與擴展集成。
另一種選擇是選擇新發布的框架 FastAPI。 它更快、可擴展、有據可查,並帶有許多集成包。 現在,讓我們繼續使用燒瓶設置一個簡單的預測路線。
從燒瓶進口燒瓶
進口泡菜
app = Flask(__name__)
使用 open(Filename, 'rb') 作為文件:

模型 = pickle.load(文件)
@app.route('/predict', methods = ['GET', 'POST'])
定義預測():
# 實現通過查詢或有效負載獲取參數的邏輯
prediction = model.predict([獲得的參數])
返回{'結果':預測}
這是一個粗略的代碼,用於顯示如何處理服務器邏輯。 您可以選擇多種策略來更好地實施。
查看:使用 Streamlit 部署 ML 模型的指南
設置部署文件
Heroku 需要我們的應用程序所需的所有依賴項的列表。 這稱為需求文件。 它是一個文本文件,列出了應用程序使用的所有外部庫。 在此示例中,文件內容將包含:
燒瓶
sklearn
麻木的</p>
熊貓
獨角獸
最後一個庫 gunicorn 允許我們設置 WSGI 服務器實現,它為客戶端和處理 HTTP 流量的服務器形成接口。 Heroku 還需要另一個稱為 Procfile 的文件,用於指定應用程序的入口點。 考慮到服務端邏輯文件是用名字main.py保存的,那麼要放入這個文件的命令是:
網站:gunicorn 主要:應用程序

“web”是我們正在部署的 dyno 類型,“gunicorn”充當中介,將請求傳遞給服務器代碼“main”並在“main”中搜索“app”。 該應用程序處理此處的所有路線。
最終部署
所有的準備工作都完成了,現在是時候在雲中運行應用程序了。 如果不在 Heroku 上,請創建一個帳戶,單擊創建應用程序,選擇任何區域。 之後連接您的 GitHub 帳戶,並選擇包含以下文件的存儲庫:服務器代碼、model.pkl、requirements.txt 和 Procfile。
在此之後只需點擊部署分支! 如果成功,請訪問生成的鏈接,您的應用程序應該已上線。 現在您可以向 appname.herokuapp.com/predict 路由發出請求,它應該會給出預測。 了解有關機器學習模型的更多信息。
結論
這是對什麼是 Heroku、為什麼需要它以及如何在 Flask 的幫助下部署模型的介紹。 有很多託管平台提供更高級的功能,例如數據管道、流媒體,但 Heroku 作為免費平台對於只想體驗部署的初學者來說仍然是一個不錯的選擇。
如果您有興趣了解有關機器學習的更多信息,請查看 IIIT-B 和 upGrad 的機器學習和人工智能 PG 文憑,該文憑專為工作專業人士設計,提供 450 多個小時的嚴格培訓、30 多個案例研究和作業、IIIT- B 校友身份、5 個以上實用的實踐頂點項目和頂級公司的工作協助。
使用 Heroku 平台的缺點是什麼?
Heroku 不適合大型企業,因為該平台的文檔並不廣泛。 另一個問題是只讀文件系統,這使得大容量文件上傳(如電影或高分辨率照片)難以處理。 Heroku 是一個平台即服務提供商,其定制數量有限。 Heroku 僅接受美元付款,不接受歐元等其他貨幣付款。 對於喜歡用自己的貨幣支付的企業主來說,這可能是一個小小的不便。 此外,在 CRE(通用運行時環境)中,Heroku 不提供靜態 IP 地址。
Heroku 與 AWS 有何不同?
AWS 中的部署過程並不簡單,因此在復雜性方面也不是特別友好。 Heroku 提供了一個易於操作的即用型環境。 Heroku 比 AWS 成本更高,因為它需要較少的人工干預。 AWS 可以處理高或非常高的計算需求,而 Heroku 可以處理適度的計算需求。 Heroku 與 AWS 不同,它不需要定期的基礎設施維護。 在部署方面,AWS 和 Heroku 都快如閃電。
我可以免費使用 Heroku 多長時間?
Heroku 帳戶有一個免費的 dyno 小時池,可用於免費應用程序。 這取代了免費程序的 18 小時限制,使它們能夠在必要時全天 24 小時運行。 新帳戶可獲得 550 小時免費測功小時,如果您使用信用卡驗證身份,則額外獲得 450 小時。 Heroku 提供免費計劃來幫助您學習技術並開始使用。 許多 Heroku 附加組件提供免費計劃,Heroku Buttons 和 Buildpacks 也是如此。