Files
vllm-omni/docs/user_guide/examples/online_serving/qwen3_omni.md
T

5.8 KiB

Qwen3-Omni

Source https://github.com/vllm-project/vllm-omni/tree/main/examples/online_serving/qwen3_omni.

🛠️ Installation

Please refer to README.md

Run examples (Qwen3-Omni)

Launch the Server

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni --port 8091

If you have custom stage configs file, launch the server with command below

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni --port 8091 --stage-configs-path /path/to/stage_configs_file

Send Multi-modal Request

Get into the example folder

cd examples/online_serving/qwen3_omni

Send request via python

python openai_chat_completion_client_for_multimodal_generation.py --query-type use_image

The Python client supports the following command-line arguments:

  • --query-type (or -q): Query type (default: use_video)
    • Options: text, use_audio, use_image, use_video
  • --model (or -m): Model name/path (default: Qwen/Qwen3-Omni-30B-A3B-Instruct)
  • --video-path (or -v): Path to local video file or URL
    • If not provided and query-type is use_video, uses default video URL
    • Supports local file paths (automatically encoded to base64) or HTTP/HTTPS URLs
    • Example: --video-path /path/to/video.mp4 or --video-path https://example.com/video.mp4
  • --image-path (or -i): Path to local image file or URL
    • If not provided and query-type is use_image, uses default image URL
    • Supports local file paths (automatically encoded to base64) or HTTP/HTTPS URLs
    • Supports common image formats: JPEG, PNG, GIF, WebP
    • Example: --image-path /path/to/image.jpg or --image-path https://example.com/image.png
  • --audio-path (or -a): Path to local audio file or URL
    • If not provided and query-type is use_audio, uses default audio URL
    • Supports local file paths (automatically encoded to base64) or HTTP/HTTPS URLs
    • Supports common audio formats: MP3, WAV, OGG, FLAC, M4A
    • Example: --audio-path /path/to/audio.wav or --audio-path https://example.com/audio.mp3
  • --prompt (or -p): Custom text prompt/question
    • If not provided, uses default prompt for the selected query type
    • Example: --prompt "What are the main activities shown in this video?"

For example, to use a local video file with custom prompt:

python openai_chat_completion_client_for_multimodal_generation.py \
    --query-type use_video \
    --video-path /path/to/your/video.mp4 \
    --prompt "What are the main activities shown in this video?"

Send request via curl

bash run_curl_multimodal_generation.sh use_image

FAQ

If you encounter error about backend of librosa, try to install ffmpeg with command below.

sudo apt update
sudo apt install ffmpeg

Modality control

If you want to control output modalities, e.g. only output text, you can run the command below:

python openai_chat_completion_client_for_multimodal_generation.py \
    --query-type use_image \
    --modalities text

Run Local Web UI Demo

This Web UI demo allows users to interact with the model through a web browser.

Running Gradio Demo

The Gradio demo connects to a vLLM API server. You have two options:

The convenience script launches both the vLLM server and Gradio demo together:

./run_gradio_demo.sh --model Qwen/Qwen3-Omni-30B-A3B-Instruct --server-port 8091 --gradio-port 7861

This script will:

  1. Start the vLLM server in the background
  2. Wait for the server to be ready
  3. Launch the Gradio demo
  4. Handle cleanup when you press Ctrl+C

The script supports the following arguments:

  • --model: Model name/path (default: Qwen/Qwen3-Omni-30B-A3B-Instruct)
  • --server-port: Port for vLLM server (default: 8091)
  • --gradio-port: Port for Gradio demo (default: 7861)
  • --stage-configs-path: Path to custom stage configs YAML file (optional)
  • --server-host: Host for vLLM server (default: 0.0.0.0)
  • --gradio-ip: IP for Gradio demo (default: 127.0.0.1)
  • --share: Share Gradio demo publicly (creates a public link)

Option 2: Manual Launch (Two-Step Process)

Step 1: Launch the vLLM API server

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni --port 8091

If you have custom stage configs file:

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni --port 8091 --stage-configs-path /path/to/stage_configs_file

Step 2: Run the Gradio demo

In a separate terminal:

python gradio_demo.py --model Qwen/Qwen3-Omni-30B-A3B-Instruct --api-base http://localhost:8091/v1 --port 7861

Then open http://localhost:7861/ on your local browser to interact with the web UI.

The gradio script supports the following arguments:

  • --model: Model name/path (should match the server model)
  • --api-base: Base URL for the vLLM API server (default: http://localhost:8091/v1)
  • --ip: Host/IP for Gradio server (default: 127.0.0.1)
  • --port: Port for Gradio server (default: 7861)
  • --share: Share the Gradio demo publicly (creates a public link)

Example materials

??? abstract "gradio_demo.py" py --8<-- "examples/online_serving/qwen3_omni/gradio_demo.py" ??? abstract "openai_chat_completion_client_for_multimodal_generation.py" py --8<-- "examples/online_serving/qwen3_omni/openai_chat_completion_client_for_multimodal_generation.py" ??? abstract "qwen3_omni_moe_thinking.yaml" yaml --8<-- "examples/online_serving/qwen3_omni/qwen3_omni_moe_thinking.yaml" ??? abstract "run_curl_multimodal_generation.sh" sh --8<-- "examples/online_serving/qwen3_omni/run_curl_multimodal_generation.sh" ??? abstract "run_gradio_demo.sh" sh --8<-- "examples/online_serving/qwen3_omni/run_gradio_demo.sh"