LFM2.5-350M GRPO 미세조정이 IFStruct 점수를 29.7%로 끌어올림

TL;DR

단지 100단계와 약 500개 샘플로 350M 파라미터 LFM2.5 모델을 그룹 상대 정책 최적화(GRPO)로 미세조정하면, 구조화된 출력 준수율이 **22.6%에서 29.7%**로 상승하며, 이는 큰 모델과의 격차를 좁히는 7.1포인트의 성과입니다.


구조화된 출력 준수의 중요성

구조화된 출력—요청된 스키마에 부합하는 문법적으로 유효한 데이터를 반환하는 것—은 대규모 언어 모델(LLM)을 후속 시스템에 통합하기 위한 전제 조건입니다. 일반적인 추론 능력을 측정하는 벤치마크는 종종 이 요구사항을 간과합니다. IFStruct는 스키마 준수를 독립적으로 평가하므로, 실제 배포 가능성에 대한 신뢰할 수 있는 지표가 됩니다.

"모델이 요청된 형식과 구조에 맞춰 신뢰할 수 있게 유효하고 해석 가능한 출력을 반환하는지—스키마 준수 여부—는 실제로 후속 시스템에 연결될 수 있는지를 결정짓는 경우가 많다." – Hugging Face 블로그

LFM2.5-350M 기준 평가

  • 모델: LiquidAI/LFM2.5-350M (GGUF BF16), llama.cpp를 통해 제공.
  • 환경: 무료 타입 Colab/Kaggle GPU 서빙; 평가는 맥북 프로(Apple M5 Max, 36GB)에서 IFStruct 평가자로 실행.
  • 결과: 전체 통과율 22.6% (2000개 샘플 중 452개). 세부 분석:
    • JSON: 18.0%
    • YAML: 27.2%
    • 래퍼 키: 28.5%
    • 순수 리스트: 16.6%
  • 흔한 오류: 필수 필드 누락, 항목 수 불일치, 타입 불일치, 코드 블록 닫기 누락.

이 숫자는 원본 IFStruct 발표에서 보고된 21.1%와 매우 유사하여 기준이 타당함을 확인합니다.


GRPO 미세조정 파이프라인

전체 워크플로는 GitHub에 공개된 노트북으로 제공되며, 무료 타입 GPU에서 실행 가능합니다.

학습 데이터

  • 출처: nvidia/Nemotron-RL-instruction_following-structured_outputs (약 500개 샘플).
  • 증강:
    • 40%의 프롬프트에 "출력을 묶인 코드 블록 안에 반환하라"는 지시 추가, 형식 지시 사항 준수 교육.
    • 20%는 최상위 배열 작업으로 변환되어 순수 리스트 생성 및 항목 수 준수 유도.

모델 및 LoRA 어댑터

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    bias="none",
    task_type="CAUSAL_LM",
    target_modules=[
        "q_proj", "k_proj", "v_proj", "out_proj", "in_proj",
        "w1", "w2", "w3",
    ],
)
  • 약 600만 파라미터(350M 모델의 약 1.66%) 학습.

보상 함수

세 가지 스칼라 보상(0~1)으로 구조적 정확도 평가:

  1. json_format_reward – 출력을 파싱하고 요청된 형식(fenced vs raw) 확인. 정확한 형식에 전액, 잘못된 그러나 해석 가능한 경우 부분(0.2), 해석 불가능한 경우 0점.
  2. field_count_reward – 최상위 필드 수를 기대값과 비교; 불일치 시 선형 감소.
  3. schema_validation_reward – 제공된 JSON 스키마에 대해 검증, 필수 키 누락 및 제약 위반 시 패널티.

통합 보상은 reward_weights = [1.0, 0.5, 2.0]로 가중합.

학습 구성

t raining_args = GRPOConfig(
    output_dir="./outputs/lfm25-350m-nemotron-schema-grpo",
    learning_rate=5e-5,
    max_steps=100,
    warmup_steps=10,
    num_generations=8,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,
    steps_per_generation=2,
    max_completion_length=1024,
    mask_truncated_completions=False,
    temperature=1.1,
    beta=0.01,
    reward_weights=[1.0, 0.5, 2.0],
    logging_steps=1,
    save_steps=100,
)
  • 100개 최적화 단계, 프롬프트 그룹당 8개 샘플링 완료, 적절한 KL 패널티(beta=0.01).
  • 16GB GPU에서 1시간 미만에 학습 완료.

