View a markdown version of this page

CARLA を使用して自動運転シミュレーションスイープを実行する - Deadline クラウド

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

CARLA を使用して自動運転シミュレーションスイープを実行する

このチュートリアルでは、設定可能なマルチセンサーキャプチャを使用して CARLA 自動運転シミュレーションパラメータスイープを実行する方法について説明します。Docker イメージを構築し、Amazon Elastic Container Registry (Amazon ECR) にプッシュし、GitHub の自動運転 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 シミュレーションスイープワークフローを示しています。

推定時間: Docker イメージビルドを含む 1~2 時間。タスクは通常、それぞれ約 13 分で完了します。

このチュートリアルを実行すると、タスクを処理する GPU ワーカーインスタンスと Amazon ECR イメージストレージに対して料金が発生します。

概要

このチュートリアルを完了するには、次の手順に従います。

  1. 「前提条件」を完了します。

  2. ファームをセットアップします。

  3. Docker イメージをビルドおよびプッシュします。

  4. シミュレーションジョブを送信します。

  5. ジョブをモニタリングします。

  6. 出力の確認

  7. リソースをクリーンアップします。

前提条件

開始する前に、次の設定を完了します。

  1. AWS アカウントがまだない場合は作成し、GPU インスタンスにアクセスできることを確認します (g6.4xlarge推奨)。

  2. CARLA イメージを構築するために Docker をローカルにインストールします。

  3. アカウントに Amazon ECR リポジトリを作成して、ビルドされたイメージをホストします。

  4. Deadline Cloud CLI をローカルにインストールします。

ファームをセットアップする

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 ホスト設定スクリプトをフリートにアタッチします。詳細については、「Deadline Cloud ワーカーで NVIDIA GPUs を使用して Docker コンテナを実行する」を参照してください。

Docker イメージを構築してプッシュする

ジョブは、Docker Hub の carlasim/carla:0.9.16 ベースイメージに基づいて Docker コンテナ内で実行されます。基本 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
  2. autonomous_driving_carla バンドルの docker/ ディレクトリから、イメージを構築します。

    cd docker/ docker build -t carla-deadline:0.9.16 .
    注記

    Dockerfile は Docker Hub carlasim/carla:0.9.16からベースイメージとしてプルします。最初のビルドでは、約 8 GB がダウンロードされます。

  3. イメージを 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

シミュレーションジョブを送信する

GUI 送信者を使用してジョブを送信するには
  1. バンドルディレクトリから、送信者を開きます。

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

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

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

  5. [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

ジョブのモニタリング

Deadline Cloud コンソールで進行状況をモニタリングします。各タスクは、タスクテーブルにそのパラメータ値 (EgoSpeedNpcSpeedNpcDistance) を表示します。タスクは通常、それぞれ約 13 分で完了します。

ログ出力には以下が表示されます。

  • シナリオ生成とパラメータ値

  • CARLA サーバーの起動と準備

  • センサーキャプチャの進行状況 (カメラあたりのフレーム数)

  • 各カメラのビデオエンコード

  • グリッドビデオのステッチング (複数のカメラを選択した場合)

出力を確認する

出力をダウンロードするには
  1. ジョブが完了したら、送信時に使用したのと同じディレクトリからダウンロードコマンドを実行し、OutputDirパス (デフォルト ./outputs) が同じ場所に解決されるようにします。

    deadline job download-output --job-id job-id
  2. 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

既知の制限事項

  • 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 を並列化します。

クリーンアップ

継続的な課金を回避するには、このチュートリアル用に作成したリソースをクリーンアップします。

チュートリアルリソースをクリーンアップするには
  1. このチュートリアル専用の GPU フリートを作成した場合は、そのフリートを停止または削除します。既存の共有フリートを使用した場合は、そのままにします。

  2. イメージが不要になった場合は、carla-deadlineAmazon ECR リポジトリを削除します。

以下のリソースは追加情報を提供します。