这里介绍使用裸机或者 Docker 环境使用 PaddleFleetX 的方法,用户根据具体情况选择一种安装部署方式即可。 使用多机训练时,需要在每台机器上都部署相应的环境。
推荐使用 Docker 安装部署 PaddleFleetX 进行大模型训练,Docker 环境的安装可以参考文档。
请根据本地 CUDA 版本(使用 nvidia-smi
命令查看)使用以下命令拉取对应或兼容的镜像,
docker pull registry.baidubce.com/ppfleetx/fleetx-cuda11.2-cudnn8:dev
如本地环境cuda版本较低可以参考 Dockerfile 根据需要定制镜像。
大模型训练需要使用GPU,如已安装 nvida-container-runtime 可以使用以下命令运行镜像,
docker run -it --name=paddle --net=host -v /dev/shm:/dev/shm --shm-size=32G -v $PWD:/paddle --runtime=nvidia registry.baidubce.com/ppfleetx/ppfleetx-cuda11.2-cudnn8:v0.1.0 bash
未安装 nvida-container-runtime 或启动后无法执行 nvidia-smi
查看GPU信息时可以尝试通过如下脚本启动运行,
export CUDA_SO="$(\ls /usr/lib64/libcuda* | grep -v : | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | grep -v : | xargs -I{} echo '-v {}:{}')"
export DEVICES=$(find /dev/nvidia* -maxdepth 1 -not -type d | xargs -I{} echo '--device {}:{}')
nvsmi=`which nvidia-smi`
docker run \
${CUDA_SO} ${DEVICES} \
-v /dev/shm:/dev/shm \
-v $PWD:/paddle \
--name paddle \
--net=host \
--shm-size=32G \
-v $nvsmi:$nvsmi \
-it \
registry.baidubce.com/ppfleetx/ppfleetx-cuda11.2-cudnn8:v0.1.0 \
bash
以上命令 -v $PWD:/paddle
将当前目录映射到 /paddle 目录,在 docker 环境内部对该目录的更改将会持久化。
为保证通信效率和通信正常,添加参数 --net=host 使用主机网络,更多 docker run 参数说明请参考 docker 文档。
安装 PaddlePaddle
首先根据环境在 安装文档 选择对应的版本使用 pip install 执行对应命令安装 PaddlePaddle. 请务必按照文档安装 GPU 版本且验证安装成功。
例如使用如下命令将会安装基于 CUDA 11.2 最新版本的 PaddlePaddle.
python -m pip install paddlepaddle-gpu==0.0.0.post112 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html
安装遇到问题以及环境验证的方法也可以参考文档。
安装依赖
使用以下命令安装 PaddleFleetX 运行所需依赖。
python -m pip install -r https://raw.githubusercontent.com/PaddlePaddle/PaddleFleetX/develop/requirements.txt -i https://mirror.baidu.com/pypi/simple
进入环境后首先使用以下命令拉取最新代码
git clone https://github.com/PaddlePaddle/PaddleFleetX.git
然后根据需求选择对应的训练方式。
切换工作目录并下载demo数据,
mkdir data
wget -O data/gpt_en_dataset_300m_ids.npy https://bj.bcebos.com/paddlenlp/models/transformers/gpt/data/gpt_en_dataset_300m_ids.npy
wget -O data/gpt_en_dataset_300m_idx.npz https://bj.bcebos.com/paddlenlp/models/transformers/gpt/data/gpt_en_dataset_300m_idx.npz
然后使用以下命令运行程序,
python ./tools/train.py -c ./ppfleetx/configs/nlp/gpt/pretrain_gpt_345M_single_card.yaml
若要在显存容量更小的16G V100环境下进行GPT模型单卡训练,可将对应yaml文件中的Model-hidden size值改为原来的1/2即可。
运行日志
[2022-09-21 05:42:26,980] [ INFO] - [train] epoch: 0, batch: 0, loss: 10.999595642, avg_batch_cost: 2.73014 sec, speed: 0.37 step/s, ips_total: 3001 tokens/s, ips: 3001 tokens/s, learning rate: 2.77778e-08
[2022-09-21 05:42:27,492] [ INFO] - [train] epoch: 0, batch: 1, loss: 10.997043610, avg_batch_cost: 0.51164 sec, speed: 1.95 step/s, ips_total: 16011 tokens/s, ips: 16011 tokens/s, learning rate: 4.16667e-08
[2022-09-21 05:42:27,997] [ INFO] - [train] epoch: 0, batch: 2, loss: 10.994422913, avg_batch_cost: 0.50457 sec, speed: 1.98 step/s, ips_total: 16236 tokens/s, ips: 16236 tokens/s, learning rate: 5.55556e-08
[2022-09-21 05:42:28,503] [ INFO] - [train] epoch: 0, batch: 3, loss: 11.005314827, avg_batch_cost: 0.50497 sec, speed: 1.98 step/s, ips_total: 16223 tokens/s, ips: 16223 tokens/s, learning rate: 6.94444e-08
[2022-09-21 05:42:29,009] [ INFO] - [train] epoch: 0, batch: 4, loss: 10.988020897, avg_batch_cost: 0.50480 sec, speed: 1.98 step/s, ips_total: 16228 tokens/s, ips: 16228 tokens/s, learning rate: 8.33333e-08
[2022-09-21 05:42:29,513] [ INFO] - [train] epoch: 0, batch: 5, loss: 10.983006477, avg_batch_cost: 0.50393 sec, speed: 1.98 step/s, ips_total: 16256 tokens/s, ips: 16256 tokens/s, learning rate: 9.72222e-08
[2022-09-21 05:42:30,018] [ INFO] - [train] epoch: 0, batch: 6, loss: 10.988539696, avg_batch_cost: 0.50427 sec, speed: 1.98 step/s, ips_total: 16245 tokens/s, ips: 16245 tokens/s, learning rate: 1.11111e-07
切换工作目录并下载demo数据,
mkdir data
wget -O data/gpt_en_dataset_300m_ids.npy https://bj.bcebos.com/paddlenlp/models/transformers/gpt/data/gpt_en_dataset_300m_ids.npy
wget -O data/gpt_en_dataset_300m_idx.npz https://bj.bcebos.com/paddlenlp/models/transformers/gpt/data/gpt_en_dataset_300m_idx.npz
然后使用以下命令运行单机多卡程序,
python -m paddle.distributed.launch \
./tools/train.py \
-c ./ppfleetx/configs/nlp/gpt/pretrain_gpt_1.3B_dp8.yaml
若要在显存容量更小的环境例如 16G 显存下进行GPT模型单机训练,可通过减小Model.hidden_size
调整模型规模至合适大小再启动训练,命令如下:
python -m paddle.distributed.launch \
./tools/train.py -c \
./ppfleetx/configs/nlp/gpt/pretrain_gpt_1.3B_dp8.yaml -o Model.hidden_size=1024
更多 launch 启动参数和用法请参考 API 文档。
成功则开始训练过程,
LAUNCH INFO 2022-08-15 07:37:38,946 ----------- Configuration ----------------------
LAUNCH INFO 2022-08-15 07:37:38,946 devices: None
LAUNCH INFO 2022-08-15 07:37:38,947 elastic_level: -1
LAUNCH INFO 2022-08-15 07:37:38,947 elastic_timeout: 30
LAUNCH INFO 2022-08-15 07:37:38,947 gloo_port: 6767
LAUNCH INFO 2022-08-15 07:37:38,947 host: None
LAUNCH INFO 2022-08-15 07:37:38,947 ips: None
LAUNCH INFO 2022-08-15 07:37:38,947 job_id: default
LAUNCH INFO 2022-08-15 07:37:38,947 legacy: False
LAUNCH INFO 2022-08-15 07:37:38,947 log_dir: log
LAUNCH INFO 2022-08-15 07:37:38,947 log_level: INFO
LAUNCH INFO 2022-08-15 07:37:38,947 master: None
LAUNCH INFO 2022-08-15 07:37:38,947 max_restart: 3
LAUNCH INFO 2022-08-15 07:37:38,947 nnodes: 1
LAUNCH INFO 2022-08-15 07:37:38,947 nproc_per_node: None
LAUNCH INFO 2022-08-15 07:37:38,947 rank: -1
LAUNCH INFO 2022-08-15 07:37:38,947 run_mode: collective
LAUNCH INFO 2022-08-15 07:37:38,947 server_num: None
LAUNCH INFO 2022-08-15 07:37:38,947 servers:
LAUNCH INFO 2022-08-15 07:37:38,947 start_port: 6070
LAUNCH INFO 2022-08-15 07:37:38,947 trainer_num: None
LAUNCH INFO 2022-08-15 07:37:38,947 trainers:
LAUNCH INFO 2022-08-15 07:37:38,947 training_script: run_pretrain.py
LAUNCH INFO 2022-08-15 07:37:38,947 training_script_args: ['-c', './configs_1.3B_dp8.yaml']
LAUNCH INFO 2022-08-15 07:37:38,947 with_gloo: 1
LAUNCH INFO 2022-08-15 07:37:38,947 --------------------------------------------------
LAUNCH INFO 2022-08-15 07:37:38,948 Job: default, mode collective, replicas 1[1:1], elastic False
LAUNCH INFO 2022-08-15 07:37:38,949 Run Pod: vqhbut, replicas 8, status ready
LAUNCH INFO 2022-08-15 07:37:39,063 Watching Pod: vqhbut, replicas 8, status running
## 启动配置
[2022-08-15 07:41:23,063] [ INFO] - [train] epoch: 0, batch: 0, loss: 11.255846024, avg_batch_cost: 7.06713 sec, speed: 0.14 step/s, ips_total: 9273 tokens/s, ips: 1159 tokens/s, learning rate: 2.77778e-08
## 更多训练日志
如有启动异常请根据文档进行工作环境验证,其他问题可参考FAQ解决。
使用以下命令进行多机分布式训练,其中 --nnodes 参数为分布式训练机器数量,--master 为训练机器中其中一台机器的IP,运行时需要将命令中示例IP替换为真实的机器IP和任意可用端口,然后在每个节点上都运行以下命令, 如果不知道机器IP可以不设置--master参数先在一台机器上启动,然后根据提示复制命令在其他机器上启动即可。
python -m paddle.distributed.launch --master=10.10.10.1:8099 --nnodes=2 \
./tools/train.py -c \
./ppfleetx/configs/nlp/gpt/pretrain_gpt_6.7B_sharding16.yaml
该示例为16卡任务,需要满足总卡数为16的要求。
注意这里需要使用单机多卡训练部分的代码和数据。
成功则开始多机训练过程,日志和单机多卡类似,日志异常时请按照文档进行环境验证和问题排查。
若要在显存容量更小的环境例如 16G 显存下进行GPT模型单机训练,可通过减小Model.hidden_size
调整模型规模至合适大小再启动训练,命令如下:
python -m paddle.distributed.launch --master=10.10.10.1:8099 --nnodes=2 \
./tools/train.py -c \
./ppfleetx/configs/nlp/gpt/pretrain_gpt_6.7B_sharding16.yaml -o Model.hidden_size=2048
更多大模型多机训练内容可见文档。