GCPにクラウドゲーミングPCを用意してQuest2 + VirtualDesktopでVRゲームを遊ぶ

はじめに

GoogleCloudPlatform(GCP)上のGoogle Compute Engine(GCE)でGPU付きのインスタンスを利用して、ゲーミングPCをクラウド上に用意します。そのクラウドゲーミングPCにQuest(1|2)向けに提供されているVirtualDesktopを利用してVRChatなどのVRゲームを遊んでみます。VirtualDesktopで調整できるBitrateが10Mbpsから150Mbpsなので、これくらいのあればで遊べるはずです。ここらへんは検証不足なので情報を頂けると助かります*1。料金は大体150yen/hくらいですが、GCPを初めて利用する人には300$分の無料クレジットがもらえて少なくとも200時間くらいは無料でできるので気になる人は気軽に試していただきたいです。

誰向け

  • 帰省先や旅行先でVRChatなどのPCVRゲームがしたい人
  • PC版VRChatなどのPCVRを試してみたい人
  • 自前のゲーミングPCが壊れたけどVRChatなどのPCVRゲームがしたい人

ことわり

この記事を参考にして生じた予想外の事故等については自己責任でよろしくお願いします。

事前に用意するもの

  • Chromeが利用できる端末
  • 高速な通信環境
    • 5 GHz AC or AXのWi-Fiルーターが必要
    • VirtualDesktopで調整できるBitrateが10Mbpsから150Mbpsなので、これくらいのあればで遊べるはずです。ここらへんは検証不足なので情報を頂けると助かります。
    • 筆者が試した環境ではネットカフェ(愛知県)が150Mbps、実家(愛知)が(たしか)300Mbps、自宅(神奈川)が700Mbpsで東京リージョンのサーバーに繋げていましたがどの環境でも違和感なくVRChatが楽しめました。
    • ここらへんは検証不足なので情報を頂けると助かります。
    • 高速な通信環境がない場合は、高速な通信環境を提供するネットカフェや貸し会議室にQuestを持ち込みましょう。
  • Quest 2
    • おそらくQuestでも大丈夫
    • 以降Quest2とQuestの両方を指すものとしてQuestという用語を用います。
  • Quest向け Virtual Desktop

手順

環境構築に掛かる想定作業時間:1~3時間

注:2022年1月の記事なので、リンク先やUIが変わっている可能性があります。

GCPでの前準備

始める前に - GCPを参考にしながら進めます。

プロジェクトに割り当てられる全世界で使えるGPUの数がデフォルトで0個なので1個使えるように制限解除の申請をします。(注:地域別で利用できるgpuの数の制限解除の必要はない)

Cloud Consoleにログインし、上部にあるプルダウンで、先ほど作成したプロジェクトを選択します。

f:id:toutounode:20220115181124p:plain:w400

Console の左上のナビゲーション メニューを開き、「IAMと管理」->「割り当て」を選択します。

f:id:toutounode:20220115181420p:plain:w300

下図のようにフィルタで「GPUs(all regions)」で検索し、チェックをつけ、上部の割り当てを編集で割り当て上限のGPUの数とリクエスト理由を入力し、次へを押します。 f:id:toutounode:20220110170530p:plain

次へを押すと、連絡先を求められるので入力し、リクエストを送信します。 f:id:toutounode:20220110170720p:plain

メールによると、1~2営業日で承認されると返信が来ますが、私の場合は1分後に承認のメールが来ました。 f:id:toutounode:20220110171457p:plain

なお、プロジェクトへの反映は最大15分かかるということなので注意しましょう。 承認メールの5分後くらいに、上限(クオータ)が1に増加していまいした。 f:id:toutounode:20220110171714p:plain

VMインスタンスの作成

Cloud Consoleから下図のように「VMインスタンス」を選択します。

f:id:toutounode:20220104092809p:plain:h400

インスタンスを作成」を押します。

下図のように

  • 適当な名前の入力
  • リージョン・ゾーンでは、 物理的に近いリージョンを選ぶと良さそうです。下図では「asia-north-east1-a」を指定しています。
  • シリーズ・マシンタイプでは「N1」シリーズで「n1-standard-8」を指定します。カスタムで指定するのもあり。
  • GPUの選択では「NVIDIA Tesla T4」、GPUの数は「1」個
  • 「仮想ワークステーションを有効にする」にチェックを入れます。
  • 「表示デバイスを有効にする」のチェックを外す(デフォルトで外れているはず。)

