Skip to content

AutoGPTQ: 사용자 친화적인 LLMs 양자화 패키지

AutoGPTQ 소개

인공지능 분야에서 대규모 언어 모델 (LLMs)이 등장함에 따라, 그 효율성을 최적화하는 것은 중요한 노력이 되었습니다. AutoGPTQ는 GPTQ 알고리즘을 기반으로 한 쉬운 사용 방법의 LLMs 양자화 패키지를 제공합니다. 사용자 친화적인 API를 사용하여 AutoGPTQ는 머신러닝 워크 플로우에서 양자화 작업을 처리하는 효율적인 방법을 제공합니다.

AutoGPTQ Github here (opens in a new tab)에서 확인할 수 있습니다.

AutoGPTQ 업데이트 및 성능

AutoGPTQ는 지속적으로 기능과 기능을 개선하는 동적인 프로젝트입니다. 최신 업데이트는 성능 최적화 라이브러리와 통합, 다른 유형의 모델 지원, CUDA 커널 속도 향상 등이 포함되어 있습니다.

AutoGPTQ의 최대 장점 중 하나는 추론 속도입니다. GPU 비교는 토큰/초라는 인상적인 속도 측정값을 보여주며, AutoGPTQ를 사용한 양자화 된 모델이 다른 모델을 능가하고 있습니다. 예를 들어, 입력 배치 크기를 1로 설정하고 빔 서치 디코딩 전략을 사용하고 모델이 512 토큰을 생성하도록 강제하는 경우, 양자화 된 Llama-7b 모델은 오리지널 모델과 비교하여 추론 속도 측면에서 더 뛰어납니다(25.53 토큰/s 대 18.87 토큰/s).

# AutoGPTQ 성능 비교
performance_comparison = {
    "model": ["llama-7b", "moss-moon 16b", "gpt-j 6b"],
    "GPU": ["1xA100-40G", "1xA100-40G", "1xRTX3060-12G"],
    "num_beams": [1, 4, 1],
    "fp16": [18.87, 68.79, None],
    "gptq-int4": [25.53, 91.30, 29.55]
}

AutoGPTQ 설치

AutoGPTQ를 시작하는 것은 간단합니다. 최신 안정 버전은 pip를 통해 설치할 수 있으므로 빠른 설치가 가능합니다.

pip install auto-gptq

일부 설정의 경우, 각 버전의 릴리스 자산에서 환경을 충족하는 사전 빌드 휠을 다운로드하고 빌드 단계를 건너뛸 수 있도록 미리 빌드된 휠을 제공합니다.

# 먼저 휠이 저장된 디렉토리로 이동한 다음 아래 명령을 실행하세요.
pip install auto_gptq-0.2.0+cu118-cp310-cp310-linux_x86_64.whl 
# python=3.10 및 cuda=11.8을 사용하는 환경에서 v0.2.0 auto_gptq 사전 빌드 휠을 linux용으로 설치합니다.

또한, 이 패키지에서는 CUDA 확장 기능을 사용하지 않도록 설정하거나, LLaMa와 같은 특정 모델을 지원할 수 있습니다.

# CUDA 확장 기능 비활성화
BUILD_CUDA_EXT=0 pip install auto-gptq
 
# LLaMa 모델 지원
pip install auto-gptq[llama]

AutoGPTQ 작동: 양자화와 추론

AutoGPTQ의 핵심 기능은 대규모 언어 모델의 양자화를 가능하게 하는 것입니다. 이 프로세스는 간단하며 몇 줄의 코드로 실행할 수 있습니다. 아래 예제에서는 사전 훈련된 모델을 4비트로 양자화한 후 추론에 사용합니다.

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
import logging
 
# 로깅 설정
logging.basicConfig(format="%(asctime)s %(levelname)s [%(name)s] %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S")
 
# 사전 훈련된 모델 및 양자화된 모델 디렉토리 정의
pretrained_model_dir = "facebook/opt-125m"
quantized_model_dir = "opt-125m-4bit"
 
# 토크나이저 및 예제 설정
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_dir, use_fast=True)
examples = [tokenizer("auto-gptq is an easy-to-use model quantization library with user-friendly apis, based on GPTQ algorithm.")]
 
# 양자화 설정
quantize_config = BaseQuantizeConfig(bits=4, group_size=128, desc_act=False)
 
# 모델 불러오기, 양자화하고 저장하기
model = AutoGPTQForCausalLM.from_pretrained(pretrained_model_dir, quantize_config)
model.quantize(examples)
model.save_quantized(quantized_model_dir)

모델 사용자 정의

