Меня зовут Игорь Стурейко и я являюсь преподавателем и руководителем курса MLOps в OTUS. В практике любого инженера машинного обучения быстро приходит осознание необходимости учета и структурирования проводимых экспериментов и обязательно присутствует инструмент для управления жизненным циклом машинного обучения: отслеживание экспериментов, управление и деплой моделей и проектов.
MLOps помогает управлять этим жизненным циклом, предоставляя набор лучших практик, инструментов и фреймворков, которые позволяют командам разрабатывать, тестировать, развертывать и контролировать модели машинного обучения масштабируемым и надежным образом.
В этой статье я кратко расскажу о таком инструменте компании Weight & Biases, незаслуженно обойденным вниманием на просторах рускоязычного пространства.
Работа в современных реалиях требуют быстрой разработки и оценки моделей. Мы вынуждены оперировать множеством компонентов: разведочный анализ данных, обучение различных моделей, объединение обученных моделей в ансамбли и т. д.
Много компонентов = много мест, где можно ошибиться = много времени, потраченного на отладку. Вы можете упустить важные детали, и вам придется заново обучать модель, или вы можете обучиться на неправильных данных (утечка информации). Или вы можете использовать неправильную модель для генерации представления.
Именно здесь на помощь приходит Weight & Biases - платформа для отслеживания и визуализации экспериментов по машинному обучению. Это отличный инструмент для MLOps. Она предоставляет Dashboard для визуализации метрик и параметров экспериментов и реестр моделей, который позволяет развернуть модель в производственной среде с помощью одной команды.
Dashboard (отслеживание экспериментов): Регистрация и визуализация экспериментов в реальном времени = Храните данные и результаты в одном удобном месте. Рассматривайте это как хранилище экспериментов.
Артефакты (версионирование наборов данных + моделей): Хранение и версионирование наборов данных, моделей и результатов = Точно знать, на каких данных обучается модель.
Dashboard W&B
Dashboard (отслеживание экспериментов)¶
Используйте панель Dashboard как центральное место для организации и визуализации результатов, полученных с помощью моделей машинного обучения.
Отслеживание метрик;
Визуализация результатов;
Доступ из любого места;
Сохранение всего в единой облачной среде;
Отслеживание производительности модели в режиме реального времени.
Визуализация результатов
W&B Dashboard поддерживает большое количество типов информации - визуализируйте графики, изображения, видео, аудио, 3D-объекты и многое другое.
Кроме того, Dashboard интерактивен - при наведении курсора, вы можете получить больше опций и информации.
![Отображение сводной инфрмац Отображение сводной инфрмац](https://habrastorage.org/getpro/habr/upload_files/f44/ecc/5b9/f44ecc5b9129f82b0ae4f0dcb0062dac.gif)
Отслеживание экспериментов
Прежде чем мы рассмотрим основные компоненты W&B, давайте начнем с установки.
Вы можете установить его с помощью pip:
pip install wandb
Затем необходимо создать учетную запись на W&B. После этого вы можете войти в систему с помощью следующей команды:
import wandb
wandb.login(key='you_wandb_api_key')
После установки W&B и входа в систему вы можете начать отслеживать свои эксперименты. Для этого вам нужно инициализировать библиотеку wandb следующей командой:
wandb.init(project="my-first-project", entity="my-company")
Параметр project - это имя проекта с которым вы работаете на W&B. Если проект уже существует, он будет использован, если нет, то он будет создан. Вы также можете использовать параметр entity, чтобы указать имя вашей организации. Если организация не существует, она будет создана.
Отслеживание экспериментов осуществляется путем регистрации метрик и параметров. Чтобы записать метрику в журнал, можно воспользоваться функцией wandb.log()
. Например, чтобы записать в журнал потери модели, можно использовать следующую команду:
wandb.log({"loss": loss})
Давайте соберем все вместе и посмотрим на код проекта. Поскольку API ключ является уникальным идентификатором каждого пользователя, то я вынес его отдельно в файл config. Итак:
import wandb # импорируем библиотеку wandb
import random # импорируем библиотеку random для генерации случайных чисел
import config # импорируем конфигурационный файл
wandb.login(key=config.wandb_key) # входим в систему wandb
# устанавливаем гиперпараметры расчета
epochs = 10
# lr = 0.01
for _ in range(5):
lr = random.uniform(0.01, 0.02)
# запустим логирование результатов эксперимента
run = wandb.init(
# устанавливаем название проекта в системе логирования
project="my-test-project",
# Вносим гиперпараметры для отслеживания
config={
"learning_rate": lr,
"epochs": epochs,
},
)
# задаем случайность нашему демонстрационному примеру
offset = random.random() / 5
# Запустим обучение модели
for epoch in range(2, epochs):
acc = 1 - 2**-epoch - random.random() / epoch - offset
loss = 2**-epoch + random.random() / epoch + offset
print(f"epoch={epoch}, accuracy={acc}, loss={loss}")
wandb.log({"accuracy": acc, "loss": loss})
Этот код создаст нам 5 запусков нашего эксперимента с различными значениями параметра lr. Теперь нужно визуально оценить полученные результаты.
В выводе Wandb сообщает, что он сохранил результаты расчета локально и синхронизировал их с сервером Wandb:
Run data is saved locally in /Users/<user>/Documents/Programming/wandb_intro/wandb/run-20240807_111913-mm1xaqfl
Syncing run still-wind-1 to Weights & Biases (docs)
View project at https://wandb.ai/<user>/my-test-project
Мы можем посмотреть результаты экспериментов двумя способами:
локально, запустив сервер wandb;
на портале wandb.
Зачастую, данные которыми мы оперируем, представляют коммерческую тайну или политика организации не позволяет нам воспользоваться порталом wandb для отображения и отслеживания результатов. В этом случаем мы можем запустить наш собственный сервер Wandb локально из Docker образа.
Для этого достаточно выполнить команду:
wandb server start
После этого система wandb скачает образ сервера и запустит его локально. За более подробной информацией можно обратиться к официальной документации: https://docs.wandb.ai/guides/hosting/self-managed/basic-setup
Мы будем пользоваться порталом wandb, который позволяет отображать результаты проведенных экспериментов.
В консоли Wandb вывел нам информацию, что можно обратиться к порталу по адресу https://wandb.ai/<user>/my-test-project
где отображается вся подробная информация:
![Результаты вычислительных экспериментов Результаты вычислительных экспериментов](https://habrastorage.org/getpro/habr/upload_files/8ca/679/65e/8ca67965e6e19e79b6caed4d70cca774.png)
Слева отображаются запуски в рамках эксперимента, справа графики отлеживаемых параметров. Поскольку мы не задавали никаких имен нашим запускам - то Wandb назначил их автоматически.
Заключение
Wandb представляет собой удобный сервис отслеживания результатов вычислительных экспериментов и логирования их параметров. Наряду с MLFlow и DVC Studio Weghts&Biases представляет собой мощный инструмент, внедрение которого в ежедневную практику позволит повысить качество вашей работы и позволит обеспечить четкий контроль за результатами экспериментов.
Исходный код, используемый в статье доступен на GitLab.