私有化部署Ragflow的预训练模型

部署ragflow代码库中的det.onnx模型(通常是目标检测或文档结构解析类模型,如版面分析模型)到火山云,需基于ONNX Runtime推理框架,结合火山云的计算资源和服务能力实现。以下是具体步骤:

一、模型特性与依赖确认

det.onnx是ONNX格式的预训练模型,需明确:

  • 功能:ragflow中的det.onnx通常用于文档版面分析(如识别文本块、表格、图片等区域),为后续RAG流程提供结构化支持。
  • 依赖:需onnxruntime(或onnxruntime-gpu,推荐GPU加速)、OpenCV(图像处理)、Python 3.8+等环境。
  • 输入输出:输入为图像数据(如(1, 3, H, W)的张量),输出为检测到的区域坐标和类别。

二、火山云部署步骤

1. 选择计算资源

根据模型推理需求选择火山云实例:

  • 推荐实例:GPU计算型ECS(如ecs.gni3cg.5xlarge,1×A10 GPU,16GB显存),满足轻量化ONNX模型推理需求。
  • 系统镜像:Ubuntu 20.04(便于安装GPU驱动和依赖)。
2. 环境配置

登录实例后,安装基础依赖和ONNX Runtime:

# 更新系统
sudo apt update && sudo apt install -y python3-pip python3-dev libgl1-mesa-glx# 安装ONNX Runtime(GPU版本,需匹配CUDA)
# 查看CUDA版本:nvidia-smi,假设为11.7
pip3 install onnxruntime-gpu==1.14.1  # 1.14.1版本兼容CUDA 11.7# 安装其他依赖(图像处理、API服务)
pip3 install opencv-python fastapi uvicorn numpy pillow

若使用CPU推理,安装onnxruntime(非GPU版本):pip3 install onnxruntime==1.14.1

3. 上传模型与代码
  • 模型获取:从ragflow代码库的models/目录中提取det.onnx,或通过以下方式下载:

    # 克隆ragflow代码库获取模型
    git clone https://github.com/infiniflow/ragflow.git
    cp ragflow/models/det.onnx ./  # 假设模型位于此路径
    
  • 模型存储优化:若模型较大,先上传至火山云对象存储(TOS),再通过tosutil工具下载到实例:

    # 安装TOS客户端
    wget https://tos-tools.tos-cn-beijing.volces.com/tosutil/v1.7.2/linux-amd64/tosutil
    chmod +x tosutil
    # 从TOS下载模型(需配置AK/SK)
    ./tosutil cp tos://your-bucket/det.onnx ./det.onnx
    
4. 编写推理服务代码

用FastAPI包装det.onnx模型,提供HTTP接口供外部调用。创建det_server.py

import onnxruntime as ort
import cv2
import numpy as np
from fastapi import FastAPI, UploadFile, File
from PIL import Image
import ioapp = FastAPI()# 加载ONNX模型
model_path = "./det.onnx"
# 配置GPU推理(若使用CPU,删除providers参数)
session = ort.InferenceSession(model_path,providers=["CUDAExecutionProvider", "CPUExecutionProvider"]
)# 获取模型输入输出信息
input_name = session.get_inputs()[0].name
input_shape = session.get_inputs()[0].shape  # 如(1, 3, 640, 640)
output_names = [out.name for out in session.get_outputs()]def preprocess(image: Image.Image) -> np.ndarray:"""预处理图像:resize、归一化等(需与训练时一致)"""img = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)img = cv2.resize(img, (input_shape[3], input_shape[2]))  # 按模型输入尺寸resizeimg = img.transpose(2, 0, 1)  # HWC -> CHWimg = img.astype(np.float32) / 255.0  # 归一化img = np.expand_dims(img, axis=0)  # 增加batch维度return imgdef postprocess(outputs: list) -> list:"""后处理:解析输出为检测框和类别(根据模型输出格式调整)"""# 示例:假设输出为[boxes, scores, classes]boxes = outputs[0].squeeze().tolist()scores = outputs[1].squeeze().tolist()classes = outputs[2].squeeze().tolist()# 过滤低置信度结果results = []for box, score, cls in zip(boxes, scores, classes):if score > 0.5:results.append({"box": box,  # [x1, y1, x2, y2]"score": score,"class": int(cls)})return results@app.post("/detect")
async def detect(file: UploadFile = File(...)):"""接收图像文件,返回检测结果"""# 读取图像image = Image.open(io.BytesIO(await file.read()))# 预处理input_data = preprocess(image)# 推理outputs = session.run(output_names, {input_name: input_data})# 后处理results = postprocess(outputs)return {"results": results}@app.get("/health")
async def health_check():return {"status": "healthy"}if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)  # 绑定所有网卡,端口8000

注意:preprocesspostprocess需根据det.onnx的实际训练预处理逻辑调整(如归一化参数、输入尺寸等)。

