如何使用 TensorFlow Serving 在 Python 中部署模型?


部署機器學習模型對於使 AI 應用發揮功能至關重要,為了有效地在生產環境中服務模型,TensorFlow Serving 提供了一種可靠的解決方案。當模型經過訓練並準備好部署時,高效地服務模型以處理即時請求至關重要。TensorFlow Serving 是一個強大的工具,可以促進機器學習模型在生產環境中的順利部署。

在本文中,我們將深入探討使用 TensorFlow Serving 在 Python 中部署模型的步驟。

什麼是模型部署?

模型部署是指使經過訓練的機器學習模型可用於即時預測。這意味著將模型從開發環境轉移到生產系統,以便它能夠高效地處理傳入的請求。TensorFlow Serving 是一個專門設計的、高效能的系統,專門用於部署機器學習模型。

設定 TensorFlow Serving

首先,我們需要在系統上安裝 TensorFlow Serving。請按照以下步驟設定 TensorFlow Serving:

步驟 1:安裝 TensorFlow Serving

首先使用包管理器 pip 安裝 TensorFlow Serving。開啟命令提示符或終端並輸入以下命令:

pip install tensorflow-serving-api

步驟 2:啟動 TensorFlow Serving 伺服器

安裝完成後,執行以下命令啟動 TensorFlow Serving 伺服器:

tensorflow_model_server --rest_api_port=8501 --model_name=my_model --model_base_path=/path/to/model/directory

將 **`/path/to/model/directory`** 替換為儲存已訓練模型的路徑。

準備模型進行部署

在部署模型之前,需要將其儲存為 TensorFlow Serving 可以理解的格式。請按照以下步驟準備模型進行部署:

以 SavedModel 格式儲存模型

在 Python 指令碼中,使用以下程式碼以 SavedModel 格式儲存訓練後的模型:

import tensorflow as tf

# Assuming `model` is your trained TensorFlow model
tf.saved_model.save(model, '/path/to/model/directory')

定義模型簽名

模型簽名提供有關模型的輸入和輸出張量的資訊。使用 **`tf.saved_model.signature_def_utils.build_signature_def`** 函式定義模型簽名。這是一個示例:

inputs = {'input': tf.saved_model.utils.build_tensor_info(model.input)}
outputs = {'output': tf.saved_model.utils.build_tensor_info(model.output)}

signature = tf.saved_model.signature_def_utils.build_signature_def(
   inputs=inputs,
   outputs=outputs,
   method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
)

儲存帶有簽名的模型

要儲存帶有簽名的模型,請使用以下程式碼:

builder = tf.saved_model.builder.SavedModelBuilder('/path/to/model/directory')
builder.add_meta_graph_and_variables(
   sess=tf.keras.backend.get_session(),
   tags=[tf.saved_model.tag_constants.SERVING],
   signature_def_map={
      tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature
   }
)
builder.save

()

使用 TensorFlow Serving 服務模型

現在我們的模型已準備好,可以使用 TensorFlow Serving 來服務它。請按照以下步驟操作:

與 TensorFlow Serving 建立連線

在 Python 指令碼中,使用 gRPC 協議與 TensorFlow Serving 建立連線。這是一個示例:

from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc

channel = grpc.insecure_channel('localhost:8501')
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)

建立請求

要進行預測,請建立一個請求 protobuf 訊息,並指定模型名稱和簽名名稱。這是一個示例:

request = predict_pb2.PredictRequest()
request.model_spec.name = 'my_model'
request.model_spec.signature_name = tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
request.inputs['input'].CopyFrom(tf.contrib.util.make_tensor_proto(data, shape=data.shape))

將 **`data`** 替換為您想要進行預測的輸入資料。

傳送請求並獲取響應

將請求傳送到 TensorFlow Serving 並檢索響應。這是一個示例:

response = stub.Predict(request, timeout_seconds)
output = tf.contrib.util.make_ndarray(response.outputs['output'])

**`timeout_seconds`** 引數指定等待響應的最長時間。

測試已部署的模型

為了確保已部署的模型正常執行,務必使用示例輸入對其進行測試。以下是如何測試已部署的模型:

準備示例資料

建立一組與模型預期輸入格式匹配的示例輸入資料。

向已部署的模型傳送請求

建立請求並將其傳送到已部署的模型。

request = predict_pb2.PredictRequest()
request.model_spec.name = 'my_model'
request.model_spec.signature_name = tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
request.inputs['input'].CopyFrom(tf.contrib.util.make_tensor_proto(data, shape=data.shape))

評估輸出

將從已部署模型接收到的輸出與預期輸出進行比較。此步驟可確保模型正在進行準確的預測。

擴充套件和監控部署

隨著對預測的需求增加,必須擴充套件部署以處理大量傳入請求。此外,監控部署有助於跟蹤已部署模型的效能和執行狀況。考慮實施以下擴充套件和監控策略:

擴充套件

  • 使用多個 TensorFlow Serving 例項進行負載均衡。

  • 使用 Docker 和 Kubernetes 等平臺進行容器化。

監控

  • 收集指標,例如請求延遲、錯誤率和吞吐量。

  • 為關鍵事件設定警報和通知。

示例

以下程式示例演示瞭如何使用 TensorFlow Serving 部署模型:

import tensorflow as tf
from tensorflow import keras

# Load the trained model
model = keras.models.load_model("/path/to/your/trained/model")

# Convert the model to the TensorFlow SavedModel format
export_path = "/path/to/exported/model"
tf.saved_model.save(model, export_path)

# Start the TensorFlow Serving server
import os
os.system("tensorflow_model_server --port=8501 --model_name=your_model --model_base_path={}".format(export_path))

在上面的示例中,您需要將“/path/to/your/trained/model”替換為已訓練模型的實際路徑。該模型將使用 Keras 的 **load_model()** 函式載入。

接下來,模型將轉換為 TensorFlow SavedModel 格式,並儲存在指定的 export_path 中。

然後使用 **os.system()** 函式啟動 TensorFlow Serving 伺服器,該函式執行 tensorflow_model_server 命令。此命令指定伺服器埠、模型名稱 (your_model) 和匯出模型所在的基路徑。

請確保已安裝 TensorFlow Serving 並將檔案路徑替換為您系統的相應值。

預期輸出

伺服器成功啟動後,即可準備提供預測服務。您可以使用另一個程式或 API 向伺服器傳送預測請求,伺服器將根據載入的模型返回預測輸出。

結論

總之,將機器學習模型部署到生產環境中非常重要,以便利用其預測能力。在本文中,我們探討了使用 TensorFlow Serving 在 Python 中部署模型的過程。我們討論了 TensorFlow Serving 的安裝、準備模型進行部署、服務模型以及測試其效能。透過按照這些步驟,我們可以成功部署 TensorFlow 模型並進行精確的即時預測。

更新於:2023年7月11日

瀏覽量:187

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.