ปัญญาประดิษฐ์
การทำความเข้าใจพารามิเตอร์โมเดลภาษาขนาดใหญ่และข้อกำหนดของหน่วยความจำ: เจาะลึก
การตีพิมพ์
วัน 6 ที่ผ่านมาon
By
อายูช มิททาลสารบัญ
โมเดลภาษาขนาดใหญ่ (LLM) ได้เห็นความก้าวหน้าที่โดดเด่นในช่วงไม่กี่ปีที่ผ่านมา โมเดลอย่าง GPT-4, Gemini ของ Google และ Claude 3 กำลังสร้างมาตรฐานใหม่ในด้านความสามารถและแอปพลิเคชัน โมเดลเหล่านี้ไม่เพียงแต่ปรับปรุงการสร้างข้อความและการแปลเท่านั้น แต่ยังเป็นแนวทางใหม่ในการประมวลผลหลายรูปแบบ โดยผสมผสานอินพุตข้อความ รูปภาพ เสียง และวิดีโอ เพื่อมอบโซลูชัน AI ที่ครอบคลุมมากขึ้น
ตัวอย่างเช่น GPT-4 ของ OpenAI แสดงให้เห็นถึงการปรับปรุงที่สำคัญในการทำความเข้าใจและสร้างข้อความที่เหมือนมนุษย์ ในขณะที่โมเดล Gemini ของ Google เก่งในการจัดการข้อมูลประเภทต่างๆ รวมถึงข้อความ รูปภาพ และเสียง ช่วยให้การโต้ตอบที่ราบรื่นและเกี่ยวข้องกับบริบทมากขึ้น ในทำนองเดียวกัน โมเดล Claude 3 ของ Anthropic ได้รับการกล่าวถึงในด้านความสามารถหลายภาษาและประสิทธิภาพที่เพิ่มขึ้นในงาน AI
ในขณะที่การพัฒนา LLM ยังคงดำเนินต่อไป การทำความเข้าใจความซับซ้อนของโมเดลเหล่านี้ โดยเฉพาะอย่างยิ่งพารามิเตอร์และข้อกำหนดหน่วยความจำจึงกลายเป็นสิ่งสำคัญ คู่มือนี้มีจุดมุ่งหมายเพื่อทำความเข้าใจประเด็นต่างๆ เหล่านี้ให้เข้าใจง่าย โดยนำเสนอคำอธิบายที่ละเอียดและเข้าใจง่าย
พื้นฐานของโมเดลภาษาขนาดใหญ่
โมเดลภาษาขนาดใหญ่คืออะไร?
โมเดลภาษาขนาดใหญ่คือโครงข่ายประสาทเทียมที่ได้รับการฝึกบนชุดข้อมูลขนาดใหญ่เพื่อทำความเข้าใจและสร้างภาษาของมนุษย์ พวกเขาพึ่งพาสถาปัตยกรรมเช่น Transformers ซึ่งใช้กลไกเช่นการเอาใจใส่ตนเองในการประมวลผลและสร้างข้อความ
ความสำคัญของพารามิเตอร์ใน LLM
พารามิเตอร์เป็นองค์ประกอบหลักของรุ่นเหล่านี้ รวมถึงน้ำหนักและอคติ ซึ่งโมเดลจะปรับระหว่างการฝึกเพื่อลดข้อผิดพลาดในการทำนาย จำนวนพารามิเตอร์มักสัมพันธ์กับความจุและประสิทธิภาพของโมเดล แต่ยังส่งผลต่อข้อกำหนดด้านการคำนวณและหน่วยความจำด้วย
ทำความเข้าใจเกี่ยวกับสถาปัตยกรรมหม้อแปลงไฟฟ้า
ขององค์กร
สถาปัตยกรรม Transformer ได้รับการแนะนำในรายงาน "Attention Is All You Need" โดย Vaswani และคณะ (2017) ได้กลายเป็นรากฐานสำหรับ LLM หลายแห่ง ประกอบด้วยตัวเข้ารหัสและตัวถอดรหัส ซึ่งแต่ละอันประกอบด้วยเลเยอร์ที่เหมือนกันหลายชั้น
ส่วนประกอบตัวเข้ารหัสและตัวถอดรหัส
- Encoder: ประมวลผลลำดับอินพุตและสร้างการแสดงการรับรู้บริบท
- ถอดรหัส: สร้างลำดับเอาต์พุตโดยใช้ตัวแทนของตัวเข้ารหัสและโทเค็นที่สร้างไว้ก่อนหน้านี้
หน่วยการสร้างที่สำคัญ
- ความสนใจหลายหัว: ช่วยให้โมเดลโฟกัสไปที่ส่วนต่างๆ ของลำดับอินพุตพร้อมกัน
- โครงข่ายประสาทเทียมแบบฟีดไปข้างหน้า: เพิ่มความไม่เป็นเชิงเส้นและความซับซ้อนให้กับโมเดล
- การทำให้เป็นมาตรฐานของเลเยอร์: ทำให้การฝึกเสถียรและเร่งความเร็วโดยการปรับเอาท์พุตระดับกลางให้เป็นมาตรฐาน
การคำนวณจำนวนพารามิเตอร์
การคำนวณพารามิเตอร์ใน LLM ที่ใช้หม้อแปลงไฟฟ้า
เรามาดูรายละเอียดการคำนวณพารามิเตอร์สำหรับแต่ละองค์ประกอบของ LLM ที่ใช้ Transformer กัน เราจะใช้สัญกรณ์จากกระดาษต้นฉบับโดยที่ d_model
แสดงถึงมิติของสถานะที่ซ่อนอยู่ของโมเดล
- การฝังเลเยอร์:
- พารามิเตอร์ =
vocab_size
*d_model
- พารามิเตอร์ =
- ความสนใจหลายหัว:
- สำหรับ
h
หัวด้วยd_k = d_v = d_model / h
: - พารามิเตอร์ = 4 *
d_model
^2 (สำหรับ Q, K, V และการคาดการณ์เอาท์พุต)
- สำหรับ
- เครือข่ายฟีดส่งต่อ:
- พารามิเตอร์ = 2 *
d_model
*d_ff
+d_model
+d_ff
- ที่ไหน
d_ff
โดยทั่วไปคือ 4 *d_model
- พารามิเตอร์ = 2 *
- การทำให้เป็นมาตรฐานของเลเยอร์:
- พารามิเตอร์ = 2 *
d_model
(สำหรับขนาดและอคติ)
- พารามิเตอร์ = 2 *
พารามิเตอร์ทั้งหมดสำหรับชั้น Transformer หนึ่งชั้น:
Parameters_layer
=Parameters_attention
+Parameters_ffn
+ 2 *Parameters_layernorm
สำหรับรุ่นที่มี N
ชั้น:
- พารามิเตอร์ทั้งหมด =
N
*Parameters_layer
+Parameters_embedding
+Parameters_output
ตัวอย่างการคำนวณ
พิจารณารุ่นที่มีคุณสมบัติดังต่อไปนี้:
d_model
= 768h
(จำนวนหัวความสนใจ) = 12N
(จำนวนชั้น) = 12vocab_size
= 50,000
- การฝังเลเยอร์:
- 50,000 * 768 = 38,400,000
- ความสนใจหลายหัว:
- 4 * 768^2 = 2,359,296
- เครือข่ายฟีดส่งต่อ:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
- การทำให้เป็นมาตรฐานของเลเยอร์:
- 2 * 768 = 1,536
พารามิเตอร์ทั้งหมดต่อชั้น:
- 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984
พารามิเตอร์ทั้งหมดสำหรับ 12 ชั้น:
- 12 * 7,081,984 = 84,983,808
พารามิเตอร์โมเดลทั้งหมด:
- 84,983,808 + 38,400,000 = 123,383,808
โมเดลนี้จะมีพารามิเตอร์ประมาณ 123 ล้านพารามิเตอร์
ประเภทของการใช้หน่วยความจำ
เมื่อทำงานกับ LLM เราต้องพิจารณาการใช้หน่วยความจำสองประเภทหลัก:
- รุ่นหน่วยความจำ: หน่วยความจำที่จำเป็นสำหรับการจัดเก็บพารามิเตอร์โมเดล
- การทำงานของหน่วยความจำ: หน่วยความจำที่จำเป็นในระหว่างการอนุมานหรือการฝึกอบรมเพื่อจัดเก็บการเปิดใช้งานระดับกลาง การไล่ระดับสี และสถานะของเครื่องมือเพิ่มประสิทธิภาพ
การคำนวณหน่วยความจำโมเดล
หน่วยความจำโมเดลเกี่ยวข้องโดยตรงกับจำนวนพารามิเตอร์ โดยทั่วไปแต่ละพารามิเตอร์จะถูกจัดเก็บเป็นตัวเลขทศนิยม 32 บิต แม้ว่าบางรุ่นจะใช้การฝึกแบบผสมความแม่นยำกับทศนิยม 16 บิต
หน่วยความจำรุ่น (ไบต์) = จำนวนพารามิเตอร์ * ไบต์ต่อพารามิเตอร์
สำหรับโมเดลตัวอย่างของเราที่มีพารามิเตอร์ 123 ล้านพารามิเตอร์:
- หน่วยความจำโมเดล (32 บิต) = 123,383,808 * 4 ไบต์ = 493,535,232 ไบต์ กลับไปยัง 494 MB
- หน่วยความจำโมเดล (16 บิต) = 123,383,808 * 2 ไบต์ = 246,767,616 ไบต์ กลับไปยัง 247 MB
การประมาณค่าหน่วยความจำในการทำงาน
ข้อกำหนดหน่วยความจำในการทำงานอาจแตกต่างกันอย่างมากขึ้นอยู่กับงานเฉพาะ ขนาดแบตช์ และความยาวของลำดับ การประมาณคร่าวๆ สำหรับหน่วยความจำในการทำงานระหว่างการอนุมานคือ:
หน่วยความจำในการทำงาน µ 2 * หน่วยความจำรุ่น
บัญชีนี้ใช้สำหรับจัดเก็บทั้งพารามิเตอร์โมเดลและการเปิดใช้งานระดับกลาง ในระหว่างการฝึก ความต้องการหน่วยความจำอาจสูงขึ้นอีก เนื่องจากจำเป็นต้องจัดเก็บการไล่ระดับสีและสถานะเครื่องมือเพิ่มประสิทธิภาพ:
หน่วยความจำการฝึกอบรม µ 4 * หน่วยความจำโมเดล
สำหรับโมเดลตัวอย่างของเรา:
- หน่วยความจำในการทำงานอนุมาน 2 * 494 MB = 988 MB 1 GB
- หน่วยความจำการฝึกอบรม µ 4 * 494 MB = 1,976 MB µ 2 GB
การใช้หน่วยความจำสถานะคงที่และการใช้หน่วยความจำสูงสุด
เมื่อฝึกอบรมโมเดลภาษาขนาดใหญ่ตามสถาปัตยกรรม Transformer การทำความเข้าใจการใช้หน่วยความจำถือเป็นสิ่งสำคัญสำหรับการจัดสรรทรัพยากรอย่างมีประสิทธิภาพ เรามาแบ่งข้อกำหนดหน่วยความจำออกเป็นสองประเภทหลักๆ ได้แก่ การใช้หน่วยความจำในสภาวะคงตัวและการใช้หน่วยความจำสูงสุด
การใช้หน่วยความจำสถานะคงที่
การใช้หน่วยความจำสถานะคงตัวประกอบด้วยส่วนประกอบต่อไปนี้:
- รุ่นน้ำหนัก: สำเนา FP32 ของพารามิเตอร์โมเดล ซึ่งต้องใช้ไบต์ 4N โดยที่ N คือจำนวนพารามิเตอร์
- สถานะของเครื่องมือเพิ่มประสิทธิภาพ: สำหรับเครื่องมือเพิ่มประสิทธิภาพ Adam ต้องใช้ไบต์ 8N (2 สถานะต่อพารามิเตอร์)
- การไล่ระดับสี: สำเนา FP32 ของการไล่ระดับสี ต้องใช้ไบต์ 4N
- ป้อนข้อมูล: สมมติว่าอินพุต int64 ต้องใช้ไบต์ 8BD โดยที่ B คือขนาดแบตช์ และ D คือมิติอินพุต
การใช้งานหน่วยความจำสถานะคงตัวทั้งหมดสามารถประมาณได้โดย:
- M_steady = 16N + 8BD ไบต์
การใช้งานหน่วยความจำสูงสุด
การใช้หน่วยความจำสูงสุดเกิดขึ้นระหว่างการย้อนกลับเมื่อมีการจัดเก็บการเปิดใช้งานสำหรับการคำนวณแบบไล่ระดับ ปัจจัยหลักที่ทำให้ความจำสูงสุดคือ:
- การทำให้เป็นมาตรฐานของเลเยอร์: ต้องใช้ 4E ไบต์ต่อบรรทัดฐานของเลเยอร์ โดยที่ E = BSH (B: ขนาดแบตช์, S: ความยาวลำดับ, H: ขนาดที่ซ่อนอยู่)
- บล็อกความสนใจ:
- การคำนวณ QKV: 2E ไบต์
- เมทริกซ์ความสนใจ: 4BSS ไบต์ (S: ความยาวลำดับ)
- เอาต์พุตแจ้งเตือน: 2E ไบต์
- บล็อกฟีดไปข้างหน้า:
- เลเยอร์เชิงเส้นแรก: 2E ไบต์
- การเปิดใช้งาน GELU: 8E ไบต์
- เลเยอร์เชิงเส้นที่สอง: 2E ไบต์
- การสูญเสียข้ามเอนโทรปี:
- บันทึก: 6BSV ไบต์ (V: ขนาดคำศัพท์)
หน่วยความจำการเปิดใช้งานทั้งหมดสามารถประมาณได้ดังนี้:
- M_act = L * (14E + 4BSS) + 6BSV ไบต์
โดยที่ L คือจำนวนชั้นของหม้อแปลง
การใช้งานหน่วยความจำสูงสุดทั้งหมด
การใช้งานหน่วยความจำสูงสุดระหว่างการฝึกสามารถประมาณได้โดยการรวมหน่วยความจำสภาวะคงตัวและหน่วยความจำการเปิดใช้งาน:
- M_peak = M_steady + M_act + 4BSV ไบต์
ระยะเวลา 4BSV เพิ่มเติมจะพิจารณาการจัดสรรเพิ่มเติมเมื่อเริ่มต้นการส่งย้อนหลัง
ด้วยการทำความเข้าใจส่วนประกอบเหล่านี้ เราจะสามารถปรับการใช้หน่วยความจำให้เหมาะสมในระหว่างการฝึกอบรมและการอนุมานได้ ทำให้มั่นใจได้ถึงการจัดสรรทรัพยากรอย่างมีประสิทธิภาพ และปรับปรุงประสิทธิภาพของโมเดลภาษาขนาดใหญ่
กฎหมายการปรับขนาดและการพิจารณาด้านประสิทธิภาพ
กฎหมายการปรับขนาดสำหรับ LLM
การวิจัยแสดงให้เห็นว่าประสิทธิภาพของ LLM มีแนวโน้มที่จะเป็นไปตามกฎมาตราส่วนบางประการเมื่อจำนวนพารามิเตอร์เพิ่มขึ้น แคปแลน และคณะ (2020) ตั้งข้อสังเกตว่าประสิทธิภาพของโมเดลได้รับการปรับปรุงตามกฎกำลังของจำนวนพารามิเตอร์ งบประมาณในการประมวลผล และขนาดชุดข้อมูล
ความสัมพันธ์ระหว่างประสิทธิภาพของโมเดลและจำนวนพารามิเตอร์สามารถประมาณได้โดย:
ประสิทธิภาพ ∝ N^α
โดยที่ N คือจำนวนพารามิเตอร์และ α เป็นเลขชี้กำลังมาตราส่วนโดยทั่วไปจะอยู่ที่ประมาณ 0.07 สำหรับงานการสร้างแบบจำลองภาษา
นี่หมายความว่าเพื่อให้บรรลุการปรับปรุงประสิทธิภาพ 10% เราจำเป็นต้องเพิ่มจำนวนพารามิเตอร์ขึ้นอีก 10^(1/α) γ 3.7
เทคนิคประสิทธิภาพ
ในขณะที่ LLM เติบโตอย่างต่อเนื่อง นักวิจัยและผู้ปฏิบัติงานได้พัฒนาเทคนิคต่างๆ เพื่อปรับปรุงประสิทธิภาพ:
a) การฝึกอบรมความแม่นยำแบบผสม: การใช้ตัวเลขทศนิยม 16 บิตหรือ 8 บิตสำหรับการดำเนินการบางอย่างเพื่อลดการใช้หน่วยความจำและข้อกำหนดในการคำนวณ
b) รุ่น Parallelism: การกระจายโมเดลไปยัง GPU หรือ TPU หลายตัวเพื่อรองรับโมเดลขนาดใหญ่เกินกว่าที่จะใส่ลงในอุปกรณ์เครื่องเดียวได้
c) จุดตรวจไล่ระดับ: แลกเปลี่ยนการคำนวณสำหรับหน่วยความจำโดยคำนวณการเปิดใช้งานบางอย่างใหม่ในระหว่างการย้อนกลับแทนที่จะเก็บไว้
d) การตัดแต่งกิ่งและการหาปริมาณ: การนำตุ้มน้ำหนักที่มีความสำคัญน้อยกว่าออกหรือลดความแม่นยำหลังการฝึกเพื่อสร้างแบบจำลองที่เล็กลงและมีประสิทธิภาพมากขึ้น
e) การกลั่น: การฝึกโมเดลขนาดเล็กเพื่อเลียนแบบพฤติกรรมของโมเดลขนาดใหญ่ ซึ่งอาจรักษาประสิทธิภาพไว้ได้มากโดยใช้พารามิเตอร์น้อยลง
ตัวอย่างการปฏิบัติและการคำนวณ
GPT-3 หนึ่งในโมเดลภาษาที่ใหญ่ที่สุด มีพารามิเตอร์ 175 พันล้านพารามิเตอร์ ใช้ส่วนถอดรหัสของสถาปัตยกรรม Transformer เพื่อให้เข้าใจถึงขนาดของมัน เรามาแจกแจงจำนวนพารามิเตอร์ด้วยค่าสมมุติ:
d_model = 12288
d_ff = 4 * 12288 = 49152
- จำนวนชั้น = 96
สำหรับชั้นตัวถอดรหัสหนึ่งชั้น:
พารามิเตอร์ทั้งหมด = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 หยาบคาย 1.1 พันล้าน
รวม 96 ชั้น:
1.1 พันล้าน * 96 = 105.6 พันล้าน
พารามิเตอร์ที่เหลือมาจากการฝังและส่วนประกอบอื่นๆ
สรุป
การทำความเข้าใจพารามิเตอร์และข้อกำหนดหน่วยความจำของโมเดลภาษาขนาดใหญ่เป็นสิ่งสำคัญสำหรับการออกแบบ การฝึกอบรม และการปรับใช้เครื่องมือที่มีประสิทธิภาพเหล่านี้อย่างมีประสิทธิภาพ การแยกย่อยส่วนประกอบของสถาปัตยกรรม Transformer และตรวจสอบตัวอย่างเชิงปฏิบัติ เช่น GPT ทำให้เราได้รับข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับความซับซ้อนและขนาดของโมเดลเหล่านี้
หากต้องการทำความเข้าใจเพิ่มเติมเกี่ยวกับความก้าวหน้าล่าสุดในโมเดลภาษาขนาดใหญ่และการใช้งาน โปรดดูคำแนะนำที่ครอบคลุมเหล่านี้:
- สำรวจคู่มือฉบับสมบูรณ์เกี่ยวกับ Gemma 2: โมเดลภาษาเปิดขนาดใหญ่ใหม่ของ Google เพื่อรับข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพที่เพิ่มขึ้นและคุณสมบัติที่เป็นนวัตกรรม
- เรียนรู้เกี่ยวกับการสร้างตัวแทน LLM สำหรับ RAG ตั้งแต่เริ่มต้นและอื่นๆ: คู่มือฉบับสมบูรณ์ ซึ่งกล่าวถึงความท้าทายและแนวทางแก้ไขในการสร้างการดึงข้อมูลแบบเสริม
- ค้นพบความซับซ้อนของ การตั้งค่าการฝึกอบรม การปรับแต่ง และการอนุมาน LLM ด้วย NVIDIA GPU และ CUDA เพื่อเพิ่มประสิทธิภาพระบบ AI
ฉันใช้เวลาห้าปีที่ผ่านมาหมกมุ่นอยู่กับโลกแห่งการเรียนรู้ของเครื่องและการเรียนรู้เชิงลึกที่น่าสนใจ ความหลงใหลและความเชี่ยวชาญของฉันทำให้ฉันมีส่วนร่วมในโครงการวิศวกรรมซอฟต์แวร์ที่หลากหลายกว่า 50 โครงการ โดยเน้นเฉพาะที่ AI/ML ความอยากรู้อยากเห็นอย่างต่อเนื่องของฉันยังดึงฉันไปสู่การประมวลผลภาษาธรรมชาติ ซึ่งเป็นสาขาที่ฉันกระตือรือร้นที่จะสำรวจเพิ่มเติม
คุณอาจชอบ
MARKLLM: ชุดเครื่องมือโอเพ่นซอร์สสำหรับลายน้ำ LLM
การปรับใช้โมเดลภาษาขนาดใหญ่บน Kubernetes: คู่มือฉบับสมบูรณ์
การทำความเข้าใจตัวเข้ารหัสอัตโนมัติแบบกระจัดกระจาย GPT-4 และ Claude 3: การสำรวจทางเทคนิคเชิงลึก
Qwen2 – โมเดลภาษาหลายภาษาล่าสุดของอาลีบาบาท้าทาย SOTA เช่น Llama 3
LLaVA-UHD: LMM รับรู้อัตราส่วนภาพและภาพความละเอียดสูง
อัดแน่นไปด้วยโมเดลภาษาขนาดใหญ่พร้อมการทำนายโทเค็นหลายโทเค็น
โพสต์ล่าสุด
- Llama 3.1: โมเดล AI โอเพ่นซอร์สที่ทันสมัยที่สุดของ Meta – ทุกสิ่งที่คุณต้องรู้
- ปฏิวัติประสบการณ์อุปกรณ์ของคุณ: AI ของ Apple กำหนดนิยามใหม่ของเทคโนโลยีอย่างไร
- กุญแจสู่โซลูชั่น AI ที่ประสบความสำเร็จ? ข้อมูลพฤติกรรม
- บทบาทของ GAN ในการปรับปรุงความปลอดภัยทางไซเบอร์
- แอพทรงผม AI ที่ดีที่สุด 10 อันดับ (กรกฎาคม 2024)