我们通常会建立一个服务来让模型上线,但在上线前,有一些基本的网路知识需要先了解。因此前面会先浅谈网路,後面会介绍 FastAPI 来部署模型。
是一种在网页服务器及网页浏览器,负责处理网页资料的通讯协定。一般来说传输资料的两端会分为客户端(Client) 跟服务器端(Server)
我们在浏览器上输入网址(发出请求),而浏览器透过 http 通讯协定帮我们传送给服务器。服务器收到请求後回传资源。这时候从服务器端回应的状态可以区分成以下类别:
分类 | 代码 | 白话文 |
---|---|---|
资讯回应 | 100–199 | 再等等 |
成功回应 | 200–299 | 成功啦 |
重新导向 | 300–399 | 去其他地方 |
用户端错误 | 400–499 | 你挫赛了,你给的东西有问题(客户端) |
服务器端错误 | 500–599 | 我挫赛了,我的服务器有问题(服务器端) |
发送的 Request 根据不同的用途,有查询、新增、修改或者是删除,称为「 Request Method 」,是为了让 Server 能够清楚辨别请求的目的。以下介绍最常使用的方法:
名称 | 功能 | 案例 |
---|---|---|
GET | 单纯的跟 server 要一个连结或图片,通常网页都是 Get 的 request 比较多 | 例如要去某个网址、看某张图片 |
POST | 需要执行一些动作时,会传送 Post 的 request | 例如登入会员 |
PUT | 更新内容 | |
DELETE | 删除资源 |
应用程序介面(Application Programming Interface, API),相信大家可能多多少少有听过这个单词,它是串连应用程序之间的桥梁。怎麽说呢?好比说你到一间餐厅,你像服务生点餐,服务生会将菜单给厨师,烹饪好的料理再由服务生送到你的餐桌前,而这里有几个角色扮演。你是客户(客户端)、厨师是系统(服务器),而中间沟通的桥梁则由服务生(API)来进行传送。
了解完简单的网路知识後,我们来把模型推上线吧!
FastAPI 是近期受到瞩目的网页框架,是一款专用於建构 API 、高性能的 web 框架。与之相同建立 web 框架的还有 Flask、Django,而其他两个框架通常是专注於开发网页,FastAPI则更聚焦在提供 API 的服务,因此我特别选这个框架来说明和示范。
在架设服务之前,我们先对训练的模型进行存挡
# Save
import pickle
with open('./lightgbm_books.pickle', 'wb') as f:
pickle.dump(classifier, f)
# Read
age = 30
salary = 156922
vip_ind = 1
with open('./lightgbm_books.pickle', 'rb') as f:
classifier = pickle.load(f)
pred = classifier.predict(np.array([[ age, salary, vip_ind,]]))[0]
pred_prob = classifier.predict_proba(np.array([[ age, salary, vip_ind,]]))[0][1]
print(pred, pred_prob)
>>> 1 0.9597337150135251
pip install fastapi
pip install uvicorn
我将输入定义成 age、salary、VIP,最後透过 classifier_predict 取得回传值
@app.post("/predict")
def predict(age: int, salary: int, VIP: bool=True):
vip_ind = 1 if VIP else 0
return classifier_predict(age, salary, vip_ind)
uvicorn main:app --reload
服务预设在 8000 port
透过 Swagger UI 介面,可以清楚了解目前服务有哪些 API,并且可以直接在网页上进行测试!
docs
http://127.0.0.1:8000/docs
redoc
http://127.0.0.1:8000/redoc
在docs页面,点击 Try it out,接着就可以进行输入feature啦!
资料型态输入错误也会有提示,真是太佛心了吧!
最後看到成功画面,回传预测结果和机率值
程序码实做的细节更详细可以请参考连结
<<: Progressive Web App 取得 Geolocation API 地理资讯 (28)
>>: Day 29【Deploy NFT - Deploy on Mainnet】你看,出来了
处理 Annotation 的时机 一般来说,annotation 可以在 compile time...
Hi 大家, 开赛第一天想先跟大家分享踏上监控旅程的起源。 如简介提到的 行云者研发基...
前言 图形也有搜寻演算法可以使用,例如深度优先搜寻法与广度深度优先搜寻法,一起来看看吧 生活常识 你...
年龄这件无关紧要的小事 从小我就很讨厌任何因为年纪而设下的规范 尊重长辈绝对是因为他做人处事很值得...
2021年很快已经倒数2个月了 这一年变动很大很快 不管是你所属的企业还是我任职的企业,很明显的,在...