พื้นฐาน AI

คาชู KV ของคุณไม่มีปัญหาเรื่องบิต แต่มีปัญหาเรื่องเรขาคณิต

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

เมื่อเทียบความแม่นยำ 2 บิตที่เหมือนกัน การตัดสินใจเกี่ยวกับแกนใดที่จะปรับขนาดจะเปลี่ยนคะแนนมาตรฐานจาก 2.88 เป็น 63.53 คีย์และค่าต้องได้รับการปฏิบัติที่ตรงกันข้าม — และเหตุผลอยู่ในสมการความสนใจ ไม่ใช่ในฮาร์ดแวร์

ลองพิจารณา Llama-2-13B กลุ่มแคชคีย์-ค่าของมันตามขนาดกลุ่มปรับขนาด 32 เป็น 2 บิต ในขณะที่ทุกสิ่งที่เหลือยังคงอยู่ในตำแหน่งเดิม — รุ่นเดียวกัน งบบิตเดียวกัน ขนาดกลุ่มเดียวกัน มาตรฐานเดียวกัน

ขึ้นอยู่กับองค์ประกอบเดียวของการตัดสินใจในการนำไปใช้ ผลลัพธ์ความแม่นยำของ CoQA จะได้ผลลัพธ์ 2.88 หรือ 63.53 คะแนนโดยใช้ความแม่นยำเต็มคือ 66.37

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

สี่วิธีในการใช้จ่าย 2 บิตที่เหมือนกันในแคชที่เหมือนกัน ผลมาจาก KIVI ablation บน Llama-2-13B ที่ขนาดกลุ่ม 32

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

ทำไมแคช KV คือที่ที่สิ่งนี้กัด

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

การเพิ่มขึ้นนี้สามารถระบุได้ง่ายเมื่อดูการบริโภคหน่วยความจำของส่วนต่างๆ ของรุ่น ในการวิเคราะห์ KVQuant ของ LLaMA-7B น้ำหนักคิดเป็นประมาณ 98 เปอร์เซ็นต์ของหน่วยความจำที่ความยาวลำดับ 512 โดยมีการกระตุ้น 2 เปอร์เซ็นต์ ที่บริบท 128K อัตราส่วนกลับกันประมาณ 16 เปอร์เซ็นต์น้ำหนักและ 84 เปอร์เซ็นต์แคช KV เมื่อเราดูการวิเคราะห์ของ OPT-175B ที่อ้างอิงโดยผู้เขียน KIVI พบผลลัพธ์ที่คล้ายกัน โดยเฉพาะอย่างยิ่งที่ขนาดแบตช์ 512 พร้อมคำสั่ง 512 โทเค็น แคช KV จะถึง 1.2TB ซึ่งใหญ่กว่ารุ่นน้ำหนักหลายเท่า

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

สิ่งที่ข้อผิดพลาดการปรับขนาดประกอบด้วย

การปรับขนาดจำนวนเต็มแบบสม่ำเสมอเป็นคณิตศาสตร์ที่ตรงไปตรงมา สำหรับกลุ่มตัวเลข คุณบันทึกตัวเลขที่น้อยที่สุดเป็นจุดศูนย์แล้วหารช่วงของกลุ่มนั้นด้วยจำนวนระดับที่สามารถแสดงได้เพื่อให้ได้ขนาดขั้นตอน คุณปัดเศษแต่ละองค์ประกอบให้ใกล้กับขั้นตอนที่สุด สองผลลัพธ์ที่ตามมา คือ ข้อผิดพลาดต่อองค์ประกอบถูกจำกัดโดยครึ่งหนึ่งของขั้นตอน ข้อผิดพลาดต่อองค์ประกอบถูกจำกัดโดยครึ่งหนึ่งของขั้นตอน ขั้นตอนคือช่วงของกลุ่มที่หารด้วย 2ᴮ − 1 เมื่อ 2 บิต คุณมีเพียง 4 ระดับในการครอบคลุมการกระจายที่มีอยู่ภายในกลุ่มนั้น ดังนั้น องค์ประกอบที่มีขนาดใหญ่กว่าเพื่อนบ้าน 100 เท่าจึงไม่เพียงแต่ทำงานไม่ดีเท่านั้น แต่ยังทำให้ขนาดขั้นตอนสำหรับองค์ประกอบอื่นๆ ที่ใช้กลุ่มเดียวกันหยาบขึ้น กลุ่มเป็นหน่วยความเสียหาย การเลือกแกนหมายถึงการตัดสินใจว่าองค์ประกอบใดจะแบ่งปันชะตากรรม

คีย์: ผู้ลี้ภัยอาศัยอยู่ในช่องทางคงที่

