自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

部署您的第一個(gè)機(jī)器學(xué)習(xí)API

譯文
人工智能 機(jī)器學(xué)習(xí)
我們?cè)诒卷?xiàng)目中將學(xué)習(xí)如何用簡(jiǎn)單的代碼為您的機(jī)器學(xué)習(xí)模型構(gòu)建應(yīng)用編程接口(API)并加以部署。我花了1小時(shí)學(xué)習(xí)FastAPI,花了5分鐘學(xué)習(xí)如何部署到Deta服務(wù)器。我們還將使用Python Request在本地服務(wù)器和遠(yuǎn)程服務(wù)器上測(cè)試API。不妨更深入地了解我們將在項(xiàng)目中使用的這些技術(shù)。

[[432622]]

【51CTO.com快譯】介紹

我們?cè)诒卷?xiàng)目中將學(xué)習(xí)如何用簡(jiǎn)單的代碼為您的機(jī)器學(xué)習(xí)模型構(gòu)建應(yīng)用編程接口(API)并加以部署。我花了1小時(shí)學(xué)習(xí)FastAPI,花了5分鐘學(xué)習(xí)如何部署到Deta服務(wù)器。我們還將使用Python Request在本地服務(wù)器和遠(yuǎn)程服務(wù)器上測(cè)試API。不妨更深入地了解我們將在項(xiàng)目中使用的這些技術(shù)。

[[432623]]

spaCy

與用于試驗(yàn)和評(píng)估的著名NLTK Python庫(kù)相比,spaCy對(duì)應(yīng)用程序和部署更友好。spaCy 帶有預(yù)構(gòu)建的統(tǒng)計(jì)神經(jīng)網(wǎng)絡(luò)NLP模型,有強(qiáng)大的功能,易于在您的項(xiàng)目spaCy中使用和實(shí)現(xiàn)。我們將使用一個(gè)很簡(jiǎn)單的小型預(yù)構(gòu)建英文模型從我們的文本提取實(shí)體。

FastAPI

FastAPI是一個(gè)使用Python構(gòu)建API的快速Web框架,它有更短的查詢時(shí)間、簡(jiǎn)單且代碼最小化,讓您在幾分鐘內(nèi)即可用FastAPI設(shè)計(jì)第一個(gè)API。我們將學(xué)習(xí)FastAPI的工作原理以及如何使用預(yù)構(gòu)建模型從英文文本獲取實(shí)體。

Deta

我們將為API使用Deta Micros服務(wù),并在沒(méi)有Docker或YAML文件的情況下部署項(xiàng)目。Deta平臺(tái)擁有易于部署的CLI、高可擴(kuò)展性、安全的API身份驗(yàn)證密鑰、更改子域的選項(xiàng)以及Web流量日志功能。這些功能在Deta上可以完全免費(fèi)使用。我們?cè)陧?xiàng)目中將使用Deta CLI,僅用幾行腳本來(lái)部署Fast API。

代碼

我在學(xué)習(xí)FastAPI時(shí)偶然發(fā)現(xiàn)了促使我寫本文的YouTube視頻。Sebastián Ramírez 解釋了Fast API的工作原理以及它如何成為最快速的Python Web框架。我們將編寫兩個(gè)Python 文件,一個(gè)含有機(jī)器學(xué)習(xí)模型,另一個(gè)含有您的API代碼。

需求

我們?cè)陂_(kāi)始之前,需要?jiǎng)?chuàng)建一個(gè)含有requirements.txt文件的新目錄。您可以在下面找到我們將要使用的所有必要庫(kù):

  1. fastapi 
  2. spacy 
  3. uvicorn 
  4. https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.1.0/en_core_web_sm-3.1.0.tar.gz 

您可以逐一安裝,或者使用:

  1. $ pip install -r requirements.txt 

我們將為該項(xiàng)目使用預(yù)訓(xùn)練的NLP模型,因此需要從GitHub存儲(chǔ)庫(kù)下載,或者只運(yùn)行需求文件,它會(huì)自動(dòng)下載并安裝。

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

我們將使用預(yù)訓(xùn)練的Spacy NLP模型從文本提取實(shí)體。如果您使用Jupyter notebook,嘗試使用%%writefile 在您的目錄中創(chuàng)建python文件。

