[TensorFlow] gRPC 클라이언트에서 models.config 구성 된 Model Reloading
- 인공지능
- 2022. 3. 23. 18:48
참조
소개
- TensorFlow Serving은 미리
models.config
설정 파일에 Loading할 모델들을 정의할 수 있습니다. - 해당 작업은 Tensorflow Serving 서버에서 직접 작업하는 내용입니다.
- Client에서도 수동으로
models.config
파일에 정의된 모델을 Loading 하는 방법에 대해 자료조사 및 POC 진행합니다.
예제코드
- Python 코드로 TensorFlow Serving gRPC 코드에
models.config
파일에 정의된 Model 을 수동으로 재로딩 하는 방법에 대하여 코드 작성 및 테스트 진행합니다. - 소스코드는 StackOverFlow 참고 하였습니다.
- gRPCHelper.py 에 add_model_config 메서드를 추가하였습니다.
- 해당 메서드는 ModelServiceStub 클래스의 sutb 객체를 생성하여 최종적으로
models.config
에 정의된 특정 모델 정보를 ReLoading 역할을 하는 메서드 입니다.
def add_model_config(host, name, base_path, model_platform):
channel = grpc.insecure_channel(host)
stub = model_service_pb2_grpc.ModelServiceStub(channel)
request = model_management_pb2.ReloadConfigRequest()
model_server_config = model_server_config_pb2.ModelServerConfig()
#Create a config to add to the list of served models
config_list = model_server_config_pb2.ModelConfigList()
one_config = config_list.config.add()
one_config.name= name
one_config.base_path=base_path
one_config.model_platform=model_platform
model_server_config.model_config_list.CopyFrom(config_list)
request.config.CopyFrom(model_server_config)
print(request.IsInitialized())
print(request.ListFields())
response = stub.HandleReloadConfigRequest(request,10)
if response.status.error_code == 0:
print("Reload sucessfully")
else:
print("Reload failed!")
print(response.status.error_code)
print(response.status.error_message)
- tensorflow_serving_gRPC.py 클래스에 해당 메서드를 호출하여 Inference 테스트 진행해 보았습니다.
import numpy as np
from unit_test.tf_serving.gRPC.gRPCHelper import gRPCHelper
# mnist 데이터 셋 가져오기
(x_test, y_test) = gRPCHelper.get_mnist_dataset()
test_images = np.empty((0, 15))
test_images = x_test[0:15]
# gRPC 최대 전송 테스트
# 최대 전송 용량 확인 할 때 주석 풀어서 사용
#test_images, y_test = test_images_append(test_images=test_images, y_test=y_test)
host = 'localhost'
port = 8500
model = 'Xception'
gRPCHelper.add_model_config(host=f"{host}:{port}",
name=model,
base_path="/models/model/Xception",
model_platform="tensorflow")
# gRPC channel, stup 생성
stub = gRPCHelper.get_stub(host=host, port=port)
# 메타데이터 정보 가져오기
(serving_inputs, serving_outputs) = gRPCHelper.get_model_metadata(stub=stub, model=model)
input = gRPCHelper.get_input_output(serving_inputs)
output = gRPCHelper.get_input_output(serving_outputs)
# predict 값 가져오기
result = gRPCHelper.get_predict(stub=stub, model=model, test_images=test_images, input=input)
response = np.array(result.outputs[output].float_val)
response = gRPCHelper.list_chunk(response.tolist(), 10)
# 결과값 출력
gRPCHelper.predict_print(response=response, y_test=y_test)
Docker Container 로그 결과
- 위와 같이 add_model_config 메서드를 실행하게 되면, TensorFlow Serving Containger 로그에서 지정된 모델이 다시 재로딩 되었다는 로그가 출력된 것을 확인할 수 있습니다.
Config entry
index : 0
path : /models/model/Xception
name : Xception
platform : tensorflow
2022-03-22 05:53:21.737261: I tensorflow_serving/model_servers/server_core.cc:465] Adding/updating models.
2022-03-22 05:53:21.737290: I tensorflow_serving/model_servers/server_core.cc:591] (Re-)adding model: Xception
2022-03-22 05:53:21.737339: I tensorflow_serving/model_servers/server_core.cc:486] Finished adding/updating models
실행 결과
- 재로딩 된 상태에서 해당 모델의 Inference 한 결과 정상적으로 Inference 되어 결과값, 예측값이 출력된 것을 확인할 수 있습니다.
True
[(<google.protobuf.pyext._message.FieldDescriptor object at 0x000002CCD60392A0>, model_config_list {
config {
name: "Xception"
base_path: "/models/model/Xception"
model_platform: "tensorflow"
}
}
)]
Reload sucessfully
Real Value : 7 / Pred Value : 7
Real Value : 2 / Pred Value : 2
Real Value : 1 / Pred Value : 1
Real Value : 0 / Pred Value : 0
Real Value : 4 / Pred Value : 4
Real Value : 1 / Pred Value : 1
Real Value : 4 / Pred Value : 4
Real Value : 9 / Pred Value : 9
Real Value : 5 / Pred Value : 5
Real Value : 9 / Pred Value : 9
Real Value : 0 / Pred Value : 0
Real Value : 6 / Pred Value : 6
Real Value : 9 / Pred Value : 9
Real Value : 0 / Pred Value : 0
Real Value : 1 / Pred Value : 1
728x90
'인공지능' 카테고리의 다른 글
[TensorFlow] Flask 와 Tensorflow Serving gRPC 통신 (0) | 2022.03.29 |
---|---|
[TensorFlow] TensorFlow Serving CPU, GPU 동작 확인 (0) | 2022.03.25 |
[TensorFlow] TensorFlow Serving 다중 모델 로딩 (0) | 2022.03.22 |
[TensorFlow] TF Serving 1번 버전 없이 다른 버전 동작 기능 확인 (0) | 2022.03.22 |
[TensorFlow] Tensorflow Serving 모델 업데이트 방법 (0) | 2022.03.22 |
이 글을 공유하기