当前位置: 首页 > news >正文

Multi-Query Attention:传统自注意力( Self-Attention)优化显存和加速方案

本文导读:Multi-Query Attention(MQA)是 Google Research 2022 年提出的一项轻量化注意力技术,通过“多查询、单键值”的设计,把自注意力层的 KV 缓存从 O(h·n·d) 降到 O(n·d),在不牺牲模型精度的前提下大幅节省显存与带宽。如今 Falcon-40B、ChatGLM2-6B、Llama-3-Instruct 等热门开源模型均默认开启 MQA。本文以“原理 → 数学推导 → 代码实践 → 典型模型 → 优缺点”的路线,系统梳理 MQA 的来龙去脉,并给出 PyTorch / Transformers 的落地示例,帮助你一步上手。

摘要

Multi-Query Attention 通过共享 Key / Value、仅为每个头保留独立 Query,使注意力计算的时间复杂度不变、显存使用与 I/O 成本成倍下降;在 GPT-NeoX-20B 长序列基准中将推理速度提升 30-40%,显存削减约 60%。

1 痛点:多头注意力的 KV 爆炸

多头注意力把隐藏维 d 均分成 h 个头,每个头都要持有一份 KV。在自回归推理阶段,需要把所有历史 token 的 KV 保存在 GPU 显存中:

\text{Memory}\!=\!O(h\!\times\!n\!\times\!d_{\text{head}})

h = 32、n = 8 K、d=4 096 时,仅 KV 就超过 8 GB。 这直接限制了长上下文能力与并发数。

2 原理:多查询、单键值

2.1 设计思想

  • 只保留 h 份 Query:保持头部多样性;

  • 共享 1 份 Key / Value:删除冗余拷贝。

    这样 KV cache 从 h 倍 缩到 1 倍,注意力得分公式变为

    \text{softmax}\!\Bigl(\frac{Q_i\,K^\top}{\sqrt{d_h}}\Bigr)V,\quad i\!=\!1\ldots h

    计算 FLOPs 与 dense attention 完全一致。

2.2 数学推导

设隐藏维 d= h·d_h,序列长 n

实现

Key / Value 形状

显存复杂度

多头 (MHA)

[h, n, d_h]

O(hnd_h)

多查询 (MQA)

[1, n, d_h]

O(nd_h)

节省比例约 1/h。当 h=32 时,显存下降 31 ×。

3 代码实践:PyTorch & Transformers

from transformers import AutoModelForCausalLM, AutoConfig
config = AutoConfig.from_pretrained("tiiuae/falcon-7b")
config.multi_query = True                 # ① 打开 MQA
model = AutoModelForCausalLM.from_pretrained("tiiuae/falcon-7b",config=config,torch_dtype="auto",device_map="auto")

Hugging Face ≥ v4.35 在 Falcon, Llama-3, ChatGLM2 等权重中已内置 MQA;对于自定义模型,可在 nn.MultiheadAttention 前手动复制查询、共享 KV 并改写前向传播。源码参考 modeling_RW.py。

下面给出一个基于 GPT-style Decoder-Only 架构的 Multi-Query Attention 伪代码示例。该实现思路如下:

伪代码(gpt风格)

