-
[Python] AWS S3에 모델파일 저장하기, 불러오기 (boto3)Programing/AWS 2023. 2. 16. 10:17반응형
기존에는 모델학습, 저장, load 후 flask 서버 활용 모두 하나의 EC2에서 진행했으나,
이제는 규모도 조금 커졌겠다, EC2 자원 잡아먹지 않도록 분리를 해야겠다는 생각이 들었습니다.
모델학습은 로컬에서 진행하고,
만들어진 모델파일은 S3에 저장,
EC2내의 flask 서버가 S3의 모델파일을 읽어와 서비스를 제공하도록 변경하고자 했습니다.
그러려면 파이썬이 S3의 파일 데이터에 접근 가능해야겠죠.
방법은 매우 간단합니다.
boto3를 이용하면 됩니다.
사전준비
1) AWS 엑세스 키 발급
기존에 access key가 없었다면 아래의 docs를 참고해서 키를 만들어주세요
2) boto3 설치
pip install boto3
학습, 생성한 모델을 S3에 저장(업로드)
객체를 바로 S3로 올리기는 어려운 것으로 보입니다.
(열심히 탐색해본건 아닙니다. 혹시라도 방법을 아시는분이 계시다면, 댓글 주시면 감사드리겠습니다!!)import boto3 import joblib # 모델객체 생성과정 생략 model = # local에 모델 저장 (여기서는 joblib 사용) local_dir = '로컬저장경로/model.pkl' joblib.dump(model, local_dir) # S3 연결 accessKey = $$$$$$$$$$ secretKey = $$$$$$$$$$ s3 = boto3.client('s3', aws_access_key_id=accessKey, aws_secret_access_key=secretKey) # local 모델을 S3로 업로드 bucket = 'S3버켓이름' s3_dir = 'S3저장경로/model.pkl' s3.upload_file(local_dir, bucket, s3_dir)
S3에 있는 모델을 로컬에 다운로드
import boto3 import joblib # S3 연결 accessKey = $$$$$$$$$$ secretKey = $$$$$$$$$$ s3 = boto3.client('s3', aws_access_key_id=accessKey, aws_secret_access_key=secretKey) # S3 모델 다운로드 bucket = 'S3버켓이름' s3_dir = 'S3저장경로/model.pkl' local_dir = '로컬저장경로/model.pkl' s3.download_file(bucket, s3_dir, local_dir) # 모델 파일을 파이썬에 로드 model = joblib.load(local_dir)
번외) S3에 있는 모델을 로컬에 저장하지 않고 바로 불러오기
gensim의 경우, url을 통해 모델을 불러올 수 있습니다!
import boto3 import gensim # url 생성 accessKey = $$$$$$$$$$ secretKey = $$$$$$$$$$ bucket = 'S3버켓이름' s3_dir = 'S3저장경로/model.pkl' url = f's3://{accessKey}:{secretKey}@{bucket}/{s3_dir}' # 모델 로드 (예시: word2vec) model = gensim.models.Word2Vec.load(url)
반응형'Programing > AWS' 카테고리의 다른 글
[AWS Bedrock] Agents로 Bedrock 기능 구체화하기 (0) 2024.03.03 [AWS Bedrock] RAG를 위한 지식베이스 생성 (1) 2024.02.27 [AWS Bedrock] Bedrock 시작하기 (0) 2024.02.27 [생성AI 서비스 선택] AWS Sagemaker VS AWS Bedrock (0) 2024.02.26 AWS S3 한번에 다운받기 (AWS CLI) (2) 2022.10.07