AI/ML

Bedrock으로 외부 모델 가져오기

[가져온 모델] 알아보기

2024년 10월 21일, 가져온 모델(Amazon Bedrock Custom Model Import) 기능이 GA 되었습니다. 이 기능을 통해 Bedrock은 내부 모델 튜닝을 통한 사용자 지정 모델 사용뿐만 아니라, Hugging Face와 같은 외부 저장소에 공개된 모델 혹은 직접 로컬에서 학습한 모델을 직접 가져와 사용할 수 있는 기능을 제공합니다. 이를 통해 사용자는 Bedrock 내의 모델에 한정되지 않고 더욱 다양한 모델에 접근할 수 있으며, 특정 도메인이나 작업에 특화된 모델을 쉽게 활용할 수 있습니다. 다만, 아직 Bedrock이 지원하는 외부 모델은 제한적입니다. 현재 Mistral, Mixtral, Flan, Llama2, 그리고 Llama 3계열(3, 3.1, 3.2) 아키텍처를 기반으로 한 모델만 지원되고 있습니다. 가중치 형식의 경우 FP32, FP16 및 BF16만 지원되며, 양자화된 모델은 현재 지원되지 않습니다.

외부 모델을 Bedrock에서 사용하려면 해당 모델의 Hugging Face 가중치 포맷을 Amazon S3에 업로드해야 합니다. 모델을 S3에서 성공적으로 가져오기 위해서는 최소한 다음 파일들이 필요합니다. 이 파일들은 Hugging Face Transformers 라이브러리에 의해 생성되며, 모델의 가중치, 구성 정보, 그리고 토크나이저 관련 정보를 포함합니다. 더 자세한 정보는 공식 문서를 참고하세요.

모델 가져오기에 필요한 파일

  • .safetensors
  • config.json
  • tokenizer_config.json
  • tokenizer.json
  • tokenizer.model

[가져온 모델] 맛보기

가져온 모델의 기능을 사용해보기 위해, 앞서 언급한 조건들을 충족하는 모델을 Hugging Face에서 준비하겠습니다.  AWS는 Hugging Face의 Amazon Web Services 저장소에 이러한 조건을 만족하는 파일들로 구성된 저장소를 운영하고 있습니다.

위와 같이 저장소의 모델들을 활용할 수도 있지만, 이번 포스팅에서는 Llama2 모델을 기반으로 한 CodeLlama 모델을 사용해 진행하겠습니다.

아래 화면은 Hugging Face, codellama 저장소의 CodeLlama-7b-Instruct-hf 모델입니다.

Files and versions 섹션에서 AWS에서 요구하는 파일들의 존재 여부를 확인할 수 있으며, 오른쪽 상단의 [Clone repository] 버튼을 통해 해당 저장소를 복제할 수 있는 명령어를 얻을 수 있습니다.

Hugging Face에서 제공하는 모델을 로컬에 다운로드하고 이를 S3에 업로드하는 과정은 다음과 같습니다. 

# CodeLlama 모델을 로컬로 복제
git clone https://huggingface.co/codellama/CodeLlama-7b-Instruct-hf

# 로컬에 클론 받은 파일을 S3 버킷에 업로드
aws s3 cp ./CodeLlama-7b-Instruct-hf/ s3://{YOUR BUCKET NAME}/{PATH} –recursive

비교적 작은 7B 모델이지만 약 28GB 크기로, 단일 작업으로 업로드할 경우 상당한 시간이 소요됩니다. AWS SDK나 AWS CLI를 사용하면 대용량 파일을 여러 부분으로 나누어 업로드하는 멀티파트 업로드를 적용할 수 있습니다. 특히 AWS CLI(aws s3 cp)의 경우, 파일 크기에 따라 자동으로 멀티파트 업로드를 수행하므로 편리합니다. 이러한 기능을 활용하기 위해, 먼저 모델을 업로드할 S3 버킷을 준비한 후 다음 명령어를 사용하여 멀티파트 업로드를 진행하겠습니다.

