# アクティベーションオフロード ## 定義 アクティベーションオフロード(activation offloading, CPU offloading)は、逆伝播で必要になる中間活性化テンソルを GPU メモリではなく CPU メモリへ一時的に転送し、必要なタイミングで GPU へ再ロード(オンロード)することで GPU メモリ消費を削減する手法である。[[選択的活性化再計算]](activation recomputation)が「破棄して再計算する」のに対し、オフロードは「計算せず退避する」というアプローチを取り、GPU 計算そのものを伴わない点が特徴である。 ## 横断的知見 - **粒度ミスマッチが性能劣化の根本原因**([[@2026__ICS__SPPO - Making Million-Token LLM Training Practical on Modest GPU Clusters]]): 既存のオフロード手法(TransformerEngine 系)は入力系列全体または層全体を単位として GPU-CPU 転送を行う。系列長が線形に増大すると転送時間も線形に増大し、CPU-GPU 帯域を早期に飽和させるため、GPU 計算との重なりが崩れて訓練効率が劣化する。SPPO はこの粒度を「部分系列(subsequence)」まで細分化することで、転送単位を小さくし GPU 実行パイプラインとより細かく重ね合わせられるようにする。 - **固定オフロード比率では不十分**(SPPO): 長さベース分割(subsequence を均等長に分割)はアテンション計算の後方トークンほど計算コストが高いという不均衡を無視する。FLOPs ベース分割(計算量を均等化)は逆に活性化サイズが不均衡になり(8分割で活性化サイズが 10.59GB〜2.87GB まで変動)、早い部分系列では転送時間が計算時間を上回りオフロードがボトルネックになる。SPPO は部分系列ごとに独立したオフロード比率 $\alpha_i$ を割り当てる sequence-aware offloading でこれを解消する。 - **活性化テンソルのアクセス頻度に応じた階層化が有効**(SPPO の2レベル活性化管理): Transformer 層内の活性化を「骨格活性化」として分解し、後続計算で高頻度にアクセスされる部分(例: 因果マスク下で後続 $Q_N$ 計算に必要な $K_i$・$V_i$)は GPU に残し、それ以外の低頻度アクセス活性化のみを CPU へオフロードする。全活性化を一律オフロードするより CPU-GPU 帯域を有効活用できる。 - **オフロード単独の効果はモデル規模・系列長に依存して逆転しうる**(SPPO のアブレーション): GPT-13B・S=512K ではフルオフロード追加が性能を悪化させた(0.91倍)が、GPT-65B・S=640K では性能向上した(2.1倍)。「通信効率は高いがメモリ効率が低い並列化戦略」の場合にフルオフロードが有効に働く一方、そうでない設定ではオフロードオーバーヘッド自体がボトルネックになる。 - **CPU メモリ帯域の排他アクセス仮定は先行研究([[ZeROオプティマイザ]]系)と共通**: SPPO の sequence-aware offloading の最適化は「各 GPU が CPU メモリ帯域へ排他的にアクセスできる」前提に立ち、複数 GPU が同一 CPU ソケットを共有する場合の PCIe 輻輳は明示的にモデル化していない。この仮定は ZeRO-Offload 系の先行研究(Ren et al. 2021)でも同様に置かれている。 ## 未解決の問い - PCIe 輻輳(複数 GPU が同一 CPU ソケットの帯域を共有する場合)を明示的にモデル化したオフロード比率最適化はどのように設計できるか。 - 動的長・混合長バッチ処理(SPPO のスコープ外)において、部分系列単位のオフロード比率をどう決定すべきか。 - オプティマイザ状態・パラメータのオフロード([[ZeROオプティマイザ]])と活性化オフロード(本概念)を同時に適用した場合の CPU-GPU 帯域競合はどう調整すべきか。