Uploaded sanitized BC250/ROCm Repository.
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
# Z-Image-Turbo on AMD BC-250 — Setup Documentation
|
||||
|
||||
## Overview
|
||||
|
||||
**Z-Image-Turbo** image generation server running on **AMD BC-250** (GFX1013 RDNA2, 24 CUs) via **Vulkan** (RADV/Mesa) on **CachyOS**.
|
||||
|
||||
| Component | Detail |
|
||||
|-----------|--------|
|
||||
| **GPU** | AMD BC-250 — 24 CUs, GFX1013 RDNA2, 16 GB shared GDDR6 |
|
||||
| **Driver** | RADV (Mesa 25.3.4) via Vulkan 1.4.335 |
|
||||
| **Backend** | Vulkan only (no ROCm) |
|
||||
| **Server** | [stable-diffusion.cpp-restapi](https://github.com/fszontagh/stable-diffusion.cpp-restapi) |
|
||||
| **OS** | CachyOS (Arch-based) |
|
||||
|
||||
## Models
|
||||
|
||||
| Model | File | Size | Location |
|
||||
|-------|------|------|----------|
|
||||
| Z-Image-Turbo | `z_image_turbo-Q5_K_S.gguf` | 4.9 GB | `~/sd-models/diffusion_models/` |
|
||||
| Qwen3-4B Instruct | `Qwen3-4B-Instruct-2507-Q5_K_S.gguf` | 2.8 GB | `~/sd-models/llm/` |
|
||||
| FLUX VAE | `ae.safetensors` | 320 MB | `~/sd-models/vae/` |
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
~/
|
||||
├── stable-diffusion.cpp-restapi/
|
||||
│ └── build/
|
||||
│ ├── bin/sdcpp-restapi # Server binary (80 MB)
|
||||
│ ├── config.json # Server configuration
|
||||
│ └── webui/ # Vue.js WebUI
|
||||
├── sd-models/
|
||||
│ ├── diffusion_models/ # Main diffusion model GGUFs (Z-Image)
|
||||
│ ├── checkpoints/ # Legacy checkpoint models
|
||||
│ ├── vae/ # VAE models
|
||||
│ ├── llm/ # LLM models (prompt enhancement)
|
||||
│ ├── lora/ # LoRA adapters
|
||||
│ ├── clip/ # CLIP models
|
||||
│ ├── t5/ # T5 text encoders
|
||||
│ ├── embeddings/ # Textual inversions
|
||||
│ ├── controlnet/ # ControlNet models
|
||||
│ ├── esrgan/ # Upscaler models
|
||||
│ └── taesd/ # Tiny AutoEncoder models
|
||||
├── sd-outputs/ # Generated images
|
||||
├── start-zimage.sh # Quick start script
|
||||
└── .config/systemd/user/
|
||||
└── zimage.service # Systemd user service
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Option 1: Manual start
|
||||
~/start-zimage.sh
|
||||
|
||||
# Option 2: Systemd service
|
||||
systemctl --user start zimage
|
||||
```
|
||||
|
||||
Then open: **http://localhost:8080/ui**
|
||||
|
||||
## Usage
|
||||
|
||||
### WebUI
|
||||
|
||||
1. Open http://localhost:8080/ui
|
||||
2. Go to **Models** → select `z_image_turbo-Q5_K_S.gguf`
|
||||
3. Set VAE to `ae.safetensors`, LLM to `Qwen3-4B-Instruct-2507-Q5_K_S.gguf`
|
||||
4. First load takes 20–40 seconds
|
||||
5. Settings: **Steps 8**, **CFG 1.0**, **Euler** sampler
|
||||
6. Start with 512×512 (~37 s), then try 1024×1024 (~80 s)
|
||||
|
||||
### API — Load Model
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8080/models/load \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model_name": "z_image_turbo-Q5_K_S.gguf",
|
||||
"model_type": "diffusion",
|
||||
"vae": "ae.safetensors",
|
||||
"llm": "Qwen3-4B-Instruct-2507-Q5_K_S.gguf"
|
||||
}'
|
||||
```
|
||||
|
||||
### API — Generate Image (512×512)
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8080/txt2img \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"prompt": "astronaut on mars, cinematic",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"steps": 8,
|
||||
"cfg_scale": 1.0,
|
||||
"sampler_name": "euler",
|
||||
"scheduler": "smoothstep",
|
||||
"seed": -1
|
||||
}' --output image.png
|
||||
```
|
||||
|
||||
## Systemd Service
|
||||
|
||||
```bash
|
||||
# Enable auto-start on login
|
||||
systemctl --user enable zimage
|
||||
|
||||
# Start / stop / restart
|
||||
systemctl --user start zimage
|
||||
systemctl --user stop zimage
|
||||
systemctl --user restart zimage
|
||||
|
||||
# View logs
|
||||
journalctl --user -u zimage -f
|
||||
```
|
||||
|
||||
## Vulkan Environment Variables
|
||||
|
||||
| Variable | Value | Purpose |
|
||||
|----------|-------|---------|
|
||||
| `AMD_VULKAN_ICD` | `RADV` | Use Mesa RADV driver |
|
||||
| `GGML_VK_FORCE_MAX_ALLOCATION_SIZE` | `536870912` | 512 MB max alloc (OOM prevention) |
|
||||
| `RADV_PERFTEST` | `nggc` | NGG culling compute boost |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Slow generation (>20s at 1024×1024)
|
||||
```bash
|
||||
# Check logs for allocation failures
|
||||
journalctl --user -u zimage -f
|
||||
|
||||
# Try reducing max allocation to 256 MB
|
||||
export GGML_VK_FORCE_MAX_ALLOCATION_SIZE=268435456
|
||||
|
||||
# Try AMDVLK instead of RADV
|
||||
sudo pacman -S amdvlk
|
||||
export AMD_VULKAN_ICD=AMDVLK
|
||||
```
|
||||
|
||||
### Vulkan not detecting GPU
|
||||
```bash
|
||||
# Verify Vulkan
|
||||
vulkaninfo --summary | grep BC-250
|
||||
|
||||
# Force ICD file path
|
||||
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json vulkaninfo
|
||||
```
|
||||
|
||||
### Out of Memory (OOM)
|
||||
- Use Q3_K_S quantization (smaller model)
|
||||
- Set `batch_count: 1` in generation requests
|
||||
- Reduce resolution to 512×512
|
||||
|
||||
### Monitor GPU
|
||||
```bash
|
||||
# GPU utilization
|
||||
watch radeontop
|
||||
|
||||
# VRAM usage
|
||||
cat /sys/class/drm/card0/device/mem_info_vram_used
|
||||
```
|
||||
|
||||
## Build from Source (Reference)
|
||||
|
||||
```bash
|
||||
cd ~/stable-diffusion.cpp-restapi
|
||||
mkdir -p build && cd build
|
||||
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DSD_VULKAN=ON -DSDCPP_WEBUI=ON
|
||||
ninja -j$(nproc --all)
|
||||
```
|
||||
|
||||
## Performance Expectations
|
||||
|
||||
| Resolution | Expected Time | Notes |
|
||||
|------------|--------------|-------|
|
||||
| 512×512 | ~37 seconds | Q5_K_S, 8 steps, Euler, Vulkan |
|
||||
| 512×1024 | ~80 seconds | Q5_K_S, 8 steps, Euler, Vulkan |
|
||||
| 1024×1024 | ~150 seconds | Q5_K_S, 8 steps, Euler, Vulkan |
|
||||
| First load | 20–40 seconds | One-time on startup |
|
||||
Reference in New Issue
Block a user