Amazon Web Services 한국 블로그

Amazon Bedrock 정식 출시 – 개발자를 위한 파운데이션 모델 기반 생성형 AI 애플리케이션 구축 서비스

올해 4월에 AWS에서 생성형 AI를 구축할 때 사용할 수 있는 새로운 도구 세트의 일부로 Amazon Bedrock을 출시 예고 하였습니다. Amazon Bedrock은 AI21 Labs, Anthropic, Cohere, Stability AIAmazon과 같은 선도적인 AI 회사의 고성능 파운데이션 모델(FM)과 생성형 AI 애플리케이션 구축을 위한 광범위한 기능을 제공하여 개발을 간소화하는 동시에 개인 정보 보호와 보안을 유지하는 완전관리형 서비스입니다.

오늘은  Amazon Bedrock 정식 출시 소식과 함께 Meta의 Llama 2 13B 및 70B 파라미터 모델도 곧 Amazon Bedrock에서 사용할 수 있게 됨을 알려 드립니다.

Amazon Bedrock

Amazon Bedrock에는 코드 작성 없이 다양한 상용 FM을 실험하고, 미세 조정 및 검색 증강 생성(RAG)과 같은 기술로 데이터를 사용하여 비공개로 사용자 지정하며, 복잡한 비즈니스 태스크를 수행하는 관리형 에이전트를 생성하는 데 도움이 되는 포괄적인 기능이 있습니다. Amazon Bedrock용 에이전트FM을 회사의 데이터 소스에 연결하는 방법에 대해 자세히 알아보려면 이전 게시물을 확인하세요.

참고: Amazon Bedrock용 에이전트와 같은 일부 기능은 아직 평가판입니다. 아직 평가판으로만 사용할 수 있는 기능에 대한 자세한 내용은 이 블로그 게시물의 끝부분에서 공유하도록 하겠습니다.

Amazon Bedrock은 서버리스이므로 인프라를 관리할 필요가 없으며 이미 익숙한 AWS 서비스를 사용하여 생성형 AI 기능을 애플리케이션에 안전하게 통합하고 배포할 수 있습니다.

Amazon Bedrock은 Amazon CloudWatchAWS CloudTrail과 통합되어 모니터링 및 거버넌스 요구 사항을 지원합니다. CloudWatch를 사용하여 사용량 지표를 추적하고 감사 목적으로 사용자 지정된 대시보드를 구축할 수 있습니다. CloudTrail을 사용하면 다른 시스템을 생성형 AI 애플리케이션에 통합할 때 API 활동을 모니터링하고 문제를 해결할 수 있습니다. 또한 Amazon Bedrock을 사용하면 GDPR을 준수하는 애플리케이션을 구축할 수 있으며 Amazon Bedrock을 사용하여 미국 건강 보험 양도 및 책임에 관한 법률(HIPAA)로 규제되는 민감한 워크로드를 실행할 수 있습니다.

Amazon Bedrock 시작하기
Amazon Bedrock에서 사용 가능한 FM은 AWS Management Console, AWS SDK 및 오픈 소스 프레임워크(예: LangChain)를 통해 액세스할 수 있습니다.

Amazon Bedrock 콘솔에서 FM을 찾아보고 각 모델에 대한 예제 사용 사례 및 프롬프트를 탐색하고 로드할 수 있습니다. 먼저 모델에 대한 액세스를 사용하도록 설정해야 합니다. 콘솔의 왼쪽 탐색 창에서 Model access(모델 액세스)를 선택하고 액세스하려는 모델을 사용하도록 설정합니다. 모델 액세스가 설정되면 다양한 모델 및 추론 구성 설정을 시험해 보면서 사용 사례에 맞는 모델을 찾을 수 있습니다.

예를 들어 다음은 Cohere의 Command 모델을 사용한 계약 엔터티 추출 사용 사례에 대한 예제입니다.

Amazon Bedrock

이 예제에서는 샘플 응답, 예제에 대한 추론 구성 파라미터 설정, 예제를 실행하는 API 요청이 포함된 프롬프트를 보여줍니다. Open in Playground(플레이그라운드에서 열기)를 선택하면 대화형 콘솔 경험 안에서 모델 및 사용 사례를 추가로 탐색할 수 있습니다.

