3步驟簡單部署Python到Azure


前言

我們在開發機器學習模型 (Python) 時,常會遇到需要把模型發布成API或Web App來供其它客戶端或用戶調用 (俗稱Model-as-a-Service)。

 

今天介紹兩種我常用的方法,可在幾分鍾內快速實現從本地到Azure的模型部署。

 

方法1  利用Azure App Services 的內建Kudu Server,把本地git repository發布到Azure

方法2  使用Azure DevOps建立CI/CD pipeline,簡單實現敏捷部署 (Agile deployment)

 

兩種方法同樣適用於任何常見的Python App發布 (例如Flask,Django)

 

准備工作

為方便介紹部署方法,我寫個簡單的Python App放在GitHub上:

 

1. 在本地創建一個空的folder (例如:"deploy-pyhton-on-azure")

(建一個新的空folder)

 

2. 執行 git clone https://github.com/jixjia/python-app-azure.git

(git clone一個現成的Python app)

 

3. 創建一個Azure App Services用來部署我們的Python App

[注意] 微軟Azure需要用Linux版App Services來部署Python運行環境,部署執行過程會自動創建一個Linux container。

    (a) 如圖在Azure上新建一個Web App資源

    (b) 選擇Linux作為OS,Runtime設為Python 3.X, 用Code方式發布 (非Container方式) 

    (c) 選擇免費的F1 Plan來部署我們的App。該Plan只適合用來Dev/Test,不推薦Production環境

  (創建並配置Azure App Services (Linux版) 用來部署Python app)

至此前期准備工作完成!

 

部署方法1 - 利用Kudu Server 

微軟Azure有內建的App部署服務叫Kudu。這個方法最為簡潔,只需git push到Kudu的Git URL即可完成部署,特別適合小型項目或單人開發使用。

 

1. 在新建的Web App里找到 Deployment Center

(1) 依次選擇 Local Git > App Service Build Service

(2) 得到一個部署專用的Git URL (如圖示),復制它!

(選擇Deployment Center > Local Git > App Service Build Service)

 (復制部署用的Git URL)

 

  2. 把得到的Git URL 加入本地 git remote repository列表

(1)  執行 git remote add azure {粘貼得到的Git URL}

(2)  用git remote -v 查看repository列表,確認Kudu Git URL被成功加入進去

(把Kudu的Git URL加入到本地git remote中)

 

3. 最后用 git push 將本地Python App推送到Kudu

(用git push把本地Python app推送到Kudu Git URL)

 

此時Kudu后在后台會自動執行以下工作:

    (1) 打包你的Python App

    (2) 創建Python 3.X 虛擬環境

    (3) 安裝dependency (即 pip install requirements.txt)

    (4) 部署到Azure上!

(Kudu自動打包,安裝和部署我們的Python App到Azure上)

 

成功部署后,打開瀏覽器訪問 http://{你的web app名}.azurewebsites.net,可以看到我們的Python App已成功發布到Azure上!

該App會獲取訪問者IP地址,解析並顯示地理信息 (如圖所示)

(訪問部署完成的Python App)

 

 

部署方法2 - 利用Azure DevOps建立自動CI/CD pipeline 

盡管使用方法1 (Kudu) 只要3步就能很容易發布我們的Python App, 但我個人建議利用敏捷開發工具 (如 Azure DevOps, Jenkins) 來實現 CI/CD自動化部署。

 

1. 在dev.azure.com (Azure DevOps) 上新建一個Project

(新建一個Azure DevOps Project)

 

2. 授權該Project訪問Azure的資源,以自動化部署我們的Python App

 

(1) 新建一個 Service Connection

(授權Azure DevOps Project訪問Azure資源)

 

 (2) 選擇允許訪問的Azure訂閱 (Subscription) 及資源組 (Resource Group)

(授權訪問需要部署目的地的Azure資源組)

 

3.  創建並配置CI/CD Pipeline

 

(1) 選擇Pipelines > 創建一個新的Pipeline

(建立新的pipeline)

 

(2) 依次選 GitHub (YAML) > 你的GitHub Repository > Python to Linux Web App

(配置pipeline定義,連接Git Hub code base)

 

(3) 此時系統會自動生成Python的部署模板 (稱為 "azure-pipelines.yml")。這里需要在模板上做兩個小更改,如下圖示:

 

A> 在中間script部分,"antenv"虛擬環境名稱后加上$(pythonVersion)變量 

  python -m venv antenv$(pythonVersion)

  source antenv$(pythonVersion)/bin/activate

(編輯pipeline定義模板)

 

B> 在模板最后加上 appType: webAppLinux

(編輯pipeline定義)

 

(4) 編輯完成后,選擇 "Save and Run"。此時點擊 Pipeline Run 可以看到CI/CD pipeline在安裝和部署我們的Python App。

每當有新的Pull Request進來后,該pipeline就會自動執行部署任務而無需人為操作,從而實現敏捷開發和敏捷部署。

(pipeline執行部署的過程)

 

成功執行Pipeline后,依舊可在 http://{你的web app名}.azurewebsites.net里看到我們的Python App。

由於兩次部署間沒做任何改變,所以顯示內容除了時間和隨機的Host Name外都是一樣的:

(訪問部署完成的Python App - Azure DevOps CICD)

 

 

總結

今天分享了兩種簡潔的方法用來快速實現Python App從本地到雲的部署。

無論是把機器學習模型發布成Web service API,或者提供一個有用戶界面的交互型Web App,我們都可以利用以上兩種方法來快速實現App的發布。

 

最后,如果需要debug或調試部署的App,可用下面的URL:http://{你的web app名}.scm.azurewebsites.net

來SSH到hosting server進行調試,或查看實時Log Stream做debug:

(遠程調試和出錯 Kudu App Service Builder SCM)

 

Jixin Jia 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM