Skip to content
Меню
ЗВЁЗДНЫЕ ВОЙНЫ ЭНЦИКЛОПЕДИЯ РОЛЕВОЙ ИГРЫ
  • Рисование
  • Советы начинающим
  • Как рисовать
  • Карандашом
  • Поэтапно
  • Уроки
ЗВЁЗДНЫЕ ВОЙНЫ
Главная » Разное » Узоры по клеточкам в тетради сложные: Рисунки Сложные По клеточкам в тетради (149 картинок)

Узоры по клеточкам в тетради сложные: Рисунки Сложные По клеточкам в тетради (149 картинок)

Posted on 14.05.202326.02.2023

Содержание

  • Красивые узоры по клеточкам в тетради
  • Beyond Interactive: инновации в ноутбуках от Netflix | by Netflix Technology Blog
  • Как тестировать блокноты Jupyter с помощью Pytest и Nbmake
    • Предварительные условия
    • Демонстрационное приложение
    • Локальное тестирование записных книжек
    • Игнорировать ожидаемые ошибки в ноутбуке
    • Ускорьте выполнение с помощью pytest-xdist
    • Исключение определенных ноутбуков из тестовых прогонов
    • Автоматизация тестов Notebook на Semaphore CI
    • Устранение некоторых распространенных ошибок
    • Заключение

Красивые узоры по клеточкам в тетради

Рисунки половинки по клеточкам


Узоры по клеточкам в тетради


Узоры по клеточкам


Узоры на листе бумаги


Геометрические орнаменты и узоры по клеткам


Геометрические узоры в тетради


Косички по клеточкам


Клетка узор


Узоры для рисования по клеткам


Рисунки по клеточкам ручкой


Узоры по клеточкам в тетради


Узоры по клеточкам 1 класс


Симметричное рисование по клеткам


Фигуры в клеточках для дошкольников


Необычные узоры по клеточкам


Рисунки по клеточкам в тетради ручкой


Узоры по клеточкам в тетради


Повтори рисунок


Узоры в тетради в клетку


Узоры по клеточкам


Узоры в тетради в клетку


Узоры по клеточкам


Узоры в тетради в клетку


Рисунки по клеточкам линиями


Геометрические узоры по клеточкам


Геометрические узоры в тетради


Эскиз вышивки на листе в клетку



Геометрические узоры по клеточкам


Узоры в тетради в клетку


Узоры в тетради в клетку


Геометрические фигуры по клеточкам сложные


Узоры по клеточкам в тетради


Рисование по клеточкам узоры сложные


Узоры в тетради в клетку


Узоры по клеточкам в тетради


Узоры по клеточкам в тетради


Геометрические узоры в тетради в клетку


Красивые узоры по клеточкам в тетради


Узоры в тетрадке


Узоры по клеточкам для детей


Кельтский узор в клетку


Орнамент на полях тетради


Сложные орнаменты по клеточкам


Рисунки ручкой в тетради в клетку


Узоры по клеточкам в тетради


Узоры в тетради в клетку


Узоры по клеточкам в тетради


Узоры в тетради в клетку


Узоры по клеточкам в тетради сложные геометрические


Узоры по клеточкам в тетради


Задания на симметрию для дошкольников


Узоры по клеточкам для дошкольников


Клеточные узоры в тетради


Геометрические узоры по клеточкам


Узоры по клеточкам для дошкольников


Узоры по клеточкам в тетради


Узоры по клеточкам в тетради


Узоры по клеточкам в тетради сложные


Узоры по клеточкам в тетради


Красивые узоры в тетради


Графические узоры для дошкольников


Узоры в клетку для дошкольников


Математический орнамент


Узоры по клеточкам в тетради


Узоры в клеточку в тетради


Необычные узоры по клеточкам


Узоры по клеточкам в тетради


Рисование по клеточкам узоры


Повтори узор


Узоры в клетку для дошкольников


Узорова Нефедова узоры по клеточкам


Узоры в клеточку в тетради


Узоры в клеточку


Рисование косичек по клеточкам


Узоры по клеточкам в тетради


Рисование по клеточкам узоры


Узоры в клеточку в тетради


Косички по клеточкам


Узоры на листе в клетку


Математический узор по клеткам


Узоры по клеточкам в тетради

Beyond Interactive: инновации в ноутбуках от Netflix | by Netflix Technology Blog

