機械学習プロジェクト用の Python インターフェースを設計する方法

機械学習プロジェクト用の Python インターフェースを設計する方法

序文

機械学習プロジェクトを実行するには、まずモデルを(ほとんどの場合は予測 API として)デプロイします。この API を本番環境で動作させるには、まずモデルを提供するインフラストラクチャを構築する必要があります。これには、負荷分散、スケーリング、監視、更新などが含まれます。

[[338615]]

一見すると、これらの仕事はすべて馴染みのあるもののように思えるかもしれません。 Web 開発者と DevOps エンジニアは長年にわたりマイクロサービス インフラストラクチャの自動化に取り組んできました。確かに彼らのツールを再利用できるのでしょうか?

残念ながらできません。

ML のインフラストラクチャは従来の DevOps と似ていますが、ML に特化しているため、標準の DevOps ツールは理想的とは言えません。そのため、私たちは機械学習エンジニアリング用のオープンソース プラットフォームである Cortex を開発しました。

非常に高レベルでは、Cortex は、基盤となるインフラストラクチャ全体を自動化し、ローカルまたはクラウド上でのモデルの展開を簡素化するように設計されています。プラットフォームのコアコンポーネントは、開発者が予測 API を記述できるプログラム可能な Python インターフェイスである Predictor Interface です。

Web リクエストの予測を提供するための Python インターフェースを設計することは、数か月を要した課題でした (現在も改良中です)。ここで、私たちが開発したいくつかのデザイン原則を共有したいと思います。

1. 予測子は単なるPythonクラスです

Cortex の中核は予測子であり、基本的にはすべてのリクエスト処理コードと依存関係を含む予測 API です。 Predictor インターフェースは、これらの予測 API に対するいくつかの簡単な要件を実装します。

Cortex はモデルの提供にマイクロサービス アプローチを採用しているため、予測インターフェースは次の 2 つの点に厳密に重点を置いています。

  • モデルを初期化する
  • 予測の提供

