Последняя миля в любом проекте машинного обучения - это развертывание решения, чтобы оно могло делать то, для чего было создано: улучшать жизнь людей. После того, как наши модели обучены и мы удовлетворены точностью модели, следует выполнить развертывание. И если мы намерены развернуть в производственной среде в большом масштабе, то обслуживание TensorFlow на графических процессорах в настоящее время является оптимальным вариантом. Кроме того, в зависимости от сложности решения для науки о данных, несколько моделей часто используются в ансамбле или в линейном каскаде. Здесь я обсуждаю, как:

  1. Настройка сервера модели TensorFlow на машине с графическим процессором
  2. Одновременное размещение нескольких моделей на сервере и
  3. Отправляйте запросы классификации изображений на сервер от клиента Python на основе RESTful API.

А) ОСНОВНЫЕ УСТАНОВКИ:

Чтобы использовать графические процессоры, вы не можете использовать докер для разнообразных садов, вместо этого вам нужно будет установить версию nvidia-docker (1 или 2). Я настоятельно рекомендую nvidia-docker 2. Следует отметить, что nvidia-docker устарел и уже имеет проблемы совместимости с версиями TF и ​​т. Д. Если у вас есть nvidia-docker на вашем компьютере, вам нужно будет удалить его с помощью следующего кода (если у вас еще не установлен nvidia-docker, перейдите к следующему блоку). Ниже приведен процесс установки nvidia-docker 2.0 для операционной системы Ubuntu 18.04, которую я использую:

Сначала удалите nvidia-docker (если он у вас есть)

$docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1
$docker ps -q -a -f volume={} | xargs -r docker rm -f
$sudo apt-get purge nvidia-docker

Далее, curl в репозиториях git

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd

ДАЛЕЕ. Запустите NVIDIA-SMI, чтобы убедиться, что все работает, и обеспечить совместимость между версией CUDA и версией драйвера nvidia. На моей машине получилось следующее:

В моей системе мне пришлось специально установить драйвер (430.26), который был совместим с моей версией CUDA 10.2. В таблице ниже показано, какие версии драйверов nvidia совместимы с какими версиями CUDA:

Б) НАСТРОЙКА ОБСЛУЖИВАНИЯ ТЕНЗОРНОГО ПОТОКА

Получите последний образ тензорного потока / обслуживающего докера для графического процессора с помощью следующей команды:

$ docker pull tensorflow/serving:latest-gpu

Успешный процесс извлечения будет выглядеть следующим образом:

Затем клонируйте обслуживающий репозиторий tensorFlow следующим образом:

$ mkdir -p /tmp/tfserving
$ cd/tmp/tfserving
$ git clone https://github.com/tensorflow/serving

C) СЕРВЕР МОДЕЛИ ДЛЯ ОДНОЙ МОДЕЛИ

Чтобы настроить сервер для обслуживания одной модели, введите следующую команду:

docker run --runtime=nvidia -p 8501:8501 \
 --mount type=bind,source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,target=/models/half_plus_two \
 -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &

Приведенный выше код можно понять следующим образом, по частям: он инструктирует об использовании графического процессора (--runtime = nvidia) и открывает порт 8501, предназначенный для обмена сообщениями RESTful. Затем он связывает порт 8501 контейнера докеров с портом 8501 хост-машины (-p 8501: 8501). Затем местоположение модели машинного обучения на хост-машине привязывается к местоположению, в которое она будет скопирована в контейнере докеров (_2 _ = ‹местоположение модели на хосте›, target = ‹местоположение модели в контейнере›). Затем переменная среды, представляющая имя модели, явно изменяется на имя, которое мы выбрали для вызова нашей модели (-e MODEL_NAME = ‹имя модели›). И, наконец, мы указываем, что мы запускаем tenorFlow, обслуживающий (-t tensorflow / serve: latest-gpu). Примечательно, что каждая часть кода имеет настройки по умолчанию, о которых мы должны знать. Например, целевое местоположение модели в контейнере докеров по умолчанию равно / models / model, то есть model_base_path = / models / model по умолчанию.

При успешном запуске приведенного выше кода появится следующий экран:

D) КЛИЕНТ PYTHON ДЛЯ ОДНОЙ МОДЕЛИ

Для клиента python мы будем использовать пакет запросов, как показано ниже.

