PyTorch Lightning モデルを本番環境にデプロイするにはどうすればいいですか?

PyTorch Lightning モデルを本番環境にデプロイするにはどうすればいいですか?

[51CTO.com クイック翻訳] 機械学習の分野を見ると、ソフトウェアエンジニアリングの原理を機械学習に適用することに重点を置いたプロジェクトの数が急増していることが大きな傾向です。たとえば、Cortex は推論パイプラインの助けを借りて、サーバーレス関数のデプロイのエクスペリエンスを再現します。同様に、DVC は機械学習向けに最新のバージョン管理と CI/CD パイプラインを実装します。

[[351235]]

PyTorch Lightning にも同様の概念がありますが、トレーニング専用です。このフレームワークは PyTorch 用の Python ラッパーを提供し、データ サイエンティストやエンジニアがクリーンかつ管理しやすく、パフォーマンスの高いトレーニング コードを作成できるようにします。

私たちがこのデプロイメント プラットフォーム全体を構築した理由の 1 つは、定型コードを書くのが嫌いで、PyTorch Lightning の大ファンだからです。その精神で、私は PyTorch Lightning モデルを本番環境にデプロイするためのこのガイドを作成しました。途中で、PyTorch Lightning モデルをエクスポートして推論パイプラインに含めるいくつかの方法について説明します。

推論用の PyTorch Lightning モデルを展開するさまざまな方法

PyTorch Lightning モデルをデプロイ用にエクスポートする方法は 3 つあります。

  • モデルをPyTorchチェックポイントとして保存する
  • モデルをONNXに変換する
  • モデルをTorchscriptにエクスポートする

Cortex を使用すると、これら 3 つのアプローチすべてを満たすことができます。

1. PyTorch Lightningモジュールを直接パッケージ化してデプロイする

最もシンプルなアプローチから始めて、変換手順なしで PyTorch Lightning モデルをデプロイしてみましょう。

PyTorch Lightning Trainer は、定型的なトレーニング コード (トレーニングと検証の手順など) を抽象化するクラスであり、モデルを .ckpt ファイルとして保存する save_checkpoint() 関数が組み込まれています。モデルをチェックポイントとして保存するには、トレーニング スクリプトに次のコードを追加するだけです。

図1

さて、このチェックポイントのデプロイを始める前に、私が「PyTorch Lightning モデル」と言い続けているものの、PyTorch Lightning は PyTorch のラッパーであることに注意してください。プロジェクトの README には、実際に「PyTorch Lightning は、単に組織化された PyTorch です」と書かれています。したがって、エクスポートされたモデルは通常の PyTorch モデルであり、それに応じてデプロイできます。

保存されたチェックポイントを使用すると、Cortex にモデルを簡単にデプロイできます。 Cortex に詳しくない場合は、ここで簡単にツアーに参加できますが、Cortex の展開プロセスの簡単な概要は次のとおりです。

  • モデルの予測APIを書くためにPythonを使用する
  • YAMLを使用してAPIインフラストラクチャと動作を定義します
  • CLIのコマンドを使用してAPIをデプロイします

私たちの予測 API は、Cortex の Python Predictor クラスを使用して init() 関数を定義し、API を初期化してモデルをロードし、クエリ時に predict() 関数を使用して予測を行います。

  1. 輸入トーチ
  2. pytorch_lightning をplとしてインポートします
  3. training_codeからMyModel をインポートします
  4. トランスフォーマーからのインポート(
  5. 自動モデルシーケンス分類、
  6. 自動設定、
  7. オートトークナイザー
  8. クラス PythonPredictor:
  9. def __init__(self, config):
  10. self.device = "CPU"  
  11. self.tokenizer = AutoTokenizer.from_pretrained( "albert-base-v2" )
  12. self.model = MyModel.load_from_checkpoint(チェックポイントパス = "./model.ckpt" )
  13. def predict(自己, ペイロード):
  14. 入力 = self.tokenizer.encode_plus(ペイロード[ "text" ], return_tensors= "pt" )
  15. 予測 = self.model(**入力)[0]
  16. (予測[0] > 予測[1])の場合:
  17. 戻り値: { "class" : "unacceptable" }
  18. それ以外
  19. 戻り値: { "class" : "acceptable" }

とても簡単です。トレーニング コードの一部のコードを再利用し、推論ロジックを少し追加しました。注意すべき点は、モデルを S3 にアップロードする場合 (推奨)、モデルにアクセスするためのロジックを追加する必要があることです。

次に、YAML を使用してインフラストラクチャを構成します。

  1. -名前: 受容性アナライザー
  2. 種類: リアルタイムAPI
  3. 予測子:
  4. タイプ: python
  5. パス: predictor.py
  6. 計算:
  7. CPU: 1

非常にシンプルです。 API に名前を付け、必要な予測 AI を Cortex に伝え、CPU リソースを割り当てます。

次に、それをデプロイします。

注: Cortex によって開始および管理されるクラスターにデプロイすることもできます。

図3

すべてのデプロイメントにおいて、Cortex は API をコンテナ化し、Web サービスとして公開します。クラウド展開の場合、Cortex は負荷分散、自動スケーリング、監視、更新、およびその他の多くのインフラストラクチャ機能を構成します。

これで完了です。これで、リクエストに応じてモデル予測を処理する実際の Web API ができました。

2. ONNXにエクスポートし、ONNXランタイム経由でデプロイする

通常の PyTorch チェックポイントをデプロイしたので、もう少し複雑なものにしてみましょう。

PyTorch Lightning には最近、モデルを ONNX にエクスポートするための便利な抽象化が追加されました (以前は PyTorch の組み込み変換関数を使用できましたが、少しだけ定型コードが必要でした)。モデルを ONNX にエクスポートするには、トレーニング スクリプトに次のコードを追加するだけです。

図4

入力サンプルは実際のモデル入力の形状を模倣する必要があることに注意してください。

ONNX モデルをエクスポートしたら、Cortex の ONNX Predictor を使用してデプロイできます。コードは基本的に同じに見え、プロセスも同じです。たとえば、ONNX 予測 API は次のとおりです。

  1. pytorch_lightning をplとしてインポートします
  2. トランスフォーマーからのインポート(
  3. 自動モデルシーケンス分類、
  4. 自動設定、
  5. オートトークナイザー
  6. クラス ONNXPredictor:
  7. def __init__(self、onnx_client、config):
  8. self.device = "CPU"  
  9. 自己クライアント = onnx_client
  10. self.tokenizer = AutoTokenizer.from_pretrained( "albert-base-v2" )
  11.          
  12. def predict(自己, ペイロード):
  13. 入力 = self.tokenizer.encode_plus(ペイロード[ "text" ], return_tensors= "pt" )
  14. 予測 = self.client.predict(**入力)[0]
  15. (予測[0] > 予測[1])の場合:
  16. 戻り値: { "class" : "unacceptable" }
  17. それ以外
  18. 戻り値: { "class" : "acceptable" }
  19. GitHubホストされている rawpredictor.py を表示

基本的に同じです。唯一の違いは、モデルを直接初期化するのではなく、Cortex がモデルを展開するために起動する ONNX ランタイム コンテナーである onnx_client を介してモデルにアクセスすることです。

YAML は次のようになります。

  1. -名前: 受容性アナライザー
  2. 種類: リアルタイムAPI
  3. 予測子:
  4. タイプ: onnx
  5. パス: predictor.py
  6. モデルパス: s3://your-bucket/model.onnx
  7. 監視:
  8. モデルタイプ: 分類
  9. GitHubホストされている rawcortex.yaml を表示する

ここで監視フラグを追加したのは、設定がいかに簡単かを示すためです。ONNX 固有のフィールドがいくつかありますが、それ以外は同じ YAML です。

最後に、以前と同じ $ cortex deploy コマンドを使用してデプロイし、ONNX API がアクティブになります。

3. TorchscriptのJITコンパイラを使用して初期化する

最終的なデプロイメントとしては、PyTorch Lightning モデルを Torchscript にエクスポートし、PyTorch の JIT コンパイラを使用してデプロイします。モデルをエクスポートするには、トレーニング スクリプトに次のセクションを追加するだけです。

図5

このための Python API は通常の PyTorch の例と同じです。

  1. 輸入トーチ
  2. torchからjitをインポート
  3. トランスフォーマーからのインポート(
  4. 自動モデルシーケンス分類、
  5. 自動設定、
  6. オートトークナイザー
  7. クラス PythonPredictor:
  8. def __init__(self, config):
  9. self.device = "CPU"  
  10. self.tokenizer = AutoTokenizer.from_pretrained( "albert-base-v2" )
  11. self.model = jit.load ( "model.ts" )
  12. def predict(自己, ペイロード):
  13. 入力 = self.tokenizer.encode_plus(ペイロード[ "text" ], return_tensors= "pt" )
  14. 予測 = self.model(**入力)[0]
  15. (予測[0] > 予測[1])の場合:
  16. 戻り値: { "class" : "unacceptable" }
  17. それ以外
  18. 戻り値: { "class" : "acceptable" }
  19. GitHubホストされている rawpredictor.py を表示

YAML は以前と同じで、もちろん CLI コマンドも同じです。必要であれば、古い predictor.py スクリプトを新しいスクリプトに置き換えて、$ cortex deploy を再度実行するだけで、以前の PyTorch API を更新して新しいモデルを使用することもできます。

図6

Cortex はここでローリング アップデートを自動化し、新しい API を作成して古い API と交換することで、モデルの更新間のダウンタイムを防止します。

それでおしまい。これで、Torchscript モデルから予測を行うためのリアルタイム推論用の完全に機能する予測 API が手に入りました。

では、どの方法を使用すればよいのでしょうか?

当然の疑問は、どのアプローチが最も効果的かということです。実のところ、ここでは簡単な答えはなく、モデルによって異なります。

ONNX は、BERT や GPT-2 などの Transformer モデルに対して優れた最適化を提供します (CPU で 40 倍のスループット向上を測定)。他のモデルの場合、Torchscript は標準の PyTorch よりもパフォーマンスが優れている可能性がありますが、すべてのモデルを Torchscript にきれいにエクスポートできるわけではないため、いくつか注意点があります。

幸いなことに、3 つのアプローチをすべて並行してテストして、特定の API に最も適したものを確認できます。

元のタイトル: PyTorch Lightning モデルを本番環境にデプロイする方法、著者: Caleb Kaiser

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  AIが伝統的な製造業のデジタル進化を促し、国内のスマート工場は活力に満ち溢れている

>>:  AI業界は依然として寒い冬に:資金調達規模はピーク時の半分以下、上場ブームは倒産の波を伴う

ブログ    

推薦する

5年後に最もホットなものは何でしょうか? 2025 年のトップ 10 トレンド: ゼロ検索時代の到来

[[273076]]ファーウェイは8月8日、世界産業展望GIV@2025を発表し、次のように予測した...

AIをベッド管理に適用し、追跡予測により患者にベッドの空きを確保

[[228998]]画像出典: Visual China医療分野はAIが進歩していく上で重要な方向で...

...

OpenAI も参入したいと考えている GPU とは一体何でしょうか?

ChatGPTなどの大規模言語モデルがAI変革の新たな波を引き起こすにつれ、AIチップの不足はます...

...

それでおしまい? Gptsのプロンプト単語をランダムにクロールします

11月7日のOpenAI開発者会議でサム・アルトマンがGptsを正式に発表しリリースして以来、Gpt...

人工知能とモノのインターネット:自然災害への新たな対応アプローチ

より持続可能な環境を目指して、私たちは革新的な技術を活用して自然災害による損失を最小限に抑える努力を...

このオープンソースプロジェクトは、Pytorchを使用して17の強化学習アルゴリズムを実装しています。

強化学習は過去 10 年間で大きな進歩を遂げ、現在ではさまざまな分野で最も人気のあるテクノロジーの ...

行列分解はディープラーニングに勝る! MIT が時系列データベース tspDB をリリース: 機械学習に SQL を使用

人類が歴史から学んだ唯一の教訓は、人類は歴史から何も学べないということだ。 「しかし、機械は学習でき...

...

西夏文字の認識を例にとると、人工知能は歴史理解にどのように役立つか

以前、チャット中に友人が人工知能についての印象を「西洋的」「商業的」「未来志向」という 3 つの言葉...

CPP アルゴリズム問題のための共通コンテナ技術

[[413003]]アルゴリズムの問​​題を解決するときに CPP でよく使用されるコンテナ テクニ...

AIOpsを始める前に知っておくべきこと

AIOps は、その優れたパフォーマンスにより、業界で幅広い注目と支持を集めています。AIOps が...

AIファイナンスブームの背後にはアリババとスタートアップ企業独自の狙いがある

中国の人工知能分野の二大大手であるMegvii TechnologyとSenseTime Techn...