Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战
一、Qwen2.5-VL 简介
Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。
欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。
1. 主要增强功能
1)直观地理解事物: Qwen2.5-VL 不仅能熟练识别花、鸟、鱼和昆虫等常见物体,还能高度分析文本、图表、图标、图形和图像中的布局。
2)具有代理功能: Qwen2.5-VL 可直接扮演视觉代理,能够推理和动态指挥工具,既能在电脑上使用,也能在手机上使用。
3)理解长视频并捕捉事件: Qwen2.5-VL可以理解1小时以上的视频,这次又增加了通过精确定位相关视频片段来捕捉事件的能力。
4)不同格式的可视化定位能力: Qwen2.5-VL 可通过生成边框或点来精确定位图像中的对象,并能为坐标和属性提供稳定的 JSON 输出。
5)生成结构化输出:用于扫描发票、表格、表格等数据。Qwen2.5-VL 支持对其内容进行结构化输出,有利于金融、商业等领域的使用。
2. 相较上一代模型架构更新
1)动态分辨率和帧速率训练,促进视频理解:通过采用动态 FPS 采样,qwen团队将动态分辨率扩展到了时间维度,使模型能够理解各种采样率的视频。相应地,qwen团队在时间维度上对 mRoPE 进行了更新,增加了 ID 和绝对时间对齐,使模型能够学习时间顺序和速度,最终获得精确定位特定时刻的能力。
2)精简高效的视觉编码器:qwen团队通过在 ViT 中战略性地实施窗口关注,提高了训练和推理速度。通过 SwiGLU 和 RMSNorm 进一步优化了 ViT 架构,使其与 Qwen2.5 LLM 的结构保持一致。
3. 模型地址
阿里在 Hugging Face 和 ModelScope (魔搭社区) 上开源了 Qwen2.5-VL 的 Base 和 Instruct 模型,包含 3B、7B 和 72B 在内的 3 个模型尺寸。
4. 相关资料地址
GitHub:https://github.com/QwenLM/Qwen2.5-VL
HuggingFace: https://huggingface.co/collections/Qwen/qwen25-vl-6795ffac22b334a837c0f9a5
魔搭: ModelScope: https://modelscope.cn/collections/Qwen25-VL-58fbb5d31f1d47
模型体验:https://chat.qwenlm.ai/
如果你的电脑硬件不支持,那么可以直接使用官方的免费平台来使用。免费平台是共享 GPU,有额度限制。唯一的好处可以直接免费使用 Qwen 2.5 VL 最强的 78B 模型!
阿里云帮助中心:大模型服务平台百炼(Model Studio)(https://help.aliyun.com/zh/model-studio/user-guide/vision?spm=a2c4g.11186623.4.2.14014422Fom0Ne&scm=20140722.H_2845871._.ID_2845871-OR_rec-V_1#7a7077f8a9r6o)
vllm官方文档:https://docs.vllm.ai/en/latest/models/engine_args.html
二、Quick Start 快速入门
1. Hugging Face
Qwen2.5-VL 的预训练模型检查点已经上传 Hugging Face 的模型中心(Model Hub)上,可以通过transformers
库进行调用。
pip install git+https://github.com/huggingface/transformers accelerate
千问团队同时提供了一个toolkit帮助更加方便的处理各种图形输入。
pip install qwen-vl-utils[decord]#安装 flash-attn后,即可使用推荐的被注释掉的模型加载代码:
pip install flash-attn --no-build-isolation
from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch# default: Load the model on the available device(s)
model = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", torch_dtype="auto", device_map="auto"
)# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.
# model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
# "Qwen/Qwen2.5-VL-7B-Instruct",
# torch_dtype=torch.bfloat16,
# attn_implementation="flash_attention_2",
# device_map="auto",
# )# default processor
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct")# The default range for the number of visual tokens per image in the model is 4-16384.
# You can set min_pixels and max_pixels according to your needs, such as a token range of 256-1280, to balance performance and cost.
# min_pixels = 256*28*28
# max_pixels = 1280*28*28
# processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)messages = [{"role": "user","content": [{"type": "image","image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",},{"type": "text", "text": "Describe this image."},],}
]# Preparation for inference
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=[text],images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt",
)
inputs = inputs.to(model.device)# Inference: Generation of the output
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
运行有一个warning:
# default processor
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct", use_fast=True)
在 Hugging Face 的
transformers
库中,快速版本的分词器(Fast)和慢速版本的分词器(Python)在处理方式上有以下主要区别:1. 实现方式
快速版本(Fast):基于 Rust 语言实现,通常具有更高的性能和效率
慢速版本(Python):基于 Python 实现,性能相对较低,但更易于调试和扩展
2. 加载方式
快速版本:通过设置
use_fast=True
参数加载。如果模型支持快速分词器,优先使用快速版本
慢速版本:通过设置
use_fast=False
参数加载。3. 性能差异
快速版本:在处理大规模数据时,速度更快,内存占用更小,适合生产环境
慢速版本:在处理速度和内存效率上稍逊一筹,但更适合开发和调试阶段
4. 功能差异
快速版本:通常支持更多的高级功能,如并行处理、快速解码等
慢速版本:功能相对基础,但更灵活,允许用户进行自定义扩展
5. 默认行为
从
transformers
v4.48 开始,默认行为将改为use_fast=True
,即使模型保存时使用的是慢速分词器。如果需要使用慢速分词器,可以通过显式设置use_fast=False
来实现。总结
如果需要高性能和效率,建议使用快速版本(
use_fast=True
)。如果需要更高的灵活性或调试方便,可以选择慢速版本(
use_fast=False
)。根据你的实际需求选择合适的分词器版本即可。
2. ModelScope
HuggingFace 需要翻墙,国内无法访问的同学,可通过 ModelScope 访问 QWen2.5VL。
QWen2.5VL 3B模型链接:魔搭社区。右上方,查看使用代码:
三、本地部署硬件建议
模型推理硬件建议:
INT4 : RTX30901,显存24GB,内存32GB,系统盘200GB
INT4 : RTX40901或RTX3090*2,显存24GB,内存32GB,系统盘200GB
模型微调硬件要求更高。一般不建议个人用户环境使用。
四、Web UI Example
安装 Git 和 Python 环境,笔者用的是 Python 3.10.6 版本【下载】
1. 首先克隆 Qwen2.5-VL GitHub 存储库并导航到项目目录:
git clone https://github.com/QwenLM/Qwen2.5-VLcd Qwen2.5-VL
2. 使用以下命令安装 Web 应用程序所需的依赖项:
pip install -r requirements_web_demo.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
3. 为确保与 GPU 兼容,请安装支持 CUDA 的最新版本的 PyTorch、TorchVision 和 TorchAudio。即使已经安装了 PyTorch,您在运行 Web 应用程序时也可能会遇到问题,因此最好更新:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
4. 更新 Gradio 和 Gradio Client 以避免连接和 UI 相关的错误,因为旧版本可能会导致问题:
pip install -U gradio gradio_client
5.安装qwen-vl-utils[decord]工具包
pip install qwen-vl-utils[decord]==0.0.8
qwen-vl-utils[decord]是Qwen团队提供的一个工具包,帮助我们更方便地处理各种类型的可视输入,就像使用 API 一样。其中包括 base64、URL 以及交错图片和视频。
如果您使用的不是 Linux,您可能无法从 PyPI 安装 decord。在这种情况下,您可以使用 pip install qwen-vl-utils,这会退回到使用 torchvision 进行视频处理。不过,您仍然可以从源代码中安装 decord,以便在加载视频时使用 decord。
6. 模型的下载安装,共有 3 个选项:
较小的 3B 模型,建议在 GPU 内存有限的笔记本电脑(例如 8GB VRAM)上使用。
python web_demo_mm.py --checkpoint-path "Qwen/Qwen2.5-VL-3B-Instruct"
显存高于 8G 的可以选择 7B 模型,性能更强、效果更好。
python web_demo_mm.py --checkpoint-path "Qwen/Qwen2.5-VL-7B-Instruct"
如果是土豪,手里有专业级别的 GPU,那么可以直接上 72B 的最大模型,效果最佳。
python web_demo_mm.py --checkpoint-path "Qwen/Qwen2.5-VL-72B-Instruct"
执行命令后,首先下载模型,然后加载处理器和模型
两会期间访问hugging face,VPN总掉,笔者尝试从ModelScope下载 3B 模型 (地址:https://modelscope.cn/models/Qwen/Qwen2.5-VL-3B-Instruct/files):
下载模型:
pip install modelscopemodelscope download --model Qwen/Qwen2.5-VL-3B-Instruct
运行 web_demo:
python web_demo_mm.py --checkpoint-path "/home/coco/.cache/modelscope/hub/models/Qwen/Qwen2.5-VL-3B-Instruct/"
7. 安装完成后在浏览器上打开本地链接 http://127.0.0.1:7860 即可正常使用
五、vLLM 本地部署
1. vLLM
建议使用 vLLM 快速部署 Qwen2.5-VL,以及进行推理。vllm版本需要大于0.7.2。
更多信息可查阅:
vLLM official documentation
1) 安装所需包。运行下面的指令:
pip install git+https://github.com/huggingface/transformers@f3f6c86582611976e72be054675e2bf0abb5f775 pip install accelerate pip install qwen-vl-utils pip install 'vllm>0.7.2'pip install flash-attn --no-build-isolation
第一条命令,等价于:
clone https://github.com/huggingface/transformers@f3f6c86582611976e72be054675e2bf0abb5f775cd /home/coco/my_project/transformers-main/pip install .
2) 本地推理
from transformers import AutoProcessor
from vllm import LLM, SamplingParams
from qwen_vl_utils import process_vision_infoMODEL_PATH = "Qwen/Qwen2.5-VL-7B-Instruct"llm = LLM(model=MODEL_PATH,limit_mm_per_prompt={"image": 10, "video": 10},
)sampling_params = SamplingParams(temperature=0.1,top_p=0.001,repetition_penalty=1.05,max_tokens=256,stop_token_ids=[],
)image_messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user","content": [{"type": "image","image": "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/qwen.png","min_pixels": 224 * 224,"max_pixels": 1280 * 28 * 28,},{"type": "text", "text": "What is the text in the illustrate?"},],},
]# For video input, you can pass following values instead:
# "type": "video",
# "video": "<video URL>",
video_messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": [{"type": "text", "text": "请用表格总结一下视频中的商品特点"},{"type": "video", "video": "https://duguang-labelling.oss-cn-shanghai.aliyuncs.com/qiansun/video_ocr/videos/50221078283.mp4","total_pixels": 20480 * 28 * 28, "min_pixels": 16 * 28 * 28}]},
]# Here we use video messages as a demonstration
messages = video_messagesprocessor = AutoProcessor.from_pretrained(MODEL_PATH)
prompt = processor.apply_chat_template(messages,tokenize=False,add_generation_prompt=True,
)
image_inputs, video_inputs, video_kwargs = process_vision_info(messages, return_video_kwargs=True)mm_data = {}
if image_inputs is not None:mm_data["image"] = image_inputs
if video_inputs is not None:mm_data["video"] = video_inputsllm_inputs = {"prompt": prompt,"multi_modal_data": mm_data,# FPS will be returned in video_kwargs"mm_processor_kwargs": video_kwargs,
}outputs = llm.generate([llm_inputs], sampling_params=sampling_params)
generated_text = outputs[0].outputs[0].textprint(generated_text)
本地一张4090,跑3B模型,报:cuda out of memory。
网上搜了下,解决方法有如下几个:
-
设置环境变量:
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
。 -
降低输入数据的大小:确保图像和视频的分辨率不会过高。
-
使用量化技术:对模型进行量化,以减少显存占用。
-
释放未使用的显存:在程序运行结束后调用
torch.cuda.empty_cache()
。 -
调整模型参数:减少
max_model_len
和limit_mm_per_prompt
的值。
调整后代码如下:
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
import torchimport os
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"MODEL_PATH = "Qwen/Qwen2.5-VL-3B-Instruct/"tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
# 指定大模型生成文本时的行为,温度越低生成的文本越确定,更倾向于选择概率最高的词
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=512)llm = LLM(model=MODEL_PATH,limit_mm_per_prompt={"image": 5, "video": 5}, # 减少多模态输入的数量max_model_len=512, # 减少最大序列长度gpu_memory_utilization=0.8)
prompt = "hello?"
messages = [{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)
# 计算文本输入的 token 数量
text_tokens = tokenizer(text, return_tensors="pt")
text_length = text_tokens.input_ids.shape[-1]
print(f"Text token length: {text_length}")outputs = llm.generate([text], sampling_params)for output in outputs:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")# 释放 GPU 缓存
del llm
torch.cuda.empty_cache()
代码中识别的是千问logo图片:
运行结果:
2.
Docker
也可以使用官方docker:
official docker image 。
参考文章:
https://blog.csdn.net/sherlockMa/article/details/145386087
【本地部署教程】Qwen2.5-VL 阿里最新开源最强的开源视觉大模型,支持视频!-CSDN博客
相关文章:
Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战
一、Qwen2.5-VL 简介 Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1)直观地理解事物&…...
【sql靶场】第18-22关-htpp头部注入保姆级教程
目录 【sql靶场】第18-22关-htpp头部注入保姆级教程 1.回顾知识 1.http头部 2.报错注入 2.第十八关 1.尝试 2.爆出数据库名 3.爆出表名 4.爆出字段 5.爆出账号密码 3.第十九关 4.第二十关 5.第二十一关 6.第二十二关 【sql靶场】第18-22关-htpp头部注入保姆级教程…...
SpringBoot实现发邮件功能+邮件内容带模版
发送简单邮件模版邮件 1.pom引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.5.13</version></dependency><dependency><groupId&…...
C# NX二次开发:矩形阵列和线性阵列等多种方法讲解
大家好,今天讲一些关于阵列相关的UFUN函数。 UF_MODL_create_linear_iset (view source):这个函数为创建矩形阵列。 intmethodInputMethod: 0 General 1 Simple 2 Identicalchar *number_in_xInputNumber in XC direction.char *distance_xInputSpac…...
OpenBMC:BmcWeb添加路由1 getParameterTag
BmcWeb对于路由的设计其实是参考了Crow BMCWEB_ROUTE(app, "/upload/image/<str>").privileges({{"ConfigureComponents", "ConfigureManager"}}).methods(boost::beast::http::verb::post, boost::beast::http::verb::put)([](const cro…...
【Android性能】Systrace分析
1,分析工具 1,Systrace新UI网站 Perfetto UI 2,Systrace抓取 可通过android sdk中自带的systrace抓取,路径一般如下,..\AppData\Local\Android\Sdk\platform-tools, 另外需要安装python2.7,…...
多种语言请求API接口方法
在当今的互联网世界中,应用程序编程接口(API)扮演着至关重要的角色,它们允许不同的服务和应用程序之间进行数据交换和功能共享。无论是获取天气预报、社交媒体数据还是进行支付操作,API都是背后的关键。不同的编程语言…...
【css酷炫效果】纯CSS实现瀑布流加载动画
【css酷炫效果】纯CSS实现瀑布流加载动画 缘创作背景html结构css样式完整代码基础版进阶版(无限往复加载) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492012 缘 创作随缘,不定时更新。 创作…...
【第15届蓝桥杯】软件赛CB组省赛
个人主页:Guiat 归属专栏:算法竞赛真题题解 文章目录 A. 握手问题(填空题)B. 小球反弹(填空题)C. 好数D. R格式E. 宝石组合F. 数字接龙G. 爬山H. 拔河 正文 总共8道题。 A. 握手问题(填空题&…...
20242817李臻《Linux⾼级编程实践》第四周
20242817李臻《Linux⾼级编程实践》第4周 一、AI对学习内容的总结 第5章 Linux进程管理 5.1 进程基本概念 进程与程序的区别 程序:静态的二进制文件(如/bin/ls),存储在磁盘中,不占用运行资源。进程:程…...
【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践
【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践 一、Prompt 提示词介绍:AI的“密码本” 1. Prompt的底层定义与价值 本质:Prompt是人与AI模型的“协议语言”,通过文本指令激活模型的特定推理…...
HTML中required与aria required区别
在HTML中,required和aria-required"true"都用于标识表单字段为必填项,但它们的作用和适用场景有所不同: 1. required 属性 • 功能属性:属于HTML5原生属性,直接控制表单验证逻辑。 • 作用: • …...
MySQL 锁
MySQL中最常见的锁有全局锁、表锁、行锁。 全局锁 全局锁用于锁住当前库中的所有实例,也就是说会将所有的表都锁住。一般用于做数据库备份的时候就需要添加全局锁,数据库备份的时候是一个表一个表备份,如果没有加锁的话在备份的时候会有其他的…...
halcon几何测量(一)3d_position_of_rectangle
目录 一、提取目标区域,选择不和边缘相交的目标二、计算矩形工件的姿态三、显示矩形的立体结构 一、提取目标区域,选择不和边缘相交的目标 1、提取目标区域:mean_image 、dyn_threshold 、fill_up 、connection 、select_shape 2、选择不和边…...
docker可视化之dpanel
1. 使用镜像加速 vim /etc/docker/daemon.json{ "registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https…...
Swagger 从 .NET 9 中删除:有哪些替代方案
微软已经放弃了对 .NET 9 中 Swagger UI 包 Swashbuckle 的支持。他们声称该项目“不再由社区所有者积极维护”并且“问题尚未得到解决”。 这意味着当您使用 .NET 9 模板创建 Web API 时,您将不再拥有 UI 来测试您的 API 端点。 我们将调查是否可以在 .NET 9 中使用…...
Qt 绘图
一、基础概念 Qt 绘图基于 QPainter(画家类)、QPaintDevice(绘图设备)和 QPaintEngine(绘图引擎)的协作实现。其中: QPainter 提供绘制图形、文本和图像的接口(如 drawLine()、d…...
用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件
回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件,如今3年过去了,计划使用Vue 3.5 TypeScript 把组件重新开发,有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…...
Python使用总结之Flask构建文件服务器,通过网络地址访问本地文件
Python使用总结之Flask构建文件服务器,通过网络地址访问本地文件 在 Web 开发中,静态文件(如图片、CSS、JavaScript)的管理是基础且重要的环节。Flask 提供的 send_from_directory 函数为开发者提供了灵活的文件服务解决方案。本文将详细解析其原理、用法及最佳实践。 一…...
从Excel到搭贝的转变过程
从Excel到搭贝 1. 简介 1.1 Excel简介 Excel 作为元老级的数据管理工具,功能强大且被广泛使用,但在现代工作场景中仍存在一些局限性,例如: 数据量处理有限:处理大规模数据时,Excel可能运行缓慢或崩溃。…...
C语言经典代码练习题
1.输入一个4位数:输出这个输的个位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("输入一个4位数:");scanf("%d",&a);printf("个位:%d\n"…...
Compose 的产生和原理
引言 compose 出现的目的: 重新定义android 上ui 的编写方式。为了提高android 原生ui开发效率。让android 的UI开发方式跟上时代。 正文 compose 是什么? 就是一套ui框架 和flutter 一样是一套ui框架 Flutter:跨平台开发趋势与企业应用的…...
JS做贪吃蛇小游戏(源码)
一、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel…...
c语言笔记 结构体内嵌套结构体的表示方式
目录 结构体内嵌套结构体 问:我们都该如何去访问该结构体里面的结构体的成员呢?怎么去给里面的成员赋值呢? 说明: 运行上述代码后,输出结果如下: 结构体内嵌套结构体 背景:如果我们在结构体中放结构体࿰…...
Vue3一个组件绑定多个 v-model,自定义 prop 和 event 名称
Vue3一个组件绑定多个 v-model,自定义 prop 和 event 名称 Vue3中v-model默认使用modelValue作为prop,update:modelValue作为事件,而Vue2使用的是value和input。此外,Vue3允许通过参数的方式为组件添加多个v-model绑定࿰…...
STM32---FreeRTOS事件标志组
一、简介 事件标志位:用一个位,来表示事件是否发生 事件标志组:一组事件标志位的集合,可以简单的理解时间标志组,就是一个整体。 事件标志租的特点: 它的每一个位表示一个时间(高8位不算&…...
分享一个项目中遇到的一个算法题
需求背景: 需求是用户要创建一个任务计划在未来执行,要求在创建任务计划的时候判断选择的时间是否符合要求,否则不允许创建,创建的任务类型有两种,一种是单次,任务只执行一次;另一种是周期&…...
入门 Sui Move 开发:9. 一个 Sui dApp 前端项目
内容概览 接下来一起通过 PTB 和 Navi SDK 实现一个一键存入借出的简单 DApp。 本节分为两部分: 创建一个 DApp 前端项目以及 Sui dApp Kit 的使用;了解 Navi SDK,主要包含的功能以及如何实现存入和借出功能; 最终完成我们的项…...
如何打造安全稳定的亚马逊采购测评自养号下单系统?
在当今的电商领域,亚马逊作为全球领先的在线购物平台,其商品种类繁多,用户基数庞大,成为了众多商家和消费者的首选。而对于一些需要进行商品测评或市场调研的用户来说,拥有一个稳定、安全的亚马逊账号体系显得尤为重要…...
c语言笔记 结构体基础
目录 基础知识 结构体定义 基础知识 在c语言中变量是有类型的,比如整型,char型,浮点型等,这些都是单一的类型,那么如果说我要定义一个学生的信息,那么这些单一的类型是不足以表达一个学生的全部信息&#…...
添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎
文章目录 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎如何添加步骤 1: 打开浏览器设置步骤 2: 添加新搜索引擎步骤 3: 保存设置 注意事项 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎 在使用 ChatGPT/Grok/Gemini 进行对话时,每次都需要先打开对应的网页࿰…...
golang-struct结构体
struct结构体 概述 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是 Golang 中一种复合类型,它是由一组具有相同或不同类型的数据字段组成的数据结构。 结构体是一种用户自定义类型,它可…...
矫平机:工业制造的“误差归零者”,如何重塑智造新生态?
在新能源汽车电池托盘的生产线上,一块2米长的铝合金板材因焊接应力产生了0.5毫米的隐形翘曲。这个看似微不足道的变形,却导致激光焊接工序的良率暴跌至65%。当工程师们尝试传统矫正方案时,发现高强度铝合金既不能加热校形,又无法承…...
Springboot中的@ConditionalOnBean注解:使用指南与最佳实践
在使用Spring Boot进行开发时,大家应该都听说过条件注解(Conditional Annotations)。其中的ConditionalOnBean注解就很有趣,它帮助开发者在特定条件下创建和注入Bean,让你的应用更加灵活。今天就来聊聊这个注解的使用场…...
Spring 中 BeanFactoryPostProcessor 的作用和示例
一、概览 1. 核心定位 BeanFactoryPostProcessor 是 Spring 容器级别的扩展接口,在 Bean 实例化之前,对 Bean 的配置元数据(即 BeanDefinition)进行动态修改或扩展。其核心功能围绕以下两点: 修改现有 Bean 的定义&…...
PDFMathTranslate 安装、使用及接入deepseek
PDFMathTranslate 安装、使用及接入deepseek 介绍安装及使用接入deepseek注意 介绍 PDFMathTranslate 是非常好用的科学 PDF 文档翻译及双语对照工具,可以将论文按照其原本的排版结构执行多种语言翻译,并且可以接入如:谷歌翻译、deepl、deep…...
Docker生存手册:安装到服务一本通
文章目录 一. Docker 容器介绍1.1 什么是Docker容器?1.2 为什么需要Docker容器?1.3 Docker架构1.4 Docker 相关概念1.5 Docker特点 二. Docker 安装2.1 查看Linux内核版本2.2 卸载老版本docker,避免产生影响2.3 升级yum 和配置源2.4 安装Dock…...
JAVA中关于图形化界面的学习(GUI)动作监听,鼠标监听,键盘监听
动作监听: 先创建一个图形化界面,接着创建一个按钮对象,设置按钮的大小。 添加一个addActionListener(); addActionListener() 方法定义在 java.awt.event.ActionListener 接口相关的上下文中,许多支持用户交互产生…...
wepy微信小程序自定义底部弹出框功能,显示与隐藏效果(淡入淡出,滑入滑出)
视图html部分 <view class"salePz"><view class"btnSelPz" tap"pzModelClick">去选择</view><!-- modal --><view class"modal modal-bottom-dialog" hidden"{{hideFlag}}"><view class&q…...
Api架构设计--- HTTP + RESTful
Api架构设计--- HTTP RESTful 什么是RESTfulRESTful 设计原则RESTful 接口类型RESTful 状态码RESTful Uri设计原则Api传参:QueryString 和 UriPath RESTful和HTTP的区别注意事项 什么是RESTful RESTful(Representational State Transfer)是一…...
设计模式-适配器模式
适配器模式是一种结构型设计模式,用于将一个类的接口转换为客户端期望的另一个接口,使得原本不兼容的类可以协同工作。它的核心思想是通过中间层(适配器)解决接口不匹配的问题,类似于电源插头转换器。 核心思想 适配…...
MacBook部署达梦V8手记
背景 使用Java SpringBootDM开发Web应用,框架有License,OSX加载dll失败,安装了Windows 11,只有一个C盘,达梦安装后因为C盘权限问题,创建数据库失败,遂采用Docker容器方式部署。 下载介质 官网在…...
MySQL程序
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. mysqld (MySQL服务器) mysqld也被称为MySQL服务器,是⼀个多线程程序,对数据⽬录进⾏访问管理(包含数据库…...
APB-清华联合腾讯等机构推出的分布式长上下文推理框架
APB (Accelerating Distributed Long-Context Inference by Passing Compressed Context Blocks acrossGPUs)是清华大学等机构联合提出的分布式长上下文推理框架。通过稀疏注意力机制和序列并行推理方式,有效解决了大模型处理长文本时的效率瓶颈。APB采用更小的Anch…...
python爬虫笔记(一)
文章目录 html基础标签和下划线无序列表和有序列表表格加边框 html的属性a标签(网站)target属性换行线和水平分割线 图片设置宽高width,height html区块——块元素与行内元素块元素与行内元素块元素举例行内元素举例 表单from标签type属性pla…...
Pycharm接入DeepSeek,提升自动化脚本的写作效率
一.效果展示: 二.实施步骤: 1.DeepSeek官网创建API key: 创建成功后,会生成一个API key: 2. PyCharm工具,打开文件->设置->插件,搜索“Continue”,点击安装 3.安装完成后&…...
spring boot 过滤器简单demo
1. 过滤器(Filter)的概念 过滤器是 Java Web 应用中的一种组件,它可以在请求到达目标资源(如 Controller)之前或响应返回客户端之后,对请求和响应进行统一处理。它的核心作用是对 HTTP 请求和响应进行拦截…...
3.8 Spring Boot监控:Actuator+Prometheus+Grafana可视化
在Spring Boot应用中,通过整合Actuator、Prometheus和Grafana可以构建完整的监控体系,实现指标采集、存储和可视化。以下是具体实现步骤: 一、Spring Boot Actuator 配置 作用:暴露应用健康指标、性能数据等监控端点。 1. 添加依…...
C++中的单例模式及具体应用示例
AI 摘要 本文深入探讨了C中的单例模式及其在机器人自主导航中的应用,特别是如何通过单例模式来管理地图数据。文章详细介绍了单例模式的基本结构、优缺点以及在多线程环境中的应用,强调了其在保证数据一致性和资源管理中的重要性。 接着,文章…...
网络编程——套接字、创建服务器、创建客户端
一、套接字 1.1什么是套接字 套接字文件,原本就是一个和管道文件类似,用来实现进程间通信的一个文件 既然有了管道文件,当时为什么还要开发套接字文件,去实现进程的通信 因为管道文件是半双工模式的 套接字文件是全双工模式的…...