Hub documentation
구성
구성
인증
Jobs를 실행하려면 hf auth login으로 인증되어 있어야 하며, Jobs를 시작하고 관리할 수 있는 권한이 있는 토큰을 사용해야 합니다.
대신 CLI에서 --token을, Python에서는 token 인수를 사용하여 Hugging Face 토큰을 수동으로 전달할 수 있습니다.
인수 전달
--를 사용하여 Jobs 옵션과 명령어나 스크립트 및 해당 인수를 구분합니다. -- 이후의 옵션, 예를 들어 --help나 --timeout은 Jobs에서 해석되지 않고 그대로 전달됩니다.
이는 UV Jobs와 Docker Jobs 모두에 적용됩니다.
hf jobs uv run --flavor t4-small -- script.py --early-stopping-patience 3
└─ Jobs option ┘ └─ script + arguments ─────────────┘UV Jobs
UV에서와 마찬가지로 실행할 UV 스크립트 또는 python 명령을 지정합니다:
>>> hf jobs uv run train.py>>> hf jobs uv run python -c 'print("Hello from the cloud!")'hf jobs uv run 명령은 --with와 --python와 같은 UV 인수를 지원합니다. --with 인수를 사용하면 Python 의존성을 지정할 수 있으며, --python 인수를 사용하면 사용할 Python 버전을 선택할 수 있습니다:
>>> hf jobs uv run --with trl train.py
>>> hf jobs uv run --python 3.12 train.py예를 들어, --를 사용하여 명령에 인수를 전달합니다:
>>> hf jobs uv run --with trl-jobs -- trl-jobs sft --model_name Qwen/Qwen3-0.6B --dataset_name trl-lib/CapybaraCLI 문서와 UV Commands 문서에서 모든 인수의 목록을 확인하세요.
기본적으로 UV Jobs는 ghcr.io/astral-sh/uv:python3.12-bookworm Docker 이미지로 실행되지만, --image <docker-image>를 사용하여 UV가 설치된 다른 이미지를 사용할 수 있습니다.
이미지 선택 및 UV 의존성과 환경의 상호작용을 이해하려면 Docker 이미지 사용을 참조하세요.
스크립트에서 런치 구성을 정의합니다
특정 런타임(주어진 이미지, GPU flavor 또는 시스템 인터프리터)에서만 올바르게 실행되는 스크립트는 PEP 723 헤더의 선택적 [tool.hf-jobs] 테이블에 해당 구성을 포함할 수 있습니다:
# /// script
# requires-python = ">=3.11"
# dependencies = ["vllm", "datasets"]
#
# [tool.hf-jobs]
# image = "vllm/vllm-openai:unlimited-ocr"
# flavor = "l4x1"
# python = "/usr/bin/python3"
# secrets = ["HF_TOKEN"]
# ///hf jobs uv run ocr.py를 실행하면 해당 이미지와 하드웨어에서 시작됩니다. 일반적인 uv run은 테이블을 무시하며, [tool.*] 테이블은 PEP 723의 일부이고 도구는 자신이 소유하지 않는 테이블은 건너뜀니다.
지원되는 키는 모두 선택 사항입니다: image, flavor, python, timeout, name, namespace, env, secrets, labels, volumes, network_group 및 network_aliases. 이들은 동일한 이름의 플래그에 매핑됩니다. 스크립트의 값은 기본값으로 사용됩니다. 명시적인 플래그가 항상 우선하며, env, secrets, labels 및 volumes는 항목별로 병합되므로 -e와 -v는 스크립트가 선언한 항목에 추가됩니다. 알려지지 않은 키는 오류를 발생시키며, secrets에는 이름만 나열됩니다. 값은 스크립트를 실행하는 사용자의 환경에서 가져오며, 로컬에 설정되지 않은 secret도 오류를 발생시킵니다.
--dry-run를 사용하면 제출하지 않고 해결된 구성을 출력할 수 있으며, 스크립트에서 가져온 값은 (from script)로 표시됩니다. 전체 병합 규칙은 hf CLI 가이드를 참조하세요.
해당 테이블은
hfCLI에서만 읽힙니다.run_uv_job()과create_scheduled_uv_job()은 이를 무시하므로, Python에서는image=,flavor=, …를 명시적으로 전달해야 합니다.
Docker Jobs
docker와 마찬가지로 Docker 이미지와 실행할 명령을 지정합니다:
>>> hf jobs run ubuntu echo "Hello from the cloud!"여기서 --help는 Jobs 도움말을 표시하는 대신 Python으로 전달됩니다:
>>> hf jobs run --flavor cpu-basic python:3.12 -- python --helpCLI 문서에서 모든 인수의 목록을 확인하세요.
기존 이미지와 Docker Spaces에서 빌드한 이미지를 사용하는 예제는 Docker 이미지 사용을 참고하세요.
환경 변수와 Secrets
내장 환경 변수
Spaces의 내장 환경 변수와 마찬가지로, Jobs는 컨테이너 내부에 다음 환경 변수를 자동으로 제공합니다:
| 변수 | 설명 |
|---|---|
JOB_ID | 현재 작업의 고유 식별자(예: 699d874f1aad19adb8aaeadc). 이는 UI와 작업 URL에 표시되는 ID와 동일합니다. |
ACCELERATOR | 사용 가능한 가속기의 유형(예: t4-medium, a10g-small, a100x4) 또는 CPU 전용 작업의 경우 none. |
CPU_CORES | 작업에 할당된 CPU 코어 수. |
MEMORY | 작업에 할당된 메모리 양(예: 8Gi). |
HF_NETWORK_GROUP_HOSTNAME | 작업의 네트워크 그룹에 속한 모든 작업으로 해석되는 호스트 이름. 작업이 네트워크 그룹을 선언한 경우에만 설정됩니다. |
HF_NETWORK_GROUP_PREFIX | 그룹 멤버가 주장하는 호스트 이름을 가져오기 위해 별칭 앞에 붙일 접두사입니다(예: ${HF_NETWORK_GROUP_PREFIX}master). 작업이 네트워크 그룹을 선언한 경우에만 설정됩니다. |
이 변수를 사용하여 출력을 추적하거나, 사용 가능한 리소스에 맞게 코드를 조정하거나, 현재 작업을 프로그래밍 방식으로 참조할 수 있습니다:
# Access job environment information
>>> hf jobs run python:3.12 python -c "import os; print(f'Job: {os.environ.get(\"JOB_ID\")}, CPU: {os.environ.get(\"CPU_CORES\")}, Mem: {os.environ.get(\"MEMORY\")}')"사용자 정의 환경 변수
…를 사용하여 작업에 환경 변수를 전달할 수 있습니다
# Pass environment variables
>>> hf jobs uv run -e FOO=foo -e BAR=bar python -c 'import os; print(os.environ["FOO"], os.environ["BAR"])'# Pass an environment from a local .env file
>>> hf jobs uv run --env-file .env python -c 'import os; print(os.environ["FOO"], os.environ["BAR"])'# Pass secrets - they will be encrypted server side
>>> hf jobs uv run -s MY_SECRET=psswrd python -c 'import os; print(os.environ["MY_SECRET"])'# Pass secrets from a local .env.secrets file - they will be encrypted server side
>>> hf jobs uv run --secrets-file .env.secrets python -c 'import os; print(os.environ["MY_SECRET"])'
--secrets HF_TOKEN를 사용하여 로컬 Hugging Face 토큰을 암시적으로 전달할 수 있습니다. 이 구문을 사용하면 시크릿은 환경 변수에서 가져옵니다.HF_TOKEN의 경우, 환경 변수가 설정되지 않았다면 Hugging Face 홈 폴더에 있는 토큰 파일을 읽을 수 있습니다.
볼륨
-v 또는 --volume를 사용하여 Hugging Face 저장소(모델, 데이터셋), Storage Buckets, 또는 로컬 디렉터리를 작업 컨테이너의 볼륨으로 마운트합니다. Hub 소스는 hf:// URL 스킴을 사용합니다: hf://[TYPE/]SOURCE:/MOUNT_PATH[:ro]. 로컬 디렉터리는 소스로 직접 전달됩니다.
마운트된 파일은 지연 로드되므로, 마운팅을 사용하면 Job이 로컬 디스크보다 훨씬 큰 데이터셋을 처리할 수 있습니다. Job에서 마운팅, 스트리밍, 대용량 데이터 처리에 대한 내용은 대용량 데이터셋 처리를 참고하세요.
볼륨 유형:
| 유형 | 예시 |
|---|---|
| 모델 저장소 | -v hf://openai/gpt-oss-120b:/model |
| Dataset 저장소 | -v hf://datasets/stanfordnlp/imdb:/data |
| 스토리지 버킷 | -v hf://buckets/username/my-bucket:/mnt |
| 서브폴더 | -v hf://datasets/org/my-dataset/train:/data |
| 로컬 디렉터리 | -v ./training-data:/data |
그런 다음 컨테이너 내부에서 마운트된 볼륨을 로컬 디렉터리로 사용합니다:
# Mount a dataset and query it with DuckDB
>>> hf jobs run -v hf://datasets/stanfordnlp/imdb:/dataset \
... duckdb/duckdb duckdb -c "SELECT * FROM '/dataset/**/*.parquet' LIMIT 5"
# Mount a bucket to save training checkpoints
>>> hf jobs uv run -v hf://buckets/username/my-bucket:/training-outputs \
... sft.py --output-dir /training-outputs/training-v3-final-v 플래그를 반복하여 여러 볼륨을 마운트할 수 있습니다:
>>> hf jobs run -v hf://datasets/username/my-dataset:/data -v hf://buckets/username/my-bucket:/output \
... python:3.12 python script.py모델과 데이터셋은 항상 읽기 전용으로 마운트됩니다. 스토리지 버킷은 기본적으로 읽기-쓰기 모드로, 출력, 체크포인트 또는 중간 결과를 저장하는 데 유용합니다. 버킷을 읽기 전용 모드로 마운트하려면 :ro를 사용하세요:
>>> hf jobs run -v hf://buckets/username/my-bucket:/mnt:ro python:3.12 ls /mnt로컬 디렉터리
로컬 디렉토리를 소스로 전달하면 Job이 시작되기 전에 해당 디렉토리가 자동으로 생성되는 개인용 jobs-artifacts Storage Bucket에 동기화되고, 컨테이너에 마운트됩니다. 로컬 디렉토리는 기본적으로 읽기 전용으로 마운트되며, 출력을 작성하려면 :rw를 사용하세요:
>>> hf jobs uv run -v ./pdfs:/input -v ./md-out:/output:rw ocr.py같은 디렉터리를 다시 동기화하면 새 파일 또는 수정된 파일만 업로드됩니다. Job이 읽기/쓰기 볼륨에 작성한 파일을 가져오려면, Job이 종료된 후 해당 버킷 폴더를 다시 동기화하세요. Job이 시작될 때 CLI가 정확한 hf buckets sync 명령을 출력합니다. 예약된 Job도 동일하게 작동합니다: 스케줄이 생성될 때 디렉터리가 한 번 동기화되고, 모든 트리거가 동일한 폴더를 마운트합니다. Python에서는 sync_job_volume을 사용하세요.
Python에서는 Volume 클래스를 사용합니다:
from huggingface_hub import Volume, run_job
job = run_job(
image="python:3.12",
command=["python", "-c", "import os; print(os.listdir('/data'))"],
volumes=[
Volume(type="dataset", source="username/my-dataset", mount_path="/data"),
Volume(type="bucket", source="username/my-bucket", mount_path="/output"),
],
)볼륨 마운팅에는
huggingface_hub>= 1.8.0이 필요합니다. 자세한 내용은 Python 클라이언트 문서와 설치 가이드를 참고하세요.
하드웨어 구성
flavor 인수를 사용하여 GPU 또는 TPU에서 작업을 실행합니다. 예를 들어, A10G GPU에서 PyTorch 작업을 실행하려면:
>>> hf jobs uv run --with torch --flavor a10g-small python -c "import torch; print(f'This code ran with the following GPU: {torch.cuda.get_device_name()}')"이것을 실행하면 다음과 같은 출력이 표시됩니다!
This code ran with the following GPU: NVIDIA A10GHere is another example to run a fine-tuning script like trl/scripts/sft.py:
>>> hf jobs uv run --with trl --flavor a10g-small -s HF_TOKEN -- sft.py --model_name_or_path Qwen/Qwen2-0.5B ...Hugging Face 인프라에서 TRL로 모델 학습 작업을 실행하는 방법에 대한 종합적인 가이드는 TRL Jobs Training 문서를 참고하세요. 이 문서에는 파인튜닝 레시피, 하드웨어 선택, 그리고 모델을 효율적으로 학습하기 위한 모범 사례가 포함되어 있습니다.
hf jobs hardware 명령을 사용하여 사용 가능한 --flavor 옵션 목록을 확인하세요(기본값은 cpu-basic):
>>> hf jobs hardware
name pretty name cpu ram storage accelerator cost/min cost/hour
cpu-basic CPU Basic 2 vCPU 16 GB 50 GB $0.0002 $0.01
cpu-upgrade CPU Upgrade 8 vCPU 32 GB 50 GB $0.0005 $0.03
cpu-performance CPU Performance 32 vCPU 256 GB 1024 GB $0.0317 $1.90
cpu-xl CPU XL 16 vCPU 124 GB 1000 GB $0.0167 $1.00
t4-small Nvidia T4 - small 4 vCPU 15 GB 50 GB 1x T4 (16 GB) $0.0067 $0.40
t4-medium Nvidia T4 - medium 8 vCPU 30 GB 100 GB 1x T4 (16 GB) $0.0100 $0.60
a10g-small Nvidia A10G - small 4 vCPU 15 GB 110 GB 1x A10G (24 GB) $0.0167 $1.00
a10g-large Nvidia A10G - large 12 vCPU 46 GB 200 GB 1x A10G (24 GB) $0.0250 $1.50
a10g-largex2 2x Nvidia A10G - large 24 vCPU 92 GB 1000 GB 2x A10G (48 GB) $0.0500 $3.00
a10g-largex4 4x Nvidia A10G - large 48 vCPU 184 GB 2000 GB 4x A10G (96 GB) $0.0833 $5.00
a100-large Nvidia A100 - large 12 vCPU 142 GB 1000 GB 1x A100 (80 GB) $0.0417 $2.50
a100x4 4x Nvidia A100 48 vCPU 568 GB 4000 GB 4x A100 (320 GB) $0.1667 $10.00
a100x8 8x Nvidia A100 96 vCPU 1136 GB 8000 GB 8x A100 (640 GB) $0.3333 $20.00
h200 Nvidia H200 23 vCPU 256 GB 3000 GB 1x H200 (141 GB) $0.0833 $5.00
h200x2 Nvidia H200 46 vCPU 512 GB 6000 GB 2x H200 (282 GB) $0.1667 $10.00
h200x4 Nvidia H200 92 vCPU 1024 GB 12000 GB 4x H200 (564 GB) $0.3333 $20.00
h200x8 Nvidia H200 184 vCPU 2048 GB 24000 GB 8x H200 (1128 GB) $0.6667 $40.00
rtx-pro-6000 Nvidia RTX PRO 6000 23 vCPU 256 GB 475 GB 1x RTX PRO 6000 (96 GB) $0.0458 $2.75
rtx-pro-6000x2 Nvidia RTX PRO 6000 46 vCPU 512 GB 950 GB 2x RTX PRO 6000 (192 GB) $0.0917 $5.50
rtx-pro-6000x4 Nvidia RTX PRO 6000 92 vCPU 1024 GB 1900 GB 4x RTX PRO 6000 (384 GB) $0.1833 $11.00
rtx-pro-6000x8 Nvidia RTX PRO 6000 184 vCPU 2048 GB 3800 GB 8x RTX PRO 6000 (768 GB) $0.3667 $22.00
l4x1 1x Nvidia L4 8 vCPU 30 GB 400 GB 1x L4 (24 GB) $0.0133 $0.80
l4x4 4x Nvidia L4 48 vCPU 186 GB 3200 GB 4x L4 (96 GB) $0.0633 $3.80
l40sx1 1x Nvidia L40S 8 vCPU 62 GB 380 GB 1x L40S (48 GB) $0.0300 $1.80
l40sx4 4x Nvidia L40S 48 vCPU 382 GB 3200 GB 4x L40S (192 GB) $0.1383 $8.30
l40sx8 8x Nvidia L40S 192 vCPU 1534 GB 6500 GB 8x L40S (384 GB) $0.3917 $23.50포트 노출
Jobs는 --expose <port>(CLI) 또는 expose=[<port>](Python API)를 사용하여 공개 jobs 프록시를 통해 컨테이너 포트를 노출할 수 있습니다. 각 노출된 포트는 https://<job_id>--<port>.hf.jobs에서 접근할 수 있으며, 해당 job의 namespace에 대한 read 접근 권한이 있는 HF 토큰이 필요합니다:
curl -H "Authorization: Bearer $HF_TOKEN" https://<job_id>--<port>.hf.jobs/이 기능은 hf jobs run, hf jobs uv run 및 해당 예약 변형에서 작동합니다. 플래그를 반복하여 여러 포트를 노출할 수 있습니다(--expose 8000 --expose 8001) 또는 목록에 여러 포트를 전달할 수 있습니다(expose=[8000, 8001]).
HF 토큰 없이 포트를 접근 가능하게 하려면 --expose-public <port>(CLI) 또는 expose_public=[<port>](Python API)을 대신 사용하세요. URL을 가진 누구나 해당 포트에 접근할 수 있으므로, 공유해도 안전한 서비스에 대해서만 사용하세요. 두 옵션을 함께 사용할 수 있으며, 이 경우 일부 포트는 HF 토큰이 필요하고 다른 포트는 공개됩니다.
노출된 포트는 작업이 실행되는 동안에만 작업의 하드웨어 가격에 소액의 고정 시간당 요금이 추가됩니다. 자세한 내용은 가격 페이지를 참조하세요.
CLI
# Expose a web server running on port 8000
>>> hf jobs run --expose 8000 python:3.12 python -m http.server 8000
✓ Job started
id: 6a2aa7cec4f53f9fc5aa4cff
url: https://huggingface.co/jobs/Wauplin/6a2aa7cec4f53f9fc5aa4cff
Hint: Exposed ports are reachable at (requires an HF token with read access to the job):
https://6a2aa7cec4f53f9fc5aa4cff--8000.hf.jobs
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...Python
>>> from huggingface_hub import run_job
>>> job = run_job(image="python:3.12", command=["python", "-m", "http.server", "8000"], expose=[8000])
>>> job.status.expose_urls
['https://6a2ab384c4f53f9fc5aa4d4f--8000.hf.jobs']실행 중인 Job의 포트 변경
hf jobs expose를 사용하여 Job을 재시작하지 않고 노출할 포트를 변경할 수 있습니다:
# Expose port 8000 (requires an HF token)
>>> hf jobs expose <job_id> 8000
# Expose port 8000 (requires an HF token) and port 9000 publicly
>>> hf jobs expose <job_id> 8000 --public 9000
# Close all exposed ports
>>> hf jobs expose <job_id> --clear이 명령은 노출된 포트의 전체 목록을 대체하므로, 목록에서 제외된 포트는 닫힙니다. Python에서는 update_job_expose를 사용합니다.
SSH
실행 중인 Job에 인터랙티브 SSH 세션을 열어 디버깅, 검사 또는 컨테이너 내부에서 직접 작업할 수 있습니다. Job 생성 시 --ssh(CLI) 또는 ssh=True(Python API)로 활성화한 후, hf jobs ssh <job_id>로 연결합니다.
Job의 namespace에 Write 접근 권한이 있는 사용자만 허용됩니다(즉, Job 생성자 또는 Write 권한이 있는 소유자 조직의 멤버). 인증은 https://huggingface.co/settings/keys에 등록된 SSH 공개 키를 통해 수행됩니다.
SSH는 hf jobs run과 hf jobs uv run에서 사용할 수 있습니다. 예약된 작업에는 지원되지 않습니다.
CLI
# Start a job with SSH enabled
>>> hf jobs run --ssh --detach --timeout 10m python:3.12 sleep infinity
✓ Job started
id: 6a2bd1f1871c005b5352ad31
url: https://huggingface.co/jobs/Wauplin/6a2bd1f1871c005b5352ad31
Hint: Use `hf jobs ssh 6a2bd1f1871c005b5352ad31` to open an SSH session into the job.
# Open an SSH session into the job
>>> hf jobs ssh 6a2bd1f1871c005b5352ad31실행하지 않고 SSH 명령만 출력할 수 있습니다(--dry-run). 또는 특정 identity 파일을 전달할 수 있습니다(-i/--identity-file):
>>> hf jobs ssh 6a2bd1f1871c005b5352ad31 --dry-run
ssh 6a2bd1f1871c005b5352ad31@ssh.hf.jobs
>>> hf jobs ssh 6a2bd1f1871c005b5352ad31 -i ~/.ssh/id_ed25519Python
>>> from huggingface_hub import run_job
>>> job = run_job(image="python:3.12", command=["sleep", "infinity"], ssh=True)
>>> job.status.ssh_url
'ssh://6a2bd1f1871c005b5352ad31@ssh.hf.jobs'그 후 터미널에서 hf jobs ssh <job_id>로 연결하거나, ssh <job_id>@ssh.hf.jobs로 직접 연결할 수 있습니다.
포트 포워딩
이것은 일반적인 SSH 연결이므로, SSH의 -L 및 -R 플래그를 사용하여 로컬 머신과 Job 사이의 포트를 포워딩할 수 있습니다. ssh로 직접 연결하고(정확한 연결 주소를 확인하려면 hf jobs ssh <job_id> --dry-run을 사용하세요) 포워딩 플래그를 추가하세요.
-L(로컬 포워딩)를 사용하여 Job 내부에서 실행 중인 서비스에 로컬 머신에서 액세스합니다. 예를 들어, 학습 Job에서 시작된 TensorBoard에 액세스하려면:
# Forward local port 6006 to the Job's TensorBoard on port 6006
>>> ssh -L 6006:localhost:6006 6a2bd1f1871c005b5352ad31@ssh.hf.jobs그런 다음 브라우저에서 http://localhost:6006을(를) 엽니다.
-R(원격 포워딩)를 사용하여 Job이 사용자의 머신에서 실행 중인 서비스에 액세스할 수 있도록 합니다. 예를 들어, 로컬 데이터베이스나 API를 Job에 노출하려면:
# Make your local port 8080 reachable from inside the Job on port 8080
>>> ssh -R 8080:localhost:8080 6a2bd1f1871c005b5352ad31@ssh.hf.jobs네트워크 그룹
Jobs는 --network-group <name>(CLI) 또는 network_group="<name>"(Python API)을 사용하여 네트워크 그룹에 참여할 수 있습니다. 동일한 namespace와 resource group에서 그룹을 공유하는 Jobs는 모든 포트에서 서로에 도달할 수 있습니다. HF_NETWORK_GROUP_HOSTNAME은 모든 멤버로 해석되며, ${HF_NETWORK_GROUP_PREFIX}<alias>은 --network-alias <alias>(CLI) 또는 network_aliases=[<alias>](Python API)로 alias를 선언한 멤버로 해석됩니다.
hf jobs run 및 hf jobs uv run에서 작동합니다. 멤버는 준비가 완료되기 전에도 해석할 수 있으므로, 재시도를 포함하여 연결해야 합니다. 그룹 이름과 별칭은 소문자 영숫자 및 대시만 사용할 수 있으며, 최대 길이는 각각 46자, 34자입니다. 각 작업의 별칭은 고유해야 합니다.
CLI
# Start a server, reachable by the other members of the group as "master"
>>> hf jobs run --detach --network-group train --network-alias master python:3.12 python -m http.server 8000
# Start a client in the same group
>>> hf jobs run --detach --network-group train python:3.12 sh -c 'curl --retry 10 --retry-connrefused "http://${HF_NETWORK_GROUP_PREFIX}master:8000/"'Python
>>> from huggingface_hub import run_job
>>> server = run_job(
... image="python:3.12",
... command=["python", "-m", "http.server", "8000"],
... network_group="train",
... network_aliases=["master"],
... )
>>> client = run_job(
... image="python:3.12",
... command=["sh", "-c", 'curl --retry 10 --retry-connrefused "http://${HF_NETWORK_GROUP_PREFIX}master:8000/"'],
... network_group="train",
... )멀티 노드 학습 프레임워크는 rendezvous host로 별칭을 사용할 수 있습니다. 예를 들어 torchrun --master_addr "${HF_NETWORK_GROUP_PREFIX}master".
Timeout
Jobs에는 기본 타임아웃(30분)이 있으며, 이 시간이 지나면 자동으로 중지됩니다. 모델 학습과 같은 장기 실행 작업을 수행할 때 이 점을 알아두는 것이 중요합니다.
--timeout 파라미터를 사용하여 작업을 실행할 때 사용자 지정 타임아웃 값을 지정할 수 있습니다. 타임아웃은 두 가지 방식으로 지정할 수 있습니다:
- 숫자 (초로 해석):
--timeout를 사용하고 초 단위의 숫자를 전달합니다(여기서 2시간 = 7200초):
>>> hf jobs uv run --timeout 7200 --with torch --flavor a10g-large train.py- 시간 단위를 가진 문자열로:
또는 --timeout을 사용하여 다른 시간 단위를 사용할 수 있습니다:
>>> hf jobs uv run --timeout 2h --with torch --flavor a10g-large train.py다른 예시:
--timeout 30m # 30 minutes
--timeout 1.5h # 1.5 hours
--timeout 1d # 1 day
--timeout 3600s # 3600 seconds지원되는 시간 단위:
s- 초m- 분h- 시간d- 일
timeout을 지정하지 않으면 작업에 기본 timeout이 적용됩니다. 수 시간 이상 걸릴 수 있는 모델 학습과 같은 장기 실행 작업의 경우, 예상치 못한 작업 종료를 방지하기 위해 적절한 timeout을 설정하세요.
재시도
기본적으로 Job은 한 번만 실행됩니다. 실패한 Job을 재시도하려면 --attempts <n>(CLI) 또는 attempts=<n>(Python API)을 사용하세요. 이 숫자는 첫 번째 실행을 포함하므로, --attempts 3은 최대 두 번의 재시도를 허용합니다:
>>> hf jobs uv run --attempts 3 --flavor a10g-large train.pyhf jobs run, hf jobs uv run 및 해당 예약 변형에서 작동합니다.
재시도는 동일한 Job ID 하에서 명령을 처음부터 다시 실행합니다. 재시도가 이전 시도가 중단된 위치에서 이어서 실행되도록 하려면, 마운트된 버킷에 체크포인트를 작성하고 스크립트가 해당 체크포인트에서 이어서 실행되도록 구성하세요. 종료 후 섹션을 참조하세요.
네임스페이스
--namespace 인수를 사용하여 조직 계정에서 Jobs를 실행합니다. 조직 계정에서 Jobs를 시작하고 관리할 권한이 있는 토큰으로 로그인되어 있는지 확인하세요.
>>> hf jobs uv run --namespace my-org-name python -c "print('Running in an org account')"권한이 있는 토큰을 수동으로 전달할 수 있습니다:
>>> hf jobs uv run --namespace my-org-name --token hf_xxx python -c "print('Running in an org account')"레이블
-l 또는 --label을 사용하여 Job에 하나 이상의 라벨을 추가하면 메타데이터를 함께 추가할 수 있습니다.
이러한 메타데이터를 나중에 웹사이트나 CLI에서 Job을 필터링하는 데 사용할 수 있습니다.
--label my-label 또는 --label key=value로 라벨을 추가합니다. 키와 값에는 문자, 숫자, -, _를 사용할 수 있습니다.
예를 들어:
hf jobs uv run --label fine-tuning --label model=Qwen3-06B --label dataset=Capybara ...key를 여러 번 사용하면 마지막 key=value가 key를 가진 이전 라벨을 덮어쓰고 삭제한다는 점에 유의하세요.
작업 이름 지정
UI에서 Job을 더 쉽게 찾고 식별할 수 있도록 이름을 지정합니다. 이름은 name 레이블로 저장되며 고유할 필요가 없습니다. UI에서는 Job이 이름별로 그룹화됩니다.
hf jobs run --name daily-report python:3.12 python report.py--name를 전달하지 않으면 Job은 Docker 이미지 또는 스크립트 이름과 명령어의 짧은 해시로 이름이 지정됩니다. 따라서 동일한 명령어의 재실행은 동일한 이름을 공유하고, 다른 명령어는 서로 다른 이름을 갖게 됩니다(예: python:3.12에서 실행되는 Job의 경우 python-3-12-6b9d662c).
레이블 업데이트
hf jobs labels를 사용하여 기존 Job의 라벨을 업데이트합니다. --label을 전달하면 모든 기존 라벨이 대체되고, --name만 전달하면 기존 라벨이 유지됩니다:
# Replace the labels on a Job
hf jobs labels <job_id> --label env=prod --label team=ml
# Name an existing Job (keeps its other labels)
hf jobs labels <job_id> --name daily-report
# Remove all labels from a Job
hf jobs labels <job_id> --clear