👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>
背景信息
{"instruction": "Given the following input, find the missing number","input": "10, 12, 14, __, 18","output": "16"}
前提条件
您已购买两台 高性能计算GPU型hpcpni2实例,下文分别命名为node1和node2,购买操作请参见购买高性能计算GPU型实例。
本文HPC GPU实例的镜像以 Ubuntu 20.04 with GPU Driver 为例,您也可以任选其它镜像。
操作步骤
登录实例。
安装docker。
拉取镜像。
执行如下命令下载Dockerfile文件。
执行如下命令拉取镜像。
配置NCCL环境变量。
执行vim /etc/profile命令,打开配置文件。
按i,进入编辑模式。
在文件末尾添加如下参数。
NCCL_IB_HCA=mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1NCCL_IB_DISABLE=0NCCL_SOCKET_IFNAME=eth0NCCL_IB_GID_INDEX=3NCCL_NET_GDR_LEVEL=2NCCL_DEBUG=INFO
按Esc退出编辑模式,输入:wq并按下Enter键,保存并退出文件。
执行source /etc/profile命令,使配置更新生效。
容器环境配置。
在两台HPC实例上,分别运行如下脚本启动并进入容器。
启动容器时,需要将HPC实例上的virtualTopology.xml文件挂载至容器中。
node1:
docker run --runtime=nvidia -itd --net=host --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --name=node1 --privileged --ipc=host -v /var/run/nvidia-topologyd/virtualTopology.xml:/var/run/nvidia-topologyd/virtualTopology.xml iaas-gpu-cn-beijing.cr.volces.com/gpu-images/stanford_alpaca:v1 /bin/bashdocker exec -it node1 bash
node2:
docker run --runtime=nvidia -itd --net=host --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --name=node2 --privileged --ipc=host -v /var/run/nvidia-topologyd/virtualTopology.xml:/var/run/nvidia-topologyd/virtualTopology.xml iaas-gpu-cn-beijing.cr.volces.com/gpu-images/stanford_alpaca:v1 /bin/bashdocker exec -it node2 bash
进入容器后,执行ip a命令检查是否可以看到eth0 ~ eth4共5张网卡,其中eth0为以太网卡,其它为RDMA网卡。
在两台实例上分别运行如下脚本启动训练,需注意:
nnodes:设置为总的实例数量。
node_rank:node1上设置为0,node2上设置为1,以此类推。
master_addr:设置为node1上eth0的IP地址。
node1:
NCCL_SOCKET_IFNAME=eth0 NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2 NCCL_IB_GID_INDEX=3 NCCL_IB_HCA=mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1 NCCL_DEBUG=INFO WANDB_MODE=disabled torchrun --nnodes 2 --node_rank 0 --master_addr=192.168.XX.XX --nproc_per_node=8 --master_port=9999 train.py --model_name_or_path /workspace/llama-7b-hf/ --data_path ./alpaca_data.json --bf16 True --output_dir output --num_train_epochs 1 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_accumulation_steps 8 --evaluation_strategy "no" --save_strategy "steps" --save_steps 2000 --save_total_limit 1 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0.03 --lr_scheduler_type "cosine" --logging_steps 1 --tf32 True --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' --fsdp 'full_shard auto_wrap'
node2:
NCCL_SOCKET_IFNAME=eth0 NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2 NCCL_IB_GID_INDEX=3 NCCL_IB_HCA=mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1 NCCL_DEBUG=INFO WANDB_MODE=disabled torchrun --nnodes 2 --node_rank 1 --master_addr=192.168.XX.XX --nproc_per_node=8 --master_port=9999 train.py --model_name_or_path /workspace/llama-7b-hf/ --data_path ./alpaca_data.json --bf16 True --output_dir output --num_train_epochs 1 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_accumulation_steps 8 --evaluation_strategy "no" --save_strategy "steps" --save_steps 2000 --save_total_limit 1 --learning_rate 2e-5 --weight_decay 0. --warmup_ratio 0.03 --lr_scheduler_type "cosine" --logging_steps 1 --tf32 True --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' --fsdp 'full_shard auto_wrap'