Мишель Аффорд, М. Пэйсер, Мэтью Сил и Кайл Келли

Ноутбуки быстро завоевали популярность среди специалистов по данным, став стандартом де-факто для быстрого прототипирования и исследовательского анализа. В Netflix мы расширяем границы еще дальше, переосмысливая то, что может быть ноутбук, кто может его использовать и что они могут с ним делать. И мы делаем большие инвестиции, чтобы помочь воплотить это видение в реальность.

В этом посте мы расскажем о наших мотивах и о том, почему мы находим блокноты Jupyter такими привлекательными. Мы также представим компоненты нашей инфраструктуры ноутбуков и рассмотрим некоторые новые способы использования ноутбуков в Netflix.

Если у вас мало времени, рекомендуем перейти к разделу «Случаи использования».

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

Сделать это возможным — немалый подвиг; для этого требуется обширная инженерная и инфраструктурная поддержка. Каждый день более 1 триллиона событий записываются в конвейер потоковой загрузки, который обрабатывается и записывается в облачное хранилище данных объемом 100 ПБ. И каждый день наши пользователи выполняют более 150 000 заданий с этими данными, охватывая все, от отчетов и анализа до алгоритмов машинного обучения и рекомендаций. Чтобы поддерживать эти варианты использования в таком масштабе, мы создали ведущую в отрасли платформу данных, которая является гибкой, мощной и сложной (по необходимости). Мы также создали богатую экосистему дополнительных инструментов и сервисов, таких как Genie, федеративная служба выполнения заданий, и Metacat, федеративное хранилище метаданных. Эти инструменты упрощают сложность, позволяя поддерживать более широкий круг пользователей в компании.

Разнообразие пользователей — это здорово, но за это приходится платить: платформу данных Netflix и ее экосистему инструментов и сервисов необходимо масштабировать, чтобы поддерживать дополнительные варианты использования, языки, шаблоны доступа и многое другое. Чтобы лучше понять эту проблему, рассмотрим 3 общие роли: инженер-аналитик, инженер данных и специалист по данным.

Пример того, как инструменты и языковые настройки могут различаться для разных ролей

Как правило, каждая роль зависит от своего набора инструментов и языков. Например, инженер данных может создать новый агрегат набора данных, содержащий триллионы потоковых событий, используя Scala в IntelliJ. Инженер-аналитик может использовать этот агрегат в новом отчете о глобальном качестве потоковой передачи — с использованием SQL и Tableau. И этот отчет может привести к тому, что специалист по обработке и анализу данных создаст новую модель потокового сжатия — с использованием R и RStudio. На первый взгляд они кажутся разрозненными, хотя и взаимодополняющими рабочими процессами. Но если мы копнем глубже, мы увидим, что каждый из этих рабочих процессов имеет несколько пересекающихся задач:

исследование данных — происходит в начале проекта; может включать просмотр выборочных данных, выполнение запросов для статистического профилирования и исследовательского анализа, а также визуализацию данных

подготовка данных — итеративная задача; может включать очистку, стандартизацию, преобразование, денормализацию и агрегирование данных; обычно самая трудоемкая задача проекта

проверка данных — повторяющаяся задача; может включать просмотр выборочных данных, выполнение запросов для статистического профилирования и совокупного анализа, а также визуализацию данных; обычно происходит на этапах исследования данных, подготовки данных, разработки, перед развертыванием и после развертывания

продукционализация — происходит в конце проекта; может включать развертывание кода в рабочей среде, заполнение наборов данных, модели обучения, проверку данных и планирование рабочих процессов

Чтобы помочь нашим пользователям масштабироваться, мы хотим сделать эти задачи максимально легкими. Чтобы помочь нашей платформе масштабироваться, мы хотим свести к минимуму количество инструментов, которые нам необходимо поддерживать. Но как? Ни один инструмент не может охватить все эти задачи; более того, для выполнения одной задачи часто требуется несколько инструментов. Однако когда мы добавляем еще один уровень абстракции, для инструментов и языков возникает общая схема: запускать код, исследовать данные, представлять результаты.

Как раз для этого и был разработан проект с открытым исходным кодом: Project Jupyter. Блокнот

Jupyter, визуализированный в интерактивном рабочем столе с участием Vega и Altair

