최근 서비스에 사용할 캐릭터 모델 생성을 위해 FLUX 1-dev(12B) 모델을 파인튜닝했습니다. 120억 파라미터의 거대 모델을 저전력 ARM 기반인 DGX Spark에서 훈련하며 얻은 데이터와 시행착오를 공유합니다.
1. 학습 환경 및 설정
-
하드웨어: DGX Spark (120GB Unified Memory)
-
모델: FLUX 1-dev (12B Parameters)
-
데이터셋: 캐릭터 이미지 40장 (1024px 해상도)
-
학습 설정:
-
Batch Size: 1
-
Gradient Accumulation: 4
-
Epochs: 100
-
Total Steps: 1000
-
2. 예상 vs 현실: 시간 관리의 실패
NVIDIA의 레퍼런스에서는 "13장 이미지, 1000 step 훈련 시 약 90분 소요"라고 명시되어 있었습니다. 이를 토대로 40장 이미지라면 넉넉잡아 4~5시간, 빠르면 2~3시간 내에 끝날 것으로 예상했습니다.
하지만 실제 소요 시간은 약 8시간이었습니다.
분석: > 이미지 수와 해상도: 40장이라는 데이터셋과 1024px 고해상도 설정이 부하를 가중시켰습니다.
- Step 당 시간: 1 Epoch(10 step) 처리에 평균 28초가 소요되었습니다. 즉, 이미지 1장 학습에 약 7초가 걸린 셈입니다.
3. OOM(Out Of Memory)과 메모리 관리
120GB 통합 메모리를 믿고 방심했던 것이 첫 번째 실수였습니다.
기존에 서버에 올려두었던 서비스들이 문제였습니다.
-
GPT-OSS (20B): 32GB 예약 할당
-
ComfyUI: 16GB 할당
이 상태에서 학습을 시작하니 리눅스 커널이 프로세스를 강제 종료(Kill)했습니다. 약 66GB의 여유 공간으로는 12B 모델의 학습(Gradient 계산 등)을 버티기엔 역부족이었습니다. 결국 모든 백그라운드 서비스를 내리고 나서야 안정적인 학습이 가능했습니다.
- 학습 시 실제 메모리 점유율: 약 71.4GB (지속 유지)

4. ARM 아키텍처의 놀라운 전력 효율
x86 기반의 고성능 GPU였다면 전력 소모가 상당했을 작업이지만, DGX Spark의 효율은 놀라웠습니다.
-
피크 전력: 89~90W
-
온도: 84~86°C (미니 선풍기 사용 후 81~83°C로 안정화)
12B 모델을 풀로드로 학습시키면서도 90W 수준의 전력만 소비한다는 점은, 엣지(Edge)나 온디바이스 AI 서버로서의 가능성을 보여주는 고무적인 수치입니다.
5. 병목 현상 발견: 텍스트 인코더(TE)의 CPU 이탈
학습 시간이 예상보다 길어진 결정적인 원인 중 하나를 발견했습니다.
FLUX 모델은 CLIP-L과 T5-XXL 두 개의 텍스트 인코더를 사용하는데, 모니터링 결과 둘 중 하나가 CUDA가 아닌 CPU에 할당되어 돌아가고 있었습니다.
-
현상: CUDA에 TE 1개, CPU에 TE 1개 할당됨
-
영향: CPU와 GPU 간 데이터 전송 및 연산 속도 차이로 인한 병목 발생
메모리 부족(OOM) 상황이 아니었음에도 왜 CPU로 오프로딩되었는지 설정상의 원인 분석이 필요합니다. 다음 학습 때는 두 인코더 모두 CUDA에 강제 할당하여 속도 개선을 시도할 예정입니다.
6. 결론 및 향후 계획
이번 테스트를 통해 100 Epoch / 1000 Step은 과한 설정임을 깨달았습니다.
-
개선 방향: 이미지 수를 30장 내외로 줄이거나, 매수를 유지하더라도 300~400 Step 정도로 학습량을 조절하는 것이 효율적일 것으로 보입니다.
-
하드웨어: 90W의 전력으로 거대 모델 파인튜닝이 가능하다는 점은 매우 매력적이나, 쿨링 솔루션(미니 선풍기 등)은 필수입니다. 아무래도 86~87도로 8시간 돌리는 것은 살짝 겁이 났습니다.
Next Step: 현재 학습 완료까지 약 2시간 30분이 남았습니다. 학습이 끝나는 대로 생성된 LoRA 어댑터를 FLUX에 장착하여 실제 성능 테스트 결과를 공유하겠습니다. 다음 포스팅을 기대해 주세요.
댓글이 없습니다.