
กล่องเครื่องมือการบีบอัดโมเดลสำหรับโมเดลภาษาขนาดใหญ่และโมเดลการแพร่กระจาย
[2024/11] ? งานการหาปริมาณแบบจำลองการแพร่กระจาย W4A4 ล่าสุดของเราอัลกอริทึม SVDQuant และระบบ Nunchaku ได้รับการเผยแพร่สู่สาธารณะแล้ว! ตรวจสอบกระดาษของเรา!
[2024/05] ? อัลกอริทึม QoQ และระบบ QServe ของ W4A8KV4 LLM ล่าสุดของเราได้รับการเผยแพร่สู่สาธารณะแล้ว! QoQ ย่อมาจาก quattuor-octō-quattuor ซึ่งเป็น 4-8-4 ในภาษาลาติน ตรวจสอบกระดาษของเรา!
DeepCompressor คือกล่องเครื่องมือการบีบอัดโมเดลโอเพ่นซอร์สสำหรับโมเดลภาษาขนาดใหญ่และโมเดลการแพร่กระจายที่ใช้ PyTorch ปัจจุบัน DeepCompressor รองรับการหาปริมาณปลอมด้วยประเภทข้อมูลจำนวนเต็มและจุดลอยตัวใดๆ ภายใน 8 บิต เช่น INT8, INT4 และ FP4_E2M1 นี่คือตัวอย่างที่ใช้อัลกอริทึมต่อไปนี้
การหาปริมาณหลังการฝึกอบรมสำหรับโมเดลภาษาขนาดใหญ่:
QoQ (W4A8KV4)
สมูทควอนท์ (W8A8)
AWQ (W4A16)
GPTQ (W4A16)
การหาปริมาณเฉพาะน้ำหนักเท่านั้น
การหาปริมาณการเปิดใช้งานน้ำหนัก
การเปิดใช้งานน้ำหนักและการหาปริมาณแคช KV
การหาปริมาณหลังการฝึกอบรมสำหรับแบบจำลองการแพร่กระจาย:
SVDQuant (W4A4)
การหาปริมาณการเปิดใช้งานน้ำหนัก
DeepCompressor ยังมีตัวอย่างที่ผสานรวมกับไลบรารีการอนุมานอื่นๆ
ปรับใช้ LLM แบบวัดปริมาณเฉพาะน้ำหนักด้วย TinyChat
ปรับใช้ LLM เชิงปริมาณด้วย QServe
ปรับใช้โมเดลการแพร่กระจายเชิงปริมาณด้วย Nunchaku
โคลนที่เก็บนี้และไปที่โฟลเดอร์ deepcompressor
git clone https://github.com/mit-han-lab/deepcompressor cd deepcompressor
ติดตั้งแพ็คเกจ
conda env create -f environment.yml poetry install
[เว็บไซต์][กระดาษ][ระบบอนุมานกระบอง]
โมเดลการแพร่กระจายได้รับการพิสูจน์แล้วว่ามีประสิทธิภาพสูงในการสร้างภาพคุณภาพสูง อย่างไรก็ตาม เนื่องจากโมเดลเหล่านี้มีขนาดใหญ่ขึ้น พวกเขาจึงต้องการหน่วยความจำเพิ่มขึ้นอย่างมากและประสบปัญหาจากเวลาแฝงที่สูงขึ้น ทำให้เกิดความท้าทายอย่างมากในการปรับใช้ ในงานนี้ เรามุ่งหวังที่จะเร่งแบบจำลองการแพร่กระจายโดยการวัดปริมาณน้ำหนักและการเปิดใช้งานเป็น 4 บิต ในระดับที่รุนแรง ทั้งน้ำหนักและการเปิดใช้งานมีความไวสูง โดยที่วิธีการหาปริมาณหลังการฝึกอบรมแบบเดิมๆ สำหรับโมเดลภาษาขนาดใหญ่ เช่น การปรับให้เรียบ จะไม่เพียงพอ เพื่อเอาชนะข้อจำกัดนี้ เราขอเสนอ SVDQuant ซึ่งเป็นกระบวนทัศน์การวัดปริมาณ 4 บิตใหม่ แตกต่างจากการปรับให้เรียบซึ่งกระจายค่าผิดปกติระหว่างน้ำหนักและการเปิดใช้งาน วิธีการของเราจะดูดซับค่าผิดปกติเหล่านี้โดยใช้สาขาระดับต่ำ อันดับแรก เราจะรวมค่าผิดปกติโดยเปลี่ยนจากการเปิดใช้งานเป็นค่าน้ำหนัก จากนั้นใช้สาขาระดับต่ำที่มีความแม่นยำสูงเพื่อรับค่าผิดปกติของน้ำหนักด้วย Singular Value Decomposition (SVD) กระบวนการนี้ทำให้การหาปริมาณของทั้งสองฝ่ายง่ายขึ้น อย่างไรก็ตาม การดำเนินการสาขาระดับต่ำอย่างไร้เดียงสาโดยอิสระจะมีค่าใช้จ่ายจำนวนมาก เนื่องจากมีการย้ายข้อมูลการเปิดใช้งานเพิ่มเติม ส่งผลให้การเร่งความเร็วของปริมาณลดลง เพื่อแก้ไขปัญหานี้ เราได้ร่วมออกแบบกลไกการอนุมาน Nunchaku ที่หลอมรวมเคอร์เนลของแบรนช์ระดับต่ำให้เป็นแบรนช์บิตต่ำเพื่อตัดการเข้าถึงหน่วยความจำที่ซ้ำซ้อน นอกจากนี้ยังสามารถรองรับอะแดปเตอร์ระดับต่ำ (LoRA) ที่มีจำหน่ายทั่วไปได้อย่างราบรื่นโดยไม่จำเป็นต้องหาปริมาณใหม่ การทดลองอย่างกว้างขวางบน SDXL, PixArt-∑ และ FLUX.1 ตรวจสอบประสิทธิภาพของ SVDQuant ในการรักษาคุณภาพของภาพ เราลดการใช้หน่วยความจำสำหรับรุ่น 12B FLUX.1 ลง 3.5× ทำให้ได้ความเร็วเพิ่มขึ้น 3.0× เหนือค่าพื้นฐานแบบควอนตัมแบบ 4 บิตแบบน้ำหนักอย่างเดียวบนแล็ปท็อป 16GB 4090 GPU ซึ่งปูทางไปสู่แอปพลิเคชันที่มีการโต้ตอบมากขึ้นบนพีซี


