私有化部署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
英文地址,請注明出處:http://en.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;因此立即數不能占用太多位數。典型的算術和邏輯指令通常只…