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

การจัดการหน่วยความจำ GPU และการกระจายตัว

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

ภาพรวม

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

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

เจาะลึก

หน่วยความจำ GPU ได้รับการแก้ไขและมีค่า: การ์ดอาจมีพื้นที่ทั้งหมด 24, 80 หรือ 192 GB แบ่งตามน้ำหนักโมเดล การเปิดใช้งาน การไล่ระดับสี สถานะเครื่องมือเพิ่มประสิทธิภาพ และบัฟเฟอร์ชั่วคราว การเรียกไดรเวอร์ให้จัดสรรหน่วยความจำในทุกการดำเนินการจะช้า ดังนั้นเฟรมเวิร์กอย่าง PyTorch จึงใช้ตัวจัดสรรแคชที่ดึงบล็อกขนาดใหญ่ไว้ด้านหน้าและแจกชิ้นส่วนย่อย จากนั้นเก็บชิ้นส่วนที่ว่างไว้ในพูลเพื่อนำกลับมาใช้ใหม่ สิ่งที่จับได้คือการกระจายตัว: เมื่อเทนเซอร์ที่มีขนาดต่างกันได้รับการจัดสรรและปลดปล่อย พื้นที่ว่างจะแตกออกเป็นชิ้นๆ กระจัดกระจาย คุณสามารถมีพื้นที่ว่างทั้งหมด 5 GB แต่ไม่สามารถจัดสรรเทนเซอร์ขนาด 2 GB ที่ต่อเนื่องกันได้ เนื่องจากไม่มีช่องว่างใดที่ใหญ่พอ นี่คือเหตุผลว่าทำไมการฝึกจึงอาจล้มเหลวเนื่องจากข้อผิดพลาดหน่วยความจำไม่เพียงพอ แม้ว่าดูเหมือนว่าจะยังมีพื้นที่ว่างเหลืออยู่ก็ตาม

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

ตัวจัดสรรแคช CUDA ของ PyTorch จะแบ่งหน่วยความจำออกเป็นสตรีมของบล็อก และนำบล็อกที่ปล่อยให้ว่างกลับมาใช้ใหม่ซึ่งตรงกับขนาดที่ร้องขอ หลีกเลี่ยงการเรียก cudaMalloc/cudaFree ที่มีค่าใช้จ่ายสูง การกระจายตัวเกิดขึ้นเมื่อบล็อกแยกไม่สามารถรวมกันใหม่ได้ เครื่องมือต่างๆ เช่น torch.cuda.empty_cache ตัวเลือก PYTORCH_CUDA_ALLOC_CONF expandable_segments และความช่วยเหลือเกี่ยวกับสแน็ปช็อตหน่วยความจำ แนวทางที่ใหม่กว่ายืมแนวคิดเกี่ยวกับหน่วยความจำเสมือน โดยแมปเพจฟิสิคัลที่ไม่ต่อเนื่องกันให้กลายเป็นช่วงเสมือนที่ต่อเนื่องกัน เพื่อให้คำขอขนาดใหญ่ประสบความสำเร็จแม้จะมีการแยกส่วนก็ตาม

การเรียนรู้การจัดการหน่วยความจำ GPU และการแยกส่วน

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

ในทางปฏิบัติ ทีมที่แข็งแกร่งที่ใช้การจัดการหน่วยความจำ GPU และการแยกส่วนจะปรับสถาปัตยกรรม ข้อมูล และตัวเลือกโครงสร้างพื้นฐานให้เหมาะสมโดยเทียบกับความน่าเชื่อถือและต้นทุน โดยจะบันทึกเกณฑ์ความสำเร็จที่ชัดเจน ทดสอบกับข้อมูลและขั้นตอนการทำงานที่สมจริง และทำซ้ำตามรูปแบบความล้มเหลวที่สังเกตได้ แทนที่จะชนะการวัดประสิทธิภาพเพียงครั้งเดียว นี่คือจุดที่ความเข้าใจทางทฤษฎีกลายเป็นความสามารถที่คงทนของผลิตภัณฑ์ นโยบาย และการดำเนินงาน

