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

昇腾CANN/GE Concat No Task特性分析

Concat No Task 特性分析【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge1. 特性背景1.1 问题场景在深度学习模型中ConcatD/ConcatV2D算子用于将多个输入 Tensor 沿指定维度拼接为一个输出 Tensor。传统的 Concat 算子执行流程为输入A ──┐ 输入B ──┼──► Concat Task ──► 输出(拼接结果) 输入C ──┘其中Concat Task需要在昇腾 AI Core 上启动一个计算任务通过 DataMove 指令将各输入数据搬运到输出地址的连续内存区域。1.2 优化思路当 Concat 算子的输入 Tensor 在内存中天然连续排列时实际上不需要执行任何数据搬运操作——输出地址直接复用第一个输入的地址即可。Concat No Task 特性通过在编译期识别这种场景将 Concat 算子标记为虚拟算子Virtual Op从而不生成硬件 Task跳过 AI Core 任务下发不搬运内存输出直接复用输入内存地址消除冗余计算避免无意义的数据搬移2. 用户使用场景2.1 典型场景分布式训练中的 AllGather Concat在分布式训练中多个卡通过 AllGather 收集各自的数据后往往需要拼接为完整批次Card0: Data ──► AllGather ──┐ ├──► ConcatD ──► 完整Batch Card1: Data ──► AllGather ──┘AllGather 输出的数据在内存中已经按卡号顺序连续排列Concat 只是逻辑上的拼接物理上不需要搬运数据。2.2 典型场景分块计算后的结果合并将大 Tensor 拆分到多个算子并行计算后合并结果Input ──► Split ──┬──► Relu ──┐ ├──► Relu ──┼──► ConcatD ──► Output └──► Relu ──┘当 Split 沿 batch 维度拆分、各分支计算不改变内存布局时Concat 的输入天然连续。2.3 适用条件Concat No Task 优化需要同时满足以下严格条件条件类别具体要求算子类型仅限ConcatD和ConcatV2DShape 约束concat_dim 轴之前的所有维度值必须为 1对齐约束concat_dim 轴原始尺寸必须是 align_shape 对应维度的整数倍无 padding输入约束不能有 Scalar 输入所有输入 Tensor 大小必须是 32 字节对齐来源约束不能有多个输入来源于同一个输出锚点前驱节点不能是 DATA、REFDATA、VARIABLE、CONSTANTOP、CONSTANT 等节点类型前驱节点不能包含子图subgraph前驱属性不能有 continuous_input、continuous_output、reference 等属性后继节点后继节点不能已经是虚拟算子已有 _no_task 属性输出约束输入不能同时是模型输出NetOutput内存类型所有输入的内存类型必须一致LxFusion不能涉及 LxFusionL1/L2/UB 地址、lxslice 算子Shape 模式不支持 Unknown Shape动态 Shape场景图模式不支持 Single Op 场景和内存非连续分配场景3. 对外接口3.1 编译期属性标记Concat No Task 通过以下 Graph 属性与系统其他模块交互属性名类型设置对象说明_no_taskboolConcat 算子 OpDesc标记该算子不生成硬件 Task_nopadding_continuous_inputboolConcat 算子 OpDesc标记输入为无 padding 的连续内存_output_reuse_inputboolConcat 算子 OpDesc标记输出复用输入内存_reuse_input_on_dim_indexint64Concat 算子 OpDesc指定复用输入内存的维度索引固定为 0can_reused_for_concat_optimizebool前驱节点的输出 TensorDesc标记该输出已被 Concat 优化占用不可再被其他 Concat 复用3.2 Pass 注册ConcatNotaskPass 注册为 O3 优化级别的 GraphPass REG_PASS_OPTION(ConcatNotaskPass).LEVELS(OoLevel::kO3);在编译流程中该 Pass 运行于OptimizeStage2的最后阶段在子图合并完成后、内存冲突处理之前执行graph_manager.cc: OptimizeAfterMergeSubGraph() ├── ... (前期优化) ├── BufferPoolMemoryPass ├── ParallelGroupPass └── ConcatNotaskPass ← 图稳定后执行3.3 运行时行为在运行时RT1 和 RT2标记了_no_task的算子会被特殊处理RT1 (Davinci)TbeKernelHandle::NeedInit检测到_no_task属性后返回 false跳过 Kernel 初始化RT2 (V2)IsVirtualOp函数检测_no_task属性在 AICore Node Converter 中跳过 Task 生成4. 具体实现4.1 整体架构┌─────────────────────────────────────────────────────────────┐ │ 编译期 (Compiler) │ │ │ │ ┌──────────────────┐ ┌──────────────────────────────┐ │ │ │ ConcatNotaskPass │───►│ 属性标记 │ │ │ │ │ │ _no_task │ │ │ │ 校验链: │ │ _nopadding_continuous_input │ │ │ │ ├─ InputCheck │ │ _output_reuse_input │ │ │ │ ├─ CheckConcatDim│ │ _reuse_input_on_dim_index │ │ │ │ ├─ OutputCheck │ └──────────────────────────────┘ │ │ │ └─ LxFusionCheck│ │ │ └──────────────────┘ │ └─────────────────────┬───────────────────────────────────────┘ │ 属性传递 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 内存分配 (Memory Assigner) │ │ │ │ ┌─────────────────────┐ ┌──────────────────────────┐ │ │ │ BlockMemAssigner │ │ GraphMemAssigner │ │ │ │ │ │ │ │ │ │ 检测 NOPADDING_ │ │ 计算 continuous_type │ │ │ │ CONTINUOUS_INPUT │ │ kTypeInputNoPadding │ │ │ │ │ │ │ │ │ │ no_assign_memtrue │ │ 按 dim_index 计算 │ │ │ │ (不分配独立内存) │ │ nopadding_size │ │ │ └─────────────────────┘ └──────────────────────────┘ │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Task 生成 (Task Generator) │ │ │ │ 检测到 _no_task 属性 → 跳过该节点的 Task 生成 │ │ MarkFirstAndLastOps 中跳过 notask 节点 │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 运行时 (Runtime) │ │ │ │ RT1: TbeKernelHandle 跳过初始化 │ │ RT2: AICoreNodeConverter 跳过转换 │ │ 输出地址直接复用第一个输入地址 │ └─────────────────────────────────────────────────────────────┘4.2 ConcatNotaskPass 核心校验链ConcatNotaskPass::Run对图中每个 ConcatD/ConcatV2D 节点执行以下校验链全部通过后才设置属性4.2.1 场景排除Single Op 场景单算子模式无需优化内存非连续分配设置了ATTR_NAME_MEMORY_DISCONTIGUOUS_ALLOCATION的图跳过Unknown Shape输入或输出包含动态 Shape 的算子跳过Dynamic Shape 图所属图标记了动态 Shape 分区的跳过4.2.2 InputCheck输入校验对每个输入锚点依次检查IsScalarInput排除维度数为 0 的 Scalar 输入CheckTensorAlign多输入场景下每个 Tensor 大小必须是 32 字节对齐HasSameSourceAnchor通过GetFirstOutAnchorNotInRefNode追溯 RefNode 链确保没有多个输入追溯到同一个输出锚点IsPreNodeTypeValid通过GetFirstNotRefNode找到实际生产节点排除 DATA/REFDATA/VARIABLE/CONSTANTOP/CONSTANTIsPreNodeWithSubgraph前驱节点不能包含子图实例IsPreOutAnchorCanReuseForConcatOptimize检查前驱输出 TensorDesc 的can_reused_for_concat_optimize属性确保未被其他 Concat 占用IsPreOutAnchorValidMultiRef前驱输出如果同时连接到 NetOutput则不能优化IsPreNodeAttrValid前驱节点不能有 continuous_input、continuous_output、reference、_no_task、_output_reuse_input、_nopadding_continuous_input 等属性也不能有 atomic outputIsSameInputMemType所有输入的内存类型必须一致通过ATTR_NAME_OUTPUT_MEM_TYPE_LIST检查4.2.3 CheckConcatDimConcat 维度校验这是最核心的校验逻辑确保 concat_dim 轴前面的维度全为 1原始格式 (如 NCHW) ──► 运行时格式 (如 NC1HWC0) │ │ │ GetTransferDims() │ │ (调用 FE 接口) │ ▼ ▼ src_to_dst_transfer_dims dst_to_src_transfer_dims {0},{1,4},{2},{3} {0},{1},{2},{3},{1}GetAlignedShape调用transformer::TransferShapeUtils::GetAlignedShape获取对齐后的 shapeGetTransferDims调用transformer::TransferShapeUtils::TransferDims获取原始格式到运行时格式的轴映射关系CheckRealConcatDim在运行时格式下找到实际的 concat_dim 轴验证该轴之前的所有维度值都为 1CheckConcatDimAlignment验证 concat_dim 轴原始尺寸是 align_shape 对应维度的整数倍确保无 paddingCheckRealConcatDim 的关键逻辑通过src_to_dst_transfer_dims[concat_dim][0]找到运行时格式中的 real_concat_dim如果 real_concat_dim 是由合轴产生的dst_to_src_transfer_dims中对应多个源轴需要额外验证real_concat_dim 轴之前的所有轴值都为 1concat_dim 所在的合轴中、concat_dim 之前的值都为 1如果 real_concat_dim 不是合轴产生的只需验证之前的轴值都为 14.2.4 OutputCheck输出校验遍历 Concat 节点的所有后继节点如果后继是 Reshape 且有输出节点则继续检查 Reshape 的输出节点后继节点不能已有_no_task、_output_reuse_input、_nopadding_continuous_input属性4.2.5 LxFusionCheckLxFusion 校验IsLxFusionMem检查输入/输出内存类型是否为 L1/L2/UB这些是 LxFusion 使用的片上内存IsLxFusionOp检查算子名称是否包含 lxslice4.3 属性设置所有校验通过后SetAttrForConcatNotask执行以下操作// 设置 Concat 算子自身属性 AttrUtils::SetBool(op_desc, ATTR_NAME_NOTASK, true); AttrUtils::SetBool(op_desc, ATTR_NAME_NOPADDING_CONTINUOUS_INPUT, true); AttrUtils::SetBool(op_desc, ATTR_NAME_OUTPUT_REUSE_INPUT, true); AttrUtils::SetInt(op_desc, ATTR_NAME_REUSE_INPUT_ON_DIM_INDEX, 0); // 标记前驱节点的输出 TensorDesc 不可再被复用 for each input: AttrUtils::SetBool(output_tensor_desc, can_reused_for_concat_optimize, false);4.4 内存分配联动4.4.1 BlockMemAssigner在AnalyzeSymbolMemReuseInfo中当检测到节点具有ATTR_NAME_NOPADDING_CONTINUOUS_INPUT属性时if (is_input_continuous) { symbol_mem_reuse_info_[symbol].no_assign_mem_ true; }这意味着该符号内存块不会被独立分配内存而是复用上游的内存地址。GetContinuousNodeLifeTimeBegin方法处理级联的 continuous input 场景a b c (第一层) | | | d e f (第二层) |___|___| | g h i (第三层, h 是 continuous input) |___|___| | j (第四层, j 是 continuous input)g 不能与 a/b/c 复用内存因为 d/e/f 的内存会被 g 的地址替换级联 continuous input。因此 g 的生命期起点要追溯到 d/e/f 中的最早者。4.4.2 GraphMemAssigner在GetContinuousType中识别 continuous 类型kTypeInputNoPadding _nopadding_continuous_input _output_reuse_input kTypeOutputNoPadding _nopadding_continuous_output _output_reuse_input在GetMemorySize中对于 nopadding 类型通过_reuse_input_on_dim_index获取维度索引计算nopadding_size实际数据大小和tensor_size完整带 padding 大小内存分配器据此分配精确大小的内存块4.4.3 SetInputOutputOffsetPass对于 no_task 的 Concat 节点如果具有ATTR_NAME_CONTINUOUS_INPUT或满足 BufferFusion 条件会调用SetOutputOffsetForConcat设置输出偏移确保输出地址正确指向输入数据的起始位置。4.5 Task 生成跳过在TaskGenerator::MarkFirstAndLastOps中bool attr_notask false; if (ge::AttrUtils::GetBool(op_desc, ATTR_NAME_NOTASK, attr_notask) attr_notask) { continue; // 跳过 notask 节点不纳入连续节点列表 }这确保 no_task 节点不会被视为流中连续计算节点的一部分不会影响首尾算子的标记。4.6 运行时处理4.6.1 RT1 (Davinci Model)在TbeKernelHandle::NeedInit中bool attr_no_task false; const bool get_attr_no_task_flag AttrUtils::GetBool(op_desc, ATTR_NAME_NOTASK, attr_no_task); if (get_attr_no_task_flag attr_no_task) { GELOGI(Node[name:%s, type:%s] does not generate task, skip initialization., ...); return false; // 跳过 Kernel 初始化 }4.6.2 RT2 (V2 Engine)在aicore_node_converter.cc的IsVirtualOp中bool attr_no_task false; (void)ge::AttrUtils::GetBool(op_desc, ge::ATTR_NAME_NOTASK, attr_no_task); return attr_no_task; // 返回 true 表示虚拟算子跳过转换5. 与其他优化的协同5.1 与 Split No Task 的配合Concat No Task 经常与 Split No Task 配合使用形成切分-计算-合并的零拷贝流水线Input ──► Split(no_task) ──► 计算 ──► Concat(no_task) ──► OutputSplit 沿 concat_dim 的反方向切分输出地址直接指向输入地址的不同偏移Concat 则将这些偏移地址视为连续内存直接复用。5.2 与内存复用的关系Concat No Task 节点在内存复用检查中被特殊对待ReuseChecker中具有_no_task属性的节点被视为 buffer_pool 类型mem_reuse_strategy.cc中nopadding continuous input 的节点参与特殊的内存复用策略5.3 与地址刷新的关系在MemLayoutConflictUtil中Concat No Task 场景下需要考虑地址刷新data | identity (插入 identity 算子支持地址刷新) | split(no_task, no_padding_continuous_output) / \ op1 op2当涉及用户输入且需要地址刷新时会在 Data 和 Split 之间插入 Identity 算子。6. 测试验证单元测试文件位于tests/ge/ut/ge/graph/passes/concat_notask_pass_unittest.cc覆盖了以下场景测试用例验证内容allgather_connect_to_concatAllGather 输出连接到 Concat验证属性设置正确allgather_connect_to_concat_reshapeAllGather → Reshape → Concat 链路多组 RefData 测试验证 RefNode 链追溯逻辑不同 Format 测试ND、NCHW、NC1HWC0 等格式下的 dim 校验7. 设计思考7.1 为什么选择属性标记而非图改写Concat No Task 采用属性标记而非删除节点的方式原因是保留调试信息Dump 功能需要保留算子的 OpDesc 和地址信息见InitNoTaskAndDumpNeededNode保持图结构完整删除节点会破坏图的拓扑关系影响其他 Pass 的执行支持动态场景属性标记可以在不同编译阶段灵活处理7.2 为什么校验条件如此严格Concat No Task 的校验条件多达十余项这是因为内存安全如果输入不连续却标记为 no_task会导致读取到错误数据对齐约束昇腾硬件对内存对齐有严格要求不满足 32B 对齐可能导致硬件异常级联影响一个 no_task 节点会影响下游的内存分配策略错误标记会传播7.3 为什么放在 Stage2 最后执行注释明确说明图稳定了再做 ConcatNotaskPass在 Stage2 之前图结构可能还在变化子图合并、算子融合等前驱节点的属性可能在后续 Pass 中被修改放在最后执行可以确保基于最终稳定的图结构做判断【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

