# وظائف Hugging Face

يعمل [Hugging Face Jobs](https://huggingface.co/docs/hub/jobs) على وحدات معالجة الرسوميات الخاصة بـ Hugging Face، لذا لا حاجة إلى إعداد جهاز، كما يستمر التنفيذ حتى بعد إغلاق الطرفية. تعمل سكربتات التدريب الخاصة بـ Diffusers على Jobs مباشرةً من عنوان GitHub الخاص بها دون الحاجة إلى استنساخ المستودع أو تثبيت أي شيء محليًا.

قبل أن تبدأ، اتبع [دليل البدء السريع للمهام](https://huggingface.co/docs/hub/jobs-quickstart) لتثبيت واجهة `hf` سطر الأوامر، وتسجيل الدخول، وإضافة الرصيد إلى حسابك.

## تدريب LoRA على Jobs

تدرّب الأوامر أدناه نموذج LoRA على [FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) باستخدام صور الكلاب الخمس الموجودة في [diffusers/dog-example](https://huggingface.co/datasets/diffusers/dog-example). يعمل الأمر على بطاقة A10G واحدة ويدفع نموذج LoRA إلى نطاقك على Hub.

```bash
# 20 steps is a test run. For a real run, raise --max_train_steps
# (the FLUX.2 README uses 500) and --timeout to match.
hf jobs uv run --flavor a10g-small --timeout 30m -s HF_TOKEN -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_flux2_klein.py \
  --pretrained_model_name_or_path black-forest-labs/FLUX.2-klein-4B \
  --dataset_name diffusers/dog-example \
  --instance_prompt "a photo of sks dog" \
  --resolution 512 --mixed_precision bf16 --guidance_scale 1 \
  --gradient_checkpointing --cache_latents \
  --optimizer adamW --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 20 --seed 0 \
  --output_dir /tmp/out \
  --push_to_hub --hub_model_id your-username/klein-dog-lora
```

يقوم `uv` بتثبيت التبعيات المذكورة في ترويسة `# /// script` الخاصة بالسكريبت، بما في ذلك Diffusers من `main`. لا تحصل المهام على رمز Hugging Face افتراضيًا، لذا يقوم `-s HF_TOKEN` بإحالة رمزك الخاص للسماح للسكريبت بدفع نموذج LoRA. يتم التخلص من قرص المهمة عند انتهائها، وأي شيء لا تدفعه سيُفقد. تشرح أدلة [DreamBooth](./dreambooth) و [LoRA](./lora) حُجج التدريب.

## إدارة مهمة

تُطبع سجلات التدريب في طرفية النظام أثناء تشغيل المهمة. إغلاق الطرفية أو الضغط على `Ctrl+C` لا يوقف التدريب، لأن المهمة تعمل على أجهزة Hugging Face. لإطلاق عملية تدريب طويلة دون إبقاء طرفية النظام مشغولة، أضف `-d` قبل `--`. ستطبع الأمر معرّف المهمة ثم يعيد.

استخدم معرّف المهمة (Job ID) لإعادة الاتصال بالسجلات، أو التحقق من ذاكرة وحدة معالجة الرسوميات (GPU) ومستوى استخدامها أثناء تدريب النموذج، أو إيقاف تشغيل.

```bash
hf jobs logs -f <job_id>
hf jobs stats <job_id>
hf jobs cancel <job_id>
```

إذا فشلت العملية، يعرض `hf jobs inspect <job_id>` رسالة الخطأ. راجع [إدارة المهام](https://huggingface.co/docs/hub/jobs-manage) للاطلاع على الأوامر الأخرى.

## الدراسة على صورك الخاصة

لتدريب النموذج على صورك، اربط مجلد الصور بالـ Job باستخدام `-v` ومرر مسار الربط إلى `--instance_data_dir` بدلاً من `--dataset_name`. يقوم Jobs برفع المجلد إلى دلو خاص قبل بدء الـ Job ثم يربطه للقراءة فقط. عند رفع نفس المجلد مرة أخرى، يتم إرسال الملفات الجديدة أو المعدلة فقط.

```bash
hf jobs uv run --flavor a10g-small --timeout 30m -s HF_TOKEN \
  -v ./my-dog:/data -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_flux2_klein.py \
  --pretrained_model_name_or_path black-forest-labs/FLUX.2-klein-4B \
  --instance_data_dir /data \
  --instance_prompt "a photo of sks dog" \
  --resolution 512 --mixed_precision bf16 --guidance_scale 1 \
  --gradient_checkpointing --cache_latents \
  --optimizer adamW --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 20 --seed 0 \
  --output_dir /tmp/out \
  --push_to_hub --hub_model_id your-username/klein-dog-lora
```

يفتح النص البرمجي كل ملف في `--instance_data_dir` كصورة، لذا احتفظ بالصور فقط في المجلد. يؤدي وجود ملف مخفي مثل `.DS_Store` إلى فشل التشغيل. راجع [المجلدات المحلية](https://huggingface.co/docs/hub/jobs-configuration#local-directories) لمزيد من المعلومات حول تركيب المجلد.

باستخدام `--with_prior_preservation`، يقوم السكربت بإنشاء صور الفئات في `--class_data_dir` قبل بدء التدريب. وجّهه إلى مسار يمكن للوظيفة الكتابة فيه. لإعادة استخدام صور الفئات في التشغيلات اللاحقة، ضعها في وحدة تخزين قابلة للقراءة والكتابة مثل تلك الموجودة في [حفظ نقاط التفتيش للتشغيلات الطويلة](#save-checkpoints-for-long-runs).

## التدريب في FP8

تستقبل سكربتات DreamBooth LoRA الخاصة بـ FLUX.2 و Z-Image و Ideogram 4 و Krea 2 معامل `--do_fp8_training` للتدريب باستخدام FP8 عبر [torchao](https://github.com/pytorch/ao)، مما يُقلل من استهلاك الذاكرة. بما أن ترويسة أي سكربت لا تتضمن torchao، أضف `--with torchao` قبل `--`. كما يتطلب FP8 معالجًا رسوميًا (GPU) بقابلية حسابية 8.9 أو أعلى، مثل L4 (`l4x1`) أو L40S (`l40sx1`). ولا يدعم A10G (8.6) و A100 (8.0) هذه الميزة.

## تشغيل سكربت بدون ترويسة تبعيات

تُعلن سكربتات مجلدي [examples/dreambooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) و [examples/advanced_diffusion_training](https://github.com/huggingface/diffusers/tree/main/examples/advanced_diffusion_training) فقط عن تبعياتها في كتلة `# /// script` في أعلى الملف. بعض السكربتات في تلك المجلدات، مثل `train_dreambooth_lora_sdxl.py`، لا تحتوي على هذه الكتلة.

بالنسبة إلى سكربت لا يحتوي على ترويسة، مرّر كل اعتماد باستخدام `--with`. ثبّت Diffusers من المصدر، لأن سكربتات التدريب تتطلب الإصدار التطويري. أما الاعتمادات الأخرى فتأتي من ملف `requirements.txt` الخاص بالسكربت ومن استيراداته.

```bash
hf jobs uv run --flavor a10g-small --timeout 30m -s HF_TOKEN \
  --with "diffusers @ git+https://github.com/huggingface/diffusers.git" \
  --with torch --with torchvision --with accelerate --with transformers \
  --with peft --with datasets --with bitsandbytes \
  --with ftfy --with tensorboard --with Jinja2 -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_sdxl.py \
  --pretrained_model_name_or_path stabilityai/stable-diffusion-xl-base-1.0 \
  --pretrained_vae_model_name_or_path madebyollin/sdxl-vae-fp16-fix \
  --dataset_name diffusers/dog-example \
  --instance_prompt "a photo of sks dog" \
  --resolution 1024 --mixed_precision fp16 \
  --gradient_checkpointing --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 20 --seed 0 \
  --output_dir /tmp/out \
  --push_to_hub --hub_model_id your-username/sdxl-dog-lora
```

## حفظ نقاط التفتيش للتشغيلات الطويلة

قد يستغرق تشغيل يستمر لساعات حتى ينقطع أو يتعطل قبل اكتماله. للحفاظ على تقدمه، اربط [Storage Bucket](https://huggingface.co/docs/hub/storage-buckets) بالوظيفة باستخدام `-v` وجعل `--output_dir` يشير إليه. أنشئ الدلو أولاً باستخدام `hf buckets create`.

يحفظ السكربت مجلد `checkpoint-<step>` في `--output_dir` كل `--checkpointing_steps` خطوة (500 خطوة افتراضيًا)، لذا تُحفظ نقاط التفتيش في الدلو أثناء تقدم التدريب. يحدد `--checkpoints_total_limit` الحد الأقصى لعدد النقاط المحفوظة. يختار `--resume_from_checkpoint latest` الاستئناف من أحدث نقطة تفتيش في `--output_dir`، ويبدأ من الصفر إذا لم توجد نقطة، مما يجعل الأمر نفسه يعمل للتشغيل الأول ولكل إعادة تشغيل.

```bash
hf jobs uv run --flavor a10g-small --timeout 8h -s HF_TOKEN \
  -v hf://buckets/your-username/checkpoints:/ckpt -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_flux2_klein.py \
  --pretrained_model_name_or_path black-forest-labs/FLUX.2-klein-4B \
  --dataset_name diffusers/dog-example \
  --instance_prompt "a photo of sks dog" \
  --resolution 1024 --mixed_precision bf16 --guidance_scale 1 \
  --gradient_checkpointing --cache_latents \
  --optimizer adamW --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 5000 --seed 0 \
  --checkpointing_steps 500 --checkpoints_total_limit 3 \
  --resume_from_checkpoint latest \
  --output_dir /ckpt/klein-dog
```

عند انتهاء التدريب، يُحفظ LoRA في الدلو على شكل `pytorch_lora_weights.safetensors`. راجع [Volumes](https://huggingface.co/docs/hub/jobs-configuration#volumes) لمعرفة خيارات التركيب.

> [!NOTE]
> لا تضف `--push_to_hub` عندما يحتوي `--output_dir` على نقاط التفتيش. فعملية الرفع تتخطى مجلدات `step_*` و`epoch_*` فقط، لذا تُرفع مجلدات `checkpoint-<step>` إلى مستودع النموذج إلى جانب LoRA. بدلاً من ذلك، ارفع `pytorch_lora_weights.safetensors` إلى مستودع النموذج بنفسك.

## الخطوات التالية

- اقرأ [تدريب النماذج على المهام](https://huggingface.co/docs/hub/jobs-training) في توثيقات Hub للاطلاع على الفحوصات التي يجب تنفيذها قبل مهمة طويلة وكيفية قراءة مهمة فاشلة.
- حمّل نموذج LoRA المدرّب لديك للاستدلال باستخدام دليل [LoRA](../tutorials/using_peft_for_inference).
- تصفّح ملفات [DreamBooth README](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) للحصول على الأوامر وخيارات الذاكرة الخاصة بكل نموذج.

