เชื่อมต่อกับเรา

ปัญญาประดิษฐ์

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

mm

การตีพิมพ์

 on

การคำนวณพารามิเตอร์ใน LLM ที่ใช้หม้อแปลงไฟฟ้า

โมเดลภาษาขนาดใหญ่ (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: ประมวลผลลำดับอินพุตและสร้างการแสดงการรับรู้บริบท
  • ถอดรหัส: สร้างลำดับเอาต์พุตโดยใช้ตัวแทนของตัวเข้ารหัสและโทเค็นที่สร้างไว้ก่อนหน้านี้

หน่วยการสร้างที่สำคัญ

  1. ความสนใจหลายหัว: ช่วยให้โมเดลโฟกัสไปที่ส่วนต่างๆ ของลำดับอินพุตพร้อมกัน
  2. โครงข่ายประสาทเทียมแบบฟีดไปข้างหน้า: เพิ่มความไม่เป็นเชิงเส้นและความซับซ้อนให้กับโมเดล
  3. การทำให้เป็นมาตรฐานของเลเยอร์: ทำให้การฝึกเสถียรและเร่งความเร็วโดยการปรับเอาท์พุตระดับกลางให้เป็นมาตรฐาน

การคำนวณจำนวนพารามิเตอร์

การฝึกอบรมหม้อแปลงไฟฟ้า

โมเดลที่ได้รับการฝึกอบรมล่วงหน้าเพื่อการฝึกอบรมหม้อแปลงไฟฟ้าที่มีประสิทธิภาพ

การคำนวณพารามิเตอร์ใน LLM ที่ใช้หม้อแปลงไฟฟ้า

เรามาดูรายละเอียดการคำนวณพารามิเตอร์สำหรับแต่ละองค์ประกอบของ LLM ที่ใช้ Transformer กัน เราจะใช้สัญกรณ์จากกระดาษต้นฉบับโดยที่ d_model แสดงถึงมิติของสถานะที่ซ่อนอยู่ของโมเดล

  1. การฝังเลเยอร์:
    • พารามิเตอร์ = vocab_size * d_model
  2. ความสนใจหลายหัว:
    • สำหรับ h หัวด้วย d_k = d_v = d_model / h:
    • พารามิเตอร์ = 4 * d_model^2 (สำหรับ Q, K, V และการคาดการณ์เอาท์พุต)
  3. เครือข่ายฟีดส่งต่อ:
    • พารามิเตอร์ = 2 * d_model * d_ff + d_model + d_ff
    • ที่ไหน d_ff โดยทั่วไปคือ 4 * d_model
  4. การทำให้เป็นมาตรฐานของเลเยอร์:
    • พารามิเตอร์ = 2 * d_model (สำหรับขนาดและอคติ)

พารามิเตอร์ทั้งหมดสำหรับชั้น Transformer หนึ่งชั้น:

  • Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm

สำหรับรุ่นที่มี N ชั้น:

  • พารามิเตอร์ทั้งหมด = N * Parameters_layer + Parameters_embedding + Parameters_output

ตัวอย่างการคำนวณ

พิจารณารุ่นที่มีคุณสมบัติดังต่อไปนี้:

  • d_model = 768
  • h (จำนวนหัวความสนใจ) = 12
  • N (จำนวนชั้น) = 12
  • vocab_size = 50,000
  1. การฝังเลเยอร์:
    • 50,000 * 768 = 38,400,000
  2. ความสนใจหลายหัว:
    • 4 * 768^2 = 2,359,296
  3. เครือข่ายฟีดส่งต่อ:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
  4. การทำให้เป็นมาตรฐานของเลเยอร์:
    • 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 เราต้องพิจารณาการใช้หน่วยความจำสองประเภทหลัก:

  1. รุ่นหน่วยความจำ: หน่วยความจำที่จำเป็นสำหรับการจัดเก็บพารามิเตอร์โมเดล
  2. การทำงานของหน่วยความจำ: หน่วยความจำที่จำเป็นในระหว่างการอนุมานหรือการฝึกอบรมเพื่อจัดเก็บการเปิดใช้งานระดับกลาง การไล่ระดับสี และสถานะของเครื่องมือเพิ่มประสิทธิภาพ

การคำนวณหน่วยความจำโมเดล

หน่วยความจำโมเดลเกี่ยวข้องโดยตรงกับจำนวนพารามิเตอร์ โดยทั่วไปแต่ละพารามิเตอร์จะถูกจัดเก็บเป็นตัวเลขทศนิยม 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 การทำความเข้าใจการใช้หน่วยความจำถือเป็นสิ่งสำคัญสำหรับการจัดสรรทรัพยากรอย่างมีประสิทธิภาพ เรามาแบ่งข้อกำหนดหน่วยความจำออกเป็นสองประเภทหลักๆ ได้แก่ การใช้หน่วยความจำในสภาวะคงตัวและการใช้หน่วยความจำสูงสุด

การใช้หน่วยความจำสถานะคงที่

การใช้หน่วยความจำสถานะคงตัวประกอบด้วยส่วนประกอบต่อไปนี้:

  1. รุ่นน้ำหนัก: สำเนา FP32 ของพารามิเตอร์โมเดล ซึ่งต้องใช้ไบต์ 4N โดยที่ N คือจำนวนพารามิเตอร์
  2. สถานะของเครื่องมือเพิ่มประสิทธิภาพ: สำหรับเครื่องมือเพิ่มประสิทธิภาพ Adam ต้องใช้ไบต์ 8N (2 สถานะต่อพารามิเตอร์)
  3. การไล่ระดับสี: สำเนา FP32 ของการไล่ระดับสี ต้องใช้ไบต์ 4N
  4. ป้อนข้อมูล: สมมติว่าอินพุต int64 ต้องใช้ไบต์ 8BD โดยที่ B คือขนาดแบตช์ และ D คือมิติอินพุต

การใช้งานหน่วยความจำสถานะคงตัวทั้งหมดสามารถประมาณได้โดย:

  • M_steady = 16N + 8BD ไบต์

การใช้งานหน่วยความจำสูงสุด

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

  1. การทำให้เป็นมาตรฐานของเลเยอร์: ต้องใช้ 4E ไบต์ต่อบรรทัดฐานของเลเยอร์ โดยที่ E = BSH (B: ขนาดแบตช์, S: ความยาวลำดับ, H: ขนาดที่ซ่อนอยู่)
  2. บล็อกความสนใจ:
    • การคำนวณ QKV: 2E ไบต์
    • เมทริกซ์ความสนใจ: 4BSS ไบต์ (S: ความยาวลำดับ)
    • เอาต์พุตแจ้งเตือน: 2E ไบต์
  3. บล็อกฟีดไปข้างหน้า:
    • เลเยอร์เชิงเส้นแรก: 2E ไบต์
    • การเปิดใช้งาน GELU: 8E ไบต์
    • เลเยอร์เชิงเส้นที่สอง: 2E ไบต์
  4. การสูญเสียข้ามเอนโทรปี:
    • บันทึก: 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 ทำให้เราได้รับข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับความซับซ้อนและขนาดของโมเดลเหล่านี้

หากต้องการทำความเข้าใจเพิ่มเติมเกี่ยวกับความก้าวหน้าล่าสุดในโมเดลภาษาขนาดใหญ่และการใช้งาน โปรดดูคำแนะนำที่ครอบคลุมเหล่านี้:

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