f:id:toutounode:20220121031248p:plain

注意

  • asia-north-east1-bはGPUを提供していないです。
  • 第二世代のCPUを選択するとGPUが選択できなくなるので、N1シリーズを選択してください。
  • 「asia-north-east1」リージョンでは、「asia-north-east1-a」と「asia-north-east1-c」のゾーンが利用できますが、VRChatをやる場合は、ゾーンが「asia-north-east1-a」の方がpingが低かったです。(最小で1-cは15ping,1-aは9ping)
  • GPUの選択は下図の「CPUプラットフォームとGPU」を選択することで指定できます。 f:id:toutounode:20220118012831p:plain

続いて、下図のようにブートディスクを変更します。OSを「Windows Server」、バージョンを「Windows Server 2019 DataCenter」、サイズはインストールするゲームのサイズに応じてお好みで指定します。 f:id:toutounode:20220110173712p:plain

注意

  • OSをWindows Serverにするとライセンス料がCPU時間(実際に動かしている時間×vCPUの数で計算される時間)で大体5yen/hでかかります。

ファイアウォールはとりあえずはデフォルトのまましておいて、あとでVirtualDesktopを通じた通信を許可するためのファイアウォール設定を行います。

また、下図のように管理->可用性ポリシー->プリエンプティブをオンにすることで、通常よりも低価格でVMインスタンスを利用できるようになります。ただし、24時間でインスタンスが停止したり、予期せずにインスタンスが停止したりします。詳細はこちらをご覧ください。

f:id:toutounode:20220118012104p:plain

最後に「作成」ボタンを押して、インスタンスを作成します。

注意

Operation type [insert] failed with message "The zone 'projects/cloudpcvr/zones/asia-northeast1-c' does not have enough resources available to fulfill the request. Try a different zone, or try again later."

インスタンスの実行とRDPでの接続確認

ここを参考に進めていきます。 インスタンスが実行されていなかったら、実行し、RDPでWindowsに接続するためのパスワードを設定します。 f:id:toutounode:20220115201753p:plain

下図の赤線の「RDP」を押してChrome拡張のRDPを起動します。 f:id:toutounode:20220118020825p:plain

Domainは空白のまま(でも大丈夫でした)、Passwordに先ほど設定したパスワードを入力し、Windowsにログオンします。

f:id:toutounode:20220115200004p:plain

注意

  • Chrome拡張のRDPを利用して動作が不安定な場合は、Windowsの方は下図赤線のようにRDPファイルをダウンロードして、「リモートデスクトップ接続」で開いて接続するとよいです。

f:id:toutounode:20220118021215p:plain

  • ほかのRmoteDesktopアプリケーションを利用する際に接続先のIPアドレスを知りたい場合は下図赤線のアドレスになります。(黒塗りになっている部分です)

f:id:toutounode:20220118024314p:plain

RDP等でログオンすると、ServerManagerがで表示されていると思うので、下図のようにLocalServerの設定で

  • Windows Defencder Firewall を Private:On
  • IE Enhanced Security Configuration を off
  • Time Zoneを (UTC+09:00)

に変更します。 f:id:toutounode:20220115204336p:plain

デフォルトだと、IEでファイルのダウンロードができないのので、両方オフにします。 f:id:toutounode:20220110180911p:plain

タイムゾーンを日本に変更します。

f:id:toutounode:20220110181150p:plain

IEを再起動して、choromeをダウンロードします。

VR用ゲーミングPCの環境構築

最新のNVIDIAドライバーのインストール

基本、ここの通りに進めます。

下図のようにデスクトップ上のGoogleCloud SDK Shellをダブルクリックして起動します。 f:id:toutounode:20220110181930p:plain

最新のドライバが入っているフォルダのリストを取得します。 gsutil ls gs://nvidia-drivers-us-public/GRID このコマンドをShell上にコピペしてエンターを押すことでドライバのリストを確認できます。 f:id:toutounode:20220115223837p:plain

注意

  • 直接Shell上にペーストできないので、サーバー上のメモ帳(NotePad)にペーストしてからコピーしなおして、Shellにペーストするよいです。

一番数字の大きいGRID確認します。 下図の赤線のフォルダの中に最新のドライバが入っています。(記事執筆時点(2022/01/10)ではGRID13.1) f:id:toutounode:20220110182616p:plain

最新のドライバを確認を確認します。 gsutil ls gs://nvidia-drivers-us-public/GRID/GRID13.1/のコマンドで下図赤線のドライバを確認します。 f:id:toutounode:20220110183211p:plain

gsutil -m cp gs://nvidia-drivers-us-public/GRID/(上図で確認した最新のGRID番号)/(上図で確認した最新のドライバ) %USERPROFILE%/Downloads のコマンドで最新のドライバのダウンロードします。 例えば、上図のドライバをインストールする場合のコマンドは以下になります。 gsutil -m cp gs://nvidia-drivers-us-public/GRID/GRID13.1/472.39_grid_win10_win11_server2016_server2019_server2022_64bit_international.exe %USERPROFILE%/Downloads コマンドはでメモ帳で編集すると良いと思います。

下図のようにドライバがダウンロードフォルダでダウンロードされているので、ドライバを右クリックし、管理者権限でインストールします。 f:id:toutounode:20220110183636p:plain

インストールができているかを確認 タスクマネジャーで確認 f:id:toutounode:20220110184842p:plain

Oculus、Steam、VirtualDesktop、VRChatなどのVRゲームのインストール、マイクの設定

  • Quest 2 PCアプリ(旧Oculusアプリ)のインストール
  • steamのインストール
  • steam上でSteamVR - Steamのインストール
  • Steam上でVRChat - Steamのインストール
  • PC向けのVirtualDesktopのインストール

    • ACCOUNTSにはOculusアカウントのユーザー名を入力します。プロフィール - Oculusからユーザー名を確認できます。
    • OPTIONSでは下図のように「Allow remote Connections」にチェックを入れます。
  • アプリがマイクのアクセスするのを許可します。

    • 下図のようにSettings -> Privacy -> Allow apps to access your microphoneを「On」にする。

全てのインストール等が終わったらPCを再起動しましょう。

ファイアウォールの設定

下図のように左上のナビゲーションメニューからファイアウォールを選択します。

下図のようにファイアウォールルールを作成します。

  • 適当な名前を入力
  • トラフィックの方向を「上り」
  • 送信元IPv4範囲を「0.0.0.0/0」
  • tcpの 38810,38820,38830,38840 のポートを入力

のように指定します。

f:id:toutounode:20220116181255p:plain

注意

  • 上のVirtualDesktop用の設定だとTCPポートがグローバルに開かれているので送信元IPv4範囲を絞る方がセキュリティ的に好ましいです。
  • デフォルトのネットワーク設定だとRDP用のTCPポートがグローバルに開かれているので送信元IPv4範囲を絞る方がセキュリティ的に好ましいです。
  • 他には、VRで遊び終わったらインスタンスを停止しておく、クラウドPCの方には重要な情報を置かないなどをするのが好ましいです。

インスタンスを起動しVRアプリケーションを起動する。

  • 下図の開始ボタンを押しインスタンスを起動します。1分くらいかかります。
  • Questを装着し、VirtualDesktopを起動し、COMPUTERSから設定したクラウドPCに接続します。
  • 接続に成功するとWindowsのログオン画面が表示されます。右下の赤丸を選択すると、キーボードが表示されます。そのキーボードで設定したパスワードを入力します。

  • 下図のようにVirtualDesktopのGAMESからインストールしたVRゲームを起動します。

f:id:toutounode:20220118022643p:plain

注意

  • なかなかVRアプリケーションが立ち上がらず、「GPUが接続されていません」みたいなエラーが出た場合、NVIDIA Control Panelを開いて、OpenGL rendering GPUをTesla T4に変更して右下の適用ボタンをおし、設定を反映します。反映させたらPCを再起動します。

  • RDPを使いながらだと正常にStemVRが動作しないので、VR中はRDPを切断しておきます。

    • RDPを切断するとセッションが破棄され、ログアウトされます。
  • RDPが使いにくい場合はゲーミングPC環境構築 - Qiitaを参考にParsecを利用しましょう。
    • ParsecとSteamVRは共存できます。
    • Parsecを利用しながらだと、通信量が増えるのでVR中は切断した方が良さそうです。

