Qwen3-4B ν•œκ΅­μ–΄ 의료 QLoRA μ–΄λŒ‘ν„°

주의: μ—°κ΅¬Β·κ΅μœ‘μš© μ‹€μŠ΅ λͺ¨λΈμž…λ‹ˆλ‹€. μ˜λ£ŒκΈ°κΈ°λ‚˜ 진단 μ‹œμŠ€ν…œμ΄ μ•„λ‹ˆλ©°, μ‹€μ œ μ§„λ‹¨Β·μ²˜λ°©Β·μ‘κΈ‰μƒν™© νŒλ‹¨μ— μ‚¬μš©ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€. 좜λ ₯은 ν‹€λ¦¬κ±°λ‚˜ μœ„ν—˜ν•  수 μžˆμœΌλ―€λ‘œ λ°˜λ“œμ‹œ 의료 μ „λ¬Έκ°€κ°€ κ²€ν† ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λΈ κ°œμš”

Qwen/Qwen3-4Bλ₯Ό ν•œκ΅­μ–΄ 의료 객관식 및 μ§ˆμ˜μ‘λ‹΅ λ°μ΄ν„°λ‘œ 지도 λ―Έμ„Έμ‘°μ •(SFT)ν•œ 4-bit QLoRA μ–΄λŒ‘ν„°μž…λ‹ˆλ‹€. 전체 기반 λͺ¨λΈμ΄ ν¬ν•¨λœ μ €μž₯μ†Œκ°€ μ•„λ‹ˆλ―€λ‘œ μΆ”λ‘  μ‹œ 원본 Qwen3-4Bλ₯Ό ν•¨κ»˜ λ‚΄λ €λ°›μŠ΅λ‹ˆλ‹€.

ν•­λͺ© λ‚΄μš©
기반 λͺ¨λΈ Qwen/Qwen3-4B
ν•™μŠ΅ 방식 4-bit QLoRA / SFT
μ–΄λŒ‘ν„° ν˜•μ‹ PEFT LoRA
μ£Ό μ–Έμ–΄ ν•œκ΅­μ–΄
μš©λ„ 둜컬 νŒŒμΈνŠœλ‹Β·λΉ„κ΅ μ‹€μŠ΅
μ–΄λŒ‘ν„° 크기 μ•½ 126 MiB

ν•™μŠ΅ 데이터

데이터셋 μ‚¬μš© λ‚΄μš© ν•™μŠ΅ μƒ˜ν”Œ λΌμ΄μ„ μŠ€
sean0042/KorMedMCQA μ˜μ‚¬Β·κ°„ν˜Έμ‚¬Β·μ•½μ‚¬Β·μΉ˜κ³Όμ˜μ‚¬ ν•œκ΅­μ–΄ 의료 객관식 3,401 CC BY-NC 2.0
ChuGyouk/GenMedGPT-5k-ko ν•œκ΅­μ–΄ 일반 의료 μ§ˆμ˜μ‘λ‹΅ 5,178 MIT
합계 seed 42둜 μ„žμ–΄ ν•™μŠ΅ 8,579 데이터별 상이

GenMedGPT 데이터 5%인 273개 μƒ˜ν”Œμ€ 별도 κ²€μ¦μš©μœΌλ‘œ λΆ„λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. ν•™μŠ΅ 쀑 μžλ™ ν‰κ°€λŠ” μˆ˜ν–‰ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ°μ΄ν„°μ—λŠ” 였λ₯˜Β·νŽΈν–₯Β·λΆ€μ •ν™•ν•œ 의료 ν‘œν˜„μ΄ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€.

ν›ˆλ ¨ ν™˜κ²½

ν•­λͺ© μ„€μ •
운영체제 Windows 11
GPU NVIDIA GeForce RTX 5070, 11.94 GB VRAM
Python 3.12.0
PyTorch / CUDA 2.13.0+cu130 / CUDA 13.0
정밀도 BF16, 4-bit μ–‘μžν™”
transformers 5.15.1
datasets 5.0.1
accelerate 1.14.0
peft 0.20.0
trl 1.10.0
bitsandbytes 0.50.1

