深層学習モデルの推論展開に一般的に使用されるフレームワークの概要記録

 深層学習モデルの推論展開とは、リアルタイムの予測または推論のために、トレーニングされた深層学習モデルを実際のシナリオに適用するプロセスを指します。以下は、深層学習モデル推論の展開に関する一般的な手順と関連する考慮事項です。
モデルの選択とトレーニング: まず、タスクに適した深層学習モデルを選択し、ラベル付きデータを使用してそれをトレーニングします。一般的な深層学習フレームワークには、TensorFlow、PyTorch などが含まれます。
モデルの最適化と圧縮: 導入フェーズ中のモデルの効率とパフォーマンスを向上させるために、モデルを最適化して圧縮できます。たとえば、枝刈り (プルーニング) ではモデル内の不要なパラメーターや接続を削減できます。量子化 (量子化) ではモデルの数値精度を下げてモデルのサイズと計算量を削減できます。蒸留 (知識蒸留) ではより小さなモデルを使用してメイン モデルの知識を転送できます。
推論エンジンの選択: 特定のニーズとプラットフォームの制約に基づいて、適切な推論エンジンを選択します。一般的に使用される推論エンジンには、TensorRT、OpenVINO、ONNX Runtime などが含まれます。これらのエンジンは、さまざまなハードウェア デバイス向けに最適化されており、効率的なモデル推論機能を提供します。
ハードウェア プラットフォームの選択: 推論エンジンの要件に従って、深層学習モデルを実行するのに適切なハードウェア プラットフォームを選択します。一般的なハードウェア プラットフォームには、CPU、GPU、FPGA、専用の深層学習プロセッサが含まれます。
モデルの展開と統合: 最適化された深層学習モデルをターゲット環境に展開し、他のシステムまたはアプリケーションと統合します。フレームワークによって提供される API を使用することも、カスタム コードを作成してモデルの呼び出しと統合を実現することもできます。
パフォーマンスの最適化と高速化: 導入フェーズでは、実際のニーズに応じてモデルのパフォーマンスを最適化し、高速化できます。たとえば、バッチ推論 (Batch Inference) を通じてデータ送信と計算のオーバーヘッドを削減し、非同期推論 (Asynchronous Inference) を使用して同時処理能力を向上させます。
モデルの更新とメンテナンス: モデルは、パフォーマンスと精度を維持するために定期的に更新およびメンテナンスされます。バージョン管理やモデルの移行とともに、新しいデータでの再トレーニングや微調整が必​​要になる場合があります。
深層学習モデルの推論展開のプロセスでは、モデルの効果的な動作と信頼性を確保するために、データのプライバシー、セキュリティ、パフォーマンスの監視、エラー処理などの要素も考慮する必要があります。さらに、大規模なデプロイメントの場合、Docker などのコンテナー化テクノロジーを使用して、モデルの推論サービスをより適切に管理および拡張できます。

ここでは主に TensorFlow Servicing、OpenVINO、TensorRT、ONNX Runtime、TFLite を例として紹介します。

一、TensorFlow サービス

TensorFlow Serving は、推論用にトレーニングされた TensorFlow モデルをデプロイするためのオープンソース フレームワークです。実稼働環境での機械学習モデルのデプロイと管理を容易にする、高性能、スケーラブル、信頼性の高いサービスを提供します。

TensorFlow Serving の主な特徴と機能を以下に示します。

複数のモデル形式のサポート: TensorFlow Serving は、SavedModel、tf.estimator によってエクスポートされたモデル、Keras HDF5 モデルなどを含む、複数の一般的なモデル形式をサポートします。これにより、ユーザーは推論展開にさまざまなモデル形式を簡単に使用できるようになります。

ハイパフォーマンスなモデルの読み込みと推論: TensorFlow Serving は、効率的なモデルの読み込みと推論メカニズムを使用し、モデルをプリロードしてメモリに保持することで、低レイテンシーのモデル推論サービスを実現します。さらに、マルチスレッドと非同期リクエスト処理もサポートし、同時処理能力を向上させます。

