Closed lzcchl closed 1 week ago
最近在学习cuda编程,看到大佬代码中cuda softmax的实现,理解起来有点头疼;
以 safe_softmax_f32_per_token_kernel 为例,其中的block_reduce_max_f32 和 block_reduce_sum_f32 都是块内归约,得到的只是块内的最大值和累加值,看起来并不是全局的最大值和累加值(我看后续调用过程中,grid的维度是大于1的),为什么后续还能继续套safe softmax的公式计算呢?
这个是per token的kernel,设计成每个block刚好处理一个token
https://github.com/DefTruth/CUDA-Learn-Notes/blob/edf80bbc5bfec54cb4d134a0a40724ea14c91319/kernels/softmax/softmax.cu#L148-L162
噢噢,我了解了,大佬。其实就是有gridSize条数据,每条自身做softmax,每一条的计算正好放在一个block里
最近在学习cuda编程,看到大佬代码中cuda softmax的实现,理解起来有点头疼;
以 safe_softmax_f32_per_token_kernel 为例,其中的block_reduce_max_f32 和 block_reduce_sum_f32 都是块内归约,得到的只是块内的最大值和累加值,看起来并不是全局的最大值和累加值(我看后续调用过程中,grid的维度是大于1的),为什么后续还能继续套safe softmax的公式计算呢?