系列文章目录
参考博客
参考博客
前言
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参考博客
升级更新一下
没有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.从存储库更新软件包列表
从存储库更新软件包列表
提示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”操纵。
重新更新软件包列表
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镜像是否拉取乐成:
2.拉取OpenWebUI镜像
拉取OpenWebUI镜像:
- sudo docker pull ghcr.io/open-webui/open-webui:main
复制代码 查看OpenWebUI镜像是否拉取乐成:
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 所在目录下打开终端,执行:
假如提示以下错误:
- Error response from daemon: could not select device driver "nvidia" with capabilities: [[gpu]]
复制代码 请查看前面的一、安装nvidia-container-toolkit工具下的:5.配置 Docker 使用 NVIDIA nvidia-container-toolkit工具是否完成。
然后在浏览器访问:
使用默认的管理员账号登录:
默认管理员账号: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: - 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
- 访问 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.检查容器
确保容器已启动且名称正确。可以通过以下命令检查:
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模型结构。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |