<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一篇用PyTorch Lighting提供模型服務的完全指南。
縱觀機器學習領域,一個主要趨勢是專注於將軟體工程原理應用於機器學習的專案。例如,Cortex重新創造了部署serverless功能的體驗,但使用了推理管道。類似地,DVC實現了現代版本控制和CI/CD管道,但是是針對ML的。
PyTorch Lightning也有類似的理念,只適用於訓練。這些框架為PyTorch提供了一個Python包裝器,讓資料科學家和工程師可以編寫乾淨、易於管理和效能訓練的程式碼。
作為構建整個部署平臺的人,部分原因是我們討厭編寫樣板檔案,我們是PyTorch Lightning的忠實粉絲。本著這種精神,我整理了這篇將PyTorch Lightning模型部署到生產中的指南。在此過程中,我們將瞭解一些用於匯出PyTorch Lightning模型並將其包含在推理管道中的不同選項。
有三種方法匯出用於PyTorch Lightning模型進行服務:
我們可以用Cortex來對這三種進行服務。
從最簡單的方法開始,讓我們部署一個不需要任何轉換步驟的PyTorch Lightning模型。
PyTorch Lightning訓練器是一個抽象了樣板訓練程式碼(想想訓練和驗證步驟)的類,它有一個內建的save_checkpoint()函數,可以將模型儲存為.ckpt檔案。要將你的模型儲存為一個檢查點,只需將以下程式碼新增到你的訓練指令碼中:
現在,在我們開始服務這個檢查點之前,重要的是要注意,當我一直說“PyTorch Lightning模型”時,PyTorch Lightning是PyTorch的一個封裝 —— 專案的讀我檔案字面上說“PyTorch Lightning只是有組織的PyTorch”。因此,匯出的模型是一個正常的PyTorch模型,可以相應地提供服務。
有了儲存好的檢查點,我們就可以輕鬆地在Cortex中使用該模型。關於Cortex的部署過程的簡單概述如下:
我們的預測API將使用Cortex的Python Predictor類來定義一個init()函數來初始化我們的API並載入模型,以及一個predict()函數來在查詢時提供預測:
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"}
很簡單。我們從訓練程式碼中重新定義了一些程式碼,新增了一些推理邏輯,就是這樣。需要注意的一點是,如果你將模型上傳到S3(推薦),你需要新增一些存取它的邏輯。
接下來,我們在YAML中設定基礎的設定:
- name: acceptability-analyzer kind: RealtimeAPI predictor: type: python path: predictor.py compute: cpu: 1
同樣也很簡單。我們給API一個名稱,告訴Cortex我們的預測API在哪裡,並分配CPU。
接下來,我們部署它:
注意,我們也可以將其部署到一個叢集中,並由Cortex進行管理:
在所有的部署中,Cortex將我們的API打包並將其作為web的服務公開。通過雲部署,Cortex可以設定負載平衡、自動擴充套件、監控、更新和許多其他基礎設施功能。
現在,我們有了一個實時的web API,可以通過請求用模型進行預測。
現在我們已經部署了一個普通的PyTorch檢查點,讓我們把事情複雜化一點。
PyTorch Lightning最近新增了一個方便的抽象,用於將模型匯出到ONNX(以前,你可以使用PyTorch的內建轉換函數,儘管它們需要更多的樣板檔案)。要將模型匯出到ONNX,只需將以下程式碼新增到訓練指令碼中:
注意,輸入樣本應該模擬實際模型輸入的形狀。
一旦你匯出了ONNX模型,你就可以使用Cortex的ONNX Predictor來服務它。程式碼基本上是一樣的,過程也是一樣的。例如,這是一個ONNX預測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"}
基本上是一樣的。唯一的區別是,我們不是直接初始化模型,而是通過onnx_client存取它,這是一個ONNX執行時容器,Cortex為我們的模型提供服務。
我們的YAML看起來也很相似:
- name: acceptability-analyzer kind: RealtimeAPI predictor: type: onnx path: predictor.py model_path: s3://your-bucket/model.onnx monitoring: model_type: classification
我在這裡新增了一個監視標誌,只是為了說明設定它是多麼容易,並且有一些ONNX特定的欄位,但除此之外是相同的YAML。
最後,我們使用與之前相同的$ cortex deploy命令進行部署,我們的ONNX API也是可用的。
對於最後的部署,我們把PyTorch Lightning模型匯出到Torchscript,並使用PyTorch的JIT編譯器提供服務。要匯出模型,只需將此新增到你的訓練指令碼:
這個的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命令當然是一致的。如果我們願意,我們可以通過簡單地用新的指令碼替換舊的predictor.py指令碼來更新之前的PyTorch API,並再次執行$ cortex deploy:
在這裡,Cortex會自動執行卷動更新,即啟動一個新的API,然後與舊API進行交換,從而防止模型更新之間的停機時間。
就是這樣。現在,你有了一個用於實時推斷的完全可操作的預測API,從Torchscript模型提供預測。
那麼,你會用哪種方法呢?
這裡明顯的問題是哪種方法效能最好。事實上,這裡沒有一個簡單的答案,因為它取決於你的模型。
對於BERT和GPT-2這樣的Transformer模型,ONNX可以提供令人難以置信的優化(我們測量了cpu吞吐量有40倍提高)。對於其他模型,Torchscript可能比vanilla PyTorch表現得更好 —— 儘管這也帶來了一些警告,因為並不是所有的模型都清晰地匯出到Torchscript。
幸運的是,使用任何選項都可以很容易地進行部署,因此可以並行測試這三種方法,看看哪種最適合你的特定API.
英文原文:towardsdatascience.com/how-to-depl…
以上就是詳解PyTorch Lightning模型部署到生產服務中的詳細內容,更多關於PyTorch Lightning 模型部署的資料請關注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