Configuration orientée idempotence, uv, et exécution serveur compatible systemd / GPU NVIDIA (H100 / DGX Spark).
./install.shCe script:
- installe
uvsi absent, - crée/réutilise le virtualenv dans
~/venv/<basename_project_dir>, - synchronise les dépendances via
uv sync(compatible upgrade).
cp .env.example .env
# puis éditez .envVariables importantes dans .env.example:
API_TOKEN(token d'accès API)INFERENCE_MODE,MODEL_ID(défaut recommandé:Qwen/Qwen-Image-Edit-2511),DEVICE,DTYPE- options commentées avec
#pour valeurs optionnelles/défaut (dontUNLOAD_IDLE_SECONDS=300pour décharger le modèle après inactivité).
source ./run.sh [IP] [PORT]
# exemple
source ./run.sh 0.0.0.0 8080run.sh:
- charge
.envautomatiquement, - active
~/venv/<basename_project_dir>, - lance
uv run uvicorn app:app ....
curl http://127.0.0.1:8080/healthzRetourne aussi loaded: true|false pour indiquer si le modèle est actuellement en mémoire.
curl -X POST http://127.0.0.1:8080/api/edit \
-H "Authorization: Bearer $API_TOKEN" \
-F "prompt=Make it cinematic" \
-F "files=@input.png"Réponse:
{
"images_base64": ["data:image/png;base64,..."],
"pipeline": "QwenImageEditPlusPipeline"
}[Unit]
Description=Image Editor API
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/image-editor
ExecStart=/usr/bin/bash -lc 'source /opt/image-editor/run.sh 0.0.0.0 8080'
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target- L'UI web reste compatible. Si
API_TOKENest activé côté backend, renseignez le champ API token dans l'interface avant de lancer une édition. - Alternative possible:
fal/Qwen-Image-Edit-2511-Multiple-Angles-LoRAviaMODEL_IDdans.env(pipelineQwenImageEditPlusPipelinerequis côté diffusers). Le défaut estQwen/Qwen-Image-Edit-2511pour rester sur le modèle officiel généraliste.
DEVICE=cudaDTYPE=bfloat16recommandé- pilotes NVIDIA + CUDA correctement installés côté hôte
- ajuster
MAX_SIDEet batch d'images selon la VRAM disponible
-
accelerateest inclus dans les dépendances pour améliorer le chargement modèle (moins de RAM CPU, init plus rapide). -
torchvisionest requis par certains processeurs Qwen2VL (sinon erreur au chargement pipeline).
- Vérifiez
GET /healthz:modedoit êtrelocal,device_requesteddoit êtrecuda, etcuda_availabledoit êtretrue. - Si
mode=endpoint, l'inférence se fait à distance (GPU local restera à 0%). - Si
cuda_available=falseavecDEVICE=cuda, le serveur retournera une erreur explicite (pilotes/CUDA/runtime conteneur à corriger).