ui-tars和omni-parser使用

ui-tars部署和訓練

  • 說明
  • 快速開始
    • 環境準備
    • ui-tars web推理和訓練
    • ui-tars api部署
    • omni-parser使用

說明

鏡像中包含ui-tars、llama-factory和omni-parser。該鏡像還在審批中,估計明天可以上線,到時候可以在auto-dl中的社區鏡像搜索。

快速開始

使用auto-dl鏡像:
在這里插入圖片描述

https://www.codewithgpu.com/i/hiyouga/LLaMA-Factory/ui-tars_omni-parser_llama-factory

環境準備

將模型從系統盤移動到數據盤,移動成功后可以選擇刪除原文件

cp -r /root/model/UI-TARS-7B-DPO /root/autodl-tmp/
cp -r /root/omni  /root/autodl-tmp/

ui-tars web推理和訓練

bash /root/LLaMA-Factory/chuli/one.sh

高級設置的提示模板要改成qwen2_vl,否則無法上傳圖片
在這里插入圖片描述
具體的使用方法可以查看llama-factory官方
https://github.com/hiyouga/LLaMA-Factory

ui-tars api部署

進入conda環境

conda activate llama

-tp 是指需要的gpu數量,改成1

python -m vllm.entrypoints.openai.api_server --served-model-name ui-tars \--model /root/autodl-tmp/UI-TARS-7B-DPO --limit-mm-per-prompt image=5 --dtype=half -tp 1

使用自定義服務進行映射,方便本地電腦調用:

ssh -CNg -L 8000:127.0.0.1:8000 root@region-9.autodl.pro -p 46525

本地電腦調用示例:

