自動微分の誤った神話その2

アジョイント自動微分を使うと必ずメモリ不足になる

原文:AD Myths Debunked: I’ll always run out of memory using Adjoint AD - Published 2022/03/25 By Johannes Lotz

この記事は 自動微分の誤った神話 シリーズの一部です。

「自動微分とその利点に興味はあるが、アジョイント自動微分(AAD)を使用すると膨大な量のメモリを使用し、すぐにメモリが足りなくなってしまうのでは?」

我々はこれまでにこのようなコメントを何度も聞いたことがあります。なぜメモリが足りなくなってしまうと思うのかを尋ねると、大抵は、アジョイント自動微分の基本的な適用ではメモリを大量に消費するからです、というおなじみの説明が返ってきます。

しかし、大量のメモリを消費するのはどのような場合でも常にそうなのでしょうか?
自動微分を使うときに、メモリ使用量を抑えるのはそんなに難しいことなのでしょうか?
それともこれは誤った神話なのでしょうか?

NAGではこれまでに、私たちのツールであるdco/c++を多くのクオンツライブラリに適用し、メモリ使用量が非常に効率的であることを何度も示してきました。dco/c++は任意のC++コードを簡単取り扱う事ができます。dco/c++は、形式や動作に何の制限も与えず、インターフェースは柔軟で、メモリ使用量を任意に削減するための高度なアジョイント自動微分技術を簡単に適用するためのすべての部品を提供します。つまり、dco/c++はモンテカルロ法、PDEソルバー、キャリブレーションコード、曲線構築、あらゆる種類の解析的・半解析的プライシング、求根と固定小数点イテレータ、線形代数と回帰を容易に扱うことができ、それぞれのケースでユーザーが構造を利用してメモリ使用と実行時間を最適化できるようになっているのです。

たくさんの感度を計算する必要がある場合、アジョイント自動微分は最適な手法です。有限差分法(別名バンプ法)よりもはるかに高速に計算することができます。アジョイント自動微分の性能は、アジョイントランタイム / オリジナルランタイム で算出されるアジョイント係数で測定されます。dco/c++では、1.1〜20の範囲のアジョイント係数が観測されています。この係数は、必要とされる感度の数(数千から数百万にもなりえる)とは無関係なものです。

これは,入力から出力へという通常の方法でモデルを考えるなら魔法のように思えますが,アジョイント自動微分では逆に出力から入力という形で実行されます。 このような非常に大きなスピードアップを実現するために、自動微分ツールはアプリケーションの情報の流れを逆転できなければなりません。基本的に、これは計算を記録すること、つまり、アプリケーションとすべての操作のイメージをメモリ内に保持し、その記録を逆順にステップ実行することにより行われます。dco/c++は最適化されたデータ構造、つまり、デフォルトでは大きく圧縮されたイメージを使用します。 dco/c++を他のツールと比較してみました(下のグラフを参照)。縦軸はdco/c++の消費量を1とした場合のメモリ使用量を示し、横軸は一連の小さなテストコードを示しています。最も興味深いデータポイントは、おそらく「comiso」(非常に大量の浮動小数点演算を行うコード)、「libor」(Mike GilesのLiborモンテカルロコード)、「Monte Carlo」(立方スプラインではなくPadé近似を用いた1次元局所変動モデルのモックアップ)、「1D PDE」(同じ局所変動モデルのクランク-ニコルソン方式による算出)です。自動微分ツールの動作は、適用されるコードの仕様に強く依存しています。

自動微分ツールのメモリ消費量比較

dco/c++ 内の最適化されたデータ構造を使って、さらに高度なテクニックで、ほぼ任意にメモリ使用量を制限することが可能です。これらのテクニックには、チェックポイント、数学アルゴリズムの効率的な処理(例:シンボリックアジョイント)、並行性の利用(例:経路毎のアジョイント)、ストラテジーの事前計算、その他多数が含まれます。我々は、これらの一般的な技術を、いわゆるアジョイントコードのデザインパターンにまとめました。実際、dco/c++では、アジョイント自動微分をグラフの計算とみなし、その構造を利用するために、ユーザがこのグラフで「いろいろやってみる」ことができるインターフェイスになっています。我々の経験とdco/c++の助けを借りて、これらの最適化は多くのクライアントのライブラリに適用されています。

NAGの自動微分ツールセットは過去12年にわたり開発され、さらに10年にわたるC++による自動微分研究開発の経験を基に構築されています。私たちは、細部が重要であることを知っています。レガシーコードは私たちのビジネスであり、私たちが扱うことができないコードに出会ったことは一度もありません。

神話は、真実のように聞こえるかもしれませんが、私たちは、神話について詳しく話し、私たちの経験を共有することによって、企業がこれらの問題を解決する手助けをしたいと願っています。

結果は重要ですが、神話は重要ではありません。

関連情報
MENU
Privacy Policy  /  Trademarks