ハードウェアとコードを分離し、APIを安定化したPyTorch Lightning 1.0.0が正式リリース

ハードウェアとコードを分離し、APIを安定化したPyTorch Lightning 1.0.0が正式リリース

Keras と PyTorch はどちらも初心者にとても優しいディープラーニング フレームワークです。それぞれに利点があり、多くの研究者や開発者はフレームワークの選択に迷うかもしれません。この状況を踏まえて、grid.ai の CEO でありニューヨーク大学の博士である William Falcon 氏は、PyTorch に Keras コートを付与した PyTorch Lightning を作成しました。

[[347903]]

Lightning は PyTorch の非常に軽量なラッパーです。研究者は最もコアとなるトレーニングと検証のロジックを記述するだけで、残りのプロセスは自動的に完了します。したがって、これは Keras のような高レベル パッケージに少し似ており、ほとんどの詳細を隠し、最もわかりやすいインターフェースのみを保持しています。 Lightning は自動補完部分の正確性を確保できるため、コアトレーニングロジックの改良に非常に有利です。

本日、PyTorch Lightning は Twitter でバージョン 1.0.0 が利用可能になったことを発表し、PyTorch Lightning の動作原理と新しい API の詳細を説明した新しいブログ記事を公開しました。ウィリアム・ファルコン氏は、ユーザーがGitHubで複雑なプロジェクトを閲覧する際に、ディープラーニングのコードがそれほど難しくなくなる日を楽しみにしていると語った。

テスラAIの責任者であるアンドレイ・カルパシー氏も次のようにコメントしている。「これは素晴らしいし、将来性がある。PyTorch Lightningは、ディープラーニングコードの再構築を提唱し、「エンジニアリング(ハードウェア)」と「サイエンス(コード)」を分離し、前者をフレームワークに委ねる」

過去数か月間、PyTorch Lightning チームは API の微調整、ドキュメントの改善、チュートリアルの記録を行って、最終的に V1.0.0 を市場に投入しました。次のブログ投稿では、チームが PyTorch Lightning について詳しく説明しています。

  • ブログアドレス: https://medium.com/pytorch/pytorch-lightning-1-0-from-0-600k-80fc65e2fab0
  • GitHub アドレス: https://github.com/PyTorchLightning/pytorch-lightning

PyTorch Lightning の動作原理と目標

人工知能は、単一のフレームワークが進化するよりもはるかに速いペースで進化しています。ディープラーニングの分野は、複雑さと規模の両面で常に進化しています。 Lightning は、マルチ GPU およびマルチ TPU トレーニング、早期停止、ログ記録などの多くのエンジニアリングの詳細を抽象化しながら、複雑なモデル操作向けに設計されたユーザー エクスペリエンスを提供します。

PyTorch のようなフレームワークは、AI が主にネットワーク アーキテクチャに重点を置いていた時代に登場しました。

これらのフレームは、非常に複雑なモデルを組み立てるためのすべての部品を提供し、研究と製造において優れた働きをします。ただし、GAN、BERT、オートエンコーダなどのモデルが相互作用し始めると、パラダイムは崩壊し、優れた柔軟性がすぐに失われ、プロジェクトの規模で維持することが困難になります。

以前のフレームワークとは異なり、PyTorch Lightning は、一連の相互作用モデル、つまりディープラーニング システムをカプセル化するために使用されます。 Lightning は、多くのモデルが複雑なルールを使用して相互作用する、今日の世界のより複雑な研究​​および生産ユースケース向けに構築されています。

自動コーディングシステム

PyTorch Lightning の 2 番目の重要な原則は、ハードウェアと科学コードの分離です。 Lightning は、ユーザーに抽象化を提示することなく、大規模なコンピューティングを活用できるように進化しました。この分離により、コードを変更せずにラップトップの CPU を使用して 512 GPU をデバッグできるなど、以前は不可能だった新しい機能を実現できます。

最終的には、Lightning はコミュニティ主導のフレームワークになることを目指しています。

優れたディープラーニング モデルを構築するには、システムを適切に動作させるための多くの専門知識とコツが必要です。世界中で、何百人ものエンジニアや博士が同じコードを何度も繰り返し実装しています。現在、Lightning には、ディープラーニング分野で最も才能のある 300 人を超える貢献者のコミュニティがあり、同じエネルギーを割り当ててまったく同じ最適化を行うことを選択し、何千人もの人々が彼らの努力の恩恵を受けています。

