Skip to content

[Proposal] Make StormService the unified abstraction for distributed inference workloads#2612

Description

@lettycat

馃殌 Feature Description and Motivation

Currently, AIBrix uses StormService as the inference workload abstraction, while distributed inference workloads may additionally require RayClusterFleet to provide the underlying distributed execution environment.

This separation provides a clear boundary between inference lifecycle management and distributed runtime management. However, it also exposes runtime implementation details to users who only want to deploy and operate LLM inference services.

For GenAI inference workloads, users typically think in terms of:

  • Model to deploy
  • Inference engine (vLLM/SGLang)
  • Parallelism strategy (TP/PP/EP)
  • GPU resources
  • Replica count

They usually do not need to understand whether the underlying distributed execution is implemented through RayClusterFleet, Kubernetes primitives, or other runtime frameworks.

This proposal suggests making StormService the primary user-facing inference abstraction while allowing AIBrix to manage the lifecycle of underlying distributed runtime resources such as RayClusterFleet.

This proposal does not require removing RayClusterFleet. Instead, RayClusterFleet can remain an internal implementation resource managed by AIBrix controllers.

Use Case

For large-scale LLM inference workloads, distributed execution is commonly required.

For example, deploying a model with:

  • Model: DeepSeek/Qwen/Llama
  • Engine: vLLM
  • Tensor Parallel Size: TP=16
  • Replicas: 2
  • GPU requirement: 16 GPUs per replica

The user's intention is simply:

Deploy a distributed inference service with TP=16.

However, the current workflow requires users to understand and manage multiple resources:

StormService
      +
RayClusterFleet

Users need to understand:

  • When RayClusterFleet should be created
  • How RayClusterFleet relates to StormService
  • How lifecycle management is coordinated
  • How failures and upgrades propagate between these resources

This becomes especially challenging for:

  • Multi-node tensor parallel inference
  • Pipeline parallel inference
  • Expert parallel inference for MoE models
  • Production LLM serving platforms

Proposed Solution

Introduce a unified distributed inference abstraction inside StormService.

Example:

apiVersion: serving.aibrix.io/v1alpha1
kind: StormService

spec:
  model:
    name: deepseek-model

  runtime:
    engine: vllm

  parallelism:
    tensorParallelSize: 16

  resources:
    gpu: 16

  replicas: 2

The StormService controller manages the underlying runtime resources:

StormService

      |
      |
      +---- RayClusterFleet

              |
              |
              +---- RayCluster

                      |
                      |
                      +---- Worker Pods

Advanced users may still access lower-level runtime resources if needed, but the default user experience should only require StormService.


Benefits

1. Unified User Experience

Users can deploy both single-node and distributed inference workloads through the same abstraction.

Example:

Single node:

StormService

Multi-node:

StormService
      |
      +-- RayClusterFleet

2. Runtime Abstraction

StormService becomes independent from a specific distributed execution framework.

Future implementations could support:

StormService

    |
    +-- Ray backend

    |
    +-- Kubernetes native backend

    |
    +-- Other distributed runtime

3. Easier Platform Integration

Higher-level GenAI inference platforms can integrate with AIBrix through a single inference API without exposing runtime implementation details.


Open Questions

  • Should RayClusterFleet lifecycle management be fully handled by the StormService controller?
  • Should direct RayClusterFleet creation remain supported for advanced users?
  • Should this behavior be enabled by default or through an optional configuration?
  • How should existing StormService + RayClusterFleet deployments migrate?

Alternatives Considered

Option 1: Keep current resource model

Pros:

  • Clear separation between inference and runtime layers
  • Reuses existing KubeRay abstractions

Cons:

  • Requires users to understand multiple abstractions
  • Exposes runtime implementation details
  • Increases operational complexity for inference users

Option 2: Introduce a new higher-level CRD

Example:

InferenceService

    |
    +-- StormService

    |
    +-- RayClusterFleet

Pros:

  • Keeps existing resources unchanged

Cons:

  • Adds another abstraction layer
  • Increases API complexity

Proposal Summary

The goal is not to remove RayClusterFleet, but to make StormService the unified inference-facing abstraction.

Similar to Kubernetes:

Deployment
    |
    +-- ReplicaSet
          |
          +-- Pod

Users should interact with the desired inference workload, while controllers manage the underlying execution resources.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions