在 OCI 容器实例上运行 Ollama:5 分钟构建私有 LLM API,无需 Kubernetes

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

对于许多企业开发团队而言,拥有一个私有的大语言模型 (LLM) 接口已成为刚需。无论是出于数据合规性、隐私保护,还是为了处理核心业务逻辑,将敏感代码或数据发送到公有云 API 往往面临巨大的合规风险。然而,传统的私有化方案通常涉及管理复杂的 Kubernetes 集群 (如 OKE),这对于中小型团队或单个项目组来说,运维成本过于高昂。

本教程将介绍一种“轻量级”的替代方案:在 Oracle Cloud Infrastructure (OCI) Container Instances (容器实例) 上运行 Ollama。这种方案可以在 5 分钟内为你提供一个受 GPU 加速、兼容 OpenAI 接口的私有 LLM 环境,且完全无需触碰 Kubernetes。虽然像 n1n.ai 这样的平台提供了极其便捷的多模型聚合访问,但在某些必须完全物理隔离的场景下,在自己的租户内构建环境是唯一的选择。

为什么选择 OCI 容器实例运行 Ollama?

Ollama 因其极简的设计而成为本地 LLM 编排的首选工具。它将模型管理、硬件加速驱动和 API 服务器封装在一起。结合 OCI 的容器实例服务,你可以获得以下优势:

  1. 零 Kubernetes 运维:无需管理 Master 节点、节点池或编写复杂的 YAML 文件。你只需按容器使用的资源付费。
  2. 原生 GPU 支持:OCI 允许将 NVIDIA A10 GPU 直接分配给容器实例,提供 24GB 的显存 (VRAM),足以流畅运行 Llama 3.1 8B 或 Mistral 等主流模型。
  3. OpenAI 协议兼容:Ollama 原生支持 /v1/chat/completions 路径,这意味着你可以直接替换现有代码中的 OpenAI 基础 URL,无需重构代码。
  4. 网络安全性:部署在私有子网中,确保模型接口仅能通过内部 VCN、VPN 或专线访问,彻底杜绝公网泄露风险。

部署前的准备工作

在开始之前,请确保你具备以下条件:

  • 一个具有 GPU 配额的 OCI 账号 (推荐 CI.Standard.GPU.A10.1)。
  • 已配置好的 OCI CLI 命令行工具。
  • 一个现有的 VCN 和私有子网。

第一步:创建容器实例

我们将通过 OCI CLI 创建一个运行最新版 Ollama 镜像的实例。我们选择了 A10 GPU 形状,它拥有 15 个 OCPU 和 240GB 内存,性能非常强劲。

oci container-instances container-instance create \
  --compartment-id $COMPARTMENT_ID \
  --availability-domain "Uocm:US-ASHBURN-AD-1" \
  --display-name "team-private-ollama" \
  --shape "CI.Standard.GPU.A10.1" \
  --shape-config '{"ocpus": 15, "memoryInGBs": 240}' \
  --containers '[{
    "imageUrl": "docker.io/ollama/ollama:latest",
    "displayName": "ollama-core",
    "resourceConfig": {
      "vcpusLimit": 15,
      "memoryLimitInGBs": 240
    },
    "environmentVariables": {
      "OLLAMA_HOST": "0.0.0.0"
    },
    "healthChecks": [{
      "healthCheckType": "HTTP",
      "port": 11434,
      "path": "/",
      "intervalInSeconds": 30
    }]
  }]' \
  --vnics '[{
    "subnetId": "'$PRIVATE_SUBNET_ID'",
    "isPublicIpAssigned": false
  }]'

技术要点:必须将环境变量 OLLAMA_HOST 设置为 0.0.0.0。默认情况下,Ollama 仅监听 127.0.0.1,这会导致容器外部无法访问 API。在 n1n.ai 的架构设计中,这种网络可达性也是多模型调度的基础。

第二步:模型持久化与加载

OCI 容器实例在删除后是不可持续的,但其内部存储在重启期间会保留。为了避免每次启动都重新下载数 GB 的模型文件,建议挂载 OCI Block Volume 或 File Storage (FSS)。

对于追求极致简单的情况,可以使用 EMPTYDIR 卷,它在容器实例生命周期内有效:

# 在创建命令中加入卷配置
--volumes '[{
    "name": "ollama-data",
    "volumeType": "EMPTYDIR",
    "backingStore": "EPHEMERAL_STORAGE"
}]'

部署完成后,通过内网机器调用 API 下载模型:

# 假设容器私有 IP 为 10.0.1.50
curl http://10.0.1.50:11434/api/pull -d '{"name": "llama3.1:8b"}'

第三步:性能分析与成本对比

在决定是自建还是使用 n1n.ai 这样的聚合器时,成本是一个关键因素。以下是不同方案的对比:

维度OCI 容器实例 (A10)OpenAI 公有云n1n.ai 聚合 API
月度成本约 $1,094 (固定)按 Token 计费按 Token 计费 (更具竞争力)
隐私性绝对私有 (内网)第三方处理多供应商隐私保护
响应速度极快 (< 50ms)受网络波动影响节点优化加速
维护成本

专业建议:如果你的团队每天有数千次推理请求,固定成本的 OCI 实例非常划算。但如果你需要频繁在 DeepSeek-V3、Claude 3.5 和 GPT-4 之间切换,n1n.ai 提供的单一 API 接口将为你节省大量的部署和维护时间。

第四步:自动化运维脚本

为了确保容器在意外重启后能自动恢复服务,我们可以编写一个简单的“预热”脚本。该脚本会检查模型是否存在,如果不存在则自动触发下载:

#!/bin/bash
# ollama-warmup.sh
OLLAMA_IP=$1
TARGET_MODEL="llama3.1:8b"

# 等待 API 就绪
while ! curl -s http://$OLLAMA_IP:11434/ > /dev/null; do
  echo "正在等待 Ollama 服务启动..."
  sleep 2
done

# 检查模型是否已下载
CHECK=$(curl -s http://$OLLAMA_IP:11434/api/tags | grep "$TARGET_MODEL")

if [ -z "$CHECK" ]; then
  echo "模型未找到,开始下载 $TARGET_MODEL..."
  curl -X POST http://$OLLAMA_IP:11434/api/pull -d "{\"name\":\"$TARGET_MODEL\"}"
else
  echo "模型 $TARGET_MODEL 已就绪。"
fi

进阶:引入 OCI API 网关

虽然直接访问私有 IP 很方便,但在企业环境中,建议在 Ollama 前端部署一个 OCI API Gateway。这可以带来以下增强:

  • 身份验证:通过 API Key 或 OAuth2 保护你的模型,防止内网滥用。
  • 流量控制:限制每个部门的每分钟请求数 (RPM),保证核心业务的可用性。
  • 请求审计:记录所有请求的 Meta Data,便于后续的合规性审计。

总结

通过 OCI 容器实例部署 Ollama,是目前在 Oracle Cloud 上构建私有 LLM 接口最快、最简便的方法。它规避了 Kubernetes 的复杂性,同时充分利用了 A10 GPU 的硬件性能。对于那些对数据隐私有极端要求,但又不想陷入运维泥潭的开发团队来说,这是一个完美的平衡点。

当然,如果你希望以更低的成本体验全球顶尖的模型,或者需要一个更稳定的生产级聚合网关,n1n.ai 始终是你的最佳伙伴。我们通过先进的调度算法,确保你在任何时候都能以最优的价格获取最强的 AI 能力。

立即在 n1n.ai 获取免费 API 密钥。