docker 搭建 AI大数据模型 --- 使用GPU

docker 搭建 AI大数据模型 — 使用GPU方式

搭建本地大模型,最简单的方法!效果直逼GPT

服务器GPU系统
HP580 G8P40Rocky9.2
安装程序
AnythingLLM
前端界面Open WebUI
ChatOllama
ollama
一、AnythingLLM 介绍
AnythingLLM 是 Mintplex Labs Inc. 开发的一款开源 ChatGPT 等效工具,
用于在安全的环境中与文档等进行聊天,专为想要使用现有文档进行智能聊天或构建知识库的任何人而构建。
二、前端界面Open WebUI 介绍
Open WebUI 是针对 LLM 的用户友好的 WebUI,支持的 LLM 运行程序包括 Ollama 
和 OpenAI 兼容的 API。

Open WebUI 系统旨在简化客户端(您的浏览器)和 Ollama API 之间的交互。
此设计的核心是后端反向代理,可增强安全性并解决 CORS 问题。
三、ChatOllama 介绍
ChatOllama 是一个 Nuxt 3 + Ollama Web 应用程序。ChatOllama 允许您管理您的 Ollama 服务器,
并与世界各地的 LLM 聊天。

从功能上来说,ChatOllama 类似于 Open WebU 和 AnythingLLM 的混合体,既可以和 AI 聊天,
也可以用来构建自己专属的知识库
四、ollama 介绍
开源免费:Ollama是一个不收费的开源工具。

即插即用:它提供了预装好的大模型,免除了复杂的安装和下载流程。

用户友好:即便没有任何技术背景,Ollama也易于上手和使用。

跨平台兼容性:

Ollama支持各种设备,包括PC、Mac甚至是树莓派。

运行各种规模的模型,保证了出色的扩展性。

安装 AnythingLLM

docker pull mintplexlabs/anythingllm

export STORAGE_LOCATION=/data/anythingllm && \
 mkdir -p $STORAGE_LOCATION && \
 touch "$STORAGE_LOCATION/.env" && \
 docker run -d -p 3001:3001 \
 --cap-add SYS_ADMIN \
 -v ${STORAGE_LOCATION}:/app/server/storage \
 -v ${STORAGE_LOCATION}/.env:/app/server/.env \
 -e STORAGE_DIR="/app/server/storage" \
 mintplexlabs/anythingllm

安装前端界面Open WebUI

github地址:https://github.com/open-webui/open-webui/pkgs/container/open-webui
CPU版示例
docker run -d -p 13000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434  \
--name open-webui \
--restart always dyrnq/open-webui:main

注释:
-d:在后台运行容器。
-p 13000:8080:将主机的 13000 端口映射到容器的 8080 端口。主机上访问 http://localhost:13000 会转发到容器中的 8080 端口。
--add-host=host.docker.internal:host-gateway:添加一个主机条目,将 host.docker.internal 映射到主机的 IP 地址,以便容器可以访问主机上的服务。
:host-gateway 是宿主机IP地址
-v open-webui:/app/backend/data:将主机上的 open-webui 数据卷挂载到容器中的 /app/backend/data 目录,以便容器可以访问和持久化数据。
-e OLLAMA_BASE_URL=http://host.docker.internal:11434:设置环境变量 OLLAMA_BASE_URL,指定容器内应用连接的服务地址,使用主机名 host.docker.internal 和端口 11434。
--name open-webui:为容器指定名称 open-webui。
--restart always:确保容器在失败时自动重启,并在 Docker 启动时启动。
dyrnq/open-webui:main:指定 Docker 镜像及其标签。
--add-host=host.docker.internal:host-gateway 的作用就是在容器的hosts中加个解析

修正之后的命令如下:

docker run -d -p 13000:8080 \
 --add-host=host.docker.internal:192.168.0.48 \
 -v open-webui:/app/backend/data \
 -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
 --name open-webui --restart always dyrnq/open-webui:main
GPU版示例
docker run -d -p 13000:8080  \
--gpus all --add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always ghcr.io/open-webui/open-webui:cuda

注释:
-d:在后台运行容器。
-p 13000:8080:将主机的 13000 端口映射到容器的 8080 端口。主机上访问 http://localhost:13000 会转发到容器中的 8080 端口。
--gpus all:允许容器访问所有可用的 GPU,这对于需要 GPU 加速的应用很重要。
--add-host=host.docker.internal:host-gateway:添加一个主机条目,将 host.docker.internal 映射到主机的 IP 地址,以便容器可以访问主机上的服务。
:host-gateway 是宿主机IP地址
-v open-webui:/app/backend/data:将主机上的 open-webui 数据卷挂载到容器中的 /app/backend/data 目录,以便容器可以访问和持久化数据。
--name open-webui:为容器指定名称 open-webui。
--restart always:确保容器在失败时自动重启,并在 Docker 启动时启动。
ghcr.io/open-webui/open-webui:cuda:指定 Docker 镜像及其标签,cuda 表示这个镜像包含 CUDA 支持,适用于 GPU 加速
--add-host=host.docker.internal:host-gateway 的作用就是在容器的hosts中加个解析

修正之后的命令如下:
docker run -d -p 13000:8080 \
--gpus all --add-host=host.docker.internal:192.168.0.48 \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always ghcr.nju.edu.cn/open-webui/open-webui:cuda
直接安装即可

安装ChatOllama(不指定IP版)

mkdir -p /data/chatollama/{data,db}
cd /data/chatollama
vim docker-compose.yml
把如下配置放到
version: '3.1'