การตัดสินใจด้านสถาปัตยกรรมขับเคลื่อนประสิทธิภาพและต้นทุนการดำเนินงานเป็นเวลาหลายปี ในเวลาเดียวกัน การเพิ่มประสิทธิภาพเกณฑ์มาตรฐานหนึ่งรายการสามารถซ่อนจุดอ่อนของระบบในวงกว้างได้ แนวทางที่ยืดหยุ่นที่สุดคือการรวมความเร็วของการทดลองเข้ากับวินัยในการกำกับดูแล: ดำเนินการนำร่อง จับหลักฐาน เผยแพร่บันทึกการตัดสินใจ และอัปเดตการป้องกันอย่างต่อเนื่องเมื่อพฤติกรรมของโมเดล ความคาดหวังของผู้ใช้ และข้อกำหนดด้านกฎระเบียบมีการเปลี่ยนแปลง

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

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

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

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

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

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

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

อนาคตของการจัดการหน่วยความจำ GPU และการแยกส่วน

การจัดการหน่วยความจำมีความชาญฉลาดมากขึ้นและมีเพจมากขึ้น โดยได้รับแรงบันดาลใจจากระบบปฏิบัติการ เทคนิคต่างๆ เช่น ตัวจัดสรรสไตล์หน่วยความจำเสมือนและเพจความสนใจ (ใช้เพื่อจัดการแคช KV ในระหว่างการอนุมาน) ช่วยลดความสูญเปล่าและการกระจายตัวได้อย่างมาก คาดว่าเฟรมเวิร์กจะเป็นค่าเริ่มต้นสำหรับตัวจัดสรรที่ขยายได้ การจัดเรียงข้อมูล การมองเห็นที่ดีขึ้นผ่านตัวสร้างโปรไฟล์ในตัว และการเชื่อมโยงที่เข้มงวดยิ่งขึ้นกับการลดการโหลดและการคำนวณใหม่ ดังนั้นระบบจะสลับ GPU, CPU และหน่วยความจำดิสก์โดยอัตโนมัติ เพื่อให้การใช้งานอยู่ในระดับสูงและเกิดข้อขัดข้องซึ่งเกิดขึ้นได้ยาก

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

การฝึกซ้อมที่ขัดข้องด้วย 'CUDA หน่วยความจำไม่เพียงพอ' แม้ว่าหน่วยความจำที่สงวนไว้จะแสดงพื้นที่ว่าง แก้ไขโดยการตั้งค่า PYTORCH_CUDA_ALLOC_CONF เพื่อเปิดใช้งานส่วนที่ขยายได้

การใช้ torch.cuda.memory_summary หรือสแน็ปช็อตหน่วยความจำเพื่อวินิจฉัยว่าเทนเซอร์และแฟรกเมนต์ใดกินพื้นที่ 80 GB ของ GPU

PagedAttention ของ vLLM จัดการแคช KV ความสนใจในเพจขนาดคงที่เพื่อรองรับคำขอแชทพร้อมกันจำนวนมากโดยไม่เปลืองหน่วยความจำ

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

รูปแบบการดำเนินงาน

การจัดการหน่วยความจำ GPU และการกระจายตัวในทางปฏิบัติ

การฝึกซ้อมที่ขัดข้องด้วย 'CUDA หน่วยความจำไม่เพียงพอ' แม้ว่าหน่วยความจำที่สงวนไว้จะแสดงพื้นที่ว่าง แก้ไขโดยการตั้งค่า PYTORCH_CUDA_ALLOC_CONF เพื่อเปิดใช้งานส่วนที่ขยายได้

