持続可能なクラウドゲーミング環境を構築
そうだゲームをしよう
思い立ったが吉日
ゲーミングコンピューター市場を調査します
...高い
時代はサステナブル!!そう持続可能なクラウドゲーミング環境を構築しなければエンジニアとはいえない
どうやらParsecというのが良さそうだ
普段お世話になっているAWS環境に構築だ!
実際のプレイどんな感じ?
エルデンリングというゲームを実際にプレイしたものを録画したファイルを24FPSでgifにしたものです。これは解像度1920x1080/グラフィック品質設定を高でプレイしております。まぁ普通に反応できるしすごいサクサクです。実際のプレイはもっとヌルヌル動きます
AWSのg4dn.2xlargeで動かしていて、東京リージョンだと0.752 USD/Hour(2022/04/19時点)と安くはありません。xlargeでもほとんどのゲームは動くと思いますがエルデンリングは少しCPUも頑張っているようです
# エンコードコマンド M1チップ Macにて
docker run --platform=linux/amd64 -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg -ss 14 -t 4 -i treeguard.mov -vf scale=320:-1 -r 24 -y out.gif
何が利点なの?
- パソコン買わなくていいじゃないですか
- つまり買い替えを気にしなくていいんです
- ゲームのスペックによってサーバスペックを変更できるのでエコです。CO2排出削減になります
実際のコストはどうさ?
50時間くらいやってる感じ$138。高いと感じるのか安いと感じるのかはあなた次第
前提条件
- Steamアカウント登録済み
- パブリッククラウドプロバイダー(GCP, AWS, Azureなど)少しわかる
- Remote Desktop(https://docs.microsoft.com/ja-jp/windows-server/remote/remote-desktop-services/clients/remote-desktop-clients)を利用可能
どうやって?
みなさんご存知くらうどこんぴゅーてぃんぐのお時間です(言語設定は英語で進めています)
- まずはAWSアカウントを作成します(みなさんもうお手の物ですよね?作成手順は省きます)
- Security Group設定します
- EC2サービス -> 左パネルのNetwork & Security -> Security Groupsを選択
- 右上のCreate security groupボタンを押下
- Security group nameはわかりやすいようにParsecとしておきましょう
- VPCは勝手に設定されているやつでもいいし自分で構築したものを使っても良いです。ただしパブリックなIPv4が利用可能にしてください(デフォルトのVPCを使う場合は勝手に付与されるはず)
- Inbound rulesにルールを追加します。TypeにRDP(これはリモートデスクトップの略だぜ)、Sourceの虫眼鏡アイコンがあるところに自宅のIPv4アドレス/32を入力します(IPv4の調べ方はもちろん知ってるよね?)
- Create security groupで作成します。このセキュリティグループは後ほど使うので名前だけ覚えておいてください
- EC2 Launch Templateを作成します。g3, g4など別の世代のインスタンスタイプを利用するときに役立つと思います
- EC2サービス -> 左パネルのInstances -> Launch Templatesを選択
- 右上のCreate launch templateボタンを押下
- Lunnch template nameはわかりやすいようにParsec Templateなどにしましょう
- Application and OS ImagesはQuick StartからWindowsを選択Microsoft Windows Server 2019か2022 Baseを選択します。(Parsecのサポートは2016と2019ですが2022でも動きます。すげぇ!)
- Instance typeはg4dn.xlargeなどを選択してください。前述していますがエルデンリングはg4dn.2xlargeが快適です。後からでも変更できるのでg4dnの12xlarge(4GPU)とmetal(クソ高いやつ)以外ならなんでもオーケー
- Key pairは作っていなければCreate new key pairから適当な名前をつけて.pemをCreate key pairします。ファイルとして保存し絶対に他者と共有しないでください。ログインに使います
- 作成した場合はリロードっぽいボタンが隣にあるので押してから作成したKey pairを選択します。作成済みの場合は任意のKey pairを利用してください
- Network settingsはSecurity groupsを先ほど作ったものを選択してください
- Configure storageは最初からあるRoot volumeは30GiBのままで大丈夫です。Volume typeはgp3を選択します。後ほど起動時にディスクを追加します。起動時追加したディスクにゲームデータなどをおきます。個人情報などをうっかり保存する場合はVolumeのShow detailsからEncryptedをYesにしましょう。
- Create launch templateボタンを押下して起動テンプレートを作成します
- EC2 Instanceを起動
- 作成したテンプレートのリンクっぽい青い部分をクリックします
- Actions -> Launch instance from templateを選択します
- Source templateに先ほど作成したテンプレートが選択されていることを確認します
- Add new volumeします。Sizeは必要に応じて(最新のグラフィックがまぁまぁいいゲームは1本で60GiB程度使います)、Volume typeはgp3を選択し必要に応じてストレージを暗号化します。Show detailsから追加したVolume(記事の操作通りならVolume 2(Custom)のDevice nameにxvddなどを選択します。xvd[任意のアルファベット]で後ほどWindowsのボリューム割り当てに使います)
- Launch instanceボタンを押下するとサーバが出来ます。起動していると1時間あたり50円以上はお金がかかるので放置しないように
- Remote Desktopで接続する
- EC2サービス -> 左パネルのInstances -> Instancesを選択します
- 先ほど作成したサーバがいるので選択して上側にあるConnectボタンを押下します
- RDP clientタブを選択しGet passwordをクリックします
- Browseより先ほど作成・あるいは選択したKey pairを選択するか内容をテキストボックスに貼り付けてDecrypt passwordします。これは作成されたサーバのAdministratorアカウントのパスワードとなりますのでパスワード管理ソフトなどに記録します
- Remote Desktopを立ち上げ +ボタンを押すとサーバ情報を入力する画面が出ます
- PC NameにはInstancesの一覧から接続するサーバを選択して表示されるDetailsタブのInstance summary内にあるPublic IPv4 addressを貼り付けるか入力します
- 保存して保存したWindowsサーバをダブルクリックするとUsernameとPasswordを聞かれるのでユーザーにAdministratorとパスワードは先ほどConnectから取得したパスワードを入力・貼り付けします
- Continueを押すとWindowsに接続されるはずです
- Parsecをサーバにインストール
-
左下に検索バーがありますのでpowershellと入力すると画面のような状態になると思うのでWindows PowerShellをクリックします
-
謎の黒いアプリに以下のコードを貼り付けます @gist
-
なんかインストールが始まる(結構長い)ので次に示すIAMユーザーの作成とParsecのユーザー登録をします
-
インストールが完了するとこんな画面が出てParsecアプリが立ち上がっていると思うので作成したユーザーでログインします
-
左ペインのギアアイコンを選択 -> HostタブからBandwidth Limitを変更します。(ご自宅の通信状況と相談してください。お子さんからNetflixが見れないんだけれどなどと苦情が来る可能性がございます)
-
黒い画面をクリックしてEnterキーを押下します
-
AWSのIAMユーザーの鍵を聞かれるのでIAMユーザー作成で記録したAccess keyとSecretをそれぞれ入力してEnterを押下します
-
その後も何度か英語で何か聞かれますがyを入力してEnterを押下します
-
最後にReboot System?と言われ同じようにyを入力してEnterを押下するとサーバが再起動されRemote Desktopから追い出されます。この作業はここで完了です
-
GPU Uploaderの問題(2022.07.24追記)
既知の問題があるらしく以下の手順が必要となっていました。該当のファイルはGPUUploaderのウィンドウが起動したあたりで生成されます https://github.com/parsec-cloud/Parsec-Cloud-Preparation-Tool/issues/93#issuecomment-1135741304
- File Explorerに
C:\ProgramData\ParsecLoader
を貼り付け - GPUUpdaterTool.ps1を右クリック -> Edit
- 94行目の
$KeyPrefix = "windows/latest"
を$KeyPrefix = "windows/vGPUSW-497.09"
に書き換えて保存(File -> Save) - GPU Uploaderは一旦AWS Access Key, Secret Access Keyまでを入力して保存して離脱
- GPU Uploaderを起動し直してGPU Driverをインストールする
下記のようにupdate is availableの部分が書き換えたバージョンを利用するようになります
Loading...
Found saved AWS Access Key for AWS Driver
Use saved credentials?
(Y/N): Y
This GPU (NVIDIA Tesla T4) requires a private driver downloaded from the AWS Support Site
We detected your system does not have a valid NVIDIA Driver installed
Installing GPU Drivers may require 2 reboots in order to install correctly.
This means you may incur some charges from your cloud provider
Type Y to continue, or N to exit.
(Y/N): Y
Checked Now 07/24/2022 03:12:53 - An update is available ( -> 497.09)
Update now?
(Y/N): y
Downloading Driver
Success!
Installing Driver, this may take up to 10 minutes and will automatically reboot if required
- S3Read Only IAMユーザーを作成
- IAMサービス -> 左ペインのAccess management -> Usersを選択します
- Add userを押下します
- User nameにS3ReadOnlyなどのわかりやすい名前をつけます
- Access key - Programmatic accessにチェックを入れます
- Next: Permissionsを押下します
- Attach existing policies directlyからAmazonS3ReadOnlyAccessを検索してチェックを入れます
- Next: Tagsを押下します
- Next: Reviewを押下します
- Create userを押下します
- Access key IDとSecret access keyをパスワード管理ソフトなどに記録します。Parsecをサーバにインストールで利用します
- Parsecでサーバに繋ぎます
- 手元のマシンにParsecクライアントソフトをダウンロードします
- Parsec登録時の情報でログインします
- Reloadボタンを押すと何やらコンピューターが表示されるのでConnectを押下します
- 解像度があっていない場合は左上のアイコンをクリック -> Resolutionから適切な解像度を選択します
- 左上のアイコンをクリック -> Send CTRL + ALT + DELをクリックするとログイン情報を聞かれますので先ほど保存したAdministratorアカウントのパスワードを入力しましょう(この時点ではクリップボードを共有しておらずコピー&ペーストが使えませんでした)
- Diskを追加します
- 検索バーにdisk managementと入力します。Create and format hard disk partitionsを選択します
- 見割り当てのディスクを右クリックしNew Simple Volumeを選択してNextを選択します(画像は割り当て済みのDドライブがいます)
- サイズを聞かれますがデフォルトのままか割り当てたいサイズを入力してNextを選択します
- もう一度Nextを選択します
- Format Partionダイアログが出ますのでNextを選択します
- 確認画面が出ますのでFinishを選択してください。追加したディスクを使用できます
- Steamのゲームインストールなどはこのディスクに保存してください
お疲れ様です。Windowsでゲームをお楽しみください
ゲーム終了時は忘れずにサーバを停止してください。動いているとお金がかかります
- EC2サービス -> 左ペインInstances -> Instancesより起動しているサーバを選択してInstance stateを押下
- Stop instanceを選択
- Instance stateがStoppedになったのを確認します
コスト削減について
AWSの場合はDドライブに割り当てたディスクを使用していないときはスナップショットにすると良いと思われます。筆者の環境には他にもVMのストレージがありますが毎日かかっている$1.22の90%以上はそのコストになっています
VMの従量課金もそうなんですがParsecの通信量に対する課金も同等かなりの金額がかかるのでプレイするゲームなどによっては帯域制限を10Mbpsなど強めに制限することをお勧めします
他の環境でも構築したいんだけど
以下の環境を利用できます。Paperspaceは東京でのホスティングができません(2022/07/03時点) Parsecのインストール方法についてはご自身でお調べください
- AWS g3.4large(Tesla M60)
- AWS g2.2xlarge(GRID K520)
- AWS g4dn.xlarge(Tesla T4 with vGaming driver)
- Azure NV6(Tesla M60
- Paperspace P4000(Quadro P4000)
- Paperspace p5000(Quadro P5000)
- Google P100 VW(Tesla P1000 Virtual workstation)
- Google P4 VW(Tesla p4 Virtual workstation)
- Google T4 VW(Tesla t4 Virtual workstation)
Discussion