100 日で機械学習: モデルのトレーニングが完了したら、次は何をする?

100 日で機械学習: モデルのトレーニングが完了したら、次は何をする?

機械学習をマスターするための 100 日 | 1 日目から 62 日目までのコレクション

みなさんこんにちは。私はラオ・フーです。

「100日で機械学習」シリーズも久しぶりの更新です。最近は、機械学習モデルのデプロイやディープラーニングフレームワークの開発に使える、gRPC を使ったオープンソースフレームワークを取り上げています。この記事は「100日で機械学習」の続編です。一緒に gRPC を探索してみましょう。

gRPC(リモートプロシージャコール)

gRPC は Google によって開発された、言語やプラットフォームに依存しないオープンソースの RPC フレームワークです。
RPC (リモート プロシージャ コール) は、基盤となるネットワーク テクノロジを理解していなくても、ネットワーク経由でリモート コンピュータ プログラムにサービスを要求するプロトコルです。使用時には、クライアントはローカル関数を呼び出すのと同じように、サーバーが提供するインターフェースを呼び出します。

たとえば、サーバー A とサーバー B の 2 つのサーバーがあります。サーバー A にはアプリケーションがデプロイされています。サーバー B のアプリケーションが提供する関数/メソッドを呼び出したい場合、それらは同じメモリ空間にないため、直接呼び出すことはできません。ネットワークを使用して呼び出しのセマンティクスを表現し、呼び出しデータを伝達する必要があります。

RPC はアイデアやメカニズムのようなもので、実装方法はたくさんあります。gRPC 以外にも、Alibaba の Dubbo、Facebook の Thrift、Twitter の Finagle などがあります。

gRPC は、サービスを定義し、リモートで呼び出すことができるメソッド (パラメーターと戻り値の型を含む) を指定するという概念に基づいています。このインターフェースをサーバー側に実装し、gRPC サーバーを実行してクライアント呼び出しを処理します。クライアント側にスタブがあると、サーバー側の同じメソッドのように動作できます。 C++ で gRPC サーバーを作成し、Go、Python、Ruby でクライアントを簡単に作成できます。

上図の Protocbuf は gRPC のデータシリアル化ツールです。Protobuf を使用してデータをバイナリ データ ストリームにシリアル化することで、異なる言語 (proto3 は C++、Java、Python、Go、Ruby、Objective-C、C# をサポート) で記述され、異なるプラットフォームで実行されるアプリケーション間でデータを交換できるようになります。 ps: Protocbuf も Google によってオープンソース化されています。

Protocol Buffer は、proto ファイルをコンパイルして言語関連のコード ファイルを生成するコンパイル ツールを公式に提供しており、コーディングの作業負荷を大幅に軽減できます。シリアル化プロトコルの場合、ユーザーはビジネス オブジェクト自体、つまり IDL 定義にのみ焦点を当てる必要があり、シリアル化およびデシリアル化コードはツールによって生成されるだけで済みます。

ProtoBuf プロトコルのワークフローの詳細な説明 gRPC の例 - 機械学習モデルの展開

インスタンスを起動する前に、gRPCと関連ツールをインストールする必要があります。

pip インストール -U grpcio
pip インストール -U grpcio-tools
pip インストール -U プロトコルバッファ

  • gRPC の使用には通常、次の手順が含まれます。
  • protobuf を通じてインターフェースとデータ型を定義する
  • gRPC サーバーコードの作成
  • gRPC クライアントコードの作成

アイリス データセットを例に挙げてみましょう。ランダム フォレスト分類器を gRPC サーバーにデプロイし、クライアントはアイリスの種類を予測するリクエストを送信します。

0. ランダム フォレスト分類モデルをトレーニングし、トレーニング済みのモデルを pkl ファイルとして保存します。 # トレーニングモデル.py
sklearnからデータセットをインポートする
sklearn.pipeline からパイプラインをインポートします
joblibをインポートする
sklearn.ensemble から RandomForestClassifier をインポートします

main() を定義します:
clf = ランダムフォレスト分類器()
p = パイプライン([('clf', clf)])
p.fit(X, y)

ファイル名_p = 'IrisClassifier.pkl'
joblib.dump(p, ファイル名_p)
print('モデルを保存しました!')

__name__ == "__main__" の場合:
アイリス = datasets.load_iris()
X, y = iris.data、iris.target
主要()
1. protobufを介してインターフェースとデータ型を定義する

新しいiris_demo.protoファイルを作成する

構文 = "proto3";

パッケージアイリス;

メッセージ IrisPredictRequest // パラメータ 1 を定義する
float sepal_length = 1; // パラメータフィールド 1
float sepal_width = 2; // パラメータフィールド 2
float petal_length = 3; // パラメータフィールド 3
float petal_width = 4; // パラメータフィールド 4
}

