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

CANN/ge DataFlow简介

DataFlow简介

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

读者对象

本文档用于指导开发者如何使用DataFlow接口进行计算图的构建、修改、编译和执行。通过本文档您可以达成以下目标:

  • 了解通过FlowOperator构建FlowGraph的方法。
  • 掌握编译运行FlowGraph的方法。
  • 了解UDF开发过程及相关接口。

熟悉CANN软件基本架构以及特性、具备C++/C语言程序开发能力,对机器学习、深度学习有一定了解的人员,可以更好地理解本文档。

DataFlow概述

DataFlow用于描述采用数据队列以数据驱动方式将一个或多个计算处理点(ProcessPoint)组织成完整的计算流。ProcessPoint与算子的关键区别是采用异步方式处理。DataFlow通过FlowGraph来承载,ProcessPoint通过FlowNode来承载,各个接口之间的关系如下所示。

图1DataFlow相关接口之间的关系 ![](https://raw.gitcode.com/cann/ge/raw/90b6b5f955453823e2ca13bfd6ecc1d7b12bb375/docs/zh/user_guides/dflow/dflow_dev/cpp/figures/DataFlow相关接口之间的关系.png "DataFlow相关接口之间的关系"?utm_source=gitcode_repo_files)

  • FlowGraph:DataFlow的Graph,由输入节点FlowData和计算节点FlowNode构成。
  • FlowOperator:是FlowGraph的节点基类,衍生类有FlowData和FlowNode两种类型。
  • FlowData:FlowGraph的输入节点。
  • FlowNode:FlowGraph的计算节点。支持如下两种类型。
    • FunctionPp:Function的计算处理点,通过UDF(User Defined Function)实现用户自定义功能。
    • GraphPp:Graph的计算处理点,通过IR构图实现用户的计算逻辑。

DataFlow支持用户通过FunctionPp和GraphPp编写自定义处理函数,通过DataFlow构图以FlowModel的方式运行。

DataFlow和IR构图的不同点如下所示。

表1DataFlow和IR构图比较

|维度|IR构图|DataFlow| |--|--|--| |数据流处理方式|- 图只支持一次输入对应一次输出。
- 图中的算子之间采用同步数据流,用于表达串行,同步执行。|- DataFlow支持一次输入对应多次输出,或者一次输入对应一次输出,或者多次输入对应一次输出。灵活性更高。
-DataFlow中的ProcessPoint采用异步数据流,可以表达并行,异步执行,充分利用资源,提升吞吐量。| |自定义功能开发方式|通过开发自定义算子实现。
算子包括算子原型定义、算子代码实现、算子信息库定义、算子适配等过程,需要用户开发的交付件多,使用门槛相对较高。|可以通过开发UDF实现,也可以通过开发自定义算子实现。
UDF开发只需要定义用户函数,构建图。用户交付件少,使用门槛低。| |内存分配方式|算子的输入内存、输出内存是已经申请好的。|UDF输出内存是用户自定义的,需要用户自己申请。|

整体开发流程

约束

无论是在host侧还是device侧,模型对输入数据都不能进行修改。

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

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

http://www.cnnetsun.cn/news/3130056.html

相关文章:

  • Xous图形服务器GAM:为嵌入式设备构建现代化UI框架
  • cookies-next完整指南:如何在Next.js应用中轻松管理Cookie
  • 为什么Flutter_thrio是Flutter混合开发的最佳选择?10大核心优势解析
  • Crossplane与CI/CD集成:实现自动化NGINX配置验证和部署的完整指南
  • HookLib²与Zydis disassembler集成:高性能指令解析的秘密
  • 10个Dev Proxy实用技巧:提升API弹性测试效率
  • new-component快速入门:5分钟掌握React组件脚手架工具
  • ReScript genType 在 CI/CD 中的集成:自动化类型生成与验证流程
  • MNIST数据集对抗性样本生成:pgd_attack.py源码解析
  • Frozen高级应用:如何在嵌入式系统中实现JSON配置文件的读写
  • 知网维普双重检测不用愁,paperxie 分层改写搞定论文重复与 AIGC 疑似率
  • 为什么选择cookies-next?Next.js Cookie管理库的10大优势解析
  • 5分钟快速上手:在Mac上轻松查看PDM数据库设计文件
  • Flask-profiler配置详解:从SQLite到MongoDB的存储方案选择
  • Pwn2Own2018漏洞深度剖析:3个核心漏洞如何突破macOS安全防线
  • python-inject源码解析:Injector类的设计与实现原理
  • NCSN与传统生成模型对比:为什么它能在MNIST/CelebA/CIFAR-10上表现卓越?
  • 企业微信扫码登录集成指南与实战
  • Crossplane部署最佳实践:企业级NGINX配置管理方案
  • KlakSpout实战:10个创意项目案例展示跨应用视频流应用
  • 警惕AI模型虚假信息:GPT-5.5并不存在的技术事实核查
  • GPT-4 Turbo如何重塑科研教学工作流:128k上下文与多模态协同实践
  • CSS Paint Polyfill vs 原生Houdini:性能对比与迁移策略
  • 牛马测评体系:面向真实职场的大模型生产力评估框架
  • Appium混合应用自动化测试:攻克WebView上下文切换核心难点
  • ItChat-UOS终极指南:如何用Python复活你的微信机器人(只需一行代码)
  • 权限维持攻击的数据痕迹分析与检测实战
  • 5个关键步骤掌握Video2X:AI视频超分辨率与帧插值完全指南
  • 免费获取国家中小学智慧教育平台电子课本的终极指南:tchMaterial-parser让离线学习更简单
  • WeChatMsg:从数据备份到情感记忆的数字桥梁