페이지는 리포가 아니다
모델의 웹 페이지는 디렉토리를 감싼 마케팅이야. 아티팩트는 그 디렉토리고, 그 디렉토리를 — 아무것도 다운로드하기 전에 — 읽는 법을 배우는 게 이 퀘스트에서 가장 싼 스킬이야: 이후의 모든 것(dtype 포렌식, 출처, 다이제스트 검증)이, 잘 구성된 리포가 어떤 파일들을 담고 각각이 뭘 위한 것인지 아는 데서 시작하거든.
git 기반 모델 허브의 전형적인 Transformers 스타일 모델 리포지토리는 대략 이런 조합을 담아:
config.json— 아키텍처 선언: 모델 타입, 히든 크기, 레이어 수, 어휘 크기, 그리고 (악명 높게) dtype 필드. 로더는 이걸 신뢰해. 너는 읽어야지.model.safetensors(또는 샤드 세트 +model.safetensors.index.json) — 웨이트 그 자체, 그 포맷 경쟁에서 이긴 형식으로(다음 레슨).tokenizer.json/tokenizer_config.json/special_tokens_map.json/ 어휘 파일 — 토큰 파이프라인. 이거 없이는 모델이 무용지물이야. 텐서 파일만 복사한 아카이브는 이 사실을 로드 시점에, 어둠 속에서 발견하지.README.md— 모델 카드: 의도된 용도, 학습 요약, 라이선스 선언, 그리고 맨 위의 기계 판독용 메타데이터 블록(library_name, 라이선스 태그, 베이스 모델 포인터). 문서이면서 동시에 증거야.generation_config.json— 메이커가 권장하는 디코딩 기본값.- 선택 아티팩트 — 챗 템플릿, 멀티모달 모델의 프로세서 config, 전처리 config, 그리고 가끔 pickle 시대의 유산
pytorch_model.bin파일.
파일 목록이 이미 말해 주는 것들
다운로드 전에, 파일 목록은 세 개의 수집 질문에 답해. 이건 몇 세대 포맷인가? — safetensors뿐인지, 혼합인지, pickle 시대인지. 샤드가 있는지 몇 개인지. 이 리포는 온전한가? — 웨이트 없는 config, 토크나이저 없는 웨이트는 위험 신호야(또는 지금 보는 게 LoRA 어댑터 리포라는 신호인데, 그건 정당하지만 다른 종류야). 얼마나 클까? — API가 파일별 크기를 노출해. 합산하고 나면 디스크와 전송을 저지르기 전에 알 수 있어.
브랜치 구조도 해부학의 일부야. 리포지토리는 스냅샷 하나가 아니라 트리야: main은 저자가 지금 그곳에 두길 원하는 무엇이고, 다른 ref들(변환 브랜치, 유산 스냅샷, PR 헤드)는 대안들을 담아. 네가 읽은 ref의 커밋 sha가 네가 실제로 수집하는 revision이야. 기록해 두지 않으면 주소 지정 가능한 건 아무것도 수집한 게 아니야.
지금 당장 돌릴 수 있는 읽기 패스
허브는 정확히 이 정찰을 위한 JSON API를 노출해: 한 요청이 메타데이터(현재 커밋 sha, 태그, 파이프라인 타입)를, 다른 하나가 크기 포함 파일 트리를 돌려줘. 이 두 호출을 모든 수집 후보를 향한 첫 수로 만들어 — 비용은 없고 이후의 모든 걸 절제해 줘.