본문 바로가기
archive.tar

[Tensorflow-Serving] 텐서플로우 서빙 설치 하기

by 냉동만두 2017. 6. 24.

개요


Tensorflow Serving Inception-v3 원격 이미지 추론 서버 만들기.

기존의 추론 스크립트를 클래스화 시켜서 필요 시마다 호출 하는 방법도 있지만 serving을 사용해 본다

마침 inception 예제를 제공한다

Tensorflow, Bazel가 먼저 설치 되어 있어야 한다.

tensorflow와 각종 model을 사용 시 이상이 없는 환경에서 한다



준비 : 필요한 패키지 설치


serving을 사용하기 전 필요한 패키지를 설치한다

미리 설치한 패키지는 자동으로 넘어간다

sudo apt-get update && sudo apt-get install -y \ build-essential \ curl \ libcurl3-dev \ git \ libfreetype6-dev \ libpng12-dev \ libzmq3-dev \ pkg-config \ python-dev \ python-numpy \ python-pip \ software-properties-common \ swig \ zip \ zlib1g-dev



준비 : Tensorflow-Serving 소스


https://github.com/tensorflow/serving


적절한 곳에 전체 소스코드를 받는다

git clone https://github.com/tensorflow/serving.git

여기서 tensorflow , tf_model 폴더는 비어있는 폴더다.

이 폴더 안에는 ttensorflow 소스코드 , models 소스코드를 추가로 가져와야 한다

하지만 자신이 기존에 사용했던 tensorflow 소스코드 , models 소스코드 사용 하려면 따로 설정할 수 있다



준비 : 컴파일 사전 설정


컴파일 환경 설정을 바꿔야 한다

python 실행 환경, 기존의 tensorflow 소스코드 , models 소스코드  위치를 지정한다

이번 설정은 특히 오타와 경로에 주의하여 작업한다

여기서 잘못되면 오류 뿜뿜


1. Python 기본 경로 설정

gedit serving/tools/bazel.rc


가운데 부분만 건들면 된다


build:cuda --crosstool_top=@org_tensorflow//third_party/gpus/crosstool
build:cuda --define=using_cuda=true --define=using_cuda_nvcc=true

build --force_python=py2
build --python2_path=/usr/bin/python

build --action_env PYTHON_BIN_PATH="/usr/bin/python"

build --define PYTHON_BIN_PATH=/usr/bin/python
test --define PYTHON_BIN_PATH=/usr/bin/python
run --define PYTHON_BIN_PATH=/usr/bin/python

build --spawn_strategy=standalone --genrule_strategy=standalone
test --spawn_strategy=standalone --genrule_strategy=standalone
run --spawn_strategy=standalone --genrule_strategy=standalone


빨간 글씨만 자신의 환경에 맞춰 한다.

나는 anaconda2의 파이썬을 사용 하기 때문에 아래와 같이 수정 했다

위와 같이 자신의 경로에 맞게 설정 한다


2. tensorflow 소스코드 경로 설정

gedit serving/WORKSPACE 

workspace(name = "tf_serving")

local_repository(
    name = "org_tensorflow",
    path = "tensorflow",
)

# TensorFlow depends on "io_bazel_rules_closure" so we need this here.
# Needs to be kept in sync with the same target in TensorFlow's WORKSPACE file.
http_archive(
    name = "io_bazel_rules_closure",
    sha256 = "4be8a887f6f38f883236e77bb25c2da10d506f2bf1a8e5d785c0f35574c74ca4",
    strip_prefix = "rules_closure-aac19edc557aec9b603cd7ffe359401264ceff0d",
    urls = [
        "http://mirror.bazel.build/github.com/bazelbuild/rules_closure/archive/aac19edc557aec9b603cd7ffe359401264ceff0d.tar.gz",  # 2017-05-10
        "https://github.com/bazelbuild/rules_closure/archive/aac19edc557aec9b603cd7ffe359401264ceff0d.tar.gz",
    ],
)

# Please add all new TensorFlow Serving dependencies in workspace.bzl.
load('//tensorflow_serving:workspace.bzl', 'tf_serving_workspace')
tf_serving_workspace()

# Specify the minimum required bazel version.
load("@org_tensorflow//tensorflow:workspace.bzl", "check_version")
check_version("0.4.5")

빨간 글시 부분을 자신이 사용하던 tensorflow 소스코드 경로를 지정 한다.


3. models 소스코드 경로 설정

gedit /serving/tensorflow_serving/workspace.bzl



# TensorFlow Serving external dependencies that can be loaded in WORKSPACE
# files.

load('@org_tensorflow//tensorflow:workspace.bzl', 'tf_workspace')

# All TensorFlow Serving external dependencies.
# workspace_dir is the absolute path to the TensorFlow Serving repo. If linked
# as a submodule, it'll likely be '__workspace_dir__ + "/serving"'
def tf_serving_workspace():
  native.new_local_repository(
    name = "inception_model",
    path = "tf_models/inception",
    build_file = "tf_models/inception/inception/BUILD",
  )

  tf_workspace(path_prefix = "", tf_repo_name = "org_tensorflow")

  # ===== gRPC dependencies =====
  native.bind(
    name = "libssl",
    actual = "@boringssl//:ssl",
  )

  native.bind(
      name = "zlib",
      actual = "@zlib_archive//:zlib",
  )

빨간 글씨 부분만 맞게 수정



컴파일 : tensorflow-serving 컴파일


위의 설정을 다시 한번 확인해 보고 하자

serving 폴더의 루트로 가서 터미널 열고

아래를 입력한다. 이때 뒤에 ... 오타 아니니 꼭 그대로 복사하기

그리고 기다리기/....

bazel build -c opt tensorflow_serving/...

위와 같이 입력하면 컴파일 시작 한다. 무수히 많은 경고가 뜨지만 잡을 자신이 없어

빨간 에러만 없으면 오케이


컴파일이 끝났다.


서버 정보를 볼까?

bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server

포트 번호부터 플래그에 대한 설명 기타등등 많아요


테스트 : tensorflow-serving 테스트 (선택)


컴파일이 잘 되었으니 테스트 기능을 해보자

처음 실행시키면 좀 걸린다

 bazel test tensorflow_serving/...


이런거 나오고 끝난다

여기까지 완료 했다면 Tensorflow-Serving 기본 준비 완료 !