FunctionGemma 파인튜닝 가이드

발행: (2026년 1월 17일 오후 06:23 GMT+9)
10 min read

Source: Google Developers Blog

번역을 진행하려면 번역하고자 하는 전체 텍스트(본문)를 제공해 주시겠어요?
본문을 알려주시면 원본 형식과 마크다운을 유지하면서 한국어로 번역해 드리겠습니다.

왜 툴 호출을 위해 파인‑튜닝을 할까?

FunctionGemma가 이미 툴 호출을 지원한다면, 파인‑튜닝이 왜 필요할까요?

답은 컨텍스트와 정책에 있습니다. 일반 모델은 귀사의 비즈니스 규칙을 알지 못합니다. 파인‑튜닝이 흔히 필요한 이유는 다음과 같습니다:

  • 선택 모호성 해결
    사용자가 “여행 정책이 뭐야?”라고 물으면, 기본 모델은 공개된 Google 검색을 기본으로 할 수 있습니다. 기업용으로 튜닝된 모델은 대신 내부 지식 베이스를 조회해야 합니다.

  • 초고도 전문화
    공개 데이터에 존재하지 않는 틈새 작업이나 독점 포맷을 마스터하도록 모델을 훈련합니다. 예를 들어, 도메인‑특정 모바일 액션 (디바이스 기능 제어)을 처리하거나 내부 API를 파싱해 복잡한 규제 보고서를 생성하는 경우가 있습니다.

  • 모델 증류
    큰 모델을 사용해 합성 학습 데이터를 생성한 뒤, 그 데이터를 이용해 더 작고 빠른 모델을 파인‑튜닝하여 해당 워크플로우를 효율적으로 실행합니다.

사례 연구: 내부 문서 vs. Google 검색

실제 예시를 살펴보겠습니다. 이 예시는 기술 가이드에서 FunctionGemma를 Hugging Face TRL 라이브러리를 사용해 파인튜닝하는 방법을 다룹니다.

도전 과제

목표는 두 가지 특정 도구를 구분하도록 모델을 학습시키는 것이었습니다.

  • search_knowledge_base – 내부 문서
  • search_google – 공개 정보

“Python에서 간단한 재귀 함수를 작성하기 위한 모범 사례는 무엇인가요?” 라는 질문을 하면 일반 모델은 기본적으로 Google을 사용합니다.
“여행 식비에 대한 환급 한도는 얼마인가요?” 와 같은 질문에 대해서는 모델이 이것이 내부 정책 질문임을 알아야 합니다.

해결책

성능을 평가하기 위해 bebechien/SimpleToolCalling 데이터셋을 사용했습니다. 이 데이터셋에는 위 두 도구 중 하나를 선택해야 하는 샘플 대화가 포함되어 있습니다.

데이터셋은 학습용과 테스트용으로 나뉘며, 테스트 세트를 별도로 유지함으로써 보지 않은 데이터에 대해 모델을 평가할 수 있습니다. 이는 모델이 단순히 예시를 외우는 것이 아니라 근본적인 라우팅 로직을 학습했는지 확인하는 데 중요합니다.

베이스 FunctionGemma 모델을 50 / 50 비율로 학습·테스트 셋을 나누어 평가했을 때, 결과는 최적이 아니었습니다. 베이스 모델은 잘못된 도구를 선택하거나 정책을 “논의”한다고 제시했으며, 함수 호출을 실행하지 않았습니다.

⚠️ 데이터 분포에 대한 중요한 주의 사항

데이터를 어떻게 나누는지는 데이터 자체만큼 중요합니다.

from datasets import load_dataset

# Load the raw dataset
dataset = load_dataset("bebechien/SimpleToolCalling", split="train")

# Convert to conversational format
dataset = dataset.map(
    create_conversation,
    remove_columns=dataset.features,
    batched=False,
)

# 50 % train / 50 % test split (no shuffling)
dataset = dataset.train_test_split(test_size=0.5, shuffle=False)

이 사례 연구에서는 원본 데이터셋이 이미 섞여 있기 때문에 shuffle=False와 함께 50 / 50 분할을 사용했습니다.

