LLM学习笔记2——使用Docker(Ollama+OpenWebUI)实现本地摆设DeepSeek-R1- ...

打印 上一主题 下一主题

主题 997|帖子 997|积分 2991

系列文章目录

参考博客
参考博客


  

前言

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参考博客
升级更新一下
  1. sudo apt-get update
复制代码
没有curl库的安装一下
  1. sudo apt-get install -y curl
复制代码
1.配置添加官方密钥和堆栈

配置添加官方密钥和堆栈:
  1. curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  2.   && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  3.     sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  4.     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.从存储库更新软件包列表

从存储库更新软件包列表
  1. sudo apt-get update
复制代码
提示nvidia更新失败:
  1. E: 仓库 “https://nvidia.github.io/libnvidia-container/stable/deb/amd64  Release” 没有 Release 文件。
  2. N: 无法安全地用该源进行更新,所以默认禁用该源。
  3. N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
复制代码
查了一下缘故原由,在github上找到办理方法
默认情况下,sudo命令会重置环境变量,只保留一些基本的环境变量。但是通过使用-E选项,可以保留当前用户的环境变量,使得执行的命令可以继承当前用户的环境设置。
所以“sudo apt-get update

”不遵照本地机器的代理设置,需要加“-E”操纵。
重新更新软件包列表
  1. sudo -E apt-get update
复制代码
3.安装NVIDIA容器工具包

安装NVIDIA容器工具包:
  1. sudo -E apt-get install -y nvidia-container-toolkit
复制代码
4.查看版本

启动Docker服务后,可以使用以下命令来查看nvidia-container-toolkit的版本:
  1. nvidia-container-cli --version
  2. # 或者
  3. nvidia-container-runtime --version
复制代码

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

编辑 Docker 配置文件 /etc/docker/daemon.json,添加以下内容:
  1. {   
  2.         "registry-mirrors": [
  3.                 "https://xxx.com"
  4.             ],
  5.         "runtimes": {
  6.                   "nvidia": {
  7.                             "path": "nvidia-container-runtime",
  8.                             "runtimeArgs": []
  9.                   }
  10.         },
  11.         "default-runtime": "nvidia"
  12. }
复制代码
在更改配置后,重启 Docker 服务:
  1. sudo systemctl restart docker
复制代码

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

1、安装Docker Compose

安装Docker Compose 参考博客
1.Docker Compose安装步骤

  1. # 安装最新版本docker-compose
  2. sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  3. # 加上许可权限
  4. sudo chmod +x /usr/local/bin/docker-compose
  5. # 查看是否已成功安装
  6. docker-compose --version
  7. # docker-compose是一个文件,如果要卸载只需要把文件删除即可
  8. rm /usr/local/bin/docker-compose
复制代码


2.Docker Compose 常用指令

  1. docker-compose up:启动应用程序的所有服务。如果容器不存在,则会自动创建并启动。如果容器已经存在,则会重新启动。
  2. docker-compose down:停止并移除应用程序的所有服务。这将停止并删除所有相关的容器、网络和卷。
  3. docker-compose start:启动应用程序的所有服务。与docker-compose up不同的是,docker-compose start只会启动已经存在的容器,而不会重新创建。
  4. docker-compose stop:停止应用程序的所有服务。与docker-compose down不同的是,docker-compose stop只会停止容器,而不会删除它们。
  5. docker-compose restart:重启应用程序的所有服务。这将停止并重新启动所有容器。
  6. docker-compose ps:列出应用程序的所有服务及其状态。这将显示每个服务的容器ID、状态、端口映射等信息。
  7. docker-compose logs:查看应用程序的服务日志。这将显示所有服务的日志输出。
  8. docker-compose build:构建应用程序的服务镜像。这将根据定义的Dockerfile构建镜像。
  9. docker-compose exec:在运行的容器中执行命令。例如,docker-compose exec web ls将在名为web的容器中执行ls命令。
  10. docker-compose down --volumes:停止并移除应用程序的所有服务,并删除所有相关的容器、网络和卷。使用--volumes选项可以删除与服务关联的卷。
复制代码

2、拉取Ollama和OpenWebUI的镜像

1.拉取ollama镜像

拉取ollama镜像:
  1. sudo docker pull ollama/ollama
复制代码

假如pull拉取不稳定,可以尝试修改/etc/docker下的daemon.json配置文件,增长一些网址,加速Docker镜像。
  1. {
  2.     "registry-mirrors": [
  3.         "https://do.nark.eu.org",
  4.         "https://dc.j8.work",
  5.         "https://docker.m.daocloud.io",
  6.         "https://dockerproxy.com",
  7.         "https://docker.mirrors.ustc.edu.cn",
  8.         "https://docker.nju.edu.cn",
  9.                 "https://pee6w651.mirror.aliyuncs.com",
  10.                 "https://docker.m.daocloud.io",
  11.                 "https://dockerproxy.com",
  12.                 "https://registry.docker-cn.com",
  13.                 "https://docker.mirrors.ustc.edu.cn",
  14.                 "https://hub-mirror.c.163.com",
  15.                 "https://hub.uuuadc.top",
  16.                 "https://docker.anyhub.us.kg",
  17.                 "https://dockerhub.jobcher.com",
  18.                 "https://dockerhub.icu",
  19.                 "https://docker.ckyl.me",
  20.                 "https://docker.awsl9527.cn",
  21.                 "https://mirror.baidubce.com"
  22.     ]
  23. }
