Каждый месяц мы делимся здесь нашими новостями, открытиями, интересными материалами для чтения, мнениями сообщества и всем остальным в процессе.
Некоторые из них связаны с нашим детищем 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, когда код и данные разделены? Пару раз меня это сжигало, т. Е. Случайно отправляя большие файлы на GitHub, и теперь я храню свой код и данные отдельно.
Каждый раз, когда вы запускаете dvc add
, чтобы начать отслеживание какого-либо артефакта данных, его путь автоматически добавляется в .gitignore
файл, в результате его трудно зафиксировать в git по ошибке - вам сначала нужно будет явно изменить .gitignore
. Функция отслеживания некоторых внешних данных называется внешними выходами (если все, что вам нужно, это отслеживать некоторые артефакты данных). Обычно он используется, когда у вас есть данные на S3 или SSH и вы не хотите втягивать их в свое рабочее пространство, но он работает, даже если ваши данные находятся на том же компьютере за пределами репозитория.
- Как мне обернуть этап загрузки файла / каталога в этап DVC? Я хочу убедиться, что он запускается только в том случае, если файл еще не загружен.
Используйте dvc import
для отслеживания и загрузки удаленных данных в первый раз и в следующий раз, когда вы делаете dvc repro
, если данные были изменены удаленно. Если вы не хотите отслеживать удаленные изменения (блокировать данные после их загрузки), используйте dvc run
с фиктивной зависимостью (вы не трогаете любой текстовый файл), которая запускает фактический wget / curl для получения данных.
- Как показать конвейер, у которого нет значения по умолчанию
Dvcfile
? (например, я присвоил всем файлам имена вручную с помощью-f
в командеdvc run
, и у меня больше нетDvcfile
)
Практически любая команда в DVC, которая имеет дело с конвейерами (набором файлов DVC), принимает в качестве цели один этап, например dvc pipeline show — ascii model.dvc
.
Это хорошо известная проблема с NFS, CIFS (Azure) - они не поддерживают блокировку файлов должным образом, которая требуется для работы механизма SQLLite. Самый простой обходной путь - не создавайте проект DVC в разделе, подключенном к сети. В некоторых случаях исправить можно, изменив параметры подключения, отметьте это обсуждение для службы машинного обучения Azure.
- Как мне использовать DVC, если я использую отдельный диск для хранения данных (и небольшой / быстрый SSD для выполнения вычислений)? У меня недостаточно места для переноса данных на рабочее место
Отличный вопрос! Короткий ответ:
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
сохранить изменения.
- Я получаю сообщение об ошибке« Кодек ascii не может закодировать символ в командах DVC, когда я имею дело с именами файлов в формате Unicode»
Проверьте настройки локали, которые у вас есть (команда locale
в Linux). Python ожидает языковой стандарт, который может обрабатывать печать в Юникоде. Обычно это решается такими командами: export LC_ALL=en_US.UTF-8
и export LANG=en_US.UTF-8
. Вы можете поместить эти экспорты в .bashrc
или другой файл, определяющий вашу среду.
Короче - да, но это тоже можно настроить. DVC будет использовать либо ваш профиль по умолчанию (от ~/.aws/*
), либо ваши env
vars по умолчанию. Если вам нужна большая гибкость (например, вам нужно использовать разные учетные данные для разных проектов и т. Д.), Ознакомьтесь с этим руководством для настройки пользовательских профилей aws, а затем вы можете использовать их с DVC, используя эти удаленные параметры.
- Как я могу вывести несколько показателей из одного файла? Допустим, у меня в файле есть следующее:
{“AUC_RATIO”: {“train”: 0.8922748258797667, “valid”: 0.8561602726251776, “xval”: 0.8843431199314923}}.
Как я могу показать иtrain
, иvalid
безxval
?
Вы можете использовать параметр XPath команды show metrics и указать для него несколько имен атрибутов:
$ dvc metrics add model.metrics --type json --xpath AUC_RATIO[train,valid] metrics.json: 0.89227482588 0.856160272625
Есть несколько вариантов добавления новой зависимости:
- просто откройте файл в любимом редакторе и добавьте туда зависимость без
md5
. DVC поймет, что этот этап изменился, и будет повторно запускать и пересчитыватьmd5
контрольные суммы в течение следующихdvc repro
; - Другой вариант - использовать
dvc run --no-exec
. Он перепишет для вас существующий файл с новыми параметрами. - Есть ли способ добавить зависимость к пакету python, чтобы он снова запускал этап, если он импортировал обновленную библиотеку?
Единственный рекомендуемый способ - это каким-то образом сообщить DVC о версии вашего пакета. Один из способов сделать это - создать отдельный этап, который будет динамически печатать версию этого конкретного пакета в файл, от которого будет зависеть ваш этап:
dvc run -o mypkgver 'pip show mypkg > mypkgver’ dvc run -d mypkgver -d ... -o .. mycmd
- Есть ли способ принудительно пересчитывать хэши зависимостей в конвейерном DVC-файле? Например. Я внес в код несколько изменений, связанных с пробелами / комментариями, и хочу сказать dvc: Все в порядке, вам не нужно все заново вычислять.
Да, вы могли dvc commit -f
. Он сохранит всю текущую контрольную сумму без повторного запуска ваших команд.
- У меня есть проекты, в которых используются данные, хранящиеся в S3. У меня никогда не было локальных данных для использования dvc push, но я бы хотел, чтобы эта версия данных контролировалась . Есть ли способ использовать функции DVC в этом случае использования?
Да! Эта функция DVC называется внешние выходы и внешние зависимости. Вы можете использовать один из них или оба для отслеживания, обработки и версии ваших данных в облачном хранилище, не загружая их локально.
Если у вас есть какие-либо вопросы, проблемы или идеи, дайте нам знать здесь, и наша звездная команда свяжется с вами в кратчайшие сроки!