- 博客(176)
- 收藏
- 关注
原创 KV Cache
KV Cache是一种优化大语言模型推理速度的技术,其核心原理是缓存已计算的Key和Value向量,避免重复计算。通过只计算当前token的Query向量,并复用缓存的KV向量,显著减少了计算量。Prefix Cache进一步优化了这一机制,允许复用完全相同的prompt前缀对应的KV缓存。但当prompt前缀发生变化时,所有后续生成的Attention结果都会受影响,因此需要重新计算。这提示我们可能通过prompt顺序调整或同义转换来提升缓存复用率。该技术在提升LLM推理效率方面具有重要价值。
2026-01-19 18:49:14
125
原创 【FlashAttention】 FA2与FA1算法区别辨析
注意,第10行在部分文章中错写成了diag的逆,应该根据这篇文章的伪代码为准(推测是之前存在笔误,改了之后又重新上传了)。看了几篇关于FlashAttention2的文章,对于其中移除冗余的CUDA操作这个算法优化进行了一个综合梳理。这里FlashAttention2与FlashAttention1看起来有很大差别,推导如下;
2026-01-19 11:30:20
280
原创 【量化】w8a8及per-channel等概念辨析
解决了我长期以来对量化方面存在的几个疑问的点。在看FlashAttention的一个。时,问了大模型推荐了这篇。
2026-01-14 14:37:48
246
原创 首尾元素相同的间隔循环策略
在看Flash Attention4的过程中,发现一个很有趣的细节。以往在写输出数组等方式时,会面临一个元素和逗号间接输出的情况,且第一个元素前和第二个元素后都不包含逗号,如。,写过程序的应该都见过这种处理方式,一种手段是先输出一个元素,然后循环输出逗号+元素,另一种手段是先循环输出元素+逗号,然后输出输出最后一个元素。
2026-01-13 15:20:23
154
原创 【Python】介绍一个新的函数Partial
partial是 Python functools 模块中的一个函数,用于“预先填充”某个函数的部分参数,返回一个新的可调用对象。这样你可以先固定一部分参数,后续只需传递剩余参数即可。
2026-01-12 17:52:44
114
原创 【GPU】Mesh-Attention:3.4倍加速,通信暴降85%
本文主要参考https://mp.weixin.qq.com/s/652b9aGANblAePZrBuDRAw。补充一些公众号没有提到的细节。
2026-01-05 09:45:36
818
原创 【CUDA】大规模测试场景下的数据生成问题
在开发gemm/attention等大规模算子时,数据溢出是常见问题。测试时使用全1或idx值容易导致结果变为inf,建议:1)将全1值缩小为0.001f;2)避免直接使用递增idx,改用周期性数值。作者曾因测试数据不当花费大量时间调试,提醒开发者注意测试数据的合理设置。
2026-01-04 16:30:41
190
原创 大模型的误用引起的思考
这就引起了我的思考,我们的大模型该如何对待历史上下文,参考人类认识问题的过程,应该将所有历史的上下文都存储下来,通过遗忘机制抛弃不需要的记忆,然后通过关联机制管理与当前问题相关的记忆,使我们以后不需要手动来管理记忆和上下文。在一次偶然的尝试中,发现了原因。在于我对大模型的使用习惯,我不喜欢每次切换问题领域时都重新点击新建对话,而是使用一个对话框一直问,因此大模型需要考虑历史的上下文。同样的,如果我之前说过类似于”直接给我代码,不需要解释“之类的话,也会影响大模型的结果,会将对话也放到代码框里展示。
2025-12-25 09:41:46
238
原创 【大模型】happy-llm笔记
今天看了这套课程的第二章到第四章的内容,对自己一直以来好奇的一些llm相关的问题有了解答。将我遇到的问题整理到下面,部分可能没有回答,感兴趣的同学可以去原课程查找。happy-llm是datawhale发布的一套关于llm的教程,链接。
2025-12-16 15:33:17
204
原创 agent和知识库技术发展的一个可能性
最近在用大模型根据文件补充的信息来回答问题的场景中,发现面对需要举一反三的例子时,就会陷入被动,例如让大模型生成一份代码,然后根据文档中的信息来修复代码中的错误时,代码用到的是double之类的类型,但文档中只有float类型,面对这种场景,大模型并没有正确的将文档中的float类型替换成double类型,而是直接生硬的用float类型填充了原来的代码。这种场景类似于我们学习中常见的刷题战术,刷了题却不完全理解,考试时面对新的场景就不能正确的完成问题的解决。
2025-12-14 20:13:04
226
原创 使用rvv优化rms_norm
开RVV基础上使用redusum同时使用float32进行。开启RVV,但使用redosum(效率较低)将一个循环规约变成rvv形式的。开启RVV,使用redusum。
2025-12-14 15:29:08
277
原创 如何调试llama.cpp及判断是否支持RVV
3. 如果使用cmake直接编译整个项目,也依然无效。的方式可以正确完成判断,但需要注意,这个函数的定义在。
2025-12-01 08:45:09
220
原创 riscv 交叉编译 pytorch
首先,riscv上的python生态非常不堪,在中也有描述,找不到预编译好的pytorch,因此需要从源码编译。但在qemu上直接编译效果很差(宿主机本身性能不足也是原因),因此尝试用交叉编译的方式。
2025-11-18 15:42:57
143
原创 riscv64开启llama.cpp的RVV
可以看到,通过-DGGML_RVV=OFF 开关可以打开RVV的选项,但在实操中发现,开启RVV之后会报错_v指令找不到,但我的开发板支持v扩展,查询之后发现支持的指令集是rv64gcv而不是rv64gc_v之类的。而这个文件是PLCT的小伙伴修改的,且用内联汇编写算子的情况只发生在VLEN是128时,因此我这里暂时将其注释。这点和https://forum.spacemit.com/t/topic/419的判断一致。但是我还没弄明白_v和v的区别,有明白的也可以评论区发言哦。
2025-11-15 14:38:32
218
原创 vllm关于riscv的issue和PR梳理
上面issue有人提问是否有riscv的支持,回复是说如果pytorch支持了那么vllm应该可以直接支持。这个issue提到有人想为vllm提供riscv贡献。这个稍早的PR提供的是RVV支持,但是还在拉扯中。这个PR提供的是Riscv的标量支持,已经合入。
2025-11-13 12:04:16
138
原创 HPC101-lab2.5 rvv intrinsics实现整数乘法
证明对于连续数据使用不带stride的读写会显著优于带stride的读写。同时推荐使用printf的方式对rvv用到的一些向量进行打印。使用直接load的方式加载。
2025-10-29 16:03:49
158
原创 【leetcode】由矩阵旋转说起
至于为什么是N - 1,而不是N,这是因为索引是从0开始的,也即0, 1, …N - 1,利用高斯的思想就可以得到。可以简单理解为,在有负号的轴上发生了累积,在同号的轴上发生了抵消,因此y1结果不变,y2多出了一个n - 1。此处的推导结果显示其不涉及连续与离散的区分,以及方阵与否的影响,且结果显示与M无关。,想用临时变量存放矩阵旋转过程中各个点旋转之后的位置,这就需要推导他们的关系。但在旋转之后,中心点坐标发生了变化,变成了。
2025-10-24 11:16:29
269
原创 一道有关树的考察多方面知识的笔试题
基础知识就是:如果只给一个树的某个遍历结果,是无法得到唯一的一棵树的,因此这道题的巧妙之处是约束了完全二叉树.一个输入数组,是一个完全二叉树的中序遍历结果,要求输出广度优先搜索的结果.关键在于如何确定左子树(必须是完全的或者尽量多的)的范围.
2025-10-22 03:03:06
118
原创 笔试中一道数学相关的编程题
给定两个等长的数组a和b,可以任意重排,但不能交换a和b中的元素,然后将a[i] - b[i]构成的新数组,要求新数组具有钟摆特性(也即非边界元素必须比相邻两个元素都大或者都小。用大模型答了一下,其实这题最关键的是用最大值减去最小值可以获取一个最大结果,用最小值减去最大值可以获取一个最小结果,交替使用就可以保证摆动效果存在且摆动范围逐渐变小。
2025-10-19 15:20:37
194
原创 近期笔试心得
常见的移动语义操作是通过std::move实现的,但std::move本身完成的工作只是将左值转成右值引用,从而告诉编译器,创建对象时使用移动构造,而非拷贝构造。理清了左值和右值之后,就会发现,我们常用的引用是左值引用,其作为参数传递时可以理解为将变量本身传递到了函数内。上面的x既出现在了左值又出现在了右值,但因为x是有地址的,所以x是左值。而右值引用可以绑定右值,有一个特例就是常量的左值引用也可以绑定一个右值。中,a+5这个表达式是没有地址的,因此是右值。5. 左值引用和右值引用。
2025-10-19 13:31:59
183
原创 近期的笔试和面试的复盘
且初始化顺序与析构顺序相反。在同一文件中按照从上到下的顺序构造,在不同文件中构造顺序不确定(也即无法保证明确的构造顺序,除非通过一些手段显式的修复这些问题,例如:懒加载,显式初始化等)比如target_link_libraries(A PRIVATE B),那么如果C链接了A,关键字就会影响B对C的可见性,其中比较奇怪的是interface,描述指的是C会链接A,但是B不链接A这种情况。如果对一个类构造const类型的对象,那么其初始化只支持使用初始化列表的方式,而不能使用普通的带参数输入的初始化方法。
2025-10-17 16:39:50
1060
原创 【leetcode】两次遍历的一类题目及其优化
这类型题目中,都存在某个点与其左右两边的元素有依赖关系的情况,例如1中,每个点的值取决于其左右两边的情况,例如序列[1, 3, 5, 4, 3, 2],其中第三个元素也即5,由左边元素决定其为3,由右边元素决定其为4,因此需要从左边遍历一遍,再从右边遍历一遍,得到两种情况下的值取最大值。对于问题2,可以通过左边遍历拿到某个元素左边位置的元素乘积,通过右边遍历拿到右边位置的元素的乘积,二者相乘作为当前位置的结果。
2025-10-09 16:16:27
390
原创 【leetcode】两次遍历的一类题目及其优化
本文分析了LeetCode中两类具有相似解法的题目:分发糖果和除自身以外数组的乘积。这两类问题的共同点是都需要对数组进行两次遍历(从左到右和从右到左),以计算每个元素与左右相邻元素的关系。在分发糖果问题中,每个元素的值取决于左右邻居的比较结果;在乘积问题中,结果等于左右两侧元素乘积的积。文章指出可以通过优化策略,在第二次遍历时仅使用常数空间来存储中间结果,从而将空间复杂度优化为O(1)。这种两次遍历加空间优化的方法适用于具有类似特征的题目。
2025-10-09 16:13:43
156
原创 orangepi RV2环境配置
首先吐槽一句,tf卡重启之后就进不去系统,不知道是香橙派的问题,还是所有部分板子的问题,反正表现就是你装好了系统,但是用了sudo reboot之后,就进不去系统了,调了我好久。最终的解决方案是用U盘方式启动,因为emmc和nvmi都需要购买新的硬件。
2025-10-05 02:33:11
162
原创 【笔试心得】一家没有编程题的牛客笔试
这篇文章总结了六个技术问题: 软中断与硬中断的区分,指出计时器触发属于硬中断 自定义分配器的优化原理(减少碎片、提升速度) 浅拷贝与深拷贝的区别,特别说明浅拷贝对可变子对象的同步影响 运行时多态的正确实现方式及常见错误 volatile关键字的正确理解(禁止特定优化但非全部优化) 软硬链接的本质区别,解释为何硬链接不受源文件删除影响 核心知识点包括:中断机制、内存管理、拷贝机制、多态实现、编译器优化和文件系统链接原理。
2025-08-24 14:28:18
733
原创 【leetcode】买卖股票的最佳时机 II引发的思考
文章讨论了股票买卖问题(II)的两种解法:贪心算法和动态规划。核心论证了贪心算法的适用性,证明将总区间拆分成多个不重叠子区间能获得更大收益。同时指出题目特殊性在于需要二维动态规划来记录"持有/未持有"两种状态,而一维动态规划会退化为贪心算法。作者通过数学公式和实际意义两方面验证了贪心策略的正确性,并强调题目假设了预知未来价格的能力。
2025-08-24 00:08:50
229
原创 【算法】leetcode刷题心得(三)
心得一:使用string代替char,也即用C++的一些更加安全的操作代替C语言,例如C++中通过定义string类很好的封装了字符串相关的操作,比如定义一个指定长度的字符串,或者修改字符串的长度,这是C中的字符数组代替不了的功能。心得二:注意区分数字和字符,一个数字如果按照字符理解的话转换出的int不是自身,而是数字在ascii中的位置。一个数字不能简单的看作字符与’0’的转换,因为存在进制和多位数。
2025-03-25 23:19:03
137
原创 【C++】提倡指针符号与数据类型分隔的对齐规范
因此最好将指针和变量名贴在一起,这样就可以提醒自己定义指针一定要带上指针符号。我平时编写C++代码时有一个习惯,会将指针符号后置,也即。这样代码无法进行编译,因为end的数据类型是。
2025-03-23 15:11:27
153
原创 【算法】leetcode刷题心得(一)
力扣官方的题解其实已经很详细了,如果我再写文章去po我自己的算法方案看起来很班门弄斧,因此开一个新的坑,不定期更新刷leetcode等算法题的心得,一篇集中3到5个吧,读者朋友们可以当段子来读。
2025-03-18 17:31:52
316
原创 【算法】牛客笔试系统挖的坑(笔前必看)
我采取的措施是每次读取一个字符,直到读取到换行符时说明读取完成,跳出循环,但在实际操作中发现,牛客的系统会一直读取最后一个字符,循环不停。因此就造成可能读取不到换行符的操作。上周的笔试,三道编程题做出来了两道,但是本地自测过了提交过不了,强烈建议所有用力扣刷题的同学注意使用一下牛客等需要自己编写输入输出的OJ。看题解推荐的读取方式是以string的形式每次读取一个string,然后利用size()获取长度之后循环读取。推测存在的问题是对输入字符串的处理逻辑上。祝同学们笔面顺利吧!
2025-03-16 13:05:43
176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