Le moteur d'inférence
Dépannage
Étapes de démarrage, tableau des symptômes, installation hors ligne / pré-remplie
Cette page est traduite automatiquement à partir de la documentation en anglais.
Est-ce que ça fonctionne, ou est-ce bloqué ?
docker logs -f openplate-inference passe par trois étapes dans l'ordre. Voici à quoi ressemble chacune d'entre elles, afin de distinguer un conteneur « occupé » d'un conteneur « en panne ».
Étape 1 : téléchargement des poids (premier démarrage uniquement, de quelques minutes à une heure sur une connexion domestique). Les tailles s'affichent d'emblée afin de pouvoir comparer avec le débit de ta connexion :
═══════════════════════════════════════════════════════════════════════
openplate-inference: weights for MODEL_PROFILE=lite
destination: /models total: 1.96 GiB
═══════════════════════════════════════════════════════════════════════
▶ [model] downloading LFM2.5-VL-1.6B-Q8_0.gguf (1.16 GiB) from https://huggingface.co/...
This is a one-time download into /models. It is resumable:
restarting the container continues where it stopped.
###################################### 54.2%Bloqué ? Si le pourcentage ne bouge plus pendant cinq minutes, le téléchargement s'est interrompu. Redémarre le conteneur : il reprend là où il s'est arrêté, sans tout recommencer. Lors des démarrages ultérieurs, cette étape prend seulement quelques secondes de calcul d'empreintes :
▶ [model] LFM2.5-VL-1.6B-Q8_0.gguf: already present, verifying sha256 (1.16 GiB)...
✅ [model] LFM2.5-VL-1.6B-Q8_0.gguf verified, skipping download.
✅ All weights for profile 'lite' are present and verified.Si une somme de contrôle échoue, le journal affiche la commande exacte pour supprimer le fichier corrompu et réessayer. Suis-la. En cas de double échec sur le même fichier, un élément entre toi et Hugging Face altère le téléchargement (un portail captif ou un proxy de filtrage peut en être la cause). Essaye un autre réseau, ou préremplis le volume manuellement (ci-dessous).
Étape 2 : chargement du modèle (5 à 60 s, à chaque démarrage) :
═══════════════════════════════════════════════════════════════════════
Starting llama-server (this loads the model, expect 5 to 60 s)
profile: lite
model: /models/LFM2.5-VL-1.6B-Q8_0.gguf
mmproj: /models/mmproj-LFM2.5-VL-1.6b-F16.gguf
GPU: none detected, CPU only (-ngl 0, -t 8)
context: 8192 slots: 2
═══════════════════════════════════════════════════════════════════════
...
main: server is listening on http://127.0.0.1:8080 - starting the main loopVérifie la ligne GPU:. C'est ici que se diagnostique le problème « j'ai passé --gpus all et c'est toujours lent » : si la sortie indique none detected, le conteneur n'accède pas au GPU, et aucun réglage ailleurs ne résoudra le problème.
Étape 3 : prêt :
{"level":"info","msg":"openplate-inference listening","port":8300,
"model":"openplate-plate-1","profile":"lite","concurrency":2,"keyIds":"a1b2c3d4"}/readyz renvoie 200 à partir d'ici. Le service commence à écouter avant le modèle a fini de charger, délibérément : un démarrage bloqué sur un chargement de plusieurs gigaoctets ne se distingue pas d'un conteneur figé. Tant que le moteur d'exécution n'est pas prêt, /readyz le signale.
Pannes courantes, dans l'ordre où elles surviennent
| symptôme | cause |
|---|---|
| Le conteneur s'arrête immédiatement, avec une seule ligne sur stderr | Mauvaise configuration. Le message précise la variable. La configuration est validée au démarrage : un service lancé sans moteur d'exécution de modèle répond à chaque analyse par un code 502. |
| Le téléchargement se bloque, aucune progression | Redémarre, il reprend. |
CHECKSUM MISMATCH | Exécute la commande de récupération affichée. |
/readyz n'atteint jamais 200, les journaux s'arrêtent après l'étape 2 | Mémoire insuffisante pendant le chargement du modèle. Vérifie docker stats et les seuils minimaux de mémoire. |
| Les analyses renvoient 401 | Clé incorrecte ou expirée. Un redémarrage régénère la clé de démarrage. Définis API_KEYS. |
Les analyses renvoient 429 avec Retry-After | Comportement attendu : la file d'attente est pleine ou tu as dépassé RATE_LIMIT_RPM. |
| Les analyses renvoient 502 | Le service fonctionne mais pas l'environnement d'exécution du modèle. Regarde l'étape 2. En mode externe, vérifie MODEL_RUNTIME_API_KEY (voir État de disponibilité). |
Les analyses réussissent mais chaque macrosPer100g est null | La résolution des macros est désactivée. Soit FOOD_SOURCE=none, soit la base de données alimentaire n'a pas pu être lue : le journal de démarrage indique la cause. Voir Données alimentaires. L'identification fonctionne toujours. |
FOOD_SOURCE=lcc, et les macros deviennent null en cours de journée | Sans LCC_API_KEY, le palier anonyme est épuisé (1 000 crédits par jour UTC et par IP). Avec une clé, son quota mensuel est consommé ou LowCarbCheck a rejeté la clé. LowCarbCheck peut aussi être inaccessible. Le journal contient une ligne d'avertissement avec les champs stage, source, failed et attempted. Définis LCC_API_KEY, vérifie la clé, bascule vers fdc, ou attends le jour UTC suivant. |
| openplate n'affiche aucun encart « cette instance fournit sa propre IA » | DEFAULT_INFERENCE_BASE_URL n'est pas défini ou est inaccessible depuis le navigateur. Voir la méthode A dans le démarrage rapide du README. |
Installation hors ligne ou pré-remplie
Copie toi-même les GGUF dans le volume et l'étape de téléchargement deviendra une étape de vérification. Les noms de fichiers doivent correspondre exactement ; le manifeste contenant chaque nom de fichier et sha256 se trouve en haut de scripts/fetch-weights.sh.
docker run --rm -v openplate-models:/models -v "$PWD:/src" alpine \
cp /src/LFM2.5-VL-1.6B-Q8_0.gguf /src/mmproj-LFM2.5-VL-1.6b-F16.gguf /models/Si tu crées un miroir des poids sur ton propre stockage, définis WEIGHTS_MIRROR_BASE avec une URL de base contenant ces noms de fichiers ; Hugging Face reste la solution de secours et les sommes de contrôle sont vérifiées dans les deux cas, de sorte qu'un miroir ne peut pas te fournir des poids différents.
Toujours bloqué ?
- Problèmes de compatibilité avec l'environnement d'exécution (502 à chaque analyse, sortie tronquée ou corrompue, mauvaise concurrence) : Apporte ton propre moteur d'exécution.
- Pour tout autre problème : ouvre un ticket en indiquant le type et la version de ton environnement d'exécution, le modèle utilisé, la requête et la réponse concernées, ainsi que la sortie de ton
/readyz.