Munche-768 GGUF

Baragi-AI/Munche-768 ์„ llama.cpp ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก GGUF ๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด ์†Œ์„ค์˜ ๋ฌธ์ฒด ์œ ์‚ฌ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 768์ฐจ์› ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

์›๋ณธ์€ google/embeddinggemma-300m ์— ๋Œ€ํ•œ LoRA ์–ด๋Œ‘ํ„ฐ์ด๋ฏ€๋กœ, ๋ฒ ์ด์Šค์— ๋ณ‘ํ•ฉํ•œ ๋’ค ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. SentenceTransformer ํŒŒ์ดํ”„๋ผ์ธ์˜ Dense ํ”„๋กœ์ ์…˜(768โ†’3072โ†’768)๊ณผ mean pooling ๋„ GGUF ์— ํฌํ•จ๋˜์–ด ์žˆ์–ด, ๋ณ„๋„ ํ›„์ฒ˜๋ฆฌ ์—†์ด ์›๋ณธ๊ณผ ๊ฐ™์€ ์ž„๋ฒ ๋”ฉ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

ํŒŒ์ผ

ํŒŒ์ผ ํฌ๊ธฐ ์ตœ์ € ์ฝ”์‚ฌ์ธ ์ผ์น˜๋„ ์œ ์‚ฌ๋„ ์ตœ๋Œ€ ์˜ค์ฐจ
munche-768-f32.gguf 1.18 GB 1.000000 0.000054
munche-768-f16.gguf 593 MB 0.999999 0.000121
munche-768-q8_0.gguf 318 MB 0.999437 0.002015
munche-768-q4_k_m.gguf 228 MB 0.990537 0.010029

F16 ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ๊ฐ€์ค‘์น˜๋Š” F32 ์ด์ง€๋งŒ F16 ๊ณผ์˜ ์ฐจ์ด๊ฐ€ ์ธก์ • ๋…ธ์ด์ฆˆ ์ˆ˜์ค€์ด๊ณ , ์šฉ๋Ÿ‰์€ ์ ˆ๋ฐ˜์ž…๋‹ˆ๋‹ค. F32 ๋Š” ์ฐธ์กฐ์šฉ์œผ๋กœ ํ•จ๊ป˜ ์˜ฌ๋ ค๋‘ก๋‹ˆ๋‹ค.

์šฉ๋Ÿ‰์ด ์ค‘์š”ํ•˜๋ฉด Q8_0 ์ด ๋ฌด๋‚œํ•ฉ๋‹ˆ๋‹ค. Q4_K_M ์€ ๋ฌธ์žฅ ๊ฐ„ ์œ ์‚ฌ๋„๊ฐ€ ์ตœ๋Œ€ 0.01 ๊นŒ์ง€ ํ”๋“ค๋ฆฌ๋ฏ€๋กœ, ๋ฏธ์„ธํ•œ ๋ฌธ์ฒด ์ฐจ์ด๋ฅผ ๋‹ค๋ฃจ๋Š” ์ด ๋ชจ๋ธ์˜ ์šฉ๋„์—์„œ๋Š” ์ˆœ์œ„๊ฐ€ ๋’ค์ง‘ํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธก์ • ๋ฐฉ๋ฒ•: ๋ฌธ์ฒด๊ฐ€ ๋‹ค๋ฅธ ํ•œ๊ตญ์–ด ๋ฌธ์žฅ 5๊ฐœ๋ฅผ ์›๋ณธ PyTorch ๋ชจ๋ธ๊ณผ ๊ฐ GGUF ๋กœ ์ธ์ฝ”๋”ฉํ•ด, ๊ฐ™์€ ๋ฌธ์žฅ๋ผ๋ฆฌ์˜ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„(์ตœ์ €๊ฐ’)์™€ ๋ฌธ์žฅ ๊ฐ„ ์œ ์‚ฌ๋„ ํ–‰๋ ฌ์˜ ์ตœ๋Œ€ ์ ˆ๋Œ€ ์˜ค์ฐจ๋ฅผ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

llama-server -m munche-768-f16.gguf --embeddings --pooling mean -c 2048 -ub 2048 -b 2048

-ub ์™€ -b ๋ฅผ 2048 ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด llama.cpp ๊ฐ€ ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ 512 ๋กœ ๋‚ฎ์ถฐ์„œ ๊ธด ์ž…๋ ฅ์ด ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

import numpy as np
import requests

texts = [
    "๊ทธ๋Š” ์ฐฝ๋ฐ–์„ ์˜ค๋ž˜ ๋ฐ”๋ผ๋ณด์•˜๋‹ค. ๋น—์†Œ๋ฆฌ๊ฐ€ ๋ฐฉ ์•ˆ์„ ๊ฐ€๋“ ์ฑ„์› ๋‹ค.",
    "์•ผ, ๊ทธ๊ฑฐ ์ง„์งœ์•ผ? ๋ง๋„ ์•ˆ ๋ผ. ๋‚˜ ์–ด์ œ ๊ฑ” ๋ดค๋Š”๋ฐ ์•„๋ฌด ๋ง๋„ ์—†์—ˆ๊ฑฐ๋“ .",
]

