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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Ambari搭建hadoop生态圈+Centos7安装教程V2.0优化版(本篇博客写的较为详细,可能比较多,请耐心看)

当我们学习搭建hadoop的时候,未免也会遇见很多繁琐的事情,比如很多错误,需要解决。在以后公司,也不可能让你一个一个搭建hadoop,成千上万的电脑,你再一个个搭建,一个个报错,而且每台…

宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色,分别为系统管理员、宿舍管理员以及学生。其功能如下: 管理员:宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密…

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 目录 Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 一、简单介绍 二、单例模式 (Singleton Pattern) 1、什么时候使用单例模式 2、单例模式的好处 3、使用单例模式的…

Android平台Unity3D下如何同时播放多路RTMP|RTSP流?

技术背景 好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。实际上,我们在前几年发布Unity下直播播放模块的时候&#xf…

9.20日学习记录及相关问题解答

部分一 今天看了一本古老的书。学到了一些有关计算机的远古的知识。弥补了一些之前没有意识到的空白点。 原来上个世纪就有AI这个东西了 现阶段的主流模式,在许多年前其实是将来要发展的对象。 B/S指的是客户机/服务器结构模式 C/S是在B/S基础上发展过来的。三层结…

网络安全-LD_PRELOAD,请求劫持

目录 一、环境 二、开始做题 三、总结原理 四、如何防护 一、环境 我们这里用蚁剑自带的靶场第一关来解释 docker制作一下即可 二、开始做题 首先环境内很明显给我们已经写好了webshell 同样我们也可以访问到 我们使用这个蚁剑把这个webshell连上 我们发现命令不能执行&am…

Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

目录 Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具 引言 一、什么是 Dockerfile 二、Dockerfile 的基本结构 三、Dockerfile 的常见配置项 1、多阶段构建 (Multi-stage Builds) 2、缓存优化 3、合并 RUN 命令 四、Dockerfile 使用…

从数据仓库到数据中台再到数据飞轮:我了解的数据技术进化史

这里写目录标题 前言数据仓库:数据整合的起点数据中台:数据共享的桥梁数据飞轮:业务与数据的双向驱动结语 前言 在当今这个数据驱动的时代,企业发展离不开对数据的深度挖掘和高效利用。从最初的数据仓库,到后来的数据…

基于SpringBoot+Vue+MySQL的校园一卡通系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着现代社会的快速发展,校园一卡通已成为大学生活中不可或缺的一部分。它不仅承载着校园消费的功能,还集成了学生身份证明、图书馆借阅、门禁系统等多种服务。然而,传统的一卡通管理系统往往…

OpenCL 学习(2)---- OpenCL Platform 和 Device

目录 OpenCL PlatformOpenCL Device参考代码 OpenCL Platform opencl 支持的 Platform 可以使用 clGetPlatformIDs 函数查询,函数原型如下: clGetPlatformIDs(cl_uint /* num_entries */,cl_platform_id * /* platforms */,cl_uint * …

鸿蒙OpenHarmony【轻量系统内核扩展组件(CPU占用率)】子系统开发

基本概念 CPU(中央处理器,Central Processing Unit)占用率分为系统CPU占用率和任务CPU占用率。 系统CPU占用率:是指周期时间内系统的CPU占用率,用于表示系统一段时间内的闲忙程度,也表示CPU的负载情况。系…

linux中vim编辑器的应用实例

前言 Linux有大量的配置文件,其中编辑一些配置文件,最常用的工具就是 Vim ,本文介绍一个实际应用的Vim编辑器开发文档的实例。 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。…

告别枯燥:我开发了一个在电脑桌面上使用弹幕来背单词的软件

前言 在这个快节奏的时代,我们每天都在忙碌中度过,手机虽然方便,但往往难以找到一整块时间来专心背单词。然而,你是否意识到,每天坐在电脑前的时间远比使用手机的时间要长?现在我们来介绍一个新型的学习软…

基于大数据的电子产品需求数据分析系统的设计与实现(Python Vue Flask Mysql)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Springboot 文件上传下载相关问题

文章目录 关于Springboot 文件上传下载问题解决方案注意事项文件上传文件下载文件删除文件在线打开在写练习的时候,发现了一些小小的问题,已经在 上述代码中体现。① 代码路径碰到中文的时候,会有乱码,需要转换(内容中…

浏览器插件利器--allWebPluginV2.0.0.20-stable版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

我的AI工具箱Tauri版-VideoIntroductionClipCut视频介绍混剪

本教程基于自研的AI工具箱Tauri版进行VideoIntroductionClipCut视频介绍混剪。 本项目为自研的AI工具箱Tauri版中的视频剪辑模块,专注于自动生成视频介绍片段。该模块名为 VideoIntroductionClipCut,用户可以通过该工具快速进行视频的混剪和介绍内容的生…

【网络】高级IO——epoll版本TCP服务器初阶

目录 前言 一,epoll的三个系统调用接口 1.1.epoll_create函数 1.1.1.epoll_create函数干了什么 1.2. epoll_ctl函数 1.2.1.epoll_ctl函数函数干了什么 1.3.epoll_wait函数 1.3.1.epoll_wait到底干了什么 1.4.epoll的工作过程中内核在干什么 二,…

nginx upstream转发连接错误情况研究

本次测试用到3台服务器: 192.168.10.115:转发服务器A 192.168.10.209:upstream下服务器1 192.168.10.210:upstream下服务器2 1台客户端:192.168.10.112 服务器A中nginx主要配置如下: log_format main…

linux下共享内存的3种使用方式

进程是资源封装的单位,内存就是进程所封装的资源的一种。一般情况下,进程间的内存是相互隔离的,也就是说一个进程不能访问另一个进程的内存。如果一个进程想要访问另一个进程的内存,那么必须要进过内核这个桥梁,这就是…