vllm-project/vllm · error · ValueError
To load a model from object storage (S3/GCS/Azure), 'load_fo
Error message
To load a model from object storage (S3/GCS/Azure), 'load_format' must be 'modelexpress', 'runai_streamer' or 'runai_streamer_sharded', but got '{self.load_config.load_format}'. Model: {self.model_config.model} What it means
When the model path points at object storage (S3/GCS/Azure), vLLM can only stream the weights via one of the dedicated loaders: 'modelexpress', 'runai_streamer', or 'runai_streamer_sharded'. If the detected object-storage model is paired with any other explicit load_format, validation raises. Note: with load_format='auto' vLLM auto-selects 'runai_streamer'.
Source
Thrown at vllm/config/vllm.py:2218
from vllm.model_executor.models.adapters import SequenceClassificationConfig
SequenceClassificationConfig.verify_and_update_config(self)
if hasattr(self.model_config, "model_weights") and is_runai_obj_uri(
self.model_config.model_weights
):
if self.load_config.load_format == "auto":
logger.info(
"Detected Run:ai model config. "
"Overriding `load_format` to 'runai_streamer'"
)
self.load_config.load_format = "runai_streamer"
elif self.load_config.load_format not in (
"modelexpress",
"runai_streamer",
"runai_streamer_sharded",
):
raise ValueError(
f"To load a model from object storage (S3/GCS/Azure), "
f"'load_format' must be 'modelexpress', 'runai_streamer' or "
f"'runai_streamer_sharded', "
f"but got '{self.load_config.load_format}'. "
f"Model: {self.model_config.model}"
)
def compile_debug_dump_path(self) -> Path | None:
"""Returns a rank-aware path for dumping
torch.compile debug information.
"""
if self.compilation_config.debug_dump_path is None:
return None
tp_rank = self.parallel_config.rank
dp_rank = self.parallel_config.data_parallel_index
append_path = f"rank_{tp_rank}_dp_{dp_rank}"
path = self.compilation_config.debug_dump_path / append_path
return pathView on GitHub (pinned to c794754062)
Solutions
- Remove the explicit `--load-format` so 'auto' detection picks runai_streamer for object storage.
- Or set `--load-format runai_streamer` (or 'runai_streamer_sharded' / 'modelexpress') explicitly.
- Or download the model locally and point --model at the local path.
Example fix
# before vllm serve s3://my-bucket/my-model --load-format safetensors # after vllm serve s3://my-bucket/my-model --load-format runai_streamer
Defensive patterns
Strategy: validation
Validate before calling
OBJECT_PREFIXES = ("s3://", "gs://", "az://")
STREAMING_FORMATS = {"auto", "modelexpress", "runai_streamer", "runai_streamer_sharded"}
if model.startswith(OBJECT_PREFIXES) and load_format not in STREAMING_FORMATS:
load_format = "runai_streamer" Try / catch
try:
LLM(model=s3_path, load_format=lf, ...)
except ValueError as e:
if "load_format" in str(e) and "object storage" in str(e):
LLM(model=s3_path, load_format="runai_streamer", ...)
else:
raise Prevention
- Use load_format='auto' and let vLLM detect Run:ai config
- Gate --load-format on the model path scheme
When it happens
Trigger: Setting `--model s3://bucket/...` (or gs://, az://) together with `--load-format` set to a non-streaming format like 'safetensors', 'pt', or 'dummy'
Common situations: Moving from local checkpoints to an S3-hosted model while keeping an existing `--load-format safetensors` in the launch config; using a custom loader that cannot read from cloud storage.
Related errors
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/b2fd9c0d7eb5572e.
Report an issue: GitHub.