最近,需要私人聊天机器人服务来完全替代 OpenAI 的 ChatGPT。因此,我决定在家里实现一个,并让家里的每个人都可以访问它以及我的网络打印机和NAS(OpenMediaVault) 。
过去,我经常建议大家用 Llama 系列做英语任务,用 Qwen 系列做中文任务。没有开源模型在多语言任务上比专有模型(GPT/Claude)更强大。
然而,众所周知,最近情况发生了变化。每当我厌倦了 Qwen2.5 时,我就会偶尔使用 DeepSeek-V2,并且由于缺乏硬件而落后于 DeepSeek V2.5 和 V3。但 DeepSeek 没有让我失望,R1 的表现非常出色,并且仅提供 1.5B!
这意味着我们甚至可以在具有一定用户体验的 CPU 上运行它。由于许多人都有用于游戏的 GPU,因此速度不是问题。让本地 LLM 处理上传的文档和图像是一个很大的优势,因为 OpenAI 限制免费帐户的此类使用。
尽管使用官方的单行命令安装捆绑的 Ollama 支持的 Open WebUI非常容易:
docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
但是对于大多数人来说,让 RAG(网络搜索)正常工作并不容易,所以我想找到一些开箱即用的解决方案。
正如我在上一篇文章中提到的,harbor 是试验不同 LLM 堆栈的绝佳试验台。但它不仅如此,它还是一个自托管本地 LLM 的一体化解决方案,RAG 开箱即用。所以,让我们从头开始实现它,并且可以随意跳过步骤,因为大多数人不会从操作系统安装开始。
与之前相同,使用debian-11.6.0-amd64-netinst.iso
完成安装过程
添加sudoer usermod -aG sudo username
然后重启
(可选)添加额外交换
fallocate -l 64G /home/swapfile chmod 600 /home/swapfile mkswap /home/swapfile swapon /home/swapfile
并使交换文件持久化nano /etc/fstab
UUID=xxxxx-xxx swap swap defaults,pri=100 0 0 /home/swapfile swap swap defaults,pri=10 0 0
使用swapon --show
或free -h
检查
禁用 Nouveau 驱动程序
bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf" bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf" update-initramfs -u update-grub reboot
安装依赖项
apt install linux-headers-`uname -r` build-essential libglu1-mesa-dev libx11-dev libxi-dev libxmu-dev gcc software-properties-common sudo git python3 python3-venv pip libgl1 git-lfs -y
(可选)如果需要,执行卸载
apt-get purge nvidia* apt remove nvidia* apt-get purge cuda* apt remove cuda* rm /etc/apt/sources.list.d/cuda* apt-get autoremove && apt-get autoclean rm -rf /usr/local/cuda*
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda-repo-debian11-12-4-local_12.4.1-550.54.15-1_amd64.deb sudo dpkg -i cuda-repo-debian11-12-4-local_12.4.1-550.54.15-1_amd64.debsudo cp /var/cuda-repo-debian11-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo add-apt-repository contrib sudo apt-get update sudo apt-get -y install cuda-toolkit-12-4 sudo apt install libxnvctrl0=550.54.15-1 sudo apt-get install -y cuda-drivers
安装 NVIDIA Container Toolkit,因为 Harbor 是基于 Docker 的
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
然后sudo apt-get update
和sudo apt-get install -y nvidia-container-toolkit
执行 cuda 安装后操作nano ~/.bashrc
export PATH=/usr/local/cuda-12.4/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然后sudo update-initramfs -u
, ldconfig
或source ~/.bashrc
应用更改
重启后,使用nvidia-smi
和nvcc --version
确认
安装 Miniconda(可选,不适用于 Harbor)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && sudo chmod +x Miniconda3-latest-Linux-x86_64.sh && bash Miniconda3-latest-Linux-x86_64.sh
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
无需 sudo 即可执行 docker 的后续安装
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker docker run hello-world
git clone https://github.com/av/harbor.git && cd harbor ./harbor.sh ln
使用harbor --version
进行验证
添加 RAG 支持到默认设置,使用harbor defaults add searxng
使用harbor defaults list
检查,目前有三个服务处于活动状态: ollama
, webui
, searxng
运行harbor up
在 docker 中启动这些服务
使用harbor ps
作为docker ps
,并使用harbor logs
查看 tailing 日志
现在 open-webui 前端服务于0.0.0.0:33801
,可以从http://localhost:33801
或使用服务器 IP 地址的 LAN 客户端进行访问。
使用watch -n 0.3 nvidia-smi
监控 VRAM 使用情况
使用harbor up ollama --tail
或者harbor logs
监控日志
所有 ollama 命令均可用,例如harbor ollama list
现在是时候从其他设备(桌面/移动设备)访问以注册管理员帐户并下载模型了。
使用管理员帐户登录后,单击右上角的头像图标,打开Admin Panel
然后打开Settings
,或者直接通过“http://ip:33801/admin/settings”访问。
单击Models
,然后单击右上角的Manage Models
(看起来像下载按钮)。
将deepseek-r1
或任何其他模型放在下面的文本框中Pull a model from Ollama.com
,然后单击右侧的下载按钮。
模型下载后,可能需要刷新,新下载的模型将在New Chat
(主页)的下拉菜单下可用。
现在,它不仅运行着 ChatGPT 的聊天机器人替代品,还运行着 OpenAI API 的功能齐全的 API 替代品,以及 Google 的私人搜索引擎替代品!
局域网内可以通过以下方式访问 webui: http://ip:33801
ollama 可在 LAN 内通过以下方式访问: http://ip:33821
searxng 可在局域网内通过以下方式访问: http://ip:33811
使用任何具有 LLM API 集成的应用程序调用Ollama API :
http://ip:33821/api/ps http://ip:33821/v1/models http://ip:33821/api/generate http://ip:33821/v1/chat/completionsb