โมเดลภาษาขนาดใหญ่มีการกระตุ้นที่ไม่ปกติเมื่อเทียบกับการกระตุ้นมากที่สุด Sun และเพื่อนร่วมงานได้ทำแค็ตตาล็อกการกระตุ้นที่มีขนาดใหญ่มากที่สุดในโมเดลต่างๆ: ใน Mixtral 8x7B ขนาดใหญ่ที่สุดอยู่ที่ประมาณ 7000 ในขณะที่ขนาดคุณลักษณะที่น้อยที่สุดอยู่ที่ประมาณ 0.3 — ประมาณสี่อันดับของขนาดที่แตกต่างกัน สิ่งเหล่านี้มีความหายาก พวกมันอยู่ในมิติที่ไม่เปลี่ยนแปลงบ่อยนักเมื่อเข้ามา และพวกมันไม่ได้บังเอิญ พวกมันทำหน้าที่เป็นอคติที่ไม่ชัดเจน และพวกมันคือสิ่งที่ดึงดูดความสนใจไปที่โทเค็นเพียงไม่กี่ตัว: พฤติกรรมของจุดสนใจ ในแคชคีย์ โครงสร้างนี้ชัดเจนมาก: ช่องทางเฉพาะจะพกพาขนาดใหญ่สม่ำเสมอในแต่ละโทเค็นในลำดับ

ค่า: ที่ที่ความเข้าใจแตกหัก

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

พวกมันไม่ทำ คุณสามารถบีบอัดค่าตามช่องทางได้ แต่จะทำให้รุ่นล่ม

และนี่คือจุดสำคัญ: หากคุณวัดความสูญเสียนี้โดยใช้ข้อผิดพลาดการกู้คืนแบบดั้งเดิมบนเทนเซอร์ดั้งเดิมสำหรับแต่ละค่าที่บีบอัด การปรับขนาดค่าตามช่องทางดูเหมือนจะดีกว่าเล็กน้อยที่ 3.73 เทียบกับ 4.57 หากคุณตรวจสอบการบีบอัดของคุณในทางที่ชัดเจน คุณจะเลือกการกำหนดค่าที่ทำลายรุ่น

ข้อผิดพลาดการปรับขนาดแคชค่าบน Llama-2-13B โดยวัดสองวิธี เมตริกที่เก็บและเมตริกที่บริโภคไม่เห็นด้วยมากกว่าอันดับของขนาด

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

ข้อผิดพลาดสัมพัทธ์ที่รายงานโดย KIVI สำหรับผลลัพธ์ของความสนใจเนื่องจากการปรับขนาดเวกเตอร์ค่าตามโทเค็นคือ 3.55 เทียบกับ 49.89 สำหรับการปรับขนาดตามช่องทาง — มากกว่า 14 เท่าสำหรับสิ่งที่ดูเหมือนเป็นตัวเลือกที่ดีกว่าตามวิธีการบีบอัด

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

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

การฝังที่หมุนเวียนทำให้คีย์ซับซ้อน

มีปัญหาในการใช้การฝังที่หมุนเวียน (RoPE) RoPE หมุนคู่ช่องทางตามตำแหน่งสัมพัทธ์ของแต่ละโทเค็น การผสมผสานนี้ทำให้โครงสร้างช่องทางคงที่ที่ทำให้การปรับขนาดคีย์แบบช่องทางทำงานในตอนแรก — ช่องทางผู้ลี้ภัยที่หมุนเข้ากับเพื่อนบ้าน และเพื่อนบ้านมีช่วงของช่องทาง การตอบสนองของ KVQuant คือการเรียงลำดับ: ปรับขนาดคีย์ก่อนที่จะหมุน และใช้ RoPE หลังการปลดปรับขนาด ร่วมกับการปรับขนาดคีย์แบบช่องทาง ประเภทข้อมูลที่ไม่สม่ำเสมอ และการแยกผู้ลี้ภัยเพียงไม่กี่ตัว สิ่งนี้ทำให้พวกเขาอยู่ต่ำกว่าการเสื่อมสภาพความสับสน 0.1 ที่ 3 บิต และทำให้สามารถให้บริการ LLaMA-7B ได้ถึง 1 ล้านโทเค็นของบริบทบน A100-80GB เพียงตัวเดียว

ยังสำคัญที่จะต้องเข้าใจระดับผลกระทบของ RoPE ผู้เขียนของเอกสาร “RotateKV” รายงานการเพิ่มขึ้น 145% ในข้อผิดพลาดการปรับขนาดเมื่อ RoPE ถูกเพิ่ม และตั้งข้อสังเกตว่าช่องทางผู้ลี้ภัยแตกต่างกันไปตามหัวความสนใจ — ซึ่งเป็นเหตุผลที่การนำการหมุนร่วมกันทั้งหมดไปใช้ทุกที่ไม่เพียงพอ และการหมุนแบบปรับให้เหมาะสมกับหัวทำได้ดีกว่า

ภาษีระบบและทำไมมันไม่ใช่รายละเอียด

