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ゲームがしたい人
ことわり
この記事を参考にして生じた予想外の事故等については自己責任でよろしくお願いします。また料金は円ドルレートで変わることをご承知おきください。
事前に用意するもの
- Chromeが利用できる端末
- Chrome RDP for Google Cloud Platform - Chrome ウェブストアのChrome拡張を入れておくと良いです。
- Chromeの拡張じゃなくて、他のRDPアプリでも大丈夫。
- 高速な通信環境
- 5 GHz AC or AXのWi-Fiルーターが必要
- VirtualDesktopで調整できるBitrateが10Mbpsから150Mbpsなので、これくらいのあればで遊べるはずです。ここらへんは検証不足なので情報を頂けると助かります。
- 下り150Mbps以上の環境であれば違和感なく遊べるはずです
- ここらへんは検証不足なので情報を頂けると助かります。
- 高速な通信環境がない場合は、高速な通信環境を提供するネットカフェや貸し会議室にQuestを持ち込みましょう。
- Quest 2
- おそらくQuestでも大丈夫
- 以降Quest2とQuestの両方を指すものとしてQuestという用語を用います。
- Quest向け Virtual Desktop
- OculusStore(上のリンク先)で購入(2200円くらい)し、Questにインストールしておきます。
- 今回、クラウド上のゲーミングPCとQuestを繋げるためのアプリケーションです。
- VRヘッドセットをつけたままPCを操作できる便利なアプリ「Virtual Desktop」使い方ガイド | Mogura VR
- のちにクラウドPCの方でデスクトップ版のPC向け VirtualDesktopのインストールが必要になります。
手順
環境構築に掛かる想定作業時間:1~3時間
注:2022年1月の記事なので、リンク先やUIが変わっている可能性があります。
GCPでの前準備
始める前に - GCPを参考にしながら進めます。
- プロジェクトページ で、適当なプロジェクト名でプロジェクトを作成します。
- このプロジェクトに対して課金が有効になっている事を確認します。
ComputeEngineAPIを有効にします。
プロジェクト内でGPUが利用できるように申請する。
プロジェクトに割り当てられる全世界で使える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」個
- 「仮想ワークステーションを有効にする」にチェックを入れます。
- 「表示デバイスを有効にする」のチェックを外す(デフォルトで外れているはず。)
- のちにRDPの代わりに利用するクラウドPC用のparsecと相性が悪いらしい
注意
- 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時間でインスタンスが停止したり、予期せずにインスタンスが停止したりします。詳細はこちらをご覧ください。
最後に「作成」ボタンを押して、インスタンスを作成します。
注意
- デフォルトで管理タブは折りたたまれているので注意
- プリエンプティブル VM インスタンス | Compute Engine ドキュメント | Google Cloudのドキュメントでは無料枠が適用されないと記載があるのですが、実際に費用の図の通り適用されていました。
- インスタンス作成時に下記のリソース不足でGPUが提供できないといったエラーが出たら、異なるリージョン・ゾーンを試してみましょう。
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」にする。
- 下図のようにSettings -> Privacy -> Allow apps to access your microphoneを「On」にする。
全てのインストール等が終わったらPCを再起動しましょう。
ファイアウォールの設定
下図のように左上のナビゲーションメニューからファイアウォールを選択します。
下図のようにファイアウォールルールを作成します。
のように指定します。
注意
- 上の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中は切断した方が良さそうです。
インスタンスの停止
- 下図のように停止ボタンを押して停止します。
注意
これ以降、クラウド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
無料クレジットについて
- 新規利用者には300$の無料クレジットがもらえる。無料トライアルと無料枠 | Google Cloud
- 新規利用者は少なくとも180時間分くらいはVRが楽しめる。
注意
- インスタンスを停止していても、上図の赤線のバランスド永続ディスクについては費用が掛かってしまうので、長期間使わないならインスタンスを消してしまった方が安心
VirtualDesktop
- OculusStoreで2208yenで買えます。
- Oculus Quest 2の「Virtual Desktop」 | Oculus
その他のトラブルシューティングなど
RDPの接続が上手くいかない。RDPを切断するとVirtualDesktopが繋がらなくなる。
RDPの代わりにParsecを利用すると解決するかもしれません
- ローカル側ではConnect to Work or Games from Anywhere | Parsecからアカウント登録し、アプリをインストールします。
- リモート側(クラウドPC側)ではPowerShell(Windowsの検索窓からPowerShellを検索して開く)に以下のコマンドをペーストして実行しクラウド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上のトラブルシューティング
- tou_touさんはTwitterを使っています 「Questと高速なインターネット環境があれば、ゲーミングPCを買わなくてもPCVRができるという話です。 帰省先や旅行先でVRChatやりたい人、PC版VRChatを体験したい人、PCが故障してVRChatに入れない人へ向けた記事です。 分かりにくい所があればコメント頂けると幸いです。 https://t.co/3D5L2REEis」 / Twitter
- Michitomo NakaharaさんはTwitterを使っています: 「@Parnara_guttata @toutou これは放置でもいいんですが、Wifiロールをインストールすると直りますよー。OculusサービスがAirLink用にロードしてるDLLが不足してるぽいです。 https://t.co/bK7NQJ1PGa」 / Twitter
- トナさんはTwitterを使っています 「OculusQuest+VirtualDesktop+クラウドコンピューティングでのSteamVRプレイを検証してみました。Microsoft Azure Virtual Machines Standard NC6s_v3 (6 vcpu 数、112 GiB メモリ)を利用。結果、SteamVRを起動すると緑色のスクリーンになってプレイには至らず、VRの遅延を確認できませんでした。 https://t.co/N6E22xf0Qa」 / Twitter
GCP側のマーケットプレイスで用意されたゲーミングPC用のインスタンスを利用する方法?
もともとGCP側で用意されたゲーミングPC用のインスタンスを利用する方法として、NVIDIA Gaming PC - Windows Server 2019 – マーケットプレイス – CloudPCVR – Google Cloud Platformを見つけたが、GPUの数の上限解除をするだけでは利用できなかったので他に申請が必要なのかもしれない。
参考
- Oculus QuestでリモートVRをする - 外出先から自宅のPCVRをプレイ - トナのブログ
- AWSでクラウドVRChatやってみた - ふろぐ @ はてな
- umiyoshさんはTwitterを使っています 「GCP asia-northeast1にGPU VMのgaming PCを構築して、Oculus QuestからSteamVRに接続することができました。かなりスムーズで実用上なんの問題もなさそうです。いっぱいPCゲームとかVR Chatとかするぞー。 https://t.co/Rq6TqogiJh」 / Twitter
- AWS EC2にクラウドゲーミングサーバを立ててOculus Quest 2でVRゲームを遊ぶ - Qiita
- 仮想ワークステーションの作成 | Cloud アーキテクチャ センター | Google Cloud
- 仮想 GPU による高速 Windows ワークステーションの作成 | Cloud アーキテクチャ センター | Google Cloud
変更履歴
- 無料トライアル後の料金について誤った計算をしていたので修正(2022/11/3)
- 大体150円/h → 2022 年 8 月時点(1 ドル 138yen)で大まかに 230 円/h+50GB ストレー ジ 1000 円/月
- 無料トライアル中遊べる時間を修正(2022/11/3)
- 約200時間 → 2022年8月時点(1 ドル 138yen)で約180時間