vllm-project/vllm · error · Error
unsupported multimodal content: {0}
Error message
unsupported multimodal content: {0} What it means
The nixl EPLB backend registers GPU memory with a NIXL agent for one-sided RDMA-style transfers, which requires a CUDA-like platform and expert weights resident on the device. Either the platform is not CUDA-like or the expert weight tensors are on CPU.
Source
Thrown at rust/src/chat/src/error.rs:22
use thiserror::Error;
use thiserror_ext::{AsReport as _, Macro};
type BoxedError = Box<dyn std::error::Error + Send + Sync>;
#[derive(Debug, Error, Macro)]
#[thiserror_ext(macro(path = "crate::error"))]
pub enum Error {
#[error("chat request must contain at least one message")]
EmptyMessages,
#[error("cannot continue the final message when the last message is not from the assistant")]
ContinueFinalAssistantWithoutFinalAssistant,
#[error("chat template is required but none was configured")]
MissingChatTemplate,
#[error("chat template error: {0}")]
ChatTemplate(String),
#[error("multimodal input is not supported by this chat renderer")]
UnsupportedMultimodalRenderer,
#[error("unsupported multimodal content: {0}")]
UnsupportedMultimodalContent(&'static str),
#[error("`{modality}` input is not supported by this model")]
UnsupportedModality { modality: String },
#[error("At most {limit} {modality}(s) may be provided in one prompt.")]
MmLimitExceeded { modality: String, limit: usize },
#[error("multimodal preprocessing error: {0}")]
Multimodal(#[message] String),
#[error("{kind} parsing is not available for model `{model_id}`")]
ParserUnavailableForModel {
kind: &'static str,
model_id: String,
},
#[error("{kind} parsing is disabled by frontend configuration")]
ParserDisabled { kind: &'static str },
#[error(
"{kind} parser `{name}` is not registered{}",
available_parser_hint(.available_names)
)]View on GitHub (pinned to c794754062)
Solutions
- Ensure expert weights are on the GPU before the EPLB communicator is created
- On CPU or unsupported platforms, use 'torch_gloo' (CPU) or 'torch_nccl' instead
- On ROCM/other accelerators, confirm the platform reports is_cuda_alike() or wait for platform support
Example fix
# before backend = "nixl" # expert weights on CPU # after weights = [w.cuda() for w in weights] backend = "nixl"
Defensive patterns
Strategy: validation
Validate before calling
from vllm.platforms import current_platform device_ok = current_platform.is_cuda_alike() and expert_weights[0][0].device.type != 'cpu' backend = 'nixl' if device_ok else 'torch_gloo'
Prevention
- Move expert weights to GPU before EPLB communicator construction
- Detect platform capabilities at startup and pick a supported backend automatically
When it happens
Trigger: Requesting backend='nixl' on non-CUDA platforms (e.g. ROCM without cuda-alike platform detection, CPU inference) or when expert weights are still on CPU (offloading or pre-H2D initialization).
Common situations: CPU-offloaded MoE deployments wanting NIXL; running on accelerator platforms not covered by current_platform.is_cuda_alike(); creating the communicator before weights are moved to GPU.
Related errors
- Configuration error: {0}
- Endpoint not ready after {0}s: {1}
- Backend error: {0}
- IO error: {0}
- Image generation should not fail
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/abd8998d51e3e887.
Report an issue: GitHub.