将人工智能带到物联网边界设备(2)
IOT Edge最大的一个优势和特性就是可以把用户的业务逻辑,预处理,机器学习,人工智能等模块部署在边界设备上,部署的方式就是容器方式,在IOT edge上被称为一个模块。
- 登录到Azure的portal上,选择之前注册的IOT Edge设备,选择Set Module
- 选择" Add IOT Edge Module",输入相应参数,这里我们使用一个demo的模块温度传感器的模块来做测试, URI是microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview:
- 选择下一步可以选择消息在不同的模块之间通讯,暂时不用修改,选择下一步即可:
- 重新看一下最终部署的模块,并选择提交,在设备详细信息主界面,你可以看到有3个模块在设备上运行,EdgeAgent,EdgeHUb和我们刚才配置的tempSensor:
在我们的模拟终端设备上使用docker ps查看,也可以看到有3个容器在运行:
也可以查看正在发送的数据:
- 打开你本地的Visual Studio Code,安装Azure IOT Toolkit插件:
配置IOT Hub的连接字符串,连接串可以通过登陆Azure的portal,点击共享访问策略得到,连接成功后,,单击右键,选择"Start monitoring D2C messages",可以看到当前IOT Edge设备只是收集和直接发送数据,并无任何处理:
部署IOT Edge机器学习模块
Azure新一代机器学习服务,提供了一个强大的端到端的全生命周期的机器学习系统,从数据的处理,模型的训练,模型的管理,模型的发布都提供了完善的支持。通过Azure ML训练的模型,无论是机器学习模型,图像识别,语音识别等等,一样可以快速的发布在IOT Edge,通过这样的方式,真正将人工智能带到边界设备。
接下来我们介绍如何将机器学习模型部署到模拟的边界设备上,针对当前设备情况做最基本的诊断:
- Azure提供了比较丰富的将Azure ML部署到IOT Edge的例子,在这里我们选择异常检测的机器学习模型,更多的模型可以参考:
https://github.com/Azure/ai-toolkit-iot-edge
克隆该repo,并且进入目录IoT Edge anomaly detection tutorial目录,该目录下有两个文件,iot_score.py用来接受输入的参数,model.pkl是机器学习模型用来对异常进行检测。
- 请注意,Azure ML CLI和Azure CLI目前是分开的,需要单独安装,否则会报az ml无法找到的命令:
pip install -r https://aka.ms/az-ml-o16n-cli-requirements-file
- 首先创建一个机器学习实验账号
az ml account experimentation create -n mymldemo -g myaksdemo -l eastus2
- 注册相应的provider并设置本地执行环境::
az provider register -n Microsoft.MachineLearningCompute
az provider register -n Microsoft.ContainerRegistry
az provider register -n Microsoft.ContainerService
az ml env setup -l eastus2 -n mymlenv -g myaksdemo
az ml env set -n mymlenv -g myaksdemo
- 创建模型管理账户
az ml account modelmanagement create -l eastus2 -n mymldemo -g myaksdemo --sku-instances 1 --sku-name S1
- 创建机器学习模型并提交到容器注册表:
az ml service create realtime --model-file model.pkl -f iot_score.py -n machinelearningmodule -r python
- 获得容器注册表的相关信息:
az acr list -o table
az acr credential show --name mlcrpacreb1907133456
- 将容器注册表添加到边缘设备,以便于注册表中的容器可以部署到边界:
iotedgectl login --address mlcrpacreb1907133456.azurecr.io --username mlcrpacreb1907133456 --password jtTVyKwDQ=blPFuwDEBbkWXVyZFwvOqi
- 添加machine learning模块,保存后,选择下一步:
- 那么不同的两个边界设备模型之间如何通讯呢?这个时候就用到了设备设置的路有模块,在路由界面中,拷贝如下json片段:
{
"routes": {
"sensorToMachineLearning":"FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/abnormalmlmodule/inputs/amlInput\")",
"machineLearningToIoTHub": "FROM /messages/modules/abnormalmlmodule/outputs/amlOutput INTO $upstream"
}
}
第一句路由是将之前传感器处理的数据收集,但数据的处理对象是机器学习,第二句是数据经过机器学习模块处理之后,然后再发送回IOT Hub,其实智能的处理已经发生在边界,数据传回之前。添加完成后,点击提交,需要一点时间容器被部署到边界,状态变成running:
- 使用VSCode的IOT插件进行监控,从实际的处理结果我们也可以看到,机器学习模型接收基基本的输入数据,通过模型来判断数据是否为异常,设置异常标识(注意接收消息里面的anomaly项),将最终的结果返回给云端IOT Hub:
从这个例子我们可以看到,微软的IOT Edge结合了Azure新一代的机器学习服务,当然你可以写自己的逻辑和代码,将机器学习模型通过容器的image发布,然后通过设备管理发送到边界,在物联网的边界设备上实现了人工智能服务,这种技术可以广泛的运用于多种不同的场景,例如车联网,石油勘探,面部检测,终端图像识别等等,为将AI带到任何地方设置了清晰的技术路线。
posted on 2018-03-29 19:15 StevenLian 阅读(601) 评论(0) 编辑 收藏 举报