Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

NCCL (NVIDIA Collective Communications Library) เป็น library การสื่อสารแบบกลุ่มที่พัฒนาโดย NVIDIA สำหรับการทำ Parallel processing บน GPU โดยเฉพาะอย่างยิ่งในการ train deep learning model ที่ใช้ GPU หลายใบ NCCL ถูกออกแบบมาเพื่อเพิ่มประสิทธิภาพการสื่อสารระหว่าง GPU ในระบบที่มี GPU หลายใบ ทั้งภายใน single node และ multinode

...

ในการทดสอบของเรา เราได้ทำการทดสอบ parameter 2 ตัวได้แก่ NCCL_SOCKET_NTHREADS และ NCCL_NSOCKS_PERTHREAD

1.NCCL_SOCKET_NTHREADS

...

NCCL_SOCKET_NTHREADS

...

คือจำนวนการใช้งาน Thread ของ CPU ที่จะใช้ต่อ 1 การสื่อสาร ผ่าน network socket

2.NCCL_NSOCKS_PERTHREAD

The NCCL_NSOCKS_PERTHREAD variable specifies the number of sockets opened by each helper thread of the socket transport. In environments where per-socket speed is limited, setting this variable larger than 1 may improve the network performance. คือจำนวน network socket ที่ถูกใช้สำหรับแต่ละ Thread ของ CPU

Panel
panelIconIdatlassian-warning
panelIcon:warning:
bgColor#FFFAE6

However, the product of ผลคูณของ NCCL_SOCKET_NTHREADS and และ NCCL_NSOCKS_PERTHREAD cannot exceed จะต้องไม่เกิน 64.

โดย parameter 2 ตัวนี้ จะใช้ทรัพยากรส่วนหนึ่งของ CPU ในการสื่อสารกันระหว่าง GPU/node ซึ่งในการประมวลผล main task จะต้องใช้ทรัพยากรของ CPU เช่นกันจึงต้อง balance เพื่อหาค่า parameter ที่เหมาะสม

...

Code Block
languagebash
module restore
module load Mamba
module load Apptainer
module load PrgEnv-gnu
module load cpe-cuda/23.03
module load cudatoolkit/23.3_11.8

conda deactivate
conda activate ./env

echo -------ENVIRONMENT-------
echo myuser=$(whoami)
echo COUNT_NODE=$COUNT_NODE
echo LD_LIBRARY_PATH = $LD_LIBRARY_PATH
echo PATH = $PATH
echo which mpicc $(which mpicc)
echo HOSTNAMES =
$HOSTNAMES
echo hostname = $(hostname)
echo MASTER_ADDR= $MASTER_ADDR
echo MASTER_PORT= $MASTER_PORT

H=$(hostname)
THEID=$(echo -e $HOSTNAMES | python -c "import sys;[sys.stdout.write(str(i)) for i,line in enumerate(next(sys.stdin).split(' ')) if line.strip() == '$H'.strip()]")
echo THEID=$THEID
echo SLURM_PROCID=$SLURM_PROCID
echo -------------------------

export NCCL_TIMEOUT=3600000
export TORCH_NCCL_BLOCKING_WAIT=0
export TORCH_EXTENSIONS_DIR="./.cache"

accelerate launch \
    --num_processes $((4 * $COUNT_NODE)) \
    --num_machines $COUNT_NODE \
    --multi_gpu \
    --mixed_precision bf16 \
    --machine_rank $SLURM_PROCID \
    --main_process_ip $MASTER_ADDR \
    --main_process_port $MASTER_PORT \
    --dynamo_backend inductor \
    scripts/train.py

...