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