บทความนี้อธิบายความหมายและการทำงานเบื้องต้นของ NCCL (NVIDIA Collective Communications Library) เพื่อเพิ่มประสิทธิภาพการสื่อสารระหว่าง GPU พร้อมทั้งนำเสนอผลการทดลองของการตั้งค่า parameter เพื่อให้เข้าใจและเป็นแนวทางในการนำไปใช้งาน โดยหัวข้อต่อไปนี้ให้ข้อมูลสรุปเนื้อหาของบทความ เพื่อให้ผู้อ่านสามารถระบุส่วนที่ต้องการอ่านได้อย่างรวดเร็ว
...
NCCL_NSOCKS_PERTHREAD
คือจำนวน network socket ที่ถูกใช้สำหรับแต่ละ thread ของ CPU
...
รายละเอียดในการตั้งค่า
หากกำหนด NCCL_SOCKET_NTHREADS
เป็น 8 ; CPU จะใช้งาน 8 Threads
...
และตั้งค่า NCCL_NSOCKS_PERTHREAD
เป็น 2 ; แต่ละ Thread จะใช้ Network Socket 2 ตัวในการสื่อสาร
ดังนั้นจะใช้ทั้งสิ้น 16 Network Socket ในการสื่อสาร
Info |
---|
[1] สำหรับเครื่อง 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