<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          torchserve來(lái)進(jìn)行PyTorch模型的部署

          共 3870字,需瀏覽 8分鐘

           ·

          2021-01-25 17:04

          點(diǎn)擊上方AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          推薦閱讀

          31個(gè)Python實(shí)戰(zhàn)項(xiàng)目教你掌握?qǐng)D像處理,PDF開(kāi)放下載

          opencv_contrib擴(kuò)展模塊中文教程pdf,限時(shí)領(lǐng)取


          作者:Francesco Zuppichini

          編譯:ronghuaiyang

          導(dǎo)讀

          演示了使用PyTorch最近發(fā)布的新工具torchserve來(lái)進(jìn)行PyTorch模型的部署。


          最近,PyTorch推出了名為torchserve.的新生產(chǎn)框架來(lái)為模型提供服務(wù)。我們看一下今天的roadmap:

          1、使用Docker安裝

          2、導(dǎo)出模型

          3、定義handler

          4、保存模型

          為了展示torchserve,我們將提供一個(gè)經(jīng)過(guò)全面訓(xùn)練的ResNet34進(jìn)行圖像分類(lèi)的服務(wù)。

          使用Docker安裝

          官方文檔:https://github.com/pytorch/serve/blob/master/README.md##install-torchserve

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

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

          docker?pull?pytorch/torchserve:latest

          所有可用的tags:https://hub.docker.com/r/pytorch/torchserve/tags

          關(guān)于docker和torchserve的更多信息:https://github.com/pytorch/serve#quick-start-with-docker

          Handlers

          官方文檔:https://github.com/pytorch/serve/blob/master/docs/custom_service.md

          處理程序負(fù)責(zé)使用模型對(duì)一個(gè)或多個(gè)HTTP請(qǐng)求進(jìn)行預(yù)測(cè)。

          默認(rèn) handlers

          Torchserve支持以下默認(rèn) handlers

          1. image_classifier
          2. object_detector
          3. text_classifier
          4. image_segmenter

          但是請(qǐng)記住,它們都不支持batching請(qǐng)求!

          自定義 handlers

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

          • preprocess
          • inference
          • postprocess

          你可以創(chuàng)建你自己的類(lèi)或者子類(lèi)BaseHandler。子類(lèi)化BaseHandler 的主要優(yōu)點(diǎn)是可以在self.model上訪問(wèn)加載的模型。下面的代碼片段展示了如何子類(lèi)化BaseHandler。

          子類(lèi)化BaseHandler以創(chuàng)建自己的handler

          回到圖像分類(lèi)的例子。我們需要

          • 從每個(gè)請(qǐng)求中獲取圖像并對(duì)其進(jìn)行預(yù)處理
          • 從模型中得到預(yù)測(cè)
          • 發(fā)送回一個(gè)響應(yīng)

          預(yù)處理

          .preprocess函數(shù)接受請(qǐng)求數(shù)組。假設(shè)我們正在向服務(wù)器發(fā)送一個(gè)圖像,可以從請(qǐng)求的databody字段訪問(wèn)序列化的圖像。因此,我們可以遍歷所有請(qǐng)求并單獨(dú)預(yù)處理每個(gè)圖像。完整的代碼如下所示。

          預(yù)處理每個(gè)請(qǐng)求中的每個(gè)圖像

          self.transform是我們的預(yù)處理變換,沒(méi)什么花哨的。對(duì)于在ImageNet上訓(xùn)練的模型來(lái)說(shuō),這是一個(gè)經(jīng)典的預(yù)處理步驟。

          我們的transform

          在我們對(duì)每個(gè)請(qǐng)求中的每個(gè)圖像進(jìn)行預(yù)處理之后,我們將它們連接起來(lái)創(chuàng)建一個(gè)pytorch張量。

          推理

          在模型上進(jìn)行推理

          這一步很簡(jiǎn)單,我們從 .preprocess得到張量。然后對(duì)每幅圖像提取預(yù)測(cè)結(jié)果。

          后處理

          現(xiàn)在我們有了對(duì)每個(gè)圖像的預(yù)測(cè),我們需要向客戶(hù)返回一些內(nèi)容。Torchserve總是返回一個(gè)數(shù)組。BaseHandler也會(huì)自動(dòng)打開(kāi)一個(gè).json 文件帶有index -> label的映射(稍后我們將看到如何提供這樣的文件),并將其存儲(chǔ)self.mapping中。我們可以為每個(gè)預(yù)測(cè)返回一個(gè)字典數(shù)組,其中包含labelindex 的類(lèi)別。

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

          因?yàn)樗械奶幚磉壿嫸挤庋b在一個(gè)類(lèi)中,所以你可以輕松地對(duì)它進(jìn)行單元測(cè)試!

          導(dǎo)出你的模型

          官方文檔:https://github.com/pytorch/serve/tree/master/model-archiver#creating-a-model-archive

          Torchserve 需要提供一個(gè).mar文件,簡(jiǎn)而言之,該文件只是把你的模型和所有依賴(lài)打包在一起。要進(jìn)行打包,首先需要導(dǎo)出經(jīng)過(guò)訓(xùn)練的模型。

          導(dǎo)出模型

          有三種方法可以導(dǎo)出torchserve的模型。到目前為止,我發(fā)現(xiàn)的最好的方法是trace模型并存儲(chǔ)結(jié)果。這樣我們就不需要向torchserve添加任何額外的文件。

          讓我們來(lái)看一個(gè)例子,我們將部署一個(gè)經(jīng)過(guò)充分訓(xùn)練的ResNet34模型。

          按照順序,我們:

          • 加載模型
          • 創(chuàng)建一個(gè)dummy輸入
          • 使用torch.jit.trace來(lái)trace模型的輸入
          • 保存模型

          創(chuàng)建 .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?.

          然后,我們準(zhǔn)備好通過(guò)使用下面的命令來(lái)創(chuàng)建.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定義了模型的最終名稱(chēng)。這是非常重要的,因?yàn)樗鼘⑹莈ndpoint的名稱(chēng)空間,負(fù)責(zé)進(jìn)行預(yù)測(cè)。你還可以指定一個(gè)--version--serialized-file指向我們之前創(chuàng)建的存儲(chǔ)的 .pt模型。--handler 是一個(gè)python文件,我們?cè)谄渲姓{(diào)用我們的自定義handler。一般來(lái)說(shuō),是這樣的:

          my_handler.py

          它暴露了一個(gè)handle函數(shù),我們從該函數(shù)調(diào)用自定義handler中的方法。你可以使用默認(rèn)名稱(chēng)來(lái)使用默認(rèn)handler(例如,--handler image_classifier)。

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

          如果你傳遞一個(gè)index_to_name.json文件,它將自動(dòng)加載到handler ,并通過(guò)self.mapping訪問(wèn)。

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

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

          用模型進(jìn)行服務(wù)

          這是一個(gè)簡(jiǎn)單的步驟,我們可以運(yùn)行帶有所有必需參數(shù)的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已經(jīng)在我的機(jī)器中使用)。然后,我從./model-store 創(chuàng)建一個(gè)volume。最后,我通過(guò)padding ?model-store并通過(guò)key-value列表的方式指定模型的名稱(chēng)來(lái)調(diào)用torchserve。

          這里,torchserve有一個(gè)endpoint ?/predictions/resnet34,我們可以通過(guò)發(fā)送圖像來(lái)預(yù)測(cè)。這可以使用curl來(lái)實(shí)現(xiàn)。

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

          kitten.jpg

          回復(fù):

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

          工作正常!

          總結(jié)

          • 使用docker安裝torchserve
          • 默認(rèn)以及自定義handlers
          • 模型打包生成
          • 使用docker提供模型服務(wù)


          END

          英文原文:https://towardsdatascience.com/deploy-models-and-create-custom-handlers-in-torchserve-fc2d048fbe91

          請(qǐng)長(zhǎng)按或掃描二維碼關(guān)注本公眾號(hào)

          喜歡的話,請(qǐng)給我個(gè)好看吧!


          瀏覽 87
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷国产精品视频一区 | 激情五月色婷婷 | 噜噜噜噜影院 | 高清一区视频 | 性爱视频精品综合 |