def multi_query_attention(X, Wq, Wkv, mask):"""X: [B, T, D] 输入隐藏状态Wq: [D, H * d_h] 查询投影Wkv: [D, 2 * d_h] 键值投影(Key 和 Value 共享)mask: [T, T] 因果掩码,下三角为 True,上三角为 False返回: [B, T, D] 注意力输出"""B, T, D = X.shapeH = num_headsd_h = D // H# 1. 计算多头查询 Q: [B, T, H, d_h]#    先线性映射 -> [B, T, H*d_h] -> reshapeQ = X @ Wq                      # [B, T, H*d_h]Q = Q.reshape(B, T, H, d_h)     # [B, T, H, d_h]# 2. 计算共享的 K, V: [B, T, 1, d_h] 各一份KV = X @ Wkv                    # [B, T, 2*d_h]K_shared, V_shared = split(KV, 2, axis=-1)  # 各 [B, T, d_h]# 为方便多头计算,插入头维度大小=1K = K_shared.reshape(B, T, 1, d_h)  # [B, T, 1, d_h]V = V_shared.reshape(B, T, 1, d_h)  # [B, T, 1, d_h]# 3. 计算注意力分数并加掩码#    scores = Q @ K^T / sqrt(d_h)  => [B, H, T, T]#    mask 后 softmax -> weightssqrt_d = math.sqrt(d_h)# 先转置 K 以便矩阵乘K_t = K.permute(0, 2, 3, 1)      # [B, 1, d_h, T]# Q: [B, T, H, d_h] -> permute -> [B, H, T, d_h]Q_t = Q.permute(0, 2, 1, 3)      # [B, H, T, d_h]scores = (Q_t @ K_t) / sqrt_d    # [B, H, T, T]# 应用因果掩码(把上三角置为 -inf)scores = scores.masked_fill(~mask[None, None, :, :], -inf)weights = softmax(scores, axis=-1)  # [B, H, T, T]# 4. 加权 V 得到每头输出#    weights [B, H, T, T] 乘以 V [B, T, 1, d_h]#    先 reshape V 以对齐: [B, 1, T, d_h]V_t = V.permute(0, 2, 1, 3)      # [B, 1, T, d_h]# 输出 head_out: [B, H, T, d_h]head_out = weights @ V_t         # [B, H, T, d_h]# 5. 拼回原始维度#    head_out -> [B, T, H, d_h] -> reshape [B, T, D]head_out = head_out.permute(0, 2, 1, 3)  # [B, T, H, d_h]out = head_out.reshape(B, T, D)         # [B, T, D]return out

说明

  • Wq 将每个位置的向量映射成 H 份 Query,而 Wkv 只生成一份 Key/Value

  • mask 是一个下三角布尔矩阵,用于保证自回归生成仅访问前序位置。

  • 各头共享同一份 K、V,但各自有独立的 Q,可并行计算。

整合到 GPT Block

在 GPT-Decoder Block 中,只需将原本的 MHA 换成上面 multi_query_attention,其余残差、LayerNorm、FFN 等保持不变:

def gpt_block(X, params):# 1. LayerNorm 前归一化X_norm = LayerNorm(X)# 2. Multi-Query Attentionattn_out = multi_query_attention(X_norm,params.Wq,params.Wkv,causal_mask(X.shape[1]))# 3. 残差连接X = X + attn_out# 4. LayerNorm + 前馈 FFNY = LayerNorm(X)ffn_out = FeedForward(Y, params.ffn)X = X + ffn_outreturn X

如此,即可在 GPT-类模型中原地启用 Multi-Query Attention,实现 KV 去复用、显存节省和推理提速。


4 典型模型与实测收益

模型

参数

采用 MQA

长序推理显存↓

吞吐↑

来源

Falcon-40B

40 B

默认

-60 %

+35 %

ChatGLM2-6B

6 B

默认

-50 %

+42 %

Llama-3-Instruct-8B

8 B

默认

-58 %

+33 %

5 与 FlashAttention 的协同

FlashAttention 负责 块化读写 + SRAM 缓存,而 MQA 负责 KV 去冗余;两者叠加可将显存再降 1/3,并在 16 K-32 K context 下保持 2 × 以上 GPU 吞吐。

6 优缺点分析

6.1 优势

  • 显存占用大幅降低,推理/训练可上更长序列或更大 batch。

  • 内存带宽需求下降,带来 30-40 %的实际加速。

  • 易于集成:只改 Attention Kernel,不动模型参数形状。

6.2 潜在不足

  • 头间 Key/Value 共享可能略减精准度,在极端细粒度任务上需调参弥补。

  • 目前主流实现只支持 Decoder-Only,Encoder-Decoder 尚需额外 kernel。

7 结语

在“长文本 + 轻量化”浪潮下,Multi-Query Attention 已成为大模型的必选项。只需一行配置即可吃到显存减半、速度翻倍的“硬件红利”,你还不赶快试试吗?

👍 点个赞 | ⭐ 收藏 | 💬 评论区聊聊 | 🔄 转发给同事——你的支持是我持续更新的最大动力!

参考文献

  1. Shazeer N. “Multi-Query Attention with Key/Value Memory Reduction.” Google Research (2022). 

  2. Google AI Blog, “Efficient Transformer Inference via MQA.” 2022. 

  3. Dao T. et al., “FlashAttention.” NeurIPS 2023. 

  4. Falcon-40B 技术博客,TII 2023. 

  5. Hugging Face Blog, “Llama-3 with Multi-Query Attention.” 2024. 

  6. Fireworks AI, “Multi-Query Attention Is All You Need.” 2023. 

  7. 清华 KEG,“ChatGLM2-6B 模型卡.” 2023. 

  8. TII Discussion #46,“Where is multiquery attention code?” 2023. 

  9. Patwary M. et al., “Efficient Inference with MQA in Megatron-LM.” NVIDIA Tech Report 2023. 

相关文章:

Multi-Query Attention:传统自注意力( Self-Attention)优化显存和加速方案

本文导读:Multi-Query Attention(MQA)是 Google Research 2022 年提出的一项轻量化注意力技术,通过“多查询、单键值”的设计,把自注意力层的 KV 缓存从 O(hnd) 降到 O(nd),在不牺牲模型精度的前提下大幅节…...

学习路之uniapp--unipush2.0推送功能--服务端推送消息

学习路之uniapp--unipush2.0推送功能--服务端推送消息 一、二、三、 一、 二、 三、...

如何使用AI搭建WordPress网站

人工智能正迅速成为包括网页设计在内的许多行业在其功能设置中添加的一种工具。在数字设计和营销领域,许多成熟的工具都在其产品中添加了人工智能功能。WordPress 也是如此。作为目前最流行的网站建设工具之一,WordPress 的人工智能插件越来越多也就不足…...

Java 项目管理工具:Maven 与 Gradle 的深度对比与选择

Java 项目管理工具:Maven 与 Gradle 的深度对比与选择 在 Java 开发领域,项目管理工具对于项目的构建、依赖管理等起着至关重要的作用。Maven 和 Gradle 是目前最主流的两款工具,它们各自有着独特的优势和适用场景。本文将对 Maven 与 Gradl…...

Elasticsearch简单集成java框架方式。

Elasticsearch 在 Java 中最常用的客户端是什么?如何初始化一个 RestHighLevelClient?如何用 Spring Boot 快速集成 Elasticsearch?Spring Data Elasticsearch 如何定义实体类与索引的映射? 最常用的 Java 客户端 目前官方推荐使用…...

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Hidden Search Widget (交互式搜索框)

📅 我们继续 50 个小项目挑战!—— Hidden Search Widget 组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ ✨ 组件目标 点击按钮展开隐藏的搜索框 再次点击按钮…...

python爬虫和逆向:百度翻译数据采集的几种方式

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、官方API方式(推荐)1.1 百度翻译开放平台API二、网页版逆向方式(代码可直接运行)2.1 拿到js加密方法2.2 python解密代码三、浏览器自动化方式3.1 Selenium自动化操作3.2 Playwright自动化四、移动端API逆向4.1 分…...

spring5-配外部文件-spEL-工厂bean-FactoryBean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…...

Ubuntu部署私有Gitlab

这个东西安装其实挺简单的&#xff0c;但是因为我这边迁移了数据目录和使用自己安装的 nginx 代理还是踩了几个坑&#xff0c;所以大家可以注意下 先看下安装 # 先安装必要组件 sudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl# 添加gi…...

Activiti 7建表语句及注释

Activiti数据库表Oracle兼容DM建表语句及字段注释。 附件下载版地址点这里 --通用属性表 create table ACT_GE_PROPERTY (NAME_ NVARCHAR2(64),VALUE_ NVARCHAR2(300),REV_ INTEGER,primary key (NAME_) );COMMENT ON TABLE ACT_GE_PROPERTY IS 通用属性表;COMMENT ON COLUMN …...