Amazon Bedrock은 채팅, 텍스트 및 이미지 모델 플레이그라운드를 제공합니다. 채팅 플레이그라운드에서는 대화형 채팅 인터페이스를 사용하여 다양한 FM을 실험해 볼 수 있습니다. 다음 예제에서는 Anthropic의 Claude 모델을 사용합니다.

Amazon Bedrock

서로 다른 모델을 평가할 때는 다양한 프롬프트 엔지니어링 기법과 추론 구성 파라미터를 시험해 봐야 합니다. 프롬프트 엔지니어링은 FM을 더 잘 이해하고 태스크 및 사용 사례에 적용하는 방법에 초점을 맞춘 새롭고 흥미로운 기술입니다. 효과적인 프롬프트 엔지니어링은 FM을 최대한 활용하여 적절하고 정확한 응답을 얻을 수 있는 완벽한 쿼리를 만드는 것입니다. 일반적으로 프롬프트는 단순하고 직관적이어야 하며 모호하지 않아야 합니다. 프롬프트에서 예제를 제공하거나 더 복잡한 태스크를 통해 추론하도록 모델을 장려할 수도 있습니다.

추론 구성 파라미터는 모델을 통해 생성되는 응답에 영향을 줍니다. Temperature(온도), Top P(상위 P)Top K(상위 K)와 같은 파라미터를 사용하면 무작위성 및 다양성을 제어할 수 있고 Maximum Length(최대 길이) 또는 Max Tokens(최대 토큰 수)는 모델 응답의 길이를 제어합니다. 각 모델에서는 서로 다르지만 종종 겹치는 추론 파라미터 세트가 드러난다는 점에 유의하세요. 서로 다른 모델을 시험해 볼 때 이러한 파라미터는 모델 간에 동일한 이름으로 명명되거나 추론하기에 충분히 유사한 이름으로 명명됩니다.

효과적인 프롬프트 엔지니어링 기법과 추론 구성 파라미터에 대해서는 AWS와 DeepLearning.AI가 공동으로 개발한 Generative AI with Large Language Models(대규모 언어 모델을 사용한 생성형 AI) 온디맨드 과정의 1주차에서 보다 자세히 다룹니다. Amazon Bedrock 설명서와 모델 제공자의 해당하는 설명서에서도 추가 팁을 확인할 수 있습니다.

다음으로 API를 통해 Amazon Bedrock과 상호 작용하는 방법을 살펴보겠습니다.

Amazon Bedrock API 사용
사용 사례에 맞는 FM을 선택한 다음 API를 몇 번 직접 호출하는 간단한 방법으로 Amazon Bedrock 작업을 수행할 수 있습니다. 다음 코드 예제에서는 AWS SDK for Python(Boto3)을 사용하여 Amazon Bedrock과 상호 작용합니다.

사용 가능한 파운데이션 모델 나열
먼저 boto3 클라이언트를 설정한 다음 list_foundation_models()를 사용하여 사용 가능한 FM의 최신 목록을 표시합니다.

import boto3
import json

bedrock = boto3.client(
    service_name='bedrock', 
    region='us-east-1'
)

bedrock.list_foundation_models()

Amazon Bedrock의 InvokeModel API를 사용하여 추론 실행
다음으로 Amazon Bedrock의 InvokeModel API 및 boto3 런타임 클라이언트를 사용하여 추론 요청을 수행합니다. 런타임 클라이언트는 InvokeModel API를 비롯한 데이터 영역 API를 관리합니다.

Amazon Bedrock

InvokeModel API에는 다음과 같은 파라미터가 필요합니다.

{
    "modelId": <MODEL_ID>,
    "contentType": "application/json",
    "accept": "application/json",
    "body": <BODY>
}

modelId 파라미터는 사용하고자 하는 FM을 식별합니다. 요청 body(본문)는 JSON 문자열이며 태스크에 대한 프롬프트와 추론 구성 파라미터가 포함됩니다. 참고로 프롬프트 형식은 선택한 모델 제공자 및 FM에 따라 달라집니다. contentTypeaccept 파라미터는 요청 본문과 응답에 있는 데이터의 MIME 유형을 정의하며 기본적으로 application/json으로 설정됩니다. 최신 모델, InvokeModel API 파라미터 및 프롬프트 형식에 대한 자세한 내용은 Amazon Bedrock 설명서를 참조하세요.

예제: AI21 Lab의 Jurassic-2 모델을 사용한 텍스트 생성
다음은 AI21 Lab의 Jurassic-2 Ultra 모델을 사용한 텍스트 생성의 예제입니다. 모델에게 제가 사용하는 Hello World 버전인 knock-knock 농담을 말해 달라고 요청할 예정입니다.

