Hub Python Library documentation

Sandboxes

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Sandboxes

A Sandbox API é experimental. Sua API e comportamento podem mudar sem aviso prévio. Os sandboxes compartilhados são destinados a cargas de trabalho dentro do mesmo limite de confiança; use sandboxes dedicados para cargas de trabalho que não confiam umas nas outras.

Confira o guia de Sandboxes para aprender a usá-los.

Sandbox

classe huggingface_hub.Sandbox

< >

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

Uma máquina de nuvem isolada executada em Hugging Face Jobs.

A API do Sandbox é experimental. Sua API e comportamento podem mudar sem aviso prévio.

Crie uma dedicada com Sandbox.create() (um job por sandbox) ou obtenha muitas compartilhadas e baratas de um SandboxPool.

Reconecte-se a um sandbox em execução de qualquer lugar com Sandbox.connect(). Use como um gerenciador de contexto para encerrá-lo ao sair:

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

fechar

< >

( )

Libere o cliente HTTP local sem encerrar o sandbox. Idempotente.

Sem efeito para sandboxes de pool (o cliente pertence ao host da pool).

connect

< >

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

Reconecte-se a um sandbox em execução de qualquer lugar, usando apenas seu id.

criar

< >

( 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 )

Parâmetros

  • image (str, opcional, padrão "python --3.12"): Qualquer imagem Docker com /bin/sh (Docker Hub ou hf.co/spaces/...).
  • flavor (str, opcional, padrão "cpu-basic") — Flavor de hardware, por exemplo, "cpu-basic", "a10g-small". Consulte hf jobs hardware.
  • idle_timeout (int ou float ou str, opcional, padrão 600) — Desligamento automático após esse período de inatividade (sem chamadas de API, sem processos em execução). O padrão é 10 minutos; passe None para desativar. Observe que um comando em foreground não é atualmente contado como atividade, então um único run() que demore mais que isso sem outro tráfego de API pode ter seu sandbox desligado — aumente o timeout (ou passe None) para comandos únicos longos.
  • env (dict[str, Any], opcional) — Variáveis de ambiente disponíveis no sandbox.
  • secrets (dict[str, Any], opcional) — Variáveis de ambiente secretas (criptografadas no servidor).
  • volumes (List[Volume], opcional) — Repositórios/buckets do HF para montar, veja Volume.
  • namespace (str, opcional) — Namespace de usuário ou organização para executar (padrão: usuário atual).
  • forward_hf_token (bool, opcional, padrão False) — Se True, seu token do HF é injetado como HF_TOKEN (opt-in).
  • labels (dict[str, str], opcional) — Rótulos a serem anexados ao Job do HF subjacente.
  • start_timeout (float, opcional, padrão 120.0) — Segundos máximos para aguardar que o sandbox esteja pronto.
  • token (str, opcional) — Substituição do token do HF.

Crie um sandbox dedicado (um HF Job) e bloqueie até que ele esteja pronto (~7s em cpu-basic).

Cada sandbox é uma VM isolada completa, portanto, esta é a escolha correta para cargas de trabalho de GPU ou código não confiável. Para distribuir muitos sandboxes de CPU de baixo custo, use SandboxPool.

O job é executado com uma vida útil máxima fixa de 24h; idle_timeout é o verdadeiro responsável — um sandbox ocioso se desliga muito antes disso.

A imagem precisa apenas de /bin/sh. O servidor sandbox é baixado na inicialização com wget/curl, se disponível; caso contrário, é lido de um bucket de servidor sempre montado (o que adiciona ~2-3s ao cold start, então incluir wget/curl mantém o processo rápido).

processos

< >

( )

Liste os processos em segundo plano deste sandbox.

Retorna os processos iniciados com Sandbox.run()(..., background=True); encerre um deles com SandboxProcess.kill(). Processos concluídos recentemente permanecem listados (com running=False e seu exit_code); o servidor mantém um número limitado deles, de modo que um sandbox que executou milhares de comandos curtos não os listará todos.

proxy_url_for

< >

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

Parâmetros

  • port (int ou str) — A porta (pool: o <port> do socket unix) na qual o servidor interno escuta.
  • path (str, opcional, padrão "/") — Caminho no servidor interno para o qual apontar, por exemplo, "/ws".
  • scheme (str, opcional, padrão "https --//"): Esquema de URL para construir o link. O padrão é "https://"; passe "wss://" para um cliente WebSocket (o proxy é agnóstico em relação ao protocolo, então apenas o esquema do lado do cliente muda).

Retorna

str

uma URL como https://<job_id>--49983.hf.jobs/v1/.../proxy/8000/ws (ou wss://... com scheme="wss://").

URL pública que faz proxy para um servidor executado dentro deste sandbox.

As solicitações à URL retornada são encaminhadas pelo servidor de sandbox do job para um servidor que você iniciou na sandbox na port, incluindo upgrades de WebSocket (ws(s)://) e respostas em streaming. Combine-o com proxy_headers para autenticação.

Como o sandbox deve escutar na port:

  • Pool / sandbox compartilhado: não é possível vincular uma porta TCP (Landlock), portanto vincule um socket unix em $SBX_PROXY_DIR/<port>.sock (a variável de ambiente SBX_PROXY_DIR é definida em todos os sandboxes). Por exemplo, uvicorn app:app --uds $SBX_PROXY_DIR/8000.sock.
  • Sandbox dedicado: vincule uma porta TCP normal em 127.0.0.1:<port>. (Você também pode expor a porta diretamente via o proxy do job, sem passar por aqui.)

Exemplo:

>>> 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")

executar

< >

( 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 )

Parâmetros

  • cmd (str ou List[str]) — Uma string de comando de shell (executada com /bin/sh -c) ou uma lista argv (executada diretamente).
  • shell (bool, opcional) — Força o modo de execução em vez de inferi-lo a partir do tipo de cmd. True executa através de /bin/sh -c e exige que cmd seja uma string; False executa cmd diretamente e exige que seja uma lista argv. None (padrão) infere a partir do tipo. Defina-o explicitamente para evitar o problema causado pelo tipo (por exemplo, ["echo hi"] sendo executado como um único programa chamado "echo hi").
  • env (dict[str, Any], opcional) — Variáveis de ambiente extras para este comando.
  • cwd (str, opcional) — Diretório de trabalho.
  • timeout (float, opcional) — Encerra o comando (todo o grupo de processos) após esse número de segundos.
  • stdin (str, opcional) — Dados a serem gravados no stdin do comando.
  • on_stdout (Callable[[str], None], opcional) — Callback chamado com os blocos de stdout à medida que chegam.
  • on_stderr (Callable[[str], None], opcional) — Callback chamado com os blocos de stderr à medida que chegam.
  • check (bool, opcional, padrão True) — Se True, levanta SandboxCommandError em caso de saída não nula.
  • capture_output (bool, opcional, padrão True) — Se True, acumula stdout/stderr no resultado retornado. Passe False quando você quiser apenas on_stdout/on_stderr: a saída é então entregue aos callbacks e descartada, de modo que um comando que gera gigabytes não precisa caber na memória. result.stdout/result.stderr ficam vazios nesse caso.
  • background (bool, opcional, padrão False) — Se True, inicia o comando em segundo plano e retorna um SandboxProcess imediatamente, em vez de aguardá-lo e retornar um SandboxCommandResult.

Execute um comando no sandbox e aguarde por ele, transmitindo a saída ao vivo.

Com background=True, o comando é iniciado de forma destacada e run retorna um SandboxProcess imediatamente, sem aguardar a conclusão — útil para servidores e outros processos de longa duração. Liste-os posteriormente com Sandbox.processes() e encerre um deles com SandboxProcess.kill(). As opções de streaming/apenas espera (timeout, stdin, on_stdout, on_stderr, check) não se aplicam nesse modo.

Retorna: um SandboxCommandResult (com exit_code, stdout, stderr, duration_ms), ou um SandboxProcess quando background=True.

SandboxPool

classe 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 )

Uma frota de jobs compartilhados de “host”, cada um contendo muitos sandboxes isolados por landlock.

A API do Sandbox é experimental. Sua API e comportamento podem mudar sem aviso prévio.

Sandboxes em pool são para workloads dentro de uma única fronteira de confiança. Um sandbox em pool é um uid mais um conjunto de regras Landlock dentro de uma VM compartilhada — não uma VM própria — e todos os sandboxes em um host compartilham o token de autenticação e o plano de controle privilegiado desse host. Use um pool para distribuir seu próprio código de forma econômica. Para workloads que não confiam uns nos outros, use Sandbox.create(), que fornece uma VM própria para cada um. As lacunas específicas estão listadas em “Limitações conhecidas” no guia conceitual de sandboxes.

Um host é um Job da HF faturado (uma VM); ele executa o servidor de sandbox e multiplexa até sandboxes_per_host sandboxes leves, isolados uns dos outros por uid + o Landlock LSM. Isso torna grandes expansões paralelas baratas (o custo da VM é compartilhado entre todos os seus sandboxes) e rápidas (criar um sandbox é ~uma ida e volta de proxy uma vez que o host está quente). Ideal para muitos sandboxes CPU paralelos, como rollouts de RL; para GPU ou isolamento forte no nível da VM entre cargas de trabalho que se desconfiam mutuamente, use Sandbox.create() em vez disso.

O construtor provisiona previamente warm_up hosts (padrão 1) e bloqueia até que estejam prontos; os hosts adicionais são provisionados sob demanda conforme os sandboxes são solicitados, e todos

são desmontados no close() (ou quando ociosos, via idle_timeout). O usuário nunca gerencia os jobs:

>>> 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() cria um sandbox por vez: ele reutiliza um host que ainda tem capacidade livre antes de iniciar um novo, para que a escala aumente sob demanda conforme o trabalho chega. Para evitar um início frio nas primeiras chamadas, provisione hosts antecipadamente com warm_up (ou warm). Hosts quentes são descobertos por meio de rótulos de job, então a reutilização funciona entre processos também (um novo pool com a mesma image/flavor/name se conecta a

deixa para trás uma execução anterior):

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

fechar

< >

( )

Libere o pool. Idempotente.

Para um pool que criamos, isso encerra todos os jobs do host (e, portanto, todos os seus sandboxes). Para um handle conectado via connect(), ele apenas libera os clientes HTTP locais: os hosts compartilhados podem estar atendendo a outros clientes, então — assim como Sandbox.connect() — sair de um bloco with não deve encerrá-los. Encerre explicitamente os hosts de um pool conectado com hf sandbox pool delete <id>.

Apenas hosts que iniciaram este handle são cancelados. Um host descoberto por meio de rótulos pode estar servindo sandboxes de outro processo, portanto, ele é liberado em vez de ser encerrado.

Gera SandboxError se um job do host não puder ser cancelado, indicando os jobs que ainda estão em execução — eles continuam gerando cobrança e suas entradas de cache são mantidas para que permaneçam descobertas. Quando close() é alcançado por meio de __exit__ com uma exceção já em andamento, a falha é registrada em log, para que não possa mascarar o erro original.

connect

< >

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

Parâmetros

  • pool_id (str) — O id retornado quando o pool foi criado pela primeira vez.
  • namespace (str, opcional) — Namespace para pesquisar os hosts do pool (padrão: o seu).
  • adopt_hosts (str, opcional, padrão "own") — Quais hosts podem ser anexados. Consulte SandboxPool. Reanexar a um pool cujos hosts foram iniciados por outro membro do namespace requer "namespace".
  • token (str, opcional) — Substituição do token do HF.

Reconecte-se a um pool em execução pelo id, de qualquer máquina — sem necessidade de estado local.

Encontra um host em execução rotulado com pool_id e reconstrói a configuração do pool (image/flavor/density/host-idle) a partir da especificação e das variáveis de ambiente do job desse host, retornando um SandboxPool pronto para create() mais sandboxes — empacotando nos hosts em execução ou iniciando um duplicado (mesma configuração) quando eles estiverem cheios.

Gera SandboxError se nenhum host em execução for encontrado (um pool deixa de existir quando todos os seus hosts são removidos — por tempo limite de inatividade ou por serem encerrados).

criar

< >

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

Parâmetros

  • env (dict[str, Any], opcional) — Variáveis de ambiente para este sandbox (cada sandbox possui as suas).
  • idle_timeout (int ou float ou str, opcional, padrão 600) — Tempo limite de inatividade por sandbox — uma sandbox é removida do host após esse período de inatividade (sem chamadas de API, sem processo em execução). Diferente do tempo limite de inatividade do host. Passe None para desativar.
  • forward_hf_token (bool, opcional, padrão False) — Se True, injeta seu token do HF como HF_TOKEN no sandbox (opcional). Diferentemente dos secrets de um sandbox dedicado, o env de um sandbox em pool é entregue ao servidor host na criação (nunca armazenado no job do host), portanto não aparece nos metadados de nenhum job.

Crie um sandbox, provisionando um host, se necessário.

Reutiliza um host com capacidade livre (deste pool, ou um host quente encontrado via rótulos de job / o cache local) antes de iniciar um novo, de modo que um create() em um host quente custa ~uma ida e volta. Chame-o repetidamente para distribuir as chamadas; use warm_up (ou warm) para provisionar hosts antecipadamente e evitar um início frio nas primeiras chamadas. Se um host encher sob nós (outro processo o ocupou) ou um host em cache desaparecer, o sandbox é realocado em outro host (ou em um novo).

warm

< >

( num_hosts: int = 1 )

Garanta que num_hosts host(s) vazio(s) estejam em execução e mantenha-os em execução. Retorna os ids dos jobs dos hosts do pool.

Usado para “criar” um pool antecipadamente: os hosts carregam o rótulo e a configuração do pool (em suas variáveis de ambiente), de modo que uma chamada posterior a SandboxPool.connect(pool_id) (mesmo de outra máquina) os encontra e inicia sandboxes sem um cold start. Os hosts continuam sendo cobrados até serem encerrados ou ficarem ociosos.

Adota hosts já em execução para este pool (encontrados via rótulos de job) antes de iniciar novos, de modo que um warm() após connect() — ou um warm() repetido — complete até num_hosts em vez de duplicar hosts ativos e ultrapassar max_hosts.

Estruturas de dados

SandboxCommandResult

classe huggingface_hub.SandboxCommandResult

< >

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

Resultado de um comando executado em um sandbox com Sandbox.run().

SandboxProcess

classe 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 )

Um processo em segundo plano iniciado em um sandbox com Sandbox.run()(..., background=True).

Liste os processos de um sandbox com Sandbox.processes() e encerre um deles com SandboxProcess.kill(). Processos concluídos recentemente permanecem na listagem (o servidor mantém um número limitado deles), portanto running e exit_code indicam se um processo ainda está ativo ou já foi encerrado (no momento em que foi listado).

kill

< >

( )

Encerre o processo em segundo plano. Idempotente.

Indica se esta chamada é o que a interrompeu: False significa que ela já havia saído ou sido encerrada, o que não é um erro.

Observe que um descendente que se desconecta com setsid() deixa o grupo de processos sinalizado e sobrevive a esta chamada. Exclua o sandbox para ter certeza de que tudo o que ele iniciou foi removido.

FileEntry

classe huggingface_hub._sandbox.FileEntry

< >

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

Um arquivo ou diretório dentro de um sandbox.

Erros

SandboxError

classe huggingface_hub.errors.SandboxError

< >

( message: strstatus_code: int | None = None )

Parâmetros

  • status_code — O status HTTP retornado pelo servidor no sandbox, se o erro originou de uma resposta de API (por exemplo, 404 para um arquivo ausente). None caso contrário.

Exceção base para operações de sandbox (veja huggingface_hub.Sandbox).

SandboxCommandError

classe huggingface_hub.errors.SandboxCommandError

< >

( cmdresult )

Parâmetros

  • cmd — O comando que falhou.
  • result — O SandboxCommandResult completo (exit_code, stdout, stderr, …).

Ocorrido quando um comando executado em um sandbox termina com um código diferente de zero.

Update on GitHub