Проект Jupyter начался в 2014 году с целью создания последовательного набора инструментов с открытым исходным кодом для научных исследований, воспроизводимых рабочих процессов, вычислительных повествований и анализа данных. Эти инструменты хорошо зарекомендовали себя в промышленности, и сегодня ноутбуки Jupyter стали неотъемлемой частью набора инструментов для специалистов по обработке и анализу данных. Чтобы дать вам представление о его влиянии, Jupyter был награжден премией ACM Software Systems Award 2017 — престижной наградой, которую он разделяет с Java, Unix и Интернетом.

Чтобы понять, почему блокнот Jupyter так привлекателен для нас, рассмотрим основные функции, которые он предоставляет:

  • протокол обмена сообщениями для самоанализа и выполнения кода, который не зависит от языка
  • редактируемый формат файла для описания и захвата кода, вывода кода , и примечания к уценке
  • веб-интерфейс для интерактивного написания и запуска кода, а также визуализации выходных данных

Протокол Jupyter предоставляет стандартный API обмена сообщениями для связи с ядрами, которые действуют как вычислительные механизмы. Протокол обеспечивает компонуемую архитектуру, которая разделяет место написания контента (пользовательский интерфейс) и место выполнения кода (ядро). Изолируя среду выполнения от интерфейса, ноутбуки могут охватывать несколько языков, сохраняя при этом гибкость в настройке среды выполнения. Если существует ядро ​​для языка, который знает, как взаимодействовать с использованием протокола Jupyter, ноутбуки могут запускать код, отправляя сообщения туда и обратно с этим ядром.

В основе всего этого лежит формат файла, в котором код и результаты хранятся вместе. Это означает, что результаты могут быть доступны позже без необходимости повторного запуска кода. Кроме того, в записной книжке хранится богатая проза, чтобы дать контекст тому, что происходит в записной книжке. Это делает его идеальным форматом для передачи бизнес-контекста, документирования предположений, аннотирования кода, описания выводов и многого другого.

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

Доступ к данным

Ноутбуки впервые были представлены в Netflix для поддержки рабочих процессов обработки данных. По мере того, как их популярность среди специалистов по данным росла, мы увидели возможность масштабировать наши усилия по созданию инструментов. Мы поняли, что можем использовать универсальность и архитектуру ноутбуков Jupyter и расширить их для общего доступа к данным. В третьем квартале 2017 года мы серьезно начали эту работу, превратив ноутбуки из нишевого инструмента в первоклассного гражданина платформы данных Netflix.

С точки зрения наших пользователей, ноутбуки предлагают удобный интерфейс для итеративного выполнения кода, изучения выходных данных и визуализации данных — и все это в единой облачной среде разработки. Мы также поддерживаем библиотеку Python, которая объединяет доступ к API платформы. Это означает, что пользователи имеют программный доступ практически ко всей платформе из ноутбука. Благодаря такому сочетанию универсальности, мощности и простоты использования мы наблюдаем быстрое органичное внедрение для всех типов пользователей на всей нашей платформе.

Сегодня блокноты — самый популярный инструмент для работы с данными в Netflix.

Шаблоны для ноутбуков

Поскольку мы расширили поддержку платформы для ноутбуков, мы начали внедрять новые возможности для удовлетворения новых вариантов использования. В результате этой работы появились параметризованные ноутбуки. Блокнот с параметрами — это именно то, на что он похож: блокнот, который позволяет указывать параметры в коде и принимать входные значения во время выполнения. Это предоставляет пользователям отличный механизм для определения записных книжек в качестве многократно используемых шаблонов.

Наши пользователи нашли удивительное количество применений для этих шаблонов. Вот некоторые из наиболее распространенных:

  • Data Scientist: провести эксперимент с различными коэффициентами и обобщить результаты
  • Data Engineer: выполнить набор проверок качества данных в рамках процесса развертывания
  • Data Аналитик: делятся подготовленными запросами и визуализациями, чтобы заинтересованные стороны могли исследовать более глубоко, чем позволяет Tableau
  • Инженер-программист: отправлять по электронной почте результаты сценария устранения неполадок каждый раз, когда происходит сбой

Блокноты планирования

Один из самых новых способов использования блокнотов — это объединяющий слой для планирования рабочих процессов.

Поскольку каждый ноутбук может работать с произвольным ядром, мы можем поддерживать любую среду выполнения, определенную пользователем. А поскольку записные книжки описывают линейный поток выполнения, разбитый на ячейки, мы можем сопоставить сбой с конкретными ячейками. Это позволяет пользователям описать краткое описание выполнения и визуализаций, по которым мы можем точно составить отчет при запуске в более поздний момент времени.

