TRL documentation
تكامل RapidFire AI
تكامل RapidFire AI
RapidFire AI هو إطار مفتوح المصدر لتنفيذ التجارب يتكامل مع TRL لتحويل «تدريب تكوين واحد في كل مرة» إلى مقارنة فورية جنبًا إلى جنب بين العديد من التكوينات على نفس وحدة المعالجة الرسومية (GPU) أو وحداتها — مما يتيح لك التكرار على المعلمات الفائقة وإعدادات LoRA ومخططات الموجهات والتجارب الاستئصالية بسرعة أكبر بمقدار 16–24 مرة دون الحاجة إلى أجهزة إضافية.
روابط: GitHub · التوثيق · جرّب في Colab
لماذا استخدام RapidFire AI مع TRL؟
عند ضبط النموذج أو التدريب اللاحق باستخدام TRL، تحتاج عادةً إلى:
- جرّب تكوينات مختلفة للمعاملات الفائقة
- مقارنة إعدادات LoRA المختلفة
- اختبار مخططات مختلفة للتلميحات
- تنفيذ دراسات الاستئصال
| السيناريو: مقارنة تكوينات تدريب N على نفس وحدة/وحدات المعالجة الرسومية (GPU) | TRL بمفرده | TRL + RapidFire AI |
|---|---|---|
| استراتيجية التدريب | تشغيل تكوينات N بشكل متسلسل | تشغيل N من الإعدادات بالتوازي |
| متى يمكنك مقارنة الإعدادات؟ | بعد انتهاء جميع التشغيلات | بشكل مباشر، من أول جزء |
| إيقاف الخاسرين / استنساخ الفائزين أثناء التدريب | لا | نعم (عمليات التحكم التفاعلية) |
كيف يعمل
تعتمد RapidFire AI على جدولة تكيفية مبنية على التقسيمات:
GPU Timeline (Single GPU):
Chunk 1: [Config A] → [Config B] → [Config C] → [Config D]
Chunk 2: [Config A] → [Config B] → [Config C] → [Config D]
Chunk 3: [Config A] → [Config B] → [Config C] → [Config D]يتيح ذلك:
- مقارنة مبكرة للتكوينات على مجموعات فرعية من البيانات نفسها بشكل تدريجي
- استخدام فعال لوحدة معالجة الرسوميات وتقليل أوقات الخمول
- تتبع مقاييس التجارب في الوقت الفعلي وبشكل آلي
- التحكم الديناميكي في عمليات التشغيل الجارية لتشجيع المزيد من التجارب
الميزات الرئيسية
- زيادة في إنتاجية التجارب تصل إلى 16-24× مقارنةً بالتدريب التسلسلي.
- تغييرات برمجية شبه معدومة - واجهات برمجة تطبيقات بسيطة للإعدادات تعمل كبديل مباشر وتغلّف فقط واجهات برمجة تطبيقات الإعدادات الموجودة مسبقًا في TRL وPEFT.
- عمليات التحكم التفاعلية - تحكم في الوقت الفعلي لإيقاف تشغيلات التدريب الجارية واستئنافها، ونسخها وتعديلها (مع أو بدون بدء دافئ).
- التكامل مع التوازي الكامل لبيانات FSDP لتدريب النماذج الكبيرة التي لا تتسع على وحدة معالجة رسومية واحدة، وذلك من خلال تقسيم المعاملات والتدرجات وحالات المُحسِّن على وحدات معالجة رسومية متعددة.
- توافق كامل مع transformers وPEFT وSFTTrainer وDPOTrainer وGRPOTrainer.
- تتبع تجارب قابل للتبديل: MLflow (افتراضيًا)، وTensorBoard، وTrackio، مع إمكانية تفعيلها بشكل فردي أو مجتمعة.
- دعم Google Colab بدون إعداد مسبق: دفاتر تعليمية جاهزة بنقرة واحدة لتقنيات SFT وDPO وGRPO على وحدات معالجة الرسوميات T4 المجانية.
- جاهز للإنتاج: مستخدم بالفعل في بيئات الإنتاج مع أمثلة عملية كاملة.
التثبيت
المتطلبات
- Python 3.12.x
- وحدة معالجة رسومات من NVIDIA بقدرة حوسبة 7.x أو 8.x (يتطلب FSDP وحدات معالجة رسومات متعددة)
- CUDA Toolkit 11.8+
- PyTorch 2.8+
pip install
pip install rapidfireai
بعد التثبيت، قم بالمصادقة مع Hugging Face ثم قم بتهيئة RapidFire AI:
# Authenticate with Hugging Face
hf auth login --token YOUR_TOKEN
# Workaround for current issue: https://github.com/huggingface/xet-core/issues/527
pip uninstall -y hf-xet
# Initialize RapidFire AI
rapidfireai init
# Start the RapidFire AI server
rapidfireai startستتوفر لوحة التحكم في http://localhost:8853 حيث يمكنك مراقبة التجارب والتحكم بها في الوقت الفعلي.
البدء السريع: تدريب SFT باستخدام إعدادات متعددة
فيما يلي مثال كامل يوضح كيفية تدريب عدة تكوينات SFT بشكل متزامن:
from rapidfireai import Experiment
from rapidfireai.automl import List, RFGridSearch, RFModelConfig, RFLoraConfig, RFSFTConfig
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer
# Load dataset
dataset = load_dataset("bitext/Bitext-customer-support-llm-chatbot-training-dataset")
train_dataset = dataset["train"].select(range(128)).shuffle(seed=42)
eval_dataset = dataset["train"].select(range(100, 124)).shuffle(seed=42)
# Define data formatting function
def formatting_function(row):
return {
"prompt": [
{"role": "system", "content": "You are a helpful customer support assistant."},
{"role": "user", "content": row["instruction"]},
],
"completion": [
{"role": "assistant", "content": row["response"]}
]
}
# Initialize experiment
experiment = Experiment(experiment_name="sft-customer-support")
# Define multiple LoRA configurations to compare
peft_configs = List([
RFLoraConfig(r=8, lora_alpha=16, lora_dropout=0.1,
target_modules=["q_proj", "v_proj"], bias="none"),
RFLoraConfig(r=32, lora_alpha=64, lora_dropout=0.1,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"], bias="none")
])
# Define multiple training configurations
# 2 base configs × 2 PEFT configs = 4 total training runs
config_set = List([
RFModelConfig(
model_name="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
peft_config=peft_configs,
training_args=RFSFTConfig( # Wraps TRL's SFTConfig
learning_rate=1e-3,
per_device_train_batch_size=4,
max_steps=128,
fp16=True,
),
model_type="causal_lm",
model_kwargs={"device_map": "auto", "dtype": "auto", "use_cache": False},
formatting_func=formatting_function,
),
RFModelConfig(
model_name="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
peft_config=peft_configs,
training_args=RFSFTConfig(
learning_rate=1e-4, # Different learning rate
per_device_train_batch_size=4,
max_steps=128,
fp16=True,
),
model_type="causal_lm",
model_kwargs={"device_map": "auto", "dtype": "auto", "use_cache": False},
formatting_func=formatting_function,
)
])
# Define model creation function
def create_model(model_config):
model = AutoModelForCausalLM.from_pretrained(
model_config["model_name"],
**model_config["model_kwargs"]
)
tokenizer = AutoTokenizer.from_pretrained(model_config["model_name"])
return (model, tokenizer)
# Create grid search over all configurations
config_group = RFGridSearch(configs=config_set, trainer_type="SFT")
# Run all 4 configurations concurrently with chunk-based scheduling
experiment.run_fit(config_group, create_model, train_dataset, eval_dataset,
num_chunks=4, seed=42)
# End experiment
experiment.end()ما يحدث أثناء التنفيذ
عند تشغيل هذا المثال:
- توسيع الإعدادات: 2 إعدادات أساسية × 2 إعدادات PEFT = 4 عمليات تدريب إجمالاً
- الجدولة القائمة على المقاطع: يتم تقسيم بيانات التدريب إلى مقاطع، وتُدرَّب جميع الإعدادات الأربعة بالتوازي
- تبديل وحدات المعالجة الرسومية: يتم تبديل النماذج داخل ذاكرة وحدة المعالجة الرسومية وخارجها بناءً على حدود المقاطع
- التتبع في الوقت الفعلي: جميع المقاييس مرئية في لوحة التحكم على
http://localhost:8853 - التحكم التفاعلي: إيقاف أو استئناف أو استنساخ وتعديل أي تكوين من لوحة التحكم
يوفر هذا معدل إنتاجية أعلى بنسبة 16-24× مقارنةً بتدريب كل تكوين بشكل تسلسلي!
مدربو TRL المدعومون
SFTTrainer
استخدم RFSFTConfig كبديل مباشر لـ SFTConfig:
from rapidfireai.automl import RFSFTConfig
training_args = RFSFTConfig(
learning_rate=5e-5,
per_device_train_batch_size=4,
num_train_epochs=3,
max_length = 512,
# ... all other SFTConfig parameters supported
)دفتر ملاحظات تجريبي: التدريب الإشرافي (SFT) لدعم العملاء
DPOTrainer
استخدم RFDPOConfig كبديل مباشر لـ DPOConfig:
from rapidfireai.automl import RFDPOConfig
training_args = RFDPOConfig(
beta=0.1,
loss_type="sigmoid",
max_length=1024,
learning_rate=5e-4,
# ... all other DPOConfig parameters supported
)دفتر ملاحظات تجريبي: DPO لمواءمة التفضيلات
GRPOTrainer
استخدم RFGRPOConfig كبديل جاهز للاستخدام مباشرة عن GRPOConfig:
from rapidfireai.automl import RFGRPOConfig
training_args = RFGRPOConfig(
learning_rate=5e-6,
num_generations=8,
max_completion_length=256,
# ... all other GRPOConfig parameters supported
)دفتر ملاحظات تجريبي: GRPO للاستدلال الرياضي
المفاهيم الأساسية
التدريب المتزامن القائم على المقاطع
يقسم RapidFire AI بيانات التدريب إلى مقاطع ويتناوب بين التكوينات:
GPU Timeline (Single GPU):
Chunk 1: [Config A] → [Config B] → [Config C] → [Config D]
Chunk 2: [Config A] → [Config B] → [Config C] → [Config D]
Chunk 3: [Config A] → [Config B] → [Config C] → [Config D]
...تُحسّن هذه الطريقة استغلال وحدة معالجة الرسوميات (GPU) وتُمكّن من المقارنة المبكرة بين التكوينات مع الحفاظ على استقرار التدريب من خلال إنشاء نقاط استعادة تلقائية.
عمليات التحكم التفاعلية (IC Ops)
من خلال لوحة تحكم RapidFire AI، يمكنك التحكم الديناميكي في التجارب الجارية:
- إيقاف: إيقاف مؤقت لإعداد (يتم حفظ نقطة التفتيش تلقائيًا)
- استئناف: المتابعة من آخر نقطة تحقق
- استنساخ وتعديل: نسخ تكوين مع إجراء تعديلات عليه (يبدأ التشغيل الجديد من الصفر)
- النسخ والتعديل مع البدء الدافئ: انسخ وعدّل وابدأ التهيئة من أوزان النموذج الأصلي
- حذف: إزالة التشغيلات الفاشلة أو غير المرغوب فيها
يتيح ذلك إجراء تجارب تكيفية حيث يمكنك إيقاف الإعدادات ذات الأداء الضعيف مبكرًا ونسخ الواعدة منها مع ضبط المعلمات الفائقة.
التجارب متعددة الإعدادات
استخدم RFGridSearch أو RFRandomSearch لتوليد تركيبات الإعدادات تلقائيًا:
# Grid search: tests all combinations
config_group = RFGridSearch(configs=config_list, trainer_type="SFT")
# Random search: samples N configurations
config_group = RFRandomSearch(configs=config_list, trainer_type="DPO", num_samples=10)الميزات المتقدمة
تكامل PEFT/LoRA
دعم كامل للضبط الدقيق الفعال من حيث المعلمات:
from rapidfireai.automl import RFLoraConfig
from peft import TaskType
lora_config = RFLoraConfig(
task_type=TaskType.CAUSAL_LM,
r=64,
lora_alpha=64,
lora_dropout=0.1,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
bias="none"
)دوال المكافأة المخصصة (GRPO)
تعريف دوال مكافأة متعددة لتدريب GRPO:
def correctness_reward(prompts, completions, answer, **kwargs):
"""Reward for correct answers"""
responses = [completion[0]['content'] for completion in completions]
extracted = [extract_answer(r) for r in responses]
return [2.0 if r == a else 0.0 for r, a in zip(extracted, answer)]
def format_reward(completions, **kwargs):
"""Reward for proper formatting"""
import re
pattern = r"<reasoning>.*?</reasoning>\s*<answer>.*?</answer>"
responses = [completion[0]["content"] for completion in completions]
matches = [re.match(pattern, r) for r in responses]
return [0.5 if match else 0.0 for match in matches]
# Use in model config
config = RFModelConfig(
reward_funcs=[correctness_reward, format_reward],
# ... other parameters
)دعم وحدات معالجة الرسومات المتعددة
يرصد RapidFire AI جميع وحدات معالجة الرسومات المتاحة ويستخدمها تلقائيًا. افتراضيًا، يوزّع المجدول الإعدادات المستقلة عبر وحدات معالجة الرسومات (توازي البيانات عبر الإعدادات)، لذا لا يلزم أي إعداد خاص لتشغيل N إعدادات على N وحدة معالجة رسومات بالتوازي.
بالنسبة إلى النماذج التي لا تتسع على وحدة معالجة رسومية واحدة، يدعم RapidFire AI أيضًا Fully Sharded Data Parallel (FSDP) لتقسيم تكوين واحد عبر وحدات معالجة رسومية متعددة — راجع القسم التالي.
التدريب متعدد وحدات معالجة الرسومات باستخدام FSDP
عندما يكون النموذج كبيرًا جدًا ليُشغَّل على وحدة معالجة رسومية واحدة، فعّل FSDP مباشرةً عبر حُجج التدريب الخاصة بـ RFSFTConfig أو RFDPOConfig — أي الحقول fsdp وfsdp_config نفسها التي تُعرَض بواسطة TrainingArguments من Hugging Face:
from rapidfireai.automl import RFModelConfig, RFSFTConfig, RFLoraConfig
model_config = RFModelConfig(
model_name="meta-llama/Llama-3.1-8B-Instruct",
peft_config=RFLoraConfig(
r=16, lora_alpha=32, lora_dropout=0.05,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
bias="none",
),
training_args=RFSFTConfig(
learning_rate=2e-4,
per_device_train_batch_size=1,
gradient_accumulation_steps=8,
fsdp="full_shard auto_wrap",
fsdp_config={
"sharding_strategy": "FULL_SHARD",
"auto_wrap_policy": "TRANSFORMER_BASED_WRAP",
"backward_prefetch": "backward_pre",
"forward_prefetch": True,
"use_orig_params": False,
"cpu_ram_efficient_loading": True,
"offload_params": True,
"sync_module_states": True,
"limit_all_gathers": True,
},
),
model_type="causal_lm",
model_kwargs={"dtype": "auto"},
)النقاط الرئيسية:
- يعمل FSDP بشكل شفاف مع جدولة RapidFire AI القائمة على التقطيع، وعمليات IC Ops (الإيقاف / الاستئناف / النسخ والتعديل مع أو بدون بدء دافئ)، وجميع أنظمة تتبع المقاييس المدعومة.
- يتوافق FSDP بشكل كامل مع PEFT / LoRA — حيث يتم جمع أوزان محوّل LoRA بكفاءة عبر الشرائح عند حفظ نقاط التفتيش.
- يتكامل FSDP مع البحث الشبكي والبحث العشوائي: حيث تحصل كل إعداد موسّع على تدريب مجزّأ مستقل.
دفاتر ملاحظات أمثلة:
- التدريب على الإشراف باستخدام FSDP (خفيف، نموذج صغير)
- التدريب الإشرافي (SFT) باستخدام FSDP (نموذج كبير)
- DPO مع FSDP
واجهات تتبع التجارب
يدعم RapidFire AI ثلاثة أنظمة خلفية لتسجيل المقاييس يمكن استخدامها بشكل منفصل أو معًا: MLflow (الافتراضي للتثبيتات المحلية)، وTensorBoard (الافتراضي في Google Colab)، وTrackio.
حدد واجهة خلفية واحدة أو أكثر عند بدء تشغيل الخادم باستخدام علم --tracking-backends:
# MLflow only (default on local installs)
rapidfireai start --tracking-backends mlflow
# TensorBoard only
rapidfireai start --tracking-backends tensorboard
# Any combination
rapidfireai start --tracking-backends mlflow tensorboard trackioيتوفر أيضًا متغيرات بيئة مكافئة:
RF_MLFLOW_ENABLED(الافتراضيtrue، أوfalseفي Colab)RF_TENSORBOARD_ENABLED(الافتراضيfalse، أوtrueفي Colab)RF_TRACKIO_ENABLED(الافتراضيfalse)
تستقبل جميع الخوادم الخلفية الثلاثة المقاييس نفسها (الخسارة، درجات التقييم، معدل التعلم، إلخ) وتحترم أحداث دورة تشغيل IC Ops، لذا يمكنك استخدام، على سبيل المثال، Trackio للمشاركة الخفيفة الوزن إلى جانب MLflow للحصول على لوحة تحكم محلية شاملة.
التشغيل في Google Colab
يعمل RapidFire AI على وحدات معالجة الرسوميات T4 المجانية في Google Colab، مع كتيبات تعليمية (notebooks) لتدفقات العمل الخاصة بـ SFT وDPO وGRPO وRAG / هندسة السياق. في Colab، يُعد TensorBoard هو الخلفية الافتراضية للتتبع (تم تعطيل MLflow من أجل البساطة)، وتُنفَّذ الأوامر المعتادة rapidfireai init / rapidfireai start مباشرةً من خلايا الكتيّب — دون الحاجة إلى وصول إلى الطرفية.
ابدأ: RapidFire AI في Google Colab.
أفضل الممارسات
ضبط حُبيبية المقاطع
يتحكم معامل num_chunks في تكرار التبديل:
# Fewer chunks = less overhead, less frequent comparison
experiment.run_fit(..., num_chunks=2)
# More chunks = more overhead, more frequent comparison
experiment.run_fit(..., num_chunks=16)قاعدة عامة: ابدأ بـ num_chunks=4 وقم بالتعديل بناءً على حجم مجموعة البيانات وعدد التكوينات.
إدارة الذاكرة
للنماذج الكبيرة، استخدم التكميم:
from transformers import BitsAndBytesConfig
import torch
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
)
model_kwargs = {
"quantization_config": bnb_config,
"device_map": "auto",
}معايير الأداء
بناءً على اختبارات الأداء الداخلية التي قارنت بين التدريب التسلسلي والتدريب المتزامن باستخدام RapidFire AI:
| السيناريو | الوقت التسلسلي | وقت RapidFire AI | التسريع |
|---|---|---|---|
| 4 تكوينات، 1 وحدة معالجة رسومية | 120 دقيقة | 7.5 دقيقة | 16× |
| 8 تكوينات، 1 وحدة معالجة رسومية | 240 دقيقة | 12 دقيقة | 20× |
| 4 تكوينات، 2 معالجات رسومية | 60 دقيقة | 4 دقائق | 15× |
| 8 تكوينات، 4 وحدات معالجة رسومية | 60 دقيقة | 3 دقائق | 20× |
اختبارات الأداء التي أُجريت على NVIDIA A100 40GB باستخدام نماذج TinyLlama-1.1B وLlama-3.2-1B
استكشاف الأخطاء وإصلاحها
للحصول على إرشادات استكشاف الأخطاء وإصلاحها، راجع دليل استكشاف أخطاء RapidFire AI وإصلاحها.
موارد إضافية
- دفتر Colab: RapidFire AI في Google Colab
- التوثيق: oss-docs.rapidfire.ai
- GitHub: RapidFireAI/rapidfireai
- PyPI: pypi.org/project/rapidfireai
- Discord: انضم إلى مجتمعنا على Discord
- دفاتر التعليم: مستودع GitHub
تعرّف على المزيد حول RapidFire AI في مستودعهم الرسمي ووثائقهم.
Update on GitHub