5. 启动服务与网络配置
  • 启动服务

    # 后台启动服务(日志输出到det.log)
    nohup python3 det_server.py > det.log 2>&1 &
    
  • 验证服务
    在实例内执行curl http://localhost:8000/health,返回{"status":"healthy"}说明启动成功。

  • 开放网络访问

    1. 进入火山云ECS控制台,找到实例对应的安全组,添加入方向规则:
      • 端口:8000
      • 来源:0.0.0.0/0(或限制为特定IP)。
    2. 若需公网访问,为实例绑定弹性公网IP(EIP)
6. 测试模型服务

通过公网IP调用接口测试:

# 发送图像文件测试检测接口
curl -X POST "http://[EIP]:8000/detect" -F "file=@test_image.jpg"

返回结果示例:

{"results": [{"box": [100, 200, 300, 400], "score": 0.92, "class": 0},  # 0表示文本块{"box": [500, 300, 700, 500], "score": 0.88, "class": 1}   # 1表示表格]
}

三、优化与扩展

  1. 容器化部署
    将服务打包为Docker镜像,上传至火山云容器镜像服务(CR),再通过容器服务(VKE)部署,支持弹性扩缩容:

    # Dockerfile
    FROM nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04
    RUN apt update && apt install -y python3-pip libgl1-mesa-glx
    COPY requirements.txt .
    RUN pip3 install -r requirements.txt
    COPY det.onnx det_server.py ./
    CMD ["python3", "det_server.py"]
    
  2. 性能优化

    • 启用ONNX Runtime的CUDAExecutionProvider加速推理;
    • 批量处理图像(修改接口支持多图输入);
    • 调整输入尺寸(在精度允许范围内减小尺寸,提升速度)。
  3. 监控与运维

    • 集成火山云日志服务(LTS) 收集推理日志;
    • 通过云监控监控GPU利用率、内存占用等指标,设置告警。

四、注意事项

  • 版本兼容性:确保onnxruntime-gpu版本与实例的CUDA版本匹配(参考ONNX Runtime文档)。
  • 模型输入格式det.onnx的输入尺寸、通道顺序(RGB/BGR)需与预处理逻辑严格一致,否则会导致推理结果异常。
  • 权限控制:生产环境中建议通过火山云API网关配置认证(如API-Key),限制接口访问权限。

通过以上步骤,可在火山云上稳定部署det.onnx模型,为ragflow的文档解析流程提供后端推理能力。

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

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

相关文章

go中的singleflight是如何实现的?

大家周四快乐,今天分享粉丝投稿的面经。 内容整理如下:go go singleflight 的底层实现 singleflight 是 Go 语言标准库中的一个很有用的包,它主要用来处理并发请求时的重复问题。比如在高并发场景下,如果多个请求同时访问同一个资…

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读

开关电源之整流电路1. 什么是半波整流电路?1.1 电路结构与工作原理1.2 输出特性分析2. 全波整流电路如何工作?2.1 电路结构特点2.2 工作过程分析2.3 优缺点对比3. 桥式整流电路有什么优势?3.1 电路组成3.2 工作原理详解3.3 性能特点4. 什么是…

创建GLFW窗口,开启OpenGL之路

前言:本系列文章主要是一个学习笔记和总结,具体学习过程参考https://learnopengl-cn.github.io/这个网站的是学习OpenGL的一个很完美的新手教程。在这个部分系列中,我会以自己的理解详细描述每个函数、方法的使用,以及关键参数的解…

es通过分片迁移迁移解决磁盘不均匀问题

POST _cluster/reroute {"commands": [{"move": {"index": "xxx_detail","shard": 2,"from_node": "el8P9Ul","to_node": "4sDv-RD"}}] }查看迁移进程 GET _cat/shards?v查看磁盘…

c++打包pyd文件给Python使用调用函数

c打包pyd文件给Python使用调用函数C语言源码&#xff1a;simplemath.cpp代码&#xff1a;// // Created by ASFOR on 2025/9/11. // #include <pybind11/pybind11.h>namespace py pybind11;// 一个简单的加法函数 int add(int a, int b) {return a b; }// 一个简单的乘…

hadoop的api操作对象存储

一、获取文件或目录1. 获取某个目录下的文件// 必须的依赖 import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, LocatedFileStatus, Path, RemoteIterator}// 获取某个目录下的文件路径 def list_file(conf: Configuration, dir_path: Str…

《UE5_C++多人TPS完整教程》学习笔记52 ——《P53 FABRIK 算法(FABRIK IK)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P53 FABRIK 算法&#xff08;FABRIK IK&#xff09; 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephen …

HttpServletRequest vs ServletContext 全面解析

HttpServletRequest vs ServletContext 全面解析 一、 核心区别概览特性HttpServletRequest (请求对象)ServletContext (Servlet上下文/应用对象)作用域请求范围应用范围生命周期从客户端发出请求开始&#xff0c;到服务器返回响应结束。从Web应用启动&#xff08;部署&#xf…

Java后端工程师如何学AI

Java后端工程师如何学AI 目录 前言为什么Java后端工程师要学习AIAI学习路径规划基础知识体系实践项目建议学习资源推荐学习时间规划常见问题与解决方案职业发展建议总结 前言 随着人工智能技术的快速发展&#xff0c;AI已经不再是计算机科学专业的专属领域。作为Java后端工…

Django REST Framework 中 @action 装饰器详解

概述 action 装饰器是 Django REST Framework (DRF) 中 ViewSet 的一个核心功能&#xff0c;用于定义自定义路由方法。它允许开发者在标准的 CRUD 操作&#xff08;list、create、retrieve、update、destroy&#xff09;之外&#xff0c;创建符合特定业务需求的接口&#xff0c…

【重磅更新】RetroBoard 全面升级,让敏捷回顾更高效、更安全、更贴心!

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​…

中州养老:华为云设备管理接口开发全流程

需求分析点击同步数据时,要把华为云的数据拉取到我们的系统中对于新增设备操作,实际上这些参数与华为云产品我们添加设备时的参数是一样的表结构设计E-R图数据库字段接口分析对于设备中的数据,我们既要再IOT平台存储,又要在数据库中存储.之所以保存两份数据的原因:IOT平台中只是…

Llama-Factory微调Qwen2.5-VL从数据集制作到部署记录

Llama-Factory微调Qwen2.5-VL从数据集制作到部署记录 电脑环境配置&#xff1a; 1.ubuntu24 2.3090(24G) 3.Cuda12.9 一、数据集制作 我的数据集主要是对图像内容进行描述 1.Label-studio制作数据集 这是最原始的从零开始制作数据集的方法&#xff0c;不建议这样做&#xff01;…

【蓝桥杯真题67】C++数位和为偶数的数 第十五届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

C++数位和为偶数的数 第十五届蓝桥杯青少年创意编程大赛C++选拔赛真题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 1、C++专栏 电子学会C++一级历年真题解析 电子学会C++二级历年真题解析

【计算机网络 | 第11篇】宽带接入技术及其发展历程

文章目录宽带接入技术详解数字传输系统技术演进早期电话网的传输技术演变数字传输系统技术演进&#xff1a;从碎片到统一宽带接入技术 ADSLADSL的基本原理与非对称特性DMT调制技术&#xff1a;多子信道并行传输ADSL接入网组成电话分离器的设计原理与优势ADSL的升级&#xff1a;…

(论文速读)SCSegamba:用于结构裂纹分割的轻量级结构感知视觉曼巴

论文题目&#xff1a;SCSegamba: Lightweight Structure-Aware Vision Mamba for Crack Segmentation in Structures&#xff08;用于结构裂纹分割的轻量级结构感知视觉曼巴&#xff09;会议&#xff1a;CVPR2025摘要&#xff1a;不同场景下的结构裂缝像素级分割仍然是一个相当…

《苏超风云》亮相时尚大赏,成短剧行业发展新风向

当男频短剧凭借《一品布衣》五天横扫10亿播放的数据宣告逆袭&#xff0c;短剧市场格局正经历深刻洗牌。风口之下&#xff0c;头条视听、中皋文旅、国内时尚视觉与短视频创作领域的头部厂牌“大湾视频”携手下场&#xff0c;打造精品男频短剧《苏超风云》&#xff0c;剑指2025年…

HTML5新年元旦网站源码

新年主题网站开发概述 本项目基于HTML5、CSS3与JavaScript技术栈&#xff0c;打造了一个功能丰富、交互体验流畅的新年主题网站&#xff0c;涵盖文化展示、互动娱乐与社交分享三大核心模块&#xff0c;通过现代化前端技术实现沉浸式节日氛围营造。 1.1、核心功能架构 网站采…

CentOS 7 下iscsi存储服务配置验证

一、环境说明 centos7服务器*2服务器ip&#xff1a;服务端10.10.10.186 客户端10.10.10.184服务端存储卷sda1提前关闭防火墙&#xff0c;或开放默认 iSCSI 使用 3260 端口 二、服务端&#xff08;Target&#xff09;配置 安装 iSCSI target 服务 yum install -y targetcli syst…

立即数、栈、汇编与C函数的调用

一、立即数在 ARM 架构中&#xff0c;立即数是指在指令中直接编码的常量值&#xff0c;而不是通过寄存器或内存引用的值立即数的特点编码限制&#xff1a;ARM指令是固定长度的&#xff08;32位&#xff09;&#xff0c;因此立即数不能占用太多位数。典型的算术和逻辑指令通常只…