Articleaws.amazon.com·2026년 10월 12일·0

Deploy decision models with llama.cpp on Amazon SageMaker AI

Quick Summary

Amazon SageMaker AI에서 AWS DLC for llama.cpp로 양자화 모델의 채팅 응답을 제공하고, SemIf 확장으로 사전에 지정한 선택지의 확률을 반환하는 의사결정 모델을 CPU 또는 GPU에 배포할 수 있다.

Deploy decision models with llama.cpp on Amazon SageMaker AI 관련 대표 이미지

🖼️ 인포그래픽

Deploy decision models with llama.cpp on Amazon SageMaker AI 내용을 설명하는 본문 이미지

🖼️ 4컷 인포그래픽

Deploy decision models with llama.cpp on Amazon SageMaker AI의 핵심 내용을 4단계로 요약한 인포그래픽
Deploy decision models with llama.cpp on Amazon SageMaker AI 핵심 내용을 4단계로 압축한 4컷 인포그래픽

💡 한 줄 요약

Amazon SageMaker AI에서 AWS DLC for llama.cpp로 양자화 모델의 채팅 응답을 제공하고, SemIf 확장으로 사전에 지정한 선택지의 확률을 반환하는 의사결정 모델을 CPU 또는 GPU에 배포할 수 있다.

📌 핵심 요약

  • 표준 경로는 Amazon S3의 model.tar.gz와 AWS DLC for llama.cpp를 사용해 SageMaker AI InvokeEndpoint로 OpenAI 호환 채팅 응답을 제공한다. SemIf 경로는 직접적인 logits·상태 접근을 위해 AWS CodeBuild로 자식 이미지를 만들고 Amazon ECR에 저장하며, 답변 토큰을 생성하지 않고 지정된 선택지의 확률을 반환한다.
  • SemIf 요청은 ID, 비정형 상태, 질문, 순서가 있는 선택지 목록으로 구성되며, 응답은 같은 순서의 option_ids·probabilities·option_logits 등을 포함한다. 요청 라우팅, 정책 결과 판정, 에이전트 행동 선택 등에 활용할 수 있지만, 권한 부여와 결정론적 업무 규칙은 모델 밖에 두고 확률의 신뢰도를 검증해야 한다.
  • SemIf 확장에서 Qwen3.5-4B Q4_K_M으로 JevBench 공개 과제 231개를 순차 실행한 결과, CPU ml.c6i.8xlarge·32스레드는 정확도 77.5%, 클라이언트 p50 1.715초·p95 19.291초였고, GPU ml.g6e.xlarge·전체 GPU 오프로딩은 정확도 77.9%, p50 0.352초·p95 0.599초였다. GPU는 p50에서 4.9배, p95에서 32.2배 빨랐지만, 한 문제의 정확도 차이는 모델 품질 향상의 증거가 아니라 런타임 변동으로 해석해야 한다.
  • 2B와 0.8B 후보는 중앙 지연시간을 줄였지만 정확도가 각각 66.7%와 58.4%여서 예제는 품질을 우선해 4B Q4_K_M을 기본값으로 유지한다. CPU는 지연시간에 민감하지 않은 작업, GPU는 대화형 의사결정·긴 프롬프트·엄격한 꼬리 지연시간 목표에 권장되며, 실제 애플리케이션의 라벨이 있는 의사결정으로 모델과 인프라 전체 구성을 평가해야 한다. 측정값은 네트워크 지연을 포함하며 서비스 보장이 아니다.
  • 배포 예제는 모델의 소스 리비전과 체크섬을 model-manifest.json에 기록하고 검증된 GGUF 체크섬과 다르면 빌드를 중단한다. 표준 경로에는 SageMaker AI용 이미지를 사용하고, SemIf 배포에는 변경 불가능한 이미지 digest를 사용하며 가변 태그는 거부한다. 제공된 원문은 SemIf CPU 엔드포인트 배포 명령 중간에서 끝나므로 이후 절차는 확인할 수 없다.

🧩 주요 포인트

  1. 채팅 응답과 선택지 확률은 필요한 인터페이스가 다름 → OpenAI 호환 채팅은 표준 DLC 경로로, 직접적인 logits·상태 접근이 필요한 SemIf는 자식 이미지 경로로 배포한다.
  2. GPU의 지연시간 개선과 작은 모델의 정확도 하락이 함께 관측됨 → 응답 속도와 모델 품질을 분리해 평가하고, 실제 의사결정에 맞춰 CPU·GPU 및 모델 크기를 선택한다.
  3. 확률 검증, 모델 체크섬, 이미지 digest가 운영 판단과 배포에 제약을 제공함 → 업무 규칙은 모델 밖에서 적용하고 검증된 모델·이미지 구성을 기준으로 배포한다.

