HPCシステムズではエンジニアを募集しています。詳しくはこちらをご覧ください。
HPCシステムズのエンジニア達による技術ブログ

Tech Blog

DGX Sparkで見る“デスクサイドAI”の実力 ― FP16/BF16/FP32/FP64でGB10性能を検証

× banner banner

はじめに

当方は弊社CTO事業部にて、アプリケーション・エンジニアリング業務に携わっています。

本レポートでは、NVIDIA DGX Spark(NVIDIA GB10 Grace Blackwell スーパーチップ搭載システム)を用いて実施したベンチマーク結果を報告します。

主な目的は、AI向けの Brain Float 16(Bfloat16、BF16) から科学技術計算で用いられる 倍精度(FP64) まで、異なる精度フォーマットにおけるGrace Blackwellアーキテクチャの性能を検証することです。Grace Blackwellアーキテクチャは、AIワークロードを主目的として設計されていますが、本検証ではAI用途だけでなく、科学技術計算における性能特性についても確認します。

ベンチマークには、当方がClaude Codeを用いて生成したスクリプトをベースに作成したPythonプログラム「ULTIMATE BENCHMARK SUITE」を使用しました。大規模行列乗算(16384×16384)によってGPUコアに高負荷を与え、ピークスループットの現実的な値を測定しています。

テスト環境

  • アーキテクチャ:Grace Blackwell
  • CPU:20コア Arm CPU(10 × Cortex-X925 + 10 × Cortex-A725)
  • GPU:BlackwellアーキテクチャGPU
  • GPU接続:NVLink-C2C(CPU–GPU間コヒーレント接続)
  • メモリ:128GB LPDDR5X(CPU/GPU共有メモリ、実効約120GB)
  • OS:DGX OS 5
  • GPUドライバ:580.95.05
  • CUDA Toolkit:13.0
  • テスト行列サイズ:16384 × 16384

ベンチマーク手順

以下では、NVIDIAのPyTorchコンテナを使用して、本稿のベンチマーク結果を再現するための手順を示します。

ステップ 1:環境セットアップ

まず、Arm64アーキテクチャに最適化された最新のNVIDIA PyTorchコンテナを取得し、コンテナを起動します。

# 1. Dockerイメージを取得
docker pull --platform linux/arm64 nvcr.io/nvidia/pytorch:25.12-py3

# 2. コンテナをインタラクティブモードで起動
docker run --gpus all --rm -it --ipc=host nvcr.io/nvidia/pytorch:25.12-py3

ステップ 2:ベンチマークスクリプトの作成

コンテナ内で、Pythonベンチマークスクリプト「gb10_peak_benchmark.py」を作成します。

以下のスクリプトは、大規模行列乗算(16384 × 16384)を用いてGPUに高負荷を与え、各精度フォーマットにおける演算性能(TFLOPS)を測定するものです。

このベンチマークの特徴

本スクリプトでは、大規模行列乗算を連続実行することでGPUの演算ユニットを最大限に活用し、Grace Blackwellアーキテクチャのピークスループットに近い性能を計測します。主なポイントは次のとおりです。

  • 行列サイズ:16384 × 16384
  • 測定精度:FP16 / BF16 / FP32 / FP64
  • Tensor Coreの利用:FP16およびBF16ではTensor Coreを使用
  • CUDA Core主体の演算:FP32およびFP64
  • ウォームアップ実行:計測前にGPUをウォームアップして安定した性能を取得

これにより、AIワークロードで利用される低精度演算から、科学技術計算で用いられる倍精度演算まで、各精度における演算性能を比較できます。

##create the python script gb10_peak_benchmark.py.
import torch
import time
import sys

# --- Configuration ---
# 16384 is the "Sweet Spot" for GB10.
MATRIX_SIZE = 16384
device = torch.device('cuda:0')

def print_header():
    if not torch.cuda.is_available():
        print('Error: No GPU detected.')
        sys.exit(1)

    props = torch.cuda.get_device_properties(device)
    print(f'\n{"="*70}')
    print(f'   NVIDIA DGX SPARK GB10 - ULTIMATE BENCHMARK SUITE')
    print(f'{"="*70}')
    print(f'[System] GPU Model:   {props.name}')
    print(f'[System] VRAM Total:  {props.total_memory / 1024**3:.2f} GB')
    print(f'[Config] Matrix Size: {MATRIX_SIZE} x {MATRIX_SIZE}')
    print(f'[Target]              Peak AI Performance (100+ TFLOPS)')
    print(f'{"-"*70}')

def run_test(label, dtype, use_tf32=False, iters=10):
    try:
        torch.backends.cuda.matmul.allow_tf32 = use_tf32
        x = torch.randn(MATRIX_SIZE, MATRIX_SIZE, device=device, dtype=dtype)
        y = torch.randn(MATRIX_SIZE, MATRIX_SIZE, device=device, dtype=dtype)

        print(f'Testing: {label}...')

        # Warmup
        for _ in range(3):
            torch.mm(x, y)
        torch.cuda.synchronize()

        # Benchmark
        start_time = time.time()
        for _ in range(iters):
            torch.mm(x, y)
        torch.cuda.synchronize()
        end_time = time.time()

        total_seconds = end_time - start_time
        total_ops = 2 * (MATRIX_SIZE**3) * iters
        tflops = (total_ops / total_seconds) / 1e12
        gflops = (total_ops / total_seconds) / 1e9

        print(f'  > Time:   {total_seconds:.4f} sec (for {iters} iterations)')
        print(f'  > Result: {tflops:.4f} TFLOPS  |  {gflops:.1f} GFLOPS')
        print(f'{"-"*70}')

        del x, y
        torch.cuda.empty_cache()

    except Exception as e:
        print(f'  > Error: {e}')
        print(f'{"-"*70}')

# --- Main Execution Flow ---
print_header()

# 1. FP16
run_test(label='FP16 (Half Precision) [Tensor Cores active]', dtype=torch.float16, use_tf32=False, iters=50)

# 2. BF16
run_test(label='BF16 (BFloat16) [Tensor Cores active]', dtype=torch.bfloat16, use_tf32=False, iters=50)

# 3. FP32
run_test(label='FP32 (IEEE 754 Single) [CUDA Cores]', dtype=torch.float32, use_tf32=False, iters=10)

# 4. FP64
run_test(label='FP64 (Double Precision) [Scientific]', dtype=torch.float64, use_tf32=False, iters=5)

print('Benchmark Complete.')

ステップ 3:実行とモニタリング

作成したベンチマークスクリプトを実行します。あわせて、別のターミナルでGPUの利用状況を監視します。
ベンチマーク実行中は、nvidia-smiを用いてGPU使用率、消費電力、メモリ使用量などをリアルタイムで確認できます。正常に動作している場合、GPU使用率はほぼ100%に張り付き、GPUが継続的に高負荷状態で動作していることを確認できます。

# ベンチマークの実行
python3 gb10_peak_benchmark.py

# GPUの状態を監視(別ターミナルで実行)
watch -n 0.5 nvidia-smi

ベンチマーク結果

AIパフォーマンス(FP16 / BF16)

最初のテストでは、現代のディープラーニング推論およびトレーニングで広く使用される半精度フォーマットに焦点を当てています。これらのテストでは、GB10の専用Tensorコアを使用して行列演算を実行します。

FP16(Half Precision)

Testing: FP16 (Half Precision) [Tensor Cores active]...
  > Time:   4.5557 sec (for 50 iterations)
  > Result: 96.5391 TFLOPS  |  96539.1 GFLOPS

BF16(BFloat16)

Testing: BF16 (BFloat16) [Tensor Cores active]...
  > Time:   4.5384 sec (for 50 iterations)
  > Result: 96.9065 TFLOPS  |  96906.5 GFLOPS

分析

GB10はAIワークロードにおいて非常に高い演算性能を示し、FP16およびBF16の両方で約97 TFLOPS前後のスループットを記録しました。これはTensorコアが効率的に動作していることを示しており、大規模言語モデル(LLM)などのAIワークロードに適した演算性能を備えていることが確認できます。

汎用計算(FP32)

単精度(FP32)は、汎用GPUコンピューティングやレガシーなAIモデルで広く使用される演算精度です。このテストでは、主にCUDAコアを使用した行列演算性能を測定します。

Testing: FP32 (IEEE 754 Single) [CUDA Cores]...
  > Time:   4.7443 sec (for 10 iterations)
  > Result: 18.5403 TFLOPS  |  18540.3 GFLOPS

分析

FP32の測定結果は約18.5 TFLOPSでした。これは理論最大性能のおよそ65%に相当します。今回のテストではTensorFloat-32(TF32)アクセラレーションを使用していないため、CUDAコアによる純粋なFP32演算性能を測定した結果となります。