React中使用 Ant Design Charts 图表

// 引入 Ant Design Charts 的柱状图组件 Column import { Column } from ant-design/charts;// 定义函数组件 App&#xff0c;用于展示柱状图 function App() {// 数据源&#xff1a;每个对象代表一个柱子&#xff0c;包含类型&#xff08;type&#xff09;和销售额&#xff0…...

佰力博科技与您探讨压电材料的原理与压电效应的应用

压电材料的原理基于正压电效应和逆压电效应&#xff0c;即机械能与电能之间的双向转换特性。 压电材料的原理源于其独特的晶体结构和电-机械耦合效应&#xff0c;具体可分为以下核心要点&#xff1a; 1. ‌正压电效应与逆压电效应的定义‌ ‌正压电效应‌&#xff1a;当压电…...

vscode打开vue + element项目

好嘞&#xff0c;我帮你详细整理一个用 VS Code 来可视化开发 Vue Element UI 的完整步骤&#xff0c;让你能舒服地写代码、预览界面、调试和管理项目。 用 VS Code 可视化开发 Vue Element UI 全流程指南 一、准备工作 安装 VS Code 官网下载安装&#xff1a;https://code…...

一步步解析 HTTPS

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

使用vue2做一个生成二维码的案例【可当组件使用】

最近有个需求需要用前端来生成一个二维码&#xff0c;就封装了一个简单的组件&#xff0c;这篇文章来分享给大家。 使用的技术&#xff1a; Vue2 Ant Design Vue QRCodeJS2 node版本&#xff1a;16.20 组件样式&#xff1a; 大家可以根据自己的需求来调整代码。 依赖安装&am…...

Hadoop-HA高可用集群启动nameNode莫名挂掉,排错解决

Hadoop-HA高可用集群启动nameNode莫名挂掉&#xff0c;排错解决 nameNode错误日志 2025-05-21 16:14:12,218 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node01/192.168.191.111:8485. Already tried 5 time(s); retry policy is RetryUpToMaximumCoun…...

从零基础到最佳实践:Vue.js 系列(2/10):《模板语法与数据绑定》

Vue.js 模板语法与数据绑定&#xff1a;从基础到实践 关键点 Vue.js 的模板语法使用 HTML 结合特殊指令&#xff08;如 v-bind、v-on&#xff09;&#xff0c;实现动态界面。插值&#xff08;{{ }}&#xff09;显示数据&#xff0c;指令控制 DOM 行为&#xff0c;双向绑定简化…...

第二章:Android常用UI控件

1、介绍&#xff1a; 控件是界面组成的主要元素&#xff0c;界面中的控件有序排放和完美组合&#xff0c;便可在用户眼前呈现出丰富多彩的页面。 2、常用控件&#xff1a; 一、TextView控件&#xff1a; 在使用手机时&#xff0c;经常会看见一些文本信息&#xff0c;这些文本…...

LeetCode 1004. 最大连续1的个数 III

LeetCode 1004题 “最大连续1的个数 III” 是一道关于数组和滑动窗口的问题。题目描述如下&#xff1a; 题目描述 给定一个由若干 0 和 1 组成的数组 nums&#xff0c;以及一个整数 k。你可以将最多 k 个 0 翻转为 1。返回经过翻转操作后&#xff0c;数组中连续 1 的最大个数…...

Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持

引言 Apache Flink 社区很开心地宣布&#xff0c;在经过4个月的版本开发之后&#xff0c;Flink CDC 3.4.0 版本已经正式发布。Flink CDC 是流行的流式数据集成框架&#xff0c;CDC 3.4.0 版本强化了框架对于高频表结构变更的支持&#xff0c;框架支持了 batch 执行模式&#x…...

NIFI的处理器:JSLTTransformJSON 2.4.0

该处理器使用JSLT转换FlowFile JSON有效负载的格式。使用转换后的内容创建新的FlowFile&#xff0c;并将其路由到“成功”关系。如果JSLT转换失败&#xff0c;则将原始FlowFile路由到“失败”关系。 需要注意的是&#xff0c;编译JSLT转换可能相当昂贵。理想情况下&#xff0c…...

k8s-ServiceAccount 配置

在 Kubernetes 中 ServiceAccount 是一种为 Pod 提供身份认证的机制&#xff0c;允许 Pod 以特定的身份访问 Kubernetes API 服务器。 **Role&#xff08;角色&#xff09;**是 Kubernetes 中定义权限的资源对象&#xff0c;它只能在特定的命名空间内生效。Role 用于定义一组权…...

Python Lambda 表达式

​在 Python 编程中&#xff0c;Lambda 表达式是一个非常强大且实用的工具&#xff0c;它就像一把瑞士军刀&#xff0c;能在各种场景下帮助我们写出简洁、优雅的代码。接下来&#xff0c;就让我们一起深入探索 Python Lambda 表达式的奥秘。 一、Lambda 表达式的基础认知​ 1…...

【ffmpeg】ffprobe基本用法

ffprobe 是 FFmpeg 工具集中的一个强大命令行工具&#xff0c;主要用于分析多媒体文件&#xff08;如视频、音频等&#xff09;的格式和内容信息。它可以提取文件的元数据、编解码器信息、流详情、帧信息等&#xff0c;而无需对文件进行转码或修改。 基本用法 ffprobe [选项] …...

Java 代码生成工具:如何快速构建项目骨架?

Java 代码生成工具&#xff1a;如何快速构建项目骨架&#xff1f; 在 Java 项目开发过程中&#xff0c;构建项目骨架是一项繁琐但又基础重要的工作。幸运的是&#xff0c;Java 领域有许多代码生成工具可以帮助我们快速完成这一任务&#xff0c;大大提高开发效率。 一、代码生…...

模板初阶【C++】

一、 泛型编程 前言&#xff1a; 我们经常会用到数据的交换&#xff0c;C中的函数重载可以完成 //函数重载 void swap(int& x,int& y) {int tmp x;x y;y tmp; }void swap(double& x, double& y) {double tmp x;x y;y tmp; }void swap(char& x, ch…...

URL 类知识点详解

