Versions Compared

Key

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

บทความนี้อธิบาย….. โดยหัวข้อต่อไปนี้ให้ข้อมูลสรุปเนื้อหาของบทความ เพื่อให้ผู้อ่านสามารถระบุส่วนที่ต้องการอ่านได้อย่างรวดเร็ว

บทความนี้อธิบายความหมายและการทำงานเบื้องต้นของ NCCL (NVIDIA Collective Communications Library) พื่อเพิ่มประสิทธิภาพการสื่อสารระหว่าง GPU พร้อมทั้งนำเสนอผลการทดลองของการ config parameter ต่างๆ เพื่อให้เข้าใจและเป็นแนวทางในการนำไปใช้งาน

Table of Contents
minLevel1
maxLevel6
outlinefalse
styledefault
typelist
printabletrue

ภาพรวมของ NCCL

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

...

การตั้งค่า NCCL parameters อย่างเหมาะสมมีความสำคัญในการเพิ่มประสิทธิภาพการทำงานของระบบ โดยเฉพาะใน cluster พารามิเตอร์ต่างๆ สามารถส่งผลกระทบต่อประสิทธิภาพการสื่อสารและการใช้ทรัพยากรของระบบ

การทดสอบหา NCCL parameters ที่เหมาะสม

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

...

Panel
panelIconIdatlassian-warning
panelIcon:warning:
bgColor#FFFAE6

ผลคูณของ NCCL_SOCKET_NTHREADS และ NCCL_NSOCKS_PERTHREAD จะต้องไม่เกิน 64.

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

...

ตัวอย่างการตั้งค่า NCCL parameters

ในตัวอย่างนี้ เป็นการตั้งค่า NCCL parameters โดยใช้ NCCL_SOCKET_NTHREADS=8 และ NCCL_NSOCKS_PERTHREAD=2 โดยสามารถดูรายละเอียดได้จากไฟล์ต่อไปนี้

ไฟล์ slurm_script.sh

Code Block
languagebash
#!/bin/bash
#SBATCH -p gpu                     # Specify partition [Compute/Memory/GPU]
#SBATCH -N 32 -c 64                # Specify number of nodes and processors per task
#SBATCH --ntasks-per-node=1		   # Specify number of tasks per node
#SBATCH --gpus-per-node=4		   # Specify total number of GPUs
#SBATCH -t 1:00:00                 # Specify maximum time limit (hour: minute: second)
#SBATCH -A ltxxxxxx                # Specify project name
#SBATCH -J nccl                    # Specify job name
#SBATCH -o logs/nccl-%j.out        # Specify output file

export NCCL_SOCKET_IFNAME=hsn      # Specify Network Socket (High Speed Network)
export NCCL_SOCKET_NTHREADS=8
export NCCL_NSOCKS_PERTHREAD=2

START=$(date)
starttime=$(date +%s)

export WANDB_MODE="offline"

# sent to sub script
export HOSTNAMES=$(scontrol show hostnames "$SLURM_JOB_NODELIST")
export MASTER_ADDR=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1)
export MASTER_PORT=12802
export COUNT_NODE=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | wc -l)

export SLURM_JOB_ID

srun --output=${LOG_DIR}/node-%t.out sh smultinode.sh

...