昇腾CANN/GE Concat No Task特性分析

Concat No Task 特性分析 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、T…...

通过curl命令快速测试Taotoken各大模型接口响应与功能

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令快速测试Taotoken各大模型接口响应与功能 对于需要在无SDK环境或进行底层接口调试的开发者而言,直接使用c…...

2025最权威的十大降AI率平台推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 维普AIGC检测系统的主要目的乃精确辨认学术文本里那帮通过人工智能给弄出来的内容。在用户使…...

WorkshopDL:革命性跨平台Steam创意工坊下载技术指南

WorkshopDL:革命性跨平台Steam创意工坊下载技术指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 1. 问题洞察 你是否曾经在GOG平台购买了《巫师3》,…...

键盘上的麦克风按钮:笔记本静音/开启的终极指南

键盘上的麦克风按钮:笔记本静音/开启的终极指南 在视频会议、直播或录制视频时,你是否曾因为找不到麦克风开关而手忙脚乱?其实,很多笔记本电脑都在键盘上藏了一个“物理静音键”,只要按对键,就能瞬间掌控声音的“话语权”。 今天这篇博文,我们就来详细扒一扒不同品牌笔…...

核心概念扫盲:Pawn、PlayerController 和 GameMode

📌 核心概念扫盲:Pawn、PlayerController 和 GameMode 在写避坑指南前,先用最通俗的大白话把这三个“铁三角”搞清楚,否则后面配置起来会非常迷糊: Pawn(棋子/角色):游戏世界里的“身体”。它可以是一个行走的战士(Character 是 Pawn 的子类,专门做人形角色),也可…...

如何让你的Atom编辑器说中文:三步实现完整中文汉化体验

如何让你的Atom编辑器说中文:三步实现完整中文汉化体验 【免费下载链接】atom-simplified-chinese-menu Atom 的简体中文汉化扩展,目前最全的汉化包。包含菜单汉化、右键菜单汉化以及设置汉化 项目地址: https://gitcode.com/gh_mirrors/at/atom-simplified-chine…...

CANN/sip复数矩阵逐点乘

ComplexMatDot 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 产品支持情况 产品是否支持 Atlas 200I/500 A2…...

如何用Python自动化工具轻松完成智慧树课程学习:Autovisor终极指南

如何用Python自动化工具轻松完成智慧树课程学习:Autovisor终极指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树平台繁琐的手动学习…...

CANN/ops-cv仿真工具使用指南

简介 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv CANN Simulator是一款面向算子开发场景的SoC级芯片仿真工具,用于分析运行在AI仿真器上的…...

Atom编辑器终极中文汉化指南:告别英文困扰,轻松打造专属编程环境

Atom编辑器终极中文汉化指南:告别英文困扰,轻松打造专属编程环境 【免费下载链接】atom-simplified-chinese-menu Atom 的简体中文汉化扩展,目前最全的汉化包。包含菜单汉化、右键菜单汉化以及设置汉化 项目地址: https://gitcode.com/gh_mirrors/at/a…...

Video DownloadHelper CoApp终极指南:轻松下载网络视频的完整教程

Video DownloadHelper CoApp终极指南:轻松下载网络视频的完整教程 【免费下载链接】vdhcoapp Companion application for Video DownloadHelper browser add-on 项目地址: https://gitcode.com/gh_mirrors/vd/vdhcoapp Video DownloadHelper CoApp是一款功能…...

【Pocket Flow】源码剖析(二):批量与异步——BatchNode、AsyncNode 与并行执行

【Pocket Flow】源码剖析(二):批量与异步——BatchNode、AsyncNode 与并行执行 写在前面:第一篇我们拆解了 Pocket Flow 的三大核心抽象——Node、Flow 和 Shared Store,理解了 100 行代码的骨架。今天,我们…...

CANN ops-nn ELU梯度算子

EluGrad 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 📄 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/A…...

从接入到观测Taotoken为开发者提供了完整的使用体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从接入到观测:Taotoken为开发者提供了完整的使用体验 对于开发者而言,选择一个模型服务平台,其…...

多中心COVID-19 CT分类的异构集成方法解析

1. 项目概述:多中心COVID-19 CT分类的异构集成方法在医疗影像分析领域,COVID-19的快速准确诊断一直是临床实践中的关键挑战。传统的RT-PCR检测虽然作为金标准,但其较长的周转时间(通常需要48-72小时)和高达30%的假阴性…...

