คำตอบสั้นๆ: ใช้ GPU ของ NVIDIA สำหรับการฝึก AI โดยตรวจสอบให้แน่ใจก่อนว่าไดรเวอร์และ GPU สามารถมองเห็นได้ด้วย nvidia-smi จากนั้นติดตั้งเฟรมเวิร์ก/ชุด CUDA ที่เข้ากันได้ และทำการทดสอบ "โมเดล + ชุดข้อมูลแบบแบตช์บน CUDA" ขนาดเล็ก หากพบปัญหาหน่วยความจำไม่เพียงพอ ให้ลดขนาดชุดข้อมูลแบบแบตช์และใช้ความแม่นยำแบบผสม พร้อมทั้งตรวจสอบการใช้งาน หน่วยความจำ และอุณหภูมิอย่างสม่ำเสมอ
ประเด็นสำคัญ:
การตรวจสอบเบื้องต้น : เริ่มต้นด้วย nvidia-smi ; แก้ไขปัญหาการมองเห็นไดรเวอร์ก่อนติดตั้งเฟรมเวิร์ก
ความเข้ากันได้ของส่วนประกอบ : รักษาเวอร์ชันของไดรเวอร์, CUDA runtime และเฟรมเวิร์กให้สอดคล้องกันเพื่อป้องกันการขัดข้องและการติดตั้งที่ไม่เสถียร
ความสำเร็จเล็กๆ : ยืนยันว่าการส่งผ่านข้อมูลไปข้างหน้าเพียงครั้งเดียวสามารถทำงานได้บน CUDA ก่อนที่จะขยายขนาดการทดลอง
การบริหารจัดการ VRAM : เน้นการใช้ความแม่นยำแบบผสม การสะสมค่าความชัน และการทำจุดตรวจสอบ เพื่อรองรับโมเดลขนาดใหญ่ขึ้น
สร้างนิสัยการตรวจสอบ : ติดตามการใช้งาน รูปแบบการใช้หน่วยความจำ พลังงาน และอุณหภูมิ เพื่อให้คุณสามารถตรวจพบปัญหาคอขวดได้ตั้งแต่เนิ่นๆ

บทความที่คุณอาจสนใจอ่านต่อหลังจากบทความนี้:
🔗 วิธีการสร้างเอเจนต์ AI
ออกแบบขั้นตอนการทำงาน เครื่องมือ หน่วยความจำ และระบบรักษาความปลอดภัยสำหรับตัวแทนของคุณ.
🔗 วิธีใช้งานโมเดล AI
ตั้งค่าสภาพแวดล้อม บรรจุโมเดล และจัดส่งไปยังระบบการผลิตได้อย่างน่าเชื่อถือ.
🔗 วิธีการวัดประสิทธิภาพ AI
เลือกตัวชี้วัด ดำเนินการประเมินผล และติดตามผลการดำเนินงานเมื่อเวลาผ่านไป.
🔗 วิธีการใช้ AI ในการทำงานอัตโนมัติ
ทำให้งานที่ซ้ำซากจำเจเป็นไปโดยอัตโนมัติด้วยการแจ้งเตือน ขั้นตอนการทำงาน และการผสานรวมระบบต่างๆ.
1) ภาพรวมใหญ่ - สิ่งที่คุณทำเมื่อคุณ "ฝึกฝนบน GPU" 🧠⚡
เมื่อคุณฝึกโมเดล AI คุณจะต้องคำนวณเมทริกซ์จำนวนมหาศาล GPU ถูกสร้างมาเพื่อรองรับงานแบบขนานประเภทนี้ ดังนั้นเฟรมเวิร์กอย่าง PyTorch, TensorFlow และ JAX จึงสามารถถ่ายโอนงานหนักๆ ไปยัง GPU ได้ ( เอกสาร PyTorch CUDA , การติดตั้ง TensorFlow (pip) , คู่มือเริ่มต้นใช้งาน JAX )
ในทางปฏิบัติ “การใช้ GPU ของ NVIDIA สำหรับการฝึกอบรม” โดยทั่วไปหมายถึง:
-
พารามิเตอร์ของโมเดลของคุณ (ส่วนใหญ่) จะถูกจัดเก็บไว้ใน VRAM ของ GPU
-
ในแต่ละขั้นตอน ข้อมูลของคุณจะถูกย้ายจาก RAM ไปยัง VRAM
-
การส่งผ่านข้อมูลไปข้างหน้าและการส่งผ่านข้อมูลย้อนกลับของคุณจะทำงานบนเคอร์เนล CUDA ( คู่มือการเขียนโปรแกรม CUDA )
-
การอัปเดตตัวปรับแต่งประสิทธิภาพของคุณจะเกิดขึ้นบน GPU (ในอุดมคติ)
-
คุณตรวจสอบอุณหภูมิ หน่วยความจำ และการใช้งาน เพื่อป้องกันไม่ให้เครื่องเสียหาย 🔥 ( เอกสาร NVIDIA nvidia-smi )
ถ้าฟังดูเยอะไปก็ไม่ต้องกังวลไปค่ะ ส่วนใหญ่ก็เป็นแค่รายการตรวจสอบและนิสัยเล็กๆ น้อยๆ ที่คุณจะสร้างขึ้นมาได้เรื่อยๆ เท่านั้นเอง.
2) อะไรคือสิ่งที่ทำให้การตั้งค่าการฝึกอบรม AI ด้วย GPU ของ NVIDIA เป็นเวอร์ชันที่ดี 🤌
นี่คือส่วนที่ควรระมัดระวังเป็นอย่างยิ่ง การตั้งค่าที่ดีสำหรับ การใช้งาน GPU ของ NVIDIA สำหรับการฝึกอบรม AI ควรเป็นแบบที่ราบรื่น ความราบรื่นนำไปสู่ความเสถียร ความเสถียรนำไปสู่ความเร็ว และความเร็วก็คือ...เร็ว 😄
ชุดฝึกซ้อมที่ดีมักประกอบด้วย:
-
มี VRAM เพียงพอ สำหรับขนาดแบทช์ + โมเดล + สถานะของตัวปรับแต่งประสิทธิภาพ
-
VRAM ก็เหมือนพื้นที่ในกระเป๋าเดินทาง คุณอาจจัดเก็บอย่างชาญฉลาดได้ แต่คุณไม่สามารถจัดเก็บได้ไม่จำกัด.
-
-
ชุดซอฟต์แวร์ที่เข้ากันได้ (ไดรเวอร์ + รันไทม์ CUDA + ความเข้ากันได้ของเฟรมเวิร์ก) (เช่น PyTorch Get Started (ตัวเลือก CUDA) , การติดตั้ง TensorFlow (pip) )
-
พื้นที่จัดเก็บข้อมูลความเร็วสูง (NVMe ช่วยได้มากสำหรับชุดข้อมูลขนาดใหญ่)
-
CPU และ RAM ที่ดีพอสมควร เพื่อไม่ให้การโหลดข้อมูลทำให้ GPU ทำงานหนักเกินไป ( คู่มือการปรับแต่งประสิทธิภาพ PyTorch )
-
ระบบระบายความร้อนและกำลังไฟสำรอง (สิ่งที่ถูกมองข้ามจนกว่าจะรู้ความจริง 😬)
-
สภาพแวดล้อมที่สามารถสร้างซ้ำได้ (venv/conda หรือคอนเทนเนอร์) เพื่อไม่ให้การอัปเกรดกลายเป็นความวุ่นวาย ( ภาพรวม NVIDIA Container Toolkit )
และอีกสิ่งหนึ่งที่คนส่วนใหญ่มองข้ามไป:
-
เป็นนิสัยในการตรวจสอบ – คุณตรวจสอบหน่วยความจำและการใช้งาน GPU เหมือนกับการตรวจสอบกระจกมองข้างขณะขับรถ ( เอกสาร NVIDIA nvidia-smi )
3) ตารางเปรียบเทียบ - วิธีฝึกฝนการใช้งาน GPU ของ NVIDIA ที่ได้รับความนิยม (พร้อมข้อควรระวัง) 📊
ด้านล่างนี้คือคู่มือฉบับย่อที่จะช่วยคุณเลือกสินค้าที่เหมาะสม ราคาที่แสดงเป็นเพียงราคาโดยประมาณ (เพราะราคาจริงอาจแตกต่างกันไป) และใช่แล้ว หนึ่งในช่องเหล่านี้อาจดูวกวนไปบ้าง ซึ่งเป็นความตั้งใจ.
| เครื่องมือ/วิธีการ | เหมาะที่สุดสำหรับ | ราคา | เหตุผลที่มันได้ผล (ส่วนใหญ่) |
|---|---|---|---|
| PyTorch (เวอร์ชันพื้นฐาน) PyTorch | คนส่วนใหญ่ โครงการส่วนใหญ่ | ฟรี | ระบบนิเวศขนาดใหญ่ที่ยืดหยุ่น แก้ไขข้อผิดพลาดได้ง่าย และทุกคนก็มีสิทธิ์แสดงความคิดเห็น |
| PyTorch Lightning เอกสาร Lightning | ทีม การฝึกอบรมที่มีโครงสร้าง | ฟรี | ลดโค้ดซ้ำซ้อน ทำให้ลูปสะอาดขึ้น บางครั้งรู้สึกเหมือน "เวทมนตร์" จนกระทั่งมันไม่ใช่ |
| ทรานส์ฟอร์เมอร์หน้ากอด + เอกสาร | การปรับแต่ง NLP + LLM ให้เหมาะสม | ฟรี | การฝึกฝนที่มาพร้อมแบตเตอรี่ ค่าเริ่มต้นที่ยอดเยี่ยม ประสบความสำเร็จอย่างรวดเร็ว 👍 |
| เร่ง ความเร็ว เอกสารเร่งความเร็ว | ใช้งาน GPU หลายตัวได้อย่างราบรื่น | ฟรี | ทำให้ DDP น่ารำคาญน้อยลง เหมาะสำหรับการขยายระบบโดยไม่ต้องเขียนโค้ดใหม่ทั้งหมด |
| เอกสาร DeepSpeed | โมเดลขนาดใหญ่ เทคนิคการใช้หน่วยความจำ | ฟรี | ZeRO, การถ่ายโอนงาน, การปรับขนาด - อาจจะยุ่งยากเล็กน้อย แต่ก็คุ้มค่าเมื่อทำได้สำเร็จ |
| TensorFlow + Keras TF | ไปป์ไลน์ที่เหมือนใช้งานจริง | ฟรี | เครื่องมือทรงประสิทธิภาพ กระบวนการติดตั้งใช้งานง่าย บางคนชอบ บางคนก็ไม่ค่อยชอบ |
| JAX + Flax เริ่มต้นใช้งาน JAX / เอกสาร Flax | นักวิจัย + ผู้เชี่ยวชาญด้านความเร็ว | ฟรี | การคอมไพล์ไฟล์ XLA นั้นเร็วมาก แต่การดีบั๊กอาจรู้สึก...ซับซ้อน |
| NVIDIA NeMo ภาพรวมของ NeMo | ขั้นตอนการพูด + LLM | ฟรี | ชุดโปรแกรมที่ปรับแต่งมาเพื่อ NVIDIA โดยเฉพาะ พร้อมสูตรอาหารที่ยอดเยี่ยม ให้ความรู้สึกเหมือนกำลังทำอาหารด้วยเตาอบสุดหรู 🍳 |
| Docker + NVIDIA Container Toolkit ภาพรวมของชุดเครื่องมือ | สภาพแวดล้อมที่สามารถสร้างซ้ำได้ | ฟรี | “ใช้ได้กับเครื่องของฉัน” กลายเป็น “ใช้ได้กับเครื่องของเรา” (ส่วนใหญ่แล้ว) |
4) ขั้นตอนแรก - ตรวจสอบว่า GPU ของคุณได้รับการมองเห็นอย่างถูกต้องหรือไม่ 🕵️♂️
ก่อนที่จะติดตั้งโปรแกรมมากมายหลายอย่าง โปรดตรวจสอบพื้นฐานให้เรียบร้อยก่อน.
สิ่งที่คุณอยากให้เป็นจริง:
-
เครื่องมองเห็น GPU
-
ไดรเวอร์ NVIDIA ติดตั้งอย่างถูกต้องแล้ว
-
GPU ไม่ได้ติดอยู่กับการทำงานอย่างอื่น
-
คุณสามารถสอบถามได้อย่างน่าเชื่อถือ
เช็คแบบคลาสสิกมีรูปแบบดังนี้:
-
nvidia-smi( เอกสาร NVIDIA nvidia-smi )
สิ่งที่คุณกำลังมองหา:
-
ชื่อ GPU (เช่น RTX, A-series เป็นต้น)
-
ไดรเวอร์เวอร์ชัน
-
การใช้งานหน่วยความจำ
-
กระบวนการที่กำลังทำงาน ( เอกสาร NVIDIA nvidia-smi )
หาก nvidia-smi ล้มเหลว ให้หยุดทันที อย่าเพิ่งติดตั้งเฟรมเวิร์กใดๆ มันเหมือนกับการพยายามอบขนมปังในขณะที่เตาอบไม่ได้เสียบปลั๊ก ( อินเทอร์เฟซการจัดการระบบ NVIDIA (NVSMI) )
หมายเหตุเล็กๆ น้อยๆ จากผู้ใช้: บางครั้ง nvidia-smi อาจทำงานได้ แต่การฝึกฝนของคุณอาจล้มเหลวเนื่องจากรันไทม์ CUDA ที่เฟรมเวิร์กของคุณใช้ไม่ตรงกับความคาดหวังของไดรเวอร์ นั่นไม่ใช่เพราะคุณโง่ แต่มันเป็นอย่างนั้นแหละ 😭 ( เริ่มต้นใช้งาน PyTorch (ตัวเลือก CUDA) , ติดตั้ง TensorFlow (pip) )
5) สร้างซอฟต์แวร์พื้นฐาน - ไดรเวอร์, CUDA, cuDNN และ "กระบวนการความเข้ากันได้" 💃
นี่คือจุดที่ผู้คนเสียเวลาไปหลายชั่วโมง เคล็ดลับคือ: เลือกเส้นทางหนึ่งแล้วยึดมั่นในเส้นทาง นั้น
ตัวเลือก A: CUDA ที่มาพร้อมกับเฟรมเวิร์ก (มักเป็นวิธีที่ง่ายที่สุด)
PyTorch หลายเวอร์ชันมาพร้อมกับรันไทม์ CUDA ในตัว ซึ่งหมายความว่าคุณไม่จำเป็นต้องติดตั้งชุดเครื่องมือ CUDA แบบเต็มรูปแบบทั่วทั้งระบบ คุณเพียงแค่ต้องการไดรเวอร์ NVIDIA ที่เข้ากันได้เท่านั้น ( เริ่มต้นใช้งาน PyTorch (ตัวเลือก CUDA) , เวอร์ชัน PyTorch ก่อนหน้า (ไฟล์ CUDA) )
ข้อดี:
-
ชิ้นส่วนเคลื่อนไหวน้อยลง
-
ติดตั้งง่ายขึ้น
-
สามารถทำซ้ำได้แม่นยำยิ่งขึ้นในแต่ละสภาพแวดล้อม
ข้อเสีย:
-
ถ้าคุณสลับสภาพแวดล้อมไปมาอย่างไม่ระมัดระวัง คุณอาจสับสนได้
ตัวเลือก B: ชุดเครื่องมือ CUDA ของระบบ (ควบคุมได้มากขึ้น)
คุณติดตั้ง CUDA toolkit บนระบบและปรับแต่งทุกอย่างให้สอดคล้องกับ CUDA toolkit ( เอกสารประกอบ CUDA Toolkit )
ข้อดี:
-
ควบคุมการสร้างแบบกำหนดเองได้มากขึ้น รวมถึงเครื่องมือพิเศษบางอย่าง
-
มีประโยชน์สำหรับการรวบรวมคำสั่งบางอย่าง
ข้อเสีย:
-
วิธีอื่นๆ ที่จะทำให้เวอร์ชันไม่ตรงกันและร้องไห้อย่างเงียบๆ
cuDNN และ NCCL ในแง่ของมนุษย์
-
cuDNN ช่วยเร่งความเร็วในการประมวลผลพื้นฐานของการเรียนรู้เชิงลึก (เช่น การแปลงแบบคอนโวลูชัน บิต RNN เป็นต้น) ( เอกสาร NVIDIA cuDNN )
-
NCCL คือไลบรารีสำหรับการสื่อสารระหว่าง GPU อย่างรวดเร็ว สำหรับการฝึกอบรมโดยใช้ GPU หลายตัว ( ภาพรวมของ NCCL )
หากคุณทำการฝึกอบรมโดยใช้ GPU หลายตัว NCCL คือเพื่อนที่ดีที่สุดของคุณ และบางครั้งก็อาจเป็นเพื่อนร่วมห้องที่เอาแต่ใจของคุณด้วย ( ภาพรวมของ NCCL )
6) การทดลองใช้งาน GPU ครั้งแรกของคุณ (โดยใช้ตัวอย่างจาก PyTorch) ✅🔥
ในการปฏิบัติตาม วิธีการใช้ GPU ของ NVIDIA สำหรับการฝึกอบรม AI คุณไม่จำเป็นต้องเริ่มต้นด้วยโครงการขนาดใหญ่ คุณต้องการความสำเร็จเล็กๆ น้อยๆ ก่อน
แนวคิดหลัก:
-
ตรวจจับอุปกรณ์
-
ย้ายโมเดลไปยัง GPU
-
ย้ายเทนเซอร์ไปยัง GPU
-
ยืนยันว่าการส่งผ่านข้อมูลไปข้างหน้าทำงานที่นั่น ( เอกสาร PyTorch CUDA )
สิ่งที่ฉันมักตรวจสอบความถูกต้องก่อนเสมอ:
-
torch.cuda.is_available()ส่งคืนค่าTrue( torch.cuda.is_available ) -
next(model.parameters()).deviceแสดงผลเป็น cuda( ฟอรัม PyTorch: ตรวจสอบโมเดลบน CUDA ) -
การส่งผ่านข้อมูลแบบกลุ่มเดียวไปข้างหน้าจะไม่เกิดข้อผิดพลาด
-
หน่วยความจำ GPU จะเพิ่มขึ้นเมื่อคุณเริ่มฝึกฝน (เป็นสัญญาณที่ดี!) ( เอกสาร NVIDIA nvidia-smi )
คำถามยอดฮิตที่มักถูกมองข้ามคือ “ทำไมมันถึงช้า?”
-
ตัวโหลดข้อมูลของคุณทำงานช้าเกินไป (GPU ค้างอยู่ในสถานะรอ) ( คู่มือการปรับแต่งประสิทธิภาพของ PyTorch )
-
คุณลืมย้ายข้อมูลไปยัง GPU (ขออภัย)
-
ขนาดชุดข้อมูลเล็กมาก (GPU ถูกใช้งานไม่เต็มประสิทธิภาพ)
-
คุณกำลังใช้ CPU ประมวลผลล่วงหน้าอย่างหนักในขั้นตอนการฝึกอบรม
ใช่แล้ว GPU ของคุณมักจะดูเหมือน "ไม่ได้ทำงานหนักมากนัก" หากปัญหาคอขวดอยู่ที่การประมวลผลข้อมูล มันก็เหมือนกับการจ้างนักแข่งรถแล้วให้เขารอเติมน้ำมันทุกรอบนั่นแหละ.
7) เกม VRAM - ขนาดแบตช์ ความแม่นยำแบบผสม และการป้องกันไม่ให้ VRAM ระเบิด 💥🧳
ปัญหาการฝึกฝนภาคปฏิบัติส่วนใหญ่มีสาเหตุมาจากหน่วยความจำ หากคุณจะเรียนรู้ทักษะใดทักษะหนึ่ง จงเรียนรู้การจัดการ VRAM.
วิธีลดการใช้หน่วยความจำอย่างรวดเร็ว
-
ความแม่นยำแบบผสม (FP16/BF16)
-
โดยทั่วไปแล้ว ความเร็วจะเพิ่มขึ้นอย่างมากด้วย ถือเป็นสถานการณ์ที่ได้ประโยชน์ทั้งสองฝ่าย 😌 ( เอกสาร PyTorch AMP , คู่มือความแม่นยำแบบผสมของ TensorFlow )
-
-
การสะสมความลาดชัน
-
จำลองขนาดแบทช์ที่ใหญ่ขึ้นโดยการสะสมเกรเดียนต์ในหลายขั้นตอน ( เอกสารการฝึกอบรม Transformers (การสะสมเกรเดียนต์, fp16) )
-
-
ความยาวลำดับที่เล็กลง / ขนาดของพืชผล
-
โหดร้ายแต่ได้ผล
-
-
การตรวจสอบการเปิดใช้งาน
-
แลกเปลี่ยนการประมวลผลกับหน่วยความจำ (คำนวณการทำงานใหม่ระหว่างการย้อนกลับ) ( torch.utils.checkpoint )
-
-
ใช้ตัวปรับแต่งที่มีน้ำหนักเบากว่า
-
ตัวปรับแต่งบางตัวจะเก็บสถานะเพิ่มเติมที่ใช้หน่วยความจำ VRAM จำนวนมาก
-
ช่วงเวลาที่รู้สึกว่า “ทำไม VRAM ยังเต็มอยู่หลังจากที่ฉันหยุดทำงานแล้ว?”
เฟรมเวิร์กมักจะ แคชหน่วยความจำ เพื่อเพิ่มประสิทธิภาพ นี่เป็นเรื่องปกติ อาจดูน่ากลัว แต่ไม่ได้หมายความว่าจะเป็นการรั่วไหลเสมอไป คุณต้องเรียนรู้ที่จะอ่านรูปแบบ ( ความหมายของ PyTorch CUDA: การแคชตัวจัดสรรหน่วยความจำ )
นิสัยที่ปฏิบัติได้จริง:
-
ตรวจสอบความแตกต่างระหว่างหน่วยความจำที่จัดสรรและหน่วยความจำที่สงวนไว้ (ขึ้นอยู่กับเฟรมเวิร์ก) ( ความหมายของ PyTorch CUDA: ตัวจัดสรรแคช )
-
อย่าตกใจกับตัวเลขน่ากลัวตัวแรกนะ 😅
8) ทำให้ GPU ทำงานได้อย่างเต็มประสิทธิภาพ - การปรับแต่งประสิทธิภาพที่คุ้มค่ากับเวลาของคุณ 🏎️
การทำให้ “การฝึกฝนด้วย GPU ใช้งานได้” คือขั้นตอนแรก การทำให้มันใช้ งานได้เร็ว คือขั้นตอนที่สอง
การเพิ่มประสิทธิภาพที่มีผลกระทบสูง
-
เพิ่มขนาดชุดการผลิต (จนกว่าจะเริ่มมีปัญหา แล้วค่อยลดลงเล็กน้อย)
-
ใช้หน่วยความจำแบบตรึง (pinned memory) ใน dataloader (เพื่อการคัดลอกข้อมูลจากโฮสต์ไปยังอุปกรณ์ที่เร็วขึ้น) ( คู่มือการปรับแต่งประสิทธิภาพของ PyTorch , บทช่วยสอน pin_memory/non_blocking ของ PyTorch )
-
เพิ่มจำนวน worker ของ dataloader (ระวัง มากเกินไปอาจส่งผลเสียได้) ( คู่มือการปรับแต่งประสิทธิภาพของ PyTorch )
-
ดึงข้อมูลชุดล่วงหน้า เพื่อไม่ให้ GPU ว่างงาน
-
ควรใช้ fused ops / optimized kernels เมื่อมีให้ใช้งาน
-
ใช้ความแม่นยำแบบผสม (เพราะมันดีมากจริงๆ) ( เอกสาร PyTorch AMP )
อุปสรรคที่ถูกมองข้ามมากที่สุด
ขั้นตอนการจัดเก็บและประมวลผลข้อมูลของคุณ หากชุดข้อมูลของคุณมีขนาดใหญ่และจัดเก็บอยู่บนดิสก์ที่ทำงานช้า GPU ของคุณก็จะกลายเป็นเครื่องทำความร้อนราคาแพง เครื่องทำความร้อนที่ล้ำสมัยและแวววาวมาก ๆ.
นอกจากนี้ ขอสารภาพเล็กน้อยว่า ผมเคย "ปรับแต่ง" โมเดลเป็นเวลาหนึ่งชั่วโมง แล้วจึงรู้ว่าการบันทึกข้อมูลเป็นคอขวด การพิมพ์ข้อมูลมากเกินไปอาจทำให้การฝึกฝนช้าลง ใช่แล้ว มันเป็นเช่นนั้นจริงๆ.
9) การฝึกอบรมด้วย GPU หลายตัว - DDP, NCCL และการปรับขนาดโดยไม่เกิดความโกลาหล 🧩🤝
เมื่อคุณต้องการความเร็วที่มากขึ้นหรือโมเดลขนาดใหญ่ขึ้น คุณก็ต้องเลือกใช้การ์ดจอหลายตัว (multi-GPU) ซึ่งนี่แหละคือจุดที่เรื่องมันเริ่มซับซ้อนขึ้น.
แนวทางทั่วไป
-
การประมวลผลข้อมูลแบบขนาน (DDP)
-
แบ่งชุดข้อมูลไปยัง GPU ต่างๆ และซิงค์ค่าความชัน
-
โดยปกติแล้วจะเป็นตัวเลือก "ดี" ตามค่าเริ่มต้น (ตาม เอกสาร PyTorch DDP )
-
-
โมเดลขนาน / เทนเซอร์ขนาน
-
แบ่งโมเดลออกเป็นส่วนๆ แล้วใช้ GPU หลายตัว (สำหรับโมเดลขนาดใหญ่มาก)
-
-
ท่อขนาน
-
แบ่งเลเยอร์ของโมเดลออกเป็นขั้นตอน (เหมือนสายการผลิต แต่ใช้กับเทนเซอร์)
-
ถ้าคุณเพิ่งเริ่มต้น การฝึกอบรมแบบ DDP คือจุดที่เหมาะสมที่สุด ( ดูบทช่วยสอน PyTorch DDP )
เคล็ดลับการใช้งาน GPU หลายตัวแบบใช้งานได้จริง
-
ตรวจสอบให้แน่ใจว่า GPU มีประสิทธิภาพใกล้เคียงกัน (การผสมอาจทำให้เกิดคอขวด)
-
การเชื่อมต่อที่สำคัญ: NVLink เทียบกับ PCIe มีความสำคัญต่องานที่ต้องใช้การซิงค์ข้อมูลสูง ( ภาพรวม NVIDIA NVLink , เอกสาร NVIDIA NVLink )
-
รักษาสมดุลของขนาดชุดข้อมูลต่อ GPU
-
อย่ามองข้าม CPU และพื้นที่จัดเก็บข้อมูล - การใช้งาน GPU หลายตัวอาจทำให้เกิดปัญหาคอขวดด้านข้อมูลได้
ใช่แล้ว ข้อผิดพลาดของ NCCL อาจทำให้รู้สึกเหมือนปริศนาที่ซับซ้อน และมีคำถามตามมาว่า “ทำไมต้องตอนนี้” คุณไม่ได้ถูกสาปแช่งหรอกนะ อาจจะ ( ภาพรวมของ NCCL )
10) การติดตามและวิเคราะห์ข้อมูล - สิ่งที่ไม่น่าดึงดูดใจ แต่ช่วยประหยัดเวลาได้หลายชั่วโมง 📈🧯
คุณไม่จำเป็นต้องมีแดชบอร์ดหรูหราเพื่อเริ่มต้น คุณแค่ต้องสังเกตเห็นเมื่อมีสิ่งผิดปกติเกิดขึ้น.
สัญญาณสำคัญที่ควรจับตา
-
การใช้งาน GPU : สูงอย่างต่อเนื่องหรือผันผวน?
-
การใช้งานหน่วยความจำ : คงที่ เพิ่มขึ้น หรือผิดปกติ?
-
การใช้พลังงาน : ต่ำกว่าปกติ อาจหมายถึงการใช้งานไม่เต็มประสิทธิภาพ
-
อุณหภูมิ : อุณหภูมิสูงต่อเนื่องอาจส่งผลต่อประสิทธิภาพการทำงาน
-
การใช้งาน CPU : ปัญหาเกี่ยวกับการประมวลผลข้อมูลมักปรากฏที่นี่ ( คู่มือการปรับแต่งประสิทธิภาพของ PyTorch )
แนวคิดการวิเคราะห์บุคลิกภาพ (ฉบับย่อ)
-
หากการใช้งาน GPU ต่ำ แสดงว่าเกิดปัญหาคอขวดด้านข้อมูลหรือ CPU
-
ถ้า GPU มีประสิทธิภาพสูงแต่ทำงานช้า - อาจเกิดจากประสิทธิภาพของเคอร์เนลต่ำ ความแม่นยำต่ำ หรือสถาปัตยกรรมของโมเดลไม่ดี
-
หากความเร็วในการฝึกฝนลดลงโดยไม่ทราบสาเหตุ - อาจเกิดจากความร้อนสูงเกินไป กระบวนการทำงานเบื้องหลัง หรือปัญหาการรับส่งข้อมูล
ฉันรู้ว่าการเฝ้าติดตามอาจฟังดูไม่สนุก แต่ก็เหมือนกับการใช้ไหมขัดฟันนั่นแหละ น่ารำคาญหน่อย แต่แล้วชีวิตคุณก็จะดีขึ้นทันที.
11) การแก้ไขปัญหา - สาเหตุที่พบได้บ่อย (และสาเหตุที่ไม่ค่อยพบเห็น) 🧰😵💫
ส่วนนี้โดยพื้นฐานแล้วก็คือ “ปัญหาเดิมๆ ห้าประเด็น ตลอดไป”
ปัญหา: หน่วยความจำ CUDA ไม่เพียงพอ
การแก้ไข:
-
ลดขนาดชุดการผลิต
-
ใช้ความแม่นยำแบบผสม ( เอกสาร PyTorch AMP , คู่มือการใช้งานความแม่นยำแบบผสมของ TensorFlow )
-
การสะสมค่าความชัน ( เอกสารการฝึกอบรม Transformers (การสะสมค่าความชัน, fp16) )
-
การเปิดใช้งานจุดตรวจสอบ ( torch.utils.checkpoint )
-
ปิดกระบวนการ GPU อื่นๆ
ปัญหา: การฝึกอบรมทำงานบน CPU โดยไม่ตั้งใจ
การแก้ไข:
-
ตรวจสอบให้แน่ใจว่าได้ย้ายโมเดลไปยัง
CUDA แล้ว -
ตรวจสอบให้แน่ใจว่าเทนเซอร์ถูกย้ายไปยัง
CUDA แล้ว -
ตรวจสอบการตั้งค่าอุปกรณ์ของเฟรมเวิร์ก ( เอกสาร PyTorch CUDA )
ปัญหา: การทำงานผิดพลาดอย่างผิดปกติ หรือการเข้าถึงหน่วยความจำโดยไม่ได้รับอนุญาต
การแก้ไข:
-
ตรวจสอบความเข้ากันได้ของไดรเวอร์และรันไทม์ ( เริ่มต้นใช้งาน PyTorch (ตัวเลือก CUDA) , ติดตั้ง TensorFlow (pip) )
-
ลองใช้สภาพแวดล้อมที่สะอาด
-
ลดการดำเนินการแบบกำหนดเอง
-
ลองรันใหม่ด้วยการตั้งค่าที่ค่อนข้างแน่นอนเพื่อจำลองสถานการณ์
ปัญหา: ช้ากว่าที่คาดไว้
การแก้ไข:
-
ตรวจสอบอัตราการส่งข้อมูลของ DataLoader ( คู่มือการปรับแต่งประสิทธิภาพของ PyTorch )
-
เพิ่มขนาดชุดการผลิต
-
ลดการบันทึกข้อมูล
-
เปิดใช้งานความแม่นยำแบบผสม ( เอกสาร PyTorch AMP )
-
การแบ่งขั้นตอนโปรไฟล์ตามเวลา
ปัญหา: การค้างขณะใช้งาน GPU หลายตัว
การแก้ไข:
-
ตรวจสอบการตั้งค่าแบ็กเอนด์ให้ถูกต้อง ( ดูเอกสารประกอบของ PyTorch )
-
ตรวจสอบการตั้งค่าสภาพแวดล้อมของ NCCL (อย่างระมัดระวัง) ( ภาพรวมของ NCCL )
-
ทดสอบ GPU ตัวเดียวก่อน
-
ตรวจสอบให้แน่ใจว่าเครือข่าย/การเชื่อมต่ออยู่ในสภาพดี
หมายเหตุเพิ่มเติมเล็กน้อย: บางครั้งวิธีแก้ปัญหาคือการรีบูตเครื่องจริงๆ มันอาจฟังดูตลก แต่ได้ผล คอมพิวเตอร์ก็เป็นแบบนั้นแหละ.
12) ต้นทุนและความเหมาะสม - เลือกการ์ดจอ NVIDIA และชุดอุปกรณ์ที่เหมาะสมโดยไม่ต้องคิดมากเกินไป 💸🧠
ไม่ใช่ทุกโปรเจ็กต์ที่ต้องการ GPU ที่ทรงพลังที่สุดเสมอไป บางครั้งคุณอาจต้องการ GPU ที่เพียงพอต่อความ
หากคุณกำลังปรับแต่งโมเดลขนาดกลาง
-
ให้ความสำคัญกับ VRAM และความเสถียร
-
การใช้ความแม่นยำแบบผสมช่วยได้มาก ( เอกสาร PyTorch AMP , คู่มือการใช้งานความแม่นยำแบบผสมของ TensorFlow )
-
โดยทั่วไปแล้ว คุณสามารถใช้การ์ดจอที่มีประสิทธิภาพสูงเพียงตัวเดียวก็เพียงพอแล้ว
หากคุณกำลังฝึกโมเดลขนาดใหญ่ตั้งแต่เริ่มต้น
-
คุณจะต้องใช้การ์ดจอหลายตัวหรือหน่วยความจำ VRAM ขนาดใหญ่มาก
-
คุณควรสนใจเรื่อง NVLink และความเร็วในการสื่อสาร ( ภาพรวม NVIDIA NVLink , ภาพรวม NCCL )
-
คุณอาจต้องใช้โปรแกรมเพิ่มประสิทธิภาพหน่วยความจำ (ZeRO, offload ฯลฯ) ( เอกสาร DeepSpeed ZeRO , Microsoft Research: ZeRO/DeepSpeed )
ถ้าคุณกำลังทำการทดลอง
-
คุณต้องการการพัฒนาอย่างรวดเร็ว
-
อย่าทุ่มเงินทั้งหมดไปกับ GPU แล้วปล่อยให้พื้นที่เก็บข้อมูลและ RAM ขาดแคลน
-
ระบบที่สมดุลย่อมดีกว่าระบบที่ไม่สมดุล (ในเกือบทุกกรณี)
และในความเป็นจริง คุณอาจเสียเวลาหลายสัปดาห์ไปกับการเลือกฮาร์ดแวร์ที่ "สมบูรณ์แบบ" สร้างสิ่งที่ใช้งานได้ก่อน วัดผล แล้วค่อยปรับแต่ง ศัตรูตัวจริงคือการขาดการรับฟังความคิดเห็น.
ข้อคิดส่งท้าย - วิธีใช้ GPU ของ NVIDIA สำหรับการฝึกอบรม AI โดยไม่เสียสติ 😌✅
หากคุณจะนำสิ่งใดสิ่งหนึ่งจากคู่มือ วิธีการใช้ GPU ของ NVIDIA สำหรับการฝึกอบรม AI โปรดจำสิ่งนี้ไว้:
-
ตรวจสอบให้แน่ใจว่า
nvidia-smiใช้งานได้ก่อน ( เอกสารประกอบของ NVIDIA เกี่ยวกับ nvidia-smi ) -
เลือกเส้นทางการพัฒนาซอฟต์แวร์ที่ง่ายและสะดวก (โดยทั่วไปแล้ว CUDA ที่มาพร้อมกับเฟรมเวิร์กจะง่ายที่สุด) ( ดูวิธีเริ่มต้นใช้งาน PyTorch (ตัวเลือก CUDA) )
-
ทดสอบการฝึกฝนด้วย GPU ขนาดเล็กก่อนที่จะขยายขนาด ( torch.cuda.is_available )
-
บริหารจัดการ VRAM เหมือนกับชั้นวางของในครัวที่มีจำกัด
-
เริ่มใช้ความแม่นยำแบบผสมตั้งแต่เนิ่นๆ - มันไม่ใช่แค่ "เรื่องขั้นสูง" เท่านั้น ( เอกสาร PyTorch AMP , คู่มือการใช้งานความแม่นยำแบบผสมของ TensorFlow )
-
หากการทำงานช้า ให้ลองตรวจสอบตัวโหลดข้อมูลและการรับส่งข้อมูล (I/O) ก่อนที่จะโทษ GPU (ดู คู่มือการปรับแต่งประสิทธิภาพของ PyTorch )
-
การใช้งาน GPU หลายตัวพร้อมกันนั้นมีประสิทธิภาพสูง แต่ก็เพิ่มความซับซ้อนเช่นกัน ควรค่อยๆ ขยายขนาด ( ดูเอกสาร PyTorch DDP และ ภาพรวมของ NCCL )
-
ตรวจสอบการใช้งานและอุณหภูมิอย่างสม่ำเสมอ เพื่อให้ตรวจพบปัญหาได้ตั้งแต่เนิ่นๆ ( เอกสาร NVIDIA nvidia-smi )
การเรียนรู้การใช้งาน GPU ของ NVIDIA เป็นทักษะอย่างหนึ่งที่ตอนแรกดูเหมือนจะยาก แต่สุดท้ายมันก็กลายเป็นเรื่องปกติไปเสียแล้ว เหมือนกับการเรียนขับรถ ตอนแรกทุกอย่างดูเสียงดังและสับสนไปหมด คุณอาจจะจับพวงมาลัยแน่นเกินไป แต่แล้ววันหนึ่งคุณก็ขับรถได้อย่างสบายๆ จิบกาแฟ และแก้ไขปัญหาเรื่องขนาดแบทช์ได้อย่างง่ายดายราวกับไม่ใช่เรื่องใหญ่ ☕😄
คำถามที่พบบ่อย
การฝึกฝนโมเดล AI บน GPU ของ NVIDIA หมายความว่าอย่างไร
การฝึกโมเดลบน GPU ของ NVIDIA หมายความว่าพารามิเตอร์ของโมเดลและชุดข้อมูลการฝึกจะถูกจัดเก็บไว้ใน VRAM ของ GPU และการคำนวณทางคณิตศาสตร์ที่ซับซ้อน (การส่งผ่านไปข้างหน้า การย้อนกลับ การปรับแต่ง) จะดำเนินการผ่านเคอร์เนลของ CUDA ในทางปฏิบัติแล้ว มักจะสรุปได้ว่าโมเดลและเทนเซอร์นั้นอยู่บน CUDA จากนั้นจึงคอยตรวจสอบหน่วยความจำ การใช้งาน และอุณหภูมิ เพื่อให้ประสิทธิภาพการทำงานคงที่
วิธีตรวจสอบว่าการ์ดจอ NVIDIA ทำงานได้หรือไม่ก่อนที่จะติดตั้งโปรแกรมอื่นใด
เริ่มต้นด้วย `nvidia-smi` คำ สั่งนี้ควรแสดงชื่อ GPU เวอร์ชันไดรเวอร์ การใช้งานหน่วยความจำปัจจุบัน และกระบวนการทำงานใดๆ หาก `nvidia-smi` ล้มเหลว ให้ชะลอการใช้งาน PyTorch/TensorFlow/JAX ไว้ก่อน แก้ไขปัญหาการมองเห็นไดรเวอร์ก่อน นี่คือการตรวจสอบพื้นฐาน "ว่าเตาอบเสียบปลั๊กอยู่หรือไม่" สำหรับการฝึกอบรมด้วย GPU
การเลือกใช้ระหว่าง CUDA ของระบบและ CUDA ที่มาพร้อมกับ PyTorch
วิธีการที่นิยมใช้กันคือการใช้ CUDA ที่รวมอยู่ในเฟรมเวิร์ก (เช่น PyTorch wheels หลายๆ ตัว) เพราะช่วยลดส่วนประกอบที่ไม่จำเป็นลงไปได้ – โดยหลักๆ แล้วคุณต้องการแค่ไดรเวอร์ NVIDIA ที่เข้ากันได้เท่านั้น การติดตั้งชุดเครื่องมือ CUDA แบบเต็มระบบจะให้การควบคุมที่มากกว่า (การสร้างแบบกำหนดเอง การดำเนินการคอมไพล์) แต่ก็ทำให้เกิดโอกาสที่จะเกิดความไม่ตรงกันของเวอร์ชันและข้อผิดพลาดขณะรันไทม์ที่สับสนมากขึ้นด้วย.
เหตุใดการฝึกฝนจึงยังคงช้าแม้จะใช้ GPU ของ NVIDIA
บ่อยครั้งที่ GPU ทำงานหนักเกินไปเนื่องจากกระบวนการประมวลผลข้อมูลขาเข้า ตัวโหลดข้อมูลที่ทำงานช้า การประมวลผลล่วงหน้าด้วย CPU ที่หนักหน่วงภายในขั้นตอนการฝึก ขนาดแบทช์ที่เล็กเกินไป หรือหน่วยเก็บข้อมูลที่ช้า ล้วนสามารถทำให้ GPU ที่ทรงพลังทำงานเหมือนเครื่องทำความร้อนที่ไม่ได้ใช้งาน การเพิ่มจำนวนตัวทำงานของตัวโหลดข้อมูล การเปิดใช้งานหน่วยความจำแบบตรึง การเพิ่มการดึงข้อมูลล่วงหน้า และการลดการบันทึกข้อมูล เป็นขั้นตอนแรกๆ ที่นิยมทำก่อนที่จะโทษโมเดล.
วิธีป้องกันข้อผิดพลาด “CUDA หน่วยความจำไม่เพียงพอ” ระหว่างการฝึกฝน GPU ของ NVIDIA
วิธีแก้ปัญหาส่วนใหญ่เป็นการจัดการ VRAM: ลดขนาดแบทช์ เปิดใช้งานความแม่นยำแบบผสม (FP16/BF16) ใช้การสะสมเกรเดียนต์ ลดความยาวลำดับ/ขนาดการตัด หรือใช้การตรวจสอบจุดกระตุ้น นอกจากนี้ ให้ตรวจสอบว่ามีกระบวนการ GPU อื่นๆ ที่ใช้หน่วยความจำอยู่หรือไม่ การลองผิดลองถูกเป็นเรื่องปกติ การจัดการงบประมาณ VRAM จะกลายเป็นนิสัยหลักในการฝึกอบรม GPU ในทางปฏิบัติ.
เหตุใด VRAM จึงยังดูเหมือนเต็มหลังจากสคริปต์การฝึกสิ้นสุดลง
เฟรมเวิร์กมักจะแคชหน่วยความจำ GPU เพื่อเพิ่มความเร็ว ดังนั้นหน่วยความจำที่สงวนไว้จึงอาจยังคงสูงอยู่แม้ว่าหน่วยความจำที่จัดสรรจะลดลงก็ตาม อาจดูเหมือนการรั่วไหล แต่ส่วนใหญ่แล้วเป็นการทำงานของตัวจัดสรรแคชตามที่ออกแบบไว้ วิธีปฏิบัติที่ดีคือการติดตามรูปแบบนี้ไปเรื่อยๆ และเปรียบเทียบ "หน่วยความจำที่จัดสรรกับหน่วยความจำที่สงวนไว้" แทนที่จะไปยึดติดกับภาพรวมที่น่าตกใจเพียงครั้งเดียว.
วิธีตรวจสอบว่าโมเดลไม่ได้กำลังฝึกฝนอยู่บน CPU อย่างเงียบๆ
ตรวจสอบความถูกต้องเบื้องต้น: ยืนยันว่า torch.cuda.is_available() ส่งคืนค่า True ตรวจสอบว่า next(model.parameters()).device แสดง cuda และรัน forward pass ครั้งเดียวโดยไม่มีข้อผิดพลาด หากประสิทธิภาพการทำงานช้าผิดปกติ ให้ตรวจสอบด้วยว่า batches ของคุณถูกย้ายไปยัง GPU แล้วหรือไม่ เป็นเรื่องปกติที่จะย้ายโมเดลแล้วเผลอทิ้งข้อมูลไว้ข้างหลัง
เส้นทางที่ง่ายที่สุดสู่การฝึกฝนด้วย GPU หลายตัว
การประมวลผลแบบขนานข้อมูล (การฝึกอบรมแบบ DDP) มักเป็นขั้นตอนแรกที่ดีที่สุด: แบ่งชุดข้อมูลออกเป็นหลาย GPU และซิงค์ค่าความชัน เครื่องมืออย่าง Accelerate สามารถทำให้การใช้งานหลาย GPU ง่ายขึ้นโดยไม่ต้องเขียนโปรแกรมใหม่ทั้งหมด คาดว่าจะมีตัวแปรเพิ่มเติม เช่น การสื่อสาร NCCL ความแตกต่างของการเชื่อมต่อ (NVLink เทียบกับ PCIe) และปัญหาคอขวดของข้อมูลที่เพิ่มขึ้น ดังนั้นการค่อยๆ ขยายขนาดหลังจากที่ใช้งานบน GPU ตัวเดียวได้อย่างเสถียรแล้วจึงมักจะได้ผลดีกว่า.
สิ่งที่ควรตรวจสอบระหว่างการฝึกฝน GPU ของ NVIDIA เพื่อตรวจจับปัญหาตั้งแต่เนิ่นๆ
สังเกตการใช้งาน GPU, การใช้งานหน่วยความจำ (คงที่หรือเพิ่มขึ้น), การใช้พลังงาน และอุณหภูมิ - การลดความเร็วโดยที่เราไม่รู้ตัวอาจทำให้ความเร็วลดลงได้ ควรจับตาดูการใช้งาน CPU ด้วย เนื่องจากปัญหาในไปป์ไลน์ข้อมูลมักจะแสดงออกมาที่นั่นก่อน หากการใช้งาน CPU ผันผวนหรือต่ำ ให้สงสัยว่ามีปัญหาที่ I/O หรือตัวโหลดข้อมูล หากการใช้งานสูงแต่เวลาการประมวลผลยังคงช้า ให้ตรวจสอบเคอร์เนล โหมดความแม่นยำ และรายละเอียดของเวลาการประมวลผล.
เอกสารอ้างอิง
-
NVIDIA - เอกสารประกอบคำสั่ง NVIDIA nvidia-smi - docs.nvidia.com
-
NVIDIA - NVIDIA System Management Interface (NVSMI) - developer.nvidia.com
-
NVIDIA - ภาพรวม NVIDIA NVLink - nvidia.com
-
PyTorch - เริ่มต้นใช้งาน PyTorch (ตัวเลือก CUDA) - pytorch.org
-
PyTorch - เอกสารประกอบการใช้งาน PyTorch CUDA - docs.pytorch.org
-
TensorFlow - การติดตั้ง TensorFlow (pip) - tensorflow.org
-
JAX - คู่มือเริ่มต้นใช้งาน JAX ฉบับย่อ - docs.jax.dev
-
Hugging Face - เอกสารสำหรับผู้ฝึกสอน - huggingface.co
-
Lightning AI - เอกสารประกอบ Lightning - lightning.ai
-
DeepSpeed - เอกสาร ZeRO - deepspeed.readthedocs.io
-
Microsoft Research - Microsoft Research: ZeRO/DeepSpeed - microsoft.com
-
ฟอรัม PyTorch - ฟอรัม PyTorch: ตรวจสอบโมเดลบน CUDA - discuss.pytorch.org