본문 바로가기

development/머신러닝 운영

🤯 [Error 분석]Stable Diffusion 모델을 Git에서 받다가 생긴 시행착오

로컬에서 Stable Diffusion 파이프라인을 구성하기 위해 모델 구성 요소를 직접 내려받다가, Git LFS와 디스크 용량 문제에 한 번 데였다.


FastAPI 기반 이미지 생성 API를 완성한 이후, 다음 단계로는 모델 구성 요소들을 Hugging Face에서 직접 다운로드하지 않고, 로컬에서 불러오는 구조로 전환하고자 했다. 파이프라인 전체를 인터넷에서 매번 가져오는 방식은 개발/운영 측면에서 여러모로 비효율적이기도 했고, Docker 컨테이너 내에서 네트워크 의존성을 줄이고자 한 목적도 있었다.

 

그래서 Hugging Face에서 제공하는 Stable Diffusion v1.5 모델 저장소를 git clone으로 내려받았는데… 여기서 생각지 못한 문제가 발생했다.


Git LFS와 "껍데기 파일" 문제

git clone https://huggingface.co/runwayml/stable-diffusion-v1-5

 

처음에는 모델 저장소를 잘 클론한 것 같았는데, 디렉토리 구조만 있고 정작 필요한 모델 가중치 파일(pytorch_model.bin, diffusion_pytorch_model.safetensors 등) 이 없는 상태였다. 알고 보니 Hugging Face 모델 저장소는 대부분 Git LFS를 사용하고 있어서, 추가로 아래 명령어를 실행해야 실제 파일이 내려받힌다.

git lfs pull

 

하지만 여기서 문제가 터졌다.


"No space left on device"

Git LFS로 모델 본체를 받으려다 보니, EC2 인스턴스 루트 디스크 용량이 순식간에 꽉 차버렸다. Stable Diffusion 모델 구성 요소만 해도 아래와 같은 디렉토리 내에 총합 4~6GB 정도 되는 대형 파일들이 들어 있다.

디렉토리주요 파일명설명
text_encoder/ pytorch_model.bin, model.safetensors 텍스트 임베딩용 CLIP 모델
vae/ diffusion_pytorch_model.safetensors VAE 디코더
unet/ diffusion_pytorch_model.safetensors 이미지 생성의 핵심 U-Net
safety_checker/ pytorch_model.bin NSFW 필터링 모델
 

루트 디스크 공간이 넉넉하지 않았던 탓에, git lfs pull 도중에 “no space left on device”라는 에러를 만나게 됐다.


결국 방향을 바꾸기로

Git으로 모델 전체를 내려받는 방식은 결국 포기했다. 대신, Hugging Face 파이프라인에서 사용되는 모델 구성 요소만 따로 추출해서 필요한 경로에 저장하고 로딩하는 방식으로 전환하기로 했다. 이 방식은 디스크 공간도 효율적으로 쓸 수 있고, 필요한 파일만 관리할 수 있어서 결과적으로 훨씬 실용적이라는 결론.

 

이 방법에 대한 자세한 구현 내용은 다음 포스팅에서 다룰 예정!


정리하자면

  • Hugging Face 모델 저장소는 Git LFS 기반으로, 단순 clone만으로는 실제 모델 파일이 받아지지 않는다.
  • LFS 파일들은 수 GB 단위이기 때문에 서버 디스크 용량도 반드시 고려해야 한다.
  • 전체 저장소를 클론하기보다는, 필요한 구성 요소만 추출해 로컬 경로에 저장하는 방식이 훨씬 실용적이다.
  • 항상 느끼는 건 이슈가 터지면 그때부터 배움의 농도가 다르다! 앞으로 개발자로서 마주하게될 심각한 에러를 대비하기 위한 예방주사같다고나할까?