中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用PyTorch部署模型

發布時間:2022-02-11 13:43:36 來源:億速云 閱讀:168 作者:iii 欄目:開發技術

本篇內容介紹了“怎么用PyTorch部署模型”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

使用Docker安裝

安裝torchserve最好的方法是使用docker。你只需要把鏡像拉下來。

可以使用以下命令保存最新的鏡像。

docker pull pytorch/torchserve:latest

Handlers

處理程序負責使用模型對一個或多個HTTP請求進行預測。

默認 handlers

Torchserve支持以下默認 handlers

  • image_classifier

  • object_detector

  • text_classifier

  • image_segmenter

但是請記住,它們都不支持batching請求!

自定義 handlers

torchserve提供了一個豐富的接口,可以做幾乎所有你想做的事情。一個Handler是一個必須有三個函數的類。

  • preprocess

  • inference

  • postprocess

你可以創建你自己的類或者子類BaseHandler。子類化BaseHandler 的主要優點是可以在self.model上訪問加載的模型。下面的代碼片段展示了如何子類化BaseHandler

怎么用PyTorch部署模型

子類化BaseHandler以創建自己的handler

回到圖像分類的例子。我們需要

  • 從每個請求中獲取圖像并對其進行預處理

  • 從模型中得到預測

  • 發送回一個響應

預處理

.preprocess函數接受請求數組。假設我們正在向服務器發送一個圖像,可以從請求的databody字段訪問序列化的圖像。因此,我們可以遍歷所有請求并單獨預處理每個圖像。完整的代碼如下所示。

怎么用PyTorch部署模型

預處理每個請求中的每個圖像

self.transform是我們的預處理變換,沒什么花哨的。對于在ImageNet上訓練的模型來說,這是一個經典的預處理步驟。

怎么用PyTorch部署模型

我們的transform

在我們對每個請求中的每個圖像進行預處理之后,我們將它們連接起來創建一個pytorch張量。

推理

怎么用PyTorch部署模型

在模型上進行推理

這一步很簡單,我們從 .preprocess得到張量。然后對每幅圖像提取預測結果。

后處理

現在我們有了對每個圖像的預測,我們需要向客戶返回一些內容。Torchserve總是返回一個數組BaseHandler也會自動打開一個.json 文件帶有index -> label的映射(稍后我們將看到如何提供這樣的文件),并將其存儲self.mapping中。我們可以為每個預測返回一個字典數組,其中包含labelindex 的類別。

怎么用PyTorch部署模型

把所有的東西打包到一起,我們的handler是這樣的:

怎么用PyTorch部署模型

怎么用PyTorch部署模型

因為所有的處理邏輯都封裝在一個類中,所以你可以輕松地對它進行單元測試!

導出你的模型

Torchserve 需要提供一個.mar文件,簡而言之,該文件只是把你的模型和所有依賴打包在一起。要進行打包,首先需要導出經過訓練的模型。

導出模型

有三種方法可以導出torchserve的模型。到目前為止,我發現的最好的方法是trace模型并存儲結果。這樣我們就不需要向torchserve添加任何額外的文件。

讓我們來看一個例子,我們將部署一個經過充分訓練的ResNet34模型。

怎么用PyTorch部署模型

按照順序,我們:

  • 加載模型

  • 創建一個dummy輸入

  • 使用torch.jit.trace來trace模型的輸入

  • 保存模型

創建 .mar 文件

你需要安裝torch-model-archiver

git clone https://github.com/pytorch/serve.git
cd serve/model-archiver
pip install .

然后,我們準備好通過使用下面的命令來創建.mar文件。

torch-model-archiver --model-name resnet34 \--version 1.0 \--serialized-file resnet34.pt \--extra-files ./index_to_name.json,./MyHandler.py \--handler my_handler.py  \--export-path model-store -f

按照順序。變量--model-name定義了模型的最終名稱。這是非常重要的,因為它將是endpoint的名稱空間,負責進行預測。你還可以指定一個--version--serialized-file指向我們之前創建的存儲的 .pt模型。--handler 是一個python文件,我們在其中調用我們的自定義handler。一般來說,是這樣的:

怎么用PyTorch部署模型

my_handler.py

它暴露了一個handle函數,我們從該函數調用自定義handler中的方法。你可以使用默認名稱來使用默認handler(例如,--handler image_classifier)。

--extra-files中,你需要將路徑傳遞給你的handlers正在使用的所有文件。在本例中,我們必須向.json文件中添加路徑。使用所有人類可讀標簽名稱,并在MyHandler.py 中定義每個類別。

如果你傳遞一個index_to_name.json文件,它將自動加載到handler ,并通過self.mapping訪問。

--export-path就是 .mar存放的地方,我還添加了-f來覆蓋原有的文件。

如果一切順利的話,你可以看到resnet34.mar存放在./model-store路徑中。

用模型進行服務

這是一個簡單的步驟,我們可以運行帶有所有必需參數的torchserve docker容器。

docker run --rm -it \-p 3000:8080 -p 3001:8081 \-v $(pwd)/model-store:/home/model-server/model-store pytorch/torchserve:0.1-cpu \torchserve --start --model-store model-store --models resnet34=resnet34.mar

我將容器端口8080和8081分別綁定到3000和3001(8080/8081已經在我的機器中使用)。然后,我從./model-store 創建一個volume。最后,我通過padding  model-store并通過key-value列表的方式指定模型的名稱來調用torchserve

這里,torchserve有一個endpoint  /predictions/resnet34,我們可以通過發送圖像來預測。這可以使用curl來實現。

curl -X POST http://127.0.0.1:3000/predictions/resnet34 -T inputs/kitten.jpg

回復:

{
  "label": "tiger_cat",
  "index": 282
}

工作正常!

“怎么用PyTorch部署模型”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长宁区| 鄂州市| 天镇县| 班玛县| 资溪县| 长春市| 林西县| 佛坪县| 菏泽市| 五原县| 黑龙江省| 巴林左旗| 神池县| 赞皇县| 城固县| 来凤县| 茶陵县| 莲花县| 汪清县| 亚东县| 昆山市| 广南县| 抚远县| 思茅市| 滦南县| 永康市| 桂阳县| 北碚区| 林芝县| 永登县| 淳安县| 汉川市| 伊春市| 河间市| 牙克石市| 久治县| 廉江市| 林州市| 阿尔山市| 阿拉善左旗| 新平|