ホームページ  >  記事  >  テクノロジー周辺機器  >  コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

WBOY
WBOY転載
2023-04-11 12:16:031099ブラウズ

PyTorch「Alchemy」の速度を向上させるにはどうすればよいですか?

最近、著名な機械学習と AI 研究者の Sebastian Raschka 氏がそのトリックを披露してくれました。同氏によると、彼の手法では、モデルの精度に影響を与えることなく、コードを数行変更するだけで BERT 最適化時間が 22.63 分から 3.15 分に短縮され、トレーニング速度が 7 倍向上しました。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

著者は、8 つの GPU が利用できる場合、トレーニング プロセス全体で必要なのは次のとおりであるとさえ述べています。 11.5 倍のパフォーマンス アクセラレーションを達成するには 2 分かかります。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

彼がどのようにしてそれを達成したかを見てみましょう。

PyTorch モデルのトレーニングを高速化する

最初はモデルです。著者は研究に DistilBERT モデルを使用しています。これは BERT の合理化されたバージョンであり、40 分の 1 のサイズです。 BERT.% よりも優れていますが、パフォーマンスの低下はほとんどありません。 2 番目はデータ セットで、トレーニング データ セットは IMDB Large Movie Review という大規模な映画レビュー データ セットで、合計 50,000 件の映画レビューが含まれています。著者は、以下の図の方法 c を使用して、データセット内の映画レビューのセンチメントを予測します。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

基本的なタスクを明確に説明した後、次は PyTorch のトレーニング プロセスです。このタスクを誰もがよりよく理解できるように、著者はウォームアップ演習、つまり IMDB 映画レビュー データセットで DistilBERT モデルをトレーニングする方法も詳しく紹介します。コードを自分で実行したい場合は、以下に示すように、関連する Python ライブラリを使用して仮想環境をセットアップできます。

関連するソフトウェアのバージョンは次のとおりです。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

退屈なデータ読み込みの説明は省略します。理解することだけが必要です。この記事では、データ セットが 35,000 のトレーニング サンプル、5,000 の検証サンプル、および 10,000 のテスト サンプルに分割されていることがわかります。必要なコードは次のとおりです。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

##コード部分のスクリーンショット

#完全なコード アドレス:

https://github.com/rasbt/faster-pytorch- blog /blob/main/1_pytorch-distilbert.py

次に、A100 GPU でコードを実行すると、次の結果が得られます:

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

結果の一部のスクリーンショット

上記のコードに示すように、モデルは次のようになります。ラウンド 2 からラウンド 3 ラウンドの開始時に少しオーバーフィッティングが発生し、検証精度が 92.89% から 92.09% に低下しました。 22.63 分間モデルを微調整した後の最終テスト精度は 91.43% でした。

Trainer クラスを使用する

##次のステップは、上記のコードを改善することです。改善部分は主に次のとおりです。 Lightning から Trainer クラスを使用できるように、LightningModule で PyTorch モデルをラップします。いくつかのコードのスクリーンショットは次のとおりです:

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

完全なコード アドレス: https://github.com/rasbt/faster-pytorch-blog/blob/main/2_pytorch- with-trainer.py

#上記のコードは、トレーニング、検証、テストの実行方法を定義する LightningModule を作成します。前に示したコードと比較すると、主な変更点はパート 5 (つまり 5 微調整) にあり、モデルを微調整しています。以前とは異なり、微調整部分では PyTorch モデルを LightningModel クラスでラップし、Trainer クラスを使用してモデルを適合させます。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

前のコードでは、検証精度がラウンド 2 からラウンド 3 に低下していることが示されましたが、改善されたコードでは ModelCheckpoint を使用しています。最適なモデルをロードします。同じマシン上で、このモデルは 23.09 分で 92% のテスト精度を達成しました。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

チェックポイント作成が無効で、PyTorch が非決定的モードでの実行を許可されている場合、この実行は最終的に同じ実行になることに注意してください。時間は通常の PyTorch と同じです (時間は 23.09 分ではなく 22.63 分です)。

自動混合精度トレーニング

さらに、GPU が混合精度トレーニングをサポートしている場合は、GPU をオンにすることができます。コンピューティング効率を向上させるため。著者らは自動混合精度トレーニングを使用し、精度を犠牲にすることなく 32 ビットと 16 ビット浮動小数点を切り替えます。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

この最適化では、Trainer クラスを使用して、自動混合精度トレーニングを行います:

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

上記の操作により、トレーニング時間を 23.09 分から 8.75 分に短縮でき、ほぼ 3 倍速くなります。テスト セットの精度は 92.2% で、以前の 92.0% からわずかに改善されました。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

Torch.Compile static imageを使用する

最近の PyTorch 2.0 のお知らせ表示、PyTorch チームは新しい toch.compile 関数を導入しました。この関数は、PyTorch コードを実行するために動的グラフを使用する代わりに、最適化された静的グラフを生成することにより、PyTorch コードの実行を高速化できます。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

PyTorch 2.0 はまだ正式にリリースされていないため、最初に torchtriton をインストールして更新する必要がありますこの機能は、PyTorch の最新バージョンでのみ使用できます。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。


#次に、次の行を追加してコードを変更します。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

4 GPU での分散データ並列処理

上記では、単一 GPU でコードを高速化する混合精度トレーニングについて説明しましたが、次に、マルチ GPU トレーニング戦略を紹介します。以下の図は、いくつかの異なるマルチ GPU トレーニング手法をまとめたものです。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

#分散データ並列処理を実現したい場合は、DistributedDataParallel を通じて実現できます。トレーナーは 1 行のコードで使用できます。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

この最適化ステップの後、4 つの A100 GPU でこのコードは 3.52 分間実行され、93.1 % のテスト精度に達しました。 。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

##DeepSpeed

最後に、著者はディープ ラーニング最適化ライブラリ DeepSpeed と Trainer のマルチ GPU 戦略を使用した結果を調査します。まず、DeepSpeed ライブラリをインストールする必要があります:

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

その後、コードを 1 行変更するだけで、ライブラリ:

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

このウェーブの後、テスト精度 92.6% に達するまでに 3.15 分かかりました。ただし、PyTorch には DeepSpeed の代替手段もあります。それは、strategy="fsdp" で呼び出される完全にシャード化された DataParallel で、最終的に完了までに 3.62 分かかりました。

コードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。

上記は、PyTorch モデルのトレーニング速度を向上させるための著者の方法です。元のブログに従って、試してみてください。望む結果が得られると思います。

以上がコードを数行変更するだけで、PyTorch は錬金術を高速化し、モデルの最適化時間を大幅に短縮します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。