世界人工智能大会分论坛“芯节点·新突破——协同创新聚力 加速智算破局”主题论坛在上海举行。中国工程院院士、清华大学计算机系教授郑纬民会上发表演讲。他表示,大模型推理引擎是人工智能产业竞争的关键,做好模型推理需要掌握好算子优化、模型量化、异构调度、并行优化四大关键点。
关键点一:算子优化 算子优化就是对大模型中的单个算子(如Conv卷积、MatMu矩阵乘法等)做性能改造,使同一个算子在给定硬件上跑得更快、占用内存更少、功耗更低。例如,将“卷积”这个算子从普通C语言替换为汇编级Winograd+SIMD+缓存分块,就是算子优化。
算子优化主要有两种实现方案:其一,图层优化,包括不等价交换,用可控误差换性能;基于表达式交换,用代数/符号规则在图层级别做等价化简;张量属性变换,通过调整张量的形状、步长等消除冗余内存搬移或者提高并行度等。其二,算子层优化,即采用计算访存重叠、异步流水调度等技术进行算子优化。
关键点二:模型量化 模型量化就是将模型中的浮点参数(如32位FP32)转换为低比特整数(如8位INT8)的技术,目的是缩减模型体量、降低计算量、提升推理速度,同时尽量保持模型精度。在模型规模急剧增加、低精度计算单元越来越多样的背景下,模型量化是减少内存需求和提升推理性能的有效途径。
当前模型量化主要有两种方案: 其一,单一精度量化,直接将模型中的高位宽参数替换为低比特,例如将16位浮点数直接替换为8位整数,这一方式以“极简部署”换“精度弹性”,在硬件支持单一格式或对精度不敏感时是。
其二,混合精度量化,在同一网络里按层、张量或通道分别使用两种及以上位宽(如INT8+FP16、INT4+INT8、FP8+FP16+FP32等),而不是“一刀切”成单一低比特。
但混合精度推理的发展也面临着挑战,混合精度库开发周期长,历时超过一年;代码量大,超过1万行;算子性能差,相较于单一精度推理,性能下降70%。导致现有的混合精度推理利用率仍较低。
关键点三:异构调度 异构调度指在包含多种不同类型计算单元(CPU、GPU、FPGA、AI加速器等)系统中,将任务或子任务动态、合理地分配到合适的处理器上,同时满足性能、功耗、资源利用率或实时性等多重目标的一种资源管理技术。该技术的目标是让正确的任务在正确的时间跑到正确的芯片上,例如将“跑得快但耗电高”的GPU留给矩阵乘法,把“省电但慢”的CPU小核留给控制逻辑。
模型推理可大致分为两个过程:一是P过程(prefill,预填充),二是D过程(decode,解码)。前者预处理负载请求的所有token,读取并“理解”用户输入的上下文,这一过程是计算密集型的;D过程则是和访存密集相关。
P过程与D过程所需的负载不同,如果能将P过程和D过程拆成两个独立的流水线,分别在不同的硬件上跑,且能实现互不干扰,推理计算的整体性能就提高了。
关键点四:并行优化 并行优化即把深度学习任务拆成多条独立或半独立的计算通路,让他们在同一个时刻被多个计算单元并行执行,从而在“时间”或“空间”维度上换取整体吞吐或延迟提升的一系列工程手段。简单理解,这就相当于“把1个人干100天的活,拆成100个人1天干完”。
当前,并行优化面临着两大挑战: 其一,由于推理场景多样化,且不同推理场景的负载模式不同,固定的并行策略无法适应动态推理场景。例如,科研论文摘要、财报分析等,输入内容长,则Prefill占优,属于计算密集型任务;深度思考,输出文本长,则Decode占优,属于访存密集型。针对这些不同的应用场景,需要制定不同的并行策略。
其二,由于大模型服务场景存在明显的潮汐特性,不同时段的系统压力不同,静态的推理系统也无法适应动态服务场景。具体来看,白天时段使用人数多,请求量大,系统压力大,存在显存缺口;凌晨时段使用人数少,请求数量小,系统压力小,存在显存空闲。
因此需要采用动态的并行策略,通过并行策略自动调整减少算力浪费。例如,在请求较多时,采用张量并行+流水线并行的策略,吞吐量更大;在请求较少时,Attention(注意力机制模型)部分采用数据并行,MoE(混合模型)部分采用并行策略的吞吐量更高。