🧠 상세 정리

1. 동일한 모델에서 갈라지는 두 배포 경로

요청 라우팅, 에이전트 행동 선택, 정책 결과 배정 같은 애플리케이션은 자유 형식의 문장보다 정해진 선택지에 대한 점수가 필요한 경우가 있다. 원문은 llama.cpp와 Amazon SageMaker AI를 결합해 양자화 모델을 CPU 또는 GPU에서 제공하는 관리형 배포 경로를 설명하며, 특화된 생성형 AI 추론용 AWS Deep Learning Containers 시리즈의 후속 글로 소개된다. 동일하게 패키징한 모델을 사용하는 표준 경로는 AWS DLC for llama.cpp에서 OpenAI 호환 채팅 응답을 생성하고, 구조화된 의사결정 경로는 기존 서버를 SemIf 어댑터로 교체한 자식 이미지에서 선택지별 확률을 반환한다. SemIf는 이전에 OpenJev라는 이름을 사용했으며, 답변 토큰을 디코딩하지 않고 선언된 선택지를 평가한다. llama-server의 HTTP API가 SemIf에 필요한 마지막 위치의 logits와 상태 연산을 노출하지 않기 때문에, 확장 경로는 AWS CodeBuild와 Amazon ECR을 사용하면서 DLC에 포함된 CPU 또는 CUDA 라이브러리를 유지한다.

2. 채팅 스키마와 구조화된 의사결정 스키마

표준 AWS DLC for llama.cpp는 role과 content를 담은 messages 배열 및 max_tokens, stream 같은 생성 제어값을 받는 OpenAI Chat Completions 스키마를 사용한다. 응답은 OpenAI 호환 choices 배열로 반환되며, 생성된 문장은 choices[0].message.content에서 읽는다. SemIf는 이와 달리 호출자가 지정한 ID, 비정형 상태, 질문, 허용된 선택지의 순서 있는 목록을 decision 객체에 담고, 예제에서는 비밀번호 재설정 이메일을 받지 못한 고객을 account_access 또는 billing으로 분류한다. 응답에는 입력 순서를 유지하는 option_ids, probabilities, 원시 option_logits와 함께 프롬프트, 처리 시간, 고정된 모델 메타데이터가 포함된다. 안정적인 선택지 ID를 사용하면 생성 문장을 해석하지 않고 임계값, 대체 처리, 정책 검사를 적용할 수 있으며, 원문은 관련 구현으로 Jev와 TypeSafe의 /v1/systemone API, TypeSafe API 호환 서버 Kev, 보정된 출력을 제공하는 Strands Decider 2B도 소개한다.

3. 적합한 업무와 모델 판단의 경계

이 패턴은 애플리케이션이 요청 시점에 허용되는 선택지를 정의하고, 모델이 비정형 맥락을 해석해야 하는 경우에 적합하다. 원문은 사례를 지원 큐로 보내기, 알려진 집합에서 값 하나 추출하기, 사고 우선순위 지정하기, 정책 결과 확인하기, 에이전트 행동 선택하기를 대표적인 용도로 제시한다. 다만 권한 부여와 결정론적 업무 규칙은 모델 외부에 유지해야 하며, 반환된 확률을 운영상의 신뢰도로 취급하기 전에 검증해야 한다. OpenAI 호환 채팅 응답만 필요하면 InvokeEndpoint와 표준 이미지의 /invocations 매핑을 사용하고, 직접적인 logits 및 상태 접근처럼 기존 인터페이스에 없는 기능이 필요할 때 자식 이미지를 만든다. 답변 토큰 생성을 생략해도 모델은 전체 상태, 질문, 선택지 설명을 처리하므로 추론 자체가 사라지는 것은 아니며, 운영 적용 전에 프롬프트를 집중시키고 애플리케이션의 라벨이 있는 의사결정으로 선택한 모델을 평가해야 한다.

4. CPU·GPU 비교 결과와 해석상의 제한

벤치마크는 텍스트 생성 엔드포인트가 아닌 SemIf 확장을 대상으로 하며, 동일한 JevBench 공개 과제 231개를 CPU 엔드포인트 하나와 GPU 엔드포인트 하나에 순차적으로 전송했다. Qwen3.5-4B Q4_K_M을 ml.c6i.8xlarge에서 32스레드로 실행한 CPU 구성은 유효 응답 231/231, 정답 179/231인 77.5%, 클라이언트 p50 1.715초와 p95 19.291초를 기록했다. 같은 모델을 ml.g6e.xlarge에서 전체 GPU 오프로딩으로 실행한 GPU 구성은 유효 응답 231/231, 정답 180/231인 77.9%, p50 0.352초와 p95 0.599초로, CPU 대비 각각 4.9배와 32.2배 빨랐다. GPU 인스턴스 풀의 우선순위는 g6e, g6, g5, g4dn이었고 실제로 ml.g6e.xlarge가 선택됐으며, 시작 로그는 NVIDIA L40S에 모델의 34개 레이어 전체가 오프로딩됐음을 확인했다. CPU와 GPU 이미지는 서로 다른 llama.cpp 빌드를 사용했고 어려운 과제 6개에서 예측이 달랐으므로, 정답 한 개의 차이를 GPU 오프로딩이 모델 품질을 높인다는 증거로 볼 수는 없다.

5. 모델 크기, 지연시간과 동시 처리의 절충

모델 크기, 양자화, 프롬프트 길이, 런타임, CPU 스레드 수는 각 의사결정의 처리 시간에 영향을 주므로 원문은 모델과 인프라의 전체 구성을 실제 업무에 맞춰 벤치마크할 것을 권한다. 더 작은 2B와 0.8B 후보는 중앙 지연시간을 낮췄지만 정확도가 각각 66.7%와 58.4%였기 때문에, 예제는 품질을 우선하는 기본값으로 4B Q4_K_M을 유지한다. CPU는 수초의 응답 시간을 허용하는 백그라운드·오프라인·낮은 처리량 작업에 적합하고, GPU는 대화형 의사결정, 긴 프롬프트 또는 엄격한 꼬리 지연시간 목표가 있는 작업에 권장된다. 상태와 선택지 설명은 간결하게 유지하고 동일한 상태를 공유하는 의사결정은 한 요청으로 묶을 수 있는데, 공유 상태 점수 계산은 공통 프롬프트 접두부를 재사용한다. 동시 처리에는 엔드포인트 인스턴스 확장이 필요하며, 어댑터는 상태를 유지하는 llama.cpp 컨텍스트 주변에 무제한 대기열을 허용하는 대신 재시도 가능한 HTTP 503을 반환한다. 제시된 지연시간에는 네트워크 지연이 포함되고 서비스 보장값은 아니므로, 해당 측정 결과를 개별 업무의 목표와 동일시해서는 안 된다.

6. 배포 준비와 모델 아티팩트 검증

배포에는 AWS 계정, 배포 리전의 S3 버킷, Python 3.10 이상, Git, AWS CLI와 SageMaker AI가 맡을 수 있는 IAM 역할이 필요하며, 선택적인 SemIf 확장에는 용도별 CodeBuild 서비스 역할도 요구된다. SageMaker AI, Amazon ECR, Amazon S3, CodeBuild, IAM pass-role 작업과 Amazon CloudWatch Logs 권한 및 호환되는 x86 CPU 또는 NVIDIA GPU 실시간 엔드포인트의 할당량도 준비해야 한다. 원문은 엔드포인트 생성 전에 SageMaker AI 요금을 검토하도록 안내하고, 텍스트 생성 예제는 고정 CPU 인스턴스를, SemIf 확장은 CPU 기본값과 선택적인 CUDA 이미지·순서 있는 인스턴스 풀을 사용한다고 설명한다. 코드 예제는 sagemaker-genai-hosting-examples 저장소의 03-features/semif-decision-model 경로에서 가상환경과 의존성을 설치한 뒤, 리전·버킷·역할 ARN·엔드포인트 이름을 설정하는 흐름이다. prepare_model_build.py는 CodeBuild로 고정된 GGUF 모델과 토크나이저를 패키징하며, 빌드가 SUCCEEDED에 도달해야 다음 단계로 진행할 수 있고 소스 리비전과 체크섬은 model-manifest.json에 기록된다. GGUF 체크섬이 검증된 값과 다르면 빌드를 중단하므로, 배포할 모델 아티팩트의 일치 여부가 준비 과정에서 확인된다.

7. 표준 SageMaker AI 채팅 엔드포인트 배포

