Наш главный архитектор, Олли, рассказывает нам о пробеле, который мы обнаружили при улучшении интеграции Pachyderm в Adarga Data Science Workbench, и о коде с открытым исходным кодом, который мы создали для его устранения; вся часть нашей инфраструктуры, которая обеспечивает высокоскоростной анализ данных и создание нашего программного обеспечения искусственного интеллекта.

Здесь, в Adarga, мы широко используем Pachyderm в рамках наших исследований и разработок. Наша команда специалистов по данным использует его для экспериментов с новыми моделями и потоками, а также для выполнения обычных пакетов обучающих заданий и т. Д. Pachyderm дает нам уверенность в том, что мы тщательно отслеживаем используемые данные и их происхождение, а также давая нам удобный способ выразить цепочку шагов, которые мы хотим применить к ней. Он лежит в основе того, что мы называем нашей инструментальной средой для обработки данных.

Несмотря на то, что специалисты по обработке данных имеют полную свободу действий для проведения любых экспериментов, которые им нравятся в Data Science Workbench, нам нравится применять к нему ту же инженерную дисциплину, что и во всех других наших кластерах Kubernetes, и с этой целью мы широко используем ArgoCD для поддержки подхода GitOps к управлению кластером. Это ключевая часть нашей внутренней истории MLOps; Это не только означает, что у нас есть хорошее понимание - и контрольный журнал - того, что работает в Data Science Workbench, но также снижает нагрузку - когнитивную нагрузку - на наших специалистов по данным с точки зрения запуска новых сервисов, уменьшая их потребность в понимать Kubernetes изнутри, и это позволяет нам предоставлять автоматизированные пути от Data Science Workbench к нашим производственным средам.

Предоставляя им абстракции, такие как объекты SeldonDeployment, мы сокращаем их взаимодействие до управления небольшим количеством простых для понимания декларативных манифестов. Но это вызвало проблему, когда мы впервые интегрировали Pachyderm. Несмотря на красивый декларативный синтаксис для определения конвейеров, единственный доступный метод взаимодействия с ними - через командную строку pachctl. Мы решили, что нам нужен способ переноса определений конвейеров Pachyderm в Kubernetes, чтобы мы могли управлять их жизненным циклом из кластера, запускаемого ArgoCD. После нескольких итераций, которые были несколько хрупкими с использованием различных комбинаций карт конфигурации и заданий, мы решили укусить пулю и создать контроллер, который справится с этим. И я рад сообщить, что теперь он очень хорошо работает для нас, и мы открыли исходный код.

Как работает контроллер

Ключевое отличие от обычного потока Pachyderm заключается в том, что мы ввели собственный объект PachydermPipeline. Он содержит ту же информацию, что и обычный файл определения конвейера толстокожего животного, но хранится в Kubernetes. Наш контроллер отслеживает эти объекты и будет отражать любые изменения в самом Pachyderm, используя pachd API.

На первый взгляд, особой ценности это не приносит. Процесс управления трубопроводами толстокожих в основном такой же; единственная ощутимая разница в том, в каком формате вы их храните и какую команду запускаете, чтобы изменения вступили в силу:

Однако это тонкое различие позволяет нам использовать существующий инструментарий ArgoCD для применения принципов GitOps к конвейерам. ArgoCD предназначен для обнаружения изменения манифеста Kubernetes в репозитории git и применения этого изменения к кластеру. Переключив определения конвейера на манифесты Kubernetes, он может применить свою логику и к ним.

Наличие конвейеров в качестве первоклассных объектов в Kubernetes дает вам дополнительный угол для выполнения запросов (хотя pachctl знает о конвейерах больше, чем контроллер, поэтому он все равно должен быть первым портом вызова):

и контроллер пытается правильно соединить эти новые объекты с объектами конвейера, созданными Pachyderm, для лучшей видимости, либо в командной строке:

или в визуализации кластера ArgoCD:

Текущий статус

На момент написания этот контроллер обладает достаточной функциональностью для наших внутренних нужд и в производственной среде развернут в нашей внутренней среде Data Science Workbench. Он не поддерживает полную спецификацию конвейера Pachyderm - только то подмножество, которое мы используем, так что мы надеемся найти время для улучшения (PR приветствуются!). Однако наш следующий план с точки зрения функциональности - добавить поддержку нескольких кластеров Pachyderm в один кластер Kubernetes и интегрировать новый механизм уведомлений проекта Argo, чтобы мы могли доставлять уведомления Slack пользователям при возникновении событий жизненного цикла конвейера.