

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

# 手动下载并设置 Edge Manager 代理


根据您的操作系统、架构和 Amazon 区域下载 Edge Manager 代理。代理会定期更新，因此您可以选择根据发布日期和版本选择代理。拥有代理后，请创建 JSON 配置文件。指定设备 IoT 事物名称、队列名称、设备凭证和其他键值对。有关必须在配置文件中指定的密钥的完整列表，请参阅[运行 Edge Manager 代理](#edge-device-fleet-running-agent)。您可以将代理作为可执行二进制文件运行，也可以将其作为动态共享对象 (DSO) 进行链接。

## 代理的工作原理


代理在设备的 CPU 上运行。代理在编译作业期间指定的目标设备的框架和硬件上运行推理。例如，如果您为 Jetson Nano 编译了模型，代理在提供的[深度学习运行时](https://github.com/neo-ai/neo-ai-dlr) (DLR) 支持 GPU。

对于受支持的操作系统，该代理以二进制格式发布。检查您的操作系统是否受支持并满足下表中的最低操作系统要求：

------
#### [ Linux ]

**版本：**Ubuntu 18.04

**支持的二进制格式：**x86-64 位（ELF 二进制）和 ARMv8 64 位（ELF 二进制）

------
#### [ Windows ]

**版本：**Windows 10 版本 1909

**支持的二进制格式：**x86-32 位 (DLL) 和 x86-64 位 (DLL)

------

## 安装 Edge Manager 代理


要使用 Edge Manager 代理，您必须首先获取发布构件和根证书。发布构件存储在 `us-west-2` 区域的 Amazon S3 存储桶中。要下载构件，请指定您的操作系统 (`<OS>`) 和 `<VERSION>`。

根据您的操作系统，将 `<OS>` 替换以下任一内容：


| 32 位 Windows | 64 位 Windows | Linux x86-64 | Linu ARMv8 | 
| --- | --- | --- | --- | 
| windows-x86 | windows-x64 | linux-x64 | linux-armv8 | 

`VERSION` 分为三个组成部分：`<MAJOR_VERSION>.<YYYY-MM-DD>-<SHA-7>`，其中：
+ `<MAJOR_VERSION>`：发布版本。发布版本当前设置为 `1`。
+ `<YYYY-MM-DD>`：构件发布的时间戳。
+ `<SHA-7>`：构建发布的存储库提交 ID。

您必须以 `YYYY-MM-DD` 格式提供 `<MAJOR_VERSION>` 和时间戳。我们建议您使用最新的构件发布时间戳。

在命令行中运行以下命令以获取最新的时间戳。用您的操作系统替换 `<OS>`：

```
aws s3 ls s3://sagemaker-edge-release-store-us-west-2-<OS>/Releases/ | sort -r
```

例如，如果您有 Windows 32 位操作系统，请运行：

```
aws s3 ls s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/ | sort -r
```

这将返回：

```
2020-12-01 23:33:36 0 

                    PRE 1.20201218.81f481f/
                    PRE 1.20201207.02d0e97/
```

此示例的返回输出显示了两个发布构件。第一个发布构件文件指出，发行版本的主要发行版本为`1`，时间戳为`20201218`（ YYYY-MM-DD格式），并有 `81f481f` SHA-7 提交 ID。

**注意**  
前面的命令假定您已经配置了 Amazon Command Line Interface。有关如何配置用于交互的设置的 Amazon CLI 更多信息 Amazon，请参阅[配置 Amazon CLI](https://docs.amazonaws.cn//cli/latest/userguide/cli-chap-configure.html)。

根据您的操作系统，使用以下命令安装构件：

------
#### [ Windows 32-bit ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/<VERSION>/<VERSION>.zip .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Windows 64-bit ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x64/Releases/<VERSION>/<VERSION>.zip .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x64/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Linux x86-64 ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/<VERSION>/<VERSION>.tgz .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Linux ARMv8 ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/<VERSION>/<VERSION>.tgz .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/<VERSION>/sha256_hex.shasum .
```

------

您还必须下载根证书。在将模型工件加载到边缘设备 Amazon 之前，此证书会对其进行验证。

从支持的操作系统列表中替换与您的平台对应的 `<OS>`，然后将 `<REGION>` 替换为 Amazon 所在的区域。

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-<OS>/Certificates/<REGION>/<REGION>.pem .
```

## 运行 Edge Manager 代理


您可以将 SageMaker AI Edge Manager 代理以可执行和可链接格式 (ELF) 可执行二进制文件的形式作为独立进程运行，也可以将其作为动态共享对象 (.ll) 进行链接。Linux 支持将其作为独立的可执行二进制文件运行，这也是首选模式。Windows 支持将其作为共享对象 (.dll) 运行。

在 Linux 上，我们建议您通过作为初始化 (`init`) 系统一部分的服务来运行二进制文件。如果您希望直接运行二进制文件，可以在终端中执行此操作，如以下示例所示。如果您使用的是现代操作系统，则无需在运行代理之前进行其他安装，因为所有要求都静态内置在可执行文件中。这使您可以灵活地在终端上、作为服务或在容器内运行代理。

要运行代理，请先创建 JSON 配置文件。指定以下键/值对：
+ `sagemaker_edge_core_device_name`：设备名称。此设备名称需要与设备队列一起在 SageMaker Edge Manager 控制台中注册。
+ `sagemaker_edge_core_device_fleet_name`：设备所属队列的名称。
+ `sagemaker_edge_core_region`：与设备、队列和 Amazon S3 存储桶关联的 Amazon 区域。这与注册设备和创建 Amazon S3 存储桶的区域相对应（它们应该相同）。模型本身可以在不同的区域使用 SageMaker Neo 进行编译，此配置与模型编译区域无关。
+ `sagemaker_edge_core_root_certs_path`：根证书的绝对文件夹路径。这用于使用相关 Amazon 账户验证设备。
+ `sagemaker_edge_provider_aws_ca_cert_file`：Amazon 根 CA 证书 (AmazonRootCA1.pem) 的绝对路径。这用于使用相关 Amazon 账户验证设备。 `AmazonCA`是所有者的证书 Amazon。
+ `sagemaker_edge_provider_aws_cert_file`: Amazon IoT 签名根证书的绝对路径 (`*.pem.crt`)。
+ `sagemaker_edge_provider_aws_cert_pk_file`: Amazon IoT 私钥的绝对路径。 (`*.pem.key`)。
+ `sagemaker_edge_provider_aws_iot_cred_endpoint`: Amazon IoT 凭证端点 (*identifier*.iot. *region*.amazonaws.com）。此端点用于凭证验证。有关更多信息，请参阅[将设备连接到 Amazon IoT](https://docs.amazonaws.cn/iot/latest/developerguide/iot-connect-devices.html)。
+ `sagemaker_edge_provider_provider`：这表示正在使用的提供程序接口的实施。提供程序接口与终端网络服务进行通信，以执行上传、检测信号和注册验证。默认情况下，该选项设置为 `"Aws"`。我们允许自定义实施提供程序接口。如果没有提供程序，可以将其设置为 `None`，也可以设置为 `Custom` 以使用提供的相关共享对象路径进行自定义实施。
+ `sagemaker_edge_provider_provider_path`：提供提供程序实施共享对象的绝对路径（.so 或 .dll 文件）。`"Aws"` 提供程序 .dll 或 .so 文件随代理发布一起提供。此字段是必填字段。
+ `sagemaker_edge_provider_s3_bucket_name`：Amazon S3 存储桶的名称（不是 Amazon S3 存储桶 URI）。存储桶的名称中必须包含 `sagemaker` 字符串。
+ `sagemaker_edge_log_verbose`（布尔值）：可选。这将设置调试日志。选择 `True` 或 `False`。
+ `sagemaker_edge_telemetry_libsystemd_path`：仅适用于 Linux，`systemd` 实施代理崩溃计数器指标。设置 libsystemd 的绝对路径以启用崩溃计数器指标。可以通过在设备终端中运行 `whereis libsystemd` 来找到默认的 libsystemd 路径。
+ `sagemaker_edge_core_capture_data_destination`：上传捕获数据的目的地。选择 `"Cloud"` 或 `"Disk"`。默认被设置为 `"Disk"`。将其设置为 `"Disk"`，可将输入和输出张量以及辅助数据写入您首选位置的本地文件系统。如果写入 `"Cloud"`，则会使用 `sagemaker_edge_provider_s3_bucket_name` 配置中提供的 Amazon S3 存储桶名称。
+ `sagemaker_edge_core_capture_data_disk_path`：在本地文件系统中设置绝对路径，如果 `"Disk"` 是目的地，则会将捕获数据文件写入该路径。如果将 `"Cloud"` 指定为目的地，则不使用此字段。
+ `sagemaker_edge_core_folder_prefix`：当您将 `"Cloud"` 指定为捕获数据目的地 (`sagemaker_edge_core_capture_data_disk_path)` 时，Amazon S3 中用于存储已捕获数据的路径的父前缀。如果将 `"Disk"` 设置为数据目的地，则会将捕获的数据存储在 `sagemaker_edge_core_capture_data_disk_path` 下的子文件夹中。
+ `sagemaker_edge_core_capture_data_buffer_size`（整数值）：捕获数据循环缓冲区大小。它表示缓冲区中存储的最大请求数。
+ `sagemaker_edge_core_capture_data_batch_size`（整数值）：捕获数据批处理大小。它表示从缓冲区处理的一批请求的大小。此值必须小于 `sagemaker_edge_core_capture_data_buffer_size`。对于批量大小，建议最多使用缓冲区的一半大小。
+ `sagemaker_edge_core_capture_data_push_period_seconds`（整数值）：以秒为单位的捕获数据推送周期。当缓冲区中有批量大小请求或者该时间段结束时（以先到者为准），将会处理缓冲区中的一批请求。此配置设置了这个时间段。
+ `sagemaker_edge_core_capture_data_base64_embed_limit`：上传捕获数据的限制（以字节为单位）。整数值。

您的配置文件应类似于以下示例（已指定您的特定值）。此示例使用默认 Amazon 提供程序 (`"Aws"`)，但未指定定期上传。

```
{
    "sagemaker_edge_core_device_name": "device-name",
    "sagemaker_edge_core_device_fleet_name": "fleet-name",
    "sagemaker_edge_core_region": "region",
    "sagemaker_edge_core_root_certs_path": "<Absolute path to root certificates>",
    "sagemaker_edge_provider_provider": "Aws",
    "sagemaker_edge_provider_provider_path" : "/path/to/libprovider_aws.so",
    "sagemaker_edge_provider_aws_ca_cert_file": "<Absolute path to Amazon Root CA certificate>/AmazonRootCA1.pem",
    "sagemaker_edge_provider_aws_cert_file": "<Absolute path to Amazon IoT signing root certificate>/device.pem.crt",
    "sagemaker_edge_provider_aws_cert_pk_file": "<Absolute path to Amazon IoT private key.>/private.pem.key",
    "sagemaker_edge_provider_aws_iot_cred_endpoint": "https://<Amazon IoT Endpoint Address>",
    "sagemaker_edge_core_capture_data_destination": "Cloud",
    "sagemaker_edge_provider_s3_bucket_name": "sagemaker-bucket-name",
    "sagemaker_edge_core_folder_prefix": "Amazon S3 folder prefix",
    "sagemaker_edge_core_capture_data_buffer_size": 30,
    "sagemaker_edge_core_capture_data_batch_size": 10,
    "sagemaker_edge_core_capture_data_push_period_seconds": 4000,
    "sagemaker_edge_core_capture_data_base64_embed_limit": 2,
    "sagemaker_edge_log_verbose": false
}
```

发布构件包含位于 `/bin` 目录中的名为 `sagemaker_edge_agent_binary` 的二进制可执行文件。要运行二进制文件，请使用 `-a` 标志在您选择的目录中创建套接字文件描述符 (.sock)，并指定使用 `-c` 标志创建的代理 JSON 配置文件的路径。

```
./sagemaker_edge_agent_binary -a <ADDRESS_TO_SOCKET> -c <PATH_TO_CONFIG_FILE>
```

以下示例显示了指定目录和文件路径的代码片段：

```
./sagemaker_edge_agent_binary -a /tmp/sagemaker_edge_agent_example.sock -c sagemaker_edge_config.json
```

在此示例中，在 `/tmp` 目录中创建了一个名为 `sagemaker_edge_agent_example.sock` 的套接字文件描述符，该描述符指向与名为 `sagemaker_edge_config.json` 的代理位于同一工作目录的配置文件。