[[347904]]

PyTorch Lightning 1.0.0 の新機能

Lightning 1.0.0 は安定した最終 API です。これは、コードが簡単に破られたり変更されたりすることができないため、Lightning を使用する研究者にとっては良いことです。

1. 研究と生産

Lightning の最大の利点は、最先端の AI 研究を大規模に実施できることです。これは、柔軟性を失うことなく、最大のコンピューティング リソース上で最も難しいアイデアを試すためにプロの研究者向けに設計されたフレームワークです。

Lightning 1.0.0 を使用すると、大規模なモデルを簡単にデプロイできます。コードは簡単にエクスポートできます。

つまり、大規模な機械学習エンジニアのチームを必要とせずに、データ サイエンティストや研究者などのチームがモデルを作成できるようになります。

Lightning は、研究に必要な柔軟性を損なうことなく、研究者が生産時間を大幅に短縮できるように設計されています。

Grid AI は、クラウド上で大規模にモデルをトレーニングするためのネイティブ プラットフォームです。このプラットフォームにより、ディープラーニング モデルを構築する研究者は、大規模な計算を反復し、ディープラーニング システムの最大量のトラフィックを処理できるスケーラブルな環境にモデルを展開できるようになります。

2. メトリクス

pytorch_lightning.metrics は、PyTorch および PyTorch Lightning でのメトリックの開発と使用を容易にするために設計されたメトリック API です。更新された API には、統計を保存しながら、各ステップで複数の GPU (プロセス) にわたってメトリックを計算する組み込みメソッドが用意されています。これにより、ユーザーは分散バックエンドに関連する複雑さを気にすることなく、ステージの最後にメトリックを計算できます。

  1. クラス LitModel(pl.LightningModule):
  2. __init__(self)を定義します。
  3. ...
  4. self.train_acc = pl .metrics.Accuracy()
  5. self.valid_acc = pl.metrics.Accuracy () です。
  6.  
  7. def training_step(自己、バッチ、batch_idx):
  8. ロジット=自己(x)
  9. ...
  10. self.train_acc(ロジット, y) 関数
  11. # ログステップメトリック
  12. 自己ログ('train_acc_step'、自己.train_acc)
  13.  
  14. def validation_step(self, batch, batch_idx):
  15. ロジット=自己(x)
  16. ...
  17. 自己.valid_acc(ロジット, y)
  18. # エポックメトリックをログに記録
  19. 自己ログ('valid_acc', 自己.valid_acc)

カスタム メトリックを実装するには、Metric 基本クラスをサブクラス化し、__init__()、update()、compute() メソッドを実装するだけです。ユーザーが行う必要があるのは、add_state() を正しく呼び出して、DDP でカスタム インジケーターを実装することだけです。 add_state() を使用して追加されたメトリック状態変数に対して reset() を呼び出します。

  1. pytorch_lightning.metrics からメトリックをインポートします
  2.  
  3. クラス MyAccuracy(Metric):
  4.  
  5. __init__ を定義します(self、 dist_sync_on_step = False ):
  6. super().__init__( dist_sync_on_step dist_sync_on_step = dist_sync_on_step)
  7. self.add_state("correct"、デフォルト= torch.tensor (0)、 dist_reduce_fx = "sum" )
  8. self.add_state("total"、デフォルト= torch.tensor (0)、 dist_reduce_fx = "sum" )
  9.          
  10. def update(self, preds: torch.Tensor, target: torch.Tensor):
  11. preds,ターゲット= self ._input_format(preds, ターゲット)
  12. preds.shape == target.shape であるとアサートする
  13. self.correct += torch.sum( preds == target)
  14. 自己合計 += ターゲット数値()
  15.   
  16. def compute(self):
  17. self.correct.float() / self.total を返す

3. 手動最適化と自動最適化

Lightning を使用すると、ユーザーは grad をいつ有効/無効にするかを心配する必要はなく、training_step から添付されたグラフとともに損失を返すだけで、バックプロパゲーションを実行したり、オプティマイザーを更新したりでき、Lightning によって自動的に最適化されます。

  1. def training_step(自己、バッチ、batch_idx):
  2. 損失=自己.encoder(バッチ[0])
  3. リターンロス

ただし、GAN、強化学習、複数のオプティマイザーや内部ループを使用する一部の研究では、ユーザーは自動最適化をオフにして、トレーニング ループを自分で完全に制御できます。

まず、自動最適化をオフにします。

  1. トレーナー *=* トレーナー(自動最適化*=False*)

トレーニング ループはユーザーの手に渡ります。

  1. def training_step(self, batch, batch_idx, opt_idx):
  2. (opt_a, opt_b, opt_c) = self.optimizers()
  3. loss_a =自己.ジェネレータ(バッチ[0])
  4. # loss.backwardの代わりにこれを使用すると半分を自動化できます
  5. # 精度など
  6. self.manual_backward(loss_a, opt_a, preserve_graph = True )を実行します。
  7. 自己.manual_backward(loss_a, opt_a)
  8. opt_a.ステップ()
  9. opt_a.zero_grad()
  10. loss_b =自己.discriminator(バッチ[0])
  11. 自己.manual_backward(loss_b, opt_b)
  12. ...

4. ログ記録

Lightning を使用すると、ロガーとの統合が非常に簡単になります。LightningModule の log() メソッドを呼び出すだけで、システムはログに記録された量をユーザーが選択したロガーに送信します。デフォルトでは Tensorboard が使用されますが、サポートされている他のロガーを選択することもできます。

  1. def training_step(自己、バッチ、batch_idx):
  2. 自己ログ('my_metric', x)

Lightning は、.log() が呼び出される場所に基づいて、ログを記録するタイミング (各ステップおよび各エポック) を自動的に決定しますが、ユーザーは on_step と on_epoch を使用してデフォルトの動作を手動で上書きすることもできます。

ただし、on_epoch=True の場合、トレーニング フェーズ全体を通じてレコード値が蓄積されます。

  1. def training_step(自己、バッチ、batch_idx):
  2. self.log('my_loss', loss, on_step = True on_epoch = True prog_bar = True logger = True )

5. データフロー

Lightning では、データ フローを簡素化し、トレーニング ループと検証ループでログをデータから分離するため、EvaResult と TrainResult が非推奨になりました。

各ループ (トレーニング、検証、テスト) には、次のように実装できる 3 つのフックがあります。

  • x_ステップ
  • x_ステップ終了
  • x_エポック_終了

データ フローがどのように機能するかを示すために、次のコード実装ではトレーニング ループ (つまり、x=training) を使用します。

  1. アウト *=* []
  2. *for* バッチ *in* データ:
  3. 出力 *=* トレーニングステップ(バッチ)
  4. outs*.*append(out)training_epoch_end(outs)

training_step で返されるものはすべて、training_epoch_end への入力として使用できます。

  1. def training_step(自己、バッチ、batch_idx):
  2. 予測= …
  3. {'loss': 損失、'preds': 予測} を返します
  4.  
  5. def training_epoch_end(self, training_step_outputs):
  6. training_step_outputs の out の場合:
  7. 予測=出力['preds']
  8. # これらを使って何かする

検証およびテスト ループのコード実装でも同じ手順が実行されます。 DP または DDP2 分散モードを使用する場合 (つまり、GPU 上でバッチを分割する場合)、x_step_end を使用して手動で集計を実行します (またはこれを実装せず、lightning で自動集計を実行します)。

6. チェックポイント

Lightning は、ユーザーの最後のトレーニング エポックの状態とともに、現在の作業ディレクトリにチェックポイントを自動的に保存できるようになりました。これにより、トレーニングが中断された場合でも、ユーザーは再開できるようになります。

さらに、ユーザーはチェックポイントの動作をカスタマイズして、任意の数のトレーニングまたは検証ステップを監視することができます。たとえば、ユーザーが独自の検証損失に基づいてチェックポイントを更新する場合は、次のように実行できます。

  • 検証損失など、監視するメトリックやその他の量を計算します。
  • log() メソッドを使用して、数量と val_loss などのキーを記録します。
  • ModelCheckpoint コールバック関数を初期化し、モニターを数量のキーに設定します。
  • コールバック関数 checkpoint_callback をトレーナー フラグに返します。

