flash-linear-attention CUDA算子成功实现(但限制极多。。)

在 C++/DirectX着色器 的基础上速成CUDA编程,还好思维模式基本通用,就多了线程组排布和共享内存方面的东西,入门还行,高级加速方面就不太行了。

代码仓库:https://github.com/One-sixth/flash-linear-attention-pytorch

虽然相比纯 pytorch 的实现,更大幅度地减少了显存的消耗,但是速度没有办法,缺乏精力和时间去深究 CUDA优化,非常消耗时间。
算了。作为其他类型的 线性注意力算子的起步

5种写法的算子介绍

normal_linear_attention_ops.py
原始方式,显存占用最大,速度最快
可读性:最佳
显存消耗:1X (O^2)
速度:1X

flash_linear_attention_ops.py
原始分块方式
内部使用torch.split,不需要填充到指定长度
可读性:佳
显存消耗:0.7X
速度:0.5X

flash_linear_attention_ops_2.py
基于 flash_linear_attention_ops.py 改为块索引方式,略快一丁点
内部需要填充到指定倍数长度
可读性:佳
显存消耗:0.7X
速度:0.505X

flash_linear_attention_ops_3.py
基于 flash_linear_attention_ops_2.py 加入显式内存复用方式,略快一丁点
即在一开始就分配所有需要的显存,在计算过程中,完全不需要新的显存分配
内部需要填充到指定倍数长度
可读性:中
显存消耗:0.7X
速度:0.51X

flash_linear_attention_ops_4.py
基于 flash_linear_attention_ops_3.py,改为CUDA/C++算子方式
本人的CUDA/C++技术有限,没有精力继续研究了
内部需要填充到指定倍数长度
限制很多,不支持float32以外的数据类型
可以作为其他类型线性注意力的参考实现
算子已经通过 pytorch2.1 + CUDA12.1 环境测试
可读性:较差
显存消耗:0.3X
速度:0.33X

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

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

相关文章

Qt窗体设计的布局

本文介绍Qt窗体的布局。 Qt窗体的布局分为手动布局和自动布局,手动布局即靠手工排布各控件的位置。而自动布局则是根据选择的布局类型自动按此类型排布各控件的位置,使用起来比较方便,本文主要介绍Qt的自动布局。 1.垂直布局 垂直布局就是…

内核驱动模块分布编译

内核驱动模块代码 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include <linux/ioctl.h> #include <linux/cdev.…

Redis的开发利用

在Redis中&#xff0c;可以使用两个数据结构来实现阅读量和点赞量的计数。 1. 使用字符串来计数阅读量和点赞量 在Redis中&#xff0c;字符串类型的数据可以通过 INCR 和 DECR 命令来实现原子递增和递减。 例如&#xff0c;假设要对一篇文章进行阅读量统计&#xff0c;可以使…

基于WebRTC构建的程序因虚拟内存不足导致闪退问题的排查以及解决办法的探究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上&#xff0c;没有感知到异常或中断 3.2、Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …

mysql 查询表字段名,注释 , 以及sql拼接查询出的内容

#sql查询字段名&#xff0c;注释操作拼接 #查询字段名和注释 select COLUMN_NAME,COLUMN_COMMENT from information_schema.COLUMNS where table_name 表名 and table_schema 库名 order by ordinal_position #查询整个内容 select * from information_schema.COLUMNS wh…

adb 获取当前界面元素

adb配置正确&#xff0c;直接看6&#xff0c;pull的位置是你执行pull的目录下。 --------------------------------------------------------------------------------------------------------------------------------- 使用adb命令获取当前应用的元素需要先连接到手机或模…

义乌再次位列第一档!2022年跨境电商综试区评估结果揭晓!

义乌跨境电商综试区捷报频传&#xff0c;在商务部公布的“2022年跨境电子商务综合试验区评估”结果中&#xff0c;中国&#xff08;义乌&#xff09;跨境电子商务综合试验区&#xff08;以下简称&#xff1a;“跨境综试区”&#xff09;评估结果为成效明显&#xff0c;综合排名…

C语言获取文件长度

