Ollama 测试

今天也是心血来潮,本地搭建了个 Ollama 来玩玩

系统:Arch Linux 6.10.2
NVIDIA 驱动版本:555.58.02

  1. 安装 ollama,这里选择了 cuda 版本,能发挥显卡的力量
1
sudo pacman -S ollama-cuda
  1. 启动服务
1
sudo systemctl enable --now ollama.service

如果需要配置其他服务进行远程连接,比如 docker 部署 open-webui,则需要修改配置文件 ollama.service 加环境变量,加个 OLLAMA_HOST,因为 systemd 不认识系统的环境变量,所以不能修改 /etc/profile 之类的配置,而是要单独修改 systemd 配置

1
sudo systemctl edit ollama.service

加一段配置在 ### Editing### Edits 之间

1
2
[Service]
Environment="OLLAMA_HOST=0.0.0.0"

接着两部曲

1
2
sudo systemctl daemon-reload
sudo systemctl restart ollama.service

最后可以检查一下 sudo systemctl cat ollama.service

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
# /etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
Wants=network-online.target
After=network.target network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
WorkingDirectory=/var/lib/ollama
Environment="HOME=/var/lib/ollama"
User=ollama
Group=ollama
Restart=on-failure
RestartSec=3
Type=simple
PrivateTmp=yes
ProtectSystem=full
ProtectHome=yes

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_HOST=0.0.0.0"

(这里不建议直接修改原来的配置文件,用 edit 来修改会往同名 service.d 文件夹里加一段配置 override.conf 优先加载,这样不怕改烂了原来的配置,也不会出现 .pacmew 这种问题)

  1. 跑模型

比如跑个通义千问

1
2
3
4
5
6
➜  ~ ollama run qwen2
>>> 你是谁
我是阿里云开发的一款超大规模语言模型,我叫通义千问。作为一个AI助手,我的目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑。我会不断学习和进步,不
断提升自己的能力,为用户提供更好的服务。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。

>>> Send a message (/? for help)
  1. 跑个 open-webui

AUR 仓库里有包,但是编译不过,所以放弃,转 docker

1
2
3
4
5
6
7
8
9
10
11
services:
open-webui:
container_name: open-webui
image: linweiyuan/open-webui
ports:
- 8080:8080
volumes:
- ./data:/app/backend/data
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
  1. 测试结果

  1. Spring AI 测试
1
2
3
4
5
spring:
ai:
ollama:
chat:
model: qwen2

也正常

1
2
3
4
5
6
7
8
9
10
11
➜  ~ http :8080/ai/generate message==你是谁
HTTP/1.1 200
Connection: keep-alive
Content-Type: application/json
Date: Sat, 03 Aug 2024 16:00:30 GMT
Keep-Alive: timeout=60
Transfer-Encoding: chunked

{
"generation": "我是阿里云开发的一款超大规模语言模型,我叫通义千问。"
}

华丽的分割线

难绷