使用 Docker Compose 和 GPU 运行 Ollama
大型语言模型(LLM)正在革新各个领域,不断拓展机器的运算能力极限。然而,它们的复杂性也对处理能力提出了越来越高的要求。这时,像英伟达GPU这样的加速器就派上了用场,能够显著提升训练和推理任务的性能。
在本篇博文中,我们将指导您如何使用 Docker Compose 运行流行的自托管 LLM 服务器 Ollama,并充分利用您的 Nvidia GPU 的强大性能。我们将深入探讨配置细节,确保您获得最佳的 LLM 使用体验。
先决条件:
- Docker 和 Docker Compose:请确保您的系统已安装并运行 Docker 和 Docker Compose。您可以在 Docker 官方网站上找到安装说明:https://docs.docker.com/engine/install/
- Nvidia GPU:您的系统必须安装并配置 Nvidia GPU。请在终端运行 `nvidia-smi` 命令进行验证。如果该命令不起作用或返回错误,请参阅 Nvidia 文档以获取配置指南:https://docs.nvidia.com/了解配置:
现在,让我们来探究一下 docker-compose.yml 文件中用于实现 Ollama GPU 加速运行的关键组件:
Docker Compose 版本:
version 属性指定所使用的 Docker Compose 版本。虽然有些人可能会提到 3.9,但建议使用官方文档中指定的版本,目前为 3.8。这样可以确保兼容性和稳定性。
Ollama 服务定义:
服务部分定义了 Ollama 服务,该服务封装了 Ollama 容器。以下是其重要属性的详细说明:
- image:此参数指定 Ollama 的 Docker 镜像。默认值为 ollama/ollama,但如有需要,您可以使用特定版本(有关可用版本,请参阅 Ollama 的文档)。
- 部署:此部分配置 Ollama 容器的资源预留。这是利用 GPU 算力的关键所在。资源:定义容器的资源需求。
- reservations:此嵌套属性允许您为容器预留特定设备。devices:定义设备预留。在此嵌套配置中,我们指定:
- driver:将设备驱动程序设置为 nvidia,表明我们请求使用 Nvidia GPU。capabilities:列出 Ollama 请求的功能。在本例中,我们指定“gpu”以表明我们希望利用 GPU 进行处理。
- 数量:此值决定您要为 Ollama 预留多少个 Nvidia GPU。使用 all 可利用所有可用 GPU,如果您有多个 GPU 并希望将其中一部分专门用于 Ollama,则可指定一个特定数量。
持久卷定义:
卷部分定义了一个名为 ollama 的持久卷。该卷确保 Ollama 生成的任何数据(例如训练好的模型或配置)即使在容器重启后也能保留。它挂载在 Ollama 容器内的 /root/.ollama 目录下。
综合起来
以下是使用 Docker Compose 运行 Ollama 并启用 Nvidia GPU 加速的完整 docker-compose.yml 配置:
services:
ollama:
container_name: ollama
image: ollama/ollama # Replace with specific Ollama version if needed
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: ["gpu"]
count: all # Adjust count for the number of GPUs you want to use
volumes:
- ollama:/root/.ollama
restart: always
volumes:
ollama:
使用 GPU 加速运行 Ollama:
配置文件准备就绪后,将其保存为 docker-compose.yml 到您所需的目录中。现在,您可以运行以下命令来启动支持 GPU 的 Ollama:
docker-compose up -d
该-d标志确保容器在后台运行。
确认:
运行命令后,您可以查看 Ollama 的日志,确认 Nvidia GPU 是否正在被使用。请查找日志中是否出现“通过 cudart 检测到 Nvidia GPU”或类似字样的消息。此确认信息表明 GPU 已成功集成到 Ollama 中。
其他注意事项:
- 有关根据您的具体使用情况的任何其他配置或资源要求,请参阅 Ollama 的官方文档。
- 调整设备部分中的计数值,使其与要分配给 Ollama 的 Nvidia GPU 数量相匹配。
- 此示例使用 Nvidia 显卡,无法直接用于 ROCm。其目的是说明在 Compose 文件中进行资源预留的概念(目前 Compose 文件不支持 ROCm)。