⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Docker Model Runner

Availability: Beta
Requires: Docker Engine or Docker Desktop (Windows) 4.41+ or Docker Desktop (MacOS) 4.40+
For: Docker Desktop for Mac with Apple Silicon or Windows with NVIDIA GPUs

Fonctionnalités clés

  • Télécharger et pousser des modèles vers et depuis Docker Hub
  • Empaqueter les fichiers GGUF comme artefacts OCI et les publier sur n'importe quel registre de conteneurs
  • Exécuter et interagir avec des modèles IA directement depuis la ligne de commande ou depuis l'interface graphique de Docker Desktop
  • Gérer les modèles locaux et afficher les logs

Comment ça fonctionne

Les modèles sont téléchargés depuis Docker Hub la première fois qu'ils sont utilisés et stockés localement. Ils sont chargés en mémoire uniquement à l'exécution quand une requête est faite, et déchargés quand ils ne sont pas utilisés pour optimiser les ressources. Étant donné que les modèles peuvent être volumineux, le téléchargement initial peut prendre du temps — mais après cela, ils sont mis en cache localement pour un accès plus rapide. Vous pouvez interagir avec le modèle en utilisant des API compatibles OpenAI.

Tip

Vous utilisez Testcontainers ou Docker Compose ? Testcontainers pour Java et Go, et Docker Compose prennent maintenant en charge Docker Model Runner.

Activer Docker Model Runner

Activer DMR dans Docker Desktop

  1. Naviguez vers l'onglet Fonctionnalités bêta dans les paramètres.
  2. Cochez le paramètre Activer Docker Model Runner.
  3. Si vous êtes sur Windows avec un GPU NVIDIA pris en charge, vous devriez également voir et pouvoir cocher le paramètre Activer l'inférence accélérée par GPU.

Vous pouvez maintenant utiliser la commande docker model dans la CLI et visualiser et interagir avec vos modèles locaux dans l'onglet Modèles du tableau de bord Docker Desktop.

Important

Pour les versions Docker Desktop 4.41 et antérieures, ce paramètre se trouvait sous l'onglet Fonctionnalités expérimentales sur la page Fonctionnalités en développement.

Activer DMR dans Docker Engine

  1. Assurez-vous d'avoir installé Docker Engine.

  2. DMR est disponible sous forme de package. Pour l'installer, exécutez :

    $ sudo apt-get update
    $ sudo apt-get install docker-model-plugin
    
    $ sudo dnf update
    $ sudo dnf install docker-model-plugin
    
  3. Testez l'installation :

    $ docker model version
    $ docker model run ai/smollm2
    

Télécharger un modèle

Les modèles sont mis en cache localement.

  1. Sélectionnez Modèles et sélectionnez l'onglet Docker Hub.
  2. Trouvez le modèle de votre choix et sélectionnez Télécharger.

Exécuter un modèle

Sélectionnez Modèles et sélectionnez l'onglet Local et cliquez sur le bouton lecture. L'écran de chat interactif s'ouvre.

Dépannage

Pour dépanner les problèmes potentiels, affichez les logs :

Sélectionnez Modèles et sélectionnez l'onglet Logs.

Publier un modèle

Note

Cela fonctionne pour tout registre de conteneurs prenant en charge les artefacts OCI, pas seulement Docker Hub.

Vous pouvez étiqueter des modèles existants avec un nouveau nom et les publier sous un espace de noms et un dépôt différents :

# Étiqueter un modèle téléchargé sous un nouveau nom
$ docker model tag ai/smollm2 myorg/smollm2

# Le pousser vers Docker Hub
$ docker model push myorg/smollm2

Pour plus de détails, voir la documentation des commandes docker model tag et docker model push.

Vous pouvez également empaqueter directement un fichier de modèle au format GGUF comme artefact OCI et le publier sur Docker Hub.

# Télécharger un fichier de modèle au format GGUF, par exemple depuis HuggingFace
$ curl -L -o model.gguf https://huggingface.co/TheBloke/Mistral-7B-v0.1-GGUF/resolve/main/mistral-7b-v0.1.Q4_K_M.gguf

# L'empaqueter comme artefact OCI et le pousser vers Docker Hub
$ docker model package --gguf "$(pwd)/model.gguf" --push myorg/mistral-7b-v0.1:Q4_K_M

Pour plus de détails, voir la documentation de la commande docker model package.

Exemple : Intégrer Docker Model Runner dans votre cycle de vie de développement logiciel

Vous pouvez maintenant commencer à construire votre application IA générative alimentée par Docker Model Runner.

Si vous voulez essayer une application GenAI existante, suivez ces instructions.

  1. Configurez l'application exemple. Clonez et exécutez le dépôt suivant :

    $ git clone https://github.com/docker/hello-genai.git
    
  2. Dans votre terminal, naviguez vers le répertoire hello-genai.

  3. Exécutez run.sh pour télécharger le modèle choisi et exécuter la/les application(s) :

  4. Ouvrez votre application dans le navigateur aux adresses spécifiées dans le README du dépôt.

Vous verrez l'interface de l'application GenAI où vous pouvez commencer à taper vos invites.

Vous pouvez maintenant interagir avec votre propre application GenAI, alimentée par un modèle local. Essayez quelques invites et remarquez à quel point les réponses sont rapides — tout s'exécute sur votre machine avec Docker.

FAQ

Quels modèles sont disponibles ?

Tous les modèles disponibles sont hébergés dans l'espace de noms public Docker Hub ai.

Quelles commandes CLI sont disponibles ?

Voir la documentation de référence.

Quels points de terminaison API sont disponibles ?

Une fois la fonctionnalité activée, de nouveaux points de terminaison API sont disponibles sous les URL de base suivantes :

  • Depuis les conteneurs : http://model-runner.docker.internal/
  • Depuis les processus hôte : http://localhost:12434/, en supposant que l'accès TCP hôte est activé sur le port par défaut (12434).
  • Depuis les conteneurs : http://172.17.0.1:12434/ (avec 172.17.0.1 représentant l'adresse de passerelle hôte)
  • Depuis les processus hôte : http://localhost:12434/
Note

L'interface 172.17.0.1 peut ne pas être disponible par défaut pour les conteneurs dans un projet Compose. Dans ce cas, ajoutez une directive extra_hosts à votre YAML de service Compose :

extra_hosts:
  - "model-runner.docker.internal:host-gateway"

Ensuite, vous pouvez accéder aux API Docker Model Runner à http://model-runner.docker.internal:12434/

Points de terminaison de gestion de modèles Docker :

POST /models/create
GET /models
GET /models/{namespace}/{name}
DELETE /models/{namespace}/{name}

Points de terminaison OpenAI :

GET /engines/llama.cpp/v1/models
GET /engines/llama.cpp/v1/models/{namespace}/{name}
POST /engines/llama.cpp/v1/chat/completions
POST /engines/llama.cpp/v1/completions
POST /engines/llama.cpp/v1/embeddings

Pour appeler ces points de terminaison via un socket Unix (/var/run/docker.sock), préfixez leur chemin avec /exp/vDD4.40.

Note

Vous pouvez omettre llama.cpp du chemin. Par exemple : POST /engines/v1/chat/completions.

Comment interagir via l'API OpenAI ?

Depuis un conteneur

Pour appeler le point de terminaison OpenAI chat/completions depuis un autre conteneur en utilisant curl :

#!/bin/sh

curl http://model-runner.docker.internal/engines/llama.cpp/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai/smollm2",
        "messages": [
            {
                "role": "system",
                "content": "Vous êtes un assistant utile."
            },
            {
                "role": "user",
                "content": "Veuillez écrire 500 mots sur la chute de Rome."
            }
        ]
    }'

Depuis l'hôte via TCP

Pour appeler le point de terminaison OpenAI chat/completions depuis l'hôte via TCP :

  1. Activez le support TCP côté hôte depuis l'interface graphique Docker Desktop, ou via la CLI Docker Desktop. Par exemple : docker desktop enable model-runner --tcp <port>.

    Si vous êtes sur Windows, activez également l'inférence accélérée par GPU. Voir Activer Docker Model Runner.

  2. Interagissez avec comme documenté dans la section précédente en utilisant localhost et le port correct.

#!/bin/sh

	curl http://localhost:12434/engines/llama.cpp/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai/smollm2",
        "messages": [
            {
                "role": "system",
                "content": "Vous êtes un assistant utile."
            },
            {
                "role": "user",
                "content": "Veuillez écrire 500 mots sur la chute de Rome."
            }
        ]
    }'

Depuis l'hôte via un socket Unix

Pour appeler le point de terminaison OpenAI chat/completions via le socket Docker depuis l'hôte en utilisant curl :

#!/bin/sh

curl --unix-socket $HOME/.docker/run/docker.sock \
    localhost/exp/vDD4.40/engines/llama.cpp/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai/smollm2",
        "messages": [
            {
                "role": "system",
                "content": "Vous êtes un assistant utile."
            },
            {
                "role": "user",
                "content": "Veuillez écrire 500 mots sur la chute de Rome."
            }
        ]
    }'

Problèmes connus

docker model n'est pas reconnu

Si vous exécutez une commande Docker Model Runner et voyez :

docker: 'model' is not a docker command

Cela signifie que Docker ne peut pas trouver le plugin car il n'est pas dans le répertoire de plugins CLI attendu.

Pour corriger cela, créez un lien symbolique pour que Docker puisse le détecter :

$ ln -s /Applications/Docker.app/Contents/Resources/cli-plugins/docker-model ~/.docker/cli-plugins/docker-model

Une fois lié, relancez la commande.

Aucune protection pour l'exécution de modèles surdimensionnés

Actuellement, Docker Model Runner n'inclut pas de protections pour vous empêcher de lancer des modèles qui dépassent les ressources disponibles de votre système. Tenter d' exécuter un modèle trop volumineux pour la machine hôte peut entraîner des ralentissements sévères ou peut rendre le système temporairement inutilisable. Ce problème est particulièrement courant lors de l'exécution de LLM sans suffisamment de mémoire GPU ou de RAM système.

Aucun support de condensé cohérent dans la CLI Model

La CLI Docker Model manque actuellement de support cohérent pour spécifier des modèles par condensé d'image. Comme solution de contournement temporaire, vous devriez référencer les modèles par nom au lieu de condensé.

Partager des commentaires

Merci d'essayer Docker Model Runner. Donnez des commentaires ou signalez tout bug que vous pourriez trouver via le lien Donner des commentaires à côté du paramètre Activer Docker Model Runner.