services:
  chromadb:
    image: chromadb/chroma:latest
    container_name: chatollama-db
    restart: always
    ports:
      - "11431:8000"
    volumes:
      - ./data:/chroma/.chroma/index

  chatollama:
    image: 0001coder/chatollama:latest
      #image: chatollama:local
    container_name: chatollama-web
    restart: always
      #pull_policy: always    
    ports:
      - "11432:3000"
    volumes:
      - ./db:/app/sqlite
    environment:
      - CHROMADB_URL=http://chromadb:8000
      - DATABASE_URL=file:/app/sqlite/chatollama.sqlite
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - chromadb
在目录中执行如下命令
docker-compose up -d

如果没有 docker-compose
安装地址
https://github.com/docker/compose/releases
wget https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
chmod +x  /usr/bin/docker-compose
docker-compose --version
数据库初始化
容器启动后,先不忙访问,还需要对 SQLite 数据库进行初始化处理

# 如果您是第一次启动,需要初始化 SQLite 数据库
docker-compose exec chatollama npx prisma migrate dev

如果不执行初始化,后面在创建知识库时会遇到下面的报错
Invalid `prisma.knowledgeBase.count()` invocation: The table `main.KnowledgeBase` 
does not exist in the current database.

在这里插入图片描述

安装ChatOllama(指定IP版)

version: '3.1'

services:
  chromadb:
    image: chromadb/chroma:latest
    container_name: chatollama-db
    restart: always
    ports:
      - "11431:8000"
    volumes:
      - ./data:/chroma/.chroma/index
    networks:
      mynetwork:
        ipv4_address: 172.24.0.200  # 指定 chromadb 的 IP 地址

  chatollama:
    image: 0001coder/chatollama:latest
    container_name: chatollama-web
    restart: always
    ports:
      - "11432:3000"
    volumes:
      - ./db:/app/sqlite
    environment:
      - CHROMADB_URL=http://172.24.0.200:8000  # 使用指定的 chromadb IP 地址
      - DATABASE_URL=file:/app/sqlite/chatollama.sqlite
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - chromadb
    networks:
      mynetwork:
        ipv4_address: 172.24.0.201  # 指定 chatollama 的 IP 地址

networks:
  mynetwork:
    driver: bridge
    ipam:
      config:
        - subnet: 172.24.0.0/16

在目录中执行如下命令

docker-compose up -d

如果没有 docker-compose
安装地址
https://github.com/docker/compose/releases
wget https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
chmod +x  /usr/bin/docker-compose
docker-compose --version
数据库初始化
容器启动后,先不忙访问,还需要对 SQLite 数据库进行初始化处理

# 如果您是第一次启动,需要初始化 SQLite 数据库
docker-compose exec chatollama npx prisma migrate dev

如果不执行初始化,后面在创建知识库时会遇到下面的报错
Invalid `prisma.knowledgeBase.count()` invocation: The table `main.KnowledgeBase` 
does not exist in the current database.
如果要删除多余的网卡
如果可能,清理掉现有的冲突网络。你可以通过以下命令列出所有 Docker 网络并删除冲突的网络:

docker network ls
docker network rm <network_id_or_name>

安装 ollama

docker pull ollama/ollama

docker run --gpus  "device=0" -e OLLAMA_FLASH_ATTENTI0N=1 \
--name ollama    -p 11434:11434  -d ollama/ollama

注释:如果有四块GPU --gpus  "device=" 指定使用哪一块显卡
从0开始 0是第一块   1是第二块
如果报错 
docker: Error response from daemon: 
could not select device driver "" with capabilities: [[gpu]].
从这里下载镜像文件(免费的)
上传到服务器的 /etc/yum.repos.d 中
yum -y install nvidia-container-runtime
yum install -y nvidia-docker2

然后执行
docker run --gpus  "device=0" -e OLLAMA_FLASH_ATTENTI0N=1 \
--name ollama    -p 11434:11434  -d ollama/ollama

如果有多个GPU

docker run --gpus  "device=1" -e OLLAMA_FLASH_ATTENTI0N=1 \
--name ollama_01    -p 11450:11434  -d ollama/ollama

将 device 修改一下  
将 映射端口改一下 
将 名称改一下   即可
修改转到后端的端口:例如将 11434 修改 11400
cd /var/lib/docker/containers/  这个地址是docker存储地址
一个容器ID 就是一个文件夹 ,进去之后找到要修改的容器ID开头的文件夹
config.v2.json  ## 配置文件config  
hostconfig.json ## 配置文件hostconfig 
vim comfig.v2.json
修改ExposedPorts 参数的值为要替换的端口
"ExposedPorts":{"11400/tcp":

vim hostconfig.json
PortBindings 参数的值为要替换的端口
"PortBindings":{"11400/tcp"

这两个配置文件,这以下需要注意的问题:

两个配置都需要更改,同时更改的内容需要一样

更改完成之后需要对docker服务重启,而不是docker容器重启
一定要先停止容器,再修改,修改后直接重启docker服务,再启动容器
如果其中哪一个环节出错,都会出现,修改后不生效的问题

最后展示一下 docker 配置

vim /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://dockerproxy.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://ccr.ccs.tencentyun.com"
  ],
  "ipv6": false,
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "data-root": "/data/docker",
  "runtimes": {
    "nvidia": {
      "path": "/usr/bin/nvidia-container-runtime",
      "runtimeArgs": []
    }
  },
  "default-runtime": "nvidia"
}
systemctl daemon-reload
systemctl restart docker

最后展示

在这里插入图片描述

在这里插入图片描述

最好用的模型:
ollama run qwen:32b
ollama run qwen2:latest
ollama run qwen2:7b-instruct-q8_0

安装 nvidia-smi

docker run -it --rm --name test --gpus all nvidia/cuda

完结,撒花 。。。。。。。。。。。。。

open-webui参考文献

https://blog.csdn.net/wbsu2004/article/details/136443260

Chatollama 参考文献

https://blog.csdn.net/wbsu2004/article/details/136930945

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值