-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GPT2预训练模型,相同配置下libai的显存占用率会显著高于megatron-lm #349
Comments
您好,我用您的配置做了上面的实验
您用到的oneflow和libai的版本可能不匹配,可以具体说明一下用的哪个libai commit吗? 我的复现环境:
您可以用 用您的配置在8卡 16G V100上 复现的结果:
您也可以用 我们的测试脚本 复现发版的实验结果我用您的配置和您提到的commit版本没有复现出对应的结果,您可以跑下面的脚本,看能不能得出和我类似的结果
|
你好,补充一些细节信息:
此外,我根据你提供的脚本复��了实验,结果比较接近:
从上述实验中可以看出,我在机器上能够大致复现出你描述的情况,因此判断:问题可能出现在我的megatron-lm训练脚本上。但我仔细对比了我的脚本和你提供的脚本,两者在网络参数、并行数等设置基本相同,但跑出来的结果却大有差异,这里贴上根据我的脚本实现的结果:
为了便于对比,我把两份脚本跑出来的log文件也贴上去了。 附:我的megetron-lm训练gpt2的脚本 #! /bin/bash
# Runs the "345M" parameter model
GPUS_PER_NODE=${1:-8}
# Change for multinode config
MASTER_ADDR=localhost
MASTER_PORT=60075
NNODES=1
NODE_RANK=0
WORLD_SIZE=$(($GPUS_PER_NODE*$NNODES))
DATA_PATH=/home/gehao/dataset/gpt/hf-GPT2Data/hf-gpt2_text_document
VOCAB_FILE_PATH=/home/gehao/dataset/gpt/hf-GPT2Data/vocab.json
MERGE_FILE_PATH=/home/gehao/dataset/gpt/hf-GPT2Data/merges.txt
DISTRIBUTED_ARGS="--nproc_per_node $GPUS_PER_NODE --nnodes $NNODES --node_rank $NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT"
M_P=${2:-1}
P_P=${3:-1}
D_P=$(($WORLD_SIZE/$M_P/$P_P))
MICRO_BATCH_SIZE=${4:-8}
GLOABAL_BATCH_SIZE=${5:-64}
TRAIN_ITERS=${6:-100}
CHECKPOINT_PATH=checkpoints/gpt2_gpus${GPUS_PER_NODE}_dp${D_P}_mp${M_P}_pp${P_P}_mbs${MICRO_BATCH_SIZE}_gbs${GLOABAL_BATCH_SIZE}_iters${TRAIN_ITERS}
LOGFILE=./log/megatron_lm_perf_gpt_pretrain_gpus${GPUS_PER_NODE}_dp${D_P}_mp${M_P}_pp${P_P}_mbs${MICRO_BATCH_SIZE}_gbs${GLOABAL_BATCH_SIZE}_iters${TRAIN_ITERS}.log
python -m torch.distributed.launch $DISTRIBUTED_ARGS \
pretrain_gpt.py \
--tensor-model-parallel-size $M_P \
--pipeline-model-parallel-size $P_P \
--num-layers 24 \
--hidden-size 1024 \
--num-attention-heads 16 \
--micro-batch-size $MICRO_BATCH_SIZE \
--global-batch-size $GLOABAL_BATCH_SIZE \
--seq-length 1024 \
--max-position-embeddings 1024 \
--train-iters $TRAIN_ITERS \
--lr-decay-iters 320000 \
--save $CHECKPOINT_PATH \
--load $CHECKPOINT_PATH \
--data-path $DATA_PATH \
--vocab-file $VOCAB_FILE_PATH \
--merge-file $MERGE_FILE_PATH \
--data-impl mmap \
--split 949,50,1 \
--distributed-backend nccl \
--lr 0.00015 \
--lr-decay-style cosine \
--min-lr 1.0e-5 \
--weight-decay 1e-2 \
--clip-grad 1.0 \
--lr-warmup-fraction .01 \
--checkpoint-activations \
--log-interval 1 \
--save-interval 1000 \
--eval-interval 100 \
--eval-iters 10 \
--fp16 2>&1 | tee ${LOGFILE}
echo "Writting log to ${LOGFILE}" 执行的命令(mbs=8, gbs=64,gpu_rate=53%): bash examples/pretrain_gpt_dp_mp_pp.sh 8 1 1 8 64 100 我们讨论下megatron-lm这两份脚本跑出来有差异的原因是啥? |
也就是即使是Megatron-LM, Sakura-gh 的配置可以跑很大的batch size,但我们的配置只能跑一半的batch size |
我check了这两份log最前面输出的参数,区别在于checkpoint_activations,您的是True,我的是False |
哦,怪不得,使用checkpointing 可以用时间换显存 |
感谢感谢~在libai上使用checkpointing之后和megatron-lm的性能相当了,并且显存占用上还占有优势。复现结果如下:
|
我看打开checkpointing之后,libai 比 megatron低一点, @xyn1201 和之前的测试结果吻合吗 |
|
请问这里的data_prefix有下载或者预处理的guidance吗?搜了一圈没找到,谢谢! |
另外这是哪个数据集啊?我没看出来 |
似乎是这个? |
我目前正在比较onelfow-libai和megatron-lm在预训练GPT2时的性能,实验过程中发现,在相同配置下:oneflow-libai相较于megatron-lm占用的gpu显存会明显更高,不知道是我的配置问题还是框架本身的问题?
我在相同的GPT2模型网络结构配置下(详见后面贴的配置文件),将data_parallel设置为8,tensor_parallel和pipeline_parallel均设置为1,服务器环境是8块16G的Tesla-P100:
我的模型、训练、并行等参数的配置文件修改:
libai/configs/gpt2_pretrain.py
:对应的
libai/tools/train.sh
:执行的命令:
The text was updated successfully, but these errors were encountered: