Amazon Web Services ブログ

4Kモニターで60 FPSをリモート環境で実現する ~ QUIC UDP経由のNICE DCVを使ったストリーム配信

この記事は、”Stream a remote environment with NICE DCV over QUIC UDP for a 4K monitor at 60 FPS” を翻訳したものです。

近年、ゲーム開発の分散化が進んでいます。
2020年、COVID-19はリモートにおけるソリューションの需要と革新を加速させました。

形態や規模には関係なくゲームチームには2つの選択肢が残されていました。急いで自宅にワークステーションを持ち帰って、仮想プライベートネットワーク (VPN) 経由でオフィスにアクセスするか、オフィスに開発用のワークステーションを残し、リモートデスクトッププロトコル (RDP) 経由で自宅のハードウェアからアクセスするかのどちらかでした。しかし、現在、ゲーム開発者たちは、完全なクラウド移行により、自分たちの思い通りの、より永続的に作業できる環境を作り出そうとしています。

多くのゲームスタジオで、ワークステーションや継続的インテグレーション/継続的デプロイ(CI/CD) パイプラインのクラウドインフラストラクチャへの移行が進んでいます。AWSのゲーム開発クラウドソリューションを活用することで、ゲーム開発チームはリモートで迅速にコーディング、デプロイ、リリースを行うための必要なリソースを得られます。以前は、分散型の開発パイプラインを作成するために、ゲームスタジオはエンジニアにハードウェアを渡し、新しく作成した環境のオンボーディングに膨大な時間を費やす必要がありました。コストの削減をしながら、没入感がありユーザーを楽しませるゲームの構築により多くの時間を費やしつつ、さらに世界中にいる従業員たちのハイブリッドな作業環境のサポートをするために、開発者はAWSを利用して、クラウドでのゲーム制作(GPIC)のソリューションに移行し、リモートでのQAテスト、プレスへのゲーム配信、没入感のある環境での3D開発ストリーミングの統合などの様々なユースケースで活用しています。

すべてのクラウド上でのゲーム制作のユースケースにおいては重要な命題があります。それは、いかにしてストリーミング中に高いフレームレート(FPS) を保つか?というものです。本記事では、AWS クラウド上で、ストリーミング60 FPSでストリーミングできるようにリモートワークステーションを構築し、NICE DCVでQUIC UDP通信を利用する手順を説明します。NICE DCVは、リモートデスクトップやアプリケーションストリーミングを安全にかつ高パフォーマンスで配信できるリモートディスプレイプロトコルです。

重要なポイント

  • AWSのマーケットプレイスで入手可能な NICE DCV for Windows (NVIDIAゲーミングドライバーが入っているG4dn) のAMIをつかって、AWSのワークステーションをセットアップします。この AMIは、QUIC UDPがデフォルトで有効になっています
  • ネットワークを TCPおよびUDP接続に設定し制限をかける。
  • QUIC UDPを利用してDCV Viewer でワークステーションにアクセスし、開発用のソフトウェアをインストールする

免責事項
このブログの手順は、チュートリアルおよび初期ストリーミングの概念実証(PoC)を目的としており、完全なエンタープライズソリューションではありません。御社の組織に適したアーキテクチャを設計するには、こちらからお問い合わせください。

前提条件

このチュートリアルを始める前に、開発者は下記の準備が必要です。

  • 必要なワークステーションの数を用意するためのAmazon Elastic Compute Cloud (Amazon EC2)のG4dnインスタンス数の制限を引き上げられるAWS アカウント
  • Amazon VPCとセキュリティグループの作成および設定できる権限と、G4dn インスタンスファミリーのEC2 オンデマンドインスタンスを立ち上げられる権限
  • WindowsとAWS IAM、セキュリティグループ、VPC ネットワーキングに関する中級者レベルの知識
  • まずは基本を理解するために、VPNや内部ネットワークからデモの設定を行うことをお勧めします。追加の変数を入れるのはその後にしましょう
  • インストールされているソフトウェアにより前後しますが、60分ほどの時間を確保してください

クイックバージョン — AWS CloudShell 自動ワークステーションスクリプト (10 分)

ゲームやその他のソフトウェアをテストするために、コマンドラインと自動化用スクリプトを使ってワークステーションをスピンアップする場合は、AWS Samples GitHubに上がっている単一のスクリプトの AWS CloudShell .sh ファイルをチェックアウトしてください。このスクリプトは、このブログで QUIC UDPでNICE DCVをデモをするのに使ったAMIと同じようにサポートするために作成されました。

この AWS サンプルでは、小さいInfrastructure as Code(IaC)を用いてデプロイします。
ユーザーは、 AWS コンソールから直接利用できるブラウザベースのシェルである AWS CloudShellを使うことで、少ないコマンドでワークステーションをデプロイし、ログインすることができます。AWS Samples GitHubとこのブログで使うスクリプトはどちらも NICE DCV AMI を利用しているため、AWS Marketplaceでサブスクライブする必要はありません。ただし、AWS Sampleのクイックバージョンまたはこのブログで紹介するステップバイステップのウォークスルーに進む前に、G4dnインスタンスの制限を引き上げておく必要があります。

ウォークスルー (約 60 分)

パート 1 : サーバー (NICE DCVサーバーAMI 起動)

ネットワークの設定(VPC、セキュリティグループ、ルートテーブル)

1. VPC を作成します。このデモでは、us-east-1 (バージニア北部) またはその他のリージョンを使い、10.0.0.0/16 IPv4 CIDR ブロックを作ります。VPC名はnicedcv-quicudp-demoにします。

2. インターネットゲートウェイを追加して、インターネットゲートウェイが含まれるようにVPC のルートを更新します。

3. インターネットゲートウェイを nicedcv-quicudp-demo VPC にアタッチします。

4. インターネットゲートウェイを経由するパブリックインターネットを許可するようにルートを設定します。

5. サブネットを作成します。このデモでは、/24 サブネットマスクマスクを使用して、パブリックサプネット (10.0.1.0/24) とプライベートサプネット (10.0.2.0/24)を1つずつ合計2つのサブネットを作成します。これにより、サブネットごとに最大 255個のIP(Amazonが専有しているものを除くと251 個)を使用でき、VPC とサブネットに拡張できる余地が十分にあります。

6. パブリックサブネット(PublicSubnetA)を選択します。Actions から Modify auto-assign IP を選択します。この画面で、 Enable auto-assign public IPv4 address チェックボックスをオンにします。 このサブネットでインスタンスを起動すると、自動的にパブリックなIPv4 アドレスが設定されるようになります。Save を選択します。

このワークステーションのネットワークセキュリティのベストプラクティスに関する注意
本ブログでは、NICE DCV に焦点を当てているため、ワークステーションのアーキテクチャの高可用性や、リモートワークステーションのネットワーキングのためのフリート設計はスコープ外となっております。ただし、チーム毎にリモートワークステーションを論理的に分離することを推奨します。パブリックサブネットとプライベートサブネットを使って論理的な分離しつつ、より小さな CIDR ブロック範囲にネットワークを制限することで、ネットワーク設計によりアクセスを保護し、ワークステーションのAmazon EBSボリュームに保存されている機密情報をより細かく制御できます。ほとんどのワークステーションでは、プライベートサブネットにインスタンスを配置する必要があります。しかし、本ブログでは、プライベートホストゾーン、bastionホスト、NAT ゲートウェイの追加や、パブリックサブネットとプライベートサブネット間のルーティングを処理するための手順を省くことで複雑さを減らすために、パブリックサブネット内でインスタンスを起動しています。ただし自分のIPアドレスからのアクセスのみにIP制限を行っています。

7. デモ用の新しいセキュリティグループを作成します。そして、2 つのインバウンドルールを作成します。一つはTypeをCustom UDP、Port rangeを8443、SourceをMy IP として作成します。もう一つはTypeをCustom TCP、Port rangeを8443 、SourceをMy IP として作成します。これで、インスタンスのアクセスは自分のIPからのインバウンドトラフィックのみが許可されます。

8. アウトバウンドルールはTypeがAll Trafficで、 Destinationが 0.0.0.0/0 に設定されたままにします。そして Create security group ボタンを押してセキュリティグループを作成します。

NICE DCV AMI を使ってワークステーションをスピンアップする

ネットワークの設定ができたので、最初のワークステーションを作成する準備ができました。

1. EC2 コンソールで新しいキーペアを作成します。リモートワークステーションにログインするためのパスワード生成に使います。

重要! .pem ファイルは安全な場所に保存してください。このファイルを使うと、インスタンスにアクセスしてWindows 管理者パスワードを取得できてしまいます。

2. AWS マーケットプレイスで、NICE DCV for Windows (G4dn と NVIDIA ゲーミングドライバー) のページにアクセスし、Continue to Subscribe を選択します。

注: AWS マーケットプレイスのAMIを使わず、NVIDIA ゲーミングドライバーのインストールを自分で管理したい場合は、NICE DCVからアクセスして、インスタンスに NICE DCV サーバーを手動でインストールすることもできます。ただし、AWS マーケットプレイス AMI を使用したほうが時間を節約できるでしょう。

3. DCVはAmazonの会社なので、マーケットプレイスのリストに登録する必要はなく、Subscriptions are not required for this product.と表示されます。 Continue to Configuration を選択します。

4. このデモにおいては、すでに検証済なのは 64-bit (x86) Amazon Machine Image (AMI)、software version 2021.2 (September 9, 2021)、 US East (N. Virginia)です。選択した g4dn のサイズに応じて、AMIの1 時間あたりの料金が請求されます。Continue to Launchを選択します。

5. AWS マーケットプレイスでは、ストレージの設定をすることはできません。ほとんどの開発者は、開発に必要なソフトウェアやテストしたいゲームをインストールするために、ワークステーションに大きなストレージを必要としています。Launch this software ページで、 Choose Action のドロップダウンで Launch from Website に変更します。

6. EC2 インスタンスタイプを g4dn.4xlarge に変更します。これにより、16 vCPUのNVIDIA Tesla T4 GPU(16 GB)マシンになります。VPC 設定で先に作成した VPC、サブネット設定をパブリックサブネット、セキュリティグループの設定をデモ用のセキュリティグループ、キーペアを先に作成したデモ用のキーペアに変更します。その後にLaunchを選択します。

この手順によりEC2 コンソールからインスタンスが起動します。

Windows でストレージを増やす

QUIC UDP経由のNICE DCVを使ったG4dn上でのテストしようとしている全てのゲームとアプリケーションを保存するためには、初期の設定より多くのC:ドライブの容量が必要となります。C:ドライブで使うボリュームを変更していきましょう。

1. EC2のインスタンス画面から Storageタブに移動します。そこでデバイス名が/dev/sda1のボリュームIDを選択します。そうすると30 GiBと表示されます。

2. ActionsからModify Volumeを選択します。本来、ボリュームサイズを変更する前にはスナップショットを作成するのがベストプラクティスですが、本ブログの手順では、インスタンスを作成したばかりなので、スナップショットは作成せずに、ボリュームを変更してしまいます。Sizeを、30 から 250 に変更して、アプリケーションスペースを十分に確保します。Modifyを選択します。

3. Modify Volume Screen 画面で内容を確認し、Yesを選択します。最適化を行うためにこの手順には 10 ~ 20 分かかることがありますが、完了を待つことなく次のステップに進むことができます。

ワークステーションのパスワード取得