LoRA 병합

학습 후 LoRA 어댑터를 기본 가중치에 병합하고 하나의 체크포인트로 저장하여 llama.cpp 서빙을 위한 GGUF 변환 준비.


미세조정 후 IFStruct 결과

  • 모델: 병합된 GRPO 튜닝 체크포인트를 BF16 GGUF로 변환.
  • 서빙: 기준과 동일한 llama.cpp 매개변수, 다른 별칭과 포트 사용.
  • 결과: 전체 통과율 29.7% (2000개 샘플 중 594개).
    • JSON: 31.9% (↑13.9 포인트)
    • YAML: 27.5% (↑0.3 포인트)
    • 래퍼 키: 29.7% (↑1.2 포인트)
    • 순수 리스트: 29.7% (↑13.1 포인트)
  • 오류 프로파일 변화: 필드 누락 오류 감소, 그러나 여전히 타입 불일치 및 불필요한 필드 존재.
지표 기준 GRPO 튜닝 Δ
전체 22.6% 29.7% +7.1
JSON 18.0% 31.9% +13.9
YAML 27.2% 27.5% +0.3
래퍼 키 28.5% 29.7% +1.2
순수 리스트 16.6% 29.7% +13.1

향상은 보상 신호가 집중된 부분—JSON 형식 및 순수 리스트 생성—에 집중되어 있으며, GRPO 접근 방식의 효과를 입증합니다.


함의 및 주요 인사이트

  • 비용 효율적 확장 – 약 500개 예제로 100단계 GRPO 실행은 무료 타입 Colab 세션보다 저렴하지만, 구조화된 출력 준수율을 7포인트 이상 증가시킵니다.
  • 모델 크기 균형 – 튜닝된 350M 모델은 2B 파라미터 모델(Qwen3.5-2B는 IFStruct에서 33.15% 점수)과 비슷한 성능을 달성하면서도 훨씬 작고 실행 비용이 낮습니다.
  • 보상 설계의 중요성 – 형식, 필드 수, 스키마 검증에 대한 명시적 보상은 표적 출력 형식의 통과율을 직접적으로 높입니다.
  • 재현 가능성 – 모든 스크립트, 데이터 링크, 변환 단계가 공개되어 있어 연구자가 다른 모델이나 데이터셋으로 실험을 재현하거나 확장할 수 있습니다.

재현 방법

  1. 블로그에 설명된 대로 uv, llama.cpp, 그리고 IFStruct 평가 스크립트 설치.
  2. 노트북 리포지토리 클론 후 제공된 GRPOConfig로 GRPO 미세조정 셀 실행.
  3. LoRA 어댑터 병합, 체크포인트를 GGUF로 변환, llama-server로 서빙.
  4. 서빙된 엔드포인트에 대해 IFStruct 평가자 실행.

모든 명령어와 URL은 원본 Hugging Face 게시물에 정확히 재현됩니다.


한계

  • 학습 데이터(약 500개 샘플)는 대규모 RLHF에 사용되는 데이터의 아주 작은 일부이므로, 성과는 빠르게 포화 상태에 도달합니다.
  • YAML 출력에 대한 개선은 미미하여 현재 보상 가중치가 JSON 형식을 선호함을 시사합니다.
  • 벤치마크는 여전히 합성 작업을 반영하고 있으며, 실제 세계 통합에서는 추가적인 에지 케이스가 드러날 수 있습니다.

미래 방향성

  • 더 다양한 스키마와 형식(XML, CSV 등)을 포함한 학습 데이터 확장으로 준수 범위 확대.
  • 보상 가중치 또는 추가 제약 조건(예: 논리적 일관성)에 대한 실험.
  • 동일한 GRPO 파이프라인을 다른 소형 모델(예: 200M 파라미터 버전)에 적용하여 확장성 평가.

참고문헌

Sources