Hub Python Library documentation

Kum Havuzları

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kum Havuzları

Sandbox API deneyseldir. API'si ve davranışı haber verilmeksizin değişebilir. Paylaşılan sandbox'lar aynı güven sınırındaki iş yükleri için tasarlanmıştır; birbirine güvenmeyen iş yükleri için ayrılmış sandbox'lar kullanın.

Nasıl kullanılacaklarını öğrenmek için Sandboxes kılavuzuna göz atın.

Sandbox

sınıf huggingface_hub.Sandbox

< >

( id: strserver: _SandboxServerlocal_id: str | Noneowns_sandbox: boolowns_server: boolsandbox_token: str | None = None )

Hugging Face Jobs üzerinde çalışan izole bir bulut makinesi.

Sandbox API deneyseldir. API'si ve davranışı haber verilmeksizin değişebilir.

Sandbox.create() ile özel bir tane oluşturun (her sandbox için bir iş) veya SandboxPool'dan birçok ucuz, paylaşımlı tane alın.

Her yerden çalışan bir sandbox'a Sandbox.connect() ile yeniden bağlanın. Çıkışta sonlandırmak için bir bağlam yöneticisi olarak kullanın:

>>> from huggingface_hub import Sandbox
>>> with Sandbox.create(image="python:3.12") as sbx:
...     print(sbx.run("python --version").stdout)

kapat

< >

( )

Sandbox'u sonlandırmadan yerel HTTP istemcisini serbest bırakın. İdempotenttir.

