Docker Model Runner 简化模型本地运行
通过 Docker Model Runner,本地运行模型变得更加简单。本教程将讨论该运行器的功能及使用方法。
Docker 是云行业的基石,以运行基于容器的工作负载而闻名。其最新增功能 Docker Model Runner 将桌面模型运行提升到了全新水平。让我们深入探索模型运行器是什么,以及它如何通过 LLM 简化本地开发。
首先,Docker 模型运行器允许将模型打包为开放容器(OCI)工件,并使用我们已用于容器镜像的相同注册表进行分发。只需查看 Docker GenAI 注册表,它已经支持一系列流行模型,如 DeepSeek、Gemma、Mistral、LLAMA 和 PHI。
其次,由于基于主机的执行模型,推理速度更快。在此架构中,推理直接在主机上执行,而非在 Docker Desktop 虚拟机上。
第三,能够在桌面上无缝运行使其体验更加便捷和易用。只需几个命令,即可在机器上快速运行模型。
最后,它完全兼容 OpenAI API 规范。
教程:如何使用模型运行器
现在我们已经探讨了使用 Docker Model Runner 的好处,让我们通过一个简单教程逐步操作。本节将介绍如何在本地设置模型运行器、使用暴露的 API 端点调用它,并使用预加载模型执行推理。
- 第一步是安装 Docker Desktop(如果尚未安装)。
- 从 Docker GenAI 中选择一个模型。例如,我选择具有 3.6 亿参数的 SmolLM2-360M 模型。
然后执行 Docker 模型拉取命令。
1
|
docker model pull ai/smollm2:latest
|
命令执行后,我们将看到以下输出:“Model pulled successfully”。
3. 执行模型运行命令以启动模型。
1
|
docker model run ai/smollm2:latest
|
这将启动一个交互式 shell。我要求它解释 CUDA 架构,并收到以下输出。
1
2
|
Explain the CUDA architecture
CUDA (Compute Unified Device Architecture) is a GPU-based parallel computing platform developed by NVIDIA, providing a framework for developers to write efficient, high-performance code. It is designed to be used with NVIDIA GPUs, and it can be easily integrated with other CUDA-compatible hardware, such as AMD Radeon GPUs, Intel Xeon processors, or other GPU architectures.
|
很好!现在我们已经看到如何使用交互式 shell,让我们看看如何通过 API 与其交互。第一步是设置 TCP 端口。
1
|
docker desktop enable model-runner --tcp 12345
|
这里我们使用端口 12345。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$uri = "http://localhost:12345/engines/llama.cpp/v1/chat/completions"
$headers = @{
"Content-Type" = "application/json"
}
$body = @{
model = "ai/smollm2"
messages = @(
@{
role = "system"
content = "You are a helpful assistant."
},
@{
role = "user"
content = "Explain about the Java programming language in less than 100 words ?"
}
)
} | ConvertTo-Json -Depth 3
$response = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $body
# Print only the assistant's reply
$response.choices[0].message.content
|
以上示例是一个简单的 PowerShell 脚本,接收模型参数及消息。如前所述,REST API 完全兼容 OpenAI API,运行脚本后我收到以下响应。
1
|
Java is a general-purpose, object-oriented programming (OOP) language developed by Sun Microsystems (now owned by Oracle Corporation). It's known for being platform independent, easy to learn, and has many libraries for networking and graphics. Java is commonly used for Android app development, web development, and desktop applications. It's also used in enterprise systems and games.
|
我们所看到的只是基本用例。由于 Docker 是构建管道的一部分,借助此新功能,将代码与 LLM 基础设施集成测试也变得容易。
将 LLM 模型推送到您自己的仓库
通常,我们希望通过在自己的注册表中托管模型来控制它们。模型运行器也支持此功能。
1
|
docker model tag ai/smollm2 sirivarma/smollm2:latest
|
这里,我们使用新注册表标记下载的模型。最后使用以下命令推送它。
1
|
docker model push sirivarma/smollm2:latest
|
架构
如果不强调幕后架构,那将是不公平的,它承担了所有繁重工作,使一切对我们无缝衔接。模型运行器由四个部分组成:
-
模型存储和客户端
模型存储是模型张量存在的地方。这些与镜像文件分开存储,且模型不可压缩。
接下来,客户端负责使用模型协议从注册表中拉取镜像。
-
模型运行器
这是负责服务所有请求的核心引擎。Docker 托管推理引擎和模型对。因此,当带有模型详情的请求到来时,它将选择与 smollm2 模型匹配的对,并使用该对服务响应。
Llama.cpp 是引擎背后的秘密武器。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$body = @{
model = "ai/smollm2"
messages = @(
@{
role = "system"
content = "You are a helpful assistant."
},
@{
role = "user"
content = "Explain about the Java programming language in less than 100 words ?"
}
)
} | ConvertTo-Json -Depth 3
|
-
模型 CLI
我们在教程中一直使用此功能。CLI 是我们拉取和推送模型的方式。
-
API 设计和路由
有两组 API。一组是 Docker API,另一组是 OpenAI API。Docker API 用于拉取镜像、删除照片等,而 OpenAI API 用于聊天完成、创建嵌入等。
这是一篇关于 Docker 的精彩文章,更深入地解释了模型运行器架构。我推荐阅读它。
https://www.docker.com/blog/how-we-designed-model-runner-and-whats-next/