服务化参数调优实战

简介: 本文介绍了服务化性能调优的全流程,以Llama3-8B模型为例。首先需完成MindIE环境安装、下载模型权重与测试数据集。接着通过计算npuMemSize和maxBatchSize,maxPrefillBatchSize(272)与maxPrefillTokens,并更新配置进行性能测试。结果显示,参数调优后吞吐量提升18%。此方法为大模型性能优化提供了实用指导。

服务化性能调优

前置准备

  • 完成MindIE环境的安装,参考链接
  • 下载好要调优的模型权重
  • 下载好性能测试数据集

调优流程

下面以Llama3-8B为例,讲解调优全流程

1.查看模型权重大小

Llama3-8B权重为15GB
1744788873547_image.png

2.计算npuMemSize

计算公式为:Floor[(单卡显存-空闲占用-权重/NPU卡数)* 系数],系数取值为0.8
单卡空闲显存:61GB
空闲占用:约3GB
1744789525739_image.png

npuMemSize = Floor[ (61 - 3 - 15/1 )] * 0.8 = 34GB

3.计算maxBatchSize

maxBatchSize = Total Block Num/Block Num,需要先计算出"Total Block Num"和"Block Num"的值

  • 计算"Total Block Num"的值
    Total Block Num = Floor(NPU显存 / (Block Size 模型网络层数 模型注意力头数 注意力头大小 Cache类型字节数 * Cache数))
    1744789767150_image.png

对于GQA类模型,注意力头大小=hidden_size/num_attention_heads
将以上参数值代入公式,得到Total Block Num = Floor[34102410241024/(128 32 8(4096/32)22)] = 2176

  • 计算单个请求的"Block Num"
    所需最大Block Num = Ceil(输入Token数/cacheBlockSize)+Ceil(最大输出Token数/cacheBlockSize)
    所需最小Block Num = Ceil(输入Token数/cacheBlockSize)
    所需平均Block Num = Ceil(输入Token数/cacheBlockSize)+Ceil(平均输出Token数/cacheBlockSize)

    从下面benchmark信息获取数据集信息:

          InputTokens: 60(avg), 186(max), 23(min)
          OutputTokens: 467(avg), maxIterTimes(max), 18(min)
    

    1744789966163_image.png

**所需最小Block Num = Ceil(60/128) = 1**
**所需最大Block Num = Ceil(60/128)+Ceil(512/128) = 5**
**所需平均Block Num = Ceil(60/128)+Ceil(346/128) = 4**
  • 计算"maxBatchSize"
    最小maxBatchSize = Floor[Total Block Num/所需最大Block Num] = 435
    最大maxBatchSize = Floor[Total Block Num/所需最小Block Num] = 2176
    平均maxBatchSize = Floor[Total Block Num/所需平均Block Num] = 544

4.计算maxPrefillBatchSize和maxPrefillTokens的值

  • maxPrefillBatchSize建议设置为:maxBatchSize值的一半
    maxPrefillBatchSize = Floor[maxBatchSize/2] = 544/2 = 272

  • maxPrefillTokens的值一般不超过8192
    maxPrefillTokens = maxPrefillBatchSize 数据集token id平均输入长度 = 27260 = 16320
    根据公式计算出的值大于8192,所以maxPrefillTokens的取值为8192

5.更新配置&性能测试

  • 更新配置如下:
    1744790453247_image.png
  • 实测性能
    默认参数测试结果:
    1744790483118_image.png

参数调优后测试结果:
1744790577292_image.png

可以看到,吞吐提升了18%。

相关文章
|
1月前
|
机器学习/深度学习 人工智能 并行计算
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
|
5月前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
339 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
7月前
|
算法 Java 测试技术
java性能调优涉及哪些方面
本文详细探讨了性能调优的各个方面,包括Java编程、多线程、JVM监控、设计模式和数据库调优。文章还介绍了性能调优的标准制定、介入时机、系统性能的影响因素,以及如何衡量和判断系统的性能与负载承受能力。最后,提出了性能调优的具体策略,包括代码、设计、算法优化及参数调整,并讨论了限流、智能化扩容等兜底策略。
102 0
java性能调优涉及哪些方面
|
8月前
|
缓存 NoSQL 数据库
构建高效后端服务:从架构设计到性能优化的实践之路
本文旨在探讨如何通过合理的架构设计和性能优化策略,构建一个既稳定又高效的后端服务。文章首先概述了后端服务开发中常见的挑战和误区,随后详细介绍了微服务架构、缓存机制、数据库优化、服务器配置以及代码审查等关键技术和方法。通过深入浅出的案例分析和实用建议,本文将为后端开发者提供一套系统化的指导方案,助力其打造出高性能的后端服务体系。
236 9
|
10月前
|
Java 大数据 测试技术
开发与运维测试问题之UseCompactObjectHeaders在SPECjbb2015基准测试中的表现如何解决
开发与运维测试问题之UseCompactObjectHeaders在SPECjbb2015基准测试中的表现如何解决
249 1
|
12月前
|
监控 测试技术 数据库
探索微服务架构下的系统调优实践
【5月更文挑战第27天】在当今软件开发领域,微服务架构因其灵活性、可扩展性而受到青睐。然而,随之而来的是复杂性增加和性能调优的挑战。本文将深入探讨在微服务环境中进行系统调优的策略与实践,通过分析真实案例,揭示优化过程中的关键步骤和考虑因素,为追求高性能微服务系统的开发者提供参考。
106 1
|
机器学习/深度学习 算法
大模型开发:你如何优化超参数?
超参数优化是提升机器学习和深度学习模型性能的关键,包括手动调整、网格搜索、随机搜索、贝叶斯优化、基于梯度的优化、进化算法等方法。此外,利用超参数调优工具、迁移学习、元学习和集成方法也是常用策略。实践中,应结合项目需求和资源选择合适的方法,并配合交叉验证和提前停止技术。
423 1
|
消息中间件 缓存 监控
项目接口性能优化方案
项目接口性能优化方案
112 1
|
测试技术
快速迭代下,研发和测试如何高效配合?
快速迭代下,研发和测试如何高效配合?
194 1
|
SQL 数据采集 存储
工作经验分享:Spark调优【优化后性能提升1200%】
工作经验分享:Spark调优【优化后性能提升1200%】
1181 1
工作经验分享:Spark调优【优化后性能提升1200%】