SGLang为什么这么快?
2

SGLang为什么这么快?

CPU Overlap Optimization

如何降低CPU开销?(CPU干等的时间)

image-iakm.png

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的任务:

  1. 接收用户输入数据
  2. 处理模型运算结果
  3. 检查停止条件
  4. 进行前缀匹配和申请重排序
  5. 为下一批次分配内存

理想情况下:

image-boch.png

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混合专家运算

SGLang为什么这么快?
https://lihuigu.cn//archives/sglangwei-shi-me-zhe-me-kuai
作者
lihuigu
发布于
更新于
许可协议