本地大模型运行框架Ollama

什么是 Ollama ?

Ollama 是一个简明易用的本地大模型运行框架。能在本地启动并运行 Llama 2MistralGemma 及其他大语言模型。

和老苏之前介绍的 LocalAI 比较类似,但是加载模型更容易,感觉上比较像 docker,也采用了 tags 来区分模型的不同版本,尤其是 CLI 也采用了 pullrmrun 等等;

因为老苏的小机器不支持 Nvidia GPU,所以下面👇的安装示例仅支持 CPU

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 ollama ,选择第一个 ollama/ollama,版本选择 latest

本文写作时, latest 版本对应为 0.1.27

docker 文件夹中,创建一个新文件夹 ollama,并在其中建一个子文件夹 data

文件夹 装载路径 说明
docker/ollama/data /root/.ollama 存放模型数据

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
11434 11434

容器名称

因为后面有进入容器的操作,所以这里规范下命名,就叫 ollama

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 ollama 和 子目录
mkdir -p /volume1/docker/ollama/data

# 进入 ollama 目录
cd /volume1/docker/ollama

# 运行容器(仅 CPU)
docker run -d \
--restart unless-stopped \
--name ollama \
-p 11434:11434 \
-v $(pwd)/data:/root/.ollama \
ollama/ollama

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
version: '3'

services:
ollama:
image: ollama/ollama
container_name: ollama
restart: unless-stopped
ports:
- 11434:11434
volumes:
- ./data:/root/.ollama

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 ollama 和 子目录
mkdir -p /volume1/docker/ollama/data

# 进入 ollama 目录
cd /volume1/docker/ollama

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:11434 ,如果看到 Ollama is running,表示服务启动正常

下载模型

官方提供了一个模型库,地址:https://ollama.com/library

你可以根据需要进行搜索,例如搜索 llama2

选中 llama2 ,你会看到关于这个模型的简介

进入 tags 查看需要的版本

关于不同参数模型文件所需要的内存,之前提过,这里简单再说一下

  • 7b:至少需要 8GB 内存;
  • 13b:至少需要 16GB 内存;
  • 33b:至少需要 32GB 内存;

老苏接下来尝试了 llama2:7bllama2-chinese:7b,从介绍看,后者采用了中文指令集来进行微调,使其具备较强的中文对话能力。目前这个中文微调参数模型总共发布了 7B13B 两种参数大小。

模型下载需进入容器内,不熟悉命令行的,可以进入 终端机 操作

执行下面的命令

1
2
3
4
5
# 下载模型
ollama pull llama2:7b

#下载模型(中文微调参数模型)
ollama pull llama2-chinese:7b

老苏个人更喜欢用 SSH 客户端的命令行,多一步进入容器的命令,下载是一样的

1
2
3
4
5
6
7
8
# 进入容器
docker exec --user root -it ollama /bin/bash

# 下载模型
ollama pull llama2:7b

#下载模型(中文微调参数模型)
ollama pull llama2-chinese:7b

开始下载

下载完成

开始提问

接下里就可以提问了,比如: 为什么天空是蓝色的

命令行

假设已经进入容器或者尚未退出容器,可以直接运行下面的命令

1
2
3
4
# 运行模型
ollama run llama2-chinese:7b

# 填写问题

因网络中断,答案并没有生成完全,就这几个字已经花了近 2 小时

curl

用 SSH 客户端登录到群晖后,执行下面的命令

1
2
3
4
curl -X POST http://192.168.0.197:11434/api/generate -d '{
"model": "llama2-chinese:7b",
"prompt": "你好吗"
}'

其中:

  • IP 需要改为你自己的主机 IP
  • model 后面是我们要使用的模型文件;
  • prompt 后面就是我们提的问题;

当然你还可以用 API 工具,不过可能还是 Web UI 的界面用起来更好,暂时找到了 Open WebUI ,有时间再找找

小结

跑大模型,需要的硬件资源是越高越好的。老苏的小机器既不支持 GPU,内存也仅仅够了最低要求的 8GB,所以每个问题回答的时间,都慢到让你怀疑人生。

但是,这并不能阻止我们追求知识和进行探索的热情。

参考文档

ollama/ollama: Get up and running with Llama 2, Mistral, Gemma, and other large language models.
地址:https://github.com/ollama/ollama

Ollama
地址:https://ollama.com/

ollama/ollama - Docker Image | Docker Hub
地址:https://hub.docker.com/r/ollama/ollama

library
地址:https://ollama.com/library

open-webui/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI)
地址:https://github.com/open-webui/open-webui