インスタンスの初期化が完了し、EC2 コンソールのStatus Checkで 2/2とチェックに合格しましたと表示されると、ワークステーションにログインする準備が整いました。

1. インスタンスを選択します。EC2 コンソールのインスタンスでConnectを選択します。次いで、RDP clientを選択します。

表示されているパブリック IPをメモします。パスワードも必要になるので下記の手順で取得します。

2. パスワードを取得するには、Get Passwordを選択します。ブラウザから、先に作成したキーペアの.pemファイルをアップロードします。次に、Decrypt Passwordを選択します。複合したパスワードは安全な場所にコピーしてください。

パート 2 : クライアント — DCV Viewer をダウンロードし、QUIC UDP 経由でワークステーションにログインする

1. https://www.nice-dcv.com/から自分の環境に合わせてDCV クライアントをダウンロードします。本ブログでは、macOS (x86_64) クライアントでバージョンは2021.2を使用しており、2019 MacBook Pro の macOS Catalina 10.15.7 でテストしています。

2. ローカルマシンにDCV Viewer をインストールして立ち上げます。DCV Viewer で、Connection Settingsを選択します。次にProtocolを選択し、ドロップダウンでQUIC (with Datagram Extension)/UDPが選択されていることを確認します。TCP、UDPのポートが 8443 に設定されていることを確認し、Applyを選択します。

3. 接続画面に戻り、ホストのパブリック IP を入力し、それに続いて Administrator と入力し、キーペアを使用して先に取得したパスワードを入力します。

4. connectを選択します。NICE DCV ビューアウィンドウの上部に 8443が含まれるタイトルとともにWindows 画面が表示されるはずです。

5. 検索でDisk Management と入力します。ディスクの初期化を求めるメッセージが表示されたら、Okayを選択します。Disk 0は250.00 GBと表示されます。また、Disk 1は未割り当てで209.55 GBであることも確認できます。

6. D: ドライブを作成するためにDisk 1 ストレージを割り当てる必要があります。Disk 1で右クリックし、New Simple Volume を選択します。ウィザードで Nextを選択します。デフォルトの 214574 のままにして、もう一度 Nextを選択します。

7. Assign the following drive letter Dのままにして、Nextを選択します。デフォルトの設定を全てそのままにして、NTFSとしてフォーマットします。Nextを選択し、”New Volume” というタイトルをそのまま使用するか消すかを決めて、 Finishを選択します。これで、ゲームやアプリケーションを保存できる D: ドライブが確認できます。右クリックして、”Mark this partition as active”に設定します。

8. Windows では、ボリュームは次のようになります。

最終的に、必要な容量はマシンで実行するアプリケーションとゲームの数によって決まります。C: ドライブは、インスタンス自体からデタッチできる EBS ボリュームです。今の状態だと、D: ドライブに保存されているものは、インスタンスを終了すると全て消えてしまいます。

ソフトウェアのインストールとフレームレートのテスト

QUIC UDP 経由でインスタンスに正常に接続できたら、開発とゲームのテストに必要なソフトウェアをインストールできます。

クラウド内のソフトウェアの中には、大規模なワークステーションのフリートを管理する場合、ライセンスサーバーまたはエンタープライズライセンス契約が必要なものがあります。また、IDE (統合開発環境) や CI/CD ソリューションなどのソフトウェアでは、ワークステーションとは別に追加のストレージが必要であったり、バージョン管理とビルドプロセスをワークステーションから切り離すためにデプロイをその中で完結させるアーキテクチャが必要になることがあります。最後に、eSportsイベント用に仮想マシンを導入する場合、開発者はエンドプレイヤーにできる限り物理的に近いマシンが必要で、低レイテンシーで配信する必要があります。AWS アカウントチームは、ソフトウェアのニーズとユースケースに応じて、ワークステーションソリューションのスケーリングと設計を支援することができます。

