偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何為機(jī)器學(xué)習(xí)工程設(shè)計(jì)Python接口

人工智能 機(jī)器學(xué)習(xí)
為了進(jìn)行機(jī)器學(xué)習(xí)工程,首先要部署一個(gè)模型,在大多數(shù)情況下作為一個(gè)預(yù)測(cè)API。為了使此API在生產(chǎn)中工作,必須首先構(gòu)建模型服務(wù)基礎(chǔ)設(shè)施。這包括負(fù)載平衡、擴(kuò)展、監(jiān)視、更新等等。

 前言

為了進(jìn)行機(jī)器學(xué)習(xí)工程,首先要部署一個(gè)模型,在大多數(shù)情況下作為一個(gè)預(yù)測(cè)API。為了使此API在生產(chǎn)中工作,必須首先構(gòu)建模型服務(wù)基礎(chǔ)設(shè)施。這包括負(fù)載平衡、擴(kuò)展、監(jiān)視、更新等等。

[[338615]]

乍一看,所有這些工作似乎都很熟悉。Web開(kāi)發(fā)人員和DevOps工程師多年來(lái)一直在自動(dòng)化微服務(wù)基礎(chǔ)設(shè)施。當(dāng)然,我們可以重新定位他們的工具?

不幸的是,我們不能。

雖然ML的基礎(chǔ)結(jié)構(gòu)與傳統(tǒng)的DevOps類似,但它與ML的特殊性足以使標(biāo)準(zhǔn)的DevOps工具不那么理想。這就是為什么我們開(kāi)發(fā)了Cortex——機(jī)器學(xué)習(xí)工程的開(kāi)源平臺(tái)。

在一個(gè)非常高的層次上,Cortex被設(shè)計(jì)用來(lái)簡(jiǎn)化在本地或云上部署模型,從而自動(dòng)化所有底層基礎(chǔ)設(shè)施。該平臺(tái)的一個(gè)核心組件是預(yù)測(cè)器接口——一個(gè)可編程Python接口,開(kāi)發(fā)人員可以通過(guò)該接口編寫(xiě)預(yù)測(cè)api。

設(shè)計(jì)一個(gè)專門為web請(qǐng)求提供預(yù)測(cè)的Python接口是一個(gè)挑戰(zhàn),我們花了幾個(gè)月的時(shí)間(目前仍在改進(jìn))。在這里,我想分享一些我們已經(jīng)開(kāi)發(fā)的設(shè)計(jì)原則:

1.預(yù)測(cè)器只是一個(gè)Python類

Cortex的核心是我們的預(yù)測(cè)器,它本質(zhì)上是一個(gè)預(yù)測(cè)API,包括所有的請(qǐng)求處理代碼和依賴關(guān)系。預(yù)測(cè)器接口為這些預(yù)測(cè)api實(shí)施了一些簡(jiǎn)單的需求。

因?yàn)镃ortex采用微服務(wù)的方式來(lái)進(jìn)行模型服務(wù),預(yù)測(cè)器界面嚴(yán)格關(guān)注兩件事:

  • 初始化模型
  • 提供預(yù)測(cè)

