3步骤简单部署Python到Azure
Posted jixjia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:
1. 在本地创建一个空的folder (例如:"deploy-pyhton-on-azure")
2. 执行 git clone https://github.com/jixjia/python-app-azure.git
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环境
至此前期准备工作完成!
部署方法1 - 利用Kudu Server
1. 在新建的Web App里找到Deployment Center
(1) 依次选择 Local Git > App Service Build Service
(2) 完成后得到一个部署用的Git URL (如图示),复制它!
2. 把得到的Git URL 加入到git remote repository列表
(1) 执行 git remote add azure {粘贴得到的Git URL}
(2) 用git remote -v 查看Kudu Git URL被成功加入到了git remote列表中
3. 最后用常规git push 把将本地Python App推送到Kudu中
此时Kudu App Build service收到code后会自动执行以下工作:
(1) 自动打包你的Python App code base
(2) 创建Python 3.X 虚拟环境
(3) 安装dependency (pip install requirements.txt)
(4) 部署到Azure上!
成功完成部署后,打开浏览器查看 http://{你的web app名}.azurewebsites.net,可以看到我们的Python App被成功发布到Azure上!
该App会获取访问者IP地址,并解析地理位置信息 (如图所示)
部署方法2 - 利用Azure DevOps建立自动CI/CD pipeline
尽管使用方法1 (Kudu App Service Builder)只要3步就能很容易部署我们的Python App, 但我个人更建议利用敏捷开发工具 (如 Azure DevOps, Jenkins等)实现 CI/CD自动化部署。
1. 在dev.azure.com (Azure DevOps) 上新建一个Project
2. 授权该Project访问Azure的资源,目的用来部署我们的本地Python App
(1) 选择新建一个 Service Connection
(2) 选择允许访问的Azure订阅 (Subscription) 及资源组 (Resource Group)
3. 创建并设置自动部署CI/CD Pipeline
(1) 选择Pipelines,创建一个Pipeline
(2) 依次选择 GitHub (YAML) > 你的GitHub Repository > Python to Linux Web App on Azure
(3) 此时系统会自动生成Python App的 部署模板 (称为 "azure-pipelines.yml")。这里需要在模板上做两个更改,如下图示:
1. 在中间script部分,"antenv"虚拟环境名称后加上$(pythonVersion)变量
python -m venv antenv$(pythonVersion)
source antenv$(pythonVersion)/bin/activate
2. 在模板最后加上 appType: webAppLinux
(4) 编辑完成后,选择 "Save and Run"。此时点击Pipeline Run执行过程,可以看到CI/CDpipeline在安装和部署我们的Python App。
每当有新的Pull Request进来后,该pipeline就会自动执行部署任务而无需认为操作,从而实现敏捷开发和敏捷部署:
成功执行Pipeline后后,依旧可以在 http://{你的web app名}.azurewebsites.net里看到我们的Python App。
由于两次部署间没有做任何改变,所以显示的内容是一样的:
总结
今天分享了两种简洁的方法用来快速实现Python App从本地到云的部署。
无论是把机器学习模型发布成Web service API,或者提供一个有用户界面的交互型Web App,我们都可以利用以上两种方法来快速实现App的发布。
最后,如果需要debug或调试部署的App,可用下面的URL:http://{你的web app名}.scm.azurewebsites.net
进行SSH登录hosting server调试,或查看实时Log Stream来做常规除错 !
Jixin Jia
以上是关于3步骤简单部署Python到Azure的主要内容,如果未能解决你的问题,请参考以下文章
基于CentOS7环境的Python从3.6升级到3.8及部署Tensorflow2的过程笔记