Model Card for Model ID
Model Details
Model Description
์ด ๋ชจ๋ธ์ Google์ ๊ฐ๋ ฅํ ์ํ ์ธ์ด ๋ชจ๋ธ์ธ Gemma-3-12B-it์ ๊ธฐ๋ฐ์ผ๋ก, ํ๊ตญ์ด ๋ฒ์ฃ ์ฌ๊ฑด ๋ณด๊ณ ์ ๋ถ์ ํ์คํฌ์ ๋ง๊ฒ ๋ฏธ์ธ ์กฐ์ (Fine-tuning)๋์์ต๋๋ค.
# ์ฃผ์ ๊ธฐ๋ฅ
์ฌ๊ฑด ์ฌ๊ตฌ์ฑ (Context Generation): ์ฌ๊ฑด ๋ณด๊ณ ์์ ๋ด์ฉ๊ณผ ์ฌ์ค ๊ด๊ณ๋ฅผ ๋ถ์ํ์ฌ ๋น์ ์ํฉ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ์ฌ๊ตฌ์ฑํฉ๋๋ค.
์ฌ๊ฑด ์ ํ ๋ถ๋ฅ (Kind Classification): ์ฌ๊ตฌ์ฑ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ฌ๊ฑด์ ์ข
๋ฅ๋ฅผ ์ ํํ ๋ถ๋ฅํ์ฌ ์ ์ํฉ๋๋ค.
# ํ์ต ์ ๋ต
(QLoRA)๋ชจ๋ธ ํ์ต์๋ QLoRA (Quantized Low-Rank Adaptation) ๊ธฐ๋ฒ์ด ์ ์ฉ๋์ด, ๋์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ๋น ๋ฅธ ํ์ต ์๋๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
์์ํ: 4-bit NF4 ์์ํ (BitsAndBytes)
PEFT: LoRA ์ ์ฉ (Rank $r=16$, $\alpha=32$)
์ต์ ํ: adamw_torch, Learning Rate $2e-4$, Cosine Scheduler
ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฒ์ ์ด ๋ชจ๋ธ์ ํ์ต ๋ฐ ์ฌ์ฉ์ ์ํด์๋ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ด ๊ถ์ฅ๋ฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์
transformers : 4.57.3
accelerate : 1.12.0
bitsandbytes : 0.48.2
peft : 0.15.2
torch : 2.9.0
Uses
from peft import prepare_model_for_kbit_training, LoraConfig, TaskType
from transformers import AutoModelForCausalLM, BitsAndBytesConfig, AutoTokenizer, TrainingArguments, Trainer
from peft import PeftModel
base_model = "google/gemma-3-12b-it"
tokenizer = AutoTokenizer.from_pretrained(base_model)
tokenizer.add_special_tokens({
"additional_special_tokens": ["<start_of_turn>", "<end_of_turn>"]
})
model = AutoModelForCausalLM.from_pretrained(
base_model,
torch_dtype=torch.bfloat16,
device_map="auto"
)
model.config.pad_token_id = tokenizer.pad_token_id
model.config.bos_token_id = tokenizer.bos_token_id
model.config.eos_token_id = tokenizer.eos_token_id
model.resize_token_embeddings(len(tokenizer))
model = PeftModel.from_pretrained(model, f"/lora_adapter")
question = """๋ค์ ์ฌ๊ฑด ๋ณด๊ณ ์๋ฅผ ํตํด์ ๋น์ ๋ฒ์ฃ ์ฌ๊ฑด์ ์ฌ๊ตฌ์ฑํด์ฃผ๊ณ , ์ฌ๊ฑด ์ ํ์ ๋ถ๋ฅํด์ค.
[์ฌ๊ฑด ๋ณด๊ณ ์]
2024๋
4์ 25์ผ, ์์ธ ์ญ์ค๋์
๊ตฌ์ญ ์ธ๊ทผ์์ ์ด์ฟ์ง ํ๋ฌผ์ฐจ๊ฐ ์ธ๋๋ก ๋์งํด 60๋ ๋จ์ฑ์ ๋ถ์์ํจ ์ฌ๊ฑด์ด ๋ฐ์ํ์๋ค.
ํ์ฅ ์กฐ์ฌ ๊ฒฐ๊ณผ, ํ๋ฌผ์ฐจ ์ด์ ์ ๊น๋ฏผ์(35)๋ ์ฌ์ ์ ๋ธ๋ ์ดํฌ ํจ๋๋ฅผ ๋ง๋ชจ์ํค๊ณ ๋ธ๋ ์ดํฌ์ก์ ๋ฌผ์ ์์ด ๊ณ ์ฅ์ ์ ๋ฐํ ๊ฒ์ผ๋ก ํ์ธ๋์๋ค.
์ฌ๊ณ ์งํ ๊น์ ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ๊ธ๊ณ ์์ ํ๊ธ 200๋ง ์๊ณผ ๊ฐ์ฃฝ ๊ฐ๋ฐฉ, ์ค๋งํธํฐ์ ๊บผ๋ด ์๊ฐ ์๊ฒฝ์ ์ง์์๊ฒ ์ ๋ฌํ๊ณ , ์ํ ๊ณ์ข๋ก ์ก๊ธํ์๋ค.
๊ฒฝ์ฐฐ์ ์ฐจ๋ GPS ๊ธฐ๋ก, ๋ธ๋ ์ดํฌ ํจ๋ ๋ง๋ชจ ์ํ, CCTV ์์ ์กฐ์ ์ฌ๋ถ๋ฅผ ์กฐ์ฌ ์ค์ด๋ฉฐ, ๊น์ ๊ตํต์ฌ๊ณ ์ฒ๋ฆฌํน๋ก๋ฒ์ ๋ฐ๋ผ ์น์ ํ์๋ก ์
๊ฑด๋์๋ค.
ํ์ฌ ์์ฌ๋ ๊น์ ์ํ ์ก๊ธ ๊ธฐ๋ก๊ณผ ๊ธ๊ณ ๋ด์ฉ๋ฌผ ํ๋ณด๋ฅผ ํตํด ๋ฒ์ฃ ๋๊ธฐ์ ๋ฒํ ๋ฐฉ๋ฒ์ ํ์
์ค์ด๋ค. ์ฌ๊ฑด์ ์์ง ๊ฒฐ๋ง์ด ๋ด๋ ค์ง์ง ์์์ผ๋ฉฐ, ์ถ๊ฐ ์ฆ๊ฑฐ ํ๋ณด๊ฐ ํ์ํ๋ค."""
messages = [
{"role": "system", "content": """๋น์ ์ ๋ฒํ๋ถ์ AI ๋ชจ๋ธ์
๋๋ค. ์ง๋ฌธ์ ์ ํํ๊ฒ ๋ต๋ณํ์ธ์."""},
{"role": "user", "content": question}
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
model.eval()
outputs = model.generate(
**inputs,
max_new_tokens=1024 * 2,
temperature=0.1,
do_sample=True,
)
generated = outputs[0][inputs["input_ids"].shape[-1] :]
answer = tokenizer.decode(generated, skip_special_tokens=True)
print('์ฌ๊ฑด ์ฌ๊ตฌ์ฑ : ', answer)
์ฌ๊ฑด ์ฌ๊ตฌ์ฑ : 2024๋
4์ 25์ผ ์คํ 1์ 30๋ถ, ์์ธ ์ญ์ค๋์
๊ตฌ์ญ ์ธ๊ทผ์์ ๋ฐ์ํ ์ด์ฟ์ง ํ๋ฌผ์ฐจ ์ฌ๊ณ ๋ ๋จ์ํ ๊ตํต์ฌ๊ณ ๊ฐ ์๋๋ผ, ์ฌ์ ์ ๊ณํ๋ ์ ๋ ์ฌ๊ฑด์ ์ผํ์ด์๋ค. ํ๋ฌผ์ฐจ ์ด์ ์์ธ ๊น๋ฏผ์(35)๋ 3๊ฐ์ ์ ๋ถํฐ ์ด์ ์๊ฐ ์ฃผ์ธ์ธ ์ด์ํธ(45)์ ๋น๋ฐ์ค๋ฌ์ด ๊ฑฐ๋๋ฅผ ์งํํด์๋ค. ์ด์ํธ๋ ์๊ฐ ๋ด ๊ณ ๊ฐ์ ์ ์์ ํ๊ณผ ๊ท์คํ์ ๋ณด์ ํ๊ณ ์์์ผ๋ฉฐ, ๊น์ ์ด์ํธ๊ฐ ์์ฃผ ์ด์ฉํ๋ ์ด์ฟ์ง ํ๋ฌผ์ฐจ๋ฅผ ์ด์ฉํด ์๊ฐ๋ฅผ ํธ ๊ณํ์ ์ธ์ ๋ค.
๊น์ ๋จผ์ ํ๋ฌผ์ฐจ์ ๋ธ๋ ์ดํฌ ํจ๋๋ฅผ ๊ณ ์๋ก ๋ง๋ชจ์ํค๊ณ , ๋ธ๋ ์ดํฌ์ก์ ๋ฌผ์ ์์ด ๋ธ๋ ์ดํฌ๊ฐ ์๋ํ์ง ์๋๋ก ์กฐ์ํ๋ค. ๋ํ, ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ์์ ๊ธ๊ณ ์ ์ด์ํธ์ ๊ท์คํ์ ์จ๊ฒจ ๋์๋ค. 4์ 25์ผ, ๊น์ ์ด์ฟ์ง์ ์ฃ๊ณ ์๊ฐ๋ก ์ถ๋ฐํ๋ค. ์๊ฐ ์์ ๋์ฐฉํ์, ๊น์ ๋ธ๋ ์ดํฌ๋ฅผ ๊ณ ์๋ก ๋ฐ์ ์ฐจ๊ฐ ๊ธ์ ๊ฑฐํ๋๋ก ์ ๋ํ๋ค. ๋ธ๋ ์ดํฌ๊ฐ ์๋ํ์ง ์์ ์ฐจ๋ ์ธ๋ ์ชฝ์ผ๋ก ๋์งํ๊ณ , 60๋ ๋จ์ฑ์ด ์ธ๋์์ ํก๋จ๋ณด๋๋ฅผ ๊ฑด๋๋ ์ค ์ฐจ์ ์น์ฌ ๋ค๋ฆฌ๋ฅผ ๋ค์ณค๋ค.
์ฌ๊ณ ์งํ ๊น์ ์ฆ์ ์ฐจ๋ฅผ ๋ฉ์ถ๊ณ , ํ์ฅ์ ๋จ์ ์๋ ์๊ฐ ์ง์์๊ฒ โ๋ธ๋ ์ดํฌ๊ฐ ๊ณ ์ฅ ๋์ ์ฌ๊ณ ๊ฐ ๋ฌ๋คโ๋ฉฐ ์ฌ๊ณผํ๋ค. ๋์์, ๊น์ ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ๊ธ๊ณ ๋ฅผ ์ด์ด ์ด์ํธ์ ๊ท์คํ์ ๊บผ๋ด ์๊ฐ ์ง์์๊ฒ ์ ๋ฌํ๋ค. ์ด์ํธ๋ ์ด๋ฏธ ๊น์ด ์ฌ์ ์ ์ฐ๋ฝ์ ์ทจํด โ์ด์ฟ์ง์ด ์ํํ๋คโ๋ฉฐ ์๊ฐ๋ฅผ ๋น์ฐ๋๋ก ์ ๋ํ๊ณ , ๊น์ ๊ทธ ํ์ ํ ์๊ฐ๋ฅผ ํธ์๋ค.
๊น์ ์ฌ๊ณ ์งํ ์ฐจ๋ฅผ ๋ค๋ฅธ ๋๋ก๋ก ์ด๋์์ผ, ๊ฒฝ์ฐฐ์ด ๋์ฐฉํ๊ธฐ ์ ์ ํ์ฅ์ ๋น ์ ธ๋๊ฐ๋ค. ๊ทธ๋ ์ฐจ ๋ด๋ถ์ ๋จ๊ฒจ์ง ๊ธ๊ณ ๋ฅผ ๋ค์ ์ ๊ทธ๊ณ , ์ฐจ๋ฅผ ๋ค๋ฅธ ์ง์ญ์ผ๋ก ์ด๋์์ผ ์ฆ๊ฑฐ๋ฅผ ์จ๊ฒผ๋ค. ์ดํ, ๊น์ ์๊ฐ ์ง์์๊ฒ โ์ฌ๊ณ ๊ฐ ๋ฐ์ํด ๋ณดํ๊ธ์ ์ฒญ๊ตฌํ ์ ์๋คโ๋ฉฐ, ์ฌ๊ณ ๋ก ์ธํ ์ํด๋ฅผ ๋ณด์๋ฐ์ ์ ์๋ค๊ณ ์์๋ค.
๊ฒฝ์ฐฐ์ ์ฌ๊ณ ํ์ฅ์ ์กฐ์ฌํ๋ ์ค, ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ๊ธ๊ณ ๋ฅผ ๋ฐ๊ฒฌํ๊ณ , ๊น์ด ์ฌ์ ์ ๋ธ๋ ์ดํฌ๋ฅผ ๊ณ ์๋ก ๊ณ ์ฅ๋ธ ์ฌ์ค์ ํ์ธํ๋ค. ๋ํ, ๊น์ด ์ฌ๊ณ ์งํ ์๊ฐ ์ง์์๊ฒ ๊ท์คํ์ ์ ๋ฌํ CCTV ์์์ด ํ๋ณด๋์๋ค. ๊น์ ๊ตํต์ฌ๊ณ ์ฒ๋ฆฌํน๋ก๋ฒ์ ๋ฐ๋ผ ์น์ ํ์๋ก ์
๊ฑด๋์์ผ๋ฉฐ, ํ์ฌ ๊ฒฝ์ฐฐ์ ๊น์ ์ํ ๊ณ์ข์ ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ๊ธ๊ณ ์ ๋ด์ฉ๋ฌผ์ ์กฐ์ฌ ์ค์ด๋ค. ์ฌ๊ฑด์ ์์ง ์์ฌ ๋จ๊ณ์ด๋ฉฐ, ๊น์ด ์ค์ ๋ก ์ด์ํธ์ ๊ท์คํ์ ํ์ณ ๋ค๋ฅธ ์ง์ญ์ผ๋ก ์ด๋์ํจ ์ฌ์ค์ด ํ์ธ๋๋ฉด, ์ ๋ ํ์๋ก ์ถ๊ฐ ๊ธฐ์๊ฐ ๊ฐ๋ฅํ ์ ๋ง์ด๋ค.
์ฌ๊ฑด ์ ํ : ์ ๋
Training Details
base_model = "./gemma-3-12b-it"
tokenizer = AutoTokenizer.from_pretrained(base_model)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4"
)
model = AutoModelForCausalLM.from_pretrained(
base_model,
quantization_config=bnb_config,
torch_dtype=torch.bfloat16,
device_map="auto"
)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"
],
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM,
)
model2 = get_peft_model(model, lora_config)
Preprocessing [optional]
def format_prompt(ex, max_length=1775):
global max_length_cal, row
title = '๋ค์ ์ฌ๊ฑด ๋ณด๊ณ ์๋ฅผ ํตํด์ ๋น์ ์ฌ๊ฑด์ ์ฌ๊ตฌ์ฑํด์ฃผ๊ณ , ์ฌ๊ฑด ์ ํ์ ๋ถ๋ฅํด์ค\n'
question = ex["report"]
answer = ex["context"]
kind = f'\n์ฌ๊ฑด ์ ํ : {ex["kind"]}'
prompt = f"""<start_of_turn>system
๋น์ ์ ๋ฒํ๋ถ์ AI ๋ชจ๋ธ์
๋๋ค.
์ง๋ฌธ์ ์ ํํ๊ฒ ๋ต๋ณํ์ธ์.
<end_of_turn>
<start_of_turn>user
{title}
[์ฌ๊ฑด ๋ณด๊ณ ์]
{question}\n<end_of_turn>\n<start_of_turn>model\n"""
prompt_ids = tokenizer(prompt, add_special_tokens=False)["input_ids"]
model_part = f"""{answer} {kind}<end_of_turn>"""
answer_ids = tokenizer(model_part, add_special_tokens=False)["input_ids"]
input_ids = prompt_ids + answer_ids
labels = [-100] * len(prompt_ids) + answer_ids
attention_mask = [1] * len(input_ids)
pad_len = max_length - len(input_ids)
input_ids += [tokenizer.pad_token_id] * pad_len
attention_mask += [0] * pad_len
labels += [-100] * pad_len
return {
"input_ids": input_ids,
"attention_mask": attention_mask,
"labels": labels,
}
Training Hyperparameters
training_args = TrainingArguments(
output_dir=model_path,
per_device_train_batch_size=16,
gradient_accumulation_steps=2,
num_train_epochs=4,
learning_rate=2e-4,
bf16=True,
fp16=False,
gradient_checkpointing = False,
logging_steps=5,
eval_steps=300,
save_strategy="steps",
save_steps=300,
save_total_limit=2,
report_to="none",
lr_scheduler_type="cosine",
warmup_ratio=0.05,
optim="adamw_torch"
)
Speeds, Sizes, Times [optional]
[4208/4208 24:18:13, Epoch 4/4]
Step Training Loss
5 2.421700
10 2.201100
15 2.120400
20 1.976900
25 1.791000
30 1.637100
35 1.536300
40 1.449400
45 1.359500
50 1.303600
55 1.247800
60 1.221700
65 1.207600
70 1.198400
75 1.159500
80 1.147800
85 1.102900
90 1.118900
95 1.070000
100 1.108500
200 1.035400
300 0.959200
400 0.936700
500 0.907200
600 0.905200
700 0.896200
800 0.891700
900 0.875500
1000 0.881300
2000 0.790400
3100 0.706300
3200 0.647300
3305 0.646800
3400 0.643700
3500 0.647800
3600 0.645000
3700 0.629200
3800 0.650200
3900 0.643800
3905 0.655300
3910 0.618900
3915 0.644300
3920 0.654000
3925 0.635700
3930 0.638100
3935 0.637000
3940 0.639900
3945 0.656600
3950 0.659600
3955 0.639200
3960 0.647100
3965 0.651800
3970 0.643500
3975 0.648100
3980 0.657600
3985 0.653300
3990 0.656000
3995 0.658200
4000 0.645500
4100 0.636100
4105 0.661700
4110 0.639600
4115 0.646400
4120 0.653800
4125 0.661900
4130 0.652300
4135 0.644100
4140 0.649600
4145 0.637300
4150 0.644700
4155 0.638500
4160 0.644800
4165 0.652200
4170 0.632500
4175 0.645700
4180 0.645900
4185 0.646300
4190 0.648200
4195 0.658500
4200 0.664600
4205 0.646900
Evaluation Result :
{'eval_loss': 0.8163620829582214, 'eval_runtime': 66.0619, 'eval_samples_per_second': 5.147, 'eval_steps_per_second': 0.651, 'epoch': 4.0}
Best checkpoint :
3910 0.6189
Model Card Authors [optional]
(์ฃผ)์ธ์ ๋ณด
ํํ์ด์ง : http://www.ijbinfo.com
์ ๋ณดํต์ ์ฐ์
์งํฅ์์ ์ง์์ ๋ฐ์์ ์งํํ์ต๋๋ค.
Model Card Contact
(์ฃผ)์ธ์ ๋ณด
์ฃผ์ : ์์ธ์ ๊ธ์ฒ๊ตฌ ๊ฐ์ฐ๋ 60-5 ๊ฐ์๊ทธ๋ ์ดํธ๋ฐธ๋ฆฌA๋ 805ํธ
์ฐ๋ฝ์ฒ : TEL : 02-3397-7765 FAX : 02-3397-7769 E-mail : sales@injungbo.co.kr
๋ด๋น์ : ์ฅํ์(chyungwon@ijbinfo.com)
Framework versions
- PEFT 0.15.2
- Downloads last month
- 1
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
๐
Ask for provider support