当前位置: 首页 > article >正文

LLM学习笔记2——使用Docker(Ollama+OpenWebUI)实现本地部署DeepSeek-R1-14B模型

系列文章目录

参考博客
参考博客


文章目录

  • 系列文章目录
  • 前言
    • DeepSeek-R1
    • Docker
    • Ollama
    • OpenWebUI
    • 部署软硬件环境
  • 一、安装nvidia-container-toolkit工具
    • 1、简单介绍
    • 2、安装步骤
      • 1.配置添加官方密钥和仓库
      • 2.从存储库更新软件包列表
      • 3.安装NVIDIA容器工具包
      • 4.查看版本
      • 5.配置 Docker 使用 NVIDIA nvidia-container-toolkit工具
  • 二、多容器协作Docker-Compose实现Ollama+OpenWebUI
    • 1、安装Docker Compose
      • 1.Docker Compose安装步骤
      • 2.Docker Compose 常用指令
    • 2、拉取Ollama和OpenWebUI的镜像
      • 1.拉取ollama镜像
      • 2.拉取OpenWebUI镜像
    • 3、使用Docker Compose运行Ollama和OpenWebUI
      • 1. 编写docker-compose.yml 文件
      • 2.运行docker-compose.yml 文件
      • 3. docker-compose.yml 文件解析
      • 4.功能描述
    • 4、在Docker下使用Ollama拉取模型
      • 1.检查容器
      • 2.拉取模型
      • 3.模型测试
    • 5、如何单独运行指定容器(题外话)
      • 1.单独运行ollama容器(CPU)
      • 2.单独运行ollama容器(GPU)
      • 3.单独运行openwebui容器
  • 三、Dockerfile自定义单镜像实现Ollama+OpenWebUI
  • 四、模型结构
  • 总结


前言

DeepSeek-R1

在这里插入图片描述

DeepSeek官网

DeepSeek R1是由DeepSeek公司推出的一款基于强化学习(RL)的开源推理模型。它无需依赖监督微调(SFT)或人工标注数据,完全通过强化学习训练而成。DeepSeek R1在数学、代码和自然语言推理任务上表现出色,其推理能力媲美甚至超越了OpenAI的O1正式版。同时,DeepSeek R1还具备低成本、高效率、多语言支持等优势,可广泛应用于教育辅导、金融分析、企业智能化升级等领域。

一文了解火爆的DeepSeek R1


Docker

在这里插入图片描述

Docker官网

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。

docker入门,这一篇就够了。


Ollama

在这里插入图片描述

Ollama官网

Ollama是一个开源的 LLM(大型语言模型)服务工具,是大语言模型便捷的管理和运维工具,用于简化在本地运行大语言模型、降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和部署最新大语言模型,包括如Llama、Qwen、Phi、Gemma、DeepSeek等开源的大型语言模型。Ollama现在已有Docker hub开源的镜像提供,这使得使用Docker容器运行大型语言模型变得更加简单。


OpenWebUI

在这里插入图片描述

OpenWebUI官网
Open WebUI 是构建与大规模语言模型(如 GPT、BERT 等)无缝对接的理想平台。它简化了开发流程,提供了易于使用的界面组件和灵活的 API,支持与大模型的高效集成,帮助开发者在短时间内构建出高度定制化和智能化的 Web 应用。

通过 Open WebUI,开发者不仅能够提高开发效率,还能为用户提供更智能、更个性化的体验。无论是在智能客服、自动内容生成、数据分析,还是个性化推荐等领域,Open WebUI 与大模型的结合都展现出巨大的潜力和应用价值。


部署软硬件环境

系统:ubuntu 18.04
GPU:NVIDIA 2080Ti(22G魔改卡)
远程连接:NoMachine+ZeroTier
辅助部署工具:DeepSeek-R1,ChatGPT-o3-mini,文心一言


一、安装nvidia-container-toolkit工具

1、简单介绍

在使用Docker运行需要GPU加速的AI应用时, 需要使用nvidia-container-toolkit工具,它是让容器访问宿主GPU的关键桥梁。

NVIDIA容器工具包使用户能够构建和运行GPU加速的容器。该工具包包括一个容器运行时库和实用程序,用于自动配置容器以利用NVIDIA GPU。

在这里插入图片描述


2、安装步骤