柔軟なモデル バージョン管理: TensorFlow Serving を使用すると、複数のモデル バージョンを同時にデプロイでき、柔軟なモデル バージョン制御および管理機能が提供されます。このようにして、ユーザーは A/B テスト、増分アップグレード、ロールバック操作を簡単に実行して、モデルの更新とデプロイのニーズを満たすことができます。

分散システムのサポート: TensorFlow Serving は分散システム アーキテクチャをサポートしており、推論ワークロードを複数のコンピューティング ノードに分散して、高い同時実行性と高可用性を実現できます。ユーザーは、大規模な実稼働環境のニーズを満たすために、必要に応じて水平拡張と負荷分散を実行できます。

RESTful API と gRPC インターフェイス: TensorFlow Serving は RESTful API と gRPC インターフェイスを提供し、HTTP または RPC を通じてモデル推論リクエストを行うことができます。このようにして、ユーザーは他のシステムやアプリケーションと簡単に統合し、クロスプラットフォームのサービス機能を提供できます。

モニタリングとロギング: TensorFlow Serving には、モデルの使用状況、パフォーマンス メトリクス、エラー メッセージをリアルタイムで追跡するためのモニタリング機能とロギング機能が組み込まれています。これは、ユーザーがパフォーマンスの最適化、トラブルシューティング、システムのメンテナンスを行うのに役立ちます。

要約すると、TensorFlow Serving は、トレーニングされた TensorFlow モデルを運用環境に簡単かつ効率的にデプロイできる強力で柔軟なフレームワークを提供します。その機能には、複数のモデル形式のサポート、高性能モデルの読み込みと推論、柔軟なモデルのバージョン管理、分散システムのサポート、複数のインターフェイスの選択肢、監視とログ機能が含まれます。これらの機能により、TensorFlow Serving は機械学習モデル推論の展開に推奨されるフレームワークの 1 つになります。

次に、手書き数字認識を例としてコード例を示します。

1、训练模型:
首先,需要训练并保存一个手写数字识别模型。这里假设已经通过TensorFlow训练好了一个模型,并保存在/path/to/model路径下。

2、安装TensorFlow Serving:
安装TensorFlow Serving可以通过以下命令完成:
pip install tensorflow-serving-api

3、启动TensorFlow Serving服务器: 使用以下命令启动TensorFlow Serving服务器,并指定要加载的模型路径:
$ tensorflow_model_server --port=8501 --model_name=handwritten_digit --model_base_path=/path/to/model/
其中,--port指定服务器的端口号,--model_name指定模型的名称,--model_base_path指定模型的存储路径。

4、客户端代码: 使用Python编写一个客户端脚本来进行推理请求。以下是一个简单的示例代码:
import requests
import numpy as np

# 准备要推理的手写数字图片数据
image = np.random.rand(28, 28)  # 替换成实际的手写数字图片数据

# 构建请求的JSON数据
data = json.dumps({"signature_name": "serving_default", "instances": [image.tolist()]})

# 发送推理请求
headers = {"content-type": "application/json"}
response = requests.post('http://localhost:8501/v1/models/handwritten_digit:predict', data=data, headers=headers)

# 解析推理结果
predictions = json.loads(response.text)['predictions']
predicted_label = np.argmax(predictions[0])

print("Predicted Label:", predicted_label)

2、OpenVINO

