LLMs 训练经验帖
来自:AiGC面试宝典
宁静致远 2023年09月28日 22:03
分布式训练框架选择?
多用 DeepSpeed,少用 PyTorch 原生的 torchrun。在节点数量较少的情况下,使用何种训练框架并不是特别重要;然而,一旦涉及到数百个节点,DeepSpeed 显现出其强大之处,其简便的启动和便于性能分析的特点使其成为理想之选。
📝通俗解释:DeepSpeed 就像一个更先进的"训练管理系统"。当只有几台机器时,用什么系统差别不大;但当你要用几百台机器同时训练时,DeepSpeed 能让启动更简单、监控更方便,就像从手动挡换到自动挡开车一样省心。
LLMs 训练时有哪些有用的建议?
弹性容错和自动重启机制
大模型训练不是以往那种单机训几个小时就结束的任务,往往需要训练好几周甚至好几个月,这时候你就知道稳定训练有多么重要。弹性容错能让你在机器故障的情况下依然继续重启训练;自动重启能让你在训练中断之后立刻重启训练。毕竟,大模型时代,节约时间就是节约钱。
📝通俗解释:这就像玩游戏时的"自动存档"和"断点续玩"功能。训练大模型要好几周,万一中途机器坏了、停电了,如果没有这套机制,之前的工作就全泡汤了。
定期保存模型
训练的时候每隔一段时间做个 checkpointing,这样如果训练中断还能从上次的断点来恢复训练。
📝通俗解释:类似于写论文时每隔几页就保存一次文档,防止电脑突然死机导致工作丢失。
想清楚再开始训练
训练一次大模型的成本很高的。在训练之前先想清楚这次训练的目的,记录训练参数和中间过程结果,少做重复劳动。
📝通俗解释:就像做饭前先想好菜谱,不然做到一半发现少调料,既浪费时间又浪费食材。大模型训练非常烧钱(GPU 电费很贵),动手前一定要规划清楚。
关注 GPU 使用效率
有时候,即使增加了多块 A100 GPU,大型模型的训练速度未必会加快,这很可能是因为 GPU 使用效率不高,尤其在多机训练情况下更为明显。仅仅依赖 nvidia-smi 显示的 GPU 利用率并不足以准确反映实际情况,因为即使显示为 100%,实际 GPU 利用率也可能不是真正的 100%。要更准确地评估 GPU 利用率,需要关注 TFLOPS(计算性能)和吞吐率等指标,这些监控在 DeepSpeed 框架中都得以整合。
📝通俗解释:这就好像餐厅里有10个服务员,但大家都在排队等上菜,服务员虽然看起来很忙(利用率100%),但实际上效率很低。nvidia-smi 显示的利用率就像"服务员看起来很忙",而 TFLOPS 和吞吐率才是"真正端了多少盘菜"的真实指标。
不同的训练框架对同一个模型影响不同
对于同一模型,选择不同的训练框架,对于资源的消耗情况可能存在显著差异(比如使用 Huggingface Transformers 和 DeepSpeed 训练 OPT-30 相对于使用 Alpa 对于资源的消耗会低不少)。
📝通俗解释:同样的食材,不同的厨师来做,有的省料有的费料。选对训练框架可以帮你省钱(省 GPU 资源)。
环境问题
针对已有的环境进行分布式训练环境搭建时,一定要注意之前环境的 python、pip、virtualenv、setuptools 的版本,不然创建的虚拟环境即使指定对 Python 版本,也可能会遇到很多安装依赖库的问题。GPU 服务器能够访问外网的情况下,建议使用 Docker 相对来说更方便。
📝通俗解释:这就像搬家时要带走原来的生活用品,如果新环境和旧环境不兼容,很多东西就用不了。用 Docker 就像是带上一个"万能行李箱",走到哪都能还原同样的环境。
升级 GLIBC 等底层库问题
遇到需要升级 GLIBC 等底层库需要升级的提示时,一定要慎重,不要轻易升级,否则,可能会造成系统宕机或很多命令无法操作等情况。
📝通俗解释:GLIBC 就像大楼的地基,随意改动可能让整栋楼倒塌。升级底层库风险很高,非必要不要轻易尝试。
模型大小如何选择?
进行大模型模型训练时,先使用小规模模型(如:OPT-125m/2.7b)进行尝试,然后再进行大规模模型(如:OPT-13b/30b/66b...)的尝试,便于出现问题时进行排查。目前来看,业界也是基于相对较小规模参数的模型(6B/7B/13B)进行的优化,同时,13B 模型经过指令精调之后的模型效果已经能够到达 GPT-4 的 90% 的效果。
📝通俗解释:这就像学游泳,先在浅水区扑腾熟练了再去深水区。直接训练超大模型一旦出问题,很难排查到底哪里错了。先用小模型验证思路,确认没问题再放大,这是业界的标准做法。
加速卡如何选择?
对于一些国产 AI 加速卡,目前来说,坑还比较多,如果时间不是非常充裕,还是尽量选择 Nvidia 的 AI 加速卡。
📝通俗解释:国产加速卡就像新出的手机品牌,可能性价比不错,但生态系统(软件支持、驱动、调试工具)还不够成熟。真要用来训练大模型时遇到问题,可能连排查问题的资料都找不到,会浪费很多时间。Nvidia 的卡虽然贵,但生态成熟,遇到问题容易解决。
知识星球