Pool kum havuzları için no-op (istemci, pool'un ana bilgisayarına aittir).

bağlan

< >

( sandbox_id: strnamespace: str | None = Nonetoken: str | None = None )

Sadece kimliğini kullanarak, her yerden çalışan bir kum havuzuna yeniden bağlanın.

oluştur

< >

( image: str = 'python:3.12'flavor: str = 'cpu-basic'idle_timeout: int | float | str | None = 600env: dict[str, typing.Any] | None = Nonesecrets: dict[str, typing.Any] | None = Nonevolumes: typing.Optional[typing.List[huggingface_hub._space_api.Volume]] = Nonenamespace: str | None = Noneforward_hf_token: bool = Falselabels: dict[str, str] | None = Nonestart_timeout: float = 120.0token: str | None = None )

Parametreler

  • image (str, isteğe bağlı, varsayılan "python --3.12"): /bin/sh içeren herhangi bir Docker görüntüsü (Docker Hub veya hf.co/spaces/...).
  • flavor (str, isteğe bağlı, varsayılan "cpu-basic") — Donanım türü, örn. "cpu-basic", "a10g-small". hf jobs hardware komutuna bakın.
  • idle_timeout (int veya float veya str, isteğe bağlı, varsayılan 600) — Bu kadar süre hareketsizlikten (API çağrısı yok, çalışan süreç yok) sonra otomatik olarak kapatılır. Varsayılan 10 dakikadır; devre dışı bırakmak için None geçirin. Dikkat edin, foreground komutu şu anda aktivite olarak sayılmamaktadır, bu nedenle başka API trafiği olmadan bu süreden uzun süren tek bir run() komutu, altındaki sandbox'ın kapatılmasına neden olabilir — uzun süreli tek komutlar için zaman aşımını artırın (veya None geçirin).
  • env (dict[str, Any], isteğe bağlı) — Sandbox içinde kullanılabilir ortam değişkenleri.
  • secrets (dict[str, Any], isteğe bağlı) — Gizli ortam değişkenleri (sunucu tarafında şifrelenir).
  • volumes (List[Volume], isteğe bağlı) — Bağlanacak HF depoları/bucket'ları, bkz. Volume.
  • namespace (str, isteğe bağlı) — Çalıştırılacak kullanıcı veya kuruluş ad alanı (varsayılan olarak mevcut kullanıcı).
  • forward_hf_token (bool, isteğe bağlı, varsayılan False) — True ise, HF token'ınız HF_TOKEN olarak enjekte edilir (opt-in).
  • labels (dict[str, str], isteğe bağlı) — Altta yatan HF Job'a eklenmesi gereken etiketler.
  • start_timeout (float, isteğe bağlı, varsayılan 120.0) — Kum havuzunun hazır hale gelmesi için beklenmesi gereken maksimum saniye.
  • token (str, isteğe bağlı) — HF token geçersiz kılma.

Özel bir kum havuzu (tek bir HF Job) oluşturun ve hazır olana kadar (~7s on cpu-basic) bekleyin.

Her sandbox, tam yalıtılmış bir sanal makinedir; bu nedenle GPU iş yükleri veya güvenilmeyen kod için doğru seçimdir. Bunun yerine birçok ucuz CPU sandbox dağıtmak için SandboxPool kullanın.

İş, sabit 24 saatlik maksimum bir ömürle çalışır; idle_timeout asıl bekçidir — boşta kalan bir kum havuzu, o süreden çok önce kendini kapatır.

Görsel yalnızca /bin/sh gerektirir. Sandbox sunucusu, kullanılabilirse başlangıçta wget/curl ile indirilir, aksi halde her zaman bağlı olan bir sunucu kovasından okunur (bu, soğuk başlatmaya ~2-3 sn ekler, bu nedenle wget/curl dağıtılması hızı korur).

süreçler

< >

( )

Bu kum havuzunun arka plan süreçlerini listeleyin.

Sandbox.run()(..., background=True) ile başlatılan süreçleri döndürür; birini SandboxProcess.kill() ile durdurabilirsiniz. Yakın zamanda tamamlanan süreçler listede kalır (running=False ve exit_code değerleriyle); sunucu bunların sınırlı bir sayısını tutar, bu yüzden binlerce kısa komut çalıştırmış bir sandbox bunların hepsini listelemez.

proxy_url_for

< >

( port: int | strpath: str = '/'scheme: str = 'https://' ) → str

Parametreler

  • port (int veya str) — İç sunucunun dinlediği port (havuz: unix soketinin <port> değeri).
  • path (str, isteğe bağlı, varsayılan "/") — İç sunucuda işaret edilecek yol, örn. "/ws".
  • scheme (str, isteğe bağlı, varsayılan "https --//"): Bağlantıyı oluşturmak için kullanılacak URL şeması. Varsayılan olarak "https://" değerini alır; bir WebSocket istemcisi için "wss://" değerini iletin (proxy protokol bağımsızdır, bu nedenle yalnızca istemci tarafındaki şema değişir).

Dönüş değeri

str

https://<job_id>--49983.hf.jobs/v1/.../proxy/8000/ws gibi bir URL (veya scheme="wss://" ile wss://...).

Bu kum havuzu içinde çalışan bir sunucuya yönlendiren herkese açık URL.

Dönen URL'ye yapılan istekler, iş içi kum havuzu sunucusu tarafından, kum havuzunda başlattığınız port üzerindeki sunucuya yönlendirilir; bu yönlendirme WebSocket (ws(s)://) yükseltmelerini ve akışlı yanıtları da içerir. Kimlik doğrulama için proxy_headers ile birlikte kullanın.

Sandbox'ın port üzerinde dinlemesi gerektiği:

  • Pool / paylaşılan sandbox: bir TCP portuna bağlanamaz (Landlock), bu nedenle $SBX_PROXY_DIR/<port>.sock adresinde bir unix soketi bağlayın (SBX_PROXY_DIR ortam değişkeni her sandbox'ta ayarlanır). Örn. uvicorn app:app --uds $SBX_PROXY_DIR/8000.sock.
  • Özel kum havuzu: 127.0.0.1:<port> üzerinde normal bir TCP portu bağlayın. (Portu buradan geçmeden doğrudan iş vekili (job proxy) üzerinden de açabilirsiniz.)

Örnek:

>>> url = sandbox.proxy_url_for(8000, "/ws", scheme="wss://")
>>> import websockets
>>> async with websockets.connect(url, additional_headers=sandbox.proxy_headers) as ws:
...     await ws.send("hello")

çalıştır

< >

( cmd: typing.Union[str, typing.List[str]]shell: bool | None = Noneenv: dict[str, typing.Any] | None = Nonecwd: str | None = Nonetimeout: float | None = Nonestdin: str | None = Noneon_stdout: typing.Optional[typing.Callable[[str], NoneType]] = Noneon_stderr: typing.Optional[typing.Callable[[str], NoneType]] = Nonecheck: bool = Truecapture_output: bool = Truebackground: bool = False )

Parametreler

  • cmd (str veya List[str]) — Bir kabuk komut dizgesi (/bin/sh -c ile çalıştırılır) veya bir argv listesi (doğrudan çalıştırılır).
  • shell (bool, isteğe bağlı) — cmd türünden çıkarım yapmak yerine çalışma modunu zorlar. True, /bin/sh -c üzerinden çalıştırır ve cmd'nin bir dize olmasını gerektirir; False ise cmd'yi doğrudan exec eder ve bunun bir argv listesi olmasını gerektirir. None (varsayılan) türden çıkarım yapar. Tür kaynaklı tuzaklardan kaçınmak için bunu açıkça ayarlayın (ör. ["echo hi"]'nin "echo hi" adlı tek bir program olarak exec edilmesi).
  • env (dict[str, Any], isteğe bağlı) — Bu komut için ek ortam değişkenleri.
  • cwd (str, isteğe bağlı) — Çalışma dizini.
  • timeout (float, isteğe bağlı) — Komutu (tüm süreç grubunu) bu kadar saniye sonra sonlandırır.
  • stdin (str, isteğe bağlı) — Komutun stdin'ine yazılacak veri.
  • on_stdout (Callable[[str], None], isteğe bağlı) — stdout parçaları geldikçe çağrılan geri bildirim.
  • on_stderr (Callable[[str], None], isteğe bağlı) — stderr parçaları geldikçe çağrılan geri bildirim.
  • check (bool, isteğe bağlı, varsayılan True) — True ise, sıfır olmayan çıkış durumunda SandboxCommandError fırlatılır.
  • capture_output (bool, isteğe bağlı, varsayılan True) — True ise, stdout/stderr çıktısı döndürülen sonuca biriktirilir. Sadece on_stdout/on_stderr istiyorsanız False geçirin: bu durumda çıktı geri çağrılara (callback) iletilir ve atılır, böylece gigabaytlarca çıktı üreten bir komutun bellekte sığması gerekmez. Bu durumda result.stdout/result.stderr boş olur.
  • background (bool, isteğe bağlı, varsayılan False) — True ise, komutu ayrı olarak başlatır ve beklemek yerine hemen bir SandboxProcess döndürür, bir SandboxCommandResult döndürmez.

Sandbox'ta bir komut çalıştırın ve bekleyin, çıktıyı canlı olarak akışa alın.

background=True ile komut ayrılmış olarak başlatılır ve run, sürecin bitmesini beklemeden hemen bir SandboxProcess döndürür — bu, sunucular ve diğer uzun süreli süreçler için kullanışlıdır. Bunları daha sonra Sandbox.processes() ile listeleyebilir ve SandboxProcess.kill() ile birini durdurabilirsiniz. Akış/yalnızca bekleme seçenekleri (timeout, stdin, on_stdout, on_stderr, check) bu modda geçerli değildir.

Dönüş: background=True olduğunda bir SandboxProcess, aksi halde exit_code, stdout, stderr, duration_ms içeren bir SandboxCommandResult.

SandboxPool

sınıf huggingface_hub.SandboxPool

< >

( image: str = 'python:3.12'flavor: str = 'cpu-basic'sandboxes_per_host: int = 50warm_up: int = 1max_hosts: int | None = Nonename: str | None = Noneidle_timeout: int | float | str | None = 600namespace: str | None = Nonestart_timeout: float = 120.0adopt_hosts: str = 'own'token: str | None = None_connect_mode: bool = False )

Paylaşılan “host” işlerinden oluşan bir filo, her biri birçok landlock yalıtımlı kum havuzunu barındırıyor.

Sandbox API deneyseldir. API'si ve davranışı haber verilmeksizin değişebilir.

Toplu kum havuzları, tek bir güven sınırının içindeki iş yükleri içindir. Toplu bir kum havuzu, paylaşılan bir sanal makinenin içindeki bir uid ve bir Landlock kural setidir — kendi sanal makinesi değildir — ve bir konak üzerindeki tüm kum havuzları, o konağın kimlik doğrulama jetonunu ve ayrıcalıklı kontrol düzlemini paylaşır. Bir havuz kullanarak kendi kodunuzu düşük maliyetle dağıtın. Mütekabiliyetle güvensiz iş yükleri için, her birine kendi sanal makinesini veren Sandbox.create() kullanın. Belirli eksiklikler, kum havuzu kavramsal kılavuzundaki “Bilinen kısıtlamalar” başlığı altında listelenmiştir.

Bir host, faturalandırılan tek bir HF Job'dur (bir VM); sandbox sunucusunu çalıştırır ve uid + Landlock LSM ile birbirinden izole edilmiş, en fazla sandboxes_per_host hafif sandbox'u çoklayıcı (multiplex) olarak yönetir. Bu, büyük yelpazeli dağıtımları (fan-out) ucuz (VM maliyeti tüm sandbox'lar arasında paylaşılır) ve hızlı (host ısındıktan sonra bir sandbox oluşturmak ~bir proxy gidiş-dönüşü sürer) hale getirir. RL rollouts gibi birçok paralel CPU sandbox'u için en iyisidir; GPU veya birbirine güvenmeyen iş yükleri arasında güçlü VM düzeyinde izolasyon gerekiyorsa bunun yerine Sandbox.create() kullanın.

Oluşturucu, warm_up ana bilgisayarını (varsayılan 1) önceden tahsis eder ve bunlar hazır olana kadar bekler; ardından ana bilgisayarlar, sandbox'lar istendiğinde talep üzerine tahsis edilir ve tüm

close() (veya boşta kalındığında, idle_timeout üzerinden) ile kaldırılır. Kullanıcı asla işleri yönetmez:

>>> from huggingface_hub import SandboxPool
>>> with SandboxPool(image="python:3.12", flavor="cpu-basic", warm_up=2) as pool:
...     boxes = [pool.create() for _ in range(100)]   # packed across the warm hosts
...     print(boxes[0].run("echo hi").stdout)
hi

create() her seferinde tek bir sandbox oluşturur: yeni bir host başlatmadan önce hâlâ boş kapasitesi olan bir hostu yeniden kullanır, böylece işler geldikçe talep üzerine büyür. İlk birkaç çağrıda soğuk başlatmayı önlemek için hostları warm_up (veya warm) ile önceden sağlayın. Sıcak hostlar iş etiketleri üzerinden keşfedildiğinden, yeniden kullanım süreçler arası da çalışır (aynı image/flavor/name değerlerine sahip yeni bir havuz,

daha önceki bir çalıştırmanın geride bıraktığı):

>>> pool = SandboxPool(image="python:3.12")
>>> sbx = pool.create()    # finds a warm host (here or in another process), else boots one

kapat

< >

( )

Havuzu serbest bırakın. İdempotent.

Oluşturduğumuz bir havuz için bu, tüm ana bilgisayar işlerini (ve dolayısıyla tüm kum havuzlarını) sonlandırır. connect() ile bağlanmış bir tutamaç için yalnızca yerel HTTP istemcileri serbest bırakılır: paylaşılan ana bilgisayarlar diğer istemcilere hizmet verebilir, bu nedenle — Sandbox.connect() gibi — with bloğundan çıkarken onları kapatmamalıdır. Bağlı bir havuzun ana bilgisayarlarını hf sandbox pool delete <id> ile açıkça sonlandırın.

Yalnızca bu tarafından başlatılan hostlar iptal edilir. Etiketler aracılığıyla keşfedilen bir host, başka bir sürecin kum havuzlarını sunabilir; bu nedenle sonlandırılmak yerine serbest bırakılır.

Bir host işi iptal edilemediğinde SandboxError yükseltilir ve hâlâ çalışan işler adlandırılır — bunlar faturalandırmaya devam eder ve keşfedilebilir kalmaları için önbellek girdileri korunur. close(), __exit__ üzerinden zaten uçuşta olan bir istisna ile ulaşıldığında, hata yerine kayıt altına alınır, böylece orijinal hatayı gizleyemez.

bağlan

< >

( pool_id: strnamespace: str | None = Noneadopt_hosts: str = 'own'token: str | None = None )

Parametreler

  • pool_id (str) — Havuz ilk oluşturulduğunda döndürülen kimlik.
  • namespace (str, isteğe bağlı) — Havuzun ana bilgisayarlarının aranacağı ad alanı (varsayılan olarak sizinkidir).
  • adopt_hosts (str, isteğe bağlı, varsayılan "own") — Bağlanabilecek konaklar. SandboxPool bölümüne bakın. Ad alanının başka bir üyesinin başlattığı konaklara sahip bir havuza yeniden bağlanmak için "namespace" gerekir.
  • token (str, isteğe bağlı) — HF token geçersiz kılma.

Herhangi bir makineden, yerel durum gerektirmeden, kimlik numarası üzerinden çalışan bir havuza yeniden bağlanın.

pool_id etiketli çalışan bir host bulur ve havuzun yapılandırmasını (image/flavor/density/host-idle) o host işinin spec ve env değişkenlerinden yeniden oluşturur; ardından daha fazla sandbox create() etmeye hazır bir SandboxPool döndürür — çalışan hostlara paketler veya hostlar doluysa bir kopya (aynı yapılandırma) başlatır.

Çalışan bir host bulunamazsa SandboxError fırlatılır (bir havuz, tüm hostları gittiğinde — boşta zaman aşımına uğradığında veya öldürüldüğünde — var olmaktan çıkar).

oluştur

< >

( env: dict[str, typing.Any] | None = Noneidle_timeout: int | float | str | None = 600forward_hf_token: bool = False )

Parametreler

  • env (dict[str, Any], isteğe bağlı) — Bu kum havuzu için ortam değişkenleri (her kum havuzu kendi değişkenlerine sahip olur).
  • idle_timeout (int veya float veya str, isteğe bağlı, varsayılan 600) — Sandbox başına boşta kalma zaman aşımı — bir sandbox, bu kadar süre hareketsiz kaldıktan sonra (API çağrısı yok, çalışan süreç yok) konak makinesinden atılır. Konak makinesi boşta kalma zaman aşımından farklıdır. Devre dışı bırakmak için None geçirin.
  • forward_hf_token (bool, isteğe bağlı, varsayılan False) — True ise, HF token'ınızı sandbox'ta HF_TOKEN olarak enjekte eder (isteğe bağlı). Adanmış bir sandbox'ın secrets değerlerinden farklı olarak, havuzlanmış bir sandbox'ın env değerleri, oluşturulma sırasında ana sunucuya iletilir (ana işte asla saklanmaz), bu nedenle hiçbir işin metadata'sında görünmez.

Gerekirse bir ana bilgisayar tahsis ederek tek bir kum havuzu oluşturun.

Boş kapasiteye sahip bir ana makineyi (bu havuzunkini veya iş etiketleri / yerel önbellek yoluyla bulunan sıcak bir ana makineyi) yeniden kullanır, böylece yeni bir ana makine başlatmadan önce create() çağrısı sıcak bir ana makine üzerinde ~bir gidiş-dönüş maliyetiyle gerçekleşir. Dağıtım yapmak için bunu tekrar tekrar çağırın; ilk çağrılarda soğuk başlatmayı önlemek ve ana makineleri önceden sağlamak için warm_up (veya warm) kullanın. Bir ana makine altında dolarsa (başka bir süreç onu doldurduysa) veya önbellekteki bir ana makine yoksa, sandbox başka bir ana makineye (veya yenisine) yeniden yerleştirilir.

warm

< >

( num_hosts: int = 1 )

num_hosts boş hostun çalıştığından emin olun ve çalışmaya devam etmelerini sağlayın. Havuzun host iş kimliklerini döndürür.

Bir havuzu önceden “oluşturmak” için kullanılır: konaklar havuz etiketini ve yapılandırmasını (ortam değişkenlerinde) taşır, böylece sonraki bir SandboxPool.connect(pool_id) çağrısı (hatta başka bir makineden bile) onları bulur ve soğuk başlatma olmadan kum havuzları oluşturur. Konaklar, öldürülene veya boşta kalana kadar faturalandırmaya devam eder.

Bu havuz için zaten çalışan hostları (iş etiketleri üzerinden bulunan) başlatmadan önce benimser, böylece connect() sonrası bir warm() — veya tekrarlanan bir warm() — canlı hostları çoğaltıp max_hosts sınırını aşmak yerine num_hosts değerine tamamlama yapar.

Veri yapıları

SandboxCommandResult

sınıf huggingface_hub.SandboxCommandResult

< >

( exit_code: int | Nonestdout: strstderr: strsignal: int | None = Nonetimed_out: bool = Falseduration_ms: int = 0 )

Sandbox.run() ile bir kum havuzunda (sandbox) yürütülen bir komutun sonucu.

SandboxProcess

sınıf huggingface_hub.SandboxProcess

< >

( id: str | Nonepid: intcmd: typing.Union[str, typing.List[str]]_sandbox: Sandboxtag: str | None = Nonestarted_at_ms: int | None = Nonerunning: bool = Trueexit_code: int | None = None )

Sandbox içinde Sandbox.run()(..., background=True) ile başlatılan bir arka plan süreci.

Bir sandbox’ın süreçlerini Sandbox.processes() ile listeleyin ve birini SandboxProcess.kill() ile durdurun. Yakın zamanda tamamlanan süreçler listede kalır (sunucu bunlardan sınırlı sayıda tutar), bu nedenle running ve exit_code, bir sürecin hâlâ aktif mi yoksa zaten sonlanmış mı olduğunu (listelendiği anda) belirtir.

kill

< >

( )

Arka plan sürecini sonlandırın. İdempotenttir.

Bu çağrının durdurma nedenini döndürür: False, zaten çıkış yapıldığı veya sonlandırıldığı anlamına gelir ve bu bir hata değildir.

setsid() ile ayrışan bir torun, sinyal gönderilen süreç grubundan ayrılır ve bu çağrının ötesinde yaşamaya devam eder. Başlattığı her şeyin ortadan kalktığından emin olmak için kum havuzunu silin.

FileEntry

sınıf huggingface_hub._sandbox.FileEntry

< >

( name: strpath: strtype: typing.Literal['file', 'dir', 'symlink']size: intmtime_ms: int | None = Nonemode: str = '' )

Bir sandbox içindeki dosya veya dizin.

Hatalar

SandboxError

sınıf huggingface_hub.errors.SandboxError

< >

( message: strstatus_code: int | None = None )

Parametreler

  • status_code — Hata bir API yanıtından kaynaklanıyorsa (ör. eksik bir dosya için 404), kum içindeki sunucu tarafından döndürülen HTTP durumu. Aksi halde None.

Sandbox işlemleri için temel istisna (bkz. huggingface_hub.Sandbox).

SandboxCommandError

sınıf huggingface_hub.errors.SandboxCommandError

< >

( cmdresult )

Parametreler

  • cmd — Başarısız olan komut.
  • result — Tam SandboxCommandResult (exit_code, stdout, stderr, …).

Bir komutun sandbox içinde sıfır olmayan bir kodla çıktığında oluşturulur.

Update on GitHub