溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么為機器學習工程設(shè)計Python接口

發(fā)布時間:2021-11-26 11:55:40 來源:億速云 閱讀:153 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“怎么為機器學習工程設(shè)計Python接口”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么為機器學習工程設(shè)計Python接口”吧!

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

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


因為Cortex采用微服務(wù)的方式來進行模型服務(wù),預(yù)測器界面嚴格關(guān)注兩件事:


  • 初始化模型

  • 提供預(yù)測


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


import torchfrom transformers import pipeline
class PythonPredictor:    def __init__(self, config):        # Use GPUs, if available        device = 0 if torch.cuda.is_available() else -1        # Initialize model        self.summarizer = pipeline(task="summarization", device=device)
    def predict(self, payload):        # Generate prediction        summary = self.summarizer(            payload["text"], num_beams=4, length_penalty=2.0, max_length=142, no_repeat_ngram_size=3        )        # Return prediction        return summary[0]["summary_text"]       


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


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


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

2. 預(yù)測只是一個HTTP請求


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


這在兩個層面上起作用:


  • POST請求的主體不是一個NumPy數(shù)組,也不是您的模型用來處理的任何數(shù)據(jù)結(jié)構(gòu)。

  • 機器學習工程就是使用模型來構(gòu)建軟件,這通常意味著使用模型來處理它們沒有受過訓練的數(shù)據(jù),例如使用GPT-2來編寫民間音樂。


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


import torchfrom transformers import pipelinefrom starlette.responses import JSONResponse
class PythonPredictor:    def __init__(self, config):        self.analyzer = pipeline(task="sentiment-analysis")        self.summarizer = pipeline(task="summarization")
    def predict(self, query_params, payload):        model_name = query_params.get("model")        if model_name == "sentiment":            return self.analyzer(payload["text"])[0]        elif model_name == "summarizer":            summary = self.summarizer(payload["text"])[0]        else:            return JSONResponse({"error": f"unknown model: {model_name}"}, status_code=400)     


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


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


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

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


對于在生產(chǎn)中使用機器學習的人來說,規(guī)模是一個主要的問題。型號可能會很大(GPT-2大約是6 GB),計算成本高,并且可能有很高的延遲。特別是對于實時推斷,擴大規(guī)模來處理流量是一項挑戰(zhàn)——如果你的預(yù)算有限,情況更是如此。


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


怎么為機器學習工程設(shè)計Python接口


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


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


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

到此,相信大家對“怎么為機器學習工程設(shè)計Python接口”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI