مجموعات Ray للذكاء الاصطناعي: بنية الحوسبة الموزعة
آخر تحديث: 11 ديسمبر 2025
تحديث ديسمبر 2025: تستخدم OpenAI إطار Ray لتنسيق تدريب ChatGPT. انضمام Ray إلى مؤسسة PyTorch يؤكد اعتماد المؤسسات الكبرى له. يتوسع الإطار من حاسوب محمول واحد إلى آلاف وحدات معالجة الرسومات. يحقق ملايين المهام في الثانية مع زمن استجابة أقل من ميلي ثانية—أسرع بمقدار عشرة أضعاف من Spark لأنماط الذكاء الاصطناعي. دعم أصلي للحوسبة غير المتجانسة يتيح مزج أحمال عمل CPU/GPU.
تستخدم OpenAI إطار Ray لتنسيق تدريب ChatGPT والنماذج الأخرى.¹ يتوسع الإطار من حاسوب محمول إلى مجموعات تضم آلاف وحدات معالجة الرسومات، متعاملاً مع تعقيدات الحوسبة الموزعة التي تتطلب عادةً بنية تحتية مخصصة لكل مشروع. انتشر اعتماد Ray بشكل كبير خلال عام 2025، وتعزز ذلك بانضمام الإطار إلى مؤسسة PyTorch وحصول Anyscale على تمويل لدعم عمليات النشر المؤسسية.² يساعد فهم بنية Ray وأنماط نشره المؤسسات على بناء بنية تحتية موزعة للذكاء الاصطناعي قابلة للتوسع من مرحلة التجريب إلى الإنتاج.
يوفر Ray إطاراً موحداً لأحمال عمل الذكاء الاصطناعي الموزعة—التدريب، والضبط، والاستدلال، ومعالجة البيانات—يُجرّد تعقيدات إدارة المجموعات مع الحفاظ على تحكم دقيق في تخصيص الموارد. بالنسبة للمؤسسات التي تتجاوز التجريب على وحدة GPU واحدة نحو أنظمة إنتاج متعددة العقد، يقدم Ray المسار الأكثر مباشرة نحو بنية تحتية قابلة للتوسع للذكاء الاصطناعي.
لماذا Ray للبنية التحتية للذكاء الاصطناعي
انبثق Ray من مختبر RISELab في جامعة كاليفورنيا بيركلي لمعالجة التحديات الخاصة بأحمال عمل الذكاء الاصطناعي الموزعة التي تتعامل معها الأطر التقليدية مثل Apache Spark بشكل ضعيف:
متطلبات أحمال عمل الذكاء الاصطناعي
الحوسبة غير المتجانسة: تمزج خطوط أنابيب الذكاء الاصطناعي بين معالجة البيانات المكثفة على CPU والتدريب والاستدلال المُسرّع بـ GPU. يدعم Ray أصلياً تخصيص الموارد غير المتجانسة، ويجدول المهام عبر وحدات CPU وGPU حسب متطلبات أحمال العمل.³
التوازي الدقيق: يتطلب تدريب التعلم العميق تنسيق التدرجات عبر العمال، وإدارة حالة النموذج، والتعامل مع حالات الفشل بأناقة. توفر تجريدات المهام والفاعلين في Ray البدائيات اللازمة لهذه الأنماط.
الحوسبة ذات الحالة: على عكس أطر نمط MapReduce، غالباً ما تحافظ أحمال عمل الذكاء الاصطناعي على الحالة عبر التكرارات. يحتفظ فاعلو Ray بالحالة بين الاستدعاءات، مما يدعم أنماطاً مثل خوادم المعاملات ووكلاء التعلم المعزز.
زمن استجابة منخفض: يتطلب الاستدلال في الوقت الفعلي والبحث عن المعاملات الفائقة جدولة مهام بالميكروثانية. يحقق Ray ملايين المهام في الثانية مع زمن استجابة أقل من ميلي ثانية—أسرع بمقدار عشرة أضعاف من Spark لهذه الأنماط.⁴
المقارنة مع البدائل
Apache Spark: مُحسّن لمعالجة البيانات الدفعية مع SQL وDataFrames. يتفوق في ETL وهندسة الميزات والتحليلات على البيانات المهيكلة. أقل ملاءمة لأحمال عمل GPU والحوسبة ذات الحالة ومتطلبات زمن الاستجابة المنخفض.⁵
Dask: حوسبة موزعة أصلية بـ Python مع واجهات برمجة DataFrame والمصفوفات. أخف وزناً من Spark لكنه يفتقر إلى نموذج الفاعلين في Ray والمكتبات الخاصة بتعلم الآلة.
Horovod: يركز تحديداً على تدريب التعلم العميق الموزع. أقل مرونة من Ray لأحمال عمل الذكاء الاصطناعي المتنوعة ولكنه أبسط لسيناريوهات التدريب البحتة.
ميزة Ray: إطار واحد يتعامل مع معالجة البيانات والتدريب وضبط المعاملات الفائقة وخدمة الاستدلال. تتجنب الفرق إدارة أنظمة متعددة وتعقيدات التكامل بينها.
الاعتماد في الإنتاج
تشغّل مؤسسات كبرى Ray في بيئات الإنتاج:⁶
- OpenAI: تنسيق تدريب ChatGPT
- Uber: منصة تعلم الآلة الموزعة
- Instacart: العمود الفقري للبنية التحتية لتعلم الآلة
- Shopify: أحمال عمل تعلم الآلة الإنتاجية
- Ant Group: تعلم الآلة المالي واسع النطاق
تدعم مجموعات Ray رسمياً ما يصل إلى 2,000 عقدة، مما يتيح النطاق المطلوب لتدريب النماذج الحدودية والاستدلال عالي الحجم.
بنية Ray
التجريدات الأساسية
يوفر Ray تجريدين أساسيين للحوسبة الموزعة:
المهام: دوال عديمة الحالة تُنفذ عن بُعد. يجدول Ray المهام تلقائياً عبر العمال المتاحين، ويتعامل مع حالات الفشل، ويُرجع النتائج.
import ray
ray.init()
@ray.remote
def process_batch(data):
# Runs on any available worker
return transform(data)
# Execute in parallel
futures = [process_batch.remote(batch) for batch in batches]
results = ray.get(futures)
الفاعلون: كائنات ذات حالة موزعة عبر المجموعة. يحافظ كل فاعل على الحالة بين استدعاءات الطرق، مما يُمكّن أنماطاً مثل خدمة النماذج وخوادم المعاملات وبيئات الألعاب.
@ray.remote
class ModelServer:
def __init__(self, model_path):
self.model = load_model(model_path)
def predict(self, input_data):
return self.model(input_data)
# Create actor instance
server = ModelServer.remote("model.pt")
# Call methods remotely
prediction = ray.get(server.predict.remote(data))
بنية المجموعة
تتكون مجموعات Ray من عقدة رئيسية وعقد عاملة:
العقدة الرئيسية: تشغّل مخزن التحكم العالمي (GCS) الذي يدير حالة المجموعة، ودليل الكائنات الذي يتتبع مواقع البيانات، والمجدول الذي ينسق توزيع المهام.
العقد العاملة: تنفذ المهام والفاعلين. تشغّل كل عقدة عاملة خدمة Raylet التي تتعامل مع الجدولة المحلية وإدارة الكائنات.
مخزن الكائنات: ذاكرة مشتركة موزعة تُمكّن من نقل البيانات بدون نسخ بين المهام على نفس العقدة وتسلسل فعّال عبر العقد.
إدارة الموارد
يدير Ray الموارد غير المتجانسة بشكل صريح:
@ray.remote(num_cpus=4, num_gpus=1)
def train_step(model, data):
# Guaranteed 4 CPUs and 1 GPU
return model.train(data)
تُمكّن الموارد المخصصة من الجدولة الدقيقة:
# Request specific hardware
@ray.remote(resources={"TPU": 1})
def tpu_inference(data):
return run_on_tpu(data)
مكتبات Ray للذكاء الاصطناعي
يتضمن Ray مكتبات مصممة خصيصاً لأحمال عمل الذكاء الاصطناعي الشائعة:
Ray Train
تجريد التدريب الموزع يدعم PyTorch وTensorFlow وأطر أخرى:
from ray.train.torch import TorchTrainer
from ray.train import ScalingConfig
def train_func():
# Standard PyTorch training code
model = MyModel()
for epoch in range(10):
train_epoch(model)
trainer = TorchTrainer(
train_loop_per_worker=train_func,
scaling_config=ScalingConfig(
num_workers=8,
use_gpu=True
),
)
result = trainer.fit()
القدرات الرئيسية:⁷ - التوسع من GPU واحدة إلى مجموعات متعددة العقد بتغيير سطرين من الكود - تحميل البيانات الموزع التلقائي ومزامنة التدرجات - إدارة نقاط التفتيش والتعافي من الأعطال - التكامل مع PyTorch Lightning وHugging Face Transformers وDeepSpeed
Ray Tune
تحسين المعاملات الفائقة الموزع:
from ray import tune
from ray.tune.schedulers import ASHAScheduler
def training_function(config):
model = build_model(config["learning_rate"], config["batch_size"])
for epoch in range(100):
loss = train_epoch(model)
tune.report(loss=loss)
analysis = tune.run(
training_function,
config={
"learning_rate": tune.loguniform(1e-4, 1e-1),
"batch_size": tune.choice([32, 64, 128])
},
scheduler=ASHAScheduler(metric="loss", mode="min"),
num_samples=100,
)
يوفر Ray Tune: - تنفيذ متوازي للتجارب عبر المجموعة - الإيقاف المبكر مع ASHA وPopulation-Based Training وجدولات أخرى - التكامل مع Optuna وHyperOpt ومكتبات تحسين أخرى - نقاط التفتيش والاستئناف
Ray Serve
خدمة النماذج الإنتاجية مع التوسع التلقائي:
from ray import serve
@serve.deployment(num_replicas=2, ray_actor_options={"num_gpus": 1})
class LLMDeployment:
def __init__(self):
self.model = load_llm()
async def __call__(self, request):
prompt = await request.json()
return self.model.generate(prompt["text"])
serve.run(LLMDeployment.bind())
قدرات Ray Serve:⁸ - التوسع التلقائي بناءً على معدل الطلبات - عمليات نشر بدون توقف - تكوين النماذج المتعددة وتوجيه الطلبات - واجهة برمجة متوافقة مع OpenAI لخدمة نماذج اللغة الكبيرة - تقليل بنسبة 60% في الوقت حتى أول رمز مع التوجيه المدرك للبادئات⁹
Ray Data
تحميل البيانات الموزع والمعالجة المسبقة:
import ray
ds = ray.data.read_parquet("s3://bucket/data/")
ds = ds.map(preprocess)
ds = ds.filter(lambda x: x["label"] > 0)
# Convert to PyTorch DataLoader
train_loader = ds.iter_torch_batches(batch_size=32)
يوفر Ray Data: - التنفيذ المتدفق لمجموعات البيانات الكبيرة - المعالجة المسبقة المُسرّعة بـ GPU - التكامل مع Ray Train للتدريب الموزع - دعم أصلي لبيانات الصور والنصوص والجداول
نشر Kubernetes مع KubeRay
عادةً ما تعمل عمليات نشر Ray الإنتاجية على Kubernetes باستخدام KubeRay، المشغّل الرسمي لـ Kubernetes:¹⁰
مكونات KubeRay
RayCluster CRD: يحدد تكوين المجموعة بما في ذلك مواصفات العقدة الرئيسية والعاملة وسياسات التوسع التلقائي ومتطلبات الموارد.
apiVersion: ray.io/v1
kind: RayCluster
metadata:
name: ml-cluster
spec:
headGroupSpec:
rayStartParams:
dashboard-host: '0.0.0.0'
template:
spec:
containers:
- name: ray-head
image: rayproject/ray:2.52.0-py310-gpu
resources:
limits:
nvidia.com/gpu: 1
workerGroupSpecs:
- replicas: 4
minReplicas: 2
maxReplicas: 10
groupName: gpu-workers
rayStartParams: {}
template:
spec:
containers:
- name: ray-worker
image: rayproject/ray:2.52.0-py310-gpu
resources:
limits:
nvidia.com/gpu: 1
RayJob CRD: إرسال المهام إلى مجموعات يتم توفيرها تلقائياً. ينشئ KubeRay المجموعة ويشغّل المهمة ويحذف المجموعة اختيارياً عند الانتهاء.
RayService CRD: عمليات نشر Ray Serve المُدارة مع ترقيات بدون توقف وفحص صحي.
أفضل الممارسات للإنتاج
صور الحاويات: ادمج التبعيات في صور Docker المنشورة بدلاً من تثبيتها في وقت التشغيل. هذا يضمن قابلية إعادة الإنتاج وبدء تشغيل أسرع.¹¹
التوسع التلقائي: مكّن كلاً من التوسع التلقائي لـ Ray (توسيع العمال داخل المجموعة) والتوسع التلقائي لـ Kubernetes (توسيع عقد المجموعة):
spec:
enableInTreeAutoscaling: true
autoscalerOptions:
upscalingMode: Default
idleTimeoutSeconds: 60
التخزين: استخدم وحدات التخزين الدائمة لنقاط التفتيش والتخزين المشترك لمجموعات البيانات الكبيرة:
volumes:
- name: shared-storage
persistentVolumeClaim:
claimName: ml-data-pvc
المراقبة: التكامل مع Prometheus وGrafana للرصد:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
عمليات النشر الخاصة بالسحابة
GKE: توفر إضافة Ray على GKE مجموعات Ray مُدارة مع التوفير التلقائي والتكامل مع خدمات Google Cloud.¹²
EKS: انشر KubeRay مع Cluster Autoscaler أو Karpenter لتوسيع العقد. يوفر التكامل مع FSx for Lustre تخزيناً مشتركاً عالي الأداء.
AKS: تقدم Microsoft وAnyscale خدمة Anyscale on Azure كخدمة أصلية يمكن الوصول إليها من بوابة Azure.¹³
Ray المُدار من Anyscale
تقدم Anyscale، الشركة التي أسسها مبتكرو Ray، عمليات نشر Ray مُدارة:
منصة Anyscale
المجموعات المُدارة: مجموعات Ray بجودة إنتاجية مع توسع تلقائي وتحمل للأعطال ومراقبة دون إدارة البنية التحتية.
بيئة تشغيل RayTurbo: تحسينات أداء خاصة توفر مرونة أعلى وأداء أسرع وتكلفة أقل مقارنة بـ Ray مفتوح المصدر.¹⁴
ميزات المؤسسات: التحكم في الوصول المستند إلى الأدوار، وتسجيل التدقيق، واقتران VPC، وشهادات الامتثال.
الشراكات السحابية
CoreWeave: ينشر Anyscale BYOC (أحضر سحابتك الخاصة) مباشرة في حسابات عملاء CoreWeave عبر CoreWeave Kubernetes Service.¹⁵
Azure: خدمة Anyscale أصلية متاحة في بوابة Azure مع تكامل أصلي.
AWS: تعمل Anyscale على AWS مع التكامل مع خدمات AWS الحالية.
متى تستخدم Anyscale
**فكر في Anysc
[تم اقتطاع المحتوى للترجمة]