LeRobot documentation

ضبط دقيق فعّال من حيث المعلمات باستخدام 🤗 PEFT

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

ضبط دقيق فعّال من حيث المعلمات باستخدام 🤗 PEFT

🤗 PEFT (Parameter-Efficient Fine-Tuning) هي مكتبة لتكييف النماذج المُسبقة التدريب الكبيرة بكفاءة، مثل سياسات التدريب المسبق (مثل SmolVLA، π₀، …) لمهام جديدة دون تدريب جميع معاملات النموذج، مع تحقيق أداء مماثل.

قم بتثبيت الحزمة الاختيارية lerobot[peft] لتفعيل دعم PEFT.

للقراءة عن جميع طرق التكيف الممكنة، يُرجى الرجوع إلى وثائق 🤗 PEFT.

تدريب SmolVLA

في هذا القسم سنُظهر لك كيفية تدريب سياسة SmolVLA المُدرَّبة مسبقًا باستخدام PEFT على مجموعة بيانات libero. من أجل الاختصار، سنقوم بالتدريب على مجموعة libero_spatial الفرعية فقط. سنستخدم lerobot/smolvla_base كنموذج لإجراء الضبط الدقيق الفعال من حيث المعلمات:

lerobot-train \
 --policy.path=lerobot/smolvla_base \
 --policy.repo_id=your_hub_name/my_libero_smolvla \
 --dataset.repo_id=HuggingFaceVLA/libero \
 --policy.output_features=null \
 --policy.input_features=null \
 --policy.optimizer_lr=1e-3 \
 --policy.scheduler_decay_lr=1e-4 \
 --env.type=libero \
 --env.task=libero_spatial \
 --steps=100000 \
 --batch_size=32 \
 --peft.method_type=LORA \
 --peft.r=64 \
 --peft.lora_alpha=64

لاحظ معامل --peft.method_type الذي يتيح لك اختيار طريقة PEFT التي تريد استخدامها. هنا نستخدم LoRA (Low-Rank Adapter) وهي على الأرجح أكثر طرق الضبط الدقيق شيوعًا حتى الآن. تعني التكيّف منخفض الرتبة أننا نضبط الدقة لمصفوفة ذات رتبة منخفضة نسبيًا بدلاً من مصفوفة الأوزان الكاملة. يمكن تحديد هذه الرتبة باستخدام معامل --peft.r، ومعامل توسيع LoRA باستخدام --peft.lora_alpha (حيث scaling = lora_alpha / r). كلما زادت الرتبة، اقتربت أكثر من الضبط الدقيق الكامل

توجد طرق أكثر تعقيدًا تحتوي على عدد أكبر من المعاملات. هذه الطرق غير مدعومة بعد، فلا تتردد في فتح مشكلة (issue) إذا كنت ترغب في رؤية دعم لطريقة PEFT محددة.

بشكل افتراضي، يستهدف PEFT طبقات q_proj وv_proj الخاصة بخبير نموذج اللغة في SmolVLA. كما يستهدف مصفوفات الإسقاط للحالة والإجراء، نظراً لأنها الأكثر احتمالاً لأن تكون معتمدة على المهمة. إذا كنت بحاجة إلى استهداف طبقات مختلفة، يمكنك استخدام --peft.target_modules لتحديد الطبقات المراد استهدافها. يمكنك الرجوع إلى توثيق طريقة PEFT المعنية لمعرفة المدخلات المدعومة، (على سبيل المثال، توثيق target_modules الخاص بـ LoRA). عادةً ما يتم دعم قائمة لاحقات أو تعبير نمطي. على سبيل المثال، لاستهداف وحدات MLP الخاصة بـ lm_expert بدلاً من إسقاطات q وv، استخدم:

--peft.target_modules='(model\.vlm_with_expert\.lm_expert\..*\.(down|gate|up)_proj|.*\.(state_proj|action_in_proj|action_out_proj|action_time_mlp_in|action_time_mlp_out))'

في حال كنت بحاجة إلى ضبط كامل لطبقة بدلاً من مجرد تكييفها، يمكنك تقديم قائمة لاحقات الطبقات إلى معامل --peft.full_training_modules:

--peft.full_training_modules='["state_proj"]'

يمكن عادةً توسيع معدل التعلم ومعدل التعلم المستهدف المجدول بمعامل 10 مقارنةً بمعدل التعلم المستخدم في الضبط الدقيق الكامل (على سبيل المثال، 1e-4 بشكل طبيعي، لذا 1e-3 باستخدام LoRA).

يعمل PEFT أيضاً مع التدريب المتعدد المعالجات (FSDP2 و HSDP)، راجع التدريب متعدد المعالجات.

سياسات أخرى

تعمل أعلام --peft.* نفسها مع أي سياسة مُدرَّبة مسبقًا. بعض السياسات (مثل SmolVLA وπ₀ وπ₀.₅ وMolmoAct2) تأتي مع target_modules افتراضية مدمجة، لذا يكفي استخدام --peft.method_type=LORA. أما الأخرى فلا تحتوي على ذلك، وستطلب منك تمرير --peft.target_modules صراحةً، على سبيل المثال LingBot-VA، حيث تُوثَّق أهدافها الموصى بها في دليلها المخصص.

استخدام --policy.use_peft=true بمفرده يعادل استخدام --peft.method_type=LORA مع الإعدادات الافتراضية.

Update on GitHub