OpenVINO (Open Visual Inference and Neural Network Optimization) は、ディープ ラーニング モデルの推論展開のためにインテルが開発したオープンソース ツール スイートです。高性能、低遅延、クロスプラットフォームのソリューションを提供し、ユーザーがさまざまなハードウェア デバイス上でディープ ラーニング モデルを展開および最適化できるようにします。
OpenVINO フレームワークの主な特徴と機能を以下に示します。
モデルの最適化: OpenVINO は、専用のツールを使用してディープ ラーニング モデルを最適化し、推論パフォーマンスを向上させます。これには、モデルのサイズを縮小し、計算を削減し、モデルの効率を向上させるためのモデル圧縮、量子化、枝刈りなどの手法が含まれます。
ハードウェア アクセラレーション: OpenVINO は、Intel CPU、VPU (Vision Processing Unit)、FPGA など、さまざまな Intel ハードウェア アクセラレータをサポートします。これらのハードウェア デバイス向けに最適化されており、深層学習推論の可能性を最大限に高めます。
クロスプラットフォーム互換性: OpenVINO フレームワークは、さまざまなオペレーティング システム (Windows、Linux など) およびハードウェア プラットフォーム (x86 アーキテクチャ、ARM アーキテクチャなど) をサポートし、ユーザーがさまざまな環境でディープ ラーニング モデルを展開して実行できるようにします。
複数の推論エンジン: OpenVINO フレームワークには、TensorFlow、Caffe、MXNet などの複数の推論エンジンが含まれています。これらのエンジンは、モデルを OpenVINO 固有の中間表現 (IR) に変換することで導入でき、ハードウェア アクセラレータを活用して効率的なモデル推論を実現します。
非同期推論のサポート: OpenVINO フレームワークは非同期推論をサポートしており、複数の推論リクエストを同時に処理できるため、同時パフォーマンスとスループットが向上します。これは、リアルタイム アプリケーションのシナリオでは特に重要です。
統合ツールとライブラリ: OpenVINO は、モデル変換、パフォーマンス分析、モデルの最適化、展開などのタスク用の一連のツールとライブラリを提供します。たとえば、モデル オプティマイザーは深層学習モデルを OpenVINO IR 形式に変換するために使用され、推論エンジンはモデル推論を実行するために使用されます。
複数の言語とインターフェースのサポート: OpenVINO は、C++、Python、Java、RESTful API などの複数のプログラミング言語とインターフェースをサポートします。これにより、ユーザーは使い慣れたプログラミング言語を使用してアプリケーションを開発および統合できます。
要約すると、OpenVINO は、モデルの最適化、ハードウェア アクセラレーション、クロスプラットフォーム互換性、複数の推論エンジン、非同期推論、統合ツールとライブラリ、および複数の言語とインターフェイスを特徴とする強力な深層学習モデル推論展開フレームワークです。これにより、ディープ ラーニング モデルをさまざまなハードウェア デバイス上で迅速かつ効率的に展開して実行できる、高性能、低遅延、柔軟なソリューションがユーザーに提供されます。

次に、手書き数字認識を例として、コードの実装例を示します。

1、准备模型:
首先,需要准备一个训练好的手写数字识别模型,并将其保存为TensorFlow SavedModel格式。

2、安装OpenVINO Toolkit:
在开始之前,请确保已经按照官方文档中的指引安装了OpenVINO Toolkit,并设置了必要的环境变量。

3、转换模型:
使用OpenVINO提供的Model Optimizer工具将TensorFlow模型转换为OpenVINO的中间表示形式。打开终端并执行以下命令:
$ python <path_to_openvino>/deployment_tools/model_optimizer/mo.py --input_model /path/to/model/saved_model.pb --model_name handwritten_digit --output_dir /path/to/output_directory

4、推理代码: 使用OpenVINO的Python API编写一个进行推理的脚本。以下是一个简单的示例代码:
from openvino.inference_engine import IECore
import numpy as np

# 加载OpenVINO的推理引擎
ie = IECore()
net = ie.read_network(model='path/to/output_directory/handwritten_digit.xml', weights='path/to/output_directory/handwritten_digit.bin')
exec_net = ie.load_network(network=net, device_name='CPU')

# 准备要推理的手写数字图片数据
image = np.random.rand(28, 28)  # 替换成实际的手写数字图片数据

# 对输入数据进行预处理
preprocessed_image = preprocess(image)

# 执行推理
outputs = exec_net.infer(inputs={'input_blob_name': preprocessed_image})

# 解析推理结果
output_data = outputs['output_blob_name']
predicted_label = np.argmax(output_data)

print("Predicted Label:", predicted_label)

3、ONNX ランタイム

ONNX ランタイムは、深層学習モデル推論展開用の高性能オープンソース フレームワークであり、さまざまなハードウェア プラットフォームでのトレーニング済みモデルの迅速な展開と実行をサポートします。以下は ONNX ランタイムの詳細な紹介です。

複数のモデル形式のサポート: ONNX ランタイムは、複数のディープ ラーニング フレームワークにわたる相互運用可能なモデル表現である Open Neural Network Exchange (ONNX) 形式をサポートします。ONNX 形式をサポートすることにより、ONNX ランタイムは複数の深層学習フレームワーク (PyTorch、TensorFlow など) とシームレスに統合し、モデル推論を実行できます。

クロスプラットフォーム互換性: ONNX ランタイムは、CPU、GPU、エッジ デバイスなどの複数のハードウェア プラットフォームとオペレーティング システムを広範にサポートします。Windows、Linux、macOS などのオペレーティング システム上で実行でき、さまざまなハードウェア プラットフォーム向けに最適化されています。

高性能推論エンジン: ONNX ランタイムには、低遅延と高スループットを特徴とする高効率推論エンジンが組み込まれています。画像の最適化、自動バッチ処理、並列コンピューティングなどのさまざまな最適化手法を使用して、ハードウェア デバイスのパフォーマンスを最大化します。

モデルの最適化と変換: ONNX ランタイムは、モデルの最適化と変換のためのいくつかのツールと API を提供します。たとえば、ONNX ランタイムの Model Zoo のツールを使用すると、モデルの最適化、量子化、プルーニングを行い、モデル サイズを削減し、推論パフォーマンスを向上させることができます。

動的グラフのサポート: ONNX ランタイムは、動的グラフ モデル (PyTorch など) と静的グラフ モデル (TensorFlow など) をサポートしているため、ユーザーはこれら 2 つのモデルをシームレスに切り替えて、フレームワーク間の相互運用性を実現できます。

軽量で組み込み可能: ONNX ランタイムは、メモリ フットプリントとバイナリ サイズが小さい軽量フレームワークです。これにより、モバイル デバイスや組み込みシステムなど、リソースに制約のあるデバイスへの展開に適しています。

コミュニティのサポートとアクティビティ: ONNX Runtime は、大規模なコミュニティ サポートと活発な開発者コミュニティを備えたオープン ソース プロジェクトです。これは、ユーザーが広範なリソース、ドキュメント、サンプルから恩恵を受けられるだけでなく、タイムリーな技術サポートも受けられることを意味します。

要約すると、ONNX ランタイムは強力な深層学習モデル推論展開フレームワークであり、複数の深層学習フレームワーク間の相互運用性、クロスプラットフォーム互換性、高性能推論エンジン、モデルの最適化と変換、動的グラフのサポート、軽量性と組み込み性を特徴としています。これは、トレーニングされた深層学習モデルをさまざまなハードウェア デバイスに展開して実行するための柔軟で効率的なソリューションをユーザーに提供します。

ここでも手書き数字認識を例として、操作コードの例を示します。

1、准备模型:
首先,需要准备一个训练好的手写数字识别模型,并将其保存为ONNX格式。

2、安装ONNX Runtime:
在开始之前,请确保已经安装了ONNX Runtime库。可以使用以下命令安装:
pip install onnxruntime

3、加载并执行模型: 使用ONNX Runtime的Python API编写一个进行推理的脚本。以下是一个简单的示例代码:
import onnxruntime
import numpy as np

# 加载和初始化模型
sess = onnxruntime.InferenceSession('/path/to/model/handwritten_digit.onnx')

# 准备要推理的手写数字图片数据
image = np.random.rand(28, 28)  # 替换成实际的手写数字图片数据

# 对输入数据进行预处理
preprocessed_image = preprocess(image)

# 执行推理
inputs = {'input_blob_name': preprocessed_image}
outputs = sess.run(None, inputs)

# 解析推理结果
output_data = outputs[0]
predicted_label = np.argmax(output_data)