response = requests.post(
    "http://127.0.0.1:8080/v1/embeddings",
    json={"input": texts, "model": "munche-768"},
)
rows = sorted(response.json()["data"], key=lambda r: r["index"])
embeddings = np.array([r["embedding"] for r in rows])

print(embeddings.shape)          # (2, 768)
print(embeddings @ embeddings.T) # ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„

--pooling mean ์œผ๋กœ ๋„์šฐ๋ฉด llama.cpp ๊ฐ€ L2 ์ •๊ทœํ™”๊นŒ์ง€ ๋งˆ์นœ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋Š” ๋‚ด์ ๋งŒ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ pooling ์˜ต์…˜์„ ์“ฐ๊ฑฐ๋‚˜ ๊ฐ’์„ ์ง์ ‘ ๋‹ค๋ฃฐ ๋•Œ๋Š” norm ์„ ํ™•์ธํ•˜์„ธ์š”.

์ฃผ์˜์‚ฌํ•ญ

ํ”„๋กฌํ”„ํŠธ ํ”„๋ฆฌํ”ฝ์Šค๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. EmbeddingGemma ๊ณ„์—ด์€ task: search result | query: ๊ฐ™์€ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๋ถ™์—ฌ ์“ฐ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด ๊ทœ์น™์€ GGUF ์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›๋ณธ SentenceTransformer ์˜ encode_query() / encode_document() ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ง์ ‘ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ํ‘œ์˜ ์ผ์น˜๋„๋Š” ์–‘์ชฝ ๋ชจ๋‘ ํ”„๋ฆฌํ”ฝ์Šค ์—†์ด ์ธก์ •ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

์ตœ๋Œ€ ์ž…๋ ฅ ๊ธธ์ด๋Š” 2,048 ํ† ํฐ์ž…๋‹ˆ๋‹ค.

๋ณ€ํ™˜ ๋ฐฉ๋ฒ•

google/embeddinggemma-300m ์— LoRA ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋ณ‘ํ•ฉํ•œ ๋’ค llama.cpp ๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

python convert_hf_to_gguf.py munche-768-merged \
    --outfile munche-768-f32.gguf \
    --outtype f32 \
    --sentence-transformers-dense-modules

llama-quantize munche-768-f32.gguf munche-768-q8_0.gguf Q8_0

--sentence-transformers-dense-modules ๊ฐ€ ์—†์œผ๋ฉด Dense ๋ ˆ์ด์–ด๊ฐ€ ๋น ์ ธ์„œ, ์ฐจ์›์€ 768 ๋กœ ๊ฐ™์ง€๋งŒ ์›๋ณธ๊ณผ ๋‹ค๋ฅธ ์ž„๋ฒ ๋”ฉ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

๋ณ€ํ™˜ ์‹œ ์•Œ์•„๋‘˜ ์ ์ด ๋‘ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • SentenceTransformer.save() ๋Š” tokenizer.model ์„ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋ณ€ํ™˜๊ธฐ๊ฐ€ sentencepiece ๋Œ€์‹  BPE ๊ฒฝ๋กœ๋ฅผ ํƒ€๊ณ , embeddinggemma ์˜ pre-tokenizer ํ•ด์‹œ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค ๋ฆฌํฌ์—์„œ ํ•จ๊ป˜ ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์›๋ณธ ์–ด๋Œ‘ํ„ฐ๋Š” ํ…์„œ ํ‚ค์— base_model.model. ์ ‘๋‘์‚ฌ์™€ .default ๊ฐ€ ๋น ์ ธ ์žˆ์–ด, PeftModel.from_pretrained() ๋กœ ๋กœ๋“œํ•˜๋ฉด LoRA ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์€ ์ฑ„ ๊ฒฝ๊ณ ๋งŒ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ๊ต์ •ํ•ด ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค

์›๋ณธ Munche-768 ๊ณผ ๋™์ผํ•˜๊ฒŒ Gemma Terms of Use ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. EmbeddingGemma ํŒŒ์ƒ๋ฌผ์ด๋ฏ€๋กœ ์‚ฌ์šฉ ์ „ ์•ฝ๊ด€์„ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ๋ฆฌํฌ๋Š” ํ˜•์‹ ๋ณ€ํ™˜๋งŒ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ์„ฑ๋Šฅ์€ ์›๋ณธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ํ•™์Šต ๋ฐ์ดํ„ฐ, ํ‰๊ฐ€ ๊ฒฐ๊ณผ, ํ•œ๊ณ„์ ์€ ์›๋ณธ ๋ชจ๋ธ ์นด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ธ์šฉ

@software{munche768,
  title = {Munche-768: Korean Fiction Style Embedding Model},
  author = {Baragi AI},
  year = {2026},
  url = {https://huggingface.co/Baragi-AI/Munche-768}
}
Downloads last month
-
GGUF
Model size
0.3B params
Architecture
gemma-embedding
Hardware compatibility
Log In to add your hardware

4-bit

8-bit

16-bit

32-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for senior5207/munche-768-GGUF

Quantized
(1)
this model