在 Ampere A2 集群上运行量化的 GGUF 大语言模型

由于缺乏计算基础设施,区域 AI 的鸿沟越来越大。大多数现代大型语言模型 (LLM) 需要大量专门的高性能 GPU 来有效训练。由于每台服务器可能具有六位数的价格,并且全球供应链面临压力,因此许多服务器仍无法访问这些基本资源。在探索解决不断增长的人工智能鸿沟的解决方案的同时,出现了 GPU 瓶颈的一个有希望的替代方案 - 卓越的 Ampere A2 处理器。出于对这一潜力的兴趣,我们设计了一个完全基于 Ampere A2 集群的 LLM 实现。结果非常出色。虽然与尖端 GPU 阵列的原始功率不匹配,但这些系统可以成功为实际的检索增强生成 (RAG) 应用程序提供动力,只需每小时一分钱。

体系结构

这种基于 Arm 的架构提供了具有卓越价值的 LLM 实施,其运行成本仅为传统 AI 基础设施成本的一小部分。使用此架构可以采用预算友好的方法来开始使用 AI。

OCI 公共负载平衡器位于前面,将传入流量分配给一个计算实例池。存在 Ampere A2 节点的实例池。每个节点都是一个运行 Ubuntu 的基于 Arm 的 2 核计算实例。这些节点在 OCI 实例池中进行管理,随着流量增长,您可以轻松横向扩展。通过互联网网关,可以在需要时对负载平衡器和后端实例进行公共访问。

Each Ampere A2 compute instance runs Ubuntu 22.04 (Arm), a quantized GPT-Generated Unified Format (GGUF) LLM (like TinyLlama or Phi-2) served locally using llama.cpp, a simple HTML/JS landing page served via NGINX, and a Python-based backend wired into llama-cpp-python that handles prompts from the UI and streams model output back to the page.

池中的每个计算节点都设计为轻量级但完全自给自足。启动时,它会使用 cloud-init 脚本启动自身,该脚本安装并运行从头开始为 LLM 服务所需的一切。节点配置如下:

  • 安装依赖项:将自动安装诸如 build-essential、cmake、git、NGINX 和 python3-pip 之类的依赖项。从源编译 llama-cpp-python 以确保完全 ARM64 兼容。
  • 构建:节点从 GitHub 中提取最新版本的 llama.cpp,并使用 OpenBLAS 构建它以优化 CPU 推断,同时将所有内容保留在本地 - 不依赖于 GPU 或推断 API 的外部运行时依赖性。
  • 下载模型:量化的 GGUF 模型(TinyLlama 或类似模型)直接从 Hugging Face 获取并放置在 models 目录中。
  • 服务登录页面:通过 NGINX 在端口 80 上提供最小的 HTML/JavaScript UI。通过 UI,用户可以提交提示并直接从浏览器查看 LLM 响应。
  • 通过 Python 处理推理:一个小型 Python 后端使用 llama-cpp-python 与本地模型进行交互。它公开一个 /generate 端点,当用户提交问题时,登录页面会向该端点发送 POST 请求。
  • 启动时开始:所有内容都包在 systemd 服务中,因此推断会在实例重新引导或失败时自动重新启动 - 无需手动触摸。

下图说明了此参考体系结构。



gen-ai-ampere-gguf-llm-arch.zip

该体系结构包含以下组件:

  • 区域

    OCI 区域是一个本地化的地理区域,其中包含一个或多个托管可用性域的数据中心。区域独立于其他区域,并且很远的距离可以将它们分开(跨越国家甚至大洲)。

  • 可用性域

    可用性域是区域中独立的数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,从而提供容错能力。可用性域不共用基础设施(例如电源或冷却设备)或内部可用性域网络。因此,一个可用性域出现故障不会影响该区域中的其他可用性域。

  • 容错域

    容错域是可用性域内的一组硬件和基础设施。每个可用性域都具有三个具有独立电源和硬件的容错域。在多个容错域之间分配资源时,您的应用可以容忍容错域内的物理服务器故障、系统维护和电源故障。

  • 虚拟云技术网络 (VCN) 和子网

    VCN 是您可以在 OCI 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您控制网络环境。一个 VCN 可以具有多个不重叠的无类域间路由 (classless inter-domain routing,CIDR) 块,在创建 VCN 后可以更改这些块。您可以将 VCN 细分为多个子网,这些子网可以限定为某个区域或某个可用性域。每个子网由一系列不与 VCN 中的其他子网重叠的连续地址组成。您可以在创建子网后更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • 负载平衡器

    Oracle Cloud Infrastructure Load Balancing 提供从单个入口点到多个服务器的自动流量分配。

  • Internet 网关

    互联网网关允许 VCN 中的公共子网与公共互联网之间的流量。

  • 实例池

    实例池是区域中的一组实例,这些实例是根据相同实例配置创建并作为组进行管理的。

注意事项

在实施此体系结构之前,请考虑以下事项。

  • Ampere A2 计算实例成本

    每个节点运行 Ampere A2,具有 2 个 OCPU 和 16GB RAM。OCPU 目前的定价为每 OCPU/每小时 0.01 美元。每月成本达到 $14.40,始终打开 1 个节点。

  • 负载平衡器成本

    公共负载平衡器(小型配置)的定价目前约为每小时 0.029 美元。每月费用约为 21 美元。您可以通过在其他 Ampere 实例上设置定制负载平衡器来进一步降低成本。

  • 存储费用

    每个节点存储 OS、llama.cpp 和大约 5-6GB 的型号。默认引导卷约为 50GB。请注意,每月前 200GB 是免费的。

了解更多

详细了解如何在 Oracle Cloud Infrastructure 的 Ampere A2 集群上运行 GGUF LLM。

查看以下其他资源:

确认

  • 作者Badr Tharwat