คู่มือทางเทคนิค

การแลกเปลี่ยนการคำนวณการเปิดใช้งานใหม่

การคำนวณการเปิดใช้งานใหม่ (การไล่ระดับสีหรือจุดตรวจสอบการเปิดใช้งาน) จะบันทึกหน่วยความจำ GPU ในระหว่างการฝึกโดยละทิ้งการเปิดใช้งานระดับกลางในการส่งต่อ และคำนวณใหม่ในระหว่างการย้อนกลับ

อ่าน 2 นาทีอัปเดตล่าสุด

ภาพรวม

It trades extra compute for the ability to train larger models or longer sequences on the same hardware.

เจาะลึก

Backpropagation จำเป็นต้องมีการเปิดใช้งาน Forward-Pass เพื่อคำนวณการไล่ระดับสี ดังนั้นตามค่าเริ่มต้นแล้ว ทุกเอาต์พุตของเลเยอร์จะถูกจัดเก็บ — ค่าใช้จ่ายหน่วยความจำมหาศาลที่เพิ่มขึ้นตามขนาดโมเดล ขนาดแบตช์ และความยาวของลำดับ การคำนวณการเปิดใช้งานใหม่จะเก็บเทนเซอร์ 'จุดตรวจสอบ' เพียงไม่กี่ตัว (มักเป็นเพียงขอบเขตของเลเยอร์) และโยนส่วนที่เหลือทิ้งไป ในระหว่างการย้อนกลับ ระบบจะรันการคำนวณไปข้างหน้าระหว่างจุดตรวจสอบอีกครั้งเพื่อสร้างการเปิดใช้งานที่ถูกละทิ้งใหม่ตามความต้องการ ผลลัพธ์แบบคลาสสิกก็คือเมื่อวางจุดตรวจสอบทุกชั้น sqrt(N) หน่วยความจำจะลดลงเหลือประมาณ O(sqrt(N)) ในขณะที่เพิ่มการส่งต่อเพิ่มเติมประมาณหนึ่งรอบ (คำนวณเพิ่มขึ้น ~33%) รูปแบบที่เลือกจะคำนวณใหม่เฉพาะการดำเนินการราคาถูกแต่มีหน่วยความจำหนักมาก (เช่น ความสนใจหรือการหยุดกลางคัน) ในขณะที่แคชสิ่งที่มีราคาแพง ทำให้ประหยัดหน่วยความจำได้มากที่สุดโดยมีค่าใช้จ่ายในการคำนวณใหม่น้อยกว่ามาก

ข้อมูลเชิงลึกทางเทคนิค

ข้อดีข้อเสียพื้นฐานคือหน่วยความจำกับ FLOP การคำนวณใหม่ทั้งหมดจะเพิ่มการส่งต่อเพิ่มเติมหนึ่งครั้งโดยประมาณต่อขั้นตอน (ช้ากว่าประมาณ 30-40%) แต่สามารถลดหน่วยความจำการเปิดใช้งานตามลำดับความสำคัญ การเคลื่อนไหวที่ชาญฉลาดคือจุดตรวจสอบแบบเลือกสรร: ระบุการดำเนินการที่มีหน่วยความจำขนาดใหญ่แต่มีราคาถูกในการประมวลผล (softmax, layernorm, GELU, คะแนนความสนใจ) และคำนวณใหม่เฉพาะสิ่งเหล่านั้น ในขณะเดียวกันก็เก็บผลลัพธ์ของ GEMM ที่มีราคาแพงไว้ในแคช — ช่วยลดการสูญเสียการประมวลผล

ผลกระทบเชิงกลยุทธ์

ต้นทุนและงบประมาณ

การตัดสินใจด้านสถาปัตยกรรมขับเคลื่อนประสิทธิภาพและต้นทุนการดำเนินงานเป็นเวลาหลายปี

การตัดสินใจที่ชัดเจนยิ่งขึ้น

การศึกษาด้านเทคนิคช่วยให้ทีมเลือกกลุ่มที่เหมาะสม ไม่ใช่แค่กลุ่มใหม่ล่าสุด

การควบคุมคุณภาพ

ตัวเลือกทางวิศวกรรมที่ดีกว่าจะช่วยลดเหตุการณ์ด้านความน่าเชื่อถือในการผลิต

อนาคตของการแลกเปลี่ยนการคำนวณการเปิดใช้งานใหม่

การคำนวณใหม่เป็นแบบอัตโนมัติและเลือกสรรมากขึ้น ตอนนี้เฟรมเวิร์กจะโปรไฟล์หน่วยความจำของแต่ละปฏิบัติการและค่าใช้จ่าย FLOP เพื่อเลือกจุดตรวจสอบที่เหมาะสมที่สุด และรวมการคำนวณใหม่เข้ากับการลดการโหลดการเปิดใช้งานไปยัง CPU/NVMe และกับกลยุทธ์การทำงานแบบขนาน เนื่องจากความยาวบริบทและขนาดโมเดลเพิ่มขึ้นเรื่อยๆ คาดว่านโยบายที่ขับเคลื่อนด้วยคอมไพลเลอร์ (ใน PyTorch, JAX/XLA) จะเลือกการตัดสินใจคำนวณใหม่ตามการดำเนินการโดยอัตโนมัติ บวกกับการทับซ้อนกันที่เข้มงวดมากขึ้นของการคำนวณใหม่กับการสื่อสาร ดังนั้น FLOP เพิ่มเติมจะถูกซ่อนไว้บางส่วน

