Hub Python Library documentation
Sandbox
Sandbox
API Sandbox bersifat eksperimental. API dan perilakunya dapat berubah tanpa pemberitahuan. Sandbox bersama ditujukan untuk beban kerja dalam batas kepercayaan yang sama; gunakan sandbox khusus untuk beban kerja yang tidak saling percaya.
Lihat panduan Sandboxes untuk mempelajari cara menggunakannya.
Sandbox
kelas huggingface_hub.Sandbox
< source >( id: strserver: _SandboxServerlocal_id: str | Noneowns_sandbox: boolowns_server: boolsandbox_token: str | None = None )
Mesin cloud terisolasi yang berjalan di Hugging Face Jobs.
API Sandbox bersifat eksperimental. API dan perilakunya dapat berubah tanpa pemberitahuan.
Buat satu yang khusus dengan Sandbox.create() (satu job per sandbox), atau dapatkan banyak yang murah dan bersama dari SandboxPool.
Lampirkan kembali ke sandbox yang sedang berjalan dari mana saja dengan Sandbox.connect(). Gunakan sebagai context manager untuk mengakhiri saat keluar:
>>> from huggingface_hub import Sandbox
>>> with Sandbox.create(image="python:3.12") as sbx:
... print(sbx.run("python --version").stdout)Lepaskan klien HTTP lokal tanpa mengakhiri sandbox. Idempoten.
Tidak ada efek untuk sandbox pool (klien milik host pool).
Lampirkan kembali ke sandbox yang sedang berjalan dari mana saja, hanya menggunakan id-nya.
create
< 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 )
Parameter
- image (
str, opsional, default"python --3.12"): Semua image Docker dengan/bin/sh(Docker Hub atauhf.co/spaces/...). - flavor (
str, opsional, default"cpu-basic") — Flavor perangkat keras, misalnya"cpu-basic","a10g-small". Lihathf jobs hardware. - idle_timeout (
intataufloatataustr, opsional, defaultnya600) — Matikan otomatis setelah periode tidak aktif selama ini (tidak ada panggilan API, tidak ada proses yang berjalan). Defaultnya 10 menit; berikanNoneuntuk menonaktifkan. Perhatikan bahwa perintah foreground saat ini tidak dihitung sebagai aktivitas, sehingga saturun()yang memakan waktu lebih lama dari ini tanpa lalu lintas API lain dapat menyebabkan sandbox-nya dimatikan — tingkatkan timeout (atau berikanNone) untuk perintah tunggal yang panjang. - env (
dict[str, Any], opsional) — Variabel lingkungan yang tersedia di dalam sandbox. - secrets (
dict[str, Any], opsional) — Variabel lingkungan rahasia (dienkripsi di sisi server). - volumes (
List[Volume], opsional) — repo/bucket HF untuk di-mount, lihat Volume. - namespace (
str, opsional) — Namespace pengguna atau organisasi untuk dijalankan (defaultnya adalah pengguna saat ini). - forward_hf_token (
bool, opsional, defaultFalse) — Jika True, token HF Anda disuntikkan sebagaiHF_TOKEN(opt-in). - labels (
dict[str, str], opsional) — Label yang akan dilampirkan ke HF Job yang mendasarinya. - start_timeout (
float, opsional, defaultnya120.0) — Detik maksimum untuk menunggu hingga sandbox siap. - token (
str, opsional) — Override token HF.
Buat sandbox khusus (satu HF Job) dan blokir hingga siap (~7 detik di cpu-basic).
Setiap sandbox adalah VM terisolasi penuh, sehingga ini adalah pilihan yang tepat untuk workload GPU atau kode yang tidak tepercaya. Untuk mendistribusikan banyak sandbox CPU yang murah, gunakan SandboxPool sebagai gantinya.
Job berjalan dengan masa hidup maksimum tetap 24 jam; idle_timeout adalah penjaga yang sebenarnya — sandbox yang idle akan mematikan dirinya sendiri jauh sebelum batas waktu tersebut.
Gambar hanya membutuhkan /bin/sh. Server sandbox diunduh saat startup dengan wget/curl jika tersedia, jika tidak, dibaca dari bucket server yang selalu dimount (yang
menambahkan ~2-3 detik ke cold start, sehingga menyertakan wget/curl menjaganya tetap cepat).
Daftarkan proses latar belakang dari sandbox ini.
Mengembalikan proses yang dimulai dengan Sandbox.run()(..., background=True); hentikan salah satunya dengan SandboxProcess.kill(). Proses yang baru saja selesai tetap terdaftar (dengan running=False dan exit_code mereka); server mempertahankan jumlah terbatas dari proses tersebut, sehingga sandbox yang telah menjalankan ribuan perintah singkat tidak akan mendaftar semuanya.
proxy_url_for
< source >( port: int | strpath: str = '/'scheme: str = 'https://' ) → str
Parameter
- port (
intataustr) — Port (pool:<port>dari soket unix) tempat server internal mendengarkan. - path (
str, opsional, default"/") — Path pada server internal yang dituju, misalnya"/ws". - scheme (
str, opsional, default"https --//"): Skema URL untuk membangun tautan. Defaultnya adalah"https://"; berikan"wss://"untuk klien WebSocket (proxy tidak bergantung pada protokol, sehingga hanya skema sisi klien yang berubah).
Mengembalikan
str
URL seperti https://<job_id>--49983.hf.jobs/v1/.../proxy/8000/ws (atau
wss://... dengan scheme="wss://").
URL publik yang memproksikan ke server yang berjalan di dalam sandbox ini.
Permintaan ke URL yang dikembalikan diteruskan oleh server sandbox dalam-jobs ke server yang Anda mulai di sandbox pada port, termasuk upgrade WebSocket (ws(s)://) dan respons yang di-stream. Gunakan bersama proxy_headers untuk autentikasi.
Bagaimana sandbox harus mendengarkan di port:
- Pool / sandbox bersama: tidak dapat mengikat port TCP (Landlock), jadi ikat unix socket di
$SBX_PROXY_DIR/<port>.sock(variabel lingkunganSBX_PROXY_DIRdiatur di setiap sandbox). Contoh:uvicorn app:app --uds $SBX_PROXY_DIR/8000.sock. - Sandbox khusus: bind port TCP biasa di
127.0.0.1:<port>. (Anda juga dapat mengekspos port secara langsung melalui job proxy tanpa melalui sini.)
jalankan
< 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 )
Parameter
- cmd (
stratauList[str]) — String perintah shell (dijalankan dengan/bin/sh -c) atau daftar argv (dieksekusi secara langsung). - shell (
bool, opsional) — Paksa mode eksekusi alih-alih menyimpulkannya dari tipecmd.Truedijalankan melalui/bin/sh -cdan mengharuskancmdberupa string;Falsemenjalankancmdsecara langsung dan mengharuskannya berupa daftar argv.None(default) menyimpulkan dari tipe. Tetapkan secara eksplisit untuk menghindari jebakan berbasis tipe (mis.["echo hi"]dieksekusi sebagai satu program bernama"echo hi"). - env (
dict[str, Any], opsional) — Variabel lingkungan tambahan untuk perintah ini. - cwd (
str, opsional) — Direktori kerja. - timeout (
float, opsional) — Hentikan perintah (seluruh grup proses) setelah jumlah detik ini. - stdin (
str, opsional) — Data untuk ditulis ke stdin perintah. - on_stdout (
Callable[[str], None], opsional) — Callback yang dipanggil dengan potongan stdout saat tiba. - on_stderr (
Callable[[str], None], opsional) — Callback yang dipanggil dengan potongan stderr saat mereka tiba. - check (
bool, opsional, defaultTrue) — Jika True, lemparSandboxCommandErrorpada exit non-nol. - capture_output (
bool, opsional, defaultnyaTrue) — Jika True, stdout/stderr akan diakumulasi ke dalam hasil yang dikembalikan. BerikanFalsejika Anda hanya menginginkanon_stdout/on_stderr: output kemudian diserahkan ke callback dan dibuang, sehingga perintah yang menghasilkan gigabyte data tidak harus muat di memori.result.stdout/result.stderrkosong dalam kasus tersebut. - background (
bool, opsional, defaultFalse) — Jika True, mulai perintah secara terpisah dan langsung kembalikan SandboxProcess alih-alih menunggu dan mengembalikan SandboxCommandResult.
Jalankan perintah di sandbox dan tunggu hingga selesai, dengan streaming output secara langsung.
Dengan background=True, perintah dimulai secara terputus dan run langsung mengembalikan SandboxProcess tanpa menunggu proses selesai — berguna untuk server dan proses jangka panjang lainnya. Anda dapat melihat daftarnya kemudian dengan Sandbox.processes() dan menghentikan salah satunya dengan SandboxProcess.kill(). Opsi streaming/hanya-menunggu (timeout, stdin, on_stdout, on_stderr, check) tidak berlaku dalam mode tersebut.
Mengembalikan: SandboxCommandResult (dengan exit_code, stdout, stderr, duration_ms), atau SandboxProcess ketika background=True.
SandboxPool
kelas 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 )
Armada pekerjaan “host” bersama, di mana masing-masing memuat banyak sandbox yang terisolasi oleh landlock.
API Sandbox bersifat eksperimental. API dan perilakunya dapat berubah tanpa pemberitahuan.
Sandbox yang dipoolkan ditujukan untuk workload di dalam satu batas kepercayaan. Sandbox yang dipoolkan adalah sebuah uid plus ruleset Landlock di dalam VM bersama — bukan VM tersendiri — dan setiap sandbox di sebuah host berbagi token autentikasi host tersebut beserta control plane berprivilesenya. Gunakan pool untuk mendistribusikan kode Anda sendiri secara hemat. Untuk workload yang saling tidak mempercayai, gunakan Sandbox.create(), yang memberikan masing-masing workload VM tersendiri. Celah spesifiknya tercantum di bawah “Known limitations” pada panduan konseptual sandbox.
Satu host adalah satu HF Job yang ditagih (VM); host ini menjalankan server sandbox dan memultipleks hingga sandboxes_per_host sandbox ringan, yang diisolasi satu sama lain oleh uid + Landlock LSM. Hal ini membuat fan-out besar menjadi murah (biaya VM dibagikan di antara semua sandbox-nya) dan cepat (pembuatan sandbox hanya membutuhkan ~satu round-trip proxy setelah host dalam keadaan hangat). Paling cocok untuk banyak sandbox CPU paralel seperti RL rollouts; untuk GPU atau isolasi tingkat VM yang kuat di antara workload yang saling tidak mempercayai, gunakan Sandbox.create() sebagai gantinya.
Konstruktor menyediakan warm_up host terlebih dahulu (default 1) dan memblokir hingga mereka siap; host tambahan kemudian disediakan sesuai permintaan saat sandbox diminta, dan semua
dibongkar pada close() (atau saat idle, melalui idle_timeout). Pengguna tidak pernah mengelola pekerjaan:
>>> 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() membuat satu sandbox pada satu waktu: ia memanfaatkan ulang host yang masih memiliki kapasitas kosong sebelum memulai host baru, sehingga Anda tumbuh sesuai permintaan saat pekerjaan datang. Untuk menghindari cold start pada beberapa panggilan pertama, siapkan host terlebih dahulu dengan warm_up (atau warm). Host yang hangat ditemukan melalui label job, sehingga pemanfaatan ulang juga berfungsi melintasi proses (pool baru dengan image/flavor/name yang sama akan menempel pada
menyimpan eksekusi sebelumnya yang ditinggalkan):
>>> pool = SandboxPool(image="python:3.12")
>>> sbx = pool.create() # finds a warm host (here or in another process), else boots oneLepaskan pool. Idempoten.
Untuk pool yang kami buat, ini mengakhiri semua pekerjaan host (dan dengan demikian semua sandbox mereka). Untuk handle yang terhubung melalui connect(), ini hanya melepaskan klien HTTP lokal: host bersama mungkin masih melayani klien lain, jadi — seperti Sandbox.connect() — keluar dari blok with tidak boleh menghancurkannya. Akhiri host dari pool yang terhubung secara eksplisit dengan hf sandbox pool delete <id>.
Hanya host yang menangani proses yang dimulai yang dibatalkan. Host yang ditemukan melalui label mungkin masih melayani sandbox dari proses lain, sehingga dilepaskan, bukan diakhiri.
Membuang SandboxError jika pekerjaan host tidak dapat dibatalkan, dengan menyebutkan pekerjaan yang masih berjalan — mereka tetap ditagih, dan entri cache mereka dipertahankan agar tetap dapat ditemukan. Ketika close() dicapai melalui __exit__ dengan pengecualian yang sudah terjadi, kegagalan tersebut dicatat ke log, sehingga tidak dapat menutupi error asli.
connect
< source >( pool_id: strnamespace: str | None = Noneadopt_hosts: str = 'own'token: str | None = None )
Parameter
- pool_id (
str) — ID yang dikembalikan saat pool pertama kali dibuat. - namespace (
str, opsional) — Namespace untuk mencari host dari pool (default adalah milik Anda). - adopt_hosts (
str, opsional, default"own") — Host mana yang dapat dilampirkan. Lihat SandboxPool. Melampirkan ulang ke pool yang host-nya dimulai oleh anggota lain dari namespace memerlukan"namespace". - token (
str, opsional) — Override token HF.
Lampirkan kembali ke pool yang sedang berjalan berdasarkan id, dari mesin mana pun — tidak memerlukan status lokal.
Mencari host yang sedang berjalan dengan label pool_id dan membangun ulang konfigurasi pool (image/flavor/density/host-idle) dari spesifikasi dan variabel lingkungan job host tersebut, mengembalikan SandboxPool yang siap untuk create() lebih banyak sandbox — mengemas ke host yang sedang berjalan, atau memulai duplikat (konfigurasi sama) jika mereka penuh.
Membuang SandboxError jika tidak ada host yang sedang berjalan (pool berhenti ada begitu semua hostnya hilang — karena idle-timed-out atau dihentikan).
create
< source >( env: dict[str, typing.Any] | None = Noneidle_timeout: int | float | str | None = 600forward_hf_token: bool = False )
Parameter
- env (
dict[str, Any], opsional) — Variabel lingkungan untuk sandbox ini (setiap sandbox memiliki variabel lingkungannya sendiri). - idle_timeout (
intataufloatataustr, opsional, default600) — Timeout idle per-sandbox — sebuah sandbox akan dievict dari host-nya setelah periode inaktivitas (tidak ada panggilan API, tidak ada proses yang berjalan) selama durasi ini. Berbeda dari timeout idle host. LewatkanNoneuntuk menonaktifkannya. - forward_hf_token (
bool, opsional, defaultFalse) — Jika True, suntikkan token HF Anda sebagaiHF_TOKENdi dalam sandbox (opt-in). Berbeda dengansecretspada sandbox khusus, env dari sandbox pooled dikirim ke server host saat pembuatan (tidak pernah disimpan di job host), sehingga tidak muncul di metadata job mana pun.
Buat satu sandbox, dengan menyediakan host jika diperlukan.
Memanfaatkan ulang host dengan kapasitas kosong (dari pool ini, atau host hangat yang ditemukan melalui label job / cache lokal) sebelum memulai host baru, sehingga create() terhadap host hangat hanya memakan waktu sekitar satu round-trip. Panggil berulang kali untuk fan out; gunakan warm_up (atau warm) untuk menyediakan host terlebih dahulu dan menghindari cold start pada panggilan pertama. Jika host terisi penuh di bawah kami (proses lain memakainya) atau host yang di-cache sudah hilang, sandbox akan ditempatkan ulang di host lain (atau host baru).
Pastikan num_hosts host kosong sedang berjalan dan biarkan tetap berjalan. Mengembalikan id pekerjaan host dari pool.
Digunakan untuk “membuat” pool di awal: host membawa label dan konfigurasi pool (di variabel lingkungan mereka), sehingga SandboxPool.connect(pool_id) yang kemudian (bahkan dari mesin lain) dapat menemukannya dan memunculkan sandbox tanpa cold start. Host terus menagih biaya hingga dihentikan atau tidak aktif.
Mengadopsi host yang sudah berjalan untuk pool ini (ditemukan melalui label job) sebelum booting, sehingga warm() setelah connect() — atau warm() yang diulang — akan menambah hingga num_hosts alih-alih menduplikasi host yang aktif dan melampaui max_hosts.
Struktur data
SandboxCommandResult
kelas huggingface_hub.SandboxCommandResult
< source >( exit_code: int | Nonestdout: strstderr: strsignal: int | None = Nonetimed_out: bool = Falseduration_ms: int = 0 )
Hasil dari perintah yang dijalankan dalam sandbox dengan Sandbox.run().
SandboxProcess
kelas 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 )
Proses latar belakang yang dimulai dalam sandbox dengan Sandbox.run()(..., background=True).
Daftarkan proses sandbox dengan Sandbox.processes() dan hentikan salah satunya dengan SandboxProcess.kill().
Proses yang baru saja selesai tetap ada dalam daftar (server menyimpan sejumlah terbatas
dari mereka), sehingga running dan exit_code menunjukkan apakah proses masih aktif atau sudah
berakhir (per saat proses tersebut didaftarkan).
Akhiri proses latar belakang. Idempoten.
Mengembalikan apakah panggilan ini yang menghentikannya: False berarti proses tersebut sudah keluar atau dihentikan, yang bukan merupakan kesalahan.
Perhatikan bahwa keturunan yang melepaskan diri dengan setsid() akan keluar dari grup proses yang diberi sinyal dan bertahan setelah panggilan ini. Hapus sandbox untuk memastikan bahwa semua yang dimulainya telah hilang.
FileEntry
kelas huggingface_hub._sandbox.FileEntry
< source >( name: strpath: strtype: typing.Literal['file', 'dir', 'symlink']size: intmtime_ms: int | None = Nonemode: str = '' )
Berkas atau direktori di dalam sandbox.
Kesalahan
SandboxError
kelas huggingface_hub.errors.SandboxError
< source >( message: strstatus_code: int | None = None )
Pengecualian dasar untuk operasi sandbox (lihat huggingface_hub.Sandbox).
SandboxCommandError
kelas huggingface_hub.errors.SandboxCommandError
< source >( cmdresult )
Dilempar ketika perintah yang dijalankan di dalam sandbox keluar dengan kode non-nol.