自律走行車のための継続的インテグレーションと継続的デリバリーを Google Cloud で構築する
Google Cloud Japan Team
※この投稿は米国時間 2022 年 3 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。
サンフランシスコの道路は、車を運転しにくい場所として有名です。Cruise のデータによると、狭い道幅、たくさんの歩行者、自転車専用道の広範なネットワークが原因で、サンフランシスコでの運転が、郊外での運転に比べておよそ 40 倍も複雑なものになっています。このような複雑さのために、アメリカで 2 番目に人口密度の高い都市であるサンフランシスコは、今日の自律走行車(AV)における最先端の自動運転技術をテストするのに理想的な環境といえます。
Cruise は 2013 年から都市部での運転に集中的に取り組んでおり、480 万キロ以上の自動運転を行ってきました。そして、完全電気自動運転車のシェアサービスをもう少しで提供できるところまで来ています。2022 年の 1 月に、Cruise は大きな節目を迎えました。一般の人々が、サンフランシスコで初めて完全にドライバーレスの車に乗車したのです。
都市部において完全自律走行車のフリートを開発することは、非常に大きな挑戦です。成功するためには、路上走行のための AV 技術と、Cruise のエンジニアが社内で使用するツールのエコシステムの両方を構築する必要がありました。
このサイクルを作成する際には、どうすればエンジニアに最大限の力を与えられるかを真剣に考えました。このような自前のテクノロジー チェーンは、すぐに管理が難しくなってしまう恐れがあります。エンジニアにとって最悪なのは、日常業務において、いくつものツールと格闘したり、大量のツールを行ったり来たりしなければならないことです。開発サイクルの合理化とサポート、クラウドファーストのインフラストラクチャ戦略の適用、システムのシームレスなスケーリングを実現するうえで、Google Cloud は役立っています。車両、データロギング、可視化、データ マイニング、ML モデリングで使用するフレームワークはすべて、道路からコード(そしてコードから道路)への適用を迅速かつ安全なものにする共通の基盤の上に構築されています。
これから、Cruise が自社開発した AV 開発サイクルの柱を、Google Cloud がどのようにサポートしているかについて詳しく説明します。
基盤となるプラットフォーム
この開発サイクルの土台となるのは、Google Kubernetes Engine(GKE)および Compute Engine 仮想マシン(VM)と、Cloud Storage、CloudSQL、PubSub、Cloud Functions、BigQuery、App Engine、Cloud Logging および Monitoring など他の Google Cloud インフラストラクチャ サービスからなる強力な基盤です。マルチテナント、マルチ環境の Platform as a Service を構築し、また、Cruise のアプリケーション開発者が瞬時に大規模なイテレーションとデプロイを行う助けになる「Juno」という自前のツールを構築するために、Cruise では Kubernetes(k8s)を使用することにしました。
この Kubernetes と Istio ベースのサービス プラットフォーム(PaaS)上では、Kubernetes(k8s)のオペレータとコントローラのセットを流用して、k8s クラスタの管理、ノードプール移行の管理に加えて、モニタリング、ロギング、サービス メッシュのためのデフォルト アドオンの追加を行っています。内部では、Google Cloud の Config Connector を流用して依存関係を管理しつつ、k8s リソースを作成しています。マルチテナントに Namespace が設定されたコンテナ化されたワークロードを実行して、高いコンピューティング使用率と運用上のオーバーヘッド削減を実現します。サービス プラットフォーム上で開発、ステージング、本番の各環境に k8s クラスタを分離することにしました。また、これらの環境それぞれのための標準化された継続的インテグレーションと継続的デリバリーもあります。
インフラストラクチャ レベルでは、垂直方向と水平方向の境界を使用して Google Cloud を構成しました。Kubernetes の Namespace RBAC、Google Cloud プロジェクト、Google グループを含むこれらの境界とアクセス許可は、自前のリソース ライフサイクル マネージャーである PaaS Juno を使用して一元管理されます。
垂直方向では、Google Cloud のフォルダとプロジェクトを使用して、各チームの環境、ステージング、本番環境を、他のチームのものから分離しています。これらの環境それぞれには、独自の VPC、サブネット、ファイアウォール、相互接続、NAT ゲートウェイ、プライベート DNS に加えて、GKE/k8s、Compute Engine、Cloud Storage、Pub/Sub など、アプリケーション サービスで必要な他の Google Cloud サービスが含まれています。サービス同士はネットワークによって接続されていますが、サービス間のトラフィックは簡単に監査し、制限できます。
水平方向では、各環境内の Google Cloud プロジェクトにより、テナントごとの個別のアクセス許可管理と可視性の制約が可能になっています。プロジェクトのおかげで、テナントは自分に関係することだけに集中することができます。テナントを分離することで、悪意のある人物による不正アクセスが難しくなり、テナントが意図せず互いに影響を与えることを防止できます。
ML Brain: 取り込み、分析、モデリング
この強力な基盤が整うと、パイプラインへのデータの入力を開始できます。Cruise では、毎日サンフランシスコ都市部の道路を走行して、道路に関する多くの匿名化されたデータを収集しています。
大まかに言うと、カメラ、LIDAR、音声からレーダーに至るまでのすべてのセンサーデータを入力として取り込んでいます。そして、Cloud Storage と Dataflow を使用して高度にスケーラブルな ETL パイプラインとデータ レイクを作成し、数ペタバイトの道路上のデータを、迅速かつ効率的に作成して抽出します。BigQuery を活用することにより、数百人のエンジニアは毎月 2 千万を超えるクエリによって数エクサバイトのデータを処理することができています。
しかしサンフランシスコといえども、役立つ情報が含まれているのは元データの 1% 未満であり、これをうまく利用するにはノイズの中から有益な情報を区別する必要があることにすぐに気づきました。この規模での解決策は自動化しかないため、AI ベースの自動的なイベント抽出、分類への投資を集中的に行いました。今では、状況理解のための高度な AI を使用して、さまざまな種類のイベントのラベル付けとタグ付けを自動で行っており、すべてのエンジニアがすぐにそれらを利用できるようにしています。たとえば、パノプティックセグメンテーションを活用して道路脇のごみ箱や他の物体を認識する一方で、きめ細かい分類を使用して緊急車両を他の車と区別します。さらに時間とセンサーを用いて物体を追跡することによりその動きを予測しています。
データを取り込んで分析したら、動的な ML Brain に戻します。これは、収集されたデータからアクティブにマイニングを行い、古いモデルのパフォーマンスを超える新しいモデルを自動的にトレーニングする、継続的な機械学習です。これは、毎月数百年分のGPU 時間を消費して、数百のモデルを同時にトレーニングできる Vertex AI を使用して行います。
Google Cloud が提供する自動化、データ共有、コラボレーションの組み合わせは、Cruise のエンジニアの日々の業務を強力に後押ししています。
テストとシミュレーション: AV「タイムマシン」の構築
フリートの ML Brain を強化することに加えて、Cruise では Google Cloud インフラストラクチャを活用して大規模なテストと検証を行い、毎週複数回リリースするために必要な自信を持つことができています。
フリートが道路でどれほどの距離を走行したとしても、走行距離数だけでは捕捉できない予期せぬ出来事が発生するものです。そのため、道路のデータと強力なシミュレーション データを組み合わせることにより、将来のお客様が乗車する際の安全性と快適さを確保する必要があります。
これを実現するために、Cruise では Compute Engine 上で協働する、テストとシミュレーションのための非常に複雑な分散型ツール スイートを開発しました。
まず、「Morpheus」と呼ばれるツールを使用して、特定のテストシナリオを迅速に生成します。シミュレーションは、複雑でまれなイベントを任意の時間帯、条件、場所で強力にテストできるスケーラブルな方法です。夕暮れ時に霧が発生している一方通行の道路で AV 走行をテストしたほうがいいのではないだろうか?日の出の時刻に、急な坂を東に向かって走行する様子を確認してはどうだろうか?試合開催日の夕方のラッシュアワーに、エンバーカデロ通りを走行してみるのはどうだろうか?Morpheus は自動的にリアルに起こりうる状況を作り出して「走行」し、Cruise の厳格な安全基準を維持します。
シミュレーションでユニークな運転シナリオを追加するために、Cruise では「Road-to-Sim」というツールを開発しました。これは、実世界での数百万キロの走行から得られた情報を結合して、道路データからフル シミュレーション環境を生成します。これは自動化された変換パイプラインで、人手を介さずに任意の道路上のイベントをプロシージャルに再現します。このおかげでイベントの交換や、車両や歩行者の種類などの属性の変更を簡単に行うことができます。
シミュレーションは、地理的なスケーリングへの対応にも役立っています。Cruise では、都市全体をプロシージャルに再現できる「WorldGen」というシステムを開発しました。これにより、新しい運用設計の領域でのテストを、効率的に、短いリードタイムで行うことができます。複数ソースからのデータを組み合わせることにより、広い地理的領域全体のシームレスな地図タイルを構築して、すぐに大規模なテストで使用できます。
この強力なシミュレーション エンジンの根幹にあるのは、自前のバッチ スケジューリング プラットフォームである「Hydra」です。これは、Google Cloud のカスタム インスタンスを使用して最適化された数万のカスタム VM にスケールアップして、毎日数百万のシミュレーションを実行します。
Hydra はバッチ サービスを提供しますが、Cruise にはシミュレーション、正解ラベル付け、リモート ビルドなどさまざまな種類のバッチ ワークロードがあります。全体として、Google Cloud の高度な弾力性を備えたプラットフォームによって、1 日あたり数十年分の GPU 時間と数千年分のコア時間を消費することが容易になります。結果として、Cruise のシミュレーション エンジンは毎日数ペタバイトの合成データを生成し、それらは解析、分析されて、開発サイクルに戻されます。
シミュレーションとテストのためのこの強力なエンジンは、現在の AV フリートの拡張と改善に役立つだけでなく、次世代の車両である Origin のテストと検証を素早く行う際にも役に立ちます。Origin が実際に道路を走行する前に、シミュレーション内で事前に何年分もの走行を行い、クラウド内で無数のロングテール イベントを体験し、学習していることになります。
不確実性の中で復元力を確保する
Google Cloud は、継続的な開発サイクルのサポートに加えて、Cruise のインフラストラクチャおよびエンジニアリングのチームがこれまでになかった難題や急成長に対処するための支援もしてくれました。2020 年の初め以降、エンジニアリング チームの規模が 2 倍になり、従業員の仕事がオフィスから在宅勤務に切り替わり、テクノロジー業界が前例のないサプライ チェーンの不足に直面する中で、Cruise Development Platform には復元力が備わっていることが証明されました。
この期間中、Google Cloud は組織全体のシームレスなスケーリングを可能にしてくれました。
パンデミックが始まる前の月から現在までに、コンピューティング使用量が 6 倍に増加
パンデミックに伴う移行期間中に、日々のコンピューティング使用量が 3 倍に増加
合計キャパシティを 3 倍にすることで、任意の 1 日の基本使用量を 150 倍以上スケールアップすることが可能に
現在では、1 分あたり数テラバイトのデータのシリアル化が可能
強力でスケーラブルなインフラストラクチャは、複雑な要素が絡み合う都市部での乗車サービスを有料ユーザーに提供するために不可欠です。その実現のときが近づくにつれ、Google Cloud は Cruise のシステムにこれまでにないほどのスピードと弾力性を与え、フリートが必要とする高いレベルの安全性を確保してくれています。
Cruise AV を推進する複雑なテクノロジー チェーンについての詳細は、Cruise のエンジニアリング側面を紹介した動画「Under the Hood(英語)」をご覧ください。
- Cruise 社エンジニアリング担当エグゼクティブ バイス プレジデント、Mo El Shenawy 氏