מה זה Ray?
Ray הוא פריימוורק קוד פתוח לעיבוד מבוזר (Distributed Computing), שנועד לאפשר הרצה קלה,
גמישה וסקלאבילית של יישומים כבדים, במיוחד בעולמות של למידת מכונה, בינה מלאכותית, ו־Data Engineering.
Ray פותח על ידי חוקרים מאוניברסיטת ברקלי תחת פרויקט RISELab, ומאז הפך לאחד הכלים הבולטים
לפיתוח מודרני של מערכות מקביליות.
Ray נכתב בפייתון (אך תומך גם בשפות אחרות), והוא מאפשר להריץ פונקציות, אובייקטים ומודלים בסביבת Cluster
מבוזרת בלי לשנות את קוד המקור באופן עמוק.
שימושים נפוצים של Ray
Ray הוא פריימוורק כללי, אך הוא מצטיין במיוחד במצבים הבאים:
הפעלת מודלים של למידת מכונה על גבי אשכולות מחשוב (Cluster)
הכשרה והאצה של מודלים (Training & Tuning) באמצעות ספריות כמו Ray Tune
פיתוח סוכנים חכמים ללמידת חיזוק (Reinforcement Learning) עם RLlib
הפעלת פונקציות מבוזרות (Distributed Python Functions)
עיבוד מקבילי של נתונים (MapReduce/ETL workflows)
אוטומציה וביצוע ניסויים מדעיים מבוזרים
דוגמה נפוצה: מדען נתונים שרוצה לבצע סריקה של עשרות מודלים שונים במקביל כדי לבצע hyperparameter tuning,
יכול לעשות זאת באמצעות Ray בתוך כמה שורות קוד בלבד, על גבי כמה מכונות.
מבנה הארכיטקטורה של Ray
Ray בנוי בצורה מודולרית:
Core – שכבת ה־API המרכזית המאפשרת remote functions, actors, תורים (queues) וניהול אובייקטים.
Ray Tune – ספריה לניסויים ואופטימיזציית היפר־פרמטרים.
Ray Train – ספריה להכשרה מבוזרת של מודלים.
RLlib – מערכת ללמידת חיזוק בקנה מידה גדול.
Ray Serve – שירות להצבת (deployment) מודלים מבוזר.
דוגמה בסיסית לפונקציה מבוזרת:
python
import ray
ray.init()
@ray.remote
def slow_function(x):
return x * 2
# קריאות מבוזרות
futures = [slow_function.remote(i) for i in range(100)]
results = ray.get(futures)
פיתוח מערכות מבוזרות עם Ray
יתרונות:
שימוש פשוט ב־Pythonic APIs
תמיכה טבעית ב־parallel execution
שילוב נוח עם PyTorch, TensorFlow, scikit-learn
יכולת לנהל משאבים (GPU, RAM) ברמת משימה
התאמה מלאה לסביבות Kubernetes, AWS, GCP ועוד
שלבי פיתוח אופייניים:
הגדרת הפונקציות כ־remote
שימוש ב־Actors לאובייקטים ארוכי חיים
פריסה על אשכול Kubernetes או על מכונות מרובות
שימוש ב־Ray Dashboard לניטור הריצה
פיתוח והטמעה של פתרונות מבוזרים עם Ray
קורל טכנולוגיות מציעה שירותי פיתוח מתקדמים לעיבוד מבוזר מבוסס Ray עבור סטארטאפים,
ארגונים תעשייתיים, גופי מחקר, ופלטפורמות SaaS. במסגרת שירותי החברה:
אפיון ארכיטקטורה מבוזרת עם Ray לפי דרישות ביצועים וזמינות
בניית תהליכי AI/ML סקלאביליים
הטמעת Ray בסביבות ענן היברידיות
שירותי DevOps ו־MLOps סביב Ray Serve ו־Tune
ייעוץ וליווי בצווארי בקבוק של ביצועים
למשל, קורל ליוותה חברת ביוטק בפיתוח מערכת המשלבת למידת חיזוק מבוזרת (בעזרת RLlib)
לייעול ניסויים פרה־קליניים על גבי אשכול קוברנטיס מבוזר בענן.
שאלות ותשובות בנושא Ray
האם ניתן להריץ קוד של PyTorch או TensorFlow על Ray?
כן. Ray מאפשר הרצה מבוזרת של מודלים מכל סוג, כולל PyTorch, TensorFlow ו־XGBoost.
Ray Train תומך באינטגרציות מובנות עם PyTorch Lightning ו־Horovod.
איך מתבצע ניהול משאבים ב־Ray?
Ray משתמש ב־Resource Scheduler חכם. ניתן להקצות לכל פונקציה או actor
דרישות כמו: num_cpus=4, num_gpus=1, וכך Ray ידאג להרצה רק כשהמשאבים זמינים.
מה ההבדל בין @ray.remote ל־Actor?
@ray.remote משמש לפונקציות stateless שמחזירות תוצאה.
Actor הוא אובייקט שמחזיק state ונשאר בזיכרון לאורך זמן, מתאים למשל ל־model serving או caches.
האם אפשר להשתמש ב־Ray בתוך Jupyter Notebook?
בהחלט. Ray עובד טוב גם בתוך Jupyter, אך נדרש לוודא שאין התנגשויות בהפעלת ה־event loop.
מומלץ להריץ ray.init(ignore_reinit_error=True) במידת הצורך.
האם Ray מתאים למערכות זמן אמת?
כן. במיוחד בשילוב עם Ray Serve שנבנה ל־model deployment ברמה של latency נמוך.
אך יש לבחון את זמני ה־cold start וה־scaling לפי צרכים.

