最近一直在研究如何打算属于我自己的J.A.R.V.I.S.(钢铁侠中的机器人管家)。
上一篇写了我最近在部署自己的大模型,使用llama3.1, 和通义千问2。虽然最终结果也是成功了,过程却十分地坎坷。所以这一篇文章一是总结其中遇到的问题,软件、硬件,想到什么就写什么,算是随笔吧。也给后面自己部署的同学们写个避雷指南。
前面已经写了硬件和GPU的相关文章:
关于自己部署AI大模型踩的坑(一)——硬件篇_llama3.1 70b 硬件要求-CSDN博客
关于自己部署AI大模型踩的坑(二)—— GPU篇_ollama用cpu运行大模型是模拟gpu?-CSDN博客
接下来就是要部署大模型了。如果你只是想体验一下大模型,不打算使用GPU,那其实相对来说简单很多。而如果你要你的大模型更加智能,更加地有效地帮助你工作,GPU的使用在所难免,而且GPU的性能还是越高越好——这里有金钱滚滚的声音。
这篇先写部署成功的一些经历:
一、系统和驱动。
虽然windows也可以部署,但对于一个技术人员来说,linux有着不可比拟的稳定性和便捷性,尤其是Docker的使用(Windows也可以部署Docker,非开发人员也可以使用Windows部署相关应用,我选择了Ubuntu来部署)。
安装使用的是Ubuntu24.04, GPU使用的是NVIDIA Tesla P40。
之前选择的是NVIDIA Tesla K80。但K80的 Computer Capability(计算能力)只有3.7,Ollama要求GPU的计算能力在5.0以上,最好是6.0以上。
虽然可以通过修改Ollama源码,重新编译的方式使得Ollama可以使用K80的GPU,但各种适配的环境、应用都需要更改,有点太麻烦了。
同时,NVIDIA提供的CUDA版本,也有点落后了。K80目前可以安装的CUDA最高版本为11.4,而P40最高可以到12.6。
二、安装Ollama
1、自动安装
Ollama的安装,在官方页面上的介绍很简单,只需要一条命令:
curl -fsSL https://ollama.com/install.sh | sh
2、手动安装
但是众所周知的原因,我推荐使用手动安装:
curl -fsSL https://ollama.com/download/ollama-linux-amd64.tgz | sudo tar zx -C /usr
当然,对于步步都想要亲力亲为的我来说,选择的命令是:
wget https://ollama.com/download/ollama-linux-amd64.tgz
sudo tar zxvf ollama-linux-amd64.tgz -C /usr
通过上面两条命令,你可以清楚的看到Ollama的安装过程,和安装路径。
然后新添加一个用户:
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama
新建一个service文件 /etc/systemd/system/ollama.service
:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
如果需要非本机调用Ollama接口,还需要在Service标签下添加一行:
Environment="OLLAMA_HOST=0.0.0.0"
比如我的最终就是:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0"
[Install]
WantedBy=default.target
然后启动Ollama服务
sudo systemctl daemon-reload
sudo systemctl enable ollama
这时你在shell里输入命令 ollama serve, 可以看到 11434端口被占用的响应。这也说明Ollama已经安装成功了。
ubuntu@ubuntu:~$ ollama serve
Error: listen tcp 127.0.0.1:11434: bind: address already in use
三、运行大模型。
安装好Ollama后,运行大模型就非常方便了,只需要一条命令: ollama run xxx
比如我想使用llama3.1, 那么输入命令 ollama run llama3.1,ollama即会自动运行,尝试加载llama3.1的模型。如果本地没有模型文件,ollama即开始自动下载。
因为未做优化的llama3.1对汉语的支持并不太好,所以我选择了阿里的通义千问来做测试:
拉取大模型
拉取完成,自动启动大模型
当然,你也可以选择Ollama支持的任意大模型来使用:
Model | Parameters | Size | Download |
---|---|---|---|
Llama 3.1 | 8B | 4.7GB | ollama run llama3.1 |
Llama 3.1 | 70B | 40GB | ollama run llama3.1:70b |
Llama 3.1 | 405B | 231GB | ollama run llama3.1:405b |
Phi 3 Mini | 3.8B | 2.3GB | ollama run phi3 |
Phi 3 Medium | 14B | 7.9GB | ollama run phi3:medium |
Gemma 2 | 2B | 1.6GB | ollama run gemma2:2b |
Gemma 2 | 9B | 5.5GB | ollama run gemma2 |
Gemma 2 | 27B | 16GB | ollama run gemma2:27b |
Mistral | 7B | 4.1GB | ollama run mistral |
Moondream 2 | 1.4B | 829MB | ollama run moondream |
Neural Chat | 7B | 4.1GB | ollama run neural-chat |
Starling | 7B | 4.1GB | ollama run starling-lm |
Code Llama | 7B | 3.8GB | ollama run codellama |
Llama 2 Uncensored | 7B | 3.8GB | ollama run llama2-uncensored |
LLaVA | 7B | 4.5GB | ollama run llava |
Solar | 10.7B | 6.1GB | ollama run solar |
四、安装open-webui
Ollama安装完成后,仍然是一个命令行的工具,虽然他也提供了API可供开发使用,比如python, js, java,均可供开发人员调用。
而目前开源的界面工具已经有不少,并且做得相当优秀,比如open-webui。就很简洁,也很方便。
open-webui安装部署有两种试:Docker部署和手动安装。
1、Docker部署
相对来说很方便,但有问题起来却非常地复杂。
因为我不喜欢他自动启动,所以我去掉了 --restart always 这段命令
使用CPU运行:
# 使用CPU
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main
# 如果Ollama不在本地
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main
# 使用GPU
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:cuda
# 使用国内镜像拉取
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui registry.cn-shenzhen.aliyuncs.com/funet8/open-webui:cuda
# 当然上面的几条命令也可以换成国内镜像使用。
# 比如CPU版
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui registry.cn-shenzhen.aliyuncs.com/funet8/open-webui:main
2、手动部署
在确定自己的硬件和软件都支持的前提下,也可以手动部署。不过建议小白不要尝试,其中很多问题,可能小白解决不了。
下面是open-webui官方文档里的部署方法,我部署的过程没记录,很复杂就是了(比如python虚拟环境venv/conda, torch版本和安装等等)。
Requirements 📦
Build and Install 🛠️
Run the following commands to install:
For Linux/macOS:
git clone https://github.com/open-webui/open-webui.git
cd open-webui/
# Copying required .env file
cp -RPp .env.example .env
# Building Frontend Using Node
npm install
npm run build
cd ./backend
# Optional: To install using Conda as your development environment, follow these instructions:
# Create and activate a Conda environment
conda create --name open-webui-env python=3.11
conda activate open-webui-env
# Install dependencies
pip install -r requirements.txt -U
# Start the application
bash start.sh
For Windows:
git clone https://github.com/open-webui/open-webui.git
cd open-webui
copy .env.example .env
npm install
npm run build
cd .\backend
# Optional: To install using Conda as your development environment, follow these instructions:
# Create and activate a Conda environment
conda create --name open-webui-env python=3.11
conda activate open-webui-env
pip install -r requirements.txt -U
start.bat
如果都部署成功,就可以通过 http://ip:3000 的地址访问到界面了。
同时也可以看到GPU已经在工作了(测试使用的是qwen2:0.5b/qwen2:7b,P40 24G显存,理论上可以支持7b甚至更高的模型流畅使用):
上面为两次GPU信息截图,上为Docker部署的open-webui运行时,下为qwen2:0.5b/Docker部署open-webui的GPU使用情况
此为单独启动qwen2:7b的GPU使用情况
qwen2:7b在运行/回答问题时的GPU使用情况