오늘은 AWS에서 많이 홍보하고 있는 Bedrock 서비스에 대해 알아보고자 한다.
https://aws.amazon.com/ko/bedrock/
22년부터 시작된 GenAI의 열풍은 많은 회사들로 하여금 AI를 급격하게 발전시키도록 만든 것 같다. 요새 어딜가나 AI는 기본적으로 서비스에 들어가고 애플 핸드폰 조차도 이제 AI가 탑재돼서 출시되는 시대가 된 것 같다. 그만큼 AI 트렌드를 빠르게 따라가서 AI 활용에 대해 공부하는 것 또한 중요해진 것 같다.
따라서, 오늘은 AI 애플리케이션을 만들기 위해서 Bedrock에서 제공되는 서비스는 어떠한 것이 있는 지 알아보고자 한다.
Foundation Models
흔히 AI를 공부할 때 보면 FM이라는 용어를 되게 많이 접하게 된다. FM은 쉽게 생각하면 미리 대규모 데이터를 이용해서 학습된 모델이라고 생각하면 된다. 사실 전문적으로 모델을 처음부터 개발하는 사람이 아니라면 ChatGPT 같은 생성형 AI 애플리케이션을 만드는 것은 쉬운 일이 아닐 것이다. 이를 위해서 AI 엔지니어가 쉽게 튜닝해서 새로운 모델을 만들 수 있도록 제공되는 게 FM이고 Amaozon Bedrock 서비스에서는 여러 가지 FM을 제공해주고 있다. Meta의 유명한 Llama부터 Anthropic의 Claude, Amazon 자체의 Titan 등 다양한 모델들이 제공되고 있다.
https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
글로벌을 타겟으로 하는 회사만큼 리전마다 제공되는 모델의 종류도 다르고 만약 한국이 아닌 다른 리전에 있는 모델을 이용하고 싶다면 해당 리전에 원하는 모델이 있는 지 먼저 찾아보면 좋을 것 같다.
https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html
추가로 우리는 각 모델을 사용하기 전에 Bedrock 서비스의 playground에서 모델을 테스트 해볼 수도 있다.
https://docs.aws.amazon.com/bedrock/latest/userguide/playgrounds.html
Customize Model for your use case
그렇다면 우리는 이제 앞서 언급한 FM을 활용해서 어떻게 우리만의 Custom Model로 만들 수 있을까?
방법은 간단하게 우리만의 목적(예를 들어 관광 관련 정부 단체면 관광 정보 추천)을 위해서 관련된 데이터를 모델에 학습을 시키거나 모델의 파라미터를 조정해서 튜닝 작업을 하는 것이다.
https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html
모델의 파라미터를 조정해서 튜닝을 할 경우 모델마다 다르기 때문에 아래 문서를 참고하면 좋을 것 같다.
https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models-hp.html
이렇게 만든 모델은 정말로 내가 원하는 목적에 맞게 추론(inference)를 잘하는 지 확인하는 과정 또한 중요하다. Bedrock 문서에서는 model의 performance를 평가하기 위한 가이드가 잘 나와있다. 해당 문서를 참고해서 evaluation job을 만들고 모델의 성능을 평가하는 것 또한 모델링 과정에서 중요하다. 사실 이 과정을 거쳐서 모델 검증이 잘 되어야 우리가 흔히 말하는 할루시네이션 즉 거짓 정보를 만들어내는 현상도 방지할 수 있다. 사실 아직까지는 할루시네이션 현상을 100% 전부 다 막을 수는 없다고 생각한다. 개인적으로 해당 현상이 일어나는 걸 전부 다 막겠다긴 보다는 그래도 발생할 확률을 줄이는 게 최선이라고 생각한다. 그래서 요새 뒤에서도 언급하겠지만 Prompt Engineering 또한 중요한 과정 중 하나인 것 같다.
https://docs.aws.amazon.com/bedrock/latest/userguide/evaluation.html
Knowledge bases
앞서 말한 할루시네이션 현상을 방지하기 위해 나온 기능으로 Bedrock에서는 Knowledge bases, AI 쪽에서는 흔히 RAG 기법이라고 불리는 검색 증강 생성 기법이 있다. 해당 방식은 모델이 과거 데이터 뿐만 아니라 현재 데이터도 바라볼 수 있게 하고 모델이 계속해서 유사한 데이터를 찾아 분석하고 내가 던진 질문에 대한 답변을 발전시켜 나가서 사실 기반의 정확한 답변을 얻을 수 있도록 하는 방식이다.
Amazon Bedrock에서는 해당 기능을 Knowledge bases라는 이름으로 제공하고 있고 해당 기능을 활용해서 모델은 더 지능적으로 내가 원하는 답변을 추론할 수 있게 된다. 또한, 해당 기능에서는 web crawling을 통해 데이터를 수집해서 나의 Bedrock 모델이 더 다양하고 연관성 있는 정보를 바탕으로 답변을 추론하도록 만든다.
또한, 여기서 데이터를 저장하기 위해서는 벡터 임베딩 기법을 사용하는데 이는 내가 말한 단어나 문장을 숫자로 변환하는 기법이다. 이러한 벡터 임베딩 정보는 벡터 스토어라는 곳에 저장하여 나중에 데이터가 들어왔을 때 해당 벡터 스토어에서 유사한 관계의 데이터를 찾아 추론을 하게 된다. 이때, AWS 에서 지원되는 벡터 스토어로는 OpenSearch 서비스가 있고 이외에도 RDS의 Aurora 등 다양한 서비스들이 있다.
https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html
https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup.html
Prompt Engineering
요새 ChatGPT 같은 GenAI를 많이 사용하는 만큼 원하는 결과를 도출하기 위한 Prompt Engineering도 중요해지고 있다. 사실 우리가 원하는 답은 단순히 지하철을 타고 서울역에서 강남역으로 가기 위한 노선 정보를 묻는 것인데 AI에게 "서울역에서 강남역까지는 어떻게 가야 해?" 라는 단순한 질문을 하면 버스 경로를 추천해줄 때도 있고 택시를 타는 방법도 추천해줄 때가 있다. 이렇듯 정확한 우리의 니즈를 반영하기 위해서는 AI에게 내가 정확하게 어떤 정보를 원하고 있고 어떤 답변을 내주면 좋겠는 지 같이 prompt 안에 넣어야 한다. 이외에도 prompt engineering을 하는 이유는 입력 토큰이라고 불리는(모델마다 다르겠지만 여기선 예시로 한 단어에 한 토큰이라고 가정) 토큰 단위마다 가격을 측정하기도 하기 때문이다.
https://aws.amazon.com/bedrock/pricing/?nc1=h_ls
그러면 Prompt Engineering은 어떻게 해야 잘 한다 할 수 있을까? 간단하게 내가 사용하려고 하는 모델의 가이드를 보면 된다. 대부분의 모델은 Prompt Engineering을 하는 방법에 대한 가이드를 문서로 남겨놓았다. 이를 참고한다면 기존의 단순한 질문에 대한 답보다 더 나은 Prompt 결과를 얻을 수 있다.
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview
Bedrock Agent
사실 앞서 말한 RAG이나 Prompt Engineering이나 따로 따로 우리가 하기보다는 하나로 통합돼서 관리되면 더 편리함을 느낄 것이다. 그래서 Amazon Bedrock에서는 Agent라는 기능을 제공해주고 있다. 해당 기능을 사용하면 우리는 앞서 말한 기능들을 더욱 더 편리하게 자동화하고 업무의 생산성을 높일 수 있다.
https://aws.amazon.com/bedrock/agents/?nc1=h_ls
Bedrock Guardrail
마지막으로는 Guardrail에 대해 설명하고자 한다. GenAI를 사용할 때 몇몇 유저는 비속어를 섞어서 prompting을 할 수도 있다. 만약 그럴 경우 AI가 해당 데이터를 학습하게 된다면 누군가는 비속어로 된 답변을 얻게 될 것이다. 그걸 방지하기 위해 Bedrock에서는 Guardrail 서비스로 유해한 정보를 filtering하고 유저의 개인 정보 같은 민감한 정보들이 prompting이 되지 않도록 방지할 수 있게끔 제공해주고 있다. 또한, Guardrail을 잘만 사용한다면 앞서 언급한 할루시네이션 현상도 미리 감지하고 예방할 수도 있을 것이다.
https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
Conclusion
오늘은 이렇게 Bedrock에 있는 기능들에 대해 다루고 Bedrock이 어떤 서비스인지 알아보았다. 요새 AI가 화두인 만큼 해당 기술에 대한 지식을 키우고 잘 활용하는 능력 또한 매우 중요한 것 같다. 예전에는 개개인이 방대한 정보의 바다 속에서 필요한 정보를 찾기 위해서 구글링을 하면서 많은 시간을 들였는데 요새는 간단한 Prompting 한 번이면 내가 원하는 정보를 찾을 수 있게 된 것 같다. 그만큼 AI를 잘 활용하는 게 매우 중요해졌고 우리는 해당 기술들을 잘 활용하기 위해 계속 끊임없이 공부를 해야할지도 모른다... 그리고 Bedrock 과 같은 서비스도 잘 활용해서 나만의 생산성을 높일 수 있는 도구로 잘 활용하는 것 또한 앞으로의 과제일 것 같다.
+++
추가로 AWS에서는 Bedrock workshop이나 sample 등 다양한 소스 코드를 제공해주고 있어서 관심이 있다면 개인 Jupyer Notebook을 통해서 한 번씩 해봐도 좋을 것 같다! (이때, 예상치 못하게 과금이 될 수 있기 때문에 요금은 잘 확인하고 사용을 다 한 리소스는 삭제하면 좋을 것 같다!)
https://github.com/aws-samples/amazon-bedrock-workshop
https://github.com/aws-samples/amazon-bedrock-samples
'Cloud > AWS' 카테고리의 다른 글
Basic Bedrock API (0) | 2024.12.22 |
---|---|
Amazon SageMaker 개발 환경 (1) | 2024.10.20 |
AWS Code Series를 이용한 자동화 구성하기 (0) | 2024.04.15 |
AWS Lambda 내용 정리 (0) | 2023.05.28 |
AWS Cloudtrail & EventBridge를 이용해서 s3 작업에 대한 컨테이너 작업 (0) | 2023.04.05 |