인터넷 액세스 불가 환경에서 Amazon Bedrock API실행 하기
들어가며
블로그 컨텐츠 글감을 고려하던 중 Amazon Bedrock에 대해 다뤄본적이 없다는것을 깨달았고, 인터넷 액세스 불가 환경에서 실행 가능할지 생각하다가 실제로 검증 작업을 진행 해 보았는데요, 해당 내용을 게시글을 통해 공유 드리겠습니다.
1. 지침
- Bedrock API를 호출하는 주체는 인터넷 액세스 불가 환경에 두었습니다. 이번에는 인터넷 액세스 불가로 한 SageMaker노트북 인스턴스 (버지니아 북부 리전 프라이빗 서브넷에 붙임)를 사용하였습니다.
- Bedrock용 vpc엔드포인트를 사용하였습니다.
- 필요한 데이터가 있다면 S3에 둡니다.
- 세세한 제어가 가능할지는 확인이 필요합니다.
2. 검증
https://docs.aws.amazon.com/ko_kr/bedrock/latest/userguide/api-setup.html
상기 문서의 셋업 방법을 참고하면서 필요에 따라 수정을 추가 해 나가겠습니다.
모델 액세스를 유효화
https://docs.aws.amazon.com/ko_kr/bedrock/latest/userguide/model-access.html
먼저 모델을 사용하기 전에 그 모델에 액세스 요청을 합니다.
이번에는 Claude v2를 사용하겠습니다.
SageMaker 노트북 인스턴스 준비
버지니아 북부 리전에 하기 설정을 가진 노트북 인스턴스를 생성 해 주세요.
- 프라이빗 서브넷에 연결 합니다. NAT Gateway는 이용 하지 않습니다.
- Direct internet access : Disabled
- 롤은 문서에 기재 권한 범위로 설정 합니다.
VPC엔드포인트
- com.amazonaws.us-east-1.s3
- aws.sagemaker.us-east-1.notebook
- com.amazonaws.us-east-1.sagemaker.api
- com.amazonaws.us-east-1.bedrock
- com.amazonaws.us-east-1.bedrock-runtime
상기를 유효화 합니다.
Jupyter로 코드 넣기
문서 대로 샘플 코드를 만듭니다.
https://docs.aws.amazon.com/ko_kr/bedrock/latest/APIReference/API_runtime_InvokeModel.html
지정된 Amazon Bedrock모델을 시작하고 리퀘스트 본문에 제공 된 입력을 사용하여 추론을 실행 합니다. 텍스트 모델, 이미지 모델, 임베디드 모델 추론을 실행 하기 위해서는 InvokeModel을 사용합니다.
헤더에 지정한 modelId는 사용하는 모델의 종류에 따라 다릅니다.
베이스 모델을 사용하는 경우는 모델 ID또는 그 ARN을 지정 합니다.
Provisioned 모델을 사용하는 경우는 ProvisionedModelName, 또는 Provisioned Throughput을 만들 때 반환되는 provisionedModelArn을 지정합니다. 사용자 지정 모델을 사용하는 경우 먼저 해당 모델의 Provisioned Throughput을 구입합니다. (자세한 내용은 Amazon Bedrock 사용 설명서의 Provisioned Throughput 참조) 그 후 ProvisionedModelName 또는 ProvisionedModelArn을 지정합니다. 리퀘스트 본문에서 응답에 영향을 미치는 프롬프트 및 추론 매개 변수를 지정합니다.
‘Invoke Model’ API 설명은 상기와 같습니다.
import boto3
import json
bedrock = boto3.client(service_name='bedrock-runtime')
body = json.dumps({
"prompt": "\n\nHuman:Please explain AWS in a way that even kindergarteners can understand\n\nAssistant:",
"max_tokens_to_sample": 300,
"temperature": 0.1,
"top_p": 0.9,
})
modelId = 'anthropic.claude-v2'
accept = 'application/json'
contentType = 'application/json'
response = bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)
response_body = json.loads(response.get('body').read())
# text
print(response_body.get('completion'))
prompt 부분은 질문 변경을 했습니다.
실행 결과
Here is an explanation of AWS for kindergarteners:
AWS is like a really big playground with lots of fun things to play with! There are swings, slides, sandboxes, and jungle gyms. Each thing you want to play with is called a “service.”
If you want to go down the slide, you use the “EC2” slide service. If you want to swing, you use the “S3” swing service. There are services for all kinds of fun activities!
The playground monitor is called AWS. AWS makes sure all the equipment is safe and lets you know how long you can play with each thing. AWS gives you a bracelet that tracks how much time you spend playing.
At the end of recess, AWS tells your teacher how long you played on everything so your parents know how much to pay for the playground. The more things you play with, the more money it costs. But AWS lets you play with lots of fun stuff!
So AWS is like the biggest, funnest playground ever that lets you play with super cool toys and keeps everything working nicely! The end.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
유치원생을 위한 AWS설명입니다 :
AWS는 재미있는 놀이기구가 많이 있는 큰 놀이터와 같습니다! 그네, 미끄럼틀, 모래밭, 정글 체육관 등 놀이기구는 각각 ‘서비스’ 라고 불립니다.
미끄럼틀에서 미끄러지고 싶다면 ‘EC2’ 라는 미끄럼틀 서비스를 사용합니다. 그네의 경우 ‘S3’와 같이 모든 종류의 재미있는 활동을 위한 서비스들이 있습니다!
놀이터를 감시하는 사람은 AWS라고 불립니다. AWS는 모든 놀이터의 안전성을 확인하고 각각의 놀이터에서 놀 수 있는 시간을 알려줍니다. AWS는 놀았던 시간이 기록된 팔찌를 줍니다.
휴식 시간이 끝나면 AWS는 놀이터에서 놀았던 시간을 교사에게 보고합니다. 논 것이 많을수록 그만큼 돈이 듭니다. 그렇지만 AWS는 즐거운 것을 통해 많이 놀게 해줍니다 !
그래서 AWS는 멋진 장난감으로 놀 수 있고, 모든 것이 잘 작동하는, 가장 크고 즐거운 놀이터 같은 것입니다! 끝.
AWS를 유치원생도 알기 쉽게 설명하면 위와 같습니다.
추가로
https://docs.aws.amazon.com/ko_kr/service-authorization/latest/reference/list_amazonbedrock.html
이 게시글을 작성한 2023년 12월 15일 시점의 최신판에서는 조건 키 등의 제한은 불가 한 것 같습니다. (VPC Config로 엄밀한 제어가 가능하지 않을까 싶어서 찾아 봤습니다)
리소스 타입으로 foundation-model 제어 등 가능한 것 같습니다.
마지막으로
이상으로 간단하게 검증 해 본 내용은 작성한 게시글 입니다.
누군가에게 참고가 된다면 좋을 것 같습니다.
지금까지 읽어 주셔서 감사드립니다.
번역 : Cloud Technology Center 박지은 매니저
원문게시글 :
https://qiita.com/gahirosan/items/29c5858e112a8af7700a
Megazone Japan Advent Calendar 2023에 업로드 중인 게시글로 작성자 Aga님의 동의를 얻어 번역한 게시글 입니다.