Hub documentation

Cấu hình

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Cấu hình

Xác thực

Bạn cần xác thực bằng hf auth login để chạy Jobs, và sử dụng token có quyền khởi động và quản lý Jobs.

Ngoài ra, bạn có thể truyền token Hugging Face thủ công bằng cách sử dụng --token trong CLI, hoặc tham số token trong Python.

Truyền các đối số

Sử dụng -- để tách các tùy chọn của Jobs khỏi lệnh hoặc script của bạn cùng với các đối số của chúng. Các tùy chọn sau --, chẳng hạn như --help hoặc --timeout, sẽ được truyền qua thay vì được Jobs diễn giải. Điều này áp dụng cho cả Jobs UV và Docker.

hf jobs uv run --flavor t4-small -- script.py --early-stopping-patience 3
               └─ Jobs option ┘    └─ script + arguments ─────────────┘

UV Jobs

Chỉ định kịch bản UV hoặc lệnh python để chạy như bạn vẫn làm với UV:

>>> hf jobs uv run train.py
>>> hf jobs uv run python -c 'print("Hello from the cloud!")'

Lệnh hf jobs uv run chấp nhận một đối số UV như --with và --python. Đối số --with cho phép bạn chỉ định các phụ thuộc python, và --python cho phép bạn chọn phiên bản python cần sử dụng:

>>> hf jobs uv run --with trl train.py
>>> hf jobs uv run --python 3.12 train.py

Ví dụ, truyền các đối số cho một lệnh bằng cách sử dụng --:

>>> hf jobs uv run --with trl-jobs -- trl-jobs sft --model_name Qwen/Qwen3-0.6B --dataset_name trl-lib/Capybara

Tìm danh sách tất cả các đối số trong tài liệu CLI và tài liệu Lệnh UV.

Mặc định, UV Jobs chạy với ảnh Docker ghcr.io/astral-sh/uv:python3.12-bookworm, nhưng bạn có thể sử dụng một ảnh khác miễn là nó đã cài đặt UV, bằng cách dùng --image <docker-image>.

Xem Sử dụng hình ảnh Docker để chọn hình ảnh và hiểu cách môi trường của nó tương tác với các phụ thuộc UV.

Định nghĩa cấu hình khởi chạy trong script

Một script chỉ chạy đúng trên một runtime cụ thể (một image, loại GPU hoặc trình thông dịch hệ thống nhất định) có thể mang theo cấu hình đó trong bảng tùy chọn [tool.hf-jobs] của phần header PEP 723:

# /// 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 sau đó khởi chạy trên image và phần cứng đó. Lệnh uv run thông thường sẽ bỏ qua bảng, vì các bảng [tool.*] là một phần của PEP 723 và các công cụ sẽ bỏ qua những bảng không thuộc về chúng.

Các khóa được hỗ trợ, tất cả đều tùy chọn: image, flavor, python, timeout, name, namespace, env, secrets, labels, volumes, network_group và network_aliases. Chúng ánh xạ đến các cờ có cùng tên. Giá trị từ script là mặc định: cờ được chỉ định rõ luôn có ưu tiên, và env, secrets, labels cùng volumes được gộp từng mục một, do đó -e và -v bổ sung vào những gì script khai báo. Một khóa không xác định sẽ gây lỗi, và secrets chỉ liệt kê tên: giá trị được lấy từ môi trường của người chạy script, và một secret chưa được đặt cục bộ cũng sẽ gây lỗi.

Sử dụng --dry-run để in cấu hình đã được phân giải mà không gửi; các giá trị đến từ script được đánh dấu (from script). Xem hướng dẫn CLI hf để biết các quy tắc hợp nhất đầy đủ.

Bảng chỉ được đọc bởi CLI hf. run_uv_job() và create_scheduled_uv_job() bỏ qua bảng này, vì vậy hãy truyền image=, flavor=, … một cách tường minh từ Python.

Docker Jobs

Chỉ định hình ảnh Docker và lệnh cần chạy giống như khi bạn dùng docker:

>>> hf jobs run ubuntu echo "Hello from the cloud!"

Ở đây, --help được chuyển đến Python thay vì hiển thị trợ giúp cho Jobs:

>>> hf jobs run --flavor cpu-basic python:3.12 -- python --help

