Google снова лидирует в пространстве и определяет, как мы создаем и развиваем технологии. Стремление стать лидером в AI - не шутка, и они никого не ждут. Недавно они анонсировали Tensorflow Serving, API, который позволяет специалистам по обработке данных легко запускать предварительно созданный сверхбыстрый RESTFUL API для обслуживания своих моделей в среде, готовой к производству. Он включает в себя возможность обслуживать разные модели, И возможность одновременно обслуживать разные версии одной и той же модели. Слишком хорошо, чтобы быть правдой? Это Google, так что нет.

Начиная

Google упростил начало работы, предоставив нам файл докера.

Установить Docker

Для тех, кто не был знаком с докером до этого, как и я, позвольте мне сказать вам, что он значительно упрощает вашу жизнь, особенно для таких вещей. Поэтому, если у вас не установлен Docker, щелкните здесь, чтобы установить его.

Начать установку обслуживания Tensorflow

Начните с клонирования Tensorflow Serving Repo

git clone https://github.com/tensorflow/serving
cd serving/tensorflow_serving/tools/docker

В этом каталоге докеров вы увидите 3 файла.

  • Dockerfile, это минимальная виртуальная машина с предварительно установленной и скомпилированной службой TensorFlow.
  • Dockerfile.devel, это минимальная виртуальная машина со всеми зависимостями, необходимыми для построения TensorFlow Serving.
  • Dockerfile.devel-gpu, которая представляет собой минимальную виртуальную машину со всеми зависимостями, необходимыми для создания TensorFlow Serving с поддержкой графического процессора.

Я хотел, чтобы вы клонировали это репо, чтобы ознакомиться с кодом и примерами. Однако я создал свой собственный Dockerfile, который лучше подходит для быстрого обучения и тестирования. Щелкните здесь, чтобы перейти по ссылке репо. В этом репо также есть готовые модели, которые мы позже построим в этой серии.

Клонируйте репо на рабочем столе или в домашнем каталоге.

git clone https://github.com/brianalois/tensorflow_serving_tutorial.git

Сделайте сборку докеров, используя Dockerfile в моем репо. Это займет около 3-5 минут.

cd tensorflow_serving_tutorial
docker build --pull -t test-tensorflow-serving .

Запустите этот недавно созданный образ докера и войдите в виртуальную среду.

Или (если хотите скомпилировать самостоятельно)

Я предлагаю большинству людей просто создавать из моего образа докера и пропустить эту часть.

Если вы хотите скомпилировать подачу tf из исходного кода, вы можете это сделать. В исходном репозитории tf, где у них есть образы докеров, запустите эту команду (это займет от 30 минут до 2 часов, в зависимости от вашего компьютера):

cd serving/tensorflow_serving/tools/docker
docker build --pull -t test-tensorflow-serving -f Dockerfile.devel .

Однако в зависимости от вашего компьютера эта команда может завершиться ошибкой. Это сработало для меня, и в настоящее время у меня есть лучший Mac, поэтому вам, вероятно, потребуется запустить эту команду, чтобы скомпилировать ее самостоятельно.

#however based on the ram of your computer you may have to run this
docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
--cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_resources 2048,.5,1.0" -t \
test-tensorflow-serving -f Dockerfile.devel .

Запустите образ Docker

Теперь, когда он построен, независимо от того, как вы это сделали, мы можем начать его запускать. Следующая команда не является прямым копированием и вставкой. Здесь вы должны использовать абсолютные пути к тому, который хотите использовать для своей докер-машины. Мы будем использовать каталог model_volume в только что клонированном репо. Мой путь - «/ Users / Brian / Desktop / model_volume /». Замени на любой ваш путь.

Совет: вы можете запустить эту команду в своем каталоге, чтобы найти путь

pwd

Затем запустите эту команду со своим абсолютным путем:

docker run -it -p 8500:8500 -p 8501:8501 -v /Users/Brian/Desktop/tensorflow_serving_tutorial/model_volume/:/home/ test-tensorflow-serving

Теперь, если все работает, вы должны быть в своем докере, и ваша оболочка должна что-то искать.

root@15954c4d0666:/#

Если это правильно, ВЫ ВХОДИТЕ!

Теперь мы можем перейти к забавной части и запустить tenorflow serve api:

tensorflow_model_server --port=8500 --rest_api_port=8501 --model_config_file=/home/configs/models.conf

Это в основном запускает сервер и обслуживает остальные api на порту 8501. Он использует конфигурацию из этого каталога на виртуальной машине /home/configs/models.conf, но на самом деле это относится к файлу в репо в этом каталоге.

cat model_volume/configs/models.config

Этот файл содержит информацию о конфигурации для сервера, чтобы он мог правильно обслуживать модели в репо. Давайте посмотрим на это очень быстро:

model_config_list: {
  config: {
    name:  "xor",
    base_path:  "/home/models/xor",
    model_platform: "tensorflow",
    model_version_policy: {
        all: {}
    }
  },
  config: {
    name:  "iris",
    base_path:  "/home/models/iris",
    model_platform: "tensorflow",
    model_version_policy: {
        all: {}
    }
  }
}

Это довольно очевидно, важно то, что если вы хотите обслуживать все версии своей модели, эта часть необходима, если у вас ее нет, то она будет обслуживать только последнюю модель:

model_version_policy: {
   all: {}
}

Версии модели определяются по именам вложенных каталогов в этом конкретном каталоге модели.

Теперь давайте протестируем !!

Откройте другой терминал, чтобы сделать несколько запросов на завиток. Вы можете / должны использовать Postman, если хотите.

Ирис Классифицируйте

curl -X POST \
  http://localhost:8501/v1/models/iris:classify \
  -H 'cache-control: no-cache' \
  -H 'postman-token: f7fb6e3f-26ba-a742-4ab3-03c953cefaf5' \
  -d '{
 "examples":[
   {"x": [5.1, 3.5, 1.4, 0.2]}
  ]
}'

Ответ:

{
    "results": [
        [
            [
                "Iris-setosa",
                0.872397
            ],
            [
                "Iris-versicolor",
                0.108623
            ],
            [
                "Iris-virginica",
                0.0189799
            ]
        ]
    ]
}

Ирис Прогноз

curl -X POST \
  http://localhost:8501/v1/models/iris/versions/2:predict \
  -d '{
 "signature_name": "predict-iris",
 "instances":[
  [5.1, 3.5, 1.4, 0.2]
 ]
}'

отклик:

{
    "predictions": [
        [
            0.872397,
            0.108623,
            0.0189799
        ]
    ]
}

Вот так! Все готово. Теперь вам должно быть интересно, как построить, обучить и сохранить мои модели в формате, который распознает этот API. Щелкните здесь, чтобы перейти ко второй части этой серии статей, которая отвечает на эти вопросы.

Удачи

- - Брайан Алоис Шардт