Hub documentation

Compatibilidade reversa com LFS

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Compatibilidade reversa com LFS

Uploads de clientes legados / não compatíveis com Xet ainda seguem o caminho padrão do Git LFS, mesmo que o repositório já seja baseado em Xet. Assim que o arquivo é enviado ao LFS, um processo em segundo plano migra automaticamente o arquivo para usar o armazenamento Xet. A arquitetura do Xet oferece compatibilidade reversa para clientes legados que baixam arquivos de repositórios baseados em Xet, fornecendo uma ponte Git LFS. Enquanto um cliente compatível com Xet recebe informações de reconstrução do arquivo do CAS para baixar o arquivo baseado em Xet, um cliente legado recebe uma única URL da ponte, que realiza o trabalho de reconstruir o arquivo solicitado e retornar a URL para o recurso. Isso permite baixar arquivos por meio de uma URL, para que você possa continuar usando a interface web do Hub ou curl. Ao ter uploads de arquivos LFS migrados automaticamente e clientes mais antigos continuando a baixar arquivos de repositórios baseados em Xet, os mantenedores e o restante do Hub podem atualizar seus pipelines no seu próprio ritmo.

O armazenamento Xet oferece uma transição sem atritos para os repositórios existentes do Hub. Não é necessário saber se o backend Xet está envolvido de alguma forma. Os repositórios com suporte do Xet continuam a usar o formato de arquivo de ponteiro do Git LFS; a adição do Xet backed hash é incluída apenas na interface web como uma conveniência. Na prática, isso significa que os repositórios existentes e os repositórios recém-criados não parecerão diferentes se você fizer um bare clone deles. Cada um dos arquivos grandes (ou arquivos binários) continuará a ter um arquivo de ponteiro que corresponde à especificação do arquivo de ponteiro do Git LFS.

Essa simetria permite que clientes não compatíveis com Xet (por exemplo, versões mais antigas do huggingface_hub) interajam com repositórios baseados em Xet sem preocupações. De fato, dentro de um repositório, é suportada uma mistura de arquivos baseados em Git LFS e Xet. O backend Xet indica se um arquivo está no armazenamento Git LFS ou Xet, permitindo que serviços downstream solicitem as URLs apropriadas do S3, independentemente de qual sistema de armazenamento contém o conteúdo.

Armazenamento legado: Git LFS

O sistema de armazenamento legado no Hub, Git LFS, utiliza muitas das mesmas convenções dos repositórios com suporte a Xet. O backend de Git LFS do Hub é o Amazon Simple Storage Service (S3). Quando o Git LFS é invocado, ele armazena o conteúdo dos arquivos no S3, usando o hash SHA256 para nomear o arquivo para acesso futuro. Essa arquitetura de armazenamento é relativamente simples e permitiu que o Hub armazenasse os arquivos de milhões de repositórios de modelos, conjuntos de dados e spaces.

A principal limitação do Git LFS é sua abordagem centrada em arquivos para a deduplicação. Qualquer alteração em um arquivo, independentemente de quão grande ou pequena seja essa alteração, significa que o arquivo inteiro é versionado — o que acarreta sobrecargas significativas nas transferências de arquivos, pois o arquivo inteiro é enviado (ao fazer commit em um repositório) ou baixado (ao puxar a versão mais recente para sua máquina).

Isso resulta em uma experiência de desenvolvimento pior, além de uma proliferação de armazenamento adicional.

Update on GitHub