メッセージ IrisPredictResponse{//パラメータ 1 を定義する
int32 種 = 1;
}

サービスIrisPredictor{// サービスの定義
rpc predict_iris_species(IrisPredictRequest) は (IrisPredictResponse) を返します{}
}

proto ファイル形式は通常、次の 3 つの部分で構成されます。

  • ヘッダーの構文では、バージョン番号が「proto3」として示されています。これは必ず記述する必要があります。理由はありません。
  • 中央のメッセージは、predict_iris_species メソッドのパラメーター IrisPredictRequest と IrisPredictResponse、およびパラメーター フィールドの型を定義します。
  • 最後のサービスは、RPC メソッド predict_iris_species を含むサービス IrisPredictor を定義します。ここで複数の RPC メソッドを定義し、メッセージ内の対応するパラメータを定義できます。

2. gRPC protobuf を使用して Python ライブラリ関数を生成します python -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. ./iris_demo.proto
で:

-Iはソースファイルへのパスを指定します

--python_out で、xxx_pb2.py の出力パスを指定します。他の言語を使用する場合は、対応する言語のオプションを使用してください。

--grpc_python_out はxxx_pb2_grpc.pyファイルの出力パスを指定します

--*.proto はコンパイルされる proto ファイルです。

実行が正常に完了すると、iris_demo_pb2.py (メッセージシリアル化クラスを含む) と iris_demo_pb2_grpc.py (サーバー Stub クラスとクライアント Stub クラス、および実装されるサービス RPC インターフェイスを含む) が自動的に生成されます。これら 2 つの py ファイルの詳細を気にする必要はなく、サーバーとクライアントでそれらを呼び出す方法を知るだけで済みます。

この例では、次の方法を使用します。
xxx_pb2.py
├── xxx_pb2.IrisPredictRequestは特徴データを渡すために使用されます ├── xxx_pb2.IrisPredictResponseは予測に使用されます

_pb2_grpc.py は、
├── xxx_pb2_grpc.IrisPredictorServicer サーバー スタブ クラス ├── xxx_pb2_grpc.IrisPredictorStub クライアント スタブ クラス

3. サーバーを書く

ここでの重要なポイントは、IrisPredictor クラスの predict_iris_species メソッドを定義し、iris_demo_pb2_grpc.py の add_IrisPredictorServicer_to_server メソッドを使用して IrisPredictor をサーバーに追加することです。 serve 関数は、4 つのワーカーのスレッド プールを使用して gRPC の実行方法を定義します。

# iris_prediction_server.py
grpc をインポートする
同時輸入先物から
インポート時間
ジョブライブラリをインポートする
iris_demo_pb2をインポートする
iris_demo_pb2_grpc をインポートする
インポートpredict_iris
sklearn.ensemble から RandomForestClassifier をインポートします

クラス IrisPredictor(iris_demo_pb2_grpc.IrisPredictorServicer):

@クラスメソッド
def get_trained_model(cls​​):
cls._model = joblib.load('IrisClassifier.pkl')
cls._model を返す

def predict_iris_species(自己、リクエスト、コンテキスト):
モデル = self.__class__.get_trained_model()
sepal_length = リクエスト.sepal_length
sepal_width = リクエスト.sepal_width
petal_length = リクエスト.petal_length
petal_width = リクエスト.petal_width
結果 = モデル.予測(
[[萼片の長さ、萼片の幅、花弁の長さ、花弁の幅]])
応答 = iris_demo_pb2.IrisPredictResponse(種 = 結果[0])
返答 # 不明

def run():
サーバー = grpc.server(futures.ThreadPoolExecutor(max_workers=4))
iris_demo_pb2_grpc.add_IrisPredictorServicer_to_server(
IrisPredictor()、サーバー)
server.add_insecure_port('[::]:50055')
サーバーを起動します。
print("grpc サーバーが起動しました...")
print("ポート50055でリッスン中")
server.wait_for_termination()

__name__ == '__main__' の場合:
走る()

4. クライアントに手紙を書く

クライアント ロジックはよりシンプルになり、gRPC サービスに接続してから呼び出しを開始します。

# iris_prediction_client.py
grpc をインポートする
iris_demo_pb2をインポートする
iris_demo_pb2_grpc をインポートする

def run():
チャネル = grpc.insecure_channel('localhost:50055')
スタブ = iris_demo_pb2_grpc.IrisPredictorStub(チャネル)
リクエスト = iris_demo_pb2.IrisPredictRequest(
萼片の長さ=6.7,
萼片幅=3.0,
花びらの長さ=5.2、
花びらの幅=2.3)
レスポンス = stub.predict_iris_species(リクエスト)
print('予測は:', response.species)

__name__ == '__main__' の場合:
走る()

5. RPCを呼び出す

まずサーバーを起動する

$ python iris_prediction_server.py
grpc サーバーの起動...
ポート50055でリッスン中

別のターミナルでクライアント コードを実行し、gRPC サービスを呼び出します。予測結果は次のとおりです。

$ python iris_prediction_client.py
予測は:2
参照

<<:  物流と輸送における人工知能の将来的な役割

>>:  人工知能技術の出発点と終着点

ブログ    

推薦する

自動運転車がキャンパスの食事を配達するために走行中:サービス料金は15分以内で13元にも達する

海外メディアの報道によると、米国のジョージ・メイソン大学は、無人車両による食品配達サービスを開始し、...

学覇君主任科学者陳瑞峰:テクノロジーを活用して知識のサイロ化を減らし、教育の効率化を実現する

[51CTO.comからのオリジナル記事] 学習圧力が高く、教育資源の配分が不均衡な中国の教育システ...

ハードコア科学: たった一文で、話題の「ニューラル ネットワーク」とは何なのか説明できますか?

私の誠意を示すために、この短くて鋭い真実をここに述べます。ニューラル ネットワークは、 相互接続され...

Karpathy が OpenAI を離れ、2 時間の AI コースを開始! GPTトークナイザーをゼロから構築する

OpenAIを去った技術の第一人者、カルパシー氏はついにオンラインで2時間のAI講座を開始した。 —...

プログラマーを夢中にさせるソートアルゴリズムに関するビデオ

ルーマニア人はダンスが大好きな国民です。古いルーマニア映画「チプリアン・ボロンベスク」をご覧になった...

...

人工知能と人間の知能のギャップは何でしょうか?

AlphaGoがイ・セドルを破った後、人類の知能の最後の高みも人工知能によって征服されたと誰もが言...

...

音声分析:自動運転車の鍵となる技術

サプライチェーン管理、製造業務、モビリティサービス、画像およびビデオ分析、音声分析の進歩により、次世...

...

LLaVA-1.6は非常に強力で、Gemini Proを上回り、推論機能とOCR機能が向上しています。

昨年 4 月、ウィスコンシン大学マディソン校、マイクロソフト リサーチ、コロンビア大学の研究者が共同...

...

畳み込みニューラル ネットワークの実践 - Keras を使用して猫を識別する

近年、ディープラーニングの分野における畳み込みニューラルネットワーク(CNN または ConvNet...

研究者は人工知能を使って、膨大なデータに隠された異常をリアルタイムで発見する

全国的な送電網の障害を特定することは、巨大な干し草の山から針を見つけるようなものです。米国全土に設置...

...