μ£Όμš” ν•˜μ΄νΌνŒŒλΌλ―Έν„°

ν•­λͺ© κ°’
Epoch 1
μ΅œλŒ€ μ‹œν€€μŠ€ 길이 1,024
μž₯μΉ˜λ‹Ή 배치 1
Gradient accumulation 8
유효 배치 크기 8
Learning rate 2e-4
Scheduler / warmup linear / 0
Optimizer adamw_torch_fused
LoRA rank / alpha / dropout 16 / 32 / 0.05
λŒ€μƒ λͺ¨λ“ˆ q, k, v, o, gate, up, down projection
Gradient checkpointing μ‚¬μš©
Packing μ‚¬μš©ν•˜μ§€ μ•ŠμŒ
체크포인트 간격 100 step
Seed 42

ν•™μŠ΅ κ²°κ³Ό

Step 100 μ²΄ν¬ν¬μΈνŠΈμ—μ„œ μž¬κ°œν•˜μ—¬ 총 1,073 stepκΉŒμ§€ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€.

μ§€ν‘œ κ²°κ³Ό
μ΅œμ’… train loss 0.8834
평균 token accuracy 0.7775
처리 token 수 1,467,679
ν•™μŠ΅ μ²˜λ¦¬λŸ‰ 0.136 step/s, 1.084 sample/s
기둝된 재개 ꡬ간 μ‹œκ°„ μ•½ 2μ‹œκ°„ 12λΆ„

이 μˆ˜μΉ˜λŠ” ν›ˆλ ¨ 데이터 κΈ°μ€€ μ§€ν‘œμ΄λ©° μΌλ°˜ν™” μ„±λŠ₯μ΄λ‚˜ 의료적 정확도λ₯Ό μ˜λ―Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚΄λΆ€ 평가 κ²°κ³Ό

자체 μ œμž‘ν•œ ν•œκ΅­μ–΄ 40λ¬Έν•­(객관식 10, λ‹¨μˆœ 상담 10, λͺ¨ν˜Έν•œ 상담 10, 응급상황 10)으둜 Base, Step 100, Step 500, Final을 λΉ„κ΅ν–ˆμŠ΅λ‹ˆλ‹€.

  • Final μ–΄λŒ‘ν„°μ˜ 객관식 μ •λ‹΅λ₯ μ€ 10/10μ΄μ—ˆμŠ΅λ‹ˆλ‹€.
  • Base λͺ¨λΈλ„ 동일 κ°κ΄€μ‹μ—μ„œ 10/10μ΄μ–΄μ„œ 지식 ν–₯상을 νŒλ³„ν•˜κΈ°μ—λŠ” 문항이 λ„ˆλ¬΄ μ‰¬μ› μŠ΅λ‹ˆλ‹€.
  • λ―Έμ„Έμ‘°μ • λͺ¨λΈμ€ κ°κ΄€μ‹μ—μ„œ 번호 + λ‹΅ ν˜•νƒœμ˜ κ°„κ²°ν•œ 좜λ ₯ ν˜•μ‹μ„ 더 μΌκ΄€λ˜κ²Œ λ³΄μ˜€μŠ΅λ‹ˆλ‹€.
  • 상담·응급 λ¬Έν•­μ—μ„œλŠ” κ³Όλ„ν•œ ν™•μ • 진단, κ·Όκ±°κ°€ λΆ€μ‘±ν•œ μ•½λ¬Ό μ œμ•ˆ, λΆ€μžμ—°μŠ€λŸ¬μš΄ μ˜ν•™ ν‘œν˜„, 반볡, 응급 μ•ˆλ‚΄ λΆˆμΌμΉ˜κ°€ κ΄€μ°°λμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ 이 κ²°κ³ΌλŠ” ν‘œμ€€ 벀치마크 μ μˆ˜κ°€ μ•„λ‹ˆλ©° μž„μƒ μ•ˆμ „μ„±μ΄λ‚˜ μ‹€μ‚¬μš© κ°€λŠ₯성을 μž…μ¦ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ‚¬μš© μ˜ˆμ‹œ

λ¨Όμ € CUDA ν™˜κ²½μ— λ§žλŠ” PyTorch와 λ‹€μŒ 라이브러리λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

