- BrainTools - https://www.braintools.ru -

Привет! Меня зовут Алексей Архипенко, я руковожу группой разработки ML‑инфраструктуры в команде YTsaurus. Мы часть Yandex Infrastructure и предоставляем пользователям внутри Яндекса инфраструктурный фундамент для самых разных задач машинного обучения [1].
YTsaurus — основная платформа для хранения и обработки данных Яндекса, которая доступна на GitHub [2] под лицензией Apache 2.0. Это позволяет всем желающим загрузить систему на свои серверы, а также дорабатывать её под свои нужды. Мы уже писали в прошлых постах про её выход в опенсорс [3] и дальнейшее развитие [4], а также кейсы использования в рекламе [5]. Сегодня расскажу, как Яндекс запускает в ней почти все ML‑обучения и batch‑инференс.
На конференции Yandex Scale в сентябре 2025 года Никита Семёнов показал, как использовать YTsaurus для разработки интеллекта автономного транспорта [6]. Но это лишь часть более общего тренда: платформа используется в ML‑проектах разного масштаба. Чем в них полезен YTsaurus:
позволяет распараллеливать обучение и batch‑инференс от одной до тысяч GPU,
автоматически распределяет доступные вычислительные ресурсы между задачами,
даёт возможность работать с данными — от подготовки до хранения — единым способом.
За счёт этого мы улучшаем совместимость разных ML‑проектов и снижаем операционные издержки. Для Яндекса важно, что благодаря этому можно добиться постоянного использования имеющихся GPU и CPU, и поддерживать одну систему вместо нескольких.
В этом материале покажем, как попробовать возможности платформы самостоятельно. Внутри статьи вы также найдёте полную инструкцию с подробным описанием пяти сценариев практического воркшопа.
YTsaurus используется в Яндексе как платформа для хранения и обработки больших данных. Изначально он решал вполне классические задачи: надёжное хранение данных и запуск массовых batch‑вычислений. Мы прошли длинный путь оптимизации использования серверов — научились поддерживать необходимые гарантии для сервисов и при этом избегать простоев серверов.
Когда в Яндексе начал активно развиваться ML, всё больше сервисов стали использовать обучение моделей и batch‑инференс, а вместе с этим начала расти потребность [8] в GPU. На первых порах ML‑нагрузки существовали отдельно от YTsaurus: для них поднимались специализированные кластеры, писались свои обвязки и инструменты запуска. Но быстро стало понятно, что ML понадобится практически всем сервисам Яндекса.
В разных командах для обучения моделей существовали разные подходы и инструменты, GPU использовались точечно и часто были привязаны к отдельным системам. Это усложняло развитие ML‑нагрузок и мешало эффективно использовать дорогостоящие ресурсы. Постепенно стало очевидно, что для обучения моделей нужен единый инфраструктурный фундамент — с понятным планированием, гарантиями и тесной связью с данными, которые уже хранятся и обрабатываются в YTsaurus.
Так появилась идея добавить поддержку GPU в YTsaurus. Однако запуск задач для GPU заметно отличается от запуска классических MapReduce‑вычислений, под которые был заточен планировщик YTsaurus. Во‑первых, в ML‑задачах одну и ту же GPU, как правило, нельзя использовать совместно: некоторые задачи требуют всего один процессор, другим нужно сразу несколько, а третьим — целый хост со всеми доступными на нём GPU. Поэтому остро встаёт проблема фрагментации ресурсов, когда в кластере свободно некоторое количество GPU, нужное для запуска очередной задачи, но они разбросаны по разным хостам, и выделить их невозможно. Во‑вторых, существуют распределённые обучения, которым требуется сразу несколько хостов. Для таких обучений планировщику необходимо учитывать сетевую топологию кластера, чтобы все участники коллектива могли обмениваться информацией с минимальными задержками.
С ростом числа таких задач увеличивались и масштабы обучений — у нас есть обучения, в которых задействованы уже тысячи GPU. Всё это потребовало доработок планировщика YTsaurus, и с внедрением поддержки GPU‑планирования машинное обучение и batch‑инференс начали постепенно переезжать в YTsaurus. Сегодня внутри Яндекса практически все такие задачи запускаются в нём.
Так YTsaurus стал не просто системой хранения и batch‑вычислений, а базой для построения ML‑инфраструктуры. Вокруг него начали формироваться инструменты для запуска обучений, batch‑инференса, работы с данными и мониторинга — всё в рамках одной экосистемы.
Поддержка GPU-нагрузок стала доступна и в открытой версии платформы, так что предлагаем вам поэкспериментировать с этим.
На воркшопе Yandex Scale 2025 мы предлагали участникам самостоятельно обучить модель и запустить batch‑инференс в кластере YTsaurus. А потом проанализировать результаты с помощью CHYT [9] и DataLens [10].
Покажу, как самостоятельно выполнить практическую часть воркшопа: обучить модель, запустить batch‑инференс и проанализировать результаты в опенсорс‑версии YTsaurus, на демостенде YTsaurus или в вашем кластере Managed Service for YTsaurus [11] в Yandex Cloud. Выполнив все шаги, вы поймёте, как YTsaurus работает с типовыми ML‑задачами.
В качестве примера будем использовать опенсорсную нейросеть ultralytics YOLO, которая умеет распознавать объекты на изображениях — например, животных, здания, еду и так далее. Датасет с изображениями, а также код обучения и код запуска модели мы подготовили заранее.
Вы будете запускать обучение, обнаружение объектов и анализ результатов из JupyterLab, а вся обработка и хранение данных будет происходить в кластере YTsaurus.
YTsaurus позволяет выводить изображения и структурированные данные прямо в UI просмотра таблиц. Можно использовать это для просмотра результатов обнаружения объектов на изображениях:

