Ollama是一种工具,使系统管理员和开发人员可以轻松下载和在自己的服务器上运行开源大型语言模型(LLM)。与OpenAI或Anthropic等云端API不同,这些API按token计费,Ollama允许您本地托管模型——无论是在个人计算机还是VPS上——让您完全掌控,无需支付API费用。
简而言之:Ollama使您能够在VPS上运行LLM(如Llama 3),无需按token支付API费用。但是,LLM需要大量的CPU和RAM,大多数廉价VPS计划缺乏GPU,因此只有较小的量化模型(Q4格式的7B-8B参数)才能在CPU上以可接受的速度运行。更大的模型会非常缓慢。
什么是Ollama,为什么要使用它?
Ollama是一个开源项目,简化了在自己的硬件(笔记本电脑、台式机或服务器)上下载和运行LLM的过程。它通过直观的命令行界面自动处理模型下载、内存管理和模型加载/执行。
开发人员和运维团队通常自托管LLM有三个主要原因:
- 隐私保护:所有提示和数据都保留在您的VPS上。不会将任何信息发送给外部API提供商,保护敏感信息和机密工作流。
- 降低成本:无按token计费。如果您大量使用LLM,第三方API可能会变得非常昂贵。自托管只需付出服务器资源成本。
- 离线运行:您的LLM完全在本地运行。即使没有外部服务的互联网连接,模型也能继续工作。
硬件现实:您的VPS实际能处理什么
大型语言模型是资源消耗大户,需要大量的RAM和CPU(或GPU)计算能力。在期望流畅性能之前,了解这一点至关重要。
注意:大多数廉价VPS计划缺乏GPU(图形处理器)。LLM将仅在CPU上运行,但速度会非常慢。如果您预算更充足,具有GPU(NVIDIA RTX或更高版本)的VPS速度会快得多,但成本会大幅增加。
不同大小的模型有不同的要求:
| 模型大小 | 量化大小(Q4) | 最小RAM | 速度(CPU) | 建议 |
|---|---|---|---|---|
| 7B参数 | 约4-5 GB | 8 GB | 较慢(5-10 tokens/秒) | 可接受 |
| 13B参数 | 约8-9 GB | 16 GB | 非常慢(1-2 tokens/秒) | 不建议仅使用CPU |
| 70B参数 | 40+ GB | 64+ GB | 无GPU无法使用 | 需要专用GPU机器 |
对于仅CPU的VPS,我们建议使用7B参数模型(如Llama 3.1 7B、Mistral 7B或Phi-3),在Q4级别量化。这些模型占用约4-5 GB的磁盘空间和8-16 GB的总RAM——对大多数中等规模的VPS计划都可行。
小贴士:如果您想要更快的响应,请使用更小的模型(如Phi-3 3.8B)或Mistral(7B),而不是尝试在CPU上运行Llama 3 70B,那会很慢。
前提条件
- 服务器:Ubuntu 22.04 LTS或更新版本,具有root访问权限
- RAM:最小8 GB(建议16 GB)
- 存储:至少20 GB可用空间(7B模型约5 GB,但您可能需要多个模型)
- 带宽:良好的互联网速度以下载模型(7B模型约4-5 GB)
- 知识:基本的Linux命令行和systemd使用知识
在Ubuntu上安装Ollama
Ollama提供官方安装脚本。按照以下步骤操作:
- SSH进入您的VPS:
ssh root@your-vps-ip
- 下载并运行官方安装脚本:
curl -fsSL https://ollama.ai/install.sh | sh
此脚本自动安装Ollama二进制文件、所需的依赖项和systemd服务。
- 验证Ollama正在运行:
systemctl status ollama
查找"active (running)"。如果看到这个,安装成功。Ollama默认绑定到localhost:11434。
- 测试连接:
ollama list
这显示已安装的模型(新安装时为空)。
下载并运行第一个模型
让我们下载Llama 3 7B(稳定且广为认可):
- 拉取模型:
ollama pull llama3
这将从Ollama存储库下载Llama 3 8B模型(约4.7 GB)。请耐心等待——不要中断下载。
- 交互式运行模型:
ollama run llama3
当您看到>提示符时,尝试输入问题:
> What is machine learning?
模型将生成响应,在CPU上可能需要一些时间。这是正常的。
- 退出聊天:
> /bye
或按Ctrl+D。
其他值得尝试的流行模型:
ollama pull mistral— Mistral 7B(比Llama快,质量仍很好)ollama pull phi— Phi-3(3.8B,来自Microsoft,RAM使用最少)ollama pull neural-chat— Neural Chat 7B(针对对话优化)
使用REST API
Ollama在localhost:11434上公开REST API,允许您以编程方式发送请求,而不是使用交互式shell。
以下是基本的curl示例:
- 简单的生成请求:
curl -X POST http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "llama3",
"prompt": "Explain quantum computing in simple terms",
"stream": false
}'
设置"stream": false告诉API等待完整响应后才返回。
- 使用流式传输(渐进式输出):
curl -X POST http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "llama3",
"prompt": "What is the capital of Thailand?",
"stream": true
}'
使用"stream": true,API会在模型生成响应时逐个单词地发送回来,类似ChatGPT的流式传输界面。
响应为JSON格式:
{
"model": "llama3",
"created_at": "2024-01-15T10:30:00Z",
"response": "The capital of Thailand is Bangkok...",
"done": true
}
构建简单的聊天脚本
这是一个与Ollama交互的最小Python脚本:
#!/usr/bin/env python3
import requests
import json
def chat_with_ollama(prompt, model="llama3"):
url = "http://localhost:11434/api/generate"
payload = {
"model": model,
"prompt": prompt,
"stream": False
}
response = requests.post(url, json=payload)
data = response.json()
return data.get("response", "No response")
if __name__ == "__main__":
user_input = input("You: ")
response = chat_with_ollama(user_input)
print(f"Ollama: {response}")
用法:
python3 chat.py You: How do I configure a firewall on Linux? Ollama: To configure a firewall on Linux...
安全考虑
⚠️关键:默认情况下,Ollama仅在localhost:11434上监听,这意味着只有同一服务器上的进程才能访问它。这是安全的,适合本地使用。
永远不要在没有额外安全层的情况下将端口11434暴露给公网。这样做会暴露您的服务器于以下风险:
- 资源盗用:任何人都可以使用您的CPU/GPU来运行他们自己的提示,花费您的电费和计算周期。
- 数据泄露:提示和响应通过未加密的HTTP传输(如果没有HTTPS反向代理),有被拦截的风险。
- 无身份验证:Ollama没有内置的用户身份验证或速率限制。
如果需要将Ollama暴露给其他服务器,请使用带有身份验证的HTTPS反向代理(如Nginx):
server {
listen 443 ssl http2;
server_name ollama.example.com;
ssl_certificate /etc/ssl/certs/your-cert.crt;
ssl_certificate_key /etc/ssl/private/your-key.key;
auth_basic "Ollama API";
auth_basic_user_file /etc/nginx/.ollama_auth;
location / {
proxy_pass http://localhost:11434;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
}
}
这种方法:1)从互联网上关闭端口11434,2)打开端口443(HTTPS),带有SSL证书,3)添加HTTP基本身份验证,使只有授权用户才能访问API。
将Ollama作为持久服务运行
安装脚本已经为Ollama创建了systemd单元。以下是如何管理它:
- 查看systemd单元文件:
cat /etc/systemd/system/ollama.service
您应该看到类似的内容:
[Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/bin/ollama serve User=ollama Group=ollama Restart=on-failure RestartSec=5s StandardOutput=journal StandardError=journal [Install] WantedBy=default.target
- 启用Ollama在启动时自动启动:
systemctl enable ollama
- 重启Ollama服务:
systemctl restart ollama
- 实时监控日志:
journalctl -u ollama -f
-f标志流式传输日志。
总结
Ollama极大地简化了在自己的基础设施上运行开源LLM。您不需要昂贵的GPU(尽管它们有帮助)或依赖第三方API。
关键要点:
- 在典型的CPU VPS上使用7B-8B参数量化(Q4)模型。
- 提供至少8-16 GB的RAM。
- 如果暴露给互联网,请使用反向代理保护API。
- 通过官方脚本安装,并使用systemd进行连续运行。
- 从较小的模型(Phi-3、Mistral)开始,根据需要扩展。
常见问题 (FAQ)
我应该使用Ollama还是LM Studio或其他工具?
Ollama配有内置REST API服务器,使自动化变得直接,并拥有大型模型库。LM Studio更适合基于GUI的桌面使用。对于VPS,Ollama是更好的选择。
哪个模型在CPU上最快?
Phi-3(3.8B)最快,其次是Mistral 7B。Llama 3 7B稍微慢一些但仍然可用。对于70B模型,您绝对需要GPU。
我能同时运行多个模型吗?
您可以,但Ollama将模型顺序加载到RAM中。同时运行多个大型模型会快速耗尽RAM。模型切换控制器对生产来说是更好的方法。
我需要什么VPS规格?
至少16 GB RAM和4-8个vCPU是理想的,成本约为$10-30/月。虽然8 GB可能可行,但16 GB在可负担性和性能之间提供了很好的平衡。
立即开始使用 AsiaGB VPS
AsiaGB VPS 全系列采用 SSD 存储,可选择泰国或新加坡数据中心,并提供完整的 Root 权限,Linux 系统每月低至 500 泰铢起,由泰语技术团队提供支持。
查看 VPS 套餐