针对前文所述机器学习模型部署摘要 中docker+fastapi部署机器学习的一个完整示例
outline
fastapi简单示例
基于文件内容检测的机器学习&fastapi
在docker容器部署
Install
pip install fastapi pip install "uvicorn[standard]"
example
from typing import Optional from fastapi import FastAPI #创建FastAPI实例 app = FastAPI() #创建访问路径 @app.get("/") def read_root():#定义根目录方法 return {"message": "Hello World"}#返回响应信息 #定义方法,处理请求 @app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id}
在开发代码时,为了调试方便,可以使用如下命令
uvicorn main:app --reload
uvicorn main:app –reload 含义
main:main.py 文件
app:在main.py
文件中通过app = FastAPI()
创建的对象。--reload
:让服务器在更新代码后重新启动。仅在开发时使用该选项。
upload file and predict
一个简单的上传文件并对文件进行检测的小样例
from typing import Optional from sympy import content import uvicorn from fastapi import FastAPI,File,UploadFile from io import BytesIO from ml.predict import load_model,Features,predict #创建FastAPI实例 app = FastAPI() #创建访问路径 @app.get("/") def read_root(): return {"message": "Hello World"} # 加载模型 models = load_model() def test(file): feature = Features(file) return model.predict(feature) #调用模型接口 @app.post("/detect/v2") async def detect2(file: UploadFile): f = file.file content = await file.read() res = test(content) return { "filename": file.filename, "attributes": (len(content),str(type(f)),str(type(content))), "result": res } #运行 if __name__ == '__main__': uvicorn.run(app, host="127.0.0.1", port=8000)
test
在127.0.0.1:8000/docs
页面可以测试验证模型
request post
使用request构造post请求验证结果
import time import requests t0 = time.time() url2 = 'http://127.0.0.1:8000/detect/v2' filename2 = "examples/00bb57e75b014b9342326afd2e7b7b071ee3f08205e56d0f1bfab8542509212a" # requests库post请求文件格式 files = { 'file':(filename2,open(filename2, 'rb')) } response2 = requests.post(url2, files=files) print(response2.content, f" spend time: {time.time()-t0}")
deployment
install docker
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh
官方文档https://docs.docker.com/engine/install/ubuntu
创建Dockerfile
目录结构如下
. ├── app │ ├── __init__.py │ └── main.py #代码目录 ├── Dockerfile └── requirements.txt
构建Dockerfile
vim Dockerfile
FROM python:3.9 WORKDIR /code COPY ./requirements.txt /code/requirements.txt RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt COPY ./app /code/app CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
build docker image
在Dockerfile所在目录执行
docker build -t myimage .
Start the Docker Container
docker run -d --name mycontainer -p 80:80 myimage
至此,基于docker的fastapi部署完成,可以在主机对应地址看到web信息,或发起对应http请求。
Be First to Comment