news 2026/5/10 0:28:46

CANN/GE外置权重特性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/GE外置权重特性

GE 外置权重(FileConstant / External Weight)特性

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

将模型权重从 OM 文件中分离,单独存储在磁盘文件。场景:OM 文件大小受限、模型加密、多模型共享权重(hash 去重)、在线推理 Hybrid 模式加速。

用户接口

接口文件说明
ATC--external_weightapi/atc/main_impl.cc0=内嵌(默认), 1=独立文件, 2=合并文件
ge.externalWeightoptioninc/graph_metadef/external/ge_common/ge_api_types.h在线编译时设置,Hybrid 模式默认=1
ge.externalWeightDiroption同上指定权重落盘路径
aclmdlSetExternalWeightAddressinc/external/acl/acl_mdl.h加载时设置用户 Device 内存,优先级高于 ACL_MDL_WEIGHT_PATH_PTR
CompiledGraphSummary::GetExternalWeightPathsinc/external/ge/ge_graph_compile_summary.h编译后获取ExternalWeightDesc列表(路径/大小/偏移/ID)

权重路径优先级:ge.externalWeightDir > $ASCEND_WORK_PATH/tmp_weight_{pid}_{sid} > ./tmp_weight_{pid}_{sid}

编译期:Const → FileConstant 转换

入口:compiler/graph/manager/graph_manager.cc,Build 阶段读取ge.externalWeight选项,值为 "1" 或 "2" 时触发转换。

文件存储

  • 模式 1:每个权重独立文件weight_<sha256>,多线程写入(8线程),flock(LOCK_EX)保护 meta.json 并发编译
  • 模式 2:所有权重合并到一个文件,512 字节对齐(DMA 要求),通过 offset 定位,meta.json 记录 hash→file/offset 映射

路径管理:编译期写入tmp_weight_<pid>_<sid>/→ OM 输出时ChangeFilePath迁移到OM同目录/weight/RefreshRelativePath将 location 刷新为仅文件名

逆向转换compiler/graph/preprocess/graph_prepare.cc):ConvertFileConstToConst读文件 → 创建 GeTensor → 节点类型改回 Const,用于 ONNX 导入等场景。

运行期:Runtime V2(在线推理)

Lowering 阶段

runtime/v2/engine/gelocal/file_constant_converter.ccLoweringFileConstantNode注册为REGISTER_NODE_CONVERTER("FileConstant")

路径解析优先级:location 私有属性 > file_path IR属性 > file_id + ge.exec.value_bins

模型加载流程

api/acl/acl_model/model/model.cppaclmdlLoadWithConfigImpl

aclmdlSetExternalWeightAddress{fileName, devPtr, size}存入handle->fileConstantMem→ 加载时通过LoadExecutorArgs → LoweringGlobalData::SetFileConstantMem传递 → Lowering 阶段GetUserDeviceAddress按文件名匹配查找用户 Device 内存。

运行期:Runtime V1(DavinciModel 离线推理)

runtime/v1/graph/load/model_manager/davinci_model.cc,模型加载时PreProcessFileConstants预分配所有 FileConstant 内存。

合并模式(HandleCombinedWeights)

AllocateCombinedWeightMemory

  1. 先查用户内存:GetFileConstantUserDeviceMem(file_name)file_constant_user_device_mems_中按文件名匹配
  2. 无用户内存:MallocFileConstantMem申请 HBM →CopyOneWeightFromFileWithFilehandler一次性 H2D
  3. external_weight_combined_mem_addr_(unique_ptr 自定义 deleter)管理生命周期:用户内存不释放,GE 内存在析构时释放

MapNodeAddressesToCombinedWeightfileconstant_addr_mapping[logic_output_offset] = base_addr + weight_offset,校验偏移不越界,VarManager::SetVarIsReady标记就绪。

独立模式(HandleIndividualWeights)

逐节点处理:

  1. GetUserDeviceMemForFileConstant:提取文件名 → 在file_constant_user_device_mems_查找 → 校验mem_size - offset >= weights_size→ 返回device_mem + offset
  2. 无用户内存:MallocFileConstantMem分配 HBM(权重数据后续由 FileConstantKernel 运行时加载)
  3. 写入映射fileconstant_addr_mappingVarManager::SetVarIsReady

内存释放(FreeFileConstantMem)

DavinciModel 析构时调用。合并模式靠external_weight_combined_mem_addr_unique_ptr 析构;独立模式遍历fileconstant_addr_mapping,跳过用户内存(IsUserDeviceMemForFileConstant),仅释放 GE 分配的 HBM。

运行时地址查找

runtime/v2/kernel/known_subgraph/davinci_model_kernel.cc:通过kMemoryBaseTypeFileConstant类型标识在fileconstant_addr_mapping中查找 logic_offset → device_addr 映射。

关键数据结构(davinci_model.h)

std::string file_constant_weight_dir_; // 权重文件目录 std::map<std::string, FileConstantMem> file_constant_user_device_mems_; // 文件名 → 用户Device内存 std::unique_ptr<void, std::function<void(void*)>> external_weight_combined_mem_addr_; // 合并权重(智能指针) // runtime_param_.fileconstant_addr_mapping: map<int64_t, uintptr_t> 逻辑偏移 → 物理地址

ExternalWeightManager — 全局权重管理