この値は、Tensorコアを使用しないCUDAコア主体の演算における実効持続性能としては、一般的な範囲に収まる結果といえます。

科学技術計算(FP64)

倍精度(FP64)は、高精度の科学シミュレーション(流体力学や気象予測など)で使用される演算精度です。

Testing: FP64 (Double Precision) [Scientific]...
  > Time:   104.6475 sec (for 5 iterations)
  > Result: 0.4203 TFLOPS  |  420.3 GFLOPS

分析

測定されたFP64性能は約0.42 TFLOPSでした。これはFP32性能に対して約1:64の比率となっており、AI用途を主目的としたGPUアーキテクチャに一般的に見られる設計です。

「デスクサイドAI」アーキテクチャとして予想されるとおり、GB10では低精度演算の性能が優先されており、倍精度演算の性能は抑えられています。

一方で、この結果は理論スペックである464 GFLOPSに対して約90%の水準に達しており、倍精度演算においてもハードウェアが想定どおりの性能を発揮していることが確認できます。

ベンチマークのまとめ

NVIDIA DGX Spark(GB10 Grace Blackwellスーパーチップ搭載)は、今回実施したULTIMATE BENCHMARK SUITEに無事合格しました(笑)。

FP16、BF16、FP32、FP64の各精度で包括的なテストを行った結果、本システムの性能特性は以下のように整理できます。

テスト項目 実測性能 評価 最適な用途
FP16 ~96.5 TFLOPS ⭐⭐⭐⭐⭐

実運用レベルのAI推論
(Llama 3、DeepSeek、SDXLなどのモデル実行に適しています。)

BF16 ~96.9 TFLOPS ⭐⭐⭐⭐⭐

高い安定性が求められるAIファインチューニング
(⚠️注:ハードウェア規模の制約から、GPT-4クラスの巨大モデルをゼロから事前学習する用途には適していません。)

FP32 ~18.5 TFLOPS ⭐⭐⭐ 標準的なPyTorch開発やデータ処理
FP64 0.42 TFLOPS CFD(流体力学)やFEM(有限要素法)などの高精度科学計算には適していません。

要約

  • AI性能の優位性

    BF16で約97 TFLOPSのスループットを記録し、LLMの推論やファインチューニング用途に適した性能を示しました。

  • 大容量メモリ

    128GBの統合メモリ(実効約120GB)により、コンシューマー向けGPUでは扱いにくい大規模モデルのロードが可能です。

  • 将来性

    ソフトウェアの成熟に伴い、Blackwellアーキテクチャが対応するFP4精度(最大1 PFLOPS級)によるさらなる推論性能の向上が期待されます。

  • ハードウェアの健全性

    すべての測定結果が理論性能に対して妥当な効率範囲に収まっており、システムの熱および電力面でも安定した動作が確認されました。

編集後記

AI推論(Inference)向けデバイスとして、PCIe帯域の制約を受けない128GBの統合メモリを備えたGB10 Grace Blackwellは、大規模LLMを扱ううえで非常に興味深く、強力な選択肢であることが確認できました。

ぜひ、NGCコンテナを活用して、お手元の環境でも試してみてください。

今後は、FP4、FP8精度による推論性能や、ファインチューニング時の性能についても検証してみたいところです。

なお、弊社ではエッジデバイスから NVIDIA DGX Spark まで、幅広いハイパフォーマンスマシンを取り扱っています。ご興味がありましたらお気軽にご相談ください。

参考文献・データソース

産業用コンピュータならHPCシステムズ 

HPCシステムズでは信頼性の高い産業用コンピュータ/タブレットを幅広く提供しています。 

要求仕様に応じたカスタマイズのほか、中小規模での量産にも対応。仕様設計・試作・検証・生産・サポートまで徹底的にお応えいたします。

デスク上のAIスーパーコンピュータ「NVIDIA DGX Spark」

デスク上のAIスーパーコンピュータ NVIDIA DGX Spark 取り扱い開始 | 産業用コンピュータならHPCシステムズ
デスク上のAIスーパーコンピュータ NVIDIA DGX Spark 取り扱い開始 NVIDIA DGX Sparkは、デスクトップAIソリューションを提供するコンパクトで強力な新しいコンピュータです。 NVIDIA GB10 Grace

用途にあわせてカスタマイズ可能!
お見積りシミュレーション

HPCシステムズ BTOサイト |