[파이썬] Keras 모델 배포 및 서버리스 아키텍처

Keras는 파이썬으로 작성된 딥러닝 프레임워크로, 간편하고 직관적인 API를 제공하여 모델 구축과 훈련을 쉽게 할 수 있게 해줍니다. 하지만 Keras 모델을 배포하고 실시간 예측을 하는 것은 조금 더 복잡한 과정입니다. 이 글에서는 Keras 모델을 배포하는 방법과 서버리스 아키텍처를 사용하여 모델을 관리하는 방법을 살펴보겠습니다.

1. 모델 배포를 위한 Flask 웹 서버

Keras 모델을 배포하기 위해선 Flask 웹 서버를 사용할 수 있습니다. Flask는 경량화된 웹 프레임워크로, 파이썬 기반의 애플리케이션을 쉽게 개발할 수 있도록 도와줍니다.

먼저, 아래와 같이 Flask를 설치해줍니다.

pip install flask

다음으로, 웹 서버를 구성하기 위해 app.py 파일을 생성합니다.

from flask import Flask, jsonify, request
from keras.models import load_model

app = Flask(__name__)
model = load_model('model.h5')

@app.route('/predict', methods=['POST'])
def predict():
    data = request.get_json(force=True)
    input_data = data['input']
    
    # 입력 데이터 전처리 및 예측
    processed_data = preprocess(input_data)
    prediction = model.predict(processed_data)
    
    # 예측 결과 반환
    return jsonify({'prediction': prediction.tolist()})

if __name__ == '__main__':
    app.run(debug=True)

위 코드에서는 /predict 엔드포인트에 POST 요청을 보내면, 입력 데이터를 받아 전처리 후 모델에 적용하여 예측 결과를 반환합니다. 이 예시에서는 model.h5 파일로 저장된 Keras 모델을 로드하여 사용하고 있습니다.

Flask 서버를 실행하기 위해 터미널에서 아래 명령어를 실행합니다.

python app.py

이제 http://localhost:5000/predict 에 POST 요청을 보내면, 예측 결과를 얻을 수 있습니다.

2. 서버리스 아키텍처를 통한 모델 관리

서버리스 아키텍처를 사용하면 서버를 관리할 필요 없이 모델을 배포하고 관리할 수 있습니다. 모델을 실행하기 위해 필요한 리소스를 클라우드 공급자가 관리하므로, 운영 비용이 절감되고 확장성이 좋아집니다.

먼저, 모델을 배포하고 관리하기 위해 아래와 같은 단계를 따릅니다.

  1. Keras 모델을 저장한 후, 이를 클라우드 상의 저장소에 업로드합니다. 예를 들어, Amazon S3, Google Cloud Storage 등을 사용할 수 있습니다.
  2. 클라우드 함수 또는 서버리스 호스팅 플랫폼 (예: AWS Lambda, Google Cloud Functions)을 사용하여 배포된 모델에 접근 가능한 HTTP 엔드포인트를 만듭니다.
  3. 엔드포인트로 POST 요청을 보내 모델을 호출하고 예측 결과를 받습니다.

위의 예시에서는 AWS Lambda를 사용하여 모델을 배포하는 방법을 설명하겠습니다. 먼저, AWS CLI를 사용하여 모델 파일을 S3 버킷에 업로드합니다.

aws s3 cp model.h5 s3://your-bucket/model.h5

다음으로, AWS Lambda 함수를 생성하고 해당 함수에 업로드한 모델을 호출하는 코드를 작성합니다.

import json
import boto3
from keras.models import load_model

def lambda_handler(event, context):
    s3 = boto3.client('s3')
    s3.download_file('your-bucket', 'model.h5', '/tmp/model.h5')

    model = load_model('/tmp/model.h5')

    input_data = event['input']
  
    # 입력 데이터 전처리 및 예측
    processed_data = preprocess(input_data)
    prediction = model.predict(processed_data)

    # 예측 결과 반환
    return {
        'statusCode': 200,
        'body': json.dumps({'prediction': prediction.tolist()})
    }

위 코드는 AWS Lambda 함수의 핸들러입니다. 코드를 업데이트한 후에는 AWS Lambda 콘솔에서 새 함수를 생성하고 업로드한 코드를 업로드하면 됩니다. 생성된 함수에는 엔드포인트 URL이 제공됩니다.

이제 클라이언트에서 엔드포인트 URL로 POST 요청을 보내면, 예측 결과를 받을 수 있습니다.

결론

Keras 모델을 배포하고 서버리스 아키텍처를 사용하여 모델을 관리하는 방법에 대해 알아보았습니다. Flask를 사용하여 모델을 배포하고, AWS Lambda를 사용하여 모델을 관리하는 예시를 살펴보았습니다. 이를 통해 Keras 모델의 배포와 관리가 얼마나 쉽게 이루어질 수 있는지 확인할 수 있습니다. 서버리스 아키텍처를 활용하면 모델의 확장성과 유지보수성을 향상시킬 수 있으므로, 효과적인 딥러닝 모델 관리를 위해 고려해볼 만한 방법입니다.