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.mzph.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…