Ampere A2 클러스터에서 정량화된 GGUF 대형 언어 모델 실행
구조
이 Arm 기반 아키텍처는 기존 AI 인프라 비용의 일부만으로 탁월한 가치의 LLM 구현을 제공합니다. 이 아키텍처는 AI를 시작하기 위한 예산 친화적인 접근 방식을 제공합니다.
OCI 공용 로드 밸런서는 유입 트래픽을 컴퓨트 인스턴스 풀로 분산하여 맨 앞에 있습니다. Ampere A2 노드의 인스턴스 풀이 있습니다. 각 노드는 Ubuntu를 실행하는 2코어 Arm 기반 컴퓨트 인스턴스입니다. 노드는 OCI 인스턴스 풀에서 관리되므로 트래픽이 증가함에 따라 수평적으로 쉽게 확장할 수 있습니다. 인터넷 게이트웨이는 필요할 때 로드 밸런서 및 백엔드 인스턴스에 모두 퍼블릭 액세스를 제공합니다.
각 Ampere A2 컴퓨트 인스턴스는 Ubuntu 22.04(Arm), llama.cpp를 사용하여 로컬에서 제공되는 정량화된 GPT 생성 통합 형식(GGUF) LLM(예: TinyLlama 또는 Phi-2), NGINX를 통해 제공되는 간단한 HTML/JS 랜딩 페이지, UI의 프롬프트를 처리하고 모델 출력을 페이지로 다시 스트리밍하는 llama-cpp-python에 유선된 Python 기반 백엔드를 실행합니다.
풀의 각 컴퓨트 노드는 경량이지만 완전히 자급자족하도록 설계되었습니다. 실행 시 LLM을 처음부터 제공하는 데 필요한 모든 것을 설치하고 실행하는 cloud-init 스크립트를 사용하여 자체 부트스트랩됩니다. 노드는 다음과 같이 구성됩니다.
- 종속성 설치: build-essential, cmake, git, NGINX 및 python3-pip과 같은 종속성이 자동으로 설치됩니다. llama-cpp-python은 완전한 ARM64 호환성을 보장하기 위해 소스에서 컴파일됩니다.
- 빌드: 노드는 GitHub에서 최신 버전의 llama.cpp를 가져오고, 최적화된 CPU 추론을 위해 OpenBLAS를 사용하여 빌드하며, 모든 것을 로컬로 유지하면서 GPU 또는 추론 API에 대한 외부 런타임 종속성을 유지합니다.
- 모델 다운로드: 정량화된 GGUF 모델(TinyLlama 또는 이와 유사한 모델)이 Hugging Face에서 직접 인출되어
models
디렉토리에 배치됩니다. - 랜딩 페이지 서비스: 포트 80에서 NGINX를 통해 최소한의 HTML/JavaScript UI가 제공됩니다. UI를 통해 사용자는 프롬프트를 제출하고 브라우저에서 직접 LLM 응답을 볼 수 있습니다.
- Python을 통한 추론 처리: 작은 Python 백엔드는 llama-cpp-python을 사용하여 로컬 모델과 상호 작용합니다. 사용자가 질문을 제출할 때 랜딩 페이지가 POST 요청을 전송하는
/generate
엔드포인트를 노출합니다. - 부트 시 시작: 모든 항목이
systemd
서비스에 래핑되므로 인스턴스 재부트 또는 실패 시 추론이 자동으로 재시작되므로 수동으로 터치할 필요가 없습니다.
다음 다이어그램은 이 참조 구조를 보여줍니다.
아키텍처의 구성 요소는 다음과 같습니다.
- 지역
OCI 리전은 가용성 도메인을 호스팅하는 데이터 센터가 하나 이상 포함된 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 광대한 거리는 (국가 또는 대륙에 걸쳐) 그들을 분리 할 수 있습니다.
- 가용성 도메인
가용성 도메인은 한 지역 내의 독립형 독립형 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 내결함성을 제공하는 다른 가용성 도메인의 리소스와 격리됩니다. 가용성 도메인은 전원 또는 냉각과 같은 인프라나 내부 가용성 도메인 네트워크를 공유하지 않습니다. 따라서 한 가용성 도메인의 장애가 해당 지역의 다른 가용성 도메인에 영향을 미치지 않아야 합니다.
- 결함 도메인
장애 도메인은 가용성 도메인 내의 하드웨어 및 인프라 그룹을 의미합니다. 각 가용성 도메인에는 3개의 장애 도메인과 독립적인 전원 및 하드웨어가 있습니다. 여러 결함 도메인에 리소스를 분산할 때 응용 프로그램은 결함 도메인 내에서 물리적 서버 실패, 시스템 유지 관리 및 정전이 발생할 수 있습니다.
- VCN(가상 클라우드 네트워크에 연결) 및 서브넷
VCN은 OCI 리전에 설정하는 커스터마이징 가능한 소프트웨어 정의 네트워크입니다. 기존 데이터 센터 네트워크와 마찬가지로 VCN을 사용하면 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN을 생성한 후 변경할 수 있는 겹치지 않는 CIDR(클래스리스 도메인 간 경로 지정) 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있으며, 이 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 썸네일의 크기는 생성 이후 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.
- 로드 밸런서
Oracle Cloud Infrastructure Load Balancing은 단일 시작점에서 여러 서버로의 자동 트래픽 분산을 제공합니다.
- 인터넷 게이트웨이
인터넷 게이트웨이는 VCN의 공용 서브넷과 공용 인터넷 간의 트래픽을 허용합니다.
- 인스턴스 풀
인스턴스 풀은 동일한 인스턴스 구성에서 생성되고 그룹으로 관리되는 영역 내 인스턴스 그룹입니다.
고려사항
이 구조를 구현하기 전에 다음 사항을 고려하십시오.
- Ampere A2 컴퓨트 인스턴스 비용
각 노드는 OCPU 2개와 RAM 16GB로 Ampere A2를 실행합니다. 이 OCPU의 가격은 현재 시간당 OCPU당 $0.01입니다. 월간 비용은 1 노드가 항상 켜져있는 $ 14.40까지 작동합니다.
- 로드 밸런서 비용
공용 로드 밸런서(작은 구성)의 가격은 현재 시간당 약 $0.029입니다. 월 비용은 약 21 달러에 달합니다. 다른 Ampere 인스턴스에 커스터마이징 로드 밸런서를 설정하여 비용을 추가로 절감할 수 있습니다.
- 스토리지 원가
각 노드는 OS, llama.cpp 및 약 5-6GB의 모델을 저장합니다. 기본 부트 볼륨은 약 50GB입니다. 매월 처음 200GB는 무료입니다.