Update dependency ray to v2.56.0 [SECURITY]#8732
Merged
Merged
Conversation
robert3005
approved these changes
Jul 13, 2026
Merging this PR will not alter performance
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
connortsui20
pushed a commit
that referenced
this pull request
Jul 13, 2026
encode_varbin[(1000, *)] flipped between ~138us and ~155-160us on about a dozen recently merged PRs (including docs-only #8737 and uv.lock-only #8732), encode_varbinview[(10000, 2)] on several more, and encode_varbinview [(10000, 4)] flipped -10.1% on an earlier revision of this very PR - which does not touch dict encoding. String dict encoding is hash-table growth plus builder-buffer growth, i.e. allocation-dominated, so the trace inherits glibc malloc's per-runner-image code differences. Route it through vendored mimalloc, as the never-flagged alloc-heavy bench suites already do. Signed-off-by: Claude <noreply@anthropic.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T6PPcdrqcNeUkfi1EGd4oC
connortsui20
pushed a commit
that referenced
this pull request
Jul 13, 2026
encode_varbin[(1000, *)] flipped between ~138us and ~155-160us on about a dozen recently merged PRs (including docs-only #8737 and uv.lock-only #8732), encode_varbinview[(10000, 2)] on several more, and encode_varbinview [(10000, 4)] flipped -10.1% on an earlier revision of this very PR - which does not touch dict encoding. String dict encoding is hash-table growth plus builder-buffer growth, i.e. allocation-dominated, so the trace inherits glibc malloc's per-runner-image code differences. Route it through vendored mimalloc, as the never-flagged alloc-heavy bench suites already do. Signed-off-by: Claude <noreply@anthropic.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T6PPcdrqcNeUkfi1EGd4oC
robert3005
pushed a commit
that referenced
this pull request
Jul 14, 2026
A small pool of microbenchmarks flips ±10-35% between two fixed values on unrelated PRs (including docs-only and lockfile-only changes), spamming every CodSpeed report. This PR fixes them (and removes only 1 benchmark). No `#[cfg(codspeed)]` gating; CI and local runs stay identical. One commit per benchmark. ## Changes - **mimalloc as global allocator** in the 5 flaky `vortex-array` bench files: `chunk_array_builder`, `dict_compress`, `varbinview_compact`, `compare`, `binary_ops` - **`bitwise_not_vortex_buffer_mut`**: drop the 128/1024/2048 sizes (measured only harness overhead) - **`slice_empty_vortex`**: rewrite as a 1024-iteration tight loop, renamed `slice_empty_tight_loop_vortex` - **`rebuild_naive` (vortex-zstd)**: the one benchmark removed instead of fixed — its cost is dominated by zstd-internal copies (glibc `ifunc`-resolved `memcpy`) that no bench-level change can stabilize, its fixture is degenerate (a 4-string dictionary with all-zero offsets), and ListView rebuild is already benchmarked across element types and list shapes in `vortex-array/benches/listview_rebuild.rs`. The crate's now-unused `divan` dev-dependency goes with it. <details> <summary>Which benchmarks were flaky, and the evidence</summary> Identified by reading the CodSpeed comments on the ~47 PRs merged since June 25 (post-#8490). The tell: the same benchmark flipping between the same two values, in both directions, on PRs that can't have affected it — including deny.toml-only (#8712, #8716), uv.lock-only (#8732), docs-only (#8737, #8728, #8685), and CI-YAML-only (#8660, #8683) changes. | Benchmark | Evidence | |---|---| | `bitwise_not_vortex_buffer_mut[128/1024/2048]` | ~half of all PRs — worst offender | | `chunked_varbinview_*` ×4 | ~20 PRs, both directions | | `chunked_bool_canonical_into[(1000,10)]` | ~2× flips (16µs ↔ 35µs) on 4 PRs | | `encode_varbin`, `encode_varbinview` | ~12 PRs; `encode_varbinview[(10000,4)]` also flipped on an earlier revision of this PR | | `compact`, `compact_sliced` (90%-utilization args) | ~8 PRs | | `compare_int_constant` | ±11.1% verbatim on ≥9 PRs | | `eq_i64_constant` | same ±11% signature incl. docs-only PR | | `slice_empty_vortex` | -14.66% verbatim on ~13 PRs | | `rebuild_naive` (vortex-zstd) | ~10 PRs, both directions | Watch list (left alone, below the ≥3-independent-sightings bar): `copy_nullable`/`copy_non_nullable[65536]` in `cast_decimal.rs`, `true_count_vortex_buffer[128]`. </details> <details> <summary>Root causes and why each fix matches</summary> - **Allocation in the timed region** → glibc malloc's code differs across CodSpeed runner images, so alloc-heavy benchmarks trace differently for byte-identical Vortex code. Vendored mimalloc removes glibc malloc from the trace. Empirical support: the only three bench files already using mimalloc (`single_encoding_throughput`, `common_encoding_tree_throughput`, `row_encode`) are the most alloc-heavy suites in the repo and were never flagged once in the 47-PR window. - **Sub-microsecond work** → the measurement is fixed harness overhead plus binary code layout, which shifts with any unrelated change. Fix by making the operation dominate: the in-place NOT (no alloc, no copy) keeps only sizes where the loop dominates; the empty slice runs 1024× per iteration, mirroring the neighboring `slice_tight_loop_vortex`. - **Environment-bound and low-signal** → `rebuild_naive`, per the justification above: unfixable at the bench level and redundant with the vortex-array ListView rebuild suite, so removed. </details> <details> <summary>Validation: A/A reruns and a stacked canary PR</summary> - **Expected one-time step changes on this PR**: swapping the allocator changes the trace of every benchmark in the touched files, so this PR's report shows a few ±10-20% level shifts (including on never-flaky `encode_primitives`, which just shares a file). These need a one-time acknowledgment on the CodSpeed dashboard; after merge every PR compares mimalloc-vs-mimalloc. - **A/A reruns** (same bench binaries measured three times, on separate runners and commits): every value reproduced exactly — 211.5µs, 137.1µs, 14.6µs, 26.3µs — with zero new flags across 1656 benchmarks. - **Canary #8743** (a #8681-style cold-string change stacked on this branch — the class of change that used to collect five false flags): **Performance Gate Passed**, `✅ 1660 untouched`, zero changes reported. </details> No public API changes; benchmark-only. https://claude.ai/code/session_01T6PPcdrqcNeUkfi1EGd4oC --------- Signed-off-by: Claude <noreply@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.55.1→2.56.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
CVE-2026-57516 / GHSA-hhrp-gw25-jr43 / PYSEC-2026-2273
More information
Details
Ray prior to 2.56.0 contains an unsafe deserialization vulnerability in the WebDataset reader that allows attackers to achieve remote code execution by supplying a malicious tar archive to the read_webdataset() function. The _default_decoder() function in webdataset_datasource.py unconditionally calls pickle.loads() on tar entries with .pkl/.pickle extensions and torch.load() with weights_only=False on .pt/.pth entries, executing arbitrary code inside Ray remote workers on every worker that processes the malicious archive.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XReferences
This data is provided by OSV and the PyPI Advisory Database (CC-BY 4.0).
Release Notes
ray-project/ray (ray)
v2.56.0Compare Source
Highlights
iter_batchesstability by reducing hidden buffering and shutting down the executor when consumers exit early (#63660, #63682, #62949). This reduces object-store spilling for common training workloadsConsistentHashRouter(#62905, #63096, #62906) andCapacityQueueRouter(#62323) which is beneficial for supply-constrained workloads.ray.io/gpu-domainlabel instead of only packing at the single-node level. We've also added initial Kubernetes in-place pod resizing support for Autoscaler v2 (#55961, #62369, #62215), enabling Ray clusters to resize CPU and memory on existing worker pods before scaling out new pods.Ray Data
🎉 New Features
Dataset.mix()public API andMixOperatorfor weighted dataset mixing (#63168, #62450)ParquetDatasourceV2, chunked reader, predicate splitting, listing/scanner infra (#63113, #63454, #63163, #62975, #63027, #62182)batch_size='auto'tomap_batchesto derive batch row count from target row batch size (#62648)include_row_hashtoread_parquet(#61408)isolate_read_workers(#63490)default_map_logical_memory_enabled(#63814)start_offsetandend_offsetforread_kafka(#61620)💫 Enhancements
iter_batchesspilling by replacingmake_async_genwithiter_threadedand reducing buffered batches (#63660, #63682)restore_original_orderiniter_batchesbehindpreserve_order(#63792)drop_columnsto aProjectlogical operator when input schema is known (#63813)ConcatAggregationandTurbopufferDatasinkusepolarsfor sorting (#61904)hash_partitionwithsort_indices, zero-copy slices, and pandas (#63498, #62757, #63152, #62587)GPU_SHUFFLEingrouped_data.py(#62410)StarExprexpansion, schema inference for non-black-box UDFs, and Expressions struct support (#63776, #63387, #62560)RAY_DATA_LOG_LEVELand logRAY_DATAenv vars at execution start (#63487, #63380)compute=infilter(expr=...)and deprecateconcurrency=(#63576)StreamingRepartitionand read stage column-rename removal (#62347, #63384, #63582)BlockMetadataWithSchema(#63462)TaskDurationStatsand Timer withDistributionTracker(#63488, #63530, #63825)BlockEntryonRefBundlein place of(ref, metadata)tuples (#63654)DataIteratorexit (#62456, #62949)pandas,modin, andpyarrowminimum versions (#62899)ActorPool(#61987, #61528)ConcurrencyCapBackpressurePolicy,DataIterator.to_torch, and pandas UDF batches (#63392, #62540, #61733).options(#62309, #62722)read_deltareads from preconfiguredpyarrowdataset (#61721)ArrowConversionError; reduce arrow conversion warning verbosity (#62407, #61486, #62521)DataSourceV2by default after earlier enabling (#63674, #63326)🔨 Fixes
__subcluster__toray-subcluster(#63982)get_or_create_stats_actorcrash in Ray Client mode (#63402)UDFExprfilter predicates (#63781)CheckpointConfigFileNotFoundErroron Azure Blob Storage (#63606)_concatenate_extension_column(#62939)HashAggregateduplicate group rows forAggregateFnV2(#63066)read_parquetArrowNotImplementedErrorfor nested column types exceeding ~2GB row group (#61824)read_parquetnested-type fallback and parquet scanner memory accumulation (#63175, #62745)DataIterator.to_torch()by switching toPyArrow(#60966)ZipOperatorfreeing shared blocks via_split_at_indices(#62665)write_parquet(#62377)ShuffleStrategy.GPU_SHUFFLE(#62351)DatasetStatuuid propagation (#62255)DATA_ENABLE_OP_RESOURCE_RESERVATION=False(#61718)PyFileSystem(#61850)try_create_dirtopyarrow.dataset.write_dataset(#58302)nan_is_null/nans-as-nulls semantics in encoder (#62623, #62618)find_partition_index(#62594)_split_predicate_by_columnscorrectness fix (#63176)_is_cudf_dataframewhen cudf not loaded (#62302)tfx-bslsupport fromread_tfrecords(#63245)📖 Documentation
isolate_read_workersforread_parquet(#63816)build_processorand"auto"batch size (#61757, #62790)DefaultClusterAutoscalerV2and stale object-store-memory warnings (#62385, #62387)Ray Serve
🎉 New Features:
choose_replica/dispatchon deployment handles andAsyncioRouterwith replica-side slot reservation (#63255, #63254, #63252)ConsistentHashRouterfor session-sticky routing (#63238, #62906, #63096, #62905)CapacityQueueRouter(#62323)ray-haproxysupport behindRAY_SERVE_EXPERIMENTAL_PIP_HAPROXY(#62589)ControllerOptionsfor configurable controllerruntime_env(#63352)💫 Enhancements:
0.0.0.0for cross-node HAProxy routing (#62515)TCP_NODELAYdefault 1, optional retry knobs,RAY_SERVE_HAPROXY_STATS_PORT(#63356, #63531, #63353, #63415, #62979)RAY_SERVE_HAPROXY_BINARY_PATH; HAProxy abspath env var (#63829, #62610)/api/serve/applications/API; addmax_replicas_per_nodeto response (#63556, #63234)DeploymentStateManagerAPIs for controller access (#62950)DEPLOYMENT_TARGETSbroadcast while replicas are RECOVERING (#62751)LongPollHoststate on deployment delete; enable logs when client stops its event loop (#62820, #63028)serve_autoscaling_target_ongoing_requests(#62381, #62355, #62421)serve_long_poll_latency_ms(#62868)build_serve_applicationtask on failure (#62987)DeploymentMode(#63548, #63510)🔨 Fixes:
move_to_end()(#62548)AttributeErrorwhenrequest_routeris None inupdate_deployment_config(#63180)UnboundLocalErrorinActorReplicaWrapper.check_stopped()(#63339)_global_clientcache across driver sessions (#62368)start_metrics_pushercrash when deployment hasrecord_autoscaling_statsbut no autoscaling config (#62123)ingress_request_router.lua.tmplinpackage_data(#63145)root_pathparameter across uvicorn versions (#62529)📖 Documentation:
Ray Train
🎉 New Features
LoggingConfigfor configuring theray.trainlogger on controller and workers (#61550)DataParallelTrainer'strain_fnto return data (#62021)💫 Enhancements
ray.train.report(checkpoint)(#62027)create_or_update_train_runcompletes on Train initialization (#63432)DatasetManager(#63309)label_selectortoAutoscalingCoordinator(#63287)contextlib.redirect_stdout()to bypass print redirect to logs (#61075)ray.train.report(#62916)ray.train.reportdoes not hang across replica group restarts; Ray Train manages replica group restarts (#62651, #61475)RayTaskErrorduringBackendSetupCallbackshutdown (#63143)JaxTrainerTPU multi-slice fault tolerance and reservation ergonomics (#62893)PlacementGroupCleanerrace condition: drain queue before cleanup on controller death (#62754)delete_local_checkpoint_after_upload=True(#62555)timeout_storay.train.get_all_reported_checkpoints(#61761)pytorch_lightningimports (#61291)Predictorfrom Train v1 (#63461)🔨 Fixes
DataBatchTypeUnion type (#63872)exclude_resourcesregression for V1 Train + V2 cluster autoscaler (#62827)%stologger.debug(#63039)get_actortimeout (#62516)📖 Documentation
Result.from_pathin docs (#62887)Ray Tune
💫 Enhancements
AxSearchfor Ax Platform 1.0.0+ (#60522)inspectfor argument capture (#60049)🔨 Fixes
Ray LLM
🎉 New Features
topologyfield toLLMConfigfor multi-host TPU support (#61906)TPUAccelerator(#63177)RAY_SERVE_SESSION_ID_HEADER_KEY(#63362)💫 Enhancements
vLLMto 0.22.0 (#63730, #63396, #62970, #62349)AsyncioRouterfor LLM ingress (#63517)choose_replica; don't fetchLLMConfigfrom replicas at startup (#63280, #63065)max_tasks_in_flight_per_actorto a first-class config field and adjust defaults (#63214)accelerator_typeagainst CPU-only configs; replaceGPUTypealias withAcceleratorType(#62139, #62978)_internal(#62570)🔨 Fixes
guided_decoding,truncate_prompt_tokens,build_llm_processor(#63569)ImportErrorwhenvLLMis installed but fails to import (#63305)max_pending_requestsdefault to trackvLLM's GPU-dependentmax_num_seqs(#62918)rope_scaling(#62464)LLMRouterconstructor (#63206)contentin sanitizer (#63119)lora_requestnot forwarded tovLLMengine + add regression tests (#62609)SGLangEngineProcessortelemetry fortrust_remote_codemodels (#62102)TOKENIZER_ONLYdownloads missingchat_templatefor S3-backed models (#62121)add_generation_prompt(#61688)benchmark_vllmCLI builder (#63516)📖 Documentation
vLLMcompatibility (#63593)VLLM_USE_V1from docs and examples (#63001)max_tasks_in_flight_per_actor(#62917)Ray RLlib
🎉 New Features
custom_resources_per_learnerconfig andcustom_resources_for_main_processtoAlgorithmConfig(#63303, #62475)APPOmetrics to the torch learner (#63675)💫 Enhancements
IMPALA/APPOlearner thread gracefully to avoid misleading error messages (#62763)🔨 Fixes
PPO's value target calculation (#59958)EnvRunnercrash loops (#62884)ValueErrorinMultiAgentEpisode.get_rewards()when an agent is inactive for all requested env steps (#62907)_update_env_seed_if_necessary(#61823)EMAStat(#63064)📖 Documentation
Ray Core
🎉 New Features
register_collective_backendAPI for custom collective backends (#60701)noDriverTimeoutSecondsfor KubeRay cluster termination (#63465)ObjectRefs inray.get(#61773), retry support (#62842), and NIXL memory deregistration viaderegister_nixl_memory(#62341).tar.gzarchives for remoteworking_dirURIs (#62813)💫 Enhancements
NodeAffinitySchedulingStrategywith Label Selector API whensoft=False(#54940)SlicePlacementGrouplifecycle and support explicitbundle_label_selectorfor TPUs (#63171); add TPU head resource for Ironwood TPU (#62786),chips_per_vmarg (#62526), and v6e single-host fixes (#62306)ClockInterfacewith a fake clock for testing (#62562, #62502, #62476)IOContextMonitor; run GCS health check onio_service(#63042, #63166, #62608, #62374)request_resources(#63306)inspect_serializabilitymessages and traversal context (#63501, #63373, #63258); better worker startup error messages (#63714)runtime_envpackage approaches upload size limit (#63404); harden zip extraction path containment (#63786, #62813)OwnerDiedError(#63727); add dependency info to taskspec debug string (#62316)rayCLI help (#62748)InternalPubSub*toControlPlanePubSub*(#62806, #63044, #62461)rocm-smictypes binding withamd-smiPython interface (#62393); detect NVIDIA Blackwell consumer GPUs (#63322)ACTOR_UNAVAILABLEretries (#62330); improve State API filter key handling (#63638)setproctitleto skip launch services IPC calls (#63366); add timeout for first redis probe (#63148)ray upoutput (#63409); passlogging_configthrough Ray Clientray.init(#62192)DAGNode.execute()(#63716); remove experimental_ownersupport forray.put(#63520)🔨 Fixes
ray.gethanging forever when an object's owner dies during pull (#63694); resolveReferenceCounterrace onWORKER_REF_REMOVED_CHANNEL(#60495)runtime_envcache not detecting changes in-r-referenced requirements files (#63403)PrepareResources/CommitResources(#62836)ray job submitCLI viashlex.join(#63797) and--working-dirfor local zip files andhttp://URLs (#62843)ray stopfailing to terminate dashboard/runtime_env agents on Windows (#62428)ray downnot stopping Docker containers on worker nodes for local clusters (#62169); fix delayed/missing worker logs in Jupyter by flushing stdout/stderr (#63599)os.getcwd()on import by lazily evaluatingscratch_dir(#63040)FabricManagerstall on NVLink systems inGpuProfilingManager(#63312)OpenTelemetryMetricRecordersingleton init guard (#63081)MarkFootprintAsBusyclearing saved idle state for unrelated items (#62588); fixHandleIsLocalWorkerDeadfor drivers (#62688)AttributeErrorontracein client mode (#62955); fixIndexErrorin legacy post-mortem debugging ([#&#Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.