122 lines
3.7 KiB
Markdown
122 lines
3.7 KiB
Markdown
# Quickstart
|
|
|
|
This guide will help you quickly get started with vLLM-Omni to perform:
|
|
|
|
- Offline batched inference
|
|
- Online serving using OpenAI-compatible server
|
|
|
|
## Prerequisites
|
|
|
|
- OS: Linux
|
|
- Python: 3.12
|
|
|
|
## Installation
|
|
|
|
For installation on GPU from source:
|
|
|
|
```bash
|
|
uv venv --python 3.12 --seed
|
|
source .venv/bin/activate
|
|
|
|
# On CUDA
|
|
uv pip install vllm==0.25.0 --torch-backend=auto
|
|
|
|
# On ROCm
|
|
uv pip install vllm==0.25.0+rocm723 --extra-index-url https://wheels.vllm.ai/rocm/0.25.0/rocm723
|
|
|
|
git clone https://github.com/vllm-project/vllm-omni.git
|
|
cd vllm-omni
|
|
uv pip install -e .
|
|
```
|
|
|
|
For additional installation methods — please see the [installation guide](installation/README.md).
|
|
|
|
!!! note
|
|
It is important to install the same major & minor version of vLLM and vLLM Omni, otherwise things may not work as expected. If the versions are misaligned, you will see a warning when you import vLLM Omni.
|
|
|
|
If you are seeing strange behavior with the `vllm` command not handling the `--omni` flag correctly, you most likely have a version mismatch with vLLM < `0.25.0` and vLLM Omni `0.25.0`, as vLLM Omni no longer hijacks the vLLM entrypoint. Updating vLLM should resolve this issue.
|
|
|
|
## Offline Inference
|
|
|
|
Text-to-image generation quickstart with vLLM-Omni:
|
|
|
|
```python
|
|
from vllm_omni.entrypoints.omni import Omni
|
|
|
|
if __name__ == "__main__":
|
|
omni = Omni(model="Tongyi-MAI/Z-Image-Turbo")
|
|
prompt = "a cup of coffee on the table"
|
|
outputs = omni.generate(prompt)
|
|
images = outputs[0].request_output.images
|
|
images[0].save("coffee.png")
|
|
```
|
|
|
|
You can pass a list of prompts and wait for the independent requests to finish,
|
|
as shown below.
|
|
|
|
!!! info
|
|
|
|
For diffusion pipelines, each prompt becomes a separate logical request.
|
|
The runtime may automatically batch compatible in-flight requests through
|
|
the scheduler and runner.
|
|
|
|
```python
|
|
from vllm_omni.entrypoints.omni import Omni
|
|
|
|
if __name__ == "__main__":
|
|
omni = Omni(
|
|
model="Tongyi-MAI/Z-Image-Turbo",
|
|
# stage_configs_path="./stage-config.yaml", # See below
|
|
)
|
|
prompts = [
|
|
"a cup of coffee on a table",
|
|
"a toy dinosaur on a sandy beach",
|
|
"a fox waking up in bed and yawning",
|
|
]
|
|
omni_outputs = omni.generate(prompts)
|
|
for i_prompt, prompt_output in enumerate(omni_outputs):
|
|
this_request_output = prompt_output.request_output
|
|
this_images = this_request_output.images
|
|
for i_image, image in enumerate(this_images):
|
|
image.save(f"p{i_prompt}-img{i_image}.jpg")
|
|
print("saved to", f"p{i_prompt}-img{i_image}.jpg")
|
|
# saved to p0-img0.jpg
|
|
# saved to p1-img0.jpg
|
|
# saved to p2-img0.jpg
|
|
```
|
|
|
|
!!! info
|
|
|
|
For diffusion request-level batching controls such as `max_num_seqs` and
|
|
`request_batch_max_wait_ms`, see
|
|
[Request-Level Batching](../user_guide/diffusion/request_batching.md).
|
|
|
|
For more usages, please refer to [offline inference](../user_guide/examples/offline_inference/qwen2_5_omni.md)
|
|
|
|
## Online Serving with OpenAI-Completions API
|
|
|
|
Text-to-image generation quickstart with vLLM-Omni:
|
|
|
|
```bash
|
|
vllm serve Tongyi-MAI/Z-Image-Turbo --omni --port 8091
|
|
```
|
|
|
|
```bash
|
|
curl -s http://localhost:8091/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"messages": [
|
|
{"role": "user", "content": "a cup of coffee on the table"}
|
|
],
|
|
"extra_body": {
|
|
"height": 1024,
|
|
"width": 1024,
|
|
"num_inference_steps": 50,
|
|
"guidance_scale": 4.0,
|
|
"seed": 42
|
|
}
|
|
}' | jq -r '.choices[0].message.content[0].image_url.url' | cut -d',' -f2 | base64 -d > coffee.png
|
|
```
|
|
|
|
For more details, please refer to [online serving](../user_guide/examples/online_serving/text_to_image.md).
|