다음으로, 외부 모델을 가져오기 위해 Bedrock 콘솔에서 작업을 진행하겠습니다. 외부 모델을 가져오기 위해, Bedrock 콘솔의 [파운데이션 모델] 메뉴에서 [가져온 모델]를 선택한 후 [모델 가져오기] 버튼을 클릭합니다.

외부 모델 가져오기 관련 설정에서, [모델 이름]과 [Import job name]에 각각의 이름을 입력합니다. [모델 가져오기 설정]에서는 Amazon S3 bucket을 선택하고 외부 모델이 저장된 S3의 위치를 지정합니다. 이때 [VPC 설정]과 [Encryption] 옵션은 기본값으로 두겠습니다.

다음으로, [서비스 액세스]에서 Bedrock에 권한을 부여하는 새로운 역할을 생성하는 방식을 선택합니다. 마지막으로 [모델 가져오기] 버튼을 클릭하여 모델 가져오기 작업을 완료합니다.

모델 가져오기 직후 ‘Importing’으로 표시되던 Status가, 잠시 후 ‘Completed’로 변경되면 모델 사용 준비가 완료되었습니다. 모델 사용 준비가 완료되면, 아래와 같이 Jobs 왼쪽의 [Models] 탭에 가져오기가 완료된 모델이 표시됩니다.

가져온 모델을 클릭하면, 다음과 같은 화면의 오른쪽 상단에 [플레이그라운드 열기] 버튼이 활성화됩니다.

플레이그라운드를 실행하면 아래와 같은 화면이 나타납니다. 여기서 AWS Lambda 함수를 사용하여 EC2 인스턴스를 정지시키는 간단한 코드를 작성해 달라고 자연어로 요청해 보겠습니다. Bedrock의 CodeLlama 모델은 요청에 따라 boto3 라이브러리를 활용하여 stop_instances 함수로 EC2 인스턴스를 정지시키는 코드를 생성합니다. 이를 통해 가져온 모델이 정상적으로 작동하는 것을 확인할 수 있습니다.

CodeLlama 프롬프트

<s>[INST] <<SYS>> You are a senior software engineer. Write answers to the following instruction in code without preamble. <</SYS>>Write a Python lambda function to stop EC2 on AWS with the function name lambda_handler.[/INST]

[가져온 모델] 숨겨진 이야기

2024년 4월 23일 Preview로 공개된 이후, 잠시 동안 아래와 같이 ‘가져온 모델’에 대한 모니터링 정보를 확인할 수 있습니다. 이 모니터링 데이터는 PDF 형식의 보고서로도 다운로드할 수 있어, 모델의 성능과 사용 현황을 자세히 분석할 수 있었습니다. GA 이후로 해당 기능이 보이지 않아 아쉽지만, 추후에 더욱 개선된 형태로 생기지 않을까 싶습니다.
(사라진 기능을 사진으로라도 보관할 수 있어, 추억을 간직하게 된 것 같아 기분이 좋네요 😏)

[가져온 모델] 마치며…

이상으로 Bedrock에서 외부 모델을 가져오고 사용하는 과정을 살펴보았습니다. Bedrock 콘솔을 통해 외부 모델(계정당 3개)을 간편하게 가져올 수 있으며, 플레이그라운드에서 모델의 성능을 직접 테스트할 수 있습니다. AWS는 이 기능을 통해 Anthropic과 같은 모델 공급업체의 기반 모델 외의 사용자 지정 모델을 가져오게 하여, 모델에 대한 인프라 관리 부담을 줄이면서 동시에 확장성을 제공하고 있습니다. 이처럼 LLM 모델 활용의 진입 장벽을 낮추고, 더 유연하게 LLM 애플리케이션을 구축할 수 있는 환경을 조성하는 Amazon Bedrock의 미래가 기대가 됩니다!

5/5 - (평가 개수 : 1)

필자: 임 지훈

전체 게시물수 : 1

전체 조회수 : 144

게시물 공유하기