PaddleServing:從模型到部署,輕鬆實現高性能在線服務

一、PaddleServing部署

PaddleServing是基於飛槳框架(PaddlePaddle)的分散式在線服務開發框架,提供了一整套從模型到部署的解決方案。PaddleServing提供了一個統一的部署框架,在支持多種推理引擎和運行時的同時,還可以對模型進行優化和線上部署。因此,PaddleServing在實際應用中具有較高的價值。

在使用PaddleServing進行部署時,我們只需要完成以下三個步驟:

  1. 模型導出:在使用PaddleServing之前,需要先在PaddlePaddle中完成模型的訓練和導出。
  2. 模型部署:使用PaddleServing提供的部署框架部署模型。
  3. 部署測試:測試部署效果,可以使用Python API或者HTTP API。

通過這三個步驟,就可以實現高效快速地將PaddlePaddle訓練好的模型部署到PaddleServing上。


# 導出模型
from paddle_serving_client import *
fetch_names = ["fc_1.tmp_2"]
feed_names = ["image"]
data = [{"image": np.ones(shape=(1, 3, 224, 224), dtype="float32")}]
client = Client()
client.load_client_config("serving_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9393"])
result = client.predict(feed=data, fetch=fetch_names, batch=True)
print(result)

二、PaddleServing部署的模型閾值

在使用PaddleServing進行部署時,我們還可以設置模型的閾值即可控制模型推理的選擇。

在代碼實現方面,可以通過在配置文件中添加閾值項,如下所示:


# 定義模型閾值
thresholds {
    item {
        key: "car"
        value: 0.9
    }
    item {
        key: "bus"
        value: 0.8
    }
}

設置模型閾值之後,就可以在推理時控制推理結果的選擇,具體代碼如下:


# 測試模型閾值
from paddle_serving_client import *
fetch_names = ["fc_1.tmp_2", "label"]
feed_names = ["image"]
data = [{"image": np.ones(shape=(1, 3, 224, 224), dtype="float32")}]
client = Client()
client.load_client_config("serving_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9393"])
result = client.predict(feed=data, fetch=fetch_names, batch=True)
print(result)

三、PaddleServing線程數

在PaddleServing中,線程數是一個影響推理速度的重要參數。一般情況下,線程數越多,可以並行處理的請求就越多,推理速度也就越快。

在代碼實現方面,可以通過修改配置文件中的服務線程數項進行設置,如下所示:


# 定義服務線程數
general_model_config {
    model_filename: "serving_server/models/mymodel"
    params_filename: "serving_server/params/mymodel"
    ...
    min_subgraph_size: 10
    ...
    max_concurrency: 300
}

使用PaddleServing進行部署時,也可以通過以下代碼設置線程數:


# 測試線程數
from paddle_serving_client import *
fetch_names = ["fc_1.tmp_2"]
feed_names = ["image"]
data = [{"image": np.ones(shape=(1, 3, 224, 224), dtype="float32")}]
client = Client()
client.load_client_config("serving_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9393"])
client.set_prediction_timeout(5000)
handle = client.predict_async(feed=data, fetch=fetch_names)
result = handle.get_result()
print(result)

四、PaddleServing速度慢

在使用PaddleServing進行推理時,有些用戶可能會發現推理速度較慢。這時,我們可以從以下幾個方面來優化:

  1. 使用多線程:在PaddleServing的部署過程中,可以設置線程數,增加並行處理的請求數量。
  2. 使用優化後的模型:在使用PaddlePaddle訓練模型時,選擇合適的優化策略,可以顯著提高模型的速度。
  3. 使用更高效的推理引擎:在PaddleServing中,可以使用多個推理引擎,如GRPC等,可以選擇最適合自己的推理引擎來進行推理。

五、PaddleServing部署模型

在使用PaddleServing進行部署時,我們需要將模型進行優化,以便於更好地適應線上部署的環境。這些優化包括:

  1. 減少模型大小:我們可以通過量化、剪枝等方法,將模型大小降低到最小。
  2. 提高模型推理速度:我們可以通過使用MKLDNN加速庫、TensorRT等加速工具,提高模型的推理速度。
  3. 適應不同的硬體平台:我們可以根據自己的需求選擇不同的硬體加速器,如GPU、FPGA、ASIC等。

在PaddleServing中,我們可以使用以下命令對模型進行部署和優化:


python tools/export_model.py \
    --model ${MODEL} \
    --preprocess ${PREPROCESS} \
    --output_dir ${OUTPUT_DIR} \
    --version ${VERSION} \
    --port ${PORT} \
    --server ${SERVER} \
    --gpu_id ${GPU_ID} \
    --opset_version 11 \
    --quantized True \
    --optimized_model True

