Change8

ray-2.57.0

Breaking Changes
📦 rayView on GitHub →
4 breaking14 features🐛 33 fixes3 deprecations🔧 42 symbols

Summary

This release introduces significant improvements to Ray Data with DataSourceV2 enabled by default and Hash Shuffle V2. Ray Serve enhances its HAProxy ingress with a new PyPI package and gRPC support, while Ray Core adds an embedded RocksDB backend for GCS fault tolerance.

⚠️ Breaking Changes

  • The HAProxy ingress is now distributed as the `ray-haproxy` PyPI package instead of being compiled into images. Users should install this package separately if they rely on HAProxy. The default HAProxy binary is now from this package.
  • The `write_lance(mode=CREATE)` behavior has changed from silently overwriting to raising an error. To overwrite, explicitly use `mode=OVERWRITE`.
  • The `DataSourceV2` is now enabled by default. If you encounter issues with `read_parquet` or similar functions, you may need to investigate compatibility with the new scan/listing infrastructure.
  • Hash Shuffle V2 replaces the aggregator actor pool with stateless task-based operators (`ShuffleMapOp` -> `ShuffleReduceOp`). This change might affect performance characteristics or debugging workflows that relied on the previous actor pool.

Migration Steps

  1. Install the `ray-haproxy` PyPI package if you are using the HAProxy ingress.
  2. If you were relying on the old behavior of `write_lance(mode=CREATE)` silently overwriting, change your calls to `write_lance(mode=OVERWRITE)`.
  3. If you encounter issues with `read_parquet` or similar functions after upgrading, consider disabling `DataSourceV2` temporarily via `DataContext.use_datasource_v2 = False` to diagnose.
  4. Migrate calls to `apply_chat_template`, `tokenize`, and `detokenize` to the `*_stage` form.
  5. Migrate the Daft dependency from `getdaft` to `daft`.

✨ New Features

  • `DataSourceV2` is now enabled by default for `read_parquet` and similar functions, offering row-group-aware chunking and predicate splitting.
  • Hash Shuffle V2 is introduced, replacing the aggregator actor pool with stateless task-based operators for improved scalability and resource management. It now supports `join`, multi-input reduce, downstream map fusion, and reducer remote args.
  • A `Catalog` abstraction with a `UnityCatalog` implementation is added, supporting Unity Catalog for `read_*` operations and write support for Parquet and Iceberg.
  • `read_zarr` and `read_lerobot` functions are added for reading Zarr and LeRobot v3 datasets respectively.
  • HAProxy ingress is now distributed as the `ray-haproxy` PyPI package and is the default binary.
  • gRPC support has been added to the HAProxy direct-ingress path, including streaming, metrics, and custom request IDs.
  • Experimental KV-cache-aware request routing for Ray Serve LLM has been added, tracking replica KV state and routing based on prefill/decode token load.
  • An embedded RocksDB storage backend for GCS fault tolerance is added, selectable via `RAY_gcs_storage=rocksdb` and `RAY_gcs_storage_path`. GCS fault tolerance no longer requires an external Redis instance.
  • A public API for topology-aware scheduling has been added.
  • GPU support for `Aggregate` has been added.
  • Custom operator stats can now be added to capture worker-side metrics during task execution.
  • Usage collection has been refactored into an extensible `UsageCallback`.
  • The `from_blocks` function is exported from `ray.data`.
  • Support for `rapidsmpf-26.4.0` has been added.

🐛 Bug Fixes

  • Fixed `TensorDtype.__from_arrow__` crash on empty tensor columns.
  • Fixed Arrow-backed `to_pandas` regressions with an opt-out flag and int/float block overflow handling.
  • Fixed read-only hash array crash in hash partition.
  • Fixed streaming-generator hang on a plasma-resident return object.
  • Fixed Parquet write overflow for string/binary columns larger than 2 GiB.
  • Fixed Parquet sampling hang on a permanent `OSError`.
  • Fixed the BigQuery datasink to handle empty blocks.
  • Made `PandasBlock.size_bytes` deterministic.
  • Propagated branch in `_append_and_commit()` for the Iceberg overwrite save mode.
  • Propagated `isolate_read_workers` to `DatasourceV2`.
  • Fixed cross-region S3 bucket access in the obstore download path.
  • Restored `safe_round` in the `ExecutionResources` hot path.
  • Logged both the wrapped and wrapper exception in `iterate_with_retry`.
  • Added `tf-keras` to the `text_embedding` pip packages.
  • Fixed `build_processor` failing with vLLM >= 0.19, corrected its `config` type hint, and added `request_timeout_s` to `ServeDeploymentProcessor` to prevent indefinite hangs.
  • Fixed type hints in `throughput_solver.py`.
  • Hide Ray Data internal frames from user-code error tracebacks.
  • Run projection/predicate pushdown before limit pushdown, block optimization of non-deterministic expressions, and make fuse checks consistent between the logical and physical optimizers.
  • Add a two-mode block metadata fetch behind a single `MetadataFetcher` interface.
  • Use work stealing for file listing and a dynamic work queue for traversals.
  • Speed up `ExecutionResources` and the reservation/budget loops on the scheduling hot path.
  • Fix `O(n^2)` schema reconciliation in `unify_schemas` and avoid per-column `Series` materialization in tensor-column casting.
  • Decouple collate and memory pinning in `iter_torch_batches`, add per-stage training-thread blocking attribution, bound in-flight `iter_threaded` items, and finalize after reordering under `preserve_order`.
  • Add default logical memory for map operators, wire the materializing-op filter into `OpResourceAllocator` budgeting, and move `estimate_object_store_usage` into the physical op.
  • Decrease the downstream backpressure ratio to 2.0.
  • Route native `S3FileSystem` downloads to the PyArrow threaded path.
  • Size hash-shuffle aggregators via bounded online sampling and add a timeout to the batched `ray.get` when fetching partitions.
  • Replace manual block reference accounting with Ray Core out-of-scope object callbacks.
  • Default `read_numpy` to `allow_pickle=False` and make it manually configurable.
  • Expand `DistributionTracker` with `merge()` and p25/p75, and add dead node counts and detected issues to usage collection.
  • 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.
  • Delay the "cluster resources not enough" warning until an operator is persistently starved, and lower the high-memory warning threshold.
  • Remove `ExecutionPlan`, `_num_outputs`, `batch_format` on `AllToAllOperators`, and `InheritBatchFormatRule`; use `input_dependencies` in logical operators.

Affected Symbols

⚡ Deprecations

  • Low-level scheduling APIs (`DataContext.scheduling_strategy`, `actor_locality_enabled`, `exclude_resources`, `local://`) are deprecated ahead of the actor-only rearchitecture.
  • The `image` row column is deprecated.
  • The `PrepareImageStage` has been removed.