Docker Model Runner
Docker Model Runner 外掛允許您
- 從 Docker Hub 拉取模型
- 直接從命令列執行 AI 模型
- 管理本地模型(新增、列出、移除)
- 使用提交的提示或在聊天模式下與模型互動
模型首次使用時會從 Docker Hub 拉取並存儲在本地。它們只在執行時接收到請求時載入到記憶體中,並在不使用時解除安裝以最佳化資源。由於模型可能很大,初次拉取可能需要一些時間——但之後,它們會在本地快取以加快訪問速度。您可以使用相容 OpenAI 的 API 與模型互動。
啟用 Docker Model Runner
- 在設定中導航到 開發中功能 選項卡。
- 在 實驗性功能 選項卡下,選擇 訪問實驗性功能。
- 選擇 應用並重啟。
- 退出並重新開啟 Docker Desktop 以確保更改生效。
- 開啟 Docker Desktop 中的 設定 檢視。
- 導航到 開發中功能。
- 在 測試版 選項卡中,勾選 啟用 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 應用程式,請遵循以下說明。
設定示例應用程式。克隆並執行以下倉庫
$ git clone https://github.com/docker/hello-genai.git
在您的終端中,導航到
hello-genai
目錄。執行
run.sh
來拉取所選模型並執行應用程式在瀏覽器中開啟倉庫 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 https://: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
- 開啟 Docker Desktop 中的 設定 檢視。
- 導航到 開發中功能 中的 測試版 選項卡。
- 取消勾選 啟用 Docker Model Runner 複選框。
- 選擇 應用並重啟。