pip install transformers peft accelerate bitsandbytes
import torch
from peft import PeftConfig, PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

adapter_id = "YOUR_ACCOUNT/YOUR_QWEN_ADAPTER_REPO"
peft_config = PeftConfig.from_pretrained(adapter_id)

tokenizer = AutoTokenizer.from_pretrained(adapter_id, use_fast=True)
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)
base_model = AutoModelForCausalLM.from_pretrained(
    peft_config.base_model_name_or_path,
    quantization_config=quantization_config,
    device_map="auto",
    dtype=torch.bfloat16,
)
model = PeftModel.from_pretrained(base_model, adapter_id)

messages = [{"role": "user", "content": "비타민 B12 결핍과 κ΄€λ ¨λœ λΉˆν˜ˆμ€ λ¬΄μ—‡μΈκ°€μš”?"}]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    enable_thinking=False,
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
with torch.inference_mode():
    output = model.generate(**inputs, max_new_tokens=256, do_sample=False)

answer_tokens = output[0, inputs["input_ids"].shape[1]:]
print(tokenizer.decode(answer_tokens, skip_special_tokens=True))

adapter_idλ₯Ό μ‹€μ œ Hugging Face μ–΄λŒ‘ν„° μ €μž₯μ†Œ ID둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν•œκ³„ 및 ꢌμž₯ν•˜μ§€ μ•ŠλŠ” μ‚¬μš©

  • 의료 진단, 처방, 볡약 κ²°μ •, 응급상황 λΆ„λ₯˜
  • ν™˜μžμ—κ²Œ κ²€ν†  없이 직접 λ‹΅λ³€ν•˜λŠ” μ„œλΉ„μŠ€
  • 의료 μ „λ¬Έκ°€λ₯Ό λŒ€μ²΄ν•˜λŠ” μžλ™ μ˜μ‚¬κ²°μ •
  • κ°œμΈμ •λ³΄λ‚˜ λ―Όκ°ν•œ μ˜λ£Œμ •λ³΄ μž…λ ₯
  • ν•™μŠ΅ λ²”μœ„ λ°–μ˜ μ΅œμ‹  μ˜ν•™ 지식이 ν•„μš”ν•œ 업무

μ•ˆμ „ 평가, ν™˜κ° 평가, 편ν–₯ 평가, ν‘œμ€€ 의료 벀치마크, μ „λ¬Έκ°€ 검증을 μΆ”κ°€ν•˜κΈ° μ „μ—λŠ” 연ꡬ μ‹€μŠ΅ μ™Έ μš©λ„λ‘œ μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

λΌμ΄μ„ μŠ€μ™€ 좜처

  • 기반 λͺ¨λΈ: Qwen/Qwen3-4B β€” Apache 2.0
  • KorMedMCQA β€” CC BY-NC 2.0
  • GenMedGPT-5k-ko β€” MIT

μ–΄λŒ‘ν„° μ‚¬μš©μžλŠ” 기반 λͺ¨λΈκ³Ό 각 ν•™μŠ΅ λ°μ΄ν„°μ˜ 쑰건을 λͺ¨λ‘ 확인해야 ν•©λ‹ˆλ‹€. 특히 KorMedMCQA의 λΉ„μ˜λ¦¬ 쑰건 λ•Œλ¬Έμ— 별도 법λ₯  κ²€ν†  없이 μƒμ—…μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν™˜κ²½ 영ν–₯

단일 RTX 5070μ—μ„œ μ•½ 2μ‹œκ°„ 규λͺ¨λ‘œ μ‹€ν–‰ν•œ 개인 μ‹€μŠ΅μž…λ‹ˆλ‹€. μ „λ ₯ μ†ŒλΉ„λŸ‰κ³Ό νƒ„μ†Œ λ°°μΆœλŸ‰μ€ λ³„λ„λ‘œ μΈ‘μ •ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

Downloads last month
35
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for csj9630/qwen3-4b-medical-qlora

Finetuned
Qwen/Qwen3-4B
Adapter
(1124)
this model

Datasets used to train csj9630/qwen3-4b-medical-qlora