この記事の概要を簡単まとめ!
- GPUはゲーム用途に使用される外付けのグラフィックボード
- 一般的なGPUはPCIe x16で接続し、速度を確保する
- マザーボードによってはPCIe x16が2個以上あるが、チップセットの制約でx4までしか速度が出ない
- 2GPU環境下におけるx4モードによる影響を調査することにした
- GPU-Zでの認識は”PCIe 3.0 x16 @x4 3.0″となる
- FFXVベンチマークは高画質でもとりあえずプレイできるスコアに到達
- 負荷を同時にかけすぎるとフレーム跳びが発生しやすいと判明
- 考察:本体アップデート、負荷をかける範囲を限定してテストする
- 本来の性能を発揮できないことを理解し、用途を限定して使っていく
性能と価格はトレードオフの関係にある。これはどんなものでもそうである。しかしうまく工夫することで性能差を埋めることや、上位モデルを安く入手できることがある。私はその両方を行っている。限られた範囲の中でどう扱えば最大のパフォーマンスを発揮できるか。それを考えるのは実は面白いものである。
だが時として努力では解決不可能な「仕様の壁」が存在する。時代が進んでも古い規格を使い続けるオールドタイプな企業と同じ、古い規格が維持されているせいでしたいことができないということがある。マザーボードのチップセットとGPUが今回その壁にぶち当たったため、このことについてレポートを書くことにした。
ひとっ飛びできる目次
速度や性能は金で買うもの
GPUとPCIe規格
ゲームプレイを強化するGPU
大きい方と強い方が正義であるのは何についてもそうであるが、ことPCについては「その通り」としか言えないのが現実である。それは未だに「性能で殴る」が神話のように崇められているためであろう。もっとも、根本的な解決を試みたもののどうしようもなくて結局性能で殴る方向にシフトしただけというのも大いにあり得る話だ。ムーアの法則の限界を超える要素は半導体以外にあるようだが。
PCについてはその話はそっくりそのまま当てはまる。特にデスクトップの場合はゲーム目的で使用する人が半数以上で、ゲーム性能が高いことをそのまま利用して3D系のクリエイティブ、最近はAI関係の研究を行うということが多いのではないだろうか。なお現状はクソみたいなマイニングは下火のようではある。ただしユーザの大半はPCの知識は基礎部分くらいしか持っていない人の方が多いわけで、そういうことで企業による個人向けのBTOサービスが流行ったのも、ここ10年くらいの話である。
さて、話をゲームに集中すると、ゲーム性能に直結するパーツはマザーボードは一旦除外して考えるとCPU, GPU, RAMが主で、その次にSSD/HDDのストレージの速度、モニタ解像度である。特にGPUに関してはグラフィック解像度とFPS値を主としたゲームに関するあらゆる「演出」に影響するパーツであり、これらを高めようとすると負荷が高くなる。当然GPU性能が高ければ高負荷に耐えられるため、高画質で高性能な体験をすることができるというわけだ。最近はVRも進み、スタンドアロン型の開発が進む中でも未だにPCVRの方が有利な点が多く、解像度の高さやエフェクトを大量に出しても処理落ちしないといった部分ではやはりPC, 特にGPUの恩恵が強く出ている。もっとも、スタンドアロン型もPCとの接続を可能にしているものが多いので、使い分けは可能になっているが。
ハードウェア話:GPUはPCIe x16で接続
私はどちらかと言えばハードウェア寄りな部分があるのでハードウェア的な話の方が専門知識があるが、その中でも難解な話になりがちなのがPCIeである。正式にはPCI Expressと呼び、歴史的な話は一旦置いておき、現在のリビジョンは実用でPCIe 6.0, 規格発表のみで7.0まで存在しており、一般流通では下限が3.0、多くが4.0となっている。5.0は対応製品が少ないとされている。また、古い世代のラップトップにはPCIe 1.1または2.0の規格で動作する、ExpressCard 34/54も存在していた。しかし現在はもはや化石同然である。
デスクトップでBTOないし自作ユーザであれば、GPUは外付けの大型のカードそのもので、その際にPCIeスロットに挿せと言われたことが必ずあるはずだ。このPCIeスロット、かつては1個だけということが多かったが、現在のマザーボードは2個以上存在することが普通であり、その際どこに挿したらいいのか迷った経験はあるはずだ。その場合、PCIe x1とPCIe x16が混在し、M.2 SSDスロットとM.2 Wi-Fiスロットも近くにあって尚更ややこしいと思ったはずだ。ここで、ASRockから出ているH370 Pro4のマニュアルから、レイアウト図とPCIeに関する記載情報を参照する。
図ではPCIe x16が2番と4番にあり、PCIe x1は1番、3番、5番となっている。GPUはx16が基本であり、PCIeスロットに関する解説から、2番に接続すべきであると分かる。しかし2個あるので、何も見ていなければ間違えて4番に接続してしまうこともあり得るものだ。こんなややこしい設計にしている理由は、H370 Pro4がAMD CrossFireX™対応だからである。要するにAMD製GPUを2枚挿して高性能化を図る機能であるが、実際のところはあまり意味がなかったようである。
x1とM.2とチップセット
そういうわけで、普通に考えればGPUを2枚以上使うことはなく、余って仕方ないPCIeであるが、実は更に面倒な事がある。マザーボードによってはM.2スロットとSATAの使用ルートを共有しており、片方を使用するともう一方は無効化されるという機能がある。これはM.2をSATAかPCIe(NVMe)のどちらで接続するかで変わる。H370 Pro4ではM.2_1(SATAモード)=SATA3_5, M.2_2(SATAモード)=SATA3_1, M.2_2(PCIeモード)=SATA3_0で無効化される関係がある。また、PCIeの場合はGPUなどと同様にレーンを消費するため、構成によってはレーン数1)簡単に言えば、通信経路の数である。通常Intel製CPUは16レーン(i7-9700基準)を持ち、GPUと直接接続する。それ以外にチップセットによって使用可能なレーン数が決定される。H370チップセットでは20である。レーン数が不足すると、GPUやM.2を接続しても通信できなくなる。を気にする必要が出てくるのである。通常はx4なので4レーン消費する。また、Wi-FiカードもPCIe接続であり、これもx4で4レーン消費する。
スポンサーリンク
スポンサーリンク
もっともこれは通常運用であれば気にする必要がない。これが問題となるのは、SLIないしNVLink、CrossFireを利用しないで2GPU構成した場合だ。近年の配信およびVTuberの一般化によって、ゲームは高画質でやりたいのでエンコードや「皮」を動かすための「サブGPU」を使うという考えも、前よりは話題に上がりやすくなっている。同時にAI関係での発展がみられ、それを配信などに転用する場合に単体のGPU性能を上げても追いつかない時に採用されることも多くなった。当然現在のGPUはx16幅のカードが基本であるため、接続するならx16に接続することになる。
だがここでチップセットの問題が発生する。Intel製チップセットは最新版のモデルでもPCIe構成はx1, x2, x4しかなく、そのままではx16に挿してもx4でしか動作しないのである。このことはマニュアルにも記載されており、CrossFireX™モードでPCIe2がx16, PCIe4がx4とある。また、PCIe4はx1のPCIe3とPCIe5とレーンを共有するため、3か5の1つでも使用されていると4はx2にダウングレードするという設計である。折角レーン数があるのにx4まで、フルに生かせないというのは残念である。ちなみにAMDでもこの仕様は同様で、おそらくチップセットによる「性能の限界」のためであると思われる。
ちなみに、ソケットが独自規格になるためCPUに全く互換性が無くなるが、Intel製は末尾Xのものが44レーン持ち、対応するマザーボードを利用することでx16を同時に2つ共存できるようになり、x8とx4も1つずつ利用できるようになる。しかしその場合は前提が石油王構成になりがちなため、実用性以前の問題となる。
2GPU環境下での影響があるはず
私は今までRTX 2080Tiを使用し、それについてデータを収集してレポートを書き上げている。既に約6年前の古いモデルではあるが、まだ前線で戦える性能を持っており、TU102はTensorコアも持つため機械学習用途にも強く、ゲーム以外でも十分に性能を発揮できる。ただしCUDA CCの関係でbfloat16
は使用できない。そんな2080Tiにゲーム、エンコード、3Dモデル、サブモニタ、YukariWhisperを全て任せていた。特にYukariWhisperはゲームの次にVRAMを消費するものだったため、ゲームによってはVRAMが食らいつくされることによる処理落ちが発生してしまい、無理をさせすぎたことの限界が来ていた。
2080Tiを大事にするためにもエンコードとYukariWhisperの処理を担当させるGPUが必要になったわけで、そこで目を付けたのが同じTuring世代、まだGTXの名を持つ1650Superである。1650(TU116版およびTU106版)は実は探すのに非常に苦労するうえ、このモデルでは殆ど補助電源が必須になるので、それならば1650Sにした方が間違えることがない。また、確定でNVEnc第7世代であるのでHEVC・Bフレームサポートであり、2080Tiに処理させていた時と同じ使い方ができる。VRAMは4GBであり、TensorコアこそないがYukariWhisperをint8_float16
で動作可能であり、運用上ディスプレイ処理をさせないので負荷もそこまでかからない。とはいえx4モードでの動作となるので、x16よりも性能が落ちることは明らかである。今回はその実証を行い、実用性があるかどうかを確認していく。
スポンサーリンク
スポンサーリンク
x4でも動け、GPU
GPU-Zでの認識
まず最も調べやすい方法が、GPU-Zを使うことである。接続したGPUの情報をGUIで見やすい形にして表示し、クロック・温度・電力をはじめとする各数値のモニタリングが可能、そのログをテキストファイル(txtだが形式はCSV)として記録することもできる優れものである。複数のGPUが接続されている場合はモニタリング対象をプルダウンメニューから選択できるようになっている。そこから調査すると、確かに欲しい情報が書かれていた。
入手したのはASUS TUF GTX 1650 SUPER GAMING OCで、標準よりもブーストクロックが3%増しになっている。float16の性能は9.062TFLOPS(2:1)であり、リファレンスモデルより少しだけ計算速度が上がっているためYukariWhisperで使用しても不足はない。EVGA 2080 Ti XC Ultraと比較すると28.72TFLOPS(2:1)と約3倍差であるが、そこまで問題にはならないであろう。
なお、注意したいこととして、稀にPCIeリビジョンが対応世代よりも下の設定になっている場合があり、速度低下の原因となる。その場合はUEFIからリビジョンを最新に固定することで回避できる。UEFIでの設定はメーカーにより異なるため割愛する。
FFXVベンチマークで影響を測る
まず分かりやすい指標として、FFXVベンチマークを「1650Sで映像を出力して」実行する。その際の設定はFHD高画質で、アフターバーナーの設定は電圧調整したもの(無調整時より少し電圧が低い地点で最大クロック)を使用する。これは1650Sでx16モードで同様の設定のベンチマークを行った先駆者がいるためで、そのデータと比較するためである。以下はそれとの簡易比較表である。
レーン数 | スコア | 割合(x16基準、小数点第3位四捨五入)[%] |
x16 | 5352 | 100.00 |
x4 | 4897 | 91.50 |
実際にベンチマークを行った結果、スコアは4897となった。割合は91.50%であり、約1割ほどスコアが低下したということになる。これについてはPC Watchがレーン数の違いでどう変わるかを検証した記録があり、ベンチマークの種類とゲームにもよるが、x16とx4では約1割弱くなることが証明されている。したがって上記の結果は先駆者の情報通りということになり、1割程度であれば実用上問題はないと判定できる。ゲームで使わないのであれば尚更影響は気にならないはずだ。
1650SにエンコードとYukariWhisperを実行させる
サブGPUの考え方は、メインストリームのGPUを入手できないが妥協したくない人が用いるものだ。その場合は大抵「4080買え」のような脳死アドバイスをする馬鹿が多いが、それができないからサブGPUを使うのだということを分かっていない。そんなクソのアドバイスは無視して、導入した目的であるGPUエンコードとYukariWhisperの実行を同時に試す。テストイメージとしてはこのような形になる。
この状態で、Twitchは(Amazonがケチなので未だHEVCが導入されずにいるため)H.264, YouTubeと録画はHEVC, YukariWhisperを同時に実行し、その負荷を確かめる。OBSの統計情報は有志のスクリプトを利用してファイルに記録し、GPUはGPU-Zの記録機能を利用してこれもファイルに記録する。必要な情報はOBS側でミスフレーム(レンダリングラグによる逃したフレーム)・スキップフレーム(エンコードラグによるスキップ)・フレームタイム(レンダリング平均時間)・FPS値、GPU-Z側でクロック・RAM使用率・GPU負荷率・ビデオエンジン負荷・消費電力とする。また、検証に使用するゲームは基本負荷が高いResident Evil RE:4とする。
スポンサーリンク
スポンサーリンク
実験結果
実験後のデータは数値データが非常に多いため、全体をグラフ化したがサイズは横に大きくなった。そのため非常に大きく拡大した状態で画像を出力し、以下の結果が得られた。あまりにも大きいため、別窓での表示を推奨する。
このグラフから分かることは明白で、FPS値(緑)が下がり、フレームタイム(水色)が増えたときにミスフレーム(オレンジ)・スキップフレーム(赤)が増加している。またこの時のGPU負荷率(黄)はそれが発生していないところと比較して激しく変動していることが分かり、GPUの負荷が高い状態が長いと発生しやすいと分かる。もっとも、非常に重いYukariWhisperを基本として、エンコードを3系統も同時に行わせれば当然重くなる。これくらいの「軽度の遅延」は特別問題になるものではない。
だが前提を思い出すと、1650Sはx4で接続されている。つまり1650Sをx16で接続している時の1/4のパフォーマンスが最大であるということを前提に置くと、膨大なデータを処理しきれずに遅延が発生したと考えると納得がいくものになる。仮にこれがx16接続であったと仮定すれば、通信帯域的にも十分間に合うので、ミスフレームとスキップフレームの数は少なくなると考えられる。また、同時処理の数を減らすか用途を限定することでも改善は行えるものと見ている。4GBの容量であればYukariWhisperを代行させることが可能で、一方エンコード専用にしても性能を明らかに持て余すことを考えればその使い方もあり得るものとなる。
考察と今後にすべき実験
前提として、一般的なPC運用ではGPUは1個のみ使用する。それはIntel製CPUの場合に使用できるPCIeレーン数が16ないし20が殆どであるためだ。これによりPCIe帯域をフルに利用できるGPUは1基にのみに限定される。末尾Xのモデルは44あるが、そのモデルは現行世代よりも古いものになり、規格も独自のものが採用されている関係で、耐久性とパーツ集めで難儀である。YukariWhisperの使用を前提とすればNVIDIA製GPUに限定され、性能が非常に高いモデル、理想としては3090以上である。だが当然、「一般ミドルレンジユーザ」からすればまだ高い買い物であるのは間違いない。その状況でどうしてもやりたい場合にはこの方法が暫定的な「最善策」となる。
しかしその場合はマザーボードの仕様に縛られることになる。Intelの場合、Intel 500シリーズまでのマザーボードではチップセット側のPCIeのリビジョンは3.0であり、最大レーン数はx4であることが殆どだ。Intel 600シリーズからはPCIeのリビジョンが4.0まで上がっているため、x4でも速度が実用範囲となる。速度の詳細についてはWikipediaを参照してもらうとして、4.0ならx4で双方向64GT/sで実行されるため、同じ構成でも少しマシになる。ただしその場合はGPU側のPCIeリビジョンが4.0以上でなければ意味がないので注意である。ちなみに4.0以上になるのはAmpere以上である。もっともその場合は3080Tiや3090Tiを買った方が早いが、そう気軽にできるものではないだろう。AMDの場合はB550あたりからリビジョンが4.0となるため速度は改善されそうであるが、そもそもメーカーが異なることで結果的にパーツ全体を更新することになる。したがってここでは考えないものとする。
今後の実験としては、サブGPUの用途を限定した場合の負荷および動作影響を調査すること、特にYukariWhisperについては時間影響がどれくらい発生するかを検証する。現在の1650Sはディスプレイに一切接続していないが、サブディスプレイをDisplayPortで接続した上で3DモデルやOBSを配置し、YukariWhisperを実行した場合でも負荷が変わるため、その場合にどれくらい変わるかを確認すると正確なデータが取れるはずだ。
本来の性能を発揮できないことを理解し、用途を限定して使っていく
NVIDIA製GPUに限って言えばAI関連技術の大幅な進歩によって、単にゲームや3DCG用途で使用されていたGPUはいきなり役割が増えて、所謂機械学習で活躍することになった。もっともこれはAIが発展する以前から、一部でGPGPUとしてクソみたいなマイニングが全盛期でもあったわけで、そのせいで一時期ハイスペックGPUが軒並み品不足だったこともある。現在はマイニングに関してはむしろ何も話を聞かなくなったレベルで話題に上がらないことが多い。相対的にAI論争は相変わらず愚かな人間同士で争っているようだが。
だがエンドユーザについては技術的制約とハードウェア的制約がまだ高いタイミングで出てきた話でもあったので、個人レベルで本格的にAI研究やそれを使った何かをしている人はごく一部に限られる。その後はOpenAIなどのモデルを軽量化したものがオープンソースで利用できるようになっており、手頃に使えるAIが増えてきた。GPUの性能もミドルレンジで十分動くように調整されている。その代表例としてYukariWhisperがあり、継続研究中である。だが要求リソースはやはり高く、GPUが機械学習にも最適化される世代はAmpere以降であるため、それ以前の世代ではたとえ2080Tiですらきついものである。特例のTitan RTXはそもそもが規格外なので単体でどうにかなる可能性は高い。
それを解決する手段として安易に思い浮かべたのが2GPU体制である。既に色々調べて、「チップセットの制約」が存在することは調査済みで、最大速度はx4までしか出ないということも分かっている。なら何故x16レーンなのかは理解できないが、それでも先駆者の情報でまあまあ使えることは分かっていた。ただ、実際にYukariWhisperを実行しつつ、エンコードも対応させたときの負荷とx4の制限の影響が実際に起き、音声認識のリアルタイム性を損ない、エンコードも遅延が発生しがちになってしまっていた。レーン数が少ないのに大量のデータを処理させようとすれば、遅延が発生するのは当然のことである。
なので結論としては、使うなら用途を限定して使うべきということである。例えばサブディスプレイの映像出力とエンコードのみを担当させる、YukariWhisperのみを担当させる、といった使い方だ。エンコードに関しては現在主流のHEVCが欲しいなら前提条件は1650S以上となる。AV1はそもそも搭載されているGPUの世代的に単体性能が高い方になるので2GPU体制は無駄が多くなる。AIに使う場合はこれが少し難しい話になり、できればTensorコアがあるものがいい。本来の性能を発揮できない以上、何に使いたいかを明確化した上で選択していくことが2GPU運用で失敗しないコツとなる。
以上、2GPU構成テクニック:ゲーム用とその他で分ける、であった。流石にチップセット側のPCIeリビジョンとレーン数はもっと上げるべきだと感じている。
KIBEKIN at 00:00 Mar. 23th, 2024
※本記事より無期限休業します。
スポンサーリンク
脚注
本文へ1 | 簡単に言えば、通信経路の数である。通常Intel製CPUは16レーン(i7-9700基準)を持ち、GPUと直接接続する。それ以外にチップセットによって使用可能なレーン数が決定される。H370チップセットでは20である。レーン数が不足すると、GPUやM.2を接続しても通信できなくなる。 |
---|