문제 형태
이미지와 객관식 보기를 함께 읽고 정답을 고르는 멀티모달 MCQA 문제입니다.
한눈에 보기
공지 기준이 “학습한 내용, 적용 기법, 현재까지 적용한 결과” 중심이라서, 페이지도 그 흐름대로 바로 읽히게 정리했습니다.
문제 형태
이미지와 객관식 보기를 함께 읽고 정답을 고르는 멀티모달 MCQA 문제입니다.
전체 접근
운영형 추론 notebook과 학습형 LoRA notebook을 분리해서, 제출용 흐름과 실험용 흐름을 섞지 않았습니다.
내가 직접 손본 부분
정답 파싱, item 로그, backup, resume, validation split, adapter 분리 추론 같은 운영부를 직접 정리했습니다.
발표 핵심
모델 이름을 나열하기보다 27B → 35B → 9B, 그리고 Gemma QLoRA로 확장된 이유를 흐름으로 보여주는 게 좋습니다.
직접 구현
이 페이지에서 가장 먼저 강조할 부분입니다. 단순히 모델만 바꾼 게 아니라, 실제로 돌리고 다시 이어갈 수 있게 만드는 작업이 코드에 남아 있습니다.
출력 형식 통제
JSON answer, one-letter answer, invalid fallback 처리까지 넣어서 제출 형식을 강하게 고정했습니다.
item 단위 로그
row마다 JSON 로그를 남기고 progress.csv를 따로 유지해서 중간 상태를 확인할 수 있게 했습니다.
다시 이어서 실행
backup, checkpoint, resume, merge 유틸을 넣어서 중간에 끊겨도 이어서 돌릴 수 있게 했습니다.
프롬프트 모드 제어
reasoning / non-thinking 흐름을 분리하고 chat template로 답변 스타일을 제어했습니다.
학습 안정화
fixed validation split, early stopping, gradient checkpointing 쪽을 계속 손보며 학습 흐름을 정리했습니다.
추론 분기 정리
adapter가 없어도 base / it 모델 자체로 inference 가능한 경로를 따로 만들었습니다.
구조
notebook이 세 개로 갈라져 있어도 공통 흐름은 같습니다. 발표 때는 먼저 아래 파이프라인을 보여주고, 그다음 각 실험 트랙 차이를 붙이면 정리가 깔끔합니다.
입력 데이터
train.csv / test.csv
train·test image 폴더
프롬프트 구성
choice prompt
reasoning / non-thinking 제어
모델 실행
운영형 추론 / LoRA 학습
Qwen · Gemma 실험 분기
정답 파싱
strict answer letter
JSON fallback 처리
로그 / 제출
item JSON log / progress.csv
backup / submission.csv
Track A
Qwen 9B 4bit 기반으로 끝까지 돌리는 제출용 baseline입니다.
Track B
Qwen 27B non-thinking 설정으로 학습형 실험을 분리한 트랙입니다.
Track C
validation / early stopping / adapter inference 쪽을 더 다듬은 트랙입니다.
실험
같은 문제를 한 방향으로만 밀지 않고, 운영형과 학습형을 나눠서 가져간 흔적이 git log와 notebook 둘 다에 남아 있습니다.
운영형 baseline
먼저 제출 파이프라인부터 만든 notebook입니다. 답안 포맷, 로그, 백업, merge 흐름이 여기서 정리됩니다.
운영 관점에서 보면, 이 트랙은 “더 큰 모델”보다 “끝까지 도는 구조”를 먼저 만든 흐름으로 읽힙니다.
RUN_NAME = "qwen35_9b_4bit_run01"
AUTO_DOWNLOAD_BACKUP = True
MERGE_RUN_NAMES = [RUN_NAME]
Qwen LoRA 실험
운영형과 별도로, 학습을 통해 답안을 더 안정적으로 뽑아보려는 트랙입니다. non-thinking 제어와 one-letter answer 정책이 이 notebook의 핵심입니다.
이 트랙에서는 운영형 notebook과 별도로 학습형 실험을 분리해 가져간 판단이 가장 분명하게 드러납니다.
NON_THINKING = True
NUM_EPOCHS = 1
r = 32, alpha = 64, dropout = 0.05
Gemma 31B-it QLoRA
Gemma 계열로 실험을 확장하면서, 학습 안정성과 추론 분기까지 더 정리한 notebook입니다.
이 트랙은 모델 변경보다 validation, resume, inference 분기를 어떻게 정리했는지가 핵심입니다.
EARLY_STOP_PATIENCE = 3
ENABLE_VISION_TOWER_LORA = False
ADAPTER_FOR_INFERENCE = None
작업 로그
커밋 메시지를 그대로 나열하지 않고, 실제로 코드 의미가 바뀐 지점을 기준으로 다시 묶었습니다. 발표에서는 이 부분이 실험 과정을 가장 잘 보여줍니다.
Jupyter Notebook은 output이 같이 저장돼서 diff line 수가 실제 코드 변화보다 크게 보일 수 있습니다. 그래서 아래에서는 diff 수치와 무엇이 바뀌었는지를 같이 보게 했습니다.
발표 정리
배운 것, 지금 적용한 것, 다음에 해볼 것으로 나누면 이번 작업 흐름이 가장 자연스럽게 정리됩니다.
배운 것
지금 적용한 것
다음에 해볼 것
이번 기록에서 가장 중요하게 남기고 싶었던 건, 모델 교체보다 실험이 남고 다시 돌 수 있는 구조를 같이 만들었다는 점입니다.