The Ray compute engine is a distributed compute implementation that leverages Ray for executing feature pipelines including transformations, aggregations, joins, and materializations. It provides scalable and efficient distributed processing for both materialize() and get_historical_features() operations.
GitBook Assistant
Quick Start with Ray Template
Ray RAG Template - Batch Embedding at Scale
For RAG (Retrieval-Augmented Generation) applications with distributed embedding generation:
Parallel Embedding Generation: Uses Ray compute engine to generate embeddings across multiple workers
GitBook Assistant
Vector Search Integration: Works with Milvus for semantic similarity search
GitBook Assistant
Complete RAG Pipeline: Data → Embeddings → Search workflow
GitBook Assistant
The Ray compute engine automatically distributes the embedding generation across available workers, making it ideal for processing large datasets efficiently.
GitBook Assistant
Overview
The Ray compute engine provides:
GitBook Assistant
Distributed DAG Execution: Executes feature computation DAGs across Ray clusters
GitBook Assistant
Intelligent Join Strategies: Automatic selection between broadcast and distributed joins
GitBook Assistant
Lazy Evaluation: Deferred execution for optimal performance
GitBook Assistant
Resource Management: Automatic scaling and resource optimization
GitBook Assistant
Point-in-Time Joins: Efficient temporal joins for historical feature retrieval
GitBook Assistant
GPU Support: Schedule transformation workers on GPU nodes via num_gpus config (all modes including KubeRay)
GitBook Assistant
Architecture
The Ray compute engine follows Feast's DAG-based architecture:
GitBook Assistant
Core Components
Component
Description
RayComputeEngine
GitBook Assistant
Main engine implementing ComputeEngine interface
GitBook Assistant
RayFeatureBuilder
GitBook Assistant
Constructs DAG from Feature View definitions
GitBook Assistant
RayDAGNode
GitBook Assistant
Ray-specific DAG node implementations
GitBook Assistant
RayDAGRetrievalJob
GitBook Assistant
Executes retrieval plans and returns results
GitBook Assistant
RayMaterializationJob
GitBook Assistant
Handles materialization job tracking
GitBook Assistant
Configuration
Configure the Ray compute engine in your feature_store.yaml:
Number of GPUs to request per worker task. Requires GPU nodes in the Ray cluster. Fractional values (e.g. 0.5) are supported. Supported in all modes including KubeRay.
GitBook Assistant
gpu_batch_format
GitBook Assistant
string
GitBook Assistant
"pandas"
GitBook Assistant
Batch format for map_batches when num_gpus is set. Use "numpy" or "pyarrow" for GPU-native libraries (e.g. cuDF, PyTorch).
GitBook Assistant
worker_task_options
GitBook Assistant
dict
GitBook Assistant
None
GitBook Assistant
Arbitrary Ray .options() kwargs applied to every worker task. See Worker Resource Scheduling for the full reference.
GitBook Assistant
Mode Detection Precedence
The Ray compute engine automatically detects the execution mode:
Join Strategy Selection: Chooses between broadcast and distributed joins
GitBook Assistant
Resource Allocation: Scales workers based on available resources
GitBook Assistant
Memory Management: Handles out-of-core processing for large datasets
GitBook Assistant
Manual Tuning
For specific workloads, you can fine-tune performance:
GitBook Assistant
Monitoring and Metrics
Monitor Ray compute engine performance:
GitBook Assistant
Worker Resource Scheduling
worker_task_options is a passthrough dict of Ray .options() kwargs applied to every worker task Feast dispatches. It pairs with ray_conf (cluster-level ray.init options) — worker_task_options targets individual worker tasks. Options are forwarded at two levels so Ray schedules correctly:
GitBook Assistant
On the @ray.remote orchestration task via .options(**worker_task_options) — controls node selection.
GitBook Assistant
Inside map_batches for the scheduling-relevant subset (num_gpus, num_cpus, accelerator_type, resources) — controls which nodes run the data workers.
GitBook Assistant
This is supported across all execution modes: local, remote, and KubeRay.
GitBook Assistant
Common worker_task_options keys
Key
Type
Description
num_cpus
GitBook Assistant
float
GitBook Assistant
CPUs per task (default: 1). Fractional values supported.
GitBook Assistant
memory
GitBook Assistant
int
GitBook Assistant
Heap memory in bytes (e.g. 8589934592 for 8 GB).
GitBook Assistant
accelerator_type
GitBook Assistant
string
GitBook Assistant
Pin tasks to a specific GPU model — "A100", "T4", "V100", etc. Useful on KubeRay clusters with mixed GPU node pools.
GitBook Assistant
resources
GitBook Assistant
dict
GitBook Assistant
Custom/Kubernetes extended resource labels, e.g. {"intel.com/gpu": 1}.
GitBook Assistant
runtime_env
GitBook Assistant
dict
GitBook Assistant
Per-task Ray runtime environment — pip, conda, env_vars, working_dir, etc. For KubeRay, use this to install packages on worker pods without rebuilding images.
GitBook Assistant
max_retries
GitBook Assistant
int
GitBook Assistant
Task retry count on worker failure (default: 3).
GitBook Assistant
scheduling_strategy
GitBook Assistant
string
GitBook Assistant
"DEFAULT", "SPREAD", or a placement group strategy.
num_gpus is the only first-class GPU field because it also drives gpu_batch_format selection inside Feast. Set it directly rather than inside worker_task_options:
GitBook Assistant
When num_gpus is set your transformation UDF runs on a GPU worker:
GitBook Assistant
Full example — KubeRay with GPU + all common options
Checking cluster resources
Integration Examples
With Spark Offline Store
With Cloud Storage
With Feature Transformations
On-Demand Transformations
Ray Native Transformations
For distributed transformations that leverage Ray's dataset and parallel processing capabilities, use mode="ray" in your BatchFeatureView:
# Complete example configuration for Ray offline store + Ray compute engine
# This shows how to use both components together for distributed processing
project: my_feast_project
registry: data/registry.db
provider: local
# Ray offline store configuration
# Handles data I/O operations (reading/writing data)
offline_store:
type: ray
storage_path: s3://my-bucket/feast-data # Optional: Path for storing datasets
ray_address: localhost:10001 # Optional: Ray cluster address
# Ray compute engine configuration
# Handles complex feature computation and distributed processing
batch_engine:
type: ray.engine
# Resource configuration
max_workers: 8 # Maximum number of Ray workers
max_parallelism_multiplier: 2 # Parallelism as multiple of CPU cores
# Performance optimization
enable_optimization: true # Enable performance optimizations
broadcast_join_threshold_mb: 100 # Broadcast join threshold (MB)
target_partition_size_mb: 64 # Target partition size (MB)
# Distributed join configuration
window_size_for_joins: "1H" # Time window for distributed joins
# Ray cluster configuration (inherits from offline_store if not specified)
ray_address: localhost:10001 # Ray cluster address
# Use Ray compute engine with Spark offline store
offline_store:
type: spark
spark_conf:
spark.executor.memory: "4g"
spark.executor.cores: "2"
batch_engine:
type: ray.engine
max_workers: 8
enable_optimization: true
GitBook AssistantAskCopy
# Use Ray compute engine with cloud storage
offline_store:
type: ray
storage_path: s3://my-bucket/feast-data
batch_engine:
type: ray.engine
ray_address: "ray://ray-cluster:10001"
broadcast_join_threshold_mb: 50
GitBook AssistantAskCopy
from feast import FeatureView, Field
from feast.types import Float64
from feast.on_demand_feature_view import on_demand_feature_view
@on_demand_feature_view(
sources=["driver_stats"],
schema=[Field(name="trips_per_hour", dtype=Float64)]
)
def trips_per_hour(features_df):
features_df["trips_per_hour"] = features_df["avg_daily_trips"] / 24
return features_df
# Ray compute engine handles transformations efficiently
features = store.get_historical_features(
entity_df=entity_df,
features=["trips_per_hour:trips_per_hour"]
)