base/graph/manager/graph_external_weight_manager.cc

  • Session 级别:每个 session 一个ExternalWeightManagerExternalWeightManagerPool(全局单例)管理
  • 去重CheckAndSetWeightLoaded按 device+file 记录已加载权重,避免重复加载
  • 分片SaveSlicedFileConstantInfo / TryGetSlicedFileConstantInfo支持大模型分片
  • 生命周期:Session 析构时RemoveManager → Finalize自动清理临时权重目录

FileConstantMeta持久化为 meta.json:

{ "hash_to_weight_file": {"sha256...": "/path/weight_sha256..."}, "hash_to_weight_offset": {"sha256...": 0} }

关键文件索引

层次文件职责
APIapi/atc/main_impl.ccATC--external_weight参数定义
APIapi/acl/acl_model/model/model_config.cppaclmdlSetExternalWeightAddress实现
APIapi/acl/acl_model/model/model.cppaclmdlLoadWithConfig加载分发 file_constant_mems
APIapi/session/session/user_hybrid_graph_manager.ccHybrid 模式默认启用 externalWeight=1
Compilercompiler/graph/manager/graph_manager.ccBuild 阶段 Const→FileConstant 入口
Compilercompiler/graph/preprocess/graph_prepare.ccPrepare 阶段 FileConstant→Const 逆向转换
Compilercompiler/graph/build/graph_compile_summary_impl.ccSetExternalWeightPaths编译摘要
Compilercompiler/api/generator/ge_generator.ccOM 输出时权重文件路径迁移
Basebase/common/file_constant_utils/file_constant_utils.cc核心工具类:转换、读写、路径管理
Basebase/graph/manager/graph_external_weight_manager.ccSession 级权重管理器
RT V1runtime/v1/graph/load/model_manager/davinci_model.ccPreProcessFileConstants 内存预分配全套逻辑
RT V1runtime/v1/graph/load/model_manager/davinci_model.hFileConstant 相关数据结构
RT V2runtime/v2/kernel/ge_local_kernel/file_constant_kernel.ccFileConstantKernel / FileConstantUserMemKernel
RT V2runtime/v2/engine/gelocal/file_constant_converter.ccLowering 阶段节点转换
RT V2runtime/v2/kernel/known_subgraph/davinci_model_kernel.cc运行时地址映射查找 + 权重初始化
RT V2runtime/v2/lowering/model_converter.ccfile_constant_mems 传递到 LoweringGlobalData
Parserparser/parser/onnx/onnx_file_constant_parser.ccONNX FileConstant 算子解析

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 0:26:35

CANN/hixl LLM集群信息文档

LLMClusterInfo 【免费下载链接】hixl HIXL&#xff08;Huawei Xfer Library&#xff09;是一个灵活、高效的昇腾单边通信库&#xff0c;面向集群场景提供简单、可靠、高效的点对点数据传输能力。 项目地址: https://gitcode.com/cann/hixl 产品支持情况 产品是否支持A…

作者头像 李华
网站建设 2026/5/10 0:22:57

工业AI应用全景:从预测性维护到智慧工厂的实践与挑战

1. 项目概述&#xff1a;当AI走进工厂&#xff0c;一场静默的革命正在发生在工厂的车间里&#xff0c;机器的轰鸣声似乎从未改变&#xff0c;但驱动这些庞然大物运转的“大脑”正在经历一场深刻的进化。作为一名在制造业与数字化交叉领域摸爬滚打了十几年的从业者&#xff0c;我…

作者头像 李华
网站建设 2026/5/10 0:16:43

遥感基础模型Prithvi:基于MAE架构的高效微调与实战解析

1. 项目概述与核心价值在遥感影像分析这个行当里干了十几年&#xff0c;最头疼的问题永远绕不开“数据”两个字。这里说的数据&#xff0c;不是指数据量不够&#xff0c;恰恰相反&#xff0c;卫星天天在头顶转&#xff0c;PB级的数据跟不要钱似的往下掉。真正的瓶颈在于“标注数…

作者头像 李华
网站建设 2026/5/10 0:13:35

SVEAD框架:融合VAE与SHAP的可解释异常检测实践

1. 项目概述&#xff1a;当异常检测遇上“可解释性” 在工业质检、金融风控、网络安全这些领域&#xff0c;异常检测一直是个核心且头疼的问题。传统的检测方法&#xff0c;无论是基于统计的阈值设定&#xff0c;还是复杂的深度学习模型&#xff0c;往往都像一个“黑盒”&#…

作者头像 李华
网站建设 2026/5/10 0:13:31

AI赋能空天地一体化网络:智能优化、信道估计与安全增强实践

1. 项目概述&#xff1a;当AI遇见空天地一体化网络最近几年&#xff0c;我身边不少做通信和网络的朋友&#xff0c;都在聊一个词&#xff1a;SAGIN。全称是“空天地一体化网络”&#xff0c;听起来挺宏大&#xff0c;但说白了&#xff0c;就是想把天上的卫星、空中的无人机、地…

作者头像 李华
网站建设 2026/5/10 0:12:34

CANN/pyasc向量乘加运算API

asc.language.basic.axpy 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口&#xff0c;支持在昇腾AI处理器上加速计算&#xff0c;接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.axpy(dst: Lo…

作者头像 李华