Tìm danh sách tất cả các đối số trong tài liệu CLI.

Xem Sử dụng hình ảnh Docker để biết các ví dụ sử dụng các hình ảnh có sẵn và các hình ảnh được xây dựng bởi Docker Spaces.

Biến môi trường và Secrets

Biến môi trường tích hợp sẵn

Tương tự như các biến môi trường tích hợp trong Spaces, Jobs tự động cung cấp các biến môi trường sau bên trong container:

BiếnMô tả
JOB_IDĐịnh danh duy nhất của tác vụ hiện tại (ví dụ: 699d874f1aad19adb8aaeadc). Đây là cùng một ID được hiển thị trong giao diện người dùng và URL của tác vụ.
ACCELERATORLoại bộ tăng tốc khả dụng (ví dụ: t4-medium, a10g-small, a100x4), hoặc none cho các tác vụ chỉ dùng CPU.
CPU_CORESSố lượng lõi CPU được phân bổ cho công việc.
MEMORYLượng bộ nhớ được cấp phát cho công việc (ví dụ: 8Gi).
HF_NETWORK_GROUP_HOSTNAMEHostname được phân giải cho mọi job trong nhóm mạng của job. Chỉ được đặt khi job khai báo một nhóm mạng.
HF_NETWORK_GROUP_PREFIXTiền tố để thêm vào đầu một alias nhằm lấy tên máy chủ (hostname) của các thành viên nhóm đang khai báo alias đó (ví dụ: ${HF_NETWORK_GROUP_PREFIX}master). Chỉ được đặt khi job khai báo một nhóm mạng.

Bạn có thể sử dụng các biến này để theo dõi đầu ra, điều chỉnh mã của bạn theo các tài nguyên khả dụng, hoặc tham chiếu công việc hiện tại một cách lập trình:

# 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\")}')"

Biến môi trường do người dùng định nghĩa

Bạn có thể truyền các biến môi trường cho tác vụ của mình bằng

# 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"])'

Sử dụng --secrets HF_TOKEN để truyền token Hugging Face cục bộ của bạn một cách ngầm. Với cú pháp này, bí mật sẽ được lấy từ biến môi trường. Đối với HF_TOKEN, nếu biến môi trường chưa được đặt, hệ thống có thể đọc tệp token nằm trong thư mục home của Hugging Face.

Dung lượng

Gắn các kho Hugging Face (mô hình, bộ dữ liệu), Storage Buckets hoặc các thư mục cục bộ dưới dạng volume trong container công việc của bạn bằng cách sử dụng -v hoặc --volume. Nguồn Hub sử dụng lược đồ URL hf://: hf://[TYPE/]SOURCE:/MOUNT_PATH[:ro]; một thư mục cục bộ được truyền trực tiếp dưới dạng nguồn.

Vì các tệp được gắn (mounted) sẽ được tải về một cách lười (lazily), việc gắn tệp cho phép một Job làm việc với các bộ dữ liệu lớn hơn nhiều so với ổ đĩa cục bộ của nó. Xem Xử lý bộ dữ liệu lớn để tìm hiểu về việc gắn tệp, phát trực tiếp (streaming) và xử lý dữ liệu lớn trên Jobs.

Các kiểu volume:

LoạiVí dụ
Kho mô hình-v hf://openai/gpt-oss-120b:/model
Kho dữ liệu-v hf://datasets/stanfordnlp/imdb:/data
Thùng chứa lưu trữ-v hf://buckets/username/my-bucket:/mnt
Thư mục con-v hf://datasets/org/my-dataset/train:/data
Thư mục cục bộ-v ./training-data:/data

Sau đó, sử dụng volume đã gắn như một thư mục cục bộ bên trong container:

# 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

Có thể gắn nhiều ổ đĩa bằng cách lặp lại cờ -v:

>>> hf jobs run -v hf://datasets/username/my-dataset:/data -v hf://buckets/username/my-bucket:/output \
...     python:3.12 python script.py

Mô hình và bộ dữ liệu luôn được gắn chỉ đọc. Các bucket lưu trữ mặc định là đọc-ghi, hữu ích để lưu trữ kết quả đầu ra, checkpoint hoặc kết quả trung gian. Sử dụng :ro để gắn bucket ở chế độ chỉ đọc:

