分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

  • 1.相关链接
  • 2.代码【仅分析带通信算子的Pattern】
  • 3.在实际工程中发现 ['all_gather', 'matrix_mm_out']频率最高
  • 4.[Ascend MC2](https://gitee.com/ascend/MindSpeed/blob/master/docs/features/mc2.md)
  • 5.torch_npu.npu_all_gather_base_mm

本文尝试分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

1.相关链接

  • Ascend C 2.0新特性详解,支撑大模型融合算子高效开发

2.代码【仅分析带通信算子的Pattern】

from collections import defaultdict, dequedef rolling_hash(s, base=257, mod=10**9 + 7):h = 0for ch in s:h = (h * base + ord(ch)) % modreturn hdef find_top_n_fixed_length_sequences(arr, length, top_n):# 创建一个字典来存储子序列及其出现次数和偏移位置sequence_data = defaultdict(lambda: {"count": 0, "positions": []})base, mod = 257, 10**9 + 7# 滑动窗口计算固定长度子序列for i in range(len(arr) - length + 1):window = arr[i:i + length]if "all_gather" in window or "reduce_scatter" in window:  #只处理函通信算子的patternflat_window = ''.join(window)h = rolling_hash(flat_window, base, mod)sequence_data[h]['count'] += 1sequence_data[h]['positions'].append(i)# 按照出现频率排序,并获取前N个子序列sorted_sequences = sorted(sequence_data.items(), key=lambda item: item[1]['count'], reverse=True)top_sequences = sorted_sequences[:top_n]return top_sequences, sequence_data# 加载profiler生成的timeline,提取出算子名列表及偏移未知,这里构造了一个简单的数据
operators=["mm","all_gather","binary_add","dropout_backward","fill","eltwise_silu","mm","all_gather","fill"]
offsets=range(0,len(operators))# 要求最少两个元素的子序列,且取前3个出现频率最高的长度为2的子序列
length = 2
top_n = 1# 获取前N个频繁的长度为固定长度的子序列
top_sequences, sequence_data = find_top_n_fixed_length_sequences(operators, length, top_n)# 反向查找实际的序列值
reverse_lookup = {}
for i in range(len(operators) - length + 1):window = operators[i:i + length]flat_window = ''.join(window)h = rolling_hash(flat_window)if h not in reverse_lookup:reverse_lookup[h] = window# 输出结果并去重
unique_sequences = set()  # 用来跟踪已经输出的序列
for seq_hash, data in top_sequences:seq = reverse_lookup[seq_hash]seq_tuple = tuple(seq)if seq_tuple not in unique_sequences:unique_sequences.add(seq_tuple)positions = sequence_data[seq_hash]['positions']print(f'序列: {seq}, 出现频率: {data["count"]}')for pos in positions:beg=posend=pos+lengthts_beg=offsets[beg]ts_end=offsets[end]print(ts_beg,ts_end,operators[ts_beg:ts_end])

DEMO 输出

序列: ['mm', 'all_gather'], 出现频率: 2
0 2 ['mm', 'all_gather']
6 8 ['mm', 'all_gather']

3.在实际工程中发现 [‘all_gather’, ‘matrix_mm_out’]频率最高

4.Ascend MC2

在这里插入图片描述

5.torch_npu.npu_all_gather_base_mm

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1:25万基础电子地图(西藏版)

我们为你分享过四川版、云南版、江西版、贵州版、重庆版和青海版的1比25万基础电子地图,现在再为你分享西藏版的电子地图。 如果你需要西藏版的1比25万基础电子地图,你可以在文末查看该数据的领取方法。 基础电子地图西藏版 西藏版1:25万基础电子地图…

go框架gin自定义和增强*gin.Context的方法 --使用闭包函数将自定义Context handler转换为 gin.HandlerFunc

在使用gin框架进行开发的时候,我们可以通过自定义gin.Context来实现和增强gin框架,方法也很简单,关键就2个步骤, 1是继承gin.Context, 2是在路由的时候对函数入参类型进行转换,下面为具体的方法&#xff1a…

压缩pdf文件大小,压缩pdf文件大小软件哪个好

在数字化时代,PDF文件因其卓越的跨平台兼容性和稳定性而成为工作与学习的好帮手。然而,当PDF文件体积过大时,传输和存储便成了一项挑战。别担心,本文将为你揭秘如何快速压缩PDF文件,让你的文档轻装上路! 压…

postman请求访问:认证失败,无法访问系统资源

1、使用postman时,没有传入相应的token,就会出现这种情况,此时需要把token放进去 发现问题: { "msg": "请求访问:/getInfo,认证失败,无法访问系统资源", "code": 401 } 1…

从美图类场景,看火山引擎数据飞轮如何赋能产品增长

伴随移动移动互联网发展以及手机拍摄能力提升,美图类APP已成为人们手机中常见的应用之一。根据广发证券发展研究中心《数字媒体行业AI系列报告:美图类APP,商业模式逐渐清晰,AIGC加速付费心智培养》显示,从行业整体流量…

Python中序列化利器pickle使用详解

✨前言: 🌟什么是pickle? Python 中的 pickle 模块是一个序列化和反序列化Python对象结构的工具,也就是说它可以把Python中任意一个对象转化为一串字节流,也可以将这串字节流重新恢复为原来的对象。这个过程也分别被…

Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

🔥 个人主页:空白诗 文章目录 一、引言1. Monorepo 和 MultiRepo 简介2. 为什么选择 Monorepo? 二、Monorepo 和 MultiRepo 的区别1. 定义和概述2. 各自的优点和缺点3. 适用场景 三、Monorepo 的开发策略1. 版本控制2. 依赖管理3. 构建和发布…

python-切片、集合

序列是指:内容连续、有序,可使用下标索引的一类数据容器 序列的常用操作 - 切片 切片的语法 序列的常用操作 - 切片 注意切片的范围是左闭右开 为什么使用集合 集合的常用操作 - 修改 集合的常用操作 - 集合长度 集合常用功能总结 集合的特点

程序员鱼皮的写简历指南(保姆级)2、简历优化

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致措施了很多面试机会,实在是…

AI时代来临,程序员如何应对AI挑战?

随着 AI 技术的飞速发展,特别是大模型的出现,传统的程序员角色正在经历深刻的变革,AI 已经对现有的软件开发模式和程序员的工作模式造成了冲击,并且大语言模型在某些特定语言内的表现甚至超过了大部分的程序员。 但人工智能没有情…

深度学习——卷积神经网络(convolutional neural network)CNN详解(一)——概述. 步骤清晰0基础可看

在CNN的学习过程中我会提供相应的手算例子帮助理解训练过程。 其他关于神经网络的学习链接如下: 一、了解卷积神经网络 卷积神经网络的作用 总的来说,卷积神经网络的第一个主要作用是对图像进行特征提取,所谓特征提取,就是明白…

java入门-基础语法(运算符)

运算符是对变量、字面量进行运算的 符号 (一)基本的算术运算符、符号做连接符 (1)基本运算符:(加), - (减)、 * (乘)、 / (除)、%&…

Nginx 的详细介绍,包括其特点、安装、配置、应用场景及最佳实践

Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。它由俄罗斯人伊戈尔赛索耶夫(Igor Sysoev)开发,并于 2004 年首次公开发布。Nginx 以其轻量级、高并发、稳定性强等特点,在 Web …

有哪些好的 Stable Diffusion 提示词(Prompt)可以参考?

Docker 作图咒语生成器 docker-prompt-generator 是一个开源项目,可以利用模型反推出提示词,让你偷偷懒,无需琢磨怎么写prompt,只需要找一个差不多的模型反推一下,直接用就好了,支持支持 MidJourney、Stab…

linux中的进程以及进程管理

程序和进程的区别和联系 程序(Program): 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数…

42、nginx之nginx.conf

nginx----web服务器 一、nginx http就是apache,在国内很少。 nginx是开源的,是一款高性能,轻量级的web服务软件。 稳定性高,而且版本迭代比较快(修复bug速度比较快,安全性快) 消耗系统资源…

uni-app打包小程序的一些趣事~

前言 Huilderx版本&#xff1a;4.15 uni-app Web端版本&#xff1a;3.4.21 问题1 Web端/APP端样式好好的&#xff0c;打包微信小程序就乱了咋整&#xff1f; 使用::v-deep/::deep/deep(){}都是没用滴~~ 原因&#xff1f; 解决&#xff1a; <script lang"ts"…

python小练习04

三国演义词频统计与词云图绘制 import jieba import wordcloud def analysis():txt open("三国演义.txt",r,encodingutf-8).read()words jieba.lcut(txt)#精确模式counts {}for word in words:if len(word) 1:continueelif word "诸葛亮" or word &q…

《昇思25天学习打卡营第06天|网络构建》

网络构建 神经网络模型由神经网络层和Tensor操作构成 #实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.…

Python作用域及其应用

Python的作用域规则决定了变量在代码中的可见性和访问性。全局作用域中定义的变量可以在整个程序中访问&#xff0c;而局部作用域中定义的变量则只能在其被创建的函数或代码块中访问。 全局作用域与局部作用域 全局作用域中的变量通常在程序的顶层定义&#xff0c;可以被整个…