欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解?PyTorch?Lightning模型部署到生產(chǎn)服務(wù)中

 更新時間:2022年09月20日 09:07:19   作者:ronghuaiyang  
這篇文章主要為大家介紹了如何將PyTorch?Lightning模型部署到生產(chǎn)服務(wù)中的詳細(xì)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

導(dǎo)讀

一篇用PyTorch Lighting提供模型服務(wù)的完全指南。

縱觀機(jī)器學(xué)習(xí)領(lǐng)域,一個主要趨勢是專注于將軟件工程原理應(yīng)用于機(jī)器學(xué)習(xí)的項目。例如,Cortex重新創(chuàng)造了部署serverless功能的體驗,但使用了推理管道。類似地,DVC實現(xiàn)了現(xiàn)代版本控制和CI/CD管道,但是是針對ML的。\

PyTorch Lightning也有類似的理念,只適用于訓(xùn)練。這些框架為PyTorch提供了一個Python包裝器,讓數(shù)據(jù)科學(xué)家和工程師可以編寫干凈、易于管理和性能訓(xùn)練的代碼。

作為構(gòu)建整個部署平臺的人,部分原因是我們討厭編寫樣板文件,我們是PyTorch Lightning的忠實粉絲。本著這種精神,我整理了這篇將PyTorch Lightning模型部署到生產(chǎn)中的指南。在此過程中,我們將了解一些用于導(dǎo)出PyTorch Lightning模型并將其包含在推理管道中的不同選項。

使用PyTorch Lightning模型進(jìn)行推理的各種方法

有三種方法導(dǎo)出用于PyTorch Lightning模型進(jìn)行服務(wù):

  • 保存模型為PyTorch檢查點
  • 將模型轉(zhuǎn)換為ONNX
  • 導(dǎo)出模型到Torchscript

我們可以用Cortex來對這三種進(jìn)行服務(wù)。

1. 直接打包部署PyTorch Lightning模型

從最簡單的方法開始,讓我們部署一個不需要任何轉(zhuǎn)換步驟的PyTorch Lightning模型。

PyTorch Lightning訓(xùn)練器是一個抽象了樣板訓(xùn)練代碼(想想訓(xùn)練和驗證步驟)的類,它有一個內(nèi)置的save_checkpoint()函數(shù),可以將模型保存為.ckpt文件。要將你的模型保存為一個檢查點,只需將以下代碼添加到你的訓(xùn)練腳本中:

現(xiàn)在,在我們開始服務(wù)這個檢查點之前,重要的是要注意,當(dāng)我一直說“PyTorch Lightning模型”時,PyTorch Lightning是PyTorch的一個封裝 —— 項目的自述文件字面上說“PyTorch Lightning只是有組織的PyTorch”。因此,導(dǎo)出的模型是一個正常的PyTorch模型,可以相應(yīng)地提供服務(wù)。

有了保存好的檢查點,我們就可以輕松地在Cortex中使用該模型。關(guān)于Cortex的部署過程的簡單概述如下:

  • 我們用Python為我們的模型編寫了一個預(yù)測API
  • 我們在YAML中定義api的基礎(chǔ)結(jié)構(gòu)和行為
  • 我們通過CLI命令來部署API

我們的預(yù)測API將使用Cortex的Python Predictor類來定義一個init()函數(shù)來初始化我們的API并加載模型,以及一個predict()函數(shù)來在查詢時提供預(yù)測:

import torch
import pytorch_lightning as pl
import MyModel from training_code
from transformers import (
    AutoModelForSequenceClassification,
    AutoConfig,
    AutoTokenizer
)
class PythonPredictor:
    def __init__(self, config):
        self.device = "cpu"
        self.tokenizer = AutoTokenizer.from_pretrained("albert-base-v2")
        self.model = MyModel.load_from_checkpoint(checkpoint_path="./model.ckpt")
    def predict(self, payload):
        inputs = self.tokenizer.encode_plus(payload["text"], return_tensors="pt")
        predictions = self.model(**inputs)[0]
        if (predictions[0] > predictions[1]):
          return {"class": "unacceptable"}
        else:
          return {"class": "acceptable"}