curl http://localhost:8000/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "ui-tars","messages": [{"role": "user", "content": "我想問你,5的階乘是多少?<think>\n"}]}'
{"id":"chat-7c8149f008a24adfa451a989ba6256d5","object":"chat.completion","created":1741314705,"model":"ui-tars","choices":[{"index":0,"message":{"role":"assistant",
"content":"5的階乘是120。階乘運算的數學符號是“!”。在計算機編程語言中,它通常用“ fact”來表示。階乘的定義為:n! = n * (n - 1) * (n - 2) * ... * 2 * 1,其中n是一個正整數。","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":22,"total_tokens":97,"completion_tokens":75},"prompt_logprobs":null}%

test.py

from model import OpenAIModel, print_with_colorconfigs = {"DEEPSEEK_API_BASE": "http://localhost:8000/v1/chat/completions","DEEPSEEK_API_MODEL": "ui-tars","MAX_TOKENS": 1024,"TEMPERATURE": 0,"OPENAI_API_KEY": ''
}def ask(question: str):print_with_color("####################deepseek####################", "magenta")print_with_color(f"question: {question}", 'yellow')mllm = OpenAIModel(base_url=configs["DEEPSEEK_API_BASE"],api_key=configs["OPENAI_API_KEY"],model=configs["DEEPSEEK_API_MODEL"],temperature=configs["TEMPERATURE"],max_tokens=configs["MAX_TOKENS"],disable_proxies=True)prompt = questionimages = ['image1.jpg']status, rsp = mllm.get_model_response(prompt, images=images)if not status:print_with_color(f"失敗,{rsp}", 'red')returnprint_with_color(f"*********************** rsp:\n{rsp}", "yellow")ask("解釋下圖片的內容")

model.py

from abc import abstractmethod
from typing import List
import base64
import requests
import sys
from typing import Tuple
from colorama import Fore, Styledef encode_image(image_path):with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode('utf-8')
def print_with_color(text: str, color=""):if color == "red":print(Fore.RED + text)elif color == "green":print(Fore.GREEN + text)elif color == "yellow":print(Fore.YELLOW + text)elif color == "blue":print(Fore.BLUE + text)elif color == "magenta":print(Fore.MAGENTA + text)elif color == "cyan":print(Fore.CYAN + text)elif color == "white":print(Fore.WHITE + text)elif color == "black":print(Fore.BLACK + text)else:print(text)print(Style.RESET_ALL)class BaseModel:def __init__(self):pass@abstractmethoddef get_model_response(self, prompt: str, images: List[str]) -> Tuple[bool, str]:passclass OpenAIModel(BaseModel):def __init__(self, base_url: str, api_key: str, model: str, temperature: float, max_tokens: int, disable_proxies=False):super().__init__()self.base_url = base_urlself.api_key = api_keyself.model = modelself.temperature = temperatureself.max_tokens = max_tokensself.disable_proxies = disable_proxiesdef get_model_response(self, prompt: str, images: List[str]=[], tools: list[dict]=None,history: list[dict]=None, role: str="user") -> Tuple[bool, str]:content = [{"type": "text","text": prompt}]for img in images:base64_img = encode_image(img)content.append({"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_img}"}})headers = {"Content-Type": "application/json","Authorization": f"Bearer {self.api_key}"}payload = {"model": self.model,"messages": [{"role": role,"content": content}],"temperature": self.temperature,"max_tokens": self.max_tokens}if tools:payload["tools"] = toolsif history:history.append(payload['messages'][-1])payload['messages'] = historyif self.disable_proxies:response = requests.post(self.base_url, headers=headers, json=payload, proxies={}).json()else:response = requests.post(self.base_url, headers=headers, json=payload).json()if "error" not in str(response):if not 'usage' in response:print_with_color(f"not usage:{response}", 'res')else:usage = response["usage"]prompt_tokens = usage["prompt_tokens"]total_tokens = usage["total_tokens"]completion_tokens = usage["completion_tokens"]print_with_color(f"total_tokens: {total_tokens}, prompt_tokens: {prompt_tokens}, completion_tokens: {completion_tokens}")completion_tokens = usage["completion_tokens"]if self.model == "gpt-4o":print_with_color(f"Request gpt-4o cost is "f"${'{0:.2f}'.format(prompt_tokens / 1000 * 0.005 + completion_tokens / 1000 * 0.015)}","yellow")else:print_with_color(f"Request cost is "f"${'{0:.2f}'.format(prompt_tokens / 1000 * 0.01 + completion_tokens / 1000 * 0.03)}","yellow")else:print_with_color(f"執行失敗,response: {response}", "red")return False, responseif tools:return True, response["choices"][0]["message"]["tool_calls"]else:return True, response["choices"][0]["message"]["content"]

omni-parser使用

方法1,通過服務器部署
進入omni目錄
進入conda環境
conda activate llama
啟動服務,最好有gpu的
python server.py
本地
通過client.py中的parser方法調用

方法2,本地部署調用
如果本地電腦有比較好的GPU,可以直接調用omni_parser.py里的parser方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75439.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TF-IDF——自然語言處理——紅樓夢案例

目錄 一、紅樓夢數據分析 &#xff08;1&#xff09;紅樓夢源文件 &#xff08;2&#xff09;數據預處理——分卷實現思路 &#xff08;3&#xff09;分卷代碼 二、分卷處理&#xff0c;刪除停用詞&#xff0c;將文章轉換為標準格式 1.實現的思路及細節 2.代碼實現&#…

【NLP 面經 5】

難以承受的東西只會讓我在下一次更平靜的面對 —— 25.4.2 一、NER任務&#xff0c;CRF模型改進 命名實體識別&#xff08;NER&#xff09;任務中&#xff0c;你使用基于條件隨機場&#xff08;CRF&#xff09;的模型&#xff0c;然而模型在識別嵌套實體和重疊實體時效果不佳&a…

機器學習之回歸算法

《數據挖掘技術與應用》 【實驗名稱】 實驗&#xff1a;回歸算法 【實驗目的】 1.了解回歸算法理論基礎 2.平臺實現算法 3. 編程實現分類算法 【實驗原理】 線性回歸是利用數理統計中回歸分析&#xff0c;來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法&…

Cline源碼分析

Cline源碼分析 --- vscode插件開發與cline的界面系統 vscode插件開發基礎知識開發基礎?核心概念核心API調試與發布調試 學習路線React開發界面前端代碼分析package.jsonview/title&#xff08;視圖標題欄菜單&#xff09;?editor/title&#xff08;編輯器標題欄菜單&#xff…

k8s EmptyDir(空目錄)詳解

1. 定義與特性 emptyDir 是 Kubernetes 中一種臨時存儲卷類型&#xff0c;其生命周期與 Pod 完全綁定。當 Pod 被創建時&#xff0c;emptyDir 會在節點上生成一個空目錄&#xff1b;當 Pod 被刪除時&#xff0c;該目錄及其數據會被永久清除。它主要用于同一 Pod 內多個容器間的…

【idea】實用插件

SonarLint SonarLint&#xff1a;代碼質量掃描工具 使用 SonarLint 可以幫助我們發現代碼的問題,并且還提供了相應的解決方案. 對于每一個問題&#xff0c;SonarLint 都給出了示例&#xff0c;還有相應的解決方案&#xff0c;教我們怎么修改&#xff0c;極大的方便了我們的開發…

【mysql 的安裝及使用】

MySQL 9.0 一、下載MySQL[MySQL 9.0 下載] [(https://dev.mysql.com/downloads/mysql/)選擇自定義,選擇合適安裝路徑二、檢查安裝情況配置環境變量打開命令行查看版本創建數據庫在MySQL中,可以使用create database語句來創建數據庫。以下是創建一個名為my_db的數據庫的示例:…

leetcode118.楊輝三角

思路源自 【LeetCode 每日一題】118. 楊輝三角 | 手寫圖解版思路 代碼講解 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> result new ArrayList<>();for (int i 0; i < numRows; i) {List<…

【git】git pull 和 git rebase

git pull 和 git rebase 都是 Git 中用于同步代碼的命令&#xff0c;但它們的工作方式和適用場景有顯著區別。以下是兩者的詳細對比&#xff1a; 1. 核心區別 特性git pullgit rebase本質git fetch git merge&#xff08;默認&#xff09;將當前分支的提交“重新播放”到目標…

DIY搭建網站(學術個人介紹主頁)

本教程介紹了如何創建并管理一個基于GitHub Pages的個人網站。首先&#xff0c;需要在GitHub上創建一個遵循特定命名規則的新倉庫&#xff0c;例如用戶名.github.io&#xff0c;以便建立個人站點。接著&#xff0c;通過Fork一個開源模板代碼倉庫并添加index.html文件來構建主頁…

數據結構初階:二叉樹的前中后序三種遍歷(遞歸的暴力美學)

想要實現二叉樹的遍歷可以創建一個鏈式結構的二叉樹 回顧一下二叉樹的概念&#xff0c;二叉樹分為空樹和非空二叉樹&#xff0c;非空二叉樹由根節點、根節點的左子樹和根節點的右子樹組成。 typedef char BTDataType; // 數據類型 typedef struct BinaryTreeNode {B…

WebUI問題總結

修改WebUI代碼時遇到的一些問題以及解決辦法 1. thttpd服務器環境的搭建 可參考《thttpd安裝與啟動流程》這一篇文章 其中遇到的問題有 thttpd版本問題&#xff1a;版本過舊會導致安裝失敗&#xff0c;盡量安裝新版本thttpd的啟動命令失敗的話要加上sudo修改文件權限&#…

【C++重點】deque

C queue 容器介紹 queue 是 C 標準庫中的一個容器適配器&#xff0c;它實現了先進先出&#xff08;FIFO&#xff09;數據結構。即&#xff0c;元素按照插入的順序排隊&#xff0c;首先插入的元素最先出隊。queue 適用于需要排隊處理任務的場景&#xff0c;比如消息隊列、任務調…

透過 /proc 看見內核:Linux 虛擬文件系統與 systemd 初始化初探

當我們在終端中輸入 ps、top、cat /proc/cpuinfo 等命令時&#xff0c;是否思考過這些信息來自哪里&#xff1f;為什么無需啟動任何守護進程&#xff0c;就能實時讀取系統負載、內存占用&#xff0c;甚至內核版本&#xff1f;這一切的答案&#xff0c;都藏在 Linux 系統中的一個…

操作系統(中斷 異常 陷阱) ─── linux第28課

目錄 1.硬件中斷 2. 時鐘中斷 3. OS本質 4. 軟件中斷 缺頁中斷&#xff1f;內存碎片處理&#xff1f;除零野指針錯誤&#xff1f; 操作系統本質總結 操作系統是對軟件硬件資源管理的軟件 1.硬件中斷 中斷向量表(IDT)就是操作系統的?部分&#xff0c;啟動就加載到內存中了…

文件分片上傳

1前端 <inputtype"file"accept".mp4"ref"videoInput"change"handleVideoChange"style"display: none;">2生成hash // 根據整個文件的文件名和大小組合的字符串生成hash值&#xff0c;大概率確定文件的唯一性fhash(f…

機器學習的一百個概念(5)數據增強

前言 本文隸屬于專欄《機器學習的一百個概念》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

基于微信小程序的智慧鄉村旅游服務平臺【附源碼】

基于微信小程序的智慧鄉村旅游服務平臺&#xff08;源碼L文說明文檔&#xff09; 目錄 4系統設計 4.1系統功能設計 4.2系統結構 4.3.數據庫設計 4.3.1數據庫實體 4.3.2數據庫設計表 5系統詳細實現 5.1 管理員模塊的實現 5.1.1旅游景點管理…

數據驅動的智能BMS革新:機器學習賦能電池健康預測與安全協同優化

傳統電池管理系統&#xff08;BMS&#xff09;依賴等效電路模型和固定參數算法&#xff0c;面臨電化學機理復雜、老化行為非線性、多工況適應性差等瓶頸。例如&#xff0c;健康狀態&#xff08;SOH&#xff09;和荷電狀態&#xff08;SOC&#xff09;估算易受溫度、循環次數及電…

使用JSON.stringify報錯:Uncaught TypeError: cyclic object value

具體錯誤 Uncaught TypeError: cyclic object valueonMouseOver Amap.vue:125renderMarker Amap.vue:84emit maps:1emit maps:1ci maps:1ui maps:1fireEvent maps:1jL maps:1Xt maps:1T maps:1<anonymous> amap.vue:49promise callback*nextTick runtime-core.esm-bundl…