官方教程

先安装Docker。
安装Docker参考博客

升级更新一下

sudo apt-get update

没有curl库的安装一下

sudo apt-get install -y curl

1.配置添加官方密钥和仓库

配置添加官方密钥和仓库:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

在这里插入图片描述

完成后会生成两个文件,分别是密钥和仓库,检查一下是否正常,不要是空文件:

/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
/etc/apt/sources.list.d/nvidia-container-toolkit.list

2.从存储库更新软件包列表

从存储库更新软件包列表

sudo apt-get update

提示nvidia更新失败:

E: 仓库 “https://nvidia.github.io/libnvidia-container/stable/deb/amd64  Release” 没有 Release 文件。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。

查了一下原因,在github上找到解决方法

默认情况下,sudo命令会重置环境变量,只保留一些基本的环境变量。但是通过使用-E选项,可以保留当前用户的环境变量,使得执行的命令可以继承当前用户的环境设置。

所以“sudo apt-get update”不遵循本地机器的代理设置,需要加“-E”操作。

重新更新软件包列表

sudo -E apt-get update

3.安装NVIDIA容器工具包

安装NVIDIA容器工具包:

sudo -E apt-get install -y nvidia-container-toolkit

4.查看版本

启动Docker服务后,可以使用以下命令来查看nvidia-container-toolkit的版本:

nvidia-container-cli --version
# 或者
nvidia-container-runtime --version

在这里插入图片描述

5.配置 Docker 使用 NVIDIA nvidia-container-toolkit工具

编辑 Docker 配置文件 /etc/docker/daemon.json,添加以下内容:

{    
	"registry-mirrors": [
	        "https://xxx.com"
	    ],
	"runtimes": {
		  "nvidia": {
			    "path": "nvidia-container-runtime",
			    "runtimeArgs": []
		  }
	},
	"default-runtime": "nvidia"
}

在更改配置后,重启 Docker 服务:

sudo systemctl restart docker

二、多容器协作Docker-Compose实现Ollama+OpenWebUI

1、安装Docker Compose

安装Docker Compose 参考博客

1.Docker Compose安装步骤

# 安装最新版本docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 加上许可权限
sudo chmod +x /usr/local/bin/docker-compose

# 查看是否已成功安装
docker-compose --version

# docker-compose是一个文件,如果要卸载只需要把文件删除即可
rm /usr/local/bin/docker-compose

在这里插入图片描述

在这里插入图片描述

2.Docker Compose 常用指令

docker-compose up:启动应用程序的所有服务。如果容器不存在,则会自动创建并启动。如果容器已经存在,则会重新启动。

docker-compose down:停止并移除应用程序的所有服务。这将停止并删除所有相关的容器、网络和卷。

docker-compose start:启动应用程序的所有服务。与docker-compose up不同的是,docker-compose start只会启动已经存在的容器,而不会重新创建。

docker-compose stop:停止应用程序的所有服务。与docker-compose down不同的是,docker-compose stop只会停止容器,而不会删除它们。

docker-compose restart:重启应用程序的所有服务。这将停止并重新启动所有容器。

docker-compose ps:列出应用程序的所有服务及其状态。这将显示每个服务的容器ID、状态、端口映射等信息。

docker-compose logs:查看应用程序的服务日志。这将显示所有服务的日志输出。

docker-compose build:构建应用程序的服务镜像。这将根据定义的Dockerfile构建镜像。

docker-compose exec:在运行的容器中执行命令。例如,docker-compose exec web ls将在名为web的容器中执行ls命令。

docker-compose down --volumes:停止并移除应用程序的所有服务,并删除所有相关的容器、网络和卷。使用--volumes选项可以删除与服务关联的卷。

2、拉取Ollama和OpenWebUI的镜像

1.拉取ollama镜像

拉取ollama镜像:

sudo docker pull ollama/ollama

在这里插入图片描述
如果pull拉取不稳定,可以尝试修改/etc/docker下的daemon.json配置文件,增加一些网址,加速Docker镜像。