本ブログでは、ワークステーションを PC として使用して、リモートQA ユーザビリティテストシナリオのためのゲームをテストし、リモートQAを行う従業員にワークステーションを提供する前に、このワークステーションにおいて理想的なフレームレートを得られることを確認します。

Windows で接続したら、Connection > Streaming Mode に移動して、QUIC UDP 経由で接続されていることを確認します。Streaming Modeウィンドウがロードされ、Streaming Mode (QUIC)が表示されます。このウィンドウは、後でフレームレートを確認するためにも使います。マシン上で何もしていないので、FPSは0と表示されます。NICE DCVは、ピクセルに変化がないことは認識しています。

本ブログの例では、AWS のお客様であるProletariatが開発した、無料でプレイできるバトルロワイヤルゲーム、 Spellbreakをダウンロードし、C: ドライブにインストールします。Spellbreakは、ファンタジーの世界を舞台にした楽しいアクション満載のスペルスリンガーです。以下のスクリーンショットは、2019 16-inch Mac Book Pro、3072 x 1920 のディスプレイ解像度のマシンでアトランタからus-east-1にある EC2 G4dn.4xlarge インスタンスにアクセスし、Spellbreakが最大 60 FPS を実行できている様子を示しています。

フレームレートに関する注意: フレームレートはネットワークのレイテンシ、画面上のピクセル密度とアクティビティの変化、モニターの解像度とサイズ、およびアプリケーションの強度によって異なります。 NICE DCVコーデックは、可能な限り最高の応答性を提供するために、これらの変数と帯域幅とのバランスをとっています。

NICE DCV を初めて使用する場合、一部のゲームやエンジンをサポートするには、カメラの相対マウス位置を有効にする必要があります。Mac上では、Connection > Relative Mouse Positionで設定するか、Shift + Command + F8 キーを押すことで設定できます。

まとめ

本ブログでは、リモートワークステーションを含むゲームのストリーミングのユースケースの調査に加え、エンドユーザー向けゲームのQAのテスト、QUIC UDP経由のNICE DCV を使ったプレス用デモを行うことを目的としています。
一度ソフトウェアをインストールしてテストができれば、AMI を作成することで、ソリューションをスケーリングできます。

ワークステーションのフリートが必要な場合は、クリエイティブスタジオでVFX、アニメーション、インタラクティブコンテンツを制作できる Amazon Nimble Studioと、フルマネージドで非永続的なアプリケーションおよびデスクトップストリーミングサービスである Amazon AppStream 2.0 を見てみてください。どちらも、Amazon FSx for Windows File Serverとの統合をサポートし、永続的でスケーラブルなファイルストレージを実現します。Amazon Nimble Studio と Amazon AppStream 2.0 はどちらも NICE DCV コーデック上で構築されており、大規模なワークステーションをサポートするために必要な運用コストを軽減します。フリートソリューションの構築を検討する際には、開発者はエンジンに依存しないアーキテクチャにするために、リモートワークステーションビルドファームに関するアーキテクチャを参照してください。大規模なエンタープライズフリートに適したワークステーションソリューションを探すのであれば、ぜひAWS アカウントチームにお問い合わせください。

現在、ストリーミングのユースケースでは多くの人がTCP接続を使用していますが、QUIC UDPのパフォーマンスはストリーミングの新しい方向性を示しています。3D開発、ゲーム、3Dアプリケーションがローカル PC を超える没入型エクスペリエンスに集約されていく中で、UDPを使ったストリーミングの低レイテンシー配信は、ヘッドセット内で処理を完結しなければならないVRやXRヘッドセットでのストリーミングゲームなどの没入型環境でのアプリケーションの将来にとって重要な基盤です。NICE DCV for Windows (g4dn with NVIDIA gaming driver)AMI を今すぐチェックして、このスペースを体感してみてください。

翻訳はソリューションアーキテクトの春山が担当しました。原文はこちらです。