Versions Compared

Key

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

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

Table of Contents
minLevel1
maxLevel3
include
outlinefalse
indent
styledefault
exclude
typelist
class
printabletrue

...

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

...

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

...

NCCL_NSOCKS_PERTHREAD คือจำนวน network socket ที่ถูกใช้สำหรับแต่ละ thread ของ CPU

...

รายละเอียดในการตั้งค่า

หากกำหนด NCCL_SOCKET_NTHREADS เป็น 8 ; CPU จะใช้งาน 8 Threads

...

และตั้งค่า NCCL_NSOCKS_PERTHREAD เป็น 2 ; แต่ละ Thread จะใช้ Network Socket 2

...

ตัวในการสื่อสารระหว่าง GPU/node

ดังนั้นจะใช้ทั้งสิ้น 16 Network Socket

...

ในการสื่อสารระหว่าง GPU/node

Info

สำหรับเครื่อง LANTA ที่ปิด Hyper-threading ไว้ การระบุจำนวน thread จะเทียบเท่ากับการใช้งาน CPU core

Panel
panelIconIdatlassian-warning
panelIcon:warning:
bgColor#FFFAE6

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

...

โดยสามารถอ่านรายละเอียดของเครื่อง LANTA เพิ่มเติมได้ที่ https://thaisc.io/thaisc-resorces/lanta

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

Note

โดยปกติแล้วผลคูณของ NCCL_SOCKET_NTHREADS และ NCCL_NSOCKS_PERTHREAD จะต้องไม่เกิน 64 เพื่อป้องกันผลกระทบต่อการประมวลผลของ main task

ผลลัพธ์จากการทดสอบ

เราได้ทดลอง Train Model Llama2-13b โดยใช้ Dataset alpaca (52k) เป็นชุดข้อมูล

...

ข้อควรระวังในการปรับค่า Parameters

...

ในการปรับตัวแปร NCCL ควรระวังการตั้งค่าที่สูงเกินไป อาจส่งผลให้ระบบนั้นใช้ทรัพยากร CPU และ RAM มากเกินความจำเป็น และเกิดการแย่งทรัพยากรกับกระบวนการอื่นๆ ใน Task หลัก เช่น

  • การ load data

  • การปรับ weight

  • เกิด overhead ในการจัดการ threads และ sockets ที่มากเกินไป

แหล่งอ้างอิง