GPT

最近更新时间:2024-08-28 17:44:21

我的收藏
本指导适用于在 TencentOS Server 3上使用 Megatron-LM 训练框架运行 GPT 模型的官方 Demo,以 Docker 方式启动。

环境准备

1. 从 GitHub 下载 Megatron-LM 的开源仓库到本地。
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
2. 接下来我们使用 Pytorch 的基础镜像即可包含大部分运行环境,这里我们拉取 Nvidia 的基础镜像来启动容器。
docker run -it --gpus all --name=megatron -e HF_ENDPOINT="https://hf-mirror.com" --ipc=host -v $PWD:/workspace nvcr.io/nvidia/pytorch:24.01-py3 /bin/bash
此时会从 nvcr 拉取 docker 镜像,请确保网络环境较好,直到镜像里所有层下载成功。成功后会直接进入容器内部。
注意:
使用 -e HF_ENDPOINT="https://hf-mirror.com" 是因为后续下载数据集从 datasets 库中下载,我们需要保证与 Hugging Face 的通信是正常的。

安装运行模型必要的包

1. 将 pip 换为国内清华源以加快下载速度。
#将pip换成清华源
#设为默认,永久有效
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2. 安装运行 megatron 必要的包,通过 pip 下载。
#安装所有需要的包
pip install datasets nltk

下载分词器和合并表

分词器 合并表下载 网站下载 merges.txt 和 vocab.json 两个文件,放在 workspace/ 文件夹下。




数据集下载以及数据预处理

1. 新建 dataset.py 文件,输入以下代码:
from datasets import load_dataset

train_data = load_dataset('codeparrot/codeparrot-clean-train', split='train')
train_data.to_json("codeparrot_data.json", lines=True)
2. 运行代码
python dataset.py
此时会开始下载 CodeParrot 数据集并转化为 json 格式,json 一行包括一个文本样本。
3. 随后将 json 数据处理成二进制格式:
python tools/preprocess_data.py \\
--input codeparrot_data.json \\
--output-prefix codeparrot \\
--vocab vocab.json \\
--dataset-impl mmap \\
--tokenizer-type GPT2BPETokenizer \\
--merge-file merges.txt \\
--json-keys content \\
--workers 32 \\
--chunk-size 25 \\
--append-eod
完成后会输出 codeparrot_content_document.idx 和 codeparrot_content_document.bin 两个文件用于训练。

训练模型

1. 新建 train.sh 脚本,输入以下代码:
GPUS_PER_NODE=8
MASTER_ADDR=localhost
MASTER_PORT=6001
NNODES=1
NODE_RANK=0
WORLD_SIZE=$(($GPUS_PER_NODE*$NNODES))
DISTRIBUTED_ARGS="--nproc_per_node $GPUS_PER_NODE
--nnodes $NNODES
--node_rank $NODE_RANK
--master_addr $MASTER_ADDR
--master_port $MASTER_PORT"
CHECKPOINT_PATH=/workspace/Megatron-LM/experiments/codeparrot-small
VOCAB_FILE=vocab.json
MERGE_FILE=merges.txt
DATA_PATH=codeparrot_content_document
GPT_ARGS="--num-layers 12
--hidden-size 768
--num-attention-heads 12
--seq-length 1024
--max-position-embeddings 1024
--micro-batch-size 12
--global-batch-size 192
--lr 0.0005
--train-iters 150000
--lr-decay-iters 150000
--lr-decay-style cosine
--lr-warmup-iters 2000
--weight-decay .1
--adam-beta2 .999
--fp16
--log-interval 10
--save-interval 2000
--eval-interval 200
--eval-iters 10"
TENSORBOARD_ARGS="--tensorboard-dir experiments/tensorboard"
python3 -m torch.distributed.launch $DISTRIBUTED_ARGS \\
pretrain_gpt.py \\
--tensor-model-parallel-size 1 \\
--pipeline-model-parallel-size 1 \\
$GPT_ARGS \\
--vocab-file $VOCAB_FILE \\
--merge-file $MERGE_FILE \\
--save $CHECKPOINT_PATH \\
--load $CHECKPOINT_PATH \\
--data-path $DATA_PATH \\
$TENSORBOARD_ARGS
2. 运行脚本
bash train.sh
即可开始训练模型,最后得到训练权重。

参考文档