Hub Python Library documentation
Kum Havuzları
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
< source >( 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)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).
Sadece kimliğini kullanarak, her yerden çalışan bir kum havuzuna yeniden bağlanın.
oluştur
< source >( 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/shiçeren herhangi bir Docker görüntüsü (Docker Hub veyahf.co/spaces/...). - flavor (
str, isteğe bağlı, varsayılan"cpu-basic") — Donanım türü, örn."cpu-basic","a10g-small".hf jobs hardwarekomutuna bakın. - idle_timeout (
intveyafloatveyastr, isteğe bağlı, varsayılan600) — 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çinNonegeç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 birrun()komutu, altındaki sandbox'ın kapatılmasına neden olabilir — uzun süreli tek komutlar için zaman aşımını artırın (veyaNonegeç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ılanFalse) — True ise, HF token'ınızHF_TOKENolarak 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ılan120.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).
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
< source >( port: int | strpath: str = '/'scheme: str = 'https://' ) → str
Parametreler
- port (
intveyastr) — İç 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>.sockadresinde bir unix soketi bağlayın (SBX_PROXY_DIRortam 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.)
çalıştır
< source >( 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 (
strveyaList[str]) — Bir kabuk komut dizgesi (/bin/sh -cile çalıştırılır) veya bir argv listesi (doğrudan çalıştırılır). - shell (
bool, isteğe bağlı) —cmdtüründen çıkarım yapmak yerine çalışma modunu zorlar.True,/bin/sh -cüzerinden çalıştırır vecmd'nin bir dize olmasını gerektirir;Falseisecmd'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ılanTrue) — True ise, sıfır olmayan çıkış durumundaSandboxCommandErrorfırlatılır. - capture_output (
bool, isteğe bağlı, varsayılanTrue) — True ise, stdout/stderr çıktısı döndürülen sonuca biriktirilir. Sadeceon_stdout/on_stderristiyorsanızFalsegeç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 durumdaresult.stdout/result.stderrboş olur. - background (
bool, isteğe bağlı, varsayılanFalse) — 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
< source >( 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)
hicreate() 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 oneHavuzu 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
< source >( 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
< source >( 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 (
intveyafloatveyastr, isteğe bağlı, varsayılan600) — 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çinNonegeçirin. - forward_hf_token (
bool, isteğe bağlı, varsayılanFalse) — True ise, HF token'ınızı sandbox'taHF_TOKENolarak enjekte eder (isteğe bağlı). Adanmış bir sandbox'ınsecretsdeğ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.
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
< source >( 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
< source >( 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.
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
< source >( 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
< source >( message: strstatus_code: int | None = None )
Sandbox işlemleri için temel istisna (bkz. huggingface_hub.Sandbox).
SandboxCommandError
sınıf huggingface_hub.errors.SandboxCommandError
< source >( cmdresult )
Bir komutun sandbox içinde sıfır olmayan bir kodla çıktığında oluşturulur.