![]() |
![]() |
![]() |
|||||
![]() |
Git для Data Science: контроль версий моделей и датасетов с помощью DVC |
||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-12-03 11:36 ![]() Публикация представляет собой незначительно сокращенный перевод статьи Кристиана Иванчича Data Version Control With Python and DVC. *** Машинное обучение и наука о данных сопряжены с рядом задач, отличающихся от традиционной разработки программного обеспечения. Так, системы управления версиямипомогают разработчикам контролировать изменения исходного кода, однако управление версиями датасетов, изменения в моделях и наборах данных, отлажено не столь хорошо. В этом руководстве мы рассмотрим следующие вопросы:
Что такое система управления версиями данных В традиционной разработке программного обеспечения разработчикам приходится взаимодействовать с несколькими версиями одного и того же кода. Чтобы предотвратить путаницу и ошибки, разработчики используют системы управления версиями, например,Git. В системе управления версиями есть центральный репозиторий кода, представляющий текущее состояние проекта. Можно сделать копию проекта, внести изменения и запросить их добавление в следующей официальной версии. В результате запроса код проверяется и тестируется, пока не будет выпущен. В проектах, связанных с разработкой, такие циклы повторяются по многу раз в день. Но в мире Data Science подобные соглашения и стандарты пока не закрепились. Наличие систем, позволяющих людям быстро продолжить с того места, на котором остановились другие, повысило бы скорость и качество получаемых результатов. Это помогло бы прозрачно управлять данными, эффективно проводить эксперименты и сотрудничать с другими людьми и командами. Инструмент, помогающий исследователям управлять данными и осуществлять воспроизводимые эксперименты –DVC(сокр. от Data Version Control). Что такое DVC DVC– это написанный на Python инструмент командной строки, который работает совместно с Git, а также имитирует команды и рабочие процессы Git, перенося аналогичные подходы на работу с данными. Фактически команды Git может хранить код как локально, так и на Bitbucket,GitHub или GitLab. Аналогичным образом DVC позволяет использовать для хранения данных и моделей удаленный репозиторий. Можно создать локальную копию удаленного репозитория, изменить файлы, а затем загрузить свои изменения, чтобы поделиться ими с командой. Удаленный репозиторий может находиться на вашем рабочем компьютере или в облаке, например, в AWS, GCP или Azure. В процессе работы в удаленном репозитории создается Далее мы на практике изучим наиболее важные особенности DVC. Настраиваем рабочую среду DVC В этом руководстве мы рассмотрим, как использовать DVC, попрактиковавшись на примере работы с датасетом фотографий. Мы даже обучим ML-модель распознавания объектов. Для работы с примерами в системе должны быть установленыPython 3иGit. DVC – это инструмент командной строки. Если вы пользователь Windows, ознакомьтесь с разделом«Запуск DVC в Windows» (англ.). Чтобы подготовить рабочую среду, нам нужно выполнить следующее:
Вы можете использовать любой менеджер пакетов и окружений. В этом руководстве мы используем conda, поскольку он отлично поддерживает инструменты для анализа данных и машинного обучения. Чтобы создать и активировать виртуальную среду, откройте интерфейс командной строки и введите следующую команду: Команда Как только всё установлено, активируем среду: Теперь у нас есть среда Python, независимая от установленных в операционной системе библиотек Python. В нее мы установим внешние библиотеки:
Их тоже можно установить с помощью В качестве альтернативы можно использовать установщик pip: Теперь сделаем форк репозиторияData Version Control Tutorial. На странице репозитория нажмите Далее клонируем форк на компьютер с помощью Структура репозитория выглядит следующим образом: В репозитории шесть каталогов:
Каталог
Набор данных для обучения Последний шаг в подготовке – получить пример набора данных, который мы можем использовать для практики DVC. Пример с изображениями подходит для этого лучше всего: управление множеством крупных файлов – это то, чем отличается DVC. Мы будем использовать набор данныхImagenette компанииfastai. Imagenette – это подмножество датасетаImageNet, используемого в качестве эталонного набора данных в статьях по машинному обучению. ImageNet слишком велик, чтобы использовать его в качестве примера, поэтому мы возьмем его подмножество Imagenette. Перейдите наGitHub-страницу Imagenetteи нажмите ссылку для загрузки Набор данных сохранен в виде tar-архива. Размер файла – порядка 100 Мб. Пользователи Mac могут извлечь файлы, дважды щелкнув архив в Finder. Линуксоиды могут распаковать его с помощью команды Набор данных структурирован определенным образом. В нем есть две основные папки:
Примечание Валидация обычно происходит во время обучения модели – так аналитики понимают, насколько хорошо модель обучается. Поскольку это руководство не ориентировано на показатели производительности, мы будем использовать набор для проверки модели после ее обучения. Каждое изображение имеет связанный с ним класс, описывающий, что на нем изображено. Чтобы решить задачу классификации, необходимо обучить модель, которая сможет точно определять класс изображения. Каталоги
Для простоты и скорости в руководстве мы будем обучать модель, используя лишь два последних класса. После обучения модель должна сообщать, является ли то или иное изображение мячом для гольфа или фотографией парашюта. Такую задачу, когда модель выбирает между двумя типами объектов, называютбинарной (двоичной) классификацией. Переместим папки Мы завершили настройку и готовы экспериментировать с DVC. Базовый рабочий процесс DVC В этом разделе мы увидим, как DVC в тандеме с Git позволяет управлять и кодом, и данными. Для начала переключимся на ветку нашего первого эксперимента:
Далее нужно инициализировать DVC. Предварительно нужно убедиться, что мы находимся в папке верхнего уровня репозитория. Далее запускаем команду Эта команда приведет к созданию папки Примечание При запуске DVC выдаст предупреждение, что собирает анонимную статистику использования (это помогает авторам улучшить инструмент). Вы можете отключить эту функцию, запустив команду Теперь нам нужно создать удаленное хранилище файлов данных и моделей, контролируемых DVC. Пока что для обучения это может быть просто другая папка в вашей системе. Создадим каталог за пределами репозитория Вернемся в репозиторий Теперь DVC знает, где хранить резервную копию данных и моделей. Команда Внутри папки Основное практическое правило, которому мы должны следовать, заключается в том, чтонебольшие файлы отправляются на GitHub, а большие – в удаленное хранилище DVC. Отслеживание файлов с DVC и Git Для запуска отслеживания файлов Git и DVC используют команду Вот что при этом делает DVC:
На следующем изображении показано, как выглядел репозиторий до выполнения каких-либо команд. ![]() code.py и папку train/ .Когда мы запускаем ![]() После того как большие файлы изображений помещены под управление DVC, добавим весь код и небольшие файлы в staging-область Git с помощью ![]() Если кто-то хочет работать над проектом и использовать данные Но сначала нам нужно загрузить файлы в удаленное хранилище. Перенос файлов на удаленный репозиторий Чтобы загрузить файлы на GitHub, нужно сначала создать «снимок» текущего состояния репозитория: Ключ В DVC тоже есть команда Примечание Подробнее об отличиях Чтобы загрузить файлы из кэша в удаленное хранилище, используем команду DVC просмотрит все папки локального репозитория в поисках dvc-файлов. Как уже упоминалось, эти файлы сообщают DVC, какие данные необходимо скопировать, и DVC копирует их из кэша в удаленное хранилище. ![]() Осталось отправить файлы под управлением Git на GitHub: GitHub не знает о новой ветке, которую мы создали локально, поэтому при первом ![]() Скачивание файлов с DVC Чтобы понять, как загружать файлы, удалим репозитория часть файлов с данными. Как только мы добавили данные с помощью Например, удалим целиком папку Папка будет удалена из репозитория, но каталог по-прежнему безопасно хранится в кэше и удаленном хранилище. Чтобы вернуть данные из кэша, воспользуемся командой Папка Команда Как только данные окажутся в кэше, проверьте их в репозитории с помощью ![]() Имейте в виду, что сначала нужно получить dvc-файлы из Git, и только потом вызывать команды DVC. Если dvc-файлов нет в репозитории, DVC просто не знает, какие данные нужно получить. Итак, мы рассмотрели базовый рабочий процесс взаимодействия DVC и Git. Всякий раз, когда мы добавляем данные или изменяем код, необходимо запускать соответствующие команды Остальная часть этого руководства посвящена конкретным примерам использования DVC для машинного обучения и Data Science. Построение модели машинного обучения Используя набор данных Imagenette, мы научим модель различать изображения мячей для гольфа и парашютов. Для этого мы выполним три шага:
Эти шаги соответствуют трем файлам Python в папке
В следующих подразделах мы рассмотрим, что делает каждый из файлов. Подготовка данных Данные хранятся в нескольких каталогах. Чтобы упростить использование данных, мы создадим csv-файл, содержащий список изображений и их меток. CSV-файл будет содержать два столбца: столбец Далее понадобится два CSV-файла:
Мы можем создать CSV-файлы, запустив программу Запустим скрипт Когда скрипт закончит работу, в папке Теперь у нас есть список файлов, которые можно использовать для обучения и тестирования модели. Обучение модели машинного обучения Для обучения модели мы будем использовать один из простейших алгоритмов обучения с учителем – стохастический градиентный спуск. Исходный код, который мы будем использовать на этапе обучения: Запустим скрипт Выполнение кода может занять несколько минут, в зависимости от мощности вашего компьютера. При выполнении кода вы можете получить предупреждение :
В этом предупреждении Когда скрипт завершится, у нас будет обученная модель машинного обучения, сохраненная в папке Мы обучили модель машинного обучения различать два класса изображений. Следующий шаг – определить, насколько точно модель работает на тестовых изображениях, которые модель не видела во время обучения. Оценка модели машинного обучения Проверка работы модели служит своего рода наградой – мы видим результат усилий. Вот исходный код, который используется на этапе оценки: Запустиим Оценка будет сохранена в файле Файл небольшой, и его полезно хранить на GitHub, чтобы можно было быстро проверить, насколько хорошо выполняется каждый эксперимент: Версии датасетов и моделей в DVC Каждый раз, когда мы запускаем эксперимент, мы хотим точно знать, что было на входе, и что получилось на выходе. В этом разделе мы познакомимся с соответствующим рабочим процессом для контроля версий в наших экспериментах. Сначала отправим все изменения, внесенные в ветку Обучение модели и завершение эксперимента – веха для проекта. Мы должны научиться оперативно возвращаться к таким точкам. Добавление тегов к коммитам Поскольку мы завершили эксперимент и создали новую модель, создадим тег, описывающий готовую модель: Ключ Используем переключатель В GitHub теги доступны на вкладке репозитория Теги текущего репозитория можно посмотреть так: Рабочие процессы DVC в значительной степени зависят от эффективных практик Git. Еще один способ сделать рабочий процесс более упорядоченным и прозрачным – использовать ветвление. Создание отдельных веток Git для каждого эксперимента Пока что мы делали всю работу в ветке В первом эксперименте мы установили максимальное количество итераций модели равным Когда мы создаем новую ветку, все dvc-файлы, которые были в предыдущей ветке, будут присутствовать в новой ветке, как и другие файлы и папки. Обновим код в Это единственное изменение, которое необходимо сделать. Повторим обучение и оценку, запустив При этом обновятся файлы DVC выведет вопрос, действительно ли мы хотим внести изменения, отвечаем Помним, что Добавим и зафиксируем внесенные изменения в Git: Добавим тег: Отправим изменения на GitHub и в удаленное хранилище DVC: Теперь можно переключаться между ветками Git и DVC. Результаты наших экспериментов представлены в виде разных версий кода и моделей, к которым мы быстро можем получить доступ. Что скрывается внутри DVC-файлов Откроем текущий Файлы DVC – это файлы c YAML-разметкой. Информация хранится в парах ключ-значение и списках. Первый ключ – MD5– популярный алгоритм хеширования.Хешированиеиспользует содержимое файла, чтобы создать строку символов фиксированной длины. Такая строка называется хешем иликонтрольной суммой. Длина строки – независимо от размера исходного файла – составляет 32 символа. Два одинаковых файла имеют одинаковый хеш. Если в одном из файлов изменится хотя бы один бит, хеши перестанут совпадать. DVC использует свойства MD5 для достижения двух важных целей:
В рассматриваемом примере есть два значения md5. Первый описывает сам dvc-файл, а второй – файл Примечание Дополнительные сведения о dvc-файлах можно почерпнуть вофициальной документации. Совместная работа Освоенного рабочего процесса достаточно, если вы единственный, кто использует оборудование, на котором проводятся эксперименты. Однако многим командам для работы приходится совместно использовать мощные машины. Когда с данными работают несколько пользователей, не хочется плодить множество копий одних и тех же датасетов. Для экономии места DVC позволяет настроить общий кэш. Когда мы инициализируем репозиторий DVC с помощью Каждый раз, когда мы запускаем Если вы следовали примерам руководства, то все файлы сейчас находятся в папке Теперь все пользователи на компьютере могут указать в качестве кэша репозитория общий кэш. ![]() Проверив файл репозитория Но как это помогает сэкономить место? Вместо того чтобы хранить копии одних и тех же данных в локальном репозитории, общем кэше и других репозиториях на машине, DVC позволяет использоватьссылки– типа Если кратко, то поведение кеша по умолчанию можно изменить, указав параметр конфигурации Дополнительное пространство Если в репозитории или кэше есть неиспользуемые модели или файлы данных, можно сэкономить пространство, очистив репозиторий с помощью сборщика мусора dvc gc. Создаем воспроизводимый конвейер Data Science Вот краткий обзор шагов, которые мы сделали к настоящему времени для обучения модели машинного обучения:
Вы могли заметить, что при изменении параметров некоторые шаги мы повторяли вручную. Процесс можно автоматизировать, объединив последовательность действий вконвейер DVC, запускаемый единственной командой. Создадим новую ветку и назовем ее Используем эту ветку, чтобы повторно запустить эксперимент в виде конвейера DVC. Конвейер состоит из нескольких этапов и выполняется с помощью команды
Командой может быть все, что мы обычно запускаем в командной строке, в том числе файлы Python. Поскольку мы успели уже вручную добавить под управление DVC много файлов, DVC запутается, если мы попытаемся создать те же файлы с помощью конвейера. Чтобы этого избежать, сначала удалим CSV-файлы, модели и показатели с помощью Итак, мы начинаем конвейер с запуска
Ключ DVC создаст два файла: Элемент верхнего уровня У каждого Добавление хэшей MD5 позволяет DVC отслеживать входные и выходные данные и определять, изменяется ли какой-либо из этих файлов. Таким образом, вместо отдельных файлов Мы автоматизировали первый этап конвейера. Представим его в виде блок-схемы. ![]() Следующий этап – обучение: ![]() Финальный этап – оценка модели: Обратите внимание, что вместо ключа ![]() Теперь весь рабочий процесс представлен на одном изображении. Не забудем сделать тег для новой ветки и отправить изменения на GitHub и DVC: Теперь самое интересное! Воспользуемся для обучения классификаторомrandom forest. Обычно он работает эффективнее, чем Изменим Поскольку файл И всё!Когда мы запускаем команду Кроме того, теперь проще простого сравнивать метрики. Если запустить Это позволяет быстро определить, какой эксперимент в репозитории дал наилучший результат. Представим, что вы вернулись к проекту спустя полгода и забыли обо всех подробностях. Как и любому другому человеку, который хочет воспроизвести вашу работу, будет достаточно выполнить три шага:
Заключение Поздравляем с прохождением туториала! Итак, мы провели несколько экспериментов, обеспечили безопасное создание версий, резервное копирование данных и моделей. Более того, мы можем быстро воспроизвести каждый эксперимент, выполнив одну команду Поначалу может показаться несколько сложным запускать в нужные моменты все команды DVC и Git. Положение облегчат хуки Git– при запуске определенных команд Git автоматически выполнятся команды DVC. К тому же DVC имеетPython API, то есть можно настроить необходимую автоматизацию на уровне кода. Хотя это руководство представляет собой достаточно подробный обзор возможностей DVC, невозможно охватить всё в одной публикации. Для дальнейшего ознакомления с DVC мы рекомендуем обратиться к официальному руководству пользователя,справочнику командиинтерактивному учебнику. Источники Источник: proglib.io Комментарии: |
||||||