六、PaddleServing和inference

PaddleServing和Paddle Inference是兩個不同的模塊,PaddleServing主要用於在線部署,而Paddle Inference則主要用於離線推理。

在使用Paddle Inference時,用戶只需要使用Python API就可以完成模型的載入和推理,而使用PaddleServing時,不能直接使用Python API進行部署,需要使用PaddleServing專用的部署框架進行部署。

在實際應用中,選擇合適的模塊進行推理可以提高推理速度和效果。

七、PaddleServing pipeline性能

在使用PaddleServing進行推理時,我們可以使用Pipeline來提高模型的性能。Pipeline是PaddleServing中用於處理大規模數據時的一種部署方式,可以將數據分批處理,從而提高處理性能。

在使用PaddleServing進行部署時,可以通過以下代碼實現Pipeline:


# 測試Pipeline性能
from paddle_serving_client import *
from paddle_serving_client.utils.multi_thread_utils import MultiThreadRunner
import numpy as np

fetch_names = ["fc_1.tmp_2"]
feed_names = ["image"]
data = [{"image": np.ones(shape=(1, 3, 224, 224), dtype="float32")}]
client = Client()
client.load_client_config("serving_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9393"])
multithread_tester = MultiThreadRunner()
multithread_tester.run(client, data, concurrency=10)

八、PaddleServing gRPC

在PaddleServing中,可以使用gRPC作為推理引擎,提高模型的推理速度和效率。

在代碼實現方面,我們需要進行以下操作:

  1. 在配置文件中添加gRPC服務及其相關參數。
  2. 在代碼中調用gRPC服務。

# 測試gRPC服務
from paddle_serving.client import PaddleServingClient
import numpy as np

fetch = ["fc_1.tmp_2"]
feed = {"image": np.ones(shape=(1, 3, 224, 224), dtype="float32")}
client = PaddleServingClient()
client.load_client_config("serving_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9393"])
result = client.predict(feed=feed, fetch=fetch)
print(result)

總結

通過對PaddleServing的多個方面進行闡述,我們可以看出PaddleServing作為在線服務開發框架,具有很高的價值和實用性。在實際應用中,我們可以通過優化模型、調整線程數和使用gRPC等多種方式來提高模型的推理速度和效率。

原創文章,作者:XUKAN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/316416.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XUKAN的頭像XUKAN
上一篇 2025-01-09 12:14
下一篇 2025-01-09 12:14

相關推薦

  • TensorFlow Serving Java:實現開發全功能的模型服務

    TensorFlow Serving Java是作為TensorFlow Serving的Java API,可以輕鬆地將基於TensorFlow模型的服務集成到Java應用程序中。…

    編程 2025-04-29
  • Python訓練模型後如何投入應用

    Python已成為機器學習和深度學習領域中熱門的編程語言之一,在訓練完模型後如何將其投入應用中,是一個重要問題。本文將從多個方面為大家詳細闡述。 一、模型持久化 在應用中使用訓練好…

    編程 2025-04-29
  • ARIMA模型Python應用用法介紹

    ARIMA(自回歸移動平均模型)是一種時序分析常用的模型,廣泛應用於股票、經濟等領域。本文將從多個方面詳細闡述ARIMA模型的Python實現方式。 一、ARIMA模型是什麼? A…

    編程 2025-04-29
  • Python實現一元線性回歸模型

    本文將從多個方面詳細闡述Python實現一元線性回歸模型的代碼。如果你對線性回歸模型有一些了解,對Python語言也有所掌握,那麼本文將對你有所幫助。在開始介紹具體代碼前,讓我們先…

    編程 2025-04-29
  • VAR模型是用來幹嘛

    VAR(向量自回歸)模型是一種經濟學中的統計模型,用於分析並預測多個變數之間的關係。 一、多變數時間序列分析 VAR模型可以對多個變數的時間序列數據進行分析和建模,通過對變數之間的…

    編程 2025-04-28
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • 如何使用Weka下載模型?

    本文主要介紹如何使用Weka工具下載保存本地機器學習模型。 一、在Weka Explorer中下載模型 在Weka Explorer中選擇需要的分類器(Classifier),使用…

    編程 2025-04-28
  • Python實現BP神經網路預測模型

    BP神經網路在許多領域都有著廣泛的應用,如數據挖掘、預測分析等等。而Python的科學計算庫和機器學習庫也提供了很多的方法來實現BP神經網路的構建和使用,本篇文章將詳細介紹在Pyt…

    編程 2025-04-28
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28

發表回復

登錄後才能評論