AutoRound เป็นอัลกอริธึมการหาปริมาณขั้นสูงสำหรับการอนุมาน LLM บิตต่ำ ได้รับการออกแบบมาเพื่อการใช้งานที่หลากหลาย AutoRound ใช้การไล่ระดับสีแบบป้ายเพื่อปรับแต่งค่าการปัดเศษและค่าต่ำสุดของน้ำหนักในเวลาเพียง 200 ขั้นตอน ซึ่งแข่งขันกับวิธีการล่าสุดได้อย่างน่าประทับใจโดยไม่ต้องเพิ่มค่าใช้จ่ายในการอนุมานเพิ่มเติม และทำให้ต้นทุนการปรับแต่งต่ำ รูปภาพด้านล่างแสดงภาพรวมของ AutoRound ตรวจสอบเอกสารของเราเกี่ยวกับ arxiv เพื่อดูรายละเอียดเพิ่มเติม และไปที่ low_bit_open_llm_leaderboard เพื่อดูข้อมูลและสูตรอาหารที่แม่นยำยิ่งขึ้นในรุ่นต่างๆ
[10/2024] มีการผสานรวม AutoRound เข้ากับ torch/ao โปรดดูบันทึกประจำรุ่น
[10/2024] การอัปเดตที่สำคัญ: ตอนนี้เรารองรับการหาปริมาณสมมาตรแบบเต็มช่วงและทำให้เป็นการกำหนดค่าเริ่มต้น โดยทั่วไปการกำหนดค่านี้จะดีกว่าหรือเทียบเคียงได้กับการหาปริมาณแบบไม่สมมาตร และมีประสิทธิภาพเหนือกว่าตัวแปรสมมาตรอื่นๆ อย่างมาก โดยเฉพาะอย่างยิ่งที่ความกว้างบิตต่ำ เช่น 2 บิต
[2024/09] รูปแบบ AutoRound รองรับรุ่น LVM หลายรุ่น ลองดูตัวอย่าง Qwen2-Vl, Phi-3-vision, Llava
[2024/08] รูปแบบ AutoRound รองรับอุปกรณ์ Intel Gaudi2 โปรดดูที่ Intel/Qwen2-7B-int4-inc
[2024/08] AutoRound แนะนำคุณสมบัติทดลองหลายประการ รวมถึงการปรับพารามิเตอร์บรรทัดฐาน/ไบแอสอย่างรวดเร็ว (สำหรับ 2 บิตและ W4A4) การหาปริมาณการเปิดใช้งาน และประเภทข้อมูล mx_fp
pip ติดตั้ง -vvv --no-build-isolation -e
pip ติดตั้งรอบอัตโนมัติ
คู่มือผู้ใช้ที่ให้รายละเอียดรายการอาร์กิวเมนต์ที่รองรับทั้งหมดมีให้โดยการเรียก auto-round -h
บนเทอร์มินัล หรือคุณสามารถใช้ auto_round
แทน auto-round
กำหนดรูปแบบที่คุณต้องการใน format
และรองรับการส่งออกหลายรูปแบบ
CUDA_VISIBLE_DEVICES=0 ปัดเศษอัตโนมัติ --รุ่น facebook/opt-125m --บิต 4 --group_size 128 --รูปแบบ "auto_round,auto_gptq" --disable_eval --output_dir ./tmp_autoround
เรามีสูตรสองสูตรเพื่อความแม่นยำสูงสุดและความเร็วในการทำงานที่รวดเร็วพร้อมหน่วยความจำเหลือน้อย รายละเอียดตามด้านล่างนี้
## ความแม่นยำดีที่สุด ช้าลง 3 เท่า low_gpu_mem_usage สามารถประหยัด ~20G แต่ช้ากว่า ~30%CUDA_VISIBLE_DEVICES=0 รอบอัตโนมัติ --รุ่น facebook/opt-125m --บิต 4 --group_size 128 --ตัวอย่าง 512 --iters 1,000 --low_gpu_mem_usage --disable_eval
## หน่วยความจำเร็วและต่ำ ความเร็วเพิ่มขึ้น 2-3 เท่า ความแม่นยำลดลงเล็กน้อยที่ W4G128CUDA_VISIBLE_DEVICES=0 รอบอัตโนมัติ --รุ่น facebook/opt-125m --บิต 4 --group_size 128 --ตัวอย่างที่ 128 --iters 200 --ซีเควล 512 --batch_size4 --disable_eval
รูปแบบ AutoRound : รูปแบบนี้เหมาะอย่างยิ่งสำหรับ CPU, อุปกรณ์ HPU, 2 บิต รวมถึงการอนุมานแบบผสมที่มีความแม่นยำ รองรับ [2,4] บิต นอกจากนี้ยังได้ประโยชน์จากเคอร์เนล Marlin ซึ่งสามารถเพิ่มประสิทธิภาพการอนุมานได้อย่างชัดเจน อย่างไรก็ตาม ยังไม่ได้รับการยอมรับจากชุมชนอย่างกว้างขวาง
รูปแบบ AutoGPTQ : รูปแบบนี้เหมาะอย่างยิ่งสำหรับการวัดปริมาณแบบสมมาตรบนอุปกรณ์ CUDA และได้รับการยอมรับอย่างกว้างขวางจากชุมชน โดยรองรับบิต [2,3,4,8] นอกจากนี้ยังได้ประโยชน์จากเคอร์เนล Marlin ซึ่งสามารถเพิ่มประสิทธิภาพการอนุมานได้อย่างชัดเจน อย่างไรก็ตาม เคอร์เนลที่ไม่สมมาตรมีปัญหา ที่อาจทำให้ความแม่นยำลดลงอย่างมาก โดยเฉพาะอย่างยิ่งที่การหาปริมาณ 2 บิตและโมเดลขนาดเล็ก นอกจากนี้ การหาปริมาณแบบสมมาตรมีแนวโน้มที่จะทำงานได้ไม่ดีที่ความแม่นยำ 2 บิต
รูปแบบ AutoAWQ : รูปแบบนี้เหมาะอย่างยิ่งสำหรับการวัดปริมาณ 4 บิตแบบไม่สมมาตรบนอุปกรณ์ CUDA และมีการนำไปใช้อย่างกว้างขวางในชุมชน รองรับเฉพาะการวัดปริมาณ 4 บิตเท่านั้น มีเลเยอร์ฟิวชันแบบพิเศษที่ออกแบบมาเพื่อโมเดลลามะโดยเฉพาะ
จากหม้อแปลงนำเข้า AutoModelForCausalLM, AutoTokenizermodel_name = "facebook/opt-125m"model = AutoModelForCausalLM.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name) จาก auto_round นำเข้า AutoRoundbits, group_size, sym = 4, 128, Trueautoround = AutoRound (model, tokenizer , บิต=บิต group_size=group_size, sym=sym)## ความแม่นยำที่ดีที่สุด, ช้าลง 3 เท่า, low_gpu_mem_usage สามารถประหยัด ~20G แต่ช้ากว่า ~30%# autoround = AutoRound(model, tokenizer, nsamples=512, iters=1000, low_gpu_mem_usage=True, bits= บิต group_size=group_size, sym=sym)## เร็วและต่ำ หน่วยความจำ, การเร่งความเร็ว 2-3 เท่า, ความแม่นยำลดลงเล็กน้อยที่ W4G128# autoround = AutoRound(model, tokenizer, nsamples=128, iters=200, seqlen=512, batt_size=4, bits=bits, group_size=group_size, sym=sym )autoround .quantize()output_dir = "./tmp_autoround"## format= 'auto_round'(ค่าเริ่มต้นในเวอร์ชัน>0.3.0), 'auto_gptq', 'auto_awq'autoround.save_quantized(output_dir, format='auto_round', inplace=True)
การทดสอบดำเนินการบน Nvidia A100 80G โดยใช้ PyTorch 2.6.0.dev20241029+cu124 เวอร์ชันกลางคืน โปรดทราบว่าค่าใช้จ่ายในการโหลดและบรรจุข้อมูลไม่ได้รวมอยู่ในการประเมิน เราเปิดใช้งาน torch.compile สำหรับ Torch 2.6 แต่ไม่ใช่สำหรับ 2.5 เนื่องจากปัญหาที่พบ
เพื่อเพิ่มประสิทธิภาพการใช้งานหน่วยความจำ GPU นอกเหนือจากการเปิดใช้งาน low_gpu_mem_usage
แล้ว คุณยังสามารถตั้งค่า gradient_accumulate_steps=8
และ batch_size=1
ได้ แม้ว่าการทำเช่นนี้อาจเพิ่มเวลาในการปรับแต่งก็ตาม
รุ่น 3B และ 14B ได้รับการประเมินบน Qwen 2.5 รุ่น 8X7B คือ Mixtral ในขณะที่รุ่นที่เหลือใช้ LLaMA 3.1
เวอร์ชันคบเพลิง/กำหนดค่า W4G128 | 3B | 8B | 14B | 70B | 8X7B |
---|---|---|---|---|---|
2.6 พร้อมการคอมไพล์คบเพลิง | 7 นาที 10GB | 12 นาที 18GB | 23นาที 22GB | 120 นาที 42GB | 28นาที 46GB |
2.6 พร้อมการคอมไพล์คบเพลิง low_gpu_mem_usage=จริง | 12 นาที 6GB | 19นาที 10GB | 33นาที 11GB | 140นาที 25GB | 38นาที 36GB |
2.6 พร้อมการคอมไพล์คบเพลิง low_gpu_mem_usage=จริง การไล่ระดับสี_สะสม_ขั้นตอน=8,bs=1 | 15 นาที 3GB | 25 นาที 6GB | 45 นาที 7GB | 187นาที 19GB | 75นาที 36GB |
2.5 ไม่มีการรวบรวมคบเพลิง | 8 นาที 10GB | 16นาที 20GB | 30นาที 25GB | 140นาที 49GB | 50นาที 49GB |
โปรดเรียกใช้โค้ดการวัดปริมาณก่อน
CPU : auto_round version >0.3.1 , pip install intel-extension-for-pytorch (ความเร็วที่สูงกว่ามากบน Intel CPU) หรือ pip install intel-extension-for-transformers,
HPU : แนะนำให้ใช้อิมเมจนักเทียบท่าพร้อม Gaudi Software Stack รายละเอียดเพิ่มเติมสามารถพบได้ใน Gaudi Guide
CUDA : ไม่มีการดำเนินการพิเศษสำหรับการหาปริมาณแบบสมมาตร สำหรับการหาปริมาณแบบ asym จำเป็นต้องติดตั้งการปัดเศษอัตโนมัติจากแหล่งที่มา
จากหม้อแปลงนำเข้า AutoModelForCausalLM, AutoTokenizerfrom auto_round import AutoRoundConfigbackend = "auto" ##cpu, hpu, cuda, cuda:marlin(รองรับใน auto_round>0.3.1 และ 'pip install -v gptqmodel --no-build-isolation')quantization_config = AutoRoundConfig(แบ็กเอนด์=แบ็กเอนด์)quantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map=backend.split(':')[0], quantization_config=quantization_config)tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = "มีผู้หญิงคนหนึ่งที่ชอบการผจญภัย "อินพุต = โทเค็นไนเซอร์ (ข้อความ return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
รอบอัตโนมัติ --model save_quantized_model --ประเมิน --งาน lambada_openai --eval_bs 1
จากหม้อแปลงนำเข้า AutoModelForCausalLM, AutoTokenizerquantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, device_map="auto")tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = "มีผู้หญิงคนหนึ่งที่ชอบการผจญภัย"inputs = tokenizer( ข้อความ, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
AutoRound รองรับโมเดลภาษาขนาดใหญ่ที่สำคัญทั้งหมดโดยพื้นฐานแล้ว
โปรดทราบว่าเครื่องหมายดอกจัน (*) หมายถึงโมเดลเชิงปริมาณของบุคคลที่สาม ซึ่งอาจขาดข้อมูลที่แม่นยำและใช้สูตรอื่น เราซาบซึ้งในความพยายามของพวกเขาเป็นอย่างยิ่ง และสนับสนุนให้ผู้ใช้แบ่งปันโมเดลของตนมากขึ้น เนื่องจากเราไม่สามารถเปิดตัวโมเดลส่วนใหญ่ได้ด้วยตนเอง
แบบอย่าง | รองรับ |
---|---|
meta-llama/Meta-Llama-3.1-70B-คำสั่ง | สูตรอาหาร |
meta-llama/Meta-Llama-3.1-8B-คำสั่ง | model-kaitchup-autogptq-int4*, model-kaitchup-autogptq-sym-int4*, สูตร |
เมตาลามะ/เมตาลามะ-3.1-8B | รุ่น kaitchup-autogptq-sym-int4 * |
คิวเวน/คิวเวน-VL | ความแม่นยำสูตร |
คิวเวน/คิวเวน2-7B | รุ่น autoround-sym-int4, รุ่น-autogptq-sym-int4 |
Qwen/Qwen2-57B-A14B-สอน | รุ่น autoround-sym-int4 รุ่น autogptq-sym-int4 |
01-ไอ/ยี่-1.5-9B | รุ่น-LnL-AI-autogptq-int4* |
01-ai/Yi-1.5-9B-แชท | รุ่น-LnL-AI-autogptq-int4* |
Intel/ประสาท-แชท-7b-v3-3 | รุ่น autogptq-int4 |
Intel/ประสาท-แชท-7b-v3-1 | รุ่น autogptq-int4 |
TinyLlama-1.1B-ระดับกลาง | รุ่น-LnL-AI-autogptq-int4* |
มิสทราไล/มิสทรัล-7B-v0.1 | รุ่น autogptq-lmhead-int4, รุ่น-autogptq-int4 |
google/gemma-2b | รุ่น autogptq-int4 |
tiiuae/ฟอลคอน-7b | รุ่น-autogptq-int4-G64 |
sapienzanlp/modello-italia-9b | รุ่น-fbaldassarri-autogptq-int4* |
ไมโครซอฟต์/phi-2 | รุ่น autoround-sym-int4 รุ่น autogptq-sym-int4 |
microsoft/Phi-3.5-mini-instruct | รุ่น kaitchup-autogptq-sym-int4 * |
microsoft/Pi-3-vision-128k-instruct | สูตรอาหาร |
มิสทราไล/มิสทรัล-7B-Instruct-v0.2 | ความแม่นยำ สูตร ตัวอย่าง |
มิสทราไล/Mixtral-8x7B-Instruct-v0.1 | ความแม่นยำ สูตร ตัวอย่าง |
มิสทราไล/Mixtral-8x7B-v0.1 | ความแม่นยำ สูตร ตัวอย่าง |
meta-llama/Meta-Llama-3-8B-สอน | ความแม่นยำ สูตร ตัวอย่าง |
google/gemma-7b | ความแม่นยำ สูตร ตัวอย่าง |
meta-llama/Llama-2-7b-chat-hf | ความแม่นยำ สูตร ตัวอย่าง |
Qwen/Qwen1.5-7B-แชท | ความแม่นยำ สูตรซิม สูตรแอสซิม ตัวอย่าง |
baichuan-inc/Baichuan2-7B-แชท | ความแม่นยำ สูตร ตัวอย่าง |
01-ai/Yi-6B-แชท | ความแม่นยำ สูตร ตัวอย่าง |
facebook/opt-2.7b | ความแม่นยำ สูตร ตัวอย่าง |
บิ๊กไซแอนซ์/บลูม-3บี | ความแม่นยำ สูตร ตัวอย่าง |
อีลิวเธอร์เอไอ/gpt-j-6b | ความแม่นยำ สูตร ตัวอย่าง |
AutoRound ได้รับการรวมเข้ากับที่เก็บข้อมูลหลายแห่ง
อินเทลประสาทคอมเพรสเซอร์
ModelCloud/GPTQModel
ไพทอร์ช/ao
หากคุณพบว่า AutoRound มีประโยชน์สำหรับการวิจัยของคุณ โปรดอ้างอิงรายงานของเรา:
@article{cheng2023เพิ่มประสิทธิภาพ title={ปรับการปัดเศษน้ำหนักให้เหมาะสมผ่านการไล่ระดับสีแบบลงลายเซ็นเพื่อการหาปริมาณของ LLM}, ผู้แต่ง={เฉิง, เหวินฮวาและจาง, เวยเวยและเซิน, ไห่ห่าวและไฉ่, ยี่หยางและเหอ, ซินและเลเวล, เกาเกาและหลิว, ยี่}, วารสาร={arXiv พิมพ์ล่วงหน้า arXiv:2309.05516}, ปี={2023} -