在 Docker Compose 应用程序中定义 AI 模型
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 模型的 URLLLM_MODEL- LLM 模型的模型标识符EMBEDDING_MODEL_URL- 访问嵌入模型的 URLEMBEDDING_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_URL和AI_MODEL_NAME - 嵌入模型的
EMBEDDING_URL和EMBEDDING_NAME
平台可移植性
使用 Compose 模型的主要优势之一是它在支持 Compose 规范的不同平台之间的可移植性。
Docker 模型运行器
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"