โมเดลและแพลตฟอร์ม AI

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

mm
เพิ่ม Unite.AI ลงในแหล่งข้อมูลที่คุณต้องการบน Google

โมเดลภาษาขนาดใหญ่ (LLMs) ได้พัฒนาอย่างมากในช่วงไม่กี่ปีที่ผ่านมา โมเดลอย่าง GPT-4, Google’s Gemini และ Claude 3 ได้สร้างมาตรฐานใหม่ในด้านความสามารถและการใช้งาน โมเดลเหล่านี้ไม่เพียงแต่ปรับปรุงการสร้างข้อความและแปลภาษาเท่านั้น แต่ยังขยายขอบเขตใหม่ในการประมวลผลแบบหลายรูปแบบ โดยรวมข้อมูลข้อความ ภาพ เสียง และวิดีโอเพื่อสร้างโซลูชัน AI ที่ครอบคลุมมากขึ้น

ตัวอย่างเช่น GPT-4 ของ OpenAI ได้แสดงถึงความก้าวหน้าที่สำคัญในการทำความเข้าใจและสร้างข้อความที่เหมือนมนุษย์ ในขณะที่โมเดล Gemini ของ Google มีความสามารถในการจัดการข้อมูลประเภทต่างๆ รวมถึงข้อความ ภาพ และเสียง ทำให้สามารถโต้ตอบได้อย่างราบรื่นและเหมาะสมตามบริบท ในทำนองเดียวกัน โมเดล Claude 3 ของ Anthropic มีความสามารถหลายภาษาและประสิทธิภาพที่ดีขึ้นในการทำงาน AI

เมื่อการพัฒนา LLMs ยังคงเร่งต่อไป การทำความเข้าใจความซับซ้อนของโมเดลเหล่านี้ โดยเฉพาะพารามิเตอร์และความต้องการหน่วยความจำ มีความสำคัญมาก วิธีนี้มีจุดมุ่งหมายเพื่อทำให้ประเด็นเหล่านี้ง่ายต่อการเข้าใจ โดยการให้คำอธิบายที่ละเอียดและเข้าใจได้ง่าย

พื้นฐานของโมเดลภาษาขนาดใหญ่

อะไรคือโมเดลภาษาขนาดใหญ่?

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

ความสำคัญของพารามิเตอร์ใน LLMs

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

การทำความเข้าใจโครงสร้าง Transformer

Transformers-architecture

โครงสร้าง Transformer

ภาพรวม

โครงสร้าง Transformer ซึ่งถูกนำเสนอในเอกสาร “Attention Is All You Need” โดย Vaswani et al. (2017) ได้กลายเป็นพื้นฐานสำหรับหลายๆ LLMs โครงสร้างนี้ประกอบด้วยตัวเข้ารหัส (encoder) และตัวถอดรหัส (decoder) แต่ละส่วนประกอบด้วยชั้นหลายชั้น

ส่วนประกอบของตัวเข้ารหัสและตัวถอดรหัส

  • ตัวเข้ารหัส: ประมวลผลลำดับข้อมูลเข้าและสร้างการแสดงผลที่ตระหนักรู้บริบท
  • ตัวถอดรหัส: สร้างลำดับข้อมูลออกโดยใช้การแสดงผลของตัวเข้ารหัสและโทเค็นที่สร้างขึ้นก่อนหน้านี้

บล็อกหลัก

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

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

Transformer Training

โมเดลพรีเทรนสำหรับการฝึก Transformer ที่มีประสิทธิภาพ

การคำนวณพารามิเตอร์ใน LLMs ที่ใช้ Transformer

มาทำความเข้าใจการคำนวณพารามิเตอร์สำหรับแต่ละส่วนของ LLMs ที่ใช้ 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 ล้านตัว

ประเภทของการใช้หน่วยความจำ

เมื่อทำงานกับ LLMs เราต้องพิจารณาใช้หน่วยความจำสองประเภทหลัก:

  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 คือจำนวนชั้น 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 = 12288
  • d_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 เราจะได้ข้อมูลเชิงลึกที่ลึกซึ้งเกี่ยวกับความซับซ้อนและขนาดของโมเดลเหล่านี้

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

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