На скриншоте вы видите таблицу, в одной колонке которой хранятся изображения, а в другой — структурированные данные (JSON).
Чтобы приступить к работе, создайте кластер или получите доступ к существующему. Это можно сделать одним из трёх способов:
запросить доступ к демостенду [12] (самый простой вариант на сегодня);
создать опенсорс‑кластер самостоятельно [13] на своих серверах или виртуальных машинах в облаке поверх Kubernetes;
Если вы используете демостенд, то дополнительной настройки не требуется — можно сразу открывать JupyterLab по ссылке, которая пришла вам в почте. Найдите в нём папку ML workshop, внутри него Workbook, и в нём вы увидите ссылку на инструкцию.
Если вы создали кластер YTsaurus самостоятельно, его нужно подготовить — чек-лист под спойлером.
Убедитесь, что в вашем кластере настроен CHYT [15] и есть клика с alias=ch_public. Это позволит вам выполнять CHYT‑запросы. Можно проверить в UI YTsaurus в разделе Cliques и создать клику по руководству [16] (укажите alias=ch_public и не менее 26 Gb RAM).
Вам потребуется JupyterLab с доступом к кластеру:
Если вы установили свой опенсорс‑кластер, вам также необходимо установить JupyterLab. Вы можете как запустить его отдельно от YTsaurus, так и внутри кластера YTsaurus [17].
Если вы создали свой кластер в Yandex Cloud, вы можете использовать JupyterLab, входящий в состав DataSphere [18], или установить свой JupyterLab вне облака.
В воркшопе используется DataLens для демонстрации возможности анализа данных YTsaurus в BI‑системе. Вам потребуется инсталляция DataLens, если вы хотите пройти сценарий по анализу результатов запуска нейросети:
В Yandex Cloud для индивидуальной работы DataLens можно использовать бесплатно. Для командной действует единый тариф с оплатой по рабочим местам.
Альтернативно вы можете установить свою версию DataLens вне облака [19].
Вам потребуется как минимум 10 Гб памяти [20] на exec‑ноде кластера YTsaurus для обучения и инференса используемой в воркшопе модели без GPU. Пример конфигурации можно посмотреть здесь [21].
Чтобы при запуске операций в YTsaurus у вас в консоли выводились ссылки на ваш кластер, вы можете выполнить следующую команду, заменив <ytsaurus-endpoint> на адрес вашего кластера (например yt-7b25376a.demo.ytsaurus.tech) и <cluster-name> на название вашего кластера (например cluster):
echo '{
"query_link_template" = "https://<ytsaurus-endpoint>/<cluster-name>/queries/{id}";
"enable_proxy_discovery" = %false;
"http_proxy_discovery_url" = "api/v4/discover_proxies?type=http";
"operation_link_template" = "https://<ytsaurus-endpoint>/<cluster-name>/operations/{id}/details";
}' | yt set //sys/client_config/default
В кластере должен быть настроен CRI [22]. Чтобы вы могли скачивать большие ML‑образы для прохождения сценариев, увеличьте apiRetryTimeoutSeconds для таймаута job на exe‑нодах до 600 секунд или больше по рекомендациям здесь [23].
Теперь, когда кластер готов, можно переходить к запуску в нём ML‑обучения и инференса. Всего в практической части мы предлагаем пять сценариев:
Обучение нейросети в YTsaurus.
Запуск нейросети в YQL‑запросе.
Запуск нейросети из Python API (например, для повторяющихся запусков по расписанию).
Анализ результатов работы нейросети в CHYT.
Визуализация результатов в DataLens.
Подробное пошаговое прохождение каждого из сценариев вы найдёте в инструкции [24].
А далее я покажу пару конкретных сценариев работы, которые можно будет попробовать, обозначу их возможности и ограничения. Затем пройдёмся по конкретным шагам для запуска вручную ML‑экспериментов с помощью YQL‑запроса.
В этом сценарии можно запустить обучение нейросети в YTsaurus с помощью Python API из JupyterLab. YTsaurus создаст операцию Vanilla [25] с одной джобой, в ней — контейнер из docker‑образа ultralytics, а затем запустит в нём скрипт обучения train.sh, который скачает датасет в виде файла coco128.zip из Кипариса (распределённой файловой системы YTsaurus). В конце YTsaurus запишет результирующие веса модели обратно в Кипарис (файл yolo‑starter.pt):

