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

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

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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

AIは実際にチップを生成できます! GPT-4はわずか19回の対話で130nmチップを構築し、チップ設計業界におけるHDLの大きな課題を克服しました。

GPT-4 はすでに人間がチップを作るのに役立っています!ニューヨーク大学タンドン工学部の研究者た...

...

...

...

百度の自動運転技術は掘削機の運転を熟練ドライバーと同等の効率化に導く

海外メディアのTech Xploreによると、百度の研究ロボット工学・自動運転研究所(RAL)とメリ...

インテリジェントな人間と機械のインタラクションがデジタルサービスを新たなレベルに引き上げます

2020年という「長い」年が、あっという間に終わりを迎えようとしています。この時期を振り返ると、長い...

データ分析に人工知能を取り入れる方法

生成型 AI の台頭は、インターネットの誕生と同様の影響を及ぼしています。新しいテクノロジーが私たち...

オフライン手法の可能性を最大限に引き出すために、武漢大学とKuaishouは分離型ビデオインスタンスセグメンテーションフレームワークDVISを提案した。

ビデオセグメンテーションタスクは、画像セグメンテーションタスクの拡張版です。ビデオ内のすべてのターゲ...

Apriori アルゴリズムの紹介 (Python 実装)

[[188839]]ビッグデータの概念が普及するにつれ、ビールとおむつの話は広く知られるようになり...

大規模ニューラルネットワークに関する最新の文献のレビュー:効率的な DNN のトレーニングとメモリ使用量の節約

現代のディープラーニングおよび人工知能技術の開発には、ディープニューラルネットワーク (DNN) を...

製造業における自動化の長所と短所を探る

自動化の統合は、進化する製造業界において決定的な力となり、従来のパラダイムを再構築し、前例のない進歩...

バーチャル試着室テクノロジーの仕組み

[51CTO.com クイック翻訳]テクノロジーの進歩と発展により、バーチャル試着室が人々の生活に入...

中国の人工知能特許ランキングで、百度、テンセント、マイクロソフト、インスパーが上位4社にランクイン

12月2日、国家工業情報セキュリティ発展研究センターは「中国人工知能特許技術分析報告書」を発表し、百...