Hub documentation

Güvenilir Yayıncılar

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Güvenilir Yayıncılar

Bir HF_TOKEN gizli anahtarı saklamadan CI'den Hub'a gönderin.

CI işiniz, kimliğini Hugging Face'e CI sağlayıcınızdan alınan kısa ömürlü bir OpenID Connect (OIDC) jetonu ile kanıtlar ve karşılığında kısa ömürlü bir Hugging Face jetonu alır. Gizli olarak saklanması veya döndürülmesi gereken bir HF jetonu yoktur.

Kişisel Erişim BelirteciGüvenilir Yayıncı
Ömürİptal edilene kadar1 saat
DepolamaCI gizli bilgisiDepolanacak bir şey yok
DöndürmeKılavuzOtomatik, her çalıştırmada
Sızdırılırsaİptal edene kadar geçerliEn fazla ~1 saat ve tek bir depoya sınırlı

Trusted Publishers, PyPI'nin Trusted Publishers ve npm'in Trusted Publishing kavramlarıyla aynı fikirdir.

Hızlı örnek: GitHub Actions'tan bir model yayımlama

HF Hub üzerinde acme/awesome-model modelini yönetiyorsunuz ve harici bir acme/awesome-model-training deposunda (GitHub, GitLab veya herhangi bir OIDC uyumlu sağlayıcıda) CI ile yeni checkpoint’leri itmek istiyorsunuz — HF_TOKEN gizli anahtarı olmadan.

1. Hub'da güvenilir yayıncıyı yapılandırın

https://huggingface.co/acme/awesome-model/settings adresinde Güvenilir Yayıncılar bölümünü açın ve şunu ekleyin:

  • Sağlayıcı: GitHub Actions
  • Claims (tümünün değişimin başarılı olması için eşleşmesi gerekir:
    • repository = acme/awesome-model-training
    • branch = main
    • workflow = publish.yml

repository tek başına yayıncıyı bir GitHub deposuna daraltır. Onu bir dal veya iş akışı dosyasına da sabitlemek için branch ve/veya workflow ekleyin — önerilir.

2. İş akışını GitHub deponuza ekleyin

.github/workflows/publish.yml:

name: Publish to Hugging Face

on:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  publish:
    runs-on: ubuntu-latest

    permissions:
      id-token: write  # required so the job can request an OIDC token
      contents: read

    steps:
      - uses: actions/checkout@v4

      - name: Install the hf CLI
        run: |
          curl -LsSf https://hf.co/cli/install.sh | bash
          echo "$HOME/.local/bin" >> "$GITHUB_PATH"

      - name: Upload checkpoint
        env:
          # The HF repo to publish to. For non-model repos, prefix accordingly:
          #   datasets/acme/awesome-dataset, spaces/acme/awesome-space, kernels/acme/awesome-kernel
          HF_OIDC_RESOURCE: acme/awesome-model
        run: hf upload acme/awesome-model ./checkpoint . --commit-message "Publish from ${GITHUB_SHA::7}"

Bu kadar. GitHub Actions üzerinde hf CLI (huggingface_hub>=1.19.0) sağlayıcıyı algılar, değişimi gerçekleştirir ve oluşan token’ı otomatik olarak kullanır. Sadece HF_OIDC_RESOURCE değerini ayarlarsınız.

Tek bir çalıştırmada birden fazla repoya yayınlama (ör. bir model ve bir veri seti)? Her adımın gönderdiği repoya göre token'ın kapsamını belirlemek için HF_OIDC_RESOURCE değerini adım başına ayarlayın.

Diğer CI sağlayıcıları

hf CLI şu an için ID token'ı yalnızca GitHub Actions üzerinde yerel olarak oluşturur. GitLab, CircleCI, Bitbucket veya başka bir sağlayıcıda ID token'ı kendiniz oluşturun (Desteklenen CI sağlayıcıları bkz.) ve HF_OIDC_ID_TOKEN üzerinden iletin — CLI bunu doğrudan takas eder:

# GitLab CI (.gitlab-ci.yml)
publish:
  id_tokens:
    HF_ID_TOKEN:
      aud: https://huggingface.co
  script:
    - curl -LsSf https://hf.co/cli/install.sh | bash
    - export PATH="$HOME/.local/bin:$PATH"
    - HF_OIDC_ID_TOKEN="$HF_ID_TOKEN" HF_OIDC_RESOURCE="acme/awesome-model" hf upload acme/awesome-model ./checkpoint .

Çalışan tam örnekler:

İki tür: depo yayıncıları ve CI/CD kimlikleri

LezzetŞurada yapılandırıldıNe elde edersinizBunu şunlar için kullanın…
Depo güvenilir yayıncısıBir repozituarın Ayarlar → Güvenilir YayıncılarO tek repoya yazma erişimi (veya sadece okuma erişimi) olan bir jetonCI'den bir model, veri seti, Space, kernel veya bucket yayınlayın ya da özel birini çekin
Hesap CI/CD kimliğiHesabınızın Kimlik doğrulama ayarları → CI/CD Erişimigated-repos kapsamına sahip salt okunur bir jeton, ayrıca katılırsanız inference-apiErişiminiz olan gated depoları okuyun, hız limitlerinizi kullanın ve isteğe bağlı olarak CI'dan Inference Providers'ı çağırın

Her iki jeton da 60 dakika sonra sona erer. Bir Hub deposunun güvenilir yayıncılarını yönetmek için Write rolüne sahip olmanız gerekir.

CI'den gated depolara erişim

Eğer yalnızca gated depoları okumanız gerekiyorsa (ör. bir işten model indirmek), belirli bir depo yerine hesabınızda Authentication settings → CI/CD Access altında bir CI/CD kimliği ekleyin ve kaynağınız olarak kullanıcı adınızı kullanın.

GitHub Actions üzerinde hf CLI bu değişimi sizin için yapar, yalnızca HF_OIDC_RESOURCE değerini ayarlayın:

      - name: Download a gated model
        env:
          HF_OIDC_RESOURCE: your-hf-username
        run: hf download acme/gated-model

diğer sağlayıcılarda, kimlik belirtecini kendiniz oluşturun (Diğer CI sağlayıcıları bölümüne bakın) ve HF_OIDC_ID_TOKEN üzerinden iletin:

# $ID_TOKEN is the OIDC token your provider minted (e.g. $HF_ID_TOKEN on GitLab)
HF_OIDC_ID_TOKEN="$ID_TOKEN" HF_OIDC_RESOURCE="your-hf-username" hf download acme/gated-model

Oluşturulan jeton, erişiminiz olan gated depoları okuyabilir ve hesabınızın hız sınırlarını kullanır. Hiçbir şey yazamaz ve özel depolarınızı okuyamaz. CI'dan özel bir depo çekmek için bunun yerine sadece okunur depo yayıncısı kullanın.

Kendisi token'a mı ihtiyacınız var (curl, git clone veya HF_TOKEN okuyan bir araç için)? hf auth token değişimi gerçekleştirir ve kısa ömürlü token'ı stdout'a basar:

      - name: Get a short-lived HF token
        env:
          HF_OIDC_RESOURCE: your-hf-username  # or a repo, e.g. acme/awesome-model
        run: echo "HF_TOKEN=$(hf auth token)" >> "$GITHUB_ENV"

Bu, hem CI/CD kimlikleri hem de depo yayıncıları ile çalışır — jeton, HF_OIDC_RESOURCE'in işaret ettiği kaynağa göre kapsamlandırılır.

Salt okunur depo yayıncıları

Varsayılan olarak, bir depo güvenilir yayıncısı, depoya itme (push) yapabilecek jetonlar basar. Bir iş yükü yalnızca bir depoyu çekmek (pull) gerekiyorsa (örneğin, bir CI işinden veya kendi OIDC jetonlarını veren harici bir platformdan özel bir model veya veri seti indirmek için), yayıncıyı eklerken Sadece okunur seçeneğini işaretleyin. Değiştirilen jetonlar bu durumda depodaki içeriği okuyabilir ancak yazamaz ve listede girişin yanında Sadece okunur rozeti görünür. Bu, modeller, veri setleri, Spaces, çekirdekler ve varlık kovaları (buckets) için geçerlidir.

Değiş tokuşun kendisi değişmemiştir. HF_OIDC_RESOURCE'u (veya resource'i) depoya yönlendirin.

    permissions:
      id-token: write  # required so the job can request an OIDC token

    steps:
      - name: Download a private model
        env:
          HF_OIDC_RESOURCE: acme/private-model
        run: hf download acme/private-model

Diğer yayıncı ayarları gibi, izin oluşturulma anında sabitlenir. Değiştirmek için yayıncıyı silip yeniden ekleyin.

CI'den Inference Providers'ı Çağırma

CI/CD kimliğinden gelen jetonlar varsayılan olarak salt okunurdur. Bunların Inference Providers çağrılarını da yapmasına izin vermek için, kimliği eklerken Inference Providers çağrılarını etkinleştir seçeneğini işaretleyin — bu durumda değiştirilen jetonlar, gated-repos ek olarak inference-api kapsamını taşır ve listede girişin yanında Inference rozeti görünür.

Çalıştırma kullanımı, istekleri kendiniz yapmış gibi hesabınıza faturalandırılır — bu nedenle etkinleştirmeden önce iddiaları sıkıca sabitleyin (repository ve branch ve/veya workflow).

      - name: Run inference from CI
        env:
          HF_OIDC_RESOURCE: your-hf-username
        run: |
          export HF_TOKEN="$(hf auth token)"
          python inference_script.py

Repo yayıncıları uygun değildir — jetonları repo kapsamındadır ve Inference Providers'ı çağıramazlar. Bu yetenek oluşturulma anında sabitlenir; değiştirmek için kimliği silip yeniden ekleyin.

Desteklenen CI sağlayıcıları

