当前位置: 首页 > news >正文

Docker torchserve workflow部署流程

1. 先部署相关模型, 步骤见: Docker torchserve 部署模型流程

搭建涉及到的模型,如ocr_detection,ocr_judge,ocr_text, xxx_detection …

2. workflow文件

2.1 串行执行,示例1

(1)xxx_workflow.yaml

models:#global model paramsbatch-size: 1max-batch-delay : 10retry-attempts : 3timeout-ms : 5000ocr_detection:url : ocr_detection.mar #local or public URIocr_judge:url : ocr_judge.marocr_text:url : ocr_text.mar    dag:ocr_detection : [first_processing]first_processing: [ocr_judge]ocr_judge : [second_processing]second_processing : [ocr_text]

(2)xxx_workflow_handler.py

import json
import numpy as npdef first_processing(data, context):if data:image = data[0].get("data") or data[0].get("body")image = image.decode('utf-8')image = json.loads(image)return [{"image": image}] # [{"image":["xxx","xxx"]}]return Nonedef second_processing(data, context):if data:image = data[0].get("data") or data[0].get("body")image = image.decode('utf-8')image = json.loads(image)return [{"image": image}] # [{"image":["xxx","xxx"]}]return None

2.2 串行执行,示例2

(1)xxx_workflow.yaml

models:#global model paramsbatch-size: 1max-batch-delay : 10retry-attempts : 3timeout-ms : 5000xxx_detection:url : xxx_detection.mar #local or public URIxxx_recognition:url : xxx_recognition.mardag:xxx_detection : [xxx_recognition]

2.2 并行执行,示例

(1)xxx_workflow.yaml

models:#global model paramsbatch-size: 1max-batch-delay : 10retry-attempts : 3timeout-ms : 5000xxx_branch_1:url : xxx_branch_1.mar #local or public URIxxx_branch_2:url : xxx_branch_2.marxxx_branch_3:url : xxx_branch_3.mardag:pre_processing : [xxx_branch_1,xxx_branch_2,xxx_branch_3]xxx_branch_1 : [aggregate_func]xxx_branch_2 : [aggregate_func]xxx_branch_3 : [aggregate_func]

(2)xxx_workflow_handler.py

import jsondef pre_processing(data, context):'''Empty node as a starting node since the DAG doesn't support multiple start nodes'''if data:text = data[0].get("data") or data[0].get("body")return [text]return Nonedef aggregate_func(data, context):'''Changes the output keys obtained from the individual modelto be more appropriate for the workflow output'''if data:xxx_branch_1_result = json.loads(data[0].get("xxx_branch_1"))xxx_branch_2_result = json.loads(data[0].get("xxx_branch_2"))xxx_branch_3_result = json.loads(data[0].get("xxx_branch_3"))response = {"xxx_branch_1_result": xxx_branch_1_result,"xxx_branch_2_result": xxx_branch_2_result,"xxx_branch_3_result": xxx_branch_3_result}return [response]

3. 打包workflow文件

torch-workflow-archiver -f --workflow-name xxx_workflow --spec-file xxx_workflow.yaml --handler xxx_workflow_handler.py --export-path /home/model-server/model-store/

4. 配置接口

(1)查询已注册的workflow
curl "http://localhost:8381/workflows"
(2)注册workflow并为其分配资源

将.war文件注册,注意:.war文件必须放在model-store文件夹下,即/path/model-server/model-store

curl -X POST "$server/workflows?url=$model_url&workflow_name=$model_name"
# 示例
curl -X POST "localhost:8381/workflows?url=xxx_workflow.war&workflow_name=xxx_workflow"
(3)查看workflow状态
curl http://localhost:8381/workflows/xxx_workflow
(4)删除注册workflow
curl -X DELETE http://localhost:8381/workflows/xxx_workflow

5. workflow推理

# -*- coding: utf-8 -*-
import requests
import json
from PIL import Image
import base64
import iodef get_image_bytes(image_path):# 打开图像并转换为 RGBwith Image.open(image_path).convert("RGB") as img:# 创建一个字节流byte_stream = io.BytesIO()# 将图像保存到字节流中,格式为 JPEGimg.save(byte_stream, format="JPEG")# 获取字节流内容byte_stream.seek(0)return byte_stream.read()image_path = '/path/img1.jpg'image_bytes = get_image_bytes(image_path)
image_base64 = base64.b64encode(image_bytes).decode('utf-8')
data = {'data':json.dumps({'image':image_base64})}
response = requests.post('http://localhost:8380/wfpredict/xxx_workflow',data = data)
print(response)
print(response.status_code)
print(eval(response.text))

参考:
容器内/serve readme或示例
https://pytorch.org/serve/workflows.html

相关文章:

  • 数据文件(0)
  • excel快速入门(二)
  • Windows C++:MoveFile、MoveFileEx、MoveFileWithProgress、CopyFile、CopyFileEx。
  • S32K312 RTD 4.0.0 版本 OCU 例程配置流程说明
  • Linux centerOS 服务器搭建NTP服务
  • Android Glide(一):源码分析,内存缓存和磁盘缓存的分析,实现流程以及生命周期
  • SCAU学习笔记 - 面向对象程序设计课后习题
  • hive如何删除分区
  • “避开死锁泥潭:开发者必知的技巧与工具“
  • 提升SAP归档效率的5个实用技巧
  • 智慧城市交通管理中的云端多车调度与控制
  • uniapp数据缓存
  • C#源码安装ZedGraph组件,并且立即演示使用
  • GIS在构建虚拟世界中的新机遇
  • 滚雪球学MySQL[1.1讲]:MySQL简介与环境配置
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【391天】每日项目总结系列128(2018.03.03)
  • co.js - 让异步代码同步化
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6之路之模块详解
  • es的写入过程
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JS专题之继承
  • Mithril.js 入门介绍
  • Mysql5.6主从复制
  • react-native 安卓真机环境搭建
  • STAR法则
  • 讲清楚之javascript作用域
  • 码农张的Bug人生 - 见面之礼
  • 深入浅出webpack学习(1)--核心概念
  • 我这样减少了26.5M Java内存!
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​数据链路层——流量控制可靠传输机制 ​
  • #define用法
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $.each()与$(selector).each()
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)计算机毕业设计大学生兼职系统
  • (离散数学)逻辑连接词
  • (四) 虚拟摄像头vivi体验
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (轉)JSON.stringify 语法实例讲解
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net - 类的介绍
  • .net core 3.0 linux,.NET Core 3.0 的新增功能