昇腾MindSpeed-LLM全流程实践及踩坑记录

news/2025/3/10 6:01:52/文章来源:https://www.cnblogs.com/bincha/p/18619493

目录
  • 昇腾MindSpeed-LLM全流程实践及踩坑记录
    • 1、 MindSpeed-LLM简介
      • 1.1 MindSpeed简介
      • 1.2MindSpeed-LLM核心功能
      • 1.3 业界主流加速库对比
    • 2、全流程实践
      • 2.1 环境搭建
    • 流程正式开始前必看前置:
    • 所以,一、直接在mcore下进行全流程操作;二、不要按照主页readme上的脚本执行任务指令,应当使用这个路径下合适的启动命令“/example/mcore/xx/xxx.sh”,脚本缺失就自己补对应模型的启动脚本即可。
      • 2.2 权重下载及转换
        • 2.3 数据预处理
      • 2.4 大模型预训练
      • 2.5大模型微调
      • 2.6 大模型分布式推理
      • 大模型评估

昇腾MindSpeed-LLM全流程实践及踩坑记录

我们都知道大模型训练是一个非常复杂的过程,大模型军备竞赛下如何控制训练成本成为各大模型训练方尤为关注的问题。大模型的训练通常面临内存、计算、通信等压力,如何在有限的资源下尽可能提升大模型训练效率成为关键。

介绍MindSpeed-LLM之前,首先介绍下MindSpeed,它是专门面向昇腾的大模型训练加速库。

1、 MindSpeed-LLM简介

1.1 MindSpeed简介

MindSpeed是专门面向昇腾(Ascend)平台的大模型训练加速库。昇腾是华为推出的高性能AI计算平台,广泛应用于大模型训练、推理和部署场景。

在大模型训练领域,硬件资源的高效利用至关重要。MindSpeed通过优化内存管理、计算调度以及通信效率,帮助用户在有限的硬件资源下实现更高的训练效率。无论是单机多卡训练,还是大规模分布式训练,MindSpeed都能提供灵活且高效的解决方案,其核心特性包括:megetron特性支持、并行策略特性、内存优化特性、亲和计算特性、通信优化特性以及关键场景特性
关于MindSpeed详解介绍及使用去关注MindSpeed官方gitee社区

1.2MindSpeed-LLM核心功能

MindSpeed-LLM是MindSpeed库中专门针对大语言模型(LLM)训练的模块套件,原名是ModelLink(私以为这个改名改得好啊,MindSpeed-LLM有助于基于生态延续学习理解,ModelLink就很突兀让人感受困难:))。旨在为昇腾芯片提供端到端的大预言模型训练解决方案, 包含预置业界主流模型,数据工程,分布式训练及加速,预训练、微调、在线推理任务等特性提供了以下核心功能:

  • 模型并行与数据并行:支持多种并行策略,包括张量并行、流水线并行和数据并行,以适应不同规模的模型和硬件配置。
  • 混合精度训练:通过自动混合精度(AMP)技术,在保证模型精度的同时,显著降低显存占用和计算开销。
  • 梯度累积与梯度检查点:在显存有限的情况下,通过梯度累积模拟更大的批量大小,并通过梯度检查点减少显存峰值占用。
  • 分布式通信优化:针对昇腾平台的通信特性,优化分布式训练中的梯度同步和参数更新,减少通信开销。
  • 动态内存管理:通过动态内存分配和释放策略,优化显存使用,避免显存不足导致的训练中断。

1.3 业界主流加速库对比

在大模型训练加速领域,业界有许多主流的加速库,如DeepSpeed、FasterTransformer、Megatron-LM等。这些库各有优劣,适用于不同的场景和硬件平台。以下是MindSpeed-LLM与业界主流加速库的对比:

特性 MindSpeed-LLM DeepSpeed Megatron-LM FasterTransformer
硬件平台 昇腾(Ascend) 通用GPU 通用GPU 通用GPU
模型并行 支持 支持 支持 支持
混合精度训练 支持 支持 支持 支持
梯度检查点 支持 支持 支持 不支持
分布式通信优化 针对昇腾优化 通用优化 通用优化 通用优化
动态内存管理 支持 支持 不支持 不支持
易用性 集成昇腾生态,易用 功能丰富,配置复杂 功能强大,配置复杂 专注于推理,轻量化

从对比中可以看出,MindSpeed-LLM在昇腾平台上具有显著的优势,特别是在硬件优化和动态内存管理方面。对于使用昇腾平台的用户来说,MindSpeed-LLM是一个高效且易用的选择。

2、全流程实践

2.1 环境搭建

在开始训练之前,需要搭建好训练环境,包括硬件和软件的配置。

  • 硬件选择:选择适合大模型训练的硬件,如Atlas 800T A2。本文实践采用的是Atlas 800T A2硬件设备。
  • 操作系统:本文实践所用操作系统为eulerosv2r12.aarch64。
  • 软件配套:软件配套参照社区上的软件版本配套信息,严格基于指导环境软件环境部署下来成本并不高,但因需要纯手动安装依赖较多,稍不注意就会有坑,本文末尾会由相关坑的记录(昇腾应当持续重视可靠的环境配套及社区上的安装指导啊,每个安装指导步骤要持续验证,有些问题稍重视投入即可规避,那可是开发者了解昇腾的门面,不要劝退昇腾新人开发者
    • 固件及驱动安装:因本事件所用昇腾服务器相关NPU驱动和固件已经安装好了,如果你有需要可以参照昇腾社区上的安装指导NPU驱动固件安装指导(注意首次安装场景和覆盖安装场景固件和驱动安装顺序的不同要求)
    • CANN依赖安装
      CANN依赖主要有以下三个,务必先安装toolkot后再安装后两个依赖包。
软件类型 软件包说明 软件包名称
Toolkit CANN开发套件包,在训练&推理&开发调试场景下安装,主要用于训练和推理业务、模型转换、算子/应用/模型的开发和编译 Ascend-cann-toolkit__linux-.run
Kernels CANN算子包,能够节省算子编译时间,在大模型推理、训练场景和运行包含动态shape网络或单算子API(例如aclnn类API)相关业务时安装。安装时需已安装Toolkit或NNRT或NNAE软件包,请选择运行设备对应处理器类型的Kernels。 Ascend-cann-kernels-<chip_type>__linux.run
NNAL CANN加速库,包含面向大模型领域的ATB(Ascend Transformer Boost)加速库,可以提升大模型训练和推理性能。安装时需已安装Toolkit或NNAE软件包。 Ascend-cann-nnal__linux-.run

特别说明,Cann相关依赖安装即toolkit、kernels、nnal三个依赖,务必按照指导顺序安装。本文实践按照官方对物理机场景安装操作进行安装,
另,toolkit及nnal安装后务必记得source 环境。

后续使用改软件依赖环境可以选择基于容器配置大模型训练环境,也可以基于Conda创建虚拟环境配置大模型训练环境。对于容器可以选择将cann依赖装入镜像环境中进行隔离操作,而对于conda虚拟环境,安装cann依赖时需要需要单独每次session建立后source激活依赖环境(toolkit\nnal都需要source激活)。

  • Ascend Extension for PyTorch 配置与安装,该依赖主要为解决pytorch生态在昇腾硬件兼容适配问题,具体安装操作很简单,可以参考官方指导昇腾社区Ascend Extension Pytorch安装指导,这一块儿不太会出出错。需要注意的是,前置依赖最好先安装一下,社区已经给出完整说明,在这儿
  • MindSpeed-LLM安装:按照官方文档安装MindSpeed-LLM,可能需要从源码编译安装,确保所有依赖项都已安装。
    严格按照gitee上的操作指导进行即可,
    注意:apex源码出包可能会出现问题,最好直接找已经编译好的apex,whl包,我试图在apex社区通过源码编译whl包,但出错。(社区要规避此情况,apex的gitee社区上本身也未给出任务编译好的whl包,无谓的安装卡点)

流程正式开始前必看前置:

MindSpeed-LLM有两种模式下得大模型训练,分别是Mcore、Legacy。关于两种模式的差异,社区上并未给出任何功能定位解释,不过通过Readme特性解释可以看出,相较于legacy,Mcore模式下得大模型训练做了更多的并行加速特性支持,如长序列并行优化、MOE专家并行优化等高阶优化特性支持,即Mcore模式下的大模型训练性能会由于legacy,至于有了更高性能的mcore模式,为什么还要并行存在legacy,社区给的解释是:legacy为早期出版本模式,很多商用客户基于此模式在做版本维护,不能随意日落。

但是,通过查看特性差异以及“/example/legacy、example/mcore”路径下得支持不同执行任务启动脚本,相比mcore模式大模型训练在官方支持的模型任务上,legacy缺失很多可以直接运行的shell启动脚本,如指令微调数据转换脚本、微调启动脚本、指令微调后chat对话脚本等,如果你是一个MindSpeed纯新手,误入legacy模式按照官方指导操作,还会遇到各种错误或者文件缺失。

所以,一、直接在mcore下进行全流程操作;二、不要按照主页readme上的脚本执行任务指令,应当使用这个路径下合适的启动命令“/example/mcore/xx/xxx.sh”,脚本缺失就自己补对应模型的启动脚本即可。

2.2 权重下载及转换

  • 模型选定及权重下载
#!/bin/bash
mkdir ./model_from_hf/Qwen1.5-0.5B-hf/
cd ./model_from_hf/Qwen1.5-0.5B-hf/
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/config.json
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/generation_config.json
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/pytorch_model-00001-of-00002.bin
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/pytorch_model-00002-of-00002.bin
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/pytorch_model.bin.index.json
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/special_tokens_map.json
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/tokenizer.json
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/tokenizer.model
wget https://huggingface.co/daryl149/Qwen1.5-0.5B-hf/resolve/main/tokenizer_config.json
cd ../../

如果你没办法KX上网,也可以直接在modelscope上下载对应的模型权重下载,尽量不要使用git或网页直接下载,拉取的模型权重可能不全,导致后续模型权重转换出现问题,

modelscope 权重下载

from modelscope import snapshot_download
model_dir = snapshot_download("Qwen/Qwen1.5-0.5B", local_dir= "./")
  • 权重转换
    Huggingface权重转换到Megatron-LM格式,注意官方给出的权重转化脚本示例为:
python convert_ckpt.py \--model-type GPT \--load-model-type hf \--save-model-type mg \--target-tensor-parallel-size 1 \--target-pipeline-parallel-size 2 \--num-layer-list 16,16 \--model-type-hf llama2 \--load-dir ./model_from_hf/llama-2-7b-hf/ \--save-dir ./model_weights/llama-2-7b-legacy/ \--tokenizer-model ./model_from_hf/llama-2-7b-hf/tokenizer.model

不要直接使用此脚本转换,执行

# 命名及启动:
# bash examples/mcore/model_name/ckpt_convert_xxx_hf2mcore.sh
# 需要配置并行参数以及权重词表加载保存等路径bash examples/mcore/llama2/ckpt_convert_qwen15_hf2mcore.sh

进行模型权重转换


2.3 数据预处理

注意:特别的社区上已经说明“在example目录下每个模型都已经预置好数据预处理脚本,可以根据需要来进行修改

  • 预训练数据集转换
    首先下载预训练数据集
mkdir dataset
cd dataset/
wget https://huggingface.co/datasets/lsb/enwiki20230101/resolve/main/data/train-00000-of-00042-d964455e17e96d5a.parquet
cd ..

从haggingface下载enwiki数据集,请学会可上网。
按照社区指导进入mcore执行对应数据集转换脚本

# Mcore
# 命名及启动:examples/mcore/model_name/data_convert_xxx_pretrain.sh
bash examples/mcore/llama2/data_convert_qwen15_pretrain.sh
  • 微调数据集转换
    Alpaca数据集下载
cd dataset/
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..

执行微调数据集转换,不要直接使用gitee上的process_data脚本(会出现转换错误),转入example

# Mcore
# 命名及启动:examples/mcore/model_name/data_convert_xxx_instruction.shbash examples/mcore/qwen15/data_convert_qwen15_instruction.sh

2.4 大模型预训练

按照官方指导,选择对应xxx_pretrain.sh脚本,配置对应权重保存、权重加载、词表、数据集路径,启动训练任务即可。
qwen1.5-0.5B 8卡分布式预训练效果如下示意:

2.5大模型微调

按照官方指导,选择对应tune_xxx.sh脚本,配置对应权重保存、权重加载、词表、数据集路径,启动训练任务即可。如果预置模型没有对应tune启动脚本,则参考其他模型tune启动脚本修改即可。

  • 全参微调
    qwen1.5-0.5B 8卡分布式微调效果如下示意:

  • lora微调

2.6 大模型分布式推理

  • 流式推理
  • 按照官方指导,选择对应generate_xx.sh脚本,配置对应权重保存、权重加载、词表、数据集路径,启动训练任务即可。如果预置模型没有对应generate_xx.sh启动脚本,则参考其他模型generate_xx.sh启动脚本修改即可。
  • chat对话推理
    同样进入example文件路径下mcore对应的模型文件内,如果没有chat脚本,则同样参考已有chat问价修改即可,对比发现只基于对应模型的generate_xx.sh脚本增加图示参数即可实现chat流式推理

大模型评估

  • 基准评估
    大模型评估支持 mmlu、ceval、agieval、bbh、boolq、human_eval等多种数据集格式,本实践采用mmlu数据集进行推理评估,执行此步骤时,我从hugginface下载的mmlu-test数据集在运行时报错,显然是数据集属性列不匹配导致,遂我自己从kaggle上找到mmlu数据集这里,成功执行,如下示意。

测试了100个case,评估如上图示意,acc为35%,与报告中39.2%有差距,但根本原因是因为测试用例太少导致的偏差。

  • 指令微调评估
    指令微调评估结果示意如下,微调评估需要下载mmlu的dev数据依赖,放置在data_path下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855895.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go调试运行时出现 Failed to launch:could not launch process:not an executable file 错误

在调试运行时,点击 Start Debugging 时出现 这个问题是当前打开的文件中没有 main() 函数 所以 当 点击 Start Debugging 时,要选择打开 当前页有 main() 函数的文件 例

Origin绘图教程 | 第一张绘图从这里开始

主要内容:生成数据+绘图图形+简单美化+保存项目 生成数据并绘图 1. 打开Origin。默认会打开一个空白的工作簿,其中包含一个两列的工作表。 2. 右键单击A列,在弹出菜单中选择填充列: 一组数字...(若菜单列表被折叠,你需要展开整个右键菜单来找到这个选项——可做如下设置关…

Go使用zap和lumberjack库,实现每小时间轮转日志文件

创建一个文件夹,命名为 loggerDemo 打开这个文件夹 打开终端,点击左下角 叉和感叹号 在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷键 CTRL+` 直接打开)初始化 Go 的 Modulego mod init loggerDemo点击文件创建图标创建文件 创建一个名为 main.go 的文件 ,按下 …

Goby自定义编写EXP入门篇:编写模板基础使用讲解

众所周知,Goby可以利用便捷的Json图形化编写PoC/EXP,但由于Goby的PoC/EXP基于Go代码,所以很多新手同学可能不太理解其中的变量和代码逻辑,为此,我们将开展从入门到精通的系列教程,为大家详细讲解如何使用Goby的JSON图形化界面进行漏洞编写。 入门篇:Goby Poc模板架构讲解…

SOLIDWORKS快捷键命令大全

SOLIDWORKS是一款广泛应用于工程设计、产品开发及机械制造领域的三维计算机辅助设计(CAD)软件。它以其直观的用户界面、强大的设计功能,成为了深受专业设计师喜爱的设计工具。想要在SOLIDWORKS中以更高的效率绘图,掌握一些快捷键,会让你的设计工作更加得心应手! 我们一起…

让AI碰撞!“天翼云息壤杯”高校AI大赛江苏赛区交流会热力开场!

由中国电信集团有限公司主办,天翼云科技有限公司承办的“天翼云息壤杯”高校AI大赛正在火热进行中。为了提高江苏赛区学生的参赛热情,增强学生的创作能力,江苏电信、天翼云华东中心于12月6日在南京联合举办了主题为“共筑教育新生态,息壤智汇新征程”的AI大赛交流分享会。由…

Parquet存储概述及读写时效对比

1. Parquet简介 Parquet是一种开放的列式存储格式,旨在提高大数据处理和分析的效率。 Parquet由Twitter和Cloudera合作开发,并于2015年5月从Apache的孵化器项目毕业,成为Apache的顶级项目。 Parquet旨在高效存储和处理大规模数据集,广泛应用于Hadoop、Spark等大数据生态系统…

“息 壤” 升 级 !

12月3日,以“AI赋能 共筑数字新生态”为主题的2024数字科技生态大会在广州召开。主论坛上,中国电信集团有限公司总经理助理,天翼云科技有限公司董事长、总经理胡志强对“息壤”一体化智算平台的最新升级和应用进行了介绍。通过在算网调度、智算服务、智算生态三个方面的大规…

AI智能分析视频分析网关关于监控摄像头数据量对云存储服务影响的探讨

在数字化安防监控领域,监控摄像头数据量的激增对云存储服务带来了前所未有的挑战与机遇。随着技术的不断进步和监控需求的日益增长,监控摄像头所产生的数据量正以前所未有的速度增长,这对云存储服务的性能、容量及可靠性提出了更高要求。本文将深入探讨监控摄像头数据量对云…

Slort pg walkthrough Intermediate window

nmap ┌──(root㉿kali)-[~] └─# nmap -p- -A -sS 192.168.226.53 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-20 04:30 UTC Stats: 0:01:10 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 40.00% done; ETC: 04:…

终身免费下载!小学初中高中电子版教科书下载器

软件介绍 这是一款可以终身免费下载小学初中高中电子版教科书下载器,让学生和家长可以轻松下载和使用。无论是备课、自习还是复习,这些电子版教科书都能为您提供帮助。 软件支持免费下载小学到高中的电子版教科书,书籍版本囊括统编版、人教版、北京版、北师大版、冀教版、苏…

面向教学科研智能感知系统应用开发实验室

车辆感知系统在智能驾驶中扮演着至关重要的角色,它如同车辆的“眼睛”和“耳朵”,负责实时监测和解读周围环境信息。该系统通过集成摄像头、雷达、激光雷达等多种传感器,能够准确识别道路状况、行人和其他车辆,为智能驾驶提供可靠的数据支持。经纬恒润推出面向教学及科研应…