클라우드/AWS
[AWS Bedrock] Multi-Region LLM을 이용하여 Token 허용량 늘리기(1/2)
잡뿌
2025. 6. 1. 23:17
반응형
Multi-Region LLM을 이용하여 Token 허용량 늘리기
Multi-Region LLM: AWS는 전 세계 여러 리전(데이터 센터)에 서비스를 제공합니다. Multi-Region LLM은 말 그대로 여러 AWS
리전에 LLM 엔드포인트를 배포하는 전략입니다. 이는 다음과 같은 이점을 제공합니다.
1) 지연 시간 단축: 사용자와 가까운 리전에서 응답하여 챗봇의 반응 속도를 높입니다.
2) 고가용성: 특정 리전에 문제가 생겨도 다른 리전으로 트래픽을 전환하여 서비스 중단 없이 챗봇을 운영할 수 있습니다.
3) 로드 밸런싱: 특정 리전에 부하가 집중될 경우, 다른 리전으로 분산하여 안정적인 서비스를 유지합니다.
Python으로 경험하는 Multi-Region LLM 호출 시나리오
Multi-Region LLM이 어떻게 동작하는지 파이썬 코드로 간략하게 시뮬레이션 해봅시다. 이 코드는 여러 AWS 리전에 배포된 LLM 엔드포인트 중 사용 가능한 곳을 찾아 호출하는 간단한 예시입니다.
import boto3
from botocore.exceptions import ClientError
import json
import time
def call_llm_in_region(prompt: str, region_name: str) -> str | None:
"""
지정된 AWS 리전에서 Amazon Bedrock의 LLM을 호출합니다.
"""
try:
bedrock_runtime = boto3.client(
service_name='bedrock-runtime',
region_name=region_name
)
# 예시: Anthropic Claude v2 모델 사용
# 실제 모델 ID는 AWS Bedrock 콘솔에서 확인 및 변경 가능합니다.
model_id = "anthropic.claude-v2"
body = json.dumps({
"prompt": f"\n\nHuman: {prompt}\n\nAssistant:",
"max_tokens_to_sample": 200,
"temperature": 0.7,
"top_p": 1,
"stop_sequences": ["\n\nHuman:"],
})
response = bedrock_runtime.invoke_model(
body=body,
modelId=model_id,
accept="application/json",
contentType="application/json"
)
response_body = json.loads(response.get("body").read())
return response_body.get("completion")
except ClientError as e:
print(f"⚠️ Error calling LLM in {region_name}: {e}")
return None
def call_multi_region_llm(prompt: str, preferred_regions: list[str]) -> str:
"""
지정된 우선순위에 따라 여러 리전에서 LLM을 호출합니다.
"""
print(f"사용자 질문: \"{prompt}\"")
for region in preferred_regions:
print(f"➡️ {region} 리전에서 LLM 호출 시도 중...")
start_time = time.time()
response = call_llm_in_region(prompt, region)
end_time = time.time()
if response:
print(f"✅ {region} 리전에서 {end_time - start_time:.2f}초 만에 응답 성공!")
return response
else:
print(f"❌ {region} 리전에서 응답 실패. 다음 리전으로 전환합니다...")
print("🚨 모든 선호 리전에서 응답을 받지 못했습니다.")
return "죄송합니다. 현재 요청을 처리할 수 없습니다. 잠시 후 다시 시도해 주세요."
# --- 시나리오 실행 예시 ---
user_query = "AWS 클라우드 컴퓨팅의 주요 이점은 무엇인가요?"
# 선호하는 리전을 우선순위대로 나열 (예: 서울, 버지니아 북부, 오하이오)
# 실제 환경에서는 사용자 위치나 트래픽 상황에 따라 동적으로 결정될 수 있습니다.
regions_to_try = ["ap-northeast-2", "us-east-1", "us-west-2"] # 서울, 버지니아 북부, 오레곤
llm_answer = call_multi_region_llm(user_query, regions_to_try)
print("\n--- LLM 최종 응답 ---")
print(llm_answer)
이 코드는 preferred_regions 리스트에 정의된 순서대로 각 리전의 LLM을 호출합니다. 만약 첫 번째 리전에서 응답을 받지 못하면 다음 리전으로 자동으로 전환하여 재시도하죠. 이렇게 하면 한 리전에 문제가 생겨도 서비스 연속성을 유지할 수 있습니다.
반응형