この精神に基づき、Cortex の予測インターフェースには、残りの init__() と predict() という 2 つの関数が必要です。これらは、ほぼ予想どおりの機能を果たします。

  1. 輸入トーチ
  2. トランスフォーマーのインポートパイプラインから
  3.  
  4. クラス PythonPredictor:
  5. def __init__(self, config):
  6. # 利用可能な場合はGPUを使用する
  7. デバイス = torch.cuda.is_available() の場合は 0 、それ以外の場合は-1
  8. # モデルを初期化する
  9. self.summarizer = pipeline(task= "summarization" 、device=device)
  10.  
  11. def predict(自己, ペイロード):
  12. # 予測を生成する
  13. 要約 = self.summarizer(
  14. ペイロード[ "text" ]、num_beams=4、length_penalty=2.0、max_length=142、no_repeat_ngram_size=3
  15. #リターン予測
  16. summary[0][ "summary_text" ]を返す

初期化されると、予測子は、ユーザーがエンドポイントをクエリしたときに単一の predict() 関数が呼び出される Python オブジェクトと考えることができます。

このアプローチの最大の利点の 1 つは、ソフトウェア エンジニアリングの経験がある人なら誰でも直感的に理解できることです。データ パイプラインやモデル トレーニング コードに触れる必要はありません。モデルは単なるファイルであり、予測子はモデルをインポートして predict() メソッドを実行する単なるオブジェクトです。

しかし、このアプローチは、その構文上の魅力を超えて、皮質へのより広範なアプローチを補完する方法という点で、いくつかの重要な利点を提供します。

2. 予測は単なるHTTPリクエストです

本番環境で予測を提供するためのインターフェースを構築する際の複雑さの 1 つは、少なくとも形式においては、入力がモデルのトレーニングに使用されたデータとはほぼ確実に異なることです。

これは 2 つのレベルで機能します。

  • POST リクエストの本文は NumPy 配列ではなく、モデルが処理するために使用されるデータ構造でもありません。
  • 機械学習エンジニアリングは、モデルを使用してソフトウェアを構築することです。多くの場合、これは、GPT-2 を使用してフォーク ミュージックを作成するなど、モデルを使用してトレーニングされていないデータを処理することを意味しています。

したがって、予測インターフェースは、予測 API の入力と出力について意見を述べることはできません。予測は単なる HTTP リクエストであり、開発者はそれを自由に使用できます。たとえば、マルチモデル エンドポイントをデプロイし、リクエスト パラメータに基づいてさまざまなモデルをクエリする場合は、次のようにします。

  1. 輸入トーチ
  2. トランスフォーマーのインポートパイプラインから
  3. starlette.responsesからJSONResponse をインポートします
  4.  
  5. クラス PythonPredictor:
  6. def __init__(self, config):
  7. self.analyzer = パイプライン(タスク = "感情分析" )
  8. self.summarizer = pipeline(task= "要約" )
  9.  
  10. def predict(self, query_params, ペイロード):
  11. model_name = query_params.get( "モデル" )
  12. model_name == "sentiment"の場合:
  13. self.analyzer(payload[ "text" ])[0]を返す
  14. elif model_name == "summarizer" :
  15. サマリー = self.summarizer(ペイロード[ "テキスト" ])[0]
  16. それ以外
  17. JSONResponseを返します({ "error" : f "不明なモデル: {model_name}" }, status_code=400)

このインターフェースにより、開発者は API で自由に操作できるようになりますが、インフラストラクチャの面では Cortex がより独自の判断を下せる自然な余地も得られます。

たとえば、バックグラウンドでは Cortex は FastAPI を使用してリクエスト ルーティングを設定します。 Cortex は、自動シーケンス、監視、およびその他のインフラストラクチャ機能に関連する多くのプロセスをこのレイヤーに設定しますが、開発者がルーティングを実装する必要がある場合、これらのプロセスは非常に複雑になる可能性があります。

ただし、各 API には predict() メソッドがあるため、各 API のルートの数は同じ (1) になります。理論的には、これにより Cortex はエンジニアを制限することなくインフラストラクチャ レベルでより多くのことを実行できるようになります。

3. サービスモデルは1つのマイクロサービスのみ

スケールは、本番環境で機械学習を使用するすべての人にとって大きな懸念事項です。モデルは大きくなり(GPT-2 は約 6 GB)、計算コストが高くなり、レイテンシが大きくなる可能性があります。特にリアルタイム推論の場合、トラフィックを処理するためにスケールアップすることは困難であり、予算が限られている場合はさらに困難になります。

この問題を解決するために、Cortex は予測子を水平方向にスケーリングできるマイクロサービスとして扱います。具体的には、開発者が Cortex をデプロイすると、Cortex に API が組み込まれ、推論用に準備されたクラスターが起動され、デプロイされます。次に、ロードバランサーの背後にある Web サービスとして API を公開し、自動スケーリング、更新、および監視を構成します。

予測子インターフェースは「単なる」Python インターフェースですが、このプロセスの基礎となります。

予測子インターフェースは、コードを単一の推論単位にパッケージ化することを強制します。単一の API に必要なすべてのリクエスト処理コードは、単一の予測子に含まれています。これにより、皮質は予測要因を簡単に評価できるようになります。

こうすることで、エンジニアは、API を本番環境に準備するために、(もちろん、微調整を加えない限りは)余分な作業を行う必要がなくなります。 Cortex のデプロイメントは、デフォルトで本番環境に対応しています。

<<:  人工知能アプリケーションのための6つの主要技術、ついに誰かがわかりやすく説明

>>:  CNNとRNNについての簡単な説明

ブログ    
ブログ    

推薦する

GPT-4 がビッグモデル幻覚ランキングで優勝、NVIDIA の科学者が偽物と激しく戦う! ChatGPTのメタ版作者が抗議のため長文の記事を投稿

大型モデルにおける幻覚の問題は、業界ではよく話題になります。最近、Vectara という組織が Gi...

メンガー: 大規模分散強化学習アーキテクチャ

過去 10 年間で、強化学習 (RL) は機械学習で最も人気のある研究分野の 1 つになりました。R...

人工知能は間違いに気づくのでしょうか?

[[378419]]画像出典: Analytics India Magazine 1956年8月、...

アディダスのロボット工場で作られた靴が出荷されようとしている

アディダスがドイツに開設したロボット靴製造工場「スピードファクトリー」が正式に生産を開始したと報じら...

VRシルキーパノラマはもうすぐそこ? Googleの360°NeRFは人々に未来を垣間見せる

少し前に、CVPR 2022 が今年の論文採択結果を発表しましたが、これは提出された論文がようやく沈...

AI検出器の仕組みの概要​

翻訳者 | 劉涛レビュー | Chonglou AI ライティング検出器を使用したことがあるかもしれ...

45年前のマイクロソフトの予測が現実になりました!シャム:将来、AIの数は人類の人口を上回るだろう

本日開催された第8世代XiaoIce発表会で、XiaoIce会長で元マイクロソフトのグローバルエグゼ...

アルゴリズムの練習: 数独の基本解法

数独は紙とペンを使って遊ぶ論理ゲームです。プレイヤーは、9×9 のボード上の既知の数字に基づいて残り...

RSA という高度な暗号化アルゴリズムをご存知ですか?

以前、RSA アルゴリズムの説明をしてほしいと頼まれたことがあります。今日は私が学んだことに基づいて...

...

私たちに必要なのは人工知能ではなく人工知能だ

一拍遅ければそれは「人工的な愚かさ」であり、一歩遅れればそれは「知的な人工性」であり、一歩速ければそ...

Keras 対 PyTorch: どちらが「ナンバーワン」のディープラーニング フレームワークでしょうか?

「最初のディープラーニングフレームワークをどのように選択するか」は、初心者にとって常に頭痛の種でし...

図解機械学習: ニューラルネットワークと TensorFlow によるテキスト分類

開発者はよく、機械学習を始めたいなら、まずアルゴリズムを学ぶべきだと言います。しかし、それは私の経験...

人工知能とデータセンター: AI がリソースを大量に必要とする理由

2023 年末までに AI 生成にどれだけのエネルギーが必要になるかについての予測は不正確です。たと...

パーセプトロンの物語: 機械学習はどのようにして今日の地位に到達したのでしょうか?

[[352089]]人工知能は今、巷で話題になっています。企業は顧客やターゲットユーザーを引き付け...