算法开发API,打包docker并发布
算法开发API,打包docker并发布项目需求如下:已完成训练的模型,开发为可供调用的接口服务。创建Dockerfile,将模型打包为docker容器镜像。将docker容器镜像推送至Harbor。开发API首先获取到开源的python代码,下载训练好的模型,在本地配置好运行环境,测试是否满足需要。也可以根据需求用自己的数据集训练。测试成功后,简化代码,删减不需要的代码(如训练和验证代码)。然后将
算法开发API,打包docker并发布
项目需求如下:
- 已完成训练的模型,开发为可供调用的接口服务。
- 创建Dockerfile,将模型打包为docker容器镜像。
- 将docker容器镜像部署到服务器。
开发API
首先获取到开源的python代码,下载训练好的模型,在本地配置好运行环境,测试是否满足需要。也可以根据需求用自己的数据集训练。
测试成功后,简化代码,删减不需要的代码(如训练和验证代码)。
然后将demo代码通过fastapi封装为HTTP接口服务。首先需要添加依赖
pip install fastapi
pip install uvicorn
然后改写demo代码,添加返回值。下面是一段样例代码。
from fastapi import FastAPI
from fastapi import File, UploadFile, Form
from fastapi.middleware.cors import CORSMiddleware
from pathlib import Path
import uvicorn
import requests
app = FastAPI(docs_url=None)
origins = ["*"] # ['http://localhost:8000']
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"]
)
@app.post('/api')
async def estimation(urlflag: str = Form(None), upload_file: UploadFile = File(None)):
try:
return {"code": "200", "msg": "detected succeed", "number": len(detected),"result_img": html_face_b64_bytes}
except:
return {"code": 300, "msg": "not found 'upload_file'", "number": 0, "result_img": ""}
if __name__ == '__main__':
uvicorn.run(app=app, host="0.0.0.0", port=1212, log_level="info")
然后编写代码来测试我们刚刚写好的api是否能正确运行,也可直接安装postman软件进行测试。
测试完毕就进入下一步:封装docker。
封装docker
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。
首先要冻结当前的运行环境,通过
pip freeze >requirements.txt
此处导出的依赖很可能多于我们运行demo所需要的依赖,为了精简环境,不让docker镜像太大,建议只列出顶级依赖。
然后编写Dockerfile,一个样例的docker文件如下。
FROM fnndsc/ubuntu-python3
COPY . /data
RUN mkdir ~/.pip && mv /data/pip.conf ~/.pip/pip.conf && mv /data/sources.list /etc/apt/
WORKDIR /data/age-gender-estimation
RUN pip install -r requirements.txt
CMD ["python","demo.py"]
然后创建docker镜像:
sudo docker build -t [image ..]:version .
如果requirements.txt里的依赖正确的话,这一步就会很顺利。如果不正确,很正常,由于系统原因、本地环境的冗余以及依赖库的各种版本要求等问题,很容易产生冲突,根据错误提示对症下药即可。
docker镜像创建完成后,要先测试一下。
sudo docker run -it --rm [image ..]:version /bin/bash
如果顺利的话,服务就已经开启。如果不顺利,可根据错误提示,进入docker环境解决问题。以下是一些docker的常用命令。
sudo docker images #查看所有docker镜像
sudo docker ps -a #查看所有container
sudo docker rmi -f [image ..] #强制删除docker镜像
sudo docker rm -f [container ..] #强制删除container
sudo docker system prune #净化系统docker环境,删除失效的镜像和container
sudo docker start [container ..] #开启docker镜像
sudo docker exec -it [container ..] /bin/bash #进入docker镜像内部(配合上一条)
sudo docker cp demo.py [container ..]:~/ #更新代码
sudo docker commit [container ..] [image ..] #保存修改
sudo docker restart [image ..] #重启服务
测试无误后,就可以保存制作好的docker镜像了。
sudo docker save -o [.. tar] [image ..] #导出docker镜像到压缩包
部署服务器
首先启动服务器,并在服务器上安装docker。
安装完成后启动docker
systemctl start docker
systemctl status docker
然后将你的docker镜像压缩包上传至服务器(sftp)。
然后加载docker镜像
sudo docker load -i [image ..].tar
执行docker命令使其在后台运行,通过-p暴露端口。(-i -t控制交互)
sudo docker run -d -p 1212:1212 [image ..]
通过logs查看镜像的后台运行情况
sudo docker logs [container ..] #
设置容器自动重启
docker container update --restart=always [NAMES ..]
systemctl restart docker
更多推荐
所有评论(0)