C语言获取文件长度 文章目录 C语言获取文件长度一、使用标准库方法二、使用Linux系统调用 一、使用标准库方法 #include <stdio.h>long get_file_size(const char * filename ){long size 0;FILE * fp fopen(filename,"rb");if( fp NULL ) {printf("o…

【C++技能树】Lambda表达式

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 文章目录 0. Lambda表达式简介1. Lambda表达式2. Lambda表达式语法 0. Lambda表达式简介 在C98及之前,想要对sort进行自定义排序,或者对自定义类…

uniapp实现登录组件之外区域置灰并引导登录

实现需求 每个页面需要根据用户是否登录决定是否显示登陆组件,登录组件半屏底部显示,登录组件之外区域置灰,功能按钮点击之后引导提示登录.页面效果如下: 实现思路说明 设置登录组件背景颜色为灰色,将页面分成登录区域(底部)和非登陆区域(上面灰色显示部分), 置灰区域添加…

腾讯共享WiFi贴项目推广员是怎么收益的?

腾讯共享WiFi贴项目是一种非常普遍的商业共享模式&#xff0c;它为用户提供了便携、高速的无线网络服务。然而&#xff0c;人们对于这种项目是否真的能让共享WiFi贴推广员挣到钱还存在疑问。 腾讯共享WiFi贴扫码项目的运作方式是这样的&#xff1a;推广员将WiFi贴二维码粘贴到商…

kotling构造函数

Kotlin-继承与构造函数 - 简书 (jianshu.com) Kotlin语言中的继承与构造函数&#xff08;详解&#xff09;_kotlin 继承 构造函数_young螺母的博客-CSDN博客

Qt扫盲-QImage 理论总结

QImage 理论总结 一、概述二、读写图像文件三、图像信息四、像素操作1. 32位2. 8位 五、图像格式六、图像转换 一、概述 QImage类提供了一个独立于硬件的图像表示&#xff0c;允许直接访问像素数据&#xff0c;并且可以用作绘画设备。Qt提供了四个类来处理图像数据&#xff1a…

ES挂载不上怎么处理?

全文搜索 EelasticSearch安装 Docker安装 docker run -d --name es7 -e ES_JAVA_POTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v /home/206/es7/data/:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.14.0 …

VS的使用时遇到了basePath不能是相对路径的问题,如何处理?

使用VS&#xff0c;当你编译运行代码时出现以下的问题 解决方法 原因&#xff1a;文件库的路径存在问题&#xff0c;需要把相对路径改为绝对路径。 如何解决&#xff1a;去右键点击解决方案&#xff0c;选择属性-》调试-》命令中的参数被设置为相对路径。就可以解决以上的问题…

Springboot后端开发_日志

SpringBoot_日志 简介1、日志框架2、SLF4j使用1、如何在系统中使用SLF4j https://www.slf4j.org2、遗留问题 3、SpringBoot日志关系4、日志使用1、默认配置2、指定配置 5、切换日志框架拓展&#xff1a;日志分组 简介 6 种日志级别 TRACE: designates finer-grained informat…

K8S常用的一些命令及工具

已json格式输出 [rootk8master1 ~]# yum install epel-release [rootk8master1 ~]# yum -y install jq [rootk8master1 ~]# kubectl get --raw /api/v1/namespaces/dev | jq {"kind": "Namespace","apiVersion": "v1","metadata…

【代码随想录第48天】动态规划7

代码随想录第48天| 动态规划7 322. 零钱兑换279.完全平方数 322. 零钱兑换 LeetCode题目&#xff1a; 322. 零钱兑换 代码随想录&#xff1a;322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计…

(十二)Python文件操作(I/O)

和其它编程语言一样&#xff0c;Python 也具有操作文件&#xff08;I/O&#xff09;的能力&#xff0c;比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。 除了提供文件操作基本的函数之外&#xff0c;Python 还提供了很多模块&#xff0c;例如 fileinpu…

优质可视化素材大放送,全部免费,承包你今年的大屏项目

做大屏的时候&#xff0c;是不是经常遇到没有素材用的情况&#xff0c;也不知道从哪里可以下载到免费又酷炫的素材&#xff01;帆软君这就给你准备好了&#xff01; 还记得我们之前安利的FVD帆软视觉素材平台吗&#xff1f;最近上新了一波模板和视觉素材&#xff0c;都是从实战…