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
参照

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

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

ブログ    

推薦する

静的解析に機械学習を使用する方法

機械学習と人工知能は、特にマーケティング分析とサイバーセキュリティの分野で多くの分野で広く応用されて...

シンプルで効率的なアルゴリズムが衛星IoTを現実に近づける

背景モノのインターネット (IoT) の継続的な発展は、ここ数年にわたって現実のものとなってきました...

...

2021 年の人工知能のトップ 10 トレンド

コロナウイルスのパンデミック以前、AI業界は2020年に大きな成長を遂げると予想されていました。 2...

Google DeepMind共同創設者:2028年までに人類がAGIを達成する可能性は50%

10月31日、テクノロジー系ポッドキャスト「Dwarkesh Patel」によると、Googleの...

2021年9月のドローン業界の最新動向を3分で振り返る

現在、人工知能や5Gなどの技術の助けを借りて、我が国のドローン開発は急速な成長の軌道に乗っています。...

...

クアルコム副社長ライナー・クレメント氏:「5G+AI+クラウド」は将来の産業をどのように変えるのでしょうか?

2019年国際産業インターネット革新・開発フォーラムがこのほど、第2回中国国際輸入博覧会で開催され...

なぜAlipayは携帯電話の闇市場に関与しないのでしょうか?公式回答: 犯罪者は顔認識を突破できない

「携帯電話1台で世界中を旅する」というのは、ほぼすべての人の現状です。アクセスカード、バスカード、鍵...

Google の覇権は崩壊するのか?支配から疑惑へ:20年間インターネットのトレンドを形作ってきたGoogle検索は謎に包まれている

Googleで最初に出てくるのは、スタンフォード大学の元学長ゲルハルト・カスパーの名前です。 199...

AI分野 | ゲームのルールを変える画期的なアイデア10選

[[357174]] AI の旅が始まって以来、私は無限の可能性を秘め、輝かしい歴史に足跡を残してき...

...