Microsoft Azure函数部署

这是一个快速指南,可以使用培训的型号Microsoft Azure函数

本指南将培训的图像分类器上传到Azure函数。推断功能将由HTTP POST请求方法调用触发,该HTTP POST请求方法调用包括要分类的图像的URL。预测结果将在HTTP响应中返回。

Microsoft Azure函数

Microsoft Azure函数是Microsoft提供的无服务体系结构。您不需要配置服务器或维护操作系统,但只需要上传代码并定义它取决于的任何包。

价钱

微软Azure提供两种定价,消费计划应用程序服务计划。主要区别是消费计划允许您仅在函数运行时支付。如果需要,它将为您扩展架构,但您没有任何对其缩放的控制。看到这里为了消费计划定价。

使用“应用服务计划”,您可以选择要函数运行的计算资源级别。然后,只要您的资源定义,您就会收取,无论您的函数是否正在运行。看到这里用于应用服务计划定价。

目前,Python仍在Azure函数中仍处于预览阶段,并且FastAi仅在应用程序服务计划上提供自己的自定义Docker映像时工作。

要求

软件

账户

1 - 本地设置

安装项目目录

更换使用您自己的项目目录名称。

MKDIR.光盘 python-M.venv .env.资源.env / bin /激活

创建功能项目

创建使用Python运行时的Azure函数项目。

Func Init.--docker.

提示时:

  1. 选择一个工作者运行时:蟒蛇

创建功能

创建名称的函数 使用模板“httptrigger”。替换` `有自己的函数名称。

Func New.- 名称- 模板“httptrigger”

安装Fastai和依赖项

在虚拟环境中安装Fastai和您的应用需求的任何其他依赖关系。

然后将所有依赖项输出到要求。将在构建Docker映像时使用。

pip安装Fastai.#安装其他依赖项PIP冻结>要求.txt.

更新功能

修改以下文件 目录:

/在里面.py.

这是您推断功能的生命的地方。以下是使用培训的图像分类模型的示例,其中您用于替换默认文件。

进口记录进口OS.进口Azure.Function.funFastai.vision.进口*进口要求def主要funhttprequest- >funhttpresponse.路径=路径CWD()学习=load_learner.路径Request_json.=get_json.()R.=要求得到Request_json.['URL'])如果R.status_code.==.200.temp_image_name.=“temp.jpg”打开temp_image_name.'WB'FFR.内容其他返回funhttpresponse.f“图像下载失败,URL:{Request_json.['URL']}IMG.=open_image.temp_image_name.pred_class.pred_idx.输出=学习预测IMG.返回funhttpresponse.f“请求_json ['url']:{Request_json.['URL']},pred_class:{pred_class.}

/function.json

更新函数授权,以便在没有任何其他安全密钥的情况下调用它。用以下内容替换文件中的相应行:

......“authlevel”“匿名”......

导出.pkl.

复制培训的模型文件,导出.pkl., 至

测试功能

运行以下命令以在本地计算机上启动函数:

Func主机开始

这将为您提供测试URL的输出:

现在听:http://0.0.0.0:7071应用程序开始。按Ctrl + C关闭。HTTP函数:Turence_Function:[GET,POST] http:// localhost:7071 / api / 

检查测试输出

要检查函数是否正常运行,请访问http:// localhost:7071,您应该看到以下内容:

Azure本地跑步“></p>
       <p>您可以发送HTTP POST方法<code class=http:// localhost:7071 / api / 检查您的推理功能是否正常工作。更换使用指向图像的URL:

帖子http:// localhost:7071/ api / http /1.1内容类型:应用/ JSON.{“URL”}

然后,您应该看到HTTP响应:

http./1.1200.连接日期太阳,2019年3月17日06:30:29 GMT内容类型文字/平原;charset = UTF-8服务器茶隼内容长度216.Request_json ['url']:,pred_class:

你应该看到 用您推​​断功能预测的类替换。

你可以按Ctrl + C.准备好时停止测试。

2 - Docker设置

构建码头图像

您现在可以构建将包含您的应用的Docker映像和所需的所有Python库:

Docker建立- 标签 / 

如果构建抛出错误

无法执行'gcc':没有这样的文件或目录

将以下代码添加到dockerfile中之前最后一个运行命令。

运行apt-get update && \ apt-get安装-y build-assent

测试码头图像

以下将在本地计算机上运行Docker映像以进行测试:

Docker运行-P.8080:80-它 / 

您在Docker Image中的应用程序现在在URL上运行:localhost:8080。您可以运行相同的测试检查测试输出使用新的URL,您应该看到与以前相同的测试输出。

将Docker图像推到Docker Hub

使用以下命令从命令提示符登录docker。出现提示时输入您的Docker Hub密码。

docker登录- 用户名

您现在可以推动前面创建的Docker映像到Docker Hub:

Docker Push  / 

3 - Azure设置

设置Azure资源

如果您还没有,请使用Azure CLI登录Microsoft Azure:

AZ登录

您现在可以运行以下命令以创建在Azure函数上运行推理应用所需的Azure资源。

以下示例使用最低定价层B1。

用自己的名字替换以下占位符:

    • 为此应用程序创建的所有其他Azure资源的资源组的名称将属于下降
    • 例如资源组
    • 运行以下命令以查看可用位置列表:
      • AZ appservice列表位置--sku b1 - inlin-workers启用
    • 例如中心
    • 是一个通用帐户的Azure存储帐户的名称,以维护有关您功能的信息
    • 必须长度为3到24个字符,并且只能包含数字和小写字母
    • 例如IngureCestorage
    • 您将创建的Azure函数应用程序的名称
    • 将是默认的DNS域,在Azure中的所有应用中必须是唯一的
    • 例如inderenceappp123

创建资源组

AZ组创建\- 名称\- 位置

创建存储帐户

AZ存储帐户创建\- 名称\- 位置\-  resource-group.\- 苏standard_lrs.

创建Linux应用程序服务计划

AZ AppService计划创建\- 名称\-  resource-group.\- 苏B1\-  is-linux

创建应用程序并从Docker Hub部署Docker映像

AZ CliftApp创建\-  resource-group.\- 名称\-Storage-账户\- 计划\- 将容器 - 图像名称 / 

配置功能应用程序

以下假设occker集线器配置文件前面上传的Docker映像是公共的。如果您已将其设置为私密,您可以看到这里添加您的Docker凭据,以便Azure可以访问图像。

StorageConnectionString.=$(AZ Storage帐户显示 - 连接字符串\-  resource-group.\- 名称\-  Query.connectionstring.- 下降TSV.AZ CompinessApp配置appsettings- 名称\-  resource-group.\--settings.azurewebobsdashboard=$ storageConnectionString.\azurewebobsstorage=$ storageConnectionString.

运行您的Azure函数

在上一个命令之后,应用程序通常需要15-20分钟,以便在Azure上部署。您也可以在此处查看您的应用程序Microsoft Azure门户网站在功能应用程序下。

您应用的URL将是:

https:// .azurewebsite.net / api /

您可以运行相同的测试检查测试输出使用新的URL,您应该看到以前的输出。

删除资源组

完成后,删除资源组。

AZ组删除\- 名称\- 是

请记住,使用应用程序服务计划,即使您没有调用该函数,您正在收取您的资源运行。因此,最好在不调用该功能以避免意外收费时删除资源组。

参考文献:

在Azure中创建第一个Python函数(预览)

使用自定义图像在Linux上创建功能

Azure函数Python Developer Guide