TensorFlow에는 다양한 하드웨어 유형(CPU, GPU 등)에 맞게 미세 조정된 광범위한 작업 및 작업 커널(구현) 라이브러리가 사전 구축되어 있습니다. 이러한 작업은 사용자가 추가로 작업할 필요 없이 TensorFlow Serving ModelServer 바이너리에 자동으로 연결됩니다. 그러나 사용자가 Ops를 ModelServer에 명시적으로 연결해야 하는 두 가지 사용 사례가 있습니다.
- 자신만의 맞춤 작업을 작성했습니다(예: 이 가이드 사용).
- TensorFlow와 함께 제공되지 않은 이미 구현된 작업을 사용하고 있습니다.
작업 구현 여부에 관계없이 사용자 지정 작업이 포함된 모델을 제공하려면 작업 소스에 액세스해야 합니다. 이 가이드는 소스를 사용하여 맞춤 작업을 제공하는 단계를 안내합니다. 맞춤 작업 구현에 대한 지침은 tensorflow/custom-op 저장소를 참조하세요.
전제 조건: Docker가 설치된 상태에서 TensorFlow Serving 저장소 를 복제했으며 현재 작업 디렉터리는 저장소의 루트입니다.
작업 소스를 제공 프로젝트에 복사
커스텀 작업으로 TensorFlow Serving을 빌드하려면 먼저 작업 소스를 제공 프로젝트에 복사해야 합니다. 이 예에서는 위에서 언급한 custom-op 저장소의 tensorflow_zero_out을 사용합니다.
제공 저장소 내에서 모든 사용자 정의 작업을 보관할 custom_ops
디렉터리를 만듭니다. 이 예에서는 tensorflow_zero_out 코드만 있습니다.
mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops
작업을 위한 정적 라이브러리 구축
tensorflow_zero_out의 BUILD 파일 에는 모델을 생성하고 훈련하기 위해 Python에 로드할 공유 객체 파일( .so
)을 생성하는 대상이 있습니다. 그러나 TensorFlow Serving은 빌드 시 작업을 정적으로 연결하며 .a
파일이 필요합니다. 따라서 이 파일을 생성하는 빌드 규칙을 tensorflow_serving/custom_ops/tensorflow_zero_out/BUILD
에 추가합니다.
cc_library(
name = 'zero_out_ops',
srcs = [
"cc/kernels/zero_out_kernels.cc",
"cc/ops/zero_out_ops.cc",
],
alwayslink = 1,
deps = [
"@org_tensorflow//tensorflow/core:framework",
]
)
연결된 작업을 사용하여 ModelServer를 빌드하세요.
사용자 정의 작업을 사용하는 모델을 제공하려면 해당 작업이 연결된 ModelServer 바이너리를 빌드해야 합니다. 특히 위에서 만든 zero_out_ops
빌드 대상을 ModelServer의 BUILD
파일에 추가합니다.
tensorflow_serving/model_servers/BUILD
편집하여 server_lib
대상에 포함된 SUPPORTED_TENSORFLOW_OPS
에 사용자 지정 작업 빌드 대상을 추가합니다.
SUPPORTED_TENSORFLOW_OPS = [
...
"//tensorflow_serving/custom_ops/tensorflow_zero_out:zero_out_ops"
]
그런 다음 Docker 환경을 사용하여 ModelServer를 빌드합니다.
tools/run_in_docker.sh bazel build tensorflow_serving/model_servers:tensorflow_model_server
사용자 정의 작업이 포함된 모델 제공
이제 ModelServer 바이너리를 실행하고 이 사용자 지정 작업이 포함된 모델 제공을 시작할 수 있습니다.
tools/run_in_docker.sh -o "-p 8501:8501" \
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server \
--rest_api_port=8501 --model_name=<model_name> --model_base_path=<model_base_path>
작업을 수동으로 테스트하기 위해 추론 요청 보내기
이제 모델 서버에 추론 요청을 보내 사용자 지정 작업을 테스트할 수 있습니다.
curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'
이 페이지에는 모델 서버에 REST 요청을 보내기 위한 보다 완전한 API가 포함되어 있습니다.