首先加載NLP模型,然后從CBS 新聞文章提取實(shí)體。只需幾行代碼,您就可以運(yùn)行第一個(gè)機(jī)器學(xué)習(xí)模型。還可以使用相同的方法加載經(jīng)過(guò)訓(xùn)練的模型。

API文件

這是您的主文件,該文件含有:

1. read_main:使用GET,即從資源請(qǐng)求數(shù)據(jù),它會(huì)顯示一條歡迎消息。

2. 類Article:使用pydantic BaseModel來(lái)定義將用于您的API (helpmanual.io)的對(duì)象和變量。在本例中,我們將內(nèi)容定義為字符串,將評(píng)論定義為字符串列表。

3. analyze_article:它使用來(lái)自ml文件的NLP對(duì)象,獲取附有評(píng)論的文本列表,并顯示實(shí)例。

我知道這讓人有點(diǎn)困惑,不妨分解成幾個(gè)小部分以便了解。

  1. %%writefile FastAPI-ML-Project/main.py 
  2.  
  3. from fastapi import FastAPI 
  4. from ml import nlp 
  5. from pydantic import BaseModel 
  6. import starlette 
  7. from typing import List 

分解

我們創(chuàng)建了FastAPI的對(duì)象,然后使用@app. get(“/”),把它用作函數(shù)上的裝飾器。

  • @app是FastAPI對(duì)象的裝飾器
  • .get or .post:用于返回?cái)?shù)據(jù)或處理輸入的HTTP方法
  • (“/”)是Web服務(wù)器上的位置,本例中是主頁(yè)面。如果您想添加另一個(gè)目錄,可以使用 (“//”)

我們創(chuàng)建了read_main函數(shù)顯示主頁(yè)上的消息,這很簡(jiǎn)單。

  1. app = FastAPI() 
  2.  
  3. @app.get("/"
  4. def read_main(): 
  5.     return {"message""Welcome"

現(xiàn)在我們將創(chuàng)建從BaseModel繼承函數(shù)和變量的Article類。該函數(shù)幫助我們創(chuàng)建將在POST方法中使用的參數(shù)類型。在本例中,我們將內(nèi)容創(chuàng)建為字符串變量,將評(píng)論創(chuàng)建為字符串列表。

  1. class Article(BaseModel): 
  2.     content: str 
  3.     comments: List[str] = [] 

在最后一部分,我們?yōu)锳PI創(chuàng)建了POST方法(“/article/”)。這意味著我們將創(chuàng)建一個(gè)新部分,該部分將參數(shù)作為輸入并在處理后返回結(jié)果。

  • Article類作為參數(shù):使用Article列表創(chuàng)建文章參數(shù),這將讓我們可以添加多個(gè)文本條目。
  • 從文章提取數(shù)據(jù):創(chuàng)建循環(huán)先后從文章列表和評(píng)論列表提取數(shù)據(jù)。它還向數(shù)組添加評(píng)論。
  • 將文本加載到NLP模型中:將內(nèi)容加載到NLP預(yù)訓(xùn)練模型中。
  • 提取實(shí)體:從nlp對(duì)象提取實(shí)體,然后添加到ents 數(shù)組中。這將堆疊結(jié)果。
  • Display:該函數(shù)將返回實(shí)體和評(píng)論列表。
  1. @app.post("/article/"
  2. def analyze_article(articles: List[Article]): 
  3.     ents = [] 
  4.     comments = [] 
  5.     for article in articles: 
  6.         for comment in article.comments: 
  7.             comments.append(comment.upper()) 
  8.         doc = nlp(article.content) 
  9.  
  10.         for ent in doc.ents: 
  11.             ents.append({"text": ent.text, "label": ent.label_}) 
  12.     return {"ents": ents, "comments": comments} 

測(cè)試

Fast API建立在Uvicorn上,因此服務(wù)器也運(yùn)行在Uvicorn上。在Jupyter notebook中,您可以使用以下代碼運(yùn)行應(yīng)用程序,或在終端中輸入uvicorn,然后輸入main文件,其中FastAPI對(duì)象是本例中的 app。

  1. !cd /work/FastAPI-ML-Project && uvicorn main:app 
  2. 2021-08-04 17:08:56.673584: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory 
  3. 2021-08-04 17:08:56.673627: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine. 
  4. China GPE 
  5. Beijing GPE 
  6. INFO:     Started server process [928] 
  7. INFO:     Waiting for application startup. 
  8. INFO:     Application startup complete. 
  9. INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) 
  10. INFO:     127.0.0.1:51874 - "GET / HTTP/1.1" 200 OK 
  11. INFO:     127.0.0.1:51876 - "POST /article/ HTTP/1.1" 200 OK 
  12. INFO:     127.0.0.1:53028 - "POST /article/ HTTP/1.1" 200 OK 
  13. KernelInterrupted: Execution interrupted by the Jupyter kernel. 

我們的服務(wù)器運(yùn)行流暢,于是不妨使用request.get方法來(lái)訪問(wèn)它。API在主頁(yè)上顯示“歡迎”消息,表明一切正常。

  1. import requests 
  2.  
  3. response = requests.get("http://127.0.0.1:8000"
  4. print(response.text) 
  5. {"message":"Welcome"

現(xiàn)在不妨在列表中添加單個(gè)文本和評(píng)論作為字典。我們將使用POST請(qǐng)求方法和/article/來(lái)訪問(wèn)NLP模型函數(shù)。將您的輸出轉(zhuǎn)換成.json() ,以便易于提取數(shù)據(jù)。

我們有字典鍵:['ents','comments']

  1. params = [{"content":"The 1992 Cricket World Cup was won by Pakistan"
  2.             "comments":["waooo","not bad"]}] 
  3. article = requests.post(f"http://127.0.0.1:8000/article/",json=params) 
  4.  
  5. data_dict = article.json() 
  6. data_dict.keys() 

不妨查看一下整個(gè)輸出是什么樣的??雌饋?lái)我們有帶有標(biāo)簽和實(shí)體列表的ents。comments鍵也一樣。

  1. print("Output: ",article.text) 
  2. Output:  {"ents":[{"text":"1992","label":"DATE"},{"text":"Cricket World Cup","label":"EVENT"},{"text":"Pakistan","label":"GPE"}],"comments":["WAOOO","NOT BAD"]} 

現(xiàn)在不妨提取單個(gè)實(shí)體及其文本,檢查輸出的靈活性。在本例中,我們從輸出提取第二個(gè)實(shí)體。

結(jié)果顯示完美。

  1. print("Label: ",list(data_dict["ents"][1].values())[1]) 
  2. print("Text: ",list(data_dict["ents"][1].values())[0]) 
  3. Label:  EVENT 
  4. Text:  Cricket World Cup 

部署

進(jìn)入到終端,或者您可以在Jupyter notebook單元中執(zhí)行相同的步驟,不過(guò)在任何腳本之前添加“!”。先要使用cd訪問(wèn)main.py和 ml.py文件所在的目錄。

  1. cd ~”/FastAPI-ML-Project” 

Deta需要的三個(gè)主文件是ml.py、main.py 和requirments.txt。

如果您使用Windows,在 PowerShell 中使用bellow命令下載并安裝Deta CLI:

  1. iwr https://get.deta.dev/cli.ps1 -useb | iex 

如果使用Linux:

  1. curl -fsSL https://get.deta.dev/cli.sh | sh 

然后使用deta login,會(huì)將您帶到瀏覽器,要求您輸入username和password。如果您已登錄,需要幾秒鐘來(lái)驗(yàn)證。

  1. deta login 

Deta驗(yàn)證 | deta

終端中的這兩個(gè)詞是魔法詞,會(huì)在2分鐘內(nèi)上傳文件并部署您的應(yīng)用程序。

  1. deta new 

您的應(yīng)用程序已上傳到端點(diǎn)鏈接,本例中是https://93t2gn.deta.dev/。

  1. Successfully created a new micro{“name”: “FastAPI-ML-Project”,“runtime”: “python3.7”,“endpoint”: “https://93t2gn.deta.dev/",“visor”: “enabled”,“http_auth”: “disable”}Adding dependencies…Collecting fastapi…Successfully installed …… 

如果您使用deta logs看到錯(cuò)誤檢查日志,作出一些更改,然后使用deta deploy來(lái)更新更改。

如您所見(jiàn),我們的應(yīng)用程序已部署在Deta服務(wù)器上并運(yùn)行。

項(xiàng)目摘要| deta

您可以進(jìn)入到Deta提供的鏈接,自行檢查。

測(cè)試 Web API

最后不妨在Deta平臺(tái)上將我們的遠(yuǎn)程API作為微服務(wù)來(lái)測(cè)試。這次我們將添加Deta端點(diǎn)鏈接,而不是添加本地IP。可以在沒(méi)有標(biāo)頭的情況下運(yùn)行,因?yàn)槲覀儧](méi)有啟用API身份驗(yàn)證。啟用身份驗(yàn)證后,Deta還提供免費(fèi)的API密鑰。這意味著只有您或擁有API密鑰的人才能訪問(wèn)Web服務(wù)器。想了解有關(guān)身份驗(yàn)證和子域的更多信息,建議查閱文檔。

我們將添加相同的參數(shù)和相同的代碼以獲得相同的結(jié)果,瞧它多神奇。您的API在網(wǎng)上,可以通過(guò)使用鏈接即可輕松訪問(wèn)。

  1. header = {"accept""application/json""Content-Type""application/json"
  2.  
  3. params = [ 
  4.     { 
  5.         "content""The 1992 Cricket World Cup was won by Pakistan"
  6.         "comments": ["waooo""not bad"], 
  7.     } 
  8.  
  9. article = requests.post("https://93t2gn.deta.dev/article/",headers=header ,json=params) 

結(jié)論

我在學(xué)習(xí)FastAPI后考慮下一步做什么,于是有一天我在網(wǎng)上偶然發(fā)現(xiàn)了引起我注意的 Deta。我花了幾分鐘來(lái)安裝Deta CLI,并在遠(yuǎn)程服務(wù)器上部署API。Deta的子域和免費(fèi)API密鑰功能給我留下了深刻印象。我很快了解了該服務(wù)的工作原理以及我將如何在未來(lái)的項(xiàng)目中使用它。

在學(xué)習(xí)幾個(gè)機(jī)器學(xué)習(xí)模型之后,我們都會(huì)問(wèn)這個(gè)問(wèn)題:

我知道如何訓(xùn)練我的模型并獲得預(yù)測(cè),但下一步是什么?如何與他人分享我的模型,以便他們可以看到我構(gòu)建的內(nèi)容并在他們的項(xiàng)目中使用這些功能?

這時(shí)候Heroku、Google或Azure等云平臺(tái)有了用武之地,但這些平臺(tái)有點(diǎn)復(fù)雜,您需要學(xué)習(xí)為Docker文件編寫代碼,這有時(shí)令人沮喪。Deta用簡(jiǎn)單的兩個(gè)字腳本解決您的所有問(wèn)題,腳本在幾秒鐘內(nèi)即可部署和運(yùn)行您的應(yīng)用程序。

原文標(biāo)題:Deploying Your First Machine Learning API,作者:Abid Ali Awan

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2009-05-13 09:20:12

Google App 應(yīng)用收費(fèi)

2017-10-13 15:59:24

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

2010-12-07 16:53:43

商業(yè)智能

2019-01-04 08:16:55

物聯(lián)網(wǎng)產(chǎn)品物聯(lián)網(wǎng)IOT

2025-04-11 08:40:00

FastAPIAPIWeb 框架

2010-07-30 14:50:38

Flex項(xiàng)目

2023-06-01 08:24:08

OpenAIChatGPTPython

2021-12-02 08:00:00

Kubernetes集群容器

2022-11-01 07:23:55

Dockernetcore程序

2013-10-30 22:10:28

Clouda程序

2022-10-17 10:28:05

Web 組件代碼

2020-11-13 07:08:51

Spring Boot應(yīng)用Spring

2021-04-07 13:38:27

Django項(xiàng)目視圖

2023-09-21 22:43:17

Django框架

2011-03-03 21:04:08

bug程序員

2011-03-21 14:24:13

Debian 6

2013-01-14 09:44:58

JavaScriptJSJS框架

2010-07-30 14:58:06

Flex應(yīng)用

2012-02-08 11:15:38

HibernateJava

2020-02-26 17:39:18

Python機(jī)器人Word
點(diǎn)贊
收藏

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