很簡單。我們從訓(xùn)練代碼中重新定義了一些代碼,添加了一些推理邏輯,就是這樣。需要注意的一點是,如果你將模型上傳到S3(推薦),你需要添加一些訪問它的邏輯。

接下來,我們在YAML中配置基礎(chǔ)的設(shè)置:

- name: acceptability-analyzer
  kind: RealtimeAPI
  predictor:
    type: python
    path: predictor.py
  compute:
    cpu: 1

同樣也很簡單。我們給API一個名稱,告訴Cortex我們的預(yù)測API在哪里,并分配CPU。

接下來,我們部署它:

注意,我們也可以將其部署到一個集群中,并由Cortex進(jìn)行管理:

在所有的部署中,Cortex將我們的API打包并將其作為web的服務(wù)公開。通過云部署,Cortex可以配置負(fù)載平衡、自動擴(kuò)展、監(jiān)控、更新和許多其他基礎(chǔ)設(shè)施功能。

現(xiàn)在,我們有了一個實時的web API,可以通過請求用模型進(jìn)行預(yù)測。

2. 導(dǎo)出為ONNX并通過ONNX Runtime進(jìn)行服務(wù)

現(xiàn)在我們已經(jīng)部署了一個普通的PyTorch檢查點,讓我們把事情復(fù)雜化一點。

PyTorch Lightning最近添加了一個方便的抽象,用于將模型導(dǎo)出到ONNX(以前,你可以使用PyTorch的內(nèi)置轉(zhuǎn)換函數(shù),盡管它們需要更多的樣板文件)。要將模型導(dǎo)出到ONNX,只需將以下代碼添加到訓(xùn)練腳本中:

注意,輸入樣本應(yīng)該模擬實際模型輸入的形狀。

一旦你導(dǎo)出了ONNX模型,你就可以使用Cortex的ONNX Predictor來服務(wù)它。代碼基本上是一樣的,過程也是一樣的。例如,這是一個ONNX預(yù)測API:

import pytorch_lightning as pl
from transformers import (
    AutoModelForSequenceClassification,
    AutoConfig,
    AutoTokenizer
)
class ONNXPredictor:
    def __init__(self, onnx_client, config):
        self.device = "cpu"
        self.client = onnx_client
        self.tokenizer = AutoTokenizer.from_pretrained("albert-base-v2")
    def predict(self, payload):
        inputs = self.tokenizer.encode_plus(payload["text"], return_tensors="pt")
        predictions = self.client.predict(**inputs)[0]
        if (predictions[0] > predictions[1]):
          return {"class": "unacceptable"}
        else:
          return {"class": "acceptable"}

基本上是一樣的。唯一的區(qū)別是,我們不是直接初始化模型,而是通過onnx_client訪問它,這是一個ONNX運(yùn)行時容器,Cortex為我們的模型提供服務(wù)。

我們的YAML看起來也很相似:

- name: acceptability-analyzer
  kind: RealtimeAPI
  predictor:
    type: onnx
    path: predictor.py
    model_path: s3://your-bucket/model.onnx
  monitoring:
    model_type: classification

‍我在這里添加了一個監(jiān)視標(biāo)志,只是為了說明配置它是多么容易,并且有一些ONNX特定的字段,但除此之外是相同的YAML。

最后,我們使用與之前相同的$ cortex deploy命令進(jìn)行部署,我們的ONNX API也是可用的。

3. 使用 Torchscript’s JIT compiler序列化

對于最后的部署,我們把PyTorch Lightning模型導(dǎo)出到Torchscript,并使用PyTorch的JIT編譯器提供服務(wù)。要導(dǎo)出模型,只需將此添加到你的訓(xùn)練腳本:

這個的Python API與普通的PyTorch示例幾乎相同:

import torch
from torch import jit
from transformers import (
    AutoModelForSequenceClassification,
    AutoConfig,
    AutoTokenizer
)
class PythonPredictor:
    def __init__(self, config):
        self.device = "cpu"
        self.tokenizer = AutoTokenizer.from_pretrained("albert-base-v2")
        self.model = jit.load("model.ts")
    def predict(self, payload):
        inputs = self.tokenizer.encode_plus(payload["text"], return_tensors="pt")
        predictions = self.model(**inputs)[0]
        if (predictions[0] > predictions[1]):
          return {"class": "unacceptable"}
        else:
          return {"class": "acceptable"}

YAML與以前一樣,CLI命令當(dāng)然是一致的。如果我們愿意,我們可以通過簡單地用新的腳本替換舊的predictor.py腳本來更新之前的PyTorch API,并再次運(yùn)行$ cortex deploy:

在這里,Cortex會自動執(zhí)行滾動更新,即啟動一個新的API,然后與舊API進(jìn)行交換,從而防止模型更新之間的停機(jī)時間。

就是這樣?,F(xiàn)在,你有了一個用于實時推斷的完全可操作的預(yù)測API,從Torchscript模型提供預(yù)測。

那么,你會用哪種方法呢?

這里明顯的問題是哪種方法性能最好。事實上,這里沒有一個簡單的答案,因為它取決于你的模型。

對于BERT和GPT-2這樣的Transformer模型,ONNX可以提供令人難以置信的優(yōu)化(我們測量了cpu吞吐量有40倍提高)。對于其他模型,Torchscript可能比vanilla PyTorch表現(xiàn)得更好 —— 盡管這也帶來了一些警告,因為并不是所有的模型都清晰地導(dǎo)出到Torchscript。

幸運(yùn)的是,使用任何選項都可以很容易地進(jìn)行部署,因此可以并行測試這三種方法,看看哪種最適合你的特定API.‍

英文原文:towardsdatascience.com/how-to-depl…

以上就是詳解PyTorch Lightning模型部署到生產(chǎn)服務(wù)中的詳細(xì)內(nèi)容,更多關(guān)于PyTorch Lightning 模型部署的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何用Python進(jìn)行回歸分析與相關(guān)分析

    如何用Python進(jìn)行回歸分析與相關(guān)分析

    這篇文章主要介紹了如何用Python進(jìn)行回歸分析與相關(guān)分析,這兩部分內(nèi)容會放在一起講解,文中提供了解決思路以及部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-03-03
  • pytorch 權(quán)重weight 與 梯度grad 可視化操作

    pytorch 權(quán)重weight 與 梯度grad 可視化操作

    這篇文章主要介紹了pytorch 權(quán)重weight 與 梯度grad 可視化操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python利用psutil庫進(jìn)行監(jiān)控進(jìn)程和資源

    Python利用psutil庫進(jìn)行監(jiān)控進(jìn)程和資源

    psutil是Python系統(tǒng)和進(jìn)程工具庫,它提供了一種跨平臺的方式來獲取系統(tǒng)信息、管理系統(tǒng)進(jìn)程、監(jiān)控系統(tǒng)性能、操作系統(tǒng)資源等,下面就跟隨小編一起來學(xué)習(xí)psutil庫的具體應(yīng)用吧
    2024-01-01
  • Pygame做一期吃豆子游戲的示例代碼

    Pygame做一期吃豆子游戲的示例代碼

    這篇文章主要介紹了Pygame做一期吃豆子游戲的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹

    Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹

    這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之?dāng)?shù)據(jù)添加和事務(wù)回滾介紹,需要的朋友可以參考下
    2014-06-06
  • Python中檢查字符串是否僅包含字母的方法詳解

    Python中檢查字符串是否僅包含字母的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python中的多種方法來檢查字符串是否只由字母組成,以及它們的應(yīng)用場景和優(yōu)劣,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • OpenCV半小時掌握基本操作之圖像裁剪融合

    OpenCV半小時掌握基本操作之圖像裁剪融合

    這篇文章主要介紹了OpenCV基本操作之圖像裁剪融合,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • opencv鎖定鼠標(biāo)定位的實現(xiàn)

    opencv鎖定鼠標(biāo)定位的實現(xiàn)

    本文主要介紹了opencv鎖定鼠標(biāo)定位的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python語言描述機(jī)器學(xué)習(xí)之Logistic回歸算法

    Python語言描述機(jī)器學(xué)習(xí)之Logistic回歸算法

    這篇文章主要介紹了Python語言描述機(jī)器學(xué)習(xí)之Logistic回歸算法,涉及Sigmoid函數(shù),梯度上升法等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 使用PyCharm安裝pytest及requests的問題

    使用PyCharm安裝pytest及requests的問題

    這篇文章主要介紹了使用PyCharm安裝pytest及requests的相關(guān)資料,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論