本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
部署应用程序
要部署应用程序,您可以使用 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 控制台部署应用程序。在部署过程中,您可以选择将哪些摄像机视频流传递给应用程序代码,并配置应用程序开发人员提供的选项。
部署应用程序
部署过程需要 15 到 20 分钟。当应用程序启动时,设备的输出可能长时间处于空白状态。如果您遇到错误消息,请参阅 故障排除。
自动化应用程序部署
您可以使用 CreateApplicationInstance API 自动执行应用程序部署过程。API 采用两个配置文件作为输入。应用程序清单说明了使用的程序包及其关系。第二个文件是覆盖文件,用于指定部署时对应用程序清单中值的覆盖。使用覆盖文件可以让您使用相同的应用程序清单,以不同的摄像机数据视频流部署应用程序,并配置其他应用程序的特定设置。
有关更多信息以及本主题中每个步骤的示例脚本,请参阅 自动化应用程序部署。