Docker Model Runner

可用性: 测试版
要求: Docker Desktop 4.40 及更高版本
适用: 适用于搭载 Apple Silicon 芯片的 Mac 版 Docker Desktop

Docker Model Runner 插件允许您

  • 从 Docker Hub 拉取模型
  • 直接从命令行运行 AI 模型
  • 管理本地模型(添加、列出、移除)
  • 使用提交的提示或在聊天模式下与模型交互

模型首次使用时会从 Docker Hub 拉取并存储在本地。它们只在运行时接收到请求时加载到内存中,并在不使用时卸载以优化资源。由于模型可能很大,初次拉取可能需要一些时间——但之后,它们会在本地缓存以加快访问速度。您可以使用兼容 OpenAI 的 API 与模型交互。

启用 Docker Model Runner

  1. 在设置中导航到 开发中功能 选项卡。
  2. 实验性功能 选项卡下,选择 访问实验性功能
  3. 选择 应用并重启
  4. 退出并重新打开 Docker Desktop 以确保更改生效。
  5. 打开 Docker Desktop 中的 设置 视图。
  6. 导航到 开发中功能
  7. 测试版 选项卡中,勾选 启用 Docker Model Runner 设置。

可用命令

模型运行器状态

检查 Docker Model Runner 是否已激活

$ docker model status

查看所有命令

显示帮助信息和可用子命令列表。

$ docker model help

输出

Usage:  docker model COMMAND

Commands:
  list        List models available locally
  pull        Download a model from Docker Hub
  rm          Remove a downloaded model
  run         Run a model interactively or with a prompt
  status      Check if the model runner is running
  version     Show the current version

拉取模型

将模型从 Docker Hub 拉取到您的本地环境。

$ docker model pull <model>

示例

$ docker model pull ai/smollm2

输出

Downloaded: 257.71 MB
Model ai/smollm2 pulled successfully

列出可用模型

列出当前已拉取到您的本地环境的所有模型。

$ docker model list

您将看到类似以下内容

+MODEL       PARAMETERS  QUANTIZATION    ARCHITECTURE  MODEL ID      CREATED     SIZE
+ai/smollm2  361.82 M    IQ2_XXS/Q4_K_M  llama         354bf30d0aa3  3 days ago  256.35 MiB

运行模型

运行模型并使用提交的提示或在聊天模式下与其交互。

一次性提示

$ docker model run ai/smollm2 "Hi"

输出

Hello! How can I assist you today?

交互式聊天

docker model run ai/smollm2

输出

Interactive chat mode started. Type '/bye' to exit.
> Hi
Hi there! It's SmolLM, AI assistant. How can I help you today?
> /bye
Chat session ended.

移除模型

从您的系统中移除已下载的模型。

$ docker model rm <model>

输出

Model <model> removed successfully

将 Docker Model Runner 集成到您的软件开发生命周期中

您现在可以开始构建由 Docker Model Runner 提供支持的生成式 AI 应用程序了。

如果您想尝试现有的生成式 AI 应用程序,请遵循以下说明。

  1. 设置示例应用程序。克隆并运行以下仓库

    $ git clone https://github.com/docker/hello-genai.git
    
  2. 在您的终端中,导航到 hello-genai 目录。

  3. 运行 run.sh 来拉取所选模型并运行应用程序

  4. 在浏览器中打开仓库 README 中指定的地址访问您的应用程序。

您将看到生成式 AI 应用程序的界面,您可以在其中开始输入提示。

您现在可以与由本地模型提供支持的您自己的生成式 AI 应用程序进行交互。尝试几个提示,注意响应速度有多快——它们都使用 Docker 在您的机器上运行。

常见问题

哪些模型可用?

所有可用模型都托管在 公共 Docker Hub 命名空间 ai 中。

哪些 API 端点可用?

启用该功能后,以下新 API 可用

#### Inside containers ####

http://model-runner.docker.internal/

    # Docker Model management
    POST /models/create
    GET /models
    GET /models/{namespace}/{name}
    DELETE /models/{namespace}/{name}

    # OpenAI endpoints
    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
    Note: You can also omit llama.cpp.
    E.g., POST /engines/v1/chat/completions.

#### Inside or outside containers (host) ####

Same endpoints on /var/run/docker.sock

    # While still in Beta
    Prefixed with /exp/vDD4.40

如何通过 OpenAI API 交互?

从容器内部

从另一个容器内部使用 curl 调用 OpenAI 端点 (chat/completions) 的示例

#!/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": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "Please write 500 words about the fall of Rome."
            }
        ]
    }'

从主机使用 Unix 套接字

从主机使用 curl 通过 Docker 套接字调用 OpenAI 端点 (chat/completions) 的示例

#!/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": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "Please write 500 words about the fall of Rome."
            }
        ]
    }'

从主机使用 TCP

如果您想从主机与 API 交互,但使用 TCP 而非 Docker 套接字,您可以从 Docker Desktop GUI 或通过 Docker Desktop CLI 启用主机端 TCP 支持。例如,使用 docker desktop enable model-runner --tcp <port>

之后,按照先前文档中的说明,使用 localhost 和选定的或默认端口与其交互。

#!/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": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "Please write 500 words about the fall of Rome."
            }
        ]
    }'

已知问题

docker model 未被识别

如果您运行 Docker Model Runner 命令并看到

docker: 'model' is not a docker command

这意味着 Docker 无法找到插件,因为它不在预期的 CLI 插件目录中。

要解决此问题,请创建一个符号链接以便 Docker 可以检测到它

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

链接后,重新运行该命令。

运行超大型模型时无保护措施

目前,Docker Model Runner 不包含任何保护措施,无法阻止您启动超出系统可用资源的模型。尝试在主机上运行过大的模型可能会导致严重的系统缓慢或使系统暂时无法使用。在没有足够的 GPU 内存或系统 RAM 的情况下运行大型语言模型 (LLM) 时,此问题尤为常见。

即使拉取失败,model run 也会进入聊天模式

如果模型镜像拉取失败(例如由于网络问题或磁盘空间不足),即使模型实际上不可用,docker model run 命令仍会将您带入聊天界面。这可能导致混淆,因为在没有运行的模型的情况下,聊天将无法正常工作。

您可以手动重试 docker model pull 命令,以确保在再次运行之前镜像可用。

Model CLI 中缺乏一致的摘要支持

Docker Model CLI 目前缺乏通过镜像摘要指定模型的一致支持。作为临时解决方案,您应该按名称而非摘要来引用模型。

初次尝试失败后,拉取进度误报

在某些情况下,如果初次 docker model pull 中途失败,后续成功的拉取可能会误报已下载“0 字节”,即使数据正在后台获取。这可能会给人一种没有发生任何事情的印象,而实际上模型正在被检索。尽管进度输出不正确,拉取通常会按预期完成。

分享反馈

感谢您试用 Docker Model Runner。请通过 启用 Docker Model Runner 设置旁边的 提供反馈 链接提供反馈或报告您发现的任何错误。

禁用此功能

禁用 Docker Model Runner

  1. 打开 Docker Desktop 中的 设置 视图。
  2. 导航到 开发中功能 中的 测试版 选项卡。
  3. 取消勾选 启用 Docker Model Runner 复选框。
  4. 选择 应用并重启
页面选项