Skip to content

[ROCm][CI] Fix NIXL spec-decode acceptance startup and diagnostics - #41313

Merged
tjtanaa merged 3 commits into
vllm-project:mainfrom
ROCm:akaratza_fix_nixl_ci_bug
May 10, 2026
Merged

tjtanaa merged 3 commits into
vllm-project:mainfrom
ROCm:akaratza_fix_nixl_ci_bug

Conversation

@AndreasKaratzas

Copy link
Copy Markdown
Member
  • Use ATTENTION_BACKEND=ROCM_ATTN override in AMD Buildkite for the NIXL speculative-decoding acceptance test.
  • Make the NIXL spec-decode integration script fail fast when a server process exits before readiness instead of polling for the full timeout.
  • Pin this integration test path to 127.0.0.1 and set VLLM_NIXL_SIDE_CHANNEL_HOST explicitly so HTTP, proxy traffic, and NIXL side-channel metadata use the same loopback address family.
  • Improve NIXL KV-cache registration diagnostics when a tensor does not match the expected block dimension, including layer name, shape, stride, backend list, KV layout, and topology mode.

Scope Notes

  1. HTTP readiness is not enough for NIXL. The failing logs showed /v1/completions returning 200, then decode later timing out in _nixl_handshake() while waiting for prefill metadata on the side-channel socket. The new readiness check sends the same NIXL get_meta_msg request over ZMQ that decode needs, so the test does not start until the side channel is actually answering.

  2. localhost can resolve through IPv6 while the proxy path is already intentionally bound to 127.0.0.1 for CI. This test now uses 127.0.0.1 consistently and passes that host into the Python test for proxy and metrics access.

cc @kenroche

Signed-off-by: Andreas Karatzas <akaratza@amd.com>
@AndreasKaratzas
AndreasKaratzas marked this pull request as ready for review April 30, 2026 01:59

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request enhances the NIXL integration tests by introducing a side-channel probe, parameterizing hostnames, and improving server readiness checks to prevent orphaned processes. It also refines diagnostic logging and error reporting within the NIXL worker. Review feedback recommends using more specific exception types for runtime configuration mismatches and ensuring IPv6 compatibility when constructing URLs in shell scripts.

Comment on lines +770 to +783
raise AssertionError(
"All kv cache tensors must have the same number of "
f"blocks; layer={layer_name}, "
f"expected_num_blocks={num_blocks}, "
f"cache_shape={tuple(cache.shape)}, "
f"cache_stride={tuple(cache.stride())}, "
f"layer_spec={type(layer_spec).__name__}, "
f"backend={self.backend_name}, "
"all_backends="
f"{[backend.get_name() for backend in self.attn_backends]}, "
f"kv_cache_layout={self.kv_cache_layout}, "
"blocks_first="
f"{self.transfer_topo.is_kv_layout_blocks_first}"
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

While improving diagnostics is beneficial, raising a generic AssertionError with a manually constructed string is generally discouraged for runtime configuration mismatches that could be triggered by user-provided parameters (like block size or attention backend). Consider using a more specific exception type like RuntimeError or ValueError to distinguish this from internal logic bugs, which is what AssertionError typically represents in Python.

echo "FAIL: ${server_name} process ${server_pid} exited with status ${status} before port ${port} became ready"
exit 1
fi
if curl -s "http://${SERVER_HOST}:${port}${endpoint}" > /dev/null 2>&1; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The curl command uses http://${SERVER_HOST}:${port}${endpoint}. If SERVER_HOST is ever overridden with an IPv6 address (e.g., ::1), this URL will be malformed for curl because IPv6 addresses must be enclosed in square brackets. While the current default is 127.0.0.1, it is safer to handle potential IPv6 overrides to ensure robustness in different CI environments.

Suggested change
if curl -s "http://${SERVER_HOST}:${port}${endpoint}" > /dev/null 2>&1; then
local url="http://${SERVER_HOST}:${port}${endpoint}"
if [[ "$SERVER_HOST" =~ : ]]; then
url="http://[${SERVER_HOST}]:${port}${endpoint}"
fi
if curl -s "$url" > /dev/null 2>&1; then

@tjtanaa
tjtanaa requested review from heheda12345 and njhill May 4, 2026 03:36

@njhill njhill left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks

@AndreasKaratzas AndreasKaratzas added the ready ONLY add when PR is ready to merge/full CI is needed label May 7, 2026
@tjtanaa
tjtanaa merged commit f284012 into vllm-project:main May 10, 2026
70 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in AMD May 10, 2026
@AndreasKaratzas
AndreasKaratzas deleted the akaratza_fix_nixl_ci_bug branch May 10, 2026 20:54
weifang231 pushed a commit to weifang231/eb-vllm that referenced this pull request May 13, 2026
mfylcek pushed a commit to mfylcek/vllm that referenced this pull request May 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/build kv-connector ready ONLY add when PR is ready to merge/full CI is needed rocm Related to AMD ROCm v1

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants