Change8

ray-2.56.0

Breaking Changes
📦 rayView on GitHub →
1 breaking17 features🐛 25 fixes4 deprecations🔧 25 symbols

Summary

This release focuses heavily on Ray Data stability, introducing features like multi-dataset support, automatic batch sizing, and improved memory management. Ray Serve received significant LLM performance enhancements via re-architecture and new routing policies, while Ray Core introduced GPU-domain-aware placement groups and initial Kubernetes in-place pod resizing support.

⚠️ Breaking Changes

  • The subcluster label key used for Ray Data multi-dataset support has been renamed from `__subcluster__` to `ray-subcluster`. Update any scripts or configurations relying on the old label key.

Migration Steps

  1. If you were relying on the deprecated `concurrency=` parameter in `filter(expr=...)`, replace it with the `compute=` parameter.
  2. Update any code using `DataIterator.to_torch()` to use alternative methods or update to use PyArrow directly.
  3. Update any configuration or code relying on the subcluster label key `__subcluster__` to use `ray-subcluster` instead.

✨ New Features

  • Ray Data now supports running multiple datasets per cluster using subcluster labels and resource partitioning.
  • Added public API `Dataset.mix()` and `MixOperator` for weighted dataset mixing.
  • Introduced the new DataSourceV2 framework, including `ParquetDatasourceV2`, chunked reader, predicate splitting, and listing/scanner infrastructure.
  • Added `batch_size='auto'` to `map_batches` to automatically derive batch row count from target row batch size.
  • Implemented distributed upsert for Iceberg using a task-based merge algorithm.
  • Added `include_row_hash` to `read_parquet`.
  • Added JAX data iterator support.
  • Exposed flag `isolate_read_workers` to run read tasks on isolated worker processes.
  • Exposed flag `default_map_logical_memory_enabled` to set default logical memory for map operators.
  • Support for predicate pushdown for Lance format.
  • Support for per-partition `start_offset` and `end_offset` for `read_kafka`.
  • Added obstore async download backend for the download operator.
  • Support for UDF retries on transient exceptions.
  • Ray Serve LLM serving path re-architected, decoupling request handling from token streaming response path, leading to performance improvements.
  • Introduced new Ray Serve routing policies: session-sticky routing via consistent hashing with `ConsistentHashRouter` and `CapacityQueueRouter` for supply-constrained workloads.
  • Added GPU-domain-aware placement groups using label locality, enabling packing onto nodes sharing a `ray.io/gpu-domain` label.
  • Added initial Kubernetes in-place pod resizing support for Autoscaler v2, allowing resizing of CPU and memory on existing worker pods.

🐛 Bug Fixes

  • Fixed `iter_batches` spilling by replacing `make_async_gen` with `iter_threaded` and reducing buffered batches.
  • Fixed `get_or_create_stats_actor` crash in Ray Client mode.
  • Fixed datasource pushdown crashes for generic `UDFExpr` filter predicates.
  • Fixed hash-shuffle aggregator memory estimation issues (metadata propagation, node-size clamp, column pruning).
  • Fixed `CheckpointConfig` `FileNotFoundError` on Azure Blob Storage.
  • Fixed silent credential drop for fsspec-S3 in the download expression.
  • Fixed missing f-string prefix in `_concatenate_extension_column`.
  • Fixed `HashAggregate` duplicate group rows for `AggregateFnV2`.
  • Fixed JSONL read retry with advanced file cursor.
  • Fixed `read_parquet` `ArrowNotImplementedError` for nested column types exceeding ~2GB row group.
  • Fixed `read_parquet` nested-type fallback and parquet scanner memory accumulation.
  • Fixed memory leak in `DataIterator.to_torch()` by switching to `PyArrow`.
  • Fixed `ZipOperator` freeing shared blocks via `_split_at_indices`.
  • Fixed concurrent writes race condition in `write_parquet`.
  • Fixed GPU shuffle output ordering when using `ShuffleStrategy.GPU_SHUFFLE`.
  • Fixed incorrect `DatasetStat` uuid propagation.
  • Fixed issue when `DATA_ENABLE_OP_RESOURCE_RESERVATION=False` resulted in None.
  • Fixed filesystem compatibility check for fsspec-wrapped `PyFileSystem`.
  • Fixed autoscaler bug blocking timely release of leased resources.
  • Fixed inconsistent `nan_is_null`/nans-as-nulls semantics in encoder.
  • Skipped unconditional null strip in `find_partition_index`.
  • Fixed V1 `_split_predicate_by_columns` correctness.
  • Avoided importing cudf in `_is_cudf_dataframe` when cudf is not loaded.
  • Reverted raw-modulo hash partition fast path.
  • Removed `tfx-bsl` support from `read_tfrecords`.

Affected Symbols

⚡ Deprecations

  • The parameter `concurrency=` in `filter(expr=...)` is deprecated; use `compute=` instead.
  • The `DataIterator.to_torch` method is deprecated.
  • Using pandas UDF batches is deprecated.
  • The `ConcurrencyCapBackpressurePolicy` is deprecated.