Ray
Ray — це open-source фреймворк для масштабування Python-застосунків, AI workloads і машинного навчання від локального комп’ютера до кластерів із багатьма CPU, GPU або TPU.
Ray використовується для розподілених обчислень, data processing, model training, fine-tuning, batch inference, model serving, hyperparameter tuning, reinforcement learning, LLM applications, GenAI pipelines і high-performance Python workloads.
Основна ідея: Ray дозволяє взяти Python-функції, класи або ML-процеси й масштабувати їх на багато ядер, машин або GPU без повного переписування застосунку під складну distributed infrastructure.
Загальний опис
Ray можна розглядати як distributed runtime і набір AI-бібліотек для масштабування Python та ML-застосунків.
Ray складається з:
- Ray Core — базовий distributed runtime;
- Ray Data — distributed data processing;
- Ray Train — distributed model training і fine-tuning;
- Ray Tune — hyperparameter tuning;
- Ray Serve — model serving і scalable inference;
- RLlib — reinforcement learning;
- Ray Clusters — запуск Ray на локальних машинах, VM, Kubernetes або cloud;
- KubeRay — запуск і керування Ray у Kubernetes.
Офіційна документація описує Ray як open-source framework to build and scale ML and Python applications, а GitHub-репозиторій — як unified framework for scaling AI and Python applications із core distributed runtime і AI libraries. :contentReference[oaicite:0]{index=0}
Перевага: Ray об’єднує кілька частин AI pipeline — data processing, training, tuning, serving і reinforcement learning — навколо одного distributed runtime.
Для чого використовується Ray
Ray потрібен тоді, коли звичайного локального Python-коду вже недостатньо.
Типові задачі:
- parallel Python execution;
- distributed data processing;
- batch inference;
- distributed training;
- fine-tuning моделей;
- hyperparameter search;
- reinforcement learning;
- model serving;
- multi-GPU workloads;
- LLM inference;
- GenAI pipelines;
- scalable ETL;
- distributed simulation;
- cloud-native AI workloads.
Важливо: Ray не робить повільний або погано спроєктований код автоматично швидким. Потрібно правильно розбивати задачу, контролювати дані, ресурси, пам’ять, fault tolerance і network overhead.
Ray Core
Ray Core — це базовий distributed computing framework у Ray.
Ray Core надає три основні примітиви:
- tasks — розподілені функції;
- actors — stateful distributed objects;
- objects — distributed objects у shared-memory object store.
Офіційна документація Ray Core описує його як distributed computing framework із tasks, actors і objects для побудови та масштабування distributed applications. :contentReference[oaicite:1]{index=1}
Суть Ray Core: це фундамент Ray, який дозволяє перетворювати Python-функції та класи на distributed tasks і actors.
Tasks
Task у Ray — це remote function, яка може виконуватися паралельно на worker процесі.
Приклад:
import ray
ray.init()
@ray.remote
def square(x):
return x * x
refs = [square.remote(i) for i in range(5)]
results = ray.get(refs)
print(results)
У цьому прикладі:
- `@ray.remote` робить функцію distributed task;
- `square.remote(i)` запускає task;
- `ray.get(refs)` отримує результати;
- Ray сам планує виконання tasks на доступних ресурсах.
Просте пояснення: task — це Python-функція, яку Ray може виконати не лише в поточному процесі, а паралельно в distributed environment.
Actors
Actor у Ray — це stateful distributed object.
Actors корисні, коли потрібно зберігати стан між викликами:
- model worker;
- cache;
- service object;
- simulator;
- environment у reinforcement learning;
- long-running process;
- stateful pipeline component.
Приклад:
import ray
ray.init()
@ray.remote
class Counter:
def __init__(self):
self.value = 0
def increment(self):
self.value += 1
return self.value
counter = Counter.remote()
print(ray.get(counter.increment.remote()))
print(ray.get(counter.increment.remote()))
Суть actor: це distributed class instance, який живе в Ray cluster і може зберігати стан між remote method calls.
Objects
Objects у Ray — це дані, які створюються tasks або actors і зберігаються в distributed object store.
Документація Ray пояснює, що tasks і actors створюють objects та працюють з objects; remote objects можуть зберігатися будь-де в Ray cluster, а object refs використовуються для посилання на них. Ray кешує remote objects у distributed shared-memory object store. :contentReference[oaicite:2]{index=2}
Objects можуть бути:
- результатами функцій;
- batch data;
- model weights;
- intermediate results;
- large arrays;
- references між tasks;
- даними для downstream processing.
Практична роль: object store дозволяє різним tasks і actors обмінюватися даними без ручного керування файлами, sockets або message queues.
Object refs
ObjectRef — це посилання на object у Ray.
Коли remote task запускається, вона часто повертає не сам результат одразу, а reference:
ref = square.remote(10)
result = ray.get(ref)
Це дозволяє:
- запускати обчислення асинхронно;
- будувати dependency graph;
- передавати результати між tasks;
- не блокувати виконання без потреби;
- масштабувати parallel workflows.
Важливо: надмірне використання `ray.get` у неправильному місці може зменшити паралельність, бо код почне чекати результатів занадто рано.
Ray Data
Ray Data — це бібліотека Ray для distributed data processing.
Ray Data може використовуватися для:
- ETL;
- batch inference;
- preprocessing;
- reading datasets;
- transformation pipelines;
- distributed map operations;
- streaming data pipelines;
- feeding data into training;
- large-scale data workloads.
Практична роль: Ray Data допомагає обробляти великі datasets і передавати їх у training або inference pipeline.
Batch inference
Batch inference — це запуск моделі на великому наборі даних.
Ray часто використовується для batch inference, коли потрібно:
- обробити мільйони документів;
- зробити embeddings;
- класифікувати великий dataset;
- запускати LLM або vision model на batch;
- використовувати GPU ефективніше;
- паралелити inference між worker nodes;
- поєднати data loading і model prediction.
Перевага: Ray дозволяє розподіляти inference workload між багатьма worker processes або GPU, що особливо корисно для AI pipeline.
Ray Train
Ray Train — це бібліотека для distributed training і fine-tuning.
Офіційна документація описує Ray Train як scalable machine learning library for distributed training and fine-tuning, яка дозволяє масштабувати training code з однієї машини до cluster of machines і абстрагує складність distributed computing. :contentReference[oaicite:3]{index=3}
Ray Train може використовуватися для:
- distributed PyTorch training;
- TensorFlow training;
- multi-GPU training;
- fine-tuning LLM;
- training на великих datasets;
- fault-tolerant training;
- cloud training jobs;
- integration with Ray Data.
Суть Ray Train: він допомагає масштабувати навчання моделей без ручного керування всією distributed training інфраструктурою.
Ray Tune
Ray Tune — це бібліотека для hyperparameter tuning.
Ray Tune може використовуватися для:
- grid search;
- random search;
- Bayesian optimization;
- early stopping;
- distributed trials;
- experiment tracking;
- tuning ML models;
- tuning deep learning training;
- пошуку learning rate, batch size, model size, regularization;
- оптимізації costly experiments.
Практична роль: Ray Tune дозволяє паралельно запускати багато training trials і швидше знаходити вдалі гіперпараметри.
Ray Serve
Ray Serve — це бібліотека для scalable model serving.
Ray Serve може використовуватися для:
- serving ML models;
- LLM serving;
- online inference;
- microservices with Python;
- autoscaling deployments;
- model composition;
- A/B testing;
- multi-model serving;
- batch або streaming inference endpoint;
- integration with FastAPI-style workflows.
Суть Ray Serve: Ray Serve допомагає перетворити модель або Python-функцію на scalable online service.
RLlib
RLlib — це бібліотека Ray для reinforcement learning.
Офіційна документація описує RLlib як open source library for reinforcement learning, що підтримує production-level, highly scalable і fault-tolerant RL workloads через unified APIs. :contentReference[oaicite:4]{index=4}
RLlib може використовуватися для:
- reinforcement learning;
- multi-agent RL;
- simulation environments;
- policy training;
- distributed rollout workers;
- scalable RL experiments;
- research і production RL workloads.
Важливо: reinforcement learning складний сам по собі. RLlib допомагає масштабувати RL workloads, але не скасовує потреби в правильній постановці environment, reward function і evaluation.
Ray Cluster
Ray Cluster — це набір машин або worker nodes, на яких запускається Ray.
Ray cluster може працювати:
- локально на одній машині;
- на кількох VM;
- у cloud;
- у Kubernetes;
- через KubeRay;
- у managed платформі;
- у hybrid environments.
Ray cluster зазвичай містить:
- head node;
- worker nodes;
- scheduler;
- object stores;
- workers;
- dashboard;
- autoscaling mechanism залежно від setup.
Просте пояснення: Ray cluster — це середовище, де Ray розподіляє tasks, actors і objects між різними ресурсами.
KubeRay
KubeRay — це інструментарій для запуску Ray на Kubernetes.
KubeRay може допомагати:
- створювати RayCluster;
- керувати Ray workloads у Kubernetes;
- запускати Ray jobs;
- масштабувати workers;
- інтегрувати Ray із cloud-native infrastructure;
- запускати AI workloads у Kubernetes;
- використовувати Kubernetes scheduling, networking і observability.
Практична роль: KubeRay потрібен командам, які вже використовують Kubernetes і хочуть запускати Ray workloads у cloud-native середовищі.
Ray Dashboard
Ray Dashboard — це інтерфейс для спостереження за Ray cluster.
Dashboard допомагає бачити:
- running tasks;
- actors;
- nodes;
- resources;
- CPU/GPU usage;
- memory usage;
- object store usage;
- logs;
- errors;
- job status;
- performance bottlenecks.
Практична користь: без observability distributed system швидко стає “чорною скринькою”, тому dashboard і logs критично важливі.
Autoscaling
Ray може використовувати autoscaling у відповідних cluster setups.
Autoscaling допомагає:
- додавати worker nodes при зростанні навантаження;
- зменшувати ресурси, коли workload завершується;
- оптимізувати cost;
- обробляти burst workloads;
- запускати distributed jobs у cloud;
- масштабувати training, inference або data workloads.
Важливо: autoscaling потрібно налаштовувати обережно, інакше можна отримати надмірні cloud-витрати або нестабільну продуктивність.
Fault tolerance
Distributed workloads мають ризики збоїв.
Ray може підтримувати механізми fault tolerance залежно від типу workload і налаштувань:
- task retry;
- actor restart;
- node failure handling;
- checkpointing;
- object reconstruction;
- job recovery;
- training checkpoints;
- serving resilience.
Критично: fault tolerance не з’являється автоматично для будь-якої логіки. Для важливих workload потрібно проєктувати checkpointing, retry, idempotency і recovery.
Ray і Python
Ray особливо тісно пов’язаний із Python.
Ray дозволяє:
- масштабувати Python-функції;
- масштабувати Python-класи;
- запускати distributed ML code;
- використовувати familiar Python APIs;
- поєднувати NumPy, pandas, PyTorch, TensorFlow та інші бібліотеки;
- запускати jobs локально або на cluster.
Перевага для Python-розробника: Ray дозволяє залишатися в Python-екосистемі й поступово переходити від локального коду до distributed execution.
Ray і PyTorch
Ray часто використовується разом із PyTorch.
Можливі сценарії:
- distributed PyTorch training через Ray Train;
- hyperparameter tuning PyTorch моделей через Ray Tune;
- batch inference;
- serving PyTorch моделей через Ray Serve;
- multi-GPU experiments;
- LLM fine-tuning;
- reinforcement learning з PyTorch policies.
Практична роль: PyTorch відповідає за модель і tensor operations, а Ray — за масштабування training, inference, tuning або serving.
Ray і TensorFlow
Ray також може використовуватися з TensorFlow.
Типові сценарії:
- distributed training;
- hyperparameter tuning;
- serving моделей;
- batch inference;
- data preprocessing;
- experiment orchestration.
Висновок: Ray не замінює TensorFlow, а може допомагати масштабувати TensorFlow workloads у distributed environment.
Ray і Scikit-learn
Ray може доповнювати Scikit-learn у задачах, де потрібно масштабування.
Приклади:
- parallel hyperparameter tuning;
- distributed cross-validation;
- batch inference;
- preprocessing великого dataset;
- запуск багатьох експериментів;
- scalable classical ML workflows.
Практична роль: Scikit-learn добре підходить для класичного ML, а Ray може допомогти масштабувати експерименти навколо нього.
Ray і Spark
Ray часто порівнюють з Apache Spark.
| Критерій | Ray | Apache Spark |
|---|---|---|
| Основний фокус | Distributed Python, AI workloads, ML training, inference, serving | Big data processing, SQL, ETL, batch analytics |
| Програмна модель | Tasks, actors, objects, AI libraries | DataFrames, RDD, SQL, Spark jobs |
| AI workloads | Сильний фокус на ML/AI, GPU, serving, tuning | Часто використовується для data engineering і batch processing |
| Python flexibility | Ближчий до general Python distributed computing | Більше орієнтований на Spark execution model |
| Типові задачі | Training, inference, RL, ML pipelines, distributed Python | ETL, data lake processing, analytics, SQL workloads |
Висновок: Spark сильний у big data ETL і SQL-аналітиці, а Ray часто краще підходить для гнучких Python/AI workloads, training, inference і model serving.
Ray і Dask
Ray також можна порівняти з Dask.
| Критерій | Ray | Dask |
|---|---|---|
| Основний фокус | Distributed Python і AI workloads | Parallel і distributed computing для Python data ecosystem |
| Типові дані | AI pipelines, ML, inference, actors, training | DataFrames, arrays, delayed computations |
| Сильна сторона | Tasks, actors, AI libraries, model serving | Масштабування pandas/NumPy-like workflows |
| Типові користувачі | ML engineers, AI platform teams, Python backend teams | Data scientists, data engineers, scientific Python users |
Висновок: Dask зручний для parallel data workflows у стилі pandas/NumPy, а Ray — для ширших distributed AI і Python applications.
Ray і Kubernetes
Ray може працювати поверх Kubernetes через KubeRay.
Це дає:
- container orchestration;
- pod scheduling;
- resource isolation;
- cluster management;
- integration with cloud-native tooling;
- observability;
- autoscaling;
- GitOps workflows;
- infrastructure consistency.
Важливо: Kubernetes додає потужність, але й складність. Для невеликого prototype Ray можна запускати локально, а Kubernetes залишити для production або platform engineering.
Ray і Anyscale
Anyscale — це компанія, пов’язана з розвитком Ray і managed-платформами для Ray workloads.
Ray є open-source фреймворком, а Anyscale надає комерційні інструменти й platform experience для розгортання Ray у production.
Офіційний сайт Ray by Anyscale описує Ray як open source framework для managing, executing and optimizing compute needs, з фокусом на AI workloads: data processing, training і serving. :contentReference[oaicite:5]{index=5}
Суть: Ray — open-source проєкт, Anyscale — комерційна екосистема й платформа навколо Ray.
Ray і PyTorch Foundation
У 2025 році PyTorch Foundation повідомила, що Ray став foundation-hosted project. У повідомленні Ray описано як open-source distributed computing framework for AI workloads, включно з data processing, model training і inference at scale. :contentReference[oaicite:6]{index=6}
Практична роль: foundation-hosted статус підкреслює значення Ray у ширшій open-source AI infrastructure екосистемі.
Переваги Ray
Основні переваги Ray:
- open-source;
- масштабування Python-коду;
- прості primitives: tasks, actors, objects;
- підтримка AI workloads;
- Ray Data;
- Ray Train;
- Ray Tune;
- Ray Serve;
- RLlib;
- підтримка CPU і GPU workloads;
- локальний і cluster запуск;
- Kubernetes через KubeRay;
- Python-friendly API;
- корисність для ML, LLM і GenAI pipeline;
- можливість масштабувати від laptop до cloud cluster.
Головна перевага: Ray дозволяє масштабувати AI і Python workloads без переходу на повністю іншу мову або зовсім іншу програмну модель.
Обмеження Ray
Ray має обмеження.
Можливі складнощі:
- distributed systems складні самі по собі;
- debugging важчий, ніж у локальному Python;
- network overhead може зменшити виграш;
- object store може стати bottleneck;
- потрібне планування ресурсів;
- GPU scheduling потребує уваги;
- неправильний `ray.get` може зламати parallelism;
- autoscaling може створити cost risks;
- production deployment потребує observability;
- не кожну задачу варто масштабувати через Ray;
- потрібне розуміння fault tolerance.
Помилка: додавати Ray до будь-якого Python-коду лише “для швидкості”. Якщо задача маленька або має багато дрібних залежних кроків, Ray може не дати виграшу.
Безпека
Ray workloads можуть працювати з кодом, даними, моделями, ключами, cloud resources і мережевими сервісами, тому безпека є критичною.
Потрібно контролювати:
- доступ до Ray dashboard;
- доступ до Ray cluster;
- network exposure;
- credentials;
- environment variables;
- secrets;
- object store data;
- model artifacts;
- datasets;
- logs;
- permissions у cloud;
- container images;
- supply chain dependencies.
Критично: Ray cluster не можна бездумно відкривати в публічну мережу. Доступи, firewall, authentication, network policies і secrets management потрібно налаштовувати окремо.
Приватність даних
Під час роботи з Ray потрібно уважно ставитися до даних, які передаються між tasks, actors, object store і cluster nodes.
Не варто без потреби обробляти або логувати:
- персональні дані;
- фінансові дані;
- медичні дані;
- секретні ключі;
- customer data;
- приватні документи;
- production database dumps;
- комерційні таємниці;
- неанонімізовані datasets.
Правило: distributed pipeline має ті самі privacy-вимоги, що й локальний pipeline, але з більшим ризиком через більше машин, логів, cache і мережевих шляхів.
Відповідальне використання
Ray потрібно використовувати як infrastructure tool, а не як гарантію правильності ML-рішення.
Рекомендовано:
- тестувати локально до запуску на cluster;
- починати з малого workload;
- вимірювати performance;
- контролювати cost;
- додавати logging;
- використовувати metrics;
- налаштовувати retries;
- робити checkpointing;
- перевіряти security;
- обмежувати permissions;
- документувати cluster setup;
- перевіряти data governance;
- тестувати failure scenarios.
Професійний підхід: Ray має масштабувати добре спроєктований pipeline, а не приховувати проблеми архітектури, даних або коду.
Типові сценарії використання
Ray можна використовувати у різних сценаріях.
Приклади:
- batch inference для великого dataset;
- distributed training PyTorch-моделі;
- fine-tuning LLM;
- hyperparameter tuning;
- scalable embeddings pipeline;
- reinforcement learning experiment;
- model serving API;
- distributed simulation;
- parallel web data processing;
- large-scale feature engineering;
- multi-GPU inference;
- GenAI document processing pipeline;
- Kubernetes-based AI platform.
Практична порада: перед впровадженням Ray варто чітко визначити bottleneck: CPU, GPU, IO, memory, network або model latency.
Типові помилки користувачів
Під час роботи з Ray часто виникають типові помилки.
До них належать:
- занадто дрібні tasks;
- занадто частий `ray.get`;
- передача великих objects без потреби;
- відсутність resource annotations;
- неправильне планування GPU;
- відсутність retry logic;
- відсутність checkpointing;
- ігнорування object store memory;
- запуск cluster без observability;
- відкритий dashboard;
- неконтрольовані cloud costs;
- відсутність тестів перед масштабуванням;
- відсутність cleanup після jobs.
Небезпека: distributed workload може працювати повільніше й дорожче за локальний, якщо розбити задачу неправильно або не контролювати overhead.
Хороші практики роботи з Ray
Рекомендовано:
- починати локально;
- вимірювати baseline без Ray;
- робити tasks достатньо великими;
- уникати зайвого `ray.get`;
- використовувати actors для stateful workloads;
- контролювати object store memory;
- задавати CPU/GPU resources;
- використовувати checkpointing;
- налаштовувати logs і metrics;
- тестувати failure cases;
- використовувати dashboard;
- контролювати cloud costs;
- захищати cluster access;
- документувати pipeline.
Головне правило: Ray найкраще працює тоді, коли задача має реальну паралельність, достатньо великі одиниці роботи і зрозумілу стратегію керування ресурсами.
Приклади задач
Parallel Python tasks
Задача: виконати багато незалежних обчислень.
Інструмент: Ray Core tasks.
Результат: паралельний запуск Python-функцій на доступних CPU.
Batch inference
Задача: обробити великий dataset моделлю.
Інструмент: Ray Data + Ray actors або Ray Serve.
Результат: scalable inference pipeline з контрольованим використанням CPU/GPU.
Distributed training
Задача: навчити модель на кількох GPU або машинах.
Інструмент: Ray Train.
Результат: training job, який масштабується з laptop до cluster.
Hyperparameter tuning
Задача: підібрати learning rate, batch size і model parameters.
Інструмент: Ray Tune.
Результат: паралельний запуск trials і вибір найкращої конфігурації.
Model serving
Задача: розгорнути модель як online inference service.
Інструмент: Ray Serve.
Результат: scalable endpoint для prediction-запитів.
Підказка: якщо задача має незалежні шматки роботи, Ray Core може бути достатнім. Якщо йдеться про ML pipeline, варто дивитися Ray Data, Train, Tune або Serve.
Джерела
- Офіційний сайт Ray.
- Офіційна документація Ray.
- Ray Core documentation.
- Ray Data documentation.
- Ray Train documentation.
- Ray Tune documentation.
- Ray Serve documentation.
- RLlib documentation.
- Ray GitHub repository.
- KubeRay documentation.
- PyTorch Foundation announcement щодо Ray.
Висновок
Ray — це open-source фреймворк для масштабування Python і AI workloads. Він надає Ray Core для distributed tasks, actors і objects, а також AI-бібліотеки для data processing, training, tuning, serving і reinforcement learning.
Ray особливо корисний для ML-команд, AI platform teams, Python-розробників і data/ML engineers, яким потрібно масштабувати код від локального ноутбука до cluster або cloud. Водночас Ray вимагає розуміння distributed systems: resource scheduling, memory, object store, retries, checkpointing, observability, security і cost control.
Головна думка: Ray — це практичний distributed runtime для Python і AI, який допомагає масштабувати data processing, training, inference і serving, але ефективність залежить від правильної архітектури workload і контролю ресурсів.
Див. також
- Штучний інтелект
- Machine Learning
- Deep Learning
- Python
- PyTorch
- TensorFlow
- Scikit-learn
- JAX
- Distributed computing
- Apache Spark
- Dask
- Kubernetes
- KubeRay
- MLOps
- Model serving
- Batch inference
- Hyperparameter tuning
- Reinforcement learning
- Ray Serve
- Ray Train
- Ray Tune
- RLlib