ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข
จุดที่ความแม่นยำต่ำลงต้องใช้ความระมัดระวัง
ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Tensor Core คำนวณอะไร
- ความแม่นยำผสม: FP16, BF16, TF32
- API ส่วนย่อยของ WMMA
- ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข