利用AWS SageMaker与英特尔®软硬件件技术加快AI推理速度

小o 更新于 3年前

【导言】本文中,我们介绍了云边协同架构的优势、基于英特尔和 AWS 技术所开发的参考实现、以及更多帮助改善人类生活的用例。

作者:Vibhu Bithar,Chen Su,Devang Aggarwal

前言

2020 年是转型之年。全球新冠疫情从根本上改变了人们彼此互动的方式。在疫情加剧之际,保持社交距离对于我们创造安全的环境变得至关重要。通过在边缘部署 AI 和计算机视觉,英特尔和 AWS 团队推出了社交距离检测参考实现,开发人员只需一键安装和适当的定制操作,便可在您当地的社区扩展该技术。在本博文中,我们介绍了云边协同架构的优势、基于英特尔和 AWS 技术所开发的参考实现、以及更多帮助改善人类生活的用例。我们介绍了云边协同架构的优

 云边协同架构的优势

  • 边缘侧的安全性。数据隐私是许多行业(例如医疗保健和公共部门)的重要关注点。边缘设备可以存储和加密敏感数据,并在需要时保护用户的隐私。
  • 低延迟。在边缘启用 AI 推理的优势在于可以避免数据往返云端数据中心进行处理。您将获得近乎实时的分析和决策能力,不必担心网络上的数据拥塞、数据中心停电和其他事件。
  • 更高效的工作负载分配。借助边缘端和云端的算力,开发人员可以决定在边缘或云端处理多少工作负载。

势、基于英特尔和 AWS 技术所开发的参考实现、以及更多帮助改善人类生例。

英特尔® 边缘技术与 AWS 亚马逊云服务协同创新

在新冠疫情爆发后,世界各地的许多医学专家均表示保持社交距离是预防这种疾病传播的最有效的非药物方法之一。

为了支持当前的疫情防控,英特尔推出了一款强大的参考实现,通过英特尔® OpenVINO™ 工具套件分发版实施计算机视觉推理,以测量人们之间的社交距离并将数据保存至 InfluxDB,进而帮助抑制疫情传播。这些数据可在 Grafana 仪表板上进行直观显示。

本博文介绍了如何安装、部署与定制该参考实现。


  1. https://software.intel.com/content/www/us/en/develop/article***ulti-camera-monitoring-reference-implementation.html
     
  2.  的机器上安装 AWS IoT python SDK
    https://docs.aws.amazon.com/greengrass/latest/developerguide/IoT-SDK.html
  3.  AWS 组件并下载证书:https://docs.aws.amazon.com/greengrass/latest/developerguide/device-group.html
     
  4. “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 应用示例代码、使用教程和文档。 

0个评论