复制代码
查看ollama镜像是否拉取乐成:
  1. sudo docker images
复制代码

2.拉取OpenWebUI镜像

拉取OpenWebUI镜像:
  1. sudo docker pull ghcr.io/open-webui/open-webui:main
复制代码
查看OpenWebUI镜像是否拉取乐成:
  1. sudo docker images
复制代码


3、使用Docker Compose运行Ollama和OpenWebUI

参考博客
1. 编写docker-compose.yml 文件

  1. services:
  2.   ollama:
  3.     image: ollama/ollama
  4.     container_name: ollama
  5.     ports:
  6.       - "11434:11434"
  7.     volumes:
  8.       - ./ollama:/root/.ollama
  9.     restart: unless-stopped
  10.     deploy:  
  11.       resources:
  12.         reservations:
  13.           devices:
  14.             - driver: nvidia
  15.               count: all
  16.               capabilities: [gpu]
  17.   open-webui:
  18.     image: ghcr.io/open-webui/open-webui:main
  19.     container_name: open-webui
  20.     environment:
  21.       ROOT_PATH: "/ollama"
  22.       OLLAMA_BASE_URL: "http://ollama:11434"
  23.     ports:
  24.       - "3030:8080"
  25.     volumes:
  26.       - ./open-webui:/app/backend/data
  27.     restart: always
  28.     depends_on:
  29.       - ollama
复制代码
2.运行docker-compose.yml 文件

在 docker-compose.yml 所在目录下打开终端,执行:
  1. docker-compose up -d
复制代码
假如提示以下错误:
  1. Error response from daemon: could not select device driver "nvidia" with capabilities: [[gpu]]
复制代码
请查看前面的一、安装nvidia-container-toolkit工具下的:5.配置 Docker 使用 NVIDIA nvidia-container-toolkit工具是否完成。


然后在浏览器访问:
  1. 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 界面进行交互。
  1. ollama:
  2.   image: ollama/ollama
  3.   container_name: ollama
  4.   ports:
  5.     - "11434:11434"
  6.   volumes:
  7.     - ./ollama:/root/.ollama
  8.   restart: unless-stopped
  9. image: ollama/ollama
  10. deploy:  
  11.   resources:
  12.     reservations:
  13.       devices:
  14.         - driver: nvidia
  15.           count: all
  16.           capabilities: [gpu]
  17. image声明使用ollama/ollama镜像。
  18. container_name指定容器的名称为 ollama。
  19. ports将宿主机的 11434 端口 映射到容器的 11434 端口,用于 API 调用。
  20. volumes把宿主机的 ./ollama 目录映射到容器的 /root/.ollama,用于持久化 Ollama 下载的模型文件。
  21. restart容器崩溃时会自动重启,除非手动停止。
  22. 配置deploy资源,指定ollama容器可以访问所有 GPU,并且声明所需的能力为 gpu。
复制代码
  1. 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:    - ollamaimage声明使用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
  2. 访问 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.检查容器

确保容器已启动且名称正确。可以通过以下命令检查:
  1. docker ps
复制代码

2.拉取模型

拉取模型:
  1. sudo docker exec -it ollama ollama run deepseek-r1:14b
复制代码
3.模型测试

终端测试:

OpenWebUI测试:

docker exec 命令解析:
  1. docker exec
  2. # 用来在一个已经运行的容器内执行命令的。它允许你在容器内部启动一个新的进程,通常用于调试和管理。
  3. -it
  4. # i(interactive)使容器的标准输入保持打开,以便你可以与容器内的进程进行交互,t(tty)为容器分配一个伪终端,这使得你可以以终端模式运行命令。
  5. ollama
  6. # 这是正在运行的容器的名称。刚刚通过 docker run 命令启动了这个容器,并给它指定了名称 ollama。
  7. ollama run deepseek-r1:14b
  8. # 这是在容器内执行的命令。它调用了 ollama 应用程序,并加载了deepseek-r1:14b 模型。
复制代码
具体想要拉取哪个模型可以到Ollama官网中查询。

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

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

  1. docker run -d -v ./ollama:/root/.ollama -p 11434:11434 --names ollama --restart alway ollama/ollama
复制代码
-v ./ollama 是挂载在自己机器的目录,是当前目录下的文件夹
2.单独运行ollama容器(GPU)

  1. docker run -d --gpus=all -v ./ollama:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama
复制代码
3.单独运行openwebui容器

  1. 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模型结构。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表