

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

# 运行代理
<a name="edge-getting-started-step5"></a>

在本部分中，您将使用 gRPC 将代理作为二进制文件运行，并检查您的设备和队列是否正在运行和收集示例数据。

1. **启动代理。**

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

   此示例使用 gRPC 来运行代理。gRPC 是一个开源的高性能远程程序调用 (RPC) 框架，可以在任何环境中运行。有关 gRPC 的更多信息，请参阅 [gRPC 文档](https://grpc.io/docs/)。

   要使用 gRPC，请执行以下步骤：

   1. 在 .proto 文件中定义服务。

   1. 使用协议缓冲区编译器生成服务器和客户端代码。

   1. 使用 Python（或 gRPC 支持的其他语言）gRPC API 为您的服务写入服务器。

   1. 使用 Python（或 gRPC 支持的其他语言）gRPC API 为您的服务写入客户端。

   您下载的发布构件包含可用于运行代理的 gRPC 应用程序。该示例位于发布构件的 `/bin` 目录中。`sagemaker_edge_agent_binary` 二进制可执行文件位于此目录中。

   要使用此示例运行代理，请提供套接字文件 (.sock) 和 JSON .config 文件的路径：

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

1. **检查您的设备。**

   检查您的设备是否已连接并对数据进行采样。通过手动或自动执行定期检查，您可以检查设备或队列是否正常工作。

   提供设备所属队列的名称和唯一设备标识符。在本地计算机上运行以下命令：

   ```
   sagemaker_client.describe_device(
       DeviceName=device_name,
       DeviceFleetName=device_fleet_name
   )
   ```

   对于给定模型，您可以看到名称、模型版本、最新采样时间以及上一次推理的时间。

   ```
   { 
     "DeviceName": "sample-device",
     "DeviceFleetName": "demo-device-fleet",
     "IoTThingName": "sample-thing-name-1",
     "RegistrationTime": 1600977370,
     "LatestHeartbeat": 1600977370,
     "Models":[
       {
           "ModelName": "mobilenet_v2.tar.gz", 
           "ModelVersion": "1.1",
           "LatestSampleTime": 1600977370,
           "LatestInference": 1600977370 
       }
     ]
   }
   ```

   `LastetHeartbeat` 提供的时间戳表示从设备收到的最后一个信号。`LatestSampleTime` 和 `LatestInference` 分别描述最后一个数据样本和推理的时间戳。

1. **检查您的队列。**

   检查您的队列是否正在使用 `GetDeviceFleetReport`。提供设备所属队列的名称。

   ```
   sagemaker_client.get_device_fleet_report(
       DeviceFleetName=device_fleet_name
   )
   ```

   对于给定模型，您可以看到名称、模型版本、最新采样时间、上次推理的时间以及存储数据样本的 Amazon S3 存储桶 URI。

   ```
   # Sample output
   {
    "DeviceFleetName": "sample-device-fleet",
    "DeviceFleetArn": "arn:aws:sagemaker:us-west-2:9999999999:device-fleet/sample-fleet-name",
    "OutputConfig": {
                 "S3OutputLocation": "s3://fleet-bucket/package_output",
     },
    "AgentVersions":[{"Version": "1.1", "AgentCount": 2}]}
    "DeviceStats": {"Connected": 2, "Registered": 2}, 
    "Models":[{
               "ModelName": "sample-model", 
               "ModelVersion": "1.1",
               "OfflineDeviceCount": 0,
               "ConnectedDeviceCount": 2,
               "ActiveDeviceCount": 2, 
               "SamplingDeviceCount": 100
               }]
   }
   ```