# LLAMA & LLAMA2 ## 论文 ``` LLaMA: Open and Efficient Foundation Language Models ``` **-** [https://arxiv.org/abs/2302.13971](https://arxiv.org/abs/2302.13971) ``` Llama 2: Open Foundation and Fine-Tuned Chat Models ``` **-** [https://arxiv.org/abs/2307.09288](https://arxiv.org/abs/2307.09288) ## 模型结构 LLaMA,这是一个基础语言模型的集合,参数范围从7B到65B。在数万亿的tokens上训练出的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而不依赖于专有的和不可访问的数据集。特别是,llama 13B在大多数基准测试中优于GPT-3 (175B), LLaMA 65B与最好的模型Chinchilla-70B和PaLM-540B具有竞争力。LLAMA网络基于 Transformer 架构。提出了各种改进,并用于不同的模型,例如 PaLM。 LLaMA2相较于LLaMA采用了更强大的数据清洗、更多的tokens训练、加倍的上下文长度,并支持了Grouped-query attention (GQA),即允许在多头注意力(MHA)模型中共享键和值投影,从而减少与缓存相关的内存成本的优化方法。通过使用 GQA,更大的模型可以在优化内存使用的同时保持性能。 ![img](./llama模型结构.png) ## 算法原理 以下是与原始 Transformer 架构的主要区别: **预归一化**。为了提高训练稳定性,对每个transformer 子层的输入进行归一化,而不是对输出进行归一化。使用 RMSNorm 归一化函数。 **SwiGLU 激活函数 [PaLM]**。使用 SwiGLU 激活函数替换 ReLU 非线性以提高性能。使用 2 /3 4d 的维度而不是 PaLM 中的 4d。 **旋转嵌入**。移除了绝对位置嵌入,而是添加了旋转位置嵌入 (RoPE),在网络的每一层。 ![img](./llama算法原理.png) ## 环境配置 以下将以llama2-7B及llama2-13B基于K100_AI以镜像方式运行测试为例进行介绍; ### docker 1、基准镜像拉取准备 关于本项目DCU显卡所需的镜像可从光合开发者社区拉取 https://developer.hpccube.com/tool/,基于该镜像进行个人镜像创建操作 ``` docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk24.04-py310 docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=80G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash ``` 2、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/ ``` DTK驱动:dtk24.04 python:python3.10 DAS1.0: torch:2.1.0 torchvision:0.16.0 torchaudio:2.1.2 deepspeed:0.12.3 apex:1.1.0 flash_attn:2.0.4 triton:2.1.0 lightop:0.3 Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应 ``` 3、其它非特殊库参照requirements.txt安装 ``` pip3 install -r requirements.txt ``` ## 数据集 数据可按需进行自行准备,项目中已提供用于试验训练的数据集,因数据较大,已压缩至./dataset/my-llama_text_document.tar.gz,请解压后自行放至合适位置,并按数据位置修改single.sh_xx,具体可见训练步骤,训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备: ``` dataset |my-llama_text_document.bin |my-llama_text_document.idx ``` ## 训练 ### 作业提交 通过mpirun进行测试提交,运行相应参数均位于single.sh_xx,可按实际需要进行相应修改,列举如下,目前默认参数为实测推荐参数,注意到该参数配置是基于K100_AI给出,如在其他平台运行,请按需修改: ``` # Change the below configurations here BASE_PATH=./tmp DS_CONFIG=${BASE_PATH}/deepspeed.json DATASET_1="./dataset/my-llama_text_document" DATASET="1 ${DATASET_1}" CHECKPOINT_PATH=./tmp TOKENIZER_PATH=./tokenizer.model export HIP_PRINTF_DEBUG_FOR_FP64=0 TP=1 PP=4 ZERO_STAGE=1 HIDDEN_SIZE=4096 FFN_HIDDEN_SIZE=11008 NUM_LAYERS=32 NUM_HEADS=32 SEQ_LENGTH=4096 NUM_KV_HEADS=32 MICRO_BATCH_SIZE=1 GLOBAL_BATCH_SIZE=60 TRAIN_STEPS=250000 LR=3e-4 MIN_LR=3e-5 LR_WARMUP_STEPS=2000 WEIGHT_DECAY=0.1 GRAD_CLIP=1 ...... ``` 修改好之后,可按下述方式进行作业提交 ``` cd megatron-deepspeed-llama2 chmod u+x single.sh_7b_bf16 chmod u+x single.sh_13b_bf16 #llama2-7b mpirun -np 4 --allow-run-as-root ./single.sh_7b_bf16 localhost #llama2-13b mpirun -np 8 --allow-run-as-root ./single.sh_13b_bf16 localhost ``` ## ## 应用场景 ### 算法类别 ``` 自然语言处理 ``` ### 热点应用行业 ``` 医疗,教育,科研,金融 ``` ## 源码仓库及问题反馈 - https://developer.hpccube.com/codes/modelzoo/megatron-deepspeed-llama2 ## 参考资料 - https://github.com/bigscience-workshop/Megatron-DeepSpeed - https://www.deepspeed.ai/getting-started/ - https://deepspeed.readthedocs.io/en/latest/index.html