Каждый месяц мы делимся здесь нашими новостями, открытиями, интересными материалами для чтения, мнениями сообщества и всем остальным в процессе.

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

Новости и ссылки

Этот раздел DVC Heartbeat растет с каждым новым выпуском, и это уже неплохая новость!

Одна из самых захватывающих вещей, которыми мы хотим поделиться в этом месяце, - это включение DVC в Сезон документов Google. Это новая и уникальная программа, спонсируемая Google, которая объединяет технических писателей с проектами с открытым исходным кодом для совместной работы и улучшения документации по проектам с открытым исходным кодом. Вы можете найти схему видения DVC и проектных идей в этом специальном блоге и проверить полный список участвующих организаций с открытым исходным кодом. Технически программа стартует через несколько месяцев, но уже есть фантастический рост количества коммитов и участников, и нам это очень нравится!

Другой важной вехой для нас стала первая автономная встреча с нашей распределенной удаленной командой. Было здорово работать бок о бок и проводить встречи с командой без Zoom. Объединение наших сил для подготовки к предстоящим конференциям оказалось самым ценным, обучающим и объединяющим опытом для всей команды.

Жалко, что наш техлид не смог присоединиться к нам из-за очередного отказа в выдаче визы. Мы очень надеемся, что он наконец доберется до США на следующей большой конференции.

Пока мы были заняты доработкой всей подготовки Pycon 2019, наш собственный Дмитрий Петров вылетел в Нью-Йорк, чтобы выступить на O'Reilly AI Conference об инструментах с открытым исходным кодом для моделей машинного обучения и управления версиями наборов данных. . К сожалению, видео доступно только зарегистрированным пользователям (с бесплатной пробной версией), но вы можете посмотреть слайды Дмитрия здесь.

Мы переименовали наш Твиттер! Наш старый дескриптор немного вводил в заблуждение, и мы перешли с @Iterativeai на @DVCorg (но оставим старый для будущих проектов).

Наша команда так счастлива каждый раз, когда мы обнаруживаем статью, посвященную DVC или посвященную одной из насущных проблем машинного обучения, которые мы пытаемся решить. Вот некоторые из наших любимых ссылок за последний месяц:

Контроль версий для ваших проектов машинного обучения - серия 206 от Тобиаса Мейси



Контроль версий стал делом стола для любой команды разработчиков программного обеспечения, но для проектов машинного обучения не было хорошего решения для отслеживания всех данных, которые идут на построение и обучение моделей, а также на выходе самих моделей. Для решения этой проблемы Дмитрий Петров создал проект Data Version Control, известный как DVC. В этом эпизоде ​​он объясняет, как это упрощает общение между специалистами по данным, сокращает дублирование усилий и упрощает проблемы, связанные с воспроизведением и перестроением моделей на разных этапах жизненного цикла проекта.

Вот статья Фавио Васкеса с расшифровкой этого эпизода подкаста.



Почему Git и Git-LFS недостаточно для решения кризиса воспроизводимости машинного обучения, за которым последовало всестороннее обсуждение Reddit.



С Git-LFS ваша команда может лучше контролировать данные, потому что теперь они контролируются версиями. Значит ли это, что проблема решена? Ранее мы говорили, что «ключевой проблемой являются данные обучения», но это было ложью. Вроде, как бы, что-то вроде. Да, хранение данных под контролем версий - большое улучшение. Но является ли отсутствие контроля версий файлов данных всей проблемой? Нет.

Драгоценные камни

В обсуждениях нашего сообщества Discord есть много скрытых жемчужин. Иногда они разбросаны по каналам, и их сложно отследить.

Мы анализируем вопросы и дискуссии и делимся с вами наиболее интересными выводами.

Мы тоже этого боялись, пока не встретились с ними лично. Они оказались настоящими (если только боты теперь не любят рамэн)!

