0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RTX 5090ってなんだ?〜AIガチ勢のための「どれ買えばいいの?」完全ガイド〜

0
Posted at

この記事の対象読者

  • RTX 5090を購入検討しているが、FE / AIBモデルの違いがわからない方
  • ローカルLLM推論やAI開発用途でRTX 5090の実力を正確に把握したい方
  • RTX 4090からの乗り換えを検討しているが、$2,000の価値があるか判断に迷っている方
  • 「とりあえず一番高いの買えばいいんでしょ?」と思っている方(ちょっと待って)

この記事で得られること

  • FE vs AIBの本質的な違い: 冷却方式・サイズ・価格・品質問題まで包括的に比較
  • AI用途での実力値: LLM推論ベンチマーク、動かせるモデルサイズの現実的なライン
  • メーカー別の選び方: ASUS / MSI / Gigabyte / ZOTAC / PNY を実績ベースで評価
  • 購入前に知っておくべき地雷: ROP欠損問題、ファン制御バグ、電源コネクタ発熱、PCIe 5.0問題

この記事で扱わないこと

  • ゲーミング用途のフレームレートベンチマーク詳細(DLSS 4 MFG比較等)
  • RTX PRO 6000(ワークステーション向け)との比較(別記事参照)
  • AMD Radeon RX 9070 XT / Intel Arc との詳細比較

1. RTX 5090との出会い

「RTX 4090の2倍速い。$1,999。」

2025年1月のCES基調講演でJensen Huangがそう宣言したとき、会場は沸いた。私も自宅のモニタの前で「ついに来たか」と呟いた記憶がある。

ところが、いざ発売日を迎えると現実は違った。FE(Founders Edition)は数分で完売。AIBモデルは$3,000超え。在庫があっても転売価格。さらに追い打ちをかけるように「一部のカードでROPが欠損している」「ファンが制御不能になる」「電源コネクタが溶ける」といった不穏なニュースが次々と流れてきた。

「結局どれを買えばいいんだ?」

そう思った人は多いはずだ。NVIDIAのマーケティング資料は華やかだが、実際に財布を開く段階で必要な情報は、そこには書いてない。この記事は、RTX 5090を「正しく選ぶ」ための実践ガイドだ。2倍速いかどうかより、あなたの用途に合った1枚を見つけることに集中しよう。

ここまでで、RTX 5090が「買えば幸せ」という単純な話ではないことが伝わったでしょうか。次は、この記事で使う用語を整理しておきましょう。


2. 前提知識の確認

本題に入る前に、この記事で登場する用語を確認します。

2.1 FE(Founders Edition)とは

NVIDIAが自ら設計・製造する「純正品」のグラフィックスカードです。リファレンスデザインとも呼ばれます。RTX 5090 FEの最大の特徴は2スロットのコンパクトな筐体にデュアルフロースルー冷却を搭載している点で、前世代RTX 4090 FE(3スロット)から大幅にスリム化されました。MSRP(メーカー希望小売価格)$1,999で販売されます。

2.2 AIB(Add-in Board)パートナーとは

NVIDIAからGPUチップの供給を受け、独自設計の基板・冷却・電源回路を搭載したカードを製造・販売するメーカーです。ASUS、MSI、Gigabyte、ZOTAC、PNY、GALAX、Palit、Gainwardなどが該当します。AIBモデルはFEより高価になる傾向がありますが、冷却性能やOC(オーバークロック)マージンで上回る場合があります。

2.3 TGP(Total Graphics Power)とは

GPUカード全体の最大消費電力を示す値です。RTX 5090のTGPは575W。これは前世代RTX 4090(450W)から125W増加しています。料理に例えると、前世代が「IH最大火力」だったものが「業務用ガスコンロ」に格上げされたようなものです。当然、それを支えるキッチン(電源ユニット)も相応のものが必要になります。

2.4 ROP(Render Output Unit)とは

GPUのレンダリングパイプラインの最終段で、ピクセルの書き出しやアンチエイリアシング処理を担当するユニットです。RTX 5090は本来176基のROPを搭載していますが、製造上の問題で一部のカードが168基(8基欠損)の状態で出荷されていたことが2025年2月に発覚しました。これについては後述します。

2.5 12V-2x6(16ピン)電源コネクタとは

RTX 40/50シリーズで採用されている新型電源コネクタ規格です。最大600Wの給電が可能ですが、接触不良や過熱による溶融事故が複数報告されており、取り扱いには注意が必要です。ATX 3.1対応のPSU(電源ユニット)から直接ケーブルを接続するか、付属の変換アダプタ(8ピン×3 or ×4 → 16ピン)を使用します。

これらの用語が押さえられたら、RTX 5090が生まれた背景を見ていきましょう。


3. RTX 5090が生まれた背景

3.1 Blackwellアーキテクチャの系譜

RTX 5090は、NVIDIAのBlackwellアーキテクチャを搭載したコンシューマ向けフラッグシップGPUです。

世代 アーキテクチャ フラッグシップ CUDAコア VRAM TGP MSRP
2020 Ampere RTX 3090 10,496 24GB GDDR6X 350W $1,499
2022 Ada Lovelace RTX 4090 16,384 24GB GDDR6X 450W $1,599
2025 Blackwell RTX 5090 21,760 32GB GDDR7 575W $1,999

注目すべきポイントは3つあります。CUDAコアが前世代から33%増加し、コンシューマGPU史上初めて2万コアの壁を突破したこと。VRAMが24GBから32GBへ増量され、メモリ帯域幅が1,008 GB/sから1,792 GB/sへ77%も跳ね上がったこと。そしてTGPが575Wと、もはやPCのメインの電力消費源がGPUになってしまう領域に突入したことです。

3.2 NVIDIAが「2倍速い」と主張した理由と現実

NVIDIAはCES 2025で「RTX 4090の2倍の性能」と派手に宣伝しましたが、これには大きな注釈がつきます。

