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