>>> hf jobs run -v hf://buckets/username/my-bucket:/mnt:ro python:3.12 ls /mnt

Thư mục cục bộ

Việc truyền một thư mục cục bộ làm nguồn sẽ đồng bộ nó vào Storage Bucket jobs-artifacts riêng tư (được tạo tự động) trước khi Job bắt đầu, sau đó gắn nó vào container. Các thư mục cục bộ được gắn chỉ đọc theo mặc định; sử dụng :rw để ghi kết quả đầu ra:

>>> hf jobs uv run -v ./pdfs:/input -v ./md-out:/output:rw ocr.py

Việc đồng bộ lại cùng một thư mục chỉ tải lên các tệp mới hoặc đã bị sửa đổi. Để lấy các tệp mà một Job đã ghi vào một volume đọc-ghi, hãy đồng bộ thư mục bucket của nó trở lại sau khi Job kết thúc — CLI sẽ in ra lệnh hf buckets sync chính xác khi Job bắt đầu. Các job được lên lịch cũng hoạt động: thư mục được đồng bộ một lần khi lịch được tạo, và mỗi lần kích hoạt sẽ gắn cùng một thư mục đó. Trong Python, hãy sử dụng sync_job_volume.

Trong Python, hãy sử dụng lớp 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"),
    ],
)

Volume mounting yêu cầu huggingface_hub >= 1.8.0. Xem tài liệu Python client và hướng dẫn cài đặt để biết thêm chi tiết.

Loại phần cứng

Chạy các tác vụ trên GPU hoặc TPU bằng đối số flavor. Ví dụ, để chạy một tác vụ PyTorch trên GPU A10G:

>>> 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()}')"

Chạy lệnh này sẽ hiển thị kết quả sau!

This code ran with the following GPU: NVIDIA A10G

Dưới đây là một ví dụ khác để chạy một script tinh chỉnh như 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 ...

Để có hướng dẫn chi tiết về việc chạy các tác vụ huấn luyện mô hình bằng TRL trên hạ tầng của Hugging Face, hãy xem tài liệu Huấn luyện TRL Jobs. Tài liệu này bao gồm các công thức tinh chỉnh, lựa chọn phần cứng và các thực hành tốt nhất để huấn luyện mô hình một cách hiệu quả.

