首页 > 其他分享 >TVM-MLC LLM 调优方案

TVM-MLC LLM 调优方案

时间:2023-06-21 22:44:14浏览次数:52  
标签:MLC func mlc create TVM shape 调优 LLM

本文地址:https://www.cnblogs.com/wanger-sjtu/p/17497249.html

LLM 等GPT大模型大火以后,TVM社区推出了自己的部署方案,支持Llama,Vicuna,Dolly等模型在iOS、Android、GPU、浏览器等平台上部署运行。

https://github.com/mlc-ai/mlc-llm

本文在之前作者介绍的基础上,简要介绍一下mlc的调优部署方案。

pipeline

在正式介绍TVM mlc.ai部署LLM方案之前,首先简要介绍一下当前主流LLM的一个工作流程。

需要说明一点的是,上图中的prefill跟Decode指的的同一个模型,只是输入的shape存在差异。

这里的示意图省略了很多,只是大致描述一下pipeline。
在处理用户输入时,此时长度大小是不能确定的,这时候是完全的是一个完全的动态shape的。但在decode过程中由于是token by token的,这时候网络中的中除了kv cache相关几个部分,其他大多数的操作都是固定shape的,就可以用已有的算法调优了。

MLC.AI 部署调优方案

以下以RedPajama3B模型的tuning跟build过程介绍一下mlc的方案。

pipeline 组成

在已经支持的几个模型里面均有get_model 这个函数,在这个函数里面会创建下面4个IRModel。

  • encoding_func
  • decoding_func
  • create_kv_cache_func
  • create_softmax_func
  • create_metadata_func

encoding_func
这对应了上图中的prefill过程,在每次用户输入后调用。由于用户输入的不确定性,所以这个过程基本上都是动态shape的,很难确定到底输入是多大,也不适合搜索调优。

decoding_func
这是上图中decode过程的一部分,因为这个过程是token by token的,在计算过程中大部分的计算是固定shape的。

create kv cache func
这里是直接调用的relax.vm中的函数,创建的是kv cache的存储相关。

create softmax func
这个也是解码过程的一部分,确切的说是采样过程中计算的一部分

** create_metadata_func **
模型的meta信息,比如model_namestop_tokens

部署优化

构建完以后,就进入到优化的阶段了。下面根据build.py过程描述一下过程。

  1. API构图构建了相关的模型,读取权重

  2. 量化

  3. 优化PASS

    1. FuseTransposeMatmul
    2. FuseDecodeMatmulEwise
    3. DeadCodeElimination
    4. LiftTransformParams
    5. split_transform_deploy_mod
  4. Codegen 生成代码

    1. DispatchTIROperatorAdreno/DispatchTIROperator/DefaultGPUSchedule 手动优化的sch
    2. MetaScheduleApplyDatabase搜索的log生成固定shape的sch

Tuning

在MLC-LLM的代码仓里面已经提供了tuning的脚本,有一点需要先做一下,先调用build.py的文件,把静态shape的相关的函数分离出来。就得到了tuning文件中需要的mod_tir_static.py

标签:MLC,func,mlc,create,TVM,shape,调优,LLM
From: https://www.cnblogs.com/wanger-sjtu/p/17497249.html

相关文章

  • 如何做mysql调优?绝命7招,让慢SQL调优100倍
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Java SE和Java EE应用的性能调优
    凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划、方法或策略以及特定的领域背景知识。为了在Java性能调优工作中有所成就,你得超越“花似雾中看”的状态,进入“悠然见南山”或者已然是“一览众山小”的境界。这三个境界的说法可能让你有些糊涂吧,下面进一步解释......
  • 活动回顾 | 汇聚行业技术大咖,共享思维碰撞时刻,2023 Meet TVM · 北京站圆满落幕
    内容一览:「2023MeetTVM·北京站」于6月17日在中关村车库咖啡顺利举办,现场吸引了来自企业和高校的150余名参与者,大家进行了充分热烈的讨论。关键词:机器学习编译2023MeetTVM本文首发自HyperAI超神经微信公众平台~6月17日,由MLC.AI及HyperAI超神经主办、Op......
  • SQL调优:让Java内存分担计算
    作者: 剽悍一小兔我们在工作中,经常会因为一条慢sql调半天。这一节,我给大家介绍一种提升查询效率的思路,那就是让Java内存帮我们分担一些运算。案例还是采用springBoot日记本系统,源码下载地址和教程在文末。先改一个BUG之前遗留了一个BUG需要我们解决,就是在日记的详情页,日记类型没......
  • 强化学习中的模型调优与优化
    目录《强化学习中的模型调优与优化》引言强化学习是一种机器学习领域的重要分支,旨在让智能体通过与环境的交互来学习最佳行为策略,从而完成目标任务。在强化学习中,模型作为智能体的决策引擎,必须能够高效地执行搜索策略,以最大化奖励函数的期望值。然而,在实际训练和调优中,模型可能......
  • CentOS搭建NFS服务、windows挂载权限问题; NFS读写缓慢调优
    CentOS搭建NFS服务、windows挂载权限问题CentOS和统信UOS(与ubuntu一样)命令不一样,但操作大同小异,参考如下:https://blog.csdn.net/wangzongyu/article/details/127009158 windows读写linux搭建的NFS内文件是比较慢,调优:https://blog.csdn.net/yysalad/article/details/11736623......
  • XGBoost超参数调优指南
    本文将详细解释XGBoost中十个最常用超参数的介绍,功能和值范围,及如何使用Optuna进行超参数调优。对于XGBoost来说,默认的超参数是可以正常运行的,但是如果你想获得最佳的效果,那么就需要自行调整一些超参数来匹配你的数据,以下参数对于XGBoost非常重要:etanum_boost_roundmax_dep......
  • JVM性能调优
     一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize-XX:MaxPermSize 等参......
  • 常见的JVM调优方法有哪些?可以具体到调整哪个参数,调成什么值?
    调优工具console,jProfile,VisualVM Dump线程详细信息:查看线程内部运行情况死锁检查查看堆内类、对象信息查看:数量、类型等线程监控线程信息监控:系统线程数量。线程状态监控:各个线程都处在什么样的状态下热点分析CPU热点:检查系统哪些方法占用的大量CPU时间内存热点:检查哪些对......
  • 一份55页Java性能调优PPT分享
    提起“肖桦”这个人,相信很多小伙伴对他比较陌生。除去现任唯品会资深技术专家头衔外,他更为技术圈所熟知的是他的著名开源项目:SpringSide。SpringSide是以springFramework为核心的,Pragmatic风格的JavaEE应用参考示例,是JavaEE世界中主流技术选型,最佳实践的总结与演示。到目前为......