この「2倍」は、DLSS 4のMulti Frame Generation(MFG)を有効にした場合の数値です。

MFGはAIが中間フレームを最大4枚生成する技術で、見かけ上のFPS(フレームレート)を大幅に引き上げます。しかしMFGで生成されたフレームはGPUがレンダリングしたものではなく、実際の描画性能(ネイティブラスタライズ)で比較するとRTX 4090比で約27-30%の向上にとどまります。

これはレビュアーからも批判を受けました。GamersNexusは「異なるDLSS設定で比較した2倍の数字はミスリーディングだ」と指摘しています。

ただしAI推論性能については話が別で、第5世代Tensorコアによる改善は本物です。ここについてはユースケース別ガイドで詳しく触れます。

背景がわかったところで、基本的なスペックと各モデルの違いを見ていきましょう。


4. 基本概念と仕組み:FE vs AIBモデル完全比較

4.1 RTX 5090の基本スペック

スペック
GPU NVIDIA GB202(170 SM / 192 SM中)
アーキテクチャ Blackwell
CUDAコア 21,760
Tensorコア(第5世代) 680
RTコア(第4世代) 170
VRAM 32GB GDDR7(28 Gbps)
メモリバス幅 512-bit
メモリ帯域幅 1,792 GB/s
L2キャッシュ 96MB(98,304KB)
ROP 176
ベースクロック 2,017 MHz
ブーストクロック 2,407 MHz
TGP 575W(電力制限104% = 598W)
PCIe Gen 5 x16
映像出力 DisplayPort 2.1b × 3 + HDMI 2.1b × 1(FE)
電源コネクタ 12V-2x6(16ピン)× 1
推奨PSU 1,000W以上
MSRP $1,999
AI性能 3,352 AI TOPS

4.2 FE vs AIBモデル:何が違うのか

GPUチップ自体は全モデル共通です。違いは「冷却」「基板設計」「クロック設定」「付加価値」の4点に集約されます。

項目 Founders Edition AIBモデル(一般的な傾向)
冷却方式 デュアルフロースルー(液体金属TIM) トリプルファン空冷 or 水冷AIO
スロット数 2スロット 3〜4スロット
カード長 304mm 348〜380mm
電源制限 575W(最大598W) 575W(最大598W)※同一
ブーストクロック 2,407 MHz 2,430〜2,655 MHz(OCモデル)
GPU温度(負荷時) 約72°C 約65〜78°C(モデル依存)
メモリ温度(負荷時) 約89-90°C 約82〜90°C
ファンノイズ 静か(FE世代で最も改善) モデルにより差が大きい
映像出力 DP 2.1b × 3 + HDMI 2.1b × 1 DP 2.1b × 3 + HDMI 2.1b × 1(多くのモデル)
価格(2026年2月時点) $1,999(入手困難) $2,900〜$5,200+

4.3 主要AIBモデル一覧

代表的なモデルを価格帯別に整理します。

エントリー帯(MSRP〜$3,000)

メーカー モデル 特徴 実売価格帯(2026年2月)
NVIDIA Founders Edition 2スロット、液体金属、最もコンパクト $1,999(在庫僅少)
ASUS TUF Gaming OC トリプルファン、3.6スロット、堅実な冷却 ~$2,910
PNY XLR8 / ARGB OC トリプルファン、3スロット、MSRP寄り ~$2,800〜$3,000

ミドル帯($3,000〜$3,500)

メーカー モデル 特徴 実売価格帯
MSI Gaming Trio OC トリプルファン、3.5スロット、バランス型 ~$3,300
Gigabyte Gaming OC WINDFORCE冷却、デュアルBIOS ~$3,300
MSI Vanguard OC ベイパーチャンバー搭載、高冷却 ~$3,300
ZOTAC AMP Extreme Infinity 大型RGBディフューザー、3スロット ~$3,200

ハイエンド帯($3,500+)

メーカー モデル 特徴 実売価格帯
ASUS ROG Astral OC 4ファン、位相変化サーマルパッド ~$3,510
MSI SUPRIM SOC フラッグシップ空冷、最高OCクロック ~$3,500
MSI SUPRIM Liquid SOC 360mm AIO水冷、2スロット ~$3,500
ASUS ROG Astral LC ハイブリッド水冷(360mm AIO) ~$3,800
Gigabyte Xtreme Waterforce WB カスタムループ水冷用ウォーターブロック ~$3,500
ASUS ROG Matrix 800W XOC BIOS対応、BTFコネクタ ~$4,000
MSI Lightning デュアル16ピン、極限OC向け ~$5,200

4.4 冷却方式の違いを図解

RTX 5090は575Wを冷やすという、GPUクーラーにとって極めて過酷なタスクを課しています。

FE(デュアルフロースルー):

[吸気] → ファン1 → ヒートシンク → [排気: カード上面]
                                  → [排気: ブラケット側]
          ファン2 → ヒートシンク → [排気: カード下面]

特徴: 液体金属TIMでGPU→ヒートシンクの熱伝導を最大化
注意: 上下に排気するため、隣接スロットのカードに熱風が当たる

AIB空冷(トリプルファン):

[吸気] → ファン1 → ───┐
[吸気] → ファン2 → ───┤→ 大型ベイパーチャンバー/ヒートパイプ → [排気: カード周辺]
[吸気] → ファン3 → ───┘

特徴: 3〜4スロットの巨体を活かした大面積の放熱フィン
注意: ケース内に熱風が滞留するため、ケースファンのエアフロー設計が重要

AIB水冷(AIO / カスタムループ):

GPU → ウォーターブロック → [チューブ] → 360mmラジエータ → [排気: ケース外]

特徴: カード本体は2スロットに収まる。ラジエータ設置スペースが必要
注意: ポンプ故障リスク、チューブの取り回し、ラジエータのマウント位置確保

4.5 知っておくべき品質問題(2025年〜2026年報告分)

RTX 5090は華々しいスペックの裏で、発売以降いくつかの品質問題が報告されています。購入前に必ず把握しておくべき事項です。

問題 影響範囲 深刻度 詳細
ROP欠損(168/176) 約0.5%のカード(NVIDIA発表) 本来176基のROPが168基で出荷。ラスタライズ性能が約4-4.5%低下。GPU-Zで確認可能。NVIDIAは製造修正済みと発表、該当カードは交換対象
ASUS Astralファン制御バグ 初期ロットの一部 4ファン目(背面)の制御が効かず100%で回り続ける、またはRPM 0表示になるバグ。GPU Tweak IIIとの相性問題も。新ロットではハードウェア改修済み
ASUS ROG Matrix出荷停止 Matrix全数 品質問題により一時出荷停止。2025年12月に改修版の出荷再開をASUSが発表
12V-2x6コネクタ発熱 全モデル共通リスク 中〜高 接触不良による過熱・溶融が複数報告。ATX 3.1対応PSUのネイティブケーブル推奨
PCIe 5.0互換性問題 特定マザーボードとの組合せ PCIe 5.0モードでブラックアウト・クラッシュする事例。BIOSでPCIe 4.0に設定することで回避可能
メモリ温度問題 FE中心(AIBも一部) 低〜中 高負荷時にGDDR7メモリが89-90°Cに到達。NVIDIA公式の上限90°C付近。長期信頼性への懸念

購入後すぐにGPU-Zを起動し、ROPが176になっているか確認することを強く推奨します。

基本概念が理解できたところで、実際に環境を構築して動かしてみましょう。


5. 実践:RTX 5090でAI環境を構築する

5.1 購入前チェック:あなたのPCに載るか

コードを書く前に、物理的・電気的な制約を確認しましょう。ここを見落として「カードが入らなかった」「PC起動しなかった」は笑えません。

FEの場合(最もコンパクト):

カードサイズ: 304mm(L) × 137mm(H) × 61mm(W) — 2スロット(3スロット分のクリアランス推奨)
推奨PSU: 1,000W以上
電源接続: 16ピン × 1(または 8ピン×3〜4 → 16ピン変換アダプタ)

ASUS TUF Gaming(中型AIBの代表例):

カードサイズ: 348mm(L) × 146mm(H) × 72mm(W) — 3.6スロット
推奨PSU: 1,000W以上
注意: ケース幅160mm以上、GPU長350mm以上のスペース必要

ASUS ROG Astral(大型AIBの代表例):

カードサイズ: 約358mm(L) × 149mm(H) × 80mm(W) — 4スロット
推奨PSU: 1,200W以上(安定動作のため)
注意: 4スロット占有のため、下段のPCIeスロットは全て塞がる可能性大

5.2 環境別の設定ファイル

RTX 5090でPyTorch + ローカルLLM環境を構築する際の設定を3パターン用意しました。

開発環境用(docker-compose.dev.yml)

# docker-compose.dev.yml - RTX 5090 ローカル開発環境
# 32GB VRAMを活かした単体GPU開発用。そのままコピーして使えます。

version: '3.8'
services:
  ai-dev:
    image: nvcr.io/nvidia/pytorch:24.12-py3
    container_name: rtx5090-dev
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility
      - CUDA_VISIBLE_DEVICES=0
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
    volumes:
      - ./workspace:/workspace
      - ./models:/models
      - ./data:/data
    ports:
      - "8888:8888"   # Jupyter Lab
      - "6006:6006"   # TensorBoard
      - "11434:11434"  # Ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    shm_size: '16g'
    working_dir: /workspace
    command: >
      bash -c "jupyter lab --ip=0.0.0.0 --port=8888
      --allow-root --no-browser
      --NotebookApp.token='devtoken'"

本番推論環境用(docker-compose.prod.yml)

# docker-compose.prod.yml - RTX 5090 推論サーバ(vLLM)
# 32GBに収まるモデル(〜32Bパラメータ)をサービング

version: '3.8'
services:
  llm-server:
    image: vllm/vllm-openai:latest
    container_name: rtx5090-inference
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - CUDA_VISIBLE_DEVICES=0
    volumes:
      - ./models:/models
    ports:
      - "8000:8000"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    shm_size: '16g'
    command: >
      --model /models/Qwen2.5-32B-Instruct
      --max-model-len 16384
      --gpu-memory-utilization 0.92
      --dtype float16
      --enforce-eager
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

テスト・CI環境用(docker-compose.test.yml)

# docker-compose.test.yml - CI/CDパイプライン用
# GPU回帰テスト・モデル精度検証

version: '3.8'
services:
  gpu-test:
    image: nvcr.io/nvidia/pytorch:24.12-py3
    container_name: rtx5090-test
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - CUDA_VISIBLE_DEVICES=0
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
      - CUBLAS_WORKSPACE_CONFIG=:16:8
      - PYTHONDONTWRITEBYTECODE=1
    volumes:
      - ./workspace:/workspace
      - ./tests:/tests
      - ./models:/models:ro
      - ./test-results:/test-results
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    shm_size: '8g'
    working_dir: /workspace
    command: >
      bash -c "python -m pytest /tests/
      --tb=short
      --junitxml=/test-results/results.xml
      -v"

5.3 RTX 5090動作確認 & 健全性チェック

購入直後に実行すべきスクリプトです。ROP欠損の検出機能を含みます。

"""
RTX 5090 健全性チェックスクリプト
実行方法: python check_rtx5090.py
対象: RTX 5090(全モデル共通)
"""
import subprocess
import sys
import json