print("Predicted Label:", predicted_label)

4、TensorRT

TensorRT (Tensor Runtime) は、NVIDIA によって開発された深層学習モデル推論のための高性能の最適化および展開フレームワークです。深層学習モデルの推論速度を高速化し、さまざまなハードウェア プラットフォーム上で低遅延のリアルタイム推論を提供できます。

以下は、TensorRT フレームワークの詳細な紹介です。

モデルの最適化とネットワーク層の融合: TensorRT は、精度の調整、ネットワーク層の融合、テンソルの再配置など、一連の最適化手法を使用して深層学習モデルを最適化します。これらの最適化手法により、モデルの精度を維持しながら、モデルの計算、メモリ フットプリント、待ち時間が削減されます。

Tensor コア: TensorRT は、テンソル コア (Tensor Core) を使用してディープ ニューラル ネットワークの計算を高速化します。Tensor コアは、高度な並列行列演算を実行できる NVIDIA GPU のハードウェア ユニットであり、モデル推論を大幅に高速化します。

自動混合精度: TensorRT は自動混合精度をサポートしており、浮動小数点演算をより低精度の演算に自動的に変換して推論パフォーマンスを向上させます。半精度 (FP16) 計算を活用することで、メモリ帯域幅とモデルの計算を大幅に削減でき、推論が高速化されます。

動的形状のサポート: TensorRT は動的形状 (Dynamic Shapes) をサポートします。つまり、モデルの計算グラフは実行時に入力形状に従って動的に調整されます。これは、バッチ サイズが固定されていない可変長シーケンス データを扱う場合に非常に便利で、モデルの柔軟性と汎用性が向上します。

クロスプラットフォーム互換性: TensorRT は、NVIDIA GPU、NVIDIA Jetson シリーズ組み込みデバイス、x86 ベースの CPU など、複数のハードウェア プラットフォームとオペレーティング システムのサポートを提供します。また、一般的な深層学習フレームワーク (TensorFlow、PyTorch など) とも統合されているため、ユーザーはトレーニングされたモデルを TensorRT 推論エンジンに簡単に変換できます。

グラフの最適化と層の融合: TensorRT は、グラフの最適化技術を使用してニューラル ネットワークの計算グラフを再編成および合理化し、層の融合を実行してメモリ使用量と計算を削減します。この最適化により、推論パフォーマンスが大幅に向上し、モデルの記憶領域が削減されます。

複数の推論エンジンのサポート: TensorRT は、ユーザーが TensorRT に最適化されたモデルを統合およびデプロイするために使用できる C++ および Python API を提供します。さらに、TensorRT は、ONNX 形式のモデルを TensorRT 推論エンジンに変換するために使用される ONNX-TensorRT コンバーターなどのいくつかの補助ツールも提供します。

要約すると、TensorRT は、モデルの最適化とネットワーク層融合、テンソル コア アクセラレーション、自動混合精度、動的形状サポート、クロスプラットフォーム互換性、グラフ最適化、層融合などの機能を備えた強力な深層学習モデル推論展開フレームワークです。これにより、深層学習モデルの推論パフォーマンスが大幅に向上し、さまざまなハードウェア デバイス上で効率的なリアルタイム推論が可能になります。

また、手書き数字認識を例として、オペレーション コードの例を示します。

1、准备模型:
首先,需要准备一个训练好的手写数字识别模型,并将其保存为TensorFlow SavedModel或ONNX格式。

2、安装TensorRT:
在开始之前,请确保已经按照官方文档中的指引安装了TensorRT,并设置了必要的环境变量。

3、转换模型:
使用TensorRT提供的Model Optimizer工具将TensorFlow模型或ONNX模型转换为TensorRT格式。打开终端并执行以下命令:
$ trtexec --onnx=/path/to/model/handwritten_digit.onnx --saveEngine=/path/to/model/handwritten_digit.trt
其中,/path/to/model/handwritten_digit.onnx是原始模型的路径,/path/to/model/handwritten_digit.trt是转换后TensorRT模型的保存路径。

