Изображение предоставлено: Pexels
Авторы: Чжэн Бин, Мао Баолун, Пань Чжичжэн
Alluxio — это распределенная система оркестрации данных на уровне памяти с открытым исходным кодом для приложений искусственного интеллекта и больших данных. С переносом больших данных и сервисов ИИ на платформы управления контейнерами, такие как Kubernetes, Alluxio используется в качестве промежуточного уровня для ускорения таких сценариев, как запрос данных и обучение моделей, и стал предпочтительным решением для различных производителей.
Проблема, которую Alluxio решает в офлайн-игровом бизнесе игрового ИИ, может быть абстрагирована как: зависимость от данных в сценариях распределенных вычислений.Традиционные решения зависимости от данных включают:
- Упаковка образов, этот метод имеет лучшую изоляцию, но возможности использования кэширования изображений ограничены, а данные часто обновляются, каждый раз образ должен быть переупакован и развернут, а служба должна быть остановлена для замены контейнера;
- Готов к использованию, общая архитектура проста, но каждый раз при доступе к данным их необходимо извлекать с удаленного конца, а производительность низкая;
- Локальное развертывание, хорошая локализация данных, но решает проблемы с разрешениями и операционные трудности.
Эти методы имеют свои преимущества и недостатки. Внедрение Alluxio может значительно увеличить лимит параллелизма задач ИИ без чрезмерного увеличения стоимости.В то же время программа задач ИИ по-прежнему использует оригинальный метод POSIX для доступа к Alluxio, поэтому бизнес не знает об изменениях в система хранения.
В этой статье в основном представлена адаптация и оптимизация Alluxio на платформе вычислительной мощности и бизнесе игровых вычислений AI.
задний план
Бизнес офлайн-обучения игровому ИИ делится на два сценария: обучение с учителем и обучение с подкреплением. Среди них в сценарии контролируемого обучения он обычно делится на расчет признаков, обучение модели и оценку модели. В некоторых сценариях обучения с подкреплением также потребуется вычисление признаков. При расчете признаков игровой сцены ИИ необходимо восстановить игровую информацию, а затем сгенерировать данные признаков, необходимые для обучения модели, с помощью статистики и вычислений. Восстановление игровой информации должно проходить через соответствующие игровые зависимости (тело игры, транслятор игры, средство воспроизведения игры и т. д.), при нормальных обстоятельствах размер игровых зависимостей составляет от 100 МБ до 3 ГБ. Версия игры определяет, что конкретная игровая информация требует расчета конкретной версии игры.
Gamecore на стороне хранилища — это игровая зависимость, которая соответствует игровой версии клиента Linux. Размещение ядра игры в локальном хранилище сервера обеспечивает лучшую производительность чтения и стабильность, но требует больших затрат и требует собственных разрешений.
Другим решением является хранение ядра игры в распределенном хранилище, например ceph, чтобы данные могли обновляться быстрее, а развертывание было проще.Каждый контейнер будет запускать несколько бизнес-процессов.В начале задачи будут тысячи десятки тысяч процессов, обращающихся к одному и тому же игровому ядру параллельно.Есть сотни ГБ считанных данных на стороне хранилища в минуту.Поскольку все они представляют собой небольшие файлы, MDS выдержит все давление метаданных, кроме того, задержка между хранением и сервисы обычно высоки, особенно когда они не находятся в одном регионе, что может привести к увеличению частоты отказов задач.
После всестороннего рассмотрения мы представили решение Alluxio на Ceph, чтобы решить болевые точки текущей бизнес-ситуации.В этом процессе мы хотели бы поблагодарить команду искусственного интеллекта Tencent Games и команду управления операциями за их мощную поддержку.Искусственный интеллект игры Команда ознакомила нас с общим бизнес-предысторией и скоординировала Квази-онлайн-среда и живая сетевая среда позволяют нам полностью протестировать решение и внедрить его в производственную среду Команда управления операциями также оказала большую помощь в развертывании проблем с архитектурой и координация ресурсов.
Бизнес поддержка
В экосистеме больших данных Alluxio находится между платформами или приложениями, управляемыми данными, и различными системами постоянного хранения. Alluxio объединяет данные, хранящиеся в этих разных системах хранения, предоставляя унифицированный клиентский API и глобальное пространство имен для своих приложений верхнего уровня, управляемых данными. В нашем сценарии базовое хранилище — cephfs, а приложение — вычисление признаков.Alluxio используется в качестве среднего уровня для предоставления услуг распределенного общего кэша, что очень подходит для бизнеса вычислений признаков, таких как одна запись, несколько чтений, небольшие файлы и сценарии с высоким одновременным доступом. В основном это отражается в нескольких аспектах:
- Alluxio обеспечивает хорошую поддержку облака, что позволяет легко развертывать, расширять и сокращать кластер Alluxio на платформе вычислительной мощности.
- Alluxio можно развернуть рядом с предприятием, связать бизнес и сотрудников Alluxio с одним и тем же узлом и повысить пропускную способность ввода-вывода за счет локального кэша.
- Рабочие процессы Alluxio используют диск памяти узла вычислительной платформы, который может предоставить достаточно места для кэша.Данные точки доступа cephfs базового хранилища загружаются в рабочие процессы через распределенную загрузку, а некоторые предприятия напрямую получают доступ к игровому ядру через Alluxio, чтобы уменьшить нагрузку на базовый Цефы хранения.
На следующем рисунке показана архитектура взаимосвязанного бизнеса Alluxio. В этом запуске мы надеемся обеспечить стабильную работу параллельных задач с 4000 ядер. Для бизнеса игровых функций каждый модуль задач настроен на четырехъядерный процессор, который обеспечивает Параллелизм 1000 pod на стороне бизнеса. , каждый pod встраивает контейнер sidecar alluxio-fuse в качестве клиента, а запросы на чтение бизнес-данных напрямую обращаются к данным Alluxio в форме POSIX через локальный путь, смонтированный alluxio-fuse.
Мастер-узел кластера Alluixo настроен в режиме высокой доступности, а масштаб рабочих процессов составляет 1000. Мы надеемся максимально связать бизнес-модуль и рабочий модуль на одном узле. Преимущество этого заключается в том, что мы можем использовать домен максимально возможное количество сокетов, что еще больше улучшит производительность чтения. Перед запуском бизнеса предварительно загрузите данные версии gamecore версии хотспота в cephfs в воркеры Alluxio для предварительного прогрева через распределённую загрузку.
НИОКР тюнинг
Кластер Alluxio, в настоящее время предоставляющий услуги функциональных вычислений, представляет собой крупномасштабный случай развертывания (более 1000 рабочих узлов) в сценариях искусственного интеллекта и машинного обучения. Такой большой одновременный доступ со стороны бизнеса также является проблемой для несущей способности главного узла.Во время онлайн-процесса он также подвергался многократной настройке и разработке новых функций для достижения наилучших результатов.
Разработка
- Для этого сценария расчета функции + использования Cephfs разработаны и реализованы базовая реализация хранилища cephfs на основе HCFS + cephfs-hadoop + libcephfs и базовая реализация хранилища непосредственно на основе libcephfs.
- Разработан совместно с сообществом Alluxio для реализации функции HA переключения лидера на назначенный мастер-узел.
Мы абстрагируем функции, связанные с ratis, в отдельный инструмент ratis-shell.С помощью ratis-shell мы можем отправить запрос setConfiguration на прямой сервер ratis, чтобы установить приоритет каждого мастера, а затем отправить запрос TransferLeader, чтобы подтвердить, что лидер имеет переключился на указанный узел. ratis-shell доступен для Alluxio и Ozone, а также для всех других приложений, использующих ratis.
- Добавьте функцию динамического изменения конфигурации, вы можете изменить некоторые параметры кластера онлайн, и оптимизировать конфигурацию, максимально не влияя на бизнес.
Как показано на рисунке выше, между Клиентом и Мастером добавляется API updateConf.Через этот API можно отправить запрос на изменение конфигурации на Мастер Alluxio.После того, как мастер обновит конфигурацию, изменится и его внутренний хеш конфигурации. Другие клиенты, рабочие процессы и другие службы, подключенные к мастеру Alluxio, будут периодически синхронизировать хэш конфигурации с мастером, а также отслеживать изменения конфигурации, тем самым синхронизируя измененную конфигурацию.
- На стороне клиента Alluxio Fuse для сценария почти полного чтения откройте кеш ядра и кеш метаданных на стороне клиента Alluxio, чтобы еще больше повысить производительность чтения, а также оптимизировать кеш метаданных. изменения метаданных хранилища. Вы можете активно аннулировать кэш метаданных, повторно кэшировать и повышать гибкость. Кроме того, было исправлено несколько ошибок, появлявшихся после включения LocalCache в Alluxio FUSE.
- Увеличьте индикатор занятости основного доступа, индикатор Ratis, ОС, JVM, GC, частоту попаданий в кэш и многие другие ценные индикаторы, обогащая систему индикаторов Alluxio.
- Разработать функцию просмотра стеков ключевых процессов Alluxio, что нам удобно для отслеживания состояния кластера.
- Воспользуйтесь всеми преимуществами функции прогрева распределенной загрузки, во время которой была устранена проблема OOM службы заданий Alluxio при выполнении большого количества распределенных нагрузок.
Оптимизация конфигурации
- Чтобы настроить количество реплик рабочего блока, Alluxio включает функцию пассивного кэширования по умолчанию alluxio.user.file.passive.cache.enabled=true.Если клиент обнаружит, что блок данных не находится в локальном рабочем блоке, он скопирует реплика с удаленного работника на локальный.Воркеры должны хранить много копий. В сценарии с масштабом 1000 воркеров эта конфигурация добавит огромное давление метаданных на мастер Alluxio.Результаты тестирования показывают, что прирост производительности, обеспечиваемый этой локализацией, на самом деле очень мал.Поэтому эта конфигурация закрыта, чтобы уменьшить рабочую нагрузку мастера. , давление.
- Используя внутренний kona jdk11 Tencent и настроив параметры jvm мастера и рабочего, выполняя одну и ту же рабочую нагрузку, используя konajdk11 + g1gc, нет проблемы переключения лидер-мастер, вызванной fullgc.
- С помощью команды jvm Tencent мы обнаружили узкое место нашего сценария чистого чтения, включив журнал аудита.Установив alluxio.master.audit.logging.enabled=false для отключения журнала аудита, пропускная способность увеличилась в 7 раз. С помощью графа пламени, полученного с помощью kona-profiler, мы обнаружили, что метод управления метаданными с использованием ROCKSDB увеличивает нагрузку на производительность.Далее мы планируем использовать метод управления метаданными HEAP для Alluxio.
Сравнительный тест
Мы сравнили бизнес мобильных игр и функциональных вычислений с Alluxio (UFS — это cephfs) и cephfs. Информация о кластере Alluxio в тесте выглядит следующим образом:
- alluxio master: Высокодоступное развертывание 3 мастеров.
- alluxio worker: 1000 рабочих, около 4 ТБ дискового пространства.
- Бизнес-модули: 1000, каждый модуль — это параллельная задача 4 ядер.
- Тестовый бизнес: задача расчета характеристик ИИ для игры moba (включая 250 000 игр).
По результатам тестирования оба решения могут удовлетворить потребности бизнеса, а частота отказов находится в допустимом диапазоне.После использования решения Alluxio + cephfs частота отказов бизнеса ниже.
Глядя на метрики давления метаданных Alluxio и cephfs (количество rpc и qps mds), в начале задачи будет шок, а затем давление мастер-метаданных будет постепенно снижаться. В случае использования Alluxio для ведения бизнеса скорость запросов в секунду для ceph mds почти равна 0, что указывает на то, что Alluxio выдержал большую часть давления со стороны бизнеса.
Наблюдайте за локальностью данных с помощью индикаторов Read Remote, Read UFS, Read Domain.Видно, что Remote Read и Read Domain приходится на основную часть, и большая часть трафика чтения приходится на удаленное чтение между worker и чтение сокета локального домена. , читал из УФС Очень мало случаев.
На картинке выше показана кривая изменения памяти кучи в процессе выполнения задачи после использования kona jdk11.При использовании официальной версии kona jdk11 до этого у мастера возникала проблема переключения лидера из-за слишком долгого времени gc.После замены kona jdk11, такого явления не возникало, и мастер был более стабильным.
будущая работа
Увеличение пропускной способности
В настоящее время мастер Alluxio находится под давлением параллелизма ядра 7000. Было обнаружено, что очередь вызовов мастера имеет отставание, а пропускная способность почти 210 000 запросов rpc в секунду достигается через инструмент masterStressBench.
Чтобы реализовать кластер alluxio для поддержки бесконечных требований бизнеса к одновременному доступу, недостаточно только настроить один кластер, также необходимо разработать общую архитектуру, которая может поддерживать более высокий уровень одновременного доступа.
Разделение Business и Alluxio FUSE с помощью Alluxio CSI
В настоящее время Alluxio FUSE находится в том же модуле, что и бизнес, в виде sidecar, так что бизнес-сторона может независимо поддерживать бизнес-модуль и соответствующий yaml, и ему необходимо управлять бизнес-контейнером и контейнером Alluxio-FUSE в бизнес-модуль вместе с бизнес-командой.
Создание системы управления кластером Alluxio на kubernetes
Мы поддерживаем набор решений для работы и обслуживания кластеров Alluxio на основе шаблона диаграммы управления, предоставленного Alluxio, но мы надеемся пойти еще дальше.На основе API kubenetes мы можем управлять каждым модулем и контейнером и интерактивно выполнять команды, которые Основываясь на этом, мы можем реализовать операции монтирования и размонтирования нижнего хранилища, визуальное управление сервисами заданий и построение сервисов без нагрузки.
Суммировать
Во время внедрения сервисов Alluxio и игровых ИИ-вычислений мы поддерживали стабильную работу 4000 ядер на стороне бизнеса.С точки зрения использования, Alluxio может выдерживать большую часть давления метаданных для базового распределенного хранилища, снижая частоту отказов задач до уровня, который удовлетворяет бизнес. Кроме того, высокопараллельные и крупномасштабные бизнес-сценарии также выявили многие проблемы ядра Alluxio.Мы также внесли все их в версию Alluxio с открытым исходным кодом, а также улучшили стабильность, а также возможности эксплуатации и обслуживания Alluxio. ядро, которое может быть адаптировано к большему в будущем.Сцена падает.