def check_nvidia_smi():
    """nvidia-smiでGPU情報を取得し、基本的な健全性を確認"""
    try:
        result = subprocess.run(
            ["nvidia-smi",
             "--query-gpu=name,memory.total,driver_version,power.limit,temperature.gpu",
             "--format=csv,noheader,nounits"],
            capture_output=True, text=True, check=True
        )
        gpus = result.stdout.strip().split("\n")
        print(f"検出されたGPU数: {len(gpus)}")

        for i, gpu in enumerate(gpus):
            name, vram, driver, power, temp = [x.strip() for x in gpu.split(",")]
            vram_gb = float(vram) / 1024
            print(f"\n  GPU {i}: {name}")
            print(f"    VRAM: {vram} MB ({vram_gb:.0f} GB)")
            print(f"    Driver: {driver}")
            print(f"    Power Limit: {power} W")
            print(f"    温度: {temp} C")

            # RTX 5090固有のチェック
            if "5090" in name:
                if vram_gb < 31:
                    print(f"    [!] VRAMが32GB未満です。カードの異常の可能性があります。")
                if float(power) < 500:
                    print(f"    [!] Power Limitが低く設定されています。nvidia-smi -pl 575 で変更可能。")
            else:
                print(f"    [i] このスクリプトはRTX 5090用です。他のGPUでも動作しますが一部チェックは省略されます。")
        return True
    except FileNotFoundError:
        print("[!] nvidia-smi が見つかりません。NVIDIAドライバをインストールしてください。")
        return False
    except subprocess.CalledProcessError as e:
        print(f"[!] nvidia-smi の実行に失敗: {e}")
        return False


def check_rop_count():
    """GPU-Z相当のROP数チェック(PyTorch経由)"""
    print("\n--- ROP欠損チェック ---")
    try:
        import torch
        if not torch.cuda.is_available():
            print("  [!] CUDAが利用できません。スキップします。")
            return False

        props = torch.cuda.get_device_properties(0)
        print(f"  GPU: {props.name}")
        print(f"  Compute Capability: sm_{props.major}{props.minor}")
        print(f"  SM数: {props.multi_processor_count}")

        # RTX 5090は170 SMが正常。168以下は潜在的な問題
        if "5090" in props.name:
            expected_sm = 170
            if props.multi_processor_count < expected_sm:
                print(f"  [!] SM数が期待値({expected_sm})より少ないです: {props.multi_processor_count}")
                print(f"      GPU-Zでもう少し詳しいROP数を確認してください。")
                return False
            else:
                print(f"  [+] SM数は正常です ({props.multi_processor_count}/{expected_sm})")

            # ROP数はPyTorchから直接取得できないため、GPU-Zでの確認を案内
            print(f"\n  [i] ROP数はPyTorchから直接取得できません。")
            print(f"      GPU-Z (https://www.techpowerup.com/gpuz/) で 'ROPs' が 176 であることを確認してください。")
            print(f"      168と表示された場合、8基欠損の可能性があります(NVIDIAに交換を申請可能)。")
        return True
    except ImportError:
        print("  [!] PyTorchがインストールされていません。")
        return False


def check_pytorch_cuda():
    """PyTorch + CUDAの動作確認とVRAMテスト"""
    print("\n--- PyTorch + CUDA チェック ---")
    try:
        import torch
        print(f"  PyTorch: {torch.__version__}")
        print(f"  CUDA利用可能: {torch.cuda.is_available()}")

        if not torch.cuda.is_available():
            return False

        print(f"  CUDAバージョン: {torch.version.cuda}")
        print(f"  cuDNNバージョン: {torch.backends.cudnn.version()}")

        props = torch.cuda.get_device_properties(0)
        vram_gb = props.total_mem / (1024**3)
        print(f"  VRAM: {vram_gb:.1f} GB")

        # Blackwell sm_120 確認
        if props.major >= 12:
            print(f"  アーキテクチャ: Blackwell (sm_{props.major}{props.minor})")
        elif props.major >= 8:
            print(f"  アーキテクチャ: sm_{props.major}{props.minor}")

        # 28GB VRAMテスト(32GBカードで安全に確保できるライン)
        print("\n  --- VRAM容量テスト ---")
        device = torch.device("cuda:0")
        try:
            test_tensor = torch.randn(28 * 256, 1024, 1024 // 8,
                                       device=device, dtype=torch.float16)
            used_gb = test_tensor.element_size() * test_tensor.nelement() / (1024**3)
            print(f"  28GB テンソル確保: 成功 ({used_gb:.1f} GB 使用)")
            del test_tensor
            torch.cuda.empty_cache()
        except RuntimeError as e:
            print(f"  28GB テンソル確保: 失敗 ({e})")
            return False

        # FP16行列演算ベンチ(簡易)
        print("\n  --- 簡易演算ベンチマーク ---")
        import time
        size = 8192
        a = torch.randn(size, size, device=device, dtype=torch.float16)
        b = torch.randn(size, size, device=device, dtype=torch.float16)
        torch.cuda.synchronize()
        start = time.time()
        for _ in range(10):
            c = torch.matmul(a, b)
        torch.cuda.synchronize()
        elapsed = time.time() - start
        tflops = (2 * size**3 * 10) / elapsed / 1e12
        print(f"  FP16 GEMM ({size}x{size}, 10回): {elapsed:.3f}")
        print(f"  実効性能: {tflops:.1f} TFLOPS")
        del a, b, c
        torch.cuda.empty_cache()
        return True
    except ImportError:
        print("  [!] PyTorchがインストールされていません。")
        return False


