Make Qwen Image 2.1 the production image worker

This commit is contained in:
Mikei386
2026-09-21 10:41:32 +02:00
parent aee31aa045
commit 5de4ac4b25
19 changed files with 531 additions and 346 deletions
+51 -75
View File
@@ -572,7 +572,7 @@ services:
ALLOWED_PROFILES: fast,medium,large,ultra,uncensored
IMAGE_WORKER: image
RESTORE_WORKER: restore
QWEN_IMAGE_TEST_WORKER: qwen-image-2.1-test
FLUX_STANDBY_WORKER: flux-standby
TTS_WORKER: qwen3
MUSIC_WORKER: acestep
YUE2_WORKER: yue2
@@ -631,7 +631,8 @@ services:
IMAGE_DIR: /data/images
IMAGE_WORKER_URL: http://image-worker:8086
IMAGE_WORKER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
IMAGE_MODEL_NAME: FLUX.2-klein-9B-fp8-beta
IMAGE_MODEL_NAME: Qwen-Image-2.1-int8
IMAGE_INFERENCE_STEPS: "25"
CHAT_IMAGE_ALLOW_REMOTE_URLS: "false"
ENABLE_IMAGE_GENERATION: "true"
ENABLE_TTS: "true"
@@ -673,6 +674,51 @@ services:
condition: service_healthy
image-worker:
build:
context: platform/docker/qwen-image-worker
args:
COMFYUI_COMMIT: b0f4b7b294ce482a2e071d9d762c133d38c7aa07
image: mike-ai/qwen-image-worker:local
container_name: mike-ai-image-worker
restart: "no"
profiles: [image]
labels:
com.mike-ai.image-worker: image
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["${QWEN_IMAGE_21_GPU:-1}"]
capabilities: [gpu]
read_only: true
tmpfs:
- /tmp:size=4g,mode=1777
- /opt/ComfyUI/user:size=64m,mode=0755
- /opt/ComfyUI/temp:size=4g,mode=1777
- /opt/ComfyUI/input:size=512m,mode=0755
volumes:
- "${QWEN_IMAGE_21_MODEL_DIR:-/data/models/Qwen-Image-2.1-ComfyUI}:/opt/ComfyUI/models:ro"
- router-images:/data/images
environment:
NVIDIA_DRIVER_CAPABILITIES: compute,utility
PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True
WORKER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
IMAGE_DIR: /data/images
networks: [inference]
security_opt: ["no-new-privileges:true"]
cap_drop: [ALL]
healthcheck:
test: [CMD, python, -c, "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8086/health', timeout=2)"]
interval: 5s
timeout: 3s
retries: 90
start_period: 10s
# Previous production image model, retained as a stopped rollback target.
# It is outside the normal router path and can only be started through the
# controller's allowlisted flux-standby endpoint.
flux-image-worker:
build:
context: platform/docker/image-worker
args:
@@ -681,11 +727,11 @@ services:
ACCELERATE_VERSION: ${ACCELERATE_VERSION:-1.14.0}
HF_HUB_VERSION: ${HF_HUB_VERSION:-1.28.0}
image: mike-ai/image-worker:local
container_name: mike-ai-image-worker
container_name: mike-ai-flux-image-worker
restart: "no"
profiles: [image]
profiles: [flux-standby]
labels:
com.mike-ai.image-worker: image
com.mike-ai.image-worker: flux-standby
gpus: all
read_only: true
tmpfs: ["/tmp:size=1g,mode=1777"]
@@ -709,76 +755,6 @@ services:
timeout: 3s
retries: 12
# Isolated evaluation target. It is created in a stopped state by the
# preparation script and can only be started through the controller's
# allowlisted, GPU-exclusive test endpoint.
qwen-image-21-test:
build:
context: platform/docker/qwen-image-21-test
args:
COMFYUI_COMMIT: b0f4b7b294ce482a2e071d9d762c133d38c7aa07
image: mike-ai/qwen-image-2.1-test:local
container_name: mike-ai-qwen-image-2.1-test
restart: "no"
profiles: [qwen-image-test]
labels:
com.mike-ai.image-worker: qwen-image-2.1-test
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["${QWEN_IMAGE_21_GPU:-1}"]
capabilities: [gpu]
read_only: true
tmpfs:
- /tmp:size=4g,mode=1777
- /opt/ComfyUI/user:size=64m,mode=0755
- /opt/ComfyUI/temp:size=4g,mode=1777
volumes:
- "${QWEN_IMAGE_21_MODEL_DIR:-/data/models/Qwen-Image-2.1-ComfyUI}:/opt/ComfyUI/models:ro"
- "${QWEN_IMAGE_21_OUTPUT_DIR:-/data/qwen-image-2.1-test-output}:/opt/ComfyUI/output"
environment:
NVIDIA_DRIVER_CAPABILITIES: compute,utility
PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True
command:
- python
- main.py
- --listen
- 0.0.0.0
- --port
- "8188"
- --lowvram
- --preview-method
- none
networks: [inference]
security_opt: ["no-new-privileges:true"]
cap_drop: [ALL]
healthcheck:
test: [CMD, python, -c, "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8188/system_stats', timeout=2)"]
interval: 5s
timeout: 3s
retries: 60
start_period: 10s
qwen-image-21-test-runner:
image: python:3.12-slim
profiles: [qwen-image-test]
read_only: true
tmpfs: ["/tmp:size=32m,mode=1777"]
volumes:
- ./scripts/qwen-image-21-test.py:/opt/test/run.py:ro
- "${QWEN_IMAGE_21_OUTPUT_DIR:-/data/qwen-image-2.1-test-output}:/output"
environment:
CONTROLLER_URL: http://profile-controller:8090
CONTROLLER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}"
COMFY_URL: http://qwen-image-21-test:8188
OUTPUT_DIR: /output
command: [python, /opt/test/run.py]
networks: [control, inference]
security_opt: ["no-new-privileges:true"]
cap_drop: [ALL]
qwen3-tts:
image: ${QWEN3_TTS_IMAGE:-ghcr.io/malaiwah/qwen3-tts-server:latest@sha256:b363a01d08b1bbecbfc3ca6f585368fae2cfdc591f9ecca6643738369f9a9d98}
container_name: mike-ai-qwen3-tts