# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. function is_a100() { if [ $(nvidia-smi|grep A100|wc -l) -ne 0 ];then echo 1 else echo 0 fi } if [ "$(is_a100)" == "1" ]; then exit 0 fi unset PADDLE_ELASTIC_JOB_ID unset PADDLE_TRAINER_ENDPOINTS unset DISTRIBUTED_TRAINER_ENDPOINTS unset FLAGS_START_PORT unset PADDLE_ELASTIC_TIMEOUT nnodes=$PADDLE_TRAINERS_NUM rank=$PADDLE_TRAINER_ID export NCCL_IB_QPS_PER_CONNECTION=8 export NCCL_DEBUG=INFO # export NCCL_DEBUG=WARN export NCCL_IB_TIMEOUT=22 export NCCL_IB_ADAPTIVE_ROUTING=0 # export NCCL_IB_GID_INDEX=3 export NCCL_NVLS_ENABLE=0 export NCCL_SOCKET_IFNAME=xgbe0 # export NCCL_DEBUG_SUBSYS=INIT,ENV,GRAPH,ALLOC export NCCL_DEBUG_SUBSYS=INIT,COLL,TUNING,ALLOC export NCCL_IB_HCA=mlx5_1,mlx5_8,mlx5_6,mlx5_4,mlx5_2,mlx5_9,mlx5_7,mlx5_5,mlx5_3 # export IB_GID_INDEX=3 for name in `env | grep -E 'PADDLE|ENDPOINT' | awk -F'=' '{print $1}'`; do unset ${name} done START_RANK=0 END_RANK=1 if [[ $rank -lt $START_RANK ]]; then exit 0 fi if [[ $rank -ge $END_RANK ]]; then exit 0 fi rank=$(($rank-$START_RANK)) nnodes=$(($END_RANK-$START_RANK)) # master=`cat /root/paddlejob/workspace/hostfile | head -n $(($START_RANK+1)) | tail -n 1 | awk '{print $1}'` # master=`cat hostfile | head -n $(($START_RANK+1)) | tail -n 1 | awk '{print $1}'` if [ -f "/root/paddlejob/workspace/hostfile" ]; then # 文件存在,按原逻辑获取 master master=$(cat /root/paddlejob/workspace/hostfile | head -n $(($START_RANK+1)) | tail -n 1 | awk '{print $1}') else # 文件不存在,设置为当前机器的 IP master=$(hostname -I | awk '{print $1}') # 获取本机 IP echo "hostfile not found, using current machine IP: $master" fi port=36677 version=2_21_5 new_api=4 if [ "$version" = "2_21_5" ]; then export NCCL_RUNTIME_CONNECT=0 fi # root_path 改成自己的路径 root_path=/root/paddlejob/workspace/env_run/output/test_comm_group_num task_name=llama2_13b_dynamic_hand_"$version"_"$new_api" export NCCL_DEBUG_FILE=$root_path/Nccl/nccl_log/$task_name/%h.%p.log export FLAGS_eager_communication_connection=1 export NNODES=1 export PADDLE_TRAINERS_NUM=1 export CUDA_DEVICE_MAX_CONNECTIONS=1 # log export GLOG_v=3 log_dir="$root_path/Nccl/log/$task_name" if [ -d $log_dir ]; then rm -rf $log_dir fi shell_dir=$(dirname "$(readlink -f "$0")") python -u -m paddle.distributed.launch \ --gpus "0,1,2,3,4,5,6,7" \ --log_dir ${log_dir} \ --master $master:$port \ --nnodes $nnodes \ --rank $rank \ --run_mode=collective \ $shell_dir/test_comm_group_num.py count7=$(grep -c "init NCCLCommContext rank" "${log_dir}/workerlog.7") if [ $count7 -ne 7 ]; then echo -e "\033[31m test_comm_group_num failed, got ${count7}, expect 7 \033[0m" exit 1 fi rm -rf $root_path