Transformers documentation

GGUF와 Transformers의 상호작용

You are viewing v4.47.0 version. A newer version v4.47.1 is available.
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GGUF와 Transformers의 상호작용

GGUF 파일 형식은 GGML과 그에 의존하는 다른 라이브러리, 예를 들어 매우 인기 있는 llama.cpp이나 whisper.cpp에서 추론을 위한 모델을 저장하는데 사용됩니다.

이 파일 형식은 Hugging Face Hub에서 지원되며, 파일 내의 텐서와 메타데이터를 신속하게 검사할 수 있는 기능을 제공합니다.

이 형식은 “단일 파일 형식(single-file-format)“으로 설계되었으며, 하나의 파일에 설정 속성, 토크나이저 어휘, 기타 속성뿐만 아니라 모델에서 로드되는 모든 텐서가 포함됩니다. 이 파일들은 파일의 양자화 유형에 따라 다른 형식으로 제공됩니다. 다양한 양자화 유형에 대한 간략한 설명은 여기에서 확인할 수 있습니다.

Transformers 내 지원

transformers 내에서 gguf 파일을 로드할 수 있는 기능을 추가하여 GGUF 모델의 추가 학습/미세 조정을 제공한 후 ggml 생태계에서 다시 사용할 수 있도록 gguf 파일로 변환하는 기능을 제공합니다. 모델을 로드할 때 먼저 FP32로 역양자화한 후, PyTorch에서 사용할 수 있도록 가중치를 로드합니다.

[!NOTE] 지원은 아직 초기 단계에 있으며, 다양한 양자화 유형과 모델 아키텍처에 대해 이를 강화하기 위한 기여를 환영합니다.

현재 지원되는 모델 아키텍처와 양자화 유형은 다음과 같습니다:

지원되는 양자화 유형

초기에 지원되는 양자화 유형은 Hub에서 공유된 인기 있는 양자화 파일에 따라 결정되었습니다.

  • F32
  • F16
  • BF16
  • Q4_0
  • Q4_1
  • Q5_0
  • Q5_1
  • Q8_0
  • Q2_K
  • Q3_K
  • Q4_K
  • Q5_K
  • Q6_K
  • IQ1_S
  • IQ1_M
  • IQ2_XXS
  • IQ2_XS
  • IQ2_S
  • IQ3_XXS
  • IQ3_S
  • IQ4_XS
  • IQ4_NL

[!NOTE] GGUF 역양자화를 지원하려면 gguf>=0.10.0 설치가 필요합니다.

지원되는 모델 아키텍처

현재 지원되는 모델 아키텍처는 Hub에서 매우 인기가 많은 아키텍처들로 제한되어 있습니다:

  • LLaMa
  • Mistral
  • Qwen2
  • Qwen2Moe
  • Phi3
  • Bloom

사용 예시

transformers에서 gguf 파일을 로드하려면 from_pretrained 메소드에 gguf_file 인수를 지정해야 합니다. 동일한 파일에서 토크나이저와 모델을 로드하는 방법은 다음과 같습니다:

from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
filename = "tinyllama-1.1b-chat-v1.0.Q6_K.gguf"

tokenizer = AutoTokenizer.from_pretrained(model_id, gguf_file=filename)
model = AutoModelForCausalLM.from_pretrained(model_id, gguf_file=filename)

이제 PyTorch 생태계에서 모델의 양자화되지 않은 전체 버전에 접근할 수 있으며, 다른 여러 도구들과 결합하여 사용할 수 있습니다.

gguf 파일로 다시 변환하려면 llama.cpp의 convert-hf-to-gguf.py를 사용하는 것을 권장합니다.

위의 스크립트를 완료하여 모델을 저장하고 다시 gguf로 내보내는 방법은 다음과 같습니다:

tokenizer.save_pretrained('directory')
model.save_pretrained('directory')

!python ${path_to_llama_cpp}/convert-hf-to-gguf.py ${directory}
< > Update on GitHub