部署ollama本地大模型并对接maxkb使用

github托管地址:

ollama/ollama: Get up and running with Llama 3, Mistral, Gemma, and other large language models. (github.com)

模型官网:

https://ollama.com/library/llama3

qwen模型下载地址:

https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat-GGUF/tree/main

liama2下载:https://llama-2.ai/download/

liama3下载:Download Llama (meta.com)

Llama3-8B-Instruct模型下载地址:

魔搭社区(境内):https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct/files

huggingface(境外):https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct/tree/main

LLaMA-Factory项目地址:https://github.com/hiyouga/LLaMA-Factory

llama2中文模型参数详情:llama2-chinese:7b (ollama.com)

Llama3模型中文微调版下载地址(链接中有下载地址)

https://github.com/GEGEWU-CLOUD/Llama-Chinese

Llama 3的亮点和特性如下:

基于超过15T token训练,大小相当于Llama 2数据集的7倍还多;
训练效率比Llama 2高3倍;
支持8K长文本,改进的tokenizer具有128K token的词汇量,可实现更好的性能;
在大量重要基准测试中均具有最先进性能;
增强推理和代码能力;
安全性有重大突破,带有Llama Guard 2、Code Shield 和 CyberSec Eval 2的新版信任和安全工具,还能比Llama 2有更好“错误拒绝表现”。

Ollama是什么?
Olama是一个先进的AI工具,它允许用户在自己的电脑上(目前支持macOs和Linux,Windows即将推出)轻松设置和运行大型语言模型(LLMs)。这个工具的亮点在于,它不仅支持运行如Lama 2这样的强大语言模型,还允许用户自定义和创建自己的模型。

Meta发布了Llama 3模型可使用ollama部署,官方介绍文档在这。总结一下重点内容:

  1. 本次共发布了Llama 8B, 70B的模型,70B性能超越GPT3.5;

  2. 预告了正在训练中的400B+模型,性能追赶GPT4;

    https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_767b2d80d661dabc0a5cdffbfcceaf69.png

    参考文档:Llama 3 使用方法以及模型下载教程 - 知乎 (zhihu.com)

clone/下载github源码

在meta公布的github网页(https://github.com/meta-llama/llama3)中,clone或者下载好源代码。

关于域名无效的解决方案

MaxKB 对接Ollama模型时,提示 API 域名不可用 - MaxKB - 社区论坛 - FIT2CLOUD 飞致云

Ollama主要功能

  • 本地语言模型执行:Ollama使用户能够在本地运行大型语言模型,提供更快、更高效的处理能力。
  • Llama 2模型:用户可以利用Lama 2语言模型,该模型提供先进的自然语言处理能力,适用于广泛的应用场景
  • 模型定制:Ollama允许用户根据特定任务和需求定制和创建自己的语言型。
  • 易于设置:该工具提供用户友好的界面,使用户能够快速启动并运行所选语言模型。
  • 平台兼容性:目前Ollama支持macOS,确保与macOS系统的无缝集成。

支持的模型

ModelParametersSizeDownload
Llama 38B4.7GBollama run llama3
Llama 370B40GBollama run llama3:70b
Phi-33.8B2.3GBollama run phi3
Mistral7B4.1GBollama run mistral
Neural Chat7B4.1GBollama run neural-chat
Starling7B4.1GBollama run starling-lm
Code Llama7B3.8GBollama run codellama
Llama 2 Uncensored7B3.8GBollama run llama2-uncensored
LLaVA7B4.5GBollama run llava
Gemma2B1.4GBollama run gemma:2b
Gemma7B4.8GBollama run gemma:7b
Solar10.7B6.1GBollama run solar

一. 部署

参考地址:

https://wiki.eryajf.net/pages/97047e/#%E9%80%9A%E8%BF%87-docker-%E9%83%A8%E7%BD%B2

镜像可选

ollama/ollama

registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:ollama

registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:ollama0.2.5

CPU版本部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: '3.8'

# cpu模式
services:
ollama:
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:ollama
#ollama/ollama
container_name: ollama
volumes:
- ./ollama:/root/.ollama
ports:
- "11434:11434"
environment:
OLLAMA_ORIGINS: "*"
OLLAMA_HOST: "0.0.0.0"

open-webui:
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:open-webui-main
#ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: always
ports:
- "3000:8080"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- open-webui:/app/backend/data

volumes:
open-webui:

GPU版本部署

GPU模式(需要有NVIDIA显卡支持)

安装英伟达容器工具包(以Ubuntu22.04为例)

其他系统请参考:英伟达官方文档

参考博主另一篇博客:GPU模式先决条件

1
2
3
4
5
6
7
8
9
10
# 1.配置apt源
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
# 2.更新源
sudo apt-get update
# 3.安装工具包
sudo apt-get install -y nvidia-container-toolkit

部署

参考:https://bian.blog/2024/06/4697.html

1
docker run --gpus all -d -v /opt/ai/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
version: '3.8'

services:
ollama:
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:ollama
container_name: ollama
runtime: nvidia
user: root
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: ["gpu"]
count: all # 根据需要调整 GPU 的数量
volumes:
- ./ollama:/root/.ollama
ports:
- "11434:11434"
environment:
KEEP_GPUS_TIMEOUT: 40
TZ: Asia/Shanghai
OLLAMA_ORIGINS: "*"
OLLAMA_HOST: "0.0.0.0"
networks:
- ollama

open-webui:
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:open-webui-main
#ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: always
ports:
- "8080:8080"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- open-webui:/app/backend/data
networks:
- ollama

volumes:
open-webui:
networks:
ollama:
driver: bridge

理解配置

现在,让我们探讨一下 docker-compose.yml 文件的关键组件,该文件可以使用 GPU 加速运行 Ollama:

Docker Compose 版本:
version 属性指定了使用的 Docker Compose 版本。虽然有些人可能会提到 3.9,但推荐使用官方文档中提到的版本,目前是 3.8。这样可以确保兼容性和稳定性。

Ollama 服务定义:
services 部分定义了 ollama 服务,它封装了 Ollama 容器。以下是其重要属性的分解:

image:指定 Ollama 的 Docker 镜像。默认是 ollama/ollama,但如果需要,可以使用特定版本(请参阅 Ollama 的文档以获取可用版本)。
deploy:该部分配置了 Ollama 容器的资源保留,这是利用 GPU 的关键。
resources:定义容器的资源需求。
reservations:该嵌套属性允许您为容器保留特定设备。
devices:定义设备保留。在此嵌套配置中,我们指定:
driver:将设备驱动程序设置为 nvidia,表示我们请求使用 Nvidia GPU。
capabilities:列出 Ollama 请求的功能。在本例中,我们指定 “gpu” 以表示我们希望利用 GPU 进行处理。
count:该值确定要为 Ollama 保留多少个 Nvidia GPU。使用 all 来利用所有可用的 GPU,或者如果有多个 GPU 并希望为 Ollama 专门分配一部分,可以指定一个具体的数量。
持久化卷定义:
volumes 部分定义了一个名为 ollama 的持久化卷。此卷确保 Ollama 生成的任何数据(如训练模型或配置)在容器重启后仍然存在。它被挂载在 Ollama 容器内的 /root/.ollama 目录。

部署完成后载入大模型(CPU GPU相同)

1
2
3
4
# 生效上传的模型文件
docker-compose restart
# 启动qwen:4b模型
docker exec -it ollama ollama run qwen:4b-chat

备注:开启代理在本机下载完成之后 会在当前目录ollama文件夹 生成一个models的文件夹模型文件就存于其中 只需要将此文件夹压缩上传到服务器后 再次执行此项命令服务器上模型即可部署完成 上传后需要重启容器docker-compose restart再执行run即可

建议:最好将整个项目文件包含docker-compose文件上传到服务器执行相应操作UP ollama create等。

llama3:8b效果:

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_a21d90e141ec4f1cce9354171386e840.png

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_d4f9773272728a7238a432b06356f0ce.png

注意:使用pve创建的虚拟机直通GPU 需要将cpu模式设置为host(默认为qemu模式) 否则会报错cpu不支持avx指令集导致GPU被禁用

1
ollama  | time=2024-07-23T02:15:07.485Z level=WARN source=gpu.go:225 msg="CPU does not have minimum vector extensions, GPU inference disabled" required=avx detected="no vector extensions"

解决:

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_20236426c0189f25768346fb91a15c8f.png

ollama 成功使用GPU截图

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_69b91f921449ffe234d7c952ae8412ec.png

效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@dmx:/opt/ollama# docker exec -it ollama bash
root@3373062f728d:/# nvidia-smi
Tue Jul 23 07:31:40 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.100 Driver Version: 550.100 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4090 D Off | 00000000:01:00.0 Off | Off |
| 0% 39C P8 15W / 425W | 5609MiB / 24564MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+

部署完成后微调为自己的大模型:ollama本地大模型微调及多模态图片分析

二. Ollama 中 离线部署 qwen:0.5b 模型为例。

1. 下载模型

访问 huggingface 下载 qwen1_5-0_5b-chat-q5_k_m.gguf 模型。

https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat-GGUF/tree/main

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_f93341707d2e1b6931f22cad2d81db8a.png

2. 上传 Qwen1.5-0.5B-Chat-GGUF 模型离线文件到 Ollama 所在服务器

3. 创建Ollama Modelfile

创建一个名为 Modelfile 的文件,内容如下:

1
2
3
4
5
6
7
8
9
10
FROM ./qwen1_5-0_5b-chat-q5_k_m.gguf

TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>{{ end }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""

PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"

说明:不同模型的 Modelfile 内容不同,可参考 Ollama 官网 参数设置

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_8bbd7faef16aaea28633b9c3ed3a9415.png

4. 在Ollama中创建模型

执行以下命令,创建模型:

1
ollama create qwen:0.5b -f Modelfile

执行以下命令,确认模型存在:

1
ollama list

5. 在 MaxKB中 添加 Ollama 模型 对接上面创建的 qwen:0.5b 模型

效果

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_021ed55c6e8335c07278795effa9572b.png

三. 对接官方web面板open-webui-main

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_e98184a52ba387311de9a9d1f3759c29.png

四. 对接MaxKB

见链接:https://blog.fit2cloud.com/?p=3fc407b2-1962-4196-b5b8-c7d27684b446

备注:api-key没有可随便输即可

注意:对接本地大模型不能通过下拉框选择 需要手动输入 ollama list 获取到的模型名称
否则会报错 Error: pull model manifest: Get “https://registry.ollama.ai/v2/library/llama3/manifests/8b“: dial tcp 104.21.75.227:443: i/o timeout 与
oneapi对接ollama类似

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/5/image_9523bdac22c80d831c4daf934b10cdf3.png

本文参考:

https://blog.csdn.net/qq_38593436/article/details/136407171

https://blog.csdn.net/weixin_43012017/article/details/138253446

https://blog.fit2cloud.com/?p=3fc407b2-1962-4196-b5b8-c7d27684b446

如何使用Ollama离线部署LLM大语言模型 · 1Panel-dev/MaxKB Wiki (github.com)

带你认识本地大语言模型框架Ollama(可直接上手) | 二丫讲梵 (eryajf.net)