URL 类知识点详解 1. 基本概念与位置 所属包: java.net.URL核心功能: 表示统一资源定位符(Uniform Resource Locator),用于标识和定位网络资源(如网页、文件、API接口)。支持多种协议:HTTP、HTTPS、FTP、file(本地文件)等。不可变类:一旦创建,内容不可修改(线程安全…...

如何使用redis做限流(golang实现小样)

在实际开发中,限流(Rate Limiting)是一种保护服务、避免接口被恶意刷流的常见技术。常用的限流算法有令牌桶、漏桶、固定窗口、滑动窗口等。由于Redis具备高性能和原子性操作,常常被用来实现分布式限流。 下面给出使用Golang结合Redis实现简单限流的几种常见方式(以“固定…...

OpenHarmony外设驱动使用 (九),Pin_auth

OpenHarmony外设驱动使用 &#xff08;九&#xff09; Pin_auth 概述 功能简介 口令认证是端侧设备不可或缺的一部分&#xff0c;为设备提供一种用户认证能力&#xff0c;可应用于设备解锁、支付、应用登录等身份认证场景。用户注册口令后&#xff0c;口令认证模块就可为设备…...

MySQL基础(​​InnoDB)

✅ ​​InnoDB​​&#xff1a;支持事务、行级锁、外键。 ​​为什么要用事务&#xff1f;​​ ​​安全​​&#xff1a;如果中途发现错误&#xff08;比如改错分数&#xff09;&#xff0c;可以一键撤销所有操作&#xff0c;就像游戏里的“回档”功能&#xff01; ​​原子…...

自建srs实时视频服务器支持RTMP推流和拉流

文章目录 一、整体示意图二、服务器端1.srs简介及架构2.docker方式安装3.k8s方式安装4.端口 三、推流端1.OBS Studio2.ffmpeg推流3.streamlabs苹果手机4.twire安卓手机5.网络推流摄像头 四、拉流端1.vlc2.srs 参考awesome系列&#xff1a;https://github.com/juancarlospaco/aw…...

​C++性能优化的7大核心策略与实战案例

在大型C项目中&#xff0c;性能优化需从语言特性、系统架构、硬件特性等多维度切入。以下是经过验证的关键技术路径&#x1f447; &#x1f527; ​一、内存管理的极致控制​ ​问题​&#xff1a;频繁的动态内存分配会导致性能抖动和内存碎片&#xff0c;尤其在实时系统中可能…...

《国家高等教育智慧平台:重塑学习新时代》

时代之需&#xff1a;平台应运而生 在数字化浪潮席卷全球的当下&#xff0c;高等教育领域也在经历着深刻的变革。数字化技术的迅猛发展&#xff0c;正以前所未有的力量重塑着高等教育的形态。从在线课程的兴起&#xff0c;到虚拟实验室的应用&#xff0c;再到智能化教学工具的普…...

【Django】Django DRF 中如何手动调用分页器返回分页数据(APIView,action场景)

&#x1f4e6; Django DRF 中如何手动调用分页器返回分页数据&#xff08;APIView&#xff0c;action场景&#xff09; 在使用 Django REST Framework&#xff08;DRF&#xff09;时&#xff0c;很多人习惯了用 GenericAPIView 或 ViewSet 自动帮我们处理分页。但在某些场景中…...

遨游科普:三防平板有哪些品牌?哪个品牌值得推荐?

在工业数字化与户外作业场景日益多元化的今天&#xff0c;三防平板凭借其卓越的防护性能与功能集成能力&#xff0c;成为电力巡检、地质勘探、应急救援等领域不可或缺的智能终端。所谓“三防”&#xff0c;即防尘、防水、防摔&#xff0c;国际标准IP68与军用标准MIL-STD-810H的…...

Flannel后端为UDP模式下,分析数据包的发送方式(一)

Flannel 使用的是 UDP 模式&#xff0c;分析发往 10.244.2.5 的数据包会从哪个网卡发出。 路由表 以下是提供的路由表&#xff1a; Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 …...

华为鸿蒙电脑发布,折叠屏怎么选?

1⃣屏幕特性&#xff1a; 分辨率&#xff1a;高分辨率能保证图像和文字的清晰细腻 屏幕材质&#xff1a;OLED 屏幕通常具有更好的对比度、色彩表现和更广的色域 刷新率&#xff1a;支持自适应刷新率的屏幕可以根据不同的使用场景自动调整刷新率&#xff0c;在保证流畅度的同时优…...

将VMware上的虚拟机和当前电脑上的Wifi网卡处在同一个局域网下,实现同一个局域网下实现共享

什么是桥接模式&#xff1a;桥接模式&#xff08;Bridging Mode&#xff09;是一种网络连接模式&#xff0c;常用于虚拟机环境中&#xff0c;将虚拟机的虚拟网络适配器直接连接到主机的物理网络适配器上&#xff0c;使虚拟机能够像独立的物理设备一样直接与物理网络通信 1.打开…...

论文阅读:Auto-Encoding Variational Bayes

对图像生成论文自编码变分贝叶斯Auto-Encoding Variational Bayes原理理解和记录 Abstract 我们如何在有向概率模型中&#xff0c;在具有难以处理的后验分布的连续潜在变量z和大型数据集的存在下&#xff0c;执行有效的推理和学习&#xff1f; 我们介绍了一种随机变分推理和学…...

API面临哪些风险,如何做好API安全?

API面临的风险 API&#xff08;应用程序编程接口&#xff09;在现代软件开发和集成中扮演着至关重要的角色&#xff0c;但同时也面临着多种安全风险&#xff0c;主要包括以下几个方面&#xff1a; 数据泄露风险&#xff1a; API通常涉及敏感数据的传输和交换&#xff0c;如用…...

C# Prism框架详解:构建模块化WPF应用程序

1. Prism框架简介 Prism是一个用于构建松散耦合、可测试和可维护的WPF桌面应用程序的框架。它最初由微软模式与实践团队开发&#xff0c;现在由社区维护&#xff0c;是构建企业级WPF应用程序的首选框架之一。 Prism框架的核心优势&#xff1a; 模块化设计&#xff1a;将应用…...

【工具教程】图片识别内容改名,图片指定区域识别重命名,批量识别单据扫描件批量改名,基于WPF和腾讯OCR的实现方案

基于WPF和腾讯OCR的图片指定区域识别与批量重命名实现方案 一、应用场景 ​​电商商品管理​​ 电商平台每天需处理大量商品图片&#xff0c;原始文件名无规律&#xff08;如IMG_001.jpg&#xff09;。通过指定图片中商品名称、颜色、尺码等区域&#xff0c;OCR识别后自动重命名…...

数独求解器3.0 增加latex格式读取

首先说明两种读入格式 latex输入格式说明 \documentclass{article} \begin{document}This is some text before oku.\begin{array}{|l|l|l|l|l|l|l|l|l|} \hline & & & & 5 & & 2 & 9 \\ \hline& & 5 & 1 & & 7…...

WPF核心类继承树结构

WPF(Windows Presentation Foundation)的类继承结构非常庞大而复杂&#xff0c;以下是最核心的继承树结构&#xff0c;按照主要功能区域展示&#xff1a; 基础对象层级 Object └── DispatcherObject└── DependencyObject├── Freezable│ ├── Animatable│ │ …...

Mysql的binlog日志

环境准备 [rootmysql152 ~]# yum install -y mysql-server mysql [rootmysql152 ~]# systemctl enable mysqld --now1.查看正在使用的binlog日志文件 mysql> show master status; ---------------------------------------------------------------------------- | File …...

Java 安全SPEL 表达式SSTI 模版注入XXEJDBCMyBatis 注入

https://github.com/bewhale/JavaSec https://github.com/j3ers3/Hello-Java-Sec https://mp.weixin.qq.com/s/ZO4tpz9ys6kCIryNhA5nYw #Java 安全 -SQL 注入 -JDBC&MyBatis -JDBC 1 、采用 Statement 方法拼接 SQL 语句 2 、 PrepareStatement 会对 SQL 语…...

TypeScript 泛型讲解

如果说 TypeScript 是一门对类型进行编程的语言&#xff0c;那么泛型就是这门语言里的&#xff08;函数&#xff09;参数。本章&#xff0c;我将会从多角度讲解 TypeScript 中无处不在的泛型&#xff0c;以及它在类型别名、对象类型、函数与 Class 中的使用方式。 一、泛型的核…...

BERT、GPT-3与超越:NLP模型演进全解析

自然语言处理&#xff08;NLP&#xff09;领域近年来经历了前所未有的变革&#xff0c;从早期的统计方法到如今的深度学习大模型&#xff0c;技术的进步推动了机器理解、生成和交互能力的飞跃。其中&#xff0c;BERT和GPT-3作为两个里程碑式的模型&#xff0c;分别代表了不同的…...

RISC-V IDE MRS2 开发笔记一:volatile关键字的使用

RISC-V IDE MRS2 开发笔记一&#xff1a;volatile关键字的使用 一、volatile是什么 二、GCC 中 volatile 的行为 2.1禁止编译器优化 2.2 不等于内存屏障 2.3 GCC扩展行为 三、什么时候需要 volatile 3.1防止编译器优化掉“有效代码” 3.2 访问硬件寄存器 3.3 中断服务…...

25、工业防火墙 - 工控网络保护 (模拟) - /安全与维护组件/industrial-firewall-dcs-protection

76个工业组件库示例汇总 工业防火墙 - 工控网络保护 (模拟) 概述 这是一个交互式的 Web 组件,旨在模拟工业防火墙在保护关键工控网络(特别是 DCS - 分布式控制系统)免受网络攻击(如勒索软件传播)方面的核心功能。组件通过可视化简化的网络拓扑、模拟网络流量、应用防火…...