Ollama: 自托管LLM的简单方案

Self Hosted 自托管
Feb 5, 2024 ~

这两天心血来潮,看着机箱里面的早就不用来打游戏的显卡,总觉得需要做点什么。碰巧看到Ollama,似乎自托管LLM变得比以往容易了很多。特此尝试并记录一下。文中涉及了Ollama的部署和使用,以及两个UI的使用:Big-AGI和Ollama WebUI。

Ollama是什么

大概可以理解为一个本地运行LLM的Framework或者说Platform。跑起来之后可以很方便的对接一众支持的LLM模型,然后还可以对接一众UI。大概可以理解为一种LLM和UI/app之间的Multiplexer。

💡
题外话,其实所谓的Integration就是这类工作。而且基本上可以说很多很多的工作都是这类的,并不涉及太多的硬核技术。然而这类工作确实也要求速度,快速的对接足够多的上下游以站稳脚跟。而这个速度有时不只是单纯的速度,还要求对于上下游精确深入的理解,才能少走弯路,不重复造轮子。然而这个要求很多时候潜藏在表层之下,很多从业人员根本就意识不到,而这对于有追求的技术人员来讲,不能不说是可悲的。
GitHub - ollama/ollama: Get up and running with Llama 2, Mistral, and other large language models locally.
Get up and running with Llama 2, Mistral, and other large language models locally. - GitHub - ollama/ollama: Get up and running with Llama 2, Mistral, and other large language models locally.

既然只是一个平台或者说Framework,那么自然还是需要UI和LLM才能运行的。在Ollama的Github page上面已经列出了一些选项,个人也进行了一些尝试,在此记录了一下最近的尝试。

Ollama会expose一个OpenAI compatible的API在11434端口上面,然后一种给ChatGPT做的UI大概只需要一些简单的修改就可以对接Ollma上面的模型了。

至于Ollama支持的模型,自然Meta的llama2是在列的。其他的还有最近挺火的Mixtral 8x7b以及Mistral还有Llava2。

Installation and/or Deployment

Ollama本身提供了一个 ollama command line tool 来管理 service up/down 以及模型的pull and deletion。

安装非常简单,Ollama有个Linux上面安装的文档

# Download the install script
curl https://ollama.ai/install.sh | sh

# other than the script, use this to install manually
sudo curl -L https://ollama.ai/download/ollama-linux-amd64 -o /usr/bin/ollama
sudo chmod +x /usr/bin/ollama
# Create a user specifically for runing ollama
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama

之后最好把Ollama的服务设置为自动启动的。这个任务自然落到Systemd上面。
写一个systemd的service config: /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

Reload the service config and enable ollama service.

sudo systemctl daemon-reload
sudo systemctl enable ollama

但是到此为止,Ollama目前只会接受来自172.0.0.1的请求。所以如果你像我一样希望在另一个Host上面的跑UI,那么到这一步还不够。要开放所有IP的访问,需要设置Environment variable。

标签