Hub documentation
الإعداد
الإعداد
المصادقة
يجب أن تكون مسجلاً الدخول باستخدام hf auth login لتشغيل Jobs، مع استخدام رمز (token) يحمل صلاحية بدء وإدارة Jobs.
بديلًا عن ذلك، يمكنك تمرير رمز Hugging Face يدويًا باستخدام --token في سطر الأوامر، أو باستخدام معامل token في Python.
تمرير الحُجج
استخدم -- لفصل خيارات Jobs عن الأمر أو السكربت الخاص بك وحوامله. الخيارات التي تأتي بعد --، مثل --help أو --timeout، تُمرَّر كما هي دون أن يفسرها Jobs.
ينطبق هذا على كل من UV وDocker Jobs.
hf jobs uv run --flavor t4-small -- script.py --early-stopping-patience 3
└─ Jobs option ┘ └─ script + arguments ─────────────┘وظائف UV
حدد سكربت UV أو أمر python الذي تريد تشغيله كما تفعل مع UV:
>>> hf jobs uv run train.py>>> hf jobs uv run python -c 'print("Hello from the cloud!")'يقبل الأمر hf jobs uv run حجة UV مثل --with و--python. يتيح لك الحجة --with تحديد تبعيات بايثون، بينما يتيح لك --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/Capybaraابحث عن قائمة بجميع الحُجج في توثيق سطر الأوامر وتوثيق أوامر UV.
تعمل مهام UV افتراضيًا مع صورة Docker ghcr.io/astral-sh/uv:python3.12-bookworm، لكن يمكنك استخدام صورة أخرى طالما تم تثبيت UV فيها، وذلك باستخدام --image <docker-image>.
راجع استخدام صور Docker للاختيار بين الصور وفهم كيفية تفاعل بيئة الصورة مع تبعيات UV.
تعريف إعدادات الإقلاع في السكربت
يمكن لنص برمجي يعمل بشكل صحيح فقط على بيئة تشغيل محددة (صورة معينة، أو نوع معيّن من وحدات معالجة الرسوميات، أو مُفسِّر نظام) أن يحمل معه ذلك الإعداد، في جدول اختياري [tool.hf-jobs] ضمن ترويسة 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 ثم يُشغَّل على ذلك الصورة والعتاد. أما uv run العادي فيتجاهل الجدول، لأن جداول [tool.*] جزء من PEP 723 والأدوات تتخطى تلك التي لا تملكها.
المفاتيح المدعومة، وكلها اختيارية: image، flavor، python، timeout، name، namespace، env، secrets، labels، volumes، network_group وnetwork_aliases. تتطابق هذه المفاتيح مع الأعلام (flags) التي تحمل نفس الأسماء. القيم الواردة من السكربت هي قيم افتراضية: فالعلم الصريح يفوز دائمًا، وتتم دمج env وsecrets وlabels وvolumes عنصرًا بعنصر، بحيث يضيف -e و-v إلى ما يصرّح به السكربت. يُعدّ المفتاح غير المعروف خطأً، وقائمة secrets تحوي الأسماء فقط: فالقيم تأتي من بيئة من يشغّل السكربت، ويُعدّ أي سر غير مُعيَّن محليًا خطأً أيضًا.
استخدم --dry-run لطباعة الإعدادات المُحلّة دون إرسالها؛ حيث تُوسم القيم القادمة من السكربت بـ (from script). راجع دليل سطر أوامر hf لمعرفة قواعد الدمج الكاملة.
تُقرأ الجدولة بواسطة سطر الأوامر
hfفقط. وتتجاهل الدالتانrun_uv_job()وcreate_scheduled_uv_job()هذه الجدولة، لذا مرّرimage=وflavor=و… بشكل صريح من بايثون.
مهام Docker
حدد صورة Docker والأمر الذي تريد تشغيله كما تفعل مع docker:
>>> hf jobs run ubuntu echo "Hello from the cloud!"هنا، --help يصل إلى Python بدلاً من عرض مساعدة Jobs:
>>> hf jobs run --flavor cpu-basic python:3.12 -- python --helpابحث عن قائمة بجميع الحُجج في توثيق سطر الأوامر.
راجع استخدام صور Docker للحصول على أمثلة باستخدام الصور الموجودة مسبقًا والصور التي تم بناؤها بواسطة Docker Spaces.
متغيرات البيئة والأسرار
متغيرات البيئة المدمجة
وبنفس الطريقة التي توفر بها متغيرات البيئة المدمجة في Spaces، توفر Jobs تلقائيًا متغيرات البيئة التالية داخل الحاوية:
| متغير | الوصف |
|---|---|
JOB_ID | المعرّف الفريد للوظيفة الحالية (مثل 699d874f1aad19adb8aaeadc). هذا هو المعرّف نفسه المعروض في واجهة المستخدم وفي عنوان URL الخاص بالوظيفة. |
ACCELERATOR | نوع المُسرِّع المتاح (مثل t4-medium، a10g-small، a100x4)، أو none للمهام التي تعمل على وحدة المعالجة المركزية فقط. |
CPU_CORES | عدد أنوية وحدة المعالجة المركزية المخصصة للمهمة. |
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 الرئيسي إذا لم يتم تعيين متغير البيئة.
الأحجام
اربط مستودعات Hugging Face (النماذج، مجموعات البيانات)، أو Storage Buckets، أو المجلدات المحلية كمجلدات في حاوية مهمتك باستخدام -v أو --volume. تستخدم مصادر Hub مخطط عنوان hf://: hf://[TYPE/]SOURCE:/MOUNT_PATH[:ro]؛ بينما يُمرر المجلد المحلي مباشرةً كمصدر.
بما أن الملفات المرفقة تُجلب بشكل كسول، يتيح التثبيت للعمل Job التعامل مع مجموعات بيانات أكبر بكثير من القرص المحلي الخاص به. راجع معالجة مجموعات البيانات الكبيرة للتثبيت والبث ومعالجة البيانات الضخمة على Jobs.
أنواع الأحجام:
| النوع | مثال |
|---|---|
| مستودع النموذج | -v hf://openai/gpt-oss-120b:/model |
| مستودع مجموعة البيانات | -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المجلدات المحلية
عند تمرير مجلد محلي كمصدر، يتم مزامنته مع Storage Bucket الخاص بك jobs-artifacts (يُنشأ تلقائيًا) قبل بدء المهمة، ثم يُركَّب داخل الحاوية. تُركَّب المجلدات المحلية للقراءة فقط افتراضيًا؛ استخدم :rw لكتابة المخرجات:
>>> hf jobs uv run -v ./pdfs:/input -v ./md-out:/output:rw ocr.pyإعادة مزامنة نفس المجلد ترفع الملفات الجديدة أو المعدّلة فقط. لاسترجاع الملفات التي كتبها Job إلى مجلد قابل للقراءة والكتابة، قم بمزامنة مجلد bucket الخاص به مرة أخرى بعد انتهاء الـ 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. راجع توثيق عميل بايثون ودليل التثبيت لمزيد من التفاصيل.
نوع العتاد
شغّل المهام على وحدات معالجة الرسوميات (GPUs) أو وحدات المعالجة المخصصة (TPUs) باستخدام الحجة flavor. على سبيل المثال، لتشغيل مهمة PyTorch على وحدة معالجة رسومات 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()}')"عند تشغيل هذا، ستظهر المخرجات التالية!
This code ran with the following GPU: NVIDIA A10Gفيما يلي مثال آخر لتشغيل سكربت الضبط الدقيق مثل 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 ...للحصول على إرشادات شاملة حول تشغيل مهام تدريب النماذج باستخدام TRL على بنية Hugging Face التحتية، راجع توثيق تدريب مهام TRL. يتناول هذا التوثيق وصفات الضبط الدقيق، واختيار الأجهزة، وأفضل الممارسات لتدريب النماذج بكفاءة.
شاهد قائمة خيارات --flavor المتاحة باستخدام الأمر hf jobs hardware (الافتراضي هو 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تفعيل المنافذ
يمكن للمهام كشف منافذ الحاويات عبر وكيل المهام العام باستخدام --expose <port> (سطر الأوامر) أو expose=[<port>] (واجهة برمجة التطبيقات بلغة بايثون). يمكن الوصول إلى كل منفذ مكشوف عبر https://<job_id>--<port>.hf.jobs ويتطلب ذلك رمز HF مع صلاحية read على مساحة أسماء المهمة:
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> (سطر الأوامر) أو expose_public=[<port>] (واجهة برمجة التطبيقات بلغة بايثون) بدلاً من ذلك. يمكن لأي شخص لديه الرابط الوصول إلى المنفذ، لذا استخدمه فقط لخدمة آمنة للمشاركة. يمكنك دمج الخيارين معًا: بعض المنافذ تتطلب رمز HF بينما تكون الأخرى عامة.
تُحتسب رسوم المنافذ المكشوفة بسعر ثابت منخفض لكل ساعة، يُضاف إلى سعر العتاد الخاص بالمهمة، وذلك فقط أثناء تشغيل المهمة. راجع صفحة التسعير للاطلاع على التفاصيل.
سطر الأوامر
# 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']تغيير المنافذ (Ports) لوظيفة (Job) قيد التشغيل
استخدم hf jobs expose لتغيير المنافذ المكشوفة دون إعادة تشغيل المهمة:
# 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يستبدل الأمر القائمة الكاملة للموانئ المكشوفة، لذا فإن أي منفذ لا تدرجه سيُغلق. في بايثون، استخدم update_job_expose.
SSH
يمكنك فتح جلسة SSH تفاعلية إلى مهمة قيد التشغيل للتصحيح أو الفحص أو العمل مباشرة داخل الحاوية. فعّلها عند إنشاء المهمة باستخدام --ssh (سطر الأوامر) أو ssh=True (واجهة برمجة التطبيقات بلغة بايثون)، ثم اتصل باستخدام hf jobs ssh <job_id>.
يُسمح فقط للمستخدمين الذين لديهم صلاحية الكتابة (Write) في مساحة الاسم (namespace) الخاصة بالمهمة (Job) (أي منشئ المهمة، أو أعضاء المنظمة المالكة الذين لديهم صلاحيات كتابة). يتم تنفيذ المصادقة عبر مفاتيح SSH العامة المسجلة في https://huggingface.co/settings/keys.
يتوفر SSH في hf jobs run وhf jobs uv run. ولا يُدعم في المهام المجدولة.
سطر الأوامر
# 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)، أو تمرير ملف هوية محدد (-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 عادي، يمكنك استخدام علمي -L و-R في SSH لتحويل المنافذ بين جهازك والمهمة. اتصل مباشرة باستخدام ssh (استخدم hf jobs ssh <job_id> --dry-run للحصول على الوجهة الدقيقة) وأضف أعلام التحويل.
استخدم -L (إعادة التوجيه المحلية) للوصول إلى خدمة تعمل داخل المهمة من جهازك. على سبيل المثال، للوصول إلى 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 (إعادة التوجيه عن بُعد) للسماح للوظيفة بالوصول إلى خدمة تعمل على جهازك. على سبيل المثال، لتعريض قاعدة بيانات محلية أو واجهة برمجة تطبيقات للوظيفة:
# Make your local port 8080 reachable from inside the Job on port 8080
>>> ssh -R 8080:localhost:8080 6a2bd1f1871c005b5352ad31@ssh.hf.jobsمجموعات الشبكات
يمكن للمهام الانضمام إلى مجموعة شبكة باستخدام --network-group <name> (سطر الأوامر) أو network_group="<name>" (واجهة برمجة التطبيقات بلغة بايثون). يمكن للمهام الموجودة في نفس مساحة الأسماء ومجموعة الموارد والتي تتشارك في مجموعة واحدة الوصول إلى بعضها البعض على كل منفذ: يحل HF_NETWORK_GROUP_HOSTNAME إلى كل عضو، بينما يحل ${HF_NETWORK_GROUP_PREFIX}<alias> إلى الأعضاء الذين ادّعوا مستعارًا باستخدام --network-alias <alias> (سطر الأوامر) أو network_aliases=[<alias>] (واجهة برمجة التطبيقات بلغة بايثون).
يعمل هذا مع hf jobs run وhf jobs uv run. يمكن تحديد الأعضاء قبل أن يصبحوا جاهزين، لذا اتصل بإعادة المحاولة. أسماء المجموعات والرموز المستعارة أحرف صغيرة وأرقام وشرطات، بحد أقصى 46 و34 حرفًا على التوالي؛ ويجب أن تكون رموز المستعرات الخاصة بالوظيفة فريدة.
سطر الأوامر
# 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",
... )يمكن لأطر عمل التدريب متعددة العقد استخدام اسم مستعار كمضيف للقاء، على سبيل المثال torchrun --master_addr "${HF_NETWORK_GROUP_PREFIX}master".
مهلة
تتمتع المهلات بوقت انقضاء افتراضي (30 دقيقة)، وبعد انقضائه تتوقف تلقائيًا. من المهم معرفة ذلك عند تشغيل مهام طويلة الأمد مثل تدريب النماذج.
يمكنك تحديد قيمة مهلة مخصصة باستخدام معامل --timeout عند تشغيل مهمة. يمكن تحديد المهلة بطريقتين:
- كعدد (يُفسَّر على أنه ثوانٍ):
استخدم --timeout وقم بتمرير العدد بالثواني (هنا ساعتان = 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- أيام
إذا لم تحدد مهلة زمنية، فسيتم تطبيق مهلة زمنية افتراضية على مهمتك. بالنسبة للمهام طويلة الأمد مثل تدريب النماذج التي قد تستغرق ساعات، تأكد من تحديد مهلة زمنية مناسبة لتجنب إنهاء المهمة بشكل غير متوقع.
المحاولات المتكررة
بشكل افتراضي، يُنفَّذ Job مرة واحدة. استخدم --attempts <n> (CLI) أو attempts=<n> (Python API) لإعادة محاولة Job يفشل. يشمل العدد التنفيذ الأول، لذا يسمح --attempts 3 بإجراء محاولتين لإعادة المحاولة كحد أقصى:
>>> hf jobs uv run --attempts 3 --flavor a10g-large train.pyيعمل هذا مع hf jobs run وhf jobs uv run وأنواعهما المجدولة.
تُعيد محاولة إعادة التشغيل تشغيل الأمر مرة أخرى من البداية، تحت معرّف المهمة (Job ID) نفسه. للسماح للمحاولة الجديدة بمواصلة العمل من حيث توقفت المحاولة السابقة، اكتب نقاط التفتيش (checkpoints) إلى دلو (bucket) مُثبّت، واجعل سكربتك يستأنف من تلك النقاط. راجع بعد انتهائها في تدريب النماذج على المهام (Jobs).
المجال
شغّل المهام تحت حساب مؤسستك باستخدام الحجة --namespace. تأكد من تسجيل الدخول برمز وصول (token) يمنحك صلاحية بدء المهام وإدارتها تحت حساب مؤسستك.
>>> hf jobs uv run --namespace my-org-name python -c "print('Running in an org account')"لاحظ أنه يمكنك تمرير رمز (token) يدويًا مع الإذن المناسب:
>>> hf jobs uv run --namespace my-org-name --token hf_xxx python -c "print('Running in an org account')"التسميات
أضِف واحدة أو أكثر من التسميات إلى مهمة لإضافة بعض البيانات الوصفية باستخدام -l أو --label.
يمكنك استخدام هذه البيانات الوصفية لاحقًا لتصفية المهام على الموقع أو في سطر الأوامر.
أضِف تسميات باستخدام --label my-label أو تسميات بمفتاح وقيمة باستخدام --label key=value. يمكن أن تحتوي المفاتيح والقيم على أحرف وأرقام و- و_.
على سبيل المثال:
hf jobs uv run --label fine-tuning --label model=Qwen3-06B --label dataset=Capybara ...لاحظ أن استخدام نفس key عدة مرات يؤدي إلى أن key=value الأخير يتجاوز ويلغي أي تسمية سابقة تحمل key.
تسمية مهمة
امنح المهمة اسمًا ليسهل العثور عليها وتحديد هويتها في واجهة المستخدم. يُخزَّن الاسم كوسم name ولا يشترط أن يكون فريدًا. في واجهة المستخدم، تُجمَّع المهام حسب الاسم.
hf jobs run --name daily-report python:3.12 python report.pyإذا لم تُمرّر --name، يُسمّى Job باسم صورة Docker أو السكربت الخاص به بالإضافة إلى تجزئة قصيرة للأمر، بحيث تتشارك إعادة تشغيلات نفس الأمر الاسم نفسه بينما تحصل الأوامر المختلفة على أسماء مختلفة (مثل python-3-12-6b9d662c لـ Job يعمل على python:3.12).
تحديث التسميات
حدّث التسميات على مهمة موجودة مسبقًا باستخدام hf jobs labels. عند تمرير --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