部署应用程序 - AWS Panorama

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

部署应用程序

要部署应用程序,您可以使用 AWS Panorama 应用程序 CLI 将其导入您的账户,构建容器,上传和注册资产,然后创建应用程序实例。本主题详细介绍了其中的每个步骤,并介绍后台操作。

如果您尚未部署应用程序,请参阅 AWS Panorama 入门 以获取演练。

有关定制和扩展示例应用程序的详细信息,请参阅 构建 AWS Panorama 应用程序

安装 AWS Panorama 应用程序 CLI

要安装 AWS Panorama 应用程序 CLI 和 AWS CLI,请使用 pip。

$ pip3 install --upgrade awscli panoramacli

要使用 AWS Panorama 应用程序 CLI 构建应用程序映像,您需要使用 Docker。在 Linux 上,还需要 qemu 和相关系统库。有关安装和配置 AWS Panorama 应用程序 CLI 的详细信息,请参阅该项目 GitHub 存储库中的 README 文件。

有关使用 WSL2 在 Windows 中设置构建环境的说明,请参阅 在 Windows 中设置开发环境

导入应用程序

如果您正在使用示例应用程序或第三方提供的应用程序,请使用 AWS Panorama 应用程序 CLI 导入该应用程序。

my-app$ panorama-cli import-application

此命令使用您的账户 ID 重命名应用程序软件包。软件包名称以其部署账户的账户 ID 开头。将应用程序部署到多个账户时,必须为每个账户分别导入和打包应用程序。

例如,本指南的示例应用程序是一个代码包和一个模型包,每个包都以占位符账户 ID 命名。import-application 命令会重命名这些包,使其使用 CLI 从您工作空间的 AWS 凭证中推断出账户 ID。

/aws-panorama-sample ├── assets ├── graphs │   └── my-app │   └── graph.json └── packages    ├── 123456789012-SAMPLE_CODE-1.0    │   ├── Dockerfile    │   ├── application.py    │   ├── descriptor.json    │   ├── package.json    │   ├── requirements.txt    │   └── squeezenet_classes.json    └── 123456789012-SQUEEZENET_PYTORCH-1.0    ├── descriptor.json    └── package.json

在软件包目录名称和指代这些包的应用程序清单 (graph.json) 中,123456789012 将被替换为您的账户 ID。您可以致电 aws sts get-caller-identity 联系 AWS CLI 确认您的账户 ID。

$ aws sts get-caller-identity { "UserId": "AIDAXMPL7W66UC3GFXMPL", "Account": "210987654321", "Arn": "arn:aws:iam::210987654321:user/devenv" }

构建容器映像

您的应用程序代码打包在 Docker 容器映像中,其中包括您在 Dockerfile 中安装的应用程序代码和库。使用 AWS Panorama 应用程序 CLI build-container 命令构建 Docker 映像并导出文件系统映像。

my-app$ panorama-cli build-container --container-asset-name code_asset --package-path packages/210987654321-SAMPLE_CODE-1.0 { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } Container asset for the package has been succesfully built at assets/5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz

此命令创建名为 code_asset 的 Docker 映像,并将文件系统导出到 assets 文件夹中的 .tar.gz 存档中。CLI 会根据应用程序 Dockerfile 所述,从 Amazon Elastic 容器注册表 (Amazon ECR) 中提取应用程序基础映像。

除容器存档外,CLI 还会为程序包描述符 (descriptor.json) 创建资产。两个文件都使用反映了原始文件哈希值的唯一标识符重命名。AWS Panorama 应用程序 CLI 还在程序包配置中添加了一个块,用于记录这两种资产的名称。这些名称会由设备在部署过程中使用。

packages/123456789012-SAMPLE_CODE-1.0/package.json – 带资产块
{ "nodePackage": { "envelopeVersion": "2021-01-01", "name": "SAMPLE_CODE", "version": "1.0", "description": "Computer vision application code.", "assets": [ { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } ], "interfaces": [ { "name": "interface", "category": "business_logic", "asset": "code_asset", "inputs": [ { "name": "video_in", "type": "media" },

build-container 命令中指定的代码资产名称必须与程序包配置中 asset 字段的值相匹配。在前面的示例中,两个值都是 code_asset

导入模型

您的应用程序的资产文件夹中可能有模型存档,或者您可以单独下载。如果您有新模型、更新的模型或更新的模型描述符文件,请使用 add-raw-model 命令将其导入。

my-app$ panorama-cli add-raw-model --model-asset-name model_asset \ --model-local-path my-model.tar.gz \ --descriptor-path packages/210987654321-SQUEEZENET_PYTORCH-1.0/descriptor.json \ --packages-path packages/210987654321-SQUEEZENET_PYTORCH-1.0

如果您只需要更新描述符文件,则可以复用资产目录中的现有模型。您可能需要更新描述符文件,以配置诸如浮点精度模式等功能。例如,以下脚本展示了如何使用示例应用程序执行该操作。

util-scripts/update-model-config.sh
#!/bin/bash set -eo pipefail MODEL_ASSET=fd1axmplacc3350a5c2673adacffab06af54c3f14da6fe4a8be24cac687a386e MODEL_PACKAGE=SQUEEZENET_PYTORCH ACCOUNT_ID=$(ls packages | grep -Eo '[0-9]{12}' | head -1) panorama-cli add-raw-model --model-asset-name model_asset --model-local-path assets/${MODEL_ASSET}.tar.gz --descriptor-path packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/descriptor.json --packages-path packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0 cp packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/package.json packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/package.json.bup

在您使用 CLI 重新导入模型程序包目录中的描述符文件之前,不会应用对描述符文件所做的更改。CLI 使用新的资产名称更新模型程序包配置,类似于在重建容器时更新应用程序代码包配置的方式。

上传应用程序资产

要上传和注册应用程序资产,包括模型存档、容器文件系统存档及其描述符文件,请使用 package-application 命令。

my-app$ panorama-cli package-application Uploading package SQUEEZENET_PYTORCH Patch version for the package 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 Deregistering previous patch version e845xmpl8ea0361eb345c313a8dded30294b3a46b486dc8e7c174ee7aab29362 Asset fd1axmplacc3350a5c2673adacffab06af54c3f14da6fe4a8be24cac687a386e.tar.gz already exists, ignoring upload upload: assets/87fbxmpl6f18aeae4d1e3ff8bbc6147390feaf47d85b5da34f8374974ecc4aaf.json to s3://arn:aws:s3:us-east-2:212345678901:accesspoint/panorama-210987654321-6k75xmpl2jypelgzst7uux62ye/210987654321/nodePackages/SQUEEZENET_PYTORCH/binaries/87fbxmpl6f18aeae4d1e3ff8bbc6147390feaf47d85b5da34f8374974ecc4aaf.json Called register package version for SQUEEZENET_PYTORCH with patch version 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 ...

如果资产文件或程序包配置没有更改,CLI 会跳过。

Uploading package SAMPLE_CODE Patch Version ca91xmplca526fe3f07821fb0c514f70ed0c444f34cb9bd3a20e153730b35d70 already registered, ignoring upload Register patch version complete for SQUEEZENET_PYTORCH with patch version 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 Register patch version complete for SAMPLE_CODE with patch version ca91xmplca526fe3f07821fb0c514f70ed0c444f34cb9bd3a20e153730b35d70 All packages uploaded and registered successfully

CLI 会将每个程序包的资产上传到您账户特定的 Amazon S3 接入点。AWS Panorama 为您管理接入点,并通过 DescribePackage API 提供有关接入点的信息。CLI 将每个程序包的资产上传到为其提供的位置,并按照程序包配置描述的设置将其注册到 AWS Panorama 服务。

使用 AWS Panorama 控制台部署应用程序

您可以使用 AWS Panorama 控制台部署应用程序。在部署过程中,您可以选择将哪些摄像机视频流传递给应用程序代码,并配置应用程序开发人员提供的选项。

部署应用程序
  1. 打开 AWS Panorama 控制台已部署的应用程序页面。

  2. 选择部署应用程序

  3. 将应用程序清单的内容 graph.json 粘贴到文本编辑器中。选择下一步

  4. 输入名称和描述。

  5. 选择继续部署

  6. 选择开始部署

  7. 如果您的应用程序使用角色,请从下拉菜单中选择。选择下一步

  8. 选择选择设备,然后选择您的设备。选择下一步

  9. 选择数据源步骤中,选择查看输入,然后将摄像头流添加为数据源。选择下一步

  10. 配置步骤中,配置开发人员定义的所有特定于应用程序的设置。选择下一步

  11. 选择部署,然后选择完成

  12. 在已部署的应用程序列表中,选择要监控其状态的应用程序。

部署过程需要 15 到 20 分钟。当应用程序启动时,设备的输出可能长时间处于空白状态。如果您遇到错误消息,请参阅 故障排除

自动化应用程序部署

您可以使用 CreateApplicationInstance API 自动执行应用程序部署过程。API 采用两个配置文件作为输入。应用程序清单说明了使用的程序包及其关系。第二个文件是覆盖文件,用于指定部署时对应用程序清单中值的覆盖。使用覆盖文件可以让您使用相同的应用程序清单,以不同的摄像机数据视频流部署应用程序,并配置其他应用程序的特定设置。

有关更多信息以及本主题中每个步骤的示例脚本,请参阅 自动化应用程序部署