# Ray 2.56.0 — Ray-2.56.0 - Product: Ray (https://whatsnew.fyi/product/ray) - Vendor: Anyscale - Date: 2026-06-29 - Version: 2.56.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.56.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.56.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Support multiple datasets per cluster via subcluster labels and resource partitioning - **added** — Add Dataset.mix() public API and MixOperator for weighted dataset mixing - **added** — Implement new DataSourceV2 framework with ParquetDatasourceV2, chunked reader, predicate splitting, and listing/scanner infrastructure - **added** — Add batch_size='auto' to map_batches to derive batch row count from target row batch size - **added** — Implement distributed upsert for Iceberg using task-based merge algorithm - **added** — Add include_row_hash to read_parquet - **added** — Add JAX data iterator - **added** — Expose isolate_read_workers flag to run read tasks on isolated worker processes - **added** — Expose default_map_logical_memory_enabled flag to set default logical memory for map operators - **added** — Support predicate pushdown for Lance format - **added** — Support per-partition start_offset and end_offset for read_kafka - **added** — Add obstore async download backend for download operator - **added** — Support UDF retries on transient exceptions - **added** — Add GPU-domain-aware placement groups using label locality for packing bundles onto nodes with ray.io/gpu-domain label - **added** — Add initial Kubernetes in-place pod resizing support for Autoscaler v2 - **added** — Introduce session-sticky routing via consistent hashing with ConsistentHashRouter - **added** — Add CapacityQueueRouter for supply-constrained workloads - **changed** — Fix iter_batches spilling by replacing make_async_gen with iter_threaded and reducing buffered batches - **changed** — Re-architect Ray Serve LLM by decoupling request handling from token streaming response path - **deprecated** — Deprecate ConcurrencyCapBackpressurePolicy, DataIterator.to_torch, and pandas UDF batches #### 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_batches` stability 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) and `CapacityQueueRouter` (#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-domain` label 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 and `MixOperator` for 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'` to `map_batches` to 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_hash` to `read_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_offset` and `end_offset` for `read_kafka` (#61620) * Add obstore async download backend for download operator (#61735) * Support UDF retries on transient exceptions (#63023) ###### 💫 Enhancements * Fix `iter_batches` spilling by replacing `make_async_gen` with `iter_threaded` and reducing buffered batches (#63660, #63682) * Gate `restore_original_order` in `iter_batches` behind `preserve_order` (#63792) * Convert `drop_columns` to a `Project` logical operator when input schema is known (#63813) * Make `ConcatAggregation` and `TurbopufferDatasink` use `polars` for sorting (#61904) * Boost and vectorize `hash_partition` with `sort_indices`, zero-copy slices, and pandas (#63498, #62757, #63152, #62587) * Enable `GPU_SHUFFLE` in `grouped_data.py` (#62410) * Eager `StarExpr` expansion, schema inference for non-black-box UDFs, and Expressions struct support (#63776, #63387, #62560) * Make logging configurable via `RAY_DATA_LOG_LEVEL` and log `RAY_DATA` env vars at execution start (#63487, #63380) * Display and track logical memory in progress bar (#63379) * Honor `compute=` in `filter(expr=...)` and deprecate `concurrency=` (#63576) * Enable filter pushdown through `StreamingRepartition` and 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 `Ta _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.56.0]_