การใช้งานจริงในโลกแห่งความเป็นจริง

การฝึกอบรมหม้อแปลงไฟฟ้าขนาดใหญ่ที่ไม่พอดีโดยการตรวจสอบแต่ละเลเยอร์บล็อก

การใช้ torch.utils.checkpoint ของ PyTorch เพื่อพันบล็อก Transformer และตัดหน่วยความจำการเปิดใช้งาน

การคำนวณความสนใจ/ซอฟต์แม็กซ์แบบเลือกสรรใน Megatron-LM เพื่อประหยัดหน่วยความจำโดยมีการชะลอตัวน้อยที่สุด

เปิดใช้งานความยาวลำดับที่ยาวขึ้นบนงบประมาณ GPU คงที่โดยคำนวณการเปิดใช้งานใหม่แทนที่จะจัดเก็บไว้

ความเสี่ยงและรั้ว

การเพิ่มประสิทธิภาพเกณฑ์มาตรฐานหนึ่งรายการสามารถซ่อนจุดอ่อนของระบบในวงกว้างได้

ต้นทุนโครงสร้างพื้นฐานและการบำรุงรักษามักถูกประเมินต่ำไป

ช่องว่างด้านความปลอดภัยและความสามารถในการสังเกตสามารถเพิ่มขึ้นได้เมื่อระบบมีความซับซ้อนมากขึ้น

แผนงานการดำเนินงาน

1

กำหนดเป้าหมายเวลาแฝง คุณภาพ และต้นทุนก่อนนำไปใช้งาน

2

เกณฑ์มาตรฐานภายใต้สภาวะโหลดและข้อมูลจริง

3

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

4

เตรียมเส้นทางการย้อนกลับและการตอบสนองต่อเหตุการณ์ก่อนปรับขนาด

สำรวจต่อไป

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Activation Recomputation Tradeoffs quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

เริ่มแบบทดสอบ

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

คำแนะนำต่อไป

SmoothQuant และปริมาณการเปิดใช้งาน

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

What is Activation Recomputation Tradeoffs?

การคำนวณการเปิดใช้งานใหม่ (การไล่ระดับสีหรือจุดตรวจสอบการเปิดใช้งาน) จะบันทึกหน่วยความจำ GPU ในระหว่างการฝึกโดยละทิ้งการเปิดใช้งานระดับกลางในการส่งต่อ และคำนวณใหม่ในระหว่างการย้อนกลับ โดยจะแลกการประมวลผลเพิ่มเติมกับความสามารถในการฝึกฝนโมเดลขนาดใหญ่หรือลำดับที่ยาวกว่าบนฮาร์ดแวร์ตัวเดียวกัน

การคำนวณการเปิดใช้งานใหม่จะแลกอะไรเพื่อประหยัดหน่วยความจำ

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

เหตุใดการเปิดใช้งานการส่งต่อโดยปกติจึงถูกเก็บไว้เลย?

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

โดยทั่วไปแล้วการคำนวณการเปิดใช้งานใหม่แบบเต็มจะเพิ่มการคำนวณพิเศษอีกเท่าใดโดยประมาณ

การคำนวณใหม่ทั้งหมดจะรันการคำนวณไปข้างหน้าอีกครั้งระหว่างการย้อนกลับ โดยเพิ่มการส่งต่อเพิ่มเติมประมาณหนึ่งครั้ง — ตามลำดับของการคำนวณที่เพิ่มขึ้น 30-40%

แนวคิดเบื้องหลังการคำนวณแบบเลือกสรร (ไม่เต็ม) คืออะไร

ตัวเลือกการคำนวณใหม่แบบเลือกเป้าหมายที่ใช้หน่วยความจำจำนวนมากแต่มีการประมวลผลเพียงเล็กน้อย (เช่น softmax หรือ layernorm) ในขณะที่แคชผลลัพธ์ GEMM ที่มีราคาแพงเพื่อลด FLOP ที่สูญเปล่าให้เหลือน้อยที่สุด

เทคนิคเสริมใดที่มักใช้ร่วมกับการคำนวณใหม่เพื่อประหยัดหน่วยความจำมากยิ่งขึ้น

การลดการโหลดการเปิดใช้งานจะย้ายการเปิดใช้งานบางอย่างไปยังที่จัดเก็บข้อมูล CPU/NVMe และบ่อยครั้งจะรวมกับการคำนวณใหม่และความขนานกันเพื่อการประหยัดหน่วยความจำเพิ่มเติม