Рубрики
Без рубрики

Как победить Pyphon’s Pip: обезьяна зависимостей, осматривая качество зависимостей с тензорфовкой

В этой статье мы продолжим осматривать качество программного обеспечения. Вместо того, чтобы выбирать пакет … Помечено Python, Data Science, машинным обучением, открытым исходным кодом.

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

Замок Нейратен, расположенный в скалах Бастеи, недалеко от Ратена в Саксонской Швейцарии, Германия. Изображение автором.

В Предыдущая статья , но в основном В вступительной статье «Как победить серию Python’s Pip» Мы описали пространство состояния всех возможных программных стеков, которые могут быть разрешены для стекла приложений, учитывая требования к библиотекам. Каждый разрешенный программный стек в таком пространстве состояния может быть оценен по функции оценки, которая может вычислить « Насколько хорошим является данное программное обеспечение ». На рисунке ниже мы можем увидеть интерполированную функцию оценки для разрешенных программных стеков, созданных из двух библиотек Simplib и notherlib Анкет

На изображении выше показана функция интерполированной оценки для пространства состояний, выполненного при установке двух зависимостей ” simplelib ” и ” notherlib ” в разных версиях (допустимые комбинации разных версий, установленных вместе).

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

Для реальных приложений мы можем очень легко получить десятки размеров (например, установив tensorflow == 2.3.0 Мы включаем 36 различных пакетов в разные версии, таким образом, 36 измерений плюс одно измерение для функции оценки). Эти размеры вводят различные входные особенности, которые влияют на поведение приложений, что отражается на функции оценки. Как мы уже знаем на основе нашей последней статьи , любая проблема в любой из этих пакетов может представить проблему в нашем приложении (время выполнения или время наращивания).

Все возможные версии (все возможные 36-мерные векторы после нашего примера) невозможно проверить в разумное время и, таким образом, требуют некоторого интеллектуального выбора, который версии должны быть включены в окончательный разрешенный стек. Одним из механизмов нарезки является фактический резолювер – он может нарезать возможные разрешения, соответствующие спецификациям диапазона версий пакетов на графике зависимости. Но как мы можем еще больше ограничить количество возможных стеков разумной выборкой?

Пакеты «B» в версиях <1.5.0 будут удалены на основе разрешения – они не являются допустимыми разрешениями после спецификации диапазона версий пакета «A». Следовательно, они ограничат размер соответствующей функции «B».

Помимо удаления пакетов на основе спецификации диапазона версий в Resolver, компоненте под названием Зависимость обезьяна способен использовать « трубопроводные единицы ». Весь процесс разрешения рассматривается как трубопровод, изготовленный из конвейерных единиц разных типов, которые решают, следует ли учитывать пакеты во время разрешения. Другими словами, если следует проверить разрешенные стеки, образованные из выбранных пакетов.

Примером может быть проверка программного стека TensorFlow. Если мы хотим проверить конкретный тензорфлоу с Numpy Версии для совместимости мы можем пропустить уже протестированные комбинации программных стеков (например, на основе запросов в нашей базе данных с предыдущими результатами теста).

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

В предыдущей статье под названием «Как победить Pyphon’s Pip: осмотреть качество программного обеспечения для машинного обучения » Мы представили услугу под названием Амун Это может запускать программное обеспечение, касающееся спецификации, в которой говорится, как приложение собирается и запускается. Помимо информации об используемой операционной системе или оборудовании, она также принимает список пакетов, которые должны быть установлены для создания и запуска программного обеспечения.

Как Зависимость обезьяна может разрешить программные стеки Python, он становится одним из пользователей службы Amun. Просто сказал, если Зависимость обезьяна Разрешает программный стек Python, который он считает действительным кандидатом на тестирование, он подчиняет его Амун чтобы осмотреть его качество.

Мы используем «качество», чтобы описать определенный аспект программного обеспечения. Одним из таких качественных аспектов может быть производительность или другое поведение времени выполнения. Тот факт, что приложение не может построить, также является индикатором качества программного стека.

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

Обезьяна «Зависимость» создана из конвейеров, которые помогают разрешить программные стеки Python на основе входного вектора с учетом базы знаний.

Давайте проверим некоторые зависимости стека TensorFlow (я использовал TensorFlow в версии 2.1.0 Список зависимостей будет отличаться в разных версиях). Если мы возьмем Посмотрите на прямые зависимости Tensorflow , мы найдем такие пакеты, как h5py , Opt-Einsum , Scipy , Керас-Перепроцессия и Tensorboard в конкретных версиях. Они разделяют общую зависимость Numpy , прямая зависимость самого тензора (см. Все указанные пакеты могут быть установлены в разных версиях, которые могут иметь разные требования к диапазону версий на Numpy. Фактическая версия Numpy, установленную, зависит от процесса разрешения и процесса разрешения, который может учитывать также другие библиотеки, которые пользователь попросил установить (помимо Tensorflow в качестве единственной прямой зависимости). Здесь стоит точно определить, что любая проблема в Numpy (даже несовместимость, представленная overpinning или в основе ) может привести к сломанному применению Анкет Итак, давайте попробуем проверить стек TensorFlow с различными комбинациями Numpy.

В предстоящем видео вы можете увидеть краткую прогулку по обезьянам «Зависимость» вместе с сервисом под названием Амун Анкет В первой части демонстрации ( Начиная с 19:25 ), Зависимость обезьяна Разрешает программные стеки с учетом агрегированных знаний (одним из таких знаний является информация о зависимости, необходимая во время разрешения ) и Представляет эти программные стеки в Amun для проверки качества программного обеспечения Анкет Протестированный программный стек является TensorFlow в версии 2.1.0, используя Построить опубликовано на PYPI , с различными комбинациями Numpy, разрешено (весь стек приложений сформирован с пакетами в одной версии пакета, но версии Numpy корректируются в отношении графика зависимости).

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

Вторая часть демонстрации ( Начиная с 28:13 ) показывает Зависимость обезьяна Разрешение, которое случайным образом пробует пространство состояния всех возможных стеков тензорфлова. Как мы уже знаем, это пространство состояния слишком велик, поэтому проверять все комбинации невозможно в разумное время. Зависимость обезьяна Случайно генерирует программные стеки, которые являются допустимыми разрешениями программного обеспечения TensorFlow и передают их в Amun, что проверяет программный стек и работает правильно.

Такая случайная выборка пространства состояния может обнаружить проблемы. Одной из таких интересных проблем в стеке TensorFlow 2.1 является зависимость urllib3 Это при установке в определенной версии может вызвать ошибки времени выполнения при импорте TensorFlow. Смотрите Этот документ для подробного обзора Анкет Обратите внимание, что установленная версия может зависеть также от других библиотек, которые может использовать приложение, помимо Tensorflow, поэтому по этому вопросу могут быть затронуты приложения.

Project Thoth – это приложение, которое направлено на то, чтобы помочь разработчикам Python. Если вы хотите, чтобы вас обновляли о любых улучшениях и любом прогрессе, который мы добиваемся в Project Thoth, не стесняйтесь подписаться на нашем Канал YouTube где мы публикуем обновления, а также записи от Scrum Demos. Проверьте также Наш Твиттер Анкет

Следите за обновлениями!

Оригинал: “https://dev.to/fridex/how-to-beat-python-s-pip-dependency-monkey-inspecting-the-quality-of-tensorflow-dependencies-6fc”