้กน็›ฎๆ–‡ไปถๅคน

ๆ–‡ไปถ
wehub-resource-sync e06fe8e8c6
Secret Leaks / trufflehog (push) Failing after 1s
Build documentation / build (push) Failing after 1s
Build documentation / build_other_lang (push) Failing after 0s
CodeQL Security Analysis / CodeQL Analysis (push) Failing after 0s
PR CI / pr-ci (push) Failing after 1s
Slow tests on important models (on Push - A10) / Get all modified files (push) Failing after 1s
Slow tests on important models (on Push - A10) / Model CI (push) Has been skipped
Self-hosted runner (benchmark) / Benchmark (aws-g5-4xlarge-cache) (push) Has been cancelled
New model PR merged notification / Notify new model (push) Has been cancelled
Update Transformers metadata / build_and_package (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:57:37 +08:00

4.4 KiB

GGUF์™€ Transformers์˜ ์ƒํ˜ธ์ž‘์šฉ gguf-and-interaction-with-transformers

GGUF ํŒŒ์ผ ํ˜•์‹์€ GGML๊ณผ ๊ทธ์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋งค์šฐ ์ธ๊ธฐ ์žˆ๋Š” llama.cpp์ด๋‚˜ whisper.cpp์—์„œ ์ถ”๋ก ์„ ์œ„ํ•œ ๋ชจ๋ธ์„ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ˜•์‹์€ Hugging Face Hub์—์„œ ์ง€์›๋˜๋ฉฐ, ํŒŒ์ผ ๋‚ด์˜ ํ…์„œ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ํ˜•์‹์€ "๋‹จ์ผ ํŒŒ์ผ ํ˜•์‹(single-file-format)"์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์„ค์ • ์†์„ฑ, ํ† ํฌ๋‚˜์ด์ € ์–ดํœ˜, ๊ธฐํƒ€ ์†์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋ธ์—์„œ ๋กœ๋“œ๋˜๋Š” ๋ชจ๋“  ํ…์„œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ๋“ค์€ ํŒŒ์ผ์˜ ์–‘์žํ™” ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์–‘์žํ™” ์œ ํ˜•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Transformers ๋‚ด ์ง€์› support-within-transformers

transformers ๋‚ด์—์„œ gguf ํŒŒ์ผ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ GGUF ๋ชจ๋ธ์˜ ์ถ”๊ฐ€ ํ•™์Šต/๋ฏธ์„ธ ์กฐ์ •์„ ์ œ๊ณตํ•œ ํ›„ ggml ์ƒํƒœ๊ณ„์—์„œ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก gguf ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ๋กœ๋“œํ•  ๋•Œ ๋จผ์ € FP32๋กœ ์—ญ์–‘์žํ™”ํ•œ ํ›„, PyTorch์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์ค‘์น˜๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

Note

์ง€์›์€ ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ์–‘์žํ™” ์œ ํ˜•๊ณผ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ด๋ฅผ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ง€์›๋˜๋Š” ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜์™€ ์–‘์žํ™” ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

์ง€์›๋˜๋Š” ์–‘์žํ™” ์œ ํ˜• supported-quantization-types

์ดˆ๊ธฐ์— ์ง€์›๋˜๋Š” ์–‘์žํ™” ์œ ํ˜•์€ 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 ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ supported-model-architectures

ํ˜„์žฌ ์ง€์›๋˜๋Š” ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜๋Š” Hub์—์„œ ๋งค์šฐ ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ์•„ํ‚คํ…์ฒ˜๋“ค๋กœ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

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

์‚ฌ์šฉ ์˜ˆ์‹œ example-usage

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}