差分编码在40Gbps光通信中的实现与优化

1. 差分编码的核心原理与工程价值差分编码作为数字通信系统的基石技术,其数学本质是模2加法运算的链式反应。给定输入比特序列d_k,输出编码序列c_k满足递归关系:c_k c_{k-1} ⊕ d_k。这个看似简单的公式却解决了通信工程中的关键难题——相位…...

pi0机器人VLA大模型昇腾推理优化

pi0机器人VLA大模型推理昇腾迁移-性能优化说明 【免费下载链接】cann-recipes-embodied-intelligence 本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence pi…...

如何用FastbootEnhance轻松管理Android设备:Windows终极图形化工具箱指南

如何用FastbootEnhance轻松管理Android设备:Windows终极图形化工具箱指南 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 还在为复杂的…...

3步掌握鼠标键盘自动化神器,彻底告别重复劳动

3步掌握鼠标键盘自动化神器,彻底告别重复劳动 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否厌倦了每天…...

AI 术语通俗词典:导数

导数是微积分、机器学习、深度学习和人工智能中非常基础的一个术语。它用来描述:当一个输入变量发生微小变化时,函数输出会怎样变化。 换句话说,导数是在回答:如果把输入稍微往前推一点,结果会变大、变小,还…...

深度解析 MCP 协议:如何通过 Model Context Protocol 实现 AI Agent 的工具调用标准化

