利用AWS SageMaker与英特尔®软硬件件技术加快AI推理速度
【导言】本文中,我们介绍了云边协同架构的优势、基于英特尔和 AWS 技术所开发的参考实现、以及更多帮助改善人类生活的用例。
作者:Vibhu Bithar,Chen Su,Devang Aggarwal
前言
2020 年是转型之年。全球新冠疫情从根本上改变了人们彼此互动的方式。在疫情加剧之际,保持社交距离对于我们创造安全的环境变得至关重要。通过在边缘部署 AI 和计算机视觉,英特尔和 AWS 团队推出了社交距离检测参考实现,开发人员只需一键安装和适当的定制操作,便可在您当地的社区扩展该技术。在本博文中,我们介绍了云边协同架构的优势、基于英特尔和 AWS 技术所开发的参考实现、以及更多帮助改善人类生活的用例。我们介绍了云边协同架构的优
云边协同架构的优势
- 边缘侧的安全性。数据隐私是许多行业(例如医疗保健和公共部门)的重要关注点。边缘设备可以存储和加密敏感数据,并在需要时保护用户的隐私。
- 低延迟。在边缘启用 AI 推理的优势在于可以避免数据往返云端数据中心进行处理。您将获得近乎实时的分析和决策能力,不必担心网络上的数据拥塞、数据中心停电和其他事件。
- 更高效的工作负载分配。借助边缘端和云端的算力,开发人员可以决定在边缘或云端处理多少工作负载。
势、基于英特尔和 AWS 技术所开发的参考实现、以及更多帮助改善人类生例。
英特尔® 边缘技术与 AWS 亚马逊云服务协同创新
在新冠疫情爆发后,世界各地的许多医学专家均表示保持社交距离是预防这种疾病传播的最有效的非药物方法之一。
为了支持当前的疫情防控,英特尔推出了一款强大的参考实现,通过英特尔® OpenVINO™ 工具套件分发版实施计算机视觉推理,以测量人们之间的社交距离并将数据保存至 InfluxDB,进而帮助抑制疫情传播。这些数据可在 Grafana 仪表板上进行直观显示。
本博文介绍了如何安装、部署与定制该参考实现。
https://software.intel.com/content/www/us/en/develop/article***ulti-camera-monitoring-reference-implementation.html
的机器上安装 AWS IoT python SDK:
https://docs.aws.amazon.com/greengrass/latest/developerguide/IoT-SDK.htmlAWS 组件并下载证书:https://docs.aws.amazon.com/greengrass/latest/developerguide/device-group.html
- 在“main.py”中修改代码,将设备连接至AWS IoT并将数据发送至 AWS cloud。
a. 添加Import导入语句。
i. 从 AWSIoTPythonSDK.MQTTLib 中导入 AWSIoTMQTTClient
ii. 导入json
b. 添加代码段以获取更多命令行参数,以集成 AWS IoT。
# AWS MQTT 客户端参数
parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host", help="Your AWS IoT custom endpoint")
parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path")
parser.add_argument("-c", "--cert", action="store", dest="certificatePath", help="Certificate file path")
parser.add_argument("-k", "--key", action="store", dest="privateKeyPath", help="Private key file path")
parser.add_argument("-id", "--clientId", action="store", dest="clientId", default="basicPubSub",help="Targeted client id")
parser.add_argument("-t", "--topic", action="store", dest="topic", default="sdk/test/Python", help="Targeted topic")
c. 使用参数变量设置局部变量。
#AWS MQTT 参数
host = args.host
rootCAPath = args.rootCAPath
certificatePath = args.certificatePath
privateKeyPath = args.privateKeyPath
port = 8883
clientId = args.clientId
topic = args.topicd.添加代码段以初始化 MQTT 客户端并设置连接配置。
#Setup AWS MQTT Client
myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
myAWSIoTMQTTClient.configureEndpoint(host, port)
myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath)
# AWSIoTMQTTClient connection configuration
myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20)
myAWSIoTMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
myAWSIoTMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myAWSIoTMQTTClient.configureMQTTOperationTimeout(5) # 5 s
# Connect to AWS IoT
myAWSIoTMQTTClient.connect()
e. 将topic和 AWS MQTT 客户端对象添加到Context类。
#Adding topic and AWS MQTT client object to context so it can be shared across the code
context = Context(manager, worker, db, models, num_reqs, args.input_queue_size - 1, ch_min_dist, show_period, args.no_show, grid_sizes, resolution,topic, myAWSIoTMQTTClient)
f.将变量添加到Context类的 init 函数。
i. def __init__(self, manager, worker, db, models, num_reqs, last_frame_id, min_distances, show_period, no_show, grid_sizes, display_resolution,topic,myAWSIoTMQTTClient):
g.使用传递到Context类的init 函数的值初始化局部变量
self.topic = topic
self.myAWSIoTMQTTClient = myAWSIoTMQTTClient
h.修改 update_social_violations 函数,将数据发送至 AWS IoT
i. 以特定格式添加时间戳,将其发送至 AWS TimeStream 数据库timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
ii.添加代码段以创建 MQTT 消息并发布到 AWS IoT
#This section will Publish people count and violations to AWS IoT main topic
#creating the message
message_indivChannel = {}
message_indivChannel['channel_id'] = str(ch_id)
message_indivChannel['people_count'] = people_count
message_indivChannel['social_distancing_violation'] = viol_count
message_indivChannel['timestamp'] = timestamp
#converting to JSON format
message_indivChannel_json = json.dump***essage_indivChannel)
#calling MQTT Client publish message
self.myAWSIoTMQTTClient.publish(self.topic,message_indivChannel_json, 1)
5.配置 AWS IoT,以将数据存储到 Timestream 数据库。
a. 添加新规则。
b.添加规则查询语句。
c.添加操作,选择 Timestream 表。
d.配置 Timestream 操作
e.创建一个新的数据库
f.创建一个新表。
g. 将尺寸设置为 channel_ id
注意,尺寸不能是“整数”
h. 针对MQTT payload中的数据设置时间戳
1.Value - ${time_to_epoch(timestamp, "yyyy-MM-dd HH:mm:ss.SSS")}
2.Unit - MILLISECONDS
i. 创建角色。
6.设置 Grafana
a.将主机上的 Grafana 升级到最新版本。
B.添加 AWS timestream 插件。
C.使用您的凭证配置 AWS 插件。
d.配置您的仪表板。
7.更新 run.sh 文件
python3 main.py --person_detector "$PERSON_DETECTOR" -d1 $DEVICE1 \
-m1_height $MODEL1_INPUT_HEIGHT -m1_width $MODEL1_INPUT_WIDTH \
--width $WIDTH --height $HEIGHT -n_s $NUM_SOURCES -n_c $NUM_CHANNELS \
-n_th $NUM_THREADS -i_q $INPUT_QUEUE_SIZE -i "$INPUT1" "$INPUT2" \
-min_social_distances $MIN_SOCIAL_DIST1 $MIN_SOCIAL_DIST1 -decode_device $DECODE_DEVICE \
-e "anee81iss8x57-ats.iot.us-west-2.amazonaws.com" -r "/home/vibhu/VibhuSocialDistancingData/AmazonRootCA1.pem" \
-c "/home/vibhu/VibhuSocialDistancingData/ac597af7e1-certificate.pem.crt" -k "/home/vibhu/VibhuSocialDistancingData/ac597af7e1-private.pem.key" \
-id "ieitank1" -t "esh/socialDistancing"
8.运行带有示例视频的应用。
违反社交距离规定的行为将在视频中被标记出来,用户可通过仪表板监控性能。
更多用例和软件产品
开发人员都希望开发出可定制的 AI 解决方案以解决实际问题。在识别出实际问题后,加快上市时间、降低开发成本并借助强大的生态系统进行扩展也至关重要。为实现以上的需求,英特尔在英特尔® 边缘软件中心上为开发人员提供了各类可直接部署、可复用的容器化软件包和用例。开发人员可以快速找到针对各类实际问题的参考实现,包括大量边缘到云端 AI 应用示例代码、使用教程和文档。