

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

# 使用 CARLA 进行自动驾驶仿真扫描
<a name="tutorial-carla-simulation"></a>

本教程将引导您使用可配置的多传感器捕获功能运行 CARLA 自动驾驶仿真参数扫描。[CARLA ](https://carla.org/) 网站上的 CARLA 是一个开源模拟器。你构建一个 Docker 镜像，将其推送到亚马逊弹性容器注册表（亚马逊 ECR），然后[在 GitHub 网站上将](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/autonomous_driving_carla)自动驾驶 CARLA 任务包提交给 Deadline Cloud 农场上的 GPU 队列。

该任务运行的是换道切入场景，其中一辆 NPC 车辆从自我车辆后面开始，在 105 秒的抢先阶段加速到比自我领先20米的位置，然后切入自我的车道。它涵盖了可配置的自我速度、NPC 速度和 NPC 起始距离，为每个参数组合（默认 2×2×2 = 8 个任务）创建一个任务。每项任务都会从您选择的摄像机视点捕获多传感器数据，并生成以下输出：
+ 每个选定摄像机视点的 RGB 帧
+ 语义分割框架
+ 激光雷达点云 () `.ply`
+ 2D 和 3D 边界框（KITTI 格式）
+ Per-camera 场景视频 (H.264 MP4)
+ 拼接网格视频（如果您选择多台摄像机）

以下视频演示了 Deadline Cloud 上的 CARLA 仿真扫描工作流程。

[![AWS Videos](https://img.youtube.com/vi/xitKHbbBHDw/0.jpg)](https://www.youtube.com/watch?v=xitKHbbBHDw)


**预计时间：**1—2 小时，包括 Docker 镜像构建。每个任务通常在大约 13 分钟内完成。

运行本教程会产生处理任务的 GPU 工作实例和 Amazon ECR 图像存储的费用。

## 概述
<a name="tutorial-carla-overview"></a>

要完成本教程，请按照以下步骤操作：

1. 完成先决条件。

1. 设置你的农场。

1. 构建和推送 Docker 映像。

1. 提交模拟作业。

1. 监控作业。

1. 检查输出。

1. 清理资源。

## 先决条件
<a name="tutorial-carla-prerequisites"></a>

在开始之前，请完成以下设置：

1. [https://aws.amazon.com/resources/create-account/](https://aws.amazon.com/resources/create-account/)如果您还没有 AWS 账户，请创建一个账户，确保它可以访问 GPU 实例（`g6.4xlarge`推荐）。

1. 在本地安装 Docker 来构建 CARLA 镜像。有关安装说明，请参阅 Docker [ 网站上的 ](https://docs.docker.com/get-docker/) Get Docker。

1. 在您的账户中创建 [ Amazon ECR ](https://aws.amazon.com/ecr/) 存储库来托管构建的映像。

1. 在本地安装 Deadline Cloud CLI。有关安装说明，请参阅网站上的[截止日期云](https://github.com/aws-deadline/deadline-cloud)存储库。 GitHub 

## 设置你的农场
<a name="tutorial-carla-setup"></a>

你需要一个 Deadline Cloud 农场，其队列具有 conda 队列环境（频道:`conda-forge`，软件包:`ffmpeg`）和 GPU 队列（至少：1 个 NVIDIA GPU、16 个 vCPU 和 64 GiB 内存）。

**IAM 权限 ** — 您的队列角色需要 Amazon ECR 提取权限，因为任务脚本`docker pull`在队列角色证书下运行。附上如下所示的策略：

```
{
  "Version": "2012-10-17", 		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability"
      ],
      "Resource": "arn:aws:ecr:{{REGION}}:{{ACCOUNT_ID}}:repository/*"
    },
    {
      "Effect": "Allow",
      "Action": "ecr:GetAuthorizationToken",
      "Resource": "*"
    }
  ]
}
```

**舰队主机配置 ** — 您的舰队工作人员需要 Docker 和 NVIDIA 容器工具包。将 GitHub 网站上的 [ Docker 和 NVIDIA 容器工具包主机配置脚本](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/host_configuration_scripts/docker_nvidia_container_toolkit)附加到您的队列。有关更多信息，请参阅 [使用 NVIDIA GPU 在 Deadline Cloud workers](examples-host-config-docker-nvidia.md)。

## 生成并推送 Docker 镜像
<a name="tutorial-carla-build-image"></a>

该任务基于 Docker 网站上的:0.9.16 [ carlasim/carla 基础镜像在 ](https://hub.docker.com/r/carlasim/carla) Docker 容器内运行。基本 CARLA 映像包括模拟器，但缺少此工作所需的 Python 环境、场景运行器和传感器捕获脚本。Python 3.10 上的自定义映像层`scenario_runner`，以及入口点和捕获脚本，因此每个 Deadline Cloud 任务都可以在单个容器中启动 CARLA、执行驾驶场景和记录传感器数据。

**构建和推送 Docker 镜像**

1. 如果您没有 Amazon ECR 存储库，请创建一个：

   ```
   aws ecr create-repository --repository-name carla-deadline --region {{REGION}}
   ```

1. 从`autonomous_driving_carla`捆绑包的`docker/`目录中生成镜像：

   ```
   cd docker/
   docker build -t carla-deadline:0.9.16 .
   ```
**注意**  
Dockerfile `carlasim/carla:0.9.16` 从 Docker Hub 中提取出来作为基础镜像。第一个版本下载大约 8 GB。

1. 将图像推送到亚马逊 ECR：

   ```
   aws ecr get-login-password --region {{REGION}} | \
     docker login --username AWS --password-stdin {{ACCOUNT_ID}}.dkr.ecr.{{REGION}}.amazonaws.com
   
   docker tag carla-deadline:0.9.16 \
     {{ACCOUNT_ID}}.dkr.ecr.{{REGION}}.amazonaws.com/carla-deadline:0.9.16
   
   docker push {{ACCOUNT_ID}}.dkr.ecr.{{REGION}}.amazonaws.com/carla-deadline:0.9.16
   ```

## 提交模拟作业
<a name="tutorial-carla-submit"></a>

**向 GUI 提交者提交作业**

1. 从 bundle 目录中，打开提交者：

   ```
   cd autonomous_driving_carla
   deadline bundle gui-submit .
   ```

1. 在**Job-specific 设置**选项卡的**场景设置下，将自我速度**、NPC 速度和 NPC 距离配置为逗号分隔的整数。交叉产品可创建您的任务网格。

1. 在 “**摄像机视点” 下**，选择要捕获的摄像机。**Front ** 是默认选项。可用位置包括前、左前、右前、后、左后和右后。

1. 在 “**高级” 下**，将您的**容器镜像 URI 设置**为`{{ACCOUNT_ID}}.dkr.ecr.{{REGION}}.amazonaws.com/carla-deadline:0.9.16`和 Amazon ECR 存储库所在的 AWS 区域。

1. 选择**提交**。

或者，使用 CLI 提交：

```
deadline bundle submit . \
  --farm-id {{FARM_ID}} \
  --queue-id {{QUEUE_ID}} \
  --name "CARLA Lane Change Demo" \
  -p ImageURI={{ACCOUNT_ID}}.dkr.ecr.{{REGION}}.amazonaws.com/carla-deadline:0.9.16 \
  -p AwsRegion={{REGION}}
```

## 监控任务
<a name="tutorial-carla-monitor"></a>

在 Deadline Cloud 控制台中监控进度。每个任务在任务表中显示其参数值 (`EgoSpeed``NpcSpeed`、、`NpcDistance`)。每个任务通常在大约 13 分钟内完成。

日志输出显示：
+ 场景生成和参数值
+ CARLA 服务器启动和就绪
+ 传感器捕获进度（每台摄像机的帧数）
+ 每台摄像机的视频编码
+ 网格视频拼接（如果您选择了多台摄像机）

## 查看输出
<a name="tutorial-carla-output"></a>

**下载输出**

1. 作业完成后，从您在提交时使用的相同目录运行下载命令，这样`OutputDir`路径（默认`./outputs`）就会解析到相同的位置：

   ```
   deadline job download-output --job-id {{job-id}}
   ```

1. Deadline Cloud 会将输出恢复到您在提交作业时选择的`OutputDir`目录中。

每个任务都会在以其参数命名的子目录中生成输出：

```
outputs/
└── ego20_npc30_dist10/
    ├── rgb/
    │   ├── front/frame_000001.png ... frame_000062.png
    │   └── rear/frame_000001.png ... frame_000062.png
    ├── semantic/
    │   ├── front/...
    │   └── rear/...
    ├── lidar/frame_000001.ply ...
    ├── bbox_2d/{front,rear}/frame_*.txt
    ├── bbox_3d/frame_*.txt
    └── video/
        ├── front_scenario.mp4
        ├── rear_scenario.mp4
        └── grid_scenario.mp4
```

## 已知限制条件
<a name="tutorial-carla-limitations"></a>
+ **仅限 Linux ** — CARLA Docker 镜像需要带有 NVIDIA GPU 驱动程序的 Linux 工作人员必须在 Linux 舰队上运行。
+ **仅限 x86\_64 ** — CARLA Docker 镜像不支持 ARM 架构。
+ **镶嵌图像 **-当您选择 2 个或更多摄像机时，作业会生成 RGB/semantic 马赛克图像。当所有 6 个都处于活动状态时，布局为 2×3，否则为较小的网格。
+ **捕捉速率随摄像机数量的变化而**变化 — 捕捉脚本每次刷新都会同步写入 PNG。对于所有 6 个摄像头，每次刷新都会写入 14 个 PNG，而不是单个摄像机写入 2 个，并且增加的刷新 I/O速度会减慢刷新低于 7 FPS 目标的速度。视频编码器固定为 7 FPS，因此同样的场景在启用少量摄像机的情况下每台摄像机生成的视频更长，在启用许多摄像机的情况下生成更短、更密集的多视角视频。这种同步设计是经过深思熟虑的权衡，以保持样本的架构小巧且易于调整。生产管道将对传感器进行并行化。 I/O

## 清理
<a name="tutorial-carla-cleanup"></a>

为避免持续收费，请清理您为本教程创建的资源：

**清理教程资源**

1. 如果您专门为本教程创建了 GPU 队列，请将其停止或删除。如果您使用的是预先存在的共享队列，请将其保留在原处。

1. 如果您不再需要该图像，请删除 `carla-deadline` Amazon ECR 存储库。

## 相关资源
<a name="tutorial-carla-related"></a>

以下资源提供了其他信息：
+ [ GitHub 网站](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/autonomous_driving_carla)上的示例源代码
+ [CARLA ](https://carla.org/) 网站上的 CARLA 模拟器
+ [ GitHub 网站上的 Docker 和 NVIDIA 容器工具包主机配置脚](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/host_configuration_scripts/docker_nvidia_container_toolkit)本
+ [使用 NVIDIA GPU 在 Deadline Cloud workers](examples-host-config-docker-nvidia.md)
+ [打开 Deadline Cloud 的职位描述 (OpenJD) 模板](build-job-bundle.md)