Каждый раз, когда вы запускаете dvc add, чтобы начать отслеживание какого-либо артефакта данных, его путь автоматически добавляется в .gitignore файл, в результате его трудно зафиксировать в git по ошибке - вам сначала нужно будет явно изменить .gitignore. Функция отслеживания некоторых внешних данных называется внешними выходами (если все, что вам нужно, это отслеживать некоторые артефакты данных). Обычно он используется, когда у вас есть данные на S3 или SSH и вы не хотите втягивать их в свое рабочее пространство, но он работает, даже если ваши данные находятся на том же компьютере за пределами репозитория.

Используйте dvc import для отслеживания и загрузки удаленных данных в первый раз и в следующий раз, когда вы делаете dvc repro, если данные были изменены удаленно. Если вы не хотите отслеживать удаленные изменения (блокировать данные после их загрузки), используйте dvc run с фиктивной зависимостью (вы не трогаете любой текстовый файл), которая запускает фактический wget / curl для получения данных.

Практически любая команда в DVC, которая имеет дело с конвейерами (набором файлов DVC), принимает в качестве цели один этап, например dvc pipeline show — ascii model.dvc.

Это хорошо известная проблема с NFS, CIFS (Azure) - они не поддерживают блокировку файлов должным образом, которая требуется для работы механизма SQLLite. Самый простой обходной путь - не создавайте проект DVC в разделе, подключенном к сети. В некоторых случаях исправить можно, изменив параметры подключения, отметьте это обсуждение для службы машинного обучения Azure.

Отличный вопрос! Короткий ответ:

dvc cache dir --local - для переноса данных в большой раздел;

dvc config cache.type reflink, hardlink, symlink, copy - включить символические ссылки во избежание фактического копирования;

dvc config cache.protected true - настоятельно рекомендуется сделать ссылки в рабочем пространстве доступными только для чтения, чтобы не повредить кеш;

Чтобы впервые добавить данные в кэш DVC, сделайте клон репозитория на большом разделе и запустите dvc add, чтобы добавить свои данные. Затем вы можете сделать git pull, dvc pull на небольшом разделе, и DVC создаст все необходимые ссылки.

Обычно это означает, что родительский каталог одного из аргументов для dvc add / dvc run уже отслеживается. Например, вы уже добавили весь datasets каталог. И теперь вы пытаетесь добавить подкаталог, который уже отслеживается как часть datasets. Не нужно этого делать. Вы можете dvc add datasets или dvc repro datasets.dvc сохранить изменения.

Проверьте настройки локали, которые у вас есть (команда locale в Linux). Python ожидает языковой стандарт, который может обрабатывать печать в Юникоде. Обычно это решается такими командами: export LC_ALL=en_US.UTF-8 и export LANG=en_US.UTF-8. Вы можете поместить эти экспорты в .bashrc или другой файл, определяющий вашу среду.

Короче - да, но это тоже можно настроить. DVC будет использовать либо ваш профиль по умолчанию (от ~/.aws/*), либо ваши env vars по умолчанию. Если вам нужна большая гибкость (например, вам нужно использовать разные учетные данные для разных проектов и т. Д.), Ознакомьтесь с этим руководством для настройки пользовательских профилей aws, а затем вы можете использовать их с DVC, используя эти удаленные параметры.

Вы можете использовать параметр XPath команды show metrics и указать для него несколько имен атрибутов:

$ dvc metrics add model.metrics --type json --xpath AUC_RATIO[train,valid]
metrics.json:
             0.89227482588
             0.856160272625

Есть несколько вариантов добавления новой зависимости:

Единственный рекомендуемый способ - это каким-то образом сообщить DVC о версии вашего пакета. Один из способов сделать это - создать отдельный этап, который будет динамически печатать версию этого конкретного пакета в файл, от которого будет зависеть ваш этап:

dvc run -o mypkgver 'pip show mypkg > mypkgver’
dvc run -d mypkgver -d ... -o .. mycmd

Да, вы могли dvc commit -f. Он сохранит всю текущую контрольную сумму без повторного запуска ваших команд.

Да! Эта функция DVC называется внешние выходы и внешние зависимости. Вы можете использовать один из них или оба для отслеживания, обработки и версии ваших данных в облачном хранилище, не загружая их локально.

Если у вас есть какие-либо вопросы, проблемы или идеи, дайте нам знать здесь, и наша звездная команда свяжется с вами в кратчайшие сроки!