пакет base64 используется для преобразования нашего изображения в строку b64, которая преобразована в формат json, как показано. Запрос на прогноз json - это параметр данных в сообщении request.post, которое мы отправляем на сервер. Доступ к серверу осуществляется через его URL-адрес, который в данном случае выглядит следующим образом: http: // localhost: 8501 / v1 / models / resnet: predic. Анализируя URL-адрес, мы видим, что сервер работает на локальном хосте, ожидая сообщений RESTful. на порту 8501 и готов к обслуживанию версии 1 модели, расположенной в каталоге models / resnet контейнера докеров. Запрос предназначен для предсказания. Прогноз возвращается в resp и может быть обнаружен путем проверки декодирования его содержимого в формате utf-8.

E) СЕРВЕР МОДЕЛЕЙ ДЛЯ НЕСКОЛЬКИХ МОДЕЛЕЙ

Model_Config_File - это ключевой ингредиент, необходимый для настройки сервера tensorFlow, который может хранить несколько моделей в одном контейнере докеров и обслуживать их через общий порт.

Есть несколько способов реализовать это. Я предпочитаю запускать сервер de novo таким образом, чтобы все порты и ресурсы были связаны и подключены во время запуска. Затем это позволяет нам использовать по существу тот же клиент Python, который мы использовали для случая единственной модели. Таким образом, этот подход проще в настройке и использовании. Альтернативный подход требует клиента gRPC и включает в себя еще несколько шагов при настройке. Чтобы продолжить наш предпочтительный подход, используйте следующую команду:

Команда запуска сервера аналогична единственной модели за исключением model_config.config. Этот файл конфигурации модели привязывается от местоположения хоста к желаемому местоположению в контейнере. И, как показано, он также указывается в качестве аргумента функции.

Успешный запуск этого сервера должен выглядеть примерно так:

F) КЛИЕНТ PYTHON ДЛЯ НЕСКОЛЬКИХ МОДЕЛЕЙ

Клиент python для сервера с несколькими моделями по существу идентичен клиенту для одной модели. Единственное отличие состоит в том, что вы специально вызываете нужную модель, указывая ее в URL-адресе запроса. Как показано:

УСПЕХ! Вместе мы установили сервер tensorFlow на хост-машине с графическим процессором; мы разместили на сервере две разные модели машинного обучения и предоставили один порт RESTful, 8501; мы запросили каждую из моделей машинного обучения на сервере о классе изображения; и, наконец, мы получили ответы на прогнозы, которые мы успешно изучили.

G) ЗАКЛЮЧЕНИЕ

Выше показано, как выполнять обслуживание TensorFlow нескольких моделей машинного обучения клиенту API RESTful на Python. Этот подход к обслуживанию модели машинного обучения сочетает в себе масштабируемость и удобство использования TensorFlow Serving с простотой использования клиентской части RESTful API. Надеюсь, вы нашли эту статью полезной.

REFERENCES
nvidia-docker2 installation
https://devblogs.nvidia.com/gpu-containers-ruoutput of ntime/
nvidia-driver CUDA compatibility
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
nvidia-docker2 installation:
https://medium.com/@sh.tsang/docker-tutorial-5-nvidia-docker-2-0-installation-in-ubuntu-18-04-cb80f17cac65
On getting Server running
https://www.tensorflow.org/tfx/serving/docker

BIO

Доктор Стивен Г. Одайбо является генеральным директором и основателем RETINA-AI Health, Inc., работает на факультете онкологического центра доктора медицины Андерсона. Он врач, специалист по сетчатке глаза, математик, компьютерный ученый и инженер полного цикла искусственного интеллекта. В 2017 году он получил высшую награду UAB College of Arts & Sciences - Премию выдающихся выпускников. А в 2005 году он получил премию Барри Гурвица за выдающиеся достижения в области неврологии в Медицинской школе Duke Univ, где он стал лидером в классе неврологии и педиатрии. Он является автором книг «Квантовая механика и МРТ» и «Форма конечных групп: курс теории конечных групп». Доктор Одайбо председательствовал на симпозиуме «Искусственный интеллект и технологии в медицине» на заседании Национальной медицинской ассоциации в 2019 году. С помощью RETINA-AI он и его команда создают решения на основе искусственного интеллекта для решения самых насущных проблем здравоохранения в мире. Он живет со своей семьей в Хьюстоне, штат Техас.

www.retina-ai.com