huggingface_hub.snapshot_download
hf snapshot
huggingface_hub 의 snapshot_download
Hugging Face Hub에 있는 리포지토리의 특정 스냅샷(commit 상태)을 로컬로 그대로 내려받는 function.
핵심은 다음과 같음:
- 리포지토리 전체를,
- 특정 revision 기준으로,
- 재현 가능하게(download once) 다운로드.
1. 정의
snapshot_download = Hugging Face Hub의 repo를 특정 commit(revision) 시점 그대로 로컬 디렉토리에 복제하는 함수
- 모델(model), 데이터셋(dataset), 스페이스(space) 모두 대상
git clone과 유사하지만 Git 없이 동작 가능.- Trainer / from_pretrained 내부에서도 실제로 쓰이는 핵심 메커니즘
2. from_pretrained 와 비교.
from_pretrained() 의 경우 모델 로딩에 초점을 두고 있음.
편리하나 내부 동작이 명시적이진 않음:
- 실제 파일이 어디에 저장됐는지 (단,
cache_dir인자로 명시적 지정 가능) - revision(commit) 이 정확히 무엇인지 (단,
revision인자로 명시적 지정 가능) - 여러 파일(config, safetensors, processor 등)을 명시적으로 관리하기 어려움
- 로딩되어 반환되는 모델 객체에 초점을
snapshot_download는 이를 보다 명시적으로 처리.
모델 및 데이터셋 등의 저장소 관련하여 생성된 산출물 artifact (=file) 관리에 초점.
model.safetensors,config.json,dataset_info.json등등을 local에 다운로드.- 특정 revision을 고정(pin)
- 파일들을 명확한 로컬 경로로 다운로드
- 이후 모든 로딩을 로컬 경로 기반으로 수행 가능.
3. 기본 사용법
from huggingface_hub import snapshot_download
local_dir = snapshot_download(
repo_id="google/vit-base-patch16-224",
)
-
기본값
- 최신 commit (
revision="main") - 캐시 디렉토리(
~/.cache/huggingface/hub) 아래 저장 - 반환값: 로컬 디렉토리 경로
- 최신 commit (
4. revision을 고정하는 것이 핵심
local_dir = snapshot_download(
repo_id="google/vit-base-patch16-224",
revision="a1b2c3d4e5f6", # commit hash
)
이렇게 하면:
- 언제 실행해도 동일한 파일 : immutable directory.
- 실험 재현성 100%
- 논문 / 실험 로그 / checkpoint 검증에 필수
5. cache 구조 **
snapshot_download는 내부적으로 다음 구조의 local 디렉토리를 생성:
~/.cache/huggingface/hub/
└── models--google--vit-base-patch16-224/
├── snapshots/
│ └── a1b2c3d4e5f6/
│ ├── config.json
│ ├── model.safetensors
│ ├── preprocessor_config.json
│ └── ...
└── refs/
- snapshots/commit_hash/ = immutable 디렉토리(commit 값이 이름)
- 여러 revision이 공존 가능
- 중복 파일은 하드링크로 관리됨
6. from_pretrained와의 관계
사실 다음의 두 코드는 동일한 결과를 보임:
(A) 직접 다운로드 후 로드
dir = snapshot_download("google/vit-base-patch16-224")
model = AutoModel.from_pretrained(dir)
(B) 바로 로드
model = AutoModel.from_pretrained("google/vit-base-patch16-224")
차이점:
| 항목 | snapshot_download | from_pretrained |
|---|---|---|
| 로컬 경로 제어 | 가능 | 내부 처리 |
| revision 고정 | 명시적 | 암묵적 |
| 재현성 관리 | 매우 좋음 | 상대적으로 약함 |
| 디버깅 | 쉬움 | 어려움 |
7. 자주 쓰는 옵션
특정 파일만 받고 싶을 때: allow_patterns
snapshot_download(
repo_id="google/vit-base-patch16-224",
allow_patterns=["*.json", "*.safetensors"],
)
특정 파일 제외: ignore_patterns
snapshot_download(
repo_id="google/vit-base-patch16-224",
ignore_patterns=["*.bin"],
)
캐시 말고 지정한 디렉토리에 저장: local_dir
snapshot_download(
repo_id="google/vit-base-patch16-224",
local_dir="./vit_base",
local_dir_use_symlinks=False,
)
local_dir_use_symlinks=True인 경우,~/.cache/huggingface/hub/.../snapshots/<commit>/에 실제 파일들이 존재하고local_dir에 지정한 경로에 symbolic link만 만들어짐.- 실험 백업용으로는 실제 파일이 있어야 하므로
False로 명시적 지정할 것: 기본은True임.
8. 기타
다음 상황이면 사용 권장:
- 실험 로그에 정확한 commit 기록이 필요할 때
- HF Hub 으로부터 내부 배포용 모델 mirror 구성
- 인터넷 없는 환경에서 로딩하는 환경 구축.
9. 요약
snapshot_download는 Hugging Face Hub의 repository에 대한 snapshot 복제 도구from_pretrained의 내부 핵심 동작에 해당함.- 재현성, 검증, 디버깅, 배포에서 필수
- 연구 코드라면 revision pin + snapshot_download는 거의 정석