def check_memory_temp():
    """メモリ温度の取得(nvidia-smi経由、対応ドライバが必要)"""
    print("\n--- メモリ温度チェック ---")
    try:
        result = subprocess.run(
            ["nvidia-smi", "--query-gpu=temperature.memory",
             "--format=csv,noheader,nounits"],
            capture_output=True, text=True
        )
        if result.returncode == 0 and result.stdout.strip():
            mem_temp = result.stdout.strip()
            if mem_temp != "[N/A]":
                temp = int(mem_temp)
                print(f"  メモリ温度: {temp} C")
                if temp > 85:
                    print(f"  [!] メモリ温度が高めです。エアフローの改善を検討してください。")
                elif temp > 90:
                    print(f"  [!] メモリ温度が危険域です(NVIDIA上限: 90C)。即座に対処が必要です。")
                else:
                    print(f"  [+] メモリ温度は正常範囲です。")
            else:
                print("  [i] メモリ温度は取得できませんでした(ドライバが非対応の可能性)")
        return True
    except Exception:
        print("  [i] メモリ温度チェックをスキップしました。")
        return True


def main():
    print("=" * 60)
    print("RTX 5090 健全性チェック")
    print("=" * 60)

    results = {
        "NVIDIA Driver & GPU情報": check_nvidia_smi(),
        "ROP欠損チェック": check_rop_count(),
        "PyTorch + CUDA": check_pytorch_cuda(),
        "メモリ温度": check_memory_temp(),
    }

    print("\n" + "=" * 60)
    print("診断結果サマリ")
    print("=" * 60)
    all_ok = True
    for name, ok in results.items():
        icon = "+" if ok else "!"
        status = "OK" if ok else "要確認"
        print(f"  [{icon}] {name}: {status}")
        if not ok:
            all_ok = False

    if all_ok:
        print("\n全チェック通過。RTX 5090は正常に動作しています。")
    else:
        print("\n一部の項目で確認が必要です。上記のメッセージを参照してください。")

    print("\n[推奨] 追加確認事項:")
    print("  1. GPU-Zを起動し、'ROPs' が 176 であることを確認")
    print("  2. HWiNFOでメモリ温度の長期モニタリングを実施")
    print("  3. FurMark等で30分間の負荷テスト後、安定性を確認")


if __name__ == "__main__":
    main()

5.4 実行結果の例

RTX 5090 FEでの実行例:

$ python check_rtx5090.py
============================================================
RTX 5090 健全性チェック
============================================================
検出されたGPU数: 1

  GPU 0: NVIDIA GeForce RTX 5090
    VRAM: 32768 MB (32 GB)
    Driver: 572.83
    Power Limit: 575 W
    温度: 38 C

--- ROP欠損チェック ---
  GPU: NVIDIA GeForce RTX 5090
  Compute Capability: sm_120
  SM数: 170
  [+] SM数は正常です (170/170)

  [i] ROP数はPyTorchから直接取得できません。
      GPU-Z で 'ROPs' が 176 であることを確認してください。

--- PyTorch + CUDA チェック ---
  PyTorch: 2.6.0
  CUDA利用可能: True
  CUDAバージョン: 13.0
  cuDNNバージョン: 90500
  VRAM: 32.0 GB
  アーキテクチャ: Blackwell (sm_120)

  --- VRAM容量テスト ---
  28GB テンソル確保: 成功 (28.0 GB 使用)

  --- 簡易演算ベンチマーク ---
  FP16 GEMM (8192x8192, 10回): 0.087秒
  実効性能: 100.3 TFLOPS

--- メモリ温度チェック ---
  メモリ温度: 44 C
  [+] メモリ温度は正常範囲です。

============================================================
診断結果サマリ
============================================================
  [+] NVIDIA Driver & GPU情報: OK
  [+] ROP欠損チェック: OK
  [+] PyTorch + CUDA: OK
  [+] メモリ温度: OK

全チェック通過。RTX 5090は正常に動作しています。

5.5 よくあるエラーと対処法

エラー 原因 対処法
CUDA error: no kernel image is available for execution on the device PyTorchがsm_120(Blackwell)未対応 PyTorch 2.6以降をインストール。pip install torch --index-url https://download.pytorch.org/whl/cu130
起動時にブラックアウト / 画面が映らない PCIe 5.0互換性問題 BIOSでPCIeスロットをGen 4(PCIe 4.0)に変更。これで解消する報告が多数
nvidia-smi でGPU温度が90°C超 冷却不足 or サーマルペースト不良 ケースファンのエアフロー確認。改善しない場合はRMA(初期不良交換)を検討
ファンが100%で回り続ける(RPM表示は0) ASUS Astralのファン制御バグ GPU Tweak IIIを最新版に更新。解消しない場合、16ピンケーブルを付属の4×8ピン変換に交換して試す
GPU-ZでROPが168と表示 ROP欠損品(製造不良) 購入店またはメーカーに連絡して交換を申請。NVIDIAは交換対応を公約済み
16ピンコネクタ付近が異常に熱い / 焦げ臭い コネクタの接触不良 即座にPCの電源を切る。ATX 3.1対応PSUのネイティブ16ピンケーブルに交換。変換アダプタの品質も確認

5.6 購入後チェックリスト(PowerShell版)

# check_rtx5090_health.ps1 - RTX 5090 購入後ヘルスチェック(Windows)
# 実行方法: powershell -ExecutionPolicy Bypass -File check_rtx5090_health.ps1

Write-Host "========================================" -ForegroundColor Cyan
Write-Host " RTX 5090 ヘルスチェック" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan

$issues = @()

# 1. GPU基本情報
Write-Host "`n[1] GPU基本情報..." -ForegroundColor Yellow
$gpuInfo = & nvidia-smi --query-gpu=name,memory.total,driver_version,power.limit --format=csv,noheader 2>$null
if ($gpuInfo) {
    Write-Host "  $gpuInfo"
    $driverVer = ($gpuInfo -split ",")[2].Trim()
    $majorVer = [int]($driverVer.Split(".")[0])
    if ($majorVer -lt 572) {
        $issues += "ドライバ572.42以降を推奨(Blackwell最適化)。現在: $driverVer"
    }
} else {
    $issues += "nvidia-smiが実行できません。ドライバを確認してください。"
}

# 2. PCIeリンク速度
Write-Host "`n[2] PCIeリンク速度..." -ForegroundColor Yellow
$pcieInfo = & nvidia-smi --query-gpu=pcie.link.gen.current,pcie.link.width.current --format=csv,noheader 2>$null
if ($pcieInfo) {
    $gen, $width = $pcieInfo -split ","
    Write-Host "  PCIe Gen $($gen.Trim()) x$($width.Trim())"
    if ([int]$gen.Trim() -lt 4) {
        $issues += "PCIeリンクがGen3以下です。マザーボードのBIOSとスロットを確認してください。"
    }
    if ([int]$gen.Trim() -eq 5) {
        Write-Host "  [i] PCIe Gen5で動作中。不安定な場合はBIOSでGen4に変更してください。" -ForegroundColor DarkYellow
    }
}

# 3. メモリ温度(対応ドライバのみ)
Write-Host "`n[3] 温度情報..." -ForegroundColor Yellow
$tempInfo = & nvidia-smi --query-gpu=temperature.gpu,temperature.memory --format=csv,noheader,nounits 2>$null
if ($tempInfo) {
    $gpuTemp, $memTemp = $tempInfo -split ","
    Write-Host "  GPU温度: $($gpuTemp.Trim()) C"
    if ($memTemp.Trim() -ne "[N/A]") {
        Write-Host "  メモリ温度: $($memTemp.Trim()) C"
        if ([int]$memTemp.Trim() -gt 85) {
            $issues += "メモリ温度が高めです($($memTemp.Trim()) C)。エアフローを改善してください。"
        }
    }
}

# 4. 電力関連
Write-Host "`n[4] 電力情報..." -ForegroundColor Yellow
$powerInfo = & nvidia-smi --query-gpu=power.draw,power.limit,enforced.power.limit --format=csv,noheader,nounits 2>$null
if ($powerInfo) {
    $draw, $limit, $enforced = $powerInfo -split ","
    Write-Host "  現在の消費電力: $($draw.Trim()) W"
    Write-Host "  電力リミット: $($limit.Trim()) W (適用: $($enforced.Trim()) W)"
}

# 結果
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " 結果" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
if ($issues.Count -eq 0) {
    Write-Host "  基本チェックは全て通過しました。" -ForegroundColor Green
    Write-Host "  [推奨] GPU-Zを起動し、ROPが176であることを確認してください。" -ForegroundColor DarkYellow
} else {
    Write-Host "  以下の項目を確認してください:" -ForegroundColor Red
    foreach ($issue in $issues) {
        Write-Host "    [!] $issue" -ForegroundColor Red
    }
}

実装方法がわかったので、次は具体的なユースケースを見ていきます。


6. ユースケース別ガイド:あなたに最適なRTX 5090は?

6.1 ユースケース1: ローカルLLM推論(個人開発者)

想定読者: Ollama / LM StudioでローカルLLMを動かしたい。Qwen 32BやLlama 3.3 70B(量子化)を快適に使いたい。

推奨モデル: Founders Edition(入手できれば)or ASUS TUF Gaming OC(コスパ最強AIB)

理由: LLM推論はメモリ帯域幅がボトルネックになるため、OCクロックの差は殆ど効きません。FEもAIBも同じ1,792 GB/sです。それならFEの$1,999が最もコスパが良い。入手困難な場合、TUF Gamingが最も安価なAIBモデルとして安定した選択肢になります。

RTX 5090(32GB)で動かせるモデルの現実的なライン:

モデル パラメータ 量子化 必要VRAM(概算) RTX 5090で動くか
Llama 3.2 3B 3B FP16 ~6 GB 余裕
Qwen 2.5 7B 7B FP16 ~14 GB 余裕
Qwen 2.5 32B 32B Q4_K_M ~20 GB 快適
Llama 3.3 70B 70B Q4_K_M ~43 GB 収まらない
Llama 3.3 70B 70B Q2_K / IQ3 ~29 GB ギリギリ(品質低下あり)
Qwen3-Coder-Next 80B 80B(3B MoE) Q4_K_M ~49 GB 収まらない

現実: RTX 5090の32GB VRAMでは、70Bクラスのモデルはフル品質では動かせません。Q2〜Q3の攻撃的な量子化が必要であり、品質を妥協することになります。32Bクラスまでが快適ゾーンです。

サンプルコード:

"""
RTX 5090 (32GB) で Qwen 2.5 32B を動かす
実行方法: python run_qwen32b.py
必要VRAM: 約 20GB(Q4_K_M量子化時)
"""
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import time


def main():
    model_id = "Qwen/Qwen2.5-32B-Instruct"

    print("トークナイザをロード中...")
    tokenizer = AutoTokenizer.from_pretrained(model_id)

    print("モデルをロード中(32GB VRAMに展開)...")
    start = time.time()
    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        torch_dtype=torch.float16,
        device_map="cuda:0",
        attn_implementation="flash_attention_2",
    )
    load_time = time.time() - start
    print(f"ロード完了: {load_time:.1f}")

    # VRAM使用量
    allocated = torch.cuda.memory_allocated() / (1024**3)
    print(f"VRAM使用量: {allocated:.1f} GB / 32.0 GB")

    # 推論テスト
    messages = [
        {"role": "user", "content": "FastAPIでWebSocketを使ったリアルタイムチャットサーバのコードを書いてください。"}
    ]
    input_ids = tokenizer.apply_chat_template(
        messages, return_tensors="pt"
    ).to("cuda:0")

    print("\n生成中...")
    start = time.time()
    with torch.no_grad():
        output = model.generate(
            input_ids,
            max_new_tokens=1024,
            temperature=0.7,
            do_sample=True,
        )
    gen_time = time.time() - start
    tokens_generated = output.shape[1] - input_ids.shape[1]
    tokens_per_sec = tokens_generated / gen_time

    response = tokenizer.decode(output[0][input_ids.shape[1]:], skip_special_tokens=True)
    print(f"\n--- 応答(先頭200文字)---\n{response[:200]}...")
    print(f"\n--- 統計 ---")
    print(f"生成トークン数: {tokens_generated}")
    print(f"生成時間: {gen_time:.2f}")
    print(f"速度: {tokens_per_sec:.1f} tokens/sec")


