Signed-off-by: hsliu <liuhongsheng4@huawei.com> Co-authored-by: deepseek-v4-pro <noreply@anthropic.com>
152 lines
4.9 KiB
Markdown
152 lines
4.9 KiB
Markdown
# ERNIE-Image
|
|
|
|
> Text-to-image online serving (ERNIE-Image 8B)
|
|
|
|
## Summary
|
|
|
|
- Vendor: Baidu
|
|
- Model: `baidu/ERNIE-Image` / `baidu/ERNIE-Image-Turbo`
|
|
- Task: Text-to-image generation
|
|
- Mode: Online serving with the OpenAI-compatible API
|
|
- Maintainer: Community
|
|
|
|
## When to use this recipe
|
|
|
|
Use this recipe when you want a known-good starting point for serving
|
|
`baidu/ERNIE-Image` or `baidu/ERNIE-Image-Turbo` with vLLM-Omni for
|
|
high-quality text-to-image generation.
|
|
|
|
ERNIE-Image is an 8B-parameter Diffusion Transformer (DiT) model that achieves
|
|
state-of-the-art performance among open-weight text-to-image models. Key
|
|
strengths include:
|
|
|
|
- **Text rendering:** Excellent for dense, long-form, and layout-sensitive
|
|
text — ideal for posters, infographics, and UI-like images.
|
|
- **Instruction following:** Reliably handles complex prompts with multiple
|
|
objects, detailed relationships, and knowledge-intensive descriptions.
|
|
- **Structured generation:** Effective for posters, comics, storyboards, and
|
|
multi-panel compositions where layout matters.
|
|
- **Style coverage:** Supports realistic photography, design-oriented imagery,
|
|
and stylized aesthetic outputs.
|
|
- **Practical deployment:** Can run on consumer GPUs with 24GB VRAM.
|
|
|
|
Two model variants are provided:
|
|
|
|
1. **ERNIE-Image** — The SFT model with stronger general-purpose capability
|
|
and instruction fidelity, typically using 50 inference steps.
|
|
2. **ERNIE-Image-Turbo** — Optimized by DMD and RL for faster speed and
|
|
higher aesthetics, requiring only 8 inference steps.
|
|
|
|
## References
|
|
|
|
- Upstream model card: <https://huggingface.co/baidu/ERNIE-Image>
|
|
- Upstream model card (Turbo): <https://huggingface.co/baidu/ERNIE-Image-Turbo>
|
|
- GitHub: <https://github.com/baidu/ERNIE-Image>
|
|
- Blog: <https://ernie-image.github.io/>
|
|
|
|
## Hardware Support
|
|
|
|
This recipe currently documents tested configurations for CUDA GPU serving.
|
|
Add more sections for other hardware as community validation lands.
|
|
|
|
## GPU
|
|
|
|
### 1 x RTX 4090 (Single GPU, 24GB VRAM, Minimum Recommended)
|
|
|
|
#### Command
|
|
|
|
**ERNIE-Image (full model):**
|
|
|
|
```bash
|
|
vllm serve baidu/ERNIE-Image --omni \
|
|
--enable-layerwise-offload \
|
|
--port 8091
|
|
```
|
|
|
|
**ERNIE-Image-Turbo (distilled, faster):**
|
|
|
|
```bash
|
|
vllm serve baidu/ERNIE-Image-Turbo --omni \
|
|
--enable-layerwise-offload \
|
|
--port 8091
|
|
```
|
|
|
|
### 2 x RTX 4090 (Multi-GPU, 24GB VRAM)
|
|
|
|
#### Command
|
|
|
|
**ERNIE-Image (full model):**
|
|
|
|
```bash
|
|
vllm serve baidu/ERNIE-Image --omni \
|
|
--tensor-parallel-size 2 \
|
|
--enable-cpu-offload \
|
|
--port 8091
|
|
```
|
|
|
|
**ERNIE-Image-Turbo (distilled, faster):**
|
|
|
|
```bash
|
|
vllm serve baidu/ERNIE-Image-Turbo --omni \
|
|
--tensor-parallel-size 2 \
|
|
--enable-cpu-offload \
|
|
--port 8091
|
|
```
|
|
|
|
#### Verification
|
|
|
|
After the server is ready, test with a simple request:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8091/v1/images/generations \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"prompt": "A photo of a cat sitting on a laptop keyboard, digital art style.",
|
|
"size": "1024x1024",
|
|
"num_inference_steps": 50,
|
|
"guidance_scale": 4.0,
|
|
"seed": 42
|
|
}' | jq -r '.data[0].b64_json' | base64 -d > output.png
|
|
```
|
|
|
|
For ERNIE-Image-Turbo, reduce the inference steps:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8091/v1/images/generations \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"prompt": "A photo of a cat sitting on a laptop keyboard, digital art style.",
|
|
"size": "1024x1024",
|
|
"num_inference_steps": 8,
|
|
"guidance_scale": 1.0,
|
|
"seed": 42
|
|
}' | jq -r '.data[0].b64_json' | base64 -d > output.png
|
|
```
|
|
|
|
#### Notes
|
|
|
|
- **Memory usage:** The 8B model requires significant VRAM. Use
|
|
`--enable-cpu-offload` to reduce GPU memory footprint by offloading
|
|
components to CPU when not in use.
|
|
- **Key flags:**
|
|
- `--omni` — enables vLLM-Omni diffusion serving.
|
|
- **Advanced features:**
|
|
- **TP (Tensor Parallelism):** `--tensor-parallel-size <N>` — distribute
|
|
model weights across N GPUs.
|
|
- **SP (Sequence Parallelism):** `--usp <N>` (Ulysses SP) and `--ring <N>`
|
|
(Ring SP) for long-sequence workloads.
|
|
- **HSDP:** `--use-hsdp` enables Hybrid Sharded Data Parallelism; use
|
|
`--hsdp-shard-size` and `--hsdp-replicate-size` for fine-grained control.
|
|
- **Cache-DiT:** `--cache-backend cache_dit` caches DiT intermediate outputs
|
|
for faster generation; configure via `--cache-config`.
|
|
- **Layer offload:** `--enable-layerwise-offload` offloads DiT layers to CPU
|
|
for memory-constrained scenarios.
|
|
- **Prompt Enhancer (PE):** ERNIE-Image includes an optional 3B-parameter
|
|
Prompt Enhancer model that expands brief user inputs into richer structured
|
|
descriptions, improving output quality. Set `use_pe=False` in the request
|
|
body to disable it if you prefer direct prompt processing or want to use
|
|
larger LLMs (e.g., Gemini, ChatGPT) for prompt enhancement instead.
|
|
- **Recommended settings:**
|
|
- ERNIE-Image: `num_inference_steps=50`, `guidance_scale=4.0`
|
|
- ERNIE-Image-Turbo: `num_inference_steps=8`, `guidance_scale=1.0`
|