Hi
Trying to run vllm omni the lastest docker image with 2x5090 and getting these:
AssertionError: DP adjusted local rank 1 is out of bounds for 1 devices.
(StageEngineCoreProc_stage0_replica0 pid=184) INFO 07-26 21:07:11 [multiproc_executor.py:426] [shutdown] Executor: waiting for worker exit count=2
The error AssertionError: DP adjusted local rank 1 is out of bounds for 1 devices occurs because the default stage config for Qwen3-Omni expects 2 GPUs, but when you pass --tensor-parallel-size 2 on the CLI, it is merged into all stages, including those that only expose a single device. This causes vLLM-Omni to try to launch a second TP worker on a non-visible device, resulting in the invalid device ordinal error. To fix this, do not pass --tensor-parallel-size 2 on the CLI; instead, use the default YAML stage config and adjust it if needed. See the discussion in vllm-omni #236 and vllm-omni #5003.
Would you like more detail on how to customize the stage config for your setup?
The official vLLM-Omni Docker docs show the correct pattern: you should not pass --tensor-parallel-size 2 for Qwen3-Omni, as the default stage config already sets up the correct parallelism for 2 GPUs. Instead, use the following command (note the absence of --tensor-parallel-size):
This approach is documented in the official installation guide and cuda.inc.md. Passing --tensor-parallel-size on the CLI can override and break the default config, which is why it should be omitted unless you are customizing the YAML yourself.
Would you like step-by-step instructions for customizing the YAML if you need a different GPU setup?
@Herald, yes, I need setup for 2x5090. Without the tensor-parallel = 2 it gives out of memory. So how can I utilize both GPUs? what is the exact docker run command with 2 5090 with 32GB memory. Also I could try some other omni supported models if there is one, which would fit better on 2x5090?
To use both 2×5090 GPUs (32GB each) for Qwen3-Omni-30B-A3B-Instruct, you must edit the stage config YAML to set tensor_parallel_size: 2 for the Thinker stage, since the default config may not fit on 32GB cards. The official Docker command alone is not enough; you need to mount your custom YAML and point to it with --stage-configs-path. See this example YAML and discussion.
Example command (assuming you saved your edited YAML as /path/to/qwen3_omni_2gpu.yaml):
To customize vLLM-Omni for 2×5090 GPUs, you should create a new YAML stage config file based on the default, then mount it into your Docker container. Here’s a step-by-step guide:
1. Download the default YAML:
Find the default config for Qwen3-Omni at qwen3_omni_moe.yaml. Download this file to your local machine.
2. Edit the YAML:
Open the file and set tensor_parallel_size: 2 for the Thinker stage (usually stage_id: 0). Example:
For Qwen3-Omni, only the Thinker stage (stage_id: 0) should use tensor_parallel_size: 2 and devices: “0,1”. The Talker (stage_id: 1) and Code2Wav (stage_id: 2) stages are much smaller and should run on a single GPU (e.g., devices: “1” for both), and should NOT use tensor_parallel_size: 2. Setting tensor_parallel_size: 2 and devices: “0,1” for stage 1 will cause unnecessary memory usage and likely OOM on 32GB cards (see discussion, official YAML example).
This layout is verified to work on 2x48GB and should fit on 2x32GB with reduced batch size or max_num_batched_tokens if needed (see here). If you still get OOM, try lowering max_num_batched_tokens or gpu_memory_utilization further.