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

ブログ    
ブログ    
ブログ    

推薦する

AI「黒ヘルメット」が成都でデビュー、警察が2分で路上で数百人の体温を検査!

[[317566]] 、新型コロナウイルスは世界的な感染拡大段階に入り、記事執筆時点で中国国内の累...

ロボット工学の未来:人間とロボットのコラボレーション

IoT テクノロジー、ロボット、人間が相互運用されると、高度なロボット機能が実現され、新しいアプリケ...

ガートナー:AIと自動化は次世代SASEの重要な機能となる

近年、セキュア アクセス サービス エッジ (SASE) テクノロジーは急速に発展し、産業界で広く使...

デイリーアルゴリズム: 有効な括弧

[[420388]] '('、')'、'{'、...

MNISTとCIFAR 10を100%の精度で「解いた」と主張する人もいる

MNIST 認識の精度は 100% に達しましたか?最近、プレプリントプラットフォームarXivに掲...

囲碁をプレイするのはとても簡単です。AlphaZero は量子コンピューティングをプレイし始めます!

過去数十年にわたる量子物理学技術の探求において、最も注目を集めているのは量子コンピュータです。 [[...

「アドビの父」が82歳で逝去!ガレージで始まり、PostScriptを発明し、伝説的な人生で世界を変えた

アドビの共同創業者ジョン・ワーノック氏が19日、82歳で亡くなった。本日、Adobe は公式に発表を...

...

変革管理における生成AIの課題

AI が社会に重大なリスクをもたらすという警告が見出しで報じられているにもかかわらず、ボストン コン...

ディープラーニングの背後にある数学的アイデアを分析する

ディープ ニューラル ネットワーク (DNN) は、基本的に複数の接続されたパーセプトロン (パーセ...

...

機械学習モデルが公平かどうかを簡単に確認する方法

[[361220]] [51CTO.com クイック翻訳] 私たちはますます分断が進む世界に住んでい...

人工知能の基礎技術は成熟し、AIは今後10年間で私の見方を完全に変えた

人工知能の黄金の10年基礎技術は基本的に安定しており、拡大シナリオは流行の10年を迎えています。中国...

中科世宇の王金橋氏:5Gは新しい警察アプリケーションを強化し、交通管理の「細かく科学的な」管理を改善します

最近、「つながりとインテリジェンス、より安全な世界の構築」をテーマにした2021年世界セキュリティ博...

今後、セキュリティ分野で顔認識技術はどのように発展していくのでしょうか?

顔認識とは、顔の特徴情報の本人分析を利用して本人認証を行う生体認証技術を指します。人気の生体認証技術...