# Ray changelog > A distributed runtime for scaling Python and machine-learning workloads. - Vendor: Anyscale - Category: AI - Official site: https://www.ray.io - Tracked by: What's New (https://whatsnew.fyi/product/ray) - Harvested from: GitHub (ray-project/ray) - Entries below: 25 (newest first) 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'. ## Releases ### 2.57.0 — Ray-2.57.0 - Date: 2026-08-11 - Version: 2.57.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.57.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.57.0 - **added** — Enable DataSourceV2 by default via DataContext.use_datasource_v2 for improved row-group-aware chunking and predicate splitting - **added** — Implement task-based hash shuffle v2 with ShuffleMapOp and ShuffleReduceOp operators supporting join, multi-input reduce, downstream map fusion, and reducer remote args - **added** — Add Catalog abstraction with UnityCatalog implementation for read operations and Unity Catalog write support for Parquet and Iceberg - **added** — Add read_zarr for Zarr datasets and read_lerobot for LeRobot v3 datasets - **added** — Add PushdownCountFiles optimization to answer count() from Parquet footers - **added** — Add common subexpression elimination to the expression optimizer - **added** — Add GPU support for Aggregate operator - **added** — Make dataset iteration metrics queryable per split - **added** — Add custom operator stats to capture worker-side metrics during task execution - **added** — Export from_blocks from ray.data - **added** — Add embedded RocksDB storage backend for GCS fault tolerance selectable with RAY_gcs_storage=rocksdb and RAY_gcs_storage_path - **added** — Add public API for topology-aware scheduling - **added** — Add gRPC support to HAProxy direct-ingress path including streaming, metrics, and custom request IDs - **added** — Add experimental KV-cache-aware request routing for Ray Serve LLM that tracks replica KV state and routes on prefill/decode token load - **changed** — Hide Ray Data internal frames from user-code error tracebacks - **changed** — Run projection and predicate pushdown before limit pushdown and make fuse checks consistent between logical and physical optimizers - **changed** — Use work stealing for file listing and dynamic work queue for traversals - **changed** — Speed up ExecutionResources and reservation/budget loops on the scheduling hot path - **changed** — Distribute HAProxy ingress as ray-haproxy PyPI package instead of compiled into images and make it the default HAProxy binary - **fixed** — Fix O(n^2) schema reconciliation in unify_schemas and avoid per-column Series materialization in tensor-column casting #### Highlights * **Ray Data:** In this Ray release, we've enabled `DataSourceV2` by default (#64821), so `read_parquet` and 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](https://github.com/ray-project/ray/pull/63598), [#64538](https://github.com/ray-project/ray/pull/64538), [#64687](https://github.com/ray-project/ray/pull/64687)). This lets shuffles reuse standard map/reduce scheduling, backpressure, and resource accounting. * **Ray Serve:** The HAProxy ingress is now distributed as the `ray-haproxy` PyPI 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=rocksdb` and `RAY_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 `DataSourceV2` by default via `DataContext.use_datasource_v2` (#64821) * New task-based hash shuffle v2 (`ShuffleMapOp` → `ShuffleReduceOp`) with `join`, multi-input reduce, downstream map fusion, and reducer remote args, behind an env flag (#63598, #64538, #64687, #64438, #64302, #64532, #64481) * Add a `Catalog` abstraction with a `UnityCatalog` implementation that can be passed to `read_*`, and Unity Catalog write support for Parquet and Iceberg (#64193, #64519) * Add `read_zarr` for Zarr datasets (#63003) and `read_lerobot` for LeRobot v3 datasets (#63821) * Add `PushdownCountFiles` optimization to answer `count()` 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_blocks` from `ray.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 `MetadataFetcher` interface (#64378) * Use work stealing for file listing and a dynamic work queue for traversals (#64675, #64388) * Speed up `ExecutionResources` and the reservation/budget loops on the scheduling hot path (#63964) * Fix `O(n^2)` schema reconciliation in `unify_schemas` and avoid per-column `Series` materialization in tensor-column casting (#64555, #64038) * Decouple collate and memory pinning in `iter_torch_batch _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.57.0]_ ### 2.56.1 — Ray-2.56.1 - Date: 2026-07-17 - Version: 2.56.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.56.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.56.1 - **fixed** — Fixed Arrow-backed to_pandas regressions by adding DataContext.enable_arrow_backed_pandas_conversion as an opt-out and reconciling divergent numeric column types before concatenation to avoid int64/double[pyarrow] overflow crashes - **fixed** — Fixed TensorDtype.__from_arrow__ crash on zero-size tensor elements by using an explicit row count instead of numpy's -1 dimension inference - **fixed** — Fixed a crash in hash partition caused by read-only hash arrays - **fixed** — Nullified _input_dependencies in _get_args so exporting operator args no longer triggers an exponential sanitize_for_struct call chain over fused operators - **changed** — Added protobuf >=7 compatibility to _proto_to_dict by binding to FieldDescriptor.is_repeated when the deprecated label attribute is absent - **fixed** — Fixed direct-streaming routing for body-aware routers by parsing the raw request body into a SimpleNamespace over routing-key fields so choose_replica receives the message body instead of raw bytes - **changed** — Upgraded the ONNX example from MobileNet v1 to MobileNet v3 via torchvision and pinned onnxscript in GPU/ml-build CI dep locks - **changed** — 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 - **fixed** — Disabled NCCL cuMem host buffer registration in CI pytests to stabilize GPU test runs #### Highlights - **Ray Data**: We added fixes for several `to_pandas` regressions 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 a `TensorDtype.__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-memory` before 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 `PrefixCacheAffinityRouter` no longer hang when `RAY_SERVE_LLM_ENABLE_DIRECT_STREAMING=1` (#64592, #64488). #### Ray Data ##### 🔨 Fixes - Fixed two Arrow-backed `to_pandas` regressions: added `DataContext.enable_arrow_backed_pandas_conversion` as 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 `-1` dimension inference (#64794, #64767). - Fixed a crash in hash partition caused by read-only hash arrays (#64584, #64552, #64559). - Nullified `_input_dependencies` in `_get_args` so exporting operator args no longer triggers an exponential `sanitize_for_struct` call chain over fused operators (#64412, #64316). #### Ray Serve ##### 🔨 Fixes - Added protobuf `>=7` compatibility to `_proto_to_dict` by binding to `FieldDescriptor.is_repeated` when the deprecated `label` attribute 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 `SimpleNamespace` over routing-key fields (`messages`, `prompt`) so `choose_replica` receives 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 `torchvision` and pinned `onnxscript` in 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 `cuMem` host buffer registration in CI pytests to stabilize GPU test runs (#64580, #64146). #### Documentation ##### 📖 Documentation - Repointed the ASHA Tune example links to the renamed `README` document, fixing the `fail_on_warning` ReadTheDocs build on the release line (#64761, #64630). - Updated the Python 3.10 CPU `pip freeze` dependency list for the Ray 2.56.0 release (#64447, #64357). ### 2.56.0 — Ray-2.56.0 - 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 - **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]_ ### 2.55.1 — Ray-2.55.1 - Date: 2026-04-22 - Version: 2.55.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.55.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.55.1 - **fixed** — SSH connectivity issue in the ray-llm image - **changed** — Upgrade apt packages in slim base - Fixes SSH connectivity issue in the `ray-llm` image (#62625 / #62718). - Upgrade apt packages in slim base (#62666 / #62717). ### 2.55.0 — Ray-2.55.0 - Date: 2026-04-15 - Version: 2.55.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.55.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.55.0 - **added** — Add DataSourceV2 API with scanner/reader framework, file listing, and file partitioning - **added** — Support GPU shuffle with rapidsmpf 26.2 - **added** — Add Kafka datasink, migrate to confluent-kafka, support datetime offsets - **added** — Add Turbopuffer datasink - **added** — Add 2-phase commit checkpointing with trie recovery and load method - **added** — Integrate queue-based autoscaling policy with task consumers - **added** — Enable autoscaling for GPU stages - **added** — Add random(), uuid(), cast, and map namespace support to Expressions - **added** — Add support for Arrow native fixed-shape tensor type - **added** — Support writing tensors to tfrecords - **added** — Add pathlib.Path support to read_* functions - **added** — Add cudf as a batch_format - **added** — Allow ActorPoolStrategy for read_datasource() via compute parameter - **added** — Introduce ExecutionCache for streamlined caching - **added** — Support strict=False mode for StreamingRepartition - **added** — Add monotonically increasing ID support - **changed** — Cache _map_task args, improve heap-based actor ranking, and improve actor pool map - **changed** — Optimize concat tables and PyArrow schema hashing - **changed** — Reduce default DownstreamCapacityBackpressurePolicy threshold to 50% - **changed** — Improve reproducibility for random APIs - **changed** — Port changes from lance-ray into Ray Data - **changed** — Enable PyArrow compute-to-expression conversion for predicate pushdown - **changed** — Upgrade to pyiceberg 0.11.0 and cap pandas to <3 - **changed** — Refactor logical operators to frozen dataclasses - **fixed** — Fix RCE in Arrow extension type deserialization from Parquet - **fixed** — Fix StreamingSplitDataIterator.schema() - **fixed** — Fix ParquetDatasource handling of FileSystemFactory.inspect - **fixed** — Fix read_parquet file-extension filtering for versioned object-store URIs - **fixed** — Fix wide_schema_pipeline_tensors cloudpickle deserialization - **fixed** — Fix OpBufferQueue race condition - **fixed** — Fix scheduling metrics computation - **fixed** — Fix OneHotEncoder max_categories to use global top-k instead of per-partition - **fixed** — Fix ReservationOpResourceAllocator resource borrowing for ActorPoolMapOperator - **fixed** — Fix DatabricksUCDatasource schema() shadowing by schema string attribute - **fixed** — Fix AliasExpr structural equality to respect rename flag - **fixed** — Fix _align_struct_fields failure with unaligned scalar fields - **fixed** — Fix min_scheduling_resources fallback to incremental_resource_usage - **fixed** — Fix output backpressure unblocking sequence for terminal ops - **fixed** — Fix multi-input operator object store memory attribution - **fixed** — Fix reference cycle by moving to module scope - **fixed** — Replace on_exit hook with __ray_shutdown__ to fix UDF cleanup race - **fixed** — Prevent Limit from getting pushed past map_groups - **fixed** — Propagate schema in empty _shuffle_block to fix ColumnNotFound in chained left joins - **fixed** — Clamp rolling utilization averages to zero - **fixed** — Fix floating point errors in TimeWindowAverageCalculator - **fixed** — Remove default task-level timeout and clamp end_offset in Kafka datasource - **fixed** — Avoid redundant reads in train_test_split - **fixed** — Return None when no outputs have been produced - **removed** — Remove legacy BlockList, locality_with_output, old callback API, and PyArrow 9.0 checks ##### Ray Data ###### 🎉 New Features - Add `DataSourceV2` API with scanner/reader framework, file listing, and file partitioning (#61220, #61615, #61997) - Support GPU shuffle with `rapidsmpf` 26.2 (#61371, #62062) - Add Kafka datasink, migrate to `confluent-kafka`, support `datetime` offsets (#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.Path` support to `read_*` functions (#61126) - Add `cudf` as a `batch_format` (#61329) - Allow `ActorPoolStrategy` for `read_datasource()` via `compute` parameter (#59633) - Introduce `ExecutionCache` for streamlined caching (#60996) - Support `strict=False` mode for `StreamingRepartition` (#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_task` args, heap-based actor ranking, actor pool map improvements (#61996, #62114, #61591) - Optimize concat tables and PyArrow schema hashing (#61315, #62108) - Reduce default `DownstreamCapacityBackpressurePolicy` threshold 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_dataset` configurable 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 `DataContext` in 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 `pyiceberg` 0.11.0; cap `pandas` to <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 `ParquetDatasource` handling of `FileSystemFactory.inspect` (#62065) - Fix `read_parquet` file-extension filtering for versioned object-store URIs (#61376) - Fix `wide_schema_pipeline_tensors` cloudpickle deserialization (#62149) - Fix `OpBufferQueue` race condition (#60828) - Fix scheduling metrics computation (#62031) - Fix `OneHotEncoder` `max_categories` to use global top-k instead of per-partition (#60790) - Fix `ReservationOpResourceAllocator` resource borrowing for `ActorPoolMapOperator` (#60882) - Fix `DatabricksUCDatasource` `schema()` shadowing by schema string attribute (#61282) - Fix `AliasExpr` st _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.55.0]_ ### 2.54.1 — Ray-2.54.1 - Date: 2026-03-25 - Version: 2.54.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.54.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.54.1 - **fixed** — 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 ##### 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.0 — Ray-2.54.0 - Date: 2026-02-18 - Version: 2.54.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.54.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.54.0 - **added** — Add checkpointing support to Ray Data - **added** — Add list operations, fixed-size arrays, string padding, logarithmic, trigonometric, arithmetic, and rounding to Compute Expressions - **added** — Add sql_params support to read_sql - **added** — Add AsList aggregation - **added** — Support CountDistinct aggregate - **added** — Add credential provider abstraction for Databricks UC datasource - **added** — Support callable classes for UDFExpr - **added** — Add autoscaler metrics to Data Dashboard - **added** — Add optional filesystem parameter to download expression - **added** — Allow specifying partitioning style or flavor in write_parquet() - **added** — Enable new cluster autoscaler by default - **added** — Add Queue-based autoscaling for TaskConsumer deployments with QueueMonitor actor support for Redis and RabbitMQ - **changed** — Improve numerical stability in scalers by handling near-zero values - **changed** — Update to PyArrow 23 - **changed** — Demote Sort from requiring preserve_order - **changed** — Use Arrow IPC for Arrow Schema serialization and deserialization - **changed** — Enable and tune DownstreamCapacityBackpressurePolicy - **changed** — Decouple Ray Train from Ray Data by removing top-level ray.data imports - **changed** — Move extension types to ray.data - **fixed** — Fuse MapBatches even if they modify the row count - **removed** — Remove deprecated TENSOR_COLUMN_NAME constant ##### 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_params` support to `read_sql` (#60030) - Add `AsList` aggregation (#59920) - Support `CountDistinct` aggregate (#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 `DefaultClusterAutoscalerV2` thresholds 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 `OpRuntimeMetrics` for 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 `OpMetrics` logging (#59907) - Progress reporting refactors (#59350, #59629, #59880) - Remove deprecated `TENSOR_COLUMN_NAME` constant (#60573) - Remove `meta_provider` parameter (#60379) - Decouple Ray Train from Ray Data by removing top-level `ray.data` imports (#60292) - Move extension types to ray.data (#59420) - Skip upscaling validation warning for fixed-size actor pools (#60569) - Make `StatefulShuffleAggregation.finalize` allow incremental streaming (#59972) - Revisit `OutputSplitter` semantics to avoid unnecessary buffer accumulation (#60237) - Update to PyArrow 23 (#60739, #59489) - Add `BackpressurePolicy` to streaming executor progress bar (#59637) - Support Arrow-based transformations for preprocessors (#59810) - `StandardScaler` preprocessor with Arrow format (#59906) - OneHotEncoder with Arrow format (#59890) 🔨 Fixes - Fuse `MapBatches` even if they modify the row count (#60756) - Don't push limit past `map_batches` by default (#60448) - Fix wrong type hint of other dataset in zip and union (#60653) - Fix `ActorPoolMapOperator` to guarantee dispatch of all given inputs (#60763) - Fix `ArrowInvalid` error when backfilling missing fields from map tasks (#60643) - Fix attribute error in `UnionOperator.clear_internal_output_queue` (#60538) - Fix `DefaultClusterAutoscalerV2` raising KeyError: 'CPU' (#60208) - Fix `ReorderingBundleQueue` handling of empty output sequences (#60470) - Fix task completion time without backpressure grafana panel metric name (#60481) - Fix Union operator blocking when preserve _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.54.0]_ ### 2.53.0 — Ray-2.53.0 - Date: 2025-12-20 - Version: 2.53.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.53.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.53.0 - **added** — Add Kafka as a native datasource for data ingestion - **added** — Add Dataset.summary() API for quick dataset inspection - **added** — Add Iceberg schema evolution, upsert, and overwrite support - **added** — Add should_continue_on_error for graceful error handling in batch inference - **added** — Add datetime compute expressions support - **added** — Enable expressions for grouped with_column in Ray Data - **added** — Add new utilization-based cluster autoscaler for Ray Data workloads - **added** — Add deployment topology visibility in Serve REST API to visualize deployment dependency graphs - **added** — Add external_scaler_enabled flag to application config for third-party autoscaler integration - **added** — Add node rank and local rank support to replica rank system for multi-node deployments - **added** — Add custom batch size function support in @serve.batch - **added** — Add policy state persistence for custom autoscaling policies - **added** — Add Prometheus metrics for autoscaling decisions and router queue latency - **changed** — Parallelize DefaultCollateFn and arrow_batch_to_tensors - **changed** — Optimize autoscaler to support configurable step size for actor pool scaling - **changed** — Improve streaming repartition performance - **changed** — Add version support to read_lance() - **changed** — Add configurable batching for resolve_block_refs to speed up iter_batches - **fixed** — Fix support of list types for Unique aggregator - **fixed** — Fix reading from written parquet for numpy with NaNs - **removed** — Remove deprecated read_parquet_bulk API - **deprecated** — Ray plans to drop support for Pydantic V1 starting version 2.56.0 ##### Highlights * Ray plans to drop support for Pydantic V1 starting version 2.56.0. Please see [this RFC](https://github.com/ray-project/ray/issues/58876) 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_error` for graceful error handling in batch inference (#59212) * **Datetime compute expressions**: Add datetime compute expressions support (#58740) * **Grouped `with_column` expressions**: Enable expressions for grouped `with_column` in 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**: `HashShuffleAggregator` breaks down blocks on finalize (#58603) * **Backpressure tuning**: Tune concurrency cap backpressure object store budget ratio (#58813) * **Non-string ApproximateTopK**: Support non-string items for `ApproximateTopK` aggregator (#58659) * **Lance version support**: Add version support to `read_lance()` (#58895) * **Dashboard metrics**: Add `time_to_first_batch` and `get_ref_bundles` metrics to data dashboard (#58912) * **Iter prefetched bytes stats**: Add `iter_prefetched_bytes` statistics tracking (#58900) * **Configurable batching for `iter_batches`**: Add configurable batching for `resolve_block_refs` to speed up `iter_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_bulk` API (#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_task` reporting (#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 _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.53.0]_ ### 2.51.2 — Ray-2.51.2 - Date: 2025-11-29 - Version: 2.51.2 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.51.2 - Permalink: https://whatsnew.fyi/product/ray/releases/2.51.2 - **security** — reject Sec-Fetch-* other browser-specific headers in dashboard browser rejection logic for CVE-2025-62593 - Fix for CVE-2025-62593: reject Sec-Fetch-* other browser-specific headers in dashboard browser rejection logic ### 2.52.1 — Ray-2.52.1 - Date: 2025-11-28 - Version: 2.52.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.52.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.52.1 - **security** — Improved handling for CVE-2025-62593 by testing for more browser-specific headers in dashboard browser rejection logic - More robust handling for CVE-2025-62593: test for more browser-specific headers in dashboard browser rejection logic ### 2.52.0 — Ray-2.52.0 - Date: 2025-11-21 - Version: 2.52.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.52.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.52.0 - **removed** — End of Life for Python 3.9 Support: Ray will no longer be releasing Python 3.9 wheels from now on - **security** — Token authentication: Ray now supports built-in token authentication across all components including the dashboard, CLI, API clients, and internal services - **added** — Added predicate pushdown rule that pushes filter predicates past eligible operators - **added** — Iceberg support for upsert tables, schema updates, and overwrite operations - **added** — Iceberg support for predicate and projection pushdown - **added** — Iceberg write datafiles in write() then commit - **changed** — Enhanced Unity Catalog integration - **added** — Namespaced expressions that expose PyArrow functions - **added** — Added version argument to read_delta_lake - **added** — Generator UDF support for map_groups - **added** — ApproximateTopK aggregator - **added** — Serialization framework for preprocessors - **added** — Support for temporal, list, tensor, and struct datatypes - **changed** — Use approximate quantile for RobustScaler preprocessor - **changed** — Map batches support for limit pushdown - **changed** — Make all map operations zero-copy by default - **changed** — Use tqdm_ray for progress reporting from workers - **changed** — Improved concurrency cap backpressure tuning - **fixed** — Fixed renamed columns to be appropriately dropped from output - **fixed** — Fixed handling of renames in projection pushdown - **fixed** — Fixed broken LogicalOperator abstraction barrier in predicate pushdown rule #### 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](https://github.com/ray-project/ray/pull/58150),[ #58555](https://github.com/ray-project/ray/pull/58555)) - Iceberg support for upsert tables, schema updates, and overwrite operations ([#58270](https://github.com/ray-project/ray/pull/58270)) - Iceberg support for predicate and projection pushdown ([#58286](https://github.com/ray-project/ray/pull/58286)) - Iceberg write datafiles in write() then commit ([#58601](https://github.com/ray-project/ray/pull/58601)) - Enhanced Unity Catalog integration ([#57954](https://github.com/ray-project/ray/pull/57954)) - Namespaced expressions that expose PyArrow functions ([#58465](https://github.com/ray-project/ray/pull/58465)) - Added version argument to read_delta_lake ([#54976](https://github.com/ray-project/ray/pull/54976)) - Generator UDF support for map_groups ([#58039](https://github.com/ray-project/ray/pull/58039)) - ApproximateTopK aggregator ([#57950](https://github.com/ray-project/ray/pull/57950)) - Serialization framework for preprocessors ([#58321](https://github.com/ray-project/ray/pull/58321)) - Support for temporal, list, tensor, and struct datatypes ([#58225](https://github.com/ray-project/ray/pull/58225)) 💫 Enhancements: - Use approximate quantile for RobustScaler preprocessor ([#58371](https://github.com/ray-project/ray/pull/58371)) - Map batches support for limit pushdown ([#57880](https://github.com/ray-project/ray/pull/57880)) - Make all map operations zero-copy by default ([#58285](https://github.com/ray-project/ray/pull/58285)) - Use tqdm_ray for progress reporting from workers ([#58277](https://github.com/ray-project/ray/pull/58277)) - Improved concurrency cap backpressure tuning ([#58163](https://github.com/ray-project/ray/pull/58163),[ #58023](https://github.com/ray-project/ray/pull/58023),[ #57996](https://github.com/ray-project/ray/pull/57996)) - Sample finalized partitions randomly to avoid lens effect ([#58456](https://github.com/ray-project/ray/pull/58456)) - Allow file extensions starting with '.' ([#58339](https://github.com/ray-project/ray/pull/58339)) - Set default file_extensions for read_parquet ([#56481](https://github.com/ray-project/ray/pull/56481)) - URL decode values in parse_hive_path ([#57625](https://github.com/ray-project/ray/pull/57625)) - Streaming partition enforces row_num per block ([#57984](https://github.com/ray-project/ray/pull/57984)) - Streaming repartition combines small blocks ([#58020](https://github.com/ray-project/ray/pull/58020)) - Lower DEFAULT_ACTOR_MAX_TASKS_IN_FLIGHT_TO_MAX_CONCURRENCY_FACTOR to 2 ([#58262](https://github.com/ray-project/ray/pull/58262)) - Set udf-modifying-row-count default to false ([#58264](https://github.com/ray-project/ray/pull/58264)) - Cache PyArrow schema operations ([#58583](https://github.com/ray-project/ray/pull/58583)) - Explain optimized plans ([#58074](https://github.com/ray-project/ray/pull/58074)) - Ranker interface ([#58513](https://github.com/ray-project/ray/pull/58513)) 🔨 Fixes: _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.52.0]_ ### 2.51.1 — Ray-2.51.1 - Date: 2025-11-01 - Version: 2.51.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.51.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.51.1 - **fixed** — Reuse previous metadata if transferring the same tensor list with nixl - Reuse previous metadata if transferring the same tensor list with `nixl` (https://github.com/ray-project/ray/pull/58309) ### 2.51.0 — Ray-2.51.0 - Date: 2025-10-29 - Version: 2.51.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.51.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.51.0 - **changed** — Ray Train v2 is now enabled by default, providing usability and stability improvements and new features - **added** — Application-level autoscaling in Ray Serve with custom autoscaling policies that operate across all deployments in an application - **added** — Enhanced autoscaling context with replica-level metrics including total_running_requests, total_queued_requests, and total_num_requests - **added** — Autoscaling metrics aggregation functions supporting min, max, and time-weighted average aggregation - **added** — Support for multiple task consumers in a single Ray Serve application - **added** — Enhanced support for Unity Catalog integration in Ray Data - **added** — New expression evaluator infrastructure for improved query optimization in Ray Data - **added** — Support for SaveMode in Ray Data write operations - **added** — Approximate quantile aggregator in Ray Data - **added** — MCAP datasource support for robotics data in Ray Data - **added** — Callback-based stat computation for preprocessors and ValueCounter in Ray Data - **added** — Support for multiple download URIs with improved error handling in Ray Data - **added** — Top-level ray.train aliases for public APIs - **changed** — Improved projection pushdown handling with renamed columns in Ray Data - **changed** — Enhanced hash-shuffle performance with better retry policies in Ray Data - **changed** — Reduced memory usage with improved streaming generator backpressure in Ray Data - **fixed** — Fixed renamed columns to be appropriately dropped from output in Ray Data - **fixed** — Fixed driver hang during streaming generator block metadata retrieval in Ray Data - **fixed** — Fixed ControllerError triggered by after_worker_group_poll_status errors in Ray Train - **fixed** — Fixed iter_torch_batches use of ray.train.torch.get_device outside Train #### 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](https://github.com/ray-project/enhancements/blob/main/reps/2024-10-18-train-tune-api-revamp/2024-10-18-train-tune-api-revamp.md) and [Migration Guide](https://github.com/ray-project/ray/issues/49454). 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 `AutoscalingContext` with `total_running_requests`, `total_queued_requests`, and `total_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.train` aliases for public APIs (#57758) 💫 Enhancements - Raise clear errors when mixing v1/v2 APIs (#57570) - JAX backend: add `jax.distributed.shutdown()` for `JaxBackend` (#57802) - Update `TrainingFailedError` module (#57865) - Improve deprecation handling when `ray.train` methods are called from `ray.tune` (#57810) - Enable deprecation warnings for legacy XGBoost/LightGBM trainers (#57280) 🔨 Fixes - Fix `ControllerError` triggered by `after_worker_group_poll_status` errors (#57869) - Fix `iter_torch_batches` use of `ray.train.torch.get_device` outsi _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.51.0]_ ### 2.50.1 — Ray-2.50.1 - Date: 2025-10-18 - Version: 2.50.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.50.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.50.1 - **fixed** — Fix deadlock when cancelling stale requests on in-order actors Ray Core: Fix deadlock when cancelling stale requests on in-order actors (#57746) ### 2.50.0 — Ray-2.50.0 - Date: 2025-10-10 - Version: 2.50.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.50.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.50.0 - **changed** — Default shuffle strategy changed from sort-based to hash-based for improved shuffle performance and lower peak memory usage for aggregations - **added** — New expression API enables predicate-based filtering, UDF transformations with with_column, and column aliasing for more powerful data transformations - **added** — Added support for projection pushdown into Parquet reads - **added** — New download expression enables efficient loading of data from columns containing URIs with improved performance and error handling - **added** — New explain() API provides insights into dataset execution plans - **added** — Added streaming_train_test_split to avoid materialization for train/test splits - **added** — Enabled multi-node tensor and pipeline parallelism for Ray Data LLM processing - **added** — Added chat_template_kwargs parameter for customizing chat templates in Ray Data LLM - **added** — Added support for OpenAI's nested image URL format in Ray Data LLM multimodal pipelines - **added** — vLLM engines can now be shared across sequential processors for better resource utilization - **added** — Enhanced Dataset.stats() output with input/output row counts per operator - **added** — Added new metrics for task duration, inputs per task, and output blocks - **added** — Added time to first batch metric for better iteration performance monitoring - **added** — Added type-specific aggregators for numerical, categorical, and vector columns - **added** — Added fine-grained concurrency controls with max_task_concurrency and resource allocation options - **added** — Alpha release of Ray Direct Transport enabling GPU data to remain in GPU memory with efficient data transfer via collective communication and RDMA - **added** — Added StepFailedRecreateEnv exception for users with unsatisfiable environments in RLLib - **added** — Async Inference alpha release for Ray Serve with APIs supporting long-running asynchronous inference tasks and message broker support - **added** — Added support for replica ranks in Ray Serve for large-model inference use-cases - **added** — Added FastAPI factory pattern support in Ray Serve for using non-serializable FastAPI plugins - **added** — zip() operator now supports combining multiple datasets, not just pairs - **changed** — Concurrency parameter now accepts tuples for more flexible configuration - **changed** — Resource requirements (num_cpus/gpus, memory) are now top-level parameters in most APIs for easier configuration - **changed** — Write operations now use iterators instead of accumulating blocks in memory - **changed** — Improved groupby performance with sort-shuffle pull-based approach - **changed** — Improved join operations with new abstractions - **changed** — Improved compatibility between PyArrow native types, extension types, and pandas Arrow dtypes - **changed** — Joins now supported with list/tensor non-key columns - **changed** — Enhanced support for variable-shaped tensor arrays with different dimensions - **changed** — Added serialization/deserialization for PyArrow Extension Arrays - **changed** — Reduced memory usage for OneHotEncoder - **changed** — Reduced memory usage for schema unification - **changed** — Eliminated unnecessary block copying and double execution of arrow conversions - **changed** — Improved Parquet encoding ratio estimation - **changed** — Enabled per-block limiting for Limit operator - **changed** — Optimized schema handling with deduplication and removed unnecessary unification - **fixed** — Fixed streaming executor to properly drain output queues - **fixed** — Fixed retry logic for hash shuffle operations - **fixed** — Fixed split_blocks to prevent producing empty blocks #### 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 `celery` and 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_OPTIMIZED` environment 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_split` to avoid materialization for train/test splits (#56803) - **Ray Data LLM:** - Enabled multi-node tensor and pipeline parallelism for LLM processing (#56779) - Added `chat_template_kwargs` parameter 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_concurrency` and resource allocation options (#56370, #56381) 💫 Enhancements: - **Join and shuffle improvements:** - Default shuffle strategy changed from sort-b _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.50.0]_ ### 2.49.2 — Ray-2.49.2 - Date: 2025-09-19 - Version: 2.49.2 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.49.2 - Permalink: https://whatsnew.fyi/product/ray/releases/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.1 — Ray-2.49.1 - Date: 2025-09-03 - Version: 2.49.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.49.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.49.1 - **fixed** — Fix issue where GPU metrics are missing in Ray Dashboard - **fixed** — Fix regression in handling very large schemas in Ray Data - Ray Dashboard: Fix issue where GPU metrics are missing (#56006) - Ray Data: Fixed regression in handling very large schemas (#56058) ### 2.49.0 — Ray-2.49.0 - Date: 2025-08-26 - Version: 2.49.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.49.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.49.0 - **added** — Wrapped batch indices in a BatchMetadata object to make per-batch metadata explicit - **added** — Added support for Anti/Semi Join types - **added** — Introduced an Issue Detection Framework - **added** — Added an option to enable out-of-order execution for better performance - **added** — Introduced a StreamingSplit logical operator for DAG rewrite - **added** — Added a stratify parameter to train_test_split - **added** — Added Snowflake connectors - **added** — Updated Hudi integration to support incremental query - **added** — Added an Actor location tracker - **added** — Added BundleQueue.has_next - **added** — Made DEFAULT_OBJECT_STORE_MEMORY_LIMIT_FRACTION configurable - **added** — Added Expression support and a with_columns API - **added** — Allocate GPU resources in ResourceManager - **added** — Introduced JaxTrainer with SPMD support on TPUs - **changed** — Decoupled actor and node autoscaling; autoscaling now also considers budget - **changed** — Faster hash-shuffle resource usage calculation and more accurate shuffle progress totals - **changed** — Reduced Parquet metadata storage usage - **changed** — map_batches now defaults to row_modification=False and avoids pushing past limit - **changed** — ray.train.get_dataset_shard now lazily configures dataset sharding for better startup behavior - **fixed** — AutoscalingActorPool now properly downscales after execution #### 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](https://github.com/ray-project/ray/issues/41135#issuecomment-3156717488) 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](https://github.com/ray-project/ray/issues/54652) 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; _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.49.0]_ ### 2.48.0 — Ray-2.48.0 - Date: 2025-07-18 - Version: 2.48.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.48.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.48.0 - **added** — Add reading from Delta Lake tables and Unity Catalog integration - **added** — Enhanced pin_memory support in iter_torch_batches - **added** — Added broadcast_from_rank_zero and barrier collective operations - **added** — Enhanced hardware metrics integration with Grafana dashboards - **added** — Added support for dynamically loading callbacks via environment variables - **added** — Added RouterConfig field to DeploymentConfig for custom RequestRouter configuration - **added** — Added support for implementing custom request routing algorithms - **added** — Support separate deployment config for PDProxy in PrefixAwareReplicaSet - **added** — Support for prefix-aware request router - **changed** — Enhanced handling of mismatched columns and pandas.NA values - **changed** — Improved read_text trailing newline semantics - **changed** — Optimized backpressure handling with policy-based resource management - **changed** — Enhanced write_parquet with support for both partition_by and row limits - **changed** — Improved execution performance for One Hot encoding in preprocessors - **changed** — Improved checkpoint population from before_init_train_context - **changed** — Enhanced controller state logging and metrics - **changed** — Enhanced FastAPI ingress deployment validation for multiple deployments - **changed** — Optimized get_live_deployments performance - **fixed** — Fixed map_groups issues - **fixed** — Prevented Op fusion for streaming repartition to avoid performance degradation - **fixed** — Fixed ActorPool autoscaler scaling up logic - **fixed** — Resolved empty dataset repartitioning issues #### 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 tes _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.48.0]_ ### 2.47.1 — Ray-2.47.1 - Date: 2025-06-18 - Version: 2.47.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.47.1 - Permalink: https://whatsnew.fyi/product/ray/releases/2.47.1 - **fixed** — Ray failed to start on Mac Ray 2.47.1 fixed an issue where Ray failed to start on Mac (https://github.com/ray-project/ray/pull/53807) ### 2.47.0 — Ray-2.47.0 - Date: 2025-06-12 - Version: 2.47.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.47.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.47.0 - **added** — Support prefill disaggregation in Ray Serve LLM for production LLM serving use cases - **added** — Add save modes support to file data sinks - **added** — Add flattening capability to the Concatenator preprocessor to support output vectorization use cases - **added** — Support for configuring Ray Train worker actor runtime environments - **added** — Include Grafana panel data in Ray Train export for improved monitoring - **added** — Introduce a structured logging environment variable to standardize log formats - **added** — Add metrics for TrainControllerState to enhance observability - **added** — Add support for implementing custom request routing algorithms in Ray Serve - **added** — Introduce an environment variable to prioritize custom resources during deployment scheduling - **added** — Expose vLLM Metrics to serve.llm API - **added** — Add Embedding API to Ray Serve/Data LLM - **added** — Add GPU inference to offline evaluation in RLlib - **changed** — Re-enable Actor locality-based scheduling with improved algorithms for ranking bundle locations - **changed** — Disable blocking pipeline by default until Actor Pool fully scales up to min actors - **changed** — Improve progress bar and dashboard to show name of partial functions properly - **changed** — The ingress API now accepts a builder function in addition to an ASGI app object - **changed** — Allow setting name_prefix in build_llm_deployment - **changed** — Mitigate the serve.llm streaming overhead by properly batching stream chunks - **fixed** — Make Ray Data from_torch respect Dataset len - **fixed** — Fix race condition bug in fault tolerance by disabling on_exit hook - **fixed** — Fix move_tensors_to_device utility for the list/tuple[tensor] case - **fixed** — Fix ActorPool scaling to avoid scaling down when the input queue is empty - **fixed** — Fix internal queues accounting for all Operators with an internal queue - **fixed** — Fix backpressure for FileBasedDatasource to prevent potential OOMs for workloads using FileBasedDatasources - **fixed** — Fixed GPU transfer support for non-contiguous tensors - **fixed** — Fixed runtime_env validation for py_modules - **fixed** — Disallow special characters in Serve deployment and application names - **fixed** — Add a descriptive error message when a deployment name is not found - **fixed** — LLMRouter.check_health() should check LLMServer.check_health() - **fixed** — Fix runtime passthrough and auto-executor class selection - **fixed** — Update check_health return type - **fixed** — Bug fix for duplication of token - **fixed** — In stream batching, first part of the stream was always consumed and not streamed back from the router - **fixed** — Fixed weight synching in offline evaluation - **fixed** — Fixed bug in split_and_zero_pad utility function related to complex structures vs simple values or np.arrays #### 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_torch` respect Dataset len (#52804) - Fixing flaky aggregation test (#53383) - Fix race condition bug in fault tolerance by disabling `on_exit` hook (#53249) - Fix `move_tensors_to_device` utility for the list/tuple[tensor] case (#53109) - Fix `ActorPool` scaling 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 using `FileBasedDatasources` (#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 `TrainControllerState` to enhance observability. (#52805) 💫 Enhancements: - Logging of controller state transitions to aid in debugging and analysis. (#53344) - Improved handling of `Noop` scaling decisions for smoother scaling logic. (#53180) 🔨 Fixes: - Improved `move_tensors_to_device utility` to correctly handle `list` / `tuple` of tensors. (#53109) - Fixed GPU transfer support for non-contiguous tensors. (#52548) - Increased timeout in `test_torch_device_manager` to 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_CI` blocks and combined imports. (#53087, #52742) ##### Ray Tune 💫 Enhancements: - Updated `test_train_v2_integration` to use the correct `RunConfig`. (#52882) 📖 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 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_env` validation for `py_modules`. (#53186) - Disallowed special character _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.47.0]_ ### 2.46.0 — Ray-2.46.0 - Date: 2025-05-07 - Version: 2.46.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.46.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.46.0 - **added** — Ray Data now supports hash-shuffle based repartitioning and aggregations - **added** — Ray Data now supports joins using hash-shuffle - **added** — Ray Serve LLM is now compatible with vLLM v1 - **added** — Add initial Train Grafana dashboard with built-in metrics for training workloads - **added** — 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 - **added** — New custom_data attribute for SingleAgentEpisode and MultiAgentEpisode to store custom metrics - **changed** — Add memory attribute to ExecutionResources - **changed** — Support ray_remote_args for read_tfrecords - **changed** — Add PhysicalOperator.min_max_resource_usage_bounds - **changed** — Support num_cpus, memory, concurrency, batch_size for preprocess - **changed** — Support new pyiceberg version - **changed** — Lazily import torch FSDP for ray.train.torch module to improve performance and reduce unnecessary dependencies - **changed** — Deserialize the user-defined training function directly on workers, improving efficiency - **changed** — Refactor LLMServer and LLMEngine to not diverge too much from vllm chat formatting logic - **changed** — Add router replicas and batch size to llm config - **changed** — Bump vllm from 0.8.2 to 0.8.5 - **fixed** — Handle Arrow Array null types in to_numpy - **fixed** — Fix S3 serialization wrapper compatibility with RetryingPyFileSystem - **fixed** — Fix Optimizer to apply rules until plan stabilizes - **fixed** — Fix FuseOperators rule to properly handle transformations that drastically change size of the dataset - **fixed** — Fix error when no arguments are passed into TorchTrainer #### Release Highlights The 2.46 Ray release comes with a couple core highlights: 1. 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! 2. 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. 3. 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](https://github.com/ray-project/ray/pull/52597)) - Bump vllm from 0.8.2 to 0.8.5 in /python ([#52344](https://github.com/ray-project/ray/pull/52344)) - [LLM] Add router replicas and batch size to llm config ([#52655](https://github.com/ray-project/ray/pull/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](https://github.com/ray-project/ray/pull/52668)) 📖 Documentation: - [Serve][LLM] Add doc for deploying DeepSeek ([#52592](https://github.com/ray-project/ray/pull/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_data` attribute for `SingleAgentEpisode` and `MultiAgentEpisode` to store custom metrics. Deprecates `add|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 op _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.46.0]_ ### 2.45.0 — Ray-2.45.0 - Date: 2025-04-29 - Version: 2.45.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.45.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.45.0 - **changed** — Make Object Store Fallback Directory configurable - **added** — Support with_tensor_transport(transport='shm') in cgraph - **added** — Support reduce scatter and all gather collective for GPU communicator in compiled graph - **fixed** — Make sure KillActor RPC with force_kill=True can actually kill the threaded actor - **fixed** — Do not remove idle nodes for upcoming placement groups in Autoscaler - **fixed** — Prevent threaded actors from getting stuck forever when receiving two exit signals - **fixed** — Fix illegal memory access of cgraph when used in PP - **fixed** — Avoid resubmitted actor tasks from hanging indefinitely - **fixed** — Fix interleaved placement group creation process due to node failure - **fixed** — Flush task events in CoreWorker::Shutdown instead of CoreWorker::Disconnect - **changed** — Split dashboard single process into multiple processes to improve stability and avoid interference between different heads - **added** — Add ClickHouse sink via Dataset.write_clickhouse() - **added** — Support ray_remote_args_fn in Dataset.groupby().map_groups() to set per-group runtime env and resource hints - **added** — Expose Dataset.name and set_name as public API for easier lineage tracking - **added** — Allow async callable classes in Dataset.flat_map() - **added** — Introduce Ruleset abstraction for rule-based query optimisation - **added** — Add seamless conversion from Daft DataFrame to Ray Dataset - **added** — Improve support for line-delimited JSONL reading in read_json() - **added** — Provide Dataset.export_metadata() for schema and stats snapshots - **changed** — Improve performance of sorting and sort-shuffle based operations by more than 5x #### Ray Core 💫 Enhancements - Make Object Store Fallback Directory configurable ([#51189](https://github.com/ray-project/ray/pull/51189)). - [cgraph] Support `with_tensor_transport(transport='shm')` ([#51872](https://github.com/ray-project/ray/pull/51872)). - [cgraph] Support reduce scatter and all gather collective for GPU communicator in compiled graph ([#50624](https://github.com/ray-project/ray/pull/50624)). 🔨 Fixes - Make sure `KillActor` RPC with `force_kill=True` can actually kill the threaded actor ([#51414](https://github.com/ray-project/ray/pull/51414)). - [Autoscaler] Do not remove idle nodes for upcoming placement groups ([#51122](https://github.com/ray-project/ray/pull/51122)). - Threaded actors get stuck forever if they receive two exit signals ([#51582](https://github.com/ray-project/ray/pull/51582)). - [cgraph] Fix illegal memory access of cgraph when used in PP ([#51734](https://github.com/ray-project/ray/pull/51734)). - Avoid resubmitted actor tasks from hanging indefinitely ([#51904](https://github.com/ray-project/ray/pull/51904)). - Fix interleaved placement group creation process due to node failure ([#52202](https://github.com/ray-project/ray/pull/52202)). - Flush task events in `CoreWorker::Shutdown` instead of `CoreWorker::Disconnect` ([#52374](https://github.com/ray-project/ray/pull/52374)). 🏗 Architecture refactoring - Split dashboard single process into multiple processes to improve stability and avoid interference between different heads ([#51282](https://github.com/ray-project/ray/pull/51282), [#51489](https://github.com/ray-project/ray/pull/51489), [#51555](https://github.com/ray-project/ray/pull/51555), [#51507](https://github.com/ray-project/ray/pull/51507), [#51587](https://github.com/ray-project/ray/pull/51587), [#51553](https://github.com/ray-project/ray/pull/51553), [#51676](https://github.com/ray-project/ray/pull/51676), [#51733](https://github.com/ray-project/ray/pull/51733), [#51809](https://github.com/ray-project/ray/pull/51809), [#51877](https://github.com/ray-project/ray/pull/51877), [#51876](https://github.com/ray-project/ray/pull/51876), [#51980](https://github.com/ray-project/ray/pull/51980), [#52114](https://github.com/ray-project/ray/pull/52114)). #### Ray Libraries ##### Ray Data 🎉 New Features - **New ClickHouse sink** via `Dataset.write_clickhouse()` ([#50377](https://github.com/ray-project/ray/pull/50377)) - Support `ray_remote_args_fn` in `Dataset.groupby().map_groups()` to set per-group runtime env and resource hints ([#51236](https://github.com/ray-project/ray/pull/51236)) - Expose `Dataset.name` / `set_name` as a public API for easier lineage tracking ([#51076](https://github.com/ray-project/ray/pull/51076)) - Allow async callable classes in `Dataset.flat_map()` ([#51180](https://github.com/ray-project/ray/pull/51180)) - Introduce **Ruleset** abstraction for rule-based query optimisation ([#51558](https://github.com/ray-project/ray/pull/51558)) - Add seamless conversion from Daft DataFrame to Ray Dataset ([#51531](https://github.com/ray-project/ray/pull/51531)) - Improved support for line-delimited JSONL reading in `read_json()` ([#52083](https://github.com/ray-project/ray/pull/52083)) - Provide `Dataset.export_metadata()` for schema & stats snapshots ([#52227](https://github.com/ray-project/ray/pull/52227)) 💫 Enhancements - **Improved performance of sorting and sort-shuffle based operations** (by more than 5x in benchmarks) ([#51943](https://github.com/ray-project/ray/pull/51943/files)) - Metrics: number of map-actor workers **alive / pending / restarting** ([#51082](https://github.com/ray-project/ray/pull/51082)) - Continuous memory-usage polling per map task ([#51324](https://github.com/ray-project/ray/pull/51324)) - Auto-tune map-task memory based on output size ([#51536](https://github.com/ray-project/ray/pull/51536)) - More informative back-pressure progress bar ([#51697](https://github.com/ray-project/ray/pull/51697 _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.45.0]_ ### 2.44.1 — Ray-2.44.1 - Date: 2025-03-27 - Version: 2.44.1 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.44.1 - Permalink: https://whatsnew.fyi/product/ray/releases/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.0 — Ray-2.44.0 - Date: 2025-03-21 - Version: 2.44.0 - Original notes: https://github.com/ray-project/ray/releases/tag/ray-2.44.0 - Permalink: https://whatsnew.fyi/product/ray/releases/2.44.0 - **added** — Ray Compiled Graph (beta) with less than 50us system overhead for repeatedly executed task graphs and native GPU-GPU communication via NCCL - **added** — Iceberg write support through pyiceberg in Ray Data - **added** — LoRA support and structured outputs enhancements to Ray Data LLM - **added** — State export API in Ray Train - **added** — Faster bulk imperative Serve Application deploys - **added** — Gen-config for Ray Serve LLM - **added** — Dataset/operator state, progress, and total metrics in Ray Data - **changed** — Make chunk combination threshold configurable in Ray Data - **changed** — Store average memory use per task in OpRuntimeMetrics - **changed** — Avoid unnecessary conversion to Numpy when creating Arrow/Pandas blocks - **changed** — Add append-mode API for preprocessors with vectorizers and hashers now outputting a single column instead of 1 column per feature - **changed** — Fold v2.XGBoostTrainer API into the public trainer class as an alternate constructor - **changed** — Create a default ScalingConfig if one is not provided to the trainer - **changed** — Improve TrainingFailedError message in Ray Train - **changed** — Clean up shutdown behavior of serve - **changed** — Add additional_log_standard_attrs to serve logging config - **fixed** — Fix Map Operators to avoid unconditionally overriding generator's back-pressure configuration - **fixed** — Fix filter expr equating negative numbers in Ray Data - **fixed** — Fix StandardScaler to handle NaN stats in Ray Data - **deprecated** — Ray Workflows library has been deprecated and will be removed in a future version of Ray #### 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[ (](https://github.com/ray-project/ray/commit/5e26c7fc3866921ce97db876136e04271dabf8b4)[#50590](https://github.com/ray-project/ray/pull/50590)[)](https://github.com/ray-project/ray/commit/5e26c7fc3866921ce97db876136e04271dabf8b4) - [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](https://github.com/ray-project/ray/pull/50770)) - Make chunk combination threshold configurable ([#51200](https://github.com/ray-project/ray/pull/51200)) - Store average memory use per task in OpRuntimeMetrics ([#51126](https://github.com/ray-project/ray/pull/51126)) - Avoid unnecessary conversion to Numpy when creating Arrow/Pandas blocks ([#51238](https://github.com/ray-project/ray/pull/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](https://github.com/ray-project/ray/pull/50900)) - Fix filter expr equating negative numbers ([#50932](https://github.com/ray-project/ray/pull/50932)) - Fix error message for `override_num_blocks` when reading from a HuggingFace Dataset ([#50998](https://github.com/ray-project/ray/pull/50998)) - Make num_blocks in repartition optional ([#50997](https://github.com/ray-project/ray/pull/50997)) - Always pin the seed when doing file-based random shuffle ([#50924](https://github.com/ray-project/ray/pull/50924)) - Fix `StandardScaler` to handle `NaN` stats ([#51281](https://github.com/ray-project/ray/pull/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 ex _[Truncated at 4000 characters — full notes: https://github.com/ray-project/ray/releases/tag/ray-2.44.0]_