インスタンスの停止

  • 下図のように停止ボタンを押して停止します。

注意

  • インスタンスを停止している間はCPUやGPU稼働時間に対応する料金はかからないが、バランスド永続ディスクを保持するのにお金がかかります。

これ以降、クラウドVRをで遊びたい場合は、コンソールからインスタンスを開始、起動出来たらVirtualDesktopでQuestから接続、Windowsログオン、VRアプリの起動、VRで遊ぶ、遊び終わったらインスタンスを停止させるという流れになります。

パフォーマンス

700Mbs程度の通信環境の場合、Latencyは64msくらいでVRChat内のpingが9msぐらいでした(ゾーンがasia-north-east1-aの場合)。

費用

GCP

大まかに150yen/hで無料クレジット300$分が残っている間は費用は掛からない。

  • 下図の費用レポート(2021年12月分)のようにメインの費用はクラウドPCからQuestへのでデータ量(Network Internet Egress)とCPU稼働時間に応じたWindowsのライセンス使用料、GPUの使用料、バランスド永続ディスクの維持料金です。
  • 13時間で2000円くらいかかってる。

  • クラウド費用の詳細については、次のリンク先が参考になります。費用について - GCP

  • 無料クレジットについて

注意

その他のトラブルシューティングなど

RDPの接続が上手くいかない。RDPを切断するとVirtualDesktopが繋がらなくなる。

RDPの代わりにParsecを利用すると解決するかもしれません

  • ローカル側ではConnect to Work or Games from Anywhere | Parsecからアカウント登録し、アプリをインストールします。
  • リモート側(クラウドPC側)ではPowerShell(Windowsの検索窓からPowerShellを検索して開く)に以下のコマンドをペーストして実行しクラウドPC版Parsecをインストールします。こちらを参考にしています。
    • ここの説明によるとGCPを利用する場合はインスタンス作成時の「表示デバイスのを有効にする」のチェックを外す必要がある説明されているのですが、私の場合はなぜかチェックをつけたままでもParsecが利用できてしまいましたが、外した方が良いはずです。あとで記事を修正します....。
    • もし、「表示デバイスのを有効にする」にチェックを入れたままインスタンスを作成してしまった方はインスタンスの編集画面から「表示デバイスのを有効にする」のチェックを外してからクラウドPC向けparsecをインストールしてください。
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" 
$ScriptWebArchive = "https://github.com/parsec-cloud/Parsec-Cloud-Preparation-Tool/archive/master.zip"  
$LocalArchivePath = "$ENV:UserProfile\Downloads\Parsec-Cloud-Preparation-Tool"  
(New-Object System.Net.WebClient).DownloadFile($ScriptWebArchive, "$LocalArchivePath.zip")  
Expand-Archive "$LocalArchivePath.zip" -DestinationPath $LocalArchivePath -Force  
CD $LocalArchivePath\Parsec-Cloud-Preparation-Tool-master\ | powershell.exe .\Loader.ps1  

Oculusのインストール時のエラー

f:id:toutounode:20220110192025p:plain PCを再起動します。再起動後も出ている場合は、そのエラーは無視して、Oculusアプリを閉じて進めましょう。

Virtual Desktopでネットワークプロフィールに関するWarning

Settings->Network & Internet -> Ehernet -> Network -> Privateを選択

「VRChat待機中」の画面から進めない

その他VirtualDesktop関連のトラブルシューティング

Twitter上のトラブルシューティング

GCP側のマーケットプレイスで用意されたゲーミングPC用のインスタンスを利用する方法?

もともとGCP側で用意されたゲーミングPC用のインスタンスを利用する方法として、NVIDIA Gaming PC - Windows Server 2019 – マーケットプレイス – CloudPCVR – Google Cloud Platformを見つけたが、GPUの数の上限解除をするだけでは利用できなかったので他に申請が必要なのかもしれない。

参考

*1:筆者が試した環境はネットカフェが150Mbps、実家が300Mbps、自宅が700Mbpsでしたが、どの環境でも違和感なくVRChatが楽しめました。