4、推理代码: 使用TensorRT的Python API编写一个进行推理的脚本。以下是一个简单的示例代码:
import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit
import numpy as np

# 加载TensorRT Engine
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
with open('/path/to/model/handwritten_digit.trt', 'rb') as f, trt.Runtime(TRT_LOGGER) as runtime:
    engine = runtime.deserialize_cuda_engine(f.read())

# 创建执行上下文
with engine.create_execution_context() as context:
    # 分配输入和输出内存
    inputs, outputs, bindings, stream = allocate_buffers(engine)

    # 准备要推理的手写数字图片数据
    image = np.random.rand(28, 28)  # 替换成实际的手写数字图片数据

    # 对输入数据进行预处理
    preprocessed_image = preprocess(image)

    # 将输入数据复制到GPU内存中
    np.copyto(inputs[0].host, preprocessed_image.ravel())

    # 执行推理
    context.execute_async(bindings=bindings, stream_handle=stream.handle)
    cuda.streams.synchronize()

    # 解析推理结果
    output_data = np.array(outputs[0].host)
    predicted_label = np.argmax(output_data)

print("Predicted Label:", predicted_label)


5、TFLite

TFLite (TensorFlow Lite) は、モバイル デバイス、組み込みシステム、IoT デバイス上の深層学習モデル推論のために Google によって開発されたフレームワークです。リソースに制約のあるデバイス向けに設計されており、軽量、高速、効率的です。

以下は、TFLite フレームワークの詳細な紹介です。

軽量モデル: TFLite は、モバイル デバイスや組み込みシステムのコンピューティング能力とストレージの制約に合わせて、ディープ ラーニング モデルの軽量変換をサポートします。TFLite は、モデルの量子化、枝刈り、最適化などの手法を通じてモデルのサイズを大幅に削減し、それによってメモリ使用量と遅延を削減できます。

高速推論エンジン: TFLite は、モバイル デバイスと組み込みシステムに高速推論エンジンを提供します。これらのエンジンは、ハードウェア アクセラレータ (GPU、DSP、NPU など) と最適化されたアルゴリズムを使用して、高性能の深層学習モデル推論を実現できます。

さまざまなハードウェア プラットフォームのサポート: TFLite は、Android および iOS デバイス、Raspberry Pi などの組み込みシステム、一部の IoT デバイスなど、さまざまな主流のハードウェア プラットフォームをサポートします。これにより、開発者はトレーニングされ最適化された深層学習モデルをさまざまなデバイスに展開できるようになります。

マルチプラットフォーム互換性: TFLite は TensorFlow フレームワークとシームレスに統合できるため、ユーザーは TensorFlow でモデルをトレーニングおよびデバッグし、デプロイメントのためにモデルを TFLite 形式に変換できます。さらに、TFLite は、開発者が使い慣れたツールや環境を使用できるように、C++、Python、Java などの複数のプログラミング言語の API も提供します。

動的グラフと静的グラフのサポート: TFLite は、動的グラフ モデルと静的グラフ モデルの両方をサポートします。動的グラフ モデル (Keras など) の場合、TFLite はモデル変換を実現する TF 2.x TFLite Converter を提供し、静的グラフ モデル (TensorFlow SavedModel など) の場合、TFLite はモデル変換を実現する TF 1.x TFLite Converter を提供します。

オフラインとオンラインの推論: TFLite は、オフラインの推論とオンラインの推論の両方をサポートします。オフライン推論は、推論タスクをデバイス上でローカルに実行する必要があるシナリオに適しており、オンライン推論はクラウド サービスと対話する必要があるシナリオに適しています。TFLite は、さまざまなニーズを満たすために、対応する API とツールを提供します。

拡張機能: TFLite は、姿勢推定、ターゲット検出、音声認識などのいくつかの拡張機能も提供します。これらの機能は、開発者がディープ ラーニング アプリケーションをより迅速に構築し、高品質の予測結果を提供するのに役立ちます。

