이번 Task에서 우리는 학습시킨 모델을 저장하고 Tensorflow 2.0 serving을 이용해서 배포해 볼 거예요
이제 두 모델을 배포해 보고 예측도 만들어볼 거예요
자, 그러면 TensorFlow Serving과 관련된 기초 지식들을 조금 다뤄봅시다
우리가 이미 모델을 학습시킨 상태라고 가정해봅시다
그럼 이제 이 모델들의 고정된 가중치들이 있을 것이고, 이 모델들은 이미 테스트 데이터에 대해
좋은 결과를 만들어 냈을 것이죠
그리고 지금 하려고 하는 것은 학습된 Tensorflow 모델을 웹 애플리케이션에 통합하고
생산 레벨의 환경에서 배포하고자 하는 거예요
즉, 모델을 서버에 배포해서 전 세계의 누구든 기본적으로
가서 사진을 찍으면 모델이 주요 얼굴 포인트들과 실제 감정들을 반환해 줄 거예요
이게 바로 실제 AI의 응용이죠
이제, 그저 모델을 구축하고 가지고 놀기만 하는 게 아니라
이제 실제로 가져가서 생산 레벨의 환경에서 배포하는 거예요
그리고 정말 좋은점은 TensorFlow Serving이 모델 배포에 있어서
훨씬 쉽도록 도와준다는 점이에요
자, 이 목표들을 Tensorflow를 이용해 얻을 수 있는데
TensorFlow Serving은 머신 러닝 모델에 있어서 고성능 서빙 시스템을 가지고 있고
생산 환경을 위해서 디자인되었어요
그래서 여기에서 해볼 수 있는 것은, TensorFlow Serving을 활용하고 이를 이용해서 예측을 하도록
새 알고리즘을 배포하는 것이죠
이를 위해 먼저 해야 할 것은, 시작하기에 앞서 먼저 serving에 알맞은 형태로
TensorFlow Serving을 이용해서 모델을 저장해 줄 거예요
그래서 해야 할 것은 모델 이름을 지어주고 그 모델의
버전 넘버를 지정해 주는 것이에요 그리고 보통 생산 단계 환경,생산 레벨 배포에서는
한 개의 모델만 있지 않아요
보통 여러 개의 모델들이 있죠
그리고 이 모델들은 모델 버전 1일 수도 있고, 혹은 다른 모델은 모델 버전이, 예를 들어 2일 수도 있어요
그리고 해볼 것은 어떤 버전의 모델을 배포해도 되는지를 정해주는 것이에요
예를 들어, traffic을 예를 들어 90%를 모델 1에, 10%를 모델 2로나눠준다고 해봅시다
그리고 성능을 테스트 하고 배포하지는 않을 모델이
있다고 생각해 봐요 예를 들어, 생산 레벨의 환경에서는 모델의 성능이
어떨지 확신할 수 없는 경우이죠
이럴 때 해볼 수 있는 것은 모델을 유지하고, 이건 잘 알죠
그리고 천천히 차근차근 학습시키고 있는 새로운 모델에 traffic을 조금씩 주는거예요
그래서 이게 모델의 버전 숫자를 관리해야 하는 것이 중요한 이유예요
모델을 저장하고 난 다음에는, TensorFlow Serving을 이용해서 우리 모델의 특정 버전을 가지고
추론 요청을 만들어 볼 것이고 이걸 'servable'이라고 불러요
즉, 이제 모델 ver 3으로 가서 여기에 제 요청들이 있고 여기 제 사진들이 있다고 해주는 것이죠
그러면 서버가 응답해서 2가지를 알려줄 거예요 주요 얼굴 포인트들을 알려주고
관련된 감정을 알려줄 것이죠
이것들은 우리가 필요한 중요한 파라미터들이에요
먼저, 우리가 사용할 port를 지정해 줄 건데 이를 'rest_api_port' 라고 불러요
그래서 요청을 만드는 데에 어떤 포트를 사용할지 정해줘야 하죠
두 번째로는 model_name을 지정해 줘야 해요 REST 요청에서의 URL에서 사용할 것이고
여기에서 아무 이름이나 사용할 수 있답니다
그리고 model_base_path도 지정해 줘야 하는데 이건 모델이 저장된 디렉터리의 경로가 될 거예요
만약 REST 요청에 대해 더 자세히 읽어보고 싶으시다면 링크를 참고 하세요
https://www.codecademy.com/article/what-is-rest
예를 들어, 이 모든 글자들 q, M, N, J, C.. 이런 각기 다른 인간이 이해할 수 없는
글자 조합들 대신에, 이때 번역기 같은 것을 사용하는 것이죠
이게 대신에 REST request를 이용하는 이유예요
실제 코드를 볼 때 더 자세한 내용을 보여드릴게요
TensorFlow Serving을 이용해서 예측을 만들기 위해서는 이미지를 줘야 해요 그렇죠?
이 모델에 입력할 것은 이미지밖에 없어요, 그렇죠?
그래서 이 이미지를 json 포맷에 넣어야 해요
이미지를 json 포맷으로 보내주고 request를 받아볼 것이고
그리고 이건 감정과 주요 얼굴 포인트들이 될 거예요
자, 그래서 배포된 모델에 POST request를 주기 위해 파이썬 request 라이브러리를 사용해 볼 것이고
json에 있는 것을 보내줄 것인데 이건 이미지 데이터를 담고 있겠죠
그리고 마지막으로, 배포된 모델에 대한 POST request로부터 예측을 얻을 것이고
얻은 후에는 argmax 함수를 이용해서 예측된 클래스를 찾을 거예요
코드에 들어가기 전에 여러분들을 위해 특징들을 조금 넣어놨어요
다시 정리하면, 우리는 먼저 모델을 저장해야 하고 이때 SavedModel 포맷이라는 것을 사용하면 돼요
그리고 모델은 제가 언급했듯이 버전 숫자가 있어야 하고
그리고 지정된 디렉터리에 포함되어야 해요
모델을 저장할 때는'tf.saved_model.save'를 사용하면 되고
이건 TensorFlow Serving을 이용해 서빙하기에 알맞은 저장된 모델을 구축하기 위해 사용되는 function이에요
그리고 모델이 저장된 후에는, 특정 버전의 모델을 이용해서 추론 요청을 만들도록
TensorFlow Serving을 이용할 수 있고
그리고 여기에서 SavedModel을 이용해서 변수, 그래프, 그래프의 관련된 메타 데이터를
가지고 있는 우리의 모델을 저장하고 로드할 수 있어요
TensorFlow Serving에 대해 전반적으로 더 알고 싶으시다면https://www.tensorflow.org/guide/saved_model
가셔서 문서를 확인해 보시면 SavedModel에 대해서 더 자세히 읽어보실 수 있어요
그럼 계속해서 이걸 해봅시다
먼저 'import json'을 해주고요
그리고 'import tensorflow.keras.backend as K'도 해줄 거예요.
그리고 'deploy'라는 함수도 만들어 볼 건데 deploy function은 우리가 찾고 있는 디렉터리를 가져오고
모델도 가져올 거예요 여기에서는 디렉터리를 만들어 줄 것이고 버전 숫자도 지정해 줄 거예요
처음에는 두 모델에 대해서 하나의 버전만 가질 것이기 때문에 여기에선 예를 들어 1로 해주었어요
여기에서 해줄 것은 temp 모델 디렉터리를 고른 버전 숫자와 합쳐줄 거예요
이를 위해 'os.path.join'를 입력하고 2가지 정보
여기에 있는 모델 디렉토리와 버전 숫자를 string 타입으로 합쳐줄 거예요
1로 지정해 주었었죠 그리고 이건 경로, 저장할 경로가 될 것이고
이 경로를 프린트해 줄 거예요
그러고 나서 이 함수를 호출할 거예요
그리고 이 내용은 감정Ai(20) 에서 해볼 것이랍니다
그래서 감정Ai(20) 에서는 지금 만들고 있는 'deploy' 함수를
호출해 주고 디렉터리를 '/model'로 지정해 줄 거예요. 그리고
제 모델, 학습 시킨 model_1_facialKeyPoints를 넣어줄 거예요
그리고 대략적으로 여기 만들고 있는 이 함수를 두 번 불러줄 거예요
왜냐하면 두 모델이 있기 때문이죠
첫 번째 모델은 model_1_facialKeyPoints 가 될 것이고, 두 번째는 model_2_emotion이 될 거예요
자, 다시 여기로 돌아와서 저장할 경로를 지정해 주고
그리고 여기에서는 saved_model.save를 이용해서 모델을 저장해 줄 거예요
TensorFlow Serving을 이용해서 서빙할 수 있는 포맷으로
모델을 특정 포맷으로 저장해 주는 것이죠
그래서 여기에서 해주는 것은 만약 os 경로가 export 경로의 디렉터리라면
즉, 만약 디렉터리가 이미 존재한다면 '!rm'을 이용해서 지워줄 것인데
기본적으로 여기는 맨 처음부터 시작하기 때문에
우리는 아무것도 지우지 않을 거예요 이를 위한 경로를 따로 만들어줄 것이죠
그래서 "Already saved a model, cleaning up" 라고 프린트 해줄 것이고
그냥 지워줄 거예요
이 디렉터리와 거기에 있는 데이터를 지워줄 것이죠
맨 처음부터 시작하기 위해서요
이 조건을 통과한다면 좋아요
그리고 'tf.saved_model.save'를 사용할 수 있죠
그리고 여기에서는 모델을 저장해 줄 것이고
export 경로에 있는 모델도 저장해 줄 거예요
export 경로는 ' export_path = os.path.join(MODEL_DIR, str(version)) '여기 부분에 적어줬었고 모델 디렉터리와
모델에 대한 버전 숫자도 같이 가지고 있답니다
'딥러닝' 카테고리의 다른 글
감정Ai(20) - 두 모델 전개하고 추론하기 (0) | 2023.05.05 |
---|---|
감정Ai(20) - TensorFlow 2.0 Serving에서 학습된 모델 제공 (0) | 2023.05.04 |
감정Ai(18) - 두 모델에서 예측하기: 1. 주요 얼굴 특징점, 2. 감정(얼굴 표정과 주요 지점 감지 모델을 결합 부분) (0) | 2023.05.04 |
감정Ai(17) - 얼굴 표정 분류기 모델 평가하기 (0) | 2023.05.04 |
감정Ai(16) - 핵심성과지표 분류기 이해하기(정확도, 정밀도, 재현율 차이) (0) | 2023.05.04 |