표준 경로는 Amazon S3에 저장한 model.tar.gz와 공개된 AWS DLC 이미지를 직접 참조하며, 컨테이너는 /opt/ml/model 아래의 첫 번째 .gguf 파일을 찾아 사용한다. POST /invocations 요청을 llama-server의 /v1/chat/completions로 연결하고 SM_LLAMA_CPP_* 환경변수를 llama.cpp 인자로 전달하므로, 별도의 Dockerfile이나 ECR 저장소 없이 채팅 엔드포인트를 구성할 수 있다. 예제는 문서에서 digest로 고정된 server-sagemaker-cpu-v1 이미지를 확인한 뒤 deploy_standard_endpoint.py로 SageMaker AI 모델, 엔드포인트 구성, 엔드포인트를 생성하며 인스턴스 유형은 ml.c6i.2xlarge로 지정한다. 이미지는 EC2용 대응 이미지가 아니라 /ping과 /invocations 컨테이너 계약을 구현하는 server-sagemaker-cpu-v1 또는 server-sagemaker-cuda-v1을 선택해야 한다. 설명된 절차는 S3 모델 아티팩트를 공급하지만 네트워크 외부 통신이 가능한 엔드포인트에서는 SM_LLAMA_CPP_HF_REPO와 SM_LLAMA_CPP_HF_FILE로 Hugging Face의 GGUF 파일을 내려받는 대안도 있다. 엔드포인트가 InService 상태가 된 후 invoke_standard_endpoint.py를 실행하면 OpenAI 호환 채팅 요청을 보낼 수 있다.

8. SemIf 자식 이미지와 제공된 배포 절차의 범위

구조화된 의사결정이 필요하면 prepare_build.py로 선택적인 SemIf 자식 이미지를 만들며, CPU 빌드는 기본 인자를 사용하고 GPU 빌드는 Dockerfile.gpu와 GPU 이미지 태그를 지정한다. 이 자식 이미지는 DLC의 컴파일된 CPU 또는 CUDA 라이브러리를 유지하면서 진입점을 SageMaker 호환 어댑터로 바꿔, 기본 llama-server HTTP API에 없는 접근 기능을 제공한다. 빌드 성공 후 Amazon ECR의 semif-llamacpp-dlc 저장소 URI와 가장 최근에 푸시된 이미지의 digest를 조회하고, 둘을 결합해 변경 불가능한 이미지 URI를 구성한다. 배포 스크립트는 가변 이미지 태그를 거부하므로 이미지 빌드 단계의 태그와 실제 배포 시 사용하는 digest를 구분해야 하며, CPU 엔드포인트 구성은 고정 인스턴스 유형을 사용한다고 설명된다. 다만 제공된 source_body는 deploy_endpoint.py 호출의 --region과 --image-uri 인자까지 제시한 상태에서 끝나므로, 이후 인자나 호출·정리 절차는 이 자료만으로 확인할 수 없다.

🧾 핵심 주장 / 시사점

  • SemIf의 핵심은 애플리케이션이 정의한 선택지를 안정적인 ID와 확률로 반환하는 인터페이스에 있다. 답변 토큰 생성은 생략하지만 전체 입력을 처리하는 모델 추론은 여전히 필요하다.
  • 이번 비교에서 GPU의 이점은 지연시간에서 크게 나타났지만 정확도 차이는 한 문제에 불과했고 llama.cpp 빌드도 달랐다. 따라서 처리 속도의 개선을 판단 품질의 개선으로 해석할 근거는 부족하다.
  • 선택지 확률을 제공하는 구조와 확률을 운영상의 신뢰도로 사용할 수 있는지는 별개의 문제다. 원문은 실제 의사결정 평가와 모델 외부의 권한·업무 규칙을 함께 요구한다.

✅ 액션 아이템

  • 애플리케이션의 라벨이 있는 의사결정으로 4B Q4_K_M과 선택한 인프라 구성을 평가하고, SemIf 확률의 신뢰도와 모델 외부의 권한·업무 규칙 적용을 검증한다.
  • 지연시간에 민감하지 않은 작업은 CPU, 대화형 의사결정·긴 프롬프트·엄격한 꼬리 지연시간 목표가 있는 작업은 GPU를 중심으로 배포 구성을 선택한다.
  • OpenAI 호환 채팅과 SemIf 선택지 확률 중 필요한 출력을 기준으로 배포 경로를 정하고, 모델 체크섬과 이미지 digest를 확인해 검증된 구성을 사용한다.

❓ 열린 질문

  • 애플리케이션에 필요한 출력은 OpenAI 호환 채팅 응답인가, SemIf가 반환하는 선택지별 확률인가?
  • 실제 의사결정에서 4B Q4_K_M의 정확도와 CPU·GPU의 지연시간이 업무 요구를 충족하는가?
  • SemIf 확률을 운영상의 신뢰도로 사용하기 위한 검증 기준과 모델 외부의 권한·업무 규칙은 무엇인가?

관련 문서

공통 태그와 주제 흐름을 기준으로 같이 보면 좋은 문서를 이어서 제안합니다.