경고: 소스 데이터가 카테고리별로 정렬되어 있는 경우(예: search_google 예시가 모두 먼저, 그 다음에 search_knowledge_base 예시가 온 경우), 셔플을 비활성화하면 모델이 한 도구만 학습하고 다른 도구만 테스트하게 되어 성능이 크게 저하됩니다.

모범 사례:

  • 소스 데이터가 미리 섞여 있는지 확인하거나, 또는
  • 순서를 알 수 없을 때는 shuffle=True로 설정하여 모델이 학습 중에 모든 도구를 균형 있게 보도록 합니다.

결과

모델은 8 epoch 동안 SFTTrainer(Supervised Fine‑Tuning)를 사용해 파인튜닝되었습니다. 학습 데이터는 어떤 질의가 어느 도메인에 속하는지를 명시적으로 가르쳤습니다.

Training loss curve
그래프는 시간이 지남에 따라 손실(오류율)이 감소하는 모습을 보여줍니다. 초기의 급격한 하강은 새로운 라우팅 로직에 대한 빠른 적응을 나타냅니다.

파인튜닝 후 모델의 동작은 크게 바뀌었습니다. 이제 기업 정책을 엄격히 따릅니다. 예를 들어 “새 Jira 프로젝트를 만드는 절차는 무엇인가요?” 라는 질문에 파인튜닝된 모델은 올바르게 다음과 같이 출력합니다:

call:search_knowledge_base{query:Jira project creation process}

FunctionGemma 튜닝 랩 소개

모두가 Python 의존성을 관리하고, SFTConfig를 설정하며, 처음부터 학습 루프를 작성하고 싶지는 않습니다. **FunctionGemma Tuning Lab**을 소개합니다.

screenshot

FunctionGemma 튜닝 랩은 Hugging Face Spaces에 호스팅된 사용자 친화적인 데모입니다. 모델에게 특정 함수 스키마를 가르치는 전체 과정을 간소화합니다.

주요 기능

  • 코드 없는 인터페이스 – UI에서 직접 함수 스키마(JSON)를 정의합니다; Python 스크립트가 필요 없습니다.
  • 맞춤 데이터 가져오기User Prompt, Tool Name, Tool Arguments가 포함된 CSV 파일을 업로드합니다.
  • 원클릭 파인튜닝 – 슬라이더로 학습률과 에포크를 조정하고 즉시 학습을 시작합니다. 기본 설정은 대부분의 사용 사례에 적합합니다.
  • 실시간 시각화 – 학습 로그와 손실 곡선이 실시간으로 업데이트되어 수렴 과정을 모니터링할 수 있습니다.
  • 자동 평가 – 랩은 학습 전후 성능을 자동으로 평가하여 개선 사항에 대한 즉각적인 피드백을 제공합니다.

튜닝 랩 시작하기

랩을 로컬에서 실행하려면 Hugging Face CLI로 저장소를 클론하고 앱을 시작합니다:

hf download google/functiongemma-tuning-lab --repo-type=space --local-dir=functiongemma-tuning-lab
cd functiongemma-tuning-lab
pip install -r requirements.txt
python app.py

이제 코드를 작성하지 않고도 FunctionGemma를 파인튜닝해볼 수 있습니다!

결론

TRL을 사용하여 직접 학습 스크립트를 작성하든, FunctionGemma Tuning Lab의 데모 시각 인터페이스를 사용하든, 파인‑튜닝은 FunctionGemma의 전체 잠재력을 여는 열쇠입니다. 파인‑튜닝은 일반적인 어시스턴트를 다음과 같은 전문 에이전트로 변환합니다:

  • 엄격한 비즈니스 로직을 준수
  • 복잡하고 독점적인 데이터 구조를 처리

읽어 주셔서 감사합니다!

참고 문헌

블로그 게시물

코드 예시

HuggingFace 스페이스

Back to Blog

관련 글

더 보기 »

AI-Radar.it

!AI‑Radar의 표지 이미지.it https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazona...