บทความนี้อธิบายความหมายและการทำงานเบื้องต้นของ NCCL (NVIDIA Collective Communications Library) เพื่อเพิ่มประสิทธิภาพการสื่อสารระหว่าง GPU พร้อมทั้งนำเสนอผลการทดลองของการตั้งค่า parameter เพื่อให้เข้าใจและเป็นแนวทางในการนำไปใช้งาน โดยหัวข้อต่อไปนี้ให้ข้อมูลสรุปเนื้อหาของบทความ เพื่อให้ผู้อ่านสามารถระบุส่วนที่ต้องการอ่านได้อย่างรวดเร็ว
Table of Contents | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
โดยที่ผลคูณของ |
...
โดยสามารถอ่านรายละเอียดของเครื่อง LANTA เพิ่มเติมได้ที่ https://thaisc.io/thaisc-resorces/lanta |
นอกจากนี้ parameter 2 ตัวนี้ จะใช้ทรัพยากรส่วนหนึ่งของ CPU ในการสื่อสารกันระหว่าง GPU/node ซึ่งในการประมวลผล ซึ่งในการประมวลผลของ main task จะต้องใช้ทรัพยากรของ CPU เช่นกันจึงต้อง balance เพื่อหาค่า parameter ที่เหมาะสม
Note |
---|
โดยปกติแล้วผลคูณของ |
ผลลัพธ์จากการทดสอบ
เราได้ทดลอง Train Model Llama2-13b โดยใช้ Dataset alpaca (52k) เป็นชุดข้อมูล
...
ข้อควรระวังในการปรับค่า Parameters
...
ในการปรับตัวแปร NCCL ควรระวังการตั้งค่าที่สูงเกินไป อาจส่งผลให้ระบบนั้นใช้ทรัพยากร CPU และ RAM มากเกินความจำเป็น และเกิดการแย่งทรัพยากรกับกระบวนการอื่นๆ ใน Task หลัก เช่น
การ load data
การปรับ weight
เกิด overhead ในการจัดการ threads และ sockets ที่มากเกินไป
แหล่งอ้างอิง
คู่มือการใช้งาน NCCL - NVIDIA Collective Communication Library (NCCL) Documentation
คู่มือการใช้งาน Deepspeed โดย Huggingface - https://huggingface.co/docs/accelerate/en/usage_guides/deepspeed
Repository ที่ใช้ในการทดสอบ - GitHub - Kentakoong/optimize-finetuning-llm