В этом скрипте мы обучаем модель с нуля на маленьком датасете COCO128, который можно скачать здесь [26]. Обучение происходит в несколько эпох — это не полное обучение, а только его начало для демонстрации. На выходе получится не до конца обученная модель.
Демонстрационный пример показывает способ запуска обучения в YTsaurus. В реальных сценариях, например, если датасет большой, мы обычно храним его в виде таблицы, чтобы скачивать частями, а не весь датасет одним файлом.
Дальше я рассмотрю сценарий, где мы будем использовать модель, которая прошла всё обучение на полном датасете.
В таком сценарии можно запустить нейросеть в YTsaurus в YQL‑запросе. Этот способ удобен для экспериментирования вручную и комбинации разных этапов в одном запросе: например, подготовки датасета, запуска нейросети и анализа результатов.
Чтобы не вводить запрос вручную, мы сгенерируем его из файла yql-infer.sql в ноутбуке JupyterLab. YQL‑запрос запустит Map‑операцию, в которой каждая джоба запустит yql-infer.py в указанном docker‑образе и передаст каждое изображение из входной таблицы images в python‑функцию find_objects. Функция find_objects отправляет изображения в нейросеть и возвращает аннотированные изображения и обнаруженные объекты в выходную таблицу objects.

Мы будем использовать веса нейросети, которая обучалась так же, как в сценарии выше, но на полном датасете.
Шаг 1. Прежде чем запускать нейросеть, посмотрим на датасет из картинок, которые будем подавать на вход модели. Откроем заранее подготовленный кластер YTsaurus: в списке это единственный кластер, кликнем по нему:

Шаг 2. Мы попали в навигацию по Кипарису — файловой системе кластера. Кликнем home, затем datasets, затем images, чтобы открыть изображения:

Шаг 3. Все картинки находятся в колонке image_data в таблице. Кликнем на иконку с глазом для просмотра одного из изображений:

Пример изображения:

Шаг 4. Теперь можно запускать обучение. Вернёмся в JupyterLab и откроем ноутбук Workshop.ipynb. В нём запустим ячейку «Запуск нейросети в YQL‑запросе», чтобы сгенерировать и запустить YQL‑запрос:

В выводе увидим ссылку на запрос следующего вида:
Operation started:
https://cnkms40n96dajboecgcv.ui.ytsaurus.yandexcloud.net/cluster/queries/...
Шаг 5. Кликнем на появившуюся в выводе ссылку, после чего откроется окошко для ввода запросов. Там увидим сгенерированный запрос:

Чтобы отследить прогресс выполнения запроса, кликнем на вкладку Progress. Для просмотра детальной информации по запуску нейросети в операции Map кликнем YtMap:

Кликнем Jobs для просмотра детальной информации по каждой джобе, которая обрабатывает свою часть данных:

В списке джобов можно кликнуть Stderr для просмотра консольного вывода запуска нейросети. Это особенно пригодится, если в джобе произошла ошибка [27].
Если вы не видите джобов, измените фильтр State на All. Так вы увидите джобы, которые выполняются или уже завершились с ошибкой или без ошибки:

Также можно посмотреть, как ваша операция конкурирует с другими операциями на кластере. Для этого откроем вкладку Scheduling в меню слева и пролистаем вниз. На скриншоте видны объёмы ресурсов, запрошенные (Demand) и выданные (Usage) операциям других пользователей.

Шаг 6. Когда YQL‑запрос завершится успешно, результаты появятся в нижней вкладке. Если результатов много, вы увидите здесь только часть. Кликнем на иконку глаза, чтобы посмотреть размеченное изображение:

