在 Docker Compose 应用程序中定义 AI 模型

要求: Docker Compose 2.38.0 及更高版本

Compose 允许您将 AI 模型定义为应用程序的核心组件,因此您可以将模型依赖项与服务一起声明,并在支持 Compose Specification 的任何平台上运行应用程序。

先决条件

  • Docker Compose v2.38 或更高版本
  • 支持 Compose 模型的平台,例如 Docker Model Runner (DMR) 或兼容的云提供商。如果您正在使用 DMR,请参阅要求

什么是 Compose 模型?

Compose models 是一种标准化方式,用于在应用程序中定义 AI 模型依赖项。通过在 Compose 文件中使用models 顶级元素,您可以

  • 声明您的应用程序需要哪些 AI 模型
  • 指定模型配置和要求
  • 使您的应用程序在不同平台之间可移植
  • 让平台处理模型供应和生命周期管理

基本模型定义

要在 Compose 应用程序中定义模型,请使用 models 顶级元素

services:
  chat-app:
    image: my-chat-app
    models:
      - llm

models:
  llm:
    model: ai/smollm2

此示例定义了

  • 一个名为 chat-app 的服务,它使用一个名为 llm 的模型
  • 一个用于 llm 的模型定义,它引用了 ai/smollm2 模型镜像

模型配置选项

模型支持各种配置选项

models:
  llm:
    model: ai/smollm2
    context_size: 1024
    runtime_flags:
      - "--a-flag"
      - "--another-flag=42"

常见配置选项包括

  • model(必需):模型的 OCI 工件标识符。这是 Compose 通过模型运行器拉取并运行的内容。

  • context_size:定义模型的最大令牌上下文大小。

    注意

    每个模型都有自己的最大上下文大小。增加上下文长度时,请考虑您的硬件限制。一般来说,请尝试根据您的特定需求将上下文大小保持在尽可能小的范围内。

  • runtime_flags:模型启动时传递给推理引擎的原始命令行标志列表。例如,如果您使用 llama.cpp,您可以传递任何可用参数

  • 平台特定选项也可以通过扩展属性 x-* 获得

提示

请参阅常见运行时配置部分中的更多示例。

使用提供商服务的替代配置

重要

此方法已弃用。请改用models 顶级元素

您还可以使用 provider 服务类型,它允许您声明应用程序所需的平台功能。对于 AI 模型,您可以使用 model 类型来声明模型依赖项。

定义模型提供商

services:
  chat:
    image: my-chat-app
    depends_on:
      - ai_runner

  ai_runner:
    provider:
      type: model
      options:
        model: ai/smollm2
        context-size: 1024
        runtime-flags: "--no-prefill-assistant"

服务模型绑定

服务可以通过两种方式引用模型:短语法和长语法。

短语法

短语法是将模型绑定到服务的最简单方法

services:
  app:
    image: my-app
    models:
      - llm
      - embedding-model

models:
  llm:
    model: ai/smollm2
  embedding-model:
    model: ai/all-minilm

使用短语法,平台会根据模型名称自动生成环境变量

  • LLM_URL - 访问 LLM 模型的 URL
  • LLM_MODEL - LLM 模型的模型标识符
  • EMBEDDING_MODEL_URL - 访问嵌入模型的 URL
  • EMBEDDING_MODEL_MODEL - 嵌入模型的模型标识符

长语法

长语法允许您自定义环境变量名称

services:
  app:
    image: my-app
    models:
      llm:
        endpoint_var: AI_MODEL_URL
        model_var: AI_MODEL_NAME
      embedding-model:
        endpoint_var: EMBEDDING_URL
        model_var: EMBEDDING_NAME

models:
  llm:
    model: ai/smollm2
  embedding-model:
    model: ai/all-minilm

通过此配置,您的服务将接收

  • LLM 模型的 AI_MODEL_URLAI_MODEL_NAME
  • 嵌入模型的 EMBEDDING_URLEMBEDDING_NAME

平台可移植性

使用 Compose 模型的主要优势之一是它在支持 Compose 规范的不同平台之间的可移植性。

Docker 模型运行器

Docker Model Runner 启用时

services:
  chat-app:
    image: my-chat-app
    models:
      llm:
        endpoint_var: AI_MODEL_URL
        model_var: AI_MODEL_NAME

models:
  llm:
    model: ai/smollm2
    context_size: 4096
    runtime_flags:
      - "--no-prefill-assistant"

Docker Model Runner 将

  • 在本地拉取并运行指定的模型
  • 提供用于访问模型的端点 URL
  • 将环境变量注入服务中

云提供商

相同的 Compose 文件可以在支持 Compose 模型的云提供商上运行

services:
  chat-app:
    image: my-chat-app
    models:
      - llm

models:
  llm:
    model: ai/smollm2
    # Cloud-specific configurations
    x-cloud-options:
      - "cloud.instance-type=gpu-small"
      - "cloud.region=us-west-2"

云提供商可能会

  • 使用托管 AI 服务而不是在本地运行模型
  • 应用云特定的优化和扩展
  • 提供额外的监控和日志记录功能
  • 自动处理模型版本控制和更新

常见运行时配置

以下是一些针对各种用例的配置示例。

开发

services:
  app:
    image: app
    models:
      dev_model:
        endpoint_var: DEV_URL
        model_var: DEV_MODEL

models:
  dev_model:
    model: ai/model
    context_size: 4096
    runtime_flags:
      - "--verbose"                       # Set verbosity level to infinity
      - "--verbose-prompt"                # Print a verbose prompt before generation
      - "--log-prefix"                    # Enable prefix in log messages
      - "--log-timestamps"                # Enable timestamps in log messages
      - "--log-colors"                    # Enable colored logging

禁用推理的保守模式

services:
  app:
    image: app
    models:
      conservative_model:
        endpoint_var: CONSERVATIVE_URL
        model_var: CONSERVATIVE_MODEL

models:
  conservative_model:
    model: ai/model
    context_size: 4096
    runtime_flags:
      - "--temp"                # Temperature
      - "0.1"
      - "--top-k"               # Top-k sampling
      - "1"
      - "--reasoning-budget"    # Disable reasoning
      - "0"

高随机性的创新模式

services:
  app:
    image: app
    models:
      creative_model:
        endpoint_var: CREATIVE_URL
        model_var: CREATIVE_MODEL

models:
  creative_model:
    model: ai/model
    context_size: 4096
    runtime_flags:
      - "--temp"                # Temperature
      - "1"
      - "--top-p"               # Top-p sampling
      - "0.9"

高度确定性

services:
  app:
    image: app
    models:
      deterministic_model:
        endpoint_var: DET_URL
        model_var: DET_MODEL

models:
  deterministic_model:
    model: ai/model
    context_size: 4096
    runtime_flags:
      - "--temp"                # Temperature
      - "0"
      - "--top-k"               # Top-k sampling
      - "1"

并发处理

services:
  app:
    image: app
    models:
      concurrent_model:
        endpoint_var: CONCURRENT_URL
        model_var: CONCURRENT_MODEL

models:
  concurrent_model:
    model: ai/model
    context_size: 2048
    runtime_flags:
      - "--threads"             # Number of threads to use during generation
      - "8"
      - "--mlock"               # Lock memory to prevent swapping

丰富的词汇模型

services:
  app:
    image: app
    models:
      rich_vocab_model:
        endpoint_var: RICH_VOCAB_URL
        model_var: RICH_VOCAB_MODEL

models:
  rich_vocab_model:
    model: ai/model
    context_size: 4096
    runtime_flags:
      - "--temp"                # Temperature
      - "0.1"
      - "--top-p"               # Top-p sampling
      - "0.9"

参考

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.