Последняя миля в любом проекте машинного обучения - это развертывание решения, чтобы оно могло делать то, для чего было создано: улучшать жизнь людей. После того, как наши модели обучены и мы удовлетворены точностью модели, следует выполнить развертывание. И если мы намерены развернуть в производственной среде в большом масштабе, то обслуживание TensorFlow на графических процессорах в настоящее время является оптимальным вариантом. Кроме того, в зависимости от сложности решения для науки о данных, несколько моделей часто используются в ансамбле или в линейном каскаде. Здесь я обсуждаю, как:
- Настройка сервера модели TensorFlow на машине с графическим процессором
- Одновременное размещение нескольких моделей на сервере и
- Отправляйте запросы классификации изображений на сервер от клиента 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 он и его команда создают решения на основе искусственного интеллекта для решения самых насущных проблем здравоохранения в мире. Он живет со своей семьей в Хьюстоне, штат Техас.