Ray-кластери для ШІ: архітектура розподілених обчислень
Оновлено 11 грудня 2025 року
Оновлення за грудень 2025: OpenAI використовує Ray для координації навчання ChatGPT. Приєднання Ray до PyTorch Foundation підтверджує корпоративне впровадження. Фреймворк масштабується від ноутбука до тисяч GPU. Досягає мільйонів завдань на секунду із затримкою менше мілісекунди — на порядок швидше за Spark для патернів ШІ. Нативна підтримка гетерогенних обчислень для змішаних навантажень CPU/GPU.
OpenAI використовує Ray для координації навчання ChatGPT та інших моделей.¹ Фреймворк масштабується від ноутбука до кластерів із тисяч GPU, обробляючи складність розподілених обчислень, яка інакше вимагала б створення власної інфраструктури для кожного проєкту. Впровадження Ray стрімко зросло протягом 2025 року, що підтверджується приєднанням фреймворку до PyTorch Foundation та залученням капіталу компанією 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-нативні розподілені обчислення з API DataFrame та масивів. Легший за Spark, але не має акторної моделі Ray та ML-специфічних бібліотек.
Horovod: Зосереджений конкретно на розподіленому навчанні глибокого навчання. Менш гнучкий за Ray для різноманітних ШІ-навантажень, але простіший для сценаріїв чистого навчання.
Перевага Ray: Єдиний фреймворк обробляє обробку даних, навчання, налаштування гіперпараметрів та обслуговування інференсу. Команди уникають управління кількома системами та складності інтеграції між ними.
Продакшен-впровадження
Великі організації використовують Ray у продакшені:⁶
- OpenAI: Координація навчання ChatGPT
- Uber: Платформа розподіленого ML
- Instacart: Основа ML-інфраструктури
- Shopify: Продакшен ML-навантаження
- Ant Group: Великомасштабний фінансовий ML
Ray-кластери офіційно підтримують до 2000 вузлів, забезпечуючи масштаб, необхідний для навчання передових моделей та високонавантаженого інференсу.
Архітектура Ray
Основні абстракції
Ray надає дві фундаментальні абстракції для розподілених обчислень:
Завдання (Tasks): Функції без збереження стану, що виконуються віддалено. Ray автоматично планує завдання на доступних воркерах, обробляє збої та повертає результати.
import ray
ray.init()
@ray.remote
def process_batch(data):
# Виконується на будь-якому доступному воркері
return transform(data)
# Виконання паралельно
futures = [process_batch.remote(batch) for batch in batches]
results = ray.get(futures)
Актори (Actors): Об'єкти зі збереженням стану, розподілені по кластеру. Кожен актор зберігає стан між викликами методів, забезпечуючи патерни на кшталт обслуговування моделей, серверів параметрів та ігрових середовищ.
@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)
# Створення екземпляра актора
server = ModelServer.remote("model.pt")
# Віддалений виклик методів
prediction = ray.get(server.predict.remote(data))
Архітектура кластера
Ray-кластери складаються з головного вузла та робочих вузлів:
Головний вузол (Head node): Запускає Global Control Store (GCS) для управління станом кластера, директорію об'єктів для відстеження розташування даних та планувальник для координації розміщення завдань.
Робочі вузли (Worker nodes): Виконують завдання та акторів. Кожен воркер запускає демон Raylet, який обробляє локальне планування та управління об'єктами.
Сховище об'єктів (Object store): Розподілена спільна пам'ять, що забезпечує передачу даних без копіювання між завданнями на одному вузлі та ефективну серіалізацію між вузлами.
Управління ресурсами
Ray явно управляє гетерогенними ресурсами:
@ray.remote(num_cpus=4, num_gpus=1)
def train_step(model, data):
# Гарантовано 4 CPU та 1 GPU
return model.train(data)
Користувацькі ресурси забезпечують дрібнозернисте планування:
# Запит конкретного обладнання
@ray.remote(resources={"TPU": 1})
def tpu_inference(data):
return run_on_tpu(data)
Бібліотеки Ray AI
Ray включає спеціалізовані бібліотеки для типових ШІ-навантажень:
Ray Train
Абстракція розподіленого навчання з підтримкою PyTorch, TensorFlow та інших фреймворків:
from ray.train.torch import TorchTrainer
from ray.train import ScalingConfig
def train_func():
# Стандартний код навчання PyTorch
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 до багатовузлових кластерів зі зміною 2 рядків коду - Автоматичне розподілене завантаження даних та синхронізація градієнтів - Управління контрольними точками та відновлення після збоїв - Інтеграція з 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-сумісний API для обслуговування LLM - 60% скорочення часу до першого токена з prefix-aware маршрутизацією⁹
Ray Data
Розподілене завантаження та попередня обробка даних:
import ray
ds = ray.data.read_parquet("s3://bucket/data/")
ds = ds.map(preprocess)
ds = ds.filter(lambda x: x["label"] > 0)
# Конвертація в 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
Сховище: Використовуйте persistent volumes для контрольних точок та спільне сховище для великих наборів даних:
volumes:
- name: shared-storage
persistentVolumeClaim:
claimName: ml-data-pvc
Моніторинг: Інтегруйте з Prometheus та Grafana для спостережуваності:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
Хмарно-специфічні розгортання
GKE: Аддон Ray on GKE надає керовані Ray-кластери з автоматичним створенням та інтеграцією з сервісами Google Cloud.¹²
EKS: Розгортайте KubeRay з Cluster Autoscaler або Karpenter для масштабування вузлів. Інтеграція з FSx for Lustre забезпечує високопродуктивне спільне сховище.
AKS: Microsoft та Anyscale пропонують Anyscale on Azure як власний сервіс, доступний з Azure Portal.¹³
Керований Ray від Anyscale
Anyscale, компанія, заснована творцями Ray, пропонує керовані розгортання Ray:
Платформа Anyscale
Керовані кластери: Продакшен-готові Ray-кластери з автоматичним масштабуванням, відмовостійкістю та моніторингом без управління інфраструктурою.
Середовище виконання RayTurbo: Пропрієтарні покращення продуктивності, що забезпечують вищу стійкість, швидшу продуктивність та нижчу вартість порівняно з відкритим Ray.¹⁴
Корпоративні функції: Рольовий контроль доступу, журналювання аудиту, VPC peering та сертифікації відповідності.
Хмарні партнерства
CoreWeave: Anyscale BYOC (Bring Your Own Cloud) розгортається безпосередньо в клієнтських акаунтах CoreWeave через CoreWeave Kubernetes Service.¹⁵
Azure: Власний сервіс Anyscale доступний в Azure Portal з нативною інтеграцією.
AWS: Anyscale працює на AWS з інтеграцією в існуючі сервіси AWS.
Коли використовувати Anyscale
**Розгляньте Anysc