bedrock_runtime = boto3.client(
    service_name='bedrock-runtime', 
    region='us-east-1'
)

modelId = 'ai21.j2-ultra-v1' 
accept = 'application/json'
contentType = 'application/json'

body = json.dumps(
    {"prompt": "Knock, knock!", 
     "maxTokens": 200,
     "temperature": 0.7,
     "topP": 1,
    }
)

response = bedrock_runtime.invoke_model(
    body=body, 
	modelId=modelId, 
	accept=accept, 
	contentType=contentType
)

response_body = json.loads(response.get('body').read())

응답은 다음과 같습니다.

outputText = response_body.get('completions')[0].get('data').get('text')
print(outputText)
Who's there? 
Boo! 
Boo who? 
Don't cry, it's just a joke!

InvokeModel API를 사용하여 임베딩 모델과 상호 작용할 수도 있습니다.

예제: Amazon의 Titan 임베딩 모델을 사용한 텍스트 임베딩 생성
텍스트 임베딩 모델은 단어, 구 또는 긴 텍스트 단위와 같은 텍스트 입력을 임베딩 벡터라고 하는 숫자 표현으로 변환합니다. 벡터를 임베딩하면 고차원 벡터 공간에서 텍스트의 시멘틱 의미가 캡처되며 개인화 또는 검색과 같은 애플리케이션에 유용합니다. 다음 예제에서는 Amazon Titan 임베딩 모델을 사용하여 임베딩 벡터를 생성합니다.

prompt = "Knock-knock jokes are hilarious."

body = json.dumps({
    "inputText": prompt,
})

model_id = 'amazon.titan-embed-g1-text-02'
accept = 'application/json' 
content_type = 'application/json'

response = bedrock_runtime.invoke_model(
    body=body, 
    modelId=model_id, 
    accept=accept, 
    contentType=content_type
)

response_body = json.loads(response['body'].read())
embedding = response_body.get('embedding')

임베딩 벡터(단축형)는 다음과 비슷하게 표시됩니다.

[0.82421875, -0.6953125, -0.115722656, 0.87890625, 0.05883789, -0.020385742, 0.32421875, -0.00078201294, -0.40234375, 0.44140625, ...]

Amazon Titan 임베딩은 지금 사용이 가능합니다. 텍스트 생성을 위한 Amazon Titan Text 모델 제품군은 제한된 평가판으로 계속 제공됩니다.

Amazon Bedrock의 InvokeModelWithResponseStream API를 사용하여 추론 실행
InvokeModel API 요청은 동기식이며 모델에서 전체 출력이 생성될 때까지 기다립니다. 스트리밍 응답을 지원하는 모델의 경우 Bedrock의 InvokeModelWithResponseStream API를 사용할 수 있습니다. 이 API를 사용하면 지정된 모델을 간접 호출하고 제공된 입력을 사용하여 추론을 실행하되 모델에서 출력이 생성될 때 응답을 스트리밍할 수 있습니다.

Amazon Bedrock

스트리밍 응답은 대화형 애플리케이션에서 사용자 참여를 유지하는 반응형 채팅 인터페이스에 특히 유용합니다. 다음은 Amazon Bedrock의 InvokeModelWithResponseStream API를 사용한 Python 코드 예제입니다.

response = bedrock_runtime.invoke_model_with_response_stream(
    modelId=modelId, 
    body=body)

stream = response.get('body')
if stream:
    for event in stream:
        chunk=event.get('chunk')
        if chunk:
            print(json.loads(chunk.get('bytes').decode))

데이터 개인 정보 보호 및 네트워크 보안
Amazon Bedrock을 사용하면 데이터를 제어할 수 있습니다. 모든 입력 및 사용자 지정 내용은 비공개로 AWS 계정에 유지됩니다. 프롬프트, 완료, 미세 조정된 모델과 같은 데이터는 서비스 개선에 사용되지 않습니다. 또한 데이터는 서드 파티 모델 제공자와 절대 공유되지 않습니다.

데이터는 API 직접 호출이 처리되는 리전에 유지됩니다. 모든 데이터는 전송 중에 최소 TLS 1.2 암호화를 사용하여 암호화됩니다. 저장 데이터는 AWS KMS 관리형 데이터 암호화 키를 사용하여 AES-256으로 암호화됩니다. 자체 키(고객 관리형 키)를 사용하여 데이터를 암호화할 수도 있습니다.