Эта парадигма означает, что мы можем использовать блокноты для интерактивной работы и плавно переходить к планированию этой работы для периодического выполнения. Для пользователей это очень удобно. Многие пользователи создают весь рабочий процесс в записной книжке только для того, чтобы скопировать/вставить его в отдельные файлы для планирования, когда они будут готовы его развернуть. Рассматривая записные книжки как логический рабочий процесс, мы можем легко планировать его так же, как и любой другой рабочий процесс.

Мы также можем планировать другие виды работы через блокноты. Когда задание Spark или Presto выполняется из планировщика, исходный код внедряется во вновь созданную записную книжку и выполняется. Затем эта записная книжка становится неизменной исторической записью, содержащей все связанные артефакты, включая исходный код, параметры, конфигурацию времени выполнения, журналы выполнения, сообщения об ошибках и т. д. При устранении сбоев это обеспечивает быструю отправную точку для расследования, поскольку вся необходимая информация находится в одном месте, а блокнот может быть запущен для интерактивной отладки.

Для поддержки этих вариантов использования в масштабах Netflix требуется обширная вспомогательная инфраструктура. Давайте кратко представим некоторые из проектов, о которых мы будем говорить.

interact — это пользовательский интерфейс нового поколения на основе React для ноутбуков Jupyter. Он предоставляет простой, интуитивно понятный интерфейс и предлагает несколько улучшений по сравнению с классическим пользовательским интерфейсом Jupyter, таких как встроенные панели инструментов ячеек, ячейки с возможностью перетаскивания и встроенный проводник данных.

Papermill — это библиотека для параметризации, выполнения и анализа блокнотов Jupyter. С его помощью вы можете создавать несколько блокнотов с разными наборами параметров и выполнять их одновременно. Papermill также может помочь собрать и обобщить метрики из коллекции записных книжек.

Commuter — это облегченная вертикально масштабируемая служба для просмотра и совместного использования записных книжек. Он предоставляет совместимую с Jupyter версию API содержимого и упрощает чтение блокнотов, хранящихся локально или на Amazon S3. Он также предлагает проводник каталогов для поиска и обмена блокнотами.

Titus — это платформа управления контейнерами, которая обеспечивает масштабируемое и надежное выполнение контейнеров и облачную интеграцию с Amazon AWS. Titus был создан внутри Netflix и используется в производстве для обеспечения потоковой передачи, рекомендаций и систем контента Netflix.

Мы исследуем эту архитектуру в нашей последующей публикации в блоге Планирование записных книжек в Netflix. Для целей этого поста мы просто представим три его основных компонента: хранилище, вычисления и интерфейс.

Инфраструктура ноутбуков в Netflix

Хранилище

Платформа данных Netflix использует Amazon S3 и EFS для облачных хранилищ, которые ноутбуки рассматривают как виртуальные файловые системы. Это означает, что у каждого пользователя есть домашний каталог в EFS, который содержит личную рабочую область для ноутбуков. В этой рабочей области мы храним любую записную книжку, созданную или загруженную пользователем. Здесь также происходит вся деятельность по чтению и письму, когда пользователь запускает записную книжку в интерактивном режиме. Мы полагаемся на комбинацию из [рабочая область + имя файла] для формирования пространства имен блокнота , например. /efs/users/kylek/notebooks/MySparkJob.ipynb . Мы используем это пространство имен для просмотра, совместного использования и планирования записных книжек. Это соглашение предотвращает коллизии и упрощает идентификацию как пользователя, так и местоположения ноутбука в томе EFS.

Мы можем положиться на путь рабочей области, чтобы абстрагироваться от сложности облачного хранилища от пользователей. Например, в списках каталогов отображается только имя файла записной книжки, т.е. MySparkJob.ipynb . Этот же файл доступен по адресу ~/notebooks/MySparkJob.ipynb из терминала.

Хранилище записной книжки и доступ к записной книжке

Когда пользователь планирует записную книжку, планировщик копирует записную книжку пользователя из EFS в общий каталог на S3. Источником правды для планировщика становится блокнот на S3, или исходный блокнот . Каждый раз, когда планировщик запускает записную книжку, он создает новую записную книжку из исходной записной книжки. Эта новая записная книжка — это то, что фактически выполняется, и становится неизменной записью этого выполнения, содержащей код, выходные данные и журналы из каждой ячейки. Мы называем это выходной блокнот .

