0Pricing
CUDA Academy · บทเรียน

ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข

จุดที่ความแม่นยำต่ำลงต้องใช้ความระมัดระวัง

ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน

ความเร็วมีต้นทุน

คณิตศาสตร์บนแกน Tensor ที่ใช้ความละเอียดต่ำทำงานได้เร็ว แต่บิตที่น้อยลงหมายถึงข้อผิดพลาดจากการปัดเศษ เสถียรภาพเชิงตัวเลขคือศิลปะของการรักษาผลลัพธ์ให้เชื่อถือได้ ⚖️

ข้อผิดพลาดจากการปัดเศษคืออะไร

ค่าแต่ละค่าที่มีความละเอียดต่ำจะถูกปัดไปเป็นจำนวนที่แทนค่าได้ใกล้ที่สุด ข้อผิดพลาดจากการปัดเศษเล็ก ๆ นี้ไม่เป็นอันตรายเมื่อเกิดครั้งเดียว แต่อาจสะสมเมื่อผ่านหลายขั้นตอน

การอันเดอร์โฟลว์ของ FP16

ช่วงค่าที่แคบของ FP16 ทำให้ตัวเลขขนาดเล็กกลายเป็นศูนย์ ซึ่งเรียกว่าอันเดอร์โฟลว์ เกรเดียนต์และน้ำหนักขนาดเล็กอาจหายไปโดยสิ้นเชิงระหว่างการฝึก

การโอเวอร์โฟลว์ของ FP16

ช่วงค่าที่แคบเช่นเดียวกันทำให้เกิดโอเวอร์โฟลว์ คือค่าขนาดใหญ่กลายเป็นอนันต์ ผลรวมที่ผิดพลาดเพียงครั้งเดียวอาจทำให้ทุกอย่างที่ประมวลผลต่อจากนั้นเสียหาย

การปรับสเกลผลขาดทุนเพื่อแก้ปัญหา

วิธีแก้ไขที่ใช้กันทั่วไปคือ การปรับสเกลการสูญเสีย: คูณค่าให้ใหญ่ขึ้นก่อนคำนวณด้วย FP16 เพื่อให้พ้นช่วงอันเดอร์โฟลว์ แล้วจึงปรับสเกลกลับลงภายหลัง

เหตุผลที่การสะสมแบบช่วงกว้างช่วยได้

Tensor Cores สะสมค่าใน FP32 ด้วยเหตุผลที่สำคัญ ตัวตัวสะสมที่มีช่วงกว้างขึ้นนี้ช่วยป้องกันไม่ให้การบวกค่าขนาดเล็กหลายพันครั้งคลาดเคลื่อนอย่างมาก

BF16 หลีกเลี่ยงปัญหาช่วงค่า

เนื่องจาก BF16 ยังคงเลขชี้กำลังของ FP32 ไว้ จึงแทบไม่เกิดโอเวอร์โฟลว์หรืออันเดอร์โฟลว์ จุดอ่อนของมันคือความแม่นยำที่ต่ำกว่า ไม่ใช่ช่วงค่าที่แคบลง

การหักล้างแบบรุนแรง

การลบตัวเลขสองค่าที่ใกล้กันจะลบเลขหลักหน้าทิ้ง ซึ่งเรียกว่าการหักล้าง ความแม่นยำต่ำทำให้ข้อผิดพลาดที่เหลือมองเห็นได้ชัดเจนขึ้นมาก

คงส่วนสำคัญไว้ใน FP32

รูปแบบที่ปลอดภัยคือความแม่นยำแบบผสม: คูณค่าจำนวนมากด้วย FP16 หรือ BF16 แต่คงการบวกสะสม ค่านอร์ม และการปรับปรุงที่ไวต่อความคลาดเคลื่อนไว้ใน FP32

ตรวจสอบความแม่นยำเสมอ

อย่าสันนิษฐานว่าเคอร์เนลที่ทำงานเร็วจะถูกต้อง ให้เปรียบเทียบกับค่ามาตรฐานอ้างอิงแบบ FP32 และตรวจสอบว่าข้อผิดพลาดยังอยู่ภายในค่าความคลาดเคลื่อนที่ยอมรับได้

การวัดข้อผิดพลาด

การตรวจสอบง่าย ๆ คือหาผลต่างสัมบูรณ์เทียบกับผลลัพธ์ที่เชื่อถือได้ แล้วเปรียบเทียบข้อผิดพลาดนี้กับค่าขีดจำกัดขนาดเล็กที่คุณเลือก

float err = fabsf(gpu_result - cpu_result);

ตรวจสอบอย่างรวดเร็ว

เหตุใด Tensor Cores จึงสะสมผลรวมย่อยใน FP32 แม้ค่าอินพุตจะเป็น FP16

สรุป

คุณได้เรียนรู้ข้อแลกเปลี่ยนด้านความแม่นยำแล้ว: ระวังโอเวอร์โฟลว์และอันเดอร์โฟลว์ของ FP16 ใช้การปรับสเกลการสูญเสียและการสะสมใน FP32 และตรวจสอบกับค่ามาตรฐานอ้างอิงเสมอ 🎯

คำถามที่พบบ่อย

บทเรียน “ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข”

จุดที่ความแม่นยำต่ำลงต้องใช้ความระมัดระวัง คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม

ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Tensor Core คำนวณอะไร
  2. ความแม่นยำผสม: FP16, BF16, TF32
  3. API ส่วนย่อยของ WMMA
  4. ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข
← กลับไปที่ CUDA Academy