#
Git 대 HTTP 패러다임

`huggingface_hub` 라이브러리는 git 기반의 저장소(Models, Datasets 또는 Spaces)로 구성된 Hugging Face Hub과 상호 작용하기 위한 라이브러리입니다. `huggingface_hub`를 사용하여 Hub에 접근하는 방법은 크게 두 가지입니다.

첫 번째 접근 방식인 소위 “git 기반” 접근 방식은 Repository 클래스가 주도합니다. 이 방법은 허브와 상호 작용하도록 특별히 설계된 추가 기능이 있는 `git` 명령에 랩퍼를 사용합니다. 두 번째 방법은 “HTTP 기반” 접근 방식이며, HfApi 클라이언트를 사용하여 HTTP 요청을 수행합니다. 각 방법의 장단점을 살펴보겠습니다.

##
Repository: 역사적인 Git 기반 접근 방식

먼저, `huggingface_hub`는 주로 Repository 클래스를 기반으로 구축되었습니다. 이 클래스는 `"git add"`, `"git commit"`, `"git push"`, `"git tag"`, `"git checkout"` 등과 같은 일반적인 `git` 명령에 대한 Python 랩퍼를 제공합니다.

이 라이브러리는 머신러닝 저장소에서 자주 사용되는 큰 파일을 추적하고 자격 증명을 설정하는 데 도움이 됩니다. 또한, 이 라이브러리는 백그라운드에서 메소드를 실행할 수 있어, 훈련 중에 데이터를 업로드할 때 유용합니다.

로컬 머신에 전체 저장소의 로컬 복사본을 유지할 수 있다는 것은 Repository를 사용하는 가장 큰 장점입니다. 하지만 동시에 로컬 복사본을 지속적으로 업데이트하고 유지해야 한다는 단점이 될 수도 있습니다. 이는 각 개발자가 자체 로컬 복사본을 유지하고 기능을 개발할 때 변경 사항을 push하는 전통적인 소프트웨어 개발과 유사합니다. 그러나 머신러닝의 경우, 사용자가 전체 저장소를 복제할 필요 없이 추론을 위해 가중치만 다운로드하거나 가중치를 한 형식에서 다른 형식으로 변환하기만 하면 되기 때문에 이런 방식이 항상 필요한 것은 아닙니다.

Repository는 지원이 중단될 예정이므로 HTTP 기반 대안을 사용하는 것을 권장합니다. 기존 코드에서 널리 사용되기 때문에 Repository의 완전한 제거는 릴리스 `v1.0`에서 이루어질 예정입니다.

##
HfApi: 유연하고 편리한 HTTP 클라이언트

HfApi 클래스는 특히 큰 모델이나 데이터셋을 처리할 때 유지하기 어려운 로컬 git 저장소의 대안으로 개발되었습니다. HfApi 클래스는 파일 다운로드 및 push, 브랜치 및 태그 생성과 같은 git 기반 접근 방식과 동일한 기능을 제공하지만, 동기화 상태를 유지해야 하는 로컬 폴더가 필요하지 않습니다.

HfApi 클래스는 `git`이 제공하는 기능 외에도 추가적인 기능을 제공합니다. 저장소를 관리하고, 효율적인 재사용을 위해 캐싱을 사용하여 파일을 다운로드하고, Hub에서 저장소 및 메타데이터를 검색하고, 토론, PR 및 코멘트와 같은 커뮤니티 기능에 접근하고, Spaces 하드웨어 및 시크릿을 구성할 수 있습니다.

##
무엇을 사용해야 하나요? 언제 사용하나요?

전반적으로, HTTP 기반 접근 방식은 모든 경우에 `huggingface_hub`를 사용하는 것이 좋습니다. HfApi를 사용하면 변경 사항을 pull하고 push하고, PR, 태그 및 브랜치로 작업하고, 토론과 상호 작용하는 등의 작업을 할 수 있습니다. `0.16` 릴리스부터는 Repository 클래스의 마지막 주요 장점이었던 http 기반 메소드도 백그라운드에서 실행할 수 있습니다.

그러나 모든 git 명령이 HfApi를 통해 사용 가능한 것은 아닙니다. 일부는 구현되지 않을 수도 있지만, 저희는 항상 개선하고 격차를 줄이기 위해 노력하고 있습니다. 사용 사례에 해당되지 않는 경우, Github에서 이슈를 개설해 주세요! 사용자와 함께, 사용자를 위한 🤗 생태계를 구축하는 데 도움이 되는 피드백을 환영합니다.

git 기반 Repository보다 http 기반 HfApi를 선호한다고 해서 Hugging Face Hub에서 git 버전 관리가 바로 사라지는 것은 아닙니다. 워크플로우 상 합당하다면 언제든 로컬에서 `git` 명령을 사용할 수 있습니다.

< > Update on GitHub