そこで、TensorFlowのGPUバージョンをWindows 10マシンにGeForce GTX 980
グラフィックカード。
確かに、グラフィックカードについてはほとんど知りませんが、dxdiagによると、
4060MB
専用メモリ(VRAM)および
8163MB
共有メモリ
合計約12224MB
。
しかし、私が気づいたのは、この「共有」メモリはほとんど役に立たないようだということです。モデルのトレーニングを開始すると、VRAMがいっぱいになり、メモリ要件がこれらを超える場合4GB
、TensorFlowは「リソースを使い果たしました」というエラーメッセージでクラッシュします。
もちろん、バッチサイズを適切に低く選択することで、そのポイントに到達することを防ぐことができますが、これらの「余分な」8GB
のRAM、またはそれでTensorFlowがメモリを専用にする必要がある場合。
共有メモリは、メインシステムの領域ですRAMグラフィックス用に予約されています。
https://en.wikipedia.org/wiki/Shared_graphics_memory
https://www.makeuseof.com/tag/can-shared-graphics-finally-compete-with-a-dedicated-graphics-card/
https://youtube.com/watch?v=E5WyJY1zwcQ
このタイプのメモリは、Intel HDシリーズなどの統合グラフィックスが通常使用するものです。
これはNVIDIA GPUにはありません。CUDAは使用できません。 Tensorflowは、CUDAが使用できないためGPUで実行しているとき、およびグラフィックス用に予約されているためCPUで実行しているときは使用できません。
CUDAが何とか使用できたとしても。システムRAM帯域幅はGPUメモリ帯域幅よりも約10倍少ないため、andどういうわけか、低速(および高遅延)PCIEバスを介してGPUとの間でデータをやり取りします。
参考のための帯域幅の数値:GeForce GTX 980:デスクトップマザーボード上の224 GB/s DDR4:約25GB/s PCIe 16x:16GB/s
これは待ち時間を考慮していません。実際には、GPUメモリに収まらないほど大きいデータでGPUコンピューティングタスクを実行し、アクセスされるたびにPCIe経由で転送する必要があるため、ほとんどのタイプのコンピューティングではCPUで同じ計算を実行する方がはるかに高速です。
マシンにNVIDIAカードがあるときに、なぜこの種のメモリが割り当てられているのを見るのですか?良い質問。いくつかの可能性を考えることができます。
(a)NVIDIAとIntelの両方のグラフィックスドライバーがアクティブになっている(たとえば、両方で異なるディスプレイを実行している場合)。 Intelドライバーをアンインストールするか、BIOSでIntel HDグラフィックを無効にすると、共有メモリが消えます。
(b)NVIDIAはそれを使用しています。これは、たとえば、追加のテクスチャメモリなどです。実際のメモリではなく、GPUメモリに対応するメモリマップされた領域だけにすることもできます。これを制御する設定については、NVIDIAドライバーの詳細設定をご覧ください。
いずれにせよ、いいえ、Tensorflowが使用できるものは何もありません。
CUDAはRAMも使用できます。 CUDAでは、VRAMとRAMの間の共有メモリは統合メモリと呼ばれます。ただし、TensorFlowはパフォーマンス上の理由により許可しません。