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

发布于:2024-07-03 ⋅ 阅读:(14) ⋅ 点赞:(0)

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

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

服务器 GPU 系统
HP580 G8 P40 Rocky9.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
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
直接安装即可

安装ChatOllama

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.

在这里插入图片描述

安装 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