Перейдём в Navigation, чтобы просмотреть полные результаты в сохранённой таблице. Преимущества сохранения результатов в таблицу в том, что вы можете их анализировать и визуализировать в последующих запросах:

Шаг 7. Перейдём по дереву папок в свою папку //home/users/test, которую указали в YQL‑скрипте. Найдём в ней таблицу objects. В ней увидим обнаруженные объекты для каждого изображения в формате json и размеченные изображения.

Кликнем по иконке с глазом, чтобы просмотреть размеченное изображение:

Также в полной инструкции есть сценарий, где вы сможете запустить такой же инференс, напрямую (без использования YQL) с помощью Python API. Такой способ удобен, чтобы запускать нейросеть по расписанию или интегрироваться с существующим кодом.
Мы предлагаем два сценария для анализа результатов работы нейросети:
Визуализация с помощью CHYT‑запроса. Это самый простой и быстрый способ проанализировать и визуализировать данные.
Визуализация в BI‑системе на примере DataLens. Это более гибкий способ визуализации, который требует больше действий.
Покажу, как выглядит аналитика с использованием DataLens: система может подключаться к YTsaurus и использовать CHYT для быстрого доступа к данным.
В этом сценарии воркшопа вы соберёте дашборд с анализом результатов запуска нейросети. Для этого создаётся несколько компонентов в DataLens, и в результате данные визуализируются:

Пошагово эти сценарии также описаны в инструкции [24] к воркшопу.
Если вы хотите обсудить возможный сценарий применения YTsaurus или задать вопросы по примерам использования, пишите в комментарии или на почту info@ytsaurus.tech [28]. А также присоединяйтесь к сообществу в телеграме [29] — где мы обсуждаем опыт [30] использования YTsaurus для решения разных задач.
Автор: Rualark
Источник [31]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/23681
URLs in this post:
[1] обучения: http://www.braintools.ru/article/5125
[2] на GitHub: https://github.com/YTsaurus/YTsaurus
[3] выход в опенсорс: https://habr.com/en/companies/yandex/articles/721526/
[4] дальнейшее развитие: https://habr.com/ru/companies/yandex/articles/901290/
[5] кейсы использования в рекламе: https://habr.com/ru/companies/yandex/articles/939078/
[6] как использовать YTsaurus для разработки интеллекта автономного транспорта: https://scale.yandex.cloud/?broadcast=90&speech=2634
[7] рассказывал Паша Сушин: https://habr.com/ru/companies/yandex/articles/829654/
[8] потребность: http://www.braintools.ru/article/9534
[9] CHYT: https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/about-chyt
[10] DataLens: https://datalens.tech
[11] Managed Service for YTsaurus: https://yandex.cloud/en/services/managed-ytsaurus
[12] запросить доступ к демостенду: https://ytsaurus.tech/docs/ru/overview/try-yt#demo
[13] создать опенсорс‑кластер самостоятельно: https://ytsaurus.tech/docs/ru/overview/try-yt
[14] создать кластер Managed YTsaurus в Yandex Cloud: https://yandex.cloud/ru/services/managed-ytsaurus
[15] настроен CHYT: https://ytsaurus.tech/docs/ru/admin-guide/install-chyt
[16] руководству: https://ytsaurus.tech/docs/ru/user-guide/data-processing/chyt/cliques/start
[17] внутри кластера YTsaurus: https://ytsaurus.tech/docs/ru/user-guide/jupyt
[18] DataSphere: https://datasphere.yandex.cloud/
[19] установить свою версию DataLens вне облака: https://datalens.tech/docs/ru/concepts/create-instance.html
[20] памяти: http://www.braintools.ru/article/4140
[21] здесь: https://ytsaurus.tech/docs/ru/admin-guide/prepare-spec
[22] CRI: https://ytsaurus.tech/docs/ru/admin-guide/node-cri
[23] по рекомендациям здесь: https://github.com/ytsaurus/ytsaurus-k8s-operator/blob/8607944138764065964ca350355ab8b5759c41e6/docs/api.md#crijobenvironmentspec
[24] инструкции: https://disk.yandex.ru/d/X2UKwUvygo4s_g
[25] операцию Vanilla: https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/vanilla
[26] здесь: https://ultralytics.com/assets/coco128.zip
[27] ошибка: http://www.braintools.ru/article/4192
[28] info@ytsaurus.tech: mailto:info@ytsaurus.tech
[29] к сообществу в телеграме: http://t.me/ytsaurus_ru
[30] опыт: http://www.braintools.ru/article/6952
[31] Источник: https://habr.com/ru/companies/yandex/articles/979336/?utm_campaign=979336&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.