

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CARLA を使用して自動運転シミュレーションスイープを実行する
<a name="tutorial-carla-simulation"></a>

このチュートリアルでは、設定可能なマルチセンサーキャプチャを使用して [CARLA](https://carla.org/) 自動運転シミュレーションパラメータスイープを実行する方法について説明します。Docker イメージを構築し、Amazon Elastic Container Registry (Amazon ECR) にプッシュし、[GitHub の自動運転 CARLA ジョブバンドル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/autonomous_driving_carla)を Deadline Cloud ファームの GPU フリートに送信します。

このジョブは、車線変更のカットインシナリオを実行します。このシナリオでは、NPC 車両がエゴ車両の背後で開始し、105 秒の先行取得フェーズ中にエゴの 20 メートル前に加速してそれ自体を配置し、エゴの車線をカットします。設定可能なエゴ速度、NPC 速度、NPC 開始距離をスイープし、パラメータの組み合わせごとにタスクを作成します (デフォルトは 2×2×2 = 8 タスク）。各タスクは、選択したカメラ視点からマルチセンサーデータをキャプチャし、次の出力を生成します。
+ 選択した各カメラの視点からの RGB フレーム
+ セマンティックセグメンテーションフレーム
+ LiDAR 点群 (`.ply`)
+ 2D および 3D 境界ボックス (KITTI 形式)
+ カメラごとのシナリオビデオ (H.264 MP4)
+ ステッチグリッドビデオ (複数のカメラを選択した場合)

次の動画は、Deadline Cloud での CARLA シミュレーションスイープワークフローを示しています。

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


**推定時間:** Docker イメージビルドを含む 1～2 時間。タスクは通常、それぞれ約 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. [AWS アカウント](https://aws.amazon.com/resources/create-account/)がまだない場合は作成し、GPU インスタンスにアクセスできることを確認します (`g6.4xlarge`推奨）。

1. CARLA イメージを構築するために [Docker](https://docs.docker.com/get-docker/) をローカルにインストールします。

1. アカウントに [Amazon ECR](https://aws.amazon.com/ecr/) リポジトリを作成して、ビルドされたイメージをホストします。

1. [Deadline Cloud CLI ](https://github.com/aws-deadline/deadline-cloud)をローカルにインストールします。

## ファームをセットアップする
<a name="tutorial-carla-setup"></a>

Conda キュー環境 (チャネル: `conda-forge`、パッケージ: `ffmpeg`) と GPU フリート (最小: 16 vCPU と 64 GiB メモリを備えた NVIDIA GPU) を持つキューを持つ Deadline Cloud ファームが必要です。

**IAM アクセス許可** – タスクスクリプトはキューロールの認証情報`docker pull`で実行されるため、キューロールには Amazon ECR プルアクセス許可が必要です。次のようなポリシーをアタッチします。

```
{
  "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 Container Toolkit が必要です。[GitHub の Docker および NVIDIA Container Toolkit ホスト設定スクリプト](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/host_configuration_scripts/docker_nvidia_container_toolkit)をフリートにアタッチします。詳細については、「[Deadline Cloud ワーカーで NVIDIA GPUs を使用して Docker コンテナを実行する](examples-host-config-docker-nvidia.md)」を参照してください。

## Docker イメージを構築してプッシュする
<a name="tutorial-carla-build-image"></a>

ジョブは、Docker [Hub の carlasim/carla:0.9.16 ベースイメージに基づいて Docker ](https://hub.docker.com/r/carlasim/carla)コンテナ内で実行されます。基本 CARLA イメージにはシミュレーターが含まれていますが、このジョブに必要な Python 環境、シナリオランナー、センサーキャプチャスクリプトがありません。Python 3.10、、`scenario_runner`およびエントリポイントとキャプチャスクリプトのカスタムイメージレイヤー。各 Deadline Cloud タスクが CARLA を起動し、運転シナリオを実行し、センサーデータを 1 つのコンテナに記録できるようにします。

**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 は Docker Hub `carlasim/carla:0.9.16`からベースイメージとしてプルします。最初のビルドでは、約 8 GB がダウンロードされます。

1. イメージを Amazon 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. バンドルディレクトリから、送信者を開きます。

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

1. **ジョブ固有の設定**タブの**シナリオ設定**で、ego 速度、NPC 速度、NPC 距離をカンマ区切りの整数として設定します。クロスプロダクトはタスクグリッドを作成します。

1. **カメラビューポイント**で、キャプチャするカメラを選択します。**フロント**がデフォルトの選択です。使用可能な位置は、前面、前面左、前面右、背面、背面左、背面右です。

1. Advanced ****で、**コンテナイメージ URI** を に設定`{{ACCOUNT_ID}}.dkr.ecr.{{REGION}}.amazonaws.com/carla-deadline:0.9.16`し、Amazon ECR リポジトリが存在する AWS リージョンを設定します。

1. [**Submit**] を選択してください。

または、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/セマンティックモザイクイメージを生成します。レイアウトは、6 つすべてがアクティブな場合は 2 x 3 で、それ以外の場合は小さいグリッドです。
+ **キャプチャレートはカメラ数に応じてスケール** – キャプチャスクリプトはフラッシュごとに PNGs を同期的に書き込みます。6 台のカメラすべてで、各フラッシュは 2 台ではなく 14 台の PNGs を 1 台のカメラで書き込み、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/)
+ [GitHub の Docker および NVIDIA Container Toolkit ホスト設定スクリプト](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/host_configuration_scripts/docker_nvidia_container_toolkit)
+ [Deadline Cloud ワーカーで NVIDIA GPUs を使用して Docker コンテナを実行する](examples-host-config-docker-nvidia.md)
+ [Deadline Cloud の Open Job Description (OpenJD) テンプレート](build-job-bundle.md)