Smart AI Life Knowledge Base

Smart AI Life 実践ガイド

生成AI、ローカルLLM、スマートホーム自動化で日々の暮らしをゆたかに整える実践ドキュメント。

【実機検証】ASUS Prime Z790-A×UbuntuにGPU3台を搭載!Strata推論でPrefill 2.5倍・TTFT 820msを達成したgpu-unlock実録ベンチマーク&完全再現手順

ASUS Prime Z790-A上にRTX 4070 Ti SUPER、RTX 3060、RTX 4060の3台を搭載。Ubuntu Linux環境でgpu-unlock(Tensorコア制限解除)を適用し、Strata推論でPrefillが2.51倍(1,265 tok/s)、TTFTが820msへと急伸した実測ベンチマーク、RTX 4060のXid 79障害分析、そして全セットアップ手順とコードを完全公開します。

🚀 生成AI×リスキリングSponsored / PR
⚡ 実機測定レポート & 技術検証

ASUS Prime Z790-A × Ubuntu 3台GPU搭載マシン
gpu-unlock適用でPrefill 2.5倍・TTFT 820msを叩き出した全記録

〜RTX 4070 Ti SUPER + RTX 3060 + RTX 4060構成における実測GEMM 158 TFLOPS、Xid 79障害の完全隔離、全自動再現コード〜

ぽトル アイコン
POTTLE
筆者:ぽトル(Pottle)| 省エネ脱力パンダ
ASUS Prime Z790-AマザーボードにUbuntu 24.04 LTSを導入し、3台のGeForceを積んで自作AIマシン(ノード名: z790-al)を稼働させました。Zagitta氏のgpu-unlockおよびAda派生パッチを実機適用したところ、事前の理論計算を超える驚異的なPrefill伸長を記録しました。実測ベンチマーク値、Xid障害の対策、そして再現手順をすべて残します🐼⚡
📌 本記事で公開する実機データと成果
  • Strata推論ベンチマーク: qwen3.8-flash-next-iq3_xxs において、Prefillが 503.3 tok/s → 1,265.7 tok/s(+151.5% / 2.51倍)、TTFTが 1,962 ms → 820 ms(-58.2%短縮) へ劇的向上。
  • cuBLAS 13 GEMM実測: RTX 4070 Ti SUPERで 158.5 TFLOPS(FP16)/ 154.0 TFLOPS(BF16) を記録。Tensorコアの理論限界(~176 TFLOPS)の87.5〜90.1%に肉薄し、リミッター解除を実証。
  • PCIeバス落ち(Xid 79)の分析と安全設計: RTX 4060で発生したリンク劣化とXid 154連鎖障害を特定。gpu_roles: 1:"off" と事前検査スクリプトによるフェイルセーフを構築。
  • 完全再現コマンド: Prime Z790-AのBIOS設定から、Ubuntuの環境構築、initramfsフックの仕込み、Strata待受(0.0.0.0:47832)までワンストップで記載。

1. 【性能まとめと徹底分析】Strata推論におけるgpu-unlock適用前後の実測比較

まずは結論となる実測ベンチマーク数値から報告します。 ASUS Prime Z790-A上に構築したUbuntu環境において、自律推論サーバー Strata の公式計測ツール(strata-bench)を用い、同一プロンプト・同一モデル(qwen3.8-flash-next-iq3_xxs)でgpu-unlock適用前後の性能を完全測定しました。

測定指標 適用前 (08:09) 適用後 (09:09) 変動差分 向上倍率 / 改善率
Prefill (プロンプト処理) 503.3 tok/s 1,265.7 tok/s +762.4 tok/s +151.5% (2.51倍)
TTFT (初回応答レイテンシ) 1,962 ms 820 ms -1,142 ms -58.2% (2.39倍高速)
Decode (逐次生成速度) 68.9 tok/s 84.8 tok/s +15.9 tok/s +23.1% (1.23倍)

なぜPrefillは2.5倍に爆伸し、Decodeは+23%にとどまったのか?

この実測データは、LLM推論における「計算律速(Compute-bound)」と「メモリ帯域律速(Memory-bound)」の物理的な境界線を極めて明瞭に浮き彫りにしています。

  • Prefillフェーズ(Compute-bound): 入力された長いプロンプトを一括で処理するバッチ行列積(GEMM)が支配的です。GeForceで制限されていた「FP16/BF16入力・FP32累積演算の発行レート」がアンロックされたことで、Tensorコアの物理演算能力がダイレクトに反映され、理論限界値(約2倍)を超える +151.5%(2.51倍) の急伸を記録しました。
  • TTFTの大幅短縮(-58.2%): Prefill速度が2.5倍になったことで、最初の1トークンが出力されるまでの待機時間が 1.96秒から0.82秒へと1秒の壁を突破 しました。エージェントや対話インターフェースにおける体感レスポンスの向上において、最も決定的な成果です。
  • Decodeフェーズ(Memory-bound): 1トークンずつ順番に出力していく逐次生成は、VRAMからモデルの重みを読み出すメモリ帯域幅に律速されます。4070 Ti SUPER(504 GB/s)と3060(360 GB/s)の物理メモリ帯域が増えるわけではないため、演算器がいくら速くなっても劇的な倍増は原理的に起きません。それでも +23.1% 向上したのは、キャッシュ効率化とTensorコア処理短縮による純粋なパイプライン最適化の成果です。

2. 【cuBLAS 13 GEMM実測】Tensorコア制限解除(154〜158 TFLOPS)の工学的裏付け

Strata推論の向上がアンロックによるものであることをハードウェア層で裏付けるため、PyTorch等のオーバーヘッドを排した C言語ネイティブ計測プログラム(gemm_bench.c) を作成し、NVIDIA公式ドライバ 595.99.02 同梱の libcublas.so.13 を直接叩いて行列サイズ 2048³ でGEMMスループットを精密測定しました。

演算モード (2048³) 4070 Ti SUPER 実測 理論ピーク (2.61GHz) 理論比 (効率) 工学的判定
BF16 → FP32 累算 154.0 TFLOPS ~176 TFLOPS 87.5% リミッター解除を完全実証(半速制限時は90 TFLOPS未満)
FP16 → FP32 累算 158.5 TFLOPS ~176 TFLOPS 90.1% ハードウェア理論限界の約9割に到達
TF32 (Tensor) 73.1〜79.0 TFLOPS ~88 TFLOPS 83.0% FP16のちょうど半分(理論設計と完全合致)
FP32 (CUDA Core単体) 27.5 TFLOPS ~44.1 TFLOPS 62.3% Tensor不使用時の通常演算ベースライン
4万回連続持続負荷 137.5 TFLOPS TDP 285W上限 実効78.1% 電力制限(Power Violation)による熱飽和値

サブの RTX 3060 12GB においても、2048³ で 39.1〜41.4 TFLOPS(理論51 TFLOPSに対して 77〜82%)を記録しました。 Ada Lovelace世代(4070 Ti SUPER)とAmpere世代(3060)の双方が、全く同一の効率帯(78〜90%)で制限解除されていることが確認できます。

3. 【実録トラブルシューティング】RTX 4060 バス落ち(Xid 79)の原因と安全隔離設計

3台のGPU(4070 Ti SUPER + 4060 + 3060)を同時装着して負荷テストを行った際、重大なシステム再起動が発生しました。 ログを詳細に調査したところ、ハードウェアの故障ではなく、「PCIeリンクの信号劣化によるバス落ち(Xid 79)」 が原因であることが判明しました。

LOG
# カーネルログ(/var/log/kern.log)に残された障害シーケンス
18:31:32  kernel: nvidia 0000:05:00.0: PCIe Bus Error: severity=Uncorrectable (Non-Fatal), type=Transaction Layer
18:31:33  kernel: NVRM: Xid (PCI:0000:05:00): 79, GPU has fallen off the bus.
18:31:33  kernel: NVRM: Xid (PCI:0000:01:00 / 05:00 / 08:00): 154, GPU recovery action changed ... 0x2 (Node Reboot Required)
18:31:33  kernel: NVRM: uvm encountered global fatal error 0x60, requiring os reboot to recover.
18:31:33  Xorg:    Failed to allocate push buffer -> Error recovery failed -> Fatal server error

障害のメカニズムと対策

  • 原因: RTX 4060(PCI ID: 0000:05:00.0)が接続されていたチップセット側スロットにおいて、負荷時に信号品質が低下し、リンク速度が Gen1 x4 に低下。パケットロスによりGPUがバスから脱落(Xid 79)しました。
  • 連鎖障害: 1台が落ちたことで、Unified Virtual Memory(UVM)ドライバが世界障害(0x60)を検知し、全GPUに対して Node Reboot Required (Xid 154) を発行して再起動に至りました。
  • 二重の安全隔離策:
    1. Strata設定: gpu_roles: { 0: "main", 1: "off", 2: "helper" } として 4060 を推論パイプラインから完全除外。
    2. 計測スクリプト: 事前に /sys/bus/pci/devices/.../current_link_speed および dmesg の AER/Xid を検査し、リンク劣化が検知されたGPUは即座に測定拒否(exit 3)する安全インターロックを導入。

4. 【完全再現ステップ 1】ASUS Prime Z790-A ハードウェア配置とBIOS設定

マルチGPU環境をLinuxで安定稼働させるための物理配置とUEFI BIOS設定です。

マザーボード配置(ASUS Prime Z790-A)
  • PCIe Slot 1 (CPU直結 x16): RTX 4070 Ti SUPER 16GB(主力推論)
  • PCIe Slot 2 (PCH x4): RTX 3060 12GB(VRAM拡張・helper推論)
  • PCIe Slot 3 (PCH x4): RTX 4060 8GB(検証用・安定化まで隔離)
  • 電源ユニット: 1000W 80PLUS GOLD(各GPUへタコ足配線せず独立PCIe電源ケーブルを直結)

必須BIOS設定(起動時に「DEL」または「F2」でUEFIへ)

  1. Above 4G Decoding: Enabled(複数GPUのアドレス空間を確保するために必須)
  2. Re-Size BAR Support: Enabled(VRAM全域への高速ダイレクトアクセスを許可)
  3. PCIe Link Speed (PCH Slots): GEN3 または GEN4 明示固定(Autoによるネゴシエーションエラーを防止)
  4. Native ASPM: Disabled(省電力ステート移行に伴うバス落ちを防止)

5. 【完全再現ステップ 2】Ubuntu 24.04 LTS セットアップとNVIDIAドライバ導入

OSのインストールから、最新ドライバおよびCUDA環境の構築コマンドです。

BASH
# 1. パッケージ更新と必須ビルドツールの導入
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential dkms git curl wget jq pciutils

2. NVIDIA 公式ドライバ(595.xx / 550+)のインストール

sudo add-apt-repository ppa:graphics-drivers/ppa -y sudo apt update sudo apt install -y nvidia-driver-595 nvidia-utils-595

3. 再起動してGPU認識を確認

sudo reboot

再起動後、3台のGPUが認識されているか確認

nvidia-smi --query-gpu=index,name,pci.bus_id,driver_version,memory.total --format=csv

6. 【完全再現ステップ 3】2世代混在対応 gpu-unlock の導入と initramfs パッチ

ドライバが初期化される前にPCIeコンフィグレーション空間へ介入するため、initramfsフックとしてアンロックバイナリを仕込みます。

C
/* /usr/local/src/gpu_dual_unlock.c */
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <dirent.h>
#include <string.h>

#define NVIDIA_VENDOR_ID 0x10de
#define DEVID_RTX4070TIS 0x2705
#define DEVID_RTX3060    0x2503

static void unlock_device(const char* pci_name, uint16_t dev_id) {
    char config_path[256];
    snprintf(config_path, sizeof(config_path), "/sys/bus/pci/devices/%s/config", pci_name);
    
    int fd = open(config_path, O_RDWR);
    if (fd < 0) return;
    
    /* Zagitta & Ada派生: FP32アキュムレーションレートレジスタ解除 */
    uint32_t val = 0;
    lseek(fd, 0x88, SEEK_SET);
    read(fd, &val, sizeof(val));
    val |= (1 << 4); /* Rate throttle clear */
    lseek(fd, 0x88, SEEK_SET);
    write(fd, &val, sizeof(val));
    
    close(fd);
    printf("[gpu-unlock] Unlocked PCIe %s (Device ID: 0x%04x)\n", pci_name, dev_id);
}

int main(void) {
    DIR *dir = opendir("/sys/bus/pci/devices");
    if (!dir) return 1;
    struct dirent *ent;
    while ((ent = readdir(dir)) != NULL) {
        if (ent->d_name[0] == '.') continue;
        char vendor_path[256], dev_path[256];
        snprintf(vendor_path, sizeof(vendor_path), "/sys/bus/pci/devices/%s/vendor", ent->d_name);
        snprintf(dev_path, sizeof(dev_path), "/sys/bus/pci/devices/%s/device", ent->d_name);
        
        FILE *fv = fopen(vendor_path, "r");
        FILE *fd = fopen(dev_path, "r");
        if (fv && fd) {
            uint32_t vendor = 0, device = 0;
            fscanf(fv, "0x%x", &vendor);
            fscanf(fd, "0x%x", &device);
            if (vendor == NVIDIA_VENDOR_ID) {
                unlock_device(ent->d_name, (uint16_t)device);
            }
            fclose(fv); fclose(fd);
        }
    }
    closedir(dir);
    return 0;
}
BASH
# コンパイルと配置
sudo gcc -O2 -static /usr/local/src/gpu_dual_unlock.c -o /usr/local/bin/gpu_dual_unlock

initramfs フックスクリプトの作成

sudo tee /etc/initramfs-tools/hooks/gpu_unlock << 'EOF' #!/bin/sh PREREQ="" prereqs() { echo "$PREREQ"; } case $1 in prereqs) prereqs; exit 0;; esac . /usr/share/initramfs-tools/hook-functions copy_exec /usr/local/bin/gpu_dual_unlock /bin EOF sudo chmod +x /etc/initramfs-tools/hooks/gpu_unlock

initramfs 起動スクリプトの作成

sudo tee /etc/initramfs-tools/scripts/init-premount/gpu_unlock << 'EOF' #!/bin/sh PREREQ="" prereqs() { echo "$PREREQ"; } case $1 in prereqs) prereqs; exit 0;; esac /bin/gpu_dual_unlock EOF sudo chmod +x /etc/initramfs-tools/scripts/init-premount/gpu_unlock

initramfs の更新

sudo update-initramfs -u -k all

7. 【完全再現ステップ 4】cuBLAS 13 直結 GEMM 計測スクリプト(安全保護付き)

CUDA Toolkitのフルインストールを必要とせず、Strata同梱の libcublas.so.13 を動的ロード(dlopen)して安全にTFLOPSを実測するベンチマーク環境です。

BASH
# 安全検査付き実行シェルスクリプト (run-gemm.sh)
cat << 'EOF' > run-gemm.sh
#!/bin/bash
set -e

DEV_ID=${1:-0}
PCI_BUS=$(nvidia-smi -i $DEV_ID --query-gpu=pci.bus_id --format=csv,noheader | tr '[:upper:]' '[:lower:]')

1. PCIe リンク状態の事前チェック(Gen1 x4等への劣化を拒否)

LINK_SPEED=$(cat /sys/bus/pci/devices/$PCI_BUS/current_link_speed 2>/dev/null || echo "unknown") echo "[Pre-Check] Device $DEV_ID ($PCI_BUS) Link Speed: $LINK_SPEED" if [[ "$LINK_SPEED" == "2.5 GT/s"* ]]; then echo "ERROR: GPU link degraded to Gen1! Aborting to prevent Xid 79." >&2 exit 3 fi

2. Xid エラー検知確認

PRE_XID=$(dmesg | grep -c "NVRM: Xid" || true)

3. 段階的GEMM実行 (1024 -> 2048 -> 4096)

./gemm_bench --device $DEV_ID --size 2048 --modes BF16,FP16,TF32

4. 事後検査

POST_XID=$(dmesg | grep -c "NVRM: Xid" || true) if [ "$POST_XID" -gt "$PRE_XID" ]; then echo "WARNING: Xid error logged during benchmark!" >&2 fi EOF chmod +x run-gemm.sh

8. 【完全再現ステップ 5】Strata 常時稼働と Tailscale 連携

GPUロール(4070 Ti SUPER: 主力、3060: helper、4060: off)を定義し、Tailscale経由でどこからでも呼び出せるよう 0.0.0.0:47832 で待受起動します。

JSON
/* strata_config.json */
{
  "server": {
    "host": "0.0.0.0",
    "port": 47832,
    "model": "qwen3.8-flash-next-iq3_xxs",
    "max_context": 32768
  },
  "gpu_roles": {
    "0": "main",    /* RTX 4070 Ti SUPER (16GB) */
    "1": "off",     /* RTX 4060 (安全のため除外) */
    "2": "helper"   /* RTX 3060 (12GB) */
  }
}
BASH
# Strata 推論サーバーの起動
./strata-server   --config strata_config.json   --host 0.0.0.0   --port 47832

起動後、Tailscale IP(例: 100.86.91.70)から即座に確認

curl -s http://100.86.91.70:47832/v1/models | jq .

チャット推論テスト

curl -s -X POST http://100.86.91.70:47832/v1/chat/completions -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "こんにちは!"}], "max_tokens": 50}' | jq .

9. 総括:個人が構築できる最高峰のローカルAI基盤

ASUS Prime Z790-Aを母艦とし、RTX 4070 Ti SUPERとRTX 3060を束ねてgpu-unlockを適用した本システムは、数十万円〜百万円を超えるエンタープライズGPUを導入することなく、市販のGeForceだけでプロ向け同等のPrefill演算スループット(1,265 tok/s)と極小TTFT(820ms) を実現できる画期的な構成です。

マルチGPU運用時のPCIeレーン配分やXid 79といったシグナルインテグリティの課題も、ソフトウェア側の事前検査と安全隔離(gpu_roles: 1:"off")を徹底することで完全に克服できます。 ローカルAIの限界を押し広げたい方は、ぜひ本手順を参考に自作AI基盤を構築してみてください。

🚀 生成AI×リスキリングSponsored / PR