New-ZZZ
RU / EN

TorchNeuron упрощает разработку на PyTorch на AWS Trainium

Р
Редакция New-ZZZ
Hugging Face Blog · 2 недели назад

TorchNeuron представляет собой значительный архитектурный скачок для разработчиков, использующих PyTorch на специализированном AI-оборудовании, в частности на чипах AWS Trainium и Inferentia. Этот новый плагин PyTorch коренным образом меняет способ взаимодействия пользователей с этими ускорителями, отходя от сложных рабочих процессов, управляемых компилятором, к бесшовному, нативному опыту PyTorch. Основная инновация заключается в обеспечении поддержки критически важных функций PyTorch — а именно, eager execution, torch.compile и нативных распределенных примитивов, таких как FSDP (Fully Sharded Data Parallel) и TP (Tensor Parallel) — непосредственно на бэкенде Neuron.

Исторически интеграция обширной экосистемы AI-моделей Hugging Face на AWS Trainium и Inferentia, чипах, разработанных для масштабируемого и экономически эффективного обучения и инференса, требовала от разработчиков использования optimum-neuron. Хотя эта библиотека успешно абстрагировала большую часть внутренней сложности, она навязывала пользователю ограничивающее, похожее на компилятор мышление. Это означало, что разработчики должны думать в терминах «ленивых тензоров» (lazy tensors), а не в интуитивной модели «eager execution», знакомой пользователям PyTorch. Кроме того, зависимость от PyTorch XLA означала, что система требовала статических форм и обуславливала полную перекомпиляцию при обнаружении разрыва или вариации вычислительного графа. Optimum-neuron существовал в основном как сложная обёртка для сокрытия этой внутренней сложности, требуя пользовательского кода для классов моделирования и тренеров для поддержания совместимости.

TorchNeuron напрямую устраняет эти ограничения, интегрируясь в фреймворк PyTorch нативно. Он предоставляет возможности Neuron как первоклассное, нативное устройство, позволяя разработчикам использовать стандартные распределенные примитивы PyTorch (такие как DTensor и FSDP2) и высокоэффективный механизм torch.compile без необходимости промежуточных обёрток. Этот сдвиг монументален, потому что это означает, что весь стек библиотек Hugging Face — включая Transformers, Diffusers, Accelerate, PEFT и TRL — теперь может работать непосредственно на Trainium, используя те же самые классы и скрипты, которые использовались бы на любом другом стандартном ускорителе, что значительно упрощает конвейер развертывания.

Для генерации текста улучшение особенно заметно. С TorchNeuron коэффициент совместимости моделей для генерации текста вырос до 89% из топ-100 наиболее используемых архитектур, что является огромным увеличением по сравнению с коэффициентом совместимости в 46%, наблюдавшимся с предыдущей версией Optimum Neuron. Пользователям просто необходимо передать аргумент device_map=neuron в свой код, и модель автоматически будет перемещена и оптимизирована для устройств Neuron. Плагин также настоятельно рекомендует использовать статический кэш во время генерации — важнейшую технику оптимизации для Neuron, чтобы предотвратить частые, ухудшающие производительность перекомпиляции системы.

Последствия для тонкой настройки и обучения моделей не менее глубоки. Теперь разработчики могут использовать стандартные библиотеки Hugging Face, такие как SFTTrainer от TRL, на экземпляре Trainium без необходимости специального, специфичного для Neuron форка кода модели или специализированного тренера. Процесс обработки параллелизма теперь управляется нативно самой библиотекой Transformers. При настройке тренировочного запуска разработчик просто указывает желаемые размеры тензорного параллелизма (TP) и FSDP в DistributedConfig. SFTTrainer передает эту конфигурацию в from_pretrained, и веса модели корректно шардируются при загрузке. Что критически важно, стандартный Trainer обнаруживает, что модель уже распределена, и не пытается обернуть её снова, устраняя необходимость в ручных флагах, таких как --fsdp, или сложной конфигурации FSDP Accelerate. Это нативное управление распределенным обучением значительно снижает когнитивную нагрузку и потенциальные точки отказа для конечного пользователя.

С технической точки зрения, хотя рабочий процесс и упрощен, некоторые лучшие практики остаются критически важными для оптимальной производительности на Trainium. Разработчики должны обеспечить сохранение статических форм, поскольку система отключает автоматическую обработку динамических форм в рамках torch.compile. Это включает использование обёрнутой упаковки (wrapped packing) для обработки последовательностей до 2048 токенов. Кроме того, при использовании версий TRL 1.16 и выше, батчи на Neuron дополняются до кратного 128 токенов, что ограничивает возможные входные формы, но это необходимо для эффективной повторной генерации скомпилированных графов на последующих шагах. Для активации преимуществ производительности torch.compile пользователям достаточно передать --torch_compile true; система автоматически обнаруживает устройство Trainium и выбирает бэкенд Neuron без необходимости дополнительной конфигурации. Другая ключевая техническая заметка заключается в том, что встроенная функция асинхронной загрузки весов в Transformers не поддерживается на Neuron, что требует от пользователей явного отключения её через переменную окружения HF_DEACTIVATE_ASYNC_LOAD=1.

Процесс запуска задания распределенного обучения оптимизирован с помощью torchrun. Структура команды позволяет пользователю определить макет параллелизма — например, установить TP_SIZE и FSDP_SIZE для создания сетки 4x8. Комбинация Tensor Parallelism (разделение слоев по 4 ядрам группы TP) и FSDP (шардирование параметров, градиентов и состояния оптимизатора по 8 группам TP) обеспечивает максимальное использование оборудования. Весь тренировочный запуск завершается, и полученная контрольная точка модели, сохраненная функцией trainer.save_model, является стандартной, портативной контрольной точкой Transformers, что означает, что её можно отправить в Hugging Face Hub и загрузить на любом другом оборудовании без модификаций. Способность генерировать стандартную, независимую от оборудования контрольную точку, возможно, является самой ценной функцией для корпоративного развертывания, обеспечивая максимальную портативность.

Помимо генерации текста, совместимость распространяется и на другие сложные конвейеры. Многие конвейеры в библиотеке Diffusers совместимы с TorchNeuron, поддерживая как eager, так и скомпилированные режимы. Более того, такие продвинутые модели, как FLUX.1-dev, FLUX.2, Qwen-Image, Qwen-Image-2.1 и H3, подтверждены как совместимые с тензорным параллелизмом, что позволяет разработчикам в полной мере использовать многоядерные возможности устройств Neuron. Постоянное расширение поддерживаемых конвейеров и глубокая интеграция в основной API PyTorch закрепляют позицию TorchNeuron как окончательного инструмента для запуска передовых AI-моделей на AWS Trainium, делая высокопроизводительное распределенное AI-разработка значительно более доступной и надежной, чем когда-либо прежде.

Почему это важно

  • —Значительно упрощает рабочий процесс, предоставляя нативную поддержку PyTorch на специализированных AI-чипах.
  • —Устраняет необходимость в сложных обертках на основе компилятора, позволяя использовать стандартные функции PyTorch, такие как eager execution и `torch.compile`.
  • —Значительно повышает совместимость, поддерживая 89% лучших моделей генерации текста "из коробки".

Ключевые факты

  • TorchNeuron — это плагин для PyTorch, обеспечивающий нативную поддержку AWS Trainium/Inferentia.
  • Поддерживает eager execution, `torch.compile` и нативные распределенные API (FSDP, TP).
  • Стандартные библиотеки Hugging Face (Transformers, Diffusers, TRL) работают непосредственно на Trainium, упрощая развертывание.
  • Совместимость генерации текста увеличена до 89% лучших моделей, по сравнению с 46% при предыдущих методах.
Читать первоисточник →

Полный текст — в первоисточнике. Здесь — краткое изложение и ключевые факты.

/ похожие материалы