該場景的一個方面是創建機器學習模型。 它必須在現實世界中可用,並且可供消費者和開發人員使用。
部署機器學習模型的最簡單和最流行的方法是將它們封裝在 REST API 中。
使用一個名為 FastAPI 的流行庫,這正是我們今天要完成的。
但是,什麼是 FastAPI?
FastAPI Python Web 框架是從頭開始創建的,以利用當代 Python 功能。
對於與客戶端的異步、並發通信,它遵循 ASGI 標準,同時也能夠使用 WSGI。
端點和路由都可以使用異步函數。 此外,FastAPI 支持以類型提示、乾淨、現代的 Python 代碼高效地創建 Web 應用程序。
顧名思義,FastAPI 的主要用例是創建 API 端點。
使用包含交互式 Swagger UI 的 OpenAPI 標準,或以 JSON 格式提供 Python 字典數據都是實現此目的的簡單方法。 但是,FastAPI 不僅適用於 API。
它可用於使用 Jinja2 模板引擎提供標準網頁,並使用 WebSockets 為應用程序提供服務,以及 Web 框架可以做的幾乎所有其他事情。
在本文中,我們將開發一個簡單的機器學習模型,然後使用 FastAPI 進行部署。 讓我們開始。
安裝 FastAPI 並創建第一個 API
首先需要安裝庫和 ASGI 服務器; Uvuicorn 或 Hypercorn 都可以。 它通過在終端中輸入以下命令來工作:
現在已經創建了 API,您可以使用首選的代碼編輯器並瀏覽它。 創建一個名為 ml_model.py 的 Python 腳本以開始使用。 歡迎你給你的文件起一個不同的名字,但為了這篇文章,我將把這個文件稱為 ml_model.py。
要創建具有兩個端點的簡單 API,您必須完成以下任務:
- 導入 FastAPI 和 Uvicorn 庫。
- 設置一個 FastAPI 類實例。
- 聲明第一個路由,它在索引頁面上生成一個簡單的 JSON 對象。
- 聲明第二個路由,它提供帶有自定義消息的簡單 JSON 對象。 name 參數直接取自 URL(例如 https://127.0.0.1:8000/Jay)。
- 利用 Uvicorn 運行 API。
實現這五個階段顯示在以下代碼中,即。 創建一個簡單的 API
全部完成! 讓我們立即啟動我們的 API。 打開 ml model.py 文件旁邊的終端窗口以完成此操作。 接下來,輸入以下內容:
回車鍵。 在繼續之前,讓我們揭穿這個斷言。 第一個應用程序僅使用 Python 文件名,沒有擴展名。 第二個應用程序必須與您的 FastAPI 實例同名。
通過使用 -reload,您可以告訴 API 您希望它在您保存文件時自動重新加載,而不是從頭開始。
現在啟動瀏覽器並導航到 https://127.0.0.1:8000; 結果應如下所示:
您現在了解瞭如何使用 FastAPI 創建簡單的 API。
構建和訓練機器學習模型
在不收集或分析任何數據的情況下,我們將只訓練一個簡單的模型。 這些與模型的部署無關,對手頭的主題也不是必需的。
可以使用相同的方法安裝基於 Iris 數據集的模型 神經網絡 安裝方法。
我們將這樣做:下載 虹膜數據集 並訓練模型。 那不會很簡單。 首先,創建一個名為 jaysmlmodel.py 的文件。
在其中,您將執行以下操作:
- 導入——您需要 pandas、scikit-RandomForecastClassifier、learn 的 pydantic 的 BaseModel(您將在接下來的步驟中發現原因)以及用於存儲和加載模型的 joblib。
- 聲明一個從基礎模型繼承的 IrisSpecies 類。 此類僅包含預測單一花卉種類所需的字段(下一節將詳細介紹)
- 創建一個類。 IrisModel 是一個模型訓練和預測工具。
- 在 IrisModel 中聲明一個名為 _train model 的方法。 它用於使用隨機森林技術訓練模型。 訓練後的模型由過程返回。
- 在 IrisModel 中聲明一個預測的物種函數。 它用於基於 4 個輸入因素(花卉測量值)進行預測。 算法返回預測(花卉種類)和預測概率。
- 更改 IrisModel 中的構造函數,以便它加載 Iris 數據集並在文件夾中缺少模型時對其進行訓練。 這解決了重複訓練新模型的問題。 joblib 庫用於模型加載和保存。
這是完整的代碼:
我希望上面的列表和評論能讓你很容易掌握,即使這是要創建的大量代碼。 現在這個模型已經開發出來了,讓我們發布它的預測能力 REST API.
構建完整的 REST API
返回 ml_model.py 文件並清除所有數據。 樣板將與您之前的樣板基本相同,但我們應該從一個空白文件重新開始。
這次您將只定義一個端點,即用於確定花卉類型的端點。 上一節中聲明的 IrisModel.predict species() 被此端點調用以執行預測。
請求類型是另一個重大變化。 為了以JSON而不是URL的方式傳輸參數,建議使用時使用POST 機器學習 蜜蜂。
如果你是一個 數據科學家,不過沒關係。 要設計和部署模型,不一定需要成為 HTTP 請求和 REST API 方面的專家。
ml model.py 的任務很少而且很簡單:
- 您必須從之前創建的 jaymlmodel.py 文件中導入以下內容:uvicorn、FastAPI、IrisModel 和 IrisSpecies。
- 創建 FastAPI 和 IrisModel 的實例。
- 在 https://127.0.0.1:8000/predict 聲明一個函數來進行預測。
- IrisModel.predict species() 方法接收 IrisSpecies 類型的對象,將其轉換為字典,然後返回。 返回是預期類別和預測概率。
- 使用 uvicorn 執行 API。
再一次,這裡是整個文件的代碼及其註釋:
這就是你需要做的。 在下一步中,讓我們測試 API。
測試API
在終端中重新輸入以下行以執行 API: uvicorn ml_model:app –reload
這是文檔頁面的顯示方式:
這就是今天的內容。 在這之後的部分,讓我們總結一下。
結論
今天,您通過一個簡單的 API 示例和一個簡單的機器學習示例了解了 FastAPI 是什麼以及如何使用它。 您還學習瞭如何創建和查看 API 文檔,以及如何對其進行測試。
對於單件來說,這很多,所以如果需要閱讀幾次才能正確理解,請不要感到驚訝。
快樂的編碼。
發表評論