<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
演示了使用PyTorch最近釋出的新工具torchserve來進行PyTorch模型的部署。
最近,PyTorch推出了名為torchserve.
的新生產框架來為模型提供服務。我們看一下今天的roadmap:
1、使用Docker安裝
2、匯出模型
3、定義handler
4、儲存模型
為了展示torchserve,我們將提供一個經過全面訓練的ResNet34進行影象分類的服務。
官方檔案:https://github.com/pytorch/serve/blob/master/README.md##install-torchserve
安裝torchserve最好的方法是使用docker。你只需要把映象拉下來。
可以使用以下命令儲存最新的映象。
docker pull pytorch/torchserve:latest
所有可用的tags:https://hub.docker.com/r/pytorch/torchserve/tags
關於docker和torchserve的更多資訊:https://github.com/pytorch/serve#quick-start-with-docker
官方檔案:https://github.com/pytorch/serve/blob/master/docs/custom_service.md
處理程式負責使用模型對一個或多個HTTP請求進行預測。
預設 handlers
Torchserve支援以下預設 handlers
image_classifier
object_detector
text_classifier
image_segmenter
但是請記住,它們都不支援batching請求!
自定義 handlers
torchserve提供了一個豐富的介面,可以做幾乎所有你想做的事情。一個Handler
是一個必須有三個函數的類。
你可以建立你自己的類或者子類BaseHandler
。子類化BaseHandler
的主要優點是可以在self.model
上存取載入的模型。下面的程式碼片段展示瞭如何子類化BaseHandler
。
子類化BaseHandler以建立自己的handler
回到影象分類的例子。我們需要
預處理
.preprocess
函數接受請求陣列。假設我們正在向伺服器傳送一個影象,可以從請求的data
或body
欄位存取序列化的影象。因此,我們可以遍歷所有請求並單獨預處理每個影象。完整的程式碼如下所示。
預處理每個請求中的每個影象
self.transform
是我們的預處理變換,沒什麼花哨的。對於在ImageNet上訓練的模型來說,這是一個經典的預處理步驟。
我們的transform
在我們對每個請求中的每個影象進行預處理之後,我們將它們連線起來建立一個pytorch張量。
推理
在模型上進行推理
這一步很簡單,我們從 .preprocess
得到張量。然後對每幅影象提取預測結果。
後處理
現在我們有了對每個影象的預測,我們需要向客戶返回一些內容。Torchserve總是返回一個陣列。BaseHandler
也會自動開啟一個.json
檔案帶有index -> label
的對映(稍後我們將看到如何提供這樣的檔案),並將其儲存self.mapping
中。我們可以為每個預測返回一個字典陣列,其中包含label
和index
的類別。
把所有的東西打包到一起,我們的handler是這樣的:
因為所有的處理邏輯都封裝在一個類中,所以你可以輕鬆地對它進行單元測試!
官方檔案:https://github.com/pytorch/serve/tree/master/model-archiver#creating-a-model-archive
Torchserve 需要提供一個.mar
檔案,簡而言之,該檔案只是把你的模型和所有依賴打包在一起。要進行打包,首先需要匯出經過訓練的模型。
匯出模型
有三種方法可以匯出torchserve的模型。到目前為止,我發現的最好的方法是trace
模型並儲存結果。這樣我們就不需要向torchserve新增任何額外的檔案。
讓我們來看一個例子,我們將部署一個經過充分訓練的ResNet34模型。
按照順序,我們:
torch.jit.trace
來trace模型的輸入建立 .mar 檔案
官方檔案:https://github.com/pytorch/serve/blob/master/model-archiver/README.md
你需要安裝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。一般來說,是這樣的:
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
kitten.jpg
回覆:
{ "label": "tiger_cat", "index": 282 }
工作正常!
使用docker安裝torchserve
預設以及自定義handlers
模型打包生成
使用docker提供模型服務到此這篇關於用PyTorch部署模型的文章就介紹到這了,更多相關PyTorch部署模型內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45