Сотрудничество — основа нашей работы в Netflix. Неудивительно, что пользователи начали делиться URL-адресами записных книжек. По мере роста этой практики мы сталкивались с частыми проблемами со случайной перезаписью, вызванной одновременным доступом нескольких людей к одному и тому же блокноту. Нашим пользователям нужен был способ поделиться своей активной записной книжкой в ​​состоянии только для чтения. Это привело к созданию Commuter . За кулисами Commuter представляет API Jupyter для /files и /api/contents для просмотра каталогов, просмотра содержимого файлов и доступа к метаданным файлов. Это означает, что пользователи могут безопасно просматривать записные книжки, не затрагивая рабочие задания или работающие записные книжки.

Вычисления

Управление вычислительными ресурсами — одна из самых сложных частей работы с данными. Это особенно актуально для Netflix, где мы используем высокомасштабируемую контейнерную архитектуру на AWS. Все задания на платформе данных выполняются в контейнерах, включая запросы, конвейеры и блокноты. Естественно, мы хотели максимально абстрагироваться от этой сложности.

Контейнер предоставляется, когда пользователь запускает сервер ноутбуков. Мы предоставляем разумные значения по умолчанию для ресурсов контейнера, которые подходят для примерно 87,3% шаблонов выполнения. Когда этого недостаточно, пользователи могут запросить дополнительные ресурсы с помощью простого интерфейса.

Пользователи могут выбрать столько вычислений и памяти, сколько им нужно

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

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

Интерфейс

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

Мы знаем, что хотим стремиться к простоте. Это означает интуитивно понятный пользовательский интерфейс с минималистичной эстетикой, а также требует продуманного UX, который упрощает выполнение сложных задач. Эта философия хорошо согласуется с целями interact — внешнего интерфейса для ноутбуков Jupyter на основе React. Он подчеркивает простоту и компонуемость как основные принципы проектирования, что делает его идеальным строительным блоком для работы, которую мы хотим выполнить.

Одна из наиболее частых жалоб, которые мы слышим от пользователей, — это отсутствие встроенной визуализации данных за пределами языка, особенно для языков, отличных от Python. Обозреватель данных Interact — хороший пример того, как мы можем упростить трудные задачи, предоставив независимый от языка способ быстрого изучения данных.

Вы можете увидеть Data Explorer в действии в этом образце записной книжки на MyBinder. (обратите внимание: загрузка может занять минуту)

Визуализация набора данных отчета о мировом счастье с помощью обозревателя данных nteract

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

Встроенная поддержка параметризованных записных книжек в интерактивном режиме

Хотя записные книжки уже предлагают большую ценность в Netflix, мы только начали. Мы знаем, что нам необходимо вкладывать средства как в интерфейс, так и в серверную часть, чтобы улучшить общее впечатление от ноутбука. Наша работа в течение следующих 12 месяцев сосредоточена на повышении надежности, прозрачности и совместной работы. Контекст имеет первостепенное значение для пользователей, поэтому мы улучшаем видимость состояния кластера, состояния ядра, истории заданий и многого другого. Мы также работаем над автоматическим контролем версий, собственным планированием в приложении, улучшенной поддержкой визуализации Spark DataFrames и повышением стабильности нашего ядра Scala. Подробнее об этой работе мы расскажем в следующем блоге.

Netflix уже давно является сторонником открытого исходного кода. Мы ценим энергию, открытые стандарты и обмен идеями, возникающие в результате сотрудничества с открытым исходным кодом. Многие из приложений, которые мы разработали для платформы данных Netflix, уже находятся в открытом доступе через Netflix OSS. Мы также намерены не создавать одноразовые решения и не поддаваться менталитету «Изобретено не здесь». Когда это возможно, мы используем и вносим свой вклад в существующие проекты с открытым исходным кодом, такие как Spark, Jupyter и pandas.

Описанная нами инфраструктура в значительной степени зависит от экосистемы Project Jupyter, но есть некоторые моменты, в которых мы расходимся. В частности, мы выбрали interact в качестве пользовательского интерфейса ноутбука для Netflix. Мы приняли это решение по многим причинам, включая соответствие нашему стеку технологий и философии дизайна. По мере того, как мы расширяем возможности ноутбука, мы, вероятно, будем создавать новые инструменты, библиотеки и сервисы. Эти проекты также будут иметь открытый исходный код как часть интерактивной экосистемы.

