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

部署您的第一個機器學習API

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

[[432622]]

【51CTO.com快譯】介紹

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

[[432623]]

spaCy

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

FastAPI

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

Deta

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

代碼

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

需求

我們在開始之前,需要創(chuàng)建一個含有requirements.txt文件的新目錄。您可以在下面找到我們將要使用的所有必要庫:

  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 

我們將為該項目使用預訓練的NLP模型,因此需要從GitHub存儲庫下載,或者只運行需求文件,它會自動下載并安裝。

機器學習模型

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

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

API文件

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

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

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

3. analyze_article:它使用來自ml文件的NLP對象,獲取附有評論的文本列表,并顯示實例。

我知道這讓人有點困惑,不妨分解成幾個小部分以便了解。

  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的對象,然后使用@app. get(“/”),把它用作函數(shù)上的裝飾器。

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

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

  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)建為字符串變量,將評論創(chuàng)建為字符串列表。

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

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

  • Article類作為參數(shù):使用Article列表創(chuàng)建文章參數(shù),這將讓我們可以添加多個文本條目。
  • 從文章提取數(shù)據(jù):創(chuàng)建循環(huán)先后從文章列表和評論列表提取數(shù)據(jù)。它還向數(shù)組添加評論。
  • 將文本加載到NLP模型中:將內(nèi)容加載到NLP預訓練模型中。
  • 提取實體:從nlp對象提取實體,然后添加到ents 數(shù)組中。這將堆疊結(jié)果。
  • Display:該函數(shù)將返回實體和評論列表。
  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} 

測試

Fast API建立在Uvicorn上,因此服務(wù)器也運行在Uvicorn上。在Jupyter notebook中,您可以使用以下代碼運行應(yīng)用程序,或在終端中輸入uvicorn,然后輸入main文件,其中FastAPI對象是本例中的 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ù)器運行流暢,于是不妨使用request.get方法來訪問它。API在主頁上顯示“歡迎”消息,表明一切正常。

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

現(xiàn)在不妨在列表中添加單個文本和評論作為字典。我們將使用POST請求方法和/article/來訪問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() 

不妨查看一下整個輸出是什么樣的。看起來我們有帶有標簽和實體列表的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)在不妨提取單個實體及其文本,檢查輸出的靈活性。在本例中,我們從輸出提取第二個實體。

結(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 

部署

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

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

Deta需要的三個主文件是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,會將您帶到瀏覽器,要求您輸入username和password。如果您已登錄,需要幾秒鐘來驗證。

  1. deta login 

Deta驗證 | deta

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

  1. deta new 

您的應(yīng)用程序已上傳到端點鏈接,本例中是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看到錯誤檢查日志,作出一些更改,然后使用deta deploy來更新更改。

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

項目摘要| deta

您可以進入到Deta提供的鏈接,自行檢查。

測試 Web API

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

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

  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é)論

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

在學習幾個機器學習模型之后,我們都會問這個問題:

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

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

原文標題:Deploying Your First Machine Learning API,作者:Abid Ali Awan

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

 

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

2009-05-13 09:20:12

Google App 應(yīng)用收費

2017-10-13 15:59:24

iPhone機器學習iOS

2019-01-04 08:16:55

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

2010-12-07 16:53:43

商業(yè)智能

2025-04-11 08:40:00

FastAPIAPIWeb 框架

2023-06-01 08:24:08

OpenAIChatGPTPython

2010-07-30 14:50:38

Flex項目

2022-11-01 07:23:55

Dockernetcore程序

2021-12-02 08:00:00

Kubernetes集群容器

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

2023-09-21 22:43:17

Django框架

2021-04-07 13:38:27

Django項目視圖

2010-07-30 14:58:06

Flex應(yīng)用

2011-03-21 14:24:13

Debian 6

2013-01-14 09:44:58

JavaScriptJSJS框架

2011-03-03 21:04:08

bug程序員

2012-02-08 11:15:38

HibernateJava

2020-02-26 17:39:18

Python機器人Word
點贊
收藏

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