AI・機械学習
現代のワークロードで15種類の「E-Waste」GPUをベンチマーク
Benchmarking 15 "E-Waste" GPUs with Modern Workloads (esologic.com)
要約
この記事では、現代のAIやコンピューティングタスク向けに、廃止された古いNVIDIA Tesla GPUをベンチマークしています。ソフトウェアアップデートがなく、電力効率も低いこれらの安価な「E-Waste」GPUが、ResNet50、Vision Transformers、Llama.cppなどのワークロードでテストされ、依然としてホームラボで役立つかどうかを検証しています。著者は、これらのカードと安価なサーバーハードウェアを使用して、手頃な価格のGPUノードを構築することを目指しています。
全文翻訳
廃止されたNVIDIAエンタープライズGPUは、アイドル状態のVRAMの最後の供給源の1つです。24GBのGDDR5を搭載したK80は60ドル、P100-16GBは約75ドル、V100-16GBは200ドル未満で販売されています。欠点はあるものの、現代においてこれらの広く入手可能なカードを利用できるかどうかを理解することは重要です。このテスラGPUのベンチマークプロジェクトはほぼ1年かけて進められており、冬の間、私はGPUでスタジオを暖めながら多くのキロワット時を費やすことができました。https://esologic.com/wp-content/uploads/2026/07/22-tesla-benchmark-16-9-noaudio.mp4 目次 テスラグPUの箱 このベンチマークの目標は、私のホームラボ用の安価な4U GPUノードのBOM(部品表)を作成することです。適切なクーラー(クーラーのベータ版ユニットをご希望の場合は、メーリングリストにご登録ください!)があれば、これらのカードはコンシューマー向けのものよりもはるかに高密度に設置できます。標準的なATXケース(ラックマウントでも可)に、GPU 3枚と10GB NICを簡単に収めることができます。GPUの価格と同様に、X99 Intel E5-* Xeon CPUとその関連ハードウェアのコストも、もはや無視できないほど安価になっています。E5-2690を使用すると、40ドルで3.50GHzブーストの56スレッドが得られます。2つのCPUソケットと7つのPCIeスロットを備えた大型のSupermicro X10DRG-Qは、現在200ドル程度で入手可能です。GPUボックスのCPUとマザーボードの選択は明らかに重要ですが、私は異なる考え方を比較する具体的な数値を知りたいと思っていました。恐れるな ここで検討するすべてのハードウェアはEOL(サポート終了)であることを指摘しておきます。GPUはいずれも、CUDA互換性アップデートやドライバーをすぐに受け取ることはありません。古いギアは電力効率も低く、トークンあたりのエネルギー消費量がはるかに多くなります。これらのカードを今日使用することを推奨するのは無責任です。…といった指を鳴らすような言葉は、ホームラボには場違いです。ソフトウェアアップデートの欠如は、少し古いソフトウェアを使用することで簡単に回避できます。例えば、llama.cppは、ソースからビルドする意欲があれば、多くのCUDAアーキテクチャをサポートしています。Dockerを使用することで、説明されているすべてのソフトウェアを、2014年にリリースされたアーキテクチャであるKepler上で実行することができました。電力効率の観点からは、高可用性ユースケースには完全に有効です。常時稼働するものを構築する場合、電気代でGPUの節約分をすぐに使い果たしてしまうでしょう。しかし、これもホームラボではそれほど関連性のないユースケースではありません。LLMを使用したり、ビデオ処理を行ったりしないのですか?ボックスをオフにしてください。GPUベンチマークの内容ベンチマークツール自体はGitHubで公開されており、私はすでにスイートの開発についてブログ記事を書いています。それでも、結果のグラフに表示されるテストの簡単な説明を以下に示します。ベンチマークカテゴリAI説明ResNet50 Train B=64コンピュータビジョン トレーニング✅画像分類のための畳み込みニューラルネットワークのトレーニングにおけるGPUパフォーマンスを測定します。ResNet50 Infer B=1コンピュータビジョン推論✅単一画像での低遅延画像分類推論を測定します。ResNet50 Infer B=256コンピュータビジョン推論✅高スループットのバッチ画像分類推論を測定します。Blender GPU 3Dレンダリング❌プロフェッショナル3Dレンダリングワークロード向けのプロダクションスタイルのGPUパス トレーシングをベンチマークします。Blender CPUCPUレンダリング❌同じBlenderシーンを使用したCPUレンダリングのベースラインを提供します。CAT ViT Scoresビジョン トランスフォーマー✅画像分析およびスコアリングのためのVision Transformer推論スループットを測定します。CAT ViT Attentionビジョン トランスフォーマー✅より計算負荷の高い分析ワークロードであるVision Transformerアテンションマップ生成を測定します。llama.cpp Qwen2.5 1.5B Prompt大規模言語モデル✅小規模言語モデルのプロンプト処理(プリフィル)パフォーマンスを測定します。llama.cpp Qwen2.5 1.5B Gen大規模言語モデル✅小規模言語モデルの自己回帰テキスト生成スループットを測定します。llama.cpp Llama 3 8B Prompt大規模言語モデル✅大規模言語モデルのプロンプト処理パフォーマンスを測定します。llama.cpp Llama 3 8B Gen大規模言語モデル✅大規模言語モデルの自己回帰テキスト生成スループットを測定します。llama.cpp Qwen1.5 MoE Prompt大規模言語モデル✅Mixture-of-Experts言語モデルのプロンプト処理パフォーマンスを測定します。llama.cpp Qwen1.5 MoE Gen大規模言語モデル✅Mixture-of-Experts言語モデルのテキスト生成スループットを測定します。F@H Single科学コンピューティング❌分子動力学シミュレーションを使用した科学的計算パフォーマンスを測定します。F@H Double科学コンピューティング❌より重い分子動力学ワークロードでの科学的計算パフォーマンスを測定します。SHA-256 Cryptography暗号化❌GPUでの生の暗号化ハッシュ計算スループットを測定します。Whisper Med FP16音声認識✅トランスフォーマーベースの音声テキスト変換推論パフォーマンスを測定します。Storage→CPU→GPU (gdsio)AIインフラストラクチャ✅大規模AIモデルやデータセットの重要なボトルネックである、ストレージからGPUメモリへのデータロードのスループットを測定します。動作原理ユーティリティの目標は、テスラグPU、「GPU Box」スタイルのサーバーをベンチマークできるようにすることです。ベンチマークスイートの動作原理は次のとおりです。ベンチマークはDockerfileとして定義され、互換性とポータビリティのためにDockerコンテナとして実行されます。コンテナは、システムに接続されている各タイプのGPUで最初に実行されます。例えば、K80、M10、P100がシステムにある場合、コンテナはまずK80の2つのコアのいずれかで実行され、次にM10の4つのコアのいずれかで実行され、次にP100は論理コアが1つしかないため、それに続いて実行されます。その後、コンテナは接続されているすべてのGPUのすべてのコアで並列に再実行されます。最後に、テストがマルチGPUネイティブである場合、すべてのGPUのすべてのコアにアクセスできるコンテナが作成され、テストが実行されます。これは、3つのP100を実行しているシステムでResNet50トレーニングテストを実行した結果の例です。Java { "name": "resnet50_train_batch_64", "benchmark_version": "0.2.0", "override_parameters": {}, "larger_better": true, "multi_gpu_native": true, "verbose_unit": "Images Processed / Second", "unit": "i/s", "critical_result_key": "native_multi_gpu_result", "numerical_results": { "min_by_gpu_type": 208.20215154739634, "max_by_gpu_type": 208.20215154739634, "mean_by_gpu_type": 208.20215154739634, "theoretical_multi_gpu_mean": 208.2021515473963, "theoretical_multi_gpu_sum": 624.606454642189, "forced_multi_gpu_numerical_mean": 205.4402100738262, "forced_multi_gpu_sum": 616.3206302214786, "native_multi_gpu_result": 566.5793352441259 } } 1234567891011121314151617181920 { "name": "resnet50_train_batch_64", "benchmark_version": "0.2.0", "override_parameters": {}, "larger_better": true, "multi_gpu_native": true, "verbose_unit": "Images Processed / Second", "unit": "i/s", "critical_result_key": "native_multi_gpu_result", "numerical_results": { "min_by_gpu_type": 208.20215154739634, "max_by_gpu_type": 208.20215154739634, "mean_by_gpu_type": 208.20215154739634, "theoretical_multi_gpu_mean": 208.2021515473963, "theoretical_multi_gpu_sum": 624.606454642189, "forced_multi_gpu_numerical_mean": 205.4402100738262, "forced_multi_gpu_sum": 616.3206302214786, "native_multi_gpu_result": 566.5793352441259 }} theoretical_multi_gpu_sum値は、システムに接続されているGPUの数で割った値です。例として、単一のK80コアが10をスコアした場合、この値はtheoretical_multi_gpu_sumで2回カウントされます。単一のM10コアが5をスコアした場合、この値はtheoretical_multi_gpu_sumで4回カウントされます。次に計算されるtheoretical_multi_gpu_meanは、theoretical_multi_gpu_sumをシステムに接続されているGPUの数で割って計算されます。forced_multi_gpu_sumの値は、並列実行の結果の合計を取ることで計算されます。他の平均値と同様に、forced_multi_gpu_numerical_meanはforced_multi_gpu_sumをGPUの数で割ることで作成されます。これらのさまざまな数値は、最終的にパフォーマンスを特定するために使用されます。