针对前文所述 机器学习模型部署摘要 中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"\n 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请求。

官方文档 https://fastapi.tiangolo.com/zh/deployment/docker/

基于FastAPI和Docker的机器学习模型部署快速上手的更多相关文章

  1. Docker & k8s 系列一:快速上手docker

    Docker & k8s 系列一:快速上手docker 本篇文章将会讲解:docker是什么?docker的安装,创建一个docker镜像,运行我们创建的docker镜像,发布自己的docke ...

  2. 基于Asp.net core + EF + Sqlite 5分钟快速上手一个小项目

    虽然该方法不会用在实际开发中,但该过程对于初学者还是非常友好的,真应了麻雀虽小,五脏俱全这句话了.好了不多废话了,直接开始!! 1.建立一个名为test的Asp.net core web应用程序 这一 ...

  3. 使用pmml实现跨平台部署机器学习模型

    一.概述   对于由Python训练的机器学习模型,通常有pickle和pmml两种部署方式,pickle方式用于在python环境中的部署,pmml方式用于跨平台(如Java环境)的部署,本文叙述的 ...

  4. 用PMML实现机器学习模型的跨平台上线

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  5. 用PMML实现python机器学习模型的跨平台上线

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  6. Tensorflow Serving 模型部署和服务

    http://blog.csdn.net/wangjian1204/article/details/68928656 本文转载自:https://zhuanlan.zhihu.com/p/233614 ...

  7. 使用ML.NET + ASP.NET Core + Docker + Azure Container Instances部署.NET机器学习模型

    本文将使用ML.NET创建机器学习分类模型,通过ASP.NET Core Web API公开它,将其打包到Docker容器中,并通过Azure Container Instances将其部署到云中. ...

  8. 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

    产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...

  9. Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型

    机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...

随机推荐

  1. JAVA多线程学习八-多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  2. 为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本

    CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS ...

  3. k8s之Pod基础概念

    1. 资源限制 Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象.一个Pod代表着集群中运行的一个进程.kubernetes中其他大多数组件都是围绕着Pod来 ...

  4. Keras学习:试用卷积-训练CIFAR-10数据集

    import numpy as np import cPickle import keras as ks from keras.layers import Dense, Activation, Fla ...

  5. Solution -「多校联训」种蘑菇

    \(\mathcal{Description}\)   Link.   给定一棵含有 \(n\) 个结点的树,设 \(S\) 为其中的非空联通子集,求 \[\sum_{S}(\gcd_{u\in S} ...

  6. 01 MySQL数据库安装(Windows+Mac)

    目录 MySQL数据库安装 Windows 1.主要版本简介 2.软件下载 3.文件目录简介 4.使用 4.1配置环境变量 4.2登录 制作MySQL服务端开机自启动 运行MySQL 4.3 密码修改 ...

  7. linux 运维工程师如何降低工作难度

    文章目录 1.Linux "优化" 2.git "优化" 3.mysql "优化" 4.kubernetes "优化" ...

  8. MXNet源码分析 | KVStore进程内通信

    本文主要基于MXNet1.6.0版本进行分析. MXNet的KVStore模块下有几个比较重要的类.KVStore是一个抽象类,提供了一些通用的API,例如Init.Push和Pull等.因为KVSo ...

  9. Spring MVC项目快速搭建(编程模型)

    1)配置DispatcherServlet前端控制器(web配置) 2)将xml文件路径告诉Spring MVC(DispatcherServlet) 以上两步等价于继承了WebApplication ...

  10. java集合专题 (ArrayList、HashSet等集合底层结构及扩容机制、HashMap源码)

    一.数组与集合比较 数组: 1)长度开始时必须指定,而且一旦指定,不能更改 2)保存的必须为同一类型的元素 3)使用数组进行增加/删除元素-比较麻烦 集合: 1)可以动态保存任意多个对象,使用比较方便 ...