{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn", 
		"https://pee6w651.mirror.aliyuncs.com",
		"https://docker.m.daocloud.io",
		"https://dockerproxy.com",
		"https://registry.docker-cn.com",
		"https://docker.mirrors.ustc.edu.cn",
		"https://hub-mirror.c.163.com",
		"https://hub.uuuadc.top",
		"https://docker.anyhub.us.kg",
		"https://dockerhub.jobcher.com",
		"https://dockerhub.icu",
		"https://docker.ckyl.me",
		"https://docker.awsl9527.cn",
		"https://mirror.baidubce.com"
    ]
}

查看ollama镜像是否拉取成功:

sudo docker images

在这里插入图片描述

2.拉取OpenWebUI镜像

拉取OpenWebUI镜像:

sudo docker pull ghcr.io/open-webui/open-webui:main

查看OpenWebUI镜像是否拉取成功:

sudo docker images

在这里插入图片描述


3、使用Docker Compose运行Ollama和OpenWebUI

参考博客

1. 编写docker-compose.yml 文件

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama
    restart: unless-stopped
    deploy:  
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    environment:
      ROOT_PATH: "/ollama"
      OLLAMA_BASE_URL: "http://ollama:11434"
    ports:
      - "3030:8080"
    volumes:
      - ./open-webui:/app/backend/data
    restart: always
    depends_on:
      - ollama

2.运行docker-compose.yml 文件

在 docker-compose.yml 所在目录下打开终端,执行:

docker-compose up -d

如果提示以下错误:

Error response from daemon: could not select device driver "nvidia" with capabilities: [[gpu]]

请查看前面的一、安装nvidia-container-toolkit工具下的:5.配置 Docker 使用 NVIDIA nvidia-container-toolkit工具是否完成。

在这里插入图片描述
在这里插入图片描述

然后在浏览器访问:

http://localhost:3030

使用默认的管理员账号登录:
默认管理员账号:admin
默认管理员邮箱:admin@openwebui.com
默认密码:admin

在这里插入图片描述

即可使用 Open WebUI 交互 AI 模型。

3. docker-compose.yml 文件解析

以上 docker-compose.yml 文件定义了两个服务:ollama 和 open-webui,它们一起运行,提供一个基于 Ollama 的 AI 模型服务,并通过 Open WebUI 提供一个 Web 界面进行交互。

ollama:
  image: ollama/ollama
  container_name: ollama
  ports:
    - "11434:11434"
  volumes:
    - ./ollama:/root/.ollama
  restart: unless-stopped
image: ollama/ollama
deploy:  
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: all
          capabilities: [gpu]
image声明使用ollama/ollama镜像。
container_name指定容器的名称为 ollama。
ports将宿主机的 11434 端口 映射到容器的 11434 端口,用于 API 调用。
volumes把宿主机的 ./ollama 目录映射到容器的 /root/.ollama,用于持久化 Ollama 下载的模型文件。
restart容器崩溃时会自动重启,除非手动停止。
配置deploy资源,指定ollama容器可以访问所有 GPU,并且声明所需的能力为 gpu。
open-webui:
  image: ghcr.io/open-webui/open-webui:main
  container_name: open-webui
  environment:
    ROOT_PATH: "ollama"
    OLLAMA_BASE_URL: "http://ollama:11434"
  ports:
    - "3020:8080"
  volumes:
    - ./open-webui:/app/backend/data
  restart: always
  depends_on:
    - ollama
image声明使用ghcr.io/open-webui/open-webui:main镜像,该镜像提供一个 Web 界面,让用户更方便地与 Ollama 交互。
container_name指定容器的名称为 open-webui。
ROOT_PATH设定 Web UI 的根路径为ollama。
OLLAMA_BASE_URL指定 Ollama API 的地址,指向 ollama 容器的 11434 端口,确保 open-webui 能够访问它。
ports将宿主机的 3030 端口 映射到容器的 8080 端口,即用户可以在 http://localhost:3030 访问 Open WebUI。
volumes把宿主机的 ./open-webui目录映射到容器的 /app/backend/data,持久化 Open WebUI 需要的数据,如配置文件等。
restart容器崩溃时会自动重启,确保 Web UI 始终可用。
depends_onsh声明open-webui 依赖于 ollama,确保 ollama 容器先启动。

4.功能描述

该docker-compose.yml 文件定义的服务是Ollama 负责运行 AI 模型,提供 API 服务(端口 11434),Open WebUI 提供可视化界面,并与 Ollama 交互(端口 3020)。