Мы понимаем, что то, что имеет смысл для Netflix, не обязательно имеет смысл для всех. Мы разработали эти проекты с учетом модульности. Это позволяет выбирать только те компоненты, которые имеют смысл для вашей среды, например. Papermill, не требуя обязательств перед всей экосистемой.

Как команда платформы, наша обязанность — дать возможность пользователям Netflix делать удивительные вещи с данными. Ноутбуки уже оказали сильное влияние на Netflix. Благодаря значительным инвестициям, которые мы вкладываем в это пространство, мы рады видеть, что это влияние растет. Если вы хотите стать частью этого, ознакомьтесь с нашими вакансиями.

Фу! Спасибо, что остались с нами в этом длинном посте. Мы только что коснулись того, что мы делаем с блокнотами. Этот пост — первая часть серии о ноутбуках на Netflix, которую мы выпустим в ближайшие недели. Вы можете подписаться на нас на Medium, чтобы узнать больше от Netflix и ознакомиться с опубликованными в настоящее время статьями ниже:

  • Часть I: Инновации в ноутбуках (этот пост)
  • Часть II: Планирование ноутбуков

Мы очень рады спонсировать JupyterCon в этом году. . Если вы участвуете, ознакомьтесь с одним из 5 выступлений наших инженеров или зайдите на наш стенд, чтобы поговорить о Jupyter, пообщаться или получить данные с нами.

  • 22.08 13:30 — Как строить поверх протоколов Jupyter, Кайл Келли
  • 23.08 13:50 — Записные книжки по расписанию: управляемое и отслеживаемое выполнение кода, Мэтью Сил
  • 9 /23 14:40 — Notebooks @ Netflix: From Analytics to Engineering, Мишель Аффорд, Кайл Келли
  • 23/8 17:00 — Создание красивых объектов с помощью Jupyter, M Pacer
  • 24/8 2: 40 PM — Система конфигурации Jupyter, M Pacer и др. др.
  • 8/25 9:00 — 17:00 JupyterCon Community Sprint Day

Есть и другие способы учиться на Netflix Data, и мы рады поделиться ими:

  • @NetflixData в Twitter
  • Netflix Data talks на YouTube
  • Netflix Research веб-сайт

Вы также можете оставаться в курсе последних событий через список рассылки и блог!

Как тестировать блокноты Jupyter с помощью Pytest и Nbmake

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

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

В этом руководстве описывается, как можно использовать nbmake, подключаемый модуль pytest, для автоматизации сквозного тестирования ноутбуков.

Блокнот Jupyter

Предварительные условия

Это руководство основано на базовых навыках тестирования для проектов Python, описанных в Непрерывная интеграция Python и развертывание с нуля .

Прежде чем продолжить, убедитесь, что вы знакомы с основами и что на вашем компьютере установлена ​​цепочка инструментов Python 3, такая как pip + virtualenv.

Демонстрационное приложение

Обычно проекты Python содержат папки с файлами записных книжек (известные под расширением . ipynb ) с:

  • Код моделирования для подтверждения концепции.
  • Пример документации по использованию API.
  • Продолжительные научные уроки.

В рамках этого руководства мы узнаем, как автоматизировать простые сквозные тесты на некоторых ноутбуках, содержащих упражнения Python. Спасибо pytudes за предоставление примера материала. Мы собираемся использовать этот пример проекта, так что не стесняйтесь разветвлять и клонировать его на GitHub.

treebeardtech / nbmake-examples

Внутри репозитория вы найдете папку ipynb , содержащую блокноты. Установите зависимости в requirements.txt , при желании сначала создав себе виртуальную среду.

Прежде чем перейти к следующему шагу, проверьте, можете ли вы запускать эти блокноты в выбранном вами редакторе.

Локальное тестирование записных книжек

Скорее всего, до этого момента ваш процесс тестирования включал в себя запуск записных книжек вручную через пользовательский интерфейс Jupyter Lab или аналогичный клиент. Однако это отнимает много времени и чревато ошибками.

Давайте начнем автоматизировать этот процесс в вашей среде разработки, используя nbmake в качестве первого шага вперед. Nbmake — это пакет Python, который служит плагином pytest. Он разработан автором этого руководства и используется такими известными научными организациями, как Dask, Quansight и Kitware.