要約すると、TFLite は、モバイル デバイス、組み込みシステム、IoT デバイス上でディープ ラーニング モデルを推論するためのフレームワークです。軽量モデル、高速推論エンジン、複数のハードウェア プラットフォームのサポート、マルチプラットフォーム互換性、動的および静的グラフのサポート、オフラインおよびオンライン推論、拡張機能という特徴があります。TFLite は、開発者がリソースに制約のあるデバイス上で深層学習モデルの効率的かつ高速な推論を実現するのに役立ちます。

また、手書き数字認識を例として、操作コードの例を示します。

1、准备模型:
首先,需要准备一个训练好的手写数字识别模型,并将其保存为TensorFlow SavedModel或Keras H5格式。

2、安装TFLite库:
在开始之前,请确保已经安装了TFLite库。可以使用以下命令安装:
pip install tensorflow

3、转换模型: 使用TFLite Converter工具将TensorFlow SavedModel或Keras H5模型转换为TFLite格式。打开终端并执行以下命令:
tflite_convert --saved_model_dir=/path/to/model/saved_model/ --output_file=/path/to/model/handwritten_digit.tflite
或:
tflite_convert --keras_model_file=/path/to/model/h5_model.h5 --output_file=/path/to/model/handwritten_digit.tflite

4、推理代码: 使用TFLite的Python API编写一个进行推理的脚本。以下是一个简单的示例代码:
import tensorflow as tf
import numpy as np

# 加载并初始化模型
interpreter = tf.lite.Interpreter(model_path='/path/to/model/handwritten_digit.tflite')
interpreter.allocate_tensors()

# 获取输入和输出张量索引
input_index = interpreter.get_input_details()[0]['index']
output_index = interpreter.get_output_details()[0]['index']

# 准备要推理的手写数字图片数据
image = np.random.rand(28, 28)  # 替换成实际的手写数字图片数据

# 对输入数据进行预处理
preprocessed_image = preprocess(image)

# 设置输入张量的值
interpreter.set_tensor(input_index, preprocessed_image)

# 执行推理
interpreter.invoke()

# 获取输出张量的值
output_data = interpreter.get_tensor(output_index)
predicted_label = np.argmax(output_data)

print("Predicted Label:", predicted_label)

6、トーチサーブ

TorchServe (Torch Server) は、深層学習モデルの推論展開のために PyTorch チームによって開発されたフレームワークです。シンプルでスケーラブルなモデル展開ソリューションを提供し、ユーザーがトレーニング済みの PyTorch モデルを運用環境に迅速に展開できるようにすることを目的としています。

以下は、TorchServe フレームワークの詳細な紹介です。

モデルのデプロイと管理:TorchServe は、ディープ ラーニング モデルをデプロイおよび管理するための簡単かつ強力な方法を提供します。ユーザーは、TorchServe コマンド ライン ツールを使用して、複数のモデル インスタンスを簡単に開始、停止、管理できます。さらに、TorchServe はモデルのホット アップデート、つまりサービスを中断せずにデプロイされたモデルを更新することもサポートしています。

マルチモデルのサポート:TorchServe は複数のモデルの同時デプロイをサポートし、RESTful API を介してこれらのモデルへのアクセスを提供します。これにより、ユーザーは同じサーバー上で複数のモデル インスタンスを同時に実行し、API 呼び出しを通じてモデル推論を実行できるようになります。

高パフォーマンスと低レイテンシ:TorchServe は、マルチスレッドや非同期操作などのテクノロジを使用して、高パフォーマンスと低レイテンシのモデル推論を実現します。また、推論パフォーマンスをさらに向上させるために、モデルのバッチ処理、モデルのウォーミング、リクエストのキャッシュなどの機能もサポートしています。

柔軟なモデル構成: TorchServe は、単純な JSON 構成ファイルを使用してモデルの推論動作を定義します。これにより、ユーザーはモデルの入出力形式、前処理および後処理操作などを簡単に設定し、ニーズに応じて調整することができます。

カスタム推論ロジック:TorchServe を使用すると、ユーザーはカスタム推論ロジックを作成してフレームワークの機能を拡張できます。ユーザーはカスタム推論ハンドラーを作成して、推論の前後にデータ変換やロギングなどの追加操作を実行できます。

クロスプラットフォーム互換性:TorchServe は、Linux、Windows、macOS などの複数のプラットフォームで実行できます。CPU および GPU 推論をサポートし、PyTorch や TorchScript などの一般的な深層学習ライブラリとシームレスに統合します。

コミュニティのサポートとアクティビティ:TorchServe は、広範なドキュメント、サンプル、チュートリアルを提供する活発な開発者コミュニティを備えたオープンソースのプロジェクトベースのフレームワークです。これにより、ユーザーはコミュニティ リソースから支援やサポートを得て、フレームワークの改善や貢献に参加できるようになります。

要約すると、TorchServe は深層学習モデルの推論展開のためのフレームワークであり、モデルの展開と管理、マルチモデルのサポート、高性能と低遅延、柔軟なモデル構成、カスタム推論ロジック、クロスプラットフォーム互換性、アクティブなコミュニティ サポートを特徴としています。TorchServe は、トレーニングされた PyTorch モデルを運用環境にデプロイし、効率的で信頼性の高いモデル推論サービスをユーザーに提供するためのシンプルでスケーラブルな方法を提供します。

また、手書きの数字を例として、操作コードの例を示します。
 

1、准备模型:
首先,需要准备一个训练好的手写数字识别模型,并将其保存为PyTorch模型文件(通常是.pth或.pt格式)。

2、安装TorchServe和TorchVision:
在开始之前,请确保已经安装了TorchServe和TorchVision库。可以使用以下命令安装:
pip install torchserve torch torchvision

3、转换为TorchScript格式: 使用PyTorch提供的torch.jit.trace函数将模型转换为TorchScript格式。以下是一个简单的示例代码:
import torch
import torchvision.transforms as transforms

# 加载并初始化模型
model = torch.load('/path/to/model/handwritten_digit.pth')
model.eval()

# 创建示例输入
example_input = torch.rand(1, 1, 28, 28)  # 替换成实际的手写数字图片数据

# 将模型转换为TorchScript格式
traced_model = torch.jit.trace(model, example_input)
traced_model.save('/path/to/model/handwritten_digit.pt')


4、配置和启动TorchServe: 创建一个配置文件 config.properties,其中包含了模型的相关信息、预处理和后处理操作等。以下是一个示例配置文件的内容:
model_name=handwritten_digit
model_file=/path/to/model/handwritten_digit.pt
handler=app.HandwrittenDigitHandler
batch_size=1
max_batch_delay=5000
initial_workers=1
synchronous=false
在上述配置文件中,model_name 是模型名称,model_file 是TorchScript模型的路径,handler 是自定义的请求处理类,batch_size 是批处理大小,max_batch_delay 是设置延迟时间,initial_workers 是初始工作进程数,synchronous 设置是否同步执行。

启动TorchServe服务器并加载模型:
torchserve --start --model-store=/path/to/model/store --models handwritten_digit=/path/to/config.properties
其中,/path/to/model/store 是模型存储目录的路径。


5、发送推理请求: 使用HTTP POST请求发送推理请求到TorchServe服务器。以下是一个简单的示例代码:
import requests
import numpy as np

# 准备要推理的手写数字图片数据
image = np.random.rand(28, 28)  # 替换成实际的手写数字图片数据

# 对输入数据进行预处理
preprocessed_image = preprocess(image)

# 构建推理请求的URL和数据
url = 'http://localhost:8080/predictions/handwritten_digit'
data = {'input': preprocessed_image.tolist()}

# 发送推理请求
response = requests.post(url, json=data)

# 解析推理结果
output_data = response.json()
predicted_label = np.argmax(output_data['predictions'])

print("Predicted Label:", predicted_label)


おすすめ

転載: blog.csdn.net/Together_CZ/article/details/131856146