What changed in Ray from 1 to 2
71 releases numbered after 1.13.0 up to and including 2.58.0, stable releases only. 1.13.0 and 2.58.0 are the newest stable releases of 1 and 2 we track; this page follows them as new ones ship.
- 10 CVEs mentioned
- 4 mention breaking changes
- 27 remove or deprecate something
1059 changes across 71 releases · 1 landed on more than one version
- Add Dataset.with_columns for multi-column expression projection
- Add write_delta for Delta Lake with catalog support
- Add Torch inference API
- Promote hash shuffle v2 to a selectable shuffle strategy with aggregation support, vectorized aggregation, and block splitting during aggregation
- Add ignore_missing_paths and skip_paths to read_parquet on DatasourceV2
- Add delta_timestamps (temporal windows) to read_lerobot
- Collect cluster usage metrics by sampling in background threads during execution
- Tolerate actor deaths during init via DataContext.max_consecutive_actor_init_deaths
- Expose RAY_DATA_HASH_SHUFFLE_MAP_TASK_TARGET_INPUT_BYTES in DataContext
- Add configurable status code and Retry-After header for backpressure rejections
- Add dependency-ordered shutdown for deployments
- Add an optional tie-break key to best-fit node scheduling
- Scale ingress request router replicas per proxy node
- Ray Train integrates with TorchTPU backend
- Add a public preemption API and a controller PreemptingState
- Add data ingest metrics to the Train dashboard
- Add experimental Ray Sandbox which runs task and actor code under gVisor and can run Docker-built images directly
- Add SubslicePlacementGroup for gang scheduling on TPU subslices and single-host TPU support in SlicePlacementGroup
- Enable DataSourceV2 by default via DataContext.use_datasource_v2
- Add task-based hash shuffle v2 with ShuffleMapOp, ShuffleReduceOp, join support, multi-input reduce, downstream map fusion, and reducer remote args
- Add Catalog abstraction with UnityCatalog implementation for read operations and Unity Catalog write support for Parquet and Iceberg
- Add read_zarr for Zarr datasets
- Add read_lerobot for LeRobot v3 datasets
- Add PushdownCountFiles optimization to answer count() from Parquet footers
- Add common subexpression elimination to the expression optimizer
- Add GPU support for Aggregate
- Make dataset iteration metrics queryable per split
- Add custom operator stats to capture worker-side metrics during task execution
- Add embedded RocksDB storage backend for GCS fault tolerance selectable with RAY_gcs_storage=rocksdb and RAY_gcs_storage_path
- Add public API for topology-aware scheduling
- Add gRPC support to HAProxy direct-ingress path including streaming, metrics, and custom request IDs
- Add experimental KV-cache-aware request routing that tracks replica KV state, tokenizes before routing, and routes on prefill/decode token load
- Support multiple datasets per cluster via subcluster labels and resource partitioning
- Add Dataset.mix() public API and MixOperator for weighted dataset mixing
- Implement new DataSourceV2 framework with ParquetDatasourceV2, chunked reader, predicate splitting, and listing/scanner infrastructure
- Add batch_size='auto' to map_batches to derive batch row count from target row batch size
- Implement distributed upsert for Iceberg using task-based merge algorithm
- Add include_row_hash to read_parquet
- Add JAX data iterator
- Expose isolate_read_workers flag to run read tasks on isolated worker processes
- Expose default_map_logical_memory_enabled flag to set default logical memory for map operators
- Support predicate pushdown for Lance format
- Support per-partition start_offset and end_offset for read_kafka
- Add obstore async download backend for download operator
- Support UDF retries on transient exceptions
- Add GPU-domain-aware placement groups using label locality for packing bundles onto nodes with ray.io/gpu-domain label
- Add initial Kubernetes in-place pod resizing support for Autoscaler v2
- Introduce session-sticky routing via consistent hashing with ConsistentHashRouter
- Add CapacityQueueRouter for supply-constrained workloads
- Add DataSourceV2 API with scanner/reader framework, file listing, and file partitioning
- Support GPU shuffle with rapidsmpf 26.2
- Add Kafka datasink, migrate to confluent-kafka, support datetime offsets
- Add Turbopuffer datasink
- Add 2-phase commit checkpointing with trie recovery and load method
- Integrate queue-based autoscaling policy with task consumers
- Enable autoscaling for GPU stages
- Add random(), uuid(), cast, and map namespace support to Expressions
- Add support for Arrow native fixed-shape tensor type
- Support writing tensors to tfrecords
- Add pathlib.Path support to read_* functions
- Add cudf as a batch_format
- Allow ActorPoolStrategy for read_datasource() via compute parameter
- Introduce ExecutionCache for streamlined caching
- Support strict=False mode for StreamingRepartition
- Add monotonically increasing ID support
- Add checkpointing support to Ray Data
- Add list operations, fixed-size arrays, string padding, logarithmic, trigonometric, arithmetic, and rounding to Compute Expressions
- Add sql_params support to read_sql
- Add AsList aggregation
- Support CountDistinct aggregate
- Add credential provider abstraction for Databricks UC datasource
- Support callable classes for UDFExpr
- Add autoscaler metrics to Data Dashboard
- Add optional filesystem parameter to download expression
- Allow specifying partitioning style or flavor in write_parquet()
- Enable new cluster autoscaler by default
- Add Queue-based autoscaling for TaskConsumer deployments with QueueMonitor actor support for Redis and RabbitMQ
- Add Kafka as a native datasource for data ingestion
- Add Dataset.summary() API for quick dataset inspection
- Add Iceberg schema evolution, upsert, and overwrite support
- Add should_continue_on_error for graceful error handling in batch inference
- Add datetime compute expressions support
- Enable expressions for grouped with_column in Ray Data
- Add new utilization-based cluster autoscaler for Ray Data workloads
- Add deployment topology visibility in Serve REST API to visualize deployment dependency graphs
- Add external_scaler_enabled flag to application config for third-party autoscaler integration
- Add node rank and local rank support to replica rank system for multi-node deployments
- Add custom batch size function support in @serve.batch
- Add policy state persistence for custom autoscaling policies
- Add Prometheus metrics for autoscaling decisions and router queue latency
- Added predicate pushdown rule that pushes filter predicates past eligible operators
- Iceberg support for upsert tables, schema updates, and overwrite operations
- Iceberg support for predicate and projection pushdown
- Iceberg write datafiles in write() then commit
- Namespaced expressions that expose PyArrow functions
- Added version argument to read_delta_lake
- Generator UDF support for map_groups
- ApproximateTopK aggregator
- Serialization framework for preprocessors
- Support for temporal, list, tensor, and struct datatypes
- Application-level autoscaling in Ray Serve with custom autoscaling policies that operate across all deployments in an application
- Enhanced autoscaling context with replica-level metrics including total_running_requests, total_queued_requests, and total_num_requests
- Autoscaling metrics aggregation functions supporting min, max, and time-weighted average aggregation
- Support for multiple task consumers in a single Ray Serve application
- Enhanced support for Unity Catalog integration in Ray Data
- New expression evaluator infrastructure for improved query optimization in Ray Data
- Support for SaveMode in Ray Data write operations
- Approximate quantile aggregator in Ray Data
- MCAP datasource support for robotics data in Ray Data
- Callback-based stat computation for preprocessors and ValueCounter in Ray Data
- Support for multiple download URIs with improved error handling in Ray Data
- Top-level ray.train aliases for public APIs
- New expression API enables predicate-based filtering, UDF transformations with with_column, and column aliasing for more powerful data transformations
- Added support for projection pushdown into Parquet reads
- New download expression enables efficient loading of data from columns containing URIs with improved performance and error handling
- New explain() API provides insights into dataset execution plans
- Added streaming_train_test_split to avoid materialization for train/test splits
- Enabled multi-node tensor and pipeline parallelism for Ray Data LLM processing
- Added chat_template_kwargs parameter for customizing chat templates in Ray Data LLM
- Added support for OpenAI's nested image URL format in Ray Data LLM multimodal pipelines
- vLLM engines can now be shared across sequential processors for better resource utilization
- Enhanced Dataset.stats() output with input/output row counts per operator
- Added new metrics for task duration, inputs per task, and output blocks
- Added time to first batch metric for better iteration performance monitoring
- Added type-specific aggregators for numerical, categorical, and vector columns
- Added fine-grained concurrency controls with max_task_concurrency and resource allocation options
- Alpha release of Ray Direct Transport enabling GPU data to remain in GPU memory with efficient data transfer via collective communication and RDMA
- Added StepFailedRecreateEnv exception for users with unsatisfiable environments in RLLib
- Async Inference alpha release for Ray Serve with APIs supporting long-running asynchronous inference tasks and message broker support
- Added support for replica ranks in Ray Serve for large-model inference use-cases
- Added FastAPI factory pattern support in Ray Serve for using non-serializable FastAPI plugins
- zip() operator now supports combining multiple datasets, not just pairs
- Wrapped batch indices in a BatchMetadata object to make per-batch metadata explicit
- Added support for Anti/Semi Join types
- Introduced an Issue Detection Framework
- Added an option to enable out-of-order execution for better performance
- Introduced a StreamingSplit logical operator for DAG rewrite
- Added a stratify parameter to train_test_split
- Added Snowflake connectors
- Updated Hudi integration to support incremental query
- Added an Actor location tracker
- Added BundleQueue.has_next
- Made DEFAULT_OBJECT_STORE_MEMORY_LIMIT_FRACTION configurable
- Added Expression support and a with_columns API
- Allocate GPU resources in ResourceManager
- Introduced JaxTrainer with SPMD support on TPUs
- Add reading from Delta Lake tables and Unity Catalog integration
- Enhanced pin_memory support in iter_torch_batches
- Added broadcast_from_rank_zero and barrier collective operations
- Enhanced hardware metrics integration with Grafana dashboards
- Added support for dynamically loading callbacks via environment variables
- Added RouterConfig field to DeploymentConfig for custom RequestRouter configuration
- Added support for implementing custom request routing algorithms
- Support separate deployment config for PDProxy in PrefixAwareReplicaSet
- Support for prefix-aware request router
- Support prefill disaggregation in Ray Serve LLM for production LLM serving use cases
- Add save modes support to file data sinks
- Add flattening capability to the Concatenator preprocessor to support output vectorization use cases
- Support for configuring Ray Train worker actor runtime environments
- Include Grafana panel data in Ray Train export for improved monitoring
- Introduce a structured logging environment variable to standardize log formats
- Add metrics for TrainControllerState to enhance observability
- Add support for implementing custom request routing algorithms in Ray Serve
- Introduce an environment variable to prioritize custom resources during deployment scheduling
- Expose vLLM Metrics to serve.llm API
- Add Embedding API to Ray Serve/Data LLM
- Add GPU inference to offline evaluation in RLlib
- Ray Data now supports hash-shuffle based repartitioning and aggregations
- Ray Data now supports joins using hash-shuffle
- Ray Serve LLM is now compatible with vLLM v1
- Add initial Train Grafana dashboard with built-in metrics for training workloads
- Offline Evaluation with loss function for Offline RL pipeline, introducing three new callbacks: on_offline_evaluate_start, on_offline_evaluate_end, on_offline_eval_runners_recreated
- New custom_data attribute for SingleAgentEpisode and MultiAgentEpisode to store custom metrics
- Support with_tensor_transport(transport='shm') in cgraph
- Support reduce scatter and all gather collective for GPU communicator in compiled graph
- Add ClickHouse sink via Dataset.write_clickhouse()
- Support ray_remote_args_fn in Dataset.groupby().map_groups() to set per-group runtime env and resource hints
- Expose Dataset.name and set_name as public API for easier lineage tracking
- Allow async callable classes in Dataset.flat_map()
- Introduce Ruleset abstraction for rule-based query optimisation
- Add seamless conversion from Daft DataFrame to Ray Dataset
- Improve support for line-delimited JSONL reading in read_json()
- Provide Dataset.export_metadata() for schema and stats snapshots
- Ray Compiled Graph (beta) with less than 50us system overhead for repeatedly executed task graphs and native GPU-GPU communication via NCCL
- Iceberg write support through pyiceberg in Ray Data
- LoRA support and structured outputs enhancements to Ray Data LLM
- State export API in Ray Train
- Faster bulk imperative Serve Application deploys
- Gen-config for Ray Serve LLM
- Dataset/operator state, progress, and total metrics in Ray Data
- New module ray.data.llm for batch inference with large language models, featuring vLLMEngineProcessorConfig and HttpRequestProcessorConfig abstractions (alpha)
- New module ray.serve.llm for serving large language models
- Ray Train V2 available for testing with RAY_TRAIN_V2_ENABLED=1 environment variable
- Integration with uv run for specifying Python dependencies for Ray cluster drivers and workers
- Support class constructor args for filter()
- Add read_audio and read_video for Ray Data
- Add Train v2 user-facing callback interface in Ray Train
- Add TuneReportCallback for propagating intermediate Train results to Tune
- Add metrics to replay buffers in RLlib
- Expression support for filters in Ray Data
- Support partition_cols in write_parquet for Ray Data
- Multi-directional sort over Ray Data datasets
- Output JSON structured log files for system and application logs in Ray Train
- Support for AMD ROCR_VISIBLE_DEVICES in Ray Train
- Allow users to configure optuna storage in optuna_search
- Support for external Envs to new API stack in RLlib with custom tcp-capable EnvRunner
- Sequence sampling to EpisodeReplayBuffer in offline RL
- ExecutionCallback interface in Ray Data
- Seed for read files in Ray Data
- Support for individual lambda-style callbacks in RLlib Callbacks API
- Add read_hudi function to Ray Data
- Add initial version of local_testing_mode to Ray Serve
- Add uv runtime env support to Ray Core
- Cancelled requests now return a serve.RequestCancelledError
- Exposed application source in app details model
- Add off-policy'ness metric to new API stack
- Validate episodes before adding them to the buffer
- Support all reduce collective in aDAG
- Add visualization of compiled graphs
- Support asyncio.gather on multiple CompiledDAGFutures
- Add Dataset.rename_columns
- Add basic structured logging to Ray Data
- Add partitioning parameter to read_parquet
- Enable cloud checkpointing in RLlib
- CompiledGraphs: support multi readers in multi node when DAG is created from an actor
- Allow control of some serve configuration via env vars
- Add restart-failed-env option to EnvRunners
- Add episode sampling to EpisodeReplayBuffer
- Add SelfSupervisedLossAPI for RLModules that bring their own loss
- Add InferenceOnlyAPI
- Allow custom NCCL group for aDAG
- Support buffered input for aDAG
- Support multi node multi reader for aDAG
- Allow user-defined Exception to be caught in Ray Data
- Decouple device-related modules and add Huawei NPU support to Ray Train
- Setup default serve logger
- Add CQL algorithm to new API stack in RLlib
- Enable GPU and multi-GPU support for DQN/SAC/CQL in new API stack
- Add torch.compile config options to old API stack
- Add kwargs to torch.nn.parallel.DistributedDataParallel
- Add PREPARED state for placement groups in GCS for better fault tolerance
- Add support for reading from Iceberg in Ray Data
- Add failure retry logic for read_lance in Ray Data
- Add hardware stats in Ray Train
- Add better support for UDF returns from list of datetime objects
- Initial design for Ray-Data based offline RL Algos on new API stack
- Add user-defined schemas for data loading
- Make data pipeline better configurable and tuneable for users
- Add read API for reading Databricks table with Delta Sharing
- Add support for objects to Arrow blocks
- aDAG Developer Preview: Ray accelerated DAGs with Ray Core-like API and extensibility to pre-compile execution paths across pre-allocated resources
- Support async callable classes in map_batches()
- APPO on new API stack with EnvRunners
- Added customizable refresh frequency for metrics on Ray Dashboard
- Added documentation for dataset.Schema
- Add API for Ray Train run stats
- IMPALA runs on the new API stack with EnvRunners and ConnectorV2s
- SAC/DQN: Prioritized multi-agent episode replay buffer
- Create internal request id to track request objects
- Alpha release of job level logging configuration allowing users to configure user logging in logfmt format with logging context
- Allow user to configure timeout for actor pool
- Add override_num_blocks to from_pandas and perform auto-partition
- Add support for multi-agent off-policy algorithms (DQN and SAC) in the new API
- Config option for APPO/IMPALA to change number of GPU-loader threads
- Ray c++ backend structured logging
- Add support for using GPUs with map_groups
- Add support for using actors with map_groups
- Add function to dynamically generate ray_remote_args for Map APIs
- Allow manually setting resource limits for training jobs
- Add read_lance API to read Lance Dataset
- New MetricsLogger API now fully functional on the new API stack, working inside Learner classes and loss functions
- Track Train Run Info with TrainStateActor
- Introduce MetricsLogger, a unified API for logging custom metrics and stats in all of RLlib's components
- Introduce inference-only (slim) mode for RLModules that run inside an EnvRunner
- Add MultiAgentEpisodeReplayBuffer for new API stack in preparation for multi-agent support
- Store Ray Data logs in special subdirectory
- Add in `local_read` option to `from_torch`
- Support of images and video logging in WandB
- Example script to pre-train an `RLModule` in single-agent fashion, then bring checkpoint into multi-agent setup and continue training
- Support reading Avro files with ray.data.read_avro
- Add experimental support for AWS Trainium (Neuron)
- Add experimental support for Intel HPU
- Ray Data becomes generally available with stability improvements in streaming execution, reading and writing data, better tasks concurrency control, and debuggability improvement with dashboard, logging and metrics visualization
- New API Stack officially announced as alpha for PPO and SAC in RLlib
- Added default autoscaling policy set via num_replicas="auto" in Serve
- Added support for active load shedding via max_queued_requests in Serve
- Added replica queue length caching to the DeploymentHandle scheduler in Serve
- Autoscaler v2 is in alpha for Kuberay with improved observability and stability
- Added support for accelerator types via ScalingConfig(accelerator_type) in Train
- Add num_rows_per_file parameter to file-based writes in Ray Data
- Add DataIterator.materialize in Ray Data
- Skip schema call in DataIterator.to_tf if tf.TypeSpec is provided in Ray Data
- Add option to append for Dataset.write_bigquery in Ray Data
- Add backend-specific context manager for train_func for setup/teardown logic in Train
- Add debugpy as the ray debugger
- Add exponential backoff for queue_len_response_deadline_s
- Add Ray Dashboard page for Ray Data to monitor real-time execution metrics
- Make streaming generator officially a public API for writing streaming applications on top of Ray via Python generator API
- Add experimental support for Intel GPU accelerators
- Add experimental support for Intel Gaudi Accelerators
- Add experimental support for Huawei Ascend NPU accelerators
- Add concurrency argument to Ray Data map-like APIs to replace ComputeStrategy
- Allow task failures during Ray Data execution
- Add new API for reading and writing Datasource in Ray Data
- Enable group-by over multiple keys in Ray Data datasets
- Add support for multiple group keys in map_groups for Ray Data
- Introduce logging config in Ray Serve to set different logging parameters for different applications and deployments
- Add gRPC context object into gRPC deployments in Ray Serve for users to set custom code and details back to the client
- Introduce experimental runtime environment feature in Ray Serve to run applications in different containers with different images
- Support reading Result from cloud storage in Ray Train and Ray Tune
- Add support for shuffling input files in Ray Data
- Support streaming read of PyTorch dataset
- Add BigQuery datasource for Ray Data
- Add Databricks table and SQL datasource for Ray Data
- Add inverse transform functionality to LabelEncoder
- Add function arg params to Dataset.map and Dataset.flat_map
- Add initial support for scheduling workers on neuron_cores in Ray Train
- Add new Java APIs that aligns with the Ray Serve 2.x APIs
- Add new metrics for Ray Data in the Metrics tab on the Ray Dashboard
- Ray Core now supports profiling GPU tasks or actors using Nvidia Nsight
- Add an `application` tag to the `ray_serve_num_http_requests` metric
- Add a new user guide for the vSphere cluster launcher
- Ray Serve and Ray Train PyTorch support are now generally available
- Introduce new backwards-compatible DeploymentHandle API in Ray Serve to unify various existing Handle APIs
- Add high performant gRPC proxy to Ray Serve to serve gRPC requests
- Consolidate various PyTorch-based trainers into TorchTrainer in Ray Train
- Introduce new train.Checkpoint API providing consolidated way of interacting with remote and local storage
- Add initial integrations with TPUs and AWS accelerators in Ray Core to natively detect these devices and schedule tasks/actors onto them
- Add official support for actor task cancellation in Ray Core
- Add experimental streaming generator in Ray Core that supports streaming response to the caller
- Integrate Ray Core streaming generator API by default in Ray Data to reduce memory footprint throughout the data pipeline
- Add Dataset.write_images to write images
- Add Dataset.write_sql() to write SQL databases
- Support sort on multiple keys in Ray Data
- Support reading and writing JSONL file format in Ray Data
- Support class constructor args for Dataset.map() and flat_map()
- Implement streamed read from Hugging Face Dataset
- Add Learner API documentation for RLlib
- Support for HTTP streaming response and WebSockets is now enabled by default in Ray Serve
- Ray Serve @serve.batch-decorated methods can now stream responses
- Support for restoring Results from local trial directories
- New streaming integration of Ray Data and Ray Train allowing streaming data ingestion for model training and per-epoch data preprocessing
- Add Dataset.unique() method
- Add option for parallelizing post-collation data batch operations in DataIterator.iter_batches()
- LightningTrainer support for DeepSpeedStrategy
- Build Python wheels on Mac OS for Python 3.11
- Support for checkpointing distributed models in Ray Train
- PyTorch Lightning FSDP support in LightningTrainer to enable training large models on Ray Train
- Support for streaming responses and model multiplexing in Ray Serve and Core for LLM applications
- Support for multi-GPU training in RLlib
- Enable lightweight resource broadcasting feature in Ray Core to improve reliability and scalability
- Add column API to Dataset
- Configure progress bars via DataContext
- Support using concurrent actors for ActorPool
- Add take_batch API for collecting data in the same format as iter_batches and map_batches
- Add alias parameters to the aggregate function and add quantile function
- Introduce LightningTrainer to scale PyTorch Lightning on Ray
- Release AccelerateTrainer to run HuggingFace Accelerate and DeepSpeed on Ray
- Add examples for GPT-J fine-tuning with Microsoft DeepSpeed and Ray Train
- Add examples for GPT-J-6B batch prediction with Ray Data
- Add examples for GPT-J-6B serving with Ray Serve
- Add examples for Stable Diffusion Dreambooth fine-tuning with Ray Train
- Add examples for Stable Diffusion batch prediction with Ray Data
- Add examples for Stable Diffusion serving with Ray Serve
- Enable streaming execution by default for more efficient data processing pipelines
- Implement asynchronous batch prefetching in Dataset.iter_batches
- Add support for reading SQL databases with Ray Data
- Add support for reading WebDataset format
- Add multi-app CLI and REST API support to Ray Serve
- Add TorchDetectionPredictor
- Add collate_fn parameter to iter_torch_batches
- Streaming backend for Ray Datasets in Developer Preview for terabyte-scale ML inference and training workloads
- New Information Architecture for Ray dashboard organized around user personas and workflows in Beta
- Ray-on-Spark is now available in Preview to launch Ray clusters on Databricks and Spark clusters
- Add set_preprocessor method to Checkpoint
- Introduce DatasetIterator
- Add per-epoch preprocessor
- Add TorchVisionPreprocessor
- Persist Dataset statistics automatically to log file
- Add zero-copy batch API for ds.map_batches()
- Ray Jobs API is now generally available for submitting locally developed applications to a remote Ray Cluster
- Add NumPy first path for Torch and TensorFlow Predictors in Ray AIR
- Add select_columns() to select a subset of columns in Ray Data
- Add write_tfrecords() to write TFRecord files in Ray Data
- Support MongoDB data source in Ray Data
- Add from_torch() to create dataset from Torch dataset in Ray Data
- Add from_tf() to create dataset from TensorFlow dataset in Ray Data
- Allow to set batch_size in BatchMapper in Ray Data
- Support read/write from/to local node file system in Ray Data
- Add MosaicTrainer in Ray Train
- Ray Datasets read_images() API for loading image data
- Ray Datasets read_tfrecords() API to read TFRecord files
- Numpy-based API for user-defined functions in Preprocessor
- Ray Serve support for gRPC endpoint (alpha release)
- RLlib decision transformer (DT) algorithm
- RLlib on_episode_created() callback hook
- Learning rate schedule to SimpleQ and PG algorithms
- Ray OOM prevention (alpha release)
- Support dynamic generators as task return values
- Dashboard time series metrics support
- Dashboard export configuration files for Prometheus or Grafana
- Dashboard new progress bar in job detail view
- NumPy batch format to Preprocessor and BatchMapper
- Ragged tensor extension type
- KBinsDiscretizer Preprocessor
- FullyShardedDataParallel support to TorchTrainer
- Tuner.get_results() to retrieve results after restore
- Allow host and port in Serve config
- RLlib evaluation supports asynchronous rollout
- Ray AIR, a scalable and unified toolkit for ML applications, is now in Beta
- Ray now supports natively shuffling 100TB or more of data with the Ray Datasets library
- KubeRay, a toolkit for running Ray on Kubernetes, is now in Beta
- Ray Serve's Deployment Graph API is a new and easier way to build, test, and deploy an inference graph of deployments
- BatchPredictors now have support for scalable inference on GPUs
- All Predictors can now be constructed from pre-trained models
- Add ImageFolderDatasource
- Add the NumPy batch format for batch mapping and batch consumption
- Add iter_torch_batches() and iter_tf_batches() APIs
- Add local shuffling API to iterators
- Add drop_columns() API
- Add randomize_block_order() API
- Add random_sample() API
- Add support for len(Dataset)
- Add UDF passthrough args to map_batches()
- Add Concatenator preprocessor
- Hash Shuffle V2 replaces aggregator actor pool with two stateless task-based operators that pass shards through the object store
- Distribute HAProxy ingress as the ray-haproxy PyPI package instead of compiling into images, making it the default HAProxy binary
- Default read_numpy to allow_pickle=False and make it manually configurable
- Make write_lance with mode=CREATE error instead of silently overwriting
- The threshold memory monitor now snapshots both user and system cgroup slices and logs an error when system-slice usage exceeds reserved system memory
- Fix iter_batches spilling by replacing make_async_gen with iter_threaded and reducing buffered batches
- Re-architect Ray Serve LLM by decoupling request handling from token streaming response path
- Upgrade apt packages in slim base
- Cache _map_task args, improve heap-based actor ranking, and improve actor pool map
- Optimize concat tables and PyArrow schema hashing
- Reduce default DownstreamCapacityBackpressurePolicy threshold to 50%
- Improve reproducibility for random APIs
- Port changes from lance-ray into Ray Data
- Enable PyArrow compute-to-expression conversion for predicate pushdown
- Upgrade to pyiceberg 0.11.0 and cap pandas to <3
- Refactor logical operators to frozen dataclasses
- Improve numerical stability in scalers by handling near-zero values
- Update to PyArrow 23
- Demote Sort from requiring preserve_order
- Use Arrow IPC for Arrow Schema serialization and deserialization
- Enable and tune DownstreamCapacityBackpressurePolicy
- Decouple Ray Train from Ray Data by removing top-level ray.data imports
- Move extension types to ray.data
- Parallelize DefaultCollateFn and arrow_batch_to_tensors
- Optimize autoscaler to support configurable step size for actor pool scaling
- Improve streaming repartition performance
- Add version support to read_lance()
- Add configurable batching for resolve_block_refs to speed up iter_batches
- Enhanced Unity Catalog integration
- Use approximate quantile for RobustScaler preprocessor
- Map batches support for limit pushdown
- Make all map operations zero-copy by default
- Use tqdm_ray for progress reporting from workers
- Improved concurrency cap backpressure tuning
- Ray Train v2 is now enabled by default, providing usability and stability improvements and new features
- Improved projection pushdown handling with renamed columns in Ray Data
- Enhanced hash-shuffle performance with better retry policies in Ray Data
- Reduced memory usage with improved streaming generator backpressure in Ray Data
- Default shuffle strategy changed from sort-based to hash-based for improved shuffle performance and lower peak memory usage for aggregations
- Concurrency parameter now accepts tuples for more flexible configuration
- Resource requirements (num_cpus/gpus, memory) are now top-level parameters in most APIs for easier configuration
- Write operations now use iterators instead of accumulating blocks in memory
- Improved groupby performance with sort-shuffle pull-based approach
- Improved join operations with new abstractions
- Improved compatibility between PyArrow native types, extension types, and pandas Arrow dtypes
- Joins now supported with list/tensor non-key columns
- Enhanced support for variable-shaped tensor arrays with different dimensions
- Added serialization/deserialization for PyArrow Extension Arrays
- Reduced memory usage for OneHotEncoder
- Reduced memory usage for schema unification
- Eliminated unnecessary block copying and double execution of arrow conversions
- Improved Parquet encoding ratio estimation
- Enabled per-block limiting for Limit operator
- Optimized schema handling with deduplication and removed unnecessary unification
- Decoupled actor and node autoscaling; autoscaling now also considers budget
- Faster hash-shuffle resource usage calculation and more accurate shuffle progress totals
- Reduced Parquet metadata storage usage
- map_batches now defaults to row_modification=False and avoids pushing past limit
- ray.train.get_dataset_shard now lazily configures dataset sharding for better startup behavior
- Enhanced handling of mismatched columns and pandas.NA values
- Improved read_text trailing newline semantics
- Optimized backpressure handling with policy-based resource management
- Enhanced write_parquet with support for both partition_by and row limits
- Improved execution performance for One Hot encoding in preprocessors
- Improved checkpoint population from before_init_train_context
- Enhanced controller state logging and metrics
- Enhanced FastAPI ingress deployment validation for multiple deployments
- Optimized get_live_deployments performance
- Re-enable Actor locality-based scheduling with improved algorithms for ranking bundle locations
- Disable blocking pipeline by default until Actor Pool fully scales up to min actors
- Improve progress bar and dashboard to show name of partial functions properly
- The ingress API now accepts a builder function in addition to an ASGI app object
- Allow setting name_prefix in build_llm_deployment
- Mitigate the serve.llm streaming overhead by properly batching stream chunks
- Add memory attribute to ExecutionResources
- Support ray_remote_args for read_tfrecords
- Add PhysicalOperator.min_max_resource_usage_bounds
- Support num_cpus, memory, concurrency, batch_size for preprocess
- Support new pyiceberg version
- Lazily import torch FSDP for ray.train.torch module to improve performance and reduce unnecessary dependencies
- Deserialize the user-defined training function directly on workers, improving efficiency
- Refactor LLMServer and LLMEngine to not diverge too much from vllm chat formatting logic
- Add router replicas and batch size to llm config
- Bump vllm from 0.8.2 to 0.8.5
- Make Object Store Fallback Directory configurable
- Split dashboard single process into multiple processes to improve stability and avoid interference between different heads
- Improve performance of sorting and sort-shuffle based operations by more than 5x
- Make chunk combination threshold configurable in Ray Data
- Store average memory use per task in OpRuntimeMetrics
- Avoid unnecessary conversion to Numpy when creating Arrow/Pandas blocks
- Add append-mode API for preprocessors with vectorizers and hashers now outputting a single column instead of 1 column per feature
- Fold v2.XGBoostTrainer API into the public trainer class as an alternate constructor
- Create a default ScalingConfig if one is not provided to the trainer
- Improve TrainingFailedError message in Ray Train
- Clean up shutdown behavior of serve
- Add additional_log_standard_attrs to serve logging config
- Implement accurate memory accounting for UnionOperator
- Implement accurate memory accounting for all-to-all operations
- Persist ParquetDatasource metadata
- Pass executor as an argument to ExecutionCallback
- Replace AggregateFn with AggregateFnV2
- Add state tracking to train v2 to make run status, run attempts, and training worker metadata observable
- Optimize multi-column groupbys in Ray Data
- Include Ray user-agent in BigQuery client construction
- Cache metrics in replica and report on an interval in Ray Serve
- Cache expensive calls to inspect.signature in Ray Serve
- Remove extra pickle serialization for gRPCRequest in Ray Serve
- Implement shared LongPollClient for Routers in Ray Serve
- Mark DeploymentHandle API as stable in Ray Serve
- Enhance node-failure tolerance for new API stack in RLlib
- Improve MetricsLogger cleanup throughput logic in RLlib
- Split AddStates connectors into AddTimeDimToBatchAndZeroPad and AddStatesFromEpisodesToBatch in RLlib
- Use dask 2022.10.2 in Ray Data
- Upgrade Arrow version from 17 to 18 in Ray Data
- Update hudi version to 0.2.0 in Ray Data
- Make select_columns and rename_columns use Project operator in Ray Data
- Improved request_id generation to reduce proxy CPU overhead in Ray Serve
- Tune GC threshold by default in proxy in Ray Serve
- Use pickle.dumps for faster serialization from proxy to replica in Ray Serve
- Improve performance of DelegatingBlockBuilder
- Improve memory accounting of pandas blocks
- Handle multiple changed objects per LongPollHost.listen_for_change RPC in Ray Serve
- Marked num_rows_per_file parameter of write APIs as experimental
- Dataset.count() now uses a Count logical operator
- Upgrade to gymnasium==1.0.0 with support for new API for vector env resets
- The distributed debugger can now be used without having to set RAY_DEBUG=1
- Add SERVICE_UNAVAILABLE to list of retried transient errors
- Re-phrase the streaming executor current usage string
- Remove ray.kill in ActorPoolMapOperator
- Simplify and consolidate progress bar outputs
- Allow specifying both num_cpus and num_gpus for map APIs
- Allow specifying insertion index when registering custom plan optimization Rules
- PPO on new API stack now shuffles batches properly before each epoch
- Switch on new API stack by default for SAC and DQN
- Remove TensorFlow support on new API stack for PPO/IMPALA/APPO
- Discontinue support for hybrid API stack
- Store each GCS table in its own Redis Hash
- Decouple create worker vs pop worker request
- Simplify custom metadata provider API
- Change counts of metrics to rates of metrics
- Refactor custom optimizer rules
- Update run status and add stack trace to TrainRunInfo
- Faster detection of dead replicas
- Store episodes in state form for offline RL
- Replace GAE in MARWILOfflinePreLearner with GeneralAdvantageEstimation connector in learner pipeline
- Make is_gpu, is_actor, root_detached_id fields late bind to workers
- Reconstruct actor to run lineage reconstruction triggered actor task
- Remove limit on number of tasks launched per scheduling step in Ray Data
- Mark proxy as unready when its routers are aware of zero replicas in Ray Serve
- Enhance offline RL in new API stack
- pip install ray[all] will no longer include ray[cpp] and the ray-cpp package; use pip install ray[cpp-all] to install everything including ray-cpp
- Upgrade supported Arrow version from 16 to 17
- Various progress bar UX improvements in Ray Data
- Try get size_bytes from metadata and consolidate metadata methods in Ray Data
- Improve warning message when read task is large in Ray Data
- Extend API to enable passing sample weights via ray.dataset.to_tf
- Add a parameter to allow overriding LanceDB scanner options in Ray Data
- Updates to support xgboost==2.1.0 in Ray Train
- Improve handling of replica death and replica unavailability in deployment handle routers before controller restarts replica in Ray Serve
- Move DQN into the TargetNetworkAPI
- Cleanup, rename, clarify: Algorithm.workers/evaluation_workers, local_worker(), etc.
- Add new python GcsClient binding
- Add last exception to error message when GCS connection fails in ray.init()
- Change offsets to int64 and change to LargeList for ArrowTensorArray
- Prevent from_pandas from combining input blocks
- Update Dataset.count() to avoid unnecessarily keeping BlockRefs in-memory
- Use Set to fix inefficient iteration over Arrow table columns
- Add AWS Error UNKNOWN to list of retried write errors
- Always print traceback for internal exceptions
- Allow unknown estimate of operator output bundles and ProgressBar totals
- Improve filesystem retry coverage
- Update run status and actor status for train runs
- Optimize ServeController.get_app_config()
- Change default for max and target ongoing requests
- Integrate Ray Serve with Ray structured logging
- Allow configuring handle cache size and controller max concurrency
- Optimize DeploymentDetails.deployment_route_prefix_not_set()
- Allow env setup logger encoding
- ray list tasks filter state and name on GCS side
- Log ray version and ray commit during GCS start
- Upgraded Dashboard to MUIv5 and React 18
- Make Tune trial ID available in EnvRunners and callbacks
- Add env- and agent_steps to custom evaluation function
- Remove default-metrics from Algorithm
- Missing stopping criterion should not error, just warn
- Optimize DeploymentStateManager.get_deployment_statuses
- Automatically infer worker path when starting worker in container
- Improve fractional CPU/GPU formatting
- Use sampled fragments to estimate Parquet reader batch size
- Refactor ParquetDatasource and metadata fetching logic
- Refactor planner.py
- Change the behavior of a missing stopping criterion metric to warn instead of raising an error
- Enhance env-rendering callback
- Integrate amdsmi in AMDAcceleratorManager
- Parse out json logs in Dashboard
- Upgrade Arrow version to 16 in CI
- Record more telemetry for newly added datasources
- Improve excessive syncing warning
- Clean up Serve proxy files
- Improve node death observability
- Clarify that num_rows_per_file is not strict
- Refine exception handling from arrow data conversion
- Examples and tuned_examples learning test for new API stack are now self-executable and support WandB
- Add runtime env started logs to job driver
- ray.util.collective support torch.bfloat16
- Better propagate node death information
- Introduce abstract interface for data autoscaling
- Add debugging info for SplitCoordinator
- Update RayTrainReportCallback to only save checkpoints on rank 0 for XGBoost and LightGBM
- Improve log viewer so line numbers do not get selected when copying text
- Improve log viewer to avoid unnecessary re-rendering which causes text selection to clear
- Allow methods to pass type @serve.batch type hint
- Allow configuring Serve control loop interval
- Rename WorkerSet to EnvRunnerGroup, DEFAULT_POLICY_ID to DEFAULT_MODULE_ID, config.rollouts() to config.env_runners()
- Change behavior of EnvRunnerGroup.foreach_worker methods to mark_healthy=True and healthy_only=True as new defaults
- Deduplicate repeated schema during ParquetDatasource metadata prefetching
- Update map_groups implementation to better handle large outputs
- Add default behavior to false for creating directories on S3 writes
- Make internal UDF names more descriptive
- Make name a required argument for AggregateFn
- Setup XGBoost CommunicatorContext automatically
- Remove trial table when running Ray Train in a Jupyter notebook
- Clean up temporary checkpoint directories for class Trainables
- Make handle push metric interval configurable with environment variable RAY_SERVE_HANDLE_METRIC_PUSH_INTERVAL_S
- Improve performance of developer API serve.get_app_handle
- Clean up AlgorithmConfig and rename properties and methods for better consistency and transparency
- Report GCS internal pubsub buffer metrics and cap message size
- Remove spammy log for "new output engine"
- Better support and separation-of-concerns for `model_config_dict` in new API stack
- More example scripts got translated from the old- to the new API stack including Curriculum learning and custom-gym-env
- Pin ipywidgets==7.7.2 to enable Data progress bars in VSCode Web
- Change log level for ignored exceptions
- Change Parquet encoding ratio lower bound from 2 to 1
- Add support for new style lightning import
- Renamed max_concurrent_queries to max_ongoing_requests in Serve
- Renamed target_num_ongoing_requests_per_replica to target_ongoing_requests in Serve
- Renamed downscale_smoothing_factor to downscaling_factor in Serve
- Renamed upscale_smoothing_factor to upscaling_factor in Serve
- max_ongoing_requests (max_concurrent_queries) is now strictly enforced in Serve
- Revamped XGBoostTrainer and LightGBMTrainer to no longer depend on xgboost_ray and lightgbm_ray
- Refactored local staging directory to remove the need for local_dir and RAY_AIR_LOCAL_CACHE_DIR in Train/Tune
- Bump up task failure logs to warnings to make sure failures could be troubleshooted
- Improve stability and accuracy for Data+Train benchmark
- Enable setting queue length response deadline via environment variable
- Upgrade Ray Train support for spot node preemption to handle preemption node failures differently than application errors
- Make Ray compatible with Pydantic versions <2.0.0 and >=2.5.0
- Support PyArrow 14.0.1 in Ray Data
- Migrate Logs page to use state api
- Update PyTorch Lightning import path to support both pytorch_lightning and lightning
- Propagate driver DataContext to RayTrainWorkers
- The Serve REST API is now accessible through the dashboard port which defaults to 8265
- Hard deprecate DatasetPipeline
- Remove BulkExecutor code path
- Remove legacy iteration code path in Ray Data
- Improve cluster page UI in Dashboard
- Rebrand Ray AI Runtime (AIR) to Ray AI Libraries and consolidate the ray.air namespace into ray.data, ray.train, and ray.tune
- Read data with multi-threading for FileBasedDataSource in Ray Data
- Add partition_filter parameter to read_parquet
- Move away from LightningTrainer in favor of TorchTrainer as the recommended way of running distributed PyTorch Lightning
- Users are now required to provide cloud storage or NFS path for distributed training or tuning jobs instead of a local path
- Enable execution optimizer by default in Ray Data
- Enforce strict mode batch format for DataIterator.iter_batches()
- Spread map task stages by default for arg size <50MB
- Unify Lightning and AIR CheckpointConfig
- Add support for custom pipeline class in TransformersPredictor
- Enable strict mode by default in Ray Data, requiring schemas for all Datasets and removing support for standalone Python objects
- Set default batch format to NumPy in Ray Data for better performance in batch inference
- Add RunConfig.storage_path to replace SyncConfig.upload_dir and RunConfig.local_dir
- Use Ray storage URI as default storage path if configured
- Use wait based prefetcher by default in Ray Data
- Require compute spec to be explicitly spelled out
- Make Preprocessor.transform lazy by default
- Make BatchPredictor lazy
- Enhance logging and metrics for Serve applications
- Replace ray_lightning integration with LightningTrainer for latest PyTorch Lightning compatibility
- Support different number of blocks/rows per block in zip()
- Revert serve run to use Ray Client instead of Ray Jobs
- Rename Keras callback and its parameters to be more descriptive
- Rename WandB save_checkpoints to upload_checkpoints
- Rename DLPredictor.call_model tensor parameter to inputs
- Lazy execution by default for Ray Datasets
- Introduce streaming execution backend
- Use Ray actors instead of multiprocessing for WandbLoggerCallback
- Change default NCCL_SOCKET_IFNAME to blacklist veth
- Change ScalingConfig to be optional for DataParallelTrainers if already in Tuner param_space
- Ray Dashboard now shows CPU flame graphs of Ray workers and new metrics for memory usage
- Out-Of-Memory (OOM) Monitor is now enabled by default
- Ray Data dynamic block splitting is now enabled by default to address out-of-memory and performance issues with large files
- Auto-enable GPU for Predictors
- Deprecate Checkpoint.to_object_ref and Checkpoint.from_object_ref
- Deprecate legacy train/tune functions in favor of Session
- Upgrade grpcio version to 1.32
- Upgrade redis version to 7.0.5
- Increase RPC timeout for dashboard
- Replace deprecated name option with task_id in Workflows
- ray.ml is renamed to ray.air
- ray.ml.preprocessors have been moved to ray.data
- ray.ml.trainers have been moved to ray.train
- ray.ml.predictors has been moved to ray.train
- Fix an RCE where read_lance or nested pickle objects could execute arbitrary code
- Fixed Arrow-backed to_pandas regressions by adding DataContext.enable_arrow_backed_pandas_conversion as an opt-out flag
- Fixed int64/double[pyarrow] overflow crashes on concatenation by reconciling divergent numeric column types
- Fixed TensorDtype.__from_arrow__ crash on zero-size tensor elements by using explicit row count instead of numpy dimension inference
- Fixed crash in hash partition caused by read-only hash arrays
- Nullified _input_dependencies in _get_args to prevent exponential sanitize_for_struct call chains over fused operators
- Added protobuf >=7 compatibility to _proto_to_dict by binding to FieldDescriptor.is_repeated when the deprecated label attribute is absent
- Fixed direct-streaming routing for body-aware routers by parsing raw request body into SimpleNamespace over routing-key fields
- Disabled NCCL cuMem host buffer registration in CI pytests to stabilize GPU test runs
- Upgraded ONNX example from MobileNet v1 to MobileNet v3 via torchvision and pinned onnxscript in GPU/ml-build CI dependency locks
- SSH connectivity issue in the ray-llm image
- Fix RCE in Arrow extension type deserialization from Parquet
- Fix StreamingSplitDataIterator.schema()
- Fix ParquetDatasource handling of FileSystemFactory.inspect
- Fix read_parquet file-extension filtering for versioned object-store URIs
- Fix wide_schema_pipeline_tensors cloudpickle deserialization
- Fix OpBufferQueue race condition
- Fix scheduling metrics computation
- Fix OneHotEncoder max_categories to use global top-k instead of per-partition
- Fix ReservationOpResourceAllocator resource borrowing for ActorPoolMapOperator
- Fix DatabricksUCDatasource schema() shadowing by schema string attribute
- Fix AliasExpr structural equality to respect rename flag
- Fix _align_struct_fields failure with unaligned scalar fields
- Fix min_scheduling_resources fallback to incremental_resource_usage
- Fix output backpressure unblocking sequence for terminal ops
- Fix multi-input operator object store memory attribution
- Fix reference cycle by moving to module scope
- Replace on_exit hook with __ray_shutdown__ to fix UDF cleanup race
- Prevent Limit from getting pushed past map_groups
- Propagate schema in empty _shuffle_block to fix ColumnNotFound in chained left joins
- Clamp rolling utilization averages to zero
- Fix floating point errors in TimeWindowAverageCalculator
- Remove default task-level timeout and clamp end_offset in Kafka datasource
- Avoid redundant reads in train_test_split
- Return None when no outputs have been produced
- Disable hanging issue detection to prevent blocking calls to the Ray State API that could cause the scheduling loop to block and severely degrade pipeline performance
- Fuse MapBatches even if they modify the row count
- Fix support of list types for Unique aggregator
- Fix reading from written parquet for numpy with NaNs
- Fixed renamed columns to be appropriately dropped from output
- Fixed handling of renames in projection pushdown
- Fixed broken LogicalOperator abstraction barrier in predicate pushdown rule
- Reuse previous metadata if transferring the same tensor list with nixl
- Fixed renamed columns to be appropriately dropped from output in Ray Data
- Fixed driver hang during streaming generator block metadata retrieval in Ray Data
- Fixed ControllerError triggered by after_worker_group_poll_status errors in Ray Train
- Fixed iter_torch_batches use of ray.train.torch.get_device outside Train
- Fix deadlock when cancelling stale requests on in-order actors
- Fixed streaming executor to properly drain output queues
- Fixed retry logic for hash shuffle operations
- Fixed split_blocks to prevent producing empty blocks
- Fix issue where GPU metrics are missing in Ray Dashboard
- Fix regression in handling very large schemas in Ray Data
- AutoscalingActorPool now properly downscales after execution
- Fixed map_groups issues
- Prevented Op fusion for streaming repartition to avoid performance degradation
- Fixed ActorPool autoscaler scaling up logic
- Resolved empty dataset repartitioning issues
- Ray failed to start on Mac
- Make Ray Data from_torch respect Dataset len
- Fix race condition bug in fault tolerance by disabling on_exit hook
- Fix move_tensors_to_device utility for the list/tuple[tensor] case
- Fix ActorPool scaling to avoid scaling down when the input queue is empty
- Fix internal queues accounting for all Operators with an internal queue
- Fix backpressure for FileBasedDatasource to prevent potential OOMs for workloads using FileBasedDatasources
- Fixed GPU transfer support for non-contiguous tensors
- Fixed runtime_env validation for py_modules
- Disallow special characters in Serve deployment and application names
- Add a descriptive error message when a deployment name is not found
- LLMRouter.check_health() should check LLMServer.check_health()
- Fix runtime passthrough and auto-executor class selection
- Update check_health return type
- Bug fix for duplication of <bos> token
- In stream batching, first part of the stream was always consumed and not streamed back from the router
- Fixed weight synching in offline evaluation
- Fixed bug in split_and_zero_pad utility function related to complex structures vs simple values or np.arrays
- Handle Arrow Array null types in to_numpy
- Fix S3 serialization wrapper compatibility with RetryingPyFileSystem
- Fix Optimizer to apply rules until plan stabilizes
- Fix FuseOperators rule to properly handle transformations that drastically change size of the dataset
- Fix error when no arguments are passed into TorchTrainer
- Make sure KillActor RPC with force_kill=True can actually kill the threaded actor
- Do not remove idle nodes for upcoming placement groups in Autoscaler
- Prevent threaded actors from getting stuck forever when receiving two exit signals
- Fix illegal memory access of cgraph when used in PP
- Avoid resubmitted actor tasks from hanging indefinitely
- Fix interleaved placement group creation process due to node failure
- Flush task events in CoreWorker::Shutdown instead of CoreWorker::Disconnect
- Fix Map Operators to avoid unconditionally overriding generator's back-pressure configuration
- Fix filter expr equating negative numbers in Ray Data
- Fix StandardScaler to handle NaN stats in Ray Data
- Avoid memory leak with pyarrow.infer_type on datetime arrays
- Fix parquet partition cols to support tensors types
- Fix aggregation protocol to be appropriately associative
- Incorrect assertion in Ray Data
- Fix bug that made read tasks non-deterministic in Ray Data
- Fix batched requests hanging after request cancellation bug in Ray Serve
- Re-introduce mixin-replay-buffer pass for old API stack IMPALA/APPO even if replay-ratio=0
- Fix MetricsLogger race conditions in RLlib
- Fix APPO/IMPALA bug for greater than 1 Learner actor in RLlib
- Fix groupby hang when value contains np.nan in Ray Data
- Fix bug where file_extensions doesn't work with compound extensions in Ray Data
- Fix bug where you can't specify a schema with write_parquet
- Fix bug where to_pandas errors if your dataset contains Arrow and pandas blocks
- Fix bug where map_groups doesn't work with pandas data
- Fix bug where write_parquet errors if your data contains nullable fields
- Fix bug where "Iteration Blocked Time" charts looks incorrect
- Fix bug where unique fails with null values
- Fix bug where "Rows Outputted" is 0 in the Data dashboard
- Fix bug where methods like drop_columns cause spilling
- Fix bug where async map tasks hang
- Fix StartTracebackWithWorkerRank serialization in Ray Train
- Fixed InvalidObjectError edge case with Dataset.split()
- Made Concatenator preserve order of concatenated columns
- transform_batch no longer fails on missing columns
- Safely check if the storage filesystem is pyarrow.fs.S3FileSystem
- Basic HTTP deployments will now return "Internal Server Error" instead of a traceback to match FastAPI behavior
- Fixed an issue where high values of max_ongoing_requests couldn't be reached due to an interaction with core's max_concurrency
- Fixed an edge case where pending requests were not canceled properly
- Fix bug where Ray Data incorrectly emits progress bar warning
- Yield remaining results from async map_batches
- Fix event loop mismatch with async map
- Throw exception for non-streaming HF datasets with override_num_blocks argument
- Remove ineffective retry code in plan_read_op
- Fix incorrect pending task size if outputs are empty
- Fix component id logging field
- Fix broken dashboard cluster page when there are dead nodes
- Fix broken dashboard worker page
- Display pending actors separately in the progress bar and not count them towards running resources
- Fix bug where arrow_parquet_args aren't used
- Skip empty JSON files in read_json()
- Remove remote call for initializing Datasource in read_datasource()
- Update TORCH_NCCL_ASYNC_ERROR_HANDLING env var
- Allow get_serve_logs_dir to run outside of Ray's context
- Fix large batch size for synchronous algos after EnvRunner failures
- Fix ray_unintentional_worker_failures_total to only count unintentional worker failures
- Change type of DataContext.retried_io_errors from tuple to list in Ray Data
- Change pickling log level from warning to debug in Ray Data
- Add validation for shuffle arg in Ray Data
- Fix validation bug when size=0 in ActorPoolStrategy in Ray Data
- Fix exception in async map in Ray Data
- Fix wrong metrics group for Object Store Memory metrics on Ray Data Dashboard
- Handle errors in SplitCoordinator when generating a new epoch in Ray Data
- Fix WandB metric overlap after restore from checkpoint in Tune
- Remove read task warning if size bytes not set in metadata
- Sort workers by node ID rather than by node IP
- Rename all np.product usage to np.prod for numpy compatibility
- Add object back to memory store when object recovery is skipped
- Task status should start with PENDING_ARGS_AVAIL when retry
- Fix ObjectFetchTimedOutError
- Make working_dir support files created before 1980
- Allow full path in conda runtime env
- Fix worker launch time formatting in state api
- Replace lambda mutable default arguments in Ray Data
- Ensure InputDataBuffer doesn't free block references
- MapOperator.num_active_tasks should exclude pending actors
- Fix progress bars being displayed as partially completed in Jupyter notebooks
- Decrement lineage ref count of an actor when the actor task return object reference is deleted
- Fixed bug where preserve_order doesn't work with file reads
- Fix logging error on passing traceback object into exc_info
- Run __del__ even if constructor is still in-progress
- On GCS restart, destroy not forget the unused workers, fixing PG leaks
- Cancel lease requests before returning a PG bundle
- Fix boost fiber stack overflow
- Fix EMA stats without window that would lead to infinite list memory leak in MetricsLogger API
- Fix the C++ GcsClient Del not respecting del_by_prefix
- Fix exit handling of FiberState threads
- Avoid pickling LanceFragment when creating read tasks for Lance
- DreamerV3 on tf bug fix to run again with tf==2.11.1
- Various MetricsLogger bug fixes
- Fix worker crash when getting actor name from runtime context
- Log dedup should not dedup number only lines
- Move Job package uploading to another thread to unblock the event loop
- Fix Ray databricks UC reader with dynamic Databricks notebook scope token
- Fix bug where you can't return objects and array from UDF
- Fix bug where map_groups triggers execution during input validation
- Fix PB2 scheduler error resulting from trying to sort by Trial objects
- Log application unhealthy errors at error level instead of warning level
- Fix result dict spam with duplicate and deprecated keys in top level
- Fix worker process leaks after job finishes
- Don't show AllToAllOperator progress bar if the disable flag is set
- Don't load Arrow PyExtensionType by default
- Don't raise batch size error if num_gpus=0
- Fix the cpu percentage metrics for dashboard process
- Retry RaySystemError application errors
- Fix bug with controller failing to recover for autoscaling deployments
- Fix control+c after serve run doesn't shutdown serve components
- Fix lightweight update max ongoing requests
- Fix get_state() and from_state() methods in SingleAgent and MultiAgentEpisodes
- Fix torch global_norm clipping overflow problem
- Fix ray.init(logging_format) argument is ignored
- Handle unserializable user exception
- Fix dashboard process event loop blocking issues
- Fix Nodes page sorting not working correctly
- Add back actors per page UI control in the actors page
- Fix memory leak in handles for autoscaling deployments when RAY_SERVE_COLLECT_AUTOSCALING_METRICS_ON_HANDLE=1
- Fix task submission never returning when network partition happens
- Fix incorrect use of SSH port forward option
- Fix the config to disable progress bar
- Disable gathering the full state dict in `RayFSDPStrategy` for `lightning>2.1`
- Fix getting attributes on stdout during Serve logging redirect
- Fix GetAllJobInfo `is_running_tasks` is not returning the correct value when driver starts ray
- Fix throughput time calculations for metrics
- Fix nested ragged numpy.ndarray
- Fix Ray debugger incompatibility caused by trimmed error stack trace
- Fix ScalingConfig(accelerator_type) to request an appropriate resource amount
- Fix maximum recursion issue when serializing exceptions
- Remove base config deepcopy when initializing the trainer actor
- Dynamically-created applications will no longer be deleted when a config is PUT via the REST API
- Fix _to_object_ref memory leak
- Fix multi-GPU and multi-agent support on the new API stack
- Fix deadlocks caused by Dataset.streaming_split for job hanging
- Fix protobuf breaking change by adding a compat layer
- Fix placement group leaks
- Skip schema call in to_tf if tf.TypeSpec is provided
- Skip recording memory spilled stats when get_memory_info_reply is failedalso in2.9.2
- Fix DeploymentStateManager qualifying replicas as running prematurely
- Fix out of disk test on release branch
- Fix failing huggingface test
- Fix deadlocks caused by streaming_split
- Fix locality config not being respected in DataConfig
- Add retry for _sample_fragment during ParquetDatasource._estimate_files_encoding_ratio()
- Pin the fastapi and starlette version to avoid breaking proxy
- Fix IS_PYDANTIC_2 logic for pydantic<1.9.0
- Fix missing message body for json log formats
- Fix task events profile events per task leak
- Make sure redis sync context and async context connect to the same redis instance
- Retry write if error during file clean up
- Improve handling the websocket server disconnect scenario
- Fix pydantic config documentation
- Prevent state API from reading files outside the Ray log directory
- Fix child process leak issue from Ray worker that leaks GPU memory
- Fix job page excessive loading time issue when Ray HA cluster restarts a head node
- Fix bug where _StatsActor errors with PandasBlock
- Fix a bug where no data shows up on the `Error QPS per Application` panel in the Ray Dashboard
- DreamerV3: Enable support for continuous actions
- Fix a bug where setting a local storage path on Windows errors
- Fix a broken `Trial.node_ip` property
- Fix a segfault when a streaming generator and actor cancel is used together
- Fix autoscaler SDK accidentally initializing a ray worker leading to leaked driver showing up in the dashboard
- Fix bugs for the vSphere cluster launcher
- Fix a bug where `ray start` would occasionally fail with `ValueError: `acceleratorType` should match v(generation)-(cores/chips).`
- Fix a bug where overview page UI will crash in Dashboard
- Fix Ray cluster stability on a high latency environment
- Fix memory leak from the end of object stream object in streaming generators
- Fix serve run help message
- Decrement ray_serve_deployment_queued_queries when client disconnects
- Pass logs through if sphinx-doctest is running
- Pick GCP cluster launcher tests and fix
- Apply request_timeout_s from Serve config to the cluster
- Fix pyarrow lazy import
- Fix cluster launcher failing to start multi-node clusters in Ray 2.6.0
- Fix autoscaler env variable overwrite not being usable if the command itself uses the env variable
- Fix Serve enum to_proto compatibility with Python 3.11
- Fix infinite recursion in log redirection
- Remove temporary checkpoint directories after restore
- Fix bug in execution for actor re-use
- Don't error on eventual success when running with auto-recovery in Ray Train
- Fix a bug that can cause undefined behavior when clusters attempt to scale up aggressively in Autoscaler
- Fix mypy error where module "ray" does not explicitly export attribute "remote"
- Fix bugs in handling of nested ndarrays and other complex object types
- Fix backpressure handling when reading directly from input datasource
- Fix backpressure handling of queued actor pool tasks
- Fix row count after applying filter
- Fix issue with max_concurrent_queries being ignored when autoscaling
- Write Ray address even if Ray node is started with --block
- Fix Ray on Spark running on layered virtualenv python environment
- Fix disk metric showing double the actual value
- Fix and improve support for HDFS remote storage
- Fix Imputer failing with categorical dtype
- Fix MLflow database integrity error in Ray AIR
- Fix ResourceChangingScheduler dropping PlacementGroupFactory args in Ray AIR
- Fix bug passing 'raise' to FailureConfig in Ray AIR
- Fix reserved CPU warning if no CPUs are used in Ray AIR
- Fix iter_batches() to not return empty batch in Ray Data
- Fix segfault when using runtime environments
- Set correct path when using python -m
- Fix autoscaling for 0 CPU head node
- Allow code in private remote Git URIs to be imported in Serve
- Fix hang during checkpoint synchronization in Tune
- Fix trial restoration from different IP in Tune
- Fix custom synchronizer serialization in Tune
- Remove legacy BlockList, locality_with_output, old callback API, and PyArrow 9.0 checks
- Remove deprecated TENSOR_COLUMN_NAME constant
- Remove deprecated read_parquet_bulk API
- End of Life for Python 3.9 Support: Ray will no longer be releasing Python 3.9 wheels from now on
- Removed long-deprecated set_progress_bars
- Removed deprecated API to set route_prefix per-deployment
- Remove support for nested DeploymentResponses
- Remove dead RayDatasetSpec
- Remove deprecated ray.air.callbacks modules
- Remove deprecated BatchPredictor
- Remove scikit-optimize search algorithm
- Remove batch_queue_cls parameter from the @serve.batch decorator
- Remove Legacy Trainers from Ray Train
- Delete legacy TuneClient and TuneServer APIs from Ray Tune
- Delete legacy Searchers from Ray Tune
- Remove deprecated Ray Serve 1.x APIs including Deployment.deploy, Deployment.delete, and Deployment.get_handle
- Move 24 algorithms into rllib_contrib
- Remove ray.data.range_arrow()
- Remove deprecated mlflow and wandb integrations
- Deprecate ray_remote_args_fn and Dataset.zip
- Deprecate low-level scheduling APIs DataContext.scheduling_strategy, actor_locality_enabled, exclude_resources, and local:// ahead of the actor-only rearchitecture
- Deprecate ConcurrencyCapBackpressurePolicy, DataIterator.to_torch, and pandas UDF batches
- Ray plans to drop support for Pydantic V1 starting version 2.56.0
- Ray Workflows library has been deprecated and will be removed in a future version of Ray
- Deprecate num_rows_per_file in favor of min_rows_per_file in Ray Data
- Default behavior for sync methods will change in a future release to run in a threadpool by default in Ray Serve
- Deprecate read_parquet_bulk
- Deprecate iter_tf_batches
- Deprecate meta_provider parameter of read functions
- Deprecate to_torch
- Deprecate passing arguments that contain DeploymentResponses in nested objects to downstream deployment handle calls in Ray Serve
- Deprecate RLModuleWithTargetNetworksInterface
- Deprecate Dataset.get_internal_block_refs()
- Deprecate TUNE_RESULT_DIR, RAY_AIR_LOCAL_CACHE_DIR, and local_dir
- Deprecate prefetch_batches argument of iter_rows and change default value
- Log a deprecation warning for local_dir and related environment variables
- Python 3.7 support is officially deprecated from Ray
- Deprecate previously experimental DAG API for deployment graphs in Ray Serve
- Deprecate single-application config file format in Ray Serve
- Deprecate accessing the Serve REST API through the dashboard agent port
- Deprecate LightningTrainer, AccelerateTrainer, TransformersTrainer
- Deprecate legacy DatasetConfig in Ray Train
- Ray Train Preprocessors and Predictors are deprecated in favor of Ray Data
- DatasetPipeline API is deprecated in favor of Dataset with streaming execution
- BatchPredictor is deprecated
- Ray 2.4 is the last version that supports Python 3.6
- Deprecate MlflowTrainableMixin in favor of setup_mlflow() function
- Deprecate Wandb mixin in Ray AIR
- Deprecate Checkpoint.to_object_ref and Checkpoint.from_object_ref in Ray AIR
- reject Sec-Fetch-* other browser-specific headers in dashboard browser rejection logic for CVE-2025-62593
- Improved handling for CVE-2025-62593 by testing for more browser-specific headers in dashboard browser rejection logic
- Token authentication: Ray now supports built-in token authentication across all components including the dashboard, CLI, API clients, and internal services
- Fix security vulnerabilities in Ray Dashboard (CVE-2023-6019, CVE-2023-6020, CVE-2023-6021, CVE-2023-48022, CVE-2023-48023)
2 releases in the range carry no categorized changes yet: 2.49.22.44.1. Their original notes, where the vendor published any, are below.
Original release notes, newest first
The list above is our reading of these notes; the originals from Anyscale are here, one fold per release.
2.58.0Ray-2.58.0
Highlights
- Ray Serve LLM: In this release we've completed KV cache and token aware request routing, which was previewed in 2.57. Tokenization now happens in-process on the
LLMRouteringress replica, the routing decision is made there, tokens are transmitted out-of-band so the engine does not re-tokenize, KV lifecycle events are broadcast to every ingress replica (#64642, #64920, #64949, #65010, #65095). KV cache and token aware routing is also aware of CPU KV caches, so offloaded KV cache blocks count toward a replica's cache hit (#65063). - Ray Core: We enabled the capability to offload task events from. With
RAY_enable_task_events_to_dashboard_headon, the task event buffer is replaced by the ray event recorder, events are exported from the aggregator agent to a task events head that keeps an in-memory store, and the state APIs andray.timelineread from it (#64835, #65028, #65123, #65160, #65218). Enabling the feature removes task event ingestion and serving from the GCS hot path. - Ray Data: We’ve added Databricks integrations for writing to DeltaLake, with Catalog support. We’ve also shipped a new shuffle v2 backend, featuring improved performance for joins and aggregations.
- Sandboxing: We've also added experimental Ray Sandbox, which runs task and actor code under gVisor and can run Docker-built images directly (#64964, #65570).
- TPU Support: Ray Train adds support for TorchTPU backend (#64796), and Ray Core adds
SubslicePlacementGroupfor gang scheduling on TPU subslices, single-host TPU support inSlicePlacementGroup, and resource accounting fortpu7xand multi-core chips (#64578, #64079, #64058). This lets TPU slices and subslices be reserved and trained on without external gang-scheduling glue.
Ray Data
🎉 New Features
- Add
Dataset.with_columnsfor multi-column expression projection (#63858) - Add
write_deltafor Delta Lake, with catalog support (#64923, #65079) - Add Torch inference API (#65157)
- Promote hash shuffle v2 to a selectable shuffle strategy, with aggregation support, vectorized aggregation, and block splitting during aggregation (#64953, #64652, #64956, #65329, #64897)
- Add
ignore_missing_pathsandskip_pathstoread_parqueton DatasourceV2 (#65118) - Add
delta_timestamps(temporal windows) toread_lerobot(#64877) - Collect cluster usage metrics by sampling in background threads during execution (#64686)
- Tolerate actor deaths during init via
DataContext.max_consecutive_actor_init_deaths(#64846) - Expose
RAY_DATA_HASH_SHUFFLE_MAP_TASK_TARGET_INPUT_BYTESinDataContext(#65103)
💫 Enhancements
- Generate sortable, collision-resistant dataset IDs (#65075)
- Push
LimitintoReadFileswhen it sits directly on it, and extractFileIndexer.list_file_infos(#65167, #65168) - Use
BlockRefCounterfor object store memory estimation and removeBlockRefCounter.clear()(#64456, #64521) - Fail execution if no operator makes progress within a timeout, instead of hanging (#65349)
- Improve
BatchIteratoranditer_torch_batches, and allow a customcollate_fnwith a custom device (#64994, #64967) - Skip downstream-capacity backpressure for eligible materializers (#64844)
- Shard exact download partitioning (#64066)
- Bump the
sort_reducememory multiplier to 3x and stop usingestimated_input_blocksas the shuffle partition count (#65176, #65296, #65335) - Disable cluster autoscaling when
PlacementGroupSchedulingStrategyis in use (#64417) - Propagate the operator name to shuffle tasks (#64802)
- Rename
reports_custom_op_statstoshould_report_custom_op_statsacross allMapTransformFnvariants (#64461, #64515) - Rename
allocatedtoreservedand add type aliases in the autoscaling coordinator (#64997, #65096) - Deprecate
ray_remote_args_fnandDataset.zip(#64963, #65111)
🔨 Fixes
- Fix an RCE where
read_lanceor nested pickle objects could execute arbitrary code (#64881) - Stop converting Arrow null columns to
null[pyarrow]into_pandas(#65187) - Fix
iter_torch_batchesdevice resolution and typing (#65059, #64947) - Propagate
isolate_read_workerstoDatasourceV2(#65191) - Avoid signalling epoch end for failed attempts (#65082)
- Add
tf-kerasto thetext_embeddingpip packages (#64889)
📖 Documentation
- Fix the stale
use_datasource_v2docstring default and an incorrectdefault_map_logical_memory_enabledreference (#65155, #65091)
Ray Serve
🎉 New Features
- Configurable status code and
Retry-Afterheader for backpressure rejections (#65193, #65319) - Add dependency-ordered shutdown for deployments (#64922)
- Add an optional tie-break key to best-fit node scheduling (#64914)
- Scale ingress request router replicas per proxy node (#64724)
💫 Enhancements
- Reconcile health checks from a dirty set, sweeping
RUNNINGreplicas round-robin instead of every tick (#64690) - Gate the rank-consistency check on replica membership changes (#64911)
- Read the multiplex marker statically so probing cannot initialize handles (#65064)
- Type
CreatePlacementGroupRequest.runtime_envas a dict (#64892) - Add a deployment-state accessor for testing (#64790)
🔨 Fixes
- Fix the Serve replica
ASGIServicebypassing token authentication (#65189) - Fix the proxy update loop getting stuck when a proxy's node is removed (#64403)
Ray Train
🎉 New Features
- Ray Train Integrates with TorchTPU backend (#64796)
- Add a public preemption API and a controller
PreemptingState(#64360) - Add data ingest metrics to the Train dashboard (#64523)
💫 Enhancements
- Make Train V1 and V2 use the autoscaling coordinator (#64824)
- Expand the
contains_tensorcheck and add a serialization check for the results return value (#64930) - Pin
PlacementGroupCleanerto the head node (#64705)
🔨 Fixes
- Fix Torch environment setup for V1 worker groups (#65005)
Ray Tune
🔨 Fixes
- Fix
HyperOptSearchdroppingtune.choicecategories that are constant dicts (#64537) - Deflake
test_multi_trial_reuse_with_failingand decidetest_experiment_restorecompletion from measured progress (#64526, #65212)
Ray LLM
🎉 New Features
- KV-cache-aware routing: move tokenization into the
LLMRouteringress replica, decide KV/token routing there, broadcast KV lifecycle events to all ingress replicas, and make selection and reservation atomic (#64642, #64920, #64949, #65010) - Enable KV cache offloading, make KV routing aware of CPU KV caches, and transmit tokens out-of-band so the engine skips tokenization (#65063, #65095)
- Add a KV cache offload/reload dashboard and a Ray Serve LLM SGLang metrics dashboard (#65122, #64797)
💫 Enhancements
- Upgrade to vLLM 0.26.0 (#65045)
- Route direct-streaming ingress to the co-located router (#64489)
- Reuse vLLM's resolved HF config in
apply_checkpoint_info(#62962) - Preserve mapping-valued vLLM frontend arguments (#65146)
📖 Documentation
- Document loading models from Azure storage, including
az://Blob streaming with RunAI Streamer (#64819, #64825)
Ray RLlib
🔨 Fixes
- Fix TQC critic divergence by stopping actor-loss gradients from leaking into the critics (#65125)
- Fix squashed-Gaussian log-prob corruption for saturated policies (#65036)
- Use the
target_qf_twinhead in IQL target prediction (#64932) - Properly enforce
use_kl_lossin the PPO Torch and TF policies (#61562) - Fix a
KeyErrorin the multi-agent module-to-env connector (#64803) - Fix the API-doc consistency check for the new reverse/dedup policies, and deflake the
test_env_runnercallback-count tests (#64807, #64989)
Ray Core
🎉 New Features
- Ray Sandbox (experimental): run task and actor code under gVisor, and run Docker-built images out of the box (#64964, #65397, #65570, #65622)
- Move task events out of the GCS: the ray event recorder replaces the task event buffer, the aggregator agent exports to a task events head with an in-memory store, and the state APIs and
ray.timelineare rerouted to it, with reconciliation on worker death and job completion (#64835, #65028, #65057, #65123, #65141, #65160, #65218, #65247, #65288) - Add
SubslicePlacementGroupfor gang scheduling on TPU subslices, support single-host TPUs inSlicePlacementGroup, and add aper_slice_pgsparameter (#64578, #64079, #64072) - Introduce a native, lightweight C++ leader election client for active-passive GCS (#63773)
- Add Apple silicon GPU (
mps) support and an Intel GPUZE_AFFINITY_MASKmapping (#38464, #64440) - Add worker lifecycle events to the events export pipeline (#64887)
- Add GPU UUID to the labels of GPU metrics (#65113)
- Enable resource accounting for
tpu7xand multi-core chips, addgb200/gb300accelerator constants, and addTTNPUcustom accelerator resources (#64058, #65009, #61554) - Support cross-device transfers in RDT NIXL (#64815)
💫 Enhancements
- Publish node death before persisting it and drop RocksDB soft durability (REP-64) (#64702)
- Make
RedisContext::Connectnon-fatal on connection failure (#64299) - Move the pending resource load pull off the GCS main
io_context(#65024) - Subscribe only to the specific owner worker's death for generator backpressure, and only when actor-level backpressure is enabled (#65195, #65136)
- Evict dead actors from
ActorPoolinstead of recycling them (#64646) - Rename
label_domainto topology strategy in the scheduling policy (#64384) - Warn on use of the deprecated dynamic generator (#64749)
- Add object resolution debug logging for lineage reconstruction (#64853)
- Block only on the CUDA stream used to create tensors in RDT (#64823)
- Preserve
StateSchemacolumn order infilter_fields(#65052) - Prepare
StreamResponseon an empty log stream (#62296) - Refine
ObjectRefStreamEndOfStreamErrorfrom_get_next_ref_n(#64602) - Drop a redundant
FunctionDescriptorrebuild inCallSiteString(#64874) - Upgrade bundled dependencies: log4j 2.25.4, jackson-databind 2.18.8 (CVE-2026-54512, CVE-2026-54513), gson 2.11.0, aiohttp, idna, and azure (#64269, #64575, #64273, #65131, #64056, #65046)
🔨 Fixes
- Give
canceled_tasks_its own mutex to break a lock-order cycle (#65393, #65620) - Fix a GIL/mutex deadlock in actor-level backpressure with sync and async streaming generators (#64896)
- Fix a deadlock between metric registration and
collect()inOpenTelemetryMetricRecorder(#64946) - Report shutdown from
check_signalsinstead of exiting the process (#65184, #65400) - Fix a Python 3.14 async-actor memory leak by re-anchoring stack protection to fiber stacks (#64772)
- Keep only the latest object-location pubsub snapshot to fix an owner memory leak (#65133)
- Fix a spurious
OwnerDiedErrorduring graceful raylet shutdown (#64899) - Fail
ray.geton refs from a non-restartable streaming generator when those objects are lost (#64756) - Serve the spilled copy when
Pushhits a stalelocal_objects_mirror (#64916) - Fix
spill_manager_objects_bytesreporting the restored object count instead of restored bytes (#65013) - Forward node-pinned actors to the pinned node in GCS actor scheduling (#64951)
- Fix a leaked named actor and name conflict when registration times out (#64948)
- Fix a set-before-register race in
RDTManagerthat could SIGSEGV (#64558) - Fix task log info fields in lifecycle events (#65190)
- Guard
Status::operator<<against an OK status, and fix UB inStatusOrswap and assignment on error-state operands (#64983, #64799) - Compare all
ResourceRequestfields inoperator==(#64838) - Verify VFIO groups are backed by Google TPU PCI devices, and use POSIX paths for VFIO sysfs vendor checks on Windows (#65105, #65182)
📖 Documentation
- Document the embedded RocksDB GCS backend (#64731)
- Clarify actor class state isolation and the Ray Core walkthrough benchmark setup (#64597, #64529)
- Document how to set up placement group topology strategy on Kubernetes (#64117)
Dashboard
🎉 New Features
- Capture Kubernetes Pod events in the Ray Dashboard head (#63937)
💫 Enhancements
- Hide the GPU and GRAM columns when no GPUs are present (#64567)
- Update
axiosto^1.18.0(#65130)
🔨 Fixes
- Fix the profiling status check so it works behind a reverse proxy (#65126)
- Fix a dashboard startup crash from an unguarded
kubernetesimport (#64962)
📖 Documentation
- Add a user guide for Kubernetes events in the Ray Dashboard (#64734)
Ray Wheels and Images
🎉 New Features
- Enable Windows py3.13 and py3.14 wheel builds (#64970)
- Publish arm64 Ray LLM images (#65002)
- Add a
ray-torchrelease test image (py3.14, cu12.8) and ahello_world_py314smoke release test (#65114, #64857)
💫 Enhancements
- Bump the Anyscale CLI to 0.26.105 and bake
pybase64into the ML release-test image (#64980, #64791) - Recompile dependency lock files on dependabot PRs, and regenerate the
ray-torchpy3.14 lock for aiohttp 3.14.3 (#65056, #65343, #65378) - Pin
grpcioto 1.75.0 in test deps to avoid thegrpc.aioperformance regression (#65112) - Give
ray-wheel-minimal-builda distinct wanda image name (#65318, #65383) - Move cu130 job tests off
g4dn.4xlargetog6.4xlarge(#65213) - Bump the version to 2.58.0 and publish 2.56.0 perf metrics (#65252, #64196)
🔨 Fixes
- Fix
org_lzma_lzmadownload failures by using the SourceForge redirector (#64906) - Install the data CI depset after conda ffmpeg so removed packages are restored (#65334, #65341)
- Drop
-Wl,-piefrom the vendored RocksDBWITH_TSANlink flags (#64917) - Floor
peft>=0.18for transformers 5.x in thehuggingface_acceleraterelease test (#65062)
Documentation
- Add initial documentation for Ray sandboxing (#65503, #65573)
- Update the Ray History Server docs for
RAY_ROOT_DIR->STORAGE_ROOT_DIRand use a RayJob sample YAML (#65139, #65441, #65510, #65505, #65531) - Add a contributor guide for editing and managing Python dependencies (#63547)
- Clarify the API deprecation policy (#65093)
- Document the
safe-to-evictannotation for the Ray head Pod, and autoscaler v1restartPolicybehavior (#64907, #64900) - Update the Gaudi tutorials and examples to the latest versions (#58861)
- Correct the TLS verification comments and the metric cardinality default comments (#61977, #64478)
- Route API reference pages and autodoc machinery to the API-surface checks, ignore inherited API annotations, walk
ray.data.llmas its own head module, and reserve thedoctag for doc validation (#64812, #65196, #65040, #64775, #65208) - Scope API signature bold weight to the object name, and reclassify sphinx unknown-document and docutils-inline-markup as judgment (#64933, #64839)
- Fix minor typos, bump the docs template build-id pins, and add Douglas Strodtman to the committer list (#64864, #65041, #65092)
Thanks
Many thanks to all those who contributed to this release!
@bveeramani, @yjaw, @sampan-s-nayak, @spencer-p, @iaalm, @risjai, @kahlun, @liulehui, @eicherseiji, @jhasm, @ronny-anyscale, @KuongB, @Ranoobaba, @Sparks0219, @alimaazamat, @yuhuan130, @jeffreywang88, @AarryaSaraf, @johntomcat7408-cmyk, @tqKhanh1712, @praneethkaturi, @elliot-barn, @tanmayrauth, @skpark-rh, @YashwanthRanjanSingaravel, @Yicheng-Lu-llll, @pseudo-rnd-thoughts, @nadongjun, @vineethsaivs, @owenowenisme, @saitejabandaru-in, @RocMarshal, @karticam, @win5923, @Hyunoh-Yeo, @dragongu, @YoyinZyc, @chiayi, @HrushiYadav, @martinlhw, @sai-miduthuri, @dstrodtman, @JasonLi1909, @2uchan, @mukktinaadh, @coqian, @ayushk7102, @LuciferYang, @NripeshN, @MortalHappiness, @verma-divyanshu-git, @ans9868, @johntaylor-cell, @prasad-anyscale, @edoakes, @ShockYoungCHN, @fscnick, @JiangJiaWei1103, @subpath, @shivamsingh-007, @RinZ27, @richabanker, @iamjustinhsu, @malsbat, @andrewsykim, @ryanaoleary, @vinay7373, @Kunchd, @petern48, @kyuds, @rueian, @rayhhome, @xyuzh, @hao-aaron, @CaiZhanqi, @kalyanamdewri, @abhishekverma-ray, @khluu, @nh-atuan, @odncode, @robertnishihara, @machichima, @Arkit003, @goutamvenkat-anyscale, @ArturNiederfahrenhorst, @Myasuka
2.57.0Ray-2.57.0
Highlights
- Ray Data: In this Ray release, we've enabled
DataSourceV2by default (#64821), soread_parquetand friends use the new scan/listing infrastructure with row-group-aware chunking and predicate splitting. Hash Shuffle V2 eliminates the aggregator actor pool. V1 had to provision that pool up front from an estimate of the input size, and its actors accumulated partition shards in actor heap memory, invisible to Ray and unspillable, until finalization. V2 replaces it with two stateless task-based operators, ShuffleMapOp --> ShuffleReduceOp, that pass shards through the object store, so intermediate state spills under pressure and no capacity has to be reserved in advance. The map/reduce barrier itself remains in both designs. - HashShuffleV2 supports
join(#63598, #64538, #64687). This lets shuffles reuse standard map/reduce scheduling, backpressure, and resource accounting. - Ray Serve: The HAProxy ingress is now distributed as the
ray-haproxyPyPI package instead of being compiled into images, and it is the default HAProxy binary (#64141, #64163, #64164). We've also added gRPC support to the HAProxy direct-ingress path, including streaming, metrics, and custom request IDs (#63735, #64310, #64166, #64112). For Ray Serve LLM, we've added experimental KV-cache-aware request routing that tracks replica KV state through an event plane, tokenizes before routing, and routes on prefill/decode token load (#64084, #64085, #64097, #64224, #64327, #64400). KV cache-aware routing’s complete support will land in 2.58. - Ray Core: We've added an embedded RocksDB storage backend for GCS fault tolerance (REP-64), selectable with
RAY_gcs_storage=rocksdbandRAY_gcs_storage_path(#63657). GCS fault tolerance no longer requires an external Redis instance. We've also added a public API for topology-aware scheduling (#63479, #63740).
Ray Data
🎉 New Features
- Enable
DataSourceV2by default viaDataContext.use_datasource_v2(#64821) - New task-based hash shuffle v2 (
ShuffleMapOp→ShuffleReduceOp) withjoin, multi-input reduce, downstream map fusion, and reducer remote args, behind an env flag (#63598, #64538, #64687, #64438, #64302, #64532, #64481) - Add a
Catalogabstraction with aUnityCatalogimplementation that can be passed toread_*, and Unity Catalog write support for Parquet and Iceberg (#64193, #64519) - Add
read_zarrfor Zarr datasets (#63003) andread_lerobotfor LeRobot v3 datasets (#63821) - Add
PushdownCountFilesoptimization to answercount()from Parquet footers (#64763) - Add common subexpression elimination to the expression optimizer (#63974)
- Add GPU support for
Aggregate(#63708) - Make dataset iteration metrics queryable per split (#64608)
- Add custom operator stats to capture worker-side metrics during task execution (#64221)
- Refactor usage collection into an extensible
UsageCallback(#64500) - Export
from_blocksfromray.data(#64127) - Add support for
rapidsmpf-26.4.0(#64324)
💫 Enhancements
- Hide Ray Data internal frames from user-code error tracebacks (#64587)
- Run projection/predicate pushdown before limit pushdown, block optimization of non-deterministic expressions, and make fuse checks consistent between the logical and physical optimizers (#64651, #64165, #63936)
- Add a two-mode block metadata fetch behind a single
MetadataFetcherinterface (#64378) - Use work stealing for file listing and a dynamic work queue for traversals (#64675, #64388)
- Speed up
ExecutionResourcesand the reservation/budget loops on the scheduling hot path (#63964) - Fix
O(n^2)schema reconciliation inunify_schemasand avoid per-columnSeriesmaterialization in tensor-column casting (#64555, #64038) - Decouple collate and memory pinning in
iter_torch_batches, add per-stage training-thread blocking attribution, bound in-flightiter_threadeditems, and finalize after reordering underpreserve_order(#64653, #64183, #64219, #64282) - Add default logical memory for map operators, wire the materializing-op filter into
OpResourceAllocatorbudgeting, and moveestimate_object_store_usageinto the physical op (#63814, #63665, #63961) - Decrease the downstream backpressure ratio to 2.0 (#64352)
- Route native
S3FileSystemdownloads to the PyArrow threaded path (#64089) - Size hash-shuffle aggregators via bounded online sampling and add a timeout to the batched
ray.getwhen fetching partitions (#63929, #64256) - Replace manual block reference accounting with Ray Core out-of-scope object callbacks (#64011, #64157, #64191)
- Default
read_numpytoallow_pickle=Falseand make it manually configurable (#64684) - Make
write_lance(mode=CREATE)error instead of silently overwriting (#64364) - Expand
DistributionTrackerwithmerge()and p25/p75, and add dead node counts and detected issues to usage collection (#64074, #64459, #64198) - Remove cluster autoscaler v1, rename the subcluster label key to
ray-subcluster, avoid scaling nodegroups dedicated to the head node, and quiet autoscaling coordinator logs (#64380, #64003, #63918, #63534) - Delay the "cluster resources not enough" warning until an operator is persistently starved, and lower the high-memory warning threshold (#63969, #64124)
- Remove
ExecutionPlan,_num_outputs,batch_formatonAllToAllOperators, andInheritBatchFormatRule; useinput_dependenciesin logical operators (#63662, #64167, #64152, #64149, #64148) - Deprecate low-level scheduling APIs (
DataContext.scheduling_strategy,actor_locality_enabled,exclude_resources,local://) ahead of the actor-only rearchitecture (#64632) - Migrate the Daft dependency from
getdafttodaft(#64240) - Migrate
apply_chat_template/tokenize/detokenizecallers to*_stageform, and removePrepareImageStagewhile deprecating theimagerow column (#63590, #63570)
🔨 Fixes
- Fix
TensorDtype.__from_arrow__crash on empty tensor columns (#64767) - Fix Arrow-backed
to_pandasregressions with an opt-out flag and int/float block overflow handling (#64768) - Fix read-only hash array crash in hash partition (#64552, #64559)
- Fix streaming-generator hang on a plasma-resident return object (#64386)
- Fix Parquet write overflow for string/binary columns larger than 2 GiB (#64212)
- Fix Parquet sampling hang on a permanent
OSError(#64342) - Fix the BigQuery datasink to handle empty blocks (#60797)
- Make
PandasBlock.size_bytesdeterministic (#64393) - Propagate branch in
_append_and_commit()for the Iceberg overwrite save mode (#63922) - Propagate
isolate_read_workerstoDatasourceV2(#65191, #65207) - Fix cross-region S3 bucket access in the obstore download path (#63890)
- Restore
safe_roundin theExecutionResourceshot path (#64296) - Log both the wrapped and wrapper exception in
iterate_with_retry(#64639) - Add
tf-kerasto thetext_embeddingpip packages (#64889, #64968) - Fix
build_processorfailing with vLLM >= 0.19, correct itsconfigtype hint, and addrequest_timeout_stoServeDeploymentProcessorto prevent indefinite hangs (#64337, #64098, #64496) - Fix type hints in
throughput_solver.py(#64289)
📖 Documentation
- Add a guide on avoiding out-of-memory errors and improve the existing OOM docs (#64046, #64297)
- Document the best practice for isolating Ray Data workers from training nodes (#64588)
- Document running two datasets in one cluster (#64200)
- Move the
read_zarrguide back into its docstring (#64409) - Remove Ray Data and DAG docstring ignores from pydoclint (#63634)
Ray Serve
🎉 New Features
- Distribute HAProxy through the
ray-haproxyPyPI package, make it the default binary, and remove the from-source build (#64141, #64163, #64164) - Add gRPC support to the HAProxy direct ingress, including streaming, unary-unary metrics, and custom request IDs (#63735, #64310, #64166, #64112)
- Emit request and system metrics from HAProxy (#64329, #64255)
- Support
root_pathin the HAProxy ingress (#64295) - Add a per-replica metadata hook exposed on
ReplicaSelection(#63948)
💫 Enhancements
- HAProxy stability: graceful drain waits for in-flight and queued requests, replicas quiesce before reporting shutdown complete, dispatches cancelled by replica gRPC stop are retried, reload takeover is verified by pid, and
close-spread-timeis set in the template (#63886, #63920, #63995, #64022, #64063, #63996) - Make direct-ingress port reconcile incremental and skip it entirely when ingress membership is unchanged (#64508, #64676)
- Controller performance:
O(1)version-filtered replica counts, in-place health-check reconcile in the deployment-state loop, and a fast-path orphaned-actor check (#64699, #64507, #64511) - Freeze GC after replica initialization by default (#64742)
- Eager-load proxy imports (#64113)
- Pin the replica actor to bundle 0 of its placement group and track actor
fallback_strategyonDeploymentSchedulingInfo(#62693, #64346) - Deprecate
HTTPOptions.locationin favor ofproxy_location, raise on non-zeroHTTPOptions.num_cpus, and warn on other deprecated HTTP options (#64479, #64418, #63604) - Raise a clear error when a custom request router or
serve.multiplexedis used on an ingress deployment under direct ingress (#64211, #64045) - Recover ingress request router pin-misses via the fallback proxy instead of returning 503 (#64218)
- Add
RAY_SERVE_CONTROLLER_METRICS_INCLUDE_HIGH_CARDINALITY_TAGSto control controller metric tags (#63642) - Default
RAY_SERVE_PORT_QUARANTINE_Sto hard-stop-after plus a margin (#64021) - Defer the "application ready" log until proxies are ready (#64010)
- Dedup ingress replica and proxy metrics code, and migrate
parse_urifrom_privateto_common(#64041, #64371) - Enforce
mypyandpyreflytype checking on clean Serve files (#64662) - Fail loudly when subclassing
@serve.ingresswith a sync__init__(#63413) - Supply a safe default request id header value in direct ingress (#64118)
🔨 Fixes
- Fix
serve.ingress(FastAPI())pickling andinclude_routerunder FastAPI >= 0.137 (#64814, #64531) - Fix an idle worker leak that caused OOM on the Ray head node (#63597)
- Fix
serve.shutdown()skipping live shutdown when the cached controller client is stale after a driver reconnect (#64660) - Preserve the deployment actor class across a config re-apply (#64411)
- Fix rank corruption on controller recovery after a lightweight reconfigure (#64636)
- Fix
route=Nonecrash in direct-ingress metrics reporting (#64645) - Fix the direct-ingress backpressure counter leak on cancel-while-queued and clean up the leaked receive task on request timeout (#64348, #64123)
- Fix HAProxy
healthzfalling through to 404 when there are no backends (#64582) - Guard request router backoff against
OverflowError(#64539) - Fix a slot leak race in
SingletonThreadRouter.choose_replica(#63649) - Fix a type regression in
RAY_SERVE_HAPROXY_CLOSE_SPREAD_TIME_S(#64752) - Fix Serve tests broken by protobuf 7 (#64362)
📖 Documentation
- Fix the
RequestRouterConfigstats docstring to referencerecord_routing_stats(#64086)
Ray Train
🎉 New Features
- Add preemption handling: a preemption watcher for node-drain observability, with the signal fanned out to workers (#63807, #64099)
💫 Enhancements
- Make Train v1 and v2 use the autoscaling coordinator (#64824, #64936)
- Restrict
ray.train.report(checkpoint)to in-band checkpoints only (#63645) - Make
Result.from_pathread-only (#64340) - Add compute-time metrics to
tune_torch_benchmark.py(#64274) - Update TensorFlow/Keras examples and tests for Keras 3 compatibility (#64276)
🔨 Fixes
- Fix
CometLoggerCallbackmutating the caller's result dict viaresult.pop()(#64570) - Fix the
WorkerMetricsCallbackmethod name to match theWorkerCallbackinterface (#64568)
📖 Documentation
- Document the unsafe deserialization risk in
TorchCheckpoint.get_model()andFrameworkCheckpoint.get_preprocessor()(#64586) - Fix docstring style and enable
--check-style-mismatch=Truein pydoclint (#63988) - Enumerate the accepted resource keys for
ScalingConfig(#63449)
Ray Tune
💫 Enhancements
- Make
BayesOptSearchfloat-hash precision configurable (#63914) - Require
optuna>=3.0.0inOptunaSearch(#64242)
🔨 Fixes
- Respect
max_concurrent_trialsfor custom searchers (#63770)
📖 Documentation
- Warn when
BayesOptSearchstops early on convergence, and documentpatience/skip_duplicate(#64288) - Restructure the Tune example pages and add PyTorch Lightning examples to the examples README (#63460, #63438)
- Document nested-metric keys in
ResultGrid.get_best_resultand add a conditional search-space example totune.sample_from(#63445, #63443)
Ray LLM
🎉 New Features
- Add KV-cache-aware request routing:
KVAwareRouter/KVRouterActorinterfaces, replica tracking, an event plane, pre-routing tokenization, token-level request lifecycle tracking, and prefill/decode token-load-aware routing (#64084, #64085, #64097, #64224, #64327, #64400) - Switch the Ray Serve SGLang engine to the sglang
RayEngine, reach control-plane parity, and support Ray Serve direct streaming by serving SGLang's native OpenAI app (#62888, #63021, #64611) - Add the MoRIIO KV-connector backend for prefill/decode disaggregation, with cross-node worker IP advertisement via a vLLM plugin (#63951, #64067)
- Enable the
/classifyand/poolingendpoints in direct-streaming mode (#64494) - Add a Ray Serve LLM SGLang metrics dashboard (#64797, #65083)
💫 Enhancements
- Upgrade vLLM to 0.25.1 (#64082, #64483, #64697)
- Delegate prefill/decode orchestration to the KV-connector backend and avoid double prompt tokenization in disaggregation (#63950, #64049)
- Make
request.request_idauthoritative for the engine and stop clobbering an explicitly set request id with the Serve id (#63949, #64044) - Parse the direct-streaming routing payload for body-aware routers, and add direct streaming session-affinity tests (#64328, #63927, #64266)
- Use
asyncio.create_taskinstead ofensure_futureinKVRouterActor(#64546) - Add a cluster filter to the Serve LLM Grafana dashboard (#64596)
- Validate
accelerator_typefor CPU vLLM engine configs (#64235) - Use
model_idrather than the remote URI as the cache identifier inVLLMEngineConfig(#64110) - Remove the Serve LLM config generator (#64075)
🔨 Fixes
- Fix malformed PromQL in the Serve LLM Grafana dashboard (#63893)
📖 Documentation
- Add a custom vLLM model guide and update the vLLM embedding model example (#64594, #64504)
- Improve the Serve LLM docs landing pages, add a config reference, and document direct streaming and the ingress request router (#64076, #63860)
- Fix 404s in the Serve LLM examples sidebar links (#64209)
Ray RLlib
🎉 New Features
- Add a pull-based
EnvRunnerStateServerfor async weight sync (#63849) - Expose the count of
EnvRunners dropped ontimeout_secondscalls (#63493)
💫 Enhancements
- Upgrade the example vision stack to MobileNet v3 and remove MobileNet v2 torchhub usage (#64031, #64028)
🔨 Fixes
- Narrow
from_checkpointexpectations to avoid silent failures (#63614) - Require
MultiRLModuleSpec.rl_module_specsto be a dict (#64785) - Fix the perpetual pending state in offline evaluation during Tune (#64453)
- Fix RLlib with Tune by reverting the
AlgorithmConfig.to_dict()change for the new API stack (#63695, #64501) - Fix ONNX export under torch 2.9 by bumping
onnxscriptand migrating to the dynamo exporter (#64410, #64033) - Apply observation filters in
compute_single_action()on the old API stack (#64088)
📖 Documentation
- Revamp the RL modules docs and speed up the docs tests (#64505)
- Fix the outdated parametric-action-spaces link in
rllib-algorithms(#63435)
Ray Core
🎉 New Features
- Add an embedded RocksDB storage backend for GCS fault tolerance (REP-64), selected via
RAY_gcs_storage=rocksdbandRAY_gcs_storage_path(#63657) - Add a public API for topology-aware scheduling via
topology_strategy(#63479, #63740) - Implement backpressure for async streaming generators, add actor-level backpressure config, and add
_num_objects_per_yield(#64383, #63310, #63943) - Implement
RayTaskEventRecorderas the first step of moving task events out of GCS (#64168) - Drain the node on
SIGTERMbefore shutting downray start --block(#64454) - Add
tpu.dispatchsyntax sugar and a JAX profiler for TPU (#64493, #62371) - Publicize
__ray_call__as aDeveloperAPIfor running closures on actors (#64367) - Add the NVIDIA RTX PRO 6000 accelerator type and update the AMD accelerator manager (#64428, #62477)
- RDT: enable the
LIBFABRICbackend for NIXL and upgrade NIXL to v1.2.0 (#62339, #63980) - Add an owner-driven
FreeLocalObjectsRPC and remove the originalFreeObjectsRPC andObjectEvictionpubsub (#63218, #63181)
💫 Enhancements
- Actor scalability: prefill the placement-group bundle cache at creation to remove an actor submission bottleneck, and construct gRPC metric objects once per process instead of per request (#64649, #64732)
- Bound the GCS worker table by evicting old dead-worker entries, prioritized by exit type (#64612, #64729)
- Batch object-manager
PullRPCs by destination node and read spilled object chunks in bulk instead of byte-by-byte (#64225, #63830) - Post all object pubsub publishes to the IO thread to relieve lock contention (#63983)
- Autoscaler: improve v2 scheduler performance for large clusters, handle deleted node types in the metrics reporter, and support env-var configuration for log rotation (#64175, #64184, #63955)
- Integrate
IOContextMonitorinto GCS, update its metrics, and excluderay_syncer_io_contextandtask_io_contextfrom health checks while raising the probe deadline to 30s (#63930, #63975, #64522, #64421) - Continue the
ClockInterfacemigration in the core worker and dependency-injectPeriodicalRunnerInterface(#63956, #63994, #64061, #64029) - Enable
process_group_cleanup_enabledby default and fix graceful-shutdown cleanup (#64407) - Make owned object metrics lazy, compute per-component memory usage in MiB, scope
prom_metrics_service_discovery.jsonto the session dir, and set the OpenTelemetry resource identity (#64093, #63932, #63850, #63921) - Re-emit per-state task, actor, and placement group gauges every metrics tick and retain gauge observations for a TTL, so live series survive a missed scrape (#64524, #64633)
- Add the GPU UUID to the labels of GPU metrics (#65113, #65134)
- Log a hint to the driver when system overhead exceeds reserved system memory (#64270)
- Validate explicit zero resource isolation overrides and move memory monitors into
common/monitor(#63864, #64491) - Prioritize tasks over actors when killing under memory pressure (#64170)
- Bail on
AdjustWorkerOomScoreread failure and clamp the score to[-1000, 1000](#62713) - Cap the
runtime_envparse_uripackage name length to avoidENAMETOOLONG(#64339) - Scope the raylet's forced GC to backstop actor handle cycle deadlocks (#63939)
- Support joining fibers before exiting the fiber runner thread (#64405)
- Internal cleanups: remove callbacks from
TaskToExecute, split task/resource preparation utils out of_raylet.pyx, consolidate the GCS dedicatedio_contextpolicy, and renameOnDemandBroadcasting(#64182, #63088, #63931, #63855)
🔨 Fixes
- Fix a Python 3.14 async-actor memory leak by re-anchoring the stack (#65177)
- Fix a deadlock between metric registration and
collect()inOpenTelemetryMetricRecorder(#64946, #65094) - Fix multi-threaded actor graceful shutdown (#64019)
- Streaming generator fixes: remove ref stream callbacks that caused a reconstruction hang, fail fast on a replay object-count mismatch, remove the implicit
__dealloc__(), and honortimeout_sin the end-of-streamray.get(#64581, #64394, #64333, #64014) - Fix pipelining of actor argument fetches while an actor task is running (#63079)
- Fix a dangling reference in
GetSchedulingClassDescriptor(#64707) - Fix a pgid cleanup leak in the job supervisor (#64746)
- Fix the raylet drain path reading stale object store memory usage (#64415)
- Avoid a GCS crash on Redis connection loss in
RedisResponseFn(#64204) - Fix the actor
working_dirbeing overridden by the job-levelpy_driver_sys_path(#63756) - Fix
RAY_CHECKfailures caused by doubleray.cancel()and keyboard interrupts (#63663) - Fix
event_loggerandexport_event_loggerto flush all handlers safely (#63947) - Default
TaskProfileEvent.extra_data_to{}to avoid a JSON decoding error in the State API, and normalize thecmdlinefield in theStatsPayloadschema (#64589, #64286) - Autoscaler v2: fix
ALLOCATION_TIMEOUTworker replacement ordering and theRAY_STOP_REQUESTED→RAY_RUNNINGfallback when drain has succeeded (#63815, #63424) - Jobs: replace an
assertwithRuntimeErrorinput_statusand avoid mutatingruntime_envduring submission (#64569, #63990) - Improve the error message when
RAY_ADDRESSis set to an HTTP address (#64180) - Define
WIN32_LEAN_AND_MEANglobally for Windows builds (#64361) - Wait for subprocesses to terminate in
ray.shutdown()(#63655) - Fix the per-process GPU memory utilization dashboard stat (#61412)
📖 Documentation
- Update the OOM documentation to use resource isolation mode (#63652)
- Clarify the KubeRay autoscaler
restartPolicyrequirement (#64855) - Document the
nameparameter fortask.options()(#63450) - Enforce Doxygen documentation style for coding agents and remove Ray Core docstring ignores from pydoclint (#64188, #63639)
Dashboard
🎉 New Features
- Implement the frontend UI for Platform Events (#63332)
💫 Enhancements
- Link workers to actor detail pages and handle nil IDs (#63795)
- Support a Grafana Cloud metrics fallback (#64138)
- Format
RuntimeEnvState.creation_time_msas a duration (#64207) - Diagnose dashboard-agent event-loop stalls (#64436)
- Log errors when job submission fails in
JobHeadand stop configuring the root logger on module import (#64443, #64463)
🔨 Fixes
- Fix local file inclusion in the
/logsAPI endpoint by rejecting absolute paths and..components inLogAgentV1Grpc.ListLogs()(#64701) - Fix TPU metrics (#63998)
- Fix task grouping by custom task name in the Dashboard API (#63820)
- Fix an "automaticaly" typo in the Grafana dashboard descriptions (#64614)
Ray Wheels and Images
- Build and publish Python 3.14 wheels and images, add py3.14 TPU base deps, refresh the py3.14 locks, and add a py3.14 smoke release test (#64754, #64750, #64857, #64938).
- Build and publish
cu130variants for therayandray-extraimages (#63972, #63801). - Add a py3.13
ray-mlimage withtorchft-nightly(#63587). - Add
ray-haproxyto theray[serve]extra and base requirements, and bump it to 2.8.25 for CVE-2026-55203/55204 (#64141, #64430). - Unify
requirements_compiledacross Python versions and upgrade the HuggingFace stack todatasets4.x (#64257, #64054). - Fix the vendored RocksDB build: use Make instead of Ninja to repair aarch64 core builds, drop
-Wl,-piefrom the TSAN link flags, and silence TSAN false-positive races (#64748, #64917, #64937, #64759).
Documentation
- Added
AGENTS.mdwith the AI-assisted contribution policy, routed.claude/CLAUDE.mdto it, and added a documentation style and grammar guide (#64419, #64518). - Converted the ray-contribute developer guides from RST to MyST, soft-wrapped prose across
doc/source, and added an rst-to-myst conversion skill (#64100, #64111, #64115, #64136, #64259, #64279, #64135). - Added a unified APIs navigation section, generated API stubs without a full doc build, and greened the API-doc consistency check with reverse/dedup policies and a split whitelist (#64387, #64423, #64420, #64783, #64786, #64808, #64818).
- Added curated page descriptions for nav pages (SEO and
llms.txt) and a custom 404 page with absolute URLs (#64330, #64603). - Built Read the Docs incrementally from the doc build cache, repaired cache production, and skipped RtD PR builds for code-only PRs (#64277, #64414, #64482, #64599, #64547, #64480).
- Hardened doc template fetches: pinned to specific build ids, guarded zip extraction against path traversal, failed the build loudly on fetch failure, and removed outdated templates now synced at build time (#64637, #64669, #64629, #64635, #63971).
- Upgraded Sphinx to 8.2.3 on Python 3.11, decoupled Sphinx from the test/CI dependency stack, and fixed moved intersphinx inventory URLs (#64070, #63962, #64516).
- KubeRay: added an IPPR user guide, documented RayCronJob timezone support and autoscaler command overwrite, updated the RayJob agent sandbox docs, and refreshed the Serve High Throughput guide for Ray 2.56 (#63212, #64444, #63627, #64460, #64144).
- Added notebook tests for the lightweight Ray Core examples and recorded the Train example notebooks that are intentionally untested (#64313, #64318).
- Refreshed the ecosystem page, added a Ray + Agent Sandbox example, and renamed the AI chat widget to "Ray Docs" (#64156, #64047, #64351).
Thanks
Many thanks to all those who contributed to this release!
@justinvyu, @neuyilan, @bveeramani, @abhishekverma-ray, @dstrodtman, @yinli-systems, @Truc54, @tanmayrauth, @ArchishmanSengupta, @yuhuan130, @skpark-rh, @shaun0927, @ps2181, @edoakes, @htvien, @xinyuangui2, @owenowenisme, @ronny-anyscale, @nadongjun, @LeMinhNhat2901, @kevin85421, @akyang-anyscale, @jeffreywang88, @sai-miduthuri, @robertnishihara, @andrewsykim, @iamjustinhsu, @leewyang, @marwan116, @MortalHappiness, @fscnick, @ayushk7102, @ArturNiederfahrenhorst, @rayhhome, @nh-atuan, @kimngoc280105, @TimothySeah, @zyxue, @antoine-galataud, @omkar-334, @alimaazamat, @jhasm, @ShockYoungCHN, @Kunchd, @richardliaw, @xyuzh, @linh285, @shorbaji, @ans9868, @LuciferYang, @joaquinhuigomez, @liujp, @ShuChenLin, @johntaylor-cell, @vickytsang, @abrarsheikh, @saivedant169, @rmhowe425, @kyuds, @kunling-anyscale, @fuxi611, @karticam, @enginarslan1, @spencer-p, @MengjinYan, @AyushKashyapII, @dragongu, @Sparks0219, @rueian, @praneethkaturi, @dinhxuanvu, @lonexreb, @AarryaSaraf, @Junyi-Wang-6, @saschwartz, @odncode, @vicentefb, @JasonLi1909, @coqian, @kouroshHakha, @daiping8, @pseudo-rnd-thoughts, @wanadzhar913, @HungHiHung10, @goutamvenkat-anyscale, @LeThienTrong, @alexandrplashchinsky, @raulchen, @ryankert01, @jiangxt2, @HirokiNariyoshi, @Yicheng-Lu-llll, @martinlhw, @richabanker, @aaronscalene, @SohamRajpure, @tvaucher, @Jade07-1, @eicherseiji, @dayshah, @Kropiunig, @machichima, @harshit-anyscale, @elliot-barn, @liulehui, @OneSizeFitsQuorum, @alexeykudinkin, @sampan-s-nayak, @prince8273, @jpatra72
2.56.1Ray-2.56.1
Highlights
- Ray Data: We added fixes for several
to_pandasregressions introduced in 2.56: an opt-out flag (RAY_DATA_ENABLE_ARROW_BACKED_PANDAS_CONVERSION) for Arrow-backed conversion, an int64/double[pyarrow]overflow crash on concatenation, and aTensorDtype.__from_arrow__crash on empty tensor columns (#64793, #64794). - Ray Core: We added early detection for system-slice memory pressure: the memory monitor now snapshots the user and system cgroup slices together and logs an error when the system slice exceeds reserved system memory, warning users to raise
--system-reserved-memorybefore it causes node deaths (#64492). - Ray Serve: We added protobuf 7 compatibility and a routing fix for LLM direct streaming, so body-aware routers like
PrefixCacheAffinityRouterno longer hang whenRAY_SERVE_LLM_ENABLE_DIRECT_STREAMING=1(#64592, #64488).
Ray Data
🔨 Fixes
- Fixed two Arrow-backed
to_pandasregressions: addedDataContext.enable_arrow_backed_pandas_conversionas an opt-out, and reconciled divergent numeric column types before concatenation to avoid int64/double[pyarrow]overflow crashes (#64793, #64768). - Fixed a
TensorDtype.__from_arrow__crash on zero-size tensor elements by using an explicit row count instead of numpy's-1dimension inference (#64794, #64767). - Fixed a crash in hash partition caused by read-only hash arrays (#64584, #64552, #64559).
- Nullified
_input_dependenciesin_get_argsso exporting operator args no longer triggers an exponentialsanitize_for_structcall chain over fused operators (#64412, #64316).
Ray Serve
🔨 Fixes
- Added protobuf
>=7compatibility to_proto_to_dictby binding toFieldDescriptor.is_repeatedwhen the deprecatedlabelattribute is absent (#64592, #64362).
Ray LLM
🔨 Fixes
- Fixed direct-streaming routing for body-aware routers: the ingress now parses the raw request body into a
SimpleNamespaceover routing-key fields (messages,prompt) sochoose_replicareceives the message body instead of raw bytes (#64488, #64328, #64326).
Ray RLlib
🔨 Fixes
- Upgraded the ONNX example from the retired MobileNet v1 to MobileNet v3 via
torchvisionand pinnedonnxscriptin the GPU/ml-build CI dep locks, fixing ONNX export failures (#64591, #64028, #64031, #64590, #64033).
Ray Core
💫 Enhancements
- The threshold memory monitor now snapshots both the user and system cgroup slices and logs an error when system-slice usage exceeds the reserved system memory, prompting users to raise
--system-reserved-memory(#64492).
🔨 Fixes
- Disabled NCCL
cuMemhost buffer registration in CI pytests to stabilize GPU test runs (#64580, #64146).
Documentation
📖 Documentation
- Repointed the ASHA Tune example links to the renamed
READMEdocument, fixing thefail_on_warningReadTheDocs build on the release line (#64761, #64630). - Updated the Python 3.10 CPU
pip freezedependency list for the Ray 2.56.0 release (#64447, #64357).
Thanks
Many thanks to all those who contributed to this release!
@eicherseiji, @ryankert01, @bveeramani, @elliot-barn, @iamjustinhsu, @Sparks0219, @owenowenisme, @dstrodtman, @marwan116
2.56.0Ray-2.56.0
Highlights
- Ray Data Stability: In this Ray release, we've added a variety of stability improvements, including running multiple datasets in a cluster, adding automatic batch size selection to CPU-based map-batches, and default logical memory configuration to prevent OOMs. We've also tightened
iter_batchesstability by reducing hidden buffering and shutting down the executor when consumers exit early (#63660, #63682, #62949). This reduces object-store spilling for common training workloads - Ray Serve: We re-architected Ray Serve LLM by decoupling request handling from token streaming response path (#62667, #62680, #62668, #62669, #63167), resulting in significant LLM serving performance improvements. We've also introduced new routing policies such as session-sticky routing via consistent hashing with
ConsistentHashRouter(#62905, #63096, #62906) andCapacityQueueRouter(#62323) which is beneficial for supply-constrained workloads. - Ray Core: We've added GPU-domain-aware placement groups using label locality (#61442, #61614, #62487, #62533). This enables placement groups to pack bundles onto nodes that share a
ray.io/gpu-domainlabel instead of only packing at the single-node level. We've also added initial Kubernetes in-place pod resizing support for Autoscaler v2 (#55961, #62369, #62215), enabling Ray clusters to resize CPU and memory on existing worker pods before scaling out new pods.
Ray Data
🎉 New Features
- Support multiple datasets per cluster via subcluster labels and resource partitioning (#63331, #63375, #63982)
- Add
Dataset.mix()public API andMixOperatorfor weighted dataset mixing (#63168, #62450) - New DataSourceV2 framework:
ParquetDatasourceV2, chunked reader, predicate splitting, listing/scanner infra (#63113, #63454, #63163, #62975, #63027, #62182) - Add
batch_size='auto'tomap_batchesto derive batch row count from target row batch size (#62648) - Implement distributed upsert for Iceberg using task-based merge algorithm, preventing performance bottleneck on driver (#63482)
- Add
include_row_hashtoread_parquet(#61408) - Add JAX data iterator (#61630)
- Expose flag to run read tasks on isolated worker processes via
isolate_read_workers(#63490) - Expose flag to set default logical memory for map operators via
default_map_logical_memory_enabled(#63814) - Support predicate pushdown for Lance format (#61400)
- Support per-partition
start_offsetandend_offsetforread_kafka(#61620) - Add obstore async download backend for download operator (#61735)
- Support UDF retries on transient exceptions (#63023)
💫 Enhancements
- Fix
iter_batchesspilling by replacingmake_async_genwithiter_threadedand reducing buffered batches (#63660, #63682) - Gate
restore_original_orderiniter_batchesbehindpreserve_order(#63792) - Convert
drop_columnsto aProjectlogical operator when input schema is known (#63813) - Make
ConcatAggregationandTurbopufferDatasinkusepolarsfor sorting (#61904) - Boost and vectorize
hash_partitionwithsort_indices, zero-copy slices, and pandas (#63498, #62757, #63152, #62587) - Enable
GPU_SHUFFLEingrouped_data.py(#62410) - Eager
StarExprexpansion, schema inference for non-black-box UDFs, and Expressions struct support (#63776, #63387, #62560) - Make logging configurable via
RAY_DATA_LOG_LEVELand logRAY_DATAenv vars at execution start (#63487, #63380) - Display and track logical memory in progress bar (#63379)
- Honor
compute=infilter(expr=...)and deprecateconcurrency=(#63576) - Enable filter pushdown through
StreamingRepartitionand read stage column-rename removal (#62347, #63384, #63582) - Cache deserialized Arrow schemas in
BlockMetadataWithSchema(#63462) - Track scheduling-loop step duration (p50/p90/max), peak USS/object-store memory, and task block locality (#63586, #63345, #63489, #63418, #62249)
- Replace
TaskDurationStatsand Timer withDistributionTracker(#63488, #63530, #63825) - Introduce
BlockEntryonRefBundlein place of(ref, metadata)tuples (#63654) - Pre-resolve filesystem in threaded download to avoid IMDS herd (#62898)
- Convert logical operators to frozen dataclasses and consolidate operator base/repr (#62593, #62568, #62400, #63137, #63140, #63108)
- Non-blocking default autoscaling coordinator and resource-aware auto-downscaling (#62725, #62574)
- Release pinned blocks after dataset execution and shut down executor on early
DataIteratorexit (#62456, #62949) - Optimize local shuffle with incremental index and configurable compaction threshold (#62539)
- Speed up checkpoint filter and reduce memory usage (#60294)
- Preserve Arrow types through pandas roundtrip and reorder block columns by name before schema ops (#63017, #63582)
- Block pickle object columns when reading untrusted Parquet and gate unsafe WebDataset deserialization (#63470, #63469)
- Move backpressure escape hatch across all policies (#63539)
- Update
pandas,modin, andpyarrowminimum versions (#62899) - Add utilization monitoring and correct logical resource usage for
ActorPool(#61987, #61528) - Deprecate
ConcurrencyCapBackpressurePolicy,DataIterator.to_torch, and pandas UDF batches (#63392, #62540, #61733) - Rank actors per node in a heap and avoid re-exporting actor class via
.options(#62309, #62722) read_deltareads from preconfiguredpyarrowdataset (#61721)- Include column name and target type in
ArrowConversionError; reduce arrow conversion warning verbosity (#62407, #61486, #62521) - Show external consumer bytes in verbose operator progress log (#63728)
- Disable
DataSourceV2by default after earlier enabling (#63674, #63326)
🔨 Fixes
- Rename subcluster label key from
__subcluster__toray-subcluster(#63982) - Fix
get_or_create_stats_actorcrash in Ray Client mode (#63402) - Fix datasource pushdown crashes for generic
UDFExprfilter predicates (#63781) - Fix hash-shuffle aggregator memory estimation: metadata propagation, node-size clamp, column pruning (#63809)
- Fix
CheckpointConfigFileNotFoundErroron Azure Blob Storage (#63606) - Fix silent credential drop for fsspec-S3 in download expression (#62897)
- Fix missing f-string prefix in
_concatenate_extension_column(#62939) - Fix
HashAggregateduplicate group rows forAggregateFnV2(#63066) - Fix JSONL read retry with advanced file cursor (#63233)
- Fix
read_parquetArrowNotImplementedErrorfor nested column types exceeding ~2GB row group (#61824) - Fix
read_parquetnested-type fallback and parquet scanner memory accumulation (#63175, #62745) - Fix memory leak in
DataIterator.to_torch()by switching toPyArrow(#60966) - Fix
ZipOperatorfreeing shared blocks via_split_at_indices(#62665) - Fix concurrent writes race condition in
write_parquet(#62377) - Fix GPU shuffle output ordering when using
ShuffleStrategy.GPU_SHUFFLE(#62351) - Fix incorrect
DatasetStatuuid propagation (#62255) - Fix none issue when
DATA_ENABLE_OP_RESOURCE_RESERVATION=False(#61718) - Fix filesystem compatibility check for fsspec-wrapped
PyFileSystem(#61850) - Forward
try_create_dirtopyarrow.dataset.write_dataset(#58302) - Fix autoscaler bug blocking timely release of leased resources (#62592)
- Ensure consistent
nan_is_null/nans-as-nulls semantics in encoder (#62623, #62618) - Skip unconditional null strip in
find_partition_index(#62594) - V1
_split_predicate_by_columnscorrectness fix (#63176) - Avoid importing cudf in
_is_cudf_dataframewhen cudf not loaded (#62302) - Revert raw-modulo hash partition fast path (#63097)
- Remove
tfx-bslsupport fromread_tfrecords(#63245)
📖 Documentation
- Document
isolate_read_workersforread_parquet(#63816) - Remove docs recommending increased object store memory proportion (#63389)
- Update docs minimum version for
build_processorand"auto"batch size (#61757, #62790) - Remove outdated limitation of
DefaultClusterAutoscalerV2and stale object-store-memory warnings (#62385, #62387)
Ray Serve
🎉 New Features:
- Add custom ingress request router app interfaces and HAProxy ingress dispatch path (#62680, #62668, #62669, #62667)
- Expose
choose_replica/dispatchon deployment handles andAsyncioRouterwith replica-side slot reservation (#63255, #63254, #63252) - Introduce experimental round robin router and
ConsistentHashRouterfor session-sticky routing (#63238, #62906, #63096, #62905) - Central capacity queue for token-based request routing via
CapacityQueueRouter(#62323) - Add experimental
ray-haproxysupport behindRAY_SERVE_EXPERIMENTAL_PIP_HAPROXY(#62589) - Add deployment actor context API and broadcast API for deployment handles (#62532, #61472)
- Add
ControllerOptionsfor configurable controllerruntime_env(#63352) - Make rolling update percentage configurable (#62160)
- Support per-request timeout and disconnect in HTTP proxy path (#62867)
💫 Enhancements:
- HAProxy stability improvements: wait for old workers before drain, redirect stdout/stderr, redispatch+retry-on, coalesce broadcasts, quarantine released ports (#63620, #63621, #63622, #63623, #63628)
- Bind direct ingress ports to
0.0.0.0for cross-node HAProxy routing (#62515) - HAProxy ingress request router metrics, enable splice by default,
TCP_NODELAYdefault 1, optional retry knobs,RAY_SERVE_HAPROXY_STATS_PORT(#63356, #63531, #63353, #63415, #62979) - Resolve bundled ray-haproxy binary before
RAY_SERVE_HAPROXY_BINARY_PATH; HAProxy abspath env var (#63829, #62610) - Replace socat subprocess with Python socket for HAProxy admin communication; bump HAProxy to avoid CVE-2025-11230 (#61897, #62585)
- Expose controller health metrics via
/api/serve/applications/API; addmax_replicas_per_nodeto response (#63556, #63234) - Run health check on user execution path to detect request-serving stalls (#61621)
- Mark widely-used APIs as stable (#62932)
- Retain recently-stopped replica logs in the dashboard (#63678)
- Add observability logs for pack scheduling decisions (#63603)
- Gate ingress request router body forwarding behind escape hatch (#63183)
- Avoid rolling replicas for no-op config overrides (#63034)
- Gate replica/deployment creation during shutdown (#62761)
- Defer PG creation for TPU Serve deployments to accelerator backend (#62941)
- Expose
DeploymentStateManagerAPIs for controller access (#62950) - Add tracing support for Windows and gRPC tracing improvements (#62821, #63833)
- Split node vs requested resources in deployment scheduler (#62778)
- Defer
DEPLOYMENT_TARGETSbroadcast while replicas are RECOVERING (#62751) - Evict per-deployment
LongPollHoststate on deployment delete; enable logs when client stops its event loop (#62820, #63028) - Add metrics: max replica processing latency, objref resolution latency,
serve_autoscaling_target_ongoing_requests(#62381, #62355, #62421) - Filter stale bootstrap observations from
serve_long_poll_latency_ms(#62868) - Retry
build_serve_applicationtask on failure (#62987) - Scale down non-matching primary-label replicas first (#61488)
- Refactor internal autoscaling policy state extraction into a single helper (#62452)
- Catalog Ray Serve env vars (#62006)
- Remove or raise clear error for deprecated deployment items; remove deprecated
DeploymentMode(#63548, #63510)
🔨 Fixes:
- Fix orphaned actors on controller crash during shutdown; drop and replace replicas surviving a controller crash without rank assignment (#62823, #63139)
- Fix deployment actors creating 15K OS threads for sync actor classes (#62661)
- Fix gang scheduling PG leak when deployment actors are starting (#62469)
- Fix app-level autoscaling policy state cross-deployment contamination and state loss for skipped deployments (#62484)
- Fix Serve autoscaling delay to use wall-clock time (#62144)
- Fix race condition in multiplex LRU cache update using
move_to_end()(#62548) - Normalize multiplexed model ID header to support proxy-transformed names (#61869)
- Fix
AttributeErrorwhenrequest_routeris None inupdate_deployment_config(#63180) - Fix potential
UnboundLocalErrorinActorReplicaWrapper.check_stopped()(#63339) - Fail loud when ingress request router dispatch fails (#63215)
- Fix stale
_global_clientcache across driver sessions (#62368) - Fix
start_metrics_pushercrash when deployment hasrecord_autoscaling_statsbut no autoscaling config (#62123) - Fix high-cardinality namespace tag on long poll metrics (#62386)
- Fix Java long poll timeout serialization (#61875)
- Avoid destructor error when FastAPI ingress init fails (#62172)
- Avoid proxy readiness future timeout race (#62194)
- Avoid self-cause on non-gRPC replica exceptions (#62412)
- Fix HAProxy startup timeout propagation (#61752)
- Include
ingress_request_router.lua.tmplinpackage_data(#63145) - Revert support for
root_pathparameter across uvicorn versions (#62529)
📖 Documentation:
- Add round robin and consistent hashing router documentation (#63636)
- Introduce gang scheduling documentation (#61737)
- Add deployment scope actor docs (#62735)
- Add Kuberay guide for RayService with HAProxy and High Throughput mode (#62408)
- Add Ray Serve office hours invite into documentation (#62176)
Ray Train
🎉 New Features
- Add
LoggingConfigfor configuring theray.trainlogger on controller and workers (#61550) - Allow
DataParallelTrainer'strain_fnto return data (#62021) - Add async checkpointing/validation with Torch Lightning (#62370)
💫 Enhancements
- Report time spent syncing and transferring checkpoints to storage in
ray.train.report(checkpoint)(#62027) - Block until
create_or_update_train_runcompletes on Train initialization (#63432) - Implement
DatasetManager(#63309) - Forward
label_selectortoAutoscalingCoordinator(#63287) - Add log line before launching training function (#62911)
- Allow
contextlib.redirect_stdout()to bypass print redirect to logs (#61075) - Add timeouts to validation functions of
ray.train.report(#62916) ray.train.reportdoes not hang across replica group restarts; Ray Train manages replica group restarts (#62651, #61475)- Swallow
RayTaskErrorduringBackendSetupCallbackshutdown (#63143) - Improve
JaxTrainerTPU multi-slice fault tolerance and reservation ergonomics (#62893) - Export default data execution options (#62784)
- Consolidate Train run metadata sanitization and improve readability (#63182)
- Fix
PlacementGroupCleanerrace condition: drain queue before cleanup on controller death (#62754) - Harden against unsafe pickle deserialization (#62807)
- Raise error when checkpoint is within experiment directory and
delete_local_checkpoint_after_upload=True(#62555) - Add
timeout_storay.train.get_all_reported_checkpoints(#61761) - Change remaining
pytorch_lightningimports (#61291) - Make controller resilient to errors in all lifecycle hooks (#60900)
- Remove
Predictorfrom Train v1 (#63461)
🔨 Fixes
- Fix missing comma in
DataBatchTypeUnion type (#63872) - Handle Arrow-backed pandas dtypes in LightGBM examples (#63427)
- Fix
exclude_resourcesregression for V1 Train + V2 cluster autoscaler (#62827) - Add missing
%stologger.debug(#63039) - Increase
get_actortimeout (#62516)
📖 Documentation
- Document S3-compatible storage (#63103)
- Add Azure Files to persistent storage docs (#63406)
- Uncomment
Result.from_pathin docs (#62887) - Document how to tune async validation (#62227)
- Document why validation runs need unique names (#62224)
Ray Tune
💫 Enhancements
- Fix Tune search for Python 3.14 (#63575)
- Modernize
AxSearchfor Ax Platform 1.0.0+ (#60522) - Use built-in
inspectfor argument capture (#60049)
🔨 Fixes
- Fix import count in CIFAR PyTorch tutorial (#62756)
Ray LLM
🎉 New Features
- Major Ray Serve LLM performance improvement with direct streaming (#63167, #63468, #63779)
- TPU support: Add
topologyfield toLLMConfigfor multi-host TPU support (#61906) - Add per-host bundles default and fix fractional TPUs for
TPUAccelerator(#63177) - Enable Ray Serve LLM session-stickiness routing policy via
RAY_SERVE_SESSION_ID_HEADER_KEY(#63362)
💫 Enhancements
- Upgrade
vLLMto 0.22.0 (#63730, #63396, #62970, #62349) - Co-locate DP rank 0 worker with advertised master address (#63803)
- Add pick-only fast path to
AsyncioRouterfor LLM ingress (#63517) - Replace LLM ingress router replica selection with
choose_replica; don't fetchLLMConfigfrom replicas at startup (#63280, #63065) - Promote
max_tasks_in_flight_per_actorto a first-class config field and adjust defaults (#63214) - Validate
accelerator_typeagainst CPU-only configs; replaceGPUTypealias withAcceleratorType(#62139, #62978) - Add rate-limiter for per-request traceback spam (#62440)
- Promote SGLang integration to user guide and move engine to
_internal(#62570) - Lazy-load batch stage/processor submodules and make boto3/botocore imports lazy (#62861, #62383)
- LLM telemetry bugfixes (#63782)
🔨 Fixes
- Fix flaky GPU-0 worker and NIXL port collisions (#63810)
- Fix P/D direct streaming OpenAI routing (#63679)
- Remove
guided_decoding,truncate_prompt_tokens,build_llm_processor(#63569) - Fix misleading
ImportErrorwhenvLLMis installed but fails to import (#63305) - Fix
max_pending_requestsdefault to trackvLLM's GPU-dependentmax_num_seqs(#62918) - Fix HF config loading for models with custom
rope_scaling(#62464) - Wait for request router init in
LLMRouterconstructor (#63206) - Materialize chat completion message
contentin sanitizer (#63119) - Fix
lora_requestnot forwarded tovLLMengine + add regression tests (#62609) - Fix
SGLangEngineProcessortelemetry fortrust_remote_codemodels (#62102) - Fix
TOKENIZER_ONLYdownloads missingchat_templatefor S3-backed models (#62121) - Fix SGLang chat tokenize to respect
add_generation_prompt(#61688) - Fix bool serialization in
benchmark_vllmCLI builder (#63516)
📖 Documentation
- Document multimodal pixel-budget gotchas and
vLLMcompatibility (#63593) - Add tokenization disaggregation documentation (#62494)
- Add benchmark docs and refactor into submodules (#62204)
- Remove
VLLM_USE_V1from docs and examples (#63001) - Fix wrong documented default for
max_tasks_in_flight_per_actor(#62917)
Ray RLlib
🎉 New Features
- Add
custom_resources_per_learnerconfig andcustom_resources_for_main_processtoAlgorithmConfig(#63303, #62475) - Add Importance Sampling
APPOmetrics to the torch learner (#63675)
💫 Enhancements
- Put only one copy of weights into the object store (#63529)
- Handle the all-evaluation-workers-unhealthy case uniformly across modes (#63128)
- Stop
IMPALA/APPOlearner thread gracefully to avoid misleading error messages (#62763) - Improve invalid input error messages (#62324)
🔨 Fixes
- Fix two substantial edge cases in
PPO's value target calculation (#59958) - Fix
EnvRunnercrash loops (#62884) - Fix extra model outputs hanging val indexing (#62960)
- Fix
ValueErrorinMultiAgentEpisode.get_rewards()when an agent is inactive for all requested env steps (#62907) - Preserve Torch optimizer param-group scalar types on restore (#61937)
- Fix wrong assert variable in
_update_env_seed_if_necessary(#61823) - Maintain value in
EMAStat(#63064)
📖 Documentation
- Clarify extra model output docstrings (#63524)
Ray Core
🎉 New Features
- Add support for Furiosa AI NPU (#63035) and
register_collective_backendAPI for custom collective backends (#60701) - In-place pod resizing (IPPR) on Kubernetes 1.35: initial implementation and standalone KubeRay IPPR provider (#55961, #62369, #62215)
- Label locality support: GPU-domain-aware placement groups, autoscaler proto changes, and state API observability (#61442, #61614, #62487, #62533)
- Publish platform events via Ray Event Recorder and support single-event emission in the Python layer (#63329, #60858)
- Autoscaler v2: priority-based worker group selection (#62997) and
noDriverTimeoutSecondsfor KubeRay cluster termination (#63465) - RDT: concurrent one-sided transfers for multiple
ObjectRefs inray.get(#61773), retry support (#62842), and NIXL memory deregistration viaderegister_nixl_memory(#62341) - Support
.tar.gzarchives for remoteworking_dirURIs (#62813) - Add IPv6 localhost and all-interfaces support (#60023)
💫 Enhancements
- Resource isolation: event-based memory monitor, multi-memory-monitor factory, time-based group killing policy, idle-worker prioritization, system/user slice bounds, and OOM policy tuning (#62060, #62705, #62643, #62378, #62168, #63521, #63324, #63067, #62957)
- Compute per-component memory usage in MiB (#63932) and add host vs container memory distinction to memory panels (#63111)
- Consider cgroup limit when fetching CPU (#63685) and correct worker OOM score adjustment logic (#62470)
- Replace
NodeAffinitySchedulingStrategywith Label Selector API whensoft=False(#54940) - Improve
SlicePlacementGrouplifecycle and support explicitbundle_label_selectorfor TPUs (#63171); add TPU head resource for Ironwood TPU (#62786),chips_per_vmarg (#62526), and v6e single-host fixes (#62306) - Batch placement group bundle removal RPCs (#63839); remove PG resource deduction from GCS in favor of resource broadcast (#63723)
- Migrate Raylet/GCS timing logic to a shared
ClockInterfacewith a fake clock for testing (#62562, #62502, #62476) - Refactor asio build targets and add
IOContextMonitor; run GCS health check onio_service(#63042, #63166, #62608, #62374) - Autoscaler v2 performance: skip serializations for debug logs (#63778); accept fractional resource values in
request_resources(#63306) - Reduce traffic: halve task arg pubsub by skipping redundant raylet pull (#62583), avoid extra memcpy when spilling fused objects (#63653), and resolve task dependencies synchronously when objects exist (#62561)
- Improve
inspect_serializabilitymessages and traversal context (#63501, #63373, #63258); better worker startup error messages (#63714) - Warn when
runtime_envpackage approaches upload size limit (#63404); harden zip extraction path containment (#63786, #62813) - Include owner node ID in
OwnerDiedError(#63727); add dependency info to taskspec debug string (#62316) - Add unexpected worker failure metric and dashboard panel (#62297); group observability APIs in
rayCLI help (#62748) - Normalize OTel metric labels before Prometheus export (#63744) and retry/log when Prometheus queries fail (#63578); add GPU usage instance filter (#62214)
- Move observability and control-plane pubsub to dedicated services and rename
InternalPubSub*toControlPlanePubSub*(#62806, #63044, #62461) - AMD GPU: replace
rocm-smictypes binding withamd-smiPython interface (#62393); detect NVIDIA Blackwell consumer GPUs (#63322) - Add task retry delay for
ACTOR_UNAVAILABLEretries (#62330); improve State API filter key handling (#63638) - Patch
setproctitleto skip launch services IPC calls (#63366); add timeout for first redis probe (#63148) - Clarify head node commands in
ray upoutput (#63409); passlogging_configthrough Ray Clientray.init(#62192) - Print subprocess log tails with exit codes on unexpected exit (#61905); add warning log when GPU profiling command times out (#63706)
- Add unique suffix to log filenames (#62365); disable profiling endpoints by default (#62531)
- Remove pydantic v1 support (#62716); update Starlette to v1.0.1 (#63722)
- Deprecate
DAGNode.execute()(#63716); remove experimental_ownersupport forray.put(#63520)
🔨 Fixes
- Fix
ray.gethanging forever when an object's owner dies during pull (#63694); resolveReferenceCounterrace onWORKER_REF_REMOVED_CHANNEL(#60495) - Fix resource leaks in subprocess management (#63878) and
runtime_envcache not detecting changes in-r-referenced requirements files (#63403) - Fix replica actor zombie process after GCS restart (#63764); fix actor creation race condition (#62994); fix actor state counter bug (#63647)
- Fix placement groups with label domain stuck on the infeasible queue (#62483); log status for failed PG
PrepareResources/CommitResources(#62836) - Fix env var expansion in
ray job submitCLI viashlex.join(#63797) and--working-dirfor local zip files andhttp://URLs (#62843) - Surface WebSocket close codes and errors in job log streaming (#63364); fix
ray stopfailing to terminate dashboard/runtime_env agents on Windows (#62428) - Fix
ray downnot stopping Docker containers on worker nodes for local clusters (#62169); fix delayed/missing worker logs in Jupyter by flushing stdout/stderr (#63599) - Fix Python log monitor handling for same-inode truncated files (#63720); avoid
os.getcwd()on import by lazily evaluatingscratch_dir(#63040) - Fix accelerator detection on NVIDIA Blackwell consumer GPUs (#63322); avoid
FabricManagerstall on NVLink systems inGpuProfilingManager(#63312) - Fix POSIX semaphore crash in experimental mutable objects (#62328); fix overflow on exponential backoff multiplication (#62366)
- Fix OOM kill message wrong threshold with resource isolation (#62948); fix
OpenTelemetryMetricRecordersingleton init guard (#63081) - Fix
MarkFootprintAsBusyclearing saved idle state for unrelated items (#62588); fixHandleIsLocalWorkerDeadfor drivers (#62688) - Fix
AttributeErrorontracein client mode (#62955); fixIndexErrorin legacy post-mortem debugging (#61479) - Keep strong references to fire-and-forget asyncio tasks (#63291); validate
JobConfigcode_search_pathtype (#62499) - Fix
uvexistence check inUVProcessor(#62818); fix invalid default stats factory inClusterStatus(#62934) - Fix autoscaler v2
instance_type_namein autoscaling state (#62101) and stopped-node metric double counting (#62026) - Fix
ReadOnlyProviderConfigReadermax_workerscounting bug (#62819); fix circular import inray_print_logsthread (#63410) - Fix wrong container in spill-fusion threshold check (#63605); avoid emitting idle worker failure for unregistered failed workers (#62789)
- Avoid
returninfinallyblock (Python 3.14SyntaxWarning) (#63742); fix typos and replacetype()checks withisinstance()(#62154)
📖 Documentation
- Add "bring your own transport" docs page for RDT (#60308); doc changes for label locality support (#62551)
- Fix misleading docstrings on
drain_nodeAPIs (#62942); update outdated description formax_direct_call_object_size(#63164)
Dashboard
🎉 New Features
- Add Platform Events module with K8s event ingestion/caching and frontend UI (#62314, #63332)
- Show TPU stats on the Cluster tab (#63774)
💫 Enhancements
- Add
py-spy--idleand--subprocessesflags to profiling endpoints (#63852) - Pass
Grafanacluster filter to Serve metrics URLs (#63211) - Show last data load time (#63618)
- Add
Namecolumn to Jobs view fromjob_namemetadata (#62257) - Mask password arguments in
get_entrypoint_name()to prevent password exposure (#61995)
🔨 Fixes
- Fix TPU metrics (#63998)
- Guard against zero
num_cpusink8s_utils.cpu_percent(#63729) - Fix invalid
PromQLwhenglobal_filtersis empty inGrafanadashboard generation (#63687) - Fix unexpected log line details pop-up in log viewer UI (#62637)
Ray Wheels and Images
- Bumped the Ray version for the 2.56.0 release.
- Bumped the minimum Python version in
pyproject.toml(#62569). - Added TPU release images (#62113) and updated the TPU Docker image base dependencies (#63006).
- Added a
torchftimage for Torch trainer tests (#63361) and ranapt-get upgradefor slim base images (#62666). - Numerous dependency lockfile and CI image updates (raydepsets migration, depset regeneration across core/ML/RLlib/docs/macOS CI images).
Documentation
- Established
doc/redirects/current.yamlas the redirects source of truth with legacy-version 404 redirect coverage (#63367, #63880). - Added an agent context guide for Ray documentation and an
ipython3lexer hook for notebook shell/magic cells (#63227, #63515). - Added Sphinx
/llms.txtand/llms-full.txtgeneration, excluding Jupyter notebooks (#63130, #63228). - Upgraded doc toolchain:
pydata-sphinx-theme0.17.1,myst-nb1.4.0, addedsphinxext-opengraph, unpinned yankedtf-keras(#63344, #63360, #63343, #63358). - Banned new
.rstfiles underdoc/source/and added CI to skip RTD builds for PRs that don't touch docs (#63057, #63431). - Added meta descriptions to ray-contribute pages and anonymized personal paths in Tune notebook outputs (#63832, #63464).
- Tune: updated deprecated
sample_fromexamples to config-dict style and documentedtime_attrscheduler values (#63804, #32467). - RLlib: clarified DQN
hiddensas dueling-only, removed a broken parametric-actions link, fixed broken doc links (#43051, #54671, #47146). - Ray Data: added a
map_batchesshuffle section, streaming generator docs, and fixed a broken README link (#62576, #63791, #63412). - Ray Train: documented
iter_jax_batchesforJaxTrainerand updated TPU scaling config docs (#63294, #62584). - Kubernetes/TPU: added a GKE Gateway ingress example, fixed the GKE TPU guide, and replaced deprecated example images (#63546, #63209, #63019).
- Added a RayCronJob quick-start guide and clarified KAI Scheduler RayJob submission modes (#62151, #61332).
- Added a Slurm guide for running Ray inside Docker containers (#63221).
- Documented
AutoscalingConfigreplica/target fields and correctedmax_callsdefault docs (#48601, #63894).
Dependencies
This is the last Ray release to support the dependency versions listed below. For the 2.57.0 release, Ray will raise its minimum required versions for several core dependencies. If your environment pins any of these packages below the new minimums, plan to upgrade before moving to the next Ray release.
| Dependency | Last supported in this release | New minimum (next release) |
|---|---|---|
| numpy | < 2.1 | >= 2.1 |
| protobuf | < 5.26 | >= 5.26 |
| pandas | < 2.2.3 | >= 2.2.3 |
| pyarrow | < 18.0.0 | >= 18.0.0 |
| pydantic | < 2.9 | >= 2.9 |
| grpcio | < 1.66 | >= 1.66 |
| scipy | (previously unpinned) | >= 1.14.1 |
Most users on recent releases of these packages are unaffected
Thanks
Many thanks to all those who contributed to this release!
@khluu, @Krishnachaitanyakc, @leewyang, @ssam18, @christian-pinto, @Hyunoh-Yeo, @hango880623, @yuanzhuoyang1-bit, @marwan116, @aaronscalene, @tianyi-ge, @TriNguyen1208, @andrewsykim, @leonaIee, @OneSizeFitsQuorum, @AksodFlare, @limarkdcunha, @dayshah, @jade710, @pedrojeronim0, @dev-miro26, @DonPalius, @TimothySeah, @abrarsheikh, @nathon-lee, @prince8273, @Bye-legumes, @rayhhome, @Yunnglin, @spencer-p, @ryanaoleary, @herin049, @stephanie-wang, @liulehui, @slxswaa1993, @psaikaushik, @cyhapun, @tdat1465, @akyang-anyscale, @chenshi5012, @zzchun, @ryankert01, @EagleLo, @mzjp2, @justinvyu, @petern48, @YuangGao, @sjp611, @wingkitlee0, @AndySung320, @dstrodtman, @Accurio, @JasonLi1909, @peterjc123, @eicherseiji, @kyuds, @Chong-Li, @joaquinhuigomez, @IrvinFan, @XuQianJin-Stars, @AJamesPhillips, @harshit-anyscale, @claytonlin1110, @nhquana2, @Rruop, @win5923, @raulchen, @rohankmr414, @andrew-anyscale, @YoyinZyc, @doanxem99, @liujp, @dancingactor, @Evelynn-V, @SohamRajpure, @dragongu, @ShockYoungCHN, @ljstrnadiii, @WFY123wfy, @axreldable, @pseudo-rnd-thoughts, @H4ck2, @mvcb, @xinyuangui2, @edoakes, @ankushbbbr, @ps2181, @dominikkawka, @vinhuytran0810-cell, @siyuanfoundation, @MengjinYan, @Chronostasys, @jeffreywang88, @lalitc375, @sampan-s-nayak, @ArturNiederfahrenhorst, @srini047, @ChangyuWang, @adam360x, @Yicheng-Lu-llll, @thakoreh, @Aydin-ab, @manhld0206, @oab24413gmai, @ayushk7102, @tycao0338-cpu, @slfan1989, @myandpr, @rueian, @ans9868, @Ziy1-Tan, @elliot-barn, @as-jding, @daiping8, @robertnishihara, @MatthewCWeston, @Cursx, @laysfire, @karticam, @Mr-Neutr0n, @jjyao, @zent1n0, @aslonnie, @DenBuzz, @michael-pryor, @goanpeca, @nadongjun, @ronny-anyscale, @GoparapukethaN, @werkt, @carolynwang, @kamil-kaczmarek, @madiyar-wayve, @peterxcli, @pqkzzz, @Future-Outlier, @iamjustinhsu, @micah-yong-ai, @wxwmd, @owenowenisme, @sai-miduthuri, @lonexreb, @prassanna-ravishankar, @wanadzhar913, @kouroshHakha, @tobby168, @johntaylor-cell, @richabanker, @Kunchd, @vincere-mori, @vaishdho1, @wenhaozhao011-cmd, @bveeramani, @bittoby, @Phucvt123, @aschuh-hf, @RudrenduPaul, @xyuzh, @Sparks0219, @yancanmao, @eureka0928, @yuhuan130, @goutamvenkat-anyscale, @Zerui18, @machichima, @Lucas61000, @weimingdiit, @xi377266, @EmaFerrao, @awen11123, @Lawson-Darrow, @suppagoddo
2.55.1Ray-2.55.1
- Fixes SSH connectivity issue in the
ray-llmimage (#62625 / #62718). - Upgrade apt packages in slim base (#62666 / #62717).
2.55.0Ray-2.55.0
Ray Data
🎉 New Features
- Add
DataSourceV2API with scanner/reader framework, file listing, and file partitioning (#61220, #61615, #61997) - Support GPU shuffle with
rapidsmpf26.2 (#61371, #62062) - Add Kafka datasink, migrate to
confluent-kafka, supportdatetimeoffsets (#60307, #61284, #60909) - Add Turbopuffer datasink (#58910)
- Add 2-phase commit checkpointing with trie recovery and load method (#61821, #60951)
- Queue-based autoscaling policy integrated with task consumers (#59548, #60851)
- Enable autoscaling for GPU stages (#61130)
- Expressions: add
random(),uuid(),cast, and map namespace support (#59656, #60695, #59879) - Add support for Arrow native fixed-shape tensor type (#56284)
- Support writing tensors to tfrecords (#60859)
- Add
pathlib.Pathsupport toread_*functions (#61126) - Add
cudfas abatch_format(#61329) - Allow
ActorPoolStrategyforread_datasource()viacomputeparameter (#59633) - Introduce
ExecutionCachefor streamlined caching (#60996) - Support
strict=Falsemode forStreamingRepartition(#60295) - Port changes from lance-ray into Ray Data (#60497)
- Enable PyArrow compute-to-expression conversion for predicate pushdown (#61617)
- Add vLLM metrics export and Data LLM Grafana dashboard (#60385)
- Include logical memory in resource manager scheduling decisions (#60774)
- Add monotonically increasing ID support (#59290)
💫 Enhancements
- Performance: cache
_map_taskargs, heap-based actor ranking, actor pool map improvements (#61996, #62114, #61591) - Optimize concat tables and PyArrow schema hashing (#61315, #62108)
- Reduce default
DownstreamCapacityBackpressurePolicythreshold to 50% (#61890) - Improve reproducibility for random APIs (#59662)
- Clamp batch size to fall within C++ 32-bit int range (#62242)
- Account for external consumer object store usage in resource manager budget (#62117)
- Make
get_parquet_datasetconfigurable in number of fragments to scan (#61670) - Consolidate schema inference and make all preprocessors implement
SerializablePreprocessorBase(#61213, #61341) - Disable hanging issue detection by default (#62405)
- Make execution callback dataflow explicit to prevent state leakage (#61405)
- Log
DataContextin JSON format at execution start for traceability (#61150, #61428) - Autoscaler: configurable traceback, Prometheus gauges, relaxed constraints (#62210, #62209, #61917, #61385)
- Add metrics for task scheduling time, output backpressure, and logical memory (#61192, #61007, #61436)
- Prevent operators from dominating entire shared object store budget (#61605)
- Eliminate generators to avoid intermediate state pinning (#60598)
- Default log encoding to UTF-8 on Windows (#61143)
- Remove legacy
BlockList,locality_with_output, old callback API, PyArrow 9.0 checks (#60575, #61044, #62055, #61483) - Upgrade to
pyiceberg0.11.0; cappandasto <3 (#61062, #60406) - Refactor logical operators to frozen dataclasses (#61059, #61308, #61348, #61349, #61351, #61364, #61481)
- Prevent aggregator head node scheduling (#61288)
- Add error for
local://paths with a zero-resource head node (#60709)
🔨 Fixes
- Fix RCE in Arrow extension type deserialization from Parquet (#62056)
- Fix
StreamingSplitDataIterator.schema()(#62057) - Fix
ParquetDatasourcehandling ofFileSystemFactory.inspect(#62065) - Fix
read_parquetfile-extension filtering for versioned object-store URIs (#61376) - Fix
wide_schema_pipeline_tensorscloudpickle deserialization (#62149) - Fix
OpBufferQueuerace condition (#60828) - Fix scheduling metrics computation (#62031)
- Fix
OneHotEncodermax_categoriesto use global top-k instead of per-partition (#60790) - Fix
ReservationOpResourceAllocatorresource borrowing forActorPoolMapOperator(#60882) - Fix
DatabricksUCDatasourceschema()shadowing by schema string attribute (#61282) - Fix
AliasExprstructural equality to respect rename flag (#60711) - Fix
_align_struct_fieldsfailure with unaligned scalar fields (#58364) - Fix
min_scheduling_resourcesfallback toincremental_resource_usage(#60997) - Fix output backpressure unblocking sequence for terminal ops (#60798)
- Fix multi-input operator object store memory attribution (#61208)
- Fix reference cycle by moving to module scope (#61934)
- Fix autoscaler logging: reduce verbose output and move traceback to debug (#61989, #62126)
- Fix double counting
ref_bundle+input_files(#61774) - Replace
on_exithook with__ray_shutdown__to fix UDF cleanup race (#61700) - Prevent
Limitfrom getting pushed pastmap_groups(#60881) - Propagate schema in empty
_shuffle_blockto fixColumnNotFoundin chained left joins (#61507) - Fix unclear metadata warning and incorrect operator name logging (#61380)
- Clamp rolling utilization averages to zero (#61543)
- Fix floating point errors in
TimeWindowAverageCalculator(#61580) - Remove default task-level timeout and clamp
end_offsetin Kafka datasource (#61476) - Avoid redundant reads in
train_test_split(#60274) - Return
Nonewhen no outputs have been produced (#62029) - Replace bare
raisewithTypeErrorin string concatenation (#60795)
📖 Documentation
- Add job-level checkpointing documentation (#60921)
- Update
exclude_resourcesdocs for Train autoscaling changes (#61990) - Add
locality_with_outputmigration instructions (#61151) - Document
max_tasks_in_flight_per_actorvsmax_concurrent_batches(#60477) - Add missing
MODoperation docs; improveray.data.Datasourcedocs (#60803, #59654) - Add
polarsusage instructions (#60029)
Ray Serve
🎉 New Features:
- Added end-to-end gRPC client and bidirectional streaming support, including public APIs, proxy handling, proto updates, and developer docs, so Serve apps can handle streaming workloads natively instead of building custom transport layers. (#60767, #60768, #60769, #60770, #60771)
- Introduced HAProxy-based serving with fallback proxy support and load-balancer tunables, giving operators a higher-throughput ingress path and more control over traffic behavior in production. (#60586, #61180, #61271, #61468, #61988)
- Added queue-based autoscaling for async inference and Taskiq-backed workloads, so scaling decisions can account for both HTTP in-flight load and queued tasks. (#59548, #60851, #60977, #61008)
- Rolled out gang scheduling support across validation, core scheduling, fault tolerance, downscaling, autoscaling, rolling updates, and migration, enabling coordinated multi-replica placement for tightly coupled workloads. (#60944, #61205, #61206, #61207, #61215, #61467, #61216, #61659)
- Introduced deployment-scoped actors with config/schema, lifecycle management, public API, and controller health checks, making it easier to run durable per-deployment sidecar-like logic inside Serve. (#61639, #61648, #61664, #61833, #62161)
💫 Enhancements:
- Added first-class tracing support for Serve, including inter-deployment gRPC propagation and richer streaming-path attributes, improving end-to-end observability across distributed request flows. (#61230, #61089, #61451)
- Expanded operational metrics with replica utilization, richer error labeling, and client IP logging in access logs, helping teams diagnose bottlenecks and user-impacting issues faster. (#60758, #61092, #60967)
- Improved autoscaling extensibility with class-based policies and
policy_kwargs, so advanced users can package reusable autoscaling logic without custom forks. (#60964) - Reduced controller overhead with broad algorithmic improvements (indexing, cache reuse, and avoiding repeated per-tick work), which improves scalability as deployment and replica counts grow. (#60810, #60829, #60830, #60838, #60842, #60843, #60844, #60832, #60806)
- Improved throughput-oriented operation controls by adding environment-based tuning and explicit throughput optimization logging, making performance behavior easier to configure and audit. (#60757, #62146)
- Upgraded Serve internals to Pydantic v2 and refined time-series aggregation behavior for more predictable metric accuracy under high load. (#61061, #61403)
🔨 Fixes:
- Fixed a direct-ingress shutdown bug where replicas could hang indefinitely while draining stuck requests, ensuring bounded shutdown behavior in failure scenarios. (#60754)
- Fixed HAProxy reliability issues, including config race conditions, draining guards, and platform compatibility edge cases, improving stability in production rollouts. (#61120, #60955)
- Fixed autoscaling correctness issues that could cause runaway scaling or delayed reactions, including feedback-loop regressions, streaming scale-down behavior, and wall-clock delay handling. (#61731, #61920, #62331, #61844, #60613)
- Fixed high-percentile latency regression in request routing and queue-length accounting, reducing tail-latency spikes under load. (#61755)
- Fixed replica-state and health-state edge cases during migration and ingress transitions, preventing false errors and unhealthy/healthy misreporting. (#60365, #61818, #62213)
- Fixed chained upstream actor-failure handling so request failures are attributed correctly and no longer hang when upstream deployments die mid-chain. (#61758, #62147)
- Fixed HTTP status classification for client disconnects after successful responses, improving accuracy of error-rate monitoring and alerting. (#61396)
📖 Documentation:
- Added
AsyncInferenceAutoscalingPolicydocumentation and clarified Serve performance guidance for HAProxy and inter-deployment gRPC use cases. (#61086, #61386) - Updated scheduling and configuration docs, including replica scheduling guidance and a catalog of Serve environment variables, so operators can tune deployments with less guesswork. (#60922, #60807)
- Clarified multiplexing and async behavior docs (including model pre-warming constraints and request-cancel semantics) to prevent common integration mistakes. (#61842, #62280)
🏗 Architecture refactoring:
- Refactored deployment-state execution to skip unnecessary steady-state per-tick work, lowering control-loop churn and creating cleaner hooks for future scheduling logic. (#60840)
- Moved autoscaling metric aggregation into Cython-backed paths and added focused controller benchmarking, giving a stronger performance baseline for future Serve controller changes. (#58892, #61368)
- Simplified internal structure by migrating shared internals away from private modules and consolidating replica abstractions, reducing coupling and maintenance complexity. (#60849, #61363, #60198)
Ray Train
🎉 New Features
- Elastic training: core capability, user guide, release tests, multi-host TPU, telemetry (#60721, #61115, #61133, #61299, #61267)
- Add HF TRL (Transformer Reinforcement Learning) example (#61627)
- Add Tensor Parallel templates for DeepSpeed AutoTP and DTensor (#60160, #60158)
- Add
statusattribute toReportedCheckpoint(#61684) - Richer Train run metadata (#59186)
- Add timers for Train worker initialization (#60870)
- Configure
torchftenvironment (#61156)
💫 Enhancements
- Register training resources with
AutoscalingCoordinatorinFixedScalingPolicy(#61703) - Decouple
datasetsfield fromTrainRunContext(#61953) - Log warning for
checkpoint_upload_fnwhen slow (#61720) - Fix
StateManagerCallbackto accept datasets explicitly (#62042) - Make train run abortable during
before_controller_shutdown(#61816) - Graceful abort catches all
RayActorError(#61375) - Refactor checkpoint and
sync_actorto usewait_with_logging(#61063) - Unwrap
UserExceptionWithTracebackinWorkerGroupError.worker_failures(#61153)
🔨 Fixes
- Fix v2
PlacementGroupCleanerzombie actor (#61756) - Fix checkpoint paths for multinode run (#61471)
- Abort cancels validation tasks with deterministic resumption (#61510)
- Fix deepspeed finetune release test (#61266)
📖 Documentation
- Add section on async validation with experiment tracking (#62104)
- Add section on when to use async validation (#61702)
Ray Tune
💫 Enhancements
- Remove deprecated
Loggerinterface andlogger_creator(#61181)
🔨 Fixes
- Fix PBT trial order when
NaNvalues are present (#57160)
Ray LLM
🎉 New Features
- Replace
PDProxyServerwith decode-as-orchestrator PD architecture (#62076) - Introduce DP group fault tolerance for WideEP deployments (#61480)
- SGLang engine: streaming chat/completions, tokenize/detokenize, embeddings, multi-GPU TP/PP (#61236, #61446, #61159, #61201, #62221)
- Add
bundle_per_workerconfig for simpler placement group setup (#59903) - Separate Data and Serve LLM dashboards with improved panel visibility (#61037, #62069)
💫 Enhancements
- Promote Data LLM and Serve LLM APIs to beta (#61249, #62054, #62223)
- Upgrade vLLM to 0.16.0, 0.17.0, and 0.18.0 (#61389, #61598, #61952)
- Upgrade NIXL to v1.0.0 and fix tensor transport issues (#61991)
- Unify duplicated
PlacementGroupconfig schemes (#62241) - Decouple Serve LLM ingress from vLLM protocol models (#61931)
- Set download task
num_cpus=0to reduce contention on low-CPU machines (#61191) - SGLangServer cleanup and replace
format_messages_to_promptwith_build_chat_messages(#61117, #61372)
🔨 Fixes
- Fix duplicate
data: [DONE]in streaming SSE responses (#62246) - Fix
enable_log_requests=Falsenot forwarded to vLLMAsyncLLM(#60824) - Fix
OpenAiIngressscale-to-zero when all models setmin_replicas=0(#60836) - Handle missing state attributes from vLLM's task-conditional
init_app_state(#60812) - Fix NIXL side channel host for cross-node P/D disaggregation (#60817)
- Fix
trust_remote_codedownload (#60344) - Avoid deprecated
TRANSFORMERS_CACHE; treat HuggingFace config load failure as non-fatal (#60854) - Fix sequential batch processing in SGLangServer (#61189)
📖 Documentation
- Update data parallel attention documentation (#61706)
- Add custom tokenizer example (#61098)
- Add C/C++ binaries incompatibility workaround (#62110)
Ray RLlib
💫 Enhancements
- Connector/batching optimizations: ndarray fast paths, direct env step pipeline, batch reuse (#61320, #61255, #61256, #61259, #61144)
- Unify default encoders for all algorithms (#60302)
- Toggle eval/train mode in
TorchRLModuleforward passes (#61985) - Clean up offline prelearner and unit testing (#60632)
- Remove duplicate assignments in
AlgorithmConfig(#61233) - Remove legacy RLlib release tests (#59288)
- Add APPO example with Footsies environment (#59006)
🔨 Fixes
- Support custom eval functions returning zero
eval_results,env_steps, oragent_steps(#61563) - Fix
PrioritizedEpisodeReplayBufferbug (#60065) - Fix missing
LayerNorminRLModuleSpec(#61025) - Fix evaluation in parallel to training (#60777)
- Fix
MultiAgentEpisode.env_t_to_agent_t(#60319) - Fix default metric during eval (#61590)
- Fix incorrect log value of environment steps sampled/trained (#56599)
- Prevent
torch_learner.pycrash under parameter-freezing edge cases (#62158)
Ray Core
🎉 New Features
- Resource isolation: pressure-based memory monitor, time-based killing, cgroup constraints (#61361, #61323, #61097, #61210, #61297, #59365, #59368, #60752)
- IPPR: add
ResizeRayletResourceInstancesto GCS/Python client, schema/status models, KubeRay provider (#61654, #61666, #61803, #61814) - Add
PlatformEventproto and placement group events in one-event framework (#61701, #60449) - Add Nvidia B300 support (#60753)
- Add UV support for Ray Client mode (#60868)
- Add
Percentilemetric type backed by quadratic histogram (#61148) - Expose
fallback_strategyinTaskInfoEntryandActorTableData(#60659) - Add submission job proto changes (#60857)
- Add TPU util for ready multi-host slice count; simplify elastic TPU scaling (#61300, #62141)
- Introduce per-node level temp-dir (#60761)
- Make
ray.put()generic:put(value: R) -> ObjectRef[R](#60995) - Add Python 3.14 support for recursion limit handling (#58459)
💫 Enhancements
- Upgrade
cloudpickleto 3.1.2, gRPC to v1.58.0, protobuf to 3.20.3 (#60317, #61499, #60736) - Multiple gRPC connections for improved object transfer throughput, enabled by default (#61121, #61440)
- Improve
pg.ready()performance via async GCS RPC; fix deadlocks (#60657, #62086) - RDT: non-torch transfers, PyTorch storage caching, metadata caching, NIXL agent reuse (#61081, #60999, #60689, #60602)
- Cache
ActorHandle.__hash__and fix__eq__correctness (#61638) - Cache
find_gcs_addresses(#61065) - Optimize worker listener thread (#61353)
- Eliminate Python GCS client from state manager
get_all_node_info(#61232) - Loosen restriction on worker thread count (#62279)
- Sequence in-order actor tasks per concurrency group instead of globally (#61082)
- Prioritize killing workers that occupy large memory in OOM killer (#60330)
- Cap exponential backoff attempt number to prevent integer overflow (#61003)
- Replace deprecated threading APIs (
getName/setDaemon) (#62153) - Improve error handling for
@ray.remote/@ray.methodwithnum_returns(#59286) - Convert
StopIterationon non-generator functions toRuntimeError(#60521) - Surface warnings for scheduling rate limits slowing task ramp-up (#61004)
- Periodically reload service account tokens; use
AuthenticationValidatorin sync server (#60778, #60779) - Remove support for
local_mode(#60647) - Allow matching
worker_process_setup_hookon re-entry (#61473) - Reduce default event aggregator buffer size to avoid OOM (#60826)
- Suppress autoscaler action logs for read-only provider (#61732)
- Lazy subscription to node changes on non-driver workers (#61118)
- Tighten export symbol allowlists to prevent non-ray symbol leakage (#61298)
- Approximate USS from
memory_infoinstead of callingmemory_full_info(#60000) - Dedicated IO context for
NodeManagerandInternalKVManager(#61002) - Print gRPC peer address on GCS
HandleUnregisterNode/HandleDrainNode(#62226, #62112)
🔨 Fixes
- Fix task stuck when pop worker repeatedly fails (#60104)
- Fix
boolenv var parsing forRAY_CGRAPH_overlap_gpu_communication(#61421) - Fix negative RUNNING task metric (#62070)
- Fix
OnNodeDeadto destroy all owned actors when owner node dies (#60669) - Fix actor task queue blocked after cancelling head task (#60850)
- Fix
TASK_PROFILE_EVENTaggregation for multiple phases (#61559) - Fix double-counting in
WorkerPool::WarnAboutSize()(#61246) - Fix
TaskLifecycleEvent.node_idusing emitting node instead of executor (#61478) - Fix
publisher_idtype mismatch in GCS pubsub (#61518) - Fix
dataclass.asdictwithNonein dashboardlist_jobsAPI (#61033) - Fix dashboard node head API dead node cache (#61185)
- Fix dashboard event agent for events without HTTP scheme (#60811)
- Fix Ray Actor typing for async methods (#60682)
- Fix autoscaler retry during k8s exceptions (#60658)
- Fix
ReadOnlyProvider.terminate()signature mismatch (#62251) - Fix
set/getenv races inOtlpGrpcMetricExporterOptionsand metrics exporter init (#61034, #61281) - Clean up node processes on version mismatch during
ray start(#61837) - Retry node discovery upon
ray.init()(#61029) - Ensure
Node._node_labelsinitializes regardless ofconnect_only(#61618) - Avoid reentrant locking in worker context (#61925)
- Java Local Mode type confusion with multiple Actor types (#61858)
- Recover from
WrongClusterIDon head restart (#60860) - Fix Azure: do not delete shared MSI when tearing down clusters (#61811)
- Configure TLS/mTLS for OpenTelemetry OTLP gRPC exporter (#60745)
Dashboard
🎉 New Features
- Add Queued Blocks metric to Ray Data Dashboard (#61716)
- Add Logical Memory Usage panel (#60772)
- Add running tasks by node, update Ray Data active tasks panel (#61641)
- Add NIXL KV transfer metrics to Serve LLM Grafana dashboard (#60819)
- Add GPU power and temperature graphs (#60942)
- Support log links in Grafana dashboard (#60896)
- Support autoscaler v2 for cluster-level node metrics (#60504)
- Add middleware proxy for history server (#61295)
- Forward
**kwargsthroughJobSubmissionClientto cluster info resolvers (#61902)
Ray Wheels and Images
- Upgrade Bazel from 6.5.0 to 7.5.0 (#61601)
- Bump
torchto 2.7.0+cu128 andtorchvision(#61328) - Upgrade
jackson-databind2.16.1 -> 2.18.6 (GHSA-72hv-8253-57qq) (#61808) - Upgrade CI containers from Ubuntu 20.04 to 22.04; Forge from clang-12 to clang-14 (#61533, #61662)
- Add CUDA 13 images for ray-llm/core-gpu and release test configs (#61497, #61637)
- Add py312+CUDA 12.9 and py312+CUDA 13 depsets for Ray LLM (#61116, #61149, #61496)
- Add TPU Docker images to CI build and publish pipeline (#61172, #61173, #61174, #61175)
- Add Python 3.14 to Linux wheel verification (#62127)
- Windows base build fix (#62415)
- Add
build-image.shand CLI for local Docker image builder (#61042, #61338) - Support repeated execution of
setup-dev.py(#61357)
Documentation
- Add Ray History Server user guide (#62030)
- Add
RAY_BACKEND_LOG_JSONenvironment variable documentation (#59962) - Add user guide for Ray token auth with Kubernetes RBAC (#61644)
- Add warning about token authentication in untrusted networks (#62248)
- KubeRay: prerunning deadline docs, version 1.6.0 refs, GKE/cgroups cross-refs (#61552, #61865, #62140)
- Use
RayClustername asServiceAccountname for RBAC authentication (#61785) - Remove outdated note on labels in local
RayCluster(#61719) - List TPUs as fully tested/supported (#61634)
- Restructure
development.rstwith image build, wheel paths, and cross-references (#61500, #61501, #61504, #61596) - Remove incorrect warning for placement groups (#61176)
- Add multi-agent A2A example (#61193)
- Add object spill internal doc (#60930)
Thanks
Many thanks to all those who contributed to this release!
@justinyeh1995, @marwan116, @jddqd, @MkDev11, @mjd3, @XuQianJin-Stars, @elliot-barn, @DeborahOlaboye, @aaronscalene, @rayhhome, @ayushk7102, @bj-son, @nadongjun, @Daraan, @xinyuangui2, @Sparks0219, @justinvyu, @suppagoddo, @akyang-anyscale, @ambicuity, @Aydin-ab, @mickeyyliu, @MatthewCWeston, @vaishdho1, @jinbum-kim, @eicherseiji, @kouroshHakha, @karticam, @JasonLi1909, @ArturNiederfahrenhorst, @moktamd, @nrghosh, @dragongu, @andrewsykim, @mgchoi239, @ruoliu2, @harshit-anyscale, @Chong-Li, @pseudo-rnd-thoughts, @lee1258561, @khluu, @daiping8, @SolitaryThinker, @jonalee99, @yancanmao, @SohamRajpure, @rueian, @VitaliyEroshin, @Future-Outlier, @nehiljain, @JiangJiaWei1103, @Yicheng-Lu-llll, @KaisennHu, @jeffreywang-anyscale, @aslonnie, @alanwguo, @machichima, @limarkdcunha, @codope, @sampan-s-nayak, @kyuds, @thjung123, @abrarsheikh, @wingkitlee0, @preneond, @7ckingBest, @slfan1989, @win5923, @kaori-seasons, @israbbani, @andrew-anyscale, @zestze, @owenowenisme, @edoakes, @laysfire, @pushpavanthar, @tohtana, @leewyang, @liulehui, @Hyunoh-Yeo, @eureka0928, @ryanaoleary, @947132885, @Kunchd, @simonsays1980, @dpj135, @bveeramani, @raulchen, @Partth101, @dubin555, @richabanker, @bittoby, @sai-miduthuri, @RedGrey1993, @kamil-kaczmarek, @TimothySeah, @myandpr, @rishic3, @justinrmiller, @HassamSheikh, @chiayi, @petern48, @carolynwang, @MrKWatkins, @400Ping, @summaryzb, @peterxcli, @RocMarshal, @coqian, @yuhuan130, @ryankert01, @dayshah, @Anarion-zuo, @ZacAttack, @weimingdiit, @iamjustinhsu, @matthewdeng, @goutamvenkat-anyscale, @KeeProMise, @Sanskarzz, @yuchen-ecnu, @praneethkaturi, @rajeshg007, @ankur-anyscale, @Art0white, @xyuzh, @dancingactor, @MengjinYan, @dengkliu92, @alexeykudinkin
2.54.1Ray-2.54.1
Ray Data
🔨 Fixes
- Disable hanging issue detection (#61895) — The hanging issue detector was making blocking calls to the Ray State API, which could cause the scheduling loop to block and severely degrade pipeline performance. The detector is disabled in this patch release until the blocking calls are fixed.
2.54.0Ray-2.54.0
Ray Data
🎉 New Features
- Add checkpointing support to Ray Data (#59409)
- Compute Expressions: list operations (#59346), fixed-size arrays (#58741), string padding (#59552), logarithmic (#59549), trigonometric (#59712), arithmetic (#59678), and rounding (#59295)
- Add
sql_paramssupport toread_sql(#60030) - Add
AsListaggregation (#59920) - Support
CountDistinctaggregate (#59030) - Add credential provider abstraction for Databricks UC datasource (#60457)
- Support callable classes for
UDFExpr(#56725) - Add autoscaler metrics to Data Dashboard (#60472)
- Add optional filesystem parameter to download expression (#60677)
- Allow specifying partitioning style or flavor in
write_parquet()(#59102) - New cluster autoscaler enabled by default (#60474)
💫 Enhancements
- Improve numerical stability in scalers by handling near-zero values (#60488)
- Export dataset operator output schema to event logger (#60086)
- Iceberg: add retry policy for Storage + Catalog writes (#60620)
- Iceberg: remove calls to Catalog Table in write tasks (#60476)
- Expose logical operators and rules via package exports (#60297, #60296)
- Demote Sort from requiring
preserve_order(#60555) - Improve appearance of repr(dataset) (#59631)
- Allow configuring
DefaultClusterAutoscalerV2thresholds via env vars (#60133) - Use Arrow IPC for Arrow Schema serialization/deserialization (#60195)
- Store _source_paths in object store to prevent excessive spilling during read task serialization (#59999)
- Add more shuffle fusion rules (#59985)
- Enable and tune
DownstreamCapacityBackpressurePolicy(#59753) - Enable concurrency cap backpressure with tuning (#59392)
- Set default actor pool scale up threshold to 1.75 (#59512)
- Don't downscale actors if the operator hasn't received any inputs (#59883)
- Don't reserve GPU budget for non-GPU tasks (#59789)
- Only return selected data columns in hive-partitioned Parquet files (#60236)
- Ordered + FIFO bundle queue (#60228)
- Add
node_id,pid, attempt number for hanging tasks (#59793) - Revise resource allocator task scheduling to factor in pending task outputs (#60639)
- Track block serialization time (#60574)
- Use metrics from
OpRuntimeMetricsfor progress (#60304) - Tabular form for streaming executor op metrics (#59774)
- Info-log cluster scale-up decisions (#60357)
- Use plain mode instead of grid mode for
OpMetricslogging (#59907) - Progress reporting refactors (#59350, #59629, #59880)
- Remove deprecated
TENSOR_COLUMN_NAMEconstant (#60573) - Remove
meta_providerparameter (#60379) - Decouple Ray Train from Ray Data by removing top-level
ray.dataimports (#60292) - Move extension types to ray.data (#59420)
- Skip upscaling validation warning for fixed-size actor pools (#60569)
- Make
StatefulShuffleAggregation.finalizeallow incremental streaming (#59972) - Revisit
OutputSplittersemantics to avoid unnecessary buffer accumulation (#60237) - Update to PyArrow 23 (#60739, #59489)
- Add
BackpressurePolicyto streaming executor progress bar (#59637) - Support Arrow-based transformations for preprocessors (#59810)
StandardScalerpreprocessor with Arrow format (#59906)- OneHotEncoder with Arrow format (#59890)
🔨 Fixes
- Fuse
MapBatcheseven if they modify the row count (#60756) - Don't push limit past
map_batchesby default (#60448) - Fix wrong type hint of other dataset in zip and union (#60653)
- Fix
ActorPoolMapOperatorto guarantee dispatch of all given inputs (#60763) - Fix
ArrowInvaliderror when backfilling missing fields from map tasks (#60643) - Fix attribute error in
UnionOperator.clear_internal_output_queue(#60538) - Fix
DefaultClusterAutoscalerV2raising KeyError: 'CPU' (#60208) - Fix
ReorderingBundleQueuehandling of empty output sequences (#60470) - Fix task completion time without backpressure grafana panel metric name (#60481)
- Fix Union operator blocking when preserve_order is set (#59922)
- Fix autoscaler requesting empty resources instead of previous allocation when not scaling up (#60321)
- Fix autoscaler not respecting user-configured resource limits (#60283)
- Fix
DefaultAutoscalerV2not scaling nodes from zero (#59896) - Fix Iceberg warning message (#60044)
- Fix Parquet datasource path column support (#60046)
- Fix ProgressBar with
use_ray_tqdm(#59996) - Fix stale stats on refit for preprocessors (#60031)
- Fix
StreamingRepartitionhang with empty upstream results (#59848) - Fix operator fusion bug to preserve UDF modifying row count (#59513)
- Fix
AutoscalingCoordinatordouble-allocating resources for multiple datasets (#59740) - Fix
DownstreamCapacityBackpressurePolicyissues (#59990) - Fix
AutoscalingCoordinatorcrash when requesting 0 GPUs on CPU-only cluster (#59514) - Fix
TensorArraytoArrowtensor conversion (#59449) - Fix resource allocator not respecting max resource requirement (#59412)
- Fix GPU autoscaling when
max_actorsis set (#59632) - Fix checkpoint filter PyArrow zero-copy conversion error (#59839)
- Restore class aliases to fix deserialization of existing datasets (#59828, #59818)
- Fix DataContext deserialization issue with StatsActor (#59471)
📖 Documentation
- Sort references in "Loading data and Saving data" pages (#60084)
- Fix inconsistent heading levels in "How to write tests" guide (#60706)
- Clarify
resource_limitsrefers to logical resources (#60109) - Update
read_lancedoc (#59673) - Fix broken link in
read_unity_catalogdocstring (#59745) - Fix bug in docs for
enable_true_multi_threading(#60515) - Add more education around transformations (#59415)
Ray Serve
🎉 New Features
- Queue-based autoscaling for TaskConsumer deployments (phase 1). Introduces a
QueueMonitoractor that queries message brokers (Redis, RabbitMQ) for queue length, enabling TaskConsumer scaling based on pending tasks rather than HTTP load. (#59430) - Default autoscaling parameters for custom policies. New
apply_autoscaling_configdecorator allows custom autoscaling policies to automatically benefit from Ray Serve's standard parameters (delays, scaling factors, bounds) without reimplementation. (#58857) label_selectorandbundle_label_selectorin Serve deployments. Deployments can now specify node label selectors for scheduling and bundle-level label selectors for placement groups, useful for targeting specific hardware (e.g., TPU topologies). (#57694)- Deployment-level autoscaling observability. The controller now emits a structured JSON
serve_autoscaling_snapshotlog per autoscaling-enabled deployment each control-loop tick, with an event summarizer that reduces duplicate logs. (#56225) - Batching with multiplexing support. Batching now guarantees each batch contains requests for the same multiplexed model, enabling correct multiplexed model serving with
@serve.batch. (#59334)
💫 Enhancements
- Replica routing data structure optimizations. O(1) pending-request lookups, cached replica lists, lazy cleanup, optimized retry insertion, and metrics throttling yield significant routing performance improvements. (#60139)
- New operational metrics suite. Added long-poll metrics, replica lifecycle metrics, app/deployment status metrics, proxy health and request routing delay metrics, event loop utilization metrics, and controller health metrics — greatly improving monitoring and debugging capabilities. (#59246, #59235, #59244, #59238, #59535, #60473)
- Autoscaling config validation.
lookback_period_smust now be greater thanmetrics_interval_s, preventing silent misconfigurations. (#59456) - Cross-version
root_pathsupport for uvicorn.root_pathnow works correctly across all uvicorn versions, including >=0.26.0 which changed how root_path is processed. (#57555) - Preserve user-set gRPC status codes. When deployments raise exceptions after setting a gRPC status code on the context, that code is now correctly propagated to the client instead of being overwritten with INTERNAL. Error messages are truncated to 4 KB to respect HTTP/2 trailer limits. (#60482)
- Replica ThreadPoolExecutor capped to num_cpus. The user-code event loop's default ThreadPoolExecutor is now limited to the deployment's num_cpus, preventing oversubscription when using asyncio.to_thread. (#60271)
- Generic actor registration API for shutdown cleanup. Deployments can register auxiliary actors (e.g., PrefixTreeActor) with the controller for automatic cleanup on
serve.shutdown(), eliminating cross-library import dependencies. (#60067) - Deployment config logging in controller. Deployment configurations are now logged in the controller for easier debugging and auditability. (#59222, #59501)
- Pydantic v1 deprecation warning. A FutureWarning is now emitted at
ray.init()when Pydantic v1 is detected, as support will be removed in Ray 2.56. (#59703)
🔨 Fixes
- Fixed tracing signature mismatch across processes. Resolved TypeError: got an unexpected keyword argument
_ray_trace_ctxwhen calling actors from a different process than the one that created them (e.g., serve start + dashboard interaction). (#59634) - Fixed ingress deployment name collision. Ingress deployment name was incorrectly modified when a child deployment shared the same name, causing routing failures. (#59577)
- Fixed downstream deployment over-provisioning. Downstream deployments no longer over-provision replicas when receiving DeploymentResponse objects. (#60747)
- Fixed replicas hanging forever during draining. Replicas no longer hang indefinitely when requests are stuck during the draining phase. (#60788)
- Fixed
TaskProcessorAdaptershutdown during rolling updates. Removedshutdown()from__del__, which was broadcasting a kill signal to all Celery workers instead of just the local one, breaking rolling updates. (#59713) - Fixed Windows test failures. Resolved tracing file handle cleanup on Windows, skipped incompatible gRPC and tracing tests on Windows. (#60078, #60356, #60393, #59771)
- Fixed flaky tests. Addressed gauge throttling race in
test_router_queue_len_metric, ensured proxy replica queue cache is populated before GCS failure tests, and added metrics server readiness checks. (#60333, #60466, #60468) - Fixed distilbert test segfault. Worked around a pyarrow/jemalloc crash triggered by specific import ordering of FastAPI, torch, and TensorFlow. (#60478)
📖 Documentation
- Improved autoscaling documentation. Clarified the relationship between delays, metric push intervals, and the autoscaling control loop. (#59475)
- New example: video analysis inference. End-to-end notebook demonstrating a Serve application for scene change detection, - tagging, and video description. (#59859)
- New examples: model multiplexing and model composition. Published workload-based examples for forecasting with model multiplexing and recommendation systems with model composition. (#59166)
- Model registry integration guide. Added documentation for integrating Serve with model registries (e.g., MLflow). (#59080)
- Fixed broken documentation links. Resolved 404 errors for async inference, MLflow registry example, and LLM code examples. (#59917, #60071, #59520, #59521, #60181)
- Fixed monitoring docs. Corrected target replicas metric emission to enable time-series comparison with actual replicas. (#59571)
- Async inference template. Added an end-to-end template for building asynchronous inference applications with Ray Serve. (#58393, #59926)
🏗 Architecture refactoring
- Environment variable cleanup (5-part series). Removed deprecated and redundant env vars (
RAY_SERVE_DEFAULT_HTTP_HOST,RAY_SERVE_DEFAULT_HTTP_PORT,RAY_SERVE_DEFAULT_GRPC_PORT,RAY_SERVE_HTTP_KEEP_ALIVE_TIMEOUT_S,RAY_SERVE_REQUEST_PROCESSING_TIMEOUT_S,RAY_SERVE_ENABLE_JSON_LOGGING,RAY_SERVE_ALWAYS_RUN_PROXY_ON_HEAD_NODE), cleaned up legacy constant fallbacks, and added documentation for previously undocumented env vars (e.g.,RAY_SERVE_CONTROLLER_MAX_CONCURRENCY,RAY_SERVE_ROOT_URL, proxy health check settings, and fault tolerance params). Users relying on removed env vars should migrate to the Serve config API (http_options,grpc_options,LoggingConfig). (#59470, #59619, #59647, #59963, #60093)
Ray Train
🎉 New Features
- Add TPU multi-slice support to JaxTrainer (#58629)
- Update async validation API (#59428)
- Add a
CallbackManagerand guardrail some callback hooks (#60117) - Add inter-execution file shuffling for deterministic multi-epoch training (#59528)
- Resume validations on driver restoration (#59270)
💫 Enhancements
- Pass ray remote args to validation task (#60203)
- Deprecate
PredictorAPI (#60305) - Increase worker group start default timeout to 60s (#60376)
- Unify
PlacementGroupandSlicePlacementGroupinterface in WorkerGroup (#60116) - Cleanup zombie
RayTrainWorkeractors (#59872) - Add usage telemetry for checkpointing and validation (#59490)
- Validate that validation is called with a checkpoint (#60548)
- Replace
pg.ready()withpg.wait()in worker group (#60568) - Rename
DatasetsSetupCallbacktoDatasetsCallback(#59423) - Update "Checkpoint Report Time" metric title to "Cumulative Checkpoint Report Time" (#58470)
- Add training failed error back to failure policy log (#59957)
- Decouple Ray Train from Ray Data by removing top-level imports (#60292)
🔨 Fixes
- Add
try-exceptforpg.wait()(#60743) TrainControllerreraisesAsyncioActorExit(#59461)
📖 Documentation
- Add a
JaxTrainertemplate (#59842) - Update Jax doc to include GPU and multi-slice TPU support (#60593)
- Document
checkpoint_upload_fnbackend and cuda:nccl backend support (#60541) - Rename
checkpoint_upload_functocheckpoint_upload_fnin docs (#60390) - Fix Ray Train workloads and PyTorch with ASHA templates (#60537)
- Publish Ray Train workload example (#58936)
Ray Tune
🔨 Fixes
- Avoid file deletion race by using unique tmp file names (#60556)
Ray LLM
🎉 New Features
- Add
/tokenizeand/detokenizeendpoints (#59787) - Add
/collective_rpcendpoint for RLHF weight synchronization (#59529) - Add Control Plane API for Sleep/Wakeup (#59455)
- Add Pause/Resume Control Plane API (#59523)
- Add support for classification and scoring models (#59499)
- Add
poolingparameter (#59534) - Support vLLM structured outputs with backward-compat for
guided_decoding(#59421) - Add CPU support to Ray Serve LLM (#58334)
- Add
should_continue_on_errorsupport forServeDeploymentStage(#59395) - Support configuring
HttpRequestUDFresources (#60313)
💫 Enhancements
- Upgrade vLLM to 0.15.0 (#60679)
- Unify schema of success and failure rows (#60572)
- Prefer uniproc executor over mp executor when
world_size==1(#60403) - Use
computeinstead ofconcurrencyto specifyActorPoolsize (#59645) - Remove
DataContextoverrides in Ray Data LLM Processor (#60142) - Use numpy arrays for embeddings to avoid
torch.Tensorserialization overhead (#59919) - Make
PrefixCacheAwareRouterimbalance threshold less surprising (#59390) - Allow
tokenized_promptwithoutpromptinvLLMEngineStage(#59801) - Avoid passing enums through
fn_constructor_kwargs(#59806) - Refactor Control Plane endpoints into mixins (#59502)
- Remove
CUDA_VISIBLE_DEVICESdeletion workaround (#60502)
🔨 Fixes
- Fix nested dict to
Namespaceconversion in vLLM engine initialization (#60380) - Fix JSON non-serializable
ndarrayexception inhttp_request_stage(#60299) - Exit actor on
EngineDeadErrorto enable recovery (#60145) - Fix NIXL port conflict in prefill-decode disaggregation test (#60057)
📖 Documentation
- Batch inference docs reorg and update to reflect per-stage config refactor (#59214)
- Add resiliency section and refine doc code (#60594)
- Add video/audio examples for
vLLMEngineProcessor(#59446) - Add SGLang integration example (#58366)
- Remove inaccurate statement in docs (#60425)
Ray RLlib
🎉 New Features
- Add TQC (Truncated Quantile Critics) algorithm implementation (#59808)
- Add LR scheduling ability to
BCandMARWIL(#59067) - RLlib and Ray Tune: Hyperparameter Optimisation example (#60182)
💫 Enhancements
- 🔥 APPO improvements: learner pipeline performance improvements (#59544)
- Improve stateful model training on offline data (#59345)
- Create resource bundle per learner (#59620)
- Improve env runner sampling by replacing recursive solution with iterative solution (#56082)
- Improve IMPALA examples and premerge (#59927)
- Remove MLAgents dependency (#59524)
- Upgrade to gymnasium v1.2.2 (#59530)
- Decrease log quantity for learning tests (#59005)
- Update learner state warnings to the debug level (#60178)
- Don't log
np.nanmeanwarnings in EMA stats (#60408)
🔨 Fixes
- Fix DQN
RLModuleforward methods to handle dict spaces (#60451) - Fix
LearnerGroup.load_module_state()and mark as deprecated (#60354) - Fix static dimension issue in ONNX export of Torch attention models (#60102)
- Fix Multi-Agent Episode concatenation for sequential environments (#59895)
- Fix module episode returns metrics accumulation for shared module IDs (#60234)
- Fix rollout fragment length calculation in
AlgorithmConfig(#59438) - Fix checkpointable issues with cloud storages (#60440)
- Update
flatten_observations.pyfor nested spaces for ignored multi-agent (#59928)
Ray Core
🎉 New Features
- Resource Isolation: unify config construction, add public docs, and expose
cgroup_pathinray.init()(#59372, #60183, #60726) - Support tensor-level deduplication for NIXL (#60509)
- Add CUDA IPC transport for RDT (#59838)
- Register custom transport at runtime for RDT (#59255)
- Support TPU v7x accelerator type for device discovery (#60338)
- Introduce local port service discovery (#59613)
- Cancel sync actor by checking
is_canceled()(#58914) - Support labels for ray job submit
--entrypoint-resource(#59735) - Add
--ipoption inray attach(#59931) - Add bearer token support for remote URI downloads (#60050)
- Support HTTP redirection download (#59384)
- Add
ray kill-actor --name/--namespacefor force/graceful shutdown (#60258)
💫 Enhancements
- Bound object spilling file size to avoid disk increase pressure (#60098)
- Replace SHA-1 with SHA-256 for internal hash operations (#60242)
- Use whitelist approach to block mutation requests from browser (#60526)
- Pass authentication headers to WebSocket connections in tail_job_logs (#60346)
- Add auth to Dashboard HTTP agent and client (#59891)
- Use dedicated service account path for Ray auth tokens (#60409)
- Update Kubernetes token auth verb to ray:write (#60411)
- Replace
RAY_AUTH_MODE=k8swith separate config for Kubernetes token auth (#59621) - Optimize token auth: use
shared_ptrcaching and avoid per-RPC construction (#59500) - Optimize
OpenTelemetrymetric recording calls (#59337) - Throttle infeasible resource warning (#59790)
- Add default excludes for
working_diruploads (#59566) - Tell users why objects cannot be reconstructed (#59625)
- Extend instance allocation timeout in autoscaler v2 (#60392)
- Remove GCS centralized scheduling (#59979, #60121, #60188)
- Demote stale sync message drop log to
DEBUGinRaySyncer(#59616) - Migrate remaining
std::unordered_maptoabsl::flat_hash_map(#59921) - Add missing fields to
NodeDefinitionEventproto (#60314) - Add actor and task event missing fields (#60287)
- Add node id to the base event (#59242)
- Add
repr_nametoactor_lifecycle_event(#59925) - Support
ALLin exposable event config (#59878) - Support publishing events from aggregator to GCS (#55781)
- Update the attempt number of actor creation task when actor restarts (#58877)
- Unify node feasibility and availability checking for GPU fractions (#59278)
- Update TPU utils for multi-slice compatibility (#59136)
- Improve
SubprocessModuleHandle.destroy_module()resource cleanup (#60172) - Support viewing PIDs for Dashboard and Runtime Env Agent (#58701)
- Optimize autoscaler monitor by moving resource demand parsing outside loop (#59190)
- Avoid GCS query for
is_headin dashboard agent startup (#59378) - Skip reporter and event aggregator client creation in minimal mode (#59846)
- Support out-of-order actors by extracting metadata when creating (RDT) (#59610)
- Synchronize CUDA stream before registering for NIXL (#60072)
- Atomically send/recv for two-sided ordering (RDT) (#60202)
- Add
get_session_name()to RuntimeContext (#59469) - Make
MAX_APPLICATION_ERROR_LENconfigurable via env var (#59543) - Preserve function signatures through Ray decorators (#60479)
🔨 Fixes
- Fix
idle_time_msresetting for nodes not running tasks (#60581) - Fix task event loss during shutdown (#60247)
- Filter bad subscriber messages from taking down GCS publisher (#60252)
- Fix
RAY_EXPERIMENTAL_NOSET_*environment variable parsing in accelerator managers (#60577) - Fix
ray start --no-redirect-outputcrash (#60394) - Fix drain state propagation race condition (#59536)
- Fix use-after-free race condition in OpenTelemetry gauge metric callback during shutdown (#60048)
- Fix
PSUTIL_PROCESS_ATTRSreturning empty list on Windows (#60173) - Fix deadlock in garbage collection when holding lock (#60014)
- Fix incorrect error handling in autoscaler for
available_node_typeson on-prem clusters (#60184) - Fix invalid status transitions in autoscaler v2 (#60412, #59550)
- Fix GCS crash from race condition in
MetricsAgentClientexporter initialization (#59611) - Fix tracing signature mismatch when calling actors from different processes (#59634)
- Fix crash when killing actor handle from previous session (#59425)
- Fix multiple deployment same name resolve (#59577)
- Handle dual task errors with read-only args (#59507)
- Handle exceptions raised by
internal_ip()withinStandardAutoscaler(#57279) - Fix
uv_runtime_env_hook.pyto pin worker Python version (#59768) - Fix
STRICT_PACKplacement groups ignoring bundle label selectors (#60170) - Fix logging bug when log value is an empty string (#59434)
- Fix aggregator-to-GCS event conversion (#59783)
- Raise error on tail log job error in newer Ray versions (#59506)
- Fix num retries left message (#59829)
- Fix
psutilinternal API usage in dashboard disk usage reporting (#59659) - Fix event exporter init ray check (#60073)
- Prevent use-after-free error in core worker shutdown (#58435)
- Fix task name inconsistency in
RUNNINGvsFINISHEDmetrics (#59893) - Fix
symmetric_runusing wrong condition to check GCS readiness (#59794) - Preserve Pydantic details when serialization fails (#59401)
- Retry GCP project metadata updates on HTTP 412 errors (#60429)
- Fix v1 autoscaler
TypeErrorwhen usingbundle_label_selectors(#59850) - Shorten SHA-256 hex with base32 to comply with GCP label limits (#60722)
📖 Documentation
- Add initial user guide for Ray resource isolation with writable cgroups (#59051)
- Add token authentication internals documentation (#59299)
- Update metric exporter docs (#59874)
- Add internal documentation for Port Service Discovery (#59844)
- Update misleading Ray job diagram (#59940)
- Add debugging logs related to pinned argument size limit (#60175)
- Add slow startup tip to podman troubleshooting docs (#59942)
- Clarify
ray.shutdown()behavior for local vs remote clusters (#59845) - Improve placement group fault tolerance doc (#59830)
- Add head-node memory growth and OOM guidance (#58695)
- Add documentation for
RAY_RUNTIME_ENV_BEARER_TOKENenv var (#60136)
Dashboard
💫 Enhancements
- Support more panels in dashboard (#60018)
- Add autoscaler metrics to Data Dashboard (#60472)
- Support viewing PIDs for Dashboard and Runtime Env Agent (#58701)
🔨 Fixes
- Update total for dark mode color (#60106)
Ray Wheels and Images
- Add experimental Python 3.13 images (#59811, #60549)
- Drop Python 3.9 support completely (#59824, #59825, #59769); wheel Python version now declared as 3.10+ (#59835)
ray-cppwheels are nowpy3-none, without specific Python versions. (#59969)
Documentation
- Add committership documentation (#60069)
- Update contribution guide with common labels (#59473)
- Add KubeRay & Volcano integration docs update (#59636)
- Add
RayJobInTreeAutoscalingwith Kueue docs after Kueue 0.16.0 release (#59648) - Refactor LLM batch inference template (#59897)
- Add async inference template (#58393)
- Add
RunLLMchat widget for Ray docs (#59126) - Fix various typos and broken links (#60249, #59901, #60181)
- Replace Ray Tune + Train example with vanilla Ray Tune in homepage (#60229)
- Add Ray technical charter (#60068)
Thanks
Thank you to everyone who contributed to this release! @KaisennHu, @MiXaiLL76, @slfan1989, @krisselberg, @JasonLi1909, @Priya-753, @pseudo-rnd-thoughts, @zzchun, @ZacAttack, @pushpavanthar, @jjyao, @ryanaoleary, @pcmoritz, @akshay-anyscale, @HassamSheikh, @yurekami, @Hyunoh-Yeo, @ruoliu2, @nrghosh, @wxwmd, @myandpr, @J-Meyers, @trilamsr, @kouroshHakha, @limarkdcunha, @manhld0206, @jreiml, @preneond, @yuchen-ecnu, @Yicheng-Lu-llll, @AchimGaedkeLynker, @vaishdho1, @israbbani, @OneSizeFitsQuorum, @Sathyanarayanaa-T, @nadongjun, @xinyuangui2, @Rob12312368, @as-jding, @lee1258561, @popojk, @coqian, @rajeshg007, @jeffreywang-anyscale, @kamil-kaczmarek, @alexeykudinkin, @Aydin-ab, @mgchoi239, @dragongu, @edoakes, @smortime, @tk42, @abrarsheikh, @jakubzimny, @Future-Outlier, @axreldable, @owenowenisme, @g199209, @cem-anyscale, @dayshah, @akelloway, @daiping8, @dlwh, @robertnishihara, @400Ping, @matthewdeng, @antoine-galataud, @cristianjd, @Partth101, @goutamvenkat-anyscale, @codope, @seanlaii, @andrew-anyscale, @andrewsykim, @liulehui, @simonsays1980, @Sparks0219, @yifanmai, @landscapepainter, @win5923, @kangwangamd, @srinarayan-srikanthan, @KeeProMise, @srinathk10, @my-vegetable-has-exploded, @MengjinYan, @yancanmao, @yuhuan130, @ArturNiederfahrenhorst, @akyang-anyscale, @rushikeshadhav, @kongjy, @harshit-anyscale, @justinvyu, @dancingactor, @Vito-Yang, @cr7258, @marwan116, @muyihao, @DeborahOlaboye, @bveeramani, @kriyanshii, @khluu, @machichima, @Kunchd, @jonded94, @iamjustinhsu, @sampan-s-nayak, @wingkitlee0, @sunsetxh, @dkhachyan, @can-anyscale, @TimothySeah, @raulchen, @elliot-barn, @ryankert01, @xyuzh, @stephanie-wang, @hao-aaron, @simeetnayan81, @cszhu, @richardliaw, @yuanjiewei, @kyuds, @eicherseiji, @RedGrey1993, @rueian, @jeffreyjeffreywang, @crypdick, @ankur-anyscale, @aslonnie
2.53.0Ray-2.53.0
Highlights
- Ray plans to drop support for Pydantic V1 starting version 2.56.0. Please see this RFC for details.
- Ray Data now has support for bounded reading from Kafka and improved Iceberg support.
Ray Data
🎉 New Features
- Autoscaling: New utilization-based cluster autoscaler for Ray Data workloads (#59353, #59362, #59366). To use this new autoscaler set RAY_DATA_CLUSTER_AUTOSCALER=V2.
- Kafka Datasource: Add Kafka as a native datasource for data ingestion (#58592)
- Dataset summary API: Add
Dataset.summary()API for quick dataset inspection (#58862) - Iceberg support: Add Iceberg schema evolution, upsert, and overwrite support (#59210, #59335)
- Graceful error handling: Add
should_continue_on_errorfor graceful error handling in batch inference (#59212) - Datetime compute expressions: Add datetime compute expressions support (#58740)
- Grouped
with_columnexpressions: Enable expressions for groupedwith_columnin Ray Data (#58231) - Parallelized collation: Parallelize
DefaultCollateFn,arrow_batch_to_tensors(#58821)
💫 Enhancements
- Optimized Autoscaler Step Size: Optimize autoscaler to support configurable step size for actor pool scaling (#58726)
- Improved Streaming Repartition: Improve streaming repartition performance (#58728)
- Actor init retry: Add actor retry if there's a failure in
__init__(#59105) - Fused Repartition + MapBatches: Fuse StreamingRepartition with MapBatches operators to scale collate (#59108)
- Combined repartitions: Combine consecutive repartitions for efficiency (#59145)
- Prefetch buffering: Handle prefetch buffering in
iter_batches(#58657) - HashShuffle block breakdown:
HashShuffleAggregatorbreaks down blocks on finalize (#58603) - Backpressure tuning: Tune concurrency cap backpressure object store budget ratio (#58813)
- Non-string ApproximateTopK: Support non-string items for
ApproximateTopKaggregator (#58659) - Lance version support: Add version support to
read_lance()(#58895) - Dashboard metrics: Add
time_to_first_batchandget_ref_bundlesmetrics to data dashboard (#58912) - Iter prefetched bytes stats: Add
iter_prefetched_bytesstatistics tracking (#58900) - Configurable batching for
iter_batches: Add configurable batching forresolve_block_refsto speed upiter_batches(#58467) - Improved dashboard metrics: Improve Ray Data dashboard metrics display (#58667)
- Histogram percentiles: Update Ray Data histograms to show percentiles in data dashboard (#58650)
- Deprecated API removal: Remove deprecated
read_parquet_bulkAPI (#58970) - Block shaping option: Add disable block shaping option to BlockOutputBuffer (#58757)
- Removed concurrency lock: Remove concurrency lock for better performance (#56798)
🔨 Fixes
- Fixes to Unique: Fix support of list types for Unique aggregator (#58916)
- Parquet NaN fix: Fix reading from written parquet for numpy with NaNs (#59172)
- Hash Shuffle empty block: Fix empty block sort in hash shuffle operator (#58836)
- Hive partitioning pushdown: Fix pushdown optimizations with Hive partitioning (#58723)
- Object Store usage reporting: Fix
obj_store_mem_max_pending_output_per_taskreporting (#58864) - Pyarrow FileSystem serialization fix: Handle filesystem serialization issue in
get_parquet_dataset(#57047) - Azure UC SAS: Handle Azure UC user delegation SAS (#59393)
- Async UDF Thread Cleanup: Close threads from async UDF after actor died (#59261)
- Object Locality Default: Default return 0s for object locality instead of -1s (#58754)
📖 Documentation
- Added contributing guide to Ray Data documentation (#58589)
- Added download expression to key user journeys in documentation (#59417)
- Added Kafka user guide (#58881)
- Added unstructured data templates from Ray Summit 2025 (#57063)
- Improved instructions for reading Hugging Face datasets (#58492, #58832)
- Refined batch-format guidance in docs (#58971)
- Exposed
vision_preprocessandvision_postprocessin VLM docs (#59012) - Added upgrading
huggingface_hubinstruction (#59109) - Added scaling out expensive collation functions doc (#58993)
Ray Serve
🎉 New Features
- Deployment topology visibility. Exposes deployment dependency graphs in Serve REST API, allowing users to visualize and understand the DAG structure of their applications. (#58355)
- External autoscaler integration. Adds
external_scaler_enabledflag to application config, enabling third-party autoscalers to control replica counts. (#57727, #57698) - Node rank and local rank support. Extends replica rank system to track node-level and per-node local ranks, enabling better distributed serving coordination for multi-node deployments. (#58477, #58479)
- Custom batch size function. Allows users to define custom functions for computing logical batch sizes in
@serve.batch, useful when batch items have varying weights (e.g., token counts in LLM inference). (#59059) - Stateful application-level autoscaling. Adds policy state persistence for custom autoscaling policies, allowing policies to maintain state across control-loop iterations. (#59118)
- New autoscaling, batching, and routing metrics. Adds Prometheus metrics for autoscaling decisions (
ray_serve_deployment_target_replicas,ray_serve_autoscaling_decision_replicas), batching statistics, and router queue latency for improved observability. (#59220, #59232, #59233)
💫 Enhancements
- Smarter downscaling behavior. Prioritizes stopping most recently scaled-up replicas during downscale, preserving long-lived replicas that are optimally placed and fully warmed up. (#52929)
- Autoscaling performance optimizations. Short-circuits metric aggregation for single time series cases (O(n log n) → O(1)) and lazily evaluates expensive autoscaling context fields to reduce controller CPU usage. (#58962, #58963)
- Route matching cleanup. Removes redundant route matching logic from replicas since correct route values are now included in RequestMetadata. Also allows multiple methods (
GET,PUT) corresponding to a route. (#58927) - Deployment wrapper metadata preservation. Wrapper classes from decorators like
@ingressnow preserve original class metadata (__qualname__,__module__,__doc__,__annotations__). (#58478) - Improved type annotations. Enhances generic type annotations on
DeploymentHandle,DeploymentResponse, andDeploymentResponseGeneratorfor better IDE support and type inference. Adds.result()stub toDeploymentResponseGeneratorto fix static typing errors. (#59363, #58522)
🔨 Fixes
- YAML serialization for autoscaling enums. Fixes
RepresenterErrorwhen usingserve buildwithAggregationFunctionenum values in autoscaling config. (#58509) - Autoscaling context timestamp fix. Correctly sets
last_scale_up_timeandlast_scale_down_timeon autoscaling context. (#59057) - Deadlock in chained deployment responses. Fixes hang when awaiting intermediate
DeploymentResponseobjects in a chain of deployment calls from different event loops. (#59385) - FastAPI class-based view inheritance. Fixes
make_fastapi_class_based_viewto properly handle inherited methods. (#59410)
📖 Documentation
- Async I/O best practices guide. New documentation covering async programming patterns and best practices for Ray Serve deployments. (#58909)
- Replica scheduling guide. New documentation covering compact scheduling, placement groups, custom resources, and guidance on when to use each feature. (#59114)
Ray Train
🎉 New Features
- Worker Placement with Label Selectors: Added
label_selectortoScalingConfig. This allows users to control worker placement by targeting specific labeled nodes in the cluster. (#58845, #59414) - Multihost JaxTrainer on GPU: Introduced support for
JaxTrainerrunning on GPU machines. (#58322) - Checkpoint Consistency Modes: Added
CheckpointConsistencyModetoget_all_reported_checkpoints, providing options for handling checkpoint retrieval consistency. (#58271) - Per-Dataset Execution Options:
DataConfignow supports settingexecution_optionson a per-dataset basis for finer-grained control over data loading. (#58717)
💫 Enhancements
- Nested Metrics Support:
Result.get_best_checkpointnow supports nested metrics, allowing for more flexible metric tracking and checkpoint selection. (#58537) - Non-Blocking Checkpoint Retrieval:
get_all_reported_checkpointsno longer blocks when only metrics are reported. (#58870) - Improved Resource Cleanup: Implemented eager cleanup of data resources and placement groups upon training run failures or aborts, preventing resource leaks. (#58325, #58515)
🔨 Fixes
- MLflow Compatibility: Updated
setup_mlflowAPI to ensure full compatibility with Ray Train V2. (#58705) - Validation for Checkpoint Uploads: A
ValueErroris now raised ifcheckpoint_upload_fnfails to return a valid checkpoint. (#58863)
📖 Documentation
- New API Documentation: Added comprehensive documentation for the
ray.train.get_all_reported_checkpointsmethod. (#58946)
Ray Tune
💫 Enhancements:
- Nested Metrics Support:
Result.get_best_checkpointnow supports nested metrics, allowing for more flexible metric tracking and checkpoint selection. (#58537)
Ray LLM
💫 Enhancements
- Cloud filesystem restructuring with provider-specific implementations (#58469)
- Bump
transformersto 4.57.3 (#58980) - Ray Data LLM config refactor (#58298)
- Update
vllm_engine.pyto check forVLLM_USE_V1attribute (#58820) - Infer
VLLM_RAY_PER_WORKER_GPUSfrom fractional placement-group bundles automatically (#58949)
🔨 Fixes
- Fix LLM DP release test configuration (#59090)
Ray RLlib
🎉 New Features
- DreamerV3: allow
num_env_runners \> 0(#58495)
💫 Enhancements
- 🔥
MetricsLoggertweaks+ Stats rewrite (#56838) - move restart message into
EnvRunner(#56750) - make “Footsies” less verbose (optionally) (#58939)
- update an
AlgorithmConfigdeprecated argument with incorrect behavior/semantics (#59138) - Examples/docs cleanup:
- merge tuned examples into
examples/(#58893) - move old API examples (#59159)
- move example run scripts (#59160)
- remove Torch 2.x doc tied to removed benchmarks (#59173)
- remove rllib/benchmark(s) folder from RLlib directory (#59158)
- merge tuned examples into
- Testing / CI & infra cleanup (part of a larger effort to organize + harden RLlib testing):
- clean up tests folder layout in favor of
/component/tests(#58890) - re-enable and fix nightly tests for APPO on Atari and MuJoCo (#58853)
- re-enable all RLlib doctests (#58974)
- add pytest reporting hook (
pytest_runtest_makereport) across tests (#59003) - add/enable RLlib Py3.10 CI lane (#59226)
- fix as-release-test silently failing (#59386)
- fix recursive imports in old test-utils location (#59435)
- Remove
asv.conf.json(#58934) - Update requirement for
byod_rllib.sh(#59157)
- clean up tests folder layout in favor of
🔨 Fixes
- Fix custom model-config mismatch between EnvRunner and Learner (#58739)
- MultiAgentEnvRunner: prevent double-calling connectors (#58931)
- Error handling: log or raise when a case is not fully handled (#58889)
- Error handling: error out when data cannot be loaded (#59002)
- Assorted RLlib bugfixes (#59386)
📖 Documentation
- Update APPO paper reference to link to IMPACT paper (#58935)
Ray Core
🎉 New Features
- Support zero-copy serialization for read-only PyTorch tensors via
RAY_ENABLE_ZERO_COPY_TORCH_TENSORS(#57639) - Add
.rayignorefile support for controlling cluster uploads (#58500) - Improve large-scale resource view synchronization through sync message batching (#57641)
- Autoscaler with cloud resource availability awareness (#58623)
- Token authentication UX improvements with new
AuthenticationErrorexception (#58737) - Support
X-Ray-Authorizationfallback header for auth token in dashboard (#58819)
💫 Enhancements
- Limit core worker gRPC reply threads to 2 by default via
RAY_core_worker_num_server_call_thread(#58771) - Make accessor node address and liveliness cache thread safe (#58947)
- Create
OtlpGrpcMetricExporterwrapper to log export failures (#58929) - Print detailed exception information when failing to report events (#58953)
- Simplify local/global GC logic (#58671)
- Surface correct error message when
get_if_exists=Truefor actor lookup (#58628) - Throw
AuthenticationErrorfrom Python for token loading errors (#59031) - Use
secrets.token_hex(32)to generate auth tokens (#58818) - Remove
AUTH_MODE=tokencheck inget-auth-tokenCLI (#58848) - Introduce core chaos network release tests (#58868)
🔨 Fixes
- Fix
grpc_authentication_server_interceptorsstreaming response handling (#59104) - Fix handle leak in
IsProcessAliveon Windows (#59106) - Fix counter metric default branch for
RAY_enable_open_telemetry(#59095) - Fix leaking metric recorder in tests (#58952)
- Fix crash when using JVM HDFS by adding
RAY_DISABLE_FAILURE_SIGNAL_HANDLERoption (#58984) - Fix heap corruption in
RayletClientcausing driver crash (use-after-free) (#58660) - Use
shared_ptrforpins_in_flight_to prevent use-after-free (#58744) - Remove deprecated
add_command_alias(#58719) - Remove
cluster_full_of_actors_detected_*fields (unused in autoscaler v2) (#59052)
📖 Documentation
- Add
token-auth.mddocumentation page (#58829) - Update KubeRay authentication guide to use native Ray token authentication (#58729)
Dashboard
💫 Enhancements
- Add
time_to_first_batchandget_ref_bundlesmetrics to data dashboard (#58912) - Update Ray Data histograms to show percentiles grouped by operator (#58650)
Ray Wheels and Images
- Upgraded
rich,cupy-cuda12x, andmemray(#58983) - Upgraded
lxmlto 6.0.2 (#58808) - Upgraded
requestsfrom 2.32.3 to 2.32.5 (#58724) - Added
openlineage-pythonin the dependency set (#58724)
Thanks
Thank you to everyone who contributed to this release! @xinyuangui2, @harshit-anyscale, @Sparks0219, @israbbani, @siyuanfoundation, @robertnishihara, @thomasdesr, @spencer-p, @aslonnie, @ZacAttack, @soodoshll, @marosset, @simeetnayan81, @soffer-anyscale, @abrarsheikh, @400Ping, @richo-anyscale, @as-jding, @rueian, @kshanmol, @yancanmao, @zzchun, @coqian, @matthewdeng, @Future-Outlier, @YoussefEssDS, @ykdojo, @pseudo-rnd-thoughts, @lowdy1, @ArturNiederfahrenhorst, @myandpr, @komikndr, @machichima, @RisinT96, @curiosity-hyf, @alanwguo, @CaiZhanqi, @Aydin-ab, @MengjinYan, @suzuri-lollipop, @jeffreyjeffreywang, @rushikeshadhav, @alexeykudinkin, @meAmitPatil, @zcin, @teddygood, @elliot-barn, @dayshah, @srinathk10, @XLC127, @simonsays1980, @kevin85421, @bveeramani, @kunling-anyscale, @khluu, @andrew-anyscale, @KaisennHu, @kouroshHakha, @ryankert01, @pavitrabhalla, @jjyao, @dragongu, @SolitaryThinker, @justinrmiller, @wxwmd, @Haustle-v, @TimothySeah, @goutamvenkat-anyscale, @liulehui, @raulchen, @HassamSheikh, @Priya-753, @vaishdho1, @dancingactor, @daiping8, @eloaf, @JasonLi1909, @rayci-bot, @richardliaw, @SheldonTsen, @Yicheng-Lu-llll, @ktyxx, @pschmutz, @iamjustinhsu, @ahao-anyscale, @cem-anyscale, @eicherseiji, @edoakes, @rajeshg007, @arki05, @andrewsykim, @nrghosh, @ryanaoleary, @kyuds, @Daraan, @can-anyscale, @sampan-s-nayak, @xyuzh, @owenowenisme
2.51.2Ray-2.51.2
- Fix for CVE-2025-62593: reject Sec-Fetch-* other browser-specific headers in dashboard browser rejection logic
2.52.1Ray-2.52.1
- More robust handling for CVE-2025-62593: test for more browser-specific headers in dashboard browser rejection logic
2.52.0Ray-2.52.0
Release Highlights
Ray Core:
- End of Life for Python 3.9 Support: Ray will no longer be releasing Python 3.9 wheels from now on.
- Token authentication: Ray now supports built-in token authentication across all components including the dashboard, CLI, API clients, and internal services. This provides an additional layer of security for production deployments to reduce the risk of unauthorized code execution. Token authentication is initially off by default. For more information, see: https://docs.ray.io/en/latest/ray-security/token-auth.html
Ray Data:
- We’ve added a number of improvements for Iceberg, including upserts, predicate and projection pushdown, and overwrite.
- We’ve added significant improvements to our expressions framework, including temporal, list, tensor, and struct datatype expressions.
Ray Libraries
Ray Data
🎉 New Features:
- Added predicate pushdown rule that pushes filter predicates past eligible operators (#58150, #58555)
- Iceberg support for upsert tables, schema updates, and overwrite operations (#58270)
- Iceberg support for predicate and projection pushdown (#58286)
- Iceberg write datafiles in write() then commit (#58601)
- Enhanced Unity Catalog integration (#57954)
- Namespaced expressions that expose PyArrow functions (#58465)
- Added version argument to read_delta_lake (#54976)
- Generator UDF support for map_groups (#58039)
- ApproximateTopK aggregator (#57950)
- Serialization framework for preprocessors (#58321)
- Support for temporal, list, tensor, and struct datatypes (#58225)
💫 Enhancements:
- Use approximate quantile for RobustScaler preprocessor (#58371)
- Map batches support for limit pushdown (#57880)
- Make all map operations zero-copy by default (#58285)
- Use tqdm_ray for progress reporting from workers (#58277)
- Improved concurrency cap backpressure tuning (#58163, #58023, #57996)
- Sample finalized partitions randomly to avoid lens effect (#58456)
- Allow file extensions starting with '.' (#58339)
- Set default file_extensions for read_parquet (#56481)
- URL decode values in parse_hive_path (#57625)
- Streaming partition enforces row_num per block (#57984)
- Streaming repartition combines small blocks (#58020)
- Lower DEFAULT_ACTOR_MAX_TASKS_IN_FLIGHT_TO_MAX_CONCURRENCY_FACTOR to 2 (#58262)
- Set udf-modifying-row-count default to false (#58264)
- Cache PyArrow schema operations (#58583)
- Explain optimized plans (#58074)
- Ranker interface (#58513)
🔨 Fixes:
- Fixed renamed columns to be appropriately dropped from output (#58040, #58071)
- Fixed handling of renames in projection pushdown (#58033, #58037)
- Fixed broken LogicalOperator abstraction barrier in predicate pushdown rule (#58683)
- Fixed file size ordering in download partitioning with multiple URI columns (#58517)
- Fixed HTTP streaming file download by using open_input_stream (#58542)
- Fixed expression mapping for Pandas (#57868)
- Fixed reading from zipped JSON (#58214)
- Fixed MCAP datasource import for better compatibility (#57964)
- Avoid slicing block when total_pending_rows < target (#58699)
- Clear queue for manually marked execution_finished operators (#58441)
- Add exception handling for invalid URIs in download operation (#58464)
- Fixed progress bar name display (#58451)
📖 Documentation:
- Documentation for Ray Data metrics (#58610)
- Simplify and add Ray Data LLM quickstart example (#58330)
- Convert rST-style to Google-style docstrings (#58523)
🏗 Architecture:
- Removed stats update thread (#57971)
- Refactor histogram metrics (#57851)
- Revisit OpResourceAllocator to make data flow explicit (#57788)
- Create unit test directory for fast, isolated tests (#58445)
- Dump verbose ResourceManager telemetry into ray-data.log (#58261)
Ray Train
🎉 New Features:
- Result::from_path implementation in v2 (#58216)
💫 Enhancements:
- Exit actor and log appropriately when poll_workers is in terminal state (#58287)
- Set JAX_PLATFORMS environment variable based on ScalingConfig (#57783)
- Default to disabling Ray Train collective util timeouts (#58229)
- Add SHUTTING_DOWN TrainControllerState and improve logging (#57882)
- Improved error message when calling training function utils outside Ray Train worker (#57863)
- FSDP2 template: Resume from previous epoch when checkpointing (#57938)
- Clean up checkpoint config and trainer param deprecations (#58022)
- Update failure policy log message (#58274)
📖 Documentation:
- Ray Train Metrics documentation page (#58235)
- Local mode user guide (#57751)
- Recommend tree_learner="data_parallel" in examples for distributed LightGBM training (#58709)
Ray Serve
🎉 New Features:
- Custom request routing with runtime environment support. Users can now define custom request router classes that are safely imported and serialized using the application's runtime environment, enabling advanced routing logic with custom dependencies. (#56855)
- Custom autoscaling policies with enhanced logging. Deployment-level and application-level autoscaling policies now display their custom policy names in logs, making it easier to debug and monitor autoscaling behavior. (#57878)
- Audio transcription support in vLLM backend. Ray Serve now supports transcription tasks through the vLLM engine, expanding multimodal capabilities. (#57194)
- Data parallel attention public API. Introduced a public API for data parallel attention, enabling efficient distributed attention mechanisms for large-scale inference workloads. (#58301)
- Route pattern tracking in proxy metrics. Proxy metrics now expose actual route patterns (e.g.,
/api/users/{user_id}) instead of just route prefixes, enabling granular endpoint monitoring without high cardinality issues. Performance impact is minimal (~1% RPS decrease). (#58180) - Replica dependency graph construction. Added
list_outbound_deployments()method to discover downstream deployment dependencies, enabling programmatic analysis of service topology for both stored and dynamically-obtained handles. (#58345, #58350) - Multi-dimensional replica ranking. Introduced
ReplicaRankschema with global, node-level, and local ranks to support advanced coordination scenarios like tensor parallelism and model sharding across nodes. (#58471, #58473) - Proxy readiness verification. Added a check to ensure proxies are ready to serve traffic before
serve.run()completes, improving deployment reliability. (#57723) - IPv6 socket support. Ray Serve now supports IPv6 networking for socket communication. (#56147)
💫 Enhancements:
- Selective throughput optimization flag overrides. Users can now override individual flags set by
RAY_SERVE_THROUGHPUT_OPTIMIZEDwithout manually configuring all flags, improving flexibility for performance tuning. (#58057) - OpenTelemetry metrics enabled by default. Ray now uses OpenTelemetry as the default metrics backend, with updated metric names (
ray_serve_*) and improved observability infrastructure. (#56432) - Cleaner long-poll communication. Removed actor handles from
RunningReplicaInfoobjects passed in long-poll updates, avoiding complex reference counting patterns. (#58174) - Improved replica config handling. Excluded
IMPLICIT_RESOURCE_PREFIXfromReplicaConfig.ray_actor_optionsto prevent internal resource annotations from leaking into user-visible configurations. (#58275) - Custom autoscaling telemetry. Added telemetry tracking for custom autoscaling policy usage. (#58336)
- Proxy target group control. Added
from_proxy_managerargument toget_target_groups()for finer control over returned routing targets. (#57620)
🔨 Fixes:
- Fixed default deployment name in async inference. Corrected the default deployment name which was changed to
_TaskConsumerWrapperduring async inference implementation. (#57664) - Fixed proxy location handling in CLI and Python API.
serve runnow respectsproxy_locationfrom config files instead of hardcodingEveryNode, andserve.start()no longer defaults toHeadOnlywhenhttp_optionsare provided without an explicit location. (#57622) - Fixed deprecated Stable Diffusion model in example. Updated documentation example to use a current model after
stabilityai/stable-diffusion-2was deprecated on Hugging Face. (#58609)
📖 Documentation:
- KV-cache offloading user guide. Added comprehensive documentation for KV-cache offloading in LLM deployments. (#58025)
- Model loading documentation. Documented best practices and options for loading models in Ray Serve. (#57922)
- Cross-node tensor/pipeline parallelism examples. Added examples and documentation for running TP/PP across multiple nodes. (#57715)
- Data parallel attention documentation. Created user guide for data parallel attention with architecture diagrams. (#58301, #58543)
- Custom autoscaling policy examples. Added missing imports and improved clarity in autoscaling policy examples. (#57896, #58170)
- Async inference documentation improvements. Added notes about task consumer replica configurations and fixed the end-to-end example. (#58493)
- Callback documentation. Added documentation for using callbacks in Ray Serve. (#58713)
- Monitoring and troubleshooting improvements. Enhanced monitoring section with links to Anyscale troubleshooting resources. (#58472)
- Minor documentation fixes. Fixed spelling errors and improved docstring alignment. (#58172, #58233)
🏗 Architecture refactoring:
- Replica rank management refactoring. Extracted generic
RankManagerclass with type-safeReplicaRankrepresentation, creating a cleaner foundation for future multi-level rank support. (#58471, #58473)
Ray Tune
💫 Enhancements:
RLlib
🎉 New Features:
- Support for vectorize modes in SingleAgentEnvRunner.make_env (#58410)
- Support for composed spaces in Offline RL (#58594)
- Enhanced support for complex observations in SingleAgentEpisode (#57017)
- Prometheus metrics support for selected components (#57932)
💫 Enhancements:
- Improve test_single_agent_env_runner to prevent flaky tests (#58397)
- LINT improvements with enabled ruff imports across multiple modules (#56737, #56734, #56741, #56742, #56744, #56746)
🔨 Fixes:
- Resolve bug that fails to propagate model_config to MultiAgentRLModule instances (#58243)
- Fixed access to self._minibatch_size (#58595)
- Broken restore from remote - Add missing FileSystem argument (#58324)
- Fixed deterministic sampling and training documentation link (#58494)
- Corrected typo in pyspiel import error message (#54618)
📖 Documentation:
- Add reinforcement learning example illustrating GPU-to-GPU RDT and GRPO (#57961)
Ray Core
🎉 New Features:
- Token-based authentication across all Ray components (#58046, #58047, #58176, #58209, #58276, #58281, #58308, #58333, #58368, #58395, #58405, #58408, #58424, #58557, #57835, #58566, #58591)
- OpenTelemetry enabled by default for improved observability (#56432)
- Fallback strategy scheduling logic (#56369)
- TPU utility functions to support slice placement groups (#56723)
- Exponential backoff for retryable gRPCs (#56568)
- Option for in-flight RPC failure injection (#58512)
- Release test to simulate network transient errors via iptables (#58241)
- Nightly release test with cross-AZ fault injection (#57579)
- Owned object spill metrics (#57870)
- Monitoring in raylet for resource view (#58382)
- IPv6 support for sockets (#56147)
💫 Enhancements:
- Fault-tolerant RPCs: KillActor, CancelRemoteTask, NotifyGCSRestart, and ReleaseUnusedBundles (#57648, #57945, #57965)
- Use graceful actor shutdown when GCS polling detects actor ref deleted (#58605)
- Use graceful shutdown path when actor OUT_OF_SCOPE (del actor) (#57090)
- Improved actor kill logs (#58544)
- Scheduling detached actor with placement group not recommended (#57726)
- Better handling of detached actor restarts (#57931)
- Enhanced ray.get thread safety (#57911)
- Making concurrent ray.get requests for the same object thread-safe (#58606)
- Move request ID creation to worker to address plasma get perf regression (#58390)
- Make GlobalState lazy initialization thread-safe (#58182)
- Reporter agent can get PID via RPC to raylet (#57004)
- Add tee logging for subprocess exit codes in ray start --block (#57982)
- Add entrypoint log for jobs (#58300)
- Cleaner error message for exceeding list actors limit (#58255)
- Clean up NODE_DIED task error message (#58638)
- Improved histogram metrics midpoint calculation (#57948)
- Migrated from STATS to metric interface in RPC components (#57926)
- Kill STATS in core worker component (#58060)
- Kill STATS in object manager component (#57974)
- Improve scheduler_placement_time_s metric (#58217)
- Refactor OpenTelemetry environment variable handling (#57910)
- Add option to disable OpenTelemetry SDK error logs (#58257)
- Improved cgroups support (#57776, #57864, #57731, #58017, #58028, #58059, #58064, #58577)
- Use GetNodeAddressAndLiveness in raylet client pool (#58576)
- Ray Direct Transport improvements with NIXL integration (#57671, #58550, #58548, #56783, #58263)
- Fix symmetric-run (#58337)
- Make worker connection timeout parameters configurable (#58372)
- Define env for controlling UVloop (#58442)
- Allow 60 seconds for dashboard to start (#58341)
- Report driver stats (#58045)
- Fix idle node termination on object pulling (#57928)
- Check if temp_dir is subdir of virtualenv to prevent runtime virtualenv problems (#58084)
🔨 Fixes:
- Fixed use-after-free in RayletClient (#58747)
- Fixed deadlock when cancelling stale requests on in-order actors (#57746)
- Fixed "RayEventRecorder::StartExportingEvents() should be called only once" error (#57917)
- Fixed raylet shutdown races (#57198)
- Fixed incorrect usage of gRPC streaming API in ray syncer (#58307)
- Fixed log monitor seeking bug after log rotation (#56902)
- Fixed idempotency issues in RequestWorkerLease for scheduled leases (#58265)
- Fixed RAY_CHECK(inserted) inside reference counter (#58092)
- Fixed static type hints for ActorClass when setting options (#58439)
- Fixed exception type for accelerator ID visibility check (#58269)
- Fixed transport type handling in DAG node initialization (#57987)
- Fixed RAY_NODE_TYPE_NAME handling when autoscaler is in read-only mode (#58460)
- Ensure client_call_manager_ outlives metrics_agent_client_ in core worker (#58315)
- Fixed header validation in dashboard tests (#58648)
- Validation of Ray-on-Spark-on-YARN mode to enable it to run (#58335)
📖 Documentation:
- Fix pattern_async_actor demo typo (#58486)
- Add limitations of RDT documentation (#58063)
- Add actor+job+node event to ray event export documentation (#57930)
- Remove implementation details from get_runtime_context docstring (#58212)
- Improved monitoring section with links (#58472)
🏗 Architecture:
- Refactor ActorInfoAccessor in gcs_client to be mockable (#57241)
- Refactor reference_counter out of memory store and plasma store (#57590)
- Remove reference counter mock for real reference counter in testing (#57178)
- Split raylet cython file into multiple files (#56575)
- Move ray_syncer to top level directory (#58316)
- Move python_callbacks to common (#57909)
- Consolidate find_free_port to network_utils (#58304)
- Implement event merge logic at export time (#58070)
- Feature flag for enabling ray export event (#57999)
- Add comments explaining ray_syncer_ channels in Raylet (#58342)
- Integration tests for task event generation (#57636)
Dashboard
💫 Enhancements:
- Added percentage usage graphs for resources (#57549)
- Sub-tabs with full Grafana dashboard embeds on Metrics tab (#57561)
- Added queued blocks to operator panels (#57739)
- Improved operator metrics logging (#57702)
- Make do_reply accept status_code instead of success bool (#58384)
- Add denial of fetch headers (#58553)
🔨 Fixes:
- Fixed broken Ray Data per node metrics due to unsupported operator filter (#57970)
- Filtered out ANSI escape codes from logs (#53370)
📖 Documentation:
- Expose dashboard URL when deploying on Yarn using Skein (#57793)
Autoscaler + KubeRay
🎉 New Features:
- KubeRay autoscaling support with top-level Resources and Labels fields (#57260)
- Bundle label selector support in request_resources SDK (#54843)
💫 Enhancements:
📖 Documentation:
- Label selector guide (#58157)
- Add minimum version requirement on kai-scheduler (#58161)
- Mention RayJob gang scheduling for Yunikorn (#58375)
- Add Volcano RayJob gang scheduling example (#58320)
- Add KAI scheduler integration documentation (#54857)
- Kuberay sidecar mode (#58273)
- Update RayJob documentation with new DeletionStrategy (#58306)
- Add guidance for RayService initialization timeout (#58238)
- Update version to 1.5.0 (#58452)
- Add output example of CLI commands (#58078)
- Fix invalid syntax in label_selector (#58352)
Thank You to all the Contributors! @marosset, @curiosity-hyf, @bveeramani, @Future-Outlier, @saihaj, @ZacAttack, @ArthurBook, @crypdick, @Aydin-ab, @elliot-barn, @Kunchd, @justinvyu, @jjyao, @gangsf, @sunsetxh, @Daraan, @justinyeh1995, @MatthewCWeston, @kyuds, @daiping8, @sauravvenkat, @omatthew98, @CowKeyMan, @morotti, @israbbani, @goutamvenkat-anyscale, @fscnick, @Zakelly, @xyuzh, @kouroshHakha, @owenowenisme, @Qiaolin-Yu, @czgdp1807, @shen-shanshan, @wph95, @iamjustinhsu, @MengjinYan, @jugalshah291, @Yicheng-Lu-llll, @ryanaoleary, @nadongjun, @xinyuangui2, @ideal, @my-vegetable-has-exploded, @lucaschadwicklam97, @tianyi-ge, @ahao-anyscale, @abrarsheikh, @Blaze-DSP, @rueian, @thomasdesr, @CaiZhanqi, @harshit-anyscale, @jeffreyjeffreywang, @TimothySeah, @codope, @sampan-s-nayak, @andrewsykim, @xingsuo-zbz, @aslonnie, @OneSizeFitsQuorum, @ryankert01, @Sparks0219, @soffer-anyscale, @akyang-anyscale, @alanwguo, @chrisfellowes-anyscale, @richo-anyscale, @alexeykudinkin, @JasonLi1909, @ruisearch42, @EkinKarabulut, @MarcoGorelli, @SolitaryThinker, @srinathk10, @dayshah, @richardliaw, @pseudo-rnd-thoughts, @win5923, @axreldable, @matthewdeng, @ArturNiederfahrenhorst, @can-anyscale, @khluu, @landscapepainter, @kevin85421, @seanlaii, @edoakes, @nrghosh, @eicherseiji, @Artimislyy, @cem-anyscale, @coqian, @chiayi, @liulehui
2.51.1Ray-2.51.1
- Reuse previous metadata if transferring the same tensor list with
nixl(https://github.com/ray-project/ray/pull/58309)
2.51.0Ray-2.51.0
Release Highlights
Ray Train:
- Ray Train v2 is now enabled by default! Ray Train v2 provides usability and stability improvements, as well as new features. For more details, see the REP and Migration Guide. To disable Ray Train v2, set the environment variable
RAY_TRAIN_V2_ENABLED=0.
Ray Serve:
- Application-level autoscaling: Introduces custom autoscaling policies that operate across all deployments in an application, enabling coordinated scaling decisions based on aggregate metrics. This is a significant advancement over per-deployment autoscaling, allowing for more intelligent resource management at the application level.
- Enhanced autoscaling capabilities with replica-level metrics: Wires up
AutoscalingContextwithtotal_running_requests,total_queued_requests, andtotal_num_requests, plus adds support for min, max, and time-weighted average aggregation functions. These improvements give users fine-grained control to implement sophisticated custom autoscaling policies based on real-time workload metrics.
Ray Libraries
Ray Data
🎉 New Features:
- Added enhanced support for Unity Catalog integration (#57954, #58049)
- New expression evaluator infrastructure for improved query optimization (#57778, #57855)
- Support for SaveMode in write operations (#57946)
- Added approximate quantile aggregator (#57598)
- MCAP datasource support for robotics data (#55716)
- Callback-based stat computation for preprocessors and ValueCounter (#56848)
- Support for multiple download URIs with improved error handling (#57775)
💫 Enhancements:
- Improved projection pushdown handling with renamed columns (#58033, #58037, #58040, #58071)
- Enhanced hash-shuffle performance with better retry policies (#57572)
- Streamlined concurrency parameter semantics (#57035)
- Improved execution progress rendering (#56992)
- Better handling of empty columns in pandas blocks (#57740)
- Enhanced support for complex data types and column operations (#57271)
- Reduced memory usage with improved streaming generator backpressure (#57688)
- Enhanced preemption testing and utilities (#57883)
- Improved Download operator display names (#57773)
- Better handling of variable-shaped tensors and tensor columns (#57240)
- Optimized aggregator execution with out-of-order processing by default (#57753)
🔨 Fixes:
- Fixed renamed columns to be appropriately dropped from output (#58040, #58071)
- Fixed handling of renames in projection pushdown (#58033, #58037)
- Fixed vLLMEngineStage field name inconsistency for images (#57980)
- Fixed driver hang during streaming generator block metadata retrieval (#56451)
- Fixed retry policy for hash-shuffle tasks (#57572)
- Fixed prefetch loop to avoid blocking on fetches (#57613)
- Fixed empty projection handling (#57740)
- Fixed errors with concatenation of mixed pyarrow native and extension types (#56811)
📖 Documentation:
- Updated document embedding benchmark to use canonical Ray Data API (#57977)
- Improved concurrency-related documentation (#57658)
- Updated preprocessing and data handling examples
Ray Train
🎉 New features
- Turn on Train v2 by default (#57857)
- Top-level
ray.trainaliases for public APIs (#57758)
💫 Enhancements
- Raise clear errors when mixing v1/v2 APIs (#57570)
- JAX backend: add
jax.distributed.shutdown()forJaxBackend(#57802) - Update
TrainingFailedErrormodule (#57865) - Improve deprecation handling when
ray.trainmethods are called fromray.tune(#57810) - Enable deprecation warnings for legacy XGBoost/LightGBM trainers (#57280)
🔨 Fixes
- Fix
ControllerErrortriggered byafter_worker_group_poll_statuserrors (#57869) - Fix
iter_torch_batchesuse ofray.train.torch.get_deviceoutside Train (#57816) - Fix exception-queue race condition in
ThreadRunner(#57249)
📖 Documentation
- Add validation and details to checkpoint docs (#57065)
🏗 Architecture / tests
- Enable Train v2 across test suites; migrate remaining tests and isolate/disable stragglers (#56868, #57256, #57534, #57722, #57764)
- Isolate circular-dependency tests and resolve circular imports (#57710, #56921)
- Replace Checkpoint Manager Pydantic v2 APIs with v1 (#57147)
- Bump test timeouts (
test_util,torch_trainer) (#57939, #57873)
Ray Tune
💫 Enhancements:
- Updated release tests to import from tune (#57956)
- Better integration with Train V2 backend
Ray Serve
🎉 New Features:
- Application-level autoscaling. Introduces support for custom autoscaling policies that operate across all deployments in an application, enabling coordinated scaling decisions based on aggregate metrics. (#57535, #57548, #57637, #57756)
- Autoscaling metrics aggregation functions. Adds support for min, max, and time-weighted average aggregation over timeseries data, providing more flexible autoscaling control. (#56871)
- Enhanced autoscaling context with replica-level metrics. Wires up AutoscalingContext constructor arguments to expose total_running_requests, total_queued_requests, and total_num_requests for use in custom autoscaling policies. (#57202)
- Multiple task consumers in a single application. Ray Serve applications can now run multiple task consumer deployments concurrently. (#56618)
💫 Enhancements:
- Reconfigure invoked on replica rank changes. The reconfigure method now receives both user_config and rank parameters when ranks change, enabling replicas to adapt their configuration dynamically. (#57091)
- Celery adapter configuration improvements. Added default serializer and new configuration fields to enhance Celery integration flexibility. (#56707)
- AutoscalingContext promoted to public API. The autoscaling context is now officially part of the public API with comprehensive documentation. (#57600)
- Async inference telemetry. Added telemetry tracking to monitor the number of replicas using asynchronous inference. (#57665)
- Rank logging verbosity reduced. Changed seven rank-related INFO logs to DEBUG level, reducing log noise during normal operations. (#57831)
- Controller logging optimized. Removed expensive debug logs from the controller that were costly in large clusters. (#57813)
🔨 Fixes:
- Max constructor retry count test fixed for Windows. Adjusted test resource requirements to account for Windows process creation overhead compared to Linux forking. (#57541)
- Streaming test stability improvements. Added synchronization mechanisms to prevent chunk coalescing and rechunking, eliminating test flakiness. (#57592, #57728)
- Autoscaling test deflaking. Fixed race conditions in application-level autoscaling tests and removed flaky min aggregation test scenario. (#57784, #57967)
- State API usage test corrected. Fixed a unit test that was broken but not running in CI. (#56948)
- Controller recovery logging condition fixed. Updated test condition to properly verify debug and JSON logs after controller recovery. (#57568)
📖 Documentation:
- Custom autoscaling documentation. Added comprehensive guide for implementing custom autoscaling policies with examples and best practices. (#57600)
- Replica ranks documentation. Documented the replica rank feature, including how ranks are assigned and how to use them in reconfigure methods. (#57649)
- Application-level autoscaling guide. Added documentation explaining how to configure and use application-level autoscaling policies. (#57756)
- Autoscaling documentation improvements. Updated serve autoscaling docs with clearer explanations and examples. (#57652)
- Performance flags documentation. Documented performance-related configuration flags for Ray Serve. (#57845)
- Metrics documentation fix. Corrected ray_serve_deployment_queued_queries metric name discrepancy in documentation. (#57629)
- AutoscalingContext import added to examples. Fixed missing import statement in custom autoscaling policy example. (#57876)
- App builder guide typo corrected. Fixed command syntax error in typed application builder example. (#57634)
- Celery filesystem broker note. Added warning about using filesystem as a broker in Celery workers. (#57686)
- Async inference alpha stage warning. Added notice that async inference is in alpha stage. (#57268)
🏗 Architecture refactoring:
- Autoscaling control moved to application state. Migrated autoscaling control loop from deployment state to application state, preparing for application-level autoscaling. (#57548)
- Async capability enum removed. Cleaned up unused async capability enum from codebase. (#57666)
Ray Serve/Data LLM
🎉 New Features:
- Updated vLLM to 0.11.0 and Nixl to 0.6.0 (#57201)
- Video processor support for multimodal pipelines (#56785)
- Enhanced callback API for engine customization (#57257)
- Unified and extended builder configuration for LLM deployments (#57724)
💫 Enhancements:
- Protocol-based typing improvements and cleaner inheritance structure (#57743)
- Better engine metrics enabled by default (#57615)
- Simplified NIXL dependency management in ray-llm images (#57706)
- Per-stage map kwargs for LLM processor preprocessing/postprocessing (#57826)
- Improved architecture documentation (#57830)
- Better code structure alignment with architectural design (#57889)
- Enhanced multimodal support with Deepseek compatibility (#56906)
🔨 Fixes:
- Fixed NIXL limitations with proper exception handling (#58159)
- Improved runai_streamer for vLLM 0.10.2+ integration (#56906)
📖 Documentation:
- Added comprehensive architecture documentation for Ray Serve LLM (#57830)
- Reorganized LLM documentation with improved navigation (#57787)
- Added benchmark page for performance reference (#57960)
- Converted quick-start guide to MyST Markdown (#57782)
- Better organization of Ray Serve LLM documentation (#57181?)
RLlib
🎉 New Features:
- Prometheus metrics support for selected RLlib components (#57932)
- Enhanced support for complex observations in SingleAgentEpisode (#57017)
💫 Enhancements:
- LINT improvements with enabled ruff imports for rllib/utils (#56737)
- Better type hints for learner_connector (#57673)
- Improved throughput metrics to avoid biasing (#57215)
🔨 Fixes:
- Fixed segment_tree.py edge case (#57599)
- Fixed small bug in type hints (#57673)
Ray Core
🎉 New Features:
- Enhanced Ray Direct Transport (RDT) with improved NIXL integration and garbage collection (#57671, #57603, #58159)
- Cgroups support improvements with better system resource management (#57776, #57864, #57731, #58017, #58028, #58064)
- Fault-tolerant RPC improvements for better distributed reliability (#57786, #57861)
- Exponential backoff for retryable gRPCs (#56568)
💫 Enhancements:
- Migrated from STATS to metric interface in RPC components (#57926)
- Improved histogram metrics midpoint calculation (#57948)
- Made FreeObjects non-fatal for better error handling (#57550)
- Enhanced ReleaseUnusedBundles fault tolerance (#57786)
- Made DrainRaylet and ShutdownRaylet fault tolerant (#57861)
- Better error handling for metric and event exporter agent (#57925)
- Improved raylet shutdown process and file organization (#57817)
- Reporter agent can now get PID via RPC to raylet (#57004)
- Enhanced ray.get thread safety (#57911)
- Configurable proto naming during event JSON conversion (#57705)
- Better handling of detached actor restarts (#57931)
- Improved lease rescheduling in local lease manager during node draining (#57834)
🔨 Fixes:
- Fixed "RayEventRecorder::StartExportingEvents() should be called only once" error (#57917)
- Fixed deadlock when cancelling stale requests on in-order actors (#57746)
- Fixed raylet shutdown races (#57198)
- Fixed log monitor seeking bug after log rotation (#56902)
- Deflaked multiple test suites for better CI reliability
- Fixed various memory and resource management issues
- Better handling of actor and task failures
📖 Documentation:
- Added JaxTrainer API overview to Ray docs (#57182)
- Fixed various typos and documentation issues
- Updated autoscaling and system configuration guides
- Enhanced SLURM documentation with symmetric-run support (#56775)
🏗 Architecture refactoring:
- Dashboard API server subprocesses moved into system cgroup (#57864)
- Driver moved into workers cgroup for better isolation (#57776)
- Improved worker-raylet interface separation (#57804)
- Better plasma store provider architecture
Dashboard
💫 Enhancements:
- Added percentage usage graphs for resources (#57549)
- Introduced sub-tabs with full Grafana dashboard embeds on Metrics tab (#57561)
- Added queued blocks to operator panels (#57739)
- Improved operator metrics logging for better clarity (#57702)
- Better filtering and display in job lists
🔨 Fixes:
- Fixed filtering issue in job list (#56946)
- Fixed incomplete card content on overview page (#56947)
- Filtered out ANSI escape codes from logs (#53370)
Autoscaler
🎉 New Features:
- KubeRay autoscaling support with top-level Resources and Labels fields (#57260)
- Bundle label selector support in request_resources SDK (#54843)
- Application Gateway for Containers as ingress for Ray clusters on Azure
💫 Enhancements:
- Azure improvements: Cleaning up extra resources (MSI, VNET, NSG) during cluster teardown (#57610)
- Updated defaults for Azure cluster templates (#57716)
- Better availability zone support for Azure node pools (#55532)
- Hello world release tests for Azure and GCE (#57597, #57695)
- Improved cluster resource state handling to fix over-provisioning (#57130)
🔨 Fixes:
- Fixed autoscaler state synchronization issues (#57010)
- Better handling of node state information (#57130)
- Improved timeout handling for patch requests (#56605)
Thank you to everyone who contributed to this release! Special thanks to all the contributors who helped make Ray 2.51.0 possible through bug fixes, features, documentation improvements, and testing efforts.
2.50.1Ray-2.50.1
Ray Core: Fix deadlock when cancelling stale requests on in-order actors (#57746)
2.50.0Ray-2.50.0
Release Highlights
Ray Data: This release offers many updates to Ray Data, including:
- The default shuffle strategy is now changed from sort-based to hash-based. This will result in much lower peak memory usage and improved shuffle performance for aggregations.
- We’ve added a new expression API enables predicate-based filtering, UDF transformations with
with_column, and column aliasing for more powerful data transformations - Ray Data LLM has a number of new enhancements for multimodal data pipelines, including multi-node tensor and pipeline parallelism support per replica and ability to share vLLM engines across processors.
Ray Core:
Alpha release of Ray Direct Transport (formerly GPU objects) - simply enable it by adding the tensor_transport parameter to the existing native Ray Core API. This keeps GPU data in GPU memory until a transfer is needed, avoiding expensive serialization and copies to and from the Ray object store. It uses efficient data transports such as collective communication libraries (GLOO or NCCL) or point-to-point RDMA (via NVIDIA’s NIXL) to transfer data directly between devices, including both CPUs and GPUs.
Ray Train:
Local mode support for multi-process training with torchrun, enhanced checkpoint management with new upload modes and validation functions
Ray Serve:
- Async Inference alpha release - New Ray Serve APIs for supporting long-running asynchronous inference tasks, such as for video or large document processing. Includes capabilities for using different message brokers, adapters like
celeryand DLQ. - Support for replica ranks - Replica level ranks are added for supporting large-model inference use-cases such as wide Data Parallel and Expert Parallel setups.
- FastAPI factory pattern support - Enables using FastAPI plugins that are not serializable via cloudpickle.
- Throughput optimizations - Enable these using the
RAY_SERVE_THROUGHPUT_OPTIMIZEDenvironment variable.
RLLib:
Add StepFailedRecreateEnv exception for users with unsatisfiable environments
Ray Serve/Data LLM:
Improvements to multi node serving, loading models from remote storages, and sharing resources for efficiency (fractional gpus, sharing gpus on a data pipeline with shared stages)
Ray Libraries
Ray Data
🎉 New Features:
- Expression and Filtering API: New expression API enables predicate-based filtering, UDF transformations with with_column, and column aliasing for more powerful data transformations (#56716, #56313, #56550, #55915, #55788, #56193, #56596)
- Added support for projection pushdown into Parquet reads (#56500)
- New download expression enables efficient loading of data from columns containing URIs with improved performance and error handling (#55824, #56462, #56294, #56852, #57146)
- New
explain()API provides insights into dataset execution plans (#55482) - Added
streaming_train_test_splitto avoid materialization for train/test splits (#56803) - Ray Data LLM:
- Enabled multi-node tensor and pipeline parallelism for LLM processing (#56779)
- Added
chat_template_kwargsparameter for customizing chat templates (#56490) - Added support for OpenAI's nested image URL format in multimodal pipelines (#56584)
- vLLM engines can now be shared across sequential processors for better resource utilization (#55179)
- Enhanced Dataset.stats() output with input/output row counts per operator (#56040)
- Added new metrics for task duration, inputs per task, and output blocks (#56958, #56379)
- Time to first batch metric for better iteration performance monitoring (#55758)
- Added type-specific aggregators for numerical, categorical, and vector columns (#56610)
- Added fine-grained concurrency controls with
max_task_concurrencyand resource allocation options (#56370, #56381)
💫 Enhancements:
- Join and shuffle improvements:
- Default shuffle strategy changed from sort-based to hash-based for better performance (#55510)
- Improved groupby performance with sort-shuffle pull-based approach (#57014)
- Improved join operations with new abstractions (#57022, #56945, #55759)
- Tensor type handling improvements:
- Improved compatibility between PyArrow native types, extension types, and pandas Arrow dtypes (#57566, #57176, #57057)
- Joins now supported with list/tensor non-key columns (#5648)
- Enhanced support for variable-shaped tensor arrays with different dimensions (#57240, #56918, #56457)
- Added serialization/deserialization for PyArrow Extension Arrays (#51972)
- Removing Parquet metadata fetching in ParquetDatasource (#56105)
- Resource requirements (num_cpus/gpus, memory) are now top-level parameters in most APIs for easier configuration (#56419)
- zip() operator now supports combining multiple datasets, not just pairs (#56524)
- Concurrency parameter now accepts tuples for more flexible configuration (#55867)
- Write operations now use iterators instead of accumulating blocks in memory (#57108)
- Reduced memory usage for OneHotEncoder (#56565)
- Reduced memory usage for schema unification (#55880)
- Eliminated unnecessary block copying and double execution of arrow conversions (#56569, #56793)
- Improved Parquet encoding ratio estimation (#56268)
- Enabled per-block limiting for Limit operator (#55239)
- Optimized schema handling with deduplication and removed unnecessary unification (#55854, #55926)
- Improved issue detection with event emission instead of just logs (#55717)
- Better metric organization and external queue metric handling (#55495, #56604)
- New backpressure policy based on downstream processing capacity (#55463)
🔨 Fixes:
- Fixed streaming executor to properly drain output queues (#56941)
- Improved resource management and reservation for operators (#56319, #57123)
- Fixed retry logic for hash shuffle operations (#57575)
- Fix split_blocks produce empty blocks (#57085)
- Initialize datacontext after setting src_fn_name in actor worker (#57117)
- Fix mongo datasource collStats invocation (#57027)
- Fixing empty projection handling in ParquetDataSource (#56299)
- Fix UnboundLocalError when read_parquet with columns and no partitioning (#55820)
- Fix high memory usage with FileBasedDatasource & ParquetDatasource when using a large number of files (#55978)
- [llm] Fixed LLM processor deployment with Ray Serve (#57061)
- [llm] Fixed multimodal image extraction when system prompts are absent (#56435)
- Ignore metadata for pandas block (#56402)
- Remove metadata for hashing + truncate warning logs (#56093)
📖 Documentation:
- Error in ray.data.groupby example in docs. (#57036)
- Update on ray.data.Dataset.map() type hints. (#52455)
- Small typo fix. (#56560)
- Fix a typo. (#56587)
- Fix documentation for new execution options resource limits assignment. (#56051)
- Fix broken code snippets in user guides. (#55519)
- Add Autoscaling Config for Context docs. (#55712)
- Make object store tuning tips consistent with other pages. (#56705)
- New example of how to perform batch inference with embedding models (#56027)
Ray Train
🎉 New Features:
- Local mode support for Ray Train V2
- Add local mode support to Ray Train v2 (num_workers=0). (#55487)
- Add PyTorch local mode support for multi-process training with torchrun. (#56218)
- Async checkpoint and validation for Ray Train
- Add checkpoint_upload_mode to ray.train.report. (#55637)
- Add checkpoint_upload_function to ray.train.report. (#56208)
- Add validate_function and validate_config to ray.train.report. (#56360)
- Add ray.train.get_all_reported_checkpoints method. (#54555)
💫 Enhancements:
- Ray Train V2 Migration
- Implement BaseWorkerGroup for V1/V2 compatibility. (#57151)
- Train Controller is always actor + fix tune integration to enable this. (#55556)
- Refactor AcceleratorSetupCallback to use before_init_train_context. (#56509)
- Move collective implementations to train_fn_utils. (#55689)
- Ray Train Framework support enhancements
- Add hf trainer support for dictionary of datasets. (#56484)
- Add usage tag key for JaxTrainer. (#55887)
- Add Torch process group shutdown timeout. (#56182)
- Ray Train disables blocking get inside async warning. (#56757)
- ThreadRunner captures exceptions from nested threads. (#55756)
- Abort reconciliation thread catches ray.util.state.get_actor exception. (#56600)
- Ray Data Integration
- Minor rework of get_dataset_shard. (#55825)
- Create a deepcopy of the data context on the split coordinator process. (#56211)
- Enable debug logging; fix default actor_locality_enabled. (#56632)
- Refactor call_with_retry into shared library and use it to retry checkpoint upload. (#56608)
- Remove Placement Group on Train Run Abort. (#56011)
🔨 Fixes:
- Fix LightGBM v2 callbacks for Tune only usage. (#57042)
- Ignore tensorflow test for py312. (#56244)
- Revising test_jax_trainer flaky test. (#56854)
- Fix test_jax_trainer imports. (#55799)
- Fix test_jax_trainer::test_minimal_multihost Flaky Test. (#56548)
- Disable drop_last flag to fix division by zero in torch dataloader baselines. (#56395)
- Preload a subset of modules for torch dataloader forkserver multiprocessing. (#56343)
📖 Documentation:
- Add checkpoint_upload_mode to checkpoint docs. (#56860)
- Add get_all_reported_checkpoints and ReportedCheckpoint to API docs. (#56174)
- Fix typo for Instantiating in ray train doc. (#55826)
🏗 Architecture refactoring:
- Release tests for ray train local mode. (#56862)
- Migrate tune_rllib_connect_test & tune_cloud_long_running_cloud_storage to ray train v2. (#56844)
- Add v2 multinode persistence release test. (#56856)
- Attach a quick checkpoint when reporting metrics. (#56718)
- Upgrade tune_torch_benchmark to v2. (#56804)
- Move tune_with_frequent_pausing to Ray Train v2 and tune_tests folder. (#56799)
- Migrate xgboost/lgbm benchmarks to train V2. (#56792)
Ray Tune
🎉 New Features:
- Trigger Checkpointing via Trial / Tuner Callback. (#55527)
💫 Enhancements:
- Improve _PBTTrialState for dev/debugging usage. (#56890)
- Enable Train V2 in Tune unit tests and examples. (#56816)
- Enable Train v2 in doc examples. (#56820)
- Reintroduce keras tune callback. (#57121)
🔨 Fixes:
- Increase tune checkpoint test latency threshold. (#56251)
- Remove a bunch of low-signal/redundant train/air/tune tests. (#56477)
- Remove tune_air_oom test. (#57089)
Ray Serve
🎉 New Features:
- Add tests and DLQ business logic for async inference. (#55608)
- Foundation work for aggregating metrics on controller. (#55568)
- Include custom metrics method and report to controller. (#56005)
- Add post scaling api. (#56135)
- Introduce deployment rank manager. (#55729)
- Integrated deployment ranks with deployment state. (#55829)
- Add rank and world size in replica context. (#55827)
- Added ssl to ray serve. (#55228)
- Custom parameter for downscaling to zero. (#56573)
- Add optional APIType filter to /api/serve/applications/ endpoint. (#56458)
- Make deployment retry configurable. (#56530)
💫 Enhancements:
- Aggregate autoscaling metrics on controller. (#56306)
- Update metrics_utils for future global metrics aggregation in controller. (#55568)
- Use deployment method in access logs for replicas. (#56829)
- Cache router metrics. (#55897)
- Allow same event loop handle shutdown from sync context. (#55551)
- Additional deps to start with prometheus. (#57155)
- Require prefix RAY_SERVE_ for env vars + value verification. (#55864)
- Record queued metrics on timeseries. (#57024)
- Add throughput opt env var for serve. (#55804)
- Fix None pending Request. (#54775)
- Omit unnecessary newlines in the config generated by serve build app:app. (#56609)
- Expose actor name for target group api. (#56738)
🔨 Fixes:
- Fix proxy lua dependency in dockerfile. (#57221)
- Fix non thread safe asyncio task creation in router. (#56124)
- Fix throughput optimized benchmarks. (#56173)
- Move ingress validation for multiple fastapi deployment into client. (#56706)
- Explicitly close choose_replicas_with_backoff async generator. (#56357)
- Fix buffered logging reusing request context. (#56094)
- Use default gc frequency for proxy. (#56511)
- Fixing deployment scoped custom autoscaling. (#56192)
📖 Documentation:
- Stable links for Ray serve. (#56241)
- Add document for using fastapi factory pattern in serve. (#56607)
- Add documentation for async inference (#56453)
🏗 Architecture refactoring:
- Add microbenchmark for throughput optimized configuration. (#55900)
- Only checkpoint controller state when it is confirmed that target state has changed (#55848)
- Proxy Actor Interface. (#56288)
- Allow ProxyActor to return true/false for health check. (#56660)
Ray Serve/Data LLM
🎉 New Features:
- Score API Integration for Serve LLM. (#55914)
- Add start/stop_profile method to LLMServer. (#55920)
- Add prefix cache hit rate to Serve LLM dashboard. (#55675)
- Configure aggregation interval for dashboard. (#56591)
💫 Enhancements:
- Bump vLLM to 0.10.2. (#56535)
- Vllm bump -> 0.10.1.1. (#56099)
- Refactor: Improve Deployment Builder Ergonomics and Code Organization. (#57181)
- Fix build_llm_processor for ServeDeploymentProcessor. (#57061)
- Allow setting data_parallel_size=1 in engine_kwargs. (#55750)
- Allow tuple for concurrency arg. (#55867)
- Fix multimodal image extraction when no system prompt is present. (#56435)
- Support azure and abfss in LLM config. (#56441)
- Support custom s3 endpoint when downloading models from remote. (#55458)
- Skip safetensor file downloads for runai streamer mode. (#55662)
- Support colocating local DP ranks in DPRankAssigner. (#55720)
- Adjust LLM engine timing logic. (#55595)
- Fixed DP DSV3 issues. (#55802)
- Gracefully return timeouts as HTTPException. (#56264)
- Remove upstreamed workarounds 1/3. (#54512)
🔨 Fixes:
- Changed LMCache dependency to use 0.3.3 to avoid regressions in the release test. (#56104)
- Fix doc test for Working with LLMs guide. (#55917)
- Fix sglang byod on release. (#55885)
📖 Documentation:
- Add gpt oss deployment example. (#56400)
- Add serve llm example to index page + other minor fix. (#56788)
- Example serve llm deployment. (#55819)
- Fix serve llm examples. (#56382)
- Docs: serve llm deployment examples refinement. (#56287)
- Add example of serving a VLLM model on fractional gpu. (#57197)
- Add main pytest code snippet to those tests that were missing it. (#57167)
RLlib
🎉 New Features:
- Add StepFailedRecreateEnv exception. (#55146)
💫 Enhancements:
- Add tags to envrunner calls, count in flight requests in ActorManager. (#56930, #56953)
- Add spaces in case only offline data is used. (#56141)
- Add Footsies environment and tests. (#55041)
🔨 Fixes:
- Fix failing env step in MultiAgentEnvRunner. (#55567)
- Fix Metrics/Stats lifetime count and throughput measurement for async remote actors. (#56047)
- Fixes Implementation of Shared Encoder. (#54571)
- Fix MetricsLogger/Stats throughput bugs. (#55696)
📖 Documentation:
- [RLlib] [DOC] Fix documentation typos and grammatical issues in RLlib docs (#56130)
- Update rllib-env.rst - typo. (#56140)
- Fixing typo in the RLlib documentation. (#55752)
- Fix formatting of class references. (#55764)
🏗 Architecture refactoring:
- Remove checkpoint release tests. (#57105)
- Remove long_running_apex test. (#57097)
- LINT: Enable ruff imports for multiple directories in rllib. (#56736)
- Upgrade g3 to g4 machine for aws release test. (#56248)
Ray Core
🎉 New Features:
- Alpha release of Ray Direct Transport
- Support ray.put() and ray.get() with nixl in gpu objects. (#56146)
- Support using ray.get with nixl to retrieve data from GPU object refs created by remote tasks. (#56559)
- Support tensor transfer from outside owners of actors. (#56485)
- Automatically enable tensor transport for the actor if any method specifies one. (#55324)
- Support cpu tensor transfer with NIXL in GPU Objects. (#55793)
- Handle multiple transfers of the same object to an actor. (#55628)
- Support NIXL as tensor transport backend. (#54459)
- Add a user-facing call to wait for tensor to be freed. (#55076)
- Always write to GPUObjectStore to avoid _get_tensor_meta() from hanging indefinitely. (#55433)
- Add warning when GPU object refs passed back to the same actor. (#55639)
- Avoid triggering a KeyError by the GPU object GC callback for intra-actor communication. (#54556)
- Enable autoscaler v2 on clusters launched by the cluster launcher. (#55865)
- Ray Symmetric Run Script and ray symmetric-run command. (#55111, #56497)
💫 Enhancements:
- Ray Event Export
- GCS AddEvent support. (#55528)
- Actor event: add proto schema. (#56221)
- Node event: add proto schema and send node events to the aggregator. (#56031, #56426)
- Job event: add schema for driver job event and send job events to the aggregator. (#55032, #55213)
- Emit actor events to Event aggregator. (#56617)
- Export node event by default. (#56810)
- Security
- Bind ray internal servers to the specified node ip instead of 0.0.0.0. (#55178, #55210, #55298, #55484)
- Bind dashboard agent http server to localhost in addition to the node ip. (#55910)
- Bind dashboard agent grpc to specified ip instead of 0.0.0.0. (#55732)
- Bind runtime env agent and dashboard agent http server to specified ip instead of 0.0.0.0. (#55431)
- RPC network fault tolerance
- Making core worker pub sub RPCs fault tolerant. (#56436)
- Make RequestWorkerLease RPC Fault Tolerant. (#56191)
- Making ReturnWorkerLease Idempotent. (#56073)
- Making CancelWorkerLease RPC Fault Tolerant. (#56195)
- Make Free Objects RPC Fault Tolerant. (#56293)
- Make PinObjectIDs RPC Fault Tolerant. (#56443)
- Make Unsubscribe Idempotent. (#57546)
- Core Worker GetObjStatus GRPC Fault Tolerance. (#54567)
- Not overriding accelerator id env vars when num_accelerators is 0 or not set. (#54928)
- Migrate metric collection from opencensus to opentelemetry. (#53098, #53740)
- Add per worker process group and deprecate process subreaper in favor of cleanup using process group. (#56476)
- Add node_id validation in NodeAffinitySchedulingStrategy. (#56708)
- Add io_context metrics to gcs and raylet. (#55762)
- Modify RedisDelKeyPrefixSync to use the Redis SCAN command instead of KEYS. (#56907)
- Add error_type to job failures. (#55578)
- Add PID to structured logs for tasks and actors. (#55176)
- Log actor name when warning about excess queueing. (#57124)
- Output the error log on the driver side if the failed task will still retry. (#56472)
- Prometheus http service discovery API. (#55656)
- Add node ip in runtime env error message to improve debug observability. (#56837)
- Fallback unserializable exceptions to their string representation. (#55476)
- Introduce new exception type for un-pickleable exceptions. (#55878)
- Improve docs for custom serialization for exceptions + add test. (#56156)
- Add a warning when returning an object w/ num_returns=0. (#56213)
- Adding ability to specify availability zones for ray cluster node pools on Azure. (#55532)
- Query for supported Microsoft.Network/virtualNetworks API versions instead of relying on resource_client.DEFAULT_API_VERSION. (#54874)
- Loosen Ray self-dependency check to allow matching versions. (#57019)
- Add support for pip_install_options for pip. (#53551)
- Proper typing for ObjectRef. (#55566)
🔨 Fixes:
- Use subscription id from azure profile if not provided in config during AzureNodeProvider init. (#56640)
- Always create standard public IP addresses (basic sku is deprecated). (#57131)
- Fix: bug with config key pairs when launching worker nodes. (#57107)
- If azure cluster launcher keypair doesnt exist create one automatically + doc typo fix. (#54596)
- Fix "objects_valid" for the case that multiple instances of the same task are storing returns. (#54904)
- Fix objects_valid check failure with except from BaseException. (#55602)
- Preserve err type in case of task cancellation due to actor death. (#57538)
- Fix checking for uv existence during ray_runtime setup. (#54141)
- Prevent sending SIGTERM after calling Worker::MarkDead. (#54377)
- Fixed the bug where the head was unable to submit tasks after redis is turned on. (#54267)
- Fix possible race by checking node cache status instead of just subscription. (#54745)
- Fix get actor timeout multiplier. (#54525)
- Use a temporary file to share default worker path in runtime env. (#53653)
- Fix check fail when task buffer periodical runner runs before RayEvent is initialized. (#55249)
- Patch grpc with RAY_num_grpc_threads to control grpc thread count. (#54988)
- Fix HandleRefRemoved thread safety. (#56445)
- Fix error handling for plasma put errors. (#56070)
- Fix batching logic in CoreWorkerPlasmaStoreProvider::Get. (#56041)
- Fix RAY_CHECK failure during shutdown due to plasma store race condition. (#55367)
- Fix autoscaler RAY_CHECK when GcsAutoscalerStateManager is out of sync with NodeManager. (#57010)
- Fix bug where inflight requests are not taken into account by retryable. (#57142)
- A timeout should be set when submitting patch requests for autoscaler. (#56605)
- Fix the bug in memray regarding the default configuration of -o {output_file_path}. (#56732)
- Fixed the issue of RemoveActorNameFromRegistry being called repeatedly. (#54955)
- Fixed an issue where the command executed when use_podman=true and run_env=None was not prefixed with podman exec. (#56619)
- Fix data race when using async gpu to gpu transfer. (#57112)
- Retry + Make FreeActorObject idempotent. (#56447)
- Fix check crash on gpu obj free if driver knows actor is dead. (#56404)
- Handle system errors with a background monitor thread. (#56513)
- Fix GPU metrics. (#56009)
- Don't disconnect worker client on OBOD unless the worker is dead. (#57185)
- Prevent stale GET request being registered if its lease was cleared. (#56766)
- Drop messages received after ClientConnection::Close. (#56240)
- Fix cancel race that leads to RAY_CHECK it->second.submitted_task_ref_count > 0. (#56123)
- Reorder asyncio actor shutdown to terminate asyncio thread first. (#56827)
- Fix actor import error message for async actors. (#55722)
- Allow task manager access with submitter mutex + unify retry. (#56216)
- Fix bug in restore_from_path such that connector states are also restored on remote EnvRunners. (#54672)
- Fix S3 access issue in AKS. (#56358)
- Add S3 public bucket fallback to handle NoCredentialsError. (#56334)
- Fix ABFSS (Azure Blob File System Secure) protocol support problems during E2E test. (#56188)
- Ray cluster commands (up, attach, status, etc) updates to work on Windows. (#54982)
- Update cluster scheduler to handle label selector hard node id constraint. (#56235)
📖 Documentation:
- Added guide on using type hints with Ray Core. (#55013)
- Lifecycle of a task. (#55496)
- Add OSS Document for Task Events. (#56203)
- Fix Missing Events Issue in Task Events. (#55916)
- Add docs for asyncio and object mutability. (#56790)
- Update getting started and set up document for ray on vsphere. (#56954)
- Docfix - rst annotation showing up in render. (#57104)
- Add threading requirement to NodeProvider interface. (#56349)
- Add guidance for matching Ray and Python versions with uv envs. (#56597)
- Fix documentation typos, grammar, and terminology inconsistencies. (#56066, #56067, #56068, #56069, #56128, #56129, #56130, #56131, #56132, #56272, #56273, #56274, #56275, #56277, #56278, #56279)
- Update SLURM docs with symmetric-run. (#56775)
- Update Kueue integration documentation to include RayService & RayCluster support. (#56781)
- Application Gateway for Containers as ingress to access Ray Cluster. (#56574)
- Update DLAMI Information in aws.md. (#55702)
Dashboard
💫 Enhancements:
- Use pynvml for GPU metrics. (#56000)
- Default dashboard usability improvements. (#55620)
- Make Ray Train Dashboard Panel Ids Static. (#55559)
- Small fixes to Metrics Tab for kube-ray clusters. (#57149)
- Add metadata to indicate full dashboard embedding is supported. (#56077)
- Use ray node id instead of ip for profilinglink. (#55439)
- Fix grafana dashboard generation bug. (#56346)
- Catch OSError when detecting the GPU. (#56158)
🔨 Fixes:
- Removed references to a deleted Data metrics panel. (#55478)
- Fix typo in memory_utils and adjust display formatting for clarity. (#56217)
Ray Images
🎉 New Features:
- Add support for building and publishing ray-extra images. (#56543)
- Add ray-llm and ray-ml extra images. (#56800)
- Build ray-extra images for aarch64. (#56818)
- Add slim image to the image build matrix. (#55723)
💫 Enhancements:
- Add haproxy binary, for ray serve use. (#56845)
- Add ~/.local/bin to PATH in slim image. (#56920)
- Remove slim's dependency on normal bases. (#56544)
- Add label for ray version and commit. (#56493)
- Refactor apt package installation. (#55701)
- Allow using explicit base type. (#56545)
- Add extra-test stage in image building. (#55725)
- Add test rules for image building files. (#56554)
- Add ray-llm image type check. (#56542)
- Unify label and tag conventions. (#56189)
- GKE GPU compat paths: PATH, LD_LIBRARY_PATH (temporarily). (#55569)
- Stop publishing ray-ml images. (#57070)
- Stop building and releasing x86 osx wheels. (#57077)
📖 Documentation:
- Update latest Docker dependencies for 2.49.0 release. (#55966)
- Update latest Docker dependencies for 2.49.2 release. (#56760)
Wheels and images
💫 Enhancements:
- Use bazel run to generate files required for the wheel and testing (#55957, #56527, #56969, #56004, #55928)
- Ban click 8.3.0. (#56789)
- Upgrade protobuf to v4. (#54496)
- Add adlfs[abfs] into image (#56084)
- Upgrade boto3 to 1.29.x. (#56363)
- Upgrading orjson to 3.9.15. (#55972)
- Update spdlog to 15.3. (#56711)
Thanks!
Thank you to everyone who contributed to this release!
@alexeykudinkin, @richardliaw, @nrghosh, @ljstrnadiii, @Daraan, @kouroshHakha, @Bye-legumes, @kamil-kaczmarek, @jugalshah291, @sampan-s-nayak, @jjyao, @Evelynn-V, @gangsf, @omatthew98, @TimothySeah, @kshanmol, @goutamvenkat-anyscale, @axreldable, @jiangwu300, @simonsays1980, @400Ping, @JasonLi1909, @chuang0221, @weiliango, @Myasuka, @win5923, @liulehui, @khluu, @ok-scale, @eicherseiji, @tianyi-ge, @MengjinYan, @kevin85421, @Yevet, @orangeQWJ, @vie-serendipity, @edoakes, @wyhong3103, @israbbani, @vickytsang, @HassamSheikh, @acrewdson, @czgdp1807, @daiping8, @carolynwang, @thc1006, @jeffreyjeffreywang, @Stack-Attack, @Catch-Bull, @elliot-barn, @Levi080513, @BestVIncent, @dragongu, @jmajety-dev, @jcarlson212, @tohtana, @abrarsheikh, @crypdick, @Yicheng-Lu-llll, @ZacAttack, @justinvyu, @lk-chen, @alanwguo, @mcoder6425, @my-vegetable-has-exploded, @yancanmao, @arcyleung, @rjpower, @codope, @harshit-anyscale, @dayshah, @stephanie-wang, @KaisennHu, @ryanaoleary, @saihaj, @mattip, @rueian, @Kunchd, @pavitrabhalla, @owenowenisme, @Aydin-ab, @gvspraveen, @minerharry, @JackGammack, @jpatra72, @coqian, @zcin, @dstrodtman, @aslonnie, @ahao-anyscale, @GuyStone, @iamjustinhsu, @seanlaii, @ruisearch42, @akyang-anyscale, @ArturNiederfahrenhorst, @bveeramani, @OneSizeFitsQuorum, @xinyuangui2, @sb-hakunamatata, @22quinn, @Sparks0219, @sven1977, @snehachhabria, @dioptre, @nadongjun, @eric-higgins-ai, @marosset, @MatthewCWeston, @pcmoritz, @can-anyscale, @pimdh, @roshankathawate, @matthewdeng, @martinbomio, @GokuMohandas, @alimaazamat, @ali-corpo, @landscapepainter, @Qiaolin-Yu, @vaishdho1, @avigyabb, @srinathk10, @tannerdwood
2.49.2Ray-2.49.2
There is no difference between 2.49.2 and 2.49.1, though we needed a patch version for other out of band reasons. To fill the awkward blankness, here is a haiku about Ray:
Summit drawing near Ray advances, step by step Scaling without end
2.49.1Ray-2.49.1
- Ray Dashboard: Fix issue where GPU metrics are missing (#56006)
- Ray Data: Fixed regression in handling very large schemas (#56058)
2.49.0Ray-2.49.0
Release Highlights
Ray Data:
- We’ve implemented a variety of performance enhancements, including improved actor/node autoscaling with budget-aware decisions; faster/more accurate shuffle accounting; reduced Parquet metadata footprint; and out-of-order execution for higher throughput.
- We’ve also implemented anti/semi joins, stratified train_test_split, and added Snowflake connectors.
Ray Core:
- Performance/robustness cleanups around GCS publish path and raylet internals; simpler OpenTelemetry flagging; new user-facing API to wait for GPU tensor free; plus assorted test/infra tidy-ups
Ray Train:
- We’ve introduced a new JaxTrainer with SPMD support for TPUs.
Ray Serve:
- Custom Autoscaling per Deployment Serve now supports user-defined autoscaling policies via AutoscalingContext and AutoscalingPolicy, enabling fine-grained scaling logic at the deployment level. This is part of a large effort where we are adding support for autoscaling based on custom metrics in Serve, see this RFC for more details.
- Async Inference (Initial Support): Ray Serve introduces asynchronous inference execution, laying the foundation for better throughput and latency in async workloads. Please see this RFC for more details.
- Major Performance Gains: This version of ray serve brings double digit % performance improvements both in throughput and latency. See release notes for more details.
Ray Serve/Data LLM:
- We’ve refactored Ray Serve LLM to be fully compatible with the default vllm serve and also now supports vLLM=0.10.
- We’ve added a prefix cache-aware router with PrefixCacheAffinityRouter for optimized cache utilization; dynamic cache management via reset prefix cache remote methods; enhanced LMCacheConnectorV1 with kv_transfer_config support.
Ray Libraries
Ray Data
🎉 New Features:
- Wrapped batch indices in a BatchMetadata object to make per-batch metadata explicit. (#55643)
- Added support for Anti/Semi Join types. (#55272)
- Introduced an Issue Detection Framework. (#55155)
- Added an option to enable out-of-order execution for better performance. (#54504)
- Introduced a StreamingSplit logical operator for DAG rewrite. (#54994)
- Added a stratify parameter to train_test_split. (#54624)
- Added Snowflake connectors. (#51429)
- Updated Hudi integration to support incremental query. (#54301)
- Added an Actor location tracker. (#54590)
- Added BundleQueue.has_next. (#54710)
- Made DEFAULT_OBJECT_STORE_MEMORY_LIMIT_FRACTION configurable. (#54873)
- Added Expression support & a with_columns API. (#54322)
- Allocate GPU resources in ResourceManager. (#54445)
💫 Enhancements:
- Decoupled actor and node autoscaling; autoscaling now also considers budget. (#55673, #54902)
- Faster hash-shuffle resource usage calculation; more accurate shuffle progress totals. (#55503, #55543)
- Reduced Parquet metadata storage usage. (#54821)
- Export API improvements: refresh dataset/operator state, sanitize metadata, and truncate exported metadata. (#55355, #55379, #55216, #54623)
- Metrics & observability: task metric improvements, external-buffer block-count metric, row-based metrics, clearer operator names in logs, single debug log when aggregators are ready. (#55429, #55022, #54693, #52949, #54483)
- Dashboard: added “Max Bytes to Read” panel/budget, panels for blocks-per-task and bytes-per-block, and streaming executor duration. (#55024, #55020, #54614)
- Planner/execution & infra cleanups: ExecutionResources and StatsManager cleanup, planner interface refactor, node trackers init, removed ray.get in _MapWorker ctor, removed target_shuffle_max_block_size. (#54694, #55400, #55018, #54665, #54734, #55158)
- Behavior/interop tweaks: map_batches defaults to row_modification=False and avoids pushing past limit; limited operator pushdown; prefetch for PandasJSONDatasource; use cloudpickle for Arrow tensor extension ser/des; bumped Arrow to 21.0; schema warning tone change. (#54992, #54457, #54667, #54831, #55426, #54630)
- Removed randomize-blocks reorder rule for more stable behavior. (#55278)
🔨 Fixes:
- AutoscalingActorPool now properly downscales after execution. (#55565)
- StatsManager handles StatsActor loss on disconnect. (#55163)
- Handle missing chunks key when Databricks UC query returns zero rows. (#54526)
- Handle empty fragments in sampling when num_row_groups=0. (#54822)
- Restored handling of PyExtensionType to keep compatibility with previously written datasets. (#55498)
- Prevent negative resource budget when concurrency exceeds the global limit; fixed resource-manager log calculation. (#54986, #54878)
- Default write_parquet warning removed; handled unhashable types in OneHotEncoding. (#54864, #54863)
- Overwrite mode now maps to the correct Arrow behavior for parallel writes. (#55118)
- Added back from_daft Arrow-version checks. (#54907)
- Pandas chained in-place assignment warning resolved. (#54486)
- Test stability/infra: fixed flaky tests, adjusted bounds and sizes, added additional release tests/chaos variants for image workloads, increased join test size, adjusted sorting release test to produce 1 GB blocks. (#55485, #55489, #54806, #55120, #54716, #55402, #54971)
📖 Documentation:
- Added a user guide for aggregations. (#53568)
- Added a code snippet in docs for partitioned writes. (#55002)
- Updated links to Lance documentation. (#54836)
Ray Train
🎉 New Features:
- Introduced JaxTrainer with SPMD support on TPUs (#55207)
💫 Enhancements:
- ray.train.get_dataset_shard now lazily configures dataset sharding for better startup behavior (#55230)
- Clearer worker error logging (#55222)
- Fail fast when placement group requirements can never be satisfied (#54402)
- New ControllerError surfaced and handled via failure policy for improved resiliency (#54801, #54833)
- TrainStateActor periodically checks controller health and aborts when necessary (#53818)
🔨 Fixes:
- Resolve circular import in ray.train.v2.lightning.lightning_utils (#55668)
- Fix XGBoost v2 callback behavior (#54787)
- Suppress a spurious type error (#50994)
- Reduce test flakiness: remove randomness and bump a data-integration test size (#55315, #55633)
📖 Documentation:
- New LightGBMTrainer user guide (#54492)
- Fix code-snippet syntax highlighting (#54909)
- Minor correction in experiment-tracking guide comment (#54605)
🏗 Architecture refactoring:
- Public Train APIs routed through TrainFnUtils for consistency (#55226)
- LoggingManager utility for Train logging (#55121)
- Convert DEFAULT variables from strings to bools (#55581)
Ray Tune
🎉 New Features:
- Add video FPS support to WandbLoggerCallback (#53638)
💫 Enhancements:
- Typing: reset_config now explicitly returns bool (#54581)
- CheckpointManager supports recording scoring metric only (#54642)
🔨 Fixes:
- Fix XGBoost v2 callback integration (#54787)
- Correct type for RunConfig.progress_reporter (#48439)
📖 Documentation:
- Minor fixes (#55125, #54942)
Ray Serve
🎉 New Features:
- Async inference support in Ray Serve (initial phase). Provides basic asynchronous inference execution, with follow-up work planned for failed/unprocessed queues and additional tests. #54824
- Per-deployment custom autoscaling controls. Introduces AutoscalingContext and AutoscalingPolicy classes, enabling user-defined autoscaling strategies at the deployment level. #55253
- Same event loop router. Adds option to run the Serve router in the same event loop as the proxy, yielding ~17% throughput improvement. #55030
💫 Enhancements:
- Async get_current_servable_instance(). Converts the FastAPI dependency to async def, removing threadpool overhead and boosting performance: 35% higher RPS and reduced latency. #55457
- Access log optimization. Cached contexts in request path logging improved request throughput by ~16% with lower average latency. #55166
- Batching improvements. Default batch wait timeout increased from 0.0s to 0.01s (10ms) to enable meaningful batching. #55126
- HTTP receive refactor. Cleaned up handling of replica-side HTTP receive tasks. #54543 / #54565
- Configurable replica router backoff. Added knobs for retry/backoff control when routing to replicas. #54723
- Autoscaling ergonomics. Marked per-deployment autoscaling metrics push interval config as deprecated for consistency. #55102
- Health check & env var safety. Introduced warnings for invalid/zero/negative environment variable values, with migration path planned for Ray 2.50.0. #55464, #54944
- Improved CLI UX. serve config now prints No configuration was found. instead of an empty string. #54767
🔨 Fixes:
- Removed brittle ray._private dependency usage. #55659
- HTTP route test fixes. Migrated to get_application_url() to avoid hardcoded URLs, reducing flakiness on Windows. #55623, #54974, #54924, #54911, #54704, #54903, #54882, #54877, #54631, #53933
- Semaphore bug fix. Corrected race where more workers than allowed could acquire the semaphore. #55147
- LongPollClient cancellation. Prevented spurious cancellation of listen_for_change. #54832
- Backpressure error code. gRPC now returns RESOURCE_EXHAUSTED instead of UNAVAILABLE on overload. #54537
- Logging improvements. Added request IDs to proxy access logs; avoided duplicate shutdown log lines. #54657, #54534
- Test stability. Various waits, deflakes, and sync fixes across Serve tests. #54794, #54522, #54585
📖 Documentation:
- Unexpected queuing behavior. Documented quirks in handle request queuing. #54542
🏗 Architecture refactoring:
- Router/handle internals refactored for clarity and future feature expansion. #55635
- Model composition benchmarks. Added benchmarking to track performance of common composition patterns. #55549
- Constants refactor. Utility functions moved out of constants.py for better readability and stricter env var validation. #54944, #55464
- Ray internals migration. Moved usage, ray_option_utils, and selected constants from _private to _common. #54915, #54578
Ray Serve/Data LLM
🎉 New Features:
- Prefix cache-aware router with PrefixCacheAffinityRouter for optimized cache utilization. (#55218, #55588)
- Reset prefix cache remote method for dynamic cache management. (#55658)
- LMCacheConnectorV1 support for kv_transfer_config to enhance key-value transfer configurations. (#54579)
- LLMServer and LLMEngine major refactor for 100% vLLM serve frontend compatibility. (#54554)
💫 Enhancements:
- vLLM engine upgrade to version 0.10.0 with improved performance and compatibility. (#55067)
- Enhanced error handling for invalid model_id parameters with clearer error messages. (#55589)
- Improved telemetry handling with better race condition management for push operations. (#55558)
- Optimized deployment defaults with better configuration values to prevent bottlenecks. (#54696)
- LoRA workflow improvements with refactored downloading and utility functions. (#54946)
- LLMServer refactor to synchronous initialization for better reliability. (#54835)
- Mistral tokenizer support for tekken tokenizer compatibility. (#54666)
- Smart batching logic that skips batching when batch_interval_ms == 0. (#54751)
- Dashboard enhancements with improved LLM metrics and monitoring capabilities. (#54797)
🔨 Fixes:
- Pyright linting corrections for Ray Serve LLM examples. (#55284)
- Test stability improvements for DeepSeek model and vLLM engine processor tests. (#55401, #55120)
- Serialization fixes for ChatCompletionRequest tool_calls ValidatorIterator objects. (#55538)
📖 Documentation:
- Prefix cache router documentation with comprehensive usage examples. (#55218)
- Multi-LoRA documentation improvements with clearer setup instructions. (#54788)
- STRICT_PACK strategy FAQ documentation explaining data.llm packing behavior. (#55505)
🏗 Architecture refactoring:
- Docker image optimizations with UCX and NCCL updates, plus GKE GPU operator compatibility paths. (#54598, #55206)
RLlib
🎉 New Features:
- Implemented Implicit Q-Learning (IQL). (#55304, #55422)
- DreamerV3 is now available in PyTorch. (#45463, #55140)
- Discrete actions support for SAC. (#53982)
💫 Enhancements:
- Upgraded RLlink protocol for external env/simulator training. (#53550)
- Performance improvements in Offline RL API through switching to
iter_torch_batches. (#54277) - Added an example for curriculum learning in Atari Pong. (#55304)
🔨 Fixes:
- Corrected
TensorTypehandling. (#55694) - Fixed a bug with multi-learner setups in Offline RL API. (#55693)
- Addressed
ImportErrorin Atari examples. (#54967) - Fixed some bugs in the docs for IQL and CQL. (#55614)
- Increased default timesteps on two experiments. (#54185)
- Fixed
TorchMultiCategorical.to_deterministicwhen having different number of categories and logits with time dimension. (#54414) - Added missing documentation for
SACConfig'straining(). (#53918) - Fixed bug in
restore_from_pathsuch that connector states are also restored on remoteEnvRunners. (#54672) - Fixed missing support for
config.count_steps_by = "agent_steps". (#54885) - Added missing colon to
CUBLAS_WORKSPACE_CONFIG. (#53913) - Removed
rllib_contribcompletely from RLlib. (#55182)
🏗 Architecture refactoring:
- Deprecated TensorFlow support from new API stack. (#55042)
- Deprecated input/output specs from
RLModule. (#55141) - Deprecated
--enable-new-api-stackflag from all scripts. (#54853, #54702)
Ray Core
🎉 New Features:
💫 Enhancements:
- [core][gpu-objects] Garbage collection (#53911)
- [core] Support pip_install_options for pip (#53551)
- [core][gpu-objects] Move data transfers to a background thread (#54256)
- [core][gpu-objects] Pass tensor_transport to store_task_errors even if the actor task throws an exception (#55427)
- [core][gpu-objects] Exception handling for application errors (#55442)
- [core][gpu-object] Add a user-facing call to wait for tensor to be freed (#55076)
- [Core] Bind ray internal servers to the specified node ip instead of 0.0.0.0 which improves the security (#55178, #55210, #55298)
- [core] Fallback unserializable exceptions to their string representation (#55476)
🔨 Fixes:
- [core] Fix objects_valid check failure with except from BaseException (#55602)
- [core][gpu-objects] Avoid triggering a KeyError by the GPU object GC callback for intra-actor communication (#54556)
- [core] fix checking for uv existence during ray_runtime setup (#54141)
- [core][autoscaler][v1] add heartbeat timeout logic to determine node activity status (#54030)
- [core] prevent sending SIGTERM after calling Worker::MarkDead (#54377)
- [Core] Fixed the bug where the head was unable to submit tasks after redis is turned on. (#54267)
- [Core] [Azure] query for supported Microsoft.Network/virtualNetworks API versions instead of relying on resource_client.DEFAULT_API_VERSION (#54874)
- [core] Fix possible race by checking node cache status instead of just subscription (#54745)
- [core] Fix get actor timeout multiplier (#54525)
- [core]: Use a temporary file to share default worker path in runtime env (#53653)
- [core] Fix check fail when task buffer periodical runner runs before RayEvent is initialized (#55249)
- [core] Patch grpc with RAY_num_grpc_threads to control grpc thread count (#54988)
- [core][gpu-objects] Always write to GPUObjectStore to avoid _get_tensor_meta() from hanging indefinitely. (#55433)
- [Core] Core Worker GetObjStatus GRPC Fault Tolerance (#54567)
📖 Documentation:
- Added guide on using type hints with Ray Core. (#55013)
🏗 Architecture refactoring:
- Migrate metric collection from opencensus to opentelemetry (#53098, #53740)
Dashboard
💫 Enhancements:
- Grafana: new Operator filter for Data; Prometheus adds
RayNodeTypelabel on for nodes. (#55493, #55192)
🔨 Fixes:
- Removed references to a deleted Data metrics panel. (#55478)
Ray Images
🎉 New Features:
- Added cuda 12.6 based images (#55425, #55444)
💫 Enhancements:
- Upgraded protobuf to v4 (#54496)
Docs
💫 Enhancements:
- KubeRay docs: added InteractiveMode quick-start details; expanded Core type-hints guidance; Serve LLM example coverage; Data LLM batching FAQ (#55570, #55284)
🔨 Fixes:
- Various formatting/mis-highlighting and lints across Train/Tune/Serve LLM docs. (#55284, #54763)
Thanks!
Thank you to everyone who contributed to this release! @pavitrabhalla, @Daraan, @Sparks0219, @daiping8, @abrarsheikh, @sven1977, @Toshaksha, @bveeramani, @MengjinYan, @GokuMohandas, @codope, @nadongjun, @SolitaryThinker, @matthewdeng, @elliot-barn, @isimluk, @avibasnet31, @OneSizeFitsQuorum, @Future-Outlier, @marosset, @jackfrancis, @kshanmol, @eicherseiji, @dayshah, @iamjustinhsu, @Qiaolin-Yu, @goutamvenkat-anyscale, @Yicheng-Lu-llll, @yantarou, @rclough, @zcin, @NeilGirdhar, @VarunBhandary, @400Ping, @akshay-anyscale, @vickytsang, @xushiyan, @JasonLi1909, @n-elia, @simonsays1980, @dragongu, @Kishanthan, @ruisearch42, @jectpro7, @TimothySeah, @liulehui, @rueian, @HollowMan6, @akyang-anyscale, @axreldable, @czgdp1807, @alanwguo, @justinvyu, @ok-scale, @my-vegetable-has-exploded, @landscapepainter, @fscnick, @machichima, @mpashkovskii, @ZacAttack, @gvspraveen, @sword865, @lmsh7, @Ziy1-Tan, @rebel-scottlee, @sampan-s-nayak, @coqian, @can-anyscale, @Bye-legumes, @win5923, @MortalHappiness, @angelinalg, @khluu, @aslonnie, @krishnakalyan3, @minosvasilias, @x-tong, @xinyuangui2, @raulchen, @Yangruipis, @edoakes, @kevin85421, @wingkitlee0, @Fokko, @cristianjd, @srinathk10, @owenowenisme, @JoshKarpel, @MengqingCao, @leopardracer, @westonpace, @LeslieWongCV, @VassilisVassiliadis, @crypdick, @alexeykudinkin, @mjacar, @kunling-anyscale, @saihaj, @kouroshHakha, @ema-pe, @markjm, @avigyabb, @dshepelev15, @mauvilsa, @omatthew98, @nrghosh, @ryanaoleary, @Aydin-ab, @lk-chen, @stephanie-wang, @harshit-anyscale, @jjyao, @bullgom, @Yevet, @israbbani
2.48.0Ray-2.48.0
Release Highlights
- Ray Data: This release features a new Delta Lake and Unity Catalog integration and performance improvements to various reading/writing operators.
- Ray Core: Enhanced GPU object support with intra-process communication and improved Autoscaler v2 functionality
- Ray Train: Improved hardware metrics integration with Grafana and enhanced collective operations support
- Ray Serve LLM: This release features early proof of concept for prefill-decode disaggregation deployment and LLM-aware request routing such as prefix-cache aware routing.
- Ray Data LLM: Improved throughput and CPU memory utilization for ray data workers.
Ray Libraries
Ray Data
🎉 New Features:
- Add reading from Delta Lake tables and Unity Catalog integration (#53701)
- Enhanced pin_memory support in iter_torch_batches (#53792)
- Add pin_memory to iter_torch_batches (#53792)
💫 Enhancements:
- Re-enabled sorting in Ray Data tests with performance improvements (#54475)
- Enhanced handling of mismatched columns and pandas.NA values (#53861, #53859)
- Improved read_text trailing newline semantics (#53860)
- Optimized backpressure handling with policy-based resource management (#54376)
- Enhanced write_parquet with support for both partition_by and row limits (#53930)
- Prevent filename collisions on write operations (#53890)
- Improved execution performance for One Hot encoding in preprocessors (#54022)
🔨 Fixes:
- Fixing map_groups issues (#54462)
- Prevented Op fusion for streaming repartition to avoid performance degradation (#54469)
- Fixed ActorPool autoscaler scaling up logic (#53983)
- Resolved empty dataset repartitioning issues (#54107)
- Fixed PyArrow overflow handling in data processing (#53971, #54390)
- Fixed IcebergDatasink to properly generate individual file uuids (#52956)
- Avoid OOMs with read_json(..., lines=True) (#54436)
- Handle HuggingFace parquet dataset resolve URLs (#54146)
- Fixed BlockMetadata derivation for Read operator (#53908)
📖 Documentation:
- Updated AggregateFnV2 documentation to clarify finalize method (#53835)
- Improved preprocessor and vectorizer API documentation
Ray Train
🎉 New Features:
- Added broadcast_from_rank_zero and barrier collective operations (#54066)
- Enhanced hardware metrics integration with Grafana dashboards (#53218)
- Added support for dynamically loading callbacks via environment variables (#54233)
💫 Enhancements:
- Improved checkpoint population from before_init_train_context (#54453)
- Enhanced controller state logging and metrics (#52805)
- Added structured logging environment variable support (#52952)
- Improved handling of Noop scaling decisions for smoother scaling logic (#53180)
- Logging of controller state transitions to aid in debugging and analysis (#53344)
🔨 Fixes:
- Fixed GPU tensor reporting in ray.train.report (#53725)
- Enhanced move_tensors_to_device utility for complex tensor structures (#53109)
- Improved worker health check error handling with trace information (#53626)
- Fixed GPU transfer support for non-contiguous tensors (#52548)
- Force abort on SIGINT spam and do not abort finished runs (#54188)
📖 Documentation:
- Updated beginner PyTorch example (#54124)
- Added documentation for ray.train.collective APIs (#54340)
- Added a note about PyTorch DataLoader's multiprocessing and forkserver usage (#52924)
- Fixed various docstring format and indentation issues (#52855, #52878)
- Added note that ray.train.report API docs should mention optional checkpoint_dir_name (#54391)
🏗 Architecture refactoring:
- Removed subclass relationship between RunConfig and RunConfigV1 (#54293)
- Enhanced error handling for finished training runs (#54188)
- Deduplicated ML doctest runners in CI for efficiency (#53157)
- Converted isort configuration to Ruff for consistency (#52869)
Ray Tune
💫 Enhancements:
- Updated test_train_v2_integration to use the correct RunConfig (#52882)
🔨 Fixes:
- Fixed RayTaskError serialization logic (#54396)
- Improved experiment restore timeout handling (#53387)
📖 Documentation:
- Replaced session.report with tune.report and corrected import paths (#52801)
- Removed outdated graphics cards reference in docs (#52922)
- Fixed various docstring format issues (#52879)
Ray Serve
🎉 New Features:
- Added RouterConfig field to DeploymentConfig for custom RequestRouter configuration (#53870)
- Added support for implementing custom request routing algorithms (#53251)
💫 Enhancements:
- Enhanced FastAPI ingress deployment validation for multiple deployments (#53647)
- Optimized get_live_deployments performance (#54454)
- Progress towards making ray.serve.llm compatible with vLLM serve frontend (#54481, #54443, #54440)
🔨 Fixes:
- Fixed deployment scheduler issues with component scheduling (#54479)
- Fixed runtime_env validation for py_modules (#53186)
- Added descriptive error message when deployment name is not found (#45181)
📖 Documentation:
- Added troubleshooting guide for DeepSeek/multi-node GPU deployment on KubeRay (#54229)
- Updated the guide on serving models with Triton Server in Ray Serve
- Added documentation for custom request routing algorithms
- Added custom request router docs (#53511)
🏗 Architecture refactoring:
- Remove indirection layers of node initialization (#54481)
- Incremental refactor of LLMEngine (#54443)
- Remove random v0 logic from serve endpoints (#54440)
- Remove usage of internal_api.memory_summary() (#54417)
- Remove usage of ray._private.state (#54140)
Ray Serve/Data LLM
🎉 New Features
- Support separate deployment config for PDProxy in PrefixAwareReplicaSet (#53935)
- Support for prefix-aware request router (#52725)
💫 Enhancements
- Log engine stats after each batch task is done. (#54360)
- Decouple max_tasks_in_flight from max_concurrent_batches (#54362)
- Make llm serve endpoints compatible with vLLM serve frontend, including streaming, tool_code, and health check support (#54440)
- Remove botocore dependency in Ray Serve LLM (#54156)
- Update vLLM version to 0.9.2 (#54407)
🔨 Fixes
- Fix health check in prefill disagg (#53937)
- Fix doc to only support int concurrency (#54196)
- Fix vLLM batch test by changing to Pixtral (#53744)
- Fix pickle error with remote code models in vLLM Ray workloads (#53868)
- Adaption of the change of vllm.PoolingOutput (#54467)
📖 Documentation
- Ray serve/lora doc fix (#53553)
- Add Ray serve/LLM doc (#52832)
- Add a doc snippet to inform users about existing diffs between vLLM and Ray Serve LLM behavior in some APIs like streaming, tool_code, and health check (#54123)
- Troubleshooting DeepSeek/multi-node GPU deployment on KubeRay (#54229)
🏗 Architecture refactoring
- Make llm serve endpoints compatible with vLLM serve frontend, including streaming, tool_code, and health check support (#54490)
- Prefix-aware scheduler [2/N] Configure PrefixAwareReplicaSet to correctly handle the number of available GPUs for each worker and to ensure efficient GPU utilization in vLLM (#53192)
- Organize spread out utils.py (#53722)
- Remove ImageRetriever class and related tests from the LLM serving codebase. (#54018)
- Return a batch of rows in the udf instead of row by row (#54329)
RLlib
🎉 New Features:
- Implemented Offline Policy Evaluation (OPE) via Importance Sampling (#53702)
- Enhanced ConnectorV2 ObservationPreprocessor APIs with multi-agent support (#54209)
- Add GPU inference to offline evaluation (#52718)
💫 Enhancements:
- Enhanced MetricsLogger to handle tensors in state management (#53514)
- Improved env seeding in EnvRunners with deterministic training example rewrite (#54039)
- Cleanup of meta learning classes and examples (#52680)
🔨 Fixes:
- Fixed EnvRunner restoration when no local EnvRunner is available (#54091)
- Fixed shapes in explained_variance for recurrent policies (#54005)
- Resolved device check issues in Learner implementation (#53706)
- Enhanced numerical stability in MeanStdFilter (#53484)
- Fixed weight synching in offline evaluation (#52757)
- Fixed bug in split_and_zero_pad utility function (#52818)
📖 Documentation:
- Do-over of examples for connector pipelines (#52604)
- Remove "new API stack" banner from all RLlib docs pages as it's now the default (#54282)
Ray Core
🎉 New Features:
- Enhanced GPU object support with intra-process communication (#53798)
- Integrated single-controller collective APIs with GPU objects (#53720)
- Added support for ray.get on driver process for GPU objects (#53902)
- Supporting allreduce on list of input nodes in compiled graphs (#51047)
- Add single-controller API for ray.util.collective and torch gloo backend (#53319)
💫 Enhancements:
- Improved autoscaler v2 functionality with cloud instance ID reusing (#54397)
- Enhanced cluster task manager with better resource management (#54413)
- Upgraded OpenTelemetry SDK for better observability (#53745)
- Improved actor scheduling to prevent deadlocks in ordered actors (#54034)
- Enhanced get_max_resources_from_cluster_config functionality (#54455)
- Use std::move in cluster task manager constructor (#54413)
- Improve status messages and add comments about stale seq_no handling (#54470)
- uv run integration is now enabled by default (#53060)
🔨 Fixes:
- Fixed race conditions in object eviction and repinning for recovery (#53934)
- Resolved GCS crash issues on duplicate MarkJobFinished RPCs (#53951)
- Enhanced actor restart handling on node failures (#54088)
- Improved reference counting during worker graceful shutdown (#53002)
- Fix race condition when canceling task that hasn't started yet (#52703)
- Fix the issue where a valid RestartActor rpc is ignored (#53330)
- Fixed "Check failed: it->second.num_retries_left == -1" error (#54116)
- Fix detached actor being unexpectedly killed (#53562)
📖 Documentation:
- Enhanced troubleshooting guides and API documentation
- Updated reStructuredText formatting on Resources page (#53882)
- Fix working code snippets (#52748)
- Add doc for running KubeRay dashboard (#53830)
- Add antipattern for nested ray.get (#43184)
🏗 Architecture refactoring:
- Delete old skipped tests and unused code (#54427)
- Consolidate TaskManager interface (#54317)
- Move dependencies of NodeManager to main.cc for better testability (#53782)
- Use smart pointer in logging.cc (#54351)
- Delete event_label and unused environment variables (#54378, #54095)
- Remove actor task path in normal task submitter (#53996)
- Rename GcsFunctionManager and use fake in test (#53973)
Dashboard
🎉 New Features:
- Add dynolog for on-demand GPU profiling for Torch training (#53191)
💫 Enhancements:
- Added TPU usage metrics to reporter agent (#53678)
- Enhanced GPU profiling manager IP address retrieval (#53807)
- Improved configurability of Grafana dashboard parameters (#53236)
- Add configurability of 'orgId' param for requesting Grafana dashboards (#53236)
🔨 Fixes:
- Fixed Grafana dashboard dropdowns for data and train dashboards (#52752)
- Resolved daylight savings time issues in dashboard (#52755)
- Fix retrieving IP address from the GPUProfilingManager on the dashboard agent (#53807)
Docs 🎉 New Features:
- New end-to-end examples:
- Multi-modal AI pipeline (#52342)
- Xgboost tutorial (#52383)
- Audio transcription and LLM as judge curation (#53189)
- LLM training and inference (#53415)
- Scalable video processing (#50965)
💫 Enhancements:
- Add pydoclint to pre-commit (#52974)
- Add vale to pre-commit (#53564)
Breaking Changes
- Removed deprecated ray.workflow package (#53612)
- Removed deprecated storage parameter from ray.init (#53669)
- Removed deprecated ray start CLI options (#53675)
- Removed experimental "array" library (#54105)
- Remove dask from byod 3.9 deps (#54521)
Dependencies & Build
- Added uv binary v0.7.19 for improved package management (#54437)
- Upgraded datasets in release tests (#54425)
- Enhanced wheel building process with single bazel call optimization (#54476)
- Fixed uv run parser for handling extra arguments (#54488)
- Upgrade h11, requests, starlette, jinja2, pyopenssl and cryptography
- Generate multi-arch image indexes (#52816)
Thanks!
Thank you to everyone who contributed to this release! @kouroshHakha, @davidwagnerkc, @MengjinYan, @minerharry, @simonsays1980, @Myasuka, @noemotiovon, @goutamvenkat-anyscale, @harshit-anyscale, @jugalshah291, @tianyi-ge, @sven1977, @crypdick, @JohnsonKuan, @lk-chen, @richardsliu, @alexeykudinkin, @EagleLo, @soffer-anyscale, @zcin, @AdrienVannson, @nilsmelchert, @raulchen, @jujipotle, @DrehanM, @vigneshka, @Ziy1-Tan, @Blaze-DSP, @ArthurBook, @GokuMohandas, @walkoss, @bveeramani, @edoakes, @omatthew98, @SeanQuant, @CheyuWu, @cszhu, @win5923, @kevin85421, @angelinalg, @iamjustinhsu, @eicherseiji, @kunling-anyscale, @vickytsang, @MortalHappiness, @aslonnie, @psr-ai, @sbhat98, @anyadontfly, @marwan116, @cristianjd, @2niuhe, @codope, @fscnick, @ryanaoleary, @srinathk10, @TimothySeah, @han-steve, @Future-Outlier, @Syulin7, @Qiaolin-Yu, @elliot-barn, @JoshKarpel, @dayshah, @can-anyscale, @ok-scale, @mattip, @SolitaryThinker, @owenowenisme, @nehiljain, @GeneDer, @rnkrtt, @israbbani, @DriverSong, @sinalallsite, @pcmoritz, @akyang-anyscale, @xinyuangui2, @nrghosh, @davidxia, @rueian, @stephanie-wang, @jjyao, @chris-ray-zhang, @czgdp1807, @justinvyu, @Daraan, @landscapepainter, @troychiu, @khluu, @hipudding, @ruisearch42, @robertnishihara, @ArturNiederfahrenhorst, @abrarsheikh, @alanwguo, @HollowMan6, @ran1995data, @matthewdeng
2.47.1Ray-2.47.1
Ray 2.47.1 fixed an issue where Ray failed to start on Mac (https://github.com/ray-project/ray/pull/53807)
2.47.0Ray-2.47.0
Release Highlights
- Prefill disaggregation is now supported in initial support in Ray Serve LLM (#53092). This is critical for production LLM serving use cases.
- Ray Data features a variety of performance improvements (locality-based scheduling, non-blocking execution) as well as improvements to observability, preprocessors, and other stability fixes.
- Ray Serve now features custom request routing algorithms, which is critical for high throughput traffic for large model use cases.
Ray Libraries
Ray Data
🎉 New Features:
- Add save modes support to file data sinks (#52900)
- Added flattening capability to the Concatenator preprocessor to support output vectorization use cases (#53378)
💫 Enhancements:
- Re-enable Actor locality-based scheduling. This PR also improves algorithms for ranking the locations for the bundle. (#52861)
- Disable blocking pipeline by default until Actor Pool fully scales up to min actors (#52754)
- Progress bar and dashboard improvements to show name of partial functions properly(#52280)
🔨 Fixes:
- Make Ray Data
from_torchrespect Dataset len (#52804) - Fixing flaky aggregation test (#53383)
- Fix race condition bug in fault tolerance by disabling
on_exithook (#53249) - Fix
move_tensors_to_deviceutility for the list/tuple[tensor] case (#53109) - Fix
ActorPoolscaling to avoid scaling down when the input queue is empty (#53009) - Fix internal queues accounting for all Operators w/ an internal queue (#52806)
- Fix backpressure for
FileBasedDatasource. This fixes potential OOMs for workloads usingFileBasedDatasources(#52852)
📖 Documentation:
- Fix working code snippets (#52748)
- Improve AggregateFnV2 docstrings and examples (#52911)
- Improved documentation for vectorizers and API visibility in Data (#52456)
Ray Train
🎉 New Features:
- Added support for configuring Ray Train worker actor runtime environments. (#52421)
- Included Grafana panel data in Ray Train export for improved monitoring. (#53072)
- Introduced a structured logging environment variable to standardize log formats. (#52952)
- Added metrics for
TrainControllerStateto enhance observability. (#52805)
💫 Enhancements:
- Logging of controller state transitions to aid in debugging and analysis. (#53344)
- Improved handling of
Noopscaling decisions for smoother scaling logic. (#53180)
🔨 Fixes:
- Improved
move_tensors_to_device utilityto correctly handlelist/tupleof tensors. (#53109) - Fixed GPU transfer support for non-contiguous tensors. (#52548)
- Increased timeout in
test_torch_device_managerto reduce flakiness. (#52917)
📖 Documentation:
- Added a note about PyTorch DataLoader’s multiprocessing and forkserver usage. (#52924)
- Fixed various docstring format and indentation issues. (#52855, #52878)
- Removed unused "configuration-overview" documentation page. (#52912)
- General typo corrections. (#53048)
🏗 Architecture refactoring:
- Deduplicated ML doctest runners in CI for efficiency. (#53157)
- Converted isort configuration to Ruff for consistency. (#52869)
- Removed unused
PARALLEL_CIblocks and combined imports. (#53087, #52742)
Ray Tune
💫 Enhancements:
- Updated
test_train_v2_integrationto use the correctRunConfig. (#52882)
📖 Documentation:
- Replaced
session.reportwithtune.reportand corrected import paths. (#52801) - Removed outdated graphics cards reference in docs. (#52922)
- Fixed various docstring format issues. (#52879)
Ray Serve
🎉 New Features:
- Added support for implementing custom request routing algorithms. (#53251)
- Introduced an environment variable to prioritize custom resources during deployment scheduling. (#51978)
💫 Enhancements:
- The ingress API now accepts a builder function in addition to an ASGI app object. (#52892)
🔨 Fixes:
- Fixed
runtime_envvalidation forpy_modules. (#53186) - Disallowed special characters in Serve deployment and application names. (#52702)
- Added a descriptive error message when a deployment name is not found. (#45181)
📖 Documentation:
- Updated the guide on serving models with Triton Server in Ray Serve.
- Added documentation for custom request routing algorithms.
Ray Serve/Data LLM
🎉 New Features:
- Added initial support for prefill decode disaggregation (#53092)
- Expose vLLM Metrics to
serve.llmAPI (#52719) - Embedding API (#52229)
💫 Enhancements:
- Allow setting
name_prefixinbuild_llm_deployment(#53316) - Minor bug fix for 53144: stop tokens cannot be null (#53288)
- Add missing
repetition_penaltyvLLM sampling parameter (#53222) - Mitigate the serve.llm streaming overhead by properly batching stream chunks (#52766)
- Fix test_batch_vllm leaking resources by using larger
wait_for_min_actors_s
🔨 Fixes:
LLMRouter.check_health()should checkLLMServer.check_health()(#53358)- Fix runtime passthrough and auto-executor class selection (#53253)
- Update
check_healthreturn type (#53114) - Bug fix for duplication of
<bos>token (#52853) - In stream batching, first part of the stream was always consumed and not streamed back from the router (#52848)
RLlib
🎉 New Features:
- Add GPU inference to offline evaluation. (#52718)
💫 Enhancements:
- Do-over of examples for connector pipelines. (#52604)
- Cleanup of meta learning classes and examples. (#52680)
🔨 Fixes:
- Fixed weight synching in offline evaluation. (#52757)
- Fixed bug in
split_and_zero_padutility function (related to complex structures vs simple values ornp.arrays). (#52818)
Ray Core
💫 Enhancements:
uv runintegration is now enabled by default, so you don't need to set theRAY_RUNTIME_ENV_HOOKany more (#53060). If you rely on the previous behavior whereuv runonly runs the Ray driver but not the workers in the uv environment, you can switch back to the old behavior by setting theRAY_ENABLE_UV_RUN_RUNTIME_ENV=0environment variable.- Record gcs process metrics (#53171)
🔨 Fixes:
- Improvements for using
RuntimeEnvin the Job Submission API. (#52704) - Close unused pipe file descriptor of child processes of Raylet (#52700)
- Fix race condition when canceling task that hasn't started yet (#52703)
- Implement a thread pool and call the CPython API on all threads within the same concurrency group (#52575)
- cgraph: Fix execution schedules with collective operations (#53007)
- cgraph: Fix scalar tensor serialization edge case with
serialize_to_numpy_or_scalar(#53160) - Fix the issue where a valid
RestartActorrpc is ignored (#53330) - Fix reference counter crashes during worker graceful shutdown (#53002)
Dashboard
🎉 New Features:
- train: Add dynolog for on-demand GPU profiling for Torch training (#53191)
💫 Enhancements:
- Add configurability of 'orgId' param for requesting Grafana dashboards (#53236)
🔨 Fixes:
- Fix Grafana dashboards dropdowns for data and train dashboard (#52752)
- Fix dashboard for daylight savings (#52755)
Ray Container Images
💫 Enhancements:
- Upgrade
h11(#53361),requests,starlette,jinja2(#52951),pyopensslandcryptography(#52941) - Generate multi-arch image indexes (#52816)
Docs
🎉 New Features:
- End-to-end example: Entity recognition with LLMs (#52342) - new end-to-end example
- End-to-end example: xgboost tutorial (#52383)
- End-to-end tutorial for audio transcription and LLM as judge curation (#53189)
💫 Enhancements:
- Adds pydoclint to pre-commit (#52974)
Thanks!
Thank you to everyone who contributed to this release!
@NeilGirdhar, @ok-scale, @JiangJiaWei1103, @brandonscript, @eicherseiji, @ktyxx, @MichalPitr, @GeneDer, @rueian, @khluu, @bveeramani, @ArturNiederfahrenhorst, @c8ef, @lk-chen, @alanwguo, @simonsays1980, @codope, @ArthurBook, @kouroshHakha, @Yicheng-Lu-llll, @jujipotle, @aslonnie, @justinvyu, @machichima, @pcmoritz, @saihaj, @wingkitlee0, @omatthew98, @can-anyscale, @nadongjun, @chris-ray-zhang, @dizer-ti, @matthewdeng, @ryanaoleary, @janimo, @crypdick, @srinathk10, @cszhu, @TimothySeah, @iamjustinhsu, @mimiliaogo, @angelinalg, @gvspraveen, @kevin85421, @jjyao, @elliot-barn, @xingyu-long, @LeoLiao123, @thomasdesr, @ishaan-mehta, @noemotiovon, @hipudding, @davidxia, @omahs, @MengjinYan, @dengwxn, @MortalHappiness, @alhparsa, @emmanuel-ferdman, @alexeykudinkin, @KunWuLuan, @dev-goyal, @sven1977, @akyang-anyscale, @GokuMohandas, @raulchen, @abrarsheikh, @edoakes, @JoshKarpel, @bhmiller, @seanlaii, @ruisearch42, @dayshah, @Bye-legumes, @petern48, @richardliaw, @rclough, @israbbani, @jiwq
2.46.0Ray-2.46.0
Release Highlights
The 2.46 Ray release comes with a couple core highlights:
- Ray Data now supports hash shuffling for repartition and aggregations, along with support for joins. This enables many new data processing workloads to be run on Ray Data. Please give it a try and let us know if you have any feedback!
- Ray Serve LLM now supports vLLM v1 to be forward-compatible with upcoming vLLM releases. This also opens up significant performance improvements that come with vLLM's v1 refactor.
- There is a new Train Grafana dashboard which provides in-depth metrics on Grafana for better metrics on training workloads.
Ray Libraries
Ray Data
🎉 New Features:
- Adding support for hash-shuffle based repartitioning and aggregations (#52664)
- Added support for Joins (using hash-shuffle) (#52728)
- [LLM] vLLM support upgrades to 0.8.5 (#52344)
💫 Enhancements:
- Add memory attribute to ExecutionResources (#51127)
- Support ray_remote_args for read_tfrecords #52450
- [data.dashboard] Skip reporting internal metrics (#52666)
- Add PhysicalOperator.min_max_resource_usage_bounds (#52502)
- Speed up printing the schema (#52612)
- [data.dashboard] Dataset logger for worker (#52706)
- Support new pyiceberg version (#51744)
- Support num_cpus, memory, concurrency, batch_size for preprocess (#52574)
🔨 Fixes:
- Handle Arrow Array null types in to_numpy (#52572)
- Fix S3 serialization wrapper compatibility with RetryingPyFileSystem (#52568)
- Fixing Optimizer to apply rules until plan stabilize; (#52663)
- Fixing FuseOperators rule to properly handle the case of transformations drastically changing size of the dataset (#52570)
📖 Documentation:
- [LLM] Improve concurrency settings, improve prompt to achieve better throughput (#52634)
Ray Train
🎉 New Features:
- Add initial Train Grafana dashboard (#52709)
💫 Enhancements:
- Lazily import torch FSDP for ray.train.torch module to improve performance and reduce unnecessary dependencies (#52707)
- Deserialize the user-defined training function directly on workers, improving efficiency (#52684)
🔨 Fixes:
- Fixed error when no arguments are passed into TorchTrainer (#52693)
📖 Documentation:
- Added new XGBoostTrainer user guide (#52355)
🏗 Architecture refactoring:
- Re-enabled isort for python/ray/train to maintain code formatting consistency (#52717)
Ray Tune
📖 Documentation:
- Fixed typo in Ray Tune PyTorch Lightning docs (#52756)
Ray Serve
💫 Enhancements:
- [LLM] Refactor LLMServer and LLMEngine to not diverge too much from vllm chat formatting logic (#52597)
- Bump vllm from 0.8.2 to 0.8.5 in /python (#52344)
- [LLM] Add router replicas and batch size to llm config (#52655)
🔨 Fixes:
- Request cancellation not propagating correctly across deployments (#52591)
- BackpressureError not properly propagated in FastAPI ingress deployments (#52397)
- Hanging issue when awaiting deployment responses (#52561)
- [Serve.llm] made Ray Serve LLM compatible with vLLM v1 (#52668)
📖 Documentation:
- [Serve][LLM] Add doc for deploying DeepSeek (#52592)
RLLib
🎉 New Features:
- Offline Evaluation with loss function for Offline RL pipeline. Introduces three new callbacks,
on_offline_evaluate_start,on_offline_evaluate_end,on_offline_eval_runners_recreated(#52308)
💫 Enhancements:
- New
custom_dataattribute forSingleAgentEpisodeandMultiAgentEpisodeto store custom metrics. Deprecatesadd|get_temporary_timestep_data()(#52603)
Ray Core
💫 Enhancements:
- Only get serialization context once for all .remote args (#52690)
- Add grpc server success and fail count metric (#52711)
🔨 Fixes:
- Fix open leak for plasma store memory (shm/fallback) by workers (#52622)
- Assure closing of unused pipe for dashboard subprocesses (#52678)
- Expand protection against dead processes in reporter agent (#52657)
- [cgraph] Separate metadata and data in cross-node shared memory transport (#52619)
- Fix JobID check for detached actor tasks (#52405)
- Fix potential log loss of tail_job_logs (#44709)
🏗 Architecture refactoring:
- Cancel tasks when an owner dies instead of checking if an owner is dead during scheduling (#52516)
- Unify GcsAioClient and GcsClient (#52735)
- Remove worker context dependency from the task receiver (#52740)
Dashboard
🎉 New Features:
- Ray Train Grafana Dashboard added with a few built-in metrics. More to come.
Thanks!
Thank you to everyone who contributed to this release! @kevin85421, @edoakes, @wingkitlee0, @alexeykudinkin, @chris-ray-zhang, @sophie0730, @zcin, @raulchen, @matthewdeng, @abrarsheikh, @popojk, @Jay-ju, @ruisearch42, @eicherseiji, @lk-chen, @justinvyu, @dayshah, @kouroshHakha, @NeilGirdhar, @omatthew98, @ishaan-mehta, @davidxia, @ArthurBook, @GeneDer, @srinathk10, @dependabot[bot], @JoshKarpel, @aslonnie, @khluu, @can-anyscale, @israbbani, @saihaj, @MortalHappiness, @alanwguo, @bveeramani, @iamjustinhsu, @Ziy1-Tan, @xingyu-long, @simonsays1980, @fscnick, @chuang0221, @sven1977, @jjyao
2.45.0Ray-2.45.0
Ray Core
💫 Enhancements
- Make Object Store Fallback Directory configurable (#51189).
- [cgraph] Support
with_tensor_transport(transport='shm')(#51872). - [cgraph] Support reduce scatter and all gather collective for GPU communicator in compiled graph (#50624).
🔨 Fixes
- Make sure
KillActorRPC withforce_kill=Truecan actually kill the threaded actor (#51414). - [Autoscaler] Do not remove idle nodes for upcoming placement groups (#51122).
- Threaded actors get stuck forever if they receive two exit signals (#51582).
- [cgraph] Fix illegal memory access of cgraph when used in PP (#51734).
- Avoid resubmitted actor tasks from hanging indefinitely (#51904).
- Fix interleaved placement group creation process due to node failure (#52202).
- Flush task events in
CoreWorker::Shutdowninstead ofCoreWorker::Disconnect(#52374).
🏗 Architecture refactoring
- Split dashboard single process into multiple processes to improve stability and avoid interference between different heads (#51282, #51489, #51555, #51507, #51587, #51553, #51676, #51733, #51809, #51877, #51876, #51980, #52114).
Ray Libraries
Ray Data
🎉 New Features
- New ClickHouse sink via
Dataset.write_clickhouse()(#50377) - Support
ray_remote_args_fninDataset.groupby().map_groups()to set per-group runtime env and resource hints (#51236) - Expose
Dataset.name/set_nameas a public API for easier lineage tracking (#51076) - Allow async callable classes in
Dataset.flat_map()(#51180) - Introduce Ruleset abstraction for rule-based query optimisation (#51558)
- Add seamless conversion from Daft DataFrame to Ray Dataset (#51531)
- Improved support for line-delimited JSONL reading in
read_json()(#52083) - Provide
Dataset.export_metadata()for schema & stats snapshots (#52227)
💫 Enhancements
- Improved performance of sorting and sort-shuffle based operations (by more than 5x in benchmarks) (#51943)
- Metrics: number of map-actor workers alive / pending / restarting (#51082)
- Continuous memory-usage polling per map task (#51324)
- Auto-tune map-task memory based on output size (#51536)
- More informative back-pressure progress bar (#51697)
- Faster
RefBundle.get_cached_location()lookup (#52097) - Speed-up for
PandasBlock.size_bytes()(#52510) - Expanded
BlockColumnAccessorutilities and ops (#51326, #51571)
🔨 Fixes
- Correct
MapTransformFn.__eq__equality check (#51434) - Persist unresolved wildcard paths in
FileBasedDataSource(#51424) - Repair Hugging Face dynamic-module loading on workers (#51488)
- Prevent HTTP URLs from being expanded by
_expand_paths(#50178) - Fix Databricks host-URL parsing in Delta datasource (#49926)
- Restore reproducibility of
Dataset.random_sample()(#51401) - Correct
RandomAccessDataset.multiget()return values (#51421) - Ensure executor shutdown after schema fetch to avoid leaked actors (#52379)
- Repair streaming shutdown regression (#52509)
- Honour minimum resource reservation in
ResourceManager(#52226)
📖 Documentation
- Clarified shuffle-section wording (#51289)
- Documented concurrency semantics in API reference (#51963)
- Updated Ray Data guides for the 2.45 release (#52082)
Ray Train
🎉 New Features
- Fold
v2.LightGBMTrainerAPI into the public trainer class as an alternate constructor (#51265).
💫 Enhancements
- Use the user-defined function name as the training thread name (#52514).
- Upgrade LightGBM to version 4.6.0 (#52410).
- Adjust test size further for better results (#52283).
- Log errors raised by workers during training (#52223).
- Add worker group setup finished log to track progress (#52120).
- Change
test_telemetryto medium size (#52178). - Improve dataset name observability for better tracking (#52059).
- Differentiate between train v1 and v2 export data for clarity (#51728).
- Include scheduling status detail to improve debugging (#51480).
- Move train library usage check to
Trainerinitialization (#50966).
🔨 Fixes
- Separate
OutputSplitter._locality_hintsfromactor_locality_enabledandlocality_with_output(#52005). - Fix print redirection to handle new lines correctly (#51542).
- Mark
RunAttemptworkers as dead after completion to avoid stale states (#51540). - Fix
setup_wandbrank_zero_onlylogic (#52381).
📖 Documentation
- Add links to the Train v2 migration guide in the Train API pages (#51924).
🏗 Architecture refactoring
- Replace AMD device environment variable with
HIP_VISIBLE_DEVICES(#51104). - Remove unnecessary string literal splits (#47360).
Ray Tune
📖 Documentation
- Improve Tune documentation structure (#51684).
- Fix syntax errors in Ray Tune example
pbt_ppo_example.ipynb(#51626).
Ray Serve
🎉 New Features
- Add request timeout sec for gRPC (#52276).
- [Serve.llm]
ray.llmsupport custom accelerators (#51359).
💫 Enhancements
- Improve Serve deploy ignore behavior (#49336).
- [Serve.llm] Telemetry GPU type fallback to cluster hardware when unspecified (#52003).
🔨 Fixes
- Fix multiplex fallback logic during burst requests (#51389).
- Don't stop retrying replicas when a deployment is scaling back up from zero (#51600).
- Remove
RAY_SERVE_ENABLE_QUEUE_LENGTH_CACHEflag (#51649). - Remove
RAY_SERVE_EAGERLY_START_REPLACEMENT_REPLICASflag (#51722). - Unify request cancellation errors (#51768).
- Catch timeout error when checking if proxy is dead (#52002).
- Suppress cancelled errors in proxy (#52423).
- [Serve.llm] Fix loading model from remote storage and add docs (#51617).
- [Serve.llm] Fix
ServeReplicadeployment failure for DeepSeek (#51989). - [Serve.llm] Check
GPUTypeenum value rather than enum itself (#52037). - [Serve.llm] Fix inconsistent v0/v1 config passed to vLLM (#52185).
- [Serve.llm] Fix V0/V1 auto-resolution more broadly (#52357).
- [Serve.llm] Fix getting prompt limit for input-too-long error (#52315).
📖 Documentation
- Update deployment status docs (#51610).
- Update engine kwargs in LoRA instructions (#52203).
- Remove outdated docs about request retries (#52438).
- [Serve.llm] Add gen config related doc (#51572).
- [Serve.llm] Fix loading model from remote storage and add docs (#51617).
- [Serve.llm] Update Ray Serve LLM docs (#51867).
- [Serve.llm] Update model_source doc (#52054).
- [Serve.llm] Add doc example on using
tokenizer_pool_size(#52356). - [Serve.llm] Add API links (#52384).
RLlib
🎉 New Features
💫 Enhancements
- Offline RL:
- Better handling of tensors in
MetricsLoggerandStats(#52334). - Make min/max env steps per evaluation sample call configurable for
duration="auto"(#51637). - Access to all episode chunks in EnvRunner callback
on_episode_end(#52252).
🔨 Fixes
🏗 Architecture refactoring
- Remove local
EnvRunner(optional) (#52091).
Dashboard
💫 Enhancements
- [Core/Dashboard] Add CPU and memory metrics for subprocesses (#52208).
🔨 Fixes
- [Observability] Fix metrics in the core Grafana dashboard to sum by labels (#51894).
- [Dashboard] Remove millisecond padding in
DurationTextcomponent (#52395). - [Core][Dashboard-Agent] Surface the root cause of job submission failure when the dashboard agent fails to launch HTTP server (#51869).
Many thanks to all those who contributed to this release! @samhallam-reverb, @vickytsang, @anyadontfly, @zhaoch23, @bryant1410, @khluu, @akyang-anyscale, @angelinalg, @RocketRider, @wingkitlee0, @robertnishihara, @liuxsh9, @KepingYan, @SumanthRH, @emmanuel-ferdman, @ashwinsnambiar, @ArturNiederfahrenhorst, @KPCOFGS, @Bye-legumes, @400Ping, @dayshah, @aslonnie, @justinvyu, @rugggg, @zhiqiwangebay, @comaniac, @thusoy, @JDarDagran, @chuang0221, @davidxia, @tnixon, @israbbani, @win5923, @leibovitzgil, @simonsays1980, @machichima, @VamshikShetty, @zcin, @lk-chen, @abrarsheikh, @edoakes, @alexeykudinkin, @ruisearch42, @tespent, @jecsand838, @sijieamoy, @can-anyscale, @JonDum, @jyakaranda, @nadongjun, @d-miketa, @MortalHappiness, @kevin85421, @Ziy1-Tan, @matthewdeng, @crypdick, @hongpeng-guo, @richardliaw, @Qiaolin-Yu, @bhmiller, @soffer-anyscale, @kenchung285, @nishi-t, @Drice1999, @ryanaoleary, @chris-ray-zhang, @MengjinYan, @saihaj, @jjyao, @jaganmolleti7, @iamjustinhsu, @fscnick, @pcmoritz, @Jay-ju, @westonpace, @han-steve, @GeneDer, @denadai2, @thomasdesr, @jaychia, @raulchen, @omatthew98, @srinathk10, @alanwguo, @rueian, @akshay-anyscale, @bveeramani, @dentiny, @dhakshin32, @kouroshHakha, @sven1977
2.44.1Ray-2.44.1
There is no difference between 2.44.1 and 2.44.0, though we needed a patch version for other out of band reasons. To fill the awkward blankness, here is a haiku about Ray:
Under screen-lit skies A ray of bliss in each patch Joy at any scale
2.44.0Ray-2.44.0
Release Highlights
- This release features Ray Compiled Graph (beta). Ray Compiled Graph gives you a classic Ray Core-like API, but with (1) less than 50us system overhead for workloads that repeatedly execute the same task graph; and (2) native support for GPU-GPU communication via NCCL. Ray Compiled Graph APIs simplify high-performance multi-GPU workloads such as LLM inference and training. The beta release refines the API, enhances stability, and adds or improves features like visualization, profiling and experimental GPU compute/computation overlap. For more information, refer to Ray documentation: https://docs.ray.io/en/latest/ray-core/compiled-graph/ray-compiled-graph.html
- The experimental Ray Workflows library has been deprecated and will be removed in a future version of Ray. Ray Workflows has been marked experimental since its inception and hasn’t been maintained due to the Ray team focusing on other priorities. If you are using Ray Workflows, we recommend pinning your Ray version to 2.44.
Ray Libraries
Ray Data
🎉 New Features:
- Add Iceberg write support through pyiceberg (#50590)
- [LLM] Various feature enhancements to Ray Data LLM, including LoRA support #50804 and structured outputs #50901
💫 Enhancements:
- Add dataset/operator state, progress, total metrics (#50770)
- Make chunk combination threshold configurable (#51200)
- Store average memory use per task in OpRuntimeMetrics (#51126)
- Avoid unnecessary conversion to Numpy when creating Arrow/Pandas blocks (#51238)
- Append-mode API for preprocessors -- #50848, #50847, #50642, #50856, #50584. Note that vectorizers and hashers now output a single column instead 1 column per feature. In the near future, we will be graduating preprocessors to beta.
🔨 Fixes:
- Fixing Map Operators to avoid unconditionally overriding generator's back-pressure configuration (#50900)
- Fix filter expr equating negative numbers (#50932)
- Fix error message for
override_num_blockswhen reading from a HuggingFace Dataset (#50998) - Make num_blocks in repartition optional (#50997)
- Always pin the seed when doing file-based random shuffle (#50924)
- Fix
StandardScalerto handleNaNstats (#51281)
Ray Train
🎉 New Features:
- Implement state export API (#50622, #51085, #51177)
💫 Enhancements:
- Folded v2.XGBoostTrainer API into the public trainer class as an alternate constructor (#50045)
- Created a default ScalingConfig if one is not provided to the trainer (#51093)
- Improved TrainingFailedError message (#51199)
- Utilize FailurePolicy factory (#51067)
🔨 Fixes:
- Fixed trainer import deserialization when captured within a Ray task (#50862)
- Fixed serialize import test for Python 3.12 (#50963)
- Fixed RunConfig deprecation message in Tune being emitted in trainer.fit usage (#51198)
📖 Documentation:
- [Train V2] Updated API references (#51222)
- [Train V2] Updated persistent storage guide (#51202)
- [Train V2] Updated user guides for metrics, checkpoints, results, and experiment tracking (#51204)
- [Train V2] Added updated Train + Tune user guide (#51048)
- [Train V2] Added updated fault tolerance user guide (#51083)
- Improved HF Transformers example (#50896)
- Improved Train DeepSpeed example (#50906)
- Use correct mean and standard deviation norm values in image tutorials (#50240)
🏗 Architecture refactoring:
- Deprecated Torch AMP wrapper utilities (#51066)
- Hid private functions of train context to avoid abuse (#50874)
- Removed ray storage dependency and deprecated RAY_STORAGE env var configuration option (#50872)
- Moved library usage tests out of core (#51161)
Ray Tune
📖 Documentation:
- Various improvements to Tune Pytorch CIFAR tutorial (#50316)
- Various improvements to the Ray Tune XGBoost tutorial (#50455)
- Various enhancements to Tune Keras example (#50581)
- Minor improvements to Hyperopt tutorial (#50697)
- Various improvements to LightGBM tutorial (#50704)
- Fixed non-runnable Optuna tutorial (#50404)
- Added documentation for Asynchronous HyperBand Example in Tune (#50708)
- Replaced reuse actors example with a fuller demonstration (#51234)
- Fixed broken PB2/RLlib example (#51219)
- Fixed typo and standardized equations across the two APIs (#51114)
- Improved PBT example (#50870)
- Removed broken links in documentation (#50995, #50996)
🏗 Architecture refactoring:
- Removed ray storage dependency and deprecated RAY_STORAGE env var configuration option (#50872)
- Moved library usage tests out of core (#51161)
Ray Serve
🎉 New Features:
💫 Enhancements:
- Clean up shutdown behavior of serve (#51009)
- Add
additional_log_standard_attrsto serve logging config (#51144) - [LLM] remove
asyncacheandcachetoolsfrom dependencies (#50806) - [LLM] remove
backoffdependency (#50822) - [LLM] Remove
asyncio_timeoutfromray[llm]deps on python<3.11 (#50815) - [LLM] Made JSON validator a singleton and
jsonrefpackages lazy imported (#50821) - [LLM] Reuse
AutoscalingConfigandDeploymentConfigfrom Serve (#50871) - [LLM] Use
pyarrowFS for cloud remote storage interaction (#50820) - [LLM] Add usage telemetry for
serve.llm(#51221)
🔨 Fixes:
- Exclude redirects from request error count (#51130)
- [LLM] Fix the wrong
device_capabilityissue in vllm on quantized models (#51007) - [LLM] add
gen-configrelated data file to the package (#51347)
📖 Documentation:
- [LLM] Fix quickstart serve LLM docs (#50910)
- [LLM] update
build_openai_appto include yaml example (#51283) - [LLM] remove old vllm+serve doc (#51311)
RLlib
💫 Enhancements:
- APPO/IMPALA accelerate:
- Unify namings for actor managers' outstanding in-flight requests metrics. (#51159)
- Add timers to env step, forward pass, and complete connector pipelines runs. (#51160)
🔨 Fixes:
📖 Documentation:
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Enhanced
uvsupport (#51233)
💫 Enhancements:
- Made infeasible task errors much more obvious (#45909)
- Log rotation for workers, runtime env agent, and dashboard agent (#50759, #50877, #50909)
- Support customizing gloo timeout (#50223)
- Support torch profiling in Compiled Graph (#51022)
- Change default tensor deserialization in Compiled Graph (#50778)
- Use current node id if no node is specified on ray drain-node (#51134)
🔨 Fixes:
- Fixed an issue where the raylet continued to have high CPU overhead after a job was terminated (#49999).
- Fixed compiled graph buffer release issues (#50434)
- Improved logic for
ray.waiton object store objects (#50680) - Ray metrics performing validation the same validation as Prometheus for invalid names (#40586)
- Make executor a long-running Python thread (#51016)
- Fix plasma client memory leak (#51051)
- Fix using
ray.actor.exit_actor()from within an async background thread (#49451) - Fix UV hook to support Ray Job submission (#51150)
- Fix resource leakage after ray job is finished (#49999)
- Use the correct way to check whether an actor task is running (#51158)
- Controllably destroy CUDA events in GPUFuture’s (Compiled Graph) (#51090)
- Avoid creating a thread pool with 0 threads (#50837)
- Fix the logic to calculate the number of workers based on the TPU version (#51227)
📖 Documentation:
- Updated error message and anti-pattern when forking new processes in worker processes (#50705)
- Compiled Graph API Documentation (#50754)
- Doc for nsight and torch profile for Compiled Graph (#51037)
- Compiled Graph Troubleshooting Doc (#51030)
- Completion of of Compiled Graph Docs (#51206)
- Updated
jemallocprofiling doc (#51031) - Add information about standard Python logger attributes (#51038)
- Add description for named placement groups to require a namespace (#51285)
- Deprecation warnings for Ray Workflows and cluster-wide storage (#51309)
Ray Clusters
🎉 New Features:
- Add cuda 12.8 images (#51210)
💫 Enhancements:
- Add Pod names to the output of
ray status -v(#51192)
🔨 Fixes:
- Fix autoscaler v1 crash from infeasible strict spread placement groups (#39691)
🏗 Architecture refactoring:
- Refactor autoscaler v2 log formatting (#49350)
- Update yaml example for
CoordinatorSenderNodeProvider(#51292)
Dashboard
🎉 New Features:
- Discover TPU logs on the Ray Dashboard (#47737)
🔨 Fixes:
- Return the correct error message when trying to kill non-existent actors (#51341)
Many thanks to all those who contributed to this release! @crypdick, @rueian, @justinvyu, @MortalHappiness, @CheyuWu, @GeneDer, @dayshah, @lk-chen, @matthewdeng, @co63oc, @win5923, @sven1977, @akshay-anyscale, @ShaochenYu-YW, @gvspraveen, @bveeramani, @jakac, @VamshikShetty, @raulchen, @PaulFenton, @elimelt, @comaniac, @qinyiyan, @ruisearch42, @nadongjun, @AndyUB, @israbbani, @hongpeng-guo, @laysfire, @alexeykudinkin, @Drice1999, @harborn, @scottsun94, @abrarsheikh, @martinbomio, @MengjinYan, @HollowMan6, @orcahmlee, @kenchung285, @csy1204, @noemotiovon, @jujipotle, @davidxia, @kevin85421, @hcc429, @edoakes, @kouroshHakha, @omatthew98, @alanwguo, @farridav, @aslonnie, @simonsays1980, @pcmoritz, @terraflops1048576, @JoshKarpel, @SumanthRH, @sijieamoy, @zcin, @can-anyscale, @akyang-anyscale, @angelinalg, @saihaj, @jjyao, @anmscale, @ryanaoleary, @dentiny, @jimmyxie-figma, @stephanie-wang, @khluu, @maofagui
2.43.0Ray-2.43.0
Highlights
- This release features new modules in Ray Serve and Ray Data for integration with large language models, marking the first step of addressing #50639. Existing Ray Data and Ray Serve have limited support for LLM deployments, where users have to manually configure and manage the underlying LLM engine. In this release, we offer APIs for both batch inference and serving of LLMs within Ray in
ray.data.llmandray.serve.llm. See the below notes for more details. These APIs are marked as alpha -- meaning they may change in future releases without a deprecation period. - Ray Train V2 is available to try starting in Ray 2.43! Run your next Ray Train job with the
RAY_TRAIN_V2_ENABLED=1environment variable. See the migration guide for more information. - A new integration with
uv runthat allows easily specifying Python dependencies for both driver and workers in a consistent way and enables quick iterations for development of Ray applications (#50160, 50462), check out our blog post
Ray Libraries
Ray Data
🎉 New Features:
- Ray Data LLM: We are introducing a new module in Ray Data for batch inference with LLMs (currently marked as alpha). It offers a new
Processorabstraction that interoperates with existing Ray Data pipelines. This abstraction can be configured two ways:- Using the
vLLMEngineProcessorConfig, which configures vLLM to load model replicas for high throughput model inference - Using the
HttpRequestProcessorConfig, which sends HTTP requests to an OpenAI-compatible endpoint for inference. - Documentation for these features can be found here.
- Using the
- Implement accurate memory accounting for
UnionOperator(#50436) - Implement accurate memory accounting for all-to-all operations (#50290)
💫 Enhancements:
- Support class constructor args for filter() (#50245)
- Persist ParquetDatasource metadata. (#50332)
- Rebasing
ShufflingBatcherontotry_combine_chunked_columns(#50296) - Improve warning message if required dependency isn't installed (#50464)
- Move data-related test logic out of core tests directory (#50482)
- Pass executor as an argument to ExecutionCallback (#50165)
- Add operator id info to task+actor (#50323)
- Abstracting common methods, removing duplication in
ArrowBlockAccessor,PandasBlockAccessor(#50498) - Warn if map UDF is too large (#50611)
- Replace
AggregateFnwithAggregateFnV2, cleaning up Aggregation infrastructure (#50585) - Simplify Operator.repr (#50620)
- Adding in
TaskDurationStatsandon_execution_stepcallback (#50766) - Print Resource Manager stats in release tests (#50801)
🔨 Fixes:
- Fix invalid escape sequences in
grouped_data.pydocstrings (#50392) - Deflake
test_map_batches_async_generator(#50459) - Avoid memory leak with
pyarrow.infer_typeon datetime arrays (#50403) - Fix parquet partition cols to support tensors types (#50591)
- Fixing aggregation protocol to be appropriately associative (#50757)
📖 Documentation:
- Remove "Stable Diffusion Batch Prediction with Ray Data" example (#50460)
Ray Train
🎉 New Features:
- Ray Train V2 is available to try starting in Ray 2.43! Run your next Ray Train job with the
RAY_TRAIN_V2_ENABLED=1environment variable. See the migration guide for more information.
💫 Enhancements:
- Add a training ingest benchmark release test (#50019, #50299) with a fault tolerance variant (#50399)
- Add telemetry for Trainer usage in V2 (#50321)
- Add pydantic as a
ray[train]extra install (#46682) - Add state tracking to train v2 to make run status, run attempts, and training worker metadata observable (#50515)
🔨 Fixes:
- Increase doc test parallelism (#50326)
- Disable TF test for py312 (#50382)
- Increase test timeout to deflake (#50796)
📖 Documentation:
- Add missing xgboost pip install in example (#50232)
🏗 Architecture refactoring:
- Add deprecation warnings pointing to a migration guide for Ray Train V2 (#49455, #50101, #50322)
- Refactor internal Train controller state management (#50113, #50181, #50388)
Ray Tune
🔨 Fixes:
- Fix worker node failure test (#50109)
📖 Documentation:
- Update all doc examples off of ray.train imports (#50458)
- Update all ray/tune/examples off of ray.train imports (#50435)
- Fix typos in persistent storage guide (#50127)
- Remove Binder notebook links in Ray Tune docs (#50621)
🏗 Architecture refactoring:
- Update RLlib to use ray.tune imports instead of ray.air and ray.train (#49895)
Ray Serve
🎉 New Features:
- Ray Serve LLM: We are introducing a new module in Ray Serve to easily integrate open source LLMs in your Ray Serve deployment, currently marked as alpha. This opens up a powerful capability of composing complex applications with multiple LLMs, which is a use case in emerging applications like agentic workflows. Ray Serve LLM offers a couple core components, including:
VLLMService: A prebuilt deployment that offers a full-featured vLLM engine integration, with support for features such as LoRA multiplexing and multimodal language models.LLMRouter: An out-of-the-box OpenAI compatible model router that can route across multiple LLM deployments.- Documentation can be found at https://docs.ray.io/en/releases-2.43.0/serve/llm/overview.html
💫 Enhancements:
- Add
required_resourcesto REST API (#50058)
🔨 Fixes:
- Fix batched requests hanging after cancellation (#50054)
- Properly propagate backpressure error (#50311)
RLlib
🎉 New Features:
- Added env vectorization support for multi-agent (new API stack). (#50437)
💫 Enhancements:
- APPO/IMPALA various acceleration efforts. Reached 100k ts/sec on Atari benchmark with 400 EnvRunners and 16 (multi-node) GPU Learners: #50760, #50162, #50249, #50353, #50368, #50379, #50440, #50477, #50527, #50528, #50600, #50309
- Offline RL:
🔨 Fixes:
- Fix SPOT preemption tolerance for large AlgorithmConfig: Pass by reference to RolloutWorker (#50688)
on_workers/env_runners_recreatedcallback would be called twice. (#50172)default_resource_request: aggregator actors missing in placement group for local Learner. (#50219, #50475)
📖 Documentation:
- Docs re-do (new API stack):
Ray Core and Ray Clusters
Ray Core
💫 Enhancements:
- [Core] Enable users to configure python standard log attributes for structured logging (#49871)
- [Core] Prestart worker with runtime env (#49994)
- [compiled graphs] Support experimental_compile(_default_communicator=comm) (#50023)
- [Core] ray.util.Queue Empty and Full exceptions extend queue.Empty and Full (#50261)
- [Core] Initial port of Ray to Python 3.13 (#47984)
🔨 Fixes:
- [Core] Ignore stale ReportWorkerBacklogRequest (#50280)
- [Core] Fix check failure due to negative available resource (#50517)
Ray Clusters
📖 Documentation:
- Update the KubeRay docs to v1.3.0.
Ray Dashboard
🎉 New Features:
- Additional filters for job list page (#50283)
Thanks
Thank you to everyone who contributed to this release! 🥳 @liuxsh9, @justinrmiller, @CheyuWu, @400Ping, @scottsun94, @bveeramani, @bhmiller, @tylerfreckmann, @hefeiyun, @pcmoritz, @matthewdeng, @dentiny, @erictang000, @gvspraveen, @simonsays1980, @aslonnie, @shorbaji, @LeoLiao123, @justinvyu, @israbbani, @zcin, @ruisearch42, @khluu, @kouroshHakha, @sijieamoy, @SergeCroise, @raulchen, @anson627, @bluenote10, @allenyin55, @martinbomio, @rueian, @rynewang, @owenowenisme, @Betula-L, @alexeykudinkin, @crypdick, @jujipotle, @saihaj, @EricWiener, @kevin85421, @MengjinYan, @chris-ray-zhang, @SumanthRH, @chiayi, @comaniac, @angelinalg, @kenchung285, @tanmaychimurkar, @andrewsykim, @MortalHappiness, @sven1977, @richardliaw, @omatthew98, @fscnick, @akyang-anyscale, @cristianjd, @Jay-ju, @spencer-p, @win5923, @wxsms, @stfp, @letaoj, @JDarDagran, @jjyao, @srinathk10, @edoakes, @vincent0426, @dayshah, @davidxia, @DmitriGekhtman, @GeneDer, @HYLcool, @gameofby, @can-anyscale, @ryanaoleary, @eddyxu
2.42.1Ray-2.42.1
Ray Data
🔨 Fixes:
- Fixes incorrect assertion (#50210)
2.42.0Ray-2.42.0
Ray Libraries
Ray Data
🎉 New Features:
- Added read_audio and read_video (#50016)
💫 Enhancements:
- Optimized multi-column groupbys (#45667)
- Included Ray user-agent in BigQuery client construction (#49922)
🔨 Fixes:
- Fixed bug that made read tasks non-deterministic (#49897)
🗑️ Deprecations:
- Deprecated num_rows_per_file in favor of min_rows_per_file (#49978)
Ray Train
💫 Enhancements:
- Add Train v2 user-facing callback interface (#49819)
- Add TuneReportCallback for propagating intermediate Train results to Tune (#49927)
Ray Tune
📖 Documentation:
- Fix BayesOptSearch docs (#49848)
Ray Serve
💫 Enhancements:
- Cache metrics in replica and report on an interval (#49971)
- Cache expensive calls to inspect.signature (#49975)
- Remove extra pickle serialization for gRPCRequest (#49943)
- Shared LongPollClient for Routers (#48807)
- DeploymentHandle API is now stable (#49840)
🔨 Fixes:
- Fix batched requests hanging after request cancellation bug (#50054)
RLlib
💫 Enhancements:
- Add metrics to replay buffers. (#49822)
- Enhance node-failure tolerance (new API stack). (#50007)
- MetricsLogger cleanup throughput logic. (#49981)
- Split AddStates... connectors into 2 connector pieces (
AddTimeDimToBatchAndZeroPadandAddStatesFromEpisodesToBatch) (#49835)
🔨 Fixes:
- Old API stack IMPALA/APPO: Re-introduce mixin-replay-buffer pass, even if
replay-ratio=0(fixes a memory leak). (#49964) - Fix MetricsLogger race conditions. (#49888)
- APPO/IMPALA: Bug fix for > 1 Learner actor. (#49849)
📖 Documentation:
- New MetricsLogger API rst page. (#49538)
- Move "new API stack" info box right below page titles for better visibility. (#49921)
- Add example script for how to log custom metrics in
training_step(). (#49976) - Enhance/redo autoregressive action distribution example. (#49967)
- Make the "tiny CNN" example RLModule run with APPO (by implementing
TargetNetAPI) (#49825)
Ray Core and Ray Clusters
Ray Core
💫 Enhancements:
- Only get single node info rather then all when needed (#49727)
- Introduce with_tensor_transport API (#49753)
🔨 Fixes:
- Fix tqdm manager thread safe #50040
Ray Clusters
🔨 Fixes:
- Fix token expiration for ray autoscaler (#48481)
Thanks
Thank you to everyone who contributed to this release! 🥳 @wingkitlee0, @saihaj, @win5923, @justinvyu, @kevin85421, @edoakes, @cristianjd, @rynewang, @richardliaw, @LeoLiao123, @alexeykudinkin, @simonsays1980, @aslonnie, @ruisearch42, @pcmoritz, @fscnick, @bveeramani, @mattip, @till-m, @tswast, @ujjawal-khare, @wadhah101, @nikitavemuri, @akshay-anyscale, @srinathk10, @zcin, @dayshah, @dentiny, @LydiaXwQ, @matthewdeng, @JoshKarpel, @MortalHappiness, @sven1977, @omatthew98
2.41.0Ray-2.41.0
Highlights
- Major update of RLlib docs and example scripts for the new API stack.
Ray Libraries
Ray Data
🎉 New Features:
- Expression support for filters (#49016)
- Support
partition_colsinwrite_parquet(#49411) - Feature: implement multi-directional sort over Ray Data datasets (#49281)
💫 Enhancements:
- Use dask 2022.10.2 (#48898)
- Clarify schema validation error (#48882)
- Raise
ValueErrorwhen the data sort key isNone(#48969) - Provide more messages when webdataset format is error (#48643)
- Upgrade Arrow version from 17 to 18 (#48448)
- Update
hudiversion to 0.2.0 (#48875) webdataset: expand JSON objects into individual samples (#48673)- Support passing kwargs to map tasks. (#49208)
- Add
ExecutionCallbackinterface (#49205) - Add seed for read files (#49129)
- Make
select_columnsandrename_columnsuse Project operator (#49393)
🔨 Fixes:
- Fix partial function name parsing in
map_groups(#48907) - Always launch one task for
read_sql(#48923) - Reimplement of fix memory pandas (#48970)
webdataset: flatten return args (#48674)- Handle
numpy > 2.0.0behaviour in_create_possibly_ragged_ndarray(#48064) - Fix
DataContextsealing for multiple datasets. (#49096) - Fix
to_tfforListtypes (#49139) - Fix type mismatch error while mapping nullable column (#49405)
- Datasink: support passing write results to
on_write_completes(#49251) - Fix
groupbyhang when value containsnp.nan(#49420) - Fix bug where
file_extensionsdoesn't work with compound extensions (#49244) - Fix map operator fusion when concurrency is set (#49573)
Ray Train
🎉 New Features:
- Output JSON structured log files for system and application logs (#49414)
- Add support for AMD ROCR_VISIBLE_DEVICES (#49346)
💫 Enhancements:
- Implement Train Tune API Revamp REP (#49376, #49467, #49317, #49522)
🏗 Architecture refactoring:
- LightGBM: Rewrite
get_network_paramsimplementation (#49019)
Ray Tune
🎉 New Features:
- Update
optuna_searchto allow users to configure optuna storage (#48547)
🏗 Architecture refactoring:
- Make changes to support Train Tune API Revamp REP (#49308, #49317, #49519)
Ray Serve
💫 Enhancements:
- Improved request_id generation to reduce proxy CPU overhead (#49537)
- Tune GC threshold by default in proxy (#49720)
- Use
pickle.dumpsfor faster serialization fromproxytoreplica(#49539)
🔨 Fixes:
- Handle nested ‘=’ in serve run arguments (#49719)
- Fix bug when
ray.init()is called multiple times with differentruntime_envs(#49074)
🗑️ Deprecations:
- Adds a warning that the default behavior for sync methods will change in a future release. They will be run in a threadpool by default. You can opt into this behavior early by setting
RAY_SERVE_RUN_SYNC_IN_THREADPOOL=1. (#48897)
RLlib
🎉 New Features:
- Add support for external Envs to new API stack: New example script and custom tcp-capable EnvRunner. (#49033)
💫 Enhancements:
- Offline RL:
- Add sequence sampling to
EpisodeReplayBuffer. (#48116) - Allow incomplete
SampleBatchdata and fully compressed observations. (#48699) - Add option to customize
OfflineData. (#49015) - Enable offline training without specifying an environment. (#49041)
- Various fixes: #48309, #49194, #49195
- Add sequence sampling to
- APPO/IMPALA acceleration (new API stack):
- Add support for
AggregatorActorsper Learner. (#49284) - Auto-sleep time AND thread-safety for MetricsLogger. (#48868)
- Activate APPO cont. actions release- and CI tests (HalfCheetah-v1 and Pendulum-v1 new in
tuned_examples). (#49068) - Add "burn-in" period setting to the training of stateful RLModules. (#49680)
- Add support for
- Callbacks API: Add support for individual lambda-style callbacks. (#49511)
- Other enhancements: #49687, #49714, #49693, #49497, #49800, #49098
📖 Documentation:
- New example scripts:
- How to write a custom algorithm (VPG) from scratch. (#49536)
- How to customize an offline data pipeline. (#49046)
- GPUs on EnvRunners. (#49166)
- Hierarchical training. (#49127)
- Async gym vector env. (#49527)
- Other fixes and enhancements: #48988, #49071
- New/rewritten html pages:
- Rewrite checkpointing page. (#49504)
- New scaling guide. (#49528)
- New callbacks page. (#49513)
- Rewrite
RLModulepage. (#49387) - New AlgorithmConfig page and redo
package_refpage for algo configs. (#49464) - Rewrite offline RL page. (#48818)
- Rewrite “key concepts" rst page. (#49398)
- Rewrite RL environments pages. (#49165, #48542)
- Fixes and enhancements: #49465, #49037, #49304, #49428, #49474, #49399, #49713, #49518
🔨 Fixes:
- Add
on_episode_createdcallback to SingleAgentEnvRunner. (#49487) - Fix
train_batch_size_per_learnerproblems. (#49715) - Various other fixes: #48540, #49363, #49418, #49191
🏗 Architecture refactoring:
- RLModule: Introduce
Default[algo]RLModuleclasses (#49366, #49368) - Remove RLlib dependencies from setup.py; add
ormsgpack(#49489)
🗑️ Deprecations:
- #49488, #49144
Ray Core and Ray Clusters
Ray Core
💫 Enhancements:
- Add
task_name,task_function_nameandactor_namein Structured Logging (#48703) - Support redis/valkey authentication with username (#48225)
- Add v6e TPU Head Resource Autoscaling Support (#48201)
- compiled graphs: Support all driver and actor read combinations (#48963)
- compiled graphs: Add ascii based CG visualization (#48315)
- compiled graphs: Add ray[cg] pip install option (#49220)
- Allow uv cache at installation (#49176)
- Support != Filter in GCS for Task State API (#48983)
- compiled graphs: Add CPU-based NCCL communicator for development (#48440)
- Support gcs and raylet log rotation (#48952)
- compiled graphs: Support
nsight.nvtxprofiling (#49392)
🔨 Fixes:
- autoscaler: Health check logs are not visible in the autoscaler container's stdout (#48905)
- Only publish
WORKER_OBJECT_EVICTIONwhen the object is out of scope or manually freed (#47990) - autoscaler: Autoscaler doesn't scale up correctly when the KubeRay RayCluster is not in the goal state (#48909)
- autoscaler: Fix incorrectly terminating nodes misclassified as idle in autoscaler v1 (#48519)
- compiled graphs: Fix the missing dependencies when num_returns is used (#49118)
- autoscaler: Fuse scaling requests together to avoid overloading the Kubernetes API server (#49150)
- Fix bug to support S3 pre-signed url for
.whlfile (#48560) - Fix data race on gRPC client context (#49475)
- Make sure draining node is not selected for scheduling (#49517)
Ray Clusters
💫 Enhancements:
- Azure: Enable accelerated networking as a flag in azure vms (#47988)
📖 Documentation:
- Kuberay: Logging: Add Fluent Bit
DaemonSetand Grafana Loki to "Persist KubeRay Operator Logs" (#48725) - Kuberay: Logging: Specify the Helm chart version in "Persist KubeRay Operator Logs" (#48937)
Dashboard
💫 Enhancements:
- Add instance variable to many default dashboard graphs (#49174)
- Display duration in milliseconds if under 1 second. (#49126)
- Add
RAY_PROMETHEUS_HEADERSenv for carrying additional headers to Prometheus (#49353) - Document about the
RAY_PROMETHEUS_HEADERSenv for carrying additional headers to Prometheus (#49700)
🏗 Architecture refactoring:
- Move
memraydependency from default to observability (#47763) - Move
StateHead's methods into free functions. (#49388)
Thanks
@raulchen, @alanwguo, @omatthew98, @xingyu-long, @tlinkin, @yantzu, @alexeykudinkin, @andrewsykim, @win5923, @csy1204, @dayshah, @richardliaw, @stephanie-wang, @gueraf, @rueian, @davidxia, @fscnick, @wingkitlee0, @KPostOffice, @GeneDer, @MengjinYan, @simonsays1980, @pcmoritz, @petern48, @kashiwachen, @pfldy2850, @zcin, @scottjlee, @Akhil-CM, @Jay-ju, @JoshKarpel, @edoakes, @ruisearch42, @gorloffslava, @jimmyxie-figma, @bthananjeyan, @sven1977, @bnorick, @jeffreyjeffreywang, @ravi-dalal, @matthewdeng, @angelinalg, @ivanthewebber, @rkooo567, @srinathk10, @maresb, @gvspraveen, @akyang-anyscale, @mimiliaogo, @bveeramani, @ryanaoleary, @kevin85421, @richardsliu, @hartikainen, @coltwood93, @mattip, @Superskyyy, @justinvyu, @hongpeng-guo, @ArturNiederfahrenhorst, @jecsand838, @Bye-legumes, @hcc429, @WeichenXu123, @martinbomio, @HollowMan6, @MortalHappiness, @dentiny, @zhe-thoughts, @anyadontfly, @smanolloff, @richo-anyscale, @khluu, @xushiyan, @rynewang, @japneet-anyscale, @jjyao, @sumanthratna, @saihaj, @aslonnie
Many thanks to all those who contributed to this release!
2.40.0Ray-2.40.0
Ray Libraries
Ray Data
🎉 New Features:
- Added read_hudi (https://github.com/ray-project/ray/pull/46273)
💫 Enhancements:
- Improved performance of DelegatingBlockBuilder (https://github.com/ray-project/ray/pull/48509)
- Improved memory accounting of pandas blocks (https://github.com/ray-project/ray/pull/46939)
🔨 Fixes:
- Fixed bug where you can’t specify a schema with write_parquet (https://github.com/ray-project/ray/issues/48630)
- Fixed bug where to_pandas errors if your dataset contains Arrow and pandas blocks (https://github.com/ray-project/ray/pull/48583)
- Fixed bug where map_groups doesn’t work with pandas data (https://github.com/ray-project/ray/pull/48287)
- Fixed bug where write_parquet errors if your data contains nullable fields (https://github.com/ray-project/ray/pull/48478)
- Fixed bug where “Iteration Blocked Time” charts looks incorrect (https://github.com/ray-project/ray/pull/48618)
- Fixed bug where unique fails with null values (https://github.com/ray-project/ray/pull/48750)
- Fixed bug where “Rows Outputted” is 0 in the Data dashboard (https://github.com/ray-project/ray/pull/48745)
- Fixed bug where methods like drop_columns cause spilling (https://github.com/ray-project/ray/pull/48140)
- Fixed bug where async map tasks hang (https://github.com/ray-project/ray/pull/48861)
🗑️ Deprecations:
- Deprecated read_parquet_bulk https://github.com/ray-project/ray/pull/48691
- Deprecated iter_tf_batches https://github.com/ray-project/ray/pull/48693
- Deprecated meta_provider parameter of read functions (https://github.com/ray-project/ray/pull/48690)
- Deprecated to_torch (https://github.com/ray-project/ray/pull/48692)
Ray Train
🔨 Fixes:
- Fix StartTracebackWithWorkerRank serialization (#48548)
📖 Documentation:
- Add example for fine-tuning Llama3.1 with AWS Trainium (#48768)
Ray Tune
🔨 Fixes:
- Remove the
clear_checkpointfunction during Trial restoration error handling. (#48532)
Ray Serve
🎉 New Features:
- Initial version of local_testing_mode (#48477)
💫 Enhancements:
- Handle multiple changed objects per LongPollHost.listen_for_change RPC (#48803)
- Add more nuanced checks for http proxy status errors (#47896)
- Improve replica access log messages to include HTTP status info and better resemble standard log format (#48819)
- Propagate replica constructor error to deployment status message and print num retries left (#48531)
🔨 Fixes:
- Pending requests that are cancelled before they were assigned to a replica now also return a serve.RequestCancelledError (#48496)
RLlib
💫 Enhancements:
- Release test enhancements. (#45803, #48681)
- Make opencv-python-headless default over opencv-python (#48776)
- Reverse learner queue behavior of IMPALA/APPO (consume oldest batches first, instead of newest, BUT drop oldest batches if queue full). (#48702)
🔨 Fixes:
- Fix torch scheduler stepping and reporting. (#48125)
- Fix accumulation of results over n training_step calls within same iteration (new API stack). (#48136)
- Various other fixes: #48563, #48314, #48698, #48869.
📖 Documentation:
- Upgrade examples script overview page (new API stack). (#48526)
- Enable RLlib + Serve example in CI and translate to new API stack. (#48687)
🏗 Architecture refactoring:
- Switch new API stack on by default, APPO, IMPALA, BC, MARWIL, and CQL. (#48516, #48599)
- Various APPO enhancements (new API stack): Circular buffer (#48798), minor loss math fixes (#48800), target network update logic (#48802), smaller cleanups (#48844).
- Remove
rllib_contribfrom repo. (#48565)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- [Core] uv runtime env support (#48479, #48486, #48611, #48619, #48632, #48634, #48637, #48670, #48731)
- [Core] GCS FT with redis sentinel (#47335)
💫 Enhancements:
- [CompiledGraphs] Refine schedule visualization (#48594)
🔨 Fixes:
- [CompiledGraphs] Don't persist input_nodes in _CollectiveOperation to avoid wrong understanding about DAGs (#48463)
- [Core] Fix Ascend NPU discovery to support 8+ cards per node (#48543)
- [Core] Make Placement Group Wildcard and Indexed Resource Assignments Consistent (#48088)
- [Core] Stop the GRPC server before Shut down the Object Store (#48572)
Ray Clusters
🔨 Fixes:
- [KubeRay]: Fix ConnectionError on Autoscaler CR lookups in K8s clusters with custom DNS for Kubernetes API. (#48541)
Dashboard
💫 Enhancements:
- Add global UTC timezone button in navbar with local storage (#48510)
- Add memory graphs optimized for OOM debugging (#48530)
- Improve tasks/actors metric naming and add graph for running tasks (#48528) add actor pid to dashboard (#48791)
🔨 Fixes:
- Fix Placement Group Table table cells overflow (#47323)
- Fix Rows Outputted being zero on Ray Data Dashboard (#48745)
- fix confusing dataset operator name (#48805)
Thanks
Thanks to all those who contributed to this release! @rynewang, @rickyyx, @bveeramani, @marwan116, @simonsays1980, @dayshah, @dentiny, @KepingYan, @mimiliaogo, @kevin85421, @SeaOfOcean, @stephanie-wang, @mohitjain2504, @azayz, @xushiyan, @richardliaw, @can-anyscale, @xingyu-long, @kanwang, @aslonnie, @MortalHappiness, @jjyao, @SumanthRH, @matthewdeng, @alexeykudinkin, @sven1977, @raulchen, @andrewsykim, @zcin, @nadongjun, @hongpeng-guo, @miguelteixeiraa, @saihaj, @khluu, @ArturNiederfahrenhorst, @ryanaoleary, @ltbringer, @pcmoritz, @JoshKarpel, @akyang-anyscale, @frances720, @BeingGod, @edoakes, @Bye-legumes, @Superskyyy, @liuxsh9, @MengjinYan, @ruisearch42, @scottjlee, @angelinalg
2.39.0Ray-2.39.0
Ray Libraries
Ray Data
🔨 Fixes:
- Fixed InvalidObjectError edge case with Dataset.split() (https://github.com/ray-project/ray/pull/48130)
- Made Concatenator preserve order of concatenated columns (https://github.com/ray-project/ray/pull/47997)
📖 Documentation:
- Improved documentation around Parquet column and predicate pushdown (https://github.com/ray-project/ray/pull/48095)
- Marked num_rows_per_file parameter of write APIs as experimental (https://github.com/ray-project/ray/pull/48208)
- One hot encoder now returns an encoded vector (https://github.com/ray-project/ray/pull/48173)
- transform_batch no longer fails on missing columns (https://github.com/ray-project/ray/pull/48137)
🏗 Architecture refactoring:
- Dataset.count() now uses a Count logical operator (https://github.com/ray-project/ray/pull/48126)
🗑 Deprecations:
- Removed long-deprecated set_progress_bars (https://github.com/ray-project/ray/pull/48203)
Ray Train
🔨 Fixes:
- Safely check if the storage filesystem is
pyarrow.fs.S3FileSystem(#48216)
Ray Tune
🔨 Fixes:
- Safely check if the storage filesystem is
pyarrow.fs.S3FileSystem(#48216)
Ray Serve
💫 Enhancements:
- Cancelled requests now return a serve.RequestCancelledError (https://github.com/ray-project/ray/pull/48444)
- Exposed application source in app details model (https://github.com/ray-project/ray/pull/45522)
🔨 Fixes:
- Basic HTTP deployments will now return “Internal Server Error” instead of a traceback to match FastAPI behavior (https://github.com/ray-project/ray/pull/48491)
- Fixed an issue where high values of max_ongoing_requests couldn’t be reached due to an interaction with core’s max_concurrency (https://github.com/ray-project/ray/pull/48274)
- Fixed an edge case where pending requests were not canceled properly (https://github.com/ray-project/ray/pull/47873)
- Removed deprecated API to set route_prefix per-deployment (https://github.com/ray-project/ray/pull/48223)
📖 Documentation:
- Added ProxyStatus model to reference docs (https://github.com/ray-project/ray/pull/48299)
- Added ApplicationStatus model to reference docs (https://github.com/ray-project/ray/pull/48220)
RLlib
💫 Enhancements:
- Upgrade to gymnasium==1.0.0 (support new API for vector env resets). (#48443, #45328)
- Add off-policy'ness metric to new API stack. (#48227)
- Validate episodes before adding them to the buffer. (#48083)
📖 Documentation:
- New example script for custom metrics on
EnvRunners(usingMetricsLoggerAPI on the new stack). (#47969) - Do-over: New RLlib index page. (#48285, #48442)
- Do-over: Example script for AutoregressiveActionsRLM. (#47972)
🏗 Architecture refactoring:
- New API stack on by default for PPO. (#48284)
- Change config.fault_tolerance default behavior (from
recreate_failed_env_runners=FalsetoTrue). (#48286)
🔨 Fixes:
Ray Core
🎉 New Features:
- [CompiledGraphs] Support all reduce collective in aDAG (#47621)
- [CompiledGraphs] Add visualization of compiled graphs (#47958)
💫 Enhancements:
- [Distributed Debugger] The distributed debugger can now be used without having to set RAY_DEBUG=1, see https://github.com/ray-project/ray/pull/48301 and https://docs.ray.io/en/latest/ray-observability/ray-distributed-debugger.html. If you want to restore the previous behavior and use the CLI based debugger, you need to set RAY_DEBUG=legacy.
- [Core] Add more infos to each breakpoint for ray debug CLI (#48202)
- [Core] Add demands info to GCS debug state (#48115)
- [Core] Add PENDING_ACTOR_TASK_ARGS_FETCH and PENDING_ACTOR_TASK_ORDERING_OR_CONCURRENCY TaskStatus (#48242)
- [Core] Add metrics ray_io_context_event_loop_lag_ms. (#47989)
- [Core] Better log format when show the disk size (#46869)
- [CompiledGraphs] Support asyncio.gather on multiple CompiledDAGFutures (#47860)
- [CompiledGraphs] Raise an exception if a leaf node is found during compilation (#47757)
🔨 Fixes:
- [Core] Posts CoreWorkerMemoryStore callbacks onto io_context to fix deadlock (#47833)
Dashboard
🔨 Fixes:
- [Dashboard] Reworking dashboard_max_actors_to_cache to RAY_maximum_gcs_destroyed_actor_cached_count (#48229)
Thanks
Many thanks to all those who contributed to this release!
@akyang-anyscale, @rkooo567, @bveeramani, @dayshah, @martinbomio, @khluu, @justinvyu, @slfan1989, @alexeykudinkin, @simonsays1980, @vigneshka, @ruisearch42, @rynewang, @scottjlee, @jjyao, @JoshKarpel, @win5923, @MengjinYan, @MortalHappiness, @ujjawal-khare-27, @zcin, @ccoulombe, @Bye-legumes, @dentiny, @stephanie-wang, @LeoLiao123, @dengwxn, @richo-anyscale, @pcmoritz, @sven1977, @omatthew98, @GeneDer, @srinathk10, @can-anyscale, @edoakes, @kevin85421, @aslonnie, @jeffreyjeffreywang, @ArturNiederfahrenhorst
2.38.0Ray-2.38.0
Ray Libraries
Ray Data
🎉 New Features:
- Add
Dataset.rename_columns(#47906) - Basic structured logging (#47210)
💫 Enhancements:
- Add
partitioningparameter toread_parquet(#47553) - Add
SERVICE_UNAVAILABLEto list of retried transient errors (#47673) - Re-phrase the streaming executor current usage string (#47515)
- Remove ray.kill in ActorPoolMapOperator (#47752)
- Simplify and consolidate progress bar outputs (#47692)
- Refactor
OpRuntimeMetricsto support properties (#47800) - Refactor
plan_write_opandDatasinks (#47942) - Link
PhysicalOperatorto itsLogicalOperator(#47986) - Allow specifying both
num_cpusandnum_gpusfor map APIs (#47995) - Allow specifying insertion index when registering custom plan optimization
Rules (#48039) - Adding in better framework for substituting logging handlers (#48056)
🔨 Fixes:
- Fix bug where Ray Data incorrectly emits progress bar warning (#47680)
- Yield remaining results from async
map_batches(#47696) - Fix event loop mismatch with async map (#47907)
- Make sure
num_gpusprovide to Ray Data is appropriately passed toray.remotecall (#47768) - Fix unequal partitions when grouping by multiple keys (#47924)
- Fix reading multiple parquet files with ragged ndarrays (#47961)
- Removing unneeded test case (#48031)
- Adding in better json checking in test logging (#48036)
- Fix bug with inserting custom optimization rule at index 0 (#48051)
- Fix logging output from
write_xxxAPIs (#48096)
📖 Documentation:
- Add docs section for Ray Data progress bars (#47804)
- Add reference to parquet predicate pushdown (#47881)
- Add tip about how to understand map_batches format (#47394)
Ray Train
🏗 Architecture refactoring:
- Remove deprecated mosaic and sklearn trainer code (#47901)
Ray Tune
🔨 Fixes:
- Fix WandbLoggerCallback to reuse actors upon restore (#47985)
Ray Serve
🔨 Fixes:
- Stop scheduling task early when requests have been canceled (#47847)
RLlib
🎉 New Features:
- Enable cloud checkpointing. (#47682)
💫 Enhancements:
- PPO on new API stack now shuffles batches properly before each epoch. (#47458)
- Other enhancements: #47705, #47501, #47731, #47451, #47830, #47970, #47157
🔨 Fixes:
- Fix spot node preemption problem (RLlib now run stably with EnvRunner workers on spot nodes) (#47940)
- Fix action masking example. (#47817)
- Various other fixes: #47973, #46721, #47914, #47880, #47304, #47686
🏗 Architecture refactoring:
- Switch on new API stack by default for SAC and DQN. (#47217)
- Remove Tf support on new API stack for PPO/IMPALA/APPO (only DreamerV3 on new API stack remains with tf now). (#47892)
- Discontinue support for "hybrid" API stack (using RLModule + Learner, but still on RolloutWorker and Policy) (#46085)
- RLModule (new API stack) refinements: #47884, #47885, #47889, #47908, #47915, #47965, #47775
📖 Documentation:
- Add new API stack migration guide. (#47779)
- New API stack example script: BC pre training, then PPO finetuning using same RLModule class. (#47838)
- New API stack: Autoregressive actions example. (#47829)
- Remove old API stack connector docs entirely. (#47778)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- CompiledGraphs: support multi readers in multi node when DAG is created from an actor (#47601)
💫 Enhancements:
- Add a flag to raise exception for out of band serialization of
ObjectRef(#47544) - Store each GCS table in its own Redis Hash (#46861)
- Decouple create worker vs pop worker request. (#47694)
- Add metrics for GCS jobs (#47793)
🔨 Fixes:
- Fix broken dashboard cluster page when there are dead nodes (#47701)
- Fix the
ray_tasks{State="PENDING_ARGS_FETCH"}metric counting (#47770) - Separate the attempt_number with the task_status in memory summary and object list (#47818)
- Fix object reconstruction hang on arguments pending creation (#47645)
- Fix check failure:
sync_reactors_.find(reactor->GetRemoteNodeID()) == sync_reactors_.end()(#47861) - Fix check failure
RAY_CHECK(it != current_tasks_.end()); (#47659)
📖 Documentation:
- KubeRay docs: Add docs for YuniKorn Gang scheduling #47850
Dashboard
💫 Enhancements:
- Performance improvements for large scale clusters (#47617)
🔨 Fixes:
- Placement group and required resources not showing correctly in dashboard (#47754)
Thanks
Many thanks to all those who contributed to this release! @GeneDer, @rkooo567, @dayshah, @saihaj, @nikitavemuri, @bill-oconnor-anyscale, @WeichenXu123, @can-anyscale, @jjyao, @edoakes, @kekulai-fredchang, @bveeramani, @alexeykudinkin, @raulchen, @khluu, @sven1977, @ruisearch42, @dentiny, @MengjinYan, @Mark2000, @simonsays1980, @rynewang, @PatricYan, @zcin, @sofianhnaide, @matthewdeng, @dlwh, @scottjlee, @MortalHappiness, @kevin85421, @win5923, @aslonnie, @prithvi081099, @richardsliu, @milesvant, @omatthew98, @Superskyyy, @pcmoritz
2.37.0Ray-2.37.0
Ray Libraries
Ray Data
💫 Enhancements:
- Simplify custom metadata provider API (#47575)
- Change counts of metrics to rates of metrics (#47236)
- Throw exception for non-streaming HF datasets with "override_num_blocks" argument (#47559)
- Refactor custom optimizer rules (#47605)
🔨 Fixes:
- Remove ineffective retry code in
plan_read_op(#47456) - Fix incorrect pending task size if outputs are empty (#47604)
Ray Train
💫 Enhancements:
- Update run status and add stack trace to
TrainRunInfo(#46875)
Ray Serve
💫 Enhancements:
- Allow control of some serve configuration via env vars (#47533)
- [serve] Faster detection of dead replicas (#47237)
🔨 Fixes:
- [Serve] fix component id logging field (#47609)
RLlib
💫 Enhancements:
- New API stack:
- Add restart-failed-env option to EnvRunners. (#47608)
- Offline RL: Store episodes in state form. (#47294)
- Offline RL: Replace GAE in MARWILOfflinePreLearner with
GeneralAdvantageEstimationconnector in learner pipeline. (#47532) - Off-policy algos: Add episode sampling to EpisodeReplayBuffer. (#47500)
- RLModule APIs: Add
SelfSupervisedLossAPIfor RLModules that bring their own loss andInferenceOnlyAPI. (#47581, #47572)
Ray Core
💫 Enhancements:
- [aDAG] Allow custom NCCL group for aDAG (#47141)
- [aDAG] support buffered input (#47272)
- [aDAG] Support multi node multi reader (#47480)
- [Core] Make is_gpu, is_actor, root_detached_id fields late bind to workers. (#47212)
- [Core] Reconstruct actor to run lineage reconstruction triggered actor task (#47396)
- [Core] Optimize GetAllJobInfo API for performance (#47530)
🔨 Fixes:
- [aDAG] Fix ranks ordering for custom NCCL group (#47594)
Ray Clusters
📖 Documentation:
- [KubeRay] add a guide for deploying vLLM with RayService (#47038)
Thanks
Many thanks to all those who contributed to this release! @ruisearch42, @andrewsykim, @timkpaine, @rkooo567, @WeichenXu123, @GeneDer, @sword865, @simonsays1980, @angelinalg, @sven1977, @jjyao, @woshiyyya, @aslonnie, @zcin, @omatthew98, @rueian, @khluu, @justinvyu, @bveeramani, @nikitavemuri, @chris-ray-zhang, @liuxsh9, @xingyu-long, @peytondmurray, @rynewang
2.36.1Ray-2.36.1
Ray Core
🔨 Fixes:
- Fix broken dashboard cluster page when there are dead nodes (#47701)
- Fix broken dashboard worker page (#47714)
2.36.0Ray-2.36.0
Ray Libraries
Ray Data
💫 Enhancements:
- Remove limit on number of tasks launched per scheduling step (#47393)
- Allow user-defined Exception to be caught. (#47339)
🔨 Fixes:
- Display pending actors separately in the progress bar and not count them towards running resources (#46384)
- Fix bug where
arrow_parquet_argsaren't used (#47161) - Skip empty JSON files in
read_json()(#47378) - Remove remote call for initializing
Datasourceinread_datasource()(#47467) - Remove dead
from_*_operatormodules (#47457) - Release test fixes
- Add
AWS ACCESS_DENIEDas retryable exception for multi-node Data+Train benchmarks (#47232) - Get AWS credentials with boto (#47352)
- Use worker node instead of head node for
read_images_comparison_microbenchmark_single_noderelease test (#47228)
📖 Documentation:
- Add docstring to explain
Dataset.deserialize_lineage(#47203) - Add a comment explaining the bundling behavior for
map_batcheswith default batch_size (#47433)
Ray Train
💫 Enhancements:
- Decouple device-related modules and add Huawei NPU support to Ray Train (#44086)
🔨 Fixes:
- Update TORCH_NCCL_ASYNC_ERROR_HANDLING env var (#47292)
📖 Documentation:
- Add missing Train public API reference (#47134)
Ray Tune
📖 Documentation:
- Add missing Tune public API references (#47138)
Ray Serve
💫 Enhancements:
- Mark proxy as unready when its routers are aware of zero replicas (#47002)
- Setup default serve logger (#47229)
🔨 Fixes:
- Allow get_serve_logs_dir to run outside of Ray's context (#47224)
- Use serve logger name for logs in serve (#47205)
📖 Documentation:
- [HPU] [Serve] [experimental] Add vllm HPU support in vllm example (#45893)
🏗 Architecture refactoring:
- Remove support for nested DeploymentResponses (#47209)
RLlib
🎉 New Features:
- New API stack: Add CQL algorithm. (#47000, #47402)
- New API stack: Enable GPU and multi-GPU support for DQN/SAC/CQL. (#47179)
💫 Enhancements:
- New API stack: Offline RL enhancements: #47195, #47359
- Enhance new API stack stability: #46324, #47196, #47245, #47279
- Fix large batch size for synchronous algos (e.g. PPO) after EnvRunner failures. (#47356)
- Add torch.compile config options to old API stack. (#47340)
- Add kwargs to torch.nn.parallel.DistributedDataParallel (#47276)
- Enhanced CI stability: #47197, #47249
📖 Documentation:
- New API stack example scripts:
- Remove "new API stack experimental" hint from docs. (#47301)
🏗 Architecture refactoring:
- Remove 2nd Learner ConnectorV2 pass from PPO (#47401)
- Add separate learning rates for policy and alpha to SAC. (#47078)
🔨 Fixes:
Ray Core
💫 Enhancements:
- [ADAG] Raise proper error message for nccl within the same actor (#47250)
- [ADAG] Support multi-read of the same shm channel (#47311)
- Log why core worker is not idle during HandleExit (#47300)
- Add PREPARED state for placement groups in GCS for better fault tolerance. (#46858)
🔨 Fixes:
- Fix ray_unintentional_worker_failures_total to only count unintentional worker failures (#47368)
- Fix runtime env race condition when uploading the same package concurrently (#47482)
Dashboard
🔨 Fixes:
- Performance optimizations for dashboard backend logic (#47392) (#47367) (#47160) (#47213)
- Refactor to simplify dashboard backend logic (#47324)
Docs
💫 Enhancements:
- Add sphinx-autobuild and documentation for make local (#47275): Speed up of local docs builds with
make local. - Add Algolia search to docs (#46477)
- Update PyTorch Mnist Training doc for KubeRay 1.2.0 (#47321)
- Life-cycle of documentation policy of Ray APIs
Thanks
Many thanks to all those who contributed to this release! @GeneDer, @Bye-legumes, @nikitavemuri, @kevin85421, @MortalHappiness, @LeoLiao123, @saihaj, @rmcsqrd, @bveeramani, @zcin, @matthewdeng, @raulchen, @mattip, @jjyao, @ruisearch42, @scottjlee, @can-anyscale, @khluu, @aslonnie, @rynewang, @edoakes, @zhanluxianshen, @venkatram-dev, @c21, @allenyin55, @alexeykudinkin, @snehakottapalli, @BitPhinix, @hongchaodeng, @dengwxn, @liuxsh9, @simonsays1980, @peytondmurray, @KepingYan, @bryant1410, @woshiyyya, @sven1977
2.35.0Ray-2.35.0
Notice: Starting from this release, pip install ray[all] will not include ray[cpp], and will not install the respective ray-cpp package. To install everything that includes ray-cpp, one can use pip install ray[cpp-all] instead.
Ray Libraries
Ray Data
🎉 New Features:
- Upgrade supported Arrow version from 16 to 17 (#47034)
- Add support for reading from Iceberg (#46889)
💫 Enhancements:
- Various Progress Bar UX improvements (#46816, #46801, #46826, #46692, #46699, #46974, #46928, #47029, #46924, #47120, #47095, #47106)
- Try get
size_bytesfrom metadata and consolidate metadata methods (#46862) - Improve warning message when read task is large (#46942)
- Extend API to enable passing sample weights via ray.dataset.to_tf (#45701)
- Add a parameter to allow overriding LanceDB scanner options (#46975)
- Add failure retry logic for read_lance (#46976)
- Clarify warning for reading old Parquet data (#47049)
- Move datasource implementations to
_internalsubpackage (#46825) - Handle logs from tensor extensions (#46943)
🔨 Fixes:
- Change type of
DataContext.retried_io_errorsfrom tuple to list (#46884) - Make Parquet tests more robust and expose Parquet logic (#46944)
- Change pickling log level from warning to debug (#47032)
- Add validation for shuffle arg (#47055)
- Fix validation bug when size=0 in ActorPoolStrategy (#47072)
- Fix exception in async map (#47110)
- Fix wrong metrics group for
Object Store Memorymetrics on Ray Data Dashboard (#47170) - Handle errors in SplitCoordinator when generating a new epoch (#47176)
📖 Documentation:
- Auto-gen GroupedData api (#46925)
- Fix signature of
Rule.plan(#47094)
Ray Train
💫 Enhancements:
- [train] Updates to support xgboost==2.1.0 (#46667)
- [train] Add hardware stats (#46719)
Ray Tune
🔨 Fixes:
- [RLlib; Tune] Fix WandB metric overlap after restore from checkpoint. (#46897)
Ray Serve
💫 Enhancements:
- Improved handling of replica death and replica unavailability in deployment handle routers before controller restarts replica (#47008)
- Eagerly create routers in proxy for better GCS fault tolerance (#47031)
- Immediately send ping in router when receiving new replica set (#47053)
🏗 Architecture refactoring:
- Deprecate passing arguments that contain
DeploymentResponsesin nested objects to downstream deployment handle calls (#46806)
RLlib
🎉 New Features:
- Offline RL on the new API stack:
- Record offline data (#46818, #47046, #47133, #47155) and support to directly read from episodes. (#46865)
- RLUnplugged example. (#46792)
- Progress on BC/MARWIL migration: #44970, #47154, #46799
- Progress on CQL migration: #46969, #47105
💫 Enhancements:
- Add ObservationPreprocessor (ConnectorV2). (#47077)
🔨 Fixes:
- New API stack: Fix IMPALA/APPO + LSTM for single- and multi-GPU. (#47132, #47158)
- Various bug fixes: #46898, #47047, #46963, #47021, #46897
- Add more control to Algorithm.add_module/policy methods. (#46932, #46836)
📖 Documentation:
- Example scripts for new API stack:
- Curiosity (inverse dynamics model-based) RLModule example. (#46841)
- Add example script for Env with protobuf observation space. (#47071)
- New API stack documentation:
- Cleanup old API stack docs (rllib-dev.rst). (#47172)
- Episodes (SingleAgentEpisode). (#46985)
- Redo rllib-algorithms.rst page. (#46916)
🏗 Architecture refactoring:
- Rename MultiAgent...RLModule... into MultiRL...Module for more generality. (#46840)
- Add learner_only flag to RLModuleConfig/Spec and simplify creation of RLModule specs from algo-config. (#46900)
Ray Core
💫 Enhancements:
- Emit total lineage bytes metrics (#46725)
- Adding accelerator type H100 (#46823)
- More structured logging in core worker (#46906)
- Change all callbacks to move to save copies. (#46971)
- Add ray[adag] option to pip install (#47009)
🔨 Fixes:
- Fix dashboard process reporting on windows (#45578)
- Fix Ray-on-Spark cluster crashing bug when user cancels cell execution (#46899)
- Fix PinExistingReturnObject segfault by passing owner_address (#46973)
- Fix raylet CHECK failure from runtime env creation failure. (#46991)
- Fix typo in memray command (#47006)
- [ADAG] Fix for asyncio outputs (#46845)
📖 Documentation:
- Clarify behavior of placement_group_capture_child_tasks in docs (#46885)
- Update ray.available_resources() docstring (#47018)
🏗 Architecture refactoring:
- Async APIs for the New GcsClient. (#46788)
- Replace GCS stubs in the dashboard to use NewGcsAioClient. (#46846)
Dashboard
💫 Enhancements:
- Polish and minor improvements to the Serve page (#46811)
🔨 Fixes:
- Fix CPU/GPU/RAM not being reported correctly on Windows (#44578)
Docs
💫 Enhancements:
- Add more information about developer tooling for docs contributions (#46636), including
esboniosection
🔨 Fixes:
- Use PyData Sphinx theme version switcher (#46936)
Thanks
Many thanks to all those who contributed to this release! @simonsays1980, @bveeramani, @tungh2, @zcin, @xingyu-long, @WeichenXu123, @aslonnie, @MaxVanDijck, @can-anyscale, @galenhwang, @omatthew98, @matthewdeng, @raulchen, @sven1977, @shrekris-anyscale, @deepyaman, @alexeykudinkin, @stephanie-wang, @kevin85421, @ruisearch42, @hongchaodeng, @khluu, @alanwguo, @hongpeng-guo, @saihaj, @Superskyyy, @tespent, @slfan1989, @justinvyu, @rynewang, @nikitavemuri, @amogkam, @mattip, @dev-goyal, @ryanaoleary, @peytondmurray, @edoakes, @venkatajagannath, @jjyao, @cristianjd, @scottjlee, @Bye-legumes
2.34.0Release 2.34.0 Notes
Ray Libraries
Ray Data
💫 Enhancements:
- Add better support for UDF returns from list of datetime objects (#46762)
🔨 Fixes:
- Remove read task warning if size bytes not set in metadata (#46765)
📖 Documentation:
- Fix read_tfrecords() docstring to display tfx-bsl tip (#46717)
- Update Dataset.zip() docs (#46757)
Ray Train
🔨 Fixes:
- Sort workers by node ID rather than by node IP (#46163)
🏗 Architecture refactoring:
- Remove dead RayDatasetSpec (#46764)
RLlib
🎉 New Features:
- Offline RL support on new API stack:
- Initial design for Ray-Data based offline RL Algos (on new API stack). (#44969)
- Add user-defined schemas for data loading. (#46738)
- Make data pipeline better configurable and tuneable for users. (#46777)
💫 Enhancements:
- Move DQN into the TargetNetworkAPI (and deprecate
RLModuleWithTargetNetworksInterface). (#46752)
🔨 Fixes:
- Numpy version fix: Rename all np.product usage to np.prod (#46317)
📖 Documentation:
- Examples for new API stack: Add 2 (count-based) curiosity examples. (#46737)
- Remove RLlib CLI from docs (soon to be deprecated and replaced by python API). (#46724)
🏗 Architecture refactoring:
- Cleanup, rename, clarify: Algorithm.workers/evaluation_workers, local_worker(), etc.. (#46726)
Ray Core
🏗 Architecture refactoring:
- New python GcsClient binding (#46186)
Many thanks to all those who contributed to this release! @KyleKoon, @ruisearch42, @rynewang, @sven1977, @saihaj, @aslonnie, @bveeramani, @akshay-anyscale, @kevin85421, @omatthew98, @anyscalesam, @MaxVanDijck, @justinvyu, @simonsays1980, @can-anyscale, @peytondmurray, @scottjlee
2.33.0Ray-2.33.0
Ray Libraries
Ray Core
💫 Enhancements:
- Add "last exception" to error message when GCS connection fails in ray.init() (#46516)
🔨 Fixes:
- Add object back to memory store when object recovery is skipped (#46460)
- Task status should start with PENDING_ARGS_AVAIL when retry (#46494)
- Fix ObjectFetchTimedOutError (#46562)
- Make working_dir support files created before 1980 (#46634)
- Allow full path in conda runtime env. (#45550)
- Fix worker launch time formatting in state api (#43516)
Ray Data
🎉 New Features:
- Deprecate Dataset.get_internal_block_refs() (#46455)
- Add read API for reading Databricks table with Delta Sharing (#46072)
- Add support for objects to Arrow blocks (#45272)
💫 Enhancements:
- Change offsets to int64 and change to LargeList for ArrowTensorArray (#45352)
- Prevent from_pandas from combining input blocks (#46363)
- Update Dataset.count() to avoid unnecessarily keeping
BlockRefs in-memory (#46369) - Use Set to fix inefficient iteration over Arrow table columns (#46541)
- Add AWS Error UNKNOWN to list of retried write errors (#46646)
- Always print traceback for internal exceptions (#46647)
- Allow unknown estimate of operator output bundles and
ProgressBartotals (#46601) - Improve filesystem retry coverage (#46685)
🔨 Fixes:
- Replace lambda mutable default arguments (#46493)
📖 Documentation:
- Auto-generate Dataset API documentation (#46557)
- Update outdated ExecutionPlan docstring (#46638)
Ray Train
💫 Enhancements:
- Update run status and actor status for train runs. (#46395)
🔨 Fixes:
- Replace lambda default arguments (#46576)
📖 Documentation:
- Add MNIST training using KubeRay doc page (#46123)
- Add example of pre-training Llama model on Intel Gaudi (#45459)
- Fix tensorflow example by using ScalingConfig (#46565)
Ray Tune
🔨 Fixes:
- Replace lambda default arguments (#46596)
Ray Serve
🎉 New Features:
- Fully deprecate
target_num_ongoing_requests_per_replicaandmax_concurrent_queries, respectively replaced bymax_ongoing_requestsandtarget_ongoing_requests(#46392 and #46427) - Configure the task launched by the controller to build an application with Serve’s logging config (#46347)
RLlib
💫 Enhancements:
- Moving sampling coordination for
batch_mode=complete_episodestosynchronous_parallel_sample. (#46321) - Enable complex action spaces with stateful modules. (#46468)
🏗 Architecture refactoring:
- Enable multi-learner setup for hybrid stack BC. (#46436)
- Introduce Checkpointable API for RLlib components and subcomponents. (#46376)
🔨 Fixes:
- Replace Mapping typehint with Dict: #46474
📖 Documentation:
- More example scripts for new API stack: Two separate optimizers (w/ different learning rates). (#46540) and custom loss function. (#46445)
Dashboard
🔨 Fixes:
- Task end time showing the incorrect time (#46439)
- Events Table rows having really bad spacing (#46701)
- UI bugs in the serve dashboard page (#46599)
Thanks
Many thanks to all those who contributed to this release!
@alanwguo, @hongchaodeng, @anyscalesam, @brucebismarck, @bt2513, @woshiyyya, @terraflops1048576, @lorenzoritter, @omrishiv, @davidxia, @cchen777, @nono-Sang, @jackhumphries, @aslonnie, @JoshKarpel, @zjregee, @bveeramani, @khluu, @Superskyyy, @liuxsh9, @jjyao, @ruisearch42, @sven1977, @harborn, @saihaj, @zcin, @can-anyscale, @veekaybee, @chungen04, @WeichenXu123, @GeneDer, @sergey-serebryakov, @Bye-legumes, @scottjlee, @rynewang, @kevin85421, @cristianjd, @peytondmurray, @MortalHappiness, @MaxVanDijck, @simonsays1980, @mjovanovic9999
2.32.0Ray-2.32.0
Highlight: aDAG Developer Preview
This is a new Ray Core specific feature called Ray accelerated DAGs (aDAGs).
- aDAGs give you a Ray Core-like API but with extensibility to pre-compile execution paths across pre-allocated resources on a Ray Cluster to possible benefits for optimization on throughput and latency. Some practical examples include:
- Up to 10x lower task execution time on single-node.
- Native support for GPU-GPU communication, via NCCL.
- This is still very early, but please reach out on #ray-core on Ray Slack to learn more!
Ray Libraries
Ray Data
💫 Enhancements:
- Support async callable classes in
map_batches()(#46129)
🔨 Fixes:
- Ensure
InputDataBufferdoesn't free block references (#46191) MapOperator.num_active_tasksshould exclude pending actors (#46364)- Fix progress bars being displayed as partially completed in Jupyter notebooks (#46289)
📖 Documentation:
- Fix docs:
read_api.pydocstring (#45690) - Correct API annotation for
tfrecords_datasource(#46171) - Fix broken links in
READMEand inray.data.Dataset(#45345)
Ray Train
📖 Documentation:
- Update PyTorch Data Ingestion User Guide (#45421)
Ray Serve
💫 Enhancements:
- Optimize
ServeController.get_app_config()(#45878) - Change default for max and target ongoing requests (#45943)
- Integrate with Ray structured logging (#46215)
- Allow configuring handle cache size and controller max concurrency (#46278)
- Optimize
DeploymentDetails.deployment_route_prefix_not_set()(#46305)
RLlib
🎉 New Features:
- APPO on new API stack (w/
EnvRunners). (#46216)
💫 Enhancements:
- Stability: APPO, SAC, and DQN activate multi-agent learning tests (#45542, #46299)
- Make Tune trial ID available in
EnvRunners(and callbacks). (#46294) - Add
env-andagent_stepsto custom evaluation function. (#45652) - Remove default-metrics from Algorithm (tune does NOT error anymore if any stop-metric is missing). (#46200)
🔨 Fixes:
- Various bug fixes: #45542
📖 Documentation:
- Example for new API stack: Offline RL (BC) training on single-agent, while evaluating w/ multi-agent setup. (#46251)
- Example for new API stack: Custom RLModule with an LSTM. (#46276)
Ray Core
🎉 New Features:
- aDAG Developer Preview.
💫 Enhancements:
- Allow env setup logger encoding (#46242)
- ray list tasks filter state and name on GCS side (#46270)
- Log ray version and ray commit during GCS start (#46341)
🔨 Fixes:
- Decrement lineage ref count of an actor when the actor task return object reference is deleted (#46230)
- Fix negative ALIVE actors metric and introduce IDLE state (#45718)
psutilprocess attrnum_fdsis not available on Windows (#46329)
Dashboard
🎉 New Features:
- Added customizable refresh frequency for metrics on Ray Dashboard (#44037)
💫 Enhancements:
- Upgraded to MUIv5 and React 18 (#45789)
🔨 Fixes:
- Fix for multi-line log items breaking log viewer rendering (#46391)
- Fix for UI inconsistency when a job submission creates more than one Ray job. (#46267)
- Fix filtering by job id for tasks API not filtering correctly. (#45017)
Docs
🔨 Fixes:
- Re-enabled automatic cross-reference link checking for Ray documentation, with Sphinx nitpicky mode (#46279)
- Enforced naming conventions for public and private APIs to maintain accuracy, starting with Ray Data API documentation (#46261)
📖 Documentation:
- Upgrade Python 3.12 support to alpha, marking the release of the Ray wheel to PyPI and conducting a sanity check of the most critical tests.
Thanks
Many thanks to all those who contributed to this release!
@stephanie-wang, @MortalHappiness, @aslonnie, @ryanaoleary, @jjyao, @jackhumphries, @nikitavemuri, @woshiyyya, @JoshKarpel, @ruisearch42, @sven1977, @alanwguo, @GeneDer, @saihaj, @raulchen, @liuxsh9, @khluu, @cristianjd, @scottjlee, @bveeramani, @zcin, @simonsays1980, @SumanthRH, @davidxia, @can-anyscale, @peytondmurray, @kevin85421
2.31.0Ray-2.31.0
Ray Libraries
Ray Data
🔨 Fixes:
- Fixed bug where
preserve_orderdoesn’t work with file reads (#46135)
📖 Documentation:
- Added documentation for
dataset.Schema(#46170)
Ray Train
💫 Enhancements:
- Add API for Ray Train run stats (#45711)
Ray Tune
💫 Enhancements:
- Missing stopping criterion should not error (just warn). (#45613)
📖 Documentation:
- Fix broken references in Ray Tune documentation (#45233)
Ray Serve
WARNING: the following default values will change in Ray 2.32:
- Default for
max_ongoing_requestswill change from 100 to 5. - Default for
target_ongoing_requestswill change from 1 to 2.
💫 Enhancements:
- Optimize DeploymentStateManager.get_deployment_statuses (#45872)
🔨 Fixes:
- Fix logging error on passing traceback object into exc_info (#46105)
- Run del even if constructor is still in-progress (#45882)
- Spread replicas with custom resources in torch tune serve release test (#46093)
- [1k release test] don't run replicas on head node (#46130)
📖 Documentation:
- Remove todo since issue is fixed (#45941)
RLlib
🎉 New Features:
- IMPALA runs on the new API stack (with EnvRunners and ConnectorV2s). (#42085)
- SAC/DQN: Prioritized multi-agent episode replay buffer. (#45576)
💫 Enhancements:
- New API stack stability: Add systematic CI learning tests for all possible combinations of: [PPO|IMPALA] + [1CPU|2CPU|1GPU|2GPU] + [single-agent|multi-agent]. (#46162, #46161)
📖 Documentation:
- New API stack: Example script for action masking (#46146)
- New API stack: PyFlight example script cleanup (#45956)
- Old API stack: Enhanced ONNX example (+LSTM). (#43592)
Ray Core and Ray Clusters
Ray Core
💫 Enhancements:
- [runtime-env] automatically infer worker path when starting worker in container (#42304)
🔨 Fixes:
- On GCS restart, destroy not forget the unused workers. Fixing PG leaks. (#45854)
- Cancel lease requests before returning a PG bundle (#45919)
- Fix boost fiber stack overflow (#46133)
Thanks
Many thanks to all those who contributed to this release!
@jjyao, @kevin85421, @vincent-pli, @khluu, @simonsays1980, @sven1977, @rynewang, @can-anyscale, @richardsliu, @jackhumphries, @alexeykudinkin, @bveeramani, @ruisearch42, @shrekris-anyscale, @stephanie-wang, @matthewdeng, @zcin, @hongchaodeng, @ryanaoleary, @liuxsh9, @GeneDer, @aslonnie, @peytondmurray, @Bye-legumes, @woshiyyya, @scottjlee, @JoshKarpel
2.30.0Ray-2.30.0
Ray Libraries
Ray Data
💫 Enhancements:
- Improve fractional CPU/GPU formatting (#45673)
- Use sampled fragments to estimate Parquet reader batch size (#45749)
- Refactoring ParquetDatasource and metadata fetching logic (#45728, #45727, #45733, #45734, #45767)
- Refactor planner.py (#45706)
Ray Tune
💫 Enhancements:
- Change the behavior of a missing stopping criterion metric to warn instead of raising an error. This enables the use case of reporting different sets of metrics on different iterations (ex: a separate set of training and validation metrics). (#45613)
Ray Serve
💫 Enhancements:
- Create internal request id to track request objects (#45761)
RLLib
💫 Enhancements:
- Stability: DreamerV3 weekly release test (#45654); Add "official" benchmark script for Atari PPO benchmarks. (#45697)
- Enhance env-rendering callback (#45682)
🔨 Fixes:
- Bug fix in new MetricsLogger API: EMA stats w/o window would lead to infinite list mem-leak. (#45752)
- Various other bug fixes: (#45819, #45820, #45683, #45651, #45753)
📖 Documentation:
Ray Core
🎉 New Features:
- Alpha release of job level logging configuration: users can now config the user logging to be logfmt format with logging context attached. (#45344)
💫 Enhancements:
- Integrate amdsmi in AMDAcceleratorManager (#44572)
🔨 Fixes:
- Fix the C++ GcsClient Del not respecting del_by_prefix (#45604)
- Fix exit handling of FiberState threads (#45834)
Dashboard
💫 Enhancements:
- Parse out json logs (#45853)
Many thanks to all those who contributed to this release: @liuxsh9, @peytondmurray, @pcmoritz, @GeneDer, @saihaj, @khluu, @aslonnie, @yucai, @vickytsang, @can-anyscale, @bthananjeyan, @raulchen, @hongchaodeng, @x13n, @simonsays1980, @peterghaddad, @kevin85421, @rynewang, @angelinalg, @jjyao, @BenWilson2, @jackhumphries, @zcin, @chris-ray-zhang, @c21, @shrekris-anyscale, @alanwguo, @stephanie-wang, @Bye-legumes, @sven1977, @WeichenXu123, @bveeramani, @nikitavemuri
2.24.0Ray-2.24.0
Ray Libraries
Ray Data
🎉 New Features:
- Allow user to configure timeout for actor pool (#45508)
- Add override_num_blocks to from_pandas and perform auto-partition (#44937)
- Upgrade Arrow version to 16 in CI (#45565)
💫 Enhancements:
- Clarify that num_rows_per_file isn't strict (#45529)
- Record more telemetry for newly added datasources (#45647)
- Avoid pickling LanceFragment when creating read tasks for Lance (#45392)
Ray Train
📖 Documentation:
- [HPU] Add example of Stable Diffusion fine-tuning and serving on Intel Gaudi (#45217)
- [HPU] Add example of Llama-2 fine-tuning on Intel Gaudi (#44667)
Ray Tune
🏗 Architecture refactoring:
- Improve excessive syncing warning and deprecate TUNE_RESULT_DIR, RAY_AIR_LOCAL_CACHE_DIR, local_dir (#45210)
Ray Serve
💫 Enhancements:
- Clean up Serve proxy files (#45486)
📖 Documentation:
- vllm example to serve llm models (#45430)
RLLib
💫 Enhancements:
- DreamerV3 on tf: Bug fix, so it can run again with tf==2.11.1 (2.11.0 is not available anymore) (#45419); Added weekly release test for DreamerV3.
- Added support for multi-agent off-policy algorithms (DQN and SAC) in the new (#45182)
- Config option for APPO/IMPALA to change number of GPU-loader threads (#45467)
🔨 Fixes:
- Various MetricsLogger bug fixes (#45543, #45585, #45575)
- Other fixes: #45588, #45617, #45517, #45465
📖 Documentation:
- Example script for new API stack: How-to restore 1 of n agents from a checkpoint. (#45462)
- Example script for new API stack: Autoregressive action module. #45525
Ray Core
💫 Enhancements:
- Improve node death observability (#45320, #45357, #45533, #45644, #45497)
- Ray c++ backend structured logging (#44468)
🔨 Fixes:
- Fix worker crash when getting actor name from runtime context (#45194)
- log dedup should not dedup number only lines (#45385)
📖 Documentation:
- Improve doc for
--object-store-memoryto describe how the default value is set (#45301)
Dashboard
🔨 Fixes:
- Move Job package uploading to another thread to unblock the event loop. (#45282)
Many thanks to all those who contributed to this release: @maxliuofficial, @simonsays1980, @GeneDer, @dudeperf3ct, @khluu, @justinvyu, @andrewsykim, @Catch-Bull, @zcin, @bveeramani, @rynewang, @angelinalg, @matthewdeng, @jjyao, @kira-lin, @harborn, @hongchaodeng, @peytondmurray, @aslonnie, @timkpaine, @982945902, @maxpumperla, @stephanie-wang, @ruisearch42, @alanwguo, @can-anyscale, @c21, @Atry, @KamenShah, @sven1977, @raulchen
2.23.0Ray-2.23.0
Ray Libraries
Ray Data
🎉 New Features:
- Add support for using GPUs with map_groups (#45305)
- Add support for using actors with map_groups (#45310)
💫 Enhancements:
- Refine exception handling from arrow data conversion (#45294)
🔨 Fixes:
- Fix Ray databricks UC reader with dynamic Databricks notebook scope token (#45153)
- Fix bug where you can't return objects and array from UDF (#45287 )
- Fix bug where map_groups triggers execution during input validation (#45314)
Ray Tune
🔨 Fixes:
- [tune] Fix PB2 scheduler error resulting from trying to sort by Trial objects (#45161)
Ray Serve
🔨 Fixes:
- Log application unhealthy errors at error level instead of warning level (#45211)
RLLib
💫 Enhancements:
- Examples and
tuned_exampleslearning test for new API stack are now “self-executable” (don’t require a third-party script anymore to run them). + WandB support. (#45023)
🔨 Fixes:
- Fix result dict “spam” (duplicate, deprecated keys, e.g. “sampler_results” dumped into top level). (#45330)
📖 Documentation:
- Add example for training with fractional GPUs on new API stack. (#45379)
- Cleanup examples folder and remove deprecated sub directories. (#45327)
Ray Core
💫 Enhancements:
- [Logs] Add runtime env started logs to job driver (#45255)
ray.util.collectivesupporttorch.bfloat16(#39845)- [Core] Better propagate node death information (#45128)
🔨 Fixes:
- [Core] Fix worker process leaks after job finishes (#44214)
Many thanks to all those who contributed to this release: @hongchaodeng, @khluu, @antoni-jamiolkowski, @ameroyer, @bveeramani, @can-anyscale, @WeichenXu123, @peytondmurray, @jackhumphries, @kevin85421, @jjyao, @robcaulk, @rynewang, @scottsun94, @swang, @GeneDer, @zcin, @ruisearch42, @aslonnie, @angelinalg, @raulchen, @ArthurBook, @sven1977, @wuxibin89
2.22.0Ray-2.22.0
Ray Libraries
Ray Data
🎉 New Features:
- Add function to dynamically generate
ray_remote_argsfor Map APIs (#45143) - Allow manually setting resource limits for training jobs (#45188)
💫 Enhancements:
- Introduce abstract interface for data autoscaling (#45002)
- Add debugging info for
SplitCoordinator(#45226)
🔨 Fixes:
- Don’t show
AllToAllOperatorprogress bar if the disable flag is set (#45136) - Don't load Arrow
PyExtensionTypeby default (#45084) - Don't raise batch size error if
num_gpus=0(#45202)
Ray Train
💫 Enhancements:
- [XGBoost][LightGBM] Update RayTrainReportCallback to only save checkpoints on rank 0 (#45083)
Ray Core
🔨 Fixes:
- Fix the cpu percentage metrics for dashboard process (#45124)
Dashboard
💫 Enhancements:
- Improvements to log viewer so line numbers do not get selected when copying text.
- Improvements to the log viewer to avoid unnecessary re-rendering which causes text selection to clear.
Many thanks to all those who contributed to this release: @justinvyu, @simonsays1980, @chris-ray-zhang, @kevin85421, @angelinalg, @rynewang, @brycehuang30, @alanwguo, @jjyao, @shaikhismail, @khluu, @can-anyscale, @bveeramani, @jrosti, @WeichenXu123, @MortalHappiness, @raulchen, @scottjlee, @ruisearch42, @aslonnie, @alexeykudinkin
2.21.0Ray-2.21.0
Ray Libraries
Ray Data
🎉 New features:
- Add
read_lanceAPI to read Lance Dataset (#45106)
🔨 Fixes:
- Retry RaySystemError application errors (#45079)
📖 Documentation:
- Fix broken references in data documentation (#44956)
Ray Train
📖 Documentation:
- Fix broken links in Train documentation (#44953)
Ray Tune
📖 Documentation:
- Update Hugging Face example to add reference (#42771)
🏗 Architecture refactoring:
- Remove deprecated
ray.air.callbacksmodules (#45104)
Ray Serve
💫 Enhancements:
- Allow methods to pass type @serve.batch type hint (#45004)
- Allow configuring Serve control loop interval (#45063)
🔨 Fixes:
- Fix bug with controller failing to recover for autoscaling deployments (#45118)
- Fix control+c after serve run doesn't shutdown serve components (#45087)
- Fix lightweight update max ongoing requests (#45006)
RLlib
🎉 New Features:
- New MetricsLogger API now fully functional on the new API stack (working now also inside Learner classes, i.e. loss functions). (#44995, #45109)
💫 Enhancements:
- Renamings and cleanups (toward new API stack and more consistent naming schemata): WorkerSet -> EnvRunnerGroup, DEFAULT_POLICY_ID -> DEFAULT_MODULE_ID, config.rollouts() -> config.env_runners(), etc.. (#45022, #44920)
- Changed behavior of
EnvRunnerGroup.foreach_worker…methods to new defaults:mark_healthy=True(used to be False) andhealthy_only=True(used to be False). (#44993) - Fix
get_state()/from_state()methods in SingleAgent- and MultiAgentEpisodes. (#45012)
🔨 Fixes:
- Bug fix for (torch) global_norm clipping overflow problem: (#45055)
- Various bug- and test case fixes: #45030, #45031, #45070, #45053, #45110, #45111
📖 Documentation:
Ray Core
🔨 Fixes:
- Fix
ray.init(logging_format)argument is ignored (#45037) - Handle unserializable user exception (#44878)
- Fix dashboard process event loop blocking issues (#45048, #45047)
Dashboard
🔨 Fixes:
- Fix Nodes page sorting not working correctly.
- Add back “actors per page” UI control in the actors page.
Many thanks to all those who contributed to this release: @rynewang, @can-anyscale, @scottsun94, @bveeramani, @ceddy4395, @GeneDer, @zcin, @JoshKarpel, @nikitavemuri, @stephanie-wang, @jackhumphries, @matthewdeng, @yash97, @simonsays1980, @peytondmurray, @evalaiyc98, @c21, @alanwguo, @shrekris-anyscale, @kevin85421, @hongchaodeng, @sven1977, @st--, @khluu
2.20.0Ray-2.20.0
Ray Libraries
Ray Data
💫 Enhancements:
- Dedupe repeated schema during
ParquetDatasourcemetadata prefetching (#44750) - Update
map_groupsimplementation to better handle large outputs (#44862) - Deprecate
prefetch_batchesarg ofiter_rowsand change default value (#44982) - Adding in default behavior to false for creating dirs on s3 writes (#44972)
- Make internal UDF names more descriptive (#44985)
- Make
namea required argument forAggregateFn(#44880)
📖 Documentation:
- Add key concepts to and revise "Data Internals" page (#44751)
Ray Train
💫 Enhancements:
- Setup XGBoost
CommunicatorContextautomatically (#44883) - Track Train Run Info with
TrainStateActor(#44585)
📖 Documentation:
- Add documentation for
accelerator_type(#44882) - Update Ray Train example titles (#44369)
Ray Tune
💫 Enhancements:
- Remove trial table when running Ray Train in a Jupyter notebook (#44858)
- Clean up temporary checkpoint directories for class Trainables (ex: RLlib) (#44366)
📖 Documentation:
- Fix minor doc format issues (#44865)
- Remove outdated ScalingConfig references (#44918)
Ray Serve
💫 Enhancements:
- Handle push metric interval is now configurable with environment variable RAY_SERVE_HANDLE_METRIC_PUSH_INTERVAL_S (#32920)
- Improve performance of developer API serve.get_app_handle (#44812)
🔨 Fixes:
- Fix memory leak in handles for autoscaling deployments (the leak happens when
- RAY_SERVE_COLLECT_AUTOSCALING_METRICS_ON_HANDLE=1) (#44877)
RLlib
🎉 New Features:
- Introduce
MetricsLogger, a unified API for users of RLlib to log custom metrics and stats in all of RLlib’s components (Algorithm, EnvRunners, and Learners). Rolled out for new API stack for Algorithm (training_step) and EnvRunners (custom callbacks).Learner(custom loss functions) support in progress. #44888, #44442 - Introduce “inference-only” (slim) mode for RLModules that run inside an EnvRunner (and thus don’t require value-functions or target networks): #44797
💫 Enhancements:
- MultiAgentEpisodeReplayBuffer for new API stack (preparation for multi-agent support of SAC and DQN): #44450
- AlgorithmConfig cleanup and renaming of properties and methods for better consistency/transparency: #44896
🔨 Fixes:
Ray Core and Ray Clusters
💫 Enhancements:
- Report GCS internal pubsub buffer metrics and cap message size (#44749)
🔨 Fixes:
- Fix task submission never return when network partition happens (#44692)
- Fix incorrect use of ssh port forward option. (#44973)
- Make sure dashboard will exit if grpc server fails (#44928)
- Make sure dashboard agent will exit if grpc server fails (#44899)
Thanks @can-anyscale, @hongchaodeng, @zcin, @marwan116, @khluu, @bewestphal, @scottjlee, @andrewsykim, @anyscalesam, @MortalHappiness, @justinvyu, @JoshKarpel, @woshiyyya, @rynewang, @Abirdcfly, @omatthew98, @sven1977, @marcelocarmona, @rueian, @mattip, @angelinalg, @aslonnie, @matthewdeng, @abizjakpro, @simonsays1980, @jjyao, @terraflops1048576, @hongpeng-guo, @stephanie-wang, @bw-matthew, @bveeramani, @ruisearch42, @kevin85421, @Tongruizhe
Many thanks to all those who contributed to this release!
2.12.0Ray-2.12.0
Ray Libraries
Ray Data
🎉 New Features:
- Store Ray Data logs in special subdirectory (#44743)
💫 Enhancements:
- Add in
local_readoption tofrom_torch(#44752)
🔨 Fixes:
- Fix the config to disable progress bar (#44342)
📖 Documentation:
- Clarify deprecated Datasource docstrings (#44790)
Ray Train
🔨 Fixes:
- Disable gathering the full state dict in
RayFSDPStrategyforlightning>2.1(#44569)
Ray Tune
💫 Enhancements:
- Remove spammy log for "new output engine" (#44824)
- Enable isort (#44693)
Ray Serve
🔨 Fixes:
- [Serve] fix getting attributes on stdout during Serve logging redirect (#44787)
RLlib
🎉 New Features:
- Support of images and video logging in WandB (env rendering example script for the new API stack coming up). (#43356)
💫 Enhancements:
- Better support and separation-of-concerns for
model_config_dictin new API stack. (#44263) - Added example script to pre-train an
RLModulein single-agent fashion, then bring checkpoint into multi-agent setup and continue training. (#44674) - More
examplesscripts got translated from the old- to the new API stack: Curriculum learning, custom-gym-env, etc..: (#44706, #44707, #44735, #44841)
Ray Core and Ray Clusters
🔨 Fixes:
- Fix GetAllJobInfo
is_running_tasksis not returning the correct value when driver starts ray (#44459)
Thanks
Many thanks to all those who contributed to this release! @can-anyscale, @hongpeng-guo, @sven1977, @zcin, @shrekris-anyscale, @liuxsh9, @jackhumphries, @GeneDer, @woshiyyya, @simonsays1980, @omatthew98, @andrewsykim, @n30111, @architkulkarni, @bveeramani, @aslonnie, @alexeykudinkin, @WeichenXu123, @rynewang, @matthewdeng, @angelinalg, @c21
2.11.0Ray-2.11.0
Release Highlights
- [data] Support reading Avro files with
ray.data.read_avro - [train] Added experimental support for AWS Trainium (Neuron) and Intel HPU.
Ray Libraries
Ray Data
🎉 New Features:
- Support reading Avro files with
ray.data.read_avro(#43663)
💫 Enhancements:
- Pin
ipywidgets==7.7.2to enable Data progress bars in VSCode Web (#44398) - Change log level for ignored exceptions (#44408)
🔨 Fixes:
- Change Parquet encoding ratio lower bound from 2 to 1 (#44470)
- Fix throughput time calculations for metrics (#44138)
- Fix nested ragged
numpy.ndarray(#44236) - Fix Ray debugger incompatibility caused by trimmed error stack trace (#44496)
📖 Documentation:
- Update "Data Loading and Preprocessing" doc (#44165)
- Move imports into
TFPRedictorin batch inference example (#44434)
Ray Train
🎉 New Features:
- Add experimental support for AWS Trainium (Neuron) (#39130)
- Add experimental support for Intel HPU (#43343)
💫 Enhancements:
- Log a deprecation warning for local_dir and related environment variables (#44029)
- Enforce xgboost>=1.7 for XGBoostTrainer usage (#44269)
🔨 Fixes:
- Fix ScalingConfig(accelerator_type) to request an appropriate resource amount (#44225)
- Fix maximum recursion issue when serializing exceptions (#43952)
- Remove base config deepcopy when initializing the trainer actor (#44611)
🏗 Architecture refactoring:
- Remove deprecated
BatchPredictor(#43934)
Ray Tune
💫 Enhancements:
- Add support for new style lightning import (#44339)
- Log a deprecation warning for local_dir and related environment variables (#44029)
🏗 Architecture refactoring:
- Remove scikit-optimize search algorithm (#43969)
Ray Serve
🔨 Fixes:
- Dynamically-created applications will no longer be deleted when a config is PUT via the REST API (#44476).
- Fix
_to_object_refmemory leak (#43763) - Log warning to reconfigure
max_ongoing_requestsifmax_batch_sizeis less thanmax_ongoing_requests(#43840) - Deployment fails to start with
ModuleNotFoundErrorin Ray 3.10 (#44329)- This was fixed by reverting the original core changes on the
sys.pathbehavior. Revert "[core] If there's working_dir, don't set _py_driver_sys_path." (#44435)
- This was fixed by reverting the original core changes on the
- The
batch_queue_clsparameter is removed from the@serve.batchdecorator (#43935)
RLlib
🎉 New Features:
- New API stack: DQN Rainbow is now available for single-agent (#43196, #43198, #43199)
PrioritizedEpisodeReplayBufferis available for off-policy learning using the EnvRunner API (SingleAgentEnvRunner) and supports random n-step sampling (#42832, #43258, #43458, #43496, #44262)
💫 Enhancements:
- Restructured
examples/folder; started moving example scripts to the new API stack (#44559, #44067, #44603) - Evaluation do-over: Deprecate
enable_async_evaluationoption (in favor of existingevaluation_parallel_to_trainingsetting). (#43787) - Add:
module_forAPI to MultiAgentEpisode (analogous topolicy_forAPI of the old Episode classes). (#44241) - All
rllib_contribold stack algorithms have been removed fromrllib/algorithms(#43656)
🔨 Fixes:
- New API stack: Multi-GPU + multi-agent has been fixed. This completes support for any combinations of the following on the new API stack: [single-agent, multi-agent] vs [0 GPUs, 1 GPU, >1GPUs] vs [any number of EnvRunners] (#44420, #44664, #44594, #44677, #44082, #44669, #44622)
- Various other bug fixes: #43906, #43871, #44000, #44340, #44491, #43959, #44043, #44446, #44040
📖 Documentation:
Ray Core and Ray Clusters
🎉 New Features:
- Added Ray check-open-ports CLI for checking potential open ports to the public (#44488)
💫 Enhancements:
- Support nodes sharing the same spilling directory without conflicts. (#44487)
- Create two subclasses of
RayActorErrorto distinguish between actor died (ActorDiedError) and actor temporarily unavailable (ActorUnavailableError) cases.
🔨 Fixes:
- Fixed the
ModuleNotFoundissued introduced in 2.10 (#44435) - Fixed an issue where agent process is using too much CPU (#44348)
- Fixed race condition in multi-threaded actor creation (#44232)
- Fixed several streaming generator bugs (#44079, #44257, #44197)
- Fixed an issue where user exception raised from tasks cannot be subclassed (#44379)
Dashboard
💫 Enhancements:
- Add serve controller metrics to serve system dashboard page (#43797)
- Add Serve Application rows to Serve top-level deployments details page (#43506)
- [Actor table page enhancements] Include "NodeId", "CPU", "Memory", "GPU", "GRAM" columns in the actor table page. Add sort functionality to resource utilization columns. Enable searching table by "Class" and "Repr". (#42588) (#42633) (#42788)
🔨 Fixes:
- Fix default sorting of nodes in Cluster table page to first be by "Alive" nodes, then head nodes, then alphabetical by node ID. (#42929)
- Fix bug where the Serve Deployment detail page fails to load if the deployment is in "Starting" state (#43279)
Docs
💫 Enhancements:
- Landing page refreshes its look and feel. (#44251)
Thanks
Many thanks to all those who contributed to this release!
@aslonnie, @brycehuang30, @MortalHappiness, @astron8t-voyagerx, @edoakes, @sven1977, @anyscalesam, @scottjlee, @hongchaodeng, @slfan1989, @hebiao064, @fishbone, @zcin, @GeneDer, @shrekris-anyscale, @kira-lin, @chappidim, @raulchen, @c21, @WeichenXu123, @marian-code, @bveeramani, @can-anyscale, @mjd3, @justinvyu, @jackhumphries, @Bye-legumes, @ashione, @alanwguo, @Dreamsorcerer, @KamenShah, @jjyao, @omatthew98, @autolisis, @Superskyyy, @stephanie-wang, @simonsays1980, @davidxia, @angelinalg, @architkulkarni, @chris-ray-zhang, @kevin85421, @rynewang, @peytondmurray, @zhangyilun, @khluu, @matthewdeng, @ruisearch42, @pcmoritz, @mattip, @jerome-habana, @alexeykudinkin
2.10.0Ray-2.10.0
Release Highlights
Ray 2.10 release brings important stability improvements and enhancements to Ray Data, with Ray Data becoming generally available (GA).
- [Data] Ray Data becomes generally available with stability improvements in streaming execution, reading and writing data, better tasks concurrency control, and debuggability improvement with dashboard, logging and metrics visualization.
- [RLlib] “New API Stack” officially announced as alpha for PPO and SAC.
- [Serve] Added a default autoscaling policy set via
num_replicas=”auto”(#42613). - [Serve] Added support for active load shedding via
max_queued_requests(#42950). - [Serve] Added replica queue length caching to the DeploymentHandle scheduler (#42943).
- This should improve overhead in the Serve proxy and handles.
max_ongoing_requests (max_concurrent_queries)is also now strictly enforced (#42947).- If you see any issues, please report them on GitHub and you can disable this behavior by setting:
RAY_SERVE_ENABLE_QUEUE_LENGTH_CACHE=0.
- [Serve] Renamed the following parameters. Each of the old names will be supported for another release before removal.
max_concurrent_queries->max_ongoing_requeststarget_num_ongoing_requests_per_replica->target_ongoing_requestsdownscale_smoothing_factor->downscaling_factorupscale_smoothing_factor->upscaling_factor
- [Core] Autoscaler v2 is in alpha and can be tried out with Kuberay. It has improved observability and stability compared to v1.
- [Train] Added support for accelerator types via
ScalingConfig(accelerator_type). - [Train] Revamped the
XGBoostTrainerandLightGBMTrainerto no longer depend onxgboost_rayandlightgbm_ray. A new, more flexible API will be released in a future release. - [Train/Tune] Refactored local staging directory to remove the need for
local_dirandRAY_AIR_LOCAL_CACHE_DIR.
Ray Libraries
Ray Data
🎉 New Features:
- Streaming execution stability improvement to avoid memory issue, including per-operator resource reservation, streaming generator output buffer management, and better runtime resource estimation (#43026, #43171, #43298, #43299, #42930, #42504)
- Metadata read stability improvement to avoid AWS transient error, including retry on application-level exception, spread tasks across multiple nodes, and configure retry interval (#42044, #43216, #42922, #42759).
- Allow tasks concurrency control for read, map, and write APIs (#42849, #43113, #43177, #42637)
- Data dashboard and statistics improvement with more runtime metrics for each components (#43790, #43628, #43241, #43477, #43110, #43112)
- Allow to specify application-level error to retry for actor task (#42492)
- Add
num_rows_per_fileparameter to file-based writes (#42694) - Add
DataIterator.materialize(#43210) - Skip schema call in
DataIterator.to_tfiftf.TypeSpecis provided (#42917) - Add option to append for
Dataset.write_bigquery(#42584) - Deprecate legacy components and classes (#43575, #43178, #43347, #43349, #43342, #43341, #42936, #43144, #43022, #43023)
💫 Enhancements:
- Restructure stdout logging for better readability (#43360)
- Add a more performant way to read large TFRecord datasets (#42277)
- Modify
ImageDatasourceto useImage.BILINEARas the default image resampling filter (#43484) - Reduce internal stack trace output by default (#43251)
- Perform incremental writes to Parquet files (#43563)
- Warn on excessive driver memory usage during shuffle ops (#42574)
- Distributed reads for
ray.data.from_huggingface(#42599) - Remove
Stageclass and related usages (#42685) - Improve stability of reading JSON files to avoid PyArrow errors (#42558, #42357)
🔨 Fixes:
- Turn off actor locality by default (#44124)
- Normalize block types before internal multi-block operations (#43764)
- Fix memory metrics for
OutputSplitter(#43740) - Fix race condition issue in
OpBufferQueue(#43015) - Fix early stop for multiple
Limitoperators. (#42958) - Fix deadlocks caused by
Dataset.streaming_splitfor job hanging (#42601)
📖 Documentation:
- Revamp Ray Data documentation for GA (#44006, #44007, #44008, #44098, #44168, #44093, #44105)
Ray Train
🎉 New Features:
- Add support for accelerator types via
ScalingConfig(accelerator_type)for improved worker scheduling (#43090)
💫 Enhancements:
- Add a backend-specific context manager for
train_funcfor setup/teardown logic (#43209) - Remove
DEFAULT_NCCL_SOCKET_IFNAMEto simplify network configuration (#42808) - Colocate Trainer with rank 0 Worker for to improve scheduling behavior (#43115)
🔨 Fixes:
- Enable scheduling workers with
memoryresource requirements (#42999) - Make path behavior OS-agnostic by using
Path.as_posixoveros.path.join(#42037) - [Lightning] Fix resuming from checkpoint when using
RayFSDPStrategy(#43594) - [Lightning] Fix deadlock in
RayTrainReportCallback(#42751) - [Transformers] Fix checkpoint reporting behavior when
get_latest_checkpointreturns None (#42953)
📖 Documentation:
- Enhance docstring and user guides for
train_loop_config(#43691) - Clarify in
ray.train.reportdocstring that it is not a barrier (#42422) - Improve documentation for
prepare_data_loadershuffle behavior andset_epoch(#41807)
🏗 Architecture refactoring:
- Simplify XGBoost and LightGBM Trainer integrations. Implemented
XGBoostTrainerandLightGBMTrainerasDataParallelTrainer. Removed dependency onxgboost_rayandlightgbm_ray. (#42111, #42767, #43244, #43424) - Refactor local staging directory to remove the need for
local_dirandRAY_AIR_LOCAL_CACHE_DIR. Add isolation between driver and distributed worker artifacts so that large files written by workers are not uploaded implicitly. Results are now only written tostorage_path, rather than having another copy in the user’s home directory (~/ray_results). (#43369, #43403, #43689) - Split overloaded
ray.train.torch.get_deviceinto anotherget_devicesAPI for multi-GPU worker setup (#42314) - Refactor restoration configuration to be centered around
storage_path(#42853, #43179) - Deprecations related to
SyncConfig(#42909) - Remove deprecated
preprocessorargument from Trainers (#43146, #43234) - Hard-deprecate
MosaicTrainerand removeSklearnTrainer(#42814)
Ray Tune
💫 Enhancements:
- Increase the minimum number of allowed pending trials for faster auto-scaleup (#43455)
- Add support to
TBXLoggerfor logging images (#37822) - Improve validation of
Experiment(config)to handle RLlibAlgorithmConfig(#42816, #42116)
🔨 Fixes:
- Fix
reuse_actorserror on actor cleanup for function trainables (#42951) - Make path behavior OS-agnostic by using Path.as_posix over
os.path.join(#42037)
📖 Documentation:
- Minor documentation fixes (#42118, #41982)
🏗 Architecture refactoring:
- Refactor local staging directory to remove the need for
local_dirandRAY_AIR_LOCAL_CACHE_DIR. Add isolation between driver and distributed worker artifacts so that large files written by workers are not uploaded implicitly. Results are now only written tostorage_path, rather than having another copy in the user’s home directory (~/ray_results). (#43369, #43403, #43689) - Deprecations related to
SyncConfigandchdir_to_trial_dir(#42909) - Refactor restoration configuration to be centered around
storage_path(#42853, #43179) - Add back
NevergradSearch(#42305) - Clean up invalid
checkpoint_dirandreporterdeprecation notices (#42698)
Ray Serve
🎉 New Features:
- Added support for active load shedding via
max_queued_requests(#42950). - Added a default autoscaling policy set via
num_replicas=”auto”(#42613).
🏗 API Changes:
- Renamed the following parameters. Each of the old names will be supported for another release before removal.
max_concurrent_queriestomax_ongoing_requeststarget_num_ongoing_requests_per_replicatotarget_ongoing_requestsdownscale_smoothing_factortodownscaling_factorupscale_smoothing_factortoupscaling_factor
- WARNING: the following default values will change in Ray 2.11:
- Default for
max_ongoing_requestswill change from 100 to 5. - Default for
target_ongoing_requestswill change from 1 to 2.
- Default for
💫 Enhancements:
- Add
RAY_SERVE_LOG_ENCODINGenv to set the global logging behavior for Serve (#42781). - Config Serve's gRPC proxy to allow large payload (#43114).
- Add blocking flag to serve.run() (#43227).
- Add actor id and worker id to Serve structured logs (#43725).
- Added replica queue length caching to the DeploymentHandle scheduler (#42943).
- This should improve overhead in the Serve proxy and handles.
max_ongoing_requests(max_concurrent_queries) is also now strictly enforced (#42947).- If you see any issues, please report them on GitHub and you can disable this behavior by setting:
RAY_SERVE_ENABLE_QUEUE_LENGTH_CACHE=0.
- Autoscaling metrics (tracking ongoing and queued metrics) are now collected at deployment handles by default instead of at the Serve replicas (#42578).
- This means you can now set
max_ongoing_requests=1for autoscaling deployments and still upscale properly, because requests queued at handles are properly taken into account for autoscaling. - You should expect deployments to upscale more aggressively during bursty traffic, because requests will likely queue up at handles during bursts of traffic.
- If you see any issues, please report them on GitHub and you can switch back to the old method of collecting metrics by setting the environment variable
RAY_SERVE_COLLECT_AUTOSCALING_METRICS_ON_HANDLE=0
- This means you can now set
- Improved the downscaling behavior of smoothing_factor for low numbers of replicas (#42612).
- Various logging improvements (#43707, #43708, #43629, #43557).
- During in-place upgrades or when replicas become unhealthy, Serve will no longer wait for old replicas to gracefully terminate before starting new ones (#43187). New replicas will be eagerly started to satisfy the target number of healthy replicas.
- This new behavior is on by default and can be turned off by setting
RAY_SERVE_EAGERLY_START_REPLACEMENT_REPLICAS=0
- This new behavior is on by default and can be turned off by setting
🔨 Fixes:
- Fix deployment route prefix override by default route prefix from serve run cli (#43805).
- Fixed a bug causing batch methods to hang upon cancellation (#42593).
- Unpinned FastAPI dependency version (#42711).
- Delay proxy marking itself as healthy until it has routes from the controller (#43076).
- Fixed an issue where multiplexed deployments could go into infinite backoff (#43965).
- Silence noisy
KeyErroron disconnects (#43713). - Fixed the prometheus counter metrics emitted as gauge bug (#43795, #43901).
- All the serve counter metrics are emitted as counters with _total suffix. The old gauge metrics are still emitted for compatibility.
📖 Documentation:
RLlib
🎉 New Features:
- The “new API stack” is now in alpha stage and available for PPO single- (#42272) and multi-agent and for SAC single-agent (#42571, #42570, #42568)
- In preparation of DQN on the new API stack: PrioritizedEpisodeReplayBuffer (#43258, #42832)
💫 Enhancements:
- Old API Stack cleanups:
- Learner/LearnerGroup APIs:
- In preparation of DQN on the new API stack: (#43199, #43196)
🔨 Fixes:
- New API Stack bug fixes: Fix
policy_to_trainlogic (#41529), fix multi-APU for PPO on the new API stack. (#44001), Issue 40347: (#42090) - Other fixes: MultiAgentEnv would NOT call env.close() on a failed sub-env (#43664), Issue 42152 (#43317), issue 42396: (#43316), issue 41518 (#42011), issue 42385 (#43313)
📖 Documentation:
- New API Stack examples: Self-play and league-based self-play (#43276), MeanStdFilter (for both single-agent and multi-agent) (#43274), Prev-actions/prev-rewards for multi-agent (#43491)
- Other docs fixes and enhancements: (#43438, #41472, #42117, #43458)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Autoscaler v2 is in alpha and can be tried out with Kuberay.
- Introduced subreaper to prevent leaks of sub-processes created by user code. (#42992)
💫 Enhancements:
- Ray state api
get_task()now accepts ObjectRef (#43507) - Add an option to disable task tracing for task/actor (#42431)
- Improved object transfer throughput. (#43434)
- Ray client now compares the Ray and Python version for compatibility with the remote Ray cluster. (#42760)
🔨 Fixes:
- Fixed several bugs for streaming generator (#43775, #43772, #43413)
- Fixed Ray counter metrics emitted as gauge bug (#43795)
- Fixed a bug where empty resource task doesn’t work with placement group (#43448)
- Fixed a bug where CPU resource is not released for a blocked worker inside placement group (#43270)
- Fixed GCS crashes when PG commit phase failed due to node failure (#43405)
- Fixed a bug where Ray memory monitor prematurely kill tasks (#43071)
- Fixed placement group resource leak (#42942)
- Upgraded cloudpickle to 3.0 which fixes the incompatibility with dataclasses (#42730)
📖 Documentation:
- Updated the doc for Ray accelerators support (#41849)
Ray Clusters
💫 Enhancements:
- [spark] Add
heap_memoryparam forsetup_ray_clusterAPI, and change default value of per ray worker node config, and change default value of ray head node config for global Ray cluster (#42604) - [spark] Add global mode for ray on spark cluster (#41153)
🔨 Fixes:
- [VSphere] Only deploy ovf to first host of cluster (#42258)
Thanks
Many thanks to all those who contributed to this release!
@ronyw7, @xsqian, @justinvyu, @matthewdeng, @sven1977, @thomasdesr, @veryhannibal, @klebster2, @can-anyscale, @simran-2797, @stephanie-wang, @simonsays1980, @kouroshHakha, @Zandew, @akshay-anyscale, @matschaffer-roblox, @WeichenXu123, @matthew29tang, @vitsai, @Hank0626, @anmyachev, @kira-lin, @ericl, @zcin, @sihanwang41, @peytondmurray, @raulchen, @aslonnie, @ruisearch42, @vszal, @pcmoritz, @rickyyx, @chrislevn, @brycehuang30, @alexeykudinkin, @vonsago, @shrekris-anyscale, @andrewsykim, @c21, @mattip, @hongchaodeng, @dabauxi, @fishbone, @scottjlee, @justina777, @surenyufuz, @robertnishihara, @nikitavemuri, @Yard1, @huchen2021, @shomilj, @architkulkarni, @liuxsh9, @Jocn2020, @liuyang-my, @rkooo567, @alanwguo, @KPostOffice, @woshiyyya, @n30111, @edoakes, @y-abe, @martinbomio, @jiwq, @arunppsg, @ArturNiederfahrenhorst, @kevin85421, @khluu, @JingChen23, @masariello, @angelinalg, @jjyao, @omatthew98, @jonathan-anyscale, @sjoshi6, @gaborgsomogyi, @rynewang, @ratnopamc, @chris-ray-zhang, @ijrsvt, @scottsun94, @raychen911, @franklsf95, @GeneDer, @madhuri-rai07, @scv119, @bveeramani, @anyscalesam, @zen-xu, @npuichigo
2.9.3Ray-2.9.3
This patch release contains fixes for Ray Core, Ray Data, and Ray Serve.
Ray Core
🔨 Fixes:
- Fix protobuf breaking change by adding a compat layer. (#43172)
- Bump up task failure logs to warnings to make sure failures could be troubleshooted (#43147)
- Fix placement group leaks (#42942)
Ray Data
🔨 Fixes:
- Skip
schemacall into_tfiftf.TypeSpecis provided (#42917) - Skip recording memory spilled stats when get_memory_info_reply is failed (#42824)
Ray Serve
🔨 Fixes:
- Fixing DeploymentStateManager qualifying replicas as running prematurely (#43075)
Thanks
Many thanks to all those who contributed to this release!
@rynewang, @GeneDer, @alexeykudinkin, @edoakes, @c21, @rkooo567
2.9.2Ray-2.9.2
This patch release contains fixes for Ray Core, Ray Data, and Ray Serve.
Ray Core
🔨 Fixes:
- Fix out of disk test on release branch (https://github.com/ray-project/ray/pull/42724)
Ray Data
🔨 Fixes:
- Fix failing huggingface test (https://github.com/ray-project/ray/pull/42727)
- Fix deadlocks caused by streaming_split (https://github.com/ray-project/ray/pull/42601) (https://github.com/ray-project/ray/pull/42755)
- Fix locality config not being respected in DataConfig (https://github.com/ray-project/ray/pull/42204 https://github.com/ray-project/ray/pull/42204) (https://github.com/ray-project/ray/pull/42722)
- Stability & accuracy improvements for Data+Train benchmark (https://github.com/ray-project/ray/pull/42027)
- Add retry for _sample_fragment during
ParquetDatasource._estimate_files_encoding_ratio()(https://github.com/ray-project/ray/pull/42759) (https://github.com/ray-project/ray/pull/42774) - Skip recording memory spilled stats when get_memory_info_reply is failed (https://github.com/ray-project/ray/pull/42824) (https://github.com/ray-project/ray/pull/42834)
Ray Serve
🔨 Fixes:
- Pin the fastapi & starlette version to avoid breaking proxy (https://github.com/ray-project/ray/pull/42740 https://github.com/ray-project/ray/pull/42740)
- Fix IS_PYDANTIC_2 logic for pydantic<1.9.0 (https://github.com/ray-project/ray/pull/42704) (https://github.com/ray-project/ray/pull/42708)
- fix missing message body for json log formats (https://github.com/ray-project/ray/pull/42729) (https://github.com/ray-project/ray/pull/42874)
Thanks
Many thanks to all those who contributed to this release!
@c21, @raulchen, @can-anyscale, @edoakes, @peytondmurray, @scottjlee, @aslonnie, @architkulkarni, @GeneDer, @Zandew, @sihanwang41
2.9.1Ray-2.9.1
This patch release contains fixes for Ray Core, Ray Data, and Ray Serve.
Ray Core
🔨 Fixes:
- Adding debupgy as the ray debugger (#42311)
- Fix task events profile events per task leak (#42248)
- Make sure redis sync context and async context connect to the same redis instance (#42040)
Ray Data
🔨 Fixes:
- [Data] Retry write if error during file clean up (#42326)
Ray Serve
🔨 Fixes:
- Improve handling the websocket server disconnect scenario (#42130)
- Fix pydantic config documentation (#42216)
- Address issues under high network delays:
- Enable setting queue length response deadline via environment variable (#42001)
- Add exponential backoff for queue_len_response_deadline_s (#42041)
2.9.0Ray-2.9.0
Release Highlights
- This release contains fixes for the Ray Dashboard. Additional context can be found here: https://www.anyscale.com/blog/update-on-ray-cves-cve-2023-6019-cve-2023-6020-cve-2023-6021-cve-2023-48022-cve-2023-48023
- Ray Train has now upgraded support for spot node preemption -- allowing Ray Train to handle preemption node failures differently than application errors.
- Ray is now compatible with Pydantic versions <2.0.0 and >=2.5.0, addressing a piece of user feedback we’ve consistently received.
- The Ray Dashboard now has a page for Ray Data to monitor real-time execution metrics.
- Streaming generator is now officially a public API (#41436, #38784). Streaming generator allows writing streaming applications easily on top of Ray via Python generator API and has been used for Ray Serve and Ray data for several releases. See the documentation for details.
- We’ve added experimental support for new accelerators: Intel GPU (#38553), Intel Gaudi Accelerators (#40561), and Huawei Ascend NPU (#41256).
Ray Libraries
Ray Data
🎉 New Features:
- Add the dashboard for Ray Data to monitor real-time execution metrics and log file for debugging (https://docs.ray.io/en/master/data/monitoring-your-workload.html).
- Introduce
concurrencyargument to replaceComputeStrategyin map-like APIs (#41461) - Allow task failures during execution (#41226)
- Support PyArrow 14.0.1 (#41036)
- Add new API for reading and writing Datasource (https://github.com/ray-project/ray/issues/40296)
- Enable group-by over multiple keys in datasets (#37832)
- Add support for multiple group keys in
map_groups(#40778)
💫 Enhancements:
- Optimize
OpState.outqueue_num_blocks(#41748) - Improve stall detection for
StreamingOutputsBackpressurePolicy(#41637) - Enable read-only Datasets to be executed on new execution backend (#41466, #41597)
- Inherit block size from downstream ops (#41019)
- Use runtime object memory for scheduling (#41383)
- Add retries to file writes (#41263)
- Make range datasource streaming (#41302)
- Test core performance metrics (#40757)
- Allow
ConcurrencyCapBackpressurePolicy._cap_multiplierto be set to 1.0 (#41222) - Create
StatsManagerto manage_StatsActorremote calls (#40913) - Expose
max_retry_cntparameter forBigQueryWrite (#41163) - Add rows outputted to data metrics (#40280)
- Add fault tolerance to remote tasks (#41084)
- Add operator-level dropdown to ray data overview (#40981)
- Avoid slicing too-small blocks (#40840)
- Ray Data jobs detail table (#40756)
- Update default shuffle block size to 1GB (#40839)
- Log progress bar to data logs (#40814)
- Operator level metrics (#40805)
🔨 Fixes:
- Partial fix for
Dataset.contextnot being sealed after creation (#41569) - Fix the issue that
DataContextis not propagated when usingstreaming_split(#41473) - Fix Parquet partition filter bug (#40947)
- Fix split read output blocks (#41070)
- Fix
BigQueryDatasourcefault tolerance bugs (#40986)
📖 Documentation:
- Add example of how to read and write custom file types (#41785)
- Fix
ray.data.read_databricks_tablesdoc (#41366) - Add
read_jsondocs example for setting PyArrow block size when reading large files (#40533) - Add
AllToAllAPIto dataset methods (#40842)
Ray Train
🎉 New Features:
- Support reading
Resultfrom cloud storage (#40622)
💫 Enhancements:
- Sort local Train workers by GPU ID (#40953)
- Improve logging for Train worker scheduling information (#40536)
- Load the latest unflattened metrics with
Result.from_path(#40684) - Skip incrementing failure counter on preemption node died failures (#41285)
- Update TensorFlow
ReportCheckpointCallbackto delete temporary directory (#41033)
🔨 Fixes:
- Update config dataclass repr to check against None (#40851)
- Add a barrier in Lightning
RayTrainReportCallbackto ensure synchronous reporting. (#40875) - Restore Tuner and
Results properly from moved storage path (#40647)
📖 Documentation:
- Improve torch, lightning quickstarts and migration guides + fix torch restoration example (#41843)
- Clarify error message when trying to use local storage for multi-node distributed training and checkpointing (#41844)
- Copy edits and adding links to docstrings (#39617)
- Fix the missing ray module import in PyTorch Guide (#41300)
- Fix typo in lightning_mnist_example.ipynb (#40577)
- Fix typo in deepspeed.rst (#40320)
🏗 Architecture refactoring:
- Remove Legacy Trainers (#41276)
Ray Tune
🎉 New Features:
- Support reading
Resultfrom cloud storage (#40622)
💫 Enhancements:
- Skip incrementing failure counter on preemption node died failures (#41285)
🔨 Fixes:
- Restore Tuner and
Results properly from moved storage path (#40647)
📖 Documentation:
- Remove low value Tune examples and references to them (#41348)
- Clarify when to use
MLflowLoggerCallbackandsetup_mlflow(#37854)
🏗 Architecture refactoring:
- Delete legacy
TuneClient/TuneServerAPIs (#41469) - Delete legacy
Searchers (#41414) - Delete legacy persistence utilities (
air.remote_storage, etc.) (#40207)
Ray Serve
🎉 New Features:
- Introduce logging config so that users can set different logging parameters for different applications & deployments.
- Added gRPC context object into gRPC deployments for user to set custom code and details back to the client.
- Introduce a runtime environment feature that allows running applications in different containers with different images. This feature is experimental and a new guide can be found in the Serve docs.
💫 Enhancements:
- Explicitly handle gRPC proxy task cancellation when the client dropped a request to not waste compute resources.
- Enable async
__del__in the deployment to execute custom clean up steps. - Make Ray Serve compatible with Pydantic versions <2.0.0 and >=2.5.0.
🔨 Fixes:
- Fixed gRPC proxy streaming request latency metrics to include the entire lifecycle of the request, including the time to consume the generator.
- Fixed gRPC proxy timeout request status from CANCELLED to DEADLINE_EXCEEDED.
- Fixed previously Serve shutdown spamming log files with logs for each event loop to only log once on shutdown.
- Fixed issue during batch requests when a request is dropped, the batch loop will be killed and not processed any future requests.
- Updating replica log filenames to only include POSIX-compliant characters (removed the “#” character).
- Replicas will now be gracefully shut down after being marked unhealthy due to health check failures instead of being force killed.
- This behavior can be toggled using the environment variable RAY_SERVE_FORCE_STOP_UNHEALTHY_REPLICAS=1, but this is planned to be removed in the near future. If you rely on this behavior, please file an issue on github.
RLlib
🎉 New Features:
- New API stack (in progress):
- New
MultiAgentEpisodeclass introduced. Basis for upcoming multi-agent EnvRunner, which will replace RolloutWorker APIs. (#40263, #40799) - PPO runs with new
SingleAgentEnvRunner(w/o Policy/RolloutWorker APIs). CI learning tests added. (#39732, #41074, #41075) - By default: PPO reverted to use old API stack by default, for now. Pending feature-completion of new API stack (incl. multi-agent, RNN support, new EnvRunners, etc..). (#40706)
- New
- Old API stack:
- APPO/IMPALA: Enable using 2 separate optimizers for policy and vs (and 2 learning rates) on the old API stack. (#40927)
- Added
on_workers_recreatedcallback to Algorithm, which is triggered after workers have failed and been restarted. (#40354)
💫 Enhancements:
- Old API stack and
rllib_contribcleanups: #40939, #40744, #40789, #40444, #37271
🔨 Fixes:
- Restoring from a checkpoint from an older wheel (where
AlgorithmConfig.rl_module_specwas NOT a “@property” yet) breaks when trying to load from this checkpoint. (#41157) - SampleBatch slicing crashes when using tf + SEQ_LENS + zero-padding. (#40905)
- Other fixes: #39978, #40788, #41168, #41204
📖 Documentation:
- Updated codeblocks in RLlib. (#37271)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Streaming generator is now officially a public API (#41436, #38784). Streaming generator allows writing streaming applications easily on top of Ray via Python generator API and has been used for Ray serve and Ray data for several releases. See the documentation for details.
- As part of the change, num_returns=”dynamic” is planning to be deprecated, and its return type is changed from
ObjectRefGenerator-> “DynamicObjectRefGenerator”
- As part of the change, num_returns=”dynamic” is planning to be deprecated, and its return type is changed from
- Add experimental accelerator support for new hardwares.
- Add experimental support for Intel GPU (#38553)
- Add experimental support for Intel Gaudi Accelerators (#40561)
- Add experimental support for Huawei Ascend NPU (#41256)
- Add the initial support to run MPI based code on top of Ray.(#40917, #41349)
💫 Enhancements:
- Optimize next/anext performance for streaming generator (#41270)
- Make the number of connections and thread number of the object manager client tunable. (#41421)
- Add
__ray_call__default actor method (#41534)
🔨 Fixes:
- Fix NullPointerException cause by raylet id is empty when get actor info in java worker (#40560)
- Fix a bug where SIGTERM is ignored to worker processes (#40210)
- Fix mmap file leak. (#40370)
- Fix the lifetime issue in Plasma server client releasing object. (#40809)
- Upgrade grpc from 1.50.2 to 1.57.1 to include security fixes (#39090)
- Fix the bug where two head nodes are shown from ray list nodes (#40838)
- Fix the crash when the GCS address is not valid. (#41253)
- Fix the issue of unexpectedly high socket usage in ray core worker processes. (#41121)
- Make worker_process_setup_hook work with strings instead of Python functions (#41479)
Ray Clusters
💫 Enhancements:
- Stability improvements for the vSphere cluster launcher
- Better CLI output for cluster launcher
🔨 Fixes:
- Fixed
run_initfor TPU command runner
📖Documentation:
- Added missing steps and simplified YAML in top-level clusters quickstart
- Clarify that job entrypoints run on the head node by default and how to override it
Dashboard
💫 Enhancements:
- Improvements to the Ray Data Dashboard
- Added Ray Data-specific overview on jobs page, including a table view with Dataset-level metrics
- Added operator-level metrics granularity to drill down on Dataset operators
- Added additional metrics for monitoring iteration over Datasets
Docs
🎉 New Features:
- Updated to Sphinx version 7.1.2. Previously, the docs build used Sphinx 4.3.2. Upgrading to a recent version provides a more modern user experience while fixing many long standing issues. Let us know how you like the upgrade or any other docs issues on your mind, on the Ray Slack #docs channel.
Thanks
Many thanks to all those who contributed to this release!
@justinvyu, @zcin, @avnishn, @jonathan-anyscale, @shrekris-anyscale, @LeonLuttenberger, @c21, @JingChen23, @liuyang-my, @ahmed-mahran, @huchen2021, @raulchen, @scottjlee, @jiwq, @z4y1b2, @jjyao, @JoshTanke, @marxav, @ArturNiederfahrenhorst, @SongGuyang, @jerome-habana, @rickyyx, @rynewang, @batuhanfaik, @can-anyscale, @allenwang28, @wingkitlee0, @angelinalg, @peytondmurray, @rueian, @KamenShah, @stephanie-wang, @bryanjuho, @sihanwang41, @ericl, @sofianhnaide, @RaffaGonzo, @xychu, @simonsays1980, @pcmoritz, @aslonnie, @WeichenXu123, @architkulkarni, @matthew29tang, @larrylian, @iycheng, @hongchaodeng, @rudeigerc, @rkooo567, @robertnishihara, @alanwguo, @emmyscode, @kevin85421, @alexeykudinkin, @michaelhly, @ijrsvt, @ArkAung, @mattip, @harborn, @sven1977, @liuxsh9, @woshiyyya, @hahahannes, @GeneDer, @vitsai, @Zandew, @evalaiyc98, @edoakes, @matthewdeng, @bveeramani
2.8.1Ray-2.8.1
Release Highlights
The Ray 2.8.1 patch release contains fixes for the Ray Dashboard.
Additional context can be found here: https://www.anyscale.com/blog/update-on-ray-cves-cve-2023-6019-cve-2023-6020-cve-2023-6021-cve-2023-48022-cve-2023-48023
Ray Dashboard
🔨 Fixes:
[core][state][log] Cherry pick changes to prevent state API from reading files outside the Ray log directory (#41520) [Dashboard] Migrate Logs page to use state api. (#41474) (#41522)
2.8.0Ray-2.8.0
Release Highlights
This release features stability improvements and API clean-ups across the Ray libraries.
- In Ray Serve, we are deprecating the previously experimental DAG API for deployment graphs. Model composition will be supported through deployment handles providing more flexibility and stability. The previously deprecated Ray Serve 1.x APIs have also been removed. We’ve also added a new Java APIs that aligns with the Ray Serve 2.x APIs. More API changes in the release notes below.
- In RLlib, we’ve moved 24 algorithms into
rllib_contrib(still available within RLlib for Ray 2.8). - We’ve added support for PyTorch-compatible input files shuffling for Ray Data. This allows users to randomly shuffle input files for better model training accuracy. This release also features new Ray Data datasources for Databricks and BigQuery.
- On the Ray Dashboard, we’ve added new metrics for Ray Data in the Metrics tab. This allows users to monitor Ray Data workload including real time metrics of cluster memory, CPU, GPU, output data size, etc. See the doc for more details.
- Ray Core now supports profiling GPU tasks or actors using Nvidia Nsight. See the documentation for instructions.
- We fixed 2 critical bugs raised by many kuberay / ML library users, including a child process leak issue from Ray worker that leaks the GPU memory (#40182) and an job page excessive loading time issue when Ray HA cluster restarts a head node (#40742)
- Python 3.7 support is officially deprecated from Ray.
Ray Libraries
Ray Data
🎉 New Features:
- Add support for shuffling input files (#40154)
- Support streaming read of PyTorch dataset (#39554)
- Add BigQuery datasource (#37380)
- Add Databricks table / SQL datasource (#39852)
- Add inverse transform functionality to LabelEncoder (#37785)
- Add function arg params to
Dataset.mapandDataset.flat_map(#40010)
💫Enhancements:
- Hard deprecate
DatasetPipeline(#40129) - Remove
BulkExecutorcode path (#40200) - Deprecate extraneous
Datasetparameters and methods (#40385) - Remove legacy iteration code path (#40013)
- Implement streaming output backpressure (#40387)
- Cap op concurrency with exponential ramp-up (#40275)
- Store ray dashboard metrics in
_StatsActor(#40118) - Slice output blocks to respect target block size (#40248)
- Drop columns before grouping by in
Dataset.unique()(#40016) - Standardize physical operator runtime metrics (#40173)
- Estimate blocks for limit and union operator (#40072)
- Store bytes spilled/restored after plan execution (#39361)
- Optimize
sample_boundariesinSortTaskSpec(#39581) - Optimization to reduce ArrowBlock building time for blocks of size 1 (#38833)
🔨 Fixes:
- Fix bug where
_StatsActorerrors withPandasBlock(#40481) - Remove deprecated
do_write(#40422) - Improve error message when reading HTTP files (#40462)
- Add flag to skip
get_object_locationsfor metrics (#39884) - Fall back to fetch files info in parallel for multiple directories (#39592)
- Replace deprecated
.pieceswith updated.fragments(#39523) - Backwards compatibility for
Preprocessorthat have been fit in older versions (#39173) - Removing unnecessary data copy in
convert_udf_returns_to_numpy(#39188) - Do not eagerly free root
RefBundles(#39016)
📖Documentation:
- Remove out-of-date Data examples (#40127)
- Remove unused and outdated source examples (#40271)
Ray Train
🎉 New Features:
- Add initial support for scheduling workers on neuron_cores (#39091)
💫Enhancements:
- Update PyTorch Lightning import path to support both
pytorch_lightningandlightning(#39841, #40266) - Propagate driver
DataContexttoRayTrainWorkers(#40116)
🔨 Fixes:
- Fix error propagation for as_directory if to_directory fails (#40025)
📖Documentation:
- Update checkpoint hierarchy documentation for RayTrainReportCallbacks. (#40174)
- Update Lightning RayDDPStrategy docstring (#40376)
🏗 Architecture refactoring:
- Deprecate
LightningTrainer,AccelerateTrainer, `TransformersTrainer (#40163) - Clean up legacy persistence mode code paths (#39921, #40061, #40069, #40168)
- Deprecate legacy
DatasetConfig(#39963) - Remove references to
DatasetPipeline(#40159) - Enable isort (#40172)
Ray Tune
💫Enhancements:
- Separate storage checkpoint index bookkeeping (#39927, #40003)
- Raise an error if
Tuner.restore()is called on an instance (#39676) 🏗 Architecture refactoring: - Clean up legacy persistence mode code paths (#39918, #40061, #40069, #40168, #40175, #40192, #40181, #40193)
- Migrate TuneController tests (#39704)
- Remove TuneRichReporter (#40169)
- Remove legacy Ray Client tests (#40415)
Ray Serve
💫Enhancements:
- The single-app configuration format for the Serve Config (i.e. the Serve Config without the ‘applications’ field) has been deprecated in favor of the new configuration format. Both single-app configuration and DAG API will be removed in 2.9.
- The Serve REST API is now accessible through the dashboard port, which defaults to
8265. - Accessing the Serve REST API through the dashboard agent port (default
52365) is deprecated. The support will be removed in a future version. - Ray job error tracebacks are now logged in the job driver log for easier access when jobs fail during start up.
- Deprecated single-application config file
- Deprecated DAG API:
InputNodeandDAGDriver - Removed deprecated Deployment 1.x APIs:
Deployment.deploy(),Deployment.delete(),Deployment.get_handle() - Removed deprecated 1.x API:
serve.get_deploymentandserve.list_deployments - New Java API supported (aligns with Ray Serve 2.x API)
🔨 Fixes:
- The
dedicated_cpuanddetachedoptions inserve.start()have been fully disallowed. - Error will be raised when users pass invalid gRPC service functions and fail early.
- The proxy’s readiness check now uses a linear backoff to avoid getting stuck in an infinite loop if it takes longer than usual to start.
grpc_optionsonserve.start()was only allowing agRPCOptionsobject in Ray 2.7.0. Dictionaries are now allowed to be used asgrpc_optionsin theserve.start()call.
RLlib
💫Enhancements:
rllib_contribalgorithms (A2C, A3C, AlphaStar #36584, AlphaZero #36736, ApexDDPG #36596, ApexDQN #36591, ARS #36607, Bandits #36612, CRR #36616, DDPG, DDPPO #36620, Dreamer(V1), DT #36623, ES #36625, LeelaChessZero #36627, MA-DDPG #36628, MAML, MB-MPO #36662, PG #36666, QMix #36682, R2D2, SimpleQ #36688, SlateQ #36710, and TD3 #36726) all produce warnings now if used. See here for more information on therllib_contribefforts. (36620, 36628, 3- Provide msgpack checkpoint translation utility to convert checkpoint into msgpack format for being able to move in between python versions (#38825).
🔨 Fixes:
- Issue 35440 (JSON output writer should include INFOS #39632)
- Issue 39453 (PettingZoo wrappers should use correct multi-agent dict spaces #39459)
- Issue 39421 (Multi-discrete action spaces not supported in new stack #39534)
- Issue 39234 (Multi-categorical distribution bug #39464) #39654, #35975, #39552, #38555
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Python 3.7 support is officially deprecated from Ray.
- Supports profiling GPU tasks or actors using Nvidia Nsight. See the doc for instructions.
- Ray on spark autoscaling is officially supported from Ray 2.8. See the REP for more details. 💫Enhancements:
- IDLE node information in detail is available from ray status -v (#39638)
- Adding a new accelerator to Ray is simplified with a new accelerator interface. See the in-flight REP for more details (#40286).
- Typing_extensions is removed from a dependency requirement because Python 3.7 support is deprecated. (#40336)
- Ray state API supports case insensitive match. (#34577)
ray start --runtime-env-agent-portis officially supported. (#39919)- Driver exit code is available fromjob info (#39675)
🔨 Fixes:
- Fixed a worker leak when Ray is used with placement group because Ray didn’t handle SIGTERM properly (#40182)
- Fixed an issue job page loading takes a really long time when Ray HA cluster restarts a head node (#40431)
- [core] loosen the check on release object (#39570)
- [Core] ray init sigterm (#39816)
- [Core] Non Unit Instance fractional value fix (#39293)
- [Core]: Enable get_actor_name for actor runtime context (#39347)
- [core][streaming][python] Fix asyncio.wait coroutines args deprecated warnings #40292
📖Documentation:
- The Ray streaming generator doc (alpha) is officially available at https://docs.ray.io/en/master/ray-core/ray-generator.html
Ray Clusters
💫Enhancements:
- Enable GPU support for vSphere cluster launcher (#40667)
📖Documentation:
- Setup RBAC by KubeRay Helm chart
- KubeRay upgrade documentation
- RayService high availability
🔨 Fixes:
- Assorted fixes for vSphere cluster launcher (#40487, #40516, #40655)
Dashboard
🎉 New Features:
- New metrics for ray data can be found in the Metrics tab. 🔨 Fixes:
- Fix bug where download log button did not download all logs for actors.
Thanks
Many thanks to all who contributed to this release!
@scottjlee, @chappidim, @alexeykudinkin, @ArturNiederfahrenhorst, @stephanie-wang, @chaowanggg, @peytondmurray, @maxpumperla, @arvind-chandra, @iycheng, @JalinWang, @matthewdeng, @wfangchi, @z4y1b2, @alanwguo, @Zandew, @kouroshHakha, @justinvyu, @yuanchen8911, @vitsai, @hongchaodeng, @allenwang28, @caozy623, @ijrsvt, @omus, @larrylian, @can-anyscale, @joncarter1, @ericl, @lejara, @jjyao, @Ox0400, @architkulkarni, @edoakes, @raulchen, @bveeramani, @sihanwang41, @WeichenXu123, @zcin, @Codle, @dimakis, @simonsays1980, @cadedaniel, @angelinalg, @luv003, @JingChen23, @xwjiang2010, @rynewang, @Yicheng-Lu-llll, @scrivy, @michaelhly, @shrekris-anyscale, @xxnwj, @avnishn, @woshiyyya, @aslonnie, @amogkam, @krfricke, @pcmoritz, @liuyang-my, @jonathan-anyscale, @rickyyx, @scottsun94, @richardliaw, @rkooo567, @stefanbschneider, @kevin85421, @c21, @sven1977, @GeneDer, @matthew29tang, @RocketRider, @LaynePeng, @samhallam-reverb, @scv119, @huchen2021
2.7.1Ray-2.7.1
Release Highlights
- Ray Serve:
- Added an
applicationtag to theray_serve_num_http_error_requestsmetric - Fixed a bug where no data shows up on the
Error QPS per Applicationpanel in the Ray Dashboard
- Added an
- RLlib:
- DreamerV3: Bug fix enabling support for continuous actions.
- Ray Train:
- Fix a bug where setting a local storage path on Windows errors (#39951)
- Ray Tune:
- Fix a broken
Trial.node_ipproperty (#40028)
- Fix a broken
- Ray Core:
- Fixes a segfault when a streaming generator and actor cancel is used together
- Fix autoscaler sdk accidentally initialize ray worker leading to leaked driver showing up in the dashboard.
- Added a new user guide and fixes for the vSphere cluster launcher.
- Fixed a bug where
ray startwould occasionally fail withValueError:acceleratorTypeshould match v(generation)-(cores/chips).
- Dashboard:
- Improvement on cluster page UI
- Fix a bug that overview page UI will crash
Ray Libraries
Ray Serve
🔨 Fixes:
- Fixed a bug where no data shows up on the
Error QPS per Applicationpanel in the Ray Dashboard
RLlib
🔨 Fixes:
- DreamerV3: Bug fix enabling support for continuous actions (39751).
Ray Core and Ray Clusters
🔨 Fixes:
- Fixed Ray cluster stability on a high latency environment
Thanks
Many thanks to all those who contributed to this release!
@chaowanggg, @allenwang28, @shrekris-anyscale, @GeneDer, @justinvyu, @can-anyscale, @edoakes, @architkulkarni, @rkooo567, @rynewang, @rickyyx, @sven1977
2.7.0Ray-2.7.0
Release Highlights
Ray 2.7 release brings important stability improvements and enhancements to Ray libraries, with Ray Train and Ray Serve becoming generally available. Ray 2.7 is accompanied with a GA release of KubeRay.
- Following user feedback, we are rebranding “Ray AI Runtime (AIR)” to “Ray AI Libraries”. Without reducing any of the underlying functionality of the original Ray AI runtime vision as put forth in Ray 2.0, the underlying namespace (ray.air) is consolidated into ray.data, ray.train, and ray.tune. This change reduces the friction for new machine learning (ML) practitioners to quickly understand and leverage Ray for their production machine learning use cases.
- With this release, Ray Serve and Ray Train’s Pytorch support are becoming Generally Available -- indicating that the core APIs have been marked stable and that both libraries have undergone significant production hardening.
- In Ray Serve, we are introducing a new backwards-compatible
DeploymentHandleAPI to unify various existing Handle APIs, a high performant gRPC proxy to serve gRPC requests through Ray Serve, along with various stability and usability improvements. - In Ray Train, we are consolidating various Pytorch-based trainers into the TorchTrainer, reducing the amount of refactoring work new users needed to scale existing training scripts. We are also introducing a new train.Checkpoint API, which provides a consolidated way of interacting with remote and local storage, along with various stability and usability improvements.
- In Ray Core, we’ve added initial integrations with TPUs and AWS accelerators, enabling Ray to natively detect these devices and schedule tasks/actors onto them. Ray Core also officially now supports actor task cancellation and has an experimental streaming generator that supports streaming response to the caller.
Take a look at our refreshed documentation and the Ray 2.7 migration guide and let us know your feedback!
Ray Libraries
Ray AIR
🏗 Architecture refactoring:
- Ray AIR namespace: We are sunsetting the "Ray AIR" concept and namespace (#39516, #38632, #38338, #38379, #37123, #36706, #37457, #36912, #37742, #37792, #37023). The changes follow the proposal outlined in this REP.
- Ray Train Preprocessors, Predictors: We now recommend using Ray Data instead of Preprocessors (#38348, #38518, #38640, #38866) and Predictors (#38209).
Ray Data
🎉 New Features:
- In this release, we’ve integrated the Ray Core streaming generator API by default, which allows us to reduce memory footprint throughout the data pipeline (#37736).
- Avoid unnecessary data buffering between
ReadandMapoperator (zero-copy fusion) (#38789) - Add
Dataset.write_imagesto write images (#38228) - Add
Dataset.write_sql()to write SQL databases (#38544) - Support sort on multiple keys (#37124)
- Support reading and writing JSONL file format (#37637)
- Support class constructor args for
Dataset.map()andflat_map()(#38606) - Implement streamed read from Hugging Face Dataset (#38432)
💫Enhancements:
- Read data with multi-threading for
FileBasedDataSource(#39493) - Optimization to reduce
ArrowBlockbuilding time for blocks of size 1 (#38988) - Add
partition_filterparameter toread_parquet(#38479) - Apply limit to
Dataset.take()and related methods (#38677) - Postpone
reader.get_read_tasksuntil execution (#38373) - Lazily construct metadata providers (#38198)
- Support writing each block to a separate file (#37986)
- Make
iter_batchesan Iterable (#37881) - Remove default limit on
Dataset.to_pandas()(#37420) - Add
Dataset.to_dask()parameter to toggle consistent metadata check (#37163) - Add
Datasource.on_write_start(#38298) - Remove support for
DatasetDictas input intofrom_huggingface()(#37555)
🔨 Fixes:
- Backwards compatibility for
Preprocessorthat have been fit in older versions (#39488) - Do not eagerly free root
RefBundles(#39085) - Retry open files with exponential backoff (#38773)
- Avoid passing
local_urito all non-Parquet data sources (#38719) - Add
ctxparameter toDatasource.write(#38688) - Preserve block format on
map_batchesover empty blocks (#38161) - Fix args and kwargs passed to
ActorPoolmap_batches(#38110) - Add
tiffile extension toImageDatasource(#38129) - Raise error if PIL can't load image (#38030)
- Allow automatic handling of string features as byte features during TFRecord serialization (#37995)
- Remove unnecessary file system wrapping (#38299)
- Remove
_block_udffromFileBasedDatasourcereads (#38111)
📖Documentation:
- Standardize API references (#37015, #36980, #37007, #36982, etc)
Ray Train
🤝 API Changes
- Ray Train and Ray Tune Checkpoints: Introduced a new
train.Checkpointclass that unifies interaction with remote storage such as S3, GS, and HDFS. The changes follow the proposal in [REP35] Consolidated persistence API for Ray Train/Tune (#38452, #38481, #38581, #38626, #38864, #38844) - Ray Train with PyTorch Lightning: Moving away from the LightningTrainer in favor of the TorchTrainer as the recommended way of running distributed PyTorch Lightning. The changes follow the proposal outlined in [REP37] [Train] Unify Torch based Trainers on the TorchTrainer API (#37989)
- Ray Train with Hugging Face Transformers/Accelerate: Moving away from the TransformersTrainer/AccelerateTrainer in favor of the TorchTrainer as the recommended way of running distributed Hugging Face Transformers and Accelerate. The changes follow the proposal outlined in [REP37] [Train] Unify Torch based Trainers on the TorchTrainer API (#38083, #38295)
- Deprecated
preprocessorarg toTrainer(#38640) - Removed deprecated
Result.log_dir(#38794)
💫Enhancements:
- Various improvements and fixes for the console output of Ray Train and Tune (#37572, #37571, #37570, #37569, #37531, #36993)
- Raise actionable error message for missing dependencies (#38497)
- Use posix paths throughout library code (#38319)
- Group consecutive workers by IP (#38490)
- Split all Ray Datasets by default (#38694)
- Add static Trainer methods for getting tree-based models (#38344)
- Don't set rank-specific local directories for Train workers (#38007)
🔨 Fixes:
- Fix trainer restoration from S3 (#38251)
🏗 Architecture refactoring:
- Updated internal usage of the new Checkpoint API (#38853, #38804, #38697, #38695, #38757, #38648, #38598, #38617, #38554, #38586, #38523, #38456, #38507, #38491, #38382, #38355, #38284, #38128, #38143, #38227, #38141, #38057, #38104, #37888, #37991, #37962, #37925, #37906, #37690, #37543, #37475, #37142, #38855, #38807, #38818, #39515, #39468, #39368, #39195, #39105, #38563, #38770, #38759, #38767, #38715, #38709, #38478, #38550, #37909, #37613, #38876, #38868, #38736, #38871, #38820, #38457)
📖Documentation:
- Restructured the Ray Train documentation to make it easier to find relevant content (#37892, #38287, #38417, #38359)
- Improved examples, references, and navigation items (#38049, #38084, #38108, #37921, #38391, #38519, #38542, #38541, #38513, #39510, #37588, #37295, #38600, #38582, #38276, #38686, #38537, #38237, #37016)
- Removed outdated examples (#38682, #38696, #38656, #38374, #38377, #38441, #37673, #37657, #37067)
Ray Tune
🤝 API Changes
- Ray Train and Ray Tune Checkpoints: Introduced a new
train.Checkpointclass that unifies interaction with remote storage such as S3, GS, and HDFS. The changes follow the proposal in [REP35] Consolidated persistence API for Ray Train/Tune (#38452, #38481, #38581, #38626, #38864, #38844) - Removed deprecated
Result.log_dir(#38794)
💫Enhancements:
- Various improvements and fixes for the console output of Ray Train and Tune (#37572, #37571, #37570, #37569, #37531, #36993)
- Raise actionable error message for missing dependencies (#38497)
- Use posix paths throughout library code (#38319)
- Improved the PyTorchLightning integration (#38883, #37989, #37387, #37400)
- Improved the XGBoost/LightGBM integrations (#38558, #38828)
🔨 Fixes:
- Fix hyperband r calculation and stopping (#39157)
- Replace deprecated np.bool8 (#38495)
- Miscellaneous refactors and fixes (#38165, #37506, #37181, #37173)
🏗 Architecture refactoring:
- Updated internal usages of the new Checkpoint API (#38853, #38804, #38697, #38695, #38757, #38648, #38598, #38617, #38554, #38586, #38523, #38456, #38507, #38491, #38382, #38355, #38284, #38128, #38143, #38227, #38141, #38057, #38104, #37888, #37991, #37962, #37925, #37906, #37690, #37543, #37475, #37142, #38855, #38807, #38818, #39515, #39468, #39368, #39195, #39105, #38563, #38770, #38759, #38767, #38715, #38709, #38478, #38550, #37909, #37613, #38876, #38868, #38736, #38871, #38820, #38457)
- Removed legacy TrialRunner/Executor (#37927)
Ray Serve
🎉 New Features:
- Added keep_alive_timeout_s to Serve config file to allow users to configure HTTP proxy’s duration to keep idle connections alive when no requests are ongoing.
- Added gRPC proxy to serve gRPC requests through Ray Serve. It comes with feature parity with HTTP while offering better performance. Also, replaces the previous experimental gRPC direct ingress.
- Ray 2.7 introduces a new
DeploymentHandleAPI that will replace the existingRayServeHandleandRayServeSyncHandleAPIs in a future release. You are encouraged to migrate to the new API to avoid breakages in the future. To opt in, either usehandle.options(use_new_handle_api=True)or set the global environment variableexport RAY_SERVE_ENABLE_NEW_HANDLE_API=1. See https://docs.ray.io/en/latest/serve/model_composition.html for more details. - Added a new API
get_app_handlethat gets a handle used to send requests to an application. The API uses the newDeploymentHandleAPI. - Added a new developer API
get_deployment_handlethat gets a handle that can be used to send requests to any deployment in any application. - Added replica placement group support.
- Added a new API
serve.statuswhich can be used to get the status of proxies and Serve applications (and their deployments and replicas). This is the pythonic equivalent of the CLIserve status. - A
--reloadoption has been added to theserve runCLI. - Support X-Request-ID in http header
💫Enhancements:
- Downstream handlers will now be canceled when the HTTP client disconnects or an end-to-end timeout occurs.
- Ray Serve is now “generally available,” so the core APIs have been marked stable.
serve.startandserve.runhave a few small changes and deprecations in preparation for this, see https://docs.ray.io/en/latest/serve/api/index.html for details.
- Added a new metric (
ray_serve_num_ongoing_http_requests) to track the number of ongoing requests in each proxy - Add
RAY_SERVE_MULTIPLEXED_MODEL_ID_MATCHING_TIMEOUT_Sflag to wait until the model matching. - Reduce the multiplexed model id information publish interval.
- Add Multiplex metrics into dashboard
- Added metrics to track controller restarts and control loop progress
- Various stability, flexibility, and performance enhancements to Ray Serve’s autoscaling.
🔨 Fixes:
- Fixed a memory leak in Serve components by upgrading gRPC: https://github.com/ray-project/ray/issues/38591.
- Fixed a memory leak due to
asyncio.Events not being removed in the long poll host: https://github.com/ray-project/ray/pull/38516. - Fixed a bug where bound deployments could not be passed within custom objects: https://github.com/ray-project/ray/issues/38809.
- Fixed a bug where all replica handles were unnecessarily broadcasted to all proxies every minute: https://github.com/ray-project/ray/pull/38539.
- Fixed a bug where
ray_serve_deployment_queued_querieswouldn’t decrement when clients disconnected: https://github.com/ray-project/ray/pull/37965.
📖Documentation:
- Added docs for how to use keep_alive_timeout_s in the Serve config file.
- Added usage and examples for serving gRPC requests through Serve’s gRPC proxy.
- Added example for passing deployment handle responses by reference.
- Added a Ray Serve Autoscaling guide to the Ray Serve docs that goes over basic configurations and autoscaling examples. Also added an Advanced Ray Serve Autoscaling guide that goes over more advanced configurations and autoscaling examples.
- Added docs explaining how to debug memory leaks in Serve.
- Added docs that explain how Serve cancels disconnected requests and how to handle those disconnections.
RLlib
🎉 New Features:
- In Ray RLlib, we have implemented Google’s new DreamerV3, a sample-efficient, model-based, and hyperparameter hassle-free algorithm. It solves a wide variety of challenging reinforcement learning environments out-of-the-box (e.g. the MineRL diamond challenge), for arbitrary observation- and action-spaces as well as dense and sparse reward functions.
💫Enhancements:
- Added support for Gymnasium 0.28.1 (#35698)
- Dreamer V3 tuned examples and support for “XL” Dreamer models (#38461)
- Added an action masking example for RL Modules (#38095)
🔨 Fixes:
- Multiple fixes to DreamerV3 (#37979) (#38259) (#38461) (#38981)
- Fixed TorchBinaryAutoregressiveDistribution.sampled_action_logp() returning probs not log probs. (#37240)
- Fix a bug in Multi-Categorical distribution. It should use logp and not log_p. (#36814)
- Index tensors in slate epsilon greedy properly so SlateQ does not fail on multiple GPUs (#37481)
- Removed excessive deprecation warnings in exploration related files (#37404)
- Fixed missing agent index in policy input dict on environment reset (#37544)
📖Documentation:
- Added docs for DreamerV3 (#37978)
- Added docs on torch.compile usage (#37252)
- Added docs for the Learner API (#37729)
- Improvements to Catalogs and RL Modules docs + Catalogs improvements (#37245)
- Extended our metrics and callbacks example to showcase how to do custom summarisation on custom metrics (#37292)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Actor task cancelation is officially supported.
- The experimental streaming generator is now available. It means the yielded output is sent to the caller before the task is finished and overcomes the limitation from
num_returns="dynamic"generator. The API could be used by specifyingnum_returns="streaming". The API has been used for Ray data and Ray serve to support streaming use cases. See the test script to learn how to use the API. The documentation will be available in a few days.
💫Enhancements:
- Minimal Ray installation
pip install raydoesn't require the Python grpcio dependency anymore. - [Breaking change]
ray job submitnow exits with1if the job fails instead of0. To get the old behavior back, you may useray job submit ... || true. (#38390) - [Breaking change]
get_assigned_resourcesin pg will return the name of the original resources instead of formatted name (#37421) - [Breaking change] Every env var specified via
${ENV_VAR}now can be replaced. Previous versions only supported limited number of env vars. (#36187) - [Java] Update Guava package (#38424)
- [Java] Update Jackson Databind XML Parsing (#38525)
- [Spark] Allow specifying CPU / GPU / Memory resources for head node of Ray cluster on spark (#38056)
🔨 Fixes:
- [Core] Internal gRPC version is upgraded from 1.46.6 to 1.50.2, which fixes the memory leak issue
- [Core] Bind jemalloc to raylet and GCS (#38644) to fix memory fragmentation issue
- [Core] Previously, when a ray is started with
ray start --node-ip-address=..., the driver also had to specifyray.init(_node_ip_address). Now Ray finds the node ip address automatically. (#37644) - [Core] Child processes of workers are cleaned up automatically when a raylet dies (#38439)
- [Core] Fix the issue where there are lots of threads created when using async actor (#37949)
- [Core] Fixed a bug where tracing did not work when an actor/task was defined prior to calling
ray.init: https://github.com/ray-project/ray/issues/26019 - Various other bug fixes
- [Core] loosen the check on release object (#39570)
- [Core][agent] fix the race condition where the worker process terminated during the get_all_workers call #37953
- [Core]Fix PG leakage caused by GCS restart when PG has not been successfully remove after the job died (#35773)
- [Core]Fix internal_kv del api bug in client proxy mode (#37031)
- [Core] Pass logs through if sphinx-doctest is running (#36306)
- [Core][dashboard] Make intentional ray system exit from worker exit non task failing (#38624)
- [Core][dashboard] Add worker pid to task info (#36941)
- [Core] Use 1 thread for all fibers for an actor scheduling queue. (#37949)
- [runtime env] Fix Ray hangs when nonexistent conda environment is specified #28105 (#34956)
Ray Clusters
💫Enhancements:
📖Documentation:
- The KubeRay documentation has been moved to https://docs.ray.io/en/latest/cluster/kubernetes/index.html from its old location at https://ray-project.github.io/kuberay/.
- New guide: GKE Ingress on KubeRay (39073)
- New tutorial: Cloud storage from GKE on KubeRay #38858
- New tutorial: Batch inference tutorial using KubeRay RayJob CR #38857
- New benchmarks for RayService custom resource on KubeRay #38647
- New tutorial: Text summarizer using NLP with RayService #38647
Thanks
Many thanks to all those who contributed to this release!
@simran-2797, @can-anyscale, @akshay-anyscale, @c21, @EdwardCuiPeacock, @rynewang, @volks73, @sven1977, @alexeykudinkin, @mattip, @Rohan138, @larrylian, @DavidYoonsik, @scv119, @alpozcan, @JalinWang, @peterghaddad, @rkooo567, @avnishn, @JoshKarpel, @tekumara, @zcin, @jiwq, @nikosavola, @seokjin1013, @shrekris-anyscale, @ericl, @yuxiaoba, @vymao, @architkulkarni, @rickyyx, @bveeramani, @SongGuyang, @jjyao, @sihanwang41, @kevin85421, @ArturNiederfahrenhorst, @justinvyu, @pleaseupgradegrpcio, @aslonnie, @kukushking, @94929, @jrosti, @MattiasDC, @edoakes, @PRESIDENT810, @cadedaniel, @ddelange, @alanwguo, @noahjax, @matthewdeng, @pcmoritz, @richardliaw, @vitsai, @Michaelvll, @tanmaychimurkar, @smiraldr, @wfangchi, @amogkam, @crypdick, @WeichenXu123, @darthhexx, @angelinalg, @chaowanggg, @GeneDer, @xwjiang2010, @peytondmurray, @z4y1b2, @scottsun94, @chappidim, @jovany-wang, @jaidisido, @krfricke, @woshiyyya, @Shubhamurkade, @ijrsvt, @scottjlee, @kouroshHakha, @allenwang28, @raulchen, @stephanie-wang, @iycheng
2.6.3Ray-2.6.3
The Ray 2.6.3 patch release contains fixes for Ray Serve, and Ray Core streaming generators.
Ray Core
🔨 Fixes:
- [Core][Streaming Generator] Fix memory leak from the end of object stream object #38152 (#38206)
Ray Serve
🔨 Fixes:
- [Serve] Fix
serve runhelp message (#37859) (#38018) - [Serve] Decrement
ray_serve_deployment_queued_querieswhen client disconnects (#37965) (#38020)
RLib
📖 Documentation:
- [RLlib][docs] Learner API Docs (#37729) (#38137)
2.6.2Ray-2.6.2
The Ray 2.6.2 patch release contains a critical fix for ray's logging setup, as well fixes for Ray Serve, Ray Data, and Ray Job.
Ray Core
🔨 Fixes:
- [Core] Pass logs through if sphinx-doctest is running (#36306) (#37879)
- [cluster-launcher] Pick GCP cluster launcher tests and fix (#37797)
Ray Serve
🔨 Fixes:
- [Serve] Apply
request_timeout_sfrom Serve config to the cluster (#37884) (#37903)
Ray Air
🔨 Fixes:
- [air] fix pyarrow lazy import (#37670) (#37883)
2.6.1Ray-2.6.1
The Ray 2.6.1 patch release contains a critical fix for cluster launcher, and compatibility update for Ray Serve protobuf definition with python 3.11, as well doc improvements.
⚠️ Cluster launcher in Ray 2.6.0 fails to start multi-node clusters. Please update to 2.6.1 if you plan to use 2.6.0 cluster launcher.
Ray Core
🔨 Fixes:
- [core][autoscaler] Fix env variable overwrite not able to be used if the command itself uses the env #37675
Ray Serve
🔨 Fixes:
- [serve] Cherry-pick Serve enum to_proto fixes for Python 3.11 #37660
Ray Air
📖Documentation:
- [air][doc] Update docs to reflect head node syncing deprecation #37475
2.6.0Ray-2.6.0
Release Highlights
- Serve: Better streaming support -- In this release, Support for HTTP streaming response and WebSockets is now on by default. Also,
@serve.batch-decorated methods can stream responses. - Train and Tune: Users are now expected to provide cloud storage or NFS path for distributed training or tuning jobs instead of a local path. This means that results written to different worker machines will not be directly synced to the head node. Instead, this will raise an error telling you to switch to one of the recommended alternatives: cloud storage or NFS. Please see https://github.com/ray-project/ray/issues/37177 if you have questions.
- Data: We are introducing a new streaming integration of Ray Data and Ray Train. This allows streaming data ingestion for model training, and enables per-epoch data preprocessing. The DatasetPipeline API is also being deprecated in favor of Dataset with streaming execution.
- RLlib: Public alpha release for the new multi-gpu Learner API that is less complex and more powerful compared to our previous solution (blogpost). This is used under PPO algorithm by default.
Ray Libraries
Ray AIR
🎉 New Features:
- Added support for restoring Results from local trial directories. (#35406)
💫 Enhancements:
- [Train/Tune] Disable Train/Tune syncing to head node (#37142)
- [Train/Tune] Introduce new console output progress reporter for Train and Tune (#35389, #36154, #36072, #35770, #36764, #36765, #36156, #35977)
- [Train/Data] New Train<>Data streaming integration (#35236, #37215, #37383)
🔨 Fixes:
- Pass on KMS-related kwargs for s3fs (#35938)
- Fix infinite recursion in log redirection (#36644)
- Remove temporary checkpoint directories after restore (#37173)
- Removed actors that haven't been started shouldn't be tracked (#36020)
- Fix bug in execution for actor re-use (#36951)
- Cancel
pg.ready()task for pending trials that end up reusing an actor (#35748) - Add case for
Dict[str, np.array]batches inDummyTrainerread bytes calculation (#36484)
📖 Documentation:
- Remove experimental features page, add github issue instead (#36950)
- Fix batch format in
dreamboothexample (#37102) - Fix Checkpoint.from_checkpoint docstring (#35793)
🏗 Architecture refactoring:
- Remove deprecated mlflow and wandb integrations (#36860, #36899)
- Move constants from tune/results.py to air/constants.py (#35404)
- Clean up a few checkpoint related things. (#35321)
Ray Data
🎉 New Features:
- New streaming integration of Ray Data and Ray Train. This allows streaming data ingestion for model training, and enables per-epoch data preprocessing. (#35236)
- Enable execution optimizer by default (#36294, #35648, #35621, #35952)
- Deprecate DatasetPipeline (#35753)
- Add
Dataset.unique()(#36655, #36802) - Add option for parallelizing post-collation data batch operations in
DataIterator.iter_batches()(#36842) (#37260) - Enforce strict mode batch format for
DataIterator.iter_batches()(#36686) - Remove
ray.data.range_arrow()(#35756)
💫 Enhancements:
- Optimize block prefetching (#35568)
- Enable isort for data directory (#35836)
- Skip writing a file for an empty block in
Dataset.write_datasource()(#36134) - Remove shutdown logging from StreamingExecutor (#36408)
- Spread map task stages by default for arg size <50MB (#36290)
- Read->SplitBlocks to ensure requested read parallelism is always met (#36352)
- Support partial execution in
Dataset.schema()with new execution plan optimizer (#36740) - Propagate iter stats for
Dataset.streaming_split()(#36908) - Cache the computed schema to avoid re-executing (#37103)
🔨 Fixes:
- Support sub-progress bars on AllToAllOperators with optimizer enabled (#34997)
- Fix DataContext not propagated properly for
Dataset.streaming_split()operator - Fix edge case in empty bundles with
Dataset.streaming_split()(#36039) - Apply Arrow table indices mapping on HuggingFace Dataset prior to reading into Ray Data (#36141)
- Fix issues with combining use of
Dataset.materialize()andDataset.streaming_split()(#36092) - Fix quadratic slowdown when locally shuffling tensor extension types (#36102)
- Make sure progress bars always finish at 100% (#36679)
- Fix wrong output order of
Dataset.streaming_split()(#36919) - Fix the issue that StreamingExecutor is not shutdown when the iterator is not fully consumed (#36933)
- Calculate stage execution time in StageStatsSummary from
BlockMetadata(#37119)
📖 Documentation:
- Standardize Data API ref (#36432, #36937)
- Docs for working with PyTorch (#36880)
- Split "Consuming data" guide (#36121)
- Revise "Loading data" (#36144)
- Consolidate Data user guides (#36439)
🏗 Architecture refactoring:
- Remove simple blocks representation (#36477)
Ray Train
🎉 New Features:
- LightningTrainer support DeepSpeedStrategy (#36165)
💫 Enhancements:
- Unify Lightning and AIR CheckpointConfig (#36368)
- Add support for custom pipeline class in TransformersPredictor (#36494)
🔨 Fixes:
- Fix Deepspeed device ranks check in Lightning 2.0.5 (#37387)
- Clear stale lazy checkpointing markers on all workers. (#36291)
📖 Documentation:
- Migrate Ray Train
code-blocktotestcode. (#36483)
🏗 Architecture refactoring:
- Deprecate
BatchPredictor(#36947, #37178)
Ray Tune
🔨 Fixes:
- Optuna: Update distributions to use new APIs (#36704)
- BOHB: Fix nested bracket processing (#36568)
- Hyperband: Fix scheduler raising an error for good
PENDINGtrials (#35338) - Fix param space placeholder injection for numpy/pandas objects (#35763)
- Fix result restoration with Ray Client (#35742)
- Fix trial runner/controller whitelist attributes (#35769)
📖 Documentation:
- Remove missing example from Tune "Other examples" (#36691)
🏗 Architecture refactoring:
- Remove
tune/automl(#35557) - Remove hard-deprecated modules from structure refactor (#36984)
- Remove deprecated mlflow and wandb integrations (#36860, #36899)
- Move constants from tune/results.py to air/constants.py (#35404)
- Deprecate redundant syncing related parameters (#36900)
- Deprecate legacy modules in
ray.tune.integration(#35160)
Ray Serve
💫 Enhancements:
- Support for HTTP streaming response and WebSockets is now on by default.
@serve.batch-decorated methods can stream responses.@serve.batchsettings can be reconfigured dynamically.- Ray Serve now uses “power of two random choices” routing. This improves enforcement of
max_concurrent_queriesand tail latencies under load.
🔨 Fixes:
- Fixed the bug previously unable to use a custom module named after “utils”.
- Fixed serve downscaling issue by adding a new draining state to the http proxy. This helps http proxies to not take new requests when there are no replicas on the node and prevents interruption on the ongoing requests when the node is downscaled. Also, enables downscaling to happen when the requests use Ray’s object store which is blocking downscaling of the node.
- Fixed non-atomic shutdown logic. Serve shutdown will be run in the background and not require the client to wait for the shutdown to complete. And won’t be interrupted when the client is force killed.
RLlib
🎉 New Features:
- Public alpha release for the new multi-gpu Learner API that is less complex and more powerful than the old training stack (blogpost). This is used under PPO algorithm by default.
- Added RNN support on the new RLModule API
- Added TF-version of DreamerV3 (link). The comprehensive results will be published soon.
- Added support for torch 2.x compile method in sampling from environment
💫 Enhancements:
- Added an Example on how to do pretraining with BC and then continuing finetuning with PPO (example)
- RLlib deprecation Notices (algorithm/, evaluation/, execution/, models/jax/) (#36826)
- Enable eager_tracing=True by default. (#36556)
🔨 Fixes:
- Fix bug in Multi-Categorical distribution. It should use logp and not log_p. (#36814)
- Fix LSTM + Connector bug: StateBuffer restarting states on every in_eval() call. (#36774)
🏗 Architecture refactoring:
- Multi-GPU Learner API
Ray Core
🎉 New Features:
- [Core][Streaming Generator] Cpp interfaces and implementation (#35291)
- [Core][Streaming Generator] Streaming Generator. Support Core worker APIs + cython generator interface. (#35324)
- [Core][Streaming Generator] Streaming Generator. E2e integration (#35325)
- [Core][Streaming Generator] Support async actor and async generator interface. (#35584)
- [Core][Streaming Generator] Streaming Generator. Support the basic retry/lineage reconstruction (#35768)
- [Core][Streaming Generator] Allow to raise an exception to avoid check failures. (#35766)
- [Core][Streaming Generator] Fix a reference leak when a stream is deleted with out of order writes. (#35591)
- [Core][Streaming Generator] Fix a reference leak when pinning requests are received after refs are consumed. (#35712)
- [Core][Streaming Generator] Handle out of order report when retry (#36069)
- [Core][Streaming Generator] Make it compatible with wait (#36071)
- [Core][Streaming Generator] Remove busy waiting (#36070)
- [Core][Autoscaler v2] add test for node provider (#35593)
- [Core][Autoscaler v2] add unit tests for NodeProviderConfig (#35590)
- [Core][Autoscaler v2] test ray-installer (#35875)
- [Core][Autoscaler v2] fix too many values to unpack (expected 2) bug (#36231)
- [Core][Autoscaler v2] Add idle time information to Autoscaler endpoint. (#36918)
- [Core][Autoscaler v2] Cherry picks change to Autoscaler intereface (#37407)
- [Core][Autoscaler v2] Fix idle time duration when node resource is not updated periodically (#37121) (#37175)
- [Core][Autoscaler v2] Fix pg id serialization with hex rather than binary for cluster state reporting #37132 (#37176)
- [Core][Autoscaler v2] GCS Autoscaler V2: Add instance id to ray [3/x] (#35649)
- [Core][Autoscaler v2] GCS Autoscaler V2: Add node type name to ray (#36714)
- [Core][Autoscaler v2] GCS Autoscaler V2: Add placement group's gang resource requests handling [4/x] (#35970)
- [Core][Autoscaler v2] GCS Autoscaler V2: Handle ReportAutoscalingState (#36768)
- [Core][Autoscaler v2] GCS Autoscaler V2: Interface [1/x] (#35549)
- [Core][Autoscaler v2] GCS Autoscaler V2: Node states and resource requests [2/x] (#35596)
- [Core][Autoscaler v2] GCS Autoscaler V2: Support Autoscaler.sdk.request_resources [5/x] (#35846)
- [Core][Autoscaler v2] Ray status interface [1/x] (#36894)
- [Core][Autoscaler v2] Remove usage of grpcio from Autoscaler SDK (#36967)
- [Core][Autoscaler v2] Update Autoscaler proto for default enum value (#36962)
- [Core][Autoscalerv2] Update Autoscaler.proto / instance_manager.proto dependency (#36116)
💫 Enhancements:
- [Core] Make some grpcio imports lazy (#35705)
- [Core] Only instantiate gcs channels on driver (#36389)
- [Core] Port GcsSubscriber to Cython (#35094)
- [Core] Print out warning every 1s when sched_cls_id is greater than 100 (#35629)
- [Core] Remove attrs dependency (#36270)
- [Core] Remove dataclasses requirement (#36218)
- [Core] Remove grpcio from Ray minimal dashboard (#36636)
- [Core] Remove grpcio import from usage_lib (#36542)
- [Core] remove import thread (#36293)
- [Core] Remove Python grpcio from check_health (#36304)
- [Core] Retrieve the token from GCS server [4/n] (#37003) (#37294)
- [Core] Retry failed redis request (#35249)
- [Core] Sending ReportWorkerFailure after the process died. (#35320)
- [Core] Serialize auto-inits (#36127)
- [Core] Support auto-init ray for get_runtime_context() (#35903)
- [Core] Suppress harmless ObjectRefStreamEndOfStreamError when using asyncio (#37062) (#37200)
- [Core] Unpin grpcio and make Ray run on mac M1 out of the box (#35932)
- [Core] Add a better error message for health checking network failures (#36957) (#37366)
- [Core] Add ClusterID to ClientCallManager [2/n] (#36526)
- [Core] Add ClusterID token to GCS server [3/n] (#36535)
- [Core] Add ClusterID token to GRPC server [1/n] (#36517)
- [Core] Add extra metrics for workers (#36973)
- [Core] Add get_worker_id() to runtime context (#35967)
- [Core] Add logs for Redis leader discovery for observability. (#36108)
- [Core] Add metrics for object size distribution in object store (#37005) (#37110)
- [Core] Add resource idle time to resource report from node. (#36670)
- [Core] Check that temp_dir must be absolute path. (#36431)
- [Core] Clear CPU affinity for worker processes (#36816)
- [Core] Delete object spilling dead code path. (#36286)
- [Core] Don't drop rpc status in favor of reply status (#35530)
- [Core] Feature flag actor task logs with off by default (#35921)
- [Core] Graceful handling of returning bundles when node is removed (#34726)
- [Core] Graceful shutdown in TaskEventBuffer destructor (#35857)
- [Core] Guarantee the ordering of put ActorTaskSpecTable and ActorTable (#35683)
- [Core] Introduce fail_on_unavailable option for hard NodeAffinitySchedulingStrategy (#36718)
- [Core] Make “import” ray work without grpcio (#35737)
- [Core][dashboard] Add task name in task log magic token (#35377)
- [Core][deprecate run_function_on_all_workers 3/n] delete run_function_on_all_workers (#30895)
- [Core][devex] Move ray/util build targets to separate build files (#36598)
- [Core][logging][ipython] Fix log buffering when consecutive runs within ray log dedup window (#37134) (#37174)
- [Core][Logging] Switch worker_setup_hook to worker_process_setup_hook (#37247) (#37463)
- [Core][Metrics] Use Autoscaler-emitted metrics for pending/active/failed nodes. (#35884)
- [Core][state] Record file offsets instead of logging magic token to track task log (#35572)
- [CI] [Minimal install] Check python version in minimal install (#36887)
- [CI] second try of fixing vllm example in CI #36712
- [CI] skip vllm_example #36665
- [CI][Core] Add more visbility into state api stress test (#36465)
- [CI][Doc] Add windows 3.11 wheel support in doc and CI #37297 (#37302)
- [CI][py3.11] Build python wheels on mac os for 3.11 (#36185)
- [CI][python3.11] windows 3.11 wheel build
- [CI][release] Add mac 3.11 wheels to release scripts (#36396)
- [CI] Update state api scale test (#35543)
- [Release Test] Fix dask on ray 1tb sort failure. (#36905)
- [Release Test] Make the cluster name unique for cluster launcher release tests (#35801)
- [Test] Deflakey gcs fault tolerance test in mac os (#36471)
- [Test] Deflakey pubsub integration_test (#36284)
- [Test] Change instance type to r5.8xlarge for dask_on_ray_1tb_sort (#37321) (#37409)
- [Test] Move generators test to large (#35747)
- [Test][Core] Handled the case where memories is empty for dashboard test (#35979)
🔨 Fixes:
- [Core] Fix GCS FD usage increase regression. (#35624)
- [Core] Fix issues with worker churn in WorkerPool (#36766)
- [Core] Fix proctitle for generator tasks (#36928)
- [Core] Fix ray.timeline() (#36676)
- [Core] Fix raylet memory leak in the wrong setup. (#35647)
- [Core] Fix test_no_worker_child_process_leaks (#35840)
- [Core] Fix the GCS crash when connecting to a redis cluster with TLS (#36916)
- [Core] Fix the race condition where grpc requests are handled while c… (#37301)
- [Core] Fix the recursion error when async actor has lots of deserialization. (#35494)
- [Core] Fix the segfault from Opencensus upon shutdown (#36906) (#37311)
- [Core] Fix the unnecessary logs (#36931) (#37313)
- [Core] Add a special head node resource and use it to pin the serve controller to the head node (#35929)
- [Core] Add debug log for serialized object size (#35992)
- [Core] Cache schema and test (#37103) (#37201)
- [Core] Fix 'ray stack' on macOS (#36100)
- [Core] Fix a wrong metrics setup link from the doc. (#37312) (#37367)
- [Core] Fix lint (#35844)(#36739)
- [Core] Fix literalinclude path (#35660)
- [Core] Fix microbenchmark (#35823)
- [Core] Fix single_client_wait_1k perf regression (#35614)
- [Core] Get rid of shared_ptr for GcsNodeManager (#36738)
- [Core] Remove extra step in M1 installation instructions (#36029)
- [Core] Remove unnecessary AsyncGetResources in NodeManager::NodeAdded (#36412)
- [Core] Unskip test_Autoscaler_shutdown_node_http_everynode (#36420)
- [Core] Unskip test_get_release_wheel_url for mac (#36430)
📖 Documentation:
- [Doc] Clarify that session can also mean a ray cluster (#36422)
- [Doc] Fix doc build on M1 (#35689)
- [Doc] Fix documentation failure due to typing_extensions (#36732)
- [Doc] Make doc code snippet testable [3/n] (#35407)
- [Doc] Make doc code snippet testable [4/n] (#35506)
- [Doc] Make doc code snippet testable [5/n] (#35562)
- [Doc] Make doc code snippet testable [7/n] (#36960)
- [Doc] Make doc code snippet testable [8/n] (#36963)
- [Doc] Some instructions on how to size the head node (#36429)
- [Doc] Fix doc for runtime-env-auth (#36421)
- [Doc][dashboard][state] Promote state api and dashboard usage in Core user guide. (#35760)
- [Doc][python3.11] Update mac os wheels built link (#36379)
- [Doc] [typo] Rename acecelerators.md to accelerators.md (#36500)
Many thanks to all those who contributed to this release!
@ericl, @ArturNiederfahrenhorst, @sihanwang41, @scv119, @aslonnie, @bluecoconut, @alanwguo, @krfricke, @frazierprime, @vitsai, @amogkam, @GeneDer, @jovany-wang, @gjoliver, @simran-2797, @rkooo567, @shrekris-anyscale, @kevin85421, @angelinalg, @maxpumperla, @kouroshHakha, @Yard1, @chaowanggg, @justinvyu, @fantow, @Catch-Bull, @cadedaniel, @ckw017, @hora-anyscale, @rickyyx, @scottsun94, @XiaodongLv, @SongGuyang, @RocketRider, @stephanie-wang, @inpefess, @peytondmurray, @sven1977, @matthewdeng, @ijrsvt, @MattiasDC, @richardliaw, @bveeramani, @rynewang, @woshiyyya, @can-anyscale, @omus, @eax-anyscale, @raulchen, @larrylian, @Deegue, @Rohan138, @jjyao, @iycheng, @akshay-anyscale, @edoakes, @zcin, @dmatrix, @bryant1410, @WanNJ, @architkulkarni, @scottjlee, @JungeAlexander, @avnishn, @harisankar95, @pcmoritz, @wuisawesome, @mattip
2.5.1Ray-2.5.1
The Ray 2.5.1 patch release adds wheels for MacOS for Python 3.11. It also contains fixes for multiple components, along with fixes for our documentation.
Ray Train
🔨 Fixes:
- Don't error on eventual success when running with auto-recovery (#36266)
Ray Core
🎉 New Features:
- Build Python wheels on Mac OS for Python 3.11 (#36373)
🔨 Fixes:
- [Autoscaler] Fix a bug that can cause undefined behavior when clusters attempt to scale up aggressively. (#36241)
- Fix mypy error: Module "ray" does not explicitly export attribute "remote" (#36356)
2.5.0Ray-2.5.0
The Ray 2.5 release features focus on a number of enhancements and improvements across the Ray ecosystem, including:
- Training LLMs with Ray Train: New support for checkpointing distributed models, and Pytorch Lightning FSDP to enable training large models on Ray Train’s LightningTrainer
- LLM applications with Ray Serve & Core: New support for streaming responses and model multiplexing
- Improvements to Ray Data: In 2.5, strict mode is enabled by default. This means that schemas are required for all Datasets, and standalone Python objects are no longer supported. Also, the default batch format is fixed to NumPy, giving better performance for batch inference.
- RLlib enhancements: New support for multi-gpu training, along with ray-project/rllib-contrib to contain the community contributed algorithms
- Core enhancements: Enable new feature of lightweight resource broadcasting to improve reliability and scalability. Add many enhancements for Core reliability, logging, scheduler, and worker process.
Ray Libraries
Ray AIR
💫Enhancements:
- Experiment restore stress tests (#33706)
- Context-aware output engine
- Add parameter columns to status table (#35388)
- Context-aware output engine: Add docs, experimental feature docs, prepare default on (#35129)
- Fix trial status at end (more info + cut off) (#35128)
- Improve leaked mentions of Tune concepts (#35003)
- Improve passed time display (#34951)
- Use flat metrics in results report, use Trainable._progress_metrics (#35035)
- Print experiment information at experiment start (#34952)
- Print single trial config + results as table (#34788)
- Print out worker ip for distributed train workers. (#33807)
- Minor fix to print configuration on start. (#34575)
- Check
air_verbosityagainst None. (#33871) - Better wording for empty config. (#33811)
- Flatten config and metrics before passing to mlflow (#35074)
- Remote_storage: Prefer fsspec filesystems over native pyarrow (#34663)
- Use filesystem wrapper to exclude files from upload (#34102)
- GCE test variants for air_benchmark and air_examples (#34466)
- New storage path configuration
- Add
RunConfig.storage_pathto replaceSyncConfig.upload_dirandRunConfig.local_dir. (#33463) - Use Ray storage URI as default storage path, if configured [no_early_kickoff] (#34470)
- Move to new storage_path API in tests and examples (#34263)
- Add
🔨 Fixes:
- Store unflattened metrics in _TrackedCheckpoint (#35658) (#35706)
- Fix
test_tune_torch_get_device_gpurace condition (#35004) - Deflake test_e2e_train_flow.py (#34308)
- Pin deepspeed version for now to unblock ci. (#34406)
- Fix AIR benchmark configuration link failure. (#34597)
- Fix unused config building function in lightning MNIST example.
📖Documentation:
- Change doc occurrences of ray.data.Dataset to ray.data.Datastream (#34520)
- DreamBooth example: Fix code for batch size > 1 (#34398)
- Synced tabs in AIR getting started (#35170)
- New Ray AIR link for try it out (#34924)
- Correctly Render the Enumerate Numbers in
convert_torch_code_to_ray_air(#35224)
Ray Data Processing
🎉 New Features:
- Implement Strict Mode and enable it by default.
- Add column API to Dataset (#35241)
- Configure progress bars via DataContext (#34638)
- Support using concurrent actors for ActorPool (#34253)
- Add take_batch API for collecting data in the same format as iter_batches and map_batches (#34217)
💫Enhancements:
- Improve map batches error message for strict mode migration (#35368)
- Improve docstring and warning message for from_huggingface (#35206)
- Improve notebook widget display (#34359)
- Implement some operator fusion logic for the new backend (#35178 #34847)
- Use wait based prefetcher by default (#34871)
- Implement limit physical operator (#34705 #34844)
- Require compute spec to be explicitly spelled out #34610
- Log a warning if the batch size is misconfigured in a way that would grossly reduce parallelism for actor pool. (#34594)
- Add alias parameters to the aggregate function, and add quantile fn (#34358)
- Improve repr for Arrow Table and pandas types (#34286 #34502)
- Defer first block computation when reading a Datasource with schema information in metadata (#34251)
- Improve handling of KeyboardInterrupt (#34441)
- Validate aggregation key in Aggregate LogicalOperator (#34292)
- Add usage tag for which block formats are used (#34384)
- Validate sort key in Sort LogicalOperator (#34282)
- Combine_chunks before chunking pyarrow.Table block into batches (#34352)
- Use read stage name for naming Data-read tasks on Ray Dashboard (#34341)
- Update path expansion warning (#34221)
- Improve state initialization for ActorPoolMapOperator (#34037)
🔨 Fixes:
- Fix ipython representation (#35414)
- Fix bugs in handling of nested ndarrays (and other complex object types) (#35359)
- Capture the context when the dataset is first created (#35239)
- Cooperatively exit producer threads for iter_batches (#34819)
- Autoshutdown executor threads when deleted (#34811)
- Fix backpressure when reading directly from input datasource (#34809)
- Fix backpressure handling of queued actor pool tasks (#34254)
- Fix row count after applying filter (#34372)
- Remove unnecessary setting of global logging level to INFO when using Ray Data (#34347)
- Make sure the tf and tensor iteration work in dataset pipeline (#34248)
- Fix '_unwrap_protocol' for Windows systems (#31296)
📖Documentation:
- Add batch inference object detection example (#35143)
- Refine batch inference doc (#35041)
Ray Train
🎉 New Features:
- Experimental support for distributed checkpointing (#34709)
💫Enhancements:
- LightningTrainer: Enable prog bar (#35350)
- LightningTrainer enable checkpoint full dict with FSDP strategy (#34967)
- Support FSDP Strategy for LightningTrainer (#34148)
🔨 Fixes:
- Fix HuggingFace -> Transformers wrapping logic (#35276, #35284)
- LightningTrainer always resumes from the latest AIR checkpoint during restoration. (#35617) (#35791)
- Fix lightning trainer devices setting (#34419)
- TorchCheckpoint: Specifying pickle_protocol in
torch.save()(#35615) (#35790)
📖Documentation:
- Improve visibility of Trainer restore and stateful callback restoration (#34350)
- Fix rendering of diff code-blocks (#34355)
- LightningTrainer Dolly V2 FSDP Fine-tuning Example (#34990)
- Update LightningTrainer MNIST example. (#34867)
- LightningTrainer Advanced Example (#34082, #34429)
🏗 Architecture refactoring:
- Restructure
ray.trainHuggingFace modules (#35270) (#35488) - rename _base_dataset to _base_datastream (#34423)
Ray Tune
🎉 New Features:
- Ray Tune's new execution path is now enabled per default (#34840, #34833)
💫Enhancements:
- Make `Tuner.restore(trainable=...) a required argument (#34982)
- Enable
tune.ExperimentAnalysisto pull experiment checkpoint files from the cloud if needed (#34461) - Add support for nested hyperparams in PB2 (#31502)
- Release test for durable multifile checkpoints (#34860)
- GCE variants for remaining Tune tests (#34572)
- Add tune frequent pausing release test. (#34501)
- Add PyArrow to ray[tune] dependencies (#34397)
- Fix new execution backend for BOHB (#34828)
- Add tune frequent pausing release test. (#34501)
🔨 Fixes:
- Set config on trial restore (#35000)
- Fix
test_tune_torch_get_device_gpurace condition (#35004) - Fix a typo in
tune/execution/checkpoint_managerstate serialization. (#34368) - Fix tune_scalability_network_overhead by adding
--smoke-test. (#34167) - Fix lightning_gpu_tune_.* release test (#35193)
📖Documentation:
- Fix Tune tutorial (#34660)
- Fix typo in Tune restore guide (#34247)
🏗 Architecture refactoring:
- Use Ray-provided
tabulatepackage (#34789)
Ray Serve
🎉 New Features:
- Add support for json logging format.(#35118)
- Add experimental support for model multiplexing.(#35399, #35326)
- Added experimental support for HTTP StreamingResponses. (#35720)
- Add support for application builders & arguments (#34584)
💫Enhancements:
- Add more bucket size for histogram metrics. (#35242).
- Add route information into the custom metrics. (#35246)
- Add HTTPProxy details to Serve Dashboard UI (#35159)
- Add status_code to http qps & latency (#35134)
- Stream Serve logs across different drivers (#35070)
- Add health checking for http proxy actors (#34944)
- Better surfacing of errors in serve status (#34773)
- Enable TLS on gRPCIngress if RAY_USE_TLS is on (#34403)
- Wait until replicas have finished recovering (with timeout) to broadcast
LongPollupdates (#34675) - Replace
ClassNodeandFunctionNodewithApplicationin top-level Serve APIs (#34627)
🔨 Fixes:
- Set
app_msgto empty string by default (#35646) - Fix dead replica counts in the stats. (#34761)
- Add default app name (#34260)
- gRPC Deployment schema check & minor improvements (#34210)
📖Documentation:
- Clean up API reference and various docstrings (#34711)
- Clean up
RayServeHandleandRayServeSyncHandledocstrings & typing (#34714)
RLlib
🎉 New Features:
- Migrating approximately ~25 of the 30 algorithms from RLlib into rllib_contrib. You can review the REP here. This release we have covered A3C and MAML.
- The APPO / IMPALA and PPO are all moved to the new Learner and RLModule stack.
- The RLModule now supports Checkpointing.(#34717 #34760)
💫Enhancements:
- Introduce experimental larger than GPU train batch size feature for torch (#34189)
- Change occurences of "_observation_space_in_preferred_format" to "_obs_space_in_preferred_format" (#33907)
- Add a flag to allow disabling initialize_loss_from_dummy_batch logit. (#34208)
- Remove check specs from default Model forward code path to improve performance (#34877)
- Remove some specs from encoders to smoothen dev experience (#34911)
🔨 Fixes:
- Fix MultiCallbacks class: To be used only with utility function that returns a class to use in the config. (#33863)
- Fix test backward compatibility test for RL Modules (#33857)
- Don't serialize config in Policy states (unless needed for msgpack-type checkpoints). (#33865)
- DM control suite wrapper fix: dtype of obs needs to be pinned to float32. (#33876)
- In the Json_writer convert all non string keys to keys (#33896)
- Fixed a bug with kl divergence calculation of torch.Dirichlet distribution within RLlib (#34209)
- Change broken link in parameter_noise.py (#34231)
- Fixed bug in restoring a gpu trained algorithm (#35024)
- Fix IMPALA/APPO when using multi GPU setup and Multi-Agent Env (#35120)
📖Documentation:
- Add examples and docs for Catalog (#33898)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Support both sync and async actor generator interface. (#35584 #35708 #35324 #35656 #35803 #35794 #35707)
💫Enhancements:
- [Scheduler] Introduce spill_on_unavailable option for soft NodeAffinitySchedulingStrategy (#34224)
- [Data] Use wait based prefetcher by default (#34871)
- [Reliability] During GCS restarts, grpc based resource broadcaster should only add ALIVE nodes during initialization (#35349)
- [Reliability] Guarantee the ordering of put ActorTaskSpecTable and ActorTable (#35683) (#35718)
- [Reliability] Graceful handling of returning bundles when node is removed (#34726) (#35542)
- [Reliability] Task backend - marking tasks failed on worker death (#33818)
- [Reliability] Task backend - Add worker dead info to failed tasks when job exits. (#34166)
- [Logging] Make ray.get(timeout=0) to throw timeout error (#35126)
- [Logging] Provide good error message if the factional resource precision is beyond 0.0001 (#34590)
- [Logging] Add debug logs to show UpdateResourceUsage rpc source (#35062)
- [Logging] Add actor_id as an attribute of RayActorError when the actor constructor fails (#34958)
- [Logging] Worker startup hook (#34738)
- [Worker] Partially addresses ray child process leaks by killing all child processes in the CoreWorker shutdown sequence. (#33976)
- [Worker] Change worker niceness in job submission environment (#34727)
- Shorten the membership checking time to 5 seconds. (#34769)
- [Syncer] Remove spammy logs. (#34654)
- [Syncer] Delete disconnected node view in ray syncer when connection is broken. (#35312)
- [Syncer] Turn on ray syncer again. (#35116)
- [Syncer] Start ray syncer reconnection after a delay (#35115)
- Serialize requests in the redis store client. (#35123)
- Reduce self alive check from 60s to 5s. (#34992)
- Add object owner and copy metrics to node stats (#35119)
- Start the synchronization connection after receiving all nodes info. (#34645)
- Improve the workflow finding Redis leader. (#34108)
- Make execute_after accept chrono (#35099)
- Lazy import autoscaler + don't import opentelemetry unless setup hook (#33964)
🔨 Fixes:
- [pubsub] Handle failures when publish fails. (#33115)
- Convert gcs port read from env variable from str to int (#34482)
- Fix download_wheels.sh wheel urls (#34616)
- Fix ray start command output (#34081)
- Fetch_local once for each object ref (#34884)
- Combine_chunks before chunking pyarrow.Table block into batches (#34352)
- Replace deprecated usage of get_runtime_context().node_id (#34874)
- Fix std::move without std namespace (#34149)
- Fix the recursion error when an async actor has lots of deserialization. (#35494) (#35532)
- Fix async actor shutdown issue when exit_actor is used (#32407)
- [Event] Fix incorrect event timestamp (#34402)
- [Metrics] Fix shared memory is not displayed properly (#34301)
- Fix GCS FD usage increase regression. (#35624) (#35738)
- Fix raylet memory leak in the wrong setup. (#35647) (#35673)
- Retry failed redis request (#35249) (#35481)
- Add more messages when accessing a dead actor. (#34697)
- Fix the placement group stress test regression. (#34192)
- Mark Raylet unhealthy if GCS can't recognize it. (#34087)
- Remove multiple core workers in one process 2/n (#34942)
- Remove python 3.6 support (#34373 #34416)
📖Documentation:
- Make doc code snippet testable (#35274 #35057)
- Revamp ray core api reference [1/n] (#34428)
- Add Ray core fault tolerance guide for GCS and node (#33446)
- Ray Debugging Doc Part 1 (OOM) (#34309)
- Rewrite the placement group documentation (#33518)
Ray Clusters
💫Enhancements:
- [Docker] [runtime env] Bump boto3 version from 1.4.8 to 1.26.82, add pyOpenSSL and cryptography (#33273)
- [Jobs] Fix race condition in supervisor actor creation and add timeout for pending jobs (#34223)
- [Release test] [Cluster launcher] Add gcp minimal and full cluster launcher release test (#34878)
- [Release test] [Cluster launcher] Add release test for aws
example-full.yaml(#34487)
📖Documentation:
- [runtime env] Clarify conditions for local
pipandcondarequirements files (#34071) - [KubeRay] Provide GKE instructions in KubeRay example (#33339)
- [KubeRay] Update KubeRay doc for release v0.5.0 (#34178)
Dashboard
💫Enhancements:
- Feature flag task logs recording (#34056)
- Fix log proxy not loading non test/plain files. (#33870)
- [no_early_kickoff] Make dashboard address connectable from remote nodes when not set to 127.0.0.1 (localhost) (#35027)
- [state][job] Supporting job listing(getting) and logs from state API (#35124)
- [state][ci] Fix stress_test_state_api_scale (#35332)
- [state][dashboard][log] Fix subdirectory log getting (#35283)
- [state] Push down filtering to GCS for listing/getting task from state api (#35109)(#34433)
- [state] Task log - Improve log tailing from log_client and support tailing from offsets [2/4] (#28188)
- [state] Use
--errflag to query stderr logs from worker/actors instead of--suffix=err(#34300) - [state][no_early_kickoff] Make state api return results that are strongly typed (#34297)
- [state] Efficient get/list actors with filters on some high-cardinality fields (#34348)
- [state] Fix list nodes test in test_state_api.py (#34349)
- [state] Add head node flag
is_head_nodeto state API and GcsNodeInfo (#34299) - Make actor tasks' name default to <actor_repr>.<task_name> (#35371)
- Task backend GC policy - worker update [1/3] (#34896)
- [state] Support task logs from state API (#35101)
Known Issues
- A bug in the Autoscaler can cause undefined behaviour when clusters attempt to scale up aggressively. This is fixed in following releases, as well as post-release on the 2.5.0 branch (#36482).
Many thanks to all those who contributed to this release!
@vitsai, @XiaodongLv, @justinvyu, @Dan-Yeh, @dependabot[bot], @alanwguo, @grimreaper, @yiwei00000, @pomcho555, @ArturNiederfahrenhorst, @maxpumperla, @jjyao, @ijrsvt, @sven1977, @Yard1, @pcmoritz, @c21, @architkulkarni, @jbedorf, @amogkam, @ericl, @jiafuzha, @clarng, @shrekris-anyscale, @matthewdeng, @gjoliver, @jcoffi, @edoakes, @ethanabrooks, @iycheng, @Rohan138, @angelinalg, @Linniem, @aslonnie, @zcin, @wuisawesome, @Catch-Bull, @woshiyyya, @avnishn, @jjyyxx, @jianoaix, @bveeramani, @sihanwang41, @scottjlee, @YQ-Wang, @mattip, @can-anyscale, @xwjiang2010, @fedassembly, @joncarter1, @robin-anyscale, @rkooo567, @DACUS1995, @simran-2797, @ProjectsByJackHe, @zen-xu, @ashahab, @larrylian, @kouroshHakha, @raulchen, @sofianhnaide, @scv119, @nathan-az, @kevin85421, @rickyyx, @Sahar-E, @krfricke, @chaowanggg, @peytondmurray, @cadedaniel
2.4.0Ray-2.4.0
Ray 2.4 - Generative AI and LLM support
Over the last few months, we have seen a flurry of innovative activity around generative AI models and large language models (LLM). To continue our effort to ensure Ray provides a pivotal compute substrate for generative AI workloads and addresses the challenges (as explained in our blog series), we have invested engineering efforts in this release to ensure that these open source LLM models and workloads are accessible to the open source community and performant with Ray.
This release includes new examples for training, batch inference, and serving with your own LLM.
Generative AI and LLM Examples
- GPT-J (LLM) fine-tuning with Microsoft DeepSpeed and Ray Train
- GPT-J-6B Batch Prediction with Ray Data
- GPT-J-6B Serving with Ray Serve
- Stable Diffusion (Dreambooth) fine-tuning with Ray Train
- Stable Diffusion Batch Prediction with Ray Data
- Stable Diffusion Serving with Ray Serve
Ray Train enhancements
- We're introducing the LightningTrainer, allowing you to scale your PyTorch Lightning on Ray. As part of our continued effort for seamless integration and ease of use, we have enhanced and replaced our existing ray_lightning integration, which was widely adopted, with the latest changes to Pytorch Lighting.
- we’re releasing an AccelerateTrainer, allowing you to run HuggingFace Accelerate and DeepSpeed on Ray with minimal code changes. This Trainer integrates with the rest of the Ray ecosystem—including the ability to run distributed hyperparameter tuning with each trial being a distributed training job.
Ray Data highlights
- Streaming execution is enabled by default, providing users with a more efficient data processing pipeline that can handle larger datasets and minimize memory consumption. Check out the docs here: (doc)
- Note that this means data output may no longer preserve the original order in more cases. To retain the original ordering properties of Ray Data prior to 2.4, you can set the config
ray.data.DatasetContext.get_current().execution_options.preserve_order = True.
- Note that this means data output may no longer preserve the original order in more cases. To retain the original ordering properties of Ray Data prior to 2.4, you can set the config
- We've implemented asynchronous batch prefetching of Dataset.iter_batches (doc), improving performance by fetching data in parallel while the main thread continues processing, thus reducing waiting time.
- Support reading SQL databases (doc), enabling users to seamlessly integrate relational databases into their Ray Data workflows.
- Introduced support for reading WebDataset (doc), a common format for high-performance deep learning training jobs.
Ray Serve highlights
- Multi-app CLI & REST API support is now available, allowing users to manage multiple applications with different configurations within a single Ray Serve deployment. This simplifies deployment and scaling processes for users with multiple applications. (doc)
- Enhanced logging and metrics for Serve applications, giving users better visibility into their application's performance and facilitating easier debugging and monitoring. (doc)
Other enhancements
- Ray 2.4 is the last version that supports Python 3.6
- We've also added a brand new landing page
Ray Libraries
Ray AIR
💫Enhancements:
- Add nightly test for alpa opt 30b inference. (#33419)
- Add a sanity checking release test for Alpa and ray nightly. (#32995)
- Add
TorchDetectionPredictor(#32199) - Add
artifact_location,run_nameto MLFlow integration (#33641) - Add
*pathproperties toResultandResultGrid(#33410) - Make
Preprocessor.transformlazy by default (#32872) - Make
BatchPredictorlazy (#32510, #32796) - Use a configurable ray temp directory for the
TempFileLockutil (#32862) - Add
collate_fntoiter_torch_batches(#32412) - Allow users to pass
Callable[[torch.Tensor], torch.Tensor]toTorchVisionTransform(#32383) - Automatically move
DatasetIteratortorch tensors to correct device (#31753)
🔨 Fixes:
- Fix
use_gpuwithHuggingFacePredictor(#32333) - Make Keras
CallbackraiseDeprecationWarning(#33775) - Pin framework to tf in AIR rl offline trainer example (#33750)
- Fix test_tracked_actor (#33075)
- Label
Checkpoint.from_checkpointas developer API (#33094) - Don't make lock files when moving dirs (#32924)
- avoid inconsistency of create filesystem from uri for hdfs case (#30611)
- Fix
DatasetIteratorbackwards compability (#32526) - Fix
CountVectorizerfailing with big data (#32351) - Fix NoneType error loading TorchCheckpoint through
from_uri. (#32386) - Fix
dtypetype hint inDLPredictormethods (#32198) - Allow None in
set_preprocessor(#33088)
📖Documentation:
- Add dreambooth example + release test (#33025)
- GPT-J fine tuning with DeepSpeed example (#33090)
- GPT-J Serving Example (#33114)
- Add object detection example (#31553)
- Add computer vision guide (#32885)
- Add Pytorch ResNet batch prediction example (#32470)
- Large model inference examples (#32874)
- Add data ingestion clarification for AIR converting existing pytorch code example (#32058)
- Add
BatchPredictor.from_checkpointto docs (#32877) - Fix wording of Many model training guidance (#32319)
- Add required dependencies for batch prediction notebook (#33897)
- Added link to preprocessors in Ray AIR Key Concepts page (#33526)
- Rewording in analyze_tuning_results.ipynb (#32671)
🏗 Architecture refactoring:
- Deprecations for 2.4 (#33765)
- Deprecate
TensorflowCheckpoint.get_modelmodel_definitionparameter (#33776)
Ray Data Processing
🎉 New Features:
- Enable streaming execution by default (#32493)
- Support asynchronous batch prefetching of Dataset.iter_batches() (#33620)
- Introduce Dataset.materialize() API (#34184)
- Add Dataset.streaming_split() API (#32991)
- Support reading SQL databases with ray.data.read_sql() (#33353)
- Support reading WebDataset with ray.data.read_webdataset() (#33336)
- Allow generator UDFs for Dataset.map_batches() and flat_map() (#32767)
- Add
collate_fnto Dataset.iter_torch_batches() (#32412) - Add support for
ignore_missing_pathsin reading Datasource (#33126)
💫Enhancements:
- Deprecate Dataset.lazy() (#33812)
- Deprecate Dataset.dataset_format() (#33437)
- Deprecate Dataset.fully_executed() and Dataset.is_fully_executed() (#33342)
- Deprecate Datasource.do_write() (#32015)
- Add iter_rows to DatasetIterator (#33180)
- Support optional
tf_schemaparameter in read_tfrecords() and write_tfrecords() (#32857) - Add Dataset.iter_batches(batch_format=None) support, which will yield batches in the current batch format with zero copies (#33562)
- Add meta_provider parameter into read_images (#33791)
- Add missing passthrough args to Dataset.read_images() (#32942)
- Allow read_binary_files(output_arrow_format=True) to return Arrow format (#33780)
- Improve performance of DefaultFileMetaProvider (#33117)
- Improved naming of Ray Data map tasks for dashboard (#32585)
- Support different numbers of blocks/rows per block in Dataset.zip() (#32795)
- No preserve order by default for streaming execution (#32300)
- Make write an operator as part of the execution plan (#32015)
- Optimize metadata creation for RangeDatasource (#33712)
- Add telemetry for Ray Data (#32896)
- Make BatchPredictor lazy (#32510)
- Make Preprocessor.transform lazy by default (#32872)
- Allow users to pass Callable[[torch.Tensor], torch.Tensor] to
TorchVisionTransform(#32383) - Automatically move DatasetIterator torch tensors to correct device (#31753)
- Promote _create_strict_ragged_ndarray to public API (#31975)
- Add support for string tensor columns in
ArrowTensorArrayandArrowVariableShapedTensorArray(#32143)
🔨 Fixes:
- Data layer performance/bug fixes and tweaks (#32744)
- Clean up RAY_DATASET_FORCE_LOCAL_METADATA flag (#32483)
- Fix Datasource write_results type (#33936)
- Add objects GC in dataset iterator (#34030, #34141)
- Fix to_pandas failure on datasets returned by from_spark() (#32968)
- Fix zip stage to preserve order when executing the other side (#33649)
- Fix _get_read_tasks to use NodeAffinitySchedulingStrategy (#33212)
- Guard against using ipywidgets in google colab (#32841)
- Fix from_items parallelism to create the expected number of blocks (#32821)
- Always preserve order for the BulkExecutor (#32437)
📖Documentation:
- Fix Ragged Tensor Documentation (#33029)
Ray Train
🎉 New Features:
- The LightningTrainer has been revamped
- [Doc] LightningTrainer end-2-end starter example [no_early_kickoff] (#33494)
- Lightning Trainer Release tests + docstring sample test (#33323)
- Support metric logging and checkpointing for LightningTrainer (#33183)
- Add LightningTrainer to support Pytorch Lightning DDP training <Part 1>. (#33161)
- Add LightningPredictor to support batch prediction (#33196)
- Support metric logging and checkpointing for LightningTrainer (#33183)
- Implement
AccelerateTrainer(#33269) - Add
Trainer.restoreAPI for train experiment-level fault tolerance (#31920) - Ray Train telemetry to collect the AIR trainer type (#33277)
💫Enhancements:
- Recommend
Trainer.restoreon errors raised bytrainer.fit()(#33610) - Improve lazy checkpointing (#32233)
- Sort
CUDA_VISIBLE_DEVICES(#33159) - Support returning multiple devices in
train.torch.get_device()(#32893) - Set
torch.distributedenv vars (#32450) - Use the actual task name being executed for _RayTrainWorker__execute. (#33065)
🔨 Fixes:
- Fix the import path for LightningTrainer to be compatible with Pytorch Lightning 2.0. (#34033)
- Pin framework to tf in AIR rl offline trainer example (#33750)
- Fix HF Trainer with
DatasetIterator, handledevice_map(#32955) - Fix failing
test_torch_trainer(#32963) - Deflake
test_gpuby sorting the devices (#33002) - (Bandaid) Mitigate OOMs on checkpointing (#33089)
- Empty cache on the correct device (#33603)
📖Documentation:
- [Doc] Improve AIR Lightning APIs and docstrings (#33895)
- Update quickstart example to use dataloader (#33050)
- add intro content from training module (#32088)
- Add back important Ray Train integration methods (for Torch/TF) (#32551)
- Restructure API reference (#32360)
- Add Pytorch ResNet finetuning starter example (#32936)
🏗 Architecture refactoring:
- Hard deprecate Backend encode_data/decode_data (#33784)
Ray Tune
🎉 New Features:
- Add new experimental execution path
- Add TuneController (#33499)
- Refactor TrialRunner to separate out executor calls (#33448)
- Move trainable_kwargs generation to trial.py (#33249)
- Move experiment state/checkpoint/resume management into a separate file (#32457)
- Cache ready futures in RayTrialExecutor (#32093)
- Use generic _ObjectCache for actor reuse (#33045)
- Event manager part 2: Implementation (#31811)
- Add new experimental output format
- Add new console output code path (behind feature flag) (#33609)
- Fix new output path with new execution path (#33880)
- Fix
OrderedDictimport. (#33709) - Fix Ray Tune output v2 failures (#33697)
- Update wording to "Logical Resource Usage". (#33312)
- clean up tune/train result output (#32234)
- Add unit test to
experimental/output.py(#33767)
- Ray Tune Telemetry to collect entrypoint and searchers/scheduler usage (#33740)
💫Enhancements:
- Experiment restore/resume
- Allow re-specifying param space in
Tuner.restore(#32317) - Replace reference values in a config dict with placeholders (#31927)
- Add
Tuner.can_restore(path)utility for checking if an experiment exists at a path/uri (#32003) - Update
Tuner.restoreusage to prepare fortrainablebecoming a required arg (#32912) - Fix resuming from cloud storage (+ test) (#32504)
- Allow re-specifying param space in
- Syncing to cloud storage
- Sync trial artifacts to cloud (#32334)
- Fix ensure directory in bucket path sync (#33692)
- Sync less often and only wait at end of experiment (#32155)
- Unrevert "Add more comprehensive support for remote_checkpoint_dir w/ url params (#32479)" (#32576)
- Use
on_experiment_endhook for the final wait ofSyncCallbacksync processes (#33390) - Cleanup path-related properties in experiment classes (#33370)
- Update trainable
remote_checkpoint_dirupon actor reuse (#32420) - Add
use_threads=Falsein pyarrow syncing (#32256)
- Better support for multi-tenancy
- Prefix global object registry with job ID to avoid conflicts in multi tenancy (#33095)
- Add test for multi-tenancy workaround and documentation to FAQ (#32560)
- release test for nested air (tune) oom (#31768)
- Fault tolerance improvements
- Add Tune worker fault tolerance test (#33473)
- Improve logging, unify trial retry logic, improve trial restore retry test. (#32242)
- Integrations
- [wandb] Wait for
WandbLoggerCallbackactors to finish uploading to wandb on experiment end (#33174) - [air] Aim logger (#32041)
- [wandb] Wait for
🔨 Fixes:
- ExperimentAnalysis: Ignore empty checkpoints but don't fail (#33770)
- TrialRunner checkpointing shouldn't fail if
ray.data.Datasetw/o lineage captured in trial config (#33565) - Evict object cache for actor re-use when search ended (#33593)
- Raise warning (not an exception) if metadata file not found in checkpoint (#33123)
- remove deep copy in
trial.__getstate__(#32624) - Fix "ValueError: I/O operation on closed file" (#31269)
📖Documentation:
- Restructure API reference (#32311)
- Don't recommend
tune.runAPI in logging messages when using theTuner(#33642) - Split "Tune stopping and resuming" into two user guides (#33495)
- Remove Ray Client references from Tune and Train docs/examples (#32299)
- Add tune checkpoint user guide. (#33145)
- improve
log_to_filedoc. (#32128) - Fix broken Tune links to overview and intergration (#32442)
🏗 Architecture refactoring:
- Deprecation cycle
- Hard deprecate Tune MLflow/W&B mixin/callbacks (#33782)
- Fix two tests after structure refactor deprecation (#32517)
- Remove deprecated Resources class (#32490)
- Structure refactor: Raise on import of old modules (#32486)
Ray Serve
🎉 New Features:
- Multi-app supports CLI and REST API.(#33347, #33490, #33300, #33216, #33013)
💫Enhancements:
- Add telemetry for lightweight config updates (#34039)
- Deployment & replica info automatically exist in user customized metrics.(33451)
- Add route and request id in the ray serve log entry.(33365)
- Add telemetry for common Serve usage patterns (#33505)
- Add
log_to_stderroption to logger and improve internal logging (#33597) - Make http retries tunable (#32532)
- Extend configurable HTTP options (#33160)
- Prevent mixing single/multi-app config deployment (#33340)
- Expose FastAPI docs path (#32863)
- Add http request latency (#32839)
🔨 Fixes:
- Recover the pending actors during the controller failures (#33890)
- Fix tensorarray to numpy conversion (#34115)
- Allow app rename when redeploying config (#33385)
- Fix traceback string for RayTaskErrors when deploying serve app (#33120)
📖Documentation:
- Add serve example documentation for object detection, stable diffusion and (#33164)
RLlib
🎉 New Features:
- RLModule API is available in Alpha. See details here. PPO has been migrated to this API but in a limited mode.
- Catalog API is revamped to be consistent with RLModule. See details here.
💫Enhancements:
- Default framework is now torch instead of tf. (#33603)
- Hard deprecate the old rllib/agent folder (#33242)
🔨 Fixes:
- [RLlib] Don't serialize config in Policy states (unless needed for msgpack-type checkpoints). (#33865)
- [RLlib] Fix MultiCallbacks class: To be used only with utility function that returns a class to use in the config. (#33863)
- [RLlib] DM control suite wrapper fix: dtype of obs needs to be pinned to float32. (#33876)
- [RLlib] Fix apex dqn deprecated add_batch call (#33814)
- [RLlib] AlgorithmConfig.update_from_dict needs to work for MultiCallbacks. (#33796)
- [RLlib] Add dist_inputs to action sampler fn returns in TorchPolicyV2 (#33795)
📖Documentation:
- Rewritten the API documentation for better discoverability.
- [RLlib][Docs] Restructure RLModule API page (#33363)
- [RLlib][Docs] Restructure Replay buffer API page (#33359)
- [RLlib][Docs] Restructure Utils API page (#33358)
- [RLlib][Docs] Restructure Sampler's API page (#33357)
- [RLlib][Docs] Restructure Modelv2's API page (#33356)
- [RLlib][Docs] Restructure Algorithm's API page (#33345)
- [RLlib][Docs] Restructure Policy's API page (#33344)
- [RLlib] Fix Getting Started example never returning (#33140)
Ray Core
🎉 New Features:
- Ray officially support scale to up to 2000 nodes. See scalability envelope for more details.
- Ray introduces an experimental API RAY_preload_python_modules to preload Python modules before tasks or actors are scheduled. This will eventually reduce startup time of Ray workloads that import large libraries. Please try it out and share feedback in #ray-preload-modules-feedback in the Ray Slack. To enable, configure the modules to preload via RAY_preload_python_modules=torch,tensorflow when starting Ray.
💫Enhancements:
- Mark raylet unhealthy if GCS can't recognize it. (#34216)
- Improve the workflow finding Redis leader.(#34183)
- Improve Redis related observability when failed. (#33842)
- Improve the serialization error for tasks, actors and ray.put (#33660)
- Experimental preload_python_modules flag for preloading modules in default_worker (#33572)
- Remove actor deletion upon job termination (#31019)
- Better support per worker gpu usage from the cluster view. (#33515)
- Task backend - Profile events capping (#33321)
- Fifo worker killing policy (#33430)
- Write ray address even if ray node is started with --block (#32961)
- Turn on light weight resource broadcasting. (#32625)
- Add opt-in flag for Windows and OSX clusters, update ray start output to match docs (#32409)
🔨 Fixes:
- Fix arm64 wheels builds ((#34320)
- Fix ray start command output(#34273)
- Partially address Ray child process leaks by killing all child processes in the CoreWorker shutdown sequence. (#34181)
- Ignore resource usage update from unknown node (#33619)
- Fix keepalive in grpc client #33986
- Autosummary class by default (#32983)
- Fix non default dashboard_agent_listen_port not used when connected to the node (#33834)
- Allow using local wheels to run release tests. (#32739)
- Fix the error message when storage is not set. (#33581)
- Fixing lint issue in benchmark_worker_startup (#33440)
- Pin json-schema < 4.18 (#33412)
- Fix demand leak when worker failed (#31175)
- Remove some usage of deprecated runtime context apis (#33236)
- Remove dead SchedulingResources class (#33250)
- Release lock before sleeping (#33221)
- Remove asyncio.ensure_future call in run_async_func_in_event_loop(#32932)
- Upgrade gtest to 1.13 (#32858)
- Update OpenCensus (#32553)
- Remove usage_lib.LibUsageRecorder (#32806)
- Fix the race condition in the new resource broadcasting. (#32798)
- Task backend - disable verbose print. (#32764)
- Building py37+cu118 and using cu116 in default ray-ml image (#32636)
- Do not set flushing thread niceness for task backend #32439
- Fix gRPC callback API destruction issues. (#32151)
- Fix comments and a corner case in #32302 (#32323)
- Script to compare perf metrics between releases (#32290)
📖Documentation:
- Rewrite the placement group documentation (#34302)
- Add tips of writing fault tolerant Ray applications (#32191)
- Removed docs referring to ray client. (#32209)
- Improve the streaming_split pydoc (#33424)
- Add doc link for logs dedup (#33879)
Ray Clusters
💫Enhancements:
- Added end to end release tests for example AWS cluster launcher YAML files (#32670)
Dashboard
🎉 New Features:
- Ray serve releases its own dedicated dashboard! See the documentation for more details.
- You can now access the error messages from every task and actor from the Ray dashboard.
- Better out of memory debugging support. See the out of memory troubleshooting guide for more details.
🔨 Fixes:
- Add the OOM failure graph (#34129)
- Improve the existing OOM metrics (#33453)
- Task backend - increase worker side GC limit to 100k (#33563)
- Add device index to the GPU metrics (#33328)
- Hide failed nodes by default. (#33455)
- Add worker startup & initialization time to state API + use it for many_tasks (#31916)
- Fix per component metrics bugs. (#33450)
- Fix the incorrect object store size from dashboard vs metrics
Many thanks to all those who contributed to this release!
@zjf2012, @christy, @fyrestone, @avnishn, @scottjlee, @sijieamoy, @jjyao, @sven1977, @jamesclark-Zapata, @cadedaniel, @jovany-wang, @pcmoritz, @MaskRay, @csivanich, @augray, @wuisawesome, @Wendi-anyscale, @maxpumperla, @shawnpanda, @DmitriGekhtman, @yuduber, @gjoliver, @ju2ez, @clarkzinzow, @brycehuang30, @iycheng, @justinvyu, @dmatrix, @edoakes, @tmbdev, @scottsun94, @jianoaix, @cool-RR, @prrajput1199, @amogkam, @ckw017, @alanwguo, @architkulkarni, @chaowanggg, @AmeerHajAli, @stephanie-wang, @bewestphal, @matthew29tang, @dbczumar, @sihanwang41, @ericl, @soumitrak, @matthewdeng, @Catch-Bull, @peytondmurray, @XiaodongLv, @bveeramani, @YQ-Wang, @Linniem, @ProjectsByJackHe, @woshiyyya, @c21, @shrekris-anyscale, @zcin, @Yard1, @can-anyscale, @kouroshHakha, @robertnishihara, @richardliaw, @krfricke, @shomilj, @ArturNiederfahrenhorst, @ijrsvt, @GokuMohandas, @jbedorf, @xwjiang2010, @anydayeol, @clarng, @davidxia, @rickyyx, @Siraj-Qazi, @kira-lin, @scv119, @chengscott, @angelinalg, @rkooo567, @rshin, @deanwampler, @gramhagen, @larrylian, @WeichenXu123, @simonsays1980
2.3.1Ray-2.3.1
The Ray 2.3.1 patch release contains fixes for multiple components:
Ray Data Processing
- Support different number of blocks/rows per block in
zip()(https://github.com/ray-project/ray/pull/32795)
Ray Serve
- Revert
serve runto use Ray Client instead of Ray Jobs (https://github.com/ray-project/ray/pull/32976) - Fix issue with
max_concurrent_queriesbeing ignored when autoscaling (https://github.com/ray-project/ray/pull/32772 and https://github.com/ray-project/ray/pull/33022)
Ray Core
- Write Ray address even if Ray node is started with
--block(https://github.com/ray-project/ray/pull/32961) - Fix Ray on Spark running on layered virtualenv python environment (https://github.com/ray-project/ray/pull/32996)
Dashboard
- Fix disk metric showing double the actual value (https://github.com/ray-project/ray/pull/32674)
2.3.0Ray-2.3.0
Release Highlights
- The streaming backend for Ray Datasets is in Developer Preview. It is designed to enable terabyte-scale ML inference and training workloads. Please contact us if you'd like to try it out on your workload, or you can find the preview guide here: https://docs.google.com/document/d/1BXd1cGexDnqHAIVoxTnV3BV0sklO9UXqPwSdHukExhY/edit
- New Information Architecture (Beta): We’ve restructured the Ray dashboard to be organized around user personas and workflows instead of entities.
- Ray-on-Spark is now available (Preview)!: You can launch Ray clusters on Databricks and Spark clusters and run Ray applications. Check out the documentation to learn more.
Ray Libraries
Ray AIR
💫Enhancements:
- Add
set_preprocessormethod toCheckpoint(#31721) - Rename Keras callback and its parameters to be more descriptive (#31627)
- Deprecate MlflowTrainableMixin in favor of setup_mlflow() function (#31295)
- W&B
- Have train_loop_config logged as a config (#31901)
- Allow users to exclude config values with WandbLoggerCallback (#31624)
- Rename WandB
save_checkpointstoupload_checkpoints(#31582) - Add hook to get project/group for W&B integration (#31035, 31643)
- Use Ray actors instead of multiprocessing for WandbLoggerCallback (#30847)
- Update
WandbLoggerCallbackexample (#31625)
- Predictor
- Place predictor kwargs in object store (#30932)
- Delegate BatchPredictor stage fusion to Datasets (#31585)
- Rename
DLPredictor.call_modeltensorparameter toinputs(#30574) - Add
use_gputoHuggingFacePredictor(#30945)
- Checkpoints
- Various
Checkpointimprovements (#30948) - Implement lazy checkpointing for same-node case (#29824)
- Automatically strip "module." from state dict (#30705)
- Allow user to pass model to
TensorflowCheckpoint.get_model(#31203)
- Various
🔨 Fixes:
- Fix and improve support for HDFS remote storage. (#31940)
- Use specified Preprocessor configs when using stream API. (#31725)
- Support nested Chain in BatchPredictor (#31407)
📖Documentation:
- Restructure API References (#32535)
- API Deprecations (#31777, #31867)
- Various fixes to docstrings, documentation, and examples (#30782, #30791)
🏗 Architecture refactoring:
- Use NodeAffinitySchedulingPolicy for scheduling (#32016)
- Internal resource management refactor (#30777, #30016)
Ray Data Processing
🎉 New Features:
- Lazy execution by default (#31286)
- Introduce streaming execution backend (#31579)
- Introduce DatasetIterator (#31470)
- Add per-epoch preprocessor (#31739)
- Add TorchVisionPreprocessor (#30578)
- Persist Dataset statistics automatically to log file (#30557)
💫Enhancements:
- Async batch fetching for map_batches (#31576)
- Add informative progress bar names to map_batches (#31526)
- Provide an size bytes estimate for mongodb block (#31930)
- Add support for dynamic block splitting to actor pool (#31715)
- Improve str/repr of Dataset to include execution plan (#31604)
- Deal with nested Chain in BatchPredictor (#31407)
- Allow MultiHotEncoder to encode arrays (#31365)
- Allow specify batch_size when reading Parquet file (#31165)
- Add zero-copy batch API for
ds.map_batches()(#30000) - Text dataset should save texts in ArrowTable format (#30963)
- Return ndarray dicts for single-column tabular datasets (#30448)
- Execute randomize_block_order eagerly if it's the last stage for ds.schema() (#30804)
🔨 Fixes:
- Don't drop first dataset when peeking DatasetPipeline (#31513)
- Handle np.array(dtype=object) constructor for ragged ndarrays (#31670)
- Emit warning when starting Dataset execution with no CPU resources available (#31574)
- Fix the bug of eagerly clearing up input blocks (#31459)
- Fix Imputer failing with categorical dtype (#31435)
- Fix schema unification for Datasets with ragged Arrow arrays (#31076)
- Fix Discretizers transforming ignored cols (#31404)
- Fix to_tf when the input feature_columns is a list. (#31228)
- Raise error message if user calls Dataset.iter (#30575)
📖Documentation:
- Refactor Ray Data API documentation (#31204)
- Add seealso to map-related methods (#30579)
Ray Train
🎉 New Features:
- Add option for per-epoch preprocessor (#31739)
💫Enhancements:
- Change default
NCCL_SOCKET_IFNAMEto blacklistveth(#31824) - Introduce DatasetIterator for bulk and streaming ingest (#31470)
- Clarify which
RunConfigis used when there are multiple places to specify it (#31959) - Change
ScalingConfigto be optional forDataParallelTrainers if already in Tunerparam_space(#30920)
🔨 Fixes:
- Use specified
Preprocessorconfigs when using stream API. (#31725) - Fix off-by-one AIR Trainer checkpoint ID indexing on restore (#31423)
- Force GBDTTrainer to use distributed loading for Ray Datasets (#31079)
- Fix bad case in ScalingConfig->RayParams (#30977)
- Don't raise TuneError on
fail_fast="raise"(#30817) - Report only once in
SklearnTrainer(#30593) - Ensure GBDT PGFs match passed ScalingConfig (#30470)
📖Documentation:
- Restructure API References (#32535)
- Remove Ray Client references from Train docs/examples (#32321)
- Various fixes to docstrings, documentation, and examples (#29463, #30492, #30543, #30571, #30782, #31692, #31735)
🏗 Architecture refactoring:
- API Deprecations (#31763)
Ray Tune
💫Enhancements:
- Improve trainable serialization error (#31070)
- Add support for Nevergrad optimizer with extra parameters (#31015)
- Add timeout for experiment checkpoint syncing to cloud (#30855)
- Move
validate_upload_dirto Syncer (#30869) - Enable experiment restore from moved cloud uri (#31669)
- Save and restore stateful callbacks as part of experiment checkpoint (#31957)
🔨 Fixes:
- Do not default to reuse_actors=True when mixins are used (#31999)
- Only keep cached actors if search has not ended (#31974)
- Fix best trial in ProgressReporter with nan (#31276)
- Make ResultGrid return cloud checkpoints (#31437)
- Wait for final experiment checkpoint sync to finish (#31131)
- Fix CheckpointConfig validation for function trainables (#31255)
- Fix checkpoint directory assignment for new checkpoints created after restoring a function trainable (#31231)
- Fix
AxSearchsave and nan/inf result handling (#31147) - Fix
AxSearchsearch space conversion for fixed list hyperparameters (#31088) - Restore searcher and scheduler properly on
Tuner.restore(#30893) - Fix progress reporter
sort_by_metricwith nested metrics (#30906) - Don't raise TuneError on
fail_fast="raise"(#30817) - Fix duplicate printing when trial is done (#30597)
📖Documentation:
- Restructure API references (#32449)
- Remove Ray Client references from Tune docs/examples (#32321)
- Various fixes to docstrings, documentation, and examples (#29581, #30782, #30571, #31045, #31793, #32505)
🏗 Architecture refactoring:
- Deprecate passing a custom trial executor (#31792)
- Move signal handling into separate method (#31004)
- Update staged resources in a fixed counter for faster lookup (#32087)
- Rename
overwrite_trainableargument in Tuner restore totrainable(#32059)
Ray Serve
🎉 New Features:
- Serve python API to support multi application (#31589)
💫Enhancements:
- Add exponential backoff when retrying replicas (#31436)
- Enable Log Rotation on Serve (#31844)
- Use tasks/futures for asyncio.wait (#31608)
- Change target_num_ongoing_requests_per_replica to positive float (#31378)
🔨 Fixes:
- Upgrade deprecated calls (#31839)
- Change Gradio integration to take a builder function to avoid serialization issues (#31619)
- Add initial health check before marking a replica as RUNNING (#31189)
📖Documentation:
- Document end-to-end timeout in Serve (#31769)
- Document Gradio visualization (#28310)
RLlib
🎉 New Features:
- Gymnasium is now supported. (Notes)
- Connectors are now activated by default (#31693, 30388, 31618, 31444, 31092)
- Contribution of LeelaChessZero algorithm for playing chess in a MultiAgent env. (#31480)
💫Enhancements:
- [RLlib] Error out if action_dict is empty in MultiAgentEnv. (#32129)
- [RLlib] Upgrade tf eager code to no longer use
experimental_relax_shapes(butreduce_retracinginstead). (#29214) - [RLlib] Reduce SampleBatch counting complexity (#30936)
- [RLlib] Use PyTorch vectorized max() and sum() in SampleBatch.init when possible (#28388)
- [RLlib] Support multi-gpu CQL for torch (tf already supported). (#31466)
- [RLlib] Introduce IMPALA off_policyness test with GPU (#31485)
- [RLlib] Properly serialize and restore StateBufferConnector states for policy stashing (#31372)
- [RLlib] Clean up deprecated concat_samples calls (#31391)
- [RLlib] Better support MultiBinary spaces by treating Tuples as superset of them in ComplexInputNet. (#28900)
- [RLlib] Add backward compatibility to MeanStdFilter to restore from older checkpoints. (#30439)
- [RLlib] Clean up some signatures for compute_actions. (#31241)
- [RLlib] Simplify logging configuration. (#30863)
- [RLlib] Remove native Keras Models. (#30986)
- [RLlib] Convert PolicySpec to a readable format when converting to_dict(). (#31146)
- [RLlib] Issue 30394: Add proper
__str__()method to PolicyMap. (#31098) - [RLlib] Issue 30840: Option to only checkpoint policies that are trainable. (#31133)
- [RLlib] Deprecate (delete)
contribfolder. (#30992) - [RLlib] Better behavior if user does not specify stopping condition in RLLib CLI. (#31078)
- [RLlib] PolicyMap LRU cache enhancements: Swap out policies (instead of GC'ing and recreating) + use Ray object store (instead of file system). (#29513)
- [RLlib]
AlgorithmConfig.overrides()to replacemultiagent->policies->configandevaluation_configdicts. (#30879) - [RLlib]
deprecation_warning(.., error=True)should raiseValueError, notDeprecationWarning. (#30255) - [RLlib] Add
gym.spaces.Textserialization. (#30794) - [RLlib] Convert
MultiAgentBatchtoSampleBatchin offline_rl.py. (#30668) - [RLlib; Tune] Make
Algorithm.train()return Tune-style config dict (instead of AlgorithmConfig object). (#30591)
🔨 Fixes:
- [RLlib] Fix waterworld example and test (#32117)
- [RLlib] Change Waterworld v3 to v4 and reinstate indep. MARL test case w/ pettingzoo. (#31820)
- [RLlib] Fix OPE checkpointing. Save method name in configuration dict. (#31778)
- [RLlib] Fix worker state restoration. (#31644)
- [RLlib] Replace ordinary pygame imports by
try_import_..(). (#31332) - [RLlib] Remove crude VR checks in agent collector. (#31564)
- [RLlib] Fixed the 'RestoreWeightsCallback' example script. (#31601)
- [RLlib] Issue 28428: QMix not working w/ GPUs. (#31299)
- [RLlib] Fix using yaml files with empty stopping conditions. (#31363)
- [RLlib] Issue 31174: Move all checks into AlgorithmConfig.validate() (even simple ones) to avoid errors when using tune hyperopt objects. (#31396)
- [RLlib] Fix
tensorflow_probabilityimports. (#31331) - [RLlib] Issue 31323: BC/MARWIL/CQL do work with multi-GPU (but config validation prevents them from running in this mode). (#31393)
- [RLlib] Issue 28849: DT fails with num_gpus=1. (#31297)
- [RLlib] Fix
PolicyMap.__del__()to also remove a deleted policy ID from the internal deque. (#31388) - [RLlib] Use
get_model_v2()instead ofget_model()with MADDPG. (#30905) - [RLlib] Policy mapping fn can not be called with keyword arguments. (#31141)
- [RLlib] Issue 30213: Appending RolloutMetrics to sampler outputs should happen after(!) all callbacks (such that custom metrics for last obs are still included). (#31102)
- [RLlib] Make convert_to_torch tensor adhere to docstring. (#31095)
- [RLlib] Fix convert to torch tensor (#31023)
- [RLlib] Issue 30221: random policy does not handle nested spaces. (#31025)
- [RLlib] Fix crashing remote envs example (#30562)
- [RLlib] Recursively look up the original space from obs_space (#30602)
📖Documentation:
- [RLlib; docs] Change links and references in code and docs to "Farama foundation's gymnasium" (from "OpenAI gym"). (#32061)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Task Events Backend: Ray aggregates all submitted task information to provide better observability (#31840, #31761, #31278, #31247, #31316, #30934, #30979, #31207, #30867, #30829, #31524, #32157). This will back up features like task state API, advanced progress bar, and Ray timeline.
💫Enhancements:
- Remote generator now works for ray actors and ray clients (#31700, #31710).
- Revamp default scheduling strategy, improve worker startup performance up to 8x for embarrassingly parallel workloads (#31934, #31868).
- Worker code clean up and allow workers lazy bind to jobs (#31836, #31846, #30349, #31375).
- A single Ray cluster can scale up to 2000 nodes and 20k actors(#32131, #30131, #31939, #30166, #30460, #30563).
- Out-of-memory prevention enhancement is now GA with more robust worker killing policies and better user experiences (#32217, #32361, #32219, #31768, #32107, #31976, #31272, #31509, #31230).
🔨 Fixes:
- Improve garbage collection upon job termination (#32127, #31155)
- Fix opencensus protobuf bug (#31632)
- Support python 3.10 for runtime_env conda (#30970)
- Fix crashes and memory leaks (#31640, #30476, #31488, #31917, #30761, #31018)
📖Documentation:
- Deprecation (#31845, #31140, #31528)
Ray Clusters
🎉 New Features:
- Ray-on-Spark is now available as Preview! (#28771, #31397, #31962)
💫Enhancements:
- [observability] Better memory formatting for
ray statusand autoscaler (#32337) - [autoscaler] Add flag to disable periodic cluster status log. (#31869)
🔨 Fixes:
- [observability][autoscaler] Ensure pending nodes is reset to 0 after scaling (#32085)
- Make ~/.bashrc optional in cluster launcher commands (#32393)
📖Documentation:
- Improvements to job submission
- Remove references to Ray Client
Dashboard
🎉 New Features:
- New Information Architecture (beta): We’ve restructured the Ray dashboard to be organized around user personas and workflows instead of entities. For developers, the jobs and actors tab will be most useful. For infrastructure engineers, the cluster tab may be more valuable.
- Advanced progress bar: Tasks visualization that allow you to see the progress of all your ray tasks
- Timeline view: We’ve added a button to download detailed timeline data about your ray job. Then, one can click a link and use the perfetto open-source visualization tool to visualize the timeline data.
- More metadata tables. You can now see placement groups, tasks, actors, and other information related to your jobs.
📖Documentation:
- We’ve restructured the documentation to make the dashboard documentation more prominent
- We’ve improved the documentation around setting up Prometheus and Grafana for metrics.
Many thanks to all those who contributed to this release!
@minerharry, @scottsun94, @iycheng, @DmitriGekhtman, @jbedorf, @krfricke, @simonsays1980, @eltociear, @xwjiang2010, @ArturNiederfahrenhorst, @richardliaw, @avnishn, @WeichenXu123, @Capiru, @davidxia, @andreapiso, @amogkam, @sven1977, @scottjlee, @kylehh, @yhna940, @rickyyx, @sihanwang41, @n30111, @Yard1, @sriram-anyscale, @Emiyalzn, @simran-2797, @cadedaniel, @harelwa, @ijrsvt, @clarng, @pabloem, @bveeramani, @lukehsiao, @angelinalg, @dmatrix, @sijieamoy, @simon-mo, @jbesomi, @YQ-Wang, @larrylian, @c21, @AndreKuu, @maxpumperla, @architkulkarni, @wuisawesome, @justinvyu, @zhe-thoughts, @matthewdeng, @peytondmurray, @kevin85421, @tianyicui-tsy, @cassidylaidlaw, @gvspraveen, @scv119, @kyuyeonpooh, @Siraj-Qazi, @jovany-wang, @ericl, @shrekris-anyscale, @Catch-Bull, @jianoaix, @christy, @MisterLin1995, @kouroshHakha, @pcmoritz, @csko, @gjoliver, @clarkzinzow, @SongGuyang, @ckw017, @ddelange, @alanwguo, @Dhul-Husni, @Rohan138, @rkooo567, @fzyzcjy, @chaokunyang, @0x2b3bfa0, @zoltan-fedor, @Chong-Li, @crypdick, @jjyao, @emmyscode, @stephanie-wang, @starpit, @smorad, @nikitavemuri, @zcin, @tbukic, @ayushthe1, @mattip
2.2.0Ray-2.2.0
Release Highlights
Ray 2.2 is a stability-focused release, featuring stability improvements across many Ray components.
- Ray Jobs API is now GA. The Ray Jobs API allows you to submit locally developed applications to a remote Ray Cluster for execution. It simplifies the experience of packaging, deploying, and managing a Ray application.
- Ray Dashboard has received a number of improvements, such as the ability to see cpu flame graphs of your Ray workers and new metrics for memory usage.
- The Out-Of-Memory (OOM) Monitor is now enabled by default. This will increase the stability of memory-intensive applications on top of Ray.
- [Ray Data] we’ve heard numerous users report that when files are too large, Ray Data can have out-of-memory or performance issues. In this release, we’re enabling dynamic block splitting by default, which will address the above issues by avoiding holding too much data in memory.
Ray Libraries
Ray AIR
🎉 New Features:
- Add a NumPy first path for Torch and TensorFlow Predictors (#28917)
💫Enhancements:
- Suppress "NumPy array is not writable" error in torch conversion (#29808)
- Add node rank and local world size info to session (#29919)
🔨 Fixes:
- Fix MLflow database integrity error (#29794)
- Fix ResourceChangingScheduler dropping PlacementGroupFactory args (#30304)
- Fix bug passing 'raise' to FailureConfig (#30814)
- Fix reserved CPU warning if no CPUs are used (#30598)
📖Documentation:
- Fix examples and docs to specify batch_format in BatchMapper (#30438)
🏗 Architecture refactoring:
- Deprecate Wandb mixin (#29828)
- Deprecate Checkpoint.to_object_ref and Checkpoint.from_object_ref (#30365)
Ray Data Processing
🎉 New Features:
- Support all PyArrow versions released by Apache Arrow (#29993, #29999)
- Add
select_columns()to select a subset of columns (#29081) - Add
write_tfrecords()to write TFRecord files (#29448) - Support MongoDB data source (#28550)
- Enable dynamic block splitting by default (#30284)
- Add
from_torch()to create dataset from Torch dataset (#29588) - Add
from_tf()to create dataset from TensorFlow dataset (#29591) - Allow to set
batch_sizeinBatchMapper(#29193) - Support read/write from/to local node file system (#29565)
💫Enhancements:
- Add
include_pathsinread_images()to return image file path (#30007) - Print out Dataset statistics automatically after execution (#29876)
- Cast tensor extension type to opaque object dtype in
to_pandas()andto_dask()(#29417) - Encode number of dimensions in variable-shaped tensor extension type (#29281)
- Fuse AllToAllStage and OneToOneStage with compatible remote args (#29561)
- Change
read_tfrecords()output from Pandas to Arrow format (#30390) - Handle all Ray errors in task compute strategy (#30696)
- Allow nested Chain preprocessors (#29706)
- Warn user if missing columns and support
strexclude inConcatenator(#29443) - Raise ValueError if preprocessor column doesn't exist (#29643)
🔨 Fixes:
- Support custom resource with remote args for
random_shuffle()(#29276) - Support custom resource with remote args for
random_shuffle_each_window()(#29482) - Add PublicAPI annotation to preprocessors (#29434)
- Tensor extension column concatenation fixes (#29479)
- Fix
iter_batches()to not return empty batch (#29638) - Change
map_batches()to fetch input blocks on-demand (#29289) - Change
take_all()to not accept limit argument (#29746) - Convert between block and batch correctly for
map_groups()(#30172) - Fix
stats()call causing Dataset schema to be unset (#29635) - Raise error when
batch_formatis not specified forBatchMapper(#30366) - Fix ndarray representation of single-element ragged tensor slices (#30514)
📖Documentation:
- Improve
map_batches()documentation about execution model and UDF pickle-ability requirement (#29233) - Improve
to_tf()docstring (#29464)
Ray Train
🎉 New Features:
- Added MosaicTrainer (#29237, #29620, #29919)
💫Enhancements:
- Fast fail upon single worker failure (#29927)
- Optimize checkpoint conversion logic (#29785)
🔨 Fixes:
- Propagate DatasetContext to training workers (#29192)
- Show correct error message on training failure (#29908)
- Fix prepare_data_loader with enable_reproducibility (#30266)
- Fix usage of NCCL_BLOCKING_WAIT (#29562)
📖Documentation:
- Deduplicate Train examples (#29667)
🏗 Architecture refactoring:
- Hard deprecate train.report (#29613)
- Remove deprecated Train modules (#29960)
- Deprecate old prepare_model DDP args #30364
Ray Tune
🎉 New Features:
- Make
Tuner.restorework with relative experiment paths (#30363) Tuner.restorefrom a local directory that has moved (#29920)
💫Enhancements:
with_resourcestakes in aScalingConfig(#30259)- Keep resource specifications when nesting
with_resourcesinwith_parameters(#29740) - Add
trial_name_creatorandtrial_dirname_creatortoTuneConfig(#30123) - Add option to not override the working directory (#29258)
- Only convert a
BaseTrainertoTrainableonce in the Tuner (#30355) - Dynamically identify PyTorch Lightning Callback hooks (#30045)
- Make
remote_checkpoint_dirwork with query strings (#30125) - Make cloud checkpointing retry configurable (#30111)
- Sync experiment-checkpoints more often (#30187)
- Update generate_id algorithm (#29900)
🔨 Fixes:
- Catch SyncerCallback failure with dead node (#29438)
- Do not warn in BayesOpt w/ Uniform sampler (#30350)
- Fix
ResourceChangingSchedulerdropping PGF args (#30304) - Fix Jupyter output with Ray Client and
Tuner(#29956) - Fix tests related to
TUNE_ORIG_WORKING_DIRenv variable (#30134)
📖Documentation:
- Add user guide for analyzing results (using
ResultGridandResult) (#29072) - Tune checkpointing and Tuner restore docfix (#29411)
- Fix and clean up PBT examples (#29060)
- Fix TrialTerminationReporter in docs (#29254)
🏗 Architecture refactoring:
- Remove hard deprecated SyncClient/Syncer (#30253)
- Deprecate Wandb mixin, move to
setup_wandb()function (#29828)
Ray Serve
🎉 New Features:
- Guard for high latency requests (#29534)
- Java API Support (blog)
💫Enhancements:
- Serve K8s HA benchmarking (#30278)
- Add method info for http metrics (#29918)
🔨 Fixes:
- Fix log format error (#28760)
- Inherit previous deployment num_replicas (29686)
- Polish serve run deploy message (#29897)
- Remove calling of get_event_loop from python 3.10
RLlib
🎉 New Features:
- Fault tolerant, elastic WorkerSets: An asynchronous Ray Actor manager class is now used inside all of RLlib’s Algorithms, adding fully flexible fault tolerance to rollout workers and workers used for evaluation. If one or more workers (which are Ray actors) fails - e.g. due to a SPOT instance going down - the RLlib Algorithm will now flexibly wait it out and periodically try to recreate the failed workers. In the meantime, only the remaining healthy workers are used for sampling and evaluation. (#29938, #30118, #30334, #30252, #29703, #30183, #30327, #29953)
💫Enhancements:
- RLlib CLI: A new and enhanced RLlib command line interface (CLI) has been added, allowing for automatically downloading example configuration files, python-based config files (defining an AlgorithmConfig object to use), better interoperability between training and evaluation runs, and many more. For a detailed overview of what has changed, check out the new CLI documentation. (#29204, #29459, #30526, #29661, #29972)
- Checkpoint overhaul: Algorithm checkpoints and Policy checkpoints are now more cohesive and transparent. All checkpoints are now characterized by a directory (with files and maybe sub-directories), rather than a single pickle file; Both Algorithm and Policy classes now have a utility static method (
from_checkpoint()) for directly instantiating instances from a checkpoint directory w/o knowing the original configuration used or any other information (having the checkpoint is sufficient). For a detailed overview, see here. (#28812, #29772, #29370, #29520, #29328) - A new metric for APPO/IMPALA/PPO has been added that measures off-policy’ness: The difference in number of grad-updates the sampler policy has received thus far vs the trained policy’s number of grad-updates thus far. (#29983)
🏗 Architecture refactoring:
- AlgorithmConfig classes: All of RLlib’s Algorithms, RolloutWorkers, and other important classes now use AlgorithmConfig objects under the hood, instead of python config dicts. It is no longer recommended (however, still supported) to create a new algorithm (or a Tune+RLlib experiment) using a python dict as configuration. For more details on how to convert your scripts to the new AlgorithmConfig design, see here. (#29796, #30020, #29700, #29799, #30096, #29395, #29755, #30053, #29974, #29854, #29546, #30042, #29544, #30079, #30486, #30361)
- Major progress was made on the new Connector API and making sure it can be used (tentatively) with the “config.rollouts(enable_connectors=True)” flag. Will be fully supported, across all of RLlib’s algorithms, in Ray 2.3. (#30307, #30434, #30459, #30308, #30332, #30320, #30383, #30457, #30446, #30024, #29064, #30398, #29385, #30481, #30241, #30285, #30423, #30288, #30313, #30220, #30159)
- Progress was made on the upcoming RLModule/RLTrainer/RLOptimizer APIs. (#30135, #29600, #29599, #29449, #29642)
🔨 Fixes:
- Various bug fixes: #25925, #30279, #30478, #30461, #29867, #30099, #30185, #29222, #29227, #29494, #30257, #29798, #30176, #29648, #30331
📖Documentation:
- RLlib CLI, Checkpoint overhaul, AlgorithmConfigs
- Minor fixes: #29261, #29752
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Out-of-memory monitor is now Beta and is enabled by default.
💫Enhancements:
- The Ray Jobs API has graduated from Beta to GA. This means Ray Jobs will maintain API backward compatibility.
- Run Ray job entrypoint commands (“driver scripts”) on worker nodes by specifying
entrypoint_num_cpus,entrypoint_num_gpus, orentrypoint_resources. (#28564, #28203) - (Beta) OpenAPI spec for Ray Jobs REST API (#30417)
- Improved Ray health checking mechanism. The fix will reduce the frequency of GCS marking raylets fail mistakenly when it is overloaded. (#29346, #29442, #29389, #29924)
🔨 Fixes:
- Various fixes for hanging / deadlocking (#29491, #29763, #30371, #30425)
- Set OMP_NUM_THREADS to
num_cpusrequired by task/actors by default (#30496) - set worker non recyclable if gpu is envolved by default (#30061)
📖Documentation:
- General improvements of Ray Core docs, including design patterns and tasks.
Ray Clusters
💫Enhancements:
- Stability improvements for Ray Autoscaler / KubeRay Operator integration. (#29933 , #30281, #30502)
Dashboard
🎉 New Features:
- Additional improvements from the default metrics dashboard. We now have actor, placement group, and per component memory usage breakdown. You can see details from the doc.
- New profiling feature using py-spy under the hood. You can click buttons to see stack trace or cpu flame graphs of your workers.
- Autoscaler and job events are available from the dashboard. You can also access the same data using
ray list cluster-events.
🔨 Fixes:
- Stability improvements from the dashboard
- Dashboard now works at large scale cluster! It is tested with 250 nodes and 10K+ actors (which matches the Ray scalability envelope).
- Smarter api fetching logic. We now wait for the previous API to finish before sending a new API request when polling for new data.
- Fix agent memory leak and high CPU usage.
💫Enhancements:
- General improvements to the progress bar. You can now see progress bars for each task name if you drill into the job details.
- More metadata is available in the jobs and actors tables.
- There is now a feedback button embedded into the dashboard. Please submit any bug reports or suggestions!
Many thanks to all those who contributed to this release!
@shrekris-anyscale, @rickyyx, @scottjlee, @shogohida, @liuyang-my, @matthewdeng, @wjrforcyber, @linusbiostat, @clarkzinzow, @justinvyu, @zygi, @christy, @amogkam, @cool-RR, @jiaodong, @EvgeniiTitov, @jjyao, @ilee300a, @jianoaix, @rkooo567, @mattip, @maxpumperla, @ericl, @cadedaniel, @bveeramani, @rueian, @stephanie-wang, @lcipolina, @bparaj, @JoonHong-Kim, @avnishn, @tomsunelite, @larrylian, @alanwguo, @VishDev12, @c21, @dmatrix, @xwjiang2010, @thomasdesr, @tiangolo, @sokratisvas, @heyitsmui, @scv119, @pcmoritz, @bhavika, @yzs981130, @andraxin, @Chong-Li, @clarng, @acxz, @ckw017, @krfricke, @kouroshHakha, @sijieamoy, @iycheng, @gjoliver, @peytondmurray, @xcharleslin, @DmitriGekhtman, @andreichalapco, @vitrioil, @architkulkarni, @simon-mo, @ArturNiederfahrenhorst, @sihanwang41, @pabloem, @sven1977, @avivhaber, @wuisawesome, @jovany-wang, @Yard1
2.1.0Ray-2.1.0
Release Highlights
- Ray AI Runtime (AIR)
- Better support for Image-based workloads.
- Ray Datasets
read_images()API for loading data. - Numpy-based API for user-defined functions in Preprocessor.
- Ray Datasets
- Ability to read TFRecord input.
- Ray Datasets
read_tfrecords()API to read TFRecord files.
- Ray Datasets
- Better support for Image-based workloads.
- Ray Serve:
- Add support for gRPC endpoint (alpha release). Instead of using an HTTP server, Ray Serve supports gRPC protocol and users can bring their own schema for their use case.
- RLlib:
- Introduce decision transformer (DT) algorithm.
- New hook for callbacks with
on_episode_created(). - Learning rate schedule to SimpleQ and PG.
- Ray Core:
- Ray OOM prevention (alpha release).
- Support dynamic generators as task return values.
- Dashboard:
- Time series metrics support.
- Export configuration files can be used in Prometheus or Grafana instances.
- New progress bar in job detail view.
Ray Libraries
Ray AIR
💫Enhancements:
- Improve readability of training failure output (#27946, #28333, #29143)
- Auto-enable GPU for Predictors (#26549)
- Add ability to create TorchCheckpoint from state dict (#27970)
- Add ability to create TensorflowCheckpoint from saved model/h5 format (#28474)
- Add attribute to retrieve URI from Checkpoint (#28731)
- Add all allowable types to WandB Callback (#28888)
🔨 Fixes:
- Handle nested metrics properly as scoring attribute (#27715)
- Fix serializability of Checkpoints (#28387, #28895, #28935)
📖Documentation:
- Miscellaneous updates to documentation and examples (#28067, #28002, #28189, #28306, #28361, #28364, #28631, #28800)
🏗 Architecture refactoring:
- Deprecate Checkpoint.to_object_ref and Checkpoint.from_object_ref (#28318)
- Deprecate legacy train/tune functions in favor of Session (#28856)
Ray Data Processing
🎉 New Features:
- Add read_images (#29177)
- Add read_tfrecords (#28430)
- Add NumPy batch format to Preprocessor and
BatchMapper(#28418) - Ragged tensor extension type (#27625)
- Add KBinsDiscretizer Preprocessor (#28389)
💫Enhancements:
- Simplify to_tf interface (#29028)
- Add metadata override and inference in
Dataset.to_dask()(#28625) - Prune unused columns before aggregate (#28556)
- Add Dataset.default_batch_format (#28434)
- Add partitioning parameter to read_ functions (#28413)
- Deprecate "native" batch format in favor of "default" (#28489)
- Support None partition field name (#28417)
- Re-enable Parquet sampling and add progress bar (#28021)
- Cap the number of stats kept in StatsActor and purge in FIFO order if the limit exceeded (#27964)
- Customized serializer for Arrow JSON ParseOptions in read_json (#27911)
- Optimize groupby/mapgroups performance (#27805)
- Improve size estimation of image folder data source (#27219)
- Use detached lifetime for stats actor (#25271)
- Pin _StatsActor to the driver node (#27765)
- Better error message for partition filtering if no file found (#27353)
- Make Concatenator deterministic (#27575)
- Change FeatureHasher input schema to expect token counts (#27523)
- Avoid unnecessary reads when truncating a dataset with
ds.limit()(#27343) - Hide tensor extension from UDFs (#27019)
- Add repr to AIR classes (#27006)
🔨 Fixes:
- Add upper bound to pyarrow version check (#29674) (#29744)
- Fix map_groups to work with different output type (#29184)
- read_csv not filter out files by default (#29032)
- Check columns when adding rows to TableBlockBuilder (#29020)
- Fix the peak memory usage calculation (#28419)
- Change sampling to use same API as read Parquet (#28258)
- Fix column assignment in Concatenator for Pandas 1.2. (#27531)
- Doing partition filtering in reader constructor (#27156)
- Fix split ownership (#27149)
📖Documentation:
- Clarify dataset transformation. (#28482)
- Update map_batches documentation (#28435)
- Improve docstring and doctest for read_parquet (#28488)
- Activate dataset doctests (#28395)
- Document using a different separator for read_csv (#27850)
- Convert custom datetime column when reading a CSV file (#27854)
- Improve preprocessor documentation (#27215)
- Improve
limit()andtake()docstrings (#27367) - Reorganize the tensor data support docs (#26952)
- Fix nyc_taxi_basic_processing notebook (#26983)
Ray Train
🎉 New Features:
- Add FullyShardedDataParallel support to TorchTrainer (#28096)
💫Enhancements:
- Add rich notebook repr for DataParallelTrainer (#26335)
- Fast fail if training loop raises an error on any worker (#28314)
- Use torch.encode_data with HorovodTrainer when torch is imported (#28440)
- Automatically set NCCL_SOCKET_IFNAME to use ethernet (#28633)
- Don't add Trainer resources when running on Colab (#28822)
- Support large checkpoints and other arguments (#28826)
🔨 Fixes:
- Fix and improve HuggingFaceTrainer (#27875, #28154, #28170, #28308, #28052)
- Maintain dtype info in LightGBMPredictor (#28673)
- Fix prepare_model (#29104)
- Fix
train.torch.get_device()(#28659)
📖Documentation:
- Clarify LGBM/XGB Trainer documentation (#28122)
- Improve Hugging Face notebook example (#28121)
- Update Train API reference and docs (#28192)
- Mention FSDP in HuggingFaceTrainer docs (#28217)
🏗 Architecture refactoring:
- Improve Trainer modularity for extensibility (#28650)
Ray Tune
🎉 New Features:
- Add
Tuner.get_results()to retrieve results after restore (#29083)
💫Enhancements:
- Exclude files in sync_dir_between_nodes, exclude temporary checkpoints (#27174)
- Add rich notebook output for Tune progress updates (#26263)
- Add logdir to W&B run config (#28454)
- Improve readability for long column names in table output (#28764)
- Add functionality to recover from latest available checkpoint (#29099)
- Add retry logic for restoring trials (#29086)
🔨 Fixes:
- Re-enable progress metric detection (#28130)
- Add timeout to retry_fn to catch hanging syncs (#28155)
- Correct PB2’s beta_t parameter implementation (#28342)
- Ignore directory exists errors to tackle race conditions (#28401)
- Correctly overwrite files on restore (#28404)
- Disable pytorch-lightning multiprocessing per default (#28335)
- Raise error if scheduling an empty PlacementGroupFactory#28445
- Fix trial cleanup after x seconds, set default to 600 (#28449)
- Fix trial checkpoint syncing after recovery from other node (#28470)
- Catch empty hyperopt search space, raise better Tuner error message (#28503)
- Fix and optimize sample search algorithm quantization logic (#28187)
- Support tune.with_resources for class methods (#28596)
- Maintain consistent Trial/TrialRunner state when pausing and resuming trial with PBT (#28511)
- Raise better error for incompatible gcsfs version (#28772)
- Ensure that exploited in-memory checkpoint is used by trial with PBT (#28509)
- Fix Tune checkpoint tracking for minimizing metrics (#29145)
📖Documentation:
- Miscelleanous documentation fixes (#27117, #28131, #28210, #28400, #28068, #28809)
- Add documentation around trial/experiment checkpoint (#28303)
- Add basic parallel execution guide for Tune (#28677)
- Add example PBT notebook (#28519)
🏗 Architecture refactoring:
- Store SyncConfig and CheckpointConfig in Experiment and Trial (#29019)
Ray Serve
🎉 New Features:
- Added gRPC direct ingress support [alpha version] (#28175)
- Serve cli can provide kubernetes formatted output (#28918)
- Serve cli can provide user config output without default value (#28313)
💫Enhancements:
- Enrich more benchmarks
- image objection with resnet50 mode with image preprocessing (#29096)
- gRPC vs HTTP inference performance (#28175)
- Add health check metrics to reflect the replica health status (#29154)
🔨 Fixes:
- Fix memory leak issues during inference (#29187)
- Fix unexpected http options omit warning when using serve cli to start the ray serve (#28257)
- Fix unexpected long poll exceptions (#28612)
📖Documentation:
- Add e2e fault tolerance instructions (#28721)
- Add Direct Ingress instructions (#29149)
- Bunch of doc improvements on “dev workflow”, “custom resources”, “serve cli” etc (#29147, #28708, #28529, #28527)
RLlib
🎉 New Features:
- Decision Transformer (DT) Algorithm added (#27890, #27889, #27872, #27829).
- Callbacks now have a new hook
on_episode_created(). (#28600) - Added learning rate schedule to SimpleQ and PG. (#28381)
💫Enhancements:
- Soft target network update is now supported by all off-policy algorithms (e.g DQN, DDPG, etc.) (#28135)
- Stop RLlib from "silently" selecting atari preprocessors. (#29011)
- Improved offline RL and off-policy evaluation performance (#28837, #28834, #28593, #28420, #28136, #28013, #27356, #27161, #27451).
- Escalated old deprecation warnings to errors (#28807, #28795, #28733, #28697).
- Others: #27619, #27087.
🔨 Fixes:
- Various bug fixes: #29077, #28811, #28637, #27785, #28703, #28422, #28405, #28358, #27540, #28325, #28357, #28334, #27090, #28133, #27981, #27980, #26666, #27390, #27791, #27741, #27424, #27544, #27459, #27572, #27255, #27304, #26629, #28166, #27864, #28938, #28845, #28588, #28202, #28201, #27806
📖Documentation:
- Connectors. (#27528)
- Training step API. (#27344)
- Others: #28299, #27460
Ray Workflows
🔨 Fixes:
- Fixed the object loss due to driver exit (#29092)
- Change the name in step to task_id (#28151)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Ray OOM prevention feature alpha release! If your Ray jobs suffer from OOM issues, please give it a try.
- Support dynamic generators as task return values. (#29082 #28864 #28291)
💫Enhancements:
- Fix spread scheduling imbalance issues (#28804 #28551 #28551)
- Widening range of grpcio versions allowed (#28623)
- Support encrypted redis connection. (#29109)
- Upgrade redis from 6.x to 7.0.5. (#28936)
- Batch ScheduleAndDispatchTasks calls (#28740)
🔨 Fixes:
- More robust spilled object deletion (#29014)
- Fix the initialization/destruction order between reference_counter_ and node change subscription (#29108)
- Suppress the logging error when python exits and actor not deleted (#27300)
- Mark
run_function_on_all_workersas deprecated until we get rid of this (#29062) - Remove unused args for default_worker.py (#28177)
- Don't include script directory in sys.path if it's started via python -m (#28140)
- Handling edge cases of max_cpu_fraction argument (#27035)
- Fix out-of-band deserialization of actor handle (#27700)
- Allow reuse of cluster address if Ray is not running (#27666)
- Fix a uncaught exception upon deallocation for actors (#27637)
- Support placement_group=None in PlacementGroupSchedulingStrategy (#27370)
📖Documentation:
- Ray 2.0 white paper is published.
- Revamp ray core docs (#29124 #29046 #28953 #28840 #28784 #28644 #28345 #28113 #27323 #27303)
- Fix cluster docs (#28056 #27062)
- CLI Reference Documentation Revamp (#27862)
Ray Clusters
💫Enhancements:
- Distinguish Kubernetes deployment stacks (#28490)
📖Documentation:
- State intent to remove legacy Ray Operator (#29178)
- Improve KubeRay migration notes (#28672)
- Add FAQ for cluster multi-tenancy support (#29279)
Dashboard
🎉 New Features:
- Time series metrics are now built into the dashboard
- Ray now exports some default configuration files which can be used for your Prometheus or Grafana instances. This includes default metrics which show common information important to your Ray application.
- New progress bar is shown in the job detail view. You can see how far along your ray job is.
🔨 Fixes:
- Fix to prometheus exporter producing a slightly incorrect format.
- Fix several performance issues and memory leaks
📖Documentation:
- Added additional documentation on the new time series and the metrics page
Many thanks to all those who contributed to this release!
@sihanwang41, @simon-mo, @avnishn, @MyeongKim, @markrogersjr, @christy, @xwjiang2010, @kouroshHakha, @zoltan-fedor, @wumuzi520, @alanwguo, @Yard1, @liuyang-my, @charlesjsun, @DevJake, @matteobettini, @jonathan-conder-sm, @mgerstgrasser, @guidj, @JiahaoYao, @Zyiqin-Miranda, @jvanheugten, @aallahyar, @SongGuyang, @clarng, @architkulkarni, @Rohan138, @heyitsmui, @mattip, @ArturNiederfahrenhorst, @maxpumperla, @vale981, @krfricke, @DmitriGekhtman, @amogkam, @richardliaw, @maldil, @zcin, @jianoaix, @cool-RR, @kira-lin, @gramhagen, @c21, @jiaodong, @sijieamoy, @tupui, @ericl, @anabranch, @se4ml, @suquark, @dmatrix, @jjyao, @clarkzinzow, @smorad, @rkooo567, @jovany-wang, @edoakes, @XiaodongLv, @klieret, @rozsasarpi, @scottsun94, @ijrsvt, @bveeramani, @chengscott, @jbedorf, @kevin85421, @nikitavemuri, @sven1977, @acxz, @stephanie-wang, @PaulFenton, @WangTaoTheTonic, @cadedaniel, @nthai, @wuisawesome, @rickyyx, @artemisart, @peytondmurray, @pingsutw, @olipinski, @davidxia, @stestagg, @yaxife, @scv119, @mwtian, @yuanchi2807, @ntlm1686, @shrekris-anyscale, @cassidylaidlaw, @gjoliver, @ckw017, @hakeemta, @ilee300a, @avivhaber, @matthewdeng, @afarid, @pcmoritz, @Chong-Li, @Catch-Bull, @justinvyu, @iycheng
2.0.1Ray-2.0.1
The Ray 2.0.1 patch release contains dependency upgrades and fixes for multiple components:
- Upgrade grpcio version to 1.32 (#28025)
- Upgrade redis version to 7.0.5 (#28936)
- Fix segfault when using runtime environments (#28409)
- Increase RPC timeout for dashboard (#28330)
- Set correct path when using
python -m(#28140) - [Autoscaler] Fix autoscaling for 0 CPU head node (#26813)
- [Serve] Allow code in private remote Git URIs to be imported (#28250)
- [Serve] Allow
hostandportin Serve config (#27026) - [RLlib] Evaluation supports asynchronous rollout (single slow eval worker will not block the overall evaluation progress). (#27390)
- [Tune] Fix hang during checkpoint synchronization (#28155)
- [Tune] Fix trial restoration from different IP (#28470)
- [Tune] Fix custom synchronizer serialization (#28699)
- [Workflows] Replace deprecated
nameoption withtask_id(#28151)
2.0.0Ray-2.0.0
Release Highlights
Ray 2.0 is an exciting release with enhancements to all libraries in the Ray ecosystem. With this major release, we take strides towards our goal of making distributed computing scalable, unified, and open.
Towards these goals, Ray 2.0 features new capabilities for unifying the machine learning (ML) ecosystem, improving Ray's production support, and making it easier than ever for ML practitioners to use Ray's libraries.
Highlights:
- Ray AIR, a scalable and unified toolkit for ML applications, is now in Beta.
- Ray now supports natively shuffling 100TB or more of data with the Ray Datasets library.
- KubeRay, a toolkit for running Ray on Kubernetes, is now in Beta. This replaces the legacy Python-based Ray operator.
- Ray Serve’s Deployment Graph API is a new and easier way to build, test, and deploy an inference graph of deployments. This is released as Beta in 2.0.
A migration guide for all the different libraries can be found here: Ray 2.0 Migration Guide.
Ray Libraries
Ray AIR
Ray AIR is now in beta. Ray AIR builds upon Ray’s libraries to enable end-to-end machine learning workflows and applications on Ray. You can install all dependencies needed for Ray AIR via pip install -u "ray[air]".
🎉 New Features:
- Predictors:
- BatchPredictors now have support for scalable inference on GPUs.
- All Predictors can now be constructed from pre-trained models, allowing you to easily scale batch inference with trained models from common ML frameworks.
- ray.ml.predictors has been moved to the Ray Train namespace (ray.train).
- Preprocessing: New preprocessors and API changes on Ray Datasets now make feature processing easier to do on AIR. See the Ray Data release notes for more details.
- New features for Datasets/Train/Tune/Serve can be found in the corresponding library release notes for more details.
💫 Enhancements:
- Major package refactoring is included in this release.
- ray.ml is renamed to ray.air.
- ray.ml.preprocessors have been moved to ray.data.
- train_test_split is now a new method of ray.data.Dataset (#27065)
- ray.ml.trainers have been moved to ray.train (#25570)
- ray.ml.predictors has been moved to ray.train.
- ray.ml.config has been moved to ray.air.config (#25712).
- Checkpoints are now framework-specific -- meaning that each Trainer generates its own Framework-specific Checkpoint class. See Ray Train for more details.
- ModelWrappers have been renamed to PredictorDeployments.
- API stability annotations have been added (#25485)
- Train/Tune now have the same reporting and checkpointing API -- see the Train notes for more details (#26303)
- ScalingConfigs are now Dataclasses not Dict types
- Many AIR examples, benchmarks, and documentation pages were added in this release. The Ray AIR documentation will cover breadth of usage (end to end workflows across different libraries) while library-specific documentation will cover depth (specific features of a specific library).
🔨 Fixes:
- Many documentation examples were previously untested. This release fixes those examples and adds them to the CI.
- Predictors:
- Torch/Tensorflow Predictors have correctness fixes (#25199, #25190, #25138, #25136)
- Update
KerasCallbackto work withTensorflowPredictor(#26089) - Add streaming BatchPredictor support (#25693)
- Add
predict_pandasimplementation (#25534) - Add
_predict_arrowinterface for Predictor (#25579) - Allow creating Predictor directly from a UDF (#26603)
- Execute GPU inference in a separate stage in BatchPredictor (#26616, #27232, #27398)
- Accessors for preprocessor in Predictor class (#26600)
- [AIR] Predictor
call_modelAPI for unsupported output types (#26845)
Ray Data Processing
🎉 New Features:
- Add ImageFolderDatasource (#24641)
- Add the NumPy batch format for batch mapping and batch consumption (#24870)
- Add iter_torch_batches() and iter_tf_batches() APIs (#26689)
- Add local shuffling API to iterators (#26094)
- Add drop_columns() API (#26200)
- Add randomize_block_order() API (#25568)
- Add random_sample() API (#24492)
- Add support for len(Dataset) (#25152)
- Add UDF passthrough args to map_batches() (#25613)
- Add Concatenator preprocessor (#26526)
- Change range_arrow() API to range_table() (#24704)
💫 Enhancements:
- Autodetect dataset parallelism based on available resources and data size (#25883)
- Use polars for sorting (#25454)
- Support tensor columns in to_tf() and to_torch() (#24752)
- Add explicit resource allocation option via a top-level scheduling strategy (#24438)
- Spread actor pool actors evenly across the cluster by default (#25705)
- Add ray_remote_args to read_text() (#23764)
- Add max_epoch argument to iter_epochs() (#25263)
- Add Pandas-native groupby and sorting (#26313)
- Support push-based shuffle in groupby operations (#25910)
- More aggressive memory releasing for Dataset and DatasetPipeline (#25461, #25820, #26902, #26650)
- Automatically cast tensor columns on Pandas UDF outputs (#26924)
- Better error messages when reading from S3 (#26619, #26669, #26789)
- Make dataset splitting more efficient and stable (#26641, #26768, #26778)
- Use sampling to estimate in-memory data size for Parquet data source (#26868)
- De-experimentalized lazy execution mode (#26934)
🔨 Fixes:
- Fix pipeline pre-repeat caching (#25265)
- Fix stats construction for from_*() APIs (#25601)
- Fixes label tensor squeezing in to_tf() (#25553)
- Fix stage fusion between equivalent resource args (fixes BatchPredictor) (#25706)
- Fix tensor extension string formatting (repr) (#25768)
- Workaround for unserializable Arrow JSON ReadOptions (#25821)
- Make ActorPoolStrategy kill pool of actors if exception is raised (#25803)
- Fix max number of actors for default actor pool strategy (#26266)
- Fix byte size calculation for non-trivial tensors (#25264)
Ray Train
Ray Train has received a major expansion of scope with Ray 2.0.
In particular, the Ray Train module now contains:
- Trainers
- Predictors
- Checkpoints
for common different ML frameworks including Pytorch, Tensorflow, XGBoost, LightGBM, HuggingFace, and Scikit-Learn. These API help provide end-to-end usage of Ray libraries in Ray AIR workflows.
🎉 New Features:
- The Trainer API is now deprecated for the new Ray AIR Trainers API. Trainers for Pytorch, Tensorflow, Horovod, XGBoost, and LightGBM are now in Beta. (#25570)
- ML framework-specific Predictors have been moved into the
ray.trainnamespace. This provides streamlined API for offline and online inference of Pytorch, Tensorflow, XGBoost models and more. (#25769 #26215, #26251, #26451, #26531, #26600, #26603, #26616, #26845) - ML framework-specific checkpoints are introduced. Checkpoints are consumed by Predictors to load model weights and information. (#26777, #25940, #26532, #26534)
💫 Enhancements:
- Train and Tune now use the same reporting and checkpointing API (#24772, #25558)
- Add tunable ScalingConfig dataclass (#25712)
- Randomize block order by default to avoid hotspots (#25870)
- Improve checkpoint configurability and extend results (#25943)
- Improve prepare_data_loader to support multiple batch data types (#26386)
- Discard returns of train loops in Trainers (#26448)
- Clean up logs, reprs, warning s(#26259, #26906, #26988, #27228, #27519)
📖 Documentation:
- Update documentation to use new Train API (#25735)
- Update documentation to use session API (#26051, #26303)
- Add Trainer user guide and update Trainer docs (#27570, #27644, #27685)
- Add Predictor documentation (#25833)
- Replace to_torch with iter_torch_batches (#27656)
- Replace to_tf with iter_tf_batches (#27768)
- Minor doc fixes (#25773, #27955)
🏗 Architecture refactoring:
- Clean up ray.train package (#25566)
- Mark Trainer interfaces as Deprecated (#25573)
🔨 Fixes:
- An issue with GPU ID detection and assignment was fixed. (#26493)
- Fix AMP for models with a custom
__getstate__method (#25335) - Fix transformers example for multi-gpu (#24832)
- Fix ScalingConfig key validation (#25549)
- Fix ResourceChangingScheduler integration (#26307)
- Fix auto_transfer cuda device (#26819)
- Fix BatchPredictor.predict_pipelined not working with GPU stage (#27398)
- Remove rllib dependency from tensorflow_predictor (#27688)
Ray Tune
🎉 New Features:
- The Tuner API is the new way of running Ray Tune experiments. (#26987, #26987, #26961, #26931, #26884, #26930)
- Ray Tune and Ray Train now have the same API for reporting (#25558)
- Introduce tune.with_resources() to specify function trainable resources (#26830)
- Add Tune benchmark for AIR (#26763, #26564)
- Allow Tuner().restore() from cloud URIs (#26963)
- Add top-level imports for Tuner, TuneConfig, move CheckpointConfig (#26882)
- Add resume experiment options to Tuner.restore() (#26826)
- Add checkpoint_frequency/checkpoint_at_end arguments to CheckpointConfig (#26661)
- Add more config arguments to Tuner (#26656)
- Better error message for Tune nested tasks / actors (#25241)
- Allow iterators in tune.grid_search (#25220)
- Add
get_dataframe()method to result grid, fix config flattening (#24686)
💫 Enhancements:
- Expose number of errored/terminated trials in ResultGrid (#26655)
- remove fully_executed from Tune. (#25750)
- Exclude in remote storage upload (#25544)
- Add
TempFileLock(#25408) - Add annotations/set scope for Tune classes (#25077)
📖 Documentation:
- Improve Tune + Datasets documentation (#25389)
- Tune examples better navigation, minor fixes (#24733)
🏗 Architecture refactoring:
- Consolidate checkpoint manager 3: Ray Tune (#24430)
- Clean up ray.tune scope (remove stale objects in all) (#26829)
🔨 Fixes:
- Fix k8s release test + node-to-node syncing (#27365)
- Fix Tune custom syncer example (#27253)
- Fix tune_cloud_aws_durable_upload_rllib_* release tests (#27180)
- Fix test_tune (#26721)
- Larger head node for tune_scalability_network_overhead weekly test (#26742)
- Fix tune-sklearn notebook example (#26470)
- Fix reference to
dataset_tune(#25402) - Fix Tune-Pytorch-CIFAR notebook example (#26474)
- Fix documentation testing (#26409)
- Fix
set_tune_experiment(#26298) - Fix GRPC resource exhausted test for tune trainables (#24467)
Ray Serve
🎉 New Features:
- We are excited to introduce you to the 2.0 API centered around multi-model composition API, operation API, and production stability. (#26310,#26507,#26217,#25932,#26374,#26901,#27058,#24549,#24616,#27479,#27576,#27433,#24306,#25651,#26682,#26521,#27194,#27206,#26804,#25575,#26574)
- Deployment Graph API is the new API for model composition. It provides a declarative layer on top of the 1.x deployment API to help you author performant inference pipeline easily. (#27417,#27420,#24754,#24435,#24630,#26573,#27349,#24404,#25424,#24418,#27815,#27844,#25453,#24629)
- We introduced a new K8s native way to deploy Ray Serve. Along with a brand new REST API to perform deployment, update, and configure. (#25935,#27063,#24814,#26093,#25213,#26588,#25073,#27000,#27444,#26578,#26652,#25610,#25502,#26096,#24265,#26177,#25861,#25691,#24839,#27498,#27561,#25862,#26347)
- Serve can now survive Ray GCS failure. This used to be a single-point-of-failure in Ray Serve's architecture. Now, when the GCS goes down, Serve can continue to Serve traffic. We recommend you to try out this feature and give us feedback! (#25633,#26107,#27608,#27763,#27771,#25478,#25637,#27526,#27674,#26753,#26797,#24560,#26685,#26734,#25987,#25091,#24934)
- Autoscaling has been promoted to stable. Additionally, we added a scale to zero support. (#25770,#25733,#24892,#26393)
- The documentation has been revamped. Check them at rayserve.org (#24414,#26211,#25786,#25936,#26029,#25830,#24760,#24871,#25243,#25390,#25646,#24657,#24713,#25270,#25808,#24693,#24736,#24524,#24690,#25494)
💫 Enhancements:
- Serve natively supports deploying predictor and checkpoints from Ray AI Runtime (#26026,#25003,#25537,#25609,#25962,#26494,#25688,#24512,#24417)
- Serve now supports scaling Gradio application (#27560)
- Java Client API, marking the complete alpha release Java API (#22726)
- Improved out-of-box performance by using uvicorn with uvloop (#25027)
RLlib
🎉 New Features:
- In 2.0, RLlib is introducing an object-oriented configuration API instead of using a python dict for algorithm configuration (#24332, #24374, #24375, #24376, #24433, #24576, #24650, #24577, #24339, #24687, #24775, #24584, #24583, #24853, #25028, #25059, #25065, #25066, #25067, #25256, #25255, #25278, #25279)
- RLlib is introducing a Connectors API (alpha). Connectors are a new component that handles transformations on inputs and outputs of a given RL policy. (#25311, #25007, #25923, #25922, #25954, #26253, #26510, #26645, #26836, #26803, #26998, #27016)
- New improvements to off-policy estimators, including a new Doubly-Robust Off-Policy Estimator implementation (#24384, #25107, #25056, #25899, #25911, #26279, #26893)
- CRR Algorithm (#25459, #25667, #25905, #26142, #26304, #26770, #27161)
- Feature importance evaluation for offline RL (#26412)
- RE3 exploration algorithm TF2 framework support (#25221)
- Unified replay Buffer API (#24212, #24156, #24473, #24506, #24866, #24683, #25841, #25560, #26428)
💫 Enhancements:
- Improvements to RolloutWorker / Env fault tolerance (#24967, #26134, #26276, #26809)
- Upgrade gym to 0.23 (#24171), Bump gym dep to 0.24 (#26190)
- Agents has been renamed to Algorithms (#24511, #24516, #24739, #24797, #24841, #24896, #25014, #24579, #25314, #25346, #25366, #25539, #25869)
- Execution Plan API is now deprecated. Training step function API is the new way of specifying RLlib algorithms (#23454, #24488, #2450, #24212, #24165, #24545, #24507, #25076, #25624, #25924, #25856, #25851, #27344, #24423)
- Policy V2 subclassing implementation migration (#24742, #24746, #24914, #25117, #25203, #25078, #25254, #25384, #25585, #25871, #25956, #26054)
- Allow passing **kwargs to action distribution. (#24692)
- Deprecation: Replace remaining evaluation_num_episodes with
evaluation_duration. (#26000)
🔨 Fixes:
- Multi-GPU learner thread key error in MA-scenarios (#24382)
- Add release learning tests for SlateQ (#24429)
- APEX-DQN replay buffer config validation fix. (#24588)
- Automatic sequencing in function timeslice_along_seq_lens_with_overlap (#24561)
- Policy Server/Client metrics reporting fix (#24783)
- Re-establish dashboard performance tests. (#24728)
- Bandit tf2 fix (+ add tf2 to test cases). (#24908)
- Fix estimated buffer size in replay buffers. (#24848)
- Fix RNNSAC example failing on CI + fixes for recurrent models for other Q Learning Algos. (#24923)
- Curiosity bug fix. (#24880)
- Auto-infer different agents' spaces in multi-agent env. (#24649)
- Fix the bug “WorkerSet.stop() will raise error if
self._local_workeris None (e.g. in evaluation worker sets)”. (#25332) - Fix Policy global timesteps being off by init sample batch size. (#25349)
- Disambiguate timestep fragment storage unit in replay buffers. (#25242)
- Fix the bug where on GPU, sample_batch.to_device() only converts the device and does not convert float64 to float32. (#25460)
- Fix faulty usage of get_filter_config in ComplexInputNextwork
(#25493) - Custom resources per worker should get added to default_resource_request (#24463)
- Better default values for training_intensity and
target_network_update_freqfor R2D2. (#25510) - Fix multi agent environment checks for observations that contain only some agents' obs each step. (#25506)
- Fixes PyTorch grad clipping logic and adds grad clipping to QMIX. (#25584)
- Discussion 6432: Automatic train_batch_size calculation fix. (#25621)
- Added meaningful error for multi-agent failure of SampleCollector in case no agent steps in episode. (#25596)
- Replace torch.range with torch.arange. (#25640)\
- Fix the bug where there is no gradient clipping in QMix. (#25656)
- Fix sample batch concatination. (#25572)
- Fix action_sampler_fn call in TorchPolicyV2 (obs_batch instead of
input_dictarg). (#25877) - Fixes logging of all of RLlib's Algorithm names as warning messages. (#25840)
- IMPALA/APPO multi-agent mix-in-buffer fixes (plus MA learningt ests). (#25848)
- Move offline input into replay buffer using rollout ops in CQL. (#25629)
- Include SampleBatch.T column in all collected batches. (#25926)
- Add timeout to filter synchronization. (#25959)
- SimpleQ PyTorch Multi GPU fix (#26109)
- IMPALA and APPO metrics fixes; remove deprecated
async_parallel_requestsutility. (#26117) - Added 'episode.hist_data' to the 'atari_metrics' to nsure that custom metrics of the user are kept in postprocessing when using Atari environments. (#25292)
- Make the dataset and json readers batchable (#26055)
- Fix Issue 25696: Output writers not working w/ multiple workers. (#25722)
- Fix all the erroneous on_trainer_init warning. (#26433)
- In env check, step only expected agents. (#26425)
- Make DQN update_target use only trainable variables. (#25226)
- Fix FQE Policy call (#26671)
- Make queue placement ops blocking (#26581)
- Fix memory leak in APEX_DQN (#26691)
- Fix MultiDiscrete not being one-hotted correctly (#26558)
- Make IOContext optional for DatasetReader (#26694)
- Make sure we step() after adding init_obs. (#26827)
- Fix ModelCatalog for nested complex inputs (#25620)
- Use compress observations where replay buffers and image obs are used in tuned examples (#26735)
- Fix SampleBatch.split_by_episode to use dones if episode id is not available (#26492)
- Fix torch None conversion in
torch_utils.py::convert_to_torch_tensor. (#26863) - Unify gnorm mixin for tf and torch policies. (#26102)
Ray Workflows
🎉 New Features:
- Support ray client (#26702)
- Http event is supported (#26010)
- Support retry_exceptions (#26913)
- Support queuing in workflow (#24697)
- Make status indexed (#24767)
🔨 Fixes:
- Push logs to drivers correctly (#24490)
- Make resume no side effect (#26918)
- Make the max_retries aligned with ray (#26350)
🏗 Architecture refactoring:
- Rewrite workflow execution engine (#25618)
- Simplify the resume flow (#24594)
- Deprecate step and use bind (#26232)
- Deprecate virtual actor (#25394)
- Refactor the exception processing (#26398)
Ray Core and Ray Clusters
Ray Core
🎉 New Features:
- Ray State API is now at alpha. You can access the live information of tasks, actors, objects, placement groups, and etc. through Ray CLI (summary / list / get) and Python SDK. See the Ray State API documentation for more information.
- Support generators for tasks with multiple return values (#25247)
- Support GCS Fault tolerance.(#24764, #24813, #24887, #25131, #25126, #24747, #25789, #25975, #25994, #26405, #26421, #26919)
💫 Enhancements:
- Allow failing new tasks immediately while the actor is restarting (#22818)
- Add more accurate worker exit (#24468)
- Allow user to override global default for max_retries (#25189)
- Export additional metrics for workers and Raylet memory (#25418)
- Push message to driver when a Raylet dies (#25516)
- Out of Disk prevention (#25370)
- ray.init defaults to an existing Ray instance if there is one (#26678)
- Reconstruct manually freed objects (#27567)
🔨 Fixes:
- Fix a task cancel hanging bug (#24369)
- Adjust worker OOM scores to prioritize the raylet during memory pressure (#24623)
- Fix pull manager deadlock due to object reconstruction (#24791)
- Fix bugs in data locality aware scheduling (#25092)
- Fix node affinity strategy when resource is empty (#25344)
- Fix object transfer resend protocol (#26349)
🏗 Architecture refactoring:
- Raylet and GCS schedulers share the same code (#23829)
- Remove multiple core workers in one process (#24147, #25159)
Ray Clusters
🎉 New Features:
- The KubeRay operator is now the preferred tool to run Ray on Kubernetes.
- Ray Autoscaler + KubeRay operator integration is now beta.
💫 Enhancements:
- Check out the newly revamped docs!
🔨 Fixes:
- Previously deprecated fields,
head_node,worker_nodes,head_node_type,default_worker_node_type,autoscaling_mode,target_utilization_fractionare removed. Check out the migration guide to learn how to migrate to the new versions.
Ray Client
🎉 New Features:
- Support for configuring request metadata for client gRPC (#24946)
💫 Enhancements:
- Remove 2 GiB size limit on remote function arguments (#24555)
🔨 Fixes:
- Fix excessive memory usage when submitting large remote arguments (#24477)
Dashboard
🎉 New Features:
- The new dashboard UI is now to default dashboard. Please leave any feedback about the dashboard on Github Issues or Discourse! You can still go to the legacy dashboard UI by clicking “Back to legacy dashboard”.
- New Dashboard UI now shows all ray jobs. This includes jobs submitted via the job submission API and jobs launched from python scripts via ray.init().
- New Dashboard UI now shows worker nodes in the main node tab
- New Dashboard UI now shows more information in the actors tab
Breaking changes:
- The job submission list_jobs API endpoint, CLI command, and SDK function now returns a list of jobs instead of a dictionary from id to job.
- The Tune tab is no longer in the new dashboard UI. It is still available in the legacy dashboard UI but will be removed.
- The memory tab is no longer in the new dashboard UI. It is still available in the legacy dashboard UI but will be removed.
🔨 Fixes:
- We reduced the memory usage of the dashboard. We are no longer caching logs and we cache a maximum of 1000 actors. As a result of this change, node level logs can no longer be accessed in the legacy dashboard.
- Jobs status error message now properly truncates logs to 10 lines. We also added a max characters of 20000 to avoid passing too much data.
Many thanks to all those who contributed to this release!
@ujvl, @xwjiang2010, @EricCousineau-TRI, @ijrsvt, @waleedkadous, @captain-pool, @olipinski, @danielwen002, @amogkam, @bveeramani, @kouroshHakha, @jjyao, @larrylian, @goswamig, @hanming-lu, @edoakes, @nikitavemuri, @enori, @grechaw, @truelegion47, @alanwguo, @sychen52, @ArturNiederfahrenhorst, @pcmoritz, @mwtian, @vakker, @c21, @rberenguel, @mattip, @robertnishihara, @cool-RR, @iamhatesz, @ofey404, @raulchen, @nmatare, @peterghaddad, @n30111, @fkaleo, @Riatre, @zhe-thoughts, @lchu-ibm, @YoelShoshan, @Catch-Bull, @matthewdeng, @VishDev12, @valtab, @maxpumperla, @tomsunelite, @fwitter, @liuyang-my, @peytondmurray, @clarkzinzow, @VeronikaPolakova, @sven1977, @stephanie-wang, @emjames, @Nintorac, @suquark, @javi-redondo, @xiurobert, @smorad, @brucez-anyscale, @pdames, @jjyyxx, @dmatrix, @nakamasato, @richardliaw, @juliusfrost, @anabranch, @christy, @Rohan138, @cadedaniel, @simon-mo, @mavroudisv, @guidj, @rkooo567, @orcahmlee, @lixin-wei, @neigh80, @yuduber, @JiahaoYao, @simonsays1980, @gjoliver, @jimthompson5802, @lucasalavapena, @zcin, @clarng, @jbn, @DmitriGekhtman, @timgates42, @charlesjsun, @Yard1, @mgelbart, @wumuzi520, @sihanwang41, @ghost, @jovany-wang, @siavash119, @yuanchi2807, @tupui, @jianoaix, @sumanthratna, @code-review-doctor, @Chong-Li, @FedericoGarza, @ckw017, @Makan-Ar, @kfstorm, @flanaman, @WangTaoTheTonic, @franklsf95, @scv119, @kvaithin, @wuisawesome, @jiaodong, @mgerstgrasser, @tiangolo, @architkulkarni, @MyeongKim, @ericl, @SongGuyang, @avnishn, @chengscott, @shrekris-anyscale, @Alyetama, @iycheng, @rickyyx, @krfricke, @sijieamoy, @kimikuri, @czgdp1807, @michalsustr