テクニカルガイド

GPU メモリ管理と断片化

AI フレームワークが GPU 上の限られたメモリをどのように割り当て、再利用、再利用するのか、また、技術的には十分なメモリが残っている場合でも、残ったギャップ (断片化) によってメモリ不足エラーが発生する理由について説明します。

2分の読書最終更新日

概要

Understanding it is key to fitting big models and avoiding mysterious crashes.

ディープダイブ

GPU メモリは固定で貴重です。カードには合計 24、80、または 192 GB があり、モデルの重み、アクティベーション、勾配、オプティマイザの状態、および一時バッファによって共有されます。すべての操作でメモリを割り当てるためにドライバーを呼び出すと時間がかかるため、PyTorch のようなフレームワークは、大きなブロックを前に取得してサブピースを渡し、解放されたピースを再利用のためにプールに保持するキャッシュ アロケーターを使用します。問題は断片化です。さまざまなサイズのテンソルが割り当てられ、解放されると、空き領域が分散したチャンクに分割されます。合計 5 GB の空き領域があるにもかかわらず、単一のギャップが十分に大きくないため、連続する 2 GB テンソルの割り当てに失敗する可能性があります。一見利用可能なヘッドルームがあるように見えても、トレーニングがメモリ不足エラーでクラッシュする可能性があるのはこのためです。

技術的な洞察

PyTorch の CUDA キャッシュ アロケータは、メモリをブロックのストリームに分割し、要求されたサイズに一致する解放されたブロックを再利用することで、コストのかかる cudaMalloc/cudaFree 呼び出しを回避します。断片化は、分割されたブロックを再結合できない場合に発生します。 torch.cuda.empty_cache、PYTORCH_CUDA_ALLOC_CONF Expandable_segments オプション、メモリ スナップショットなどのツールが役に立ちます。新しいアプローチは、仮想メモリのアイデアを借用し、不連続な物理ページを連続した仮想範囲にマッピングすることで、断片化にもかかわらず大きなリクエストが成功するようにします。

戦略的影響

費用と予算

アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。

より明確な判決

技術教育は、チームが最新のスタックだけでなく、適切なスタックを選択するのに役立ちます。

品質管理

より良いエンジニアリングの選択により、本番環境での信頼性に関するインシデントが減少します。

GPU メモリ管理と断片化の将来

メモリ管理は、オペレーティング システムの影響を受けて、よりスマートになり、よりページ化されています。仮想メモリ スタイルのアロケーターやページ アテンション (推論中の KV キャッシュの管理に使用) などの技術により、無駄と断片化が大幅に削減されます。フレームワークには、拡張可能なデフラグアロケーター、組み込みプロファイラーによる可視性の向上、オフロードと再計算との緊密な結合がデフォルトで設定されるため、システムは GPU、CPU、およびディスク メモリを自動的にジャグリングして使用率を高く保ち、クラッシュはほとんど発生しません。

現実世界の実装

予約されたメモリに空き領域があるにもかかわらず、トレーニング実行が「CUDA メモリ不足」でクラッシュする問題は、PYTORCH_CUDA_ALLOC_CONF を設定して拡張可能なセグメントを有効にすることで修正されました。

torch.cuda.memory_summary またはメモリ スナップショットを使用して、どのテンソルと断片化が GPU の 80 GB を消費しているかを診断します。

vLLM の PagedAttend は、固定サイズ ページ内のアテンション KV キャッシュを管理して、メモリを無駄にせずに多数の同時チャット リクエストに対応します。

バッチ サイズを下げるか、勾配チェックポイントを有効にしてアクティベーション メモリを削減し、断片化によるメモリ不足エラーを回避します。

リスクとガードレール

1 つのベンチマークを最適化すると、より広範なシステムの弱点が隠れる可能性があります。

インフラストラクチャとメンテナンスのコストは過小評価されがちです。

システムが複雑になるにつれて、セキュリティと可観測性のギャップが拡大する可能性があります。

実装ロードマップ

1

実装前にレイテンシ、品質、コストの目標を定義します。

2

現実的な負荷とデータ条件でのベンチマーク。

3

エラー、ドリフト、ユーザーへの影響を計測器で監視します。

4

スケーリングの前に、ロールバックとインシデント対応のパスを準備します。

探検を続けましょう

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the GPU Memory Management and Fragmentation quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

クイズを開始する

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

次のガイド

GPU スケジューリングとクラスター オーケストレーション

よくある質問

What is GPU Memory Management and Fragmentation?

AI フレームワークが GPU 上の限られたメモリをどのように割り当て、再利用、再利用するのか、また、技術的には十分なメモリが残っている場合でも、残ったギャップ (断片化) によってメモリ不足エラーが発生する理由について説明します。これを理解することが、大きなモデルをフィッティングし、不可解なクラッシュを回避する鍵となります。

GPU メモリの断片化とは何ですか?

断片化とは、空きメモリの合計が十分であることを意味しますが、メモリが断片に分割されるため、大きなテンソルに十分な大きさの単一のギャップは存在しません。

PyTorch のようなフレームワークがキャッシュ メモリ アロケータを使用するのはなぜですか?

すべての操作に対して cudaMalloc/cudaFree を呼び出すのは遅いため、キャッシュ アロケータは大きなブロックを取得し、プールから解放されたブロックを再利用します。

5 GB の空きがあることがわかりますが、2 GB のテンソルを割り当てることができません。考えられる原因は何ですか?

この典型的な断片化の症状は、空きメモリは存在するが、リクエストに十分な大きさの連続したチャンクが存在しない場合に発生します。

メモリ セグメントを柔軟に拡張できるようにすることで断片化を軽減するのに役立つ PyTorch 設定はどれですか?

PYTORCH_CUDA_ALLOC_CONF を設定して Expandable_segments を有効にすると、アロケーターがセグメントを拡張できるようになり、断片化関連の障害が軽減されます。

vLLM の PagedAttendance は、推論中のメモリの無駄を削減するために何を管理していますか?

PagedAttendance は、KV キャッシュを OS 仮想メモリのような固定サイズのページに保存し、断片化をカットし、多くのリクエストを効率的に処理します。