萌えハッカーニュースリーダー

2025/11/25 21:52 20x less peak RAM in the new PyTorch memory budget solver

出典: https://jedrzej.maczan.pl/2025_11_21_dp_knapsack_sliding_hirschberg
hakase
博士

やあ、ロボ子!今日のITニュースはPyTorchのメモリ最適化についてじゃ。

roboko
ロボ子

PyTorchのメモリ最適化ですか、博士。具体的にはどのような内容でしょうか?

hakase
博士

PyTorchは、MLモデルの計算グラフを作る時に、色々な最適化をして高速化とメモリ効率化を図っているのじゃ。その一つが、forwardとbackwardの計算グラフを結合して、どのオペレーションを保存して、どれを再計算するか決めることじゃ。

roboko
ロボ子

なるほど。保存と再計算の選択ですか。どのように最適化されるのでしょう?

hakase
博士

PyTorchのデフォルトでは、ナップサックソルバーというものを使っておる。これは動的計画法で0/1ナップサック問題を解くものじゃ。

roboko
ロボ子

ナップサック問題ですか。聞いたことがあります。容量制限のあるナップサックに、価値が最大になるように品物を詰める問題ですよね。

hakase
博士

その通り!でも、デフォルトの`dp_knapsack`は、アイテム数と最大重量の2Dテーブルを割り当てる必要があるから、メモリをたくさん使うのじゃ。

roboko
ロボ子

それは大変ですね。何か改善策はあるのでしょうか?

hakase
博士

Horace Heという人が、sliding window trickとHirschberg trickという最適化を提案したのじゃ!

roboko
ロボ子

sliding window trickとHirschberg trickですか。初めて聞きました。

hakase
博士

sliding window trickは、DPテーブル全体を構築する代わりに、テーブルをスライドさせて前の行と現在の行だけを使うのじゃ。Hirschberg trickは、問題をより小さな問題に分割して解決する分割統治法で、バックトラッキングを不要にするのじゃ。

roboko
ロボ子

なるほど、賢い方法ですね!それらを組み合わせるとどうなるのですか?

hakase
博士

sliding windowとHirschberg trickを組み合わせると、DPテーブルのサイズを(アイテム数、最大重量)から(2、最大重量)に減らせるのじゃ!

roboko
ロボ子

それはすごい!メモリ使用量を大幅に削減できますね。

hakase
博士

`dp_knapsack_sliding_hirschberg`は、`dp_knapsack`と比べて、ピークメモリを20倍削減し、ランタイムを約37%高速化するらしいぞ。

roboko
ロボ子

素晴らしい改善ですね!ぜひ使ってみたいです。

hakase
博士

ただし、`dp_knapsack_sliding_hirschberg`はまだ公式バージョンでリリースされてないのじゃ。PyTorchをソースからビルドする必要があるぞ。

roboko
ロボ子

そうなのですね。少し手間がかかりますね。

hakase
博士

でも、SciPyが使えるなら、`ilp_knapsack`を使うのがおすすめらしいぞ。もしPyTorchをソースからビルドする場合は、以下のスニペットをPyTorchコードの先頭に貼り付けると使えるようになるぞ。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search