if __name__ == "__main__":
    main()

6.2 ユースケース2: AIモデル学習 / ファインチューニング(研究者・スタートアップ)

想定読者: 7B〜32Bクラスのモデルをファインチューニングしたい。LoRAで効率的に学習を回したい。

推奨モデル: MSI Gaming Trio OC or Gigabyte Gaming OC(バランス型AIB)

理由: 学習ワークロードは長時間の高負荷が続くため、冷却の安定性が重要です。FEの液体金属は長期的な信頼性に不安が残ります(液体金属は経年で移動する可能性がある)。トリプルファンのAIBモデルが安心。またGaming Trio / Gaming OCはデュアルBIOSを搭載しており、不具合時にバックアップBIOSで復旧できるメリットもあります。

サンプルコード:

"""
RTX 5090 (32GB) で LoRA ファインチューニング
実行方法: python finetune_lora.py
必要VRAM: 約 24GB(Qwen 7B + LoRA + バッチサイズ4)
"""
import torch
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    TrainingArguments,
    Trainer,
)
from peft import LoraConfig, get_peft_model
from datasets import load_dataset


def setup_model_and_tokenizer(model_id: str):
    """モデルとトークナイザをセットアップ"""
    tokenizer = AutoTokenizer.from_pretrained(model_id)
    tokenizer.pad_token = tokenizer.eos_token

    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        torch_dtype=torch.bfloat16,
        device_map="cuda:0",
        attn_implementation="flash_attention_2",
    )

    lora_config = LoraConfig(
        r=32,
        lora_alpha=64,
        target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
                        "gate_proj", "up_proj", "down_proj"],
        lora_dropout=0.05,
        bias="none",
        task_type="CAUSAL_LM",
    )
    model = get_peft_model(model, lora_config)
    model.print_trainable_parameters()

    return model, tokenizer


def main():
    model_id = "Qwen/Qwen2.5-7B-Instruct"

    print("セットアップ中...")
    model, tokenizer = setup_model_and_tokenizer(model_id)

    # データセット準備
    dataset = load_dataset("kunishou/databricks-dolly-15k-ja", split="train")

    def tokenize_fn(example):
        text = f"### 指示:\n{example['instruction']}\n\n### 応答:\n{example['output']}"
        return tokenizer(
            text, truncation=True, max_length=2048, padding="max_length"
        )

    tokenized = dataset.map(tokenize_fn, remove_columns=dataset.column_names)

    training_args = TrainingArguments(
        output_dir="./output-lora",
        num_train_epochs=3,
        per_device_train_batch_size=4,    # 32GB VRAMなら4が快適
        gradient_accumulation_steps=4,
        learning_rate=2e-5,
        bf16=True,
        logging_steps=10,
        save_strategy="epoch",
        dataloader_num_workers=4,
        report_to="tensorboard",
        warmup_ratio=0.05,
    )

    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=tokenized,
    )

    print("学習開始...")
    print(f"VRAM使用量: {torch.cuda.memory_allocated()/(1024**3):.1f} GB")
    trainer.train()

    model.save_pretrained("./output-lora/final-adapter")
    print("LoRAアダプタ保存完了: ./output-lora/final-adapter")


if __name__ == "__main__":
    main()

6.3 ユースケース3: ゲーミング + AIハイブリッド用途(ゲーマー兼AI開発者)

想定読者: ゲームもする。でもローカルLLMもStable Diffusionも動かしたい。1枚で全部まかないたい。

推奨モデル: PNY XLR8 OC(コスパ重視)or MSI Vanguard OC(冷却重視)

理由: ゲーミング用途ではGPU温度がメモリ温度に直結します。FEのメモリ温度は負荷時に89-90°Cに達するとの報告があり、長時間ゲーミング+AI学習を交互に行う用途では不安が残ります。PNYはMSRPに最も近い価格設定で知られ、コスパが優れています。Vanguardはベイパーチャンバー搭載で冷却に一日の長があります。

サンプルコード(Ollama + API統合):

"""
RTX 5090でOllamaを使った軽量ローカルLLM + ゲーミングの共存
VRAM割り当てを制御して、ゲームとLLMを同時利用可能にする

実行方法: python ollama_coexist.py
前提: Ollamaがインストール済み
"""
import subprocess
import requests
import json
import time
import sys


def get_gpu_memory_usage():
    """現在のVRAM使用状況を取得"""
    result = subprocess.run(
        ["nvidia-smi", "--query-gpu=memory.used,memory.total",
         "--format=csv,noheader,nounits"],
        capture_output=True, text=True
    )
    used, total = [int(x.strip()) for x in result.stdout.strip().split(",")]
    return used, total


def start_ollama_with_limit(vram_limit_gb: int = 16):
    """VRAM使用量を制限してOllamaを起動"""
    import os

    # Ollamaの最大VRAM使用量を制限
    # ゲームに16GB、LLMに16GBの配分
    os.environ["OLLAMA_GPU_MEMORY"] = f"{vram_limit_gb}g"

    print(f"Ollama起動中(VRAM制限: {vram_limit_gb}GB)...")
    print(f"残り{32 - vram_limit_gb}GBはゲームやその他のGPUタスクに使用可能")

    # Ollamaサーバ起動(バックグラウンド)
    proc = subprocess.Popen(
        ["ollama", "serve"],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
    )

    # 起動待機
    for _ in range(30):
        try:
            requests.get("http://localhost:11434/api/tags", timeout=1)
            print("Ollamaサーバ起動完了")
            return proc
        except requests.ConnectionError:
            time.sleep(1)

    print("[!] Ollamaの起動に失敗しました")
    proc.terminate()
    return None