การฝึกอบรมที่ล้มเหลวโดยที่ 'CUDA ไม่เพียงพอ' แม้ว่าหน่วยความจำที่สงวนไว้จะแสดงพื้นที่ว่าง แก้ไขโดยการตั้งค่า PYTORCH_CUDA_ALLOC_CONF เพื่อเปิดใช้งานเซ็กเมนต์ที่ขยายได้ ทีมมักจะได้รับผลลัพธ์ที่ดีกว่าเมื่อพวกเขากำหนดเกณฑ์คุณภาพล่วงหน้า รักษาเส้นทางการยกระดับโดยมนุษย์สำหรับกรณี Edge และติดตามทั้งการเพิ่มผลผลิตและต้นทุนข้อผิดพลาดเมื่อเวลาผ่านไป

การจัดการหน่วยความจำ GPU และการกระจายตัวในทางปฏิบัติ

การใช้ torch.cuda.memory_summary หรือสแน็ปช็อตหน่วยความจำเพื่อวินิจฉัยว่าเทนเซอร์และแฟรกเมนต์ใดกินพื้นที่ 80 GB ของ GPU

การใช้ torch.cuda.memory_summary หรือสแน็ปช็อตหน่วยความจำเพื่อวินิจฉัยว่าเทนเซอร์และแฟรกเมนต์ใดกินพื้นที่ 80 GB ของ GPU โดยปกติแล้วทีมจะได้ผลลัพธ์ที่ดีกว่าเมื่อพวกเขากำหนดเกณฑ์คุณภาพล่วงหน้า รักษาเส้นทางการยกระดับโดยมนุษย์สำหรับกรณี Edge และติดตามทั้งประสิทธิภาพการทำงานที่เพิ่มขึ้นและต้นทุนข้อผิดพลาดเมื่อเวลาผ่านไป

การจัดการหน่วยความจำ GPU และการกระจายตัวในทางปฏิบัติ

PagedAttention ของ vLLM จัดการแคช KV ความสนใจในเพจขนาดคงที่เพื่อรองรับคำขอแชทพร้อมกันจำนวนมากโดยไม่เปลืองหน่วยความจำ

PagedAttention ของ vLLM จัดการแคชความสนใจ KV ในเพจขนาดคงที่เพื่อให้บริการคำขอแชทพร้อมกันจำนวนมากโดยไม่เปลืองหน่วยความจำ ทีมมักจะได้รับผลลัพธ์ที่ดีกว่าเมื่อพวกเขากำหนดเกณฑ์คุณภาพล่วงหน้า รักษาเส้นทางการยกระดับโดยมนุษย์สำหรับกรณี Edge และติดตามทั้งประสิทธิภาพการทำงานที่เพิ่มขึ้นและต้นทุนข้อผิดพลาดเมื่อเวลาผ่านไป

การจัดการหน่วยความจำ GPU และการกระจายตัวในทางปฏิบัติ

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

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

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

!

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

!

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

!

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

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

1

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

กำหนดเป้าหมายเวลาแฝง คุณภาพ และต้นทุนก่อนนำไปใช้งาน ถือว่าแต่ละขั้นตอนเป็นเหมือนประตูหลักฐาน: หากไม่ตรงตามเกณฑ์ ให้หยุดการเปิดตัวชั่วคราว ปิดช่องว่าง จากนั้นจึงขยายการใช้งานเท่านั้น

2

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

เกณฑ์มาตรฐานภายใต้สภาวะโหลดและข้อมูลจริง ถือว่าแต่ละขั้นตอนเป็นเหมือนประตูหลักฐาน: หากไม่ตรงตามเกณฑ์ ให้หยุดการเปิดตัวชั่วคราว ปิดช่องว่าง จากนั้นจึงขยายการใช้งานเท่านั้น

3

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

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

4

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

เตรียมเส้นทางการย้อนกลับและการตอบสนองต่อเหตุการณ์ก่อนปรับขนาด ถือว่าแต่ละขั้นตอนเป็นเหมือนประตูหลักฐาน: หากไม่ตรงตามเกณฑ์ ให้หยุดการเปิดตัวชั่วคราว ปิดช่องว่าง จากนั้นจึงขยายการใช้งานเท่านั้น

สำรวจต่อไป