

# 适用于视频转码工作负载的 Amazon ECS 任务定义
<a name="ecs-vt1"></a>

要在 Amazon ECS 上使用视频转码工作负载，请注册 [Amazon EC2 VT1](https://aws.amazon.com/ec2/instance-types/vt1/) 实例。注册这些实例后，您可以将实时和预渲染的视频转码工作负载作为 Amazon ECS 上的任务运行。Amazon EC2 VT1 实例使用 Xilinx U30 媒体转码卡来加速实时和预渲染的视频转码工作负载。

**注意**  
有关如何在 Amazon ECS 以外的容器中运行视频转码工作负载的说明，请参阅 [Xilinx 文档](https://xilinx.github.io/video-sdk/v1.5/container_setup.html#working-with-docker-vt1)。

## 注意事项
<a name="ecs-vt1-considerations"></a>

在 Amazon ECS 上开始部署 VT1 之前，请注意以下事项：
+ 您的集群可以包含 VT1 和非 VT1 实例的组合。
+ 您需要一个 Linux 应用程序，该应用程序使用具有加速 AVC（H.264）和 HEVC（H.265）编解码器的 Xilinx U30 媒体转码卡。
**重要**  
使用其他编解码器的应用程序可能不会在 VT1 实例上获得性能提升。
+ U30 卡上只能运行一个转码任务。每张卡都有两个与之关联的设备。您可以运行的转码任务数量与每个 VT1 实例的卡的数量一样。
+ 在创建服务或运行独立任务时，您可以在配置任务放置约束时使用实例类型属性。这样可以确保在您指定的容器实例上启动任务。这样做有助于确保您有效地使用资源，并确保视频转码工作负载任务在 VT1 实例上。有关更多信息，请参阅 [Amazon ECS 如何将任务放置在容器实例上](task-placement.md)。

  在以下示例中，任务在您的 `default` 集群上的 `vt1.3xlarge` 实例上运行。

  ```
  aws ecs run-task \
       --cluster default \
       --task-definition vt1-3xlarge-xffmpeg-processor \
       --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == vt1.3xlarge"
  ```
+ 您可以将容器配置为使用主机容器实例上可用的特定 U30 卡。您可以通过使用 `linuxParameters` 参数并指定设备详细信息来执行此操作。有关更多信息，请参阅 [任务定义要求](#ecs-vt1-requirements)。

## 使用 VT1 AMI
<a name="ecs-vt1-ami"></a>

您有两种选择可以在 Amazon EC2 上运行适用于 Amazon ECS 容器实例的 AMI。第一个选项是在 AWS Marketplace 上使用 Xilinx 官方 AMI。第二种选择是从示例存储库构建自己的 AMI。
+ [Xilinx 在 AWS Marketplace 上提供 AMI](https://aws.amazon.com/marketplace/pp/prodview-phvk6d4mq3hh6)。
+ Amazon ECS 提供了一个示例存储库，您可以使用该存储库为视频转码工作负载构建 AMI。该 AMI 随附 Xilinx U30 驱动程序。您可以在 [Github](https://github.com/aws-samples/aws-vt-baseami-pipeline) 上找到包含 Packer 脚本的存储库。有关 Packer 的更多信息，请参阅 [Packer 文档](https://developer.hashicorp.com/packer/docs)。

## 任务定义要求
<a name="ecs-vt1-requirements"></a>

要在 Amazon ECS 上运行视频转码容器，您的任务定义必须包含使用加速 H.264/AVC 和 H.265/HEVC 编解码器的视频转码应用程序。您可以按照 [Xilinx Github](https://xilinx.github.io/video-sdk/v1.5/container_setup.html#creating-a-docker-image-for-vt1-usage) 上的步骤来构建容器映像。

任务定义必须特定于实例类型。实例类型为 3xlarge、6xlarge 和 24xlarge。您必须将容器配置为使用主机容器实例上可用的特定 Xilinx U30 设备。您还可以使用 `linuxParameters` 参数执行此操作。下表详细介绍了特定于每种实例类型的卡和设备 SoC。


| 实例类型 | vCPU | RAM (GiB) | U30 加速器卡 | 可寻址的 XCU30 SoC 设备 | 设备路径 | 
| --- | --- | --- | --- | --- | --- | 
| vt1.3xlarge | 12 | 24 | 1 | 2 | /dev/dri/renderD128,/dev/dri/renderD129 | 
| vt1.6xlarge | 24 | 48 | 2 | 4 | /dev/dri/renderD128,/dev/dri/renderD129,/dev/dri/renderD130,/dev/dri/renderD131 | 
| vt1.24xlarge | 96 | 182 | 8 | 16 | /dev/dri/renderD128,/dev/dri/renderD129,/dev/dri/renderD130,/dev/dri/renderD131,/dev/dri/renderD132,/dev/dri/renderD133,/dev/dri/renderD134,/dev/dri/renderD135,/dev/dri/renderD136,/dev/dri/renderD137,/dev/dri/renderD138,/dev/dri/renderD139,/dev/dri/renderD140,/dev/dri/renderD141,/dev/dri/renderD142,/dev/dri/renderD143 | 

**重要**  
如果任务定义列出了 EC2 实例没有的设备，则任务将无法运行。当任务失败时，`stoppedReason` 中将出现以下错误消息：`CannotStartContainerError: Error response from daemon: error gathering device information while adding custom device "/dev/dri/renderD130": no such file or directory`。