ด้านล่างนี้คือคุณภาพและความคล้ายคลึงที่ประเมินด้วยตัวอย่าง 5,000 ตัวอย่างจากชุดข้อมูล MJHQ-30K IR หมายถึง ImageReward ผลลัพธ์แบบ 4 บิตของเรามีประสิทธิภาพเหนือกว่าพื้นฐานแบบ 4 บิตอื่นๆ โดยรักษาคุณภาพของภาพของรุ่น 16 บิตได้อย่างมีประสิทธิภาพ
| แบบอย่าง | ความแม่นยำ | วิธี | กองทุนเพื่อการลงทุน ( | นักลงทุนสัมพันธ์ ( | ลิปส์ ( | พีเอสเอ็นอาร์( |
|---|---|---|---|---|---|---|
| FLUX.1-dev (50 ขั้นตอน) | BF16 | - | 20.3 | 0.953 | - | - |
| อินท์ W8A8 | ของเรา | 20.4 | 0.948 | 0.089 | 27.0 | |
| W4A16 | NF4 | 20.6 | 0.910 | 0.272 | 19.5 | |
| ไอเอ็นที W4A4 | ของเรา | 19.86 | 0.932 | 0.254 | 20.1 | |
| เอฟพี W4A4 | ของเรา | 21.0 | 0.933 | 0.247 | 20.2 | |
| FLUX.1-schnell (4 ขั้นตอน) | BF16 | - | 19.2 | 0.938 | - | - |
| อินท์ W8A8 | ของเรา | 19.2 | 0.966 | 0.120 | 22.9 | |
| W4A16 | NF4 | 18.9 | 0.943 | 0.257 | 18.2 | |
| ไอเอ็นที W4A4 | ของเรา | 18.4 | 0.969 | 0.292 | 17.5 | |
| เอฟพี W4A4 | ของเรา | 19.9 | 0.956 | 0.279 | 17.5 | |
| FP16 | - | 16.6 | 0.944 | - | - | |
| PixArt-Sigma (20 ขั้นตอน) | อินท์ W8A8 | ViDiT-Q | 15.7 | 0.944 | 0.137 | 22.5 |
| อินท์ W8A8 | ของเรา | 16.3 | 0.955 | 0.109 | 23.7 | |
| อินท์ W4A8 | ViDiT-Q | 37.3 | 0.573 | 0.611 | 12.0 | |
| ไอเอ็นที W4A4 | ของเรา | 20.1 | 0.898 | 0.394 | 16.2 | |
| เอฟพี W4A4 | ของเรา | 18.3 | 0.946 | 0.326 | 17.4 |
[เว็บไซต์] [กระดาษ] [รหัสอัลกอริทึม QoQ] [ระบบ GPU QServe]
การหาปริมาณสามารถเร่งการอนุมานของโมเดลภาษาขนาดใหญ่ (LLM) นอกเหนือจากการกำหนดปริมาณของ INT8 แล้ว ชุมชนการวิจัยยังกระตือรือร้นที่จะสำรวจแม้กระทั่งความแม่นยำที่ต่ำกว่า เช่น INT4 อย่างไรก็ตาม เทคนิคการหาปริมาณ INT4 ที่ล้ำสมัยเพียงเร่งการอนุมาน Edge LLM ในระดับต่ำเท่านั้น โดยไม่สามารถส่งมอบประสิทธิภาพที่เพิ่มขึ้นในการให้บริการ LLM บนคลาวด์ชุดใหญ่ เราค้นพบปัญหาที่สำคัญ: วิธีการหาปริมาณของ INT4 ที่มีอยู่ประสบปัญหารันไทม์โอเวอร์เฮดที่มีนัยสำคัญ (20-90%) เมื่อ ทำการแยกน้ำหนักหรือผลรวมบางส่วน บน GPU เพื่อจัดการกับความท้าทายนี้ เราขอแนะนำ QoQ อัลกอริธึมการหาปริมาณ W4A8KV4 ที่มีน้ำหนัก 4 บิต การเปิดใช้งาน 8 บิต และแคช KV 4 บิต QoQ ย่อมาจาก quattuor-octo-quattuor ซึ่งหมายถึง 4-8-4 ในภาษาละติน QoQ ถูกนำมาใช้โดยไลบรารีการอนุมาน QServe ซึ่งบรรลุการเร่งความเร็วที่วัดได้ ข้อมูลเชิงลึกที่สำคัญที่ขับเคลื่อน QServe คือประสิทธิภาพของการให้บริการ LLM บน GPU ได้รับอิทธิพลอย่างมากจาก การดำเนินการบนคอร์ CUDA ที่มีปริมาณงานต่ำ จากข้อมูลเชิงลึกนี้ ในอัลกอริธึม QoQ เราได้แนะนำการหาปริมาณแบบก้าวหน้าซึ่งสามารถให้ค่าใช้จ่ายในการแยกปริมาณต่ำใน W4A8 GEMM นอกจากนี้ เรายังพัฒนา SmoothAttention เพื่อลดการลดความแม่นยำที่เกิดจากการหาปริมาณ KV 4 บิตอย่างมีประสิทธิภาพ ในระบบ QServe เราดำเนินการจัดลำดับน้ำหนักใหม่โดยคำนึงถึงการคำนวณ และใช้ประโยชน์จากความเท่าเทียมระดับรีจิสเตอร์เพื่อลดเวลาแฝงในการลดปริมาณ นอกจากนี้เรายังสร้างการเชื่อมโยงหน่วยความจำแบบฟิวส์เข้าด้วยกัน โดยควบคุมประสิทธิภาพที่ได้รับจากการหาปริมาณ KV4 ด้วยเหตุนี้ QServe จึงปรับปรุงปริมาณการให้บริการสูงสุดที่ทำได้ของ Llama-3-8B ขึ้น 1.2× บน A100, 1.4× บน L40S; และ Qwen1.5-72B คูณ 2.4× บน A100, 3.5× บน L40S เทียบกับ TensorRT-LLM


ด้านล่างนี้คือความงุนงงของ WikiText2 ที่ประเมินด้วยความยาวลำดับ 2048 ยิ่งต่ำยิ่งดี
| วิธีการ | ความแม่นยำ | ลามะ-3.1 70B | ลามะ-3.1 8B | ลามะ-3 70B | ลามะ-3 8B | ลามะ-2 7B | ลามะ-2 13B | ลามะ-2 70B | ลามะ 7B | ลามะ 13B | ลามะ 30B | มิสทรัล 7B | ยี่ 34B |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FP16 | 2.81 | 6.24 | 2.85 | 6.14 | 5.47 | 4.88 | 3.32 | 5.68 | 5.09 | 4.10 | 5.25 | 4.60 | |
| SmoothQuant | W8A8 | 3.23 | 6.38 | 3.14 | 6.28 | 5.54 | 4.95 | 3.36 | 5.73 | 5.13 | 4.23 | 5.29 | 4.69 |
| GPTQ-R | W4A16 g128 | 3.46 | 6.64 | 3.42 | 6.56 | 5.63 | 4.99 | 3.43 | 5.83 | 5.20 | 4.22 | 5.39 | 4.68 |
| AWQ | W4A16 g128 | 3.22 | 6.60 | 3.20 | 6.54 | 5.60 | 4.97 | 3.41 | 5.78 | 5.19 | 4.21 | 5.37 | 4.67 |
| ควอรอต | W4A4 | 5.97 | 8.32 | 6.75 | 8.33 | 6.19 | 5.45 | 3.83 | 6.34 | 5.58 | 4.64 | 5.77 | น่าน |
| อะตอม | W4A4 g128 | - | - | 4.33 | 7.78 | 6.12 | 5.31 | 3.73 | 6.25 | 5.52 | 4.61 | 5.76 | 4.97 |
| QoQ | W4A8KV4 | 3.69 | 6.91 | 3.65 | 6.84 | 5.75 | 5.11 | 3.51 | 5.92 | 5.27 | 4.32 | 5.45 | 4.73 |
| QoQ | W4A8KV4 g128 | 3.54 | 6.80 | 3.51 | 6.73 | 5.68 | 5.05 | 3.46 | 5.88 | 5.23 | 4.27 | 5.41 | 4.73 |
* SmoothQuant ได้รับการประเมินด้วยการหาปริมาณแคช KV แบบคงที่ต่อเทนเซอร์
เมื่อให้บริการรุ่นภาษาขนาดใหญ่ Llama-3-8B และ Qwen1.5-72B บน GPU L40S และ A100 QServe แสดงให้เห็นถึงประสิทธิภาพที่เหนือกว่า โดยได้รับ ปริมาณงานที่สูงขึ้น 1.2 เท่า-1.4 เท่า เมื่อเทียบกับโซลูชันอุตสาหกรรมชั้นนำ TensorRT-LLM สำหรับ Llama- 3-8B และ ปริมาณงานที่สูงขึ้น 2.4x-3.5x สำหรับ Qwen1.5-72B
ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าการเปรียบเทียบประสิทธิภาพใน QServe GPU Inference System
| L40S (48G) | ลามะ-3-8B | ลามะ-2-7B | มิสทรัล-7B | ลามะ-2-13B | ลามะ-30B | ยี-34บี | ลามะ-2-70B | คิวเวน-1.5-72B |
|---|---|---|---|---|---|---|---|---|
| TRT-LLM-FP16 | 1326 | 444 | 1566 | 92 | อืม | อืม | อืม | อืม |
| TRT-LLM-W4A16 | 1431 | 681 | 1457 | 368 | 148 | 313 | 119 | 17 |
| TRT-LLM-W8A8 | 2634 | 1271 | 2569 | 440 | 123 | 364 | อืม | อืม |
| อะตอม-W4A4 | - | 2120 | - | - | - | - | - | - |
| ควอรอท-W4A4 | - | 805 | - | 413 | 133 | - | - | 15 |
| คิวเซิร์ฟ-W4A8KV4 | 3656 | 2394 | 3774 | 1327 | 504 | 869 | 286 | 59 |
| ปริมาณงานเพิ่มขึ้น* | 1.39x | 1.13x | 1.47x | 3.02x | 3.41x | 2.39x | 2.40x | 3.47x |
| A100 (80G) | ลามะ-3-8B | ลามะ-2-7B | มิสทรัล-7B | ลามะ-2-13B | ลามะ-30B | ยี่-34B | ลามะ-2-70B | คิวเวน-1.5-72B |
|---|---|---|---|---|---|---|---|---|
| TRT-LLM-FP16 | 2503 | 1549 | 2371 | 488 | 80 | 145 | อืม | อืม |
| TRT-LLM-W4A16 | 2370 | 1549 | 2403 | 871 | 352 | 569 | 358 | 143 |
| TRT-LLM-W8A8 | 2396 | 2334 | 2427 | 1277 | 361 | 649 | 235 | 53 |
| อะตอม-W4A4 | - | 1160 | - | - | - | - | - | - |
| ควอรอท-W4A4 | - | 1370 | - | 289 | 267 | - | - | 68 |
| คิวเสิร์ฟ-W4A8KV4 | 3005 | 2908 | 2970 | 1741 | 749 | 803 | 419 | 340 |
| ปริมาณงานเพิ่มขึ้น* | 1.20x | 1.25x | 1.22x | 1.36x | 2.07x | 1.23x | 1.17x | 2.38x |
ปริมาณงานการสร้างโทเค็นสัมบูรณ์ของ QServe และระบบพื้นฐาน (หน่วย: โทเค็น/วินาที -- หมายถึงไม่รองรับ) การทดลองทั้งหมดดำเนินการภายใต้งบประมาณหน่วยความจำของอุปกรณ์เดียวกัน การเพิ่มปริมาณงานของ QServe คำนวณโดยคำนึงถึงพื้นฐานที่ดีที่สุดในแต่ละคอลัมน์
หากคุณพบว่า deepcompressor มีประโยชน์หรือเกี่ยวข้องกับการวิจัยของคุณ โปรดอ้างอิงเอกสารของเรา:
@article{lin2024qserve, title={QServe: W4A8KV4 Quantization and System Co-design for Efficient LLM Serving}, author={Lin*, Yujun และ Tang*, Haotian และ Yang*, Shang และ Zhang, Zhekai และ Xiao, Guangxuan และ Gan , Chuang และ Han, Song}, วารสาร={arXiv preprint arXiv:2405.04532}, ปี={2024}}@บทความ{
li2024svdquant, title={SVDQuant: การดูดซับค่าผิดปกติโดยส่วนประกอบอันดับต่ำสำหรับโมเดลการแพร่กระจาย 4 บิต}, ผู้แต่ง={Li*, Muyang และ Lin*, Yujun และ Zhang*, Zhekai และ Cai, Tianle และ Li, Xiuyu และ Guo, Junxian และ Xie, Enze และ Meng, Chenlin และ Zhu, Jun-Yan และ Han, Song}, วารสาร={arXiv พิมพ์ล่วงหน้า arXiv:2411.05007}, ปี={2024}}โครงการต่อไปนี้มีความเกี่ยวข้องอย่างมากกับ QServe กลุ่มของเราได้พัฒนาการสนับสนุนแอปพลิเคชัน-อัลกอริทึม-ระบบ-ฮาร์ดแวร์แบบฟูลสแตกสำหรับโมเดลขนาดใหญ่ที่มีประสิทธิภาพ โดยได้รับ ดาว 9k+ GitHub และ การดาวน์โหลดชุมชน Huggingface มากกว่า 1 ล้านครั้ง
คุณยังสามารถตรวจสอบ MIT HAN Lab สำหรับโครงการที่น่าตื่นเต้นอื่นๆ เกี่ยวกับ Efficient Generative AI !
[ ระบบ ] QServe: การหาปริมาณ W4A8KV4 เพื่อการให้บริการ LLM ที่มีประสิทธิภาพ
[ ระบบ ] TinyChat: Chatbot ที่มีประสิทธิภาพและน้ำหนักเบาพร้อม AWQ
[ การใช้งาน ] VILA: การฝึกอบรมโมเดลภาษาภาพเบื้องต้น
[ อัลกอริทึม ] AWQ: การหาปริมาณน้ำหนักที่รับรู้การเปิดใช้งานสำหรับการบีบอัด LLM และการเร่งความเร็ว
[ อัลกอริทึม ] SmoothQuant: การหาปริมาณหลังการฝึกอบรมที่แม่นยำและมีประสิทธิภาพสำหรับโมเดลภาษาขนาดใหญ่
[ อัลกอริธึม ] DistriFusion: การอนุมานแบบขนานแบบกระจายสำหรับโมเดลการแพร่กระจายที่มีความละเอียดสูง
[ ฮาร์ดแวร์ ] SpAtten: สถาปัตยกรรม Sparse Attention Architecture ที่มีประสิทธิภาพพร้อม Cascade Token และ Head Pruning
DeepCompressor ได้รับแรงบันดาลใจจากไลบรารีโอเพ่นซอร์สจำนวนมาก รวมถึง (แต่ไม่จำกัดเพียง) GPTQ, QuaRot และ Atom