针对前文所述 机器学习模型部署摘要 中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. git init和git init –bare的区别:

    感谢原文作者:ljchlx 原文链接:https://blog.csdn.net/ljchlx/article/details/21805231 git init 和 git init –bare 的 ...

  2. js instanceof 解析

    js中的instanceof运算符 概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceofOb ...

  3. indexOf() 和 lastIndexOf()

    一,定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索 ...

  4. linux安装python3.6.6和新建虚拟环境

    基础准备 修改本地时区 cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 安装epel yum源 yum -y install epel- ...

  5. File常用的方法

    import java.io.File; import java.io.IOException; /* 创建: createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在 ...

  6. 利用系统APP实现导航---By张秀清

    苹果系统本身自带一个地图APP,但是功能并不是很强大,但是一些简单的导航功能还是能做出来的,下面贴上我的代码 // // ViewController.m // 系统APP导航 // // Creat ...

  7. nvidia-smi

    内容转自:https://blog.csdn.net/handsome_bear/article/details/80903477 nvidia-smi 显示 说明 Fan 风扇转速(0%--100% ...

  8. iframe父子页面相互调用方法,相互获取元素

    父页面获取子页面 var childWin = document.getElementById('setIframe').contentWindow;//获取子页面窗口对象 childWin.send ...

  9. C++输入多行数据

    动机 编程题常用需求,比如输入两行数据. 解决思路:使用getline 程序 #include <iostream> #include <vector> #include &l ...

  10. apt安装zabbix

    下面介绍基于ubuntu18.04,使用apt在ubuntu安装zabbix 4.0.x版本.规划在10.0.0.101主机安装zabbix server,在10.0.0.104安装提供msyql服务 ...