โมเดลและแพลตฟอร์ม AI
ความเข้าใจเกี่ยวกับพารามิเตอร์และความต้องการหน่วยความจำของโมเดลภาษาขนาดใหญ่: การสำรวจอย่างลึก

By
Aayush Mittal มิตตาล
โมเดลภาษาขนาดใหญ่ (LLMs) ได้พัฒนาอย่างมากในช่วงไม่กี่ปีที่ผ่านมา โมเดลอย่าง GPT-4, Google’s Gemini และ Claude 3 ได้สร้างมาตรฐานใหม่ในด้านความสามารถและการใช้งาน โมเดลเหล่านี้ไม่เพียงแต่ปรับปรุงการสร้างข้อความและแปลภาษาเท่านั้น แต่ยังขยายขอบเขตใหม่ในการประมวลผลแบบหลายรูปแบบ โดยรวมข้อมูลข้อความ ภาพ เสียง และวิดีโอเพื่อสร้างโซลูชัน AI ที่ครอบคลุมมากขึ้น
ตัวอย่างเช่น GPT-4 ของ OpenAI ได้แสดงถึงความก้าวหน้าที่สำคัญในการทำความเข้าใจและสร้างข้อความที่เหมือนมนุษย์ ในขณะที่โมเดล Gemini ของ Google มีความสามารถในการจัดการข้อมูลประเภทต่างๆ รวมถึงข้อความ ภาพ และเสียง ทำให้สามารถโต้ตอบได้อย่างราบรื่นและเหมาะสมตามบริบท ในทำนองเดียวกัน โมเดล Claude 3 ของ Anthropic มีความสามารถหลายภาษาและประสิทธิภาพที่ดีขึ้นในการทำงาน AI
เมื่อการพัฒนา LLMs ยังคงเร่งต่อไป การทำความเข้าใจความซับซ้อนของโมเดลเหล่านี้ โดยเฉพาะพารามิเตอร์และความต้องการหน่วยความจำ มีความสำคัญมาก วิธีนี้มีจุดมุ่งหมายเพื่อทำให้ประเด็นเหล่านี้ง่ายต่อการเข้าใจ โดยการให้คำอธิบายที่ละเอียดและเข้าใจได้ง่าย
พื้นฐานของโมเดลภาษาขนาดใหญ่
อะไรคือโมเดลภาษาขนาดใหญ่?
โมเดลภาษาขนาดใหญ่คือเครือข่ายประสาทที่ได้รับการฝึกฝนบนชุดข้อมูลขนาดใหญ่เพื่อทำความเข้าใจและสร้างภาษาของมนุษย์ พวกมันพึ่งพาโครงสร้างเช่น Transformer ซึ่งใช้กลไกเช่นการดึงความสนใจตนเองเพื่อประมวลผลและสร้างข้อความ
ความสำคัญของพารามิเตอร์ใน LLMs
พารามิเตอร์เป็นส่วนประกอบหลักของโมเดลเหล่านี้ พารามิเตอร์รวมถึงน้ำหนักและความเอนเอียง ซึ่งโมเดลปรับระหว่างการฝึกเพื่อลดข้อผิดพลาดในการทำนาย จำนวนพารามิเตอร์มักจะสัมพันธ์กับความสามารถและประสิทธิภาพของโมเดล แต่ยังมีอิทธิพลต่อความต้องการการคำนวณและหน่วยความจำ
การทำความเข้าใจโครงสร้าง Transformer
ภาพรวม
โครงสร้าง Transformer ซึ่งถูกนำเสนอในเอกสาร “Attention Is All You Need” โดย Vaswani et al. (2017) ได้กลายเป็นพื้นฐานสำหรับหลายๆ LLMs โครงสร้างนี้ประกอบด้วยตัวเข้ารหัส (encoder) และตัวถอดรหัส (decoder) แต่ละส่วนประกอบด้วยชั้นหลายชั้น
ส่วนประกอบของตัวเข้ารหัสและตัวถอดรหัส
- ตัวเข้ารหัส: ประมวลผลลำดับข้อมูลเข้าและสร้างการแสดงผลที่ตระหนักรู้บริบท
- ตัวถอดรหัส: สร้างลำดับข้อมูลออกโดยใช้การแสดงผลของตัวเข้ารหัสและโทเค็นที่สร้างขึ้นก่อนหน้านี้
บล็อกหลัก
- การดึงความสนใจหลายหัว: ทำให้โมเดลสามารถมุ่งเน้นไปที่ส่วนต่างๆ ของลำดับข้อมูลเข้าพร้อมกัน
- เครือข่ายประสาทแบบฟีดฟอร์เวิร์ด: เพิ่มความไม่เป็นเส้นตรงและความซับซ้อนให้กับโมเดล
- การปรับมาตรฐานชั้น: ทำให้การฝึกมั่นคงและเร็วขึ้นโดยการปรับมาตรฐานการออกระหว่างชั้น
การคำนวณจำนวนพารามิเตอร์
การคำนวณพารามิเตอร์ใน LLMs ที่ใช้ Transformer
มาทำความเข้าใจการคำนวณพารามิเตอร์สำหรับแต่ละส่วนของ LLMs ที่ใช้ 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 ล้านตัว
ประเภทของการใช้หน่วยความจำ
เมื่อทำงานกับ LLMs เราต้องพิจารณาใช้หน่วยความจำสองประเภทหลัก:
- หน่วยความจำของโมเดล: หน่วยความจำที่จำเป็นในการเก็บพารามิเตอร์ของโมเดล
- หน่วยความจำการทำงาน: หน่วยความจำที่จำเป็นระหว่างการอนุมานหรือการฝึกเพื่อเก็บการกระตุ้นกลาง อนุพันธ์ และสถานะของตัวปรับเหมาะสม
การคำนวณหน่วยความจำของโมเดล
หน่วยความจำของโมเดลเกี่ยวข้องโดยตรงกับจำนวนพารามิเตอร์ แต่ละพารามิเตอร์จะถูกเก็บเป็นตัวเลขทศนิยม 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 คือจำนวนชั้น Transformer
การใช้หน่วยความจำสูงสุดทั้งหมด
การใช้หน่วยความจำสูงสุดระหว่างการฝึกสามารถประมาณได้โดยการรวมการใช้หน่วยความจำในสถานะคงที่และการกระตุ้น:
- M_peak = M_steady + M_act + 4BSV ไบต์
พจน์เสริม 4BSV ไบต์สำหรับการจัดสรรพิเศษที่เริ่มต้นการถอยหลัง
โดยการทำความเข้าใจส่วนประกอบเหล่านี้ เราสามารถเพิ่มประสิทธิภาพการใช้หน่วยความจำระหว่างการฝึกและการอนุมาน เพื่อให้แน่ใจถึงการกำหนดทรัพยากรอย่างมีประสิทธิภาพและปรับปรุงประสิทธิภาพของโมเดลภาษาขนาดใหญ่
กฎการปรับขนาดและการพิจารณาประสิทธิภาพ
กฎการปรับขนาดสำหรับ LLMs
การวิจัยพบว่าประสิทธิภาพของ LLMs มีแนวโน้มที่จะปฏิบัติตามกฎการปรับขนาดบางประการเมื่อจำนวนพารามิเตอร์เพิ่มขึ้น Kaplan et al. (2020) สังเกตว่าประสิทธิภาพของโมเดลดีขึ้นตามกฎกำลังของจำนวนพารามิเตอร์ งบการคำนวณ และขนาดของชุดข้อมูล
ความสัมพันธ์ระหว่างประสิทธิภาพของโมเดลและจำนวนพารามิเตอร์สามารถประมาณได้ด้วย:
ประสิทธิภาพ ∝ N^α
โดยที่ N คือจำนวนพารามิเตอร์ และ α คือสัมประสิทธิ์การปรับขนาดที่มักจะอยู่ที่ประมาณ 0.07 สำหรับงานสร้างแบบจำลองภาษา
สิ่งนี้หมายความว่าเพื่อให้ได้ประสิทธิภาพที่ดีขึ้น 10% เราต้องเพิ่มจำนวนพารามิเตอร์ขึ้นเป็นปัจจัยของ 10^(1/α) ≈ 3.7
เทคนิคเพิ่มประสิทธิภาพ
เนื่องจาก LLMs ยังคงเติบโต นักวิจัยและผู้ปฏิบัติงานได้พัฒนาเทคนิคต่างๆ เพื่อปรับปรุงประสิทธิภาพ:
a) การฝึกที่มีความแม่นยำผสม: ใช้ตัวเลขทศนิยม 16 บิตหรือแม้กระทั่ง 8 บิตสำหรับบางการดำเนินการเพื่อลดการใช้หน่วยความจำและความต้องการการคำนวณ
b) การขนานแบบโมเดล: แบ่งโมเดลออกไปทั่วหลายๆ GPU หรือ TPU เพื่อจัดการโมเดลที่ใหญ่กว่าที่สามารถใส่ลงในอุปกรณ์เดียว
c) การตรวจสอบอนุพันธ์: แลกการคำนวณกับหน่วยความจำโดยการคำนวณกระตุ้นบางส่วนใหม่ระหว่างการถอยหลังแทนการเก็บไว้
d) การคัดเลือกและปรับขนาด: ลบน้ำหนักที่ไม่สำคัญหรือลดความแม่นยำหลังการฝึกเพื่อสร้างโมเดลที่เล็กและใช้ประสิทธิภาพมากขึ้น
e) การกลั่น: ฝึกโมเดลที่เล็กกว่าให้เลียนแบบพฤติกรรมของโมเดลที่ใหญ่กว่า ซึ่งอาจรักษาประสิทธิภาพได้มากโดยใช้น้อยพารามิเตอร์
ตัวอย่างเชิงปฏิบัติและการคำนวณ
GPT-3 ซึ่งเป็นหนึ่งในโมเดลภาษาขนาดใหญ่ที่สุด มีพารามิเตอร์ 175 พันล้านตัว มันใช้ส่วนของตัวถอดรหัสของโครงสร้าง Transformer เพื่อทำความเข้าใจขนาดของมัน มาทำความเข้าใจการนับพารามิเตอร์ด้วยค่าที่สมมุติ:
d_model = 12288d_ff = 4 * 12288 = 49152- จำนวนชั้น = 96
สำหรับตัวถอดรหัสชั้นเดียว:
พารามิเตอร์ทั้งหมด = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 พันล้าน
พารามิเตอร์ทั้งหมดสำหรับ 96 ชั้น:
- 1.1 พันล้าน * 96 = 105.6 พันล้าน
พารามิเตอร์ทั้งหมดของโมเดล:
- 105.6 พันล้าน + พารามิเตอร์จากส่วนอื่นๆ = 175 พันล้าน
โมเดลนี้จะมีพารามิเตอร์ประมาณ 175 พันล้านตัว
สรุป
การทำความเข้าใจพารามิเตอร์และความต้องการหน่วยความจำของโมเดลภาษาขนาดใหญ่มีความสำคัญอย่างยิ่งในการออกแบบ ฝึก และใช้งานเครื่องมือเหล่านี้อย่างมีประสิทธิภาพ โดยการแบ่งส่วนประกอบของโครงสร้าง Transformer และตรวจสอบตัวอย่างเชิงปฏิบัติ เช่น GPT เราจะได้ข้อมูลเชิงลึกที่ลึกซึ้งเกี่ยวกับความซับซ้อนและขนาดของโมเดลเหล่านี้
เพื่อทำความเข้าใจความก้าวหน้าล่าสุดเกี่ยวกับโมเดลภาษาขนาดใหญ่และความสามารถของพวกมัน ตรวจสอบคู่มือที่ครอบคลุมต่อไปนี้:
- สำรวจคู่มือสมบูรณ์เกี่ยวกับ Gemma 2: โมเดลภาษาขนาดใหญ่ที่เปิดกว้างใหม่ของ Google สำหรับข้อมูลเชิงลึกเกี่ยวกับการปรับปรุงประสิทธิภาพและคุณลักษณะใหม่ๆ
- เรียนรู้เกี่ยวกับการสร้างตัวแทน LLM สำหรับ RAG จากศูนย์และอื่นๆ: คู่มือที่ครอบคลุม ซึ่งอภิปรายถึงความท้าทายและวิธีแก้ปัญหาในการสร้างแบบจำลองที่เพิ่มการค้นหา
- ค้นหาความซับซ้อนของ การกำหนดค่าการฝึก การปรับละเอียด และการอนุมานของ LLMs โดยใช้ GPU ของ NVIDIA และ CUDA (NVDA ) สำหรับการเพิ่มประสิทธิภาพของระบบ AI
ฉันใช้เวลาที่ผ่านมา 5 ปีในการศึกษาสิ่งที่น่าสนใจเกี่ยวกับ Machine Learning และ Deep Learning ความเชี่ยวชาญและความหลงใหลของฉันทำให้ฉันเข้าร่วมในโครงการพัฒนาซอฟต์แวร์มากกว่า 50 โครงการที่มีความหลากหลาย โดยมุ่งเน้นไปที่ AI/ML ความอยากรู้อยากเห็นของฉันยังทำให้ฉันสนใจในด้าน Natural Language Processing ซึ่งเป็นสาขาที่ฉันต้องการสำรวจต่อไป
ค้นพบเพิ่มเติม


หาก Bot สามารถฟลิร์ตกับเด็กได้ สิ่งอื่น ๆ ที่มันสามารถทำกับข้อมูลของคุณได้อีกหรือไม่?


วิธีการหลบหลีกการตรวจสอบวิทยาศาสตร์เท็จผ่านผู้ตรวจสอบ AI


โมเดล AI ชอบงานเขียนของมนุษย์มากกว่างานเขียนที่สร้างโดย AI


การปฏิวัติ MoE: วิธีการกำหนดเส้นทางและความเชี่ยวชาญที่ทันสมัยกำลังเปลี่ยนแปลง LLMs


สิ้นสุดยุคการขยายขนาด: ทำไมการผ่านพ้นขีดจำกัดของอัลกอริทึมจึงสำคัญกว่าขนาดของโมเดล


ทำไม AI ไม่สามารถยอมรับว่าไม่รู้คำตอบได้