Amazon VPC 엔드포인트(AWS PrivateLink에 구축됨)를 사용하도록 AWS 계정과 Virtual Private Cloud(VPC)를 구성하면 AWS 네트워크를 통해 안전하게 Amazon Bedrock에 연결할 수 있습니다. 이렇게 하면 VPC에서 실행되는 애플리케이션과 Amazon Bedrock이 안전하게 비공개로 연결됩니다.

거버넌스 및 모니터링
Amazon Bedrock을 IAM과 통합하면 Amazon Bedrock에 대한 권한을 관리하는 데 도움이 됩니다. 이러한 권한에는 Amazon Bedrock 내의 특정 모델, 플레이그라운드 또는 기능에 대한 액세스가 포함됩니다. Amazon Bedrock 활동을 포함한 모든 AWS 관리형 서비스 API 활동은 계정 내의 CloudTrail에 기록됩니다.

Amazon Bedrock은 AWS/BedRock 네임스페이스를 사용하여 데이터 포인트를 CloudWatch로 전송함으로써 InputTokenCount, OutputTokenCount, InvocationLatencyInvocations(호출 수)와 같은 일반 지표를 추적합니다. 지표를 검색할 때 모델 ID 차원을 지정하여 결과를 필터링하고 특정 모델에 대한 통계를 가져올 수 있습니다. Amazon Bedrock으로 생성형 AI 애플리케이션을 구축하기 시작할 때 이러한 실시간에 가까운 인사이트를 통해 사용량 및 비용(입력 및 출력 토큰 수)을 추적하고 성능 문제(호출 지연 시간 및 호출 수)를 해결할 수 있습니다.

청구 및 요금 모델
Amazon Bedrock을 사용할 때 염두에 두어야 할 청구 및 요금 책정 모델과 관련된 몇 가지 내용은 다음과 같습니다.

청구 – 텍스트 생성 모델은 처리된 입력 토큰 및 생성된 출력 토큰별로 요금이 청구됩니다. 텍스트 임베딩 모델은 처리된 입력 토큰별로 요금이 청구됩니다. 이미지 생성 모델은 생성된 이미지별로 요금이 청구됩니다.

요금 모델 – Amazon Bedrock은 온디맨드와 프로비저닝된 처리량이라는 2가지 요금 모델을 제공합니다. 온디맨드 요금제를 사용하면 시간을 기준으로 약정하지 않고 사용량에 따라 지불하는 방식으로 FM을 사용할 수 있습니다. 프로비저닝된 처리량은 대량의 일관된 추론 워크로드를 위해 설계되었으며 기간을 약정하는 대신 처리량이 보장됩니다. 이 요금 모델에서는 애플리케이션의 성능 요구 사항(분당 처리되는 입력 및 출력 토큰의 최대 수로 정의됨)을 충족하도록 특정 FM의 모델 단위 수를 지정합니다. 자세한 요금 정보는 Amazon Bedrock 요금을 참조하세요.

정식 출시
오늘부터 미국 동부(버지니아 북부) 및 미국 서부(오레곤) AWS 리전에서 Amazon Bedrock을 사용할 수 있습니다. 자세히 알아보려면 Amazon Bedrock으로 이동하거나, Amazon Bedrock 설명서를 확인하거나, community.aws에서 생성형 AI 공간을 살펴보거나, Amazon Bedrock 워크숍을 통해 실습에 참여해 보세요. AWS re:Post for Amazon Bedrock으로 피드백을 보내거나 일반적인 AWS 연락처를 통해 피드백을 보낼 수 있습니다.

(평가판으로 제공) Amazon Titan Text 텍스트 생성 모델 제품군, Stability AI의 Stable Diffusion XL 이미지 생성 모델 및 Amazon Bedrock용 에이전트(기술 자료 포함)는 평가판으로 계속 제공됩니다. 액세스하려면 자주 사용하는 AWS 연락처를 통해 문의하세요.

(곧 제공 예정) Meta의 Lama 2 13B 및 70B 파라미터 모델을 Amazon Bedrock의 완전관리형 API를 통해 추론 및 미세 조정에 사용할 수 있게 됩니다.

지금 바로 Amazon Bedrock으로 생성형 AI 애플리케이션을 구축해 보세요!

— Antje