Tensorflow документация упоминает, что:
Любой класс С++ может быть обслуживаемым, например. int
, std::map<string, int>
или любой другой класс, определенный в вашем двоичном файле — назовем его YourServable
.
Tensorflow, обслуживающий бумагу, также упоминает, что
Он чрезвычайно гибок с точки зрения поддерживаемых типов платформ машинного обучения.
После некоторого чтения я обнаружил, что на практике обслуживание пользовательской модели (не ternsorflow) довольно сложно. Существует сложность внедрения в пользу гибкости библиотек, обслуживающих tensorflow. Это ни в коем случае не дисс по поводу обслуживания Google tensorflow и не негативный комментарий к их документации. Я кратко изучил, что потребуется для размещения другой модельной платформы, и я хотел бы поделиться своими выводами и получить отзывы от сообщества. Я ни в коем случае не являюсь экспертом в различных модельных платформах или в обслуживании тензорных потоков. Я не пытался реализовать что-либо из этого в коде. Я уверен, что вы найдете ошибки в моем объяснении, если вы действительно углубитесь в реализацию.
Есть много модельных платформ, которые можно использовать. XGBoost, LightGBM, SkLearn, pytorch….. В этом документе я бы посетил только XGBoost. Ряд подобных вопросов необходимо обсудить и для других модельных платформ.
Загрузка
Модель должна жить в каком-то файле по какому-то пути, и ее нужно загрузить в среду выполнения тензорного потока/обслуживания.
В документах упоминается, как создать собственный сервер. Пример загрузчика хэш-таблицы из код. Я думаю, вам нужно написать что-то подобное для XGBoost. XGBoost имеет c++ api и несколько примеров в модель загрузки xgboost в С++ (несоответствие оценок прогнозирования python → С++). Так что, по крайней мере, это возможно в теории. Однако для этого вам нужно написать новый код. Для этого вам нужно загрузить библиотеку XGBoost. Вам нужно либо использовать XGBoost во время компиляции, либо dlopen его библиотеку во время выполнения. Вам как минимум нужно разветвить код tensorflow/serving и поддерживать его самостоятельно. Это само по себе может означать поддержку вашей вилки практически на неопределенный срок.
Я думаю, что SimpleLoaderSourceAdapter может быть достаточно, поскольку однако стартер servables/tensorflow должен был создать свой собственный здесь . Поэтому вам может понадобиться написать свои собственные загрузчики и исходные адаптеры для вашей новой модели.
Заставить ServerCore загрузить вашу модель
Недостаточно иметь загружаемую модель. Ваша модель также должна быть динамически или статически загружена во время выполнения tensorflow/serving. Существуют различные способы передать байты вашей модели в tensorflow/serving. Простой подход состоит в том, чтобы иметь модель в файловой системе уже в обычном файле и загрузить вашу модель статически через model_server_config.proto#L19" rel="nofollow noreferrer">ModelConfig. Во время инициализации ServerCode перебирает эти записи ModelConfigList и считывает загрузки. эти модели.
Объект ModelConfig имеет поле model_platform и на момент написания этой статьи поддерживается только tensorflow в версии с открытым исходным кодом. Поэтому вам нужно добавить новую платформу model_platform, скажем XGBoost, и соответствующим образом изменить прото-файлы для ModelConfig.
Сервис Tensorflow Create a new Servable документация содержит пример кода, который напрямую вызывает функцию ConnectSourceToTarget
. Однако я не уверен, где лучше всего написать этот код в вашем приложении или насколько предпочтительнее было бы попытаться использовать существующие функции загрузки статической конфигурации в tensorflow, как описано ранее.
Предсказание
Мы говорили о некоторых настройках для загрузки вашей модели в среду выполнения tensorflow/serving. Я уверен, что есть куча других вещей, которые я пропустил, но я не думаю, что история на этом закончена.
Как бы вы использовали свою модель для предсказания?
Я полностью игнорирую сервер gRPC. Я уверен, что вам нужно сделать еще много настроек. Надеясь, что путь HTTP будет проще, обслуживание tensorflow имеет это HttpRestApiHandler, использующий TensorflowPredictor объект для вызова прогноза.
Вполне разумно ожидать написания класса XGBoostPredictor при первом добавлении платформы модели XBoost. Это будет содержать специальную функцию прогнозирования XGBoost. Это не слишком отличается от необходимости писать собственный загрузчик для чтения модели XGBoost из файла.
Я предполагаю, что вам также нужно каким-то образом расширить HttpRestApiHandler для вызова вашего XGBoostPredictor, когда модель является моделью XBoost. А также как-то добавить возможность различать TensorFlowPredictor или XBoostPreditor. Очевидный способ сделать это мне не ясен. Мне было бы очень интересно узнать лучшие подходы. Обслуживание Tensorflow также имеет Жизнь запроса на вывод TensorFlow Serving документация, которая может оказаться полезной.
В этом обсуждении мы не говорили об интеграции в возможность отладки или пакетная обработка функций обслуживания tensorflow . Конечно, они также требуют глубокого понимания и дополнительной работы для интеграции с моделью без тензорного потока.
Вывод
Я думаю, было бы очень ценно, если бы у кого-нибудь был пример с открытым исходным кодом, обслуживающий модель без тензорного потока через тензорный поток/обслуживание. Я согласен с утверждением в их статье, что обслуживание tensorflow чрезвычайно гибко. Базовые классы, не относящиеся к тензорному потоку, для загрузки, управления версиями и пакетной обработки довольно общие и гибкие. Однако с такой чрезвычайной гибкостью приходится платить сложностью при переходе на новую платформу машинного обучения.
В качестве отправной точки необходимо тщательно изучить пример serveables/tensorflow и ожидать такой же сложности для размещения другой модели платформы.
Помимо сложности реализации, я был бы чрезвычайно осторожен в поддержке нового программного обеспечения, которое вы собираетесь написать. Разумно рассчитывать на то, что вы будете владеть своим форком со всеми библиотеками в вашей организации на неопределенный срок или взаимодействовать с вышестоящим сообществом для расширения обслуживания tensorflow. В апстриме уже есть несколько предыдущих ошибок: 1694, 768, 637.
Платформа Google ML имеет возможность обслуживания моделей SKLearn и XGBoost в дополнение к моделям TensorFlow. В их бумаге также говорится:
Если серьезно, Google использует TensorFlow-Serving для некоторых проприетарных сред машинного обучения, отличных от TensorFlow, а также для TensorFlow.
Таким образом, подобные расширения, возможно, уже были реализованы поверх обслуживания тензорного потока. С другой стороны, статья была написана в 2017 году, и кто знает, что еще изменилось с тех пор.
person
Hakan Baba
schedule
21.07.2020