在 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"

參考