三年前,我的本地AI开发环境像个杂物间。Ollama后台常驻,Python虚拟环境单独给LangChain实验用,另一个终端跑着llama.cpp测试量化模型。三个不同的API格式,三个端口号,每次macOS更新至少崩掉一个。
现在这些全删了。Docker Desktop自带的Model Runner接管了一切。
这东西不需要单独安装。拉取模型和拉镜像一样:
docker model pull ai/llama3.1
docker model pull ai/phi3-mini
docker model pull ai/mistral
跑推理也一行命令:
docker model run ai/llama3.1 "Explain NUMA topology in two sentences"
或者走API端点,兼容OpenAI格式:
curl http://localhost:12434/engines/llama3.1/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "What is OKE?"}], "max_tokens": 100}'
没有Python,没有虚拟环境,没有pip安装,不用管CUDA驱动。Mac上用Metal,其他平台走CPU,能跑就行。
我之前用Ollama几个月,确实能用,但有几处别扭。端口号11434总忘关,下次启动别的服务就冲突。Docker Model Runner跑在Docker VM里,不占主机端口,端点固定。Ollama要单独更新二进制文件,Model Runner跟着Docker Desktop一起升,少惦记一件事。
最关键是API兼容性。我生产环境用vLLM跑在OKE上,vLLM暴露的是OpenAI兼容接口。Model Runner也是OpenAI兼容格式。本地写好的客户端代码,原封不动丢到生产环境就能跑。用Ollama那会儿,我得在Ollama原生格式和OpenAI格式之间来回转。
真正改变工作流的是Docker Compose集成。现在本地开发栈里,LLM作为服务和API服务器、数据库、缓存并排跑,一个docker compose up全起来:
services:
api:
build: .
ports:
- "8080:8080"
environment:
- LLM_ENDPOINT=http://host.docker.internal:12434/engines/llama3.1/v1
depends_on:
- db
db:
image: postgres:16-alpine
API服务器往host.docker.internal:12434发请求。生产环境OKE上,同一个环境变量指向vLLM服务。代码不用改,提示词格式不用改,换后端就行。
这套流程跑顺之后,我本地那堆零散工具就再没开过。
热门跟贴