# Yuan2.0-M32 ## 论文 `Yuan 2.0-M32: Mixture of Experts with Attention Router` - https://arxiv.org/abs/2405.17976 ## 模型结构 源2.0-M32模型运行时激活参数为37亿,M32在数学竞赛、基础数学、代码生成、综合知识能力、科学推理方面与LLaMA3-700亿不相上下。同时,源2.0-M32大幅提升了模型算力效率,在性能全面对标LLaMA3-700亿的同时,显著降低了在模型训练、微调和推理所需的算力开销,算力消耗仅为LLaMA3的1/19。
## 算法原理 下图左边展示了Yuan2.0架构的MoE层缩放图,在Yuan 2.0中,MoE层取代了前馈层。下图右边展示了MOE层的结构。在Yuan2.0模型中,每个输入token将分配给32个专家中的2个(而在图中,这里以4个专家为例),MOE的输出是选定专家的加权总和,N是层数。
## 环境配置 -v 路径、docker_name和imageID根据实际情况修改 ### Docker(方法一) ```bash docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk24.04-py310 docker run -it --network=host --privileged=true --name=docker_name --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=32G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro imageID /bin/bash cd /your_code_path/yuan2.0-m32_pytorch pip install -r requirements.txt ``` ### Dockerfile(方法二) ```bash cd ./docker docker build --no-cache -t yuan2.0-m32:latest . docker run -it --network=host --privileged=true --name=docker_name --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=32G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro imageID /bin/bash cd /your_code_path/yuan2.0-m32_pytorch pip install -r requirements.txt ``` ### Anaconda(方法三) 1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/ ```bash DTK软件栈:dtk24.04 python:python3.10 torch:2.1 apex: 1.1.0+0dd7f68.abi0.dtk2404.torch2.1 deepspeed: 0.12.3+gita724046.abi0.dtk2404.torch2.1.0 ``` Tips:以上dtk软件栈、python、torch等DCU相关工具版本需要严格一一对应 2、其他非特殊库直接按照下面步骤进行安装 ```bash pip install apex-1.1.0+das1.0+0dd7f68.abi0.dtk2404.torch2.1-cp310-cp310-manylinux2014_x86_64.whl pip install deepspeed-0.12.3+das1.0+gita724046.abi0.dtk2404.torch2.1.0-cp310-cp310-manylinux2014_x86_64.whl pip install -r requirements.txt ``` ## 数据集 ### 准备数据集 数据预处理的脚本,参考[数据预处理说明文档](./docs/data_process.md). 数据集的目录结构如下: ```bash ├── datasets │ ├── cnn_dm │ ├── test.source │ ├── test.target │ ├── train.source │ ├── train.target │ ├── val.source │ └── val.target │ └── blank_yahoo │ ├── blank │ ├── test.txt │ ├── train.txt │ └── valid.txt ``` ## 训练 1. 提供了用于预训练的文档和[example](./examples)的脚本,具体使用方法可以参考[预训练说明文档](./docs/pretrain.md)。这里以`Yuan-2.1B-M32`模型为例。 2. 预训练模型可参考[Yuan2.0-M32](https://github.com/IEIT-Yuan/Yuan2.0-M32)下的`Model Downloads`部分。 3. 开始训练之前,下列参数需要根据实际情况进行修改: - `GPUS_PER_NODE` 修改为所需卡数 - `CHECKPOINT_PATH` 预训练模型地址 - `DATA_PATH` 训练数据地址 - `TOKENIZER_MODEL_PATH` tokenzier模型地址 - `TENSORBOARD_PATH` 特别地,如果dataset path如下所示: ```bash /path/dataset.bin ``` 则需要将`DATA_PATH`设置为: ```shell #DATA_PATH='weight dataset_path' DATA_PATH='1 /path/dataset' ``` 4. 执行: ```bash bash examples/pretrain_yuan2.0_moe_2x32B.sh ``` ## 推理 1. 根据需求修改`--model_name_or_path`模型地址; 2. 添加环境变量 ```bash pip install -U huggingface_hub hf_transfer export export HF_ENDPOINT=https://hf-mirror.com ``` 3. 执行: ```bash python inference.py --model_name_or_path THUDM/glm-10b ``` ### Benchmarks 测试 提供了[**HumanEval**](./docs/eval_humaneval_cn.md) 、[**GSM8K**](./docs/eval_gsm8k_cn.md) 、[**MMLU**](./docs/eval_mmlu_cn.md)、[**Math**](./docs/eval_math_cn.md)、[**ARC-C**](./docs/eval_arc_cn.md) 的评估脚本,以方便大家复现我们的评测结果。 ## result
### 精度 测试数据:智源glm_trian_data数据,使用的加速卡:K100。 | device | dtype | params | acc | | :------: | :------: | :------: | :------: | | A100 | fp16 | bs=8, lr=1e-05 | 0.808 | | K100 | fp16 | bs=8, lr=1e-05 | 0.804 | ## 应用场景 ### 算法类别 多轮对话 ### 热点应用行业 家居,教育,科研 ## 源码仓库及问题反馈 - https://developer.hpccube.com/codes/modelzoo/yuan2.0-m32_pytorch ## 参考资料 - https://github.com/THUDM/GLM