커스텀 작업으로 TensorFlow 모델 제공

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가 포함되어 있습니다.