社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker Model Runner - 在本地运行 LLM 大模型

新一代智能化应用 • 3 周前 • 33 次点击  

AI 正迅速成为现代应用的核心组成部分,但在本地运行大语言模型(LLM)仍令人头疼。从选择合适的模型、应对硬件兼容性问题到优化性能,开发者往往在构建应用前就已举步维艰。与此同时,越来越多开发者希望能在本地灵活运行 LLM,用于开发、测试甚至离线场景 - 这正是 Docker Model Runner 的用武之地。

目前该功能已在 Docker Desktop 4.40 的 Beta 版中面向 Apple Silicon 版 macOS 推出。Model Runner 让本地拉取、运行和调试 LLM 变得轻而易举,无需操心基础设施,也没有复杂配置。以下是 Beta 版的核心功能:

  • 基于 llama.cpp 构建的集成推理引擎,通过 OpenAI 兼容 API 提供服务
  • 在 Apple Silicon 设备上直接以主机进程运行推理引擎,实现 GPU 加速
  • 持续扩充的预置模型库,采用标准 OCI 格式封装,可通过现有容器注册表基础设施轻松分发复用

接下来就让我们探索如何用 Docker Model Runner 在本地运行 LLM!

启用 Docker Model Runner

在 Apple Silicon 版 macOS 的 Docker Desktop 4.40 中,Model Runner 默认已启用。若需手动启用,只需执行 CLI 命令:

docker desktop enable model-runner

默认配置下,Model Runner 仅通过主机 Docker 套接字或专属端点model-runner.docker.internal提供服务。如需通过 TCP 访问(例如让代码中的 OpenAI SDK 直连),可指定端口启用:

docker desktop enable model-runner --tcp 12434

初探命令行界面

Model Runner CLI 操作与容器命令相似,但执行机制存在差异。为演示效果,我们选用 HuggingFace 2024 年发布的轻量级 SmolLM 模型,确保在资源有限的设备上也能快速响应。

首先拉取模型(省略标签时将默认使用 latest 版本):

docker model pull ai/smollm2:360M-Q4_K_M

此处拉取的是 360M 参数、4 位量化的 SmolLM2 模型。Docker 分发的模型标签遵循以下格式规范:

{model}:{parameters}-{quantization}

随后进行问答测试:

docker model run ai/smollm2:360M-Q4_K_M "Give me a fact about whales."

Whales are magnificent marine animals that have fascinated humans for centuries. They belong to the order Cetacea and have a unique body structure that allows them to swim and move around the ocean. Some species of whales, like the blue whale, can grow up to 100 feet (30 meters) long and weigh over 150 tons (140 metric tons) each. They are known for their powerful tails that propel them through the water, allowing them to dive deep to find food or escape predators.

这段关于鲸鱼的描述是否准确?坦白说,我并非海洋生物学家,无法确认。但这个例子很好地说明了一个更广泛的问题:LLM 有时会生成不准确或不可预测的信息。尤其对于参数量有限或量化程度较高的小型本地模型,验证返回结果的准确性至关重要。

那么当我们运行 docker model run 命令时,底层究竟发生了什么?了解技术原理很有必要,因为它与多年来使用的 docker container run 命令有很大不同。对于 Model Runner,这个命令不会启动任何类型的容器。相反,它会调用由 Docker Desktop 中的 Model Runner 托管的推理服务 API 端点,并提供 OpenAI 兼容的 API。推理服务器将 llama.cpp 作为推理引擎,以原生主机进程形式运行,按需加载请求的模型,然后对接收到的请求执行推理。之后,该模型会一直保留在内存中,直到请求另一个模型,或者达到预定义的非活动超时(目前为 5 分钟)。

这也意味着在从主机进程或容器内与特定模型交互之前,无需执行 docker model run。Model Runner 会透明地按需加载请求的模型,前提是该模型已预先拉取并在本地可用。

说到与其他进程中的模型交互,让我们看看如何在应用代码中集成 Model Runner。

GenAI 开发实践

Model Runner 为容器提供的 OpenAI 端点位于 http://model-runner.docker.internal/engines/v1,为主机进程提供的端点则在 http://localhost:12434/engines/v1(假设已在默认端口 12434 上启用了 TCP 主机访问)。你可以使用这个端点连接任何 OpenAI 兼容的客户端或框架。

在这个例子中,我使用 Java 和LangChain4j。由于我直接在主机上开发和运行 Java 应用,我需要做的就是将 Model Runner OpenAI 端点配置为baseUrl,并按照我们在 CLI 使用示例中已经看到的 Docker 模型寻址方案指定要使用的模型。

就是这么简单,非常直观,对吧?

请注意,运行此代码前模型必须已在本地存在。

OpenAiChatModel model = OpenAiChatModel.builder()
        .baseUrl("http://localhost:12434/engines/v1")
        .modelName("ai/smollm2:360M-Q4_K_M")
        .build();

String answer = model.chat("Give me a fact about whales.");
System.out.println(answer);

寻找更多模型

现在,你可能不只想使用 SmolLM 模型,所以你可能会想知道当前还有哪些其他模型可用于 Model Runner。最简单的入门方式是查看Docker Hub上的 ai/命名空间。

在 Docker Hub 上,你可以找到精选的最流行模型列表,这些模型非常适合本地使用场景。它们提供不同版本以适应不同的硬件和性能需求。你还可以在模型库概览页面的模型卡片中找到每个模型的更多详细信息。

未来展望

当然,这只是对 Docker Model Runner 功能的初步了解。我们正在开发更多功能,迫不及待想看到你用它构建的应用。想要实践指导,请查看官方最新的[YouTube 教程]: https://www.youtube.com/watch?v=rGGZJT3ZCvo,了解如何使用 Model Runner 在本地运行 LLM。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182066
 
33 次点击