Вы можете установить nbmake с помощью pip:

 pip install nbmake==0.5 

Прежде чем тестировать свои ноутбуки в первый раз, давайте проверим, все ли настроено правильно, указав pytest просто собирать (но не запускать) все тестовые случаи ноутбуков. .

➜ pytest --collect-only --nbmake "./ipynb" ================================ начинается тестовая сессия =============== ================== платформа darwin -- Python 3.8.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 корневой каталог: /Users/a/git/alex-treebeard/semaphore-demo-python-jupyter-ноутбуки плагины: nbmake-0.5 собрал 3 предмета ============================= 3 теста, собранных за 0,01 с ================ ==============

Как видите, pytest собрал некоторые элементы блокнота.

Примечание: Если вы получили сообщение нераспознанные аргументы: --nbmake , значит плагин nbmake не установлен. Это может произойти, если ваш CLI вызывает двоичный файл pytest за пределами вашей текущей виртуальной среды. Проверьте, где находится ваш двоичный файл pytest, с помощью , который pytest , чтобы подтвердить это.

Теперь, когда мы убедились, что nbmake и pytest работают вместе и видят ваши записные книжки, давайте проведем тесты по-настоящему.

 ➜ pytest --nbmake "./ipynb"
================================ начинается тестовая сессия =============== ==================
платформа darwin -- Python 3.8.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
корневой каталог: /Users/a/git/alex-treebeard/semaphore-demo-python-jupyter-ноутбуки
плагины: nbmake-0.5
собрал 3 предмета
ipynb/Боггл.ipynb . [ 33%]
ipynb/Шерил-и-Ева.ipynb . [ 66%]
ipynb/Дифференциация.ipynb . [100%]
================================= 3 пройдено за 37,65 с ============ ======================
 

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

Игнорировать ожидаемые ошибки в ноутбуке

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

К счастью, мы можем поместить директивы в метаданные нашей записной книжки, чтобы заставить nbmake игнорировать и продолжать работу после появления ошибок. Возможно, вы раньше не использовали метаданные записной книжки, поэтому самое время упомянуть, что записные книжки — это просто файлы JSON, несмотря на их ipynb расширение. Вы можете добавить настраиваемые поля, чтобы расширить их возможности:

  • Откройте файл .ipynb в простом текстовом редакторе, таком как Sublime.
  • Найдите поле kernelspec в метаданных записной книжки.
  • Добавьте объект исполнения в качестве родственного элемента спецификации ядра

В результате должно получиться что-то вроде этого:

 {
  «ячейки»: [ ... ],
  "метаданные": {
    "спецификация ядра": {...},
    "исполнение": {
      "разрешить_ошибки": правда,
      "тайм-аут": 300
    }
  }
} 

Теперь вы можете повторно запустить записную книжку, чтобы убедиться, что JSON действителен, а ошибки игнорируются.

Ускорьте выполнение с помощью pytest-xdist

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

Если ваши тесты занимают больше нескольких секунд, стоит проверить, как распараллеливание выполнения влияет на время выполнения. Мы можем сделать это с помощью другого плагина pytest pytest-xdist следующим образом:0003

Сначала установите пакет xdist. Это плагин pytest, похожий на nbmake, который добавит новые параметры командной строки.

 pip install pytest-xdist 

Запустить с числом рабочих процессов, равным auto , используя следующую команду

По умолчанию тесты доступны только для чтения: ваш файл ipynb остается на диске без изменений. Обычно это хороший вариант по умолчанию, потому что ваш редактор может быть открыт во время работы.