def chat(model: str, message: str):
    """Ollama APIで推論"""
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": model,
            "prompt": message,
            "stream": False,
        },
        timeout=120,
    )
    data = response.json()
    return data["response"], data.get("eval_count", 0), data.get("eval_duration", 1)


def main():
    # VRAM確認
    used, total = get_gpu_memory_usage()
    print(f"現在のVRAM: {used}MB / {total}MB 使用中")

    # ゲーム用にVRAMを残す設定
    vram_for_llm = 16  # LLMに16GB割り当て
    if used > 8000:  # すでに8GB以上使用中(ゲーム実行中の可能性)
        vram_for_llm = 12
        print(f"[i] 他のGPUタスクがVRAMを使用中。LLM割り当てを{vram_for_llm}GBに縮小。")

    proc = start_ollama_with_limit(vram_for_llm)
    if not proc:
        sys.exit(1)

    try:
        # 16GBに収まるモデルで推論
        model = "qwen2.5:14b"
        print(f"\nモデル: {model}")

        query = "Pythonでシンプルなゲームサーバを実装する方法を教えて"
        print(f"質問: {query}\n")

        response, tokens, duration_ns = chat(model, query)
        tok_per_sec = tokens / (duration_ns / 1e9) if duration_ns > 0 else 0

        print(f"応答:\n{response[:300]}...\n")
        print(f"--- 統計 ---")
        print(f"生成トークン数: {tokens}")
        print(f"速度: {tok_per_sec:.1f} tokens/sec")

        used_after, _ = get_gpu_memory_usage()
        print(f"VRAM使用量: {used_after}MB / {total}MB")
        print(f"ゲーム用に残っているVRAM: {total - used_after}MB")

    finally:
        proc.terminate()
        print("\nOllamaサーバ停止")


if __name__ == "__main__":
    main()

ユースケースを把握できたところで、この先の学習パスを確認しましょう。


7. 学習ロードマップ

この記事を読んだ後、次のステップとして以下をおすすめします。

初級者向け(まずはここから)

  1. NVIDIA公式: RTX 5090製品ページ でスペックと対応機能を確認
  2. GPU-Z をダウンロードし、購入後のROP数チェックに備える
  3. Ollama公式 でローカルLLM環境を構築し、まず小さいモデルから試す

中級者向け(実践に進む)

  1. vLLM公式ドキュメント でBlackwell対応の推論サーバを構築する
  2. PyTorch Blackwell対応ガイド でCUDA 13環境をセットアップ
  3. 本記事のDocker設定をベースに、自分のワークロードに合わせた環境を構築する

上級者向け(さらに深く)

  1. NVIDIA Blackwell Architecture Whitepaper でsm_120の内部構造を理解する
  2. FP4 / FP8 Tensorコアを活用した量子化推論の最適化に取り組む
  3. RTX 5090の32GB制限を超える場合、RTX PRO 6000(96GB)との使い分けを検討する

8. まとめ

この記事では、RTX 5090について以下を解説しました:

  1. FE vs AIBの本質: GPUチップは同一。違いは冷却・サイズ・価格・付加価値の4点
  2. AI用途での現実的な性能: 32GBで快適に動くのは32Bパラメータまで。70Bは量子化必須で品質トレードオフあり
  3. 知っておくべきリスク: ROP欠損、ファン制御バグ、コネクタ発熱、PCIe 5.0問題

エディション選定フローチャート

あなたの最優先事項は?
│
├── コストパフォーマンス最優先
│   ├── FEが在庫ある → Founders Edition ($1,999)
│   └── FEが在庫なし → ASUS TUF Gaming OC (~$2,910)
│
├── 長時間の学習 / 24時間稼働
│   ├── 空冷で十分 → MSI Gaming Trio OC / Gigabyte Gaming OC (~$3,300)
│   └── 冷却を徹底したい → MSI SUPRIM Liquid SOC (~$3,500)
│
├── SFFケース / 省スペース
│   ├── 空冷2スロット → Founders Edition (唯一の2スロット)
│   └── 水冷OK → Gigabyte Xtreme Waterforce WB (カスタムループ用)
│
└── 極限OC / ベンチマーク
    └── MSI Lightning ($5,200) ※デュアル16ピン

私の所感

正直に書く。RTX 5090は「最高のGPU」ではあるが、「誰にでも勧められるGPU」では断じてない。

575Wという電力消費は家庭の電気環境に直結する。古い住宅ではブレーカーが落ちるという報告は冗談ではなく、実体験に基づくものだ。1,000W PSUが「推奨」であって「十分」ではないケースもある。そしてMSRP $1,999のカードが実売$3,000-5,000で流通している2026年2月現在の市場は、控えめに言って異常だ。

AI用途に限れば、32GBのVRAMは「十分」ではなく「そこそこ」だ。32Bパラメータのモデルまでは快適だが、70Bクラスを真面目に使うなら48GB以上が必要になる。その場合の選択肢はRTX PRO 6000(96GB、約$8,500)やMac Studio(M4 Ultra、128GB統合メモリ)にシフトしていく。

それでもRTX 5090を選ぶ理由があるとすれば、「ゲームもAIも1枚でやりたい」というコンシューマの夢を最も高いレベルで実現する唯一のカードだからだ。32Bモデルの推論速度はA100を凌駕し、メモリ帯域幅1,792 GB/sはRTX 4090の77%増し。8Bモデルなら213 tokens/secという狂気の速度が出る。

買うなら、FEを定価で。無理ならTUF Gamingを。$3,500以上のプレミアムモデルに手を出すなら、その差額でVRAMの大きい別のGPU(中古RTX A6000やRTX 6000 Ada)を追加する方が合理的かもしれない。


参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?