หลาย GPU ด้วย NCCL
การสื่อสารแบบรวมเพื่อการขยายระบบ
หลาย GPU ด้วย NCCL เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทำเองยิ่งยากเมื่อขยายระบบ
การเขียนการคัดลอกระหว่างอุปกรณ์ด้วยตนเองสำหรับ GPU หลายตัวจะยุ่งยากอย่างรวดเร็ว หากต้องการขยายระบบจริง คุณควรใช้ไลบรารีที่สร้างมาเพื่อการสื่อสารแบบ รวมกลุ่ม
มารู้จัก NCCL
คำตอบของ NVIDIA คือ NCCL ไลบรารีการสื่อสารแบบรวมกลุ่ม ซึ่งย้ายข้อมูลระหว่าง GPU โดยใช้ลิงก์ที่เร็วที่สุดเท่าที่หาได้โดยอัตโนมัติ
การดำเนินการรวมกลุ่มคืออะไร
การดำเนินการรวมกลุ่มคือการดำเนินการหนึ่งอย่างที่ GPU ทุกตัวเข้าร่วม เช่น การหาผลรวมของค่าที่อยู่บนการ์ดแต่ละใบ อุปกรณ์ทั้งหมดจะร่วมมือกันผ่านการเรียกใช้ครั้งเดียว
การรวมกลุ่มหลัก: AllReduce
ตัวหลักคือ AllReduce ซึ่งรวมบัฟเฟอร์จาก GPU ทุกตัวเข้าด้วยกัน เช่น ด้วยการบวก แล้วส่งผลลัพธ์เดียวกันกลับไปยังทุกตัว
ncclAllReduce(send, recv, n, ncclFloat, ncclSum, comm, stream);การรวมกลุ่มแบบอื่น
NCCL ยังมี Broadcast สำหรับแชร์ข้อมูลจาก GPU หนึ่งไปยังทุกตัว รวมถึง AllGather และ ReduceScatter สำหรับรูปแบบการแลกเปลี่ยนข้อมูลทั่วไปแบบอื่น
ตัวสื่อสาร
GPU ที่สื่อสารร่วมกันจะรวมเป็นกลุ่มที่ติดตามด้วย ตัวสื่อสาร การเรียกใช้แบบรวมกลุ่มทุกครั้งจะส่งตัวจัดการนี้ไป เพื่อให้ NCCL ทราบว่ามีผู้เข้าร่วมใดบ้าง
อันดับใช้ระบุ GPU
ภายในตัวสื่อสาร GPU แต่ละตัวจะได้รับหมายเลขที่เรียกว่า อันดับ เริ่มจาก 0 อันดับช่วยให้คุณระบุได้ว่าใครส่ง ใครรับ และใครเป็นต้นทางหลัก
สร้างตัวสื่อสาร
สำหรับ GPU ที่อยู่ในกระบวนการเดียวกัน ncclCommInitAll จะตั้งค่าตัวสื่อสารทั้งหมดพร้อมกันจากรายการรหัสอุปกรณ์ที่คุณส่งให้
ncclCommInitAll(comms, nGpus, devs);รองรับสตรีม
การเรียกใช้ NCCL ทุกครั้งรับ สตรีมหนึ่งรายการ การดำเนินการจะเข้าคิวที่นั่นและทำงานไปพร้อมกับเคอร์เนลของคุณ ทำให้การสื่อสารซ้อนทับกับการคำนวณได้
จัดกลุ่มการเรียกใช้
หากต้องการดำเนินการรวมกลุ่มบน GPU หลายตัวโดยไม่เกิดการหยุดรอกัน ให้ครอบการเรียกใช้ไว้ระหว่าง ncclGroupStart และ ncclGroupEnd เพื่อให้ NCCL เปิดใช้งานทั้งหมดพร้อมกัน
ncclGroupStart();
// per-GPU calls
ncclGroupEnd();เหตุใดจึงเหมาะกับการฝึกโมเดล
การเรียนรู้เชิงลึกจะซิงโครไนซ์ค่าความชันระหว่าง GPU ในทุกขั้นตอน AllReduce ทำสิ่งนั้นพอดี นี่จึงเป็นเหตุผลที่ NCCL ขับเคลื่อนการฝึกหลาย GPU แทบทั้งหมด
ตรวจสอบอย่างรวดเร็ว
ลองนึกดูว่าการรวมกลุ่มของ NCCL แบบใดหาผลรวมของบัฟเฟอร์ข้าม GPU และส่งผลลัพธ์กลับไปยังทุกตัว
สรุป
NCCL ทำงานแบบรวมกลุ่ม เช่น AllReduce ผ่านลิงก์ความเร็วสูง โดยจัดการผ่าน ตัวสื่อสารของ GPU ที่มีลำดับหมายเลข ซึ่งเป็นหัวใจสำคัญของการฝึกโมเดลด้วย GPU หลายตัว เรียนจบหลักสูตรแล้ว ✨
คำถามที่พบบ่อย
บทเรียน “หลาย GPU ด้วย NCCL” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “หลาย GPU ด้วย NCCL” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “หลาย GPU ด้วย NCCL”
การสื่อสารแบบรวมเพื่อการขยายระบบ คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “หลาย GPU ด้วย NCCL” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม
ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