GPU使用经验总结,主要总结在算法设计和项目开发过程中,对GPU使用过程方面,进行经验总结,为以后使用GPU等计算工具做准备。
GPU使用基本流程
- 基本流程五步骤:分析需求-评估资源-资源获取-环境准备-任务执行
- 分析需求:确定是否需要使用GPU(判断必要性),梳理使用事情清单和实现目标,基于任务特点、任务阶段、使用环境判断任务类型是开发、训练还是推理。
- 评估资源:确定使用的AI平台、环境、GPU型号、使用时长和数量
- 资源获取:由于GPU资源受限,需要登记使用信息,进行GPU资源评审通过后,才能进行GPU资源申请和调配
- 环境准备:根据申请到GPU资源,在计划使用时间内,准备开发、训练、推理的生产和测试环境,并完成环境配置
- 任务执行:基于准备好的环境,下载加载调用模型,执行开发、训练、推理任务。
GPU分析需求
- 根据模型的目的、开发阶段和需求,可以先从模型任务和模型选型开始。
- 模型任务类型:开发、训练、推理,涉及试算、开发和上线等IT环节。
- 开发类型:主要在试算、开发、SIT阶段,主要在线上开发环境中执行,特点就要灵活快速修改代码,环境运行时需要一直占用资源,资源需要随时可支持,以获取运行结果。可以用于工具调度和代码调整过程中。
- 训练类型:主要在试算、开发、上线等阶段,主要用于线上训练作业,特点是代码基本固定,代码按排序依次执行,任务结束后就释放资源。可用于算法模型的微调,提升模型效果。
- 推理类型:主要在开发、上线等阶段,主要用于在线服务支持。特点就是代码已稳定,需要在服务器环境中执行运行供外部使用调用,资源持续占用。可用于算法模型的在线部署和服务调用,对外稳定提供服务。
- LLM模型的选型策略:模型配置(参数、token等)、模型评测效果
- 模型配置:
- 参数:模型的权重、偏置等,是模型训练过程中的主要学习内容,影响模型的输出结果。参数越多一般效果越好,但训练消耗的资源也越多,而且模型的部署使用也会依赖更多的硬件资源支持,选择时要考虑可供使用的硬件配置。
- token:模型理解和处理文本时的基本单元,使模型和语言解耦,模型的Max token就是在一次对话中基于上下文关系记忆的最大token数据量。
- 模型评测效果:
- 模型根据自身特点,有特定的适用领域,对模型在通用和特定任务、公开数据集下的运行结果做多维度测评,有利于在实际应用时,正确选择合适模型以达成效果。其中典型测评榜单有huggingface和C-eval,对于LLM评测综述可阅读首篇大语言模型评测的综述一文。
GPU评估资源
针对使用的模型,需要预估GPU资源数量。
- 算力:指计算设备(GPU、CPU、NPU等)完成计算的能力大小,一般评价指标为在单位时间内完成的运算次数。GPU单卡可发挥的算力是指在理想条件下,一块GPU图形卡所能提供的最大计算性能。常用算力单位:FLOPS(每秒浮点运算次数)、TOPS(每秒万亿运算次数$10^{12}$),1T FLOPS就是每秒计算1万亿次浮点运算,等于$10^{12}$
- 基于运行时长的数据估算策略:GPU卡数影响训练时间
$$
开启激活重计算场景下的训练时间 = \frac{8 * token数据量 * 模型参数量}{GPU卡数 * 单卡峰值运算性能FLOPS * GPU利用率}
$$
其中token数据量 * 模型参数量是模型训练所需的总计算量,GPU利用率一般在0.3−0.55之间,模型参数量中1B(1 Billion)代表10亿个参数(10^9).FLOPS每秒浮点运算次数,这个要考虑所选的数值精度,精度不同,相同GPU的单卡峰值运算性能也不同。 - 基于显存大小的数据估算策略:
- 工具:HuggingFace在线大模型显存消耗资源估算工具Model Memory Calculator
- 工具使用:入参是模型对应HuggingFace地址、模型精度、library情况,输出为最大层(Largest Layer)、推理显存(Total Size)、Adam训练显存(Training using Adam)。可以先使用工具估算出不同精度下的训练和推理所需要的显存大小,再根据GPU单卡性能参数(显存大小),估算所需单卡数量。
- 使用注意事项:
- 该估算工具可本地部署,部署方法可看链接:https://www.datalearner.com/blog/1051693562957225/https://www.wehelpwin.com/article/4255
- 推理显存实际使用量应该是预估数量的1.2倍,原因来自EleutherAI的技术分析,这个是经验公式.详情请看链接:https://blog.eleuther.ai/transformer-math/
- 显存经验手工计算公式:大模型不同参数下的模型显存计算公式
GPU资源获取
- GPU资源评审考虑项:结合资源获取的公司流程,重点考虑任务类型、任务名、任务描述、资源需求、性能要求、使用时间、责任人等内容。注意点如下:
- 任务类型:模型任务是业务需求触发还是技术能力储备
- 任务名:可以根据任务特点简明扼要的名称做为任务名
- 任务描述:结合场景、目标和价值对任务做描述说明
- 资源需求:说明需要的资源,包括使用AI平台、任务类型、环境、GPU型号和数量
GPU环境准备:
- 环境准备依赖所使用的AI平台,具体使用要求需要结合平台规范进行。环境配置一般比较繁琐,但基本都一次性的。建议对环境准备过程做记录,以供其他人配置环境时,照此处理。
GPU任务执行
典型训练任务:模型微调
目的:在特定数据集上进一步训练模型,提高模型在解决特定问题或任务时的性能。
时机:是否需要选择模型微调,主要考虑成本效益、领域专长、数据保护等方面。成本效益上看,微调预训练模型一般比从头训练大模型更经济,适应性也更好,也能更好解决Prompt Engineering限制问题。领域专长上看,可以利用企业多年积累的数据、为企业提供有针对性的定制化的模型服务,同时由于有了现成数据,利用监督学习的机制,也有利于模型在解决特定问题上性能提升。数据保护上看,由于使用的数据训练只在企业内部使用,也有利于数据保护,避免数据泄露和模型使用之间的两难困境。
方法:LoRA(新增低秩矩阵到原权限矩阵)、Prefix Tuning(前缀调整,输入增加可训练上下文前缀)、Prompt Tuning(提示调整,输入增加可训练的嵌入向量提示)、QLoRA(Quantized Low-Rank Adaptation,量化权重到4bit+LORA)、P-Tuning(使用可训练的LSTM模型生成嵌入向量用于输入)、P-TuningV2(P-Tuning结合多个N中输入)、Adapter Tuning(适配器调整,新增小神经网络).
方法适应性:
方法名 适应场景 Adapter/LoRA 资源有限,特别是计算和内存;中等到大型数据集上希望实现全参数微调效果;适用于分类或者问答等任务 Prompt Tuning/P-Tuning 适用于自然语言生成型任务、数据量较少场景(10^3数据级);不深入模型架构,只希望用于快速原型设计、迭代调试场景。 典型工具:
工具名 适用平台 工具用途 Firefly 英伟达GPU 预训练和模型微调工具 MindSpeed LLM 华为昇腾NPU 预训练和模型微调工具 Hugging Face PEFT库(Parameter-Efficient Fine-Tuning,参数高效微调) 英伟达GPU/华为昇腾NPU 高效微调方法Python库,Hugging Face核心组件 模型接口API设置: 可采用传统API格式、Openai Completions api格式(通用的自然语言生成接口)、Openai Chat api格式(专为生成对话和聊天场景而设计)
参考文献
[1] 模型运算量、显卡算力说明
[2] 大模型参数量和占的显存怎么换算
[3] 大模型训练时间估算
[4] 通俗解读大模型微调Fine-Tuning
[5] 大模型炼丹术:大模型微调总结及实现
[6] 炼石成丹:大语言模型微调实战系列(二)模型微调篇
[7] 微调(Fine-tuning)|OpenAI官方帮助文档中文版
[8] 深度解析Palantir
[9] 超能力对话代理 (Agents) 的超级 LLMs
[10]ReAct Prompting 技术命令千问使用工具
[11] AI魔法学院
[12] 通俗解读大模型主流微调方法:从Prefix Tuning、P-Tuning V1/V2到LoRA、QLoRA
[13] 主流大语言模型API参数详解
[14] OpenAI接口Completion和ChatCompletion的区别与使用方法
[15] 犀牛书
[16] OpenAI API 接口实战教程 #2 Chat类和Completion 类 自然语言生成模型