学习让我快乐

争于世, 不争于势;简洁, 高效, 赏心悦目

mscclpp DeviceSyncer 真的能 sync 么?

DeviceSyncer 作为一个朴素的工具类, 其实现真的很简短, 就是如下 15 行代码: MSCCLPP_DEVICE_INLINE void sync(int blockNum, int64_t maxSpinCount = 100000000) { unsigned int maxOldCnt = blockNum - 1; __syncthreads(); if (...

令人哽咽的 python asyncio 调试

笔者近来一直在参与某个不可名状的项目, 从上到下都很重视, 每天都会拉起 Scrum 会对齐进度, 虽然压力满满但也斗志昂昂. 然后最近项目出现了一个 bug, 此 bug 严重阻塞了各位同学后续进一步验证工作, 已经连续几天在 Scrum 会上被点到. 于是我开始接手这个 bug 的分析定位工作, bug 的修复到很简单, 就是普通的多线程并发问题. 时间来到了当天晚上 7 点左右, 我已...

为什么协程

老板让做一篇基础的协程分享介绍. S O W H Y C O R O U T I N E 在我们之前的文章 “为什么线程” 中, 讨论了线程的概念: 一个线程对应一个执行流. 增加一个线程意味着增加了一条逻辑执行流, 从而增强了应用的表达能力和处理能力. 当应用编写完逻辑执行流后, 负责为每条逻辑执行流创建对应的线程, 而内核则负责将这些线程调度到具体的 CPU 上执行, 以推动逻...

A note on A note on A note on the algebra of CuTe Layouts

在 A note on A note on the algebra of CuTe Layouts 末尾遗留了一个问题, 就是: In particular, I am trying to prove $M$ is left divisible by $N_{\varphi(\beta)} r_{\varphi(\beta)}$, \[\begin{align} r_{\varph...

A note on A note on the algebra of CuTe Layouts

这篇文章纪录了对 A note on the algebra of CuTe Layouts 的学习笔记, 侧重于记录我当时没有看懂的部分, 以及对书中部分知识点的一些扩展. 非常零散, 不成系统; 最好是结合 A note on the algebra of CuTe Layouts 使用. A note on the algebra of CuTe Layouts 是之前在学习 c...

cuda pipeline 源码解析

之前在学习 cutlass 实现时, 看到其使用了 cuda pipeline 设施, 然后看了下 pipeline 的文档似懂非懂 :-( // 如下这段代码会被 thread block 中所有线程协作执行. __shared__ cuda::pipeline_shared_state<thread_scope_block, stages_count> shared_sta...

vllm 中的 sampling

本篇文章是之前学习 vllm 源码时纪录的笔记, 参考着 vllm 0.6.2 的代码做了更新. 顺便略作整理之后发了出来, 希望能帮忙您=. = llm 中的 sampler 本身要做的事情还是比较直观的, 就是根据模型输出的 next token 的 logits 按照指定的策略选择 next token id. 这里介绍下 vllm sampling 模块的主要数据结构与实现...

PaperReading: Nanoflow

在 CPU 中, 当我们只调度一个执行流给 CPU 时, 如果 CPU 在执行某些指令时遇到了阻塞, 比如在执行 io 指令时, 此时整个 CPU 将处于闲置状态, 其会等待 io 指令执行完成才开始处理下一条指令. 这造成了浪费, 而我们看不得浪费. 为此引入了超线程技术, 允许应用将两个执行流调度到一个 CPU 上, 这样当 CPU 执行一条执行流阻塞时会切换执行下一个执行流. 与此同时...

从 transformer 到 FlashAttention 再到 PagedAttention(1)

整理笔记时发现这篇之前学习 transformer 的总结, 略加梳理之后发表出来, 希望能帮到你=. = 本文假设你已经有 这里 提到的数学常识. 先看 transformer, 先理清 encoder 一个层输入/输出, 如下图所示, P.S. 我发现动动手把输入/输出 shape 写出来很是有助于加深理解呀.: encoder 部分最低层的输入很明显是用户输入, 此时 ...

再读 Gpipe, 前向传播, 后向传播

整理笔记时发现这篇之前学习 Gpipe 的总结, 略加梳理之后发表出来, 希望能帮到你=. = 关于前向传播, 后向传播, 以及 Gpipe 中 pipeline parallelism 一开始是囫囵吞枣地一股脑生咽下去的; 看似是懂了 gpipe, 但其实说到细节处总有点含含糊糊的地方. 现在正好有空, 总结梳理下. 本文假设你已经有 这里 提到的数学常识. 再次回到吴恩达老师...

从数据库到 AI

在昨天晚上, 在我完成了 概率导论(9): 经典统计推断 推送之后, 我终于算是结束了自己数学知识重建体系的第一阶段. 当时忽然感觉到一阵恍惚, 我是为啥要重建自己的数学知识来着? 哦对, 想起来了, 是当时在看 jemalloc 采样逻辑时那块代码死活看不懂, 幸好 jemalloc 大佬留了关于采样逻辑背后设计的文档, 但不幸的是文档也是看不懂, 各种不知道的名词满天飞, 对这些名词的...

概率导论(9): 经典统计推断

系列导言, 本文是作者在学习 Dimitri 概率导论的读书笔记, 侧重于记录我当时没有看懂的部分, 以及对书中部分知识点的一些扩展. 非常零散, 不成系统. 对本系列的使用最好是读者也在学习 Dimitri 概率导论并且恰好有某处不太明白, 可以参考着本系列说不定这里就有答案. 本系列文章在写作时参考了互联网上零零散散非常多的资料在此表示感谢! 总的来说,在我们的记号中,概...

概率导论(8): 贝叶斯统计推断

系列导言, 本文是作者在学习 Dimitri 概率导论的读书笔记, 侧重于记录我当时没有看懂的部分, 以及对书中部分知识点的一些扩展. 非常零散, 不成系统. 对本系列的使用最好是读者也在学习 Dimitri 概率导论并且恰好有某处不太明白, 可以参考着本系列说不定这里就有答案. 本系列文章在写作时参考了互联网上零零散散非常多的资料在此表示感谢! 例 8.3, 略作补充 整...