Однако в некоторых случаях может потребоваться сохранить результаты теста на диск. Например, если вам нужно:

  • отладить неисправные блокноты путем просмотра результатов
  • создать фиксацию в репозитории с блокнотами в воспроизводимом состоянии может указать nbmake сохранять выполненные записные книжки на диск, используя флаг overwrite :

     pytest --nbmake --overwrite "./ipynb" 

    Исключение определенных ноутбуков из тестовых прогонов

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

    Используйте флаг игнорирования pytest, чтобы отменить их выбор.

     pytest --nbmake docs --overwrite --ignore=docs/landing-page.ipynb 

    Примечание. это не сработает, если вы выбираете все блокноты с помощью шаблона глобуса, такого как ( *ipynb ), который вручную переопределяет флаги игнорирования pytest.

    Автоматизация тестов Notebook на Semaphore CI

    Используя описанные выше методы, можно создать автоматизированный процесс тестирования, используя непрерывную интеграцию Semaphore (CI). Ключевым фактором является прагматизм: найти способ протестировать большинство ваших ноутбуков и игнорировать сложные — это хороший первый шаг к повышению качества.

    Начните с создания проекта репозитория, содержащего ваши записные книжки. Выберите «Выбрать репозиторий».

    Затем подключите Semaphore к репозиторию, содержащему ваши записные книжки.

    Пока пропустите «Добавить людей», чтобы мы могли настроить наш рабочий процесс с нуля (даже если вы используете демо-репозиторий).

    Semaphore дает нам некоторую начальную конфигурацию, мы собираемся настроить ее перед запуском.

    Создайте простой одноблочный рабочий процесс со следующими деталями:

    1. Для Имя блока мы будем использовать Тест
    2. Для Имя задания мы будем использовать Тестовые тетради
    3. В Commands введите следующие команды:
     checkout
    восстановление кеша
    pip install -r требования.txt
    pip установить nbmake pytest-xdist
    хранилище кеша
    pytest --nbmake -n=auto ./ipynb 

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

    1. checkout клонирует репозиторий из GitHub
    2. cache restore загружает зависимости Python из кеша Semaphore . Это ускоряет процесс установки.
    3. pip устанавливает зависимости и инструменты.
    4. хранилище кеша сохраняет загруженные зависимости обратно в кеш.
    5. pytest запускает тесты nbmake.

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

    Конвейер должен запуститься немедленно.

    NB : Semaphore теперь имеет функцию отчетов о тестах, которая позволяет вам находить самые медленные тесты в вашем наборе тестов, находить пропущенные тесты и видеть, какие тесты не пройдены, на панели отчетов о тестах.

    Устранение некоторых распространенных ошибок

    Добавьте отсутствующее ядро ​​Jupyter в среду CI

    Если вы используете имя ядра, отличное от имени по умолчанию «python3». Вы увидите сообщение об ошибке при выполнении ваших ноутбуков в свежей среде CI: Ошибка - Нет такого ядра: 'mycustomkernel'

    Используйте ipykernel для установки пользовательского ядра:

     python -m ipykernel install --user - -name mycustomkernel 

    Если вы используете в своих записных книжках другой язык, например C++, у вас может быть другой процесс установки ядра.

    Добавьте отсутствующие секреты в среду CI

    В некоторых случаях ваш ноутбук будет извлекать данные из API, требующих токена или CLI с проверкой подлинности. Все, что работает в вашей среде разработки, должно работать и на Semaphore, поэтому сначала проверьте этот пост, чтобы узнать, как настроить секреты.

    После того, как вы установили секреты в Semaphore, вам может потребоваться настроить блокнот для чтения секретов из переменной среды, доступной в средах CI.

    Добавьте отсутствующие зависимости в среду CI

    Стек обработки данных Python часто требует установки собственных библиотек. Если вы используете conda, вполне вероятно, что они будут включены в ваш обычный процесс установки. Это немного менее вероятно, если вы используете стандартные библиотеки Python.

    Если вы не можете установить нужные библиотеки, попробуйте создать образ докера CI. Это будет проще тестировать локально и более стабильно с течением времени, чем при использовании стандартных сред Semaphore.

    Пожалуйста, помните совет о прагматизме; вы часто можете достичь 90% ценности за 10% времени. Это может включать компромиссы, такие как игнорирование ноутбуков, на которых работают модели машинного обучения, требующие графического процессора.

    Заключение

    В этом руководстве показано, как можно автоматизировать тестирование ноутбуков Jupyter, чтобы поддерживать их воспроизводимость. Блокноты оказались эффективным инструментом для построения технических нарративов. Однако из-за их новизны некоторые группы разработчиков программного обеспечения исключают их использование до тех пор, пока не появятся более четкие процессы для тестирования, проверки и повторного использования их содержимого.

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

    • Используйте предварительную фиксацию и nbstripout для удаления громоздких выходных данных блокнота перед фиксацией изменений
    • Используйте jupyter book для компиляции блокнотов в красивый сайт документации
    • Используйте ReviewNB для проверки блокнотов в запросах на вытягивание.

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • Для начинающих
  • Как рисовать
  • Карандаш
  • Поэтапно
  • Разное
  • Советы
  • Срисовка
  • Уроки
2025 © Все права защищены.