Skip to main content
이 가이드에서는 VESSL Cloud에서 QLoRAUnsloth를 사용해 Gemma 4 E4B를 파인튜닝하는 전체 과정을 다뤄요. 가이드를 마치면 공유 스토리지에 저장된 파인튜닝 어댑터를 바로 추론이나 팀 협업에 활용할 수 있어요.
Google Gemma 4 공식 이미지

사전 준비

시작하기 전에 다음 항목을 확인해 주세요:
  • 크레딧이 충전된 VESSL Cloud 계정(가입하기)
  • A100 SXM 80 GB GPU 인스턴스에 접근 가능한 조직
  • Python과 Hugging Face Transformers에 대한 기본 지식
VESSL Cloud가 처음이라면 멤버 퀵스타트를 먼저 완료해서 계정, 결제, 스토리지를 설정해 주세요.

Workspace 만들기

1

스토리지 볼륨 설정하기

이 워크플로우에는 두 가지 스토리지가 필요해요:왜 Cluster storage를 /root에 마운트하나요? 홈 디렉터리($HOME)는 pip이 패키지를 설치하는 기본 경로예요. 여기에 Cluster storage를 마운트하면 pip install을 한 번만 실행하면 돼요. Workspace를 일시정지/재개해도 패키지가 그대로 남아있어요.왜 Object storage를 /shared에 마운트하나요? 파인튜닝한 모델 가중치는 다른 Workspace나 클러스터에서도 접근할 수 있어야 해요. Object storage는 S3 기반이라 어디서든 접근 가능하고, 팀원과 결과를 공유하거나 다른 리전에서 배포하기 편해요.Workspace를 만들기 전에 두 볼륨을 모두 생성해 주세요:
  • Cluster storage: 사이드바에서 Cluster storage를 클릭하고 Create new volume을 눌러주세요. 자세한 내용은 스토리지 개요를 참고해 주세요.
  • Object storage: 사이드바에서 Object storage를 클릭하고 Create new volume을 눌러주세요. 자세한 내용은 볼륨 만들기를 참고해 주세요.
Object storage를 /root에 마운트하지 마세요. Object storage는 Cluster storage보다 느려서 메인 작업공간으로 적합하지 않아요. /shared 같은 별도 마운트 포인트를 사용해 주세요.
2

Workspace 실행하기

아래 설정으로 새 Workspace를 만들어 주세요:전체 생성 과정은 Workspace 만들기를 참고해 주세요.
4비트 양자화(QLoRA)를 사용하면 E4B 모델의 VRAM 사용량이 약 18-22 GB 수준이에요. A100의 80 GB에서 충분한 여유가 있어서 배치 사이즈를 늘리거나 시퀀스 길이를 더 길게 설정할 수도 있어요.
3

Workspace에 접속하기

Workspace 상태가 Running으로 바뀌면 JupyterLab이나 SSH로 접속해 주세요. Workspace 접속하기를 참고해 주세요.

패키지 설치

Workspace 터미널을 열고 필요한 라이브러리를 설치해 주세요:
Cluster storage를 /root에 마운트했다면 이 패키지들은 Workspace를 일시정지/재개해도 유지돼요. 한 번만 실행하면 돼요.

모델 로드

load_in_4bit=True가 하는 일: 기본적으로 모델 파라미터는 16비트 부동소수점으로 로드되는데, 4비트 양자화는 QLoRA(NF4) 기법으로 가중치를 4비트로 압축해요. 이렇게 하면 메모리 사용량이 약 4배 줄어들어서, 원래 약 32 GB의 VRAM이 필요한 모델이 약 8-10 GB로 들어가요. 품질 저하는 미미한데, 고정된 기본 가중치만 양자화되고 LoRA 어댑터는 전체 정밀도로 학습하기 때문이에요.
A100 80 GB에서 학습 중 nvidia-smi가 보고한 피크 VRAM 약 11 GB

LoRA 어댑터 설정

하이퍼파라미터 설명

r을 올려야 하는 경우:
  • 복잡한 도메인 적응 (의료, 법률, 코드): r=16 시도
  • 대규모 다양한 데이터셋 (10만개 이상): r=16 또는 r=32 시도
  • 단순한 스타일 변환이나 포맷 맞추기: r=8이면 충분해요.

데이터셋 준비

