• 推理优化(1)


    1|0吐槽


    在连续挖了好几个坑之后,又开了一个新的坑:推理优化。它属于一个llm底层的应用,目的是在操作系统层面来优化llm的执行速度进而优化整个模型。
    那闲话少说,我们正式开始。

    2|0llm的过程


    2|1prefill阶段与decoding阶段


    prefill

    decoding

    这两者的区别是prefill会先把所有的数据进行拿出来计算,后者只会拿很小一块

    3|0推理优化的Benchmark


    3|1吞吐量


    单位时间内系统能吐出多少个decoding
    影响因素:模型优化,输入数据长度

    3|2First Token Latency(很重要)


    首次prefill阶段所花费的时间
    影响因素:输入长度

    3|3Latency


    生成每个词的间隔
    影响因素:输入长度

    3|4QPS(每秒请求数)


    QPS=K/这K个请求的时间
    影响因素:显卡利用率

    4|0LLM推理的子过程


    5|0优化


    1/流水线前后处理与高性能采样
    本质是处理过程中的Tokenize和Detokenize部分可以在cpu中进行处理,这样就不必浪费gpu资源进而提升效率。
    2/动态批处理
    利用流水线思想优化处理过程,通过将多个用户的过程结合在一起来提升处理速度,具体来说在self Attention层分成了Flash attention和Decoding attention两个部分一起处理merge step。
    3/Cache现存管理
    过去的cache是直接给每一个用户分配一个固定大小的内存,也有优化版本将用户的信息切块来分配,都是存在问题的。ppl中采用的VM Allocator在过去的cache基础上做了修改,会根据用户过去的信息来做一个预测长度。这样可以有效的减少浪费
    4/KV Cache量化
    Q:什么是量化?
    A:将浮点数表示的数据转换为更小的数据类型,如整数或固定点数,从而减少存储空间和计算开销。

    KV缓存决定了服务器能服务的用户数量,优化缓存就是提升性能
    应用在self attation,K,V三个层中
    5/矩阵乘法量化
    矩阵乘法在模型中花费占比70%以上

    量化大体方向

    6|0int8 VS int4


    int8相比于fp16 加载权重减半,计算时间减半。
    int4加载权重会减少的更多,但会多一个解量化的时间,且不减半计算时间。
    在服务器中多用int8是因为解量化的时间与计算时间正相关,而服务器中计算占比较大。


    __EOF__

    本文作者Sandust
    本文链接https://www.cnblogs.com/sandust/p/18516756.html
    关于博主:评论和私信会在第一时间回复。或者直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
  • 相关阅读:
    杰理AC632定时任务接口sys_timer_add和usr_timer_add区别详述
    操作系统06-运行机制
    汽车以太网简史
    vue3 学习笔记03 -- scss的使用
    hevc pps解析
    基于STM32单片机的温度报警器(数码管)(Proteus仿真+程序)
    Spring IOC之ImportSelector接口
    归并排序和快速排序的两种实现
    深度学习(PyTorch)——Dataset&DataLoader 加载数据集
    postgresql常用操作指令
  • 原文地址:https://www.cnblogs.com/sandust/p/18516756