hftools 제작: 단일 정적 바이너리로 Hugging Face 모델 다운로드 재개 및 검증 (Python 불필요)
요약
대용량 Hugging Face 모델(GGUF/safetensors) 다운로드 실패 문제를 해결하기 위해 단일 정적 Go 바이너리인 hftools를 제작했습니다. 이 도구는 재개 가능한 다운로드, 에어 갭 환경을 위한 해시 검증, 그리고 다양한 캐시 레이아웃 간의 변환 기능을 제공합니다.
핵심 포인트
- Python 없이 사용 가능한 단일 Go 바이너리로 배포되어 편리합니다.
- 멀티파트 Range 요청 기반으로 다운로드를 재개하고 Hub 장애에 강인합니다.
- 네트워크 연결 없이도 Git/LFS SHA를 이용해 모델 파일 무결성을 검증할 수 있습니다.
솔직히 말해서, 얼마나 많은 대용량 GGUF/safetensors 다운로드가 중간에 실패했는지 셀 수가 없었습니다. 오늘만 해도 Hub에서 5xx 오류를 한 움큼이나 받았고, huggingface-cli는 처음부터 다시 시작하려고 했습니다. 이 지점에서는 제대로 된 재개 가능한 다운로더가 '있으면 좋은 것'이 아니라 '반드시 필요한 것'입니다. 그래서 hftools를 만들었습니다.
단일 정적 Go 바이너리(mac/win/linux, arm64+x86-64), Python 불필요, MIT 라이선스입니다. 이 기능들은 실제 어려움을 겪으면서 나온 것입니다:
- 기본 재개 (Resume): 멀티파트 Range 다운로드가 정확한 바이트 오프셋에서 작업을 이어받고,
--retries -1은 몇 시간 동안 지속되는 Hub 장애에도 실패하지 않고 버텨냅니다. - 에어 갭용 해시 검증: 에어 갭 환경을 위해 실제로 중요한 기능입니다. 수 GB 모델을 오프라인 장치로 복사할 때, '이 파일이 전송 과정에서 온전히 살아남았는가?'는 편집증이 아니라 기본적으로 필수적인 것입니다. 모든 파일은 Git blob SHA-1 / LFS SHA-256에 대해 검사되며, 표준 .sha256 / .sha1sum을 사용하여 네트워크 연결 없이 어디서든 재검증할 수 있습니다.
- 다운로드 형식 변환: 평면 다운로드와 HF 캐시 레이아웃 간의 양방향 변환이 가능합니다. 깨끗한 플랫 디렉터리에 모델을 가져온 다음, transformers / diffusers가 오프라인으로 로드할 수 있도록 ~/.cache/huggingface로 내보내거나, 기존 캐시를 다시 외부로 가져올 수 있습니다.
필요할 때는 사소해 보이다가 실제로 에어 갭 환경에서 필요하게 되면 생명줄이 됩니다. 추가 기능으로는:
- peek: 하나의 Range 요청을 통해 safetensors/GGUF 헤더(텐서, dtypes, 파라미터 등, 몇 MB)를 미리 읽어볼 수 있습니다.
- scan: 임의의 체크포인트를 로드하기 전에 안전하지 않은 pickle 가져오기를 플래그로 스캔합니다.
솔직히 말해서, 이 기능들 대부분은 제가 사소하지만 짜증나는 필요성을 느끼고 해결책을 추가했기 때문에 존재하게 된 것입니다.
go install github.com/ziozzang/hftools/cmd/hftools@latest<br> export HF_TOKEN=hf_xxx hftools d --filter '*_q4_?.gguf|*.json' owner/model<br><br>Repo 및 사전 빌드 바이너리: https://github.com/ziozzang/hftools
아직 초기 단계입니다. 피드백이나
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기