在這種精神下,Cortex的預(yù)測(cè)界面需要兩種功能,即剩余的init__()和predict(),它們或多或少做你所期望的事情:

 

  1. import torch 
  2. from transformers import pipeline 
  3.  
  4. class PythonPredictor: 
  5.     def __init__(self, config): 
  6.         # Use GPUs, if available 
  7.         device = 0 if torch.cuda.is_available() else -1 
  8.         # Initialize model 
  9.         self.summarizer = pipeline(task="summarization", device=device) 
  10.  
  11.     def predict(self, payload): 
  12.         # Generate prediction 
  13.         summary = self.summarizer( 
  14.             payload["text"], num_beams=4, length_penalty=2.0, max_length=142, no_repeat_ngram_size=3 
  15.         ) 
  16.         # Return prediction 
  17.         return summary[0]["summary_text"

初始化之后,您可以將一個(gè)預(yù)測(cè)器看作一個(gè)Python對(duì)象,當(dāng)用戶查詢端點(diǎn)時(shí),將調(diào)用它的單個(gè)predict()函數(shù)。

這種方法的最大好處之一是,對(duì)于任何有軟件工程經(jīng)驗(yàn)的人來(lái)說(shuō),它都是直觀的。不需要接觸數(shù)據(jù)管道或模型訓(xùn)練代碼。模型只是一個(gè)文件,而預(yù)測(cè)器只是一個(gè)導(dǎo)入模型并運(yùn)行predict()方法的對(duì)象。

然而,除了語(yǔ)法上的吸引力之外,這種方法還提供了一些關(guān)鍵的好處,即它如何補(bǔ)充了皮層更廣泛的方法。

2. 預(yù)測(cè)只是一個(gè)HTTP請(qǐng)求

為生產(chǎn)中提供預(yù)測(cè)服務(wù)而構(gòu)建接口的復(fù)雜性之一是,輸入幾乎肯定會(huì)與模型的訓(xùn)練數(shù)據(jù)不同,至少在格式上是這樣。

這在兩個(gè)層面上起作用:

  • POST請(qǐng)求的主體不是一個(gè)NumPy數(shù)組,也不是您的模型用來(lái)處理的任何數(shù)據(jù)結(jié)構(gòu)。
  • 機(jī)器學(xué)習(xí)工程就是使用模型來(lái)構(gòu)建軟件,這通常意味著使用模型來(lái)處理它們沒(méi)有受過(guò)訓(xùn)練的數(shù)據(jù),例如使用GPT-2來(lái)編寫(xiě)民間音樂(lè)。

因此,預(yù)測(cè)器接口不能對(duì)預(yù)測(cè)API的輸入和輸出固執(zhí)己見(jiàn)。預(yù)測(cè)只是一個(gè)HTTP請(qǐng)求,開(kāi)發(fā)人員可以隨意處理它。例如,如果他們想部署一個(gè)多模型端點(diǎn),并基于請(qǐng)求參數(shù)查詢不同的模型,他們可以這樣做:

 

  1. import torch 
  2. from transformers import pipeline 
  3. from starlette.responses import JSONResponse 
  4.  
  5. class PythonPredictor: 
  6.     def __init__(self, config): 
  7.         self.analyzer = pipeline(task="sentiment-analysis"
  8.         self.summarizer = pipeline(task="summarization"
  9.  
  10.     def predict(self, query_params, payload): 
  11.         model_name = query_params.get("model"
  12.         if model_name == "sentiment"
  13.             return self.analyzer(payload["text"])[0] 
  14.         elif model_name == "summarizer"
  15.             summary = self.summarizer(payload["text"])[0] 
  16.         else
  17.             return JSONResponse({"error": f"unknown model: {model_name}"}, status_code=400) 

雖然這個(gè)界面讓開(kāi)發(fā)者可以自由地使用他們的API做什么,它也提供了一些自然的范圍,使皮質(zhì)在基礎(chǔ)設(shè)施方面更加固執(zhí)己見(jiàn)。

例如,在后臺(tái)Cortex使用FastAPI來(lái)設(shè)置請(qǐng)求路由。Cortex在這一層設(shè)置了許多與自動(dòng)排序、監(jiān)控和其他基礎(chǔ)設(shè)施功能相關(guān)的過(guò)程,如果開(kāi)發(fā)人員需要實(shí)現(xiàn)路由,這些功能可能會(huì)變得非常復(fù)雜。

但是,因?yàn)槊總€(gè)API都有一個(gè)predict()方法,所以每個(gè)API都有相同數(shù)量的路由—1。假設(shè)這允許Cortex在基礎(chǔ)設(shè)施層面做更多的事情,而不限制工程師。

3.服務(wù)模型只是一個(gè)微服務(wù)

對(duì)于在生產(chǎn)中使用機(jī)器學(xué)習(xí)的人來(lái)說(shuō),規(guī)模是一個(gè)主要的問(wèn)題。型號(hào)可能會(huì)很大(GPT-2大約是6 GB),計(jì)算成本高,并且可能有很高的延遲。特別是對(duì)于實(shí)時(shí)推斷,擴(kuò)大規(guī)模來(lái)處理流量是一項(xiàng)挑戰(zhàn)——如果你的預(yù)算有限,情況更是如此。

為了解決這個(gè)問(wèn)題,Cortex把預(yù)測(cè)器當(dāng)作微型服務(wù),可以水平伸縮。更具體地說(shuō),當(dāng)開(kāi)發(fā)人員進(jìn)行Cortex部署時(shí),Cortex將包含API,旋轉(zhuǎn)為推理準(zhǔn)備的集群,并進(jìn)行部署。然后,它將API公開(kāi)為負(fù)載平衡器背后的web服務(wù),并配置自動(dòng)縮放、更新和監(jiān)視:

 

預(yù)測(cè)器接口是此過(guò)程的基礎(chǔ),盡管它“只是”一個(gè)Python接口。

預(yù)測(cè)器接口所做的是強(qiáng)制打包代碼,使其成為推理的單個(gè)原子單元。單個(gè)API所需的所有請(qǐng)求處理代碼都包含在一個(gè)預(yù)測(cè)器中。這使得大腦皮層能夠很容易地衡量預(yù)測(cè)因素。

通過(guò)這種方式,工程師不必做任何額外的工作——當(dāng)然,除非他們想做一些調(diào)整——準(zhǔn)備一個(gè)用于生產(chǎn)的API。一個(gè)皮層的部署是默認(rèn)的生產(chǎn)準(zhǔn)備就緒。

 

責(zé)任編輯:華軒 來(lái)源: Python學(xué)會(huì)
相關(guān)推薦

2022-03-14 22:22:56

工程設(shè)計(jì)論代碼

2022-09-13 11:09:26

5G工程設(shè)計(jì)

2018-04-17 08:41:47

Java機(jī)器學(xué)習(xí)應(yīng)用iOS

2022-06-01 09:00:00

人工智能測(cè)試人工智能平臺(tái)

2018-05-16 08:44:55

2020-11-16 09:00:00

人工智能機(jī)器學(xué)習(xí)技術(shù)

2019-05-07 11:18:51

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2017-02-28 14:17:03

機(jī)器學(xué)習(xí)算法

2022-09-04 15:47:39

機(jī)器學(xué)習(xí)臨床試驗(yàn)自動(dòng)化

2011-06-02 15:54:42

網(wǎng)絡(luò)路由器

2019-08-09 11:04:51

人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)中心

2022-01-12 08:00:00

機(jī)器學(xué)習(xí)數(shù)據(jù)人工智能

2021-01-18 09:00:00

人工智能機(jī)器學(xué)習(xí)工程師

2022-06-02 15:42:05

Python機(jī)器學(xué)習(xí)

2017-05-05 09:56:08

神經(jīng)網(wǎng)絡(luò)模型繪畫(huà)

2020-09-15 12:50:53

物聯(lián)網(wǎng)人工智能機(jī)器學(xué)習(xí)

2023-12-21 17:05:46

機(jī)器學(xué)習(xí)MLOps人工智能

2024-04-12 14:39:18

機(jī)器學(xué)習(xí)算法軟傳感器

2021-04-13 10:50:16

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2020-04-24 06:26:09

LinuxPython應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)