AutoGPTQ를 사용하면 사용자 정의 모델을 지원하는 기능을 확장할 수 있습니다. 사용자는 머신러닝 작업에 대한 더 많은 제어권을 갖게 됩니다. 이러한 사용자 지정 기능은 다른 양자화 패키지와는 다르게 AutoGPTQ를 더 유연하고 다양한 케이스에 적용 가능한 것으로 만듭니다.

auto_gptq를 확장하여 OPT 모델을 지원하는 예제가 있습니다.

# `OPT` 모델 지원을 위해 `auto_gptq`를 확장하세요. (사용자 정의 필요)

하위 작업 평가

AutoGPTQ는 양자화 이전과 이후의 모델 성능을 특정 하위 작업에서 평가할 수 있습니다. 양자화가 모델 성능에 부정적인 영향을 미치지 않으며, 모델의 수행하려는 작업에 대한 성능을 보장합니다. 예를 들어, 다음 데이터셋을 사용하여 EleutherAI/gpt-j-6b 모델을 시퀀스 분류 작업으로 평가할 수 있습니다: cardiffnlp/tweet_sentiment_multilingual.

이를 더 자세히 설명하기 위해 EleutherAI/gpt-j-6b 모델과 cardiffnlp/tweet_sentiment_multilingual 데이터셋을 사용하여 간단한 평가 예제를 수행합니다. 여기서는 시퀀스 분류 작업인 감성 분석의 성능을 양자화된 모델로 평가합니다.

from transformers import pipeline, AutoTokenizer
from auto_gptq import AutoGPTQForSequenceClassification
from datasets import load_dataset
# 사전 훈련된 모델 디렉토리 및 양자화 모델 디렉토리 정의
pretrained_model_dir = "EleutherAI/gpt-j-6b"
quantized_model_dir = "gpt-j-6b-4bit"
 
# 모델 로드 및 양자화
model = AutoGPTQForSequenceClassification.from_pretrained(pretrained_model_dir)
model.quantize()
model.save_quantized(quantized_model_dir)
 
# 토크나이저 및 감성 분석 파이프라인 로드
tokenizer = AutoTokenizer.from_pretrained(quantized_model_dir)
sentiment_analysis = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
 
# 데이터셋 로드
dataset = load_dataset("cardiffnlp/tweet_sentiment_multilingual", split="test")
 
# 테스트 데이터셋에서 모델 평가
correct, total = 0, 0
for example in dataset:
    prediction = sentiment_analysis(example["text"])[0]
    if prediction["label"].lower() == example["label"].lower():
        correct += 1
    total += 1
 
# 테스트 데이터셋에서 모델의 정확도 출력
print(f"Accuracy: {correct / total:.2f}")

위의 코드는 양자화된 모델의 평가를 보여주는 것입니다. 이를 통해 모델의 성능 및 양자화 과정이 시퀀스 분류 태스크 결과에 어떻게 영향을 미치는지 확인할 수 있습니다.

FAQ

1. AutoGPTQ는 GPT 기반 모델만 처리할 수 있나요?

AutoGPTQ는 처음에는 GPT 기반 모델을 대상으로 설계되었지만, 개발자들이 라이브러리의 모듈화된 설계로 다른 변형기 모델을 지원할 수 있도록 확장하였습니다.

2. AutoGPTQ를 내 사용 사례에 맞게 수정하려면 어떻게 해야 하나요?

AutoGPTQ는 기본 클래스를 상속하고 필요한 메소드를 오버라이드하여 사용자의 구체적인 요구사항을 지원할 수 있도록 클래스와 메소드를 확장할 수 있습니다.

3. 양자화가 모델 성능에 영향을 미치나요?

양자화는 모델의 성능과 모델 크기 또는 계산 효율성 간의 교환을 가져옵니다. 그러나 AutoGPTQ는 이 영향을 최소화하도록 노력합니다. AutoGPTQ는 모델을 양자화하기 전과 후에 하위 작업에서 모델을 평가할 수 있는 옵션을 제공하여, 사용 사례에 대한 성능 저하가 허용 가능한지 확인하는 데 도움을 줍니다.## 건의 사항:

결론

AutoGPTQ는 성능 기준을 유지하면서 특정 작업에 대한 트랜스포머 모델을 양자화하는 효과적이고 효율적인 방법을 제공합니다. 사용자 친화적인 API와 사용자 정의 기능을 통해 모델을 최적화하는 데 필요한 다양한 도구를 제공합니다. 모델의 저장 요구 사항을 줄이거나 추론 속도를 향상시키려는 경우, AutoGPTQ는 귀하의 도구 상자의 중요한 부분이 될 수 있습니다.