이번 포스팅에서는 Amazon AWS 의 SageMaker 에서 Python 객체(예: scikit-learn 으로 학습한 로지스틱 회귀모형)를 직렬화(serialization)하여 AWS S3에 저장하는 사용자 정의함수 코드를 소개하겠습니다.
아래 예제 코드에서는 Python 객체를 직렬화하는데 six 모듈의 six.moves.cPickle 메소드를 사용하였으며, protocol 매개변수는 Python 버전에 따라서 Python 3.x 는 protocol=3, Python 2.x 는 protocol=2 를 입력해주면 됩니다.
boto3 모듈로 특정 계정의 AWS S3에 접근해서 put_object() 메소드로 파일을 저장하는데요, 이때 put_object() 메소드에 Bucket (S3 내 버킷 이름), Key (폴더 이름, 키), Body (직렬화한 Python 객체) 매개변수 값을 지정해주면 됩니다.
Python 객체의 직렬화(serialization), 역직렬화(de-serialization)는 https://rfriend.tistory.com/525 를 참고하세요.
[ Python object를 직렬화해서 AWS S3에 저장하는 사용자 지정 함수 ]
def store_object_to_S3(bucket_nm, folder_nm, key_nm, object_nm):
import boto3
# connect to specific account
region = boto3.Session().region_name
session = boto3.Session(region_name=region)
s3 = session.client('s3')
# serialization using pickle
import six
pickle = six.moves.cPickle
try:
serialized_obj = pickle.dumps(object_nm, protocol=3) # protocol=3 for Python 3.x
except:
serialized_obj = pickle.dumps(object_nm, protocol=2) # protocol=3 for Python 2.x
print('[STATUS] serialized')
# store a serialized object to S3 bucket
key = "{}/{}".format(folder_nm, key_nm)
s3.put_object(Bucket=bucket_nm,
Key=key,
Body=serialized_obj)
print('[STATUS] saved to S3')
위에서 정의한 사용자 정의함수에 bucket_nm, folder_nm, key_nm, object_nm (직렬화하고자 하는 Python 객체, 예: 학습된 모델 객체) 을 순서대로 입력해주면 됩니다.
# store the serialized best model to S3 bucket
store_object_to_S3(bucket_nm='my-bucket',
folder_nm='best_model',
key_nm='logitreg_model',
object_nm=logitreg_model)
이번 포스팅이 많은 도움이 되었기를 바랍니다.
행복한 데이터 과학자 되세요! :-)
728x90
반응형
'Python 분석과 프로그래밍 > Python 프로그래밍' 카테고리의 다른 글
[Python] if else 조건절과 for loop 순환문 예시 (0) | 2023.12.19 |
---|---|
[Python Exceptions] try, except, else, finally 절을 이용한 Python Programming 예외 처리 (0) | 2019.08.08 |
[Python] 가변 매개변수(variable-length arguments) 위치에 따른 Keyword 매개변수 호출 시 SyntaxError, TypeError (0) | 2019.08.03 |
[Python] for loop 반복문의 진척율을 콘솔창에 출력해서 확인하는 방법 (1) | 2019.07.13 |
[Python] 함수나 클래스의 구현을 미룰 때 쓰는 pass 문 (4) | 2018.07.24 |