การปรับขนาดตามโทเค็นเหมาะกับการถอดรหัส คุณได้รับโทเค็น ปรับขนาดมัน และเพิ่มลงในลำดับ (ตามมิติของโทเค็น) ไม่มีสิ่งอื่นเคลื่อนไหว

อย่างไรก็ตาม การปรับขนาดตามช่องทางไม่เหมาะสม เมื่อถึงช่องทางที่ข้อมูลที่ไม่ได้สร้างขึ้นยังไม่มี คุณไม่สามารถคำนวณปัจจัยขนาดได้เมื่อโทเค็นมาถึง วิธีแก้ปัญหา KIVI คือการเก็บโทเค็นล่าสุด — สูงสุด 128 — ในความแม่นยำเต็มในบัฟเฟอร์หลง และปรับขนาดเป็นกลุ่มเมื่อมีเพียงพอ

เมื่อเกิดขึ้น บัฟเฟอร์หลงกลายเป็นภาระที่ต้องรับผิดชอบ มากกว่าที่จะเป็นเพียงสิ่งที่เกิดขึ้นโดยบังเอิญ บน GSM8K ด้วย Llama-2-7B คะแนนความแม่นยำเต็มคือ 13.50 เมื่อปรับขนาดเต็มไปเป็น 2 บิตพร้อมแกนที่ถูกต้อง คะแนนจะอยู่ที่ 5.76 แกนที่เหมือนกันและบิตเดียวกัน บวกกับบัฟเฟอร์หลงสำหรับโทเค็นที่สร้างขึ้นล่าสุดในความแม่นยำเต็ม คะแนนจะอยู่ที่ 12.74 หน้าต่างแบบเลื่อนสำหรับโทเค็นที่สร้างขึ้นล่าสุดในความแม่นยำเต็มจะกู้คืนกลับไปสู่สิ่งที่สูญเสียไปเนื่องจากการปรับขนาดที่ก้าวร้าวบนปัญหาหลายขั้นตอนที่ยากลำบาก — ซึ่งจะสมเหตุสมผลหากเราพิจารณาว่าโทเค็นเหล่านั้นถูกจับตามองโดยการดำเนินการทางคณิตศาสตร์

สิ่งที่ต้องทำกับสิ่งนี้

  1. ไม่เคยใช้ปรับขนาดเดียวสำหรับทั้งสอง ใช้ปรับขนาดที่แตกต่างกันสำหรับคีย์ (ตามช่องทาง) และสำหรับค่า (ตามโทเค็น) ระบบที่ใช้ปรับขนาดเดียวสำหรับ “แคช KV” อาจเสียคุณภาพไปแล้วเมื่อใช้จำนวนบิตที่น้อยในการแสดงค่าแต่ละค่า
  2. ปรับขนาดคีย์ก่อน RoPE สิ่งนี้เป็นเรื่องของความถูกต้องมากกว่าความชอบส่วนบุคคล
  3. เก็บหน้าต่างความแม่นยำเต็มของโทเค็นที่สร้างขึ้นล่าสุด แม้ว่าการเก็บหน้าต่างนี้จะใช้หน่วยความจำเพียงเล็กน้อยเมื่อเทียบกับขนาดแคชที่ใหญ่ แต่ก็คือพื้นที่ที่สร้างความแม่นยำส่วนใหญ่สำหรับงานที่ยากลำบาก
  4. ไม่ตรวจสอบด้วยข้อผิดพลาดการกู้คืน ตรวจสอบเสมอตามผลลัพธ์ของความสนใจหรือตามประสิทธิภาพงานสุดท้าย เมตริกที่เก็บไม่เพียงแต่จะไม่แน่นอนเท่านั้น แต่สำหรับค่า เมตริกยังชี้ไปในทิศทางที่ผิด
  5. ไม่ตรวจสอบด้วยมาตรฐานการทำแบบทดสอบหลายตัวเลือกที่ปิด ผู้เขียน KIVI หลีกเลี่ยงงานที่ปิดเช่น MMLU สำหรับการประเมินนี้ โดยที่ขั้นตอนการถอดรหัสเดียวที่อ่านผลลัพธ์ไม่ทำให้แคชทำงานเลย การประเมินใดๆ ที่ไม่สร้างแคชตามเวลาแล้วดำเนินการสร้างจากมันจะไม่สามารถสังเกตเห็นความล้มเหลวที่อยู่ในดีไซน์ระบบของคุณได้

ทิศทางที่งานกำลังจะไป

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

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

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

หลักการทั่วไป

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

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

Himanshu Goel เป็นนักวิจัย AI/ML ที่เชี่ยวชาญด้านการสร้างเนื้อหาที่ได้รับการปรับปรุงสำหรับโดเมนที่มีความเสี่ยงสูง รวมถึงการทำงานของเอกสารทางชีวการแพทย์ การเงิน และกฎระเบียบ