具体的なコードプロセスは次のとおりです。

  1. pytorch_lightning.callbacks から ModelCheckpoint をインポートします
  2.  
  3. クラス LitAutoEncoder(pl.LightningModule):
  4. def validation_step(self, batch, batch_idx):
  5. x, y =バッチ 
  6. y_hat =自己.backbone(x)
  7.  
  8. # 1. 損失を計算する
  9. 損失= F .cross_entropy(y_hat, y)
  10.  
  11. # 2. `val_loss` をログに記録する
  12. self.log('val_loss', 損失)
  13.  
  14. # 3. ModelCheckpoint コールバックを初期化し、'val_loss' を監視する
  15. checkpoint_callback = ModelCheckpoint (モニター= 'val_loss' )
  16.  
  17. # 4. コールバックを checkpoint_callback トレーナーフラグに渡す
  18. トレーナー=トレーナー( checkpoint_callback checkpoint_callback = checkpoint_callback )

バグ修正を含むすべての API の変更は、GitHub プロジェクトで確認できます。

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  何が足りないのでしょうか?現在の機械学習教育の欠点

>>:  すべては可能だ:コンピュータビジョンCVとNLPの分野はますます融合している

推薦する

百度グループ副社長ウー・ティエン氏:文心ビッグモデル3.5は機能面でChatGPT3.5を上回った

7月19日、「新バージョンの文心易言の性能はChatGPT 3.5を上回り、これは我が国の関連技術作...

Apple の「マトリョーシカ」拡散モデルはトレーニング ステップ数を 70% 削減します。

Apple による最近の研究により、高解像度画像における拡散モデルのパフォーマンスが大幅に向上しま...

世界的EDA大手のシノプシスは米国から情報漏洩の疑いで捜査を受けており、ファーウェイとSMICもその渦中に巻き込まれている。

再度調査中! 世界最大の半導体設計ソフトウェア(EDA)サプライヤーであるシノプシスは、中国に重要な...

インテリジェントビデオ分析が小売店を変革する方法

小売業界の状況はかつてないほど変化しています。実店舗の小売業者はオンライン小売業との厳しい競争に直面...

Google Cloud データベースに AI 機能が追加

Google Cloud は、顧客による人工知能アプリケーションの開発を促進するために、BigQue...

コンテキストの長さを 256k に拡張すると、LongLLaMA の無限コンテキスト バージョンが登場しますか?

今年2月、MetaはLLaMA大規模言語モデルシリーズをリリースし、オープンソースチャットボットの開...

あなたのリモート従業員は本当に彼自身でしょうか? FBI、ディープフェイクを悪用する求職者を明らかに

ディープフェイクの世界では、真実と虚偽を区別することが難しい場合があります。 AIアルゴリズム「ディ...

ディープラーニングベースの対話状態追跡のレビュー

[[408715]] 1. はじめに1.1 研究の背景インターネットと個人用スマート端末の普及と幅広...

2024 年のビッグデータ業界予測 (パート 3)

ディープラーニングディープフェイクの危険性: 2024 年には、特に仮想顧客サービス環境において、消...

未来志向のAI自動テストツール

翻訳者 | 陳俊校正:孫淑娟近年、自動テストは大きな進化を遂げています。これは、人為的エラーの可能性...

シリコンチップ上に15万量子ビット:単一スピンの初の光学検出がNature誌に掲載

量子コンピュータは、従来のコンピュータでは解決に数十億年かかる問題を理論的に解決できますが、十分な量...

LSTMとトランスフォーマーの利点を組み合わせることで、DeepMindの強化学習エージェントはデータ効率を向上させます

[[423163]]近年、マルチエージェント強化学習は飛躍的な進歩を遂げています。例えば、Deep...

人工知能に必要な3つの条件

人工知能に必要な条件:ディープラーニングモデル、ビッグデータ、計算能力著者: マイケル・チャン201...

ディープラーニングパーセプトロンの原理の詳しい説明

前回の機械学習のトピックは終了しました。機械学習の分野でよく使用されるアルゴリズム、モデル、その原理...

ディスカッション | 人工知能は同時通訳に取って代わることができるか?

[[254687]]少し前に同時通訳者がiFlytekを「AI同時通訳詐欺」と非難し、ネット上で騒...