Xem danh sách các tùy chọn --flavor khả dụng bằng lệnh hf jobs hardware (mặc định là 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

Tiết lộ các Cổng

Jobs có thể phơi bày các cổng container thông qua proxy jobs công khai bằng cách sử dụng --expose <port> (CLI) hoặc expose=[<port>] (Python API). Mỗi cổng được phơi bày có thể truy cập tại https://<job_id>--<port>.hf.jobs và yêu cầu một HF token có quyền read đối với namespace của job:

curl -H "Authorization: Bearer $HF_TOKEN" https://<job_id>--<port>.hf.jobs/

Cách này hoạt động với hf jobs run, hf jobs uv run và các biến thể được lên lịch của chúng. Lặp lại cờ để phơi bày nhiều cổng (--expose 8000 --expose 8001), hoặc truyền nhiều cổng trong danh sách (expose=[8000, 8001]).

Để làm cho một cổng (port) có thể truy cập được mà không cần token HF, hãy dùng --expose-public <port> (CLI) hoặc expose_public=[<port>] (Python API) thay thế. Bất kỳ ai có URL đều có thể truy cập cổng đó, vì vậy chỉ nên dùng cho dịch vụ an toàn để chia sẻ. Bạn có thể kết hợp cả hai tùy chọn: một số cổng khi đó sẽ yêu cầu token HF và một số khác là công khai.

Các cổng được mở sẽ được tính phí theo mức cố định nhỏ theo giờ, cộng thêm vào giá phần cứng của tác vụ, chỉ trong khi tác vụ đang chạy. Xem trang định giá để biết chi tiết.

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']

Thay đổi các cổng của một Job đang chạy

Sử dụng hf jobs expose để thay đổi các cổng được mở, mà không cần khởi động lại 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

Lệnh này thay thế toàn bộ danh sách các cổng được phơi bày, do đó một cổng mà bạn bỏ qua sẽ bị đóng. Trong Python, hãy sử dụng update_job_expose.

SSH

Bạn có thể mở một phiên SSH tương tác vào một Job đang chạy để gỡ lỗi, kiểm tra hoặc làm việc trực tiếp bên trong container. Bật tính năng này khi tạo job bằng --ssh (CLI) hoặc ssh=True (Python API), sau đó kết nối bằng hf jobs ssh <job_id>.

Chỉ những người dùng có quyền Write đối với namespace của Job mới được phép (tức là người tạo Job, hoặc các thành viên của tổ chức sở hữu có quyền Write). Xác thực được thực hiện thông qua các khóa công khai SSH được đăng ký tại https://huggingface.co/settings/keys.

SSH có sẵn trên hf jobs run và hf jobs uv run. Nó không được hỗ trợ cho các tác vụ được lên lịch.

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

Bạn cũng có thể in ra lệnh SSH mà không thực thi nó (--dry-run), hoặc truyền một tệp identity cụ thể (-i/--identity-file):

>>> hf jobs ssh 6a2bd1f1871c005b5352ad31 --dry-run
ssh 6a2bd1f1871c005b5352ad31@ssh.hf.jobs

>>> hf jobs ssh 6a2bd1f1871c005b5352ad31 -i ~/.ssh/id_ed25519

Python

>>> 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'

Sau đó, kết nối từ terminal bằng hf jobs ssh <job_id>, hoặc trực tiếp bằng ssh <job_id>@ssh.hf.jobs.

Chuyển tiếp cổng

Vì đây là kết nối SSH thông thường, bạn có thể sử dụng các cờ -L và -R của SSH để chuyển tiếp cổng giữa máy của bạn và Job. Kết nối trực tiếp bằng ssh (dùng hf jobs ssh <job_id> --dry-run để lấy đích chính xác) và thêm các cờ chuyển tiếp.

Sử dụng -L (chuyển tiếp cục bộ) để truy cập dịch vụ đang chạy bên trong Job từ máy của bạn. Ví dụ, để kết nối với TensorBoard được khởi động trong một Job huấn luyện:

# Forward local port 6006 to the Job's TensorBoard on port 6006
>>> ssh -L 6006:localhost:6006 6a2bd1f1871c005b5352ad31@ssh.hf.jobs

Sau đó, mở http://localhost:6006 trong trình duyệt của bạn.

Sử dụng -R (chuyển tiếp từ xa) để cho phép Job truy cập dịch vụ đang chạy trên máy của bạn. Ví dụ, để mở một cơ sở dữ liệu hoặc API cục bộ cho Job:

# Make your local port 8080 reachable from inside the Job on port 8080
>>> ssh -R 8080:localhost:8080 6a2bd1f1871c005b5352ad31@ssh.hf.jobs

Các nhóm mạng

Jobs có thể tham gia một nhóm mạng bằng cách sử dụng --network-group <name> (CLI) hoặc network_group="<name>" (Python API). Các jobs trong cùng một namespace và resource group chia sẻ một nhóm có thể liên lạc với nhau trên mọi port: HF_NETWORK_GROUP_HOSTNAME được phân giải thành mọi thành viên, và ${HF_NETWORK_GROUP_PREFIX}<alias> được phân giải thành các thành viên đã yêu cầu một alias bằng --network-alias <alias> (CLI) hoặc network_aliases=[<alias>] (Python API).

Cách này hoạt động với hf jobs run và hf jobs uv run. Các thành viên có thể được phân giải trước khi chúng sẵn sàng, vì vậy hãy kết nối với cơ chế thử lại. Tên nhóm và alias là các ký tự chữ số thường và dấu gạch nối, tối đa 46 và 34 ký tự; alias của một job phải là duy nhất.

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

Các framework huấn luyện đa nút có thể sử dụng một alias làm host rendezvous, ví dụ torchrun --master_addr "${HF_NETWORK_GROUP_PREFIX}master".

Timeout

Jobs có thời gian chờ mặc định (30 phút), sau đó chúng sẽ tự động dừng. Điều này rất quan trọng cần biết khi chạy các tác vụ kéo dài như huấn luyện mô hình.

Bạn có thể chỉ định giá trị timeout tùy chỉnh bằng cách sử dụng tham số --timeout khi chạy một job. Timeout có thể được chỉ định theo hai cách:

  1. Dưới dạng số (được hiểu là giây):

Sử dụng --timeout và truyền số giây (ở đây 2 giờ = 7200 giây):

>>> hf jobs uv run --timeout 7200 --with torch --flavor a10g-large train.py
  1. Dưới dạng chuỗi có đơn vị thời gian:

Hoặc sử dụng --timeout và dùng các đơn vị thời gian khác nhau:

>>> hf jobs uv run --timeout 2h --with torch --flavor a10g-large train.py

Một số ví dụ khác:

--timeout 30m    # 30 minutes
--timeout 1.5h   # 1.5 hours
--timeout 1d     # 1 day
--timeout 3600s  # 3600 seconds

Các đơn vị thời gian được hỗ trợ:

  • s - giây
  • m - phút
  • h - giờ
  • d - ngày

Nếu bạn không chỉ định thời gian chờ, một thời gian chờ mặc định sẽ được áp dụng cho tác vụ của bạn. Đối với các tác vụ chạy lâu như huấn luyện mô hình có thể mất nhiều giờ, hãy đảm bảo thiết lập thời gian chờ phù hợp để tránh việc tác vụ bị kết thúc bất ngờ.

Thử lại

Mặc định, một Job chỉ chạy một lần. Sử dụng --attempts <n> (CLI) hoặc attempts=<n> (Python API) để chạy lại một Job bị lỗi. Số lần này bao gồm cả lần chạy đầu tiên, do đó --attempts 3 cho phép tối đa hai lần chạy lại:

>>> hf jobs uv run --attempts 3 --flavor a10g-large train.py

Điều này hoạt động với hf jobs run, hf jobs uv run và các biến thể được lên lịch của chúng.

Một lần thử lại sẽ chạy lại lệnh từ đầu, dưới cùng một Job ID. Để cho phép một lần thử lại tiếp tục từ nơi lần thử trước đã dừng lại, hãy ghi checkpoint vào một bucket được gắn (mounted) và để script của bạn tiếp tục từ các checkpoint đó. Xem Sau khi kết thúc trong Train Models on Jobs.

Namespace

Chạy Jobs dưới tài khoản tổ chức của bạn bằng cách sử dụng đối số --namespace. Hãy đảm bảo bạn đã đăng nhập bằng một token có quyền khởi động và quản lý Jobs dưới tài khoản tổ chức của bạn.

>>> hf jobs uv run --namespace my-org-name python -c "print('Running in an org account')"

Lưu ý rằng bạn có thể truyền thủ công một token có quyền phù hợp:

>>> hf jobs uv run --namespace my-org-name --token hf_xxx python -c "print('Running in an org account')"

Nhãn

Thêm một hoặc nhiều nhãn vào một Job bằng cách sử dụng -l hoặc --label để bổ sung một số metadata. Bạn có thể sử dụng metadata này sau đó để lọc các Job trên trang web hoặc trong CLI.

Thêm nhãn bằng --label my-label hoặc nhãn dạng cặp khóa-giá trị bằng --label key=value. Khóa và giá trị có thể chứa chữ cái, chữ số, - và _. Ví dụ:

hf jobs uv run --label fine-tuning --label model=Qwen3-06B --label dataset=Capybara ...

Lưu ý rằng việc sử dụng cùng một key nhiều lần sẽ khiến key=value cuối cùng ghi đè và loại bỏ mọi nhãn trước đó có key.

Đặt tên cho một công việc

Đặt tên cho Job để dễ dàng tìm kiếm và nhận diện trong UI. Tên được lưu dưới dạng nhãn name và không nhất thiết phải duy nhất. Trong UI, các Job sẽ được nhóm theo tên.

hf jobs run --name daily-report python:3.12 python report.py

Nếu bạn không truyền --name, Job sẽ được đặt tên theo Docker image hoặc script của nó kèm theo một hash ngắn của lệnh, do đó các lần chạy lại cùng một lệnh sẽ dùng chung tên trong khi các lệnh khác nhau sẽ có tên khác nhau (ví dụ python-3-12-6b9d662c cho một Job chạy trên python:3.12).

Cập nhật nhãn

Cập nhật nhãn cho một Job hiện có bằng hf jobs labels. Truyền --label sẽ thay thế tất cả các nhãn hiện có; chỉ truyền --name sẽ giữ nguyên chúng:

# 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
Update on GitHub