AutoRound는 낮은 비트 LLM 추론을 위한 고급 양자화 알고리즘입니다. 다양한 모델에 맞게 맞춤 제작되었습니다. AutoRound는 부호 경사하강법을 채택하여 단 200단계로 반올림 값과 가중치의 최소값을 미세 조정합니다. 이는 추가 추론 오버헤드를 도입하지 않고 낮은 조정 비용을 유지하지 않고도 최근 방법과 인상적인 경쟁을 벌입니다. 아래 이미지는 AutoRound의 개요를 보여줍니다. 자세한 내용은 arxiv의 논문을 확인하고 다양한 모델에 대한 더 정확한 데이터와 레시피를 보려면 low_bit_open_llm_leaderboard를 방문하세요.
[2024/10] AutoRound가 torch/ao에 통합되었습니다. 릴리스 노트를 확인하세요.
[2024/10] 중요 업데이트: 이제 전체 범위 대칭 양자화를 지원하고 이를 기본 구성으로 설정했습니다. 이 구성은 일반적으로 비대칭 양자화에 비해 우수하거나 비슷하며 특히 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 install -vvv --no-build-isolation -e .
pip 설치 자동 라운드
지원되는 인수의 전체 목록을 자세히 설명하는 사용자 가이드는 터미널에서 auto-round -h
호출하여 제공됩니다. 또는 auto-round
대신 auto_round
사용할 수 있습니다. format
에서 원하는 형식을 설정하면 여러 형식으로 내보내기가 지원됩니다.
CUDA_VISIBLE_DEVICES=0 자동 라운드 --모델 페이스북/opt-125m --비트 4 --group_size 128 --format "auto_round,auto_gptq" --disable_eval --output_dir ./tmp_autoround
우리는 낮은 메모리에서도 최고의 정확성과 빠른 실행 속도를 위한 두 가지 레시피를 제공합니다. 세부사항은 아래와 같습니다.
## 최고의 정확도, 3배 더 느림, low_gpu_mem_usage로 ~20G를 절약할 수 있지만 ~30% 느림CUDA_VISIBLE_DEVICES=0 자동 라운드 --모델 페이스북/opt-125m --비트 4 --group_size 128 --nsamples 512 --iters 1000 --low_gpu_mem_usage --disable_eval
## 빠르고 낮은 메모리, 2~3배 속도 향상, W4G128CUDA_VISIBLE_DEVICES=0 자동 라운드에서 약간의 정확도 저하 --모델 페이스북/opt-125m --비트 4 --group_size 128 --nsamples 128 --반복 200 --시퀀스 512 --batch_size 4 --disable_eval
AutoRound 형식 : 이 형식은 CPU, HPU 장치, 2비트 및 혼합 정밀도 추론에 적합합니다. [2,4] 비트가 지원됩니다. 또한 추론 성능을 눈에 띄게 향상시킬 수 있는 Marlin 커널의 이점도 있습니다. 그러나 아직까지 광범위한 커뮤니티 채택을 얻지 못했습니다.
AutoGPTQ 형식 : 이 형식은 CUDA 장치의 대칭 양자화에 매우 적합하며 커뮤니티에서 널리 채택되며 [2,3,4,8] 비트가 지원됩니다. 또한 추론 성능을 눈에 띄게 향상시킬 수 있는 Marlin 커널의 이점도 있습니다. 그러나 비대칭 커널에는 특히 2비트 양자화 및 소규모 모델에서 정확도가 상당히 떨어질 수 있는 문제가 있습니다 . 또한 대칭 양자화는 2비트 정밀도에서는 제대로 수행되지 않는 경향이 있습니다.
AutoAWQ 형식 : 이 형식은 CUDA 장치의 비대칭 4비트 양자화에 매우 적합하며 커뮤니티 내에서 널리 채택되며 4비트 양자화만 지원됩니다. Llama 모델에 맞춰진 특수 레이어 융합이 특징입니다.
from Transformers import AutoModelForCausalLM, AutoTokenizermodel_name = "facebook/opt-125m"model = AutoModelForCausalLM.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name)from auto_round import AutoRoundbits, group_size, Sym = 4, 128, Trueautoround = AutoRound(모델, 토크나이저 , 비트=비트, 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, 비트=비트, group_size=group_size, Sym=sym)## 빠르고 낮은 메모리, 2~3배 속도 향상, W4G128에서 약간의 정확도 저하# autoround = AutoRound(model, tokenizer, nsamples=128, iters=200, seqlen =512,atch_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)
테스트는 PyTorch 2.6.0.dev20241029+cu124의 야간 버전을 사용하여 Nvidia A100 80G에서 수행되었습니다. 데이터 로딩 및 패킹 비용은 평가에서 제외되었습니다. Torch 2.6에서는 torch.compile을 활성화하지만 문제가 발생하여 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=참 gradient_accumulate_steps=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 버전 >0.3.1 , pip install intel-extension-for-pytorch(Intel CPU에서는 훨씬 빠른 속도) 또는 pip install intel-extension-for-transformers,
HPU : Gaudi Software Stack이 포함된 도커 이미지를 권장합니다. 자세한 내용은 가우디 가이드에서 확인하실 수 있습니다.
CUDA : 대칭 양자화를 위한 추가 작업 없음, 비대칭 양자화의 경우 소스에서 자동 반올림 설치 필요
from Transformers import AutoModelForCausalLM, AutoTokenizerfrom auto_round import AutoRoundConfigbackend = "auto" ##cpu, hpu, cuda, cuda:marlin(auto_round>0.3.1 및 'pip install -v gptqmodel --no-build-isolation'에서 지원됨')yangization_config = AutoRoundConfig(backend=backend)Quantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(Quantized_model_path, device_map=backend.split(':')[0], yangization_config=yangization_config)tokenizer = AutoTokenizer.from_pretrained(yangized_model_path)text = " 모험을 좋아하는 소녀가 있습니다."inputs = tokenizer(text, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]) )
자동 반올림 --modelSaved_Quantized_model --eval --tasklamada_openai --eval_bs 1
from Transformers import AutoModelForCausalLM, AutoTokenizerQuantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(yangized_model_path, device_map="auto")tokenizer = AutoTokenizer.from_pretrained(Quantized_model_path)text = "모험을 좋아하는 소녀가 있습니다."inputs = tokenizer( text, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
AutoRound는 기본적으로 모든 주요 대형 언어 모델을 지원합니다.
별표(*)는 정확도 데이터가 부족하고 다른 레시피를 사용할 수 있는 타사 양자화 모델을 나타냅니다. 우리는 대부분의 모델을 직접 출시할 수 없기 때문에 그들의 노력에 크게 감사하고 더 많은 사용자가 모델을 공유하도록 권장합니다.
모델 | 지원됨 |
---|---|
메타-라마/메타-라마-3.1-70B-지시 | 레시피 |
메타-라마/메타-라마-3.1-8B-지시 | 모델-kaitchup-autogptq-int4*, 모델-kaitchup-autogptq-sym-int4*, 레시피 |
메타-라마/메타-라마-3.1-8B | 모델-kaitchup-autogptq-sym-int4* |
Qwen/Qwen-VL | 정확성, 레시피 |
Qwen/Qwen2-7B | 모델-autoround-sym-int4, 모델-autogptq-sym-int4 |
Qwen/Qwen2-57B-A14B-지시 | 모델-autoround-sym-int4,모델-autogptq-sym-int4 |
01-ai/Yi-1.5-9B | 모델-LnL-AI-autogptq-int4* |
01-ai/Yi-1.5-9B-채팅 | 모델-LnL-AI-autogptq-int4* |
인텔/neural-chat-7b-v3-3 | 모델-autogptq-int4 |
인텔/neural-chat-7b-v3-1 | 모델-autogptq-int4 |
TinyLlama-1.1B-중급 | 모델-LnL-AI-autogptq-int4* |
미스트랄라이/Mistral-7B-v0.1 | 모델-autogptq-lmhead-int4, 모델-autogptq-int4 |
구글/gemma-2b | 모델-autogptq-int4 |
tiiuae/falcon-7b | 모델-autogptq-int4-G64 |
사피엔잔LP/modello-italia-9b | 모델-fbaldassarri-autogptq-int4* |
마이크로소프트/파이-2 | 모델-autoround-sym-int4 모델-autogptq-sym-int4 |
마이크로소프트/Phi-3.5-mini-instruct | 모델-kaitchup-autogptq-sym-int4* |
마이크로소프트/Phi-3-vision-128k-instruct | 레시피 |
mistralai/Mistral-7B-Instruct-v0.2 | 정확성, 레시피, 예 |
mistralai/Mixtral-8x7B-Instruct-v0.1 | 정확성, 레시피, 예 |
미스트랄라이/Mixtral-8x7B-v0.1 | 정확성, 레시피, 예 |
메타-라마/메타-라마-3-8B-지시 | 정확성, 레시피, 예 |
구글/gemma-7b | 정확성, 레시피, 예 |
메타-라마/Llama-2-7b-chat-hf | 정확성, 레시피, 예 |
Qwen/Qwen1.5-7B-채팅 | 정확성, Sym 레시피, Asym 레시피, 예 |
baichuan-inc/Baichuan2-7B-채팅 | 정확성, 레시피, 예 |
01-ai/Yi-6B-채팅 | 정확성, 레시피, 예 |
페이스북/opt-2.7b | 정확성, 레시피, 예 |
빅사이언스/블룸-3b | 정확성, 레시피, 예 |
EleutherAI/gpt-j-6b | 정확성, 레시피, 예 |
AutoRound는 여러 저장소에 통합되었습니다.
인텔 신경 압축기
모델클라우드/GPTQ모델
파이토치/ao
AutoRound가 귀하의 연구에 유용하다고 생각되면 다음 논문을 인용해 주세요.
@article{cheng2023optimize, title={LLM의 양자화를 위해 부호 있는 경사하강법을 통해 가중치 반올림 최적화}, 작성자={Cheng, Wenhua 및 Zhang, Weiwei 및 Shen, Haihao 및 Cai, Yiyang 및 He, Xin 및 Lv, Kaokao 및 Liu, Yi}, 저널={arXiv 사전 인쇄 arXiv:2309.05516}, 연도={2023} }