自分の環境で動いていたAIが動かない、
コンピュータで計算をしていて結果が異なる、そんなことは起こり得ないと思っていませんか?
Reproducibility(再現性)、Determinism(決定論)というキーワードで開発者向け資料を調べると
公式ドキュメントにおいて「再現性が担保されないパターンがある」という説明が見つかります。
いくつかのパターンをご紹介します。
自分の環境で動いていたAIモデルが本番で動かない
環境依存のフレームワークを利用していたり、
別のフォーマットにモデルをエクスポートしていた場合に動かないことがあります。
例えば TensorRTは環境に非常に厳しいです。
自分の環境と、本番環境が大きく異なっていませんか?
実行する環境と同じ環境でエクスポートしましょう。
比較的、環境依存性が低いもの
- PyTorch
- ONNX、CoreML、TFLite、TF.js
あくまで比較的、です。
PytorchはPython環境とPyTorchライブラリ(およびCUDA/cuDNN)に依存するため、
そこを注意すればいいはずではあります。
特にGPUアーキテクチャの違いを、ライブラリが間に入って吸収してくれることが期待できます。
比較的、環境依存性が高いもの
- TensorRT、Edge TPU、IMX500
環境というかGoogle、ソニーなど特定のメーカーのAIハードウェアに依存しているものを挙げていますが、TensorRTは意外に思われるかも知れません。
TensorRTはGPUアーキテクチャ、CUDA、cuDNN、TensorRTバージョン、ドライバーに強く依存しています。ビルド時のGPUアーキテクチャと実行時が異なる場合、動作しないはず。
異なる環境では再ビルド必須と考えた方がよいでしょう。
特定の要件を持つプロジェクトでTensorRTを選択・使わねばならない、ということもあると思います。
可能であれば、ロットすら同じGPUを2枚買ってしまって1枚を予備に持っておくぐらいの方が慌てなくて良いかも知れません。
GPUを変えたら動かなくなった
同じデスクトップで、GPUを変えただけで動かなくなる、そういうケースもあります。
上記の通り環境依存の強いものは注意が必要です。
それ以外の要因として、世代を超えた交換をしていませんか?
同じアーキテクチャのGPUを使うようにしましょう。
上記の通り、異なるアーキテクチャのGPUにおいては例えばTensorRTであればまず動かないはずです。
アーキテクチャを確認
現行のコンシューマー向けのGPUとして4つのアーキテクチャがあると理解すればよいと思います。
- Turingアーキテクチャ(2018年)
- Ampereアーキテクチャ(2020年)
- Ada Lovelaceアーキテクチャ(2022年ごろ)
- Blackwell アーキテクチャ(最新、GeForce RTX 5090などで採用)
さらに同じアーキテクチャで同じダイ(物理的なシリコンチップ)であるにも関わらず、
製造時の品質により異なるGPUとして販売がされています。
ダイ違いが問題になるということは考え辛いですが例を挙げます。
TuringアーキテクチャGPUの例
- ダイ: TU106
- GeForce RTX 2070
- GeForce RTX 2060
- RTX 2070はフルスペックに近いコアを使用、RTX 2060は一部コアを無効化。
- ダイ: TU104
- GeForce RTX 2080
- GeForce RTX 2070 Super
- フルスペックがRTX 2080、一部コアを無効化したものがRTX 2070 Super。
Ada LovelaceアーキテクチャGPUの例
- ダイ: AD102
- GeForce RTX 4090
- GeForce RTX 4080(16GB版)
- AD102ダイの最高性能がRTX 4090、一部コアを無効化したものがRTX 4080。
わざと潰して無効化しているわけではなく、製造後のチェックで「一部コア」に問題があると判定された場合に無効化して販売しているものです。
もちろんメモリー量の違いなど、単にコア数だけで判断出来るものではありませんが、動かないコアがごく一部あるために少しスペックが劣るラインナップとして販売することは、
ユーザーからしても求めやすい金額で最新のGPUが手に入るのでアリですよね。
余談:名は体を表さない?同じGPUなのに異なるダイ
現行でNVIDIAは複数のGPUアーキテクチャ製品をリリースしていますが、メモリーの違い以外に、
同じGPU名で異なるダイ(物理的なシリコンチップ)を搭載したGPUが存在しています。
例えば同じ GeForce GTX 1650でも、4種類のGPUが販売されたこともあります。

GPUや実行環境を変えたら計算結果が変わった
実際のプロジェクトにおいては無視できる誤差だと思うのですが、
「プログラムが同じなら、絶対に、計算結果が変わるはずがない」というのは間違いです。
公式のドキュメントなどからピックアップします。
アーキテクチャが異なるGPUを使ったとき
cuDNN Developer Guideの「Reproducibility」セクションには、
『同一アーキテクチャで同一設定(例えば同一cuDNNバージョン)を使用する場合、ほとんどのルーチンでビット単位の再現性が保証される』と記載されています。
逆に言えば、アーキテクチャが異なると再現性が保証されないケースが公式的にあります。
浮動小数点誤差
これはGPUに限らずコンピューター工学における話題でもありますが、
無限に続くような数字を有限の精度で丸めると誤差が生じます。
特にGPUだと並列計算のために誤差が積み重なりやすいとされています。
この辺はコンピューター工学を学んでいれば授業でやるはずです。
同じアーキテクチャのGPUでも、
クロック速度や並列処理のスレッド数、メモリ容量などにより計算結果に誤差が発生する可能性はあります。
ただし、ほとんどのカジュアルなAI開発では実務的には無視できるレベルだと思われます。
計算が変わった場合に考えられる原因の一つとして挙げております。
実行環境:生産地やロット違いのGPUを使ったとき
製品として作る以上、完全に同一なものはなく差は出ます。
最近(2025年4月)では販売されたばかりのGeForce 5090の動作が不安定であると報じられています。いわゆる「初期ロット」は、こういうことがありがちです。これから改善される可能性もあります。
つまり、製造レベルで不良と言いますか、手元に届くまでに差が出てる場合などです。
不良ではなくGPUの製造所やロット違いなどによって理論上は完全に同一ではなく差がありますが、こちらも実務的には無視できるレベルだと思われます。
余談ですが、GPUレベルとかでなく同じスマホなどで試した場合もまた違う可能性があります。
例えばSamsung Galaxyでは搭載しているプロセッサ自体が異なる場合もあり、同じGalaxyでもAI推論を動かしたら何か結果が違う、ということもあるかも知れません。
NVIDIAやフレームワークのバグ、改修があったとき
GPUをただ差し替えただけでなく、ライブラリなどのバージョンアップもした場合には起こり得るかなと。
自身が作ったプログラムを変えていなくても、
NVIDIAが提供するライブラリ(CUDA、cuDNN)やPyTorch自体にバグがあったり、それぞれのマイナー改修で計算結果が変わる可能性はあります。
これはGPUを変えてなくても計算結果が変わるケースですが。
生のままのPytorchを使ったとき
PyTorchでも、完全な再現性(ビット単位の同一結果)を保証しないケースがあることが公式ドキュメントに明記されています。
https://pytorch.org/docs/stable/notes/randomness.html
再現性を高める方法もありますが、そもそも誤差が大きな問題なのかどうか、プロジェクト次第で対応を検討すべきかと思われます。
AI開発で悩む前に
AI開発をやろうと思ったら、トラブル前にぜひご相談ください。
