--- library_name: peft base_model: Qwen/Qwen2-VL-7B-Instruct pipeline_tag: text-generation tags: - lora - qlora - multimodal - qwen2-vl license: apache-2.0 # (어댑터 가중치 라이선스—원하면 MIT 등으로 변경) language: - ko --- # Qwen2-VL-7B LoRA (AJU Multimodal Challenge) **단일 멀티모달 모델**(이미지 캡션, VQA, 수학 추론, 문맥 QA, 요약)을 **분기 없는 프롬프트 라우팅**으로 처리하도록 `Qwen/Qwen2-VL-7B-Instruct`에 **LoRA(QLoRA)** 를 적용해 튜닝한 **어댑터 가중치**입니다. 베이스 모델 가중치는 포함하지 않습니다. - **개발자:** **tahn0321/qwen2vl-7b-ajou-lora** - **Finetuned from:** `Qwen/Qwen2-VL-7B-Instruct` - **환경:** Colab A100 / PyTorch / Transformers / PEFT / bitsandbytes - **핵심 특징:** Single Adapter, No task-branching, Vision Tower Frozen, Auto-Grow 디코딩 ## 🔧 사용법 (어댑터 로드) ```python from transformers import AutoProcessor, AutoModelForCausalLM from peft import PeftModel base_id = "Qwen/Qwen2-VL-7B-Instruct" adapter_id = "tahn0321/qwen2vl-7b-ajou-lora" processor = AutoProcessor.from_pretrained(base_id, trust_remote_code=True) base = AutoModelForCausalLM.from_pretrained(base_id, device_map="auto", trust_remote_code=True) model = PeftModel.from_pretrained(base, adapter_id) model.eval() # msgs = [{"role":"system","content":[{"type":"text","text":"You are a concise, honest, multimodal assistant."}]}, # {"role":"user","content":[{"type":"image"}, {"type":"text","text":"Question: ..."}]}] # prompt = processor.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True) # enc = processor(text=prompt, images=[pil_image], return_tensors="pt") # out = model.generate(**{k:v.to(model.device) for k,v in enc.items()}, max_new_tokens=192) 📁 파일 구성 adapter_model.safetensors adapter_config.json processor_config.json tokenizer.json tokenizer.model tokenizer_config.json 🔬 학습 개요 튜닝 방식: QLoRA(4-bit) + LoRA LoRA 대상 모듈: q_proj, k_proj, v_proj, o_proj, up_proj, down_proj, gate_proj LoRA 하이퍼파라미터: r=32, alpha=16, dropout=0.05 비전 타워: 완전 동결 학습 하이퍼(예시): per_device_batch=1, grad_accum=16, lr=1e-4, cosine, warmup=3% 정밀도: bf16(가능 시) / fp16 데이터: 대회 제공 멀티태스크 데이터(*.parquet) 프롬프트: 시스템 고정 + (이미지+질문) 또는 (지문 + "Question: ...") — 태스크 분기 없음 라벨링: 프롬프트 토큰 -100(마스킹), 정답 토큰만 loss 반영 🧠 추론 메모 디코딩: Greedy, no_repeat_ngram_size=4, repetition_penalty=1.05 Auto-Grow: 태스크별 길이 프로파일과 종결부호 감지로 중간 끊김 방지 후처리: 수학/숫자 질의는 최종 숫자만 파싱하는 간단 규칙(옵션) 📊 결과 & 인사이트(요약) 8,000 샘플 부분 학습이 실시간 리더보드 BLEU에서 상대적으로 유리했던 반면, 전체 학습/검증 분할에서는 점수가 낮아지는 경우를 관찰. 교훈: 중간 리더보드 최적화보다 전체 분포 일반화를 우선할 것. ✅ 권장 사용 범위 멀티모달 지시 추론(이미지 캡션, VQA, 요약 등) 연구/실험 단일 모델/단일 어댑터/무분기 프롬프트 라우팅 설정 ⚠️ 제한/주의 생성 모델 특성상 환각/오해석 가능성. 안전/윤리 요구사항이 있는 도메인에서는 추가 필터링/가드레일 필요. 베이스 모델/데이터의 라이선스·약관을 준수하세요. 🔗 참고 Base model: https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct 프로젝트 설명/코드: https://github.com/TaeYunAhn/2025_AJU_Multimodal_DeepLearning_Challenge.git 📄 라이선스 어댑터 가중치: apache-2.0 베이스 모델/데이터: 각 출처 라이선스/약관 준수