「計算デバイス」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「計算デバイス」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。
これらのキーワードは「計算デバイスの理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。
🍰 まずはやさしく
AIの計算を助ける専用の機械です。
大量の計算を速く終わらせるために使います。
スマホの画像処理などの技術に似ています。
代表的なデバイスの種類について読みます。
GPU、 TPU、 FPGAなどAI実行用ハードウェア
🍰 まずはやさしく
AIを動かすための道具のことです。
学習にかかる時間や費用を抑えるために使います。
部活のデータ分析でAIを使う時に必要です。
この道具をどう選ぶかについて読みます。
深層学習論文の Experiments 節に「A100 GPU×8 で訓練」と書かれていれば、 まさにこのデバイスのこと。 訓練時間とコストはハードウェア選択で大きく変わります。
本ページでは「計算デバイス」を扱う。 統計データ分析コンペティション (2026) の教材で、 SSDSE-B-2026 (47 都道府県 × 複数年 × 100 超列) の実データを使った再現可能な学習を目指す。
「計算デバイス」は統計・データサイエンスの体系における重要概念のひとつ。 本ページは「定義・直感・数式・実装・落とし穴・関連手法」の 6 視点で構成され、 各視点は独立して読めるが順序通り読むと体系的な理解が得られる。
🍰 まずはやさしく
大勢で一斉に作業するチームのようなものです。
単純な計算を大量にこなすために使います。
文化祭で大勢で焼きそばを作る様子に似ています。
普通の計算機と何が違うのかを読みます。
CPU と GPU の違いを「料理に例える」と理解しやすくなります。 CPU は「フランス料理のシェフが数人」 — 複雑な工程を高度に判断しながらこなす(分岐・条件処理に強い)。 GPU は「学園祭の焼きそば部隊が数千人」 — 単純な工程(炒める・盛る)を全員一斉にこなす(同じ計算を大量の数値に並行適用)。
深層学習の中核演算は行列積 $Y = XW$。 これは「セルごとに 独立な掛け算と足し算 を膨大に行う」 — まさに焼きそば部隊向け作業。 たとえば $1024 \times 1024$ の行列積は約 20 億回 の浮動小数点演算ですが、 GPU は同種の演算を 1 万コア 同時に走らせるので、 CPU が数秒かかるところを 数ミリ秒 で完了します。
SSDSE-B-2026(47 都道府県 × 複数年度・564 行 × 112 列)の標準化や PCA は CPU で十分です。 一方、 同じデータを使って 地域特性を画像化 → CNN で分類 したい、 あるいは 口コミ文章を BERT で埋め込み → クラスタリング したい、 となると GPU が事実上必須になります。 つまり「データ量」より「演算の種類(行列積の塊か)」で GPU が必要かどうかを判定します。
SSDSE-B-2026 の A1101_総人口 × A2101_15歳未満人口 のような 表形式の集計 なら GPU は不要。 しかし市町村ごとに 衛星画像で土地利用を分類 したり、 自治体の 条例 PDF を OCR → 構造化 するなら、 GPU が桁違いの時間短縮をもたらします。
読むだけでは掴みにくい「なぜ GPU は行列演算で速いのか」「なぜ小さい問題では GPU が損をするのか」を、 実際に動かして体感します。 題材は 長さ $N$ の要素積(2 本のベクトルを 1 要素ずつ掛ける、 各要素は完全に独立な計算)。 左が CPU(1 コアで 1 要素ずつ順に)、 右が GPU($P$ コアで一斉に)。 セルが緑に灯れば「計算済み」。 スライダーで 要素数 $N$・GPU コア数 $P$・メモリ帯域 BW を変え、 どちらが先に全セルを塗り終えるか(=所要ステップ数)を見比べてください。
💡 キャンバスをタップ/クリックすると再生・停止を切り替えます。 GPU 側の上部バーは ホスト⇄デバイス間のデータ転送(PCIe/メモリ)。 計算が始まる前に「転送」の時間が必ずかかる点に注目。 N を小さくすると CPU が先に終わり、 N を大きくすると GPU が逆転します。
CPU は「速い 1 人の職人」。 要素を 1 個ずつ順に処理するので、 $N$ 要素なら ちょうど $N$ ステップかかります($N$ に比例して線形に増える)。 GPU は「そこそこの速さの $P$ 人」。 独立な要素を一斉に配れるので計算そのものは $\lceil N/P \rceil$ ステップで済みます。 要素積や行列積のように「各出力が独立に計算できる」演算こそ、 この“一斉配り”が効く典型です。
起動 + 転送in(⌈2N/BW⌉) + 計算(⌈N/P⌉) + 転送out(⌈N/BW⌉)。 帯域 BW が細いほど転送だけで時間を食います。if で処理が枝分かれすると、 各枝を順番に実行し直すため並列度が落ちます。 だからこそ「同種の演算を大量に」が GPU の得意技で、 条件分岐だらけの逐次ロジックは CPU 向きなのです。🍰 まずはやさしく
AI専用の計算回路を持つハードウェアです。
行列計算(数字の塊の計算)を速くするために使います。
高性能なパソコンの部品として搭載されています。
性能を表す指標や数式について読みます。
AI計算デバイス(Compute Device / AI Accelerator)とは、 ニューラルネットワークの順伝播・逆伝播に現れる 大量の同種演算(主に行列積・畳み込み) を、 並列実行ユニットと専用メモリ階層で高速化するハードウェアを指す。 代表は GPU(Graphics Processing Unit)、 TPU(Tensor Processing Unit)、 NPU/IPU/DSP 系の特化チップ、 そして FPGA(書き換え可能回路)。
同義・関連語:GPU, TPU, NPU, FPGA, ASIC, Accelerator
Roofline モデルは「演算強度 $I$(FLOPs/byte)」を横軸、 「実効性能 $P$(FLOPS)」を縦軸にプロットし、 デバイスの帯域律速領域と計算律速領域を視覚化する手法。 Berkeley の Williams らが 2009 年に提案。 これにより「なぜこのカーネルは GPU で速くないのか」を定量的に説明できる。
演算強度 $I = \dfrac{\text{FLOPs}}{\text{Bytes accessed}}$、 デバイスのピーク性能 $P_\text{peak}$、 メモリ帯域 $B_\text{peak}$ とすると、 実効性能の上限は
$$P_\text{eff}(I) = \min\bigl(P_\text{peak},\; I \times B_\text{peak}\bigr)$$
で表される。 $I < P_\text{peak}/B_\text{peak}$ なら帯域律速、 $I \geq P_\text{peak}/B_\text{peak}$ なら計算律速。 境界となる $I^* = P_\text{peak}/B_\text{peak}$ を「演算強度しきい値」と呼ぶ。
| デバイス | $P_\text{peak}$ (TFLOPS) | $B_\text{peak}$ (GB/s) | $I^*$ (FLOPs/byte) | 境界での解釈 |
|---|---|---|---|---|
| Xeon 8480 (CPU) | 3.4 | 307 | ~11 | 行列積($I$≈10-100)でやっと計算律速 |
| A100 GPU (FP32) | 19.5 | 1555 | ~13 | CNN は計算律速、 BERT 推論は帯域律速 |
| H100 GPU (FP8) | 3026 | 3350 | ~900 | 演算強度をかなり上げないと活きない |
| TPU v5p (BF16) | 459 | 2765 | ~166 | Transformer 学習で計算律速 |
| M2 Neural Engine | 17.4 (INT8) | 100 | ~174 | 統合メモリで実効は更に厳しい |
このコードでやること: 5 デバイスの Roofline を 1 枚の図に重ね、 ResNet-50 / GPT-3 / SSDSE 統計計算の演算強度を点でプロットして、 どのデバイスがどのワークロードに最適かを可視化する。
📥 入力データ(上の表をそのまま使う):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import numpy as np import matplotlib.pyplot as plt devices = [ ("Xeon 8480", 3.4e12, 307e9, "tab:blue"), ("A100 FP32", 19.5e12, 1555e9, "tab:orange"), ("H100 FP8", 3026e12, 3350e9, "tab:green"), ("TPU v5p", 459e12, 2765e9, "tab:red"), ("M2 NE INT8", 17.4e12, 100e9, "tab:purple"), ] workloads = [ ("ResNet-50 inf", 76, 4.1e9), ("GPT-3 token", 175, 3.5e11), ("df.corr SSDSE", 0.4, 2.2e6), ] I_range = np.logspace(-2, 4, 200) plt.figure(figsize=(7, 5)) for name, P, B, c in devices: perf = np.minimum(P, I_range * B) / 1e12 plt.loglog(I_range, perf, label=name, color=c, lw=2) for name, I, _ in workloads: plt.axvline(I, ls="--", alpha=0.4) plt.text(I, 0.02, name, rotation=90, fontsize=9) plt.xlabel("Arithmetic Intensity I [FLOPs/byte]") plt.ylabel("Effective Performance [TFLOPS]") plt.title("Roofline: device vs workload") plt.grid(True, which="both", ls=":", alpha=0.5) plt.legend(loc="lower right", fontsize=9) plt.tight_layout() plt.savefig("roofline_5dev.png", dpi=120) |
📤 実行結果(読み方):
💬 演算強度 0.4 は「2 バイト読んで 1 FLOP 計算する」程度の薄さで、 どんなデバイスも実効性能の数 % しか出せない。 SSDSE 規模の統計処理は CPU が現実的に最速という直感を Roofline が定量的に裏付ける。
計算デバイスの選定は技術仕様だけでなく、 調達リードタイム・電源/空調・TCO(総保有コスト)・サポート切れまで含めて意思決定する。 H100 のリードタイムは 2024 年時点で 6-12 ヶ月、 オンプレでの導入には電気工事と機械工事を含むプロジェクト計画が必要。 一方クラウドではボタン 1 つで即時利用できるが、 1 ヶ月で数百万円のコストが出る。
| 構成 | 初期費用 | 電気代/月 | 運用人件費/月 | 36 ヶ月 TCO | 損益分岐 |
|---|---|---|---|---|---|
| オンプレ H100×8 (DGX H100) | 5,500 万円 | 25 万円 | 40 万円 | 7,840 万円 | ~24 ヶ月利用で割安 |
| AWS p5.48xlarge (H100×8) | 0 円 | — | 10 万円 | 15,200 万円 (定価 24/365) | 短期実験・バースト向き |
| GCP TPU v5p-32 | 0 円 | — | 8 万円 | 9,800 万円 (定価 24/365) | JAX/XLA 移植コスト要 |
| Lambda Labs H100 RI 3年 | 2,100 万円 (一括) | — | 5 万円 | 2,280 万円 | 最安だが在庫待ち |
オンプレ TCO 7840 万円 ÷ AWS 時間単価(H100×8 で約 12,500 円/h)= 6,272 時間 ≒ 1 日 5.8 時間以上を 36 ヶ月継続して使うならオンプレが安い。 逆に 1 日 2 時間以下しか使わないなら、 クラウドのオンデマンド or スポットの方が TCO で勝つ。 「学習はクラウド、 推論はオンプレ」というハイブリッド構成が現実的に多い理由はここにある。
AI 計算デバイスはおおむね 2 年ごとに性能 2-3 倍のペースで進化する(V100→A100→H100→B200)。 3 年経つと同価格帯で 4-9 倍の性能が手に入るため、 オンプレ機材の 会計償却 5 年 vs 性能寿命 3 年のギャップがリスクになる。 これは EC2 等のクラウド側にも同じ圧力がかかり、 旧世代のオンデマンド単価は徐々に下がるが、 新世代の方が「FLOPS/円」で常に有利。 結論として「主力ワークロードは 3 年で乗り換える」前提でアーキテクチャ移植性(PyTorch + Triton / JAX 等)を確保しておくのが運用上のベストプラクティスである。
AI 計算デバイスは 半導体製造の上流と密接に結びついており、 ハイエンド GPU/TPU の生産は事実上 TSMC(台湾)・Samsung(韓国)・Intel(米国)の数社に集約されている。 米中対立に伴う輸出規制(2022 年以降の H100/A100 中国向け禁輸など)は調達リスクとして無視できず、 サーバ調達計画 / オンプレ導入計画には地政学リスクの織り込みが求められる。 さらに学習に伴う 電力消費・水使用量・CO2 排出はサステナビリティ報告の対象となり、 大規模事業者では「FLOPS あたりの CO2」も評価指標になっている。
| ファウンドリ | 最先端ノード | 代表生産品 | 所在 | 調達リスク |
|---|---|---|---|---|
| TSMC | 3nm (N3E) | H100 / B200 / Apple M シリーズ | 台湾 + 米国 Arizona | 地政学・地震 |
| Samsung Foundry | 3nm (SF3) | Exynos / 一部 NVIDIA | 韓国・米国 Texas | 歩留・地政学 |
| Intel Foundry | 18A (1.8nm 相当) | Intel Gaudi / 自社製品 | 米国・アイルランド | 立ち上げ遅延 |
| SMIC | 7nm 相当 | Huawei Ascend | 中国本土 | EUV 装置禁輸 |
GPT-3 (175B) の学習には推定 1287 MWh が必要とされ、 日本の平均的な家庭電力 5,000 kWh/年で換算すると 約 257 世帯の年間電力相当になる。 同じく学習過程の CO2 排出量は約 552 t-CO2(米国電源平均ベース)。 さらにデータセンターは冷却に大量の水を使用し、 GPT-3 学習で約 700,000 L の水が必要との試算もある。 「大きいモデル = 環境負荷大」という事実は、 モデル選定時の倫理的・社会的考慮としても無視できない。
💡 まとめ: AI 計算デバイスは 純粋な技術選定だけで完結しない。 演算性能・帯域・電力・コスト・地政学・環境負荷・サプライチェーンの 7 軸を統合的に俯瞰し、 3 年 / 5 年スパンの戦略として意思決定する必要がある。 本ページの Roofline・TCO・サプライチェーン分析は、 その意思決定を 定量的に行うための土台である。
大学・高専・研究機関で AI 計算デバイスを導入する際の実務的判断基準を整理する。 研究室レベル(学生数名)・学科レベル(数十名)・全学レベル(数百名)の 3 階層で、 推奨構成と運用ポイントが異なる。 本コンペで扱う SSDSE-B-2026 のような 小~中規模の統計データと、 LLM ファインチューニング等の 大規模深層学習を併走させる場合、 段階的にスケールできる構成が望ましい。
| 階層 | 想定ユーザ | 推奨デバイス | 想定予算 | 主な用途 |
|---|---|---|---|---|
| 研究室 | 2-10 名 | RTX 4090 × 2-4 台 / Mac Studio M2 Ultra | 100-500 万円 | 論文実装・卒研・コンペ |
| 学科 | 30-80 名 | L40S × 8 台 + ストレージ + 共有ジョブスケジューラ | 2,000-5,000 万円 | 授業・研究室間共有 |
| 全学 | 数百-数千名 | DGX H100 × 数台 + 学内 IaaS (Kubernetes) | 2 億円~ | 全学共通計算基盤 |
💬 本コンペ参加者向けの最終アドバイス: SSDSE-B-2026 は CPU で十分。 自前 PC(Mac M シリーズ / Windows + Ryzen 等)で全行程が完結する。 むしろ「GPU を使う必要がない」ことを見抜けるのが正しいデータサイエンスの感覚で、 大規模デバイスは 真に必要になってから導入する。 本ページの Roofline・TCO 分析は、 その「真に必要なタイミング」を見極める基礎になる。
ハードウェア理解を深めるには、 NVIDIA の CUDA C++ Programming Guide、 Google の JAX/TPU ドキュメント、 Apple の Metal Performance Shaders、 Intel の oneAPI の各ベンダ公式ドキュメントが第一級資料となる。 アカデミックには Hennessy & Patterson『コンピュータアーキテクチャ』、 山崎・佐藤『深層学習のためのコンピュータシステム』、 NeurIPS / MLSys 学会の論文集が体系的に学べる。 オンラインでは MIT 6.5940 (TinyML), Stanford CS149 (Parallel Computing), CMU 15-418 など、 名門大学の公開講義をフォローすると、 本ページで紹介した Roofline・シストリックアレイ・量子化等の概念が 第一原理から理解できるようになる。 加えて、 国内の スーパーコンピュータ「富岳」や産総研 ABCI 等の HPC 環境を学生・研究者として無料/低価格で使える制度もあるため、 必要に応じて大学経由で申請する選択肢も検討に値する。
%timeit でカーネルの実時間を測る習慣を付ける。上で示した $\text{FLOPS} = N_{\text{cores}} \times f_{\text{clock}} \times \text{ops}_{\text{cycle}}$ は、 一見シンプルですが「3 つの掛け算がそれぞれ全く違う設計思想に対応している」点がポイントです。 第 1 因子の $N_{\text{cores}}$(コア数) は 並列度。 CPU は十数コア、 NVIDIA A100 GPU は CUDA コアが 6,912 個(さらに Tensor Core 432 個)、 TPU v4 は Matrix Multiply Unit(MXU)を 4 基持ちます。 「同じ計算をどれだけ多くの作業員で分担できるか」を表す数字です。
第 2 因子の $f_{\text{clock}}$(クロック周波数, GHz) は 各コアの速さ。 CPU が 3〜5 GHz と高いのに対し、 GPU は 1〜2 GHz と低めです。 一見 GPU は遅そうですが、 コア数で 100 倍以上稼ぐので合計演算量では圧倒します。 これは「料理人 1 人が 5 倍速いシェフ vs. 1 倍速の料理人が 100 人いる屋台」の違いに対応します。
第 3 因子の $\text{ops}_{\text{cycle}}$(1 サイクル演算数) は SIMD/Tensor Core 拡張。 1 命令で 1 演算ではなく、 1 命令で 4 個・8 個・16 個の数を一括処理する仕組み(SIMD = Single Instruction Multiple Data)です。 NVIDIA Tensor Core は 4×4 行列積を 1 サイクルで実行するため、 ここが Tensor Core 搭載 GPU が FP16 で 312 TFLOPS と桁違いに高い理由です。 つまり「同じ料理人が一度に手を動かす範囲」を増やす技術と言えます。
SSDSE-B-2026(47 都道府県 × 複数年度・564 行 × 112 列、 約 0.3 MB)を読み込んで標準化する程度なら、 必要演算は $1900 \times 100 \times 数 \approx 10^6$ オーダー。 これは CPU 1 秒未満で済む規模であり、 $N_{\text{cores}}$ を増やす意義はありません。 一方、 SSDSE-B-2026 を入力として 市町村ベクトルを 768 次元に Embed する Transformer を作るなら、 演算量は一気に $10^{12}$ オーダーへ。 ここで初めて $N_{\text{cores}}$ と $\text{ops}_{\text{cycle}}$ の積(つまり Tensor Core)が利いてくるわけです。
アリスメティック・インテンシティ $\text{AI}=演算回数/転送バイト数$ は、 ハードウェアが「演算律速」か「メモリ律速」かを切り分ける指標です。 SSDSE-B-2026 の単純 SUM や AVERAGE は AI が約 0.25 Flops/Byte(1 つの数値を読んで足すだけ)と低く、 メモリ律速。 つまり GPU を投入しても帯域がボトルネックで速くなりません。 対照的に、 行列積は AI が数十〜数百 Flops/Byte(同じデータを再利用しながら多くの掛け算を行う)で、 GPU の本領が発揮されます。 「自分の計算がどちらの体質か」を見抜くことが、 GPU 導入判断の核心です。
記号 VRAM(Video RAM)は GPU 内蔵メモリで、 モデル重み + 勾配 + 中間活性化 + バッチデータを乗せます。 BERT-base(110M パラメータ)の訓練には FP32 で約 8 GB、 FP16 で約 4 GB が目安。 A100 80GB なら BERT-large でも余裕、 RTX 4090 24GB なら推論専用、 という具合に 「VRAM が足りるか」が機種選定の最初のチェックになります。 SSDSE のような小規模表データなら VRAM の話はそもそも出てきません。
最後に TDP(Thermal Design Power, W)は熱設計電力。 NVIDIA H100 は 700W、 A100 は 400W、 ノート PC 用 RTX 4060 は 115W。 これは 消費電力 ≒ 電気代 ≒ ランニングコスト と直結し、 クラウド GPU の時間課金単価とほぼ比例します。 つまり TDP は「物理現象の指標」であると同時に「経済の指標」でもあるという点を、 数式の裏で覚えておきましょう。
| 記号 | 読み | 意味 |
|---|---|---|
| $N_{\text{cores}}$ | エヌコアズ | 並列演算ユニット数。 GPU で数千〜1 万 |
| $f_{\text{clock}}$ | エフクロック | 1 秒間のサイクル数(GHz) |
| $\text{ops}_{\text{cycle}}$ | オプスパーサイクル | 1 サイクル当たりの演算数(SIMD 幅) |
| FLOPS | フロップス | 1 秒間の浮動小数点演算回数(Floating point Operations Per Second) |
| VRAM | ブイラム | GPU 内蔵メモリ。 モデル + 勾配 + 活性化を載せる |
| 帯域 / Bandwidth | バンド幅 | メモリ ⇔ 演算ユニット間の転送速度(GB/s) |
| $\text{AI}$ (Arithmetic Intensity) | アリスメティック・インテンシティ | 演算量 / 転送量。 GPU 向きか判定する指標 |
| TDP | ティーディーピー | 熱設計電力 (W)。 消費電力・電気代の上限 |
| $\alpha$ | アルファ | Amdahl の並列化可能割合(0〜1) |
| $p$ | ピー | 並列プロセッサ数(GPU 枚数) |
2010 年以前、 統計解析は CPU で行うのが当たり前でした。 ところが 深層ニューラルネットワークの規模が指数的に拡大(パラメータ数 7 桁/年)し、 CPU では現実的時間で訓練できなくなります。 ここに「同じ単純計算を桁違いに並列で実行する専用ハードウェア」という概念が独立した分野として確立しました。 SSDSE-B-2026 のように 0.3 MB 規模のデータでは無縁ですが、 OCR・翻訳・画像生成・自治体文書要約 — これら現代 AI の中核タスクには、 もはや GPU/TPU なしには取り組めません。
CPU は「Latency Oriented Design」 — 1 つの仕事を最短時間で終わらせる思想で、 大きなキャッシュ・複雑な分岐予測・out-of-order 実行を備えます。 GPU は「Throughput Oriented Design」 — 1 仕事あたりの時間は遅いが、 大量の仕事を同時にこなす思想で、 軽量コアを数千個積みます。 TPU はさらに極端で、 「Matrix Multiply Specialized Design」 — 行列積以外はあえて捨て、 シストリックアレイ回路を 128×128 で焼き付けます。 SSDSE-B-2026 を分析するなら CPU、 SSDSE × 衛星画像で CNN を訓練するなら GPU、 1 兆パラメータの LLM を学習するなら TPU、 と用途と設計思想が一対一対応します。
AI 計算デバイスは ハード単独では使えない 点が他の概念と決定的に異なります。 NVIDIA GPU は CUDA + cuDNN + cuBLAS + NCCL の階層的ソフトウェアスタックがあって初めて深層学習で使える。 TPU は XLA コンパイラ + JAX/TensorFlow が必須。 つまり「ハードウェア選定 ≒ ソフトウェアスタック選定」であり、 研究を始めるときには「使いたいフレームワーク(PyTorch なら CUDA、 JAX なら CUDA or TPU、 MLX なら Apple Silicon)」から逆算するのが正解です。
| 関連概念 | 関係性 | SSDSE-B-2026 を使う例 |
|---|---|---|
| DNN・CNN | GPU が高速化する 対象 | SSDSE × 衛星画像で CNN 訓練 |
| PyTorch / TensorFlow | GPU を呼び出す API 層 | SSDSE 数値列を tensor 化して GPU に送る |
| Hadoop / Spark | CPU 横並列の 対比 | SSDSE × 巨大ログでも Spark なら CPU で十分 |
| エポック・バッチサイズ | GPU 性能を決める 運用パラメータ | SSDSE を学習する際の batch_size 探索 |
| 非構造化データ・OCR | GPU を 必要とする入力 | SSDSE × 自治体 PDF を OCR → 統合 |
研究室・現場で AI 計算デバイスを扱うときの実務知:
SSDSE-B-2026 程度の規模なら、 GPU は 絶対に必要なものではなく、 高速化の選択肢の 1 つ です。 学習者にとっての本質は「自分の処理が CPU 向きか GPU 向きか」を見抜く目を養うこと。 そのために、 上の Roofline モデルや Arithmetic Intensity を計算する習慣をつけましょう。 GPU が必要かどうか分からない場合は、 まず CPU で書いて %timeit で計測 → ボトルネック特定 → GPU 化 — の順が定石です。
AI 計算デバイスを使った分析の 正しさ・効率・再現性 を担保するため、 統計的観点に加えて「ハードウェア・実装観点」を含めて検証するのが現代の作法です。
| 確認する点 | AI計算デバイス で何を見るか |
|---|---|
| VRAM 不足(CUDA out of memory)エラー | 学習中に発生する代表的エラー。 バッチサイズを半分・1/4 に下げる、 勾配チェックポイント(torch.utils.checkpoint)で活性化を保存しない、 FP16/BF16 に切り替えて VRAM 半減、 など対処。 推論時は torch.no_grad() や model.eval() でメモリ削減できる。 |
| CPU↔GPU 転送のボトルネック | 毎ステップで x.to('cuda') を呼ぶと PCIe(16〜64 GB/s)が律速。 DataLoader の pin_memory=True, num_workers≥4 で非同期転送に。 SSDSE-B-2026 のように全部 VRAM に乗る場合は最初に 1 回だけ転送して使い回せばよい。 |
| クラウド GPU のコスト爆発 | p4d.24xlarge は約 32 ドル/h、 1 日放置で 800 ドル、 1 か月で 24,000 ドル。 訓練終了後の停止忘れ、 スポットインスタンスの中断、 永続ボリュームの料金にも注意。 必ず 予算アラートと自動停止スケジュールを設定。 |
| ラップトップ GPU の電力・熱問題 | ノート用 GPU は熱が筐体内にこもると サーマルスロットリング(自動的にクロック低下)が発生し、 1 時間後に半分の速度になることも。 長時間学習はデスクトップかクラウドへ。 SSDSE-B-2026 のような小規模実験はノート PC で問題なし。 |
| 「とりあえず GPU 使えば速くなる」という誤解 | SSDSE-B-2026 の describe() や pivot_table() を GPU で動かしても、 起動・転送のオーバーヘッドで CPU より遅くなる。 演算量 $<10^9$ Flops 程度ならむしろ CPU 推奨。 GPU は「同じ計算を何百万回繰り返す」とき初めて優位。 |
| FP16 のオーバーフロー/アンダーフロー | FP16 の表現範囲は約 $\pm 65,504$。 SSDSE-B-2026 の人口列(最大 1,400 万)の二乗を取ると即オーバーフローして NaN に。 BF16 を使うか、 GradScaler で動的スケールを当てる。 |
| 再現性 | 同じデータ・同じコードで同じ結果が出るか。このページの ▶ 実行ボタンで確かめられます |
torch.profiler:PyTorch 公式。 オペレータごとの時間・メモリを可視化nvidia-smi:GPU 使用率・温度・電力をリアルタイム監視1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import torch import torch.nn as nn device = torch.device( 'cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() # Apple Silicon else 'cpu' ) print(f'Device: {device}') # 以後すべてのテンソルは device に従う class MyModel(nn.Module): def __init__(self): super().__init__() self.net = nn.Sequential(nn.Linear(3, 16), nn.ReLU(), nn.Linear(16, 1)) def forward(self, x): return self.net(x) model = MyModel().to(device) X = torch.randn(8, 3).to(device) print('出力の形:', tuple(model(X).shape), ' 置き場所:', model(X).device) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import pandas as pd from sklearn.preprocessing import StandardScaler from torch.utils.data import DataLoader, TensorDataset # loader はこのあとのブロックで作っているので、ここでも用意しておく _d = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) _d = _d[_d['SSDSE-B-2026'] == 2023] _X = StandardScaler().fit_transform(_d[['A1101', 'A4101', 'L3221']].astype(float)) _y = StandardScaler().fit_transform(_d[['I5102']].astype(float)) loader = DataLoader(TensorDataset(torch.tensor(_X, dtype=torch.float32), torch.tensor(_y, dtype=torch.float32)), batch_size=8, shuffle=True) import torch import torch.nn as nn from torch.amp import autocast, GradScaler optim = torch.optim.Adam(model.parameters(), lr=1e-3) loss_fn = nn.MSELoss() scaler = GradScaler(device.type) for X, y in loader: X, y = X.to(device), y.to(device) optim.zero_grad() with autocast(device.type, dtype=torch.bfloat16): pred = model(X) loss = loss_fn(pred, y) scaler.scale(loss).backward() scaler.step(optim) scaler.update() print(f'最後のバッチの loss = {float(loss):.4f}') # VRAM 約半減、 H100 では速度 1.5〜2.5 倍 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import torch, time def benchmark(device_str, size=2048, iters=100): device = torch.device(device_str) A = torch.randn(size, size, device=device) B = torch.randn(size, size, device=device) if device.type == 'cuda': torch.cuda.synchronize() t0 = time.time() for _ in range(iters): C = A @ B if device.type == 'cuda': torch.cuda.synchronize() dt = time.time() - t0 flops = 2 * size**3 * iters return dt, flops / dt / 1e9 for dev in ['cpu', 'cuda']: try: t, gflops = benchmark(dev) print(f'{dev}: {t:.2f}s, {gflops:.0f} GFLOPS') except Exception as e: print(f'{dev} 利用不可: {e}') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pandas as pd import torch from sklearn.preprocessing import StandardScaler from torch.utils.data import DataLoader, TensorDataset # dataset を SSDSE-B-2026 から作る(総人口・出生数・消費支出 → 一般診療所数) _d = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) _d = _d[_d['SSDSE-B-2026'] == 2023] _X = StandardScaler().fit_transform(_d[['A1101', 'A4101', 'L3221']].astype(float)) _y = StandardScaler().fit_transform(_d[['I5102']].astype(float)) dataset = TensorDataset(torch.tensor(_X, dtype=torch.float32), torch.tensor(_y, dtype=torch.float32)) loader = DataLoader( dataset, batch_size=8, # 47 件しかないので 128 だと 1 バッチになる shuffle=True, num_workers=0, # 小データでは 0 が速い(プロセス起動の方が高くつく) pin_memory=False, # GPU を使うときだけ True にする ) # 画像データセットなら num_workers=4〜8、 batch_size=128、 # pin_memory=True、 persistent_workers=True、 prefetch_factor=2 が経験則。 print('バッチ数:', len(loader), ' 1 バッチの形:', tuple(next(iter(loader))[0].shape)) |
1 2 3 4 5 6 7 8 9 10 11 | # torchrun --nproc_per_node=4 script.py で起動 import torch.distributed as dist from torch.nn.parallel import DistributedDataParallel as DDP dist.init_process_group('nccl') local_rank = int(os.environ['LOCAL_RANK']) torch.cuda.set_device(local_rank) model = MyModel().cuda() model = DDP(model, device_ids=[local_rank]) # 以後通常通り訓練ループ。 勾配は全 GPU で同期される。 |
「AI 計算デバイス」は 業界ごとに要件・運用形態が大きく異なる 概念です。 主要業界の典型ユースケースと、 SSDSE-B-2026 を絡めた応用イメージを示します。
「AI 計算デバイス」の理解は 実測 なしには本物になりません。 SSDSE-B-2026 を題材に、 CPU と GPU の実行時間差を体感する手順を以下に示します。
統計センター SSDSE ページ から CSV を取得し、 data/raw/SSDSE-B-2026.csv に配置。 ファイルサイズは約 0.3 MB(47 都道府県 × 複数年度・564 行 × 112 列)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import pandas as pd import torch, time df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) nums = df.select_dtypes('number').fillna(0).values.astype('float32') print('Shape:', nums.shape) # --- CPU 実行 --- X_cpu = torch.tensor(nums) t0 = time.time() for _ in range(100): sim_cpu = X_cpu @ X_cpu.T cpu_time = time.time() - t0 print(f'CPU: {cpu_time*1000:.1f} ms') # --- GPU 実行 --- if torch.cuda.is_available(): X_gpu = X_cpu.cuda() torch.cuda.synchronize() t0 = time.time() for _ in range(100): sim_gpu = X_gpu @ X_gpu.T torch.cuda.synchronize() gpu_time = time.time() - t0 print(f'GPU: {gpu_time*1000:.1f} ms, speedup x{cpu_time/gpu_time:.1f}') |
筆者の手元環境(M2 Pro CPU vs Colab T4 GPU)では、 564×110 の行列に対する 100 回の行列積で CPU 約 180 ms / GPU 約 25 ms(7 倍高速) でした。 つまり SSDSE 規模でも GPU は確かに速い。 ただし X_cpu.cuda() の転送に毎回 5〜10 ms かかるので、 転送回数を最小化 するのが鉄則です。
| 学習段階 | 推奨環境 | SSDSE での目安 |
|---|---|---|
| 入門 | ノート PC(CPU のみ) | SSDSE-A の集計・可視化 |
| 中級 | Google Colab(無料 T4 GPU) | SSDSE-B のクラスタリング・PCA・小型 NN |
| 中上級 | Kaggle Kernel(P100/T4 ×1) | SSDSE × 衛星画像で CNN 訓練 |
| 上級 | AWS p3/g5、 GCP A100 | SSDSE × OCR で文書 → 構造化 |
| 研究 | 産総研 ABCI、 学内クラスタ | SSDSE × LLM 事前学習 |
実データで動かすことで、 教科書の例題では見えない 実務的な気づき(欠損のパターン、 単位の混在、 市町村コードの表記揺れ、 合併市町村の扱い等)が得られます。 SSDSE-B-2026 は 都道府県名と市区町村名の両方が文字列カラムとして含まれるため、 数値処理に入れるときは select_dtypes('number') や明示的なカラム選択が必要です。
torch.cuda.is_available() が False を返すnvidia-smi)、 ②CUDA Toolkit のバージョンと PyTorch のビルドが整合しているか(pip install torch --index-url https://download.pytorch.org/whl/cu124 のように明示)、 ③Docker なら --gpus all オプションを忘れていないか確認。batch_size を半分に、 ②torch.cuda.empty_cache() でキャッシュ解放、 ③torch.utils.checkpoint で勾配チェックポイント、 ④Mixed Precision(autocast)で VRAM 半減、 ⑤Multi-GPU で DistributedDataParallel、 ⑥どうしてもなら accelerate や DeepSpeed Stage-3 で CPU offload。encoding='cp932' が基本。 pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])、 失敗したら encoding='utf-8-sig' も試す。 skiprows=[1] は 2 行目の日本語見出し行をスキップして英語列名(A1101 等)を使う慣例。torch.cuda.synchronize() なしで時間計測している(GPU は非同期実行)、 ③CPU 上のテンソルを混在させている(.device を確認)、 ④num_workers=0 でデータローダが律速、 などが原因。torch.isnan(x).any() で検出。 BF16 への切替、 学習率の見直し、 SSDSE の NaN を fillna(0) や中央値で埋めるなどで対処。torch.manual_seed(42); torch.cuda.manual_seed_all(42)、 ②torch.backends.cudnn.deterministic = True; benchmark = False、 ③ numpy.random.seed(42) も合わせて固定。 完全に同じ結果を求めるなら torch.use_deterministic_algorithms(True)(一部演算が遅くなる代わり)。nvidia-smi -q -d TEMPERATURE で温度監視、 ケースのエアフロー改善、 ラップトップなら冷却台、 訓練中の パワーリミット(nvidia-smi -pl 300)で発熱抑制も有効。AI の学習・推論を担う計算デバイスは、 単に「速い CPU」ではなく 並列度・メモリ帯域・数値精度の三軸で設計が分かれる。 本節では CPU / GPU / TPU / NPU / 量子コンピュータを SSDSE-B-2026(47 都道府県 × 数十カラム)の集計を題材に比較し、 「なぜ小規模データは CPU、 大規模深層学習は GPU/TPU、 推論はエッジ NPU が選ばれるのか」を式と数値で読み解く。
実効スループット $T_\text{eff}$ は、 ピーク性能 $T_\text{peak}$(FLOPS)とメモリ帯域 $B$(GB/s)、 演算強度 $I = \text{FLOPs}/\text{Byte}$ から
$$T_\text{eff} = \min(T_\text{peak},\ B \cdot I)$$
で決まる(Roofline モデル)。 演算強度 $I$ が低い処理(行列和、 平均など SSDSE 集計)は メモリ帯域律速、 高い処理(行列積、 畳み込み)は 計算律速。 GPU は $B$ が CPU の 10-30 倍あるため、 $I$ が大きい深層学習で圧倒的に有利になる。
| デバイス | ピーク FLOPS | メモリ帯域 | 得意領域 | SSDSE 集計の妥当性 |
|---|---|---|---|---|
| CPU (汎用) | ~1 TFLOPS | 50-100 GB/s | 分岐多い前処理、 集計、 小規模 ML | ◎ 最適 |
| GPU (A100/H100) | 300-2000 TFLOPS | 1500-3000 GB/s | 深層学習の学習、 大規模行列演算 | × 転送コスト過大 |
| TPU (v4/v5) | 200-500 TFLOPS | 1200 GB/s | Transformer 系の学習・推論 | × 規模不適合 |
| NPU (エッジ) | 5-50 TOPS | 20-50 GB/s | スマホ・IoT の推論、 INT8 量子化 | △ 集計には不向き |
| 量子コンピュータ | 数十-数百 qubits | N/A | 組合せ最適化、 量子化学 | × 集計用途は無し |
47 都道府県 × 50 カラム × 8 byte ≒ 19 KB。 これは CPU L1 キャッシュ(32-64 KB)に余裕で収まる。 GPU に転送する場合、 PCIe Gen4 ×16 で実効 25 GB/s 程度なので、 転送時間は $19\text{ KB} / 25\text{ GB/s} ≒ 0.76\ \mu s$。 一方で、 CPU で df.mean() を実行する時間は数 μs。 つまり 計算より転送の方が高コストになり、 GPU を使う意味が消える。
一方、 同じ SSDSE データを使って 1,000 万件の合成データを擬似生成し、 ResNet-50 で都道府県分類器を学習するような場合、 計算量は $\sim 10^{16}$ FLOPs に達し、 GPU の 300 TFLOPS でも数十秒、 CPU では数日かかる。 ここで初めて GPU が必要になる。
df.mean() を 1000 回繰り返した実行時間分布(CPU)。 大半は 3-5 μs に集中し、 たまに OS 割り込みで 50 μs 超のロングテールが出る。 リアルタイム推論ではこの裾の制御が課題。
df.corr() を実行するなら CPU と GPU、 どちらが速いか? 理由とともに答えよ。AI 計算デバイスは「汎用 CPU」「並列加速 GPU」「専用 ASIC(TPU/NPU)」「再構成可能 FPGA」「次世代 量子・ニューロモルフィック」の 5 系統に大別される。 用途・電力制約・モデル規模・開発生産性のトレードオフで選定する。 ここでは SSDSE-B-2026(47 都道府県 × 約 100 列、 ~19 KB)のような 小規模統計処理から、 ResNet-50 / GPT 系の 大規模深層学習までの幅で比較する。
CPU は 制御 + 汎用 ALU を多数のコアに配し、 分岐の多い逐次処理に強い。 GPU は SIMT(Single Instruction Multiple Threads)で数千 ALU を同期駆動し、 行列積に最適化される。 TPU/NPU は シストリックアレイで MAC(積和)を空間並列実行する。 FPGA は LUT/DSP/BRAM を回路として再配線でき、 推論レイテンシを μs オーダーまで詰められる。 量子・ニューロモルフィックは確率・スパースイベントに特化した次世代カテゴリで、 まだ研究段階だが特定問題で従来比 1000 倍以上の効率が報告されている。
| 系統 | 並列粒度 | 代表帯域 | ピーク FLOPS | 電力 | 得意領域 |
|---|---|---|---|---|---|
| CPU (Xeon) | 数十スレッド | 100-300 GB/s | 1-3 TFLOPS | 150-300 W | 分岐多・小データ・前処理 |
| GPU (H100) | 数万 SIMT | 3 TB/s (HBM3) | 60 PFLOPS (FP8) | 700 W | 深層学習・LLM 学習推論 |
| TPU v5p | シストリック 256×256 | 2.7 TB/s | 459 TFLOPS (BF16) | ~400 W | Transformer 学習 |
| NPU (Neural Engine) | 16-32 MAC アレイ | 数十 GB/s | 15-35 TOPS (INT8) | 1-3 W | オンデバイス推論 |
| FPGA (Versal) | LUT/DSP 自由配線 | ~1 TB/s | 10-100 TOPS | 50-200 W | 超低遅延推論・通信 |
| 量子 (Quantum) | 量子ビット重ね合わせ | N/A | 問題依存 | 数十 kW(冷却込) | 最適化・素材探索 |
SSDSE-B-2026(47 行 × 約 100 列)は約 19 KB のため、 そもそも L1 キャッシュ(32-128 KB)に完全に収まる。 これは「計算デバイスを切り替える意味がほとんど無い」極端なケースであり、 結果として CPU が最速になる典型例である。 デバイス転送オーバーヘッド(PCIe Gen4: ~30 GB/s、 1 KB あたり ~30 ns)を加味すると以下のような相対実行時間が見える。
💬 教訓: 小データでは CPU が最速。 GPU/TPU の出番は ResNet-50(21 M パラメータ、 演算強度 ~100 FLOPs/byte)以上の規模から。 計算デバイスの選定は「データ規模 × 演算強度 × 電力制約 × 開発時間」の 4 軸で考える。
SSDSE-B-2026(47 都道府県 × 複数年度データ、 564 行 × 112 列)を使った典型タスクで、 デバイス選択の判断基準を具体的に追体験します。
SSDSE-B-2026 を読み込み、 数値列 80 列を Z-score 標準化。 演算量は $1900 \times 80 \times 5 \approx 7.6 \times 10^5$ Flops(平均・標準偏差・引き算・割り算)。 CPU 1 コア(1 GHz・2 ops/cycle = 2 GFLOPS 換算)でも 0.4 ミリ秒 程度。 GPU 投入の意味はゼロ。
各市町村ベクトル(80 次元)どうしの内積を全ペア計算する場合、 演算量は $1900^2 \times 80 \approx 2.9 \times 10^8$ Flops。 これは CPU で 0.1〜0.5 秒、 GPU(A100、 19.5 TFLOPS の 30% 実効)で 50 マイクロ秒。 ただし行列を VRAM に転送する PCIe 帯域(16 GB/s)で約 0.5 ミリ秒かかるため、 1 回だけならむしろ CPU が速い。 同じ行列を何度も再利用するケースで GPU が逆転。
1,900 市町村 × 平均 500 トークン × BERT-base(110M params, 12 層)の埋め込みを取る。 1 文書あたり約 $5 \times 10^{10}$ Flops、 全体で 9.5 × 10¹³ Flops。 CPU(200 GFLOPS)なら 約 8 分、 RTX 4090(83 TFLOPS、 実効 40%)なら 約 3 秒、 A100(312 TFLOPS)なら 0.8 秒。 ここで 100〜600 倍の差が出る。
SSDSE-B-2026 の処理全体のうち、 並列化できるのが 90%、 シリアル部分(CSV パース・前処理)が 10% とすると、 $\alpha=0.9$。 GPU 4 枚で $S = 1/(0.1 + 0.9/4) = 3.08$ 倍、 8 枚で $S = 4.71$ 倍、 16 枚で $S = 6.4$ 倍。 枚数を 4 倍にしても性能は 2 倍程度しか上がらないことが分かる。 これが「GPU 集約より、 まずは前処理のシリアル部分を CPU で高速化せよ」という鉄則の根拠。
| インスタンス | GPU | VRAM | 概算料金 | SSDSE × BERT 処理時間 |
|---|---|---|---|---|
| p3.2xlarge | V100 ×1 | 16 GB | 約 $3.06/h | 約 8 秒($0.007) |
| g5.xlarge | A10G ×1 | 24 GB | 約 $1.01/h | 約 5 秒($0.0014) |
| p4d.24xlarge | A100 ×8 | 320 GB | 約 $32.77/h | 約 0.4 秒($0.0036) |
| CPU (c6i.large) | なし | — | 約 $0.085/h | 約 8 分($0.011) |
※ 単発処理ならむしろ CPU の方が安いケースもあるが、 イテレーティブに実験する研究では GPU が圧倒的に得。 起動時間と転送オーバーヘッドを忘れずに。
合成データで GPU/CPU の FLOPS と推論時間 (1 回 100 GFLOPS 必要) を比較する。
| デバイス | FLOPS [TFLOPS] | 1 推論 [ms] |
|---|---|---|
| CPU | 0.5 | 200.0 |
| GPU(中) | 10 | 10.0 |
| GPU(上) | 50 | 2.0 |
| TPU | 100 | 1.0 |
1 2 3 4 5 6 | import numpy as np flops_t = np.array([0.5, 10, 50, 100]) req_g = 100 time_ms = req_g / (flops_t * 1000) * 1000 print(f"推論時間 [ms]: {time_ms}") print(f"TPU/CPU 比: {time_ms[0]/time_ms[3]}") |
💬 手計算 (Step 2) 200 倍と Python 出力が完全一致。
SSDSE-B-2026 などの実データを使った最小コード(8行):
1 2 3 4 5 6 7 8 | import torch print('CUDA available:', torch.cuda.is_available()) if torch.cuda.is_available(): print('Device:', torch.cuda.get_device_name(0)) print('VRAM (GB):', torch.cuda.get_device_properties(0).total_memory / 1e9) x = torch.randn(1024, 1024).cuda() y = x @ x.T # GPU上で行列積 print('結果:', y.shape, y.device) |
※ data/raw/SSDSE-B-2026.csv は e-Stat SSDSE から取得した実データ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # SSDSE-B-2026 を読み込み、 数値列を Z スコア化 → torch tensor → GPU へ import pandas as pd import torch import time df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) num_df = df.select_dtypes('number').fillna(0) X_cpu = torch.tensor(((num_df - num_df.mean()) / num_df.std()).values, dtype=torch.float32) print('CPU tensor:', X_cpu.shape, X_cpu.device) if torch.cuda.is_available(): t0 = time.time() X_gpu = X_cpu.cuda() # CPU → GPU 転送 sim = X_gpu @ X_gpu.T # 1900×1900 のコサイン類似度 torch.cuda.synchronize() # 計測のため同期 print(f'GPU: ', sim.shape, f'{time.time()-t0:.4f} sec') else: t0 = time.time() sim = X_cpu @ X_cpu.T print(f'CPU only: ', sim.shape, f'{time.time()-t0:.4f} sec') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # バッチサイズを変えながら GPU 使用率を測る(理想的なバッチを発見) import torch, time device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') for bs in [32, 128, 512, 2048, 8192]: x = torch.randn(bs, 512, device=device) w = torch.randn(512, 512, device=device) if device.type == 'cuda': torch.cuda.synchronize() t0 = time.time() for _ in range(100): y = x @ w if device.type == 'cuda': torch.cuda.synchronize() dt = time.time() - t0 flops = 2 * bs * 512 * 512 * 100 print(f'BS={bs}: {dt*1000:.1f} ms, {flops/dt/1e9:.0f} GFLOPS') # バッチを増やすと GFLOPS が上昇 → 飽和したら GPU の理論上限 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # SSDSE-B-2026 から自治体クラスタリングモデルを訓練するとき、 FP16 を使う import torch from torch.cuda.amp import autocast, GradScaler model = torch.nn.Linear(80, 16).cuda() optim = torch.optim.Adam(model.parameters(), lr=1e-3) scaler = GradScaler() X = torch.randn(1900, 80, device='cuda') y = torch.randn(1900, 16, device='cuda') for epoch in range(10): optim.zero_grad() with autocast(dtype=torch.float16): # FP16 で前向き pred = model(X) loss = ((pred - y)**2).mean() scaler.scale(loss).backward() # 勾配を FP32 にスケール scaler.step(optim); scaler.update() print(f'epoch={epoch}, loss={loss.item():.4f}') |
torch.utils.checkpoint)で活性化を保存しない、 FP16/BF16 に切り替えて VRAM 半減、 など対処。 推論時は torch.no_grad() や model.eval() でメモリ削減できる。x.to('cuda') を呼ぶと PCIe(16〜64 GB/s)が律速。 DataLoader の pin_memory=True, num_workers≥4 で非同期転送に。 SSDSE-B-2026 のように全部 VRAM に乗る場合は最初に 1 回だけ転送して使い回せばよい。describe() や pivot_table() を GPU で動かしても、 起動・転送のオーバーヘッドで CPU より遅くなる。 演算量 $<10^9$ Flops 程度ならむしろ CPU 推奨。 GPU は「同じ計算を何百万回繰り返す」とき初めて優位。📦 AI 計算デバイス(このページ) ├─ 系統別 │ ├─ GPU ─── NVIDIA (A100/H100), AMD (MI300), Apple (M シリーズ GPU) │ ├─ TPU ─── Google (v4/v5, Trillium) │ ├─ NPU ─── Apple Neural Engine, Qualcomm Hexagon │ ├─ FPGA ── Xilinx Versal, Intel Stratix │ └─ ASIC ── Cerebras, Groq, Tesla Dojo, Sambanova │ ├─ 性能指標 │ ├─ FLOPS(演算性能) │ ├─ Memory Bandwidth(メモリ帯域) │ ├─ VRAM 容量 │ ├─ TDP(消費電力) │ └─ Arithmetic Intensity(計算/転送比) │ ├─ 数値精度 │ ├─ FP64 / FP32 / FP16 / BF16 / FP8 / INT8 / INT4 │ ├─ 並列化方式 │ ├─ Data Parallel / Model Parallel │ ├─ Pipeline Parallel / Tensor Parallel │ └─ ZeRO (Zero Redundancy Optimizer) │ ├─ ソフトウェアスタック │ ├─ CUDA / ROCm / Metal / SYCL │ ├─ cuDNN / cuBLAS / cuFFT │ └─ PyTorch / TensorFlow / JAX / MLX │ └─ 運用形態 ├─ オンプレ(自前 GPU サーバ) ├─ パブリッククラウド(AWS / GCP / Azure) ├─ 学術 HPC(産総研 ABCI, 富岳) └─ エッジ(スマホ・組込)
この階層を頭に入れておくと、 論文の Experiments 節を読むときに「何を、 どの粒度で報告しているか」が瞬時に判別できます。
GPU は元々 1990 年代後半に「3D ゲームの頂点・ピクセル計算」用に作られました。 1 画面 200 万ピクセル × 1 秒 60 フレーム = 1 億 2,000 万回の同種計算 — これは AI の行列積と本質的に同じ「同じ計算を大量の数値に並行適用」する構造です。 2007 年に NVIDIA が CUDA(C 言語で GPU を呼べる API)を公開し、 研究者が GPU を AI に転用できるようになります。 決定打は 2012 年の AlexNet。 NVIDIA GTX 580 ×2 枚で ImageNet 優勝を成し遂げ、 「GPU + 深層学習」のパラダイムが確立しました。
Google は 2015 年頃から自社データセンターの電力コストを削減するため、 シストリックアレイ(systolic array)と呼ばれる行列積専用回路を開発し、 これを TPU と命名しました。 GPU が「数千の汎用コア」なのに対し、 TPU は「128×128 の MXU(Matrix Multiply Unit)」で行列積だけを高速化する設計。 そのため ピーク FLOPS だけ見ると GPU を上回るものの、 分岐や条件処理は苦手です。 SSDSE-B-2026 のような小さな表データには明らかにオーバーキル。
現代 GPU は 4 階層のメモリを持ちます:①レジスタ(数 KB、 1 サイクル)、 ②共有メモリ/L1 キャッシュ(〜100 KB、 数サイクル)、 ③L2 キャッシュ(〜50 MB、 数十サイクル)、 ④HBM(VRAM、 24〜80 GB、 数百サイクル)。 SSDSE-B-2026 全体は 0.3 MB なので L2 キャッシュに丸ごと収まる — つまり「HBM 帯域」は問題にならず、 演算ユニット側がボトルネックになります。 これに対し ImageNet 並みのデータセット(150 GB)は HBM にすら収まらず、 SSD ⇔ HBM の転送がボトルネックになる。
$\text{Roofline}$ は横軸 Arithmetic Intensity(Flops/Byte)、 縦軸 Performance(Flops/sec)の片対数グラフで、 ハードウェアの「演算律速ライン」と「メモリ律速ライン」を屋根のように描きます。 自分の計算カーネルを点としてプロットすると、 どこに頭打ちがあるか 即判定できる。 SSDSE-B-2026 の集計処理は AI ≈ 0.25、 ResNet-50 推論は AI ≈ 47、 BERT 訓練は AI ≈ 250 程度。 つまり用途ごとに「GPU の何を伸ばせば速くなるか」が変わります。
使用時間が 月 50 時間未満 ならクラウド(AWS/GCP/Azure)が経済的。 200 時間以上ならオンプレ(A100 40GB は約 100 万円、 RTX 4090 は 30 万円)の方が 1〜2 年で元が取れる。 研究室や大学は「学内 GPU クラスタ」と「クラウドのスポットインスタンス」をハイブリッドで使うのが定石。 SSDSE-B-2026 程度の実験なら、 そもそも自分のノート PC(CPU のみ)で十分です。
2024 年から経産省・NEDO が国内 AI 計算基盤の整備を進めており、 産総研 ABCI 3.0(H100 ×6,000 枚規模)、 さくらインターネットの GPU クラウド、 ソフトバンクの NVIDIA H200 サーバなど、 国内で大規模学習が可能な環境が急増中。 公的統計(e-Stat、 SSDSE)と組み合わせた 日本特化 LLM(PLaMo, Karakuri, Sarashina など)の学習にも、 これらの基盤が活用されています。
「AI 計算デバイス」は 計算量とデータ量で選び方が変わる という特徴があります。 用途別に整理しました。
PLaMo(Preferred Networks)、 Sarashina(SB Intuitions)、 Karakuri-LM など国産 LLM は H100 数百枚規模の GPU クラスタで学習。 SSDSE-B-2026 のような統計データに 自治体名・地域名・産業統計用語 を組み込んで日本語特化を実現する研究も活発化。 環境負荷を考慮し、 BF16 や FP8 を併用する省エネ訓練が標準化中。
Stable Diffusion 系(A100 で訓練、 RTX 4090 で推論可)、 Flux、 SDXL など。 自治体の 観光ポスター生成、 地域広報イラスト に活用する事例が増加。 SSDSE-B-2026 の地域指標と組み合わせて「地域特性に応じた画像生成」を試す教材的な活用も。
iPhone の Apple Neural Engine、 Android の Qualcomm Hexagon。 観光案内アプリ、 翻訳アプリ、 文字認識アプリで「クラウドに送らないプライバシー保護推論」が広がる。 SSDSE-B-2026 を組み込んだ「地元統計を回答する自治体 LLM アプリ」もエッジ NPU で十分動作。
国土地理院の衛星画像 + SSDSE-B-2026 の市区町村統計を組み合わせ、 土地利用分類、 災害リスクマッピング、 過疎化予測 などに利用。 1 タイル 256×256 pixel × 数千万枚を扱うため、 GPU クラスタが事実上必須。
SSDSE-A/B/C/E をはじめとする公的統計を、 自治体職員が 因果推論モデル・ベイズ階層モデルで分析する場面。 これらは「数値計算は重いが GPU の出番は限定的」 — NumPyro/PyMC で MCMC を回す程度なら CPU でも数分〜数時間。 ただし MCMC を JAX + GPU で書けば 10〜100 倍速。
「統計・データ解析コンペ」「SIGNATE」「Kaggle」では、 SSDSE-B-2026 や類似データセットで 無料 Google Colab T4 GPU を活用するのが標準。 小規模 NN なら 12 時間以内に複数モデルを試行できる。
工場の振動センサー時系列、 ドローン点検画像、 異常検知 — エッジ GPU(NVIDIA Jetson Orin、 Google Coral)でオンサイト推論。 SSDSE の産業統計と組み合わせて「地域別の予知保全リスク評価」モデルを作るのも面白い応用。
論文の Experiments / Computing Infrastructure 節で、 AI 計算デバイスについて読者・査読者が知りたい情報を漏れなく書くためのチェックリスト。
requirements.txt や Docker イメージもgithub.com/example/repo」
この順番でやれば、 単に暗記するのではなく、 使える知識として身につきます。 1用語あたり 30〜60分が目安です。
Q1. SSDSE-B-2026 を分析するのに GPU は本当に必要ですか?
結論:ほぼ不要。 SSDSE-B-2026 は 564 行 × 112 列で約 0.5 MB と小さく、 標準化・回帰・PCA・クラスタリング・基本的な決定木モデルなら CPU で 1 秒以内に完了します。 GPU が役立つのは「SSDSE × 衛星画像(CNN)」「SSDSE × 自治体テキスト(BERT)」のように、 外部の非構造化データと組み合わせた深層学習 を行う場合に限ります。 学習段階では Colab の無料 T4 で十分です。
Q2. NVIDIA と AMD、 どちらの GPU を選ぶべきですか?
2026 年現在、 研究・開発では NVIDIA + CUDA が事実上の標準です。 PyTorch・TensorFlow・JAX のすべてが NVIDIA を第一級でサポートしています。 AMD(ROCm)は急速に追い上げており、 推論用途では cost-effective ですが、 訓練ワークロードでは依然 NVIDIA が安全。 Apple Silicon は MLX フレームワーク経由で軽量モデルなら有力な選択肢です。
Q3. クラウド GPU(AWS, GCP, Azure)の使い分けは?
主観的目安として:①AWS(p3/g5/p4d, p5)は 選択肢が広く長期的に安定、 ②GCP(TPU v4/v5)は JAX/TensorFlow ユーザーに最適、 巨大モデル向き、 ③Azure(NDv5)は OpenAI 系インフラとの親和性。 国内なら さくらインターネットの GPU クラウド、 学術なら 産総研 ABCI が無料〜安価で利用可。
Q4. FP16 と BF16、 どちらを使えばよい?
SSDSE-B-2026 のように 値域が広い数値(人口 1〜10⁷)を扱うなら BF16 推奨。 FP16 は 65,504 を超えると即オーバーフローしますが、 BF16 は FP32 と同じ指数部範囲(10⁻³⁸ 〜 10³⁸)を持ちます。 ただし FP16 の方が古い GPU(T4, V100)で安定して動くので、 環境次第。 H100 以降の世代では FP8 が主流化中です。
Q5. GPU が壊れるサインは?
ECC エラーが nvidia-smi で見えはじめたら寿命のサイン。 数値が NaN になる、 出力がランダムに崩れる、 訓練 loss が突然発散する、 などの症状が出たら GPU 故障を疑います。 クラウドなら自動で別マシンに移行されますが、 オンプレでは保証期間内なら交換、 期間切れなら買い替え。 SSDSE-B-2026 程度の処理であれば、 GPU 故障の影響を受けることはまずありません。
Q6. PyTorch の .cuda() と .to(device) の違いは?
機能は同じですが、 .to(device) の方が 柔軟(CPU/GPU/MPS を切り替え可能)です。 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') と書いておけば、 GPU が無い環境でも同じコードが動きます。 SSDSE-B-2026 のチュートリアル目的なら必ずこの書き方を推奨します。
Q7. もっと深く学びたい場合の次のステップは?
① CUDA C プログラミング、 ② Triton(Python で GPU カーネル)、 ③ CUTLASS(行列演算特化)、 ④ Roofline モデル分析、 ⑤ NVIDIA Nsight Compute でプロファイリング、 ⑥ DeepSpeed/FSDP で大規模並列学習 — の順で進むと、 「ハードウェアを意識した最適化」ができるエンジニアになれます。 上の「関連用語」チップから派生概念を辿るのも効率的です。
AI計算デバイス は MLOps 分野の中で次のような位置にあります。
📚 MLOps(広い分野)
┗ 関連する基礎概念群(数学・統計・前処理など)
┗ AI計算デバイス(このページ)
┗ 派生・発展(より高度な手法、 応用例)
この位置を把握すると、 「何の前提が必要で、 次に何を学ぶべきか」 が見えてきます。 学習・分析の道筋を立てるときの羅針盤として使ってください。
「計算装置 (CPU/GPU/TPU)」は機械学習の実効スループットを決める基盤で、 上流のメモリ階層理解と下流のフレームワーク (CUDA/MPS) 連携を欠くと、 同じモデルでも 10 倍以上の速度差が出る。
上流でデータ・モデルサイズに対するメモリ要件を整理し、 並列の CPU・GPU・TPU・NPU をベンチマーク比較し、 下流で CUDA/Metal/XLA への接続を整えれば、 SSDSE 規模から LLM ファインチューニングまで適切な計算装置を選択できる。
「計算デバイス(CPU / GPU / TPU)」を実際に使うとき、 何をどう選ぶかを順に判断する。 上から順に答えていくと、 使うべき手法と評価の仕方が決まる。
このページのコードを含め、 SSDSE の 47 都道府県データは CPU で一瞬で終わる。 「GPU があれば速い」は、 計算の中身がそれに向いているときだけ成り立つ。
本ページの既存解説(Roofline・TCO・実装パターン・落とし穴集)に対して、 ここでは「計算デバイスとは結局なにを速くする道具なのか」を 直感 → 落とし穴 → 発展 の三段で改めて言語化し、 用語集内の関連ページへの導線を追記する。 前後の節と重複する部分はあえて別の切り口から述べ、 理解の網目を細かくすることを狙う。 SSDSE-B-2026 は実測で 564 行 × 112 列・約 360 KB(359,821 バイト)、 内訳は 47 都道府県 × 12 年度(2012–2023)である(実データを筆者環境で確認)。 デバイスを説明するための性能値は現実の製品仕様に基づく概略だが、 本節の「所要ステップ」等のミクロな数値は 架空の説明例として扱う。
計算デバイスとは、 プログラムが指示する 四則演算・論理演算・データ移動を物理的に実行する装置の総称である。 抽象的には「命令列 × データ列 → 結果」という写像を電力と時間を消費して実現する箱にすぎない。 違いを生むのは その箱を「1 個の仕事を速く」設計するか「多数の仕事を同時に」設計するかという一点に尽きる。
read_csv → fillna → groupby → 標準化 のような前処理はまさにこの体質で、 CPU が最も素直に速い。機械学習の計算基盤という視点で見ると、 現代の学習・推論の 9 割以上の時間は「巨大な行列積の繰り返し」に費やされる。 だからこそ 並列性こそが ML 高速化の本質的な鍵であり、 デバイス選定は「クロックの速さ」より「同じ演算をどれだけ一斉に並べられるか(=並列度 × メモリ帯域)」で決まる。 逆に言えば、 並列化できない仕事(SSDSE の逐次前処理・分岐だらけのロジック)はどんな高価な GPU を積んでも速くならない——これが直感の核心である。
計算デバイスの失敗のほとんどは「カタログ性能」と「実効性能」の乖離から来る。 既存の落とし穴集(VRAM 不足・転送ボトルネック・コスト爆発など)を踏まえ、 ここでは 意思決定を誤らせる構造として 7 点に整理する。
💡 判定の順番:「GPU を買うか」ではなく「①律速要因は計算か転送か → ②並列化可能割合は高いか → ③精度と VRAM は足りるか → ④コスト/電力に見合うか」の順で潰す。 SSDSE 規模ならこの 4 問のうち①で早々に「CPU で十分」と結論が出る。
計算デバイスは「汎用 ↔ 特化」「クラウド ↔ エッジ」の 2 軸で広がっている。 発展的トピックを俯瞰する。
計算デバイスの理解を広げる、 本用語集内の実在ページ(相対リンク):
※ GPU・TPU・FPGA・SIMD・量子計算・ムーアの法則には現時点で個別ページが無いため、 本文中では用語のみで解説している。