Ayarlar arayüzü, aşağıdaki sağlayıcılar için hazır ayarlarla birlikte gelir, ancak herhangi bir OIDC uyumlu sağlayıcı çalışır (AWS, GCP, Buildkite, kendi IdP'niz, …).

SağlayıcıÇıkarıcıKimlik belirteç ID'sini nasıl alacağınız
GitHub Actionshttps://token.actions.githubusercontent.compermissions: id-token: write olarak ayarlayın, ardından audience=https://huggingface.co ile metadata uç noktasını çağırın. Belgeler.
GitLab CIhttps://gitlab.com (veya kendi barındırdığınız URL)İş üzerinde id_tokens: { HF_ID_TOKEN: { aud: https://huggingface.co } } bildirin; $HF_ID_TOKEN değerini okuyun. Belgeler.
CircleCIhttps://oidc.circleci.com/org/<org-uuid>$CIRCLE_OIDC_TOKEN_V2 kullanın (v2, proje ayarlarında izleyiciyi ayarlamanıza olanak tanır). Belgeler.
Bitbucket Pipelineshttps://api.bitbucket.org/2.0/workspaces/<workspace>/pipelines-config/identity/oidcAdımda oidc: true değerini ayarlayın; $BITBUCKET_STEP_OIDC_TOKEN değerini okuyun. Belgeler.

ID token'ına sahip olduğunuzda, değişim çağrısı tüm sağlayıcılar arasında aynıdır — yalnızca Hub tarafında yapılandırdığınız claims farklıdır.

Nasıl çalışır

  1. CI sağlayıcınız, işi (hangi depo, hangi dal, hangi iş akışı, …) tanımlayan kısa ömürlü bir OIDC ID token oluşturur.
  2. İş akışınız, o jetonu resource (erişmek istediği depo veya kullanıcı adı) ile birlikte https://huggingface.co/oauth/token adresine POST olarak gönderir.
  3. Hub, belirtecin imzasını ve iddialarını, o kaynak için yapılandırdığınız yayıncılarla karşılaştırır ve bir Hugging Face belirteci döndürür.
┌──────────┐  1. mint ID token   ┌──────────┐  2. exchange   ┌────────────┐
│ CI job   │ ─────────────────▶  │ CI OIDC  │ ──────────────▶│ huggingface│
│          │                     │ issuer   │                │  /oauth/   │
│          │ ◀──────────────────────────────────────────────│  token     │
└──────────┘        3. short-lived HF token (valid 1 h)      └────────────┘

API referansı

Endpoint, request, and response

Uç nokta: POST https://huggingface.co/oauth/token, Content-Type: application/json ile.

İstemci kimlik doğrulaması gerekmez — OIDC kimlik belirteci isteği doğrular. Değişim RFC 8693 — OAuth 2.0 Token Exchange standardına uygun olarak gerçekleşir.

İstek gövdesi:

AlanZorunluDeğer
grant_typeeveturn:ietf:params:oauth:grant-type:token-exchange
subject_token_typeeveturn:ietf:params:oauth:token-type:id_token
subject_tokenevetCI sağlayıcınızdan gelen ham OIDC kimlik belirteci (JWT). aud iddiası mutlaka https://huggingface.co olmalıdır.
resourceevetBir Hub deposu (namespace/name, datasets/namespace/name, spaces/namespace/name, kernels/namespace/name, buckets/namespace/name) veya kullanıcı kapsamlı bir jeton için bir Hub kullanıcı_adı (eğik çizgi yok).

Başarılı yanıt:

{
  "access_token":      "hf_jwt_…",   // "hf_oauth_…" for user resources
  "token_type":        "bearer",
  "expires_in":        3600,
  "issued_token_type": "urn:ietf:params:oauth:token-type:access_token"
}

Hatalar — OAuth tarzı bir gövdeyle 400 Bad Request:

errorNeden
invalid_requestEksik/yanlış biçimli parametre veya hatalı resource biçimi.
invalid_grantDepo veya kullanıcı bulunamadı; bu yayıncıyla eşleşen bir yayıncı yok; yapılandırılan iddialar eşleşmiyor; imza veya kitle kontrolü başarısız oldu; hesap kilitlendi.

hf CLI değişimi gerçekleştirdiğinde, bir hata error kodunu ve bir (Request ID: …) ile birlikte gösterir. Bir sorun bildirdiğinizde, değişimi günlüklerimizde izleyebilmemiz için o Request ID'yi dahil edin.

Güvenlik modeli

  • Tokenler kısa ömürlüdür. Değişim anından itibaren 60 dakika — saat, iş akışının başladığında değil, uç noktayı çağırdığınızda başlar. Yenileme tokenı yoktur; uzun süren işler yeniden değişim yapmalıdır.
  • Depo jetonları depo kapsamındadır. acme/awesome-model için bir jeton, acme/anything-else üzerinde işlem yapamaz. Push işlemleri, kaynak sağlayıcıya ve konuya atıfta bulunan sentetik bir [OIDC] sistem kullanıcısına atfedilir. Salt okunur bir yayıncıdan gelen jetonlar yalnızca o depoyu okuyabilir.
  • Kullanıcı jetonları salt okunurdur. Varsayılan olarak gated-repos kapsamı — yazma, özel depolar veya hesap yönetimi yoktur. İsteğe bağlı inference-api kapsamı Inference Providers çağrılarını ekler (hesabınıza faturalandırılır), ancak yine de yazma veya özel depo erişimi yoktur.
  • Bildirimler tam eşleşmeyle veya bir sağlayıcı ön ayarının gerektirdiği durumlarda önek eşleşmesiyle karşılaştırılır (GitHub'ın workflow_ref'i). Düzenli ifade kullanılmaz.
  • Denetim kayıtları. Bir yayıncının eklenmesi veya kaldırılması kaydedilir ve başarılı işlemler son kullanım zamanını günceller.

Bkz.

Update on GitHub