DefTruth / CUDA-Learn-Notes

📚Tensor/CUDA Cores, 📖150+ CUDA Kernels, ⚡️⚡️toy-hgemm library with WMMA, MMA and CuTe (98%~100% TFLOPS of cuBLAS 🎉🎉).
GNU General Public License v3.0
1.57k stars 166 forks source link

关于softmax中的实现的理解,求大佬解惑 #151

Closed lzcchl closed 1 week ago

lzcchl commented 1 week ago

最近在学习cuda编程,看到大佬代码中cuda softmax的实现,理解起来有点头疼;

以 safe_softmax_f32_per_token_kernel 为例,其中的block_reduce_max_f32 和 block_reduce_sum_f32 都是块内归约,得到的只是块内的最大值和累加值,看起来并不是全局的最大值和累加值(我看后续调用过程中,grid的维度是大于1的),为什么后续还能继续套safe softmax的公式计算呢?

DefTruth commented 1 week ago

这个是per token的kernel,设计成每个block刚好处理一个token

https://github.com/DefTruth/CUDA-Learn-Notes/blob/edf80bbc5bfec54cb4d134a0a40724ea14c91319/kernels/softmax/softmax.cu#L148-L162

lzcchl commented 1 week ago

噢噢,我了解了,大佬。其实就是有gridSize条数据,每条自身做softmax,每一条的计算正好放在一个block里