深度解析 MCP 协议:如何通过 Model Context 协议实现 AI Agent 的工具调用标准化 摘要: 随着大语言模型(LLM)能力的飞速提升,如何让 AI 能够更安全、更高效地访问外部工具和数据成为了 AI Agent 领域的核心挑战。Model…...

开源AI智能眼镜开发实战:OpenVision项目架构与集成指南

1. 项目概述:当智能眼镜遇见开源AI大脑如果你和我一样,对Meta Ray-Ban智能眼镜的硬件设计爱不释手,却又对Meta AI的封闭生态和功能限制感到束手束脚,那么OpenVision这个项目,可能就是你在寻找的“终极解药”。简单来说…...

市场热门的台式离子风机公司

开篇:定下基调随着半导体、电子制造、生物医药等行业对生产环境静电控制要求日益严苛,台式离子风机作为桌面工位、小型生产线核心的静电消除设备,其性能直接影响产品良品率与生产效率。为帮助消费者精准选择适合的产品,我们针对市…...

5分钟快速上手:Windows离线实时字幕工具TMSpeech完全指南

5分钟快速上手:Windows离线实时字幕工具TMSpeech完全指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而烦恼吗?是否经常因为网络不稳定而无法使用云语音识别服务&#xff…...

Hermes Agent工具接入Taotoken聚合平台的具体配置步骤详解

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent工具接入Taotoken聚合平台的具体配置步骤详解 本教程将逐步演示如何将 Hermes Agent 工具的后端切换至 Taotoken 平台…...

一键切换Claude Code AI引擎:GLM、订阅版、API与本地模型自由切换

1. 项目概述:一键切换Claude Code的四种AI引擎 如果你和我一样,日常重度依赖Cursor或者VSCode的Claude Code插件来写代码,那你肯定遇到过这个痛点:有时候想用Claude官方订阅版,有时候想用更便宜的GLM代理,…...

从1982年智能仪器到现代数字万用表:设计演进与选型实践

1. 项目概述:一次关于智能仪器与数字万用表的深度回溯如果你是一位电子工程师,或者任何需要和电路、信号打交道的人,你的工作台上、实验室的机架里,甚至生产线上,最不可或缺、最沉默寡言的伙伴是什么?十有八…...

CANN/asc-tools msobjdump样例

msobjdump样例 【免费下载链接】asc-tools Ascend C Tools仓是CANN基于Ascend C编程语言推出的配套调试工具仓。 项目地址: https://gitcode.com/cann/asc-tools 概述 本样例基于MatmulLeakyRelu算子,演示融合编译场景下msobjdump工具的使用方式。样例通过编…...

证书链技术与ADAC安全调试协议详解

1. 证书链技术原理与信任传递机制1.1 非对称加密基础证书链技术的核心依赖于非对称加密算法体系。典型实现中,ECDSA(椭圆曲线数字签名算法)和RSA是最常用的两种方案。以ECDSA P-256为例,其采用256位素数域上的椭圆曲线&#xff0c…...