volumes: - ./open-webui:/app/backend/data中的./open-webui是一个相对路径,表示当前目录下的 open-webui 文件夹。例如docker-compose.yml 文件位于 /home/user/my-project,那么 ./open-webui 就是 /home/user/my-project/open-webui。这个路径是宿主机上的路径,Docker 会将这个目录挂载到容器内的 /app/backend/data

持久化数据:
./ollama 目录保存 AI 模型文件。
./open-webui 目录存储 Web UI 相关数据。

自动重启机制,保证系统稳定运行。


4、在Docker下使用Ollama拉取模型

1.检查容器

确保容器已启动且名称正确。可以通过以下命令检查:

docker ps

在这里插入图片描述

2.拉取模型

拉取模型:

sudo docker exec -it ollama ollama run deepseek-r1:14b

3.模型测试

终端测试:

在这里插入图片描述

OpenWebUI测试:
在这里插入图片描述

docker exec 命令解析:

docker exec 
# 用来在一个已经运行的容器内执行命令的。它允许你在容器内部启动一个新的进程,通常用于调试和管理。

-it
# i(interactive)使容器的标准输入保持打开,以便你可以与容器内的进程进行交互,t(tty)为容器分配一个伪终端,这使得你可以以终端模式运行命令。

ollama
# 这是正在运行的容器的名称。刚刚通过 docker run 命令启动了这个容器,并给它指定了名称 ollama。

ollama run deepseek-r1:14b
# 这是在容器内执行的命令。它调用了 ollama 应用程序,并加载了deepseek-r1:14b 模型。

具体想要拉取哪个模型可以到Ollama官网中查询。


5、如何单独运行指定容器(题外话)

1.单独运行ollama容器(CPU)

docker run -d -v ./ollama:/root/.ollama -p 11434:11434 --names ollama --restart alway ollama/ollama

-v ./ollama 是挂载在自己机器的目录,是当前目录下的文件夹

2.单独运行ollama容器(GPU)

docker run -d --gpus=all -v ./ollama:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama

3.单独运行openwebui容器

docker run -d -p 3030:8080 --add-host=host.docker.internal:host-gateway -v ./open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

三、Dockerfile自定义单镜像实现Ollama+OpenWebUI

未完待续。。。


四、模型结构

未完待续。。。


总结

之前尝试过只依靠了一个Hugging Face的Transformers库去部署Meta-Llama-3.2_1B的模型,实际的使用体验相当不好,这次使用Ollama+OpenWebUI部署DeepSeek-R1-14B模型,体验感还是不错的,一方面14B比1B大且能力更强,另一方面有Ollama和OpenWebUI等框架的加持。

在24年年末的deepseekV3以及今年过年时的R1出圈爆火,但是放假在家没带电脑也没法远程连接电脑,只能年后回来尝试本地部署,刚回来上班又有一些堆积的工作需要忙碌,直到现在才抽空做了一部分。

后续有时间会继续尝试将Ollama和OpenWebUI部署到单个Docker镜像中,以及更新学习一些有关的deepseek的LLM模型结构。


http://www.kler.cn/a/548470.html

相关文章:

  • 图像处理篇---基本OpenMV图像处理
  • 小程序之间实现互相跳转的逻辑
  • Ubuntu服务器设置X11服务
  • HCIA综合项目之多技术的综合应用实验
  • 大数据学习(45) - Flink基本处理函数
  • Android中获取so文件来源于哪个库
  • 轻松上手:2025年微服务教程
  • AWS上基于高德地图API验证Amazon Redshift里国内地址数据正确性的设计方案
  • 【人工智能】通过python练习机器学习中的8大算法
  • k8s强制删除状态为 Terminating的Namespace
  • Oracle EBS 11i R12 更改form颜色
  • 【工业场景】用YOLOv8实现烟雾识别
  • 李宏毅机器学习笔记:【6.Optimization、Adaptive Learning Rate】
  • 【kafka系列】消费者
  • 1-1 Git如何安装小乌龟
  • 网络安全中的account和audit区别
  • 47.实验室管理系统(基于SSM和html的Java项目)
  • Kotlin 2.1.0 入门教程(十六)属性、getter、setter、幕后字段、后备属性、编译时常量、延迟初始化
  • 性能测试工具
  • 自建 Redis 中设置 ACL 用户和权限