이 예제에서는 FineTome-100k 데이터셋에서 3,000개 샘플을 사용해 빠른 데모를 진행해요. 프로덕션에서는 전체 데이터셋을 사용하거나 자체 데이터로 대체해 주세요.
데이터셋은 각 항목에 conversations 필드가 있는 JSON 파일이어야 해요. rolecontent가 포함된 메시지 객체의 리스트 형태예요:
다음과 같이 로드하면 돼요:
3,000개 샘플은 데모 목적이에요. 품질을 제대로 끌어올리려면 전체 10만 개 데이터셋이나 최소 1-2만 개의 고품질 자체 데이터를 써 주세요.

학습

학습 파라미터 설명

train_on_responses_only가 하는 일: 기본적으로 전체 대화(사용자 + 어시스턴트 턴)에 대해 손실을 계산하는데, 이 옵션은 사용자 턴을 마스킹해서 모델이 어시스턴트 응답만 학습하게 해요. 학습 효율이 올라가고 모델이 사용자 프롬프트를 외우는 것을 방지해요.

평가

학습이 끝나면 모델 성능을 정성적, 정량적으로 확인해 보세요.

학습 손실 확인

trainer_stats 객체에 학습 로그가 담겨 있어요. 손실 곡선이 감소하면 모델이 학습하고 있다는 뜻이에요:
정상적인 손실 곡선은 높은 값(2-3 이상)에서 시작해 꾸준히 감소해요. 너무 일찍 정체되면 r을 올리거나 데이터를 더 사용해 보세요. 손실이 급등하거나 발산하면 학습률을 낮춰보세요.
60 step 학습에서 손실이 약 2.37에서 안정적으로 감소하는 곡선

학습 전후 비교

파인튜닝된 모델로 동일한 프롬프트를 실행해서 효과를 확인해 보세요:
더 엄밀한 평가를 위해 데이터를 미리 분할하고 홀드아웃 부분의 손실을 계산할 수 있어요:
이렇게 하면 일정 간격으로 평가 손실을 보고해서, 과적합(학습 손실은 감소하는데 평가 손실은 증가)을 감지할 수 있어요.

모델 저장

파인튜닝된 어댑터와 토크나이저를 Object storage에 저장해요:
/shared가 Object storage에 마운트되어 있으므로 저장된 모델은:
  • 영속적: Workspace를 종료해도 유지돼요.
  • 크로스 클러스터: 어느 리전의 Workspace에서든 접근할 수 있어요.
  • 팀 공유 가능: 해당 볼륨에 접근 가능한 팀원 누구나 어댑터를 로드할 수 있어요.
학습이 끝난 뒤 /shared/gemma4-finetuned/final/ 디렉터리에 저장된 어댑터와 토크나이저 파일 목록
다른 Workspace에서 어댑터를 로드하려면:

Gemma 4 모델 비교

GPU와 태스크 복잡도에 맞는 Gemma 4 변형을 선택해 주세요:
VRAM 추정치는 QLoRA 4비트 양자화, 배치 사이즈 1, 시퀀스 길이 2048 기준이에요. 실제 사용량은 배치 사이즈, 시퀀스 길이, 그래디언트 누적 설정에 따라 달라져요.

다음 단계

  • 실행 가능한 레시피 받기: 이 워크플로우를 패키징한 버전(인터랙티브 노트북 + vesslctl 배치 잡 경로, 소규모 도메인 QA 데이터셋으로 학습)이 gemma4-finetuning 쿡북 레시피에 있어요. 실측 비용과 VRAM 벤치마크도 함께 들어 있어요.
  • 자체 데이터 활용: FineTome-100k를 도메인 특화 대화 데이터로 바꿔서 모델을 내 용도에 맞춰 보세요.
  • DPO 또는 ORPO 적용: SFT 이후 선호도 최적화(DPO/ORPO)를 적용해서 모델을 원하는 방향으로 더 정렬할 수 있어요.
  • 모델 키우기: 더 높은 품질이 필요하면 12B 또는 27B 모델로 올려 보세요. 대규모 데이터셋에는 r=16 또는 r=32를 사용하세요.
  • GGUF 내보내기: 파인튜닝된 모델을 GGUF 포맷으로 변환해서 llama.cpp나 Ollama로 로컬 추론을 할 수 있어요.
  • 배치 잡으로 실행: VESSL Cloud 배치 잡을 사용해서 파인튜닝을 스케줄링 가능한 재현 가능 파이프라인으로 실행해 보세요.
  • vesslctl로 자동화: vesslctl job create 한 줄로 이 실험을 재현 가능한 배치 잡으로 제출할 수 있어요. Jupyter 셀 대신 train.py에 담고, 터미널이나 CI 파이프라인에서 바로 돌려보세요.