SGLang为什么这么快?
2
SGLang为什么这么快?
CPU Overlap Optimization
如何降低CPU开销?(CPU干等的时间)
Pseudo Code,每一行都会被阻塞
While True:
recv_reqs = recv_requests()
process_input_requests(recv_reqs)
batch = get_next_batch_to_run()
result = run_batch(batch)
process_batch_result(batch, result)
GPU需要等待CPU处理很多事情,并不是一直在工作
CPU的任务:
- 接收用户输入数据
- 处理模型运算结果
- 检查停止条件
- 进行前缀匹配和申请重排序
- 为下一批次分配内存
理想情况下:
FlashInfer 优化
将FlashInfer作为默认后端
LLM GPU kernel,FlashAttention,PageAttention,SparseAttention,Sampling等
原版的FlashAttention3不支持PagedKV缓存
RadixAttention也算是PageAttention的一种变体,只不过Block大小设为1,是为了让前缀缓存匹配更好,比其他尺寸适配更多共享缓存
Stream K Scheduler
通过分配任务来减少SMs的空闲时间,输入长度,有的长有的短,不做调度性能表现可能不太好,仅和输入的总长度有关
TurboMind GEMM 优化
量化方法,AWQ,GPTQ,W8,A8这种
加速线性运算,MoE混合专家运算