Выпущен PyTorch 1.8, поддерживающий AMD и оптимизирующий крупномасштабное обучение

PyTorch

Руководство по содержанию

4 марта по пекинскому времени официальный блог PyTorch выпустил версию 1.8. Версия. Согласно официальному представлению, новая версия в основном включает в себя компилятор и распределенные обучающие обновления, а также были добавлены некоторые мобильные учебные пособия.

В целом, это обновление версии охватывает в общей сложности более 3000 коммитов с момента выпуска версии 1.7, включая компиляцию, оптимизацию кода, интерфейсный API для научных вычислений и поддержку AMD ROCm с помощью двоичных файлов, предоставленных pytorch.org.

В то же время PyTorch 1.8 также обеспечивает функциональные улучшения и сжатие градиента для крупномасштабного обучения параллелизму конвейера и модели.

在这里插入图片描述

Некоторые из этих ключевых обновлений включают в себя:

  1. пройти черезtorch.fx, который может выполнять преобразование функций между питонами;

  2. Добавлен/скорректирован API для поддержки FFT(torch.fft), функции линейной алгебры (torch.linalg), поддерживает автоматический вывод комплексных тензоров (autograd) и повышает производительность вычисления гессиана и якобиана;

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

В PyTorch 1.8 также есть серьезные обновления для некоторых библиотек PyTorch, включая TorchCSPRNG, TorchVision, TorchText и TorchAudio.

Добавляйте и обновляйте API

Новые и обновленные API-интерфейсы включают: Дополнительные API-интерфейсы, совместимые с Numpy, и дополнительный API-интерфейс повышения производительности кода во время рассуждений и обучения.

Ниже приведено введение в основную функцию обновления Pytorch 1.8.

[стабильная версия]Torch.fftБудет поддерживать FFT в высокопроизводительном NumPy

Выпущено в PyTorch 1.8torch.fftмодуль. Этот модуль реализует NumPynp.ftПомимо функции также поддерживаются аппаратное ускорение и автоград.

[Бета]torch.linalgБудет поддерживать линейные журналы в Numpy

torch.linalgс NumPynp.linalgПрототип, обеспечивающий подобную NumPy поддержку общих операций линейной алгебры, включая разложение Холецкого, детерминанты, собственные значения и многое другое.

[Beta] Транскодирование Pthon с FX

FX позволяет разработчикамtransform(input_module : nn.Module) -> nn.ModuleЧтобы преобразовать код Python, введитеModuleнапример, получить преобразованныйModuleпример.

Распределенное обучение

Для повышения стабильности NCCL PyTorch 1.8 будет поддерживать стабильную асинхронную обработку ошибок/тайм-аутов, поддержку анализа RPC. Кроме того, добавлена ​​поддержка конвейерного параллелизма, а градиентное сжатие можно выполнять с помощью коммуникационных ловушек в DDP.

Подробности следующие:

[Бета] Конвейерный параллелизм

Предоставляет простой в использовании PyTorch API для распараллеливания конвейеров в рамках цикла обучения.

[Бета] Перехватчик связи DDP

Коммуникационный хук DDP — это универсальный интерфейс, который управляет градиентной связью между рабочими процессами, переопределяя vanilla allreduce в DistributedDataParallel.

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

Дополнительные возможности прототипирования для распределенного обучения

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

детали следующим образом:

[Прототип] ZeroRedundancyOptimizer [Прототип] Группа процессов NCCL отправки/получения [Прототип] Поддержка CUDA с TensorPipe в RPC [Прототип] Удаленный модуль

ПиТорч Мобильный

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

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

Новые руководства по PyTorch для мобильных устройств включают:

  • Сегментация изображений с DeepLabV3 на iOS

  • Сегментация изображений с DeepLabV3 на Android

Сегментация изображений с DeepLabV3 на iOS

Новое демонстрационное приложение также включает в себя сегментацию изображений, обнаружение целей, машинный перевод, интеллектуальные ответы на вопросы и т. д. (iOS и Android).

В дополнение к повышению производительности таких моделей, как MobileNetV3, на ЦП, чиновник также изменил прототип фонового графического процессора Android, чтобы охватить больше моделей и выполнять более быстрые выводы.

Кроме того, в PyTorch 1.8 представлена ​​функция интерпретатора PyTorch Mobile Lite, позволяющая пользователям уменьшить размер двоичных файлов среды выполнения.

[Prototype] PyTorch Mobile Lite Interpreter

Интерпретатор PyTorch Lite — это урезанная версия среды выполнения PyTorch, которая выполняет программы PyTorch на устройствах с ограниченным пространством и сокращает объем памяти, занимаемый двоичными файлами.

Эта функция уменьшает размер двоичного файла на 70 % по сравнению с текущей версией среды выполнения устройства.

оптимизация производительности

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

[Beta] Тестовые утилиты

Утилиты Benchmark позволяют пользователям выполнять точные измерения производительности и предоставляют комбинированные инструменты, помогающие в тестировании и постобработке.

Пример кода:

from torch.utils.benchmark import Timer

results = []
for num_threads in [1, 2, 4]:
    timer = Timer(
        stmt="torch.add(x, y, out=out)",
        setup="""
            n = 1024
            x = torch.ones((n, n))
            y = torch.ones((n, 1))
            out = torch.empty((n, n))
        """,
        num_threads=num_threads,
    )
    results.append(timer.blocked_autorange(min_run_time=5))
    print(
        f"{num_threads} thread{'s' if num_threads > 1 else ' ':<4}"
        f"{results[-1].median * 1e6:>4.0f} us   " +
        (f"({results[0].median / results[-1].median:.1f}x)" if num_threads > 1 else '')
    )

1 thread     376 us   
2 threads    189 us   (2.0x)
4 threads     99 us   (3.8x)

[Prototype] FX Graph Mode Quantization

FX Graph Mode Quantization — это новый API автоматического квантования в PyTorch. Он улучшает квантование в режиме Eager Mode, добавляя поддержку функций и автоматизируя процесс квантования.

аппаратная поддержка

[Бета-версия] Расширьте возможности PyTorch Dispatcher и улучшите процесс внутренней разработки на C++.

PyTorch 1.8 поддерживает пользователей вpytorch/pytorchСоздайте новое устройство вне дерева вне репозитория и синхронизируйте его с локальным устройством PyTorch.

[Test Edition] Двоичный файл AMD GPU теперь запущен

PyTorch 1.8 добавляет поддержку колеса ROCm.Пользователям нужно только выбрать ROCm в соответствии со стандартным селектором установки PyTorch, выбрать вариант установки, а затем выполнить команду, чтобы легко начать работу с графическим процессором AMD.

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

py torch.org/blog/py Tor C…