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

はじめに

GoogleCloudPlatform(GCP)上のGoogle Compute Engine(GCE)でGPU付きのインスタンスを利用して、ゲーミングPCをクラウド上に用意します。そのクラウドゲーミングPCにQuest(1|2)向けに提供されているVirtualDesktopを利用してVRChatなどのVRゲームを遊んでみます。料金は 2022 年 8 月時点(1 ドル 138yen)で大まかに 230 円/h+50GB ストレー ジ 1000 円/月ですが、GCPを初めて利用する人には90日間300$分の無料クレジットがもらえて少なくとも180時間くらいは無料でできるので気になる人は気軽に試していただきたいです。

誰向け

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

ことわり

この記事を参考にして生じた予想外の事故等については自己責任でよろしくお願いします。また料金は円ドルレートで変わることをご承知おきください。

事前に用意するもの

手順

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

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

GCPでの前準備

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

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

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

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

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

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

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

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

VMインスタンスの作成

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

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

下図のように

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

注意

  • 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」を選択することで指定できます。

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

注意

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

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

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

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

注意

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に接続するためのパスワードを設定します。

下図の赤線の「RDP」を押してChrome拡張のRDPを起動します。

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

注意

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

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

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

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

に変更します。

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

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

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

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

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

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

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

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

注意

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

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

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

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 コマンドはでメモ帳で編集すると良いと思います。

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

インストールができているかを確認 タスクマネジャーで確認

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 のポートを入力

のように指定します。

注意

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

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

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

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

注意

  • なかなか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

料金は 2022 年 8 月時点(1 ドル 138yen)で大まかに 230 円/h+50GB ストレー ジ 1000 円/月で、無料クレジット300$分が残っている間は費用は掛からない。(VRChatを遊ぶだけなら50GBストレージで大丈夫です)

  • 下図の筆者の費用レポート(2022 年 4 月から 2022 年 7 月)のようにメインの費用はクラウドPCからQuestへのでデータ量(Network Internet Egress)とCPU稼働時間に応じたWindowsのライセンス使用料、GPUの使用料、バランスド永続ディスクの維持料金です。
  • 下図では128GB のディスクで2125yen/month+230yen/hourの費用となっていることが分かります。

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

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

注意

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

RDPの接続が上手くいかない。RDPを切断するとVirtualDesktopが繋がらなくなる。VirtualDesktopで接続後すぐに切断される。

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のインストール時のエラー

PCを再起動します。再起動後も出ている場合は、そのエラーは無視して、Oculusアプリを閉じて進めましょう。 もし気になる場合は以下のツイートを参考にしていただけると幸いです。Michitomo NakaharaさんはTwitterを使っています: 「@Parnara_guttata @toutou これは放置でもいいんですが、Wifiロールをインストールすると直りますよー。OculusサービスがAirLink用にロードしてるDLLが不足してるぽいです。 https://t.co/bK7NQJ1PGa」 / Twitter

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の数の上限解除をするだけでは利用できなかったので他に申請が必要なのかもしれない。

参考

変更履歴

  • 無料トライアル後の料金について誤った計算をしていたので修正(2022/11/3)
    • 大体150円/h → 2022 年 8 月時点(1 ドル 138yen)で大まかに 230 円/h+50GB ストレー ジ 1000 円/月
  • 無料トライアル中遊べる時間を修正(2022/11/3)
    • 約200時間 → 2022年8月時点(1 ドル 138yen)で約180時間