Baidu と Nvidia Research Institute は、N カードの基盤となるコンピューティング最適化を組み合わせて、ニューラル ネットワークのトレーニングを加速する効果的な方法を提案しました。この方法は事前トレーニングだけでなく、誰もが BERT を微調整している今日でも非常に役立ちます。 すべては ICLR 2018 の論文から始まりました。 「MIXED PRECISION TRAINING」は、BaiduとNvidia Research Instituteが共同で発表したものです。Nカードの基盤となるコンピューティング最適化を組み合わせ、非常に効果的なニューラルネットワークトレーニング加速方法を提案しています。事前トレーニングだけでなく、誰もがBERTを微調整している今日でも非常に役立ちます。 さらに、調査では、Baidu の Paddle フレームワークが混合精度トレーニングをサポートしているだけでなく、Tensorflow と Pytorch にも対応する実装があることが分かりました。まず理論について説明し、次に 3 つの主要なディープラーニング フレームワークで混合精度トレーニングがどのように実装されているかを分析します。 理論的原則ニューラル ネットワークをトレーニングしたことがある人なら誰でも、ニューラル ネットワークのパラメーターと中間結果のほとんどが単精度浮動小数点数 (つまり float32) を使用して保存および計算されることを知っています。ネットワークが非常に大きくなると、半精度浮動小数点数を使用するなど、浮動小数点数の精度を下げることは、明らかに計算速度を上げ、ストレージ オーバーヘッドを削減する非常に直接的な方法です。 しかし、副作用も明らかです。浮動小数点数の精度を直接下げると、必然的にモデルのトレーニング精度が低下します。しかし、より優れた人が必ず存在します。この記事では、モデルの精度の低下を効果的に防ぐために 3 つのメカニズムを使用します。小曦が一つずつ教えてくれるのを待っててくださいo(* ̄▽ ̄*)ブ ウェイトバックアップ(マスターウェイト) コンピュータにおける半精度浮動小数点数 (float16) の表現は、1 ビットの符号ビット、5 ビットの指数ビット、10 ビットの仮数ビットに分かれており、表現できる最小の正の数は 2^-24 (つまり、精度はここで終了) であることがわかっています。ニューラル ネットワークの勾配が非常に小さい場合、ネットワークのトレーニング プロセスの各ステップの反復回数 (非常に小さい勾配 ✖ また非常に小さい学習率) は小さくなります。float16 精度で表現できないほど小さい場合、対応する勾配を更新できません。 この論文では、中国語データセットでDeepSpeech 2モデルをトレーニングする際に生成された勾配を数え、学習率を掛ける前に、勾配の約5%が悲惨なことに0になり(2^-24より高い精度の勾配は直接0になる)、大きな損失が発生することを発見しました/(ㄒoㄒ)/~~ さらに困難なのは、反復ボリュームが生き残り、それ自身に専念する準備ができたときです。 。 。ネットワーク内の重みは更新したい量よりもはるかに大きいことが多いため、反復量が Float16 の現在の範囲で表現できる最小間隔よりも小さい場合、更新は失敗します (盲目的に泣く ┭┮﹏┭┮なぜ私にとってはこんなに難しいのでしょうか?) それで何をすればいいのでしょうか?著者は、順方向伝播と勾配計算の両方に float16 を使用し、ネットワーク パラメーターの勾配の保存には float32 を使用するという、非常にシンプルですが効果的な方法を提案しています。これにより、上記の2つの問題がある程度解決されます~~~ トレーニング曲線を見てみましょう。青い線は通常の float32 精度トレーニング曲線、オレンジ色の線は float32 を使用してネットワーク パラメータを保存する学習曲線、緑の線は float32 を使用してパラメータを保存しない曲線です。これら 2 つを比較すると見劣りします。 損失スケーリング 上記のマスターウェイトを使用すると、多くのネットワークを高精度でトレーニングすることがすでに可能ですが、強迫性障害を少し抱えているXiao Xiは、まだ何かがおかしいと感じていますo((⊙﹏⊙))o。 float32 を使用して勾配を保存しても精度は失われませんが、計算中に現れる指数が -24 未満の勾配は失われます。これは、漏れやすいふるいを使って川から村まで水を運ぶのと同じです。より多くの水を貯めるために、村人たちは貯水ボウルを大きな桶に取り替えました。しかし、ふるいはまだ漏れていて、途中で水が漏れ出していました。 。 そこで損失スケーリング法が生まれました。まず、著者はトレーニング中に活性化関数の勾配の分布を数えました。ネットワーク内の勾配は非常に小さいことが多いため、FP16 を使用する場合、右側の大きな範囲は使用されません。この場合、損失を増幅することで勾配全体を右にシフトすることができ、精度によりいつでも 0 になる勾配を減らすことができます。 そこで疑問になるのが、損失を合理的に増幅するにはどうすればいいのか、ということです。最も簡単な方法は定数スケーリングで、損失を S 倍に増幅します。 float16 が表すことができる最大の正の数は 2^15*(1+1-2^-10)=65504 です。ネットワーク内の勾配を数え、最大勾配が float16 が表すことができる最大の整数を超えないように定数 S を計算できます。 もちろん、よりインテリジェントな動的調整(自動スケーリング)もありますo(* ̄▽ ̄*)ブ まず、大きな S を初期化します。勾配がオーバーフローする場合は、S を元の値の半分に減らします。多くの反復で勾配がオーバーフローしない場合は、S を 2 倍に拡大することもできます。などにより、動的な損失スケーリングが実現されます。 オペレーションの精度 さらに一歩進んで、ニューラル ネットワークにおける演算は、主に 4 つのカテゴリに分類できます。混合精度トレーニングでは、より高い精度が求められる一部の演算の計算プロセスで float32 を使用し、保存時に float16 に変換します。
行列の乗算とほとんどの点計算は float16 を使用して直接計算して保存できますが、削減、損失関数、および一部の点関数 (関数値が変数よりもはるかに大きい exp、log、pow など) ではより高度な処理が必要になるため、計算には float32 が使用され、結果は float16 に変換されて保存されます。 まとめ: 3つの主要なディープラーニングフレームワークを開く方法混合精度トレーニングでは、前方計算と後方計算の両方で半精度浮動小数点数を使用し、以前の研究のように追加のハイパーパラメータを導入しません。さらに重要なのは、実装が非常にシンプルでありながら、非常に大きなメリットをもたらすことができることです。ビデオメモリを半分にし、速度を 2 倍にしてモデルの精度を維持するのは、まさに驚異的です。 ハードコアな技術的詳細を読んだ後、コードの実装を見てみましょう。このような強力な混合精度トレーニングのコード実装は、あまり単純であってはなりません😮 ピトーチ 自動混合精度(AMP)を輸入、998も288も不要、たった3行で簡単に使えます!
例を見てみましょう。上記の 3 行を元のコードの正しい位置に挿入すると、クールな半精度トレーニングが実現します。
テンソルフロー 混合精度トレーニングを一文で実装する: Python スクリプトで環境変数を変更し、環境変数を設定する
さらに、オプティマイザーは pytorch と同様の方法でパッケージ化することもできます。 グラフベースの例
Kerasベースの例
パドルパドル 混合精度トレーニングを一文で実装するための設定を追加(驚いた🙃 結局のところ、混合精度トレーニングはBaiduによって提案され、内部で長い間熟練して使用されてきた)
たとえば、BERT に基づいて XNLI タスクを微調整する場合は、実行中に use_fp16 を true に設定するだけで済みます。
|
<<: 25倍のパフォーマンス向上: RustはCとC++に取って代わり、機械学習のPythonバックエンドとして好まれるようになると期待されています。
>>: なぜ機械学習展開プラットフォームを Python ではなく Go で作成したのでしょうか?
先月、マイクロソフトのCEOであるサティア・ナデラ氏はIgniteカンファレンスで、自社開発の小型モ...
[[416318]]最近、世界インターネット会議およびインターネット開発フォーラム「人工知能:新たな...
マスク氏の非嫡出双子が初めて世間に公開される!最近、「スティーブ・ジョブズ」の著者であり伝記作家でも...
7月31日、ユーザーが使用する言語が大規模言語モデル(LLM)のコストに大きな影響を与え、英語話者と...
ビッグデータのソースが多数存在し、企業が利用できるデータの量も増加しているため、ストレージ管理者にと...
論文アドレス: https://arxiv.org/abs/2307.09283コードアドレス: h...
Google が今年の夏に関連ビデオを公開したことに続くもの。昨日、Google の主任検索エンジニ...
最近、GPT-4(コンテキスト長32k)、MosaicMLのMPT(コンテキスト長65k)、Anth...
機械学習の進歩がモデルによってもたらされるのか、それともデータによってもたらされるのかは、今世紀の論...
機械学習は、自動化と異常な動作の検出を通じて、よりスケーラブルかつ効率的に IoT デバイスを保護す...
[[204846]] 1. 人工知能の応用と価値Andrew Ng 氏は、AI は新しい電気であると...
ポストパンデミックの時代において、在宅勤務によって従業員の生産性を最大限に引き出すにはどうすればいい...
過去 8 か月間で、Google DeepMind、Wadhwani Institute of Ar...