# ModelLink **Repository Path**: huiyingc/ModelLink ## Basic Information - **Project Name**: ModelLink - **Description**: 昇腾大模型仓库 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/ascend/ModelLink/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1205 - **Created**: 2024-07-26 - **Last Updated**: 2024-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

GitHub Documentation

简体中文 | English

ModelLink旨在为华为 [昇腾芯片](https://open.codehub.huawei.com/OpenBaize/Ascend/ascendspeed/files?ref=master&filePath=examples%2Fbaichuan%2Fpretrain_baichuan_zero_7B.sh&isFile=true) 上提供端到端的大语言模型方案, 包含模型,算法,以及下游任务。 --- ## ModelLink解决方案概览 当前ModelLink支撑大模型使用功能: * [制作预训练数据集](#jump11)/[制作指令微调数据集](#jump12) * [预训练](#jump13)/[全参微调](#jump14)/[低参微调](#jump15) * [流式推理/人机对话](#jump16) * [评估基线数据集](#jump17) * [加速算法/融合算子/并行策略](#jump18) * [基于昇腾芯片采集Profiling数据](#jump19) * [Huggingface与Megatron-LM权重转换](#jump20) * [基于昇腾芯片的确定性计算功能](#jump21) * [基于昇腾芯片的高可用特性](#jump22) 强化学习等特性持续研发中.... --- ## ModelLink版本维护策略 ModelLink版本有以下五个维护阶段: | **状态** | **时间** | **说明** | | ------------------- | -------- |----------------------------------------------------------------------| | 计划 | 1—3 个月 | 计划特性 | | 开发 | 3 个月 | 开发特性 | | 维护 | 6-12 个月| 合入所有已解决的问题并发布版本,针对不同的ModelLink版本采取不同的维护策略,常规版本和长期支持版本维护周期分别为6个月和12个月 | | 无维护 | 0—3 个月 | 合入所有已解决的问题,无专职维护人员,无版本发布 | | 生命周期终止(EOL) | N/A | 分支不再接受任何修改 | ModelLink已发布版本维护策略: | **ModelLink版本** | **维护策略** | **当前状态** | **发布时间** | **后续状态** | **EOL日期** | |-----------------|-----------|--------|------------|------------------|-----------| | 1.0 | 常规版本 | 维护 | 2024/03/30 | 预计2024/9/30起无维护 | | | 1.1 | 常规版本 | 维护 | 2024/06/30 | 预计2024/12/30起无维护 | | --- ## 配套版本与支持模型 【需要注意模型使用时的配套环境版本,参考如下】 | 软件 | [版本](https://www.hiascend.com/zh/) | | :-----------------------: |:----------------------------------:| | Python | 3.8 | | driver | 在研版本 | | firmware | 在研版本 | | CANN | 在研版本 | | torch | 2.1.0、2.2.0 | | torch_npu | 在研版本 | 【基于现版本我们实测的性能情况统计如下(硬件信息:Atlas 900 A2 PODc)】 下述列表中支持的模型,我们在[examples](./examples/)文件夹中提供了相应的训练脚本和readme说明,里面有详细的模型训练、推理、评估流程。 以下为开启 mc2 加速特性后的实测性能,该特性只在24RC2以上版本支持,本仓库代码层面默认关闭,若要使用,请参考首页[加速算法与融合算子](#加速算法与融合算子)章节
模型 参数 序列 集群 模式 性能 参考 贡献方
Aquila 7B 2K 1x8 BF16 2849 2874 【昇腾】
Aquila2 7B 2K 1x8 FP16 3323 2673 【社区】
34B 4K 2x8 BF16 854 732 【社区】
Baichuan 7B 4K 1x8 FP16 2685 2036 【昇腾】
13B 4K 1x8 FP16 1213 862 【昇腾】
Baichuan2 7B 4K 1x8 BF16 2664 3969 【昇腾】
13B 4K 1x8 BF16 1668 2062 【昇腾】
Bloom 7B1 2K 1x8 FP16 2034 2525 【昇腾】
176B 2K 12x8 BF16 100 107 【昇腾】
ChatGLM3 6B 8K 1x8 FP16 4297 4267 【社区】
CodeLlama 34B 4K 2x8 BF16 837 762 【社区】
InternLM 7B 2K 1x8 BF16 2776 2854 【昇腾】
65B 2K 4x8 BF16 341 414 【昇腾】
LLaMA 7B 2K 1x8 FP16 3600 3804 【昇腾】
13B 2K 1x8 FP16 1895 2012 【昇腾】
33B 2K 4x8 FP16 621 776 【昇腾】
65B 2K 4x8 BF16 348 426 【昇腾】
LLaMA2 7B 4K 1x8 BF16 4200 3850 【昇腾】
13B 4K 1x8 BF16 1990 1920 【昇腾】
34B 4K 2x8 BF16 749 796 【昇腾】
70B 4K 4x8 BF16 420 430 【昇腾】
LLaMA3 8B 8K 1x8 BF16 2483 2674 【昇腾】
70B 8K 8x8 BF16 283 355 【昇腾】
Qwen 7B 8K 1x8 BF16 2499 2867 【昇腾】
14B 2K 1x8 BF16 1560 1578 【昇腾】
72B 8K 16x8 BF16 285 345 【昇腾】
Qwen1.5 0.5B 8K 1x8 BF16 22834 25306 【社区】
1.8B 8K 1x8 BF16 13029 12181 【社区】
4B 8K 1x8 BF16 5033 5328 【社区】
7B 8K 1x8 BF16 2862 2621 【社区】
14B 8K 1x8 BF16 1717 1702 【社区】
32B 8K 4x8 BF16 751 708 【社区】
72B 8K 8x8 BF16 301 317 【昇腾】
Yi 34B 4K 2x8 BF16 809 730 【社区】
Mixtral 8x7B 32K 2x8 BF16 487 610 【昇腾】
Mistral 7B 32K 1x8 BF16 2806 2734 【昇腾】
Gemma 2B 8K 1x8 BF16 6821 7602 【昇腾】
7B 8K 1x8 BF16 2938 2607 【昇腾】
GPT3 175B 2K 16x8 FP16 153 -- 【社区】
15B 2K 1x8 FP16 1890 1840 【社区】
Grok1 40B 8K 2x8 BFP16 1646 2057 【昇腾】
--- ## 加速算法与融合算子 ModelLink支持张量并行、流水线并行、context并行、序列并行、重计算、分布式优化器等多种加速算法和融合算子,下表为各种加速特性对应的使能开关:
使用场景 特性名称 具体参数 Mcore支持 Legacy支持
PTD并行 张量并行 --tensor-model-parallel-size Yes Yes
流水线并行 --pipeline-model-parallel-size Yes Yes
流水线并行动态划分 --num-layer-list Yes Yes
序列并行 --sequence-parallel Yes Yes
分布式优化器 --use-distributed-optimizer Yes Yes
长序列并行 长序列并行 --context-parallel-size Yes No
多并行方案 --context-parallel-algo Yes No
send/recv掩盖加速 --cp-send-recv-overlap Yes No
MOE并行 MOE并行 --expert-model-parallel-size Yes No
MOE重排通信优化 --moe-permutation-async-comm Yes No
融合算子 Flash attention --use-flash-attn Yes Yes
Fused rmsnorm --use-fused-rmsnorm Yes Yes
Fused swiglu --use-fused-swiglu Yes Yes
Fused rotary position embedding --use-fused-rotary-pos-emb Yes Yes
Sliding window attention --sliding-window Yes Yes
通信 梯度reduce通算掩盖 --overlap-grad-reduce Yes Yes
权重all-gather通算掩盖 --overlap-param-gather Yes No
MC2 --use-mc2 Yes Yes
```bash torchrun $DISTRIBUTED_ARGS pretrain_gpt.py \ --use-mcore-models \ --tensor-model-parallel-size ${TP} \ --pipeline-model-parallel-size ${PP} \ --num-layer-list 5,6,6,6,6,5 \ --context-parallel-size ${CP} \ --context-parallel-algo ${CP_ALGO} \ --ulysses-degree-in-cp 2 \ --sequence-parallel \ --use-distributed-optimizer \ --use-flash-attn \ --use-fused-rmsnorm \ --use-fused-swiglu \ --overlap-grad-reduce \ --use-fused-rotary-pos-emb \ --use-mc2 \ ... \ ... ``` ```bash 注意: 如果需要开启 mc2,需保证: 1. 配套环境版本如本仓首页所述; 2. 将 modellink\arguments.py 中 validate_args_decorator 函数中的第431行进行注释 #args.use_mc2 = False ``` --- ## 基于昇腾芯片采集Profiling数据 Modellink支持基于昇腾芯片采集profiling数据,以提供对模型运行情况的分析,主要API如下: ```bash --profile # 打开profiling采集数据开关 --profile-step-start 5 # 指定开启采集数据的步骤 --profile-step-end 6 # 指定结束采集数据的步骤,实际采集步数为 end-start,不包含end --profile-ranks 0 1 2 3 4 # 指定采集数据的卡号,默认为-1,表示采集所有rank的profiling数据,可以设置为 0 1 2 3 4 5 6 7 8 9 列表指定全局卡号 --profile-level level2 # 数据采集水平,level0, 1, 2, 级别越高采集信息越多,默认为level0 --profile-with-cpu # 是否采集CPU数据,加入参数采集 --profile-with-stack # 采集指令运行堆栈,加入参数采集 --profile-with-memory # 是否采集内存,加入参数采集 --profile-record-shapes # 是否采集计算shape,加入参数采集 --profile-save-path ./profile_dir # profiling数据采集保存路径 ``` --- ## 基于昇腾芯片的确定性计算功能 昇腾芯片默认采用了不确定计算加速模型训练,有时为了重复实验与对比实验需要确定性的计算结果,ModelLink使能确定性计算的开关如下: - 启动命令中加入开关 ```shell --use-deter-comp ``` - 环境变量中加入开关 ```shell export HCCL_DETERMINISTIC=True ``` --- ## 基于昇腾芯片的高可用特性 分布式优化器的思想是通过将优化器状态均匀地分布在数据并行组中来节省内存。基于该思想,设计了将数据并行组切分成两个副本数据并行组的方案,副本优化器将优化器状态均匀分布在副本数据并行组,实现优化器状态均有备份。结合华为自研的高可用框架,可实现以下功能: 1. 训练过程中,支持故障场景保存临终checkpoint,训练结果0损失。 2. 训练过程中,支持HBM的UCE故障检测,并完成在线修复,达到Step级重计算。 开启高可用特性时,副本优化器使用的静态内存有所增加,每个参数的理论字节数为(其中“d”是数据并行大小): | | Non-distributed optim | Distributed optim | Replica optim | |----------------------------------| ------ | ------ |---------------| | fp16/bf16 param, fp16/bf16 grads | 20 | 4 + 16/d | 4 + 32/d | | fp16/bf16 param, fp32 grads | 18 | 6 + 12/d | Supporting | | fp32 param, fp32 grads | 16 | 8 + 8/d | Supporting | - 启动命令中加入开关,并安装华为自研高可用框架mindio_ttp.whl - mindio_ttp相关说明:https://www.hiascend.com/document/detail/zh/mindx-dl/60rc1/mindio/mindiottp ```shell --enable-high-availability #使能高可用特性的总开关 --enable-optimizer-state-local-copy #使能保存上一步优化器状态,内存会进一步增加,默认可关闭 ``` --- ## 致谢 ModelLink由华为公司的下列部门联合贡献 : - 昇腾计算产品部 - 计算算法部 - 计算研究部 - 开源计算工具部 - 公共开发部 - 全球技术服务部 感谢来自社区的每一个PR,欢迎贡献 ModelLink --- ## 安全声明 [ModelLink安全声明](https://gitee.com/ascend/ModelLink/wikis/%E5%AE%89%E5%85%A8%E7%9B%B8%E5%85%B3/%E5%AE%89%E5%85%A8%E5%A3%B0%E6%98%8E)