Мы рады представить версию torch_musa v1.0.0, основанную на PyTorch v2.0.0. В этом выпуске мы поддерживаем ряд базовых и важных функций, включая портинг CUDA ядер, управление устройствами, аллокатор памяти, распределённое обучение с параллельным проходом данных (экспериментальная) и вывод FP16 (экспериментальная). Кроме того, мы адаптировали более 300 операторов. С этими базовыми функциями и операторами torch_musa может поддерживать большое количество моделей в различных областях, включая недавно популярные большие языковые модели. Количество поддерживаемых операторов и моделей быстро растёт. С помощью torch_musa пользователи могут легко ускорять приложения ИИ на графических картах Moore Threads.
Этот выпуск стал возможен благодаря усилиям инженеров команды AI Moore Threads и других отделов. Мы искренне надеемся, что все продолжат следить за нашими работами и участвовать в них, чтобы вместе наблюдать за быстрыми обновлениями torch_musa и графических карт Moore Threads.
Благодаря совместимости с CUDA нашего MUSA программного стека, torch_musa легко поддерживает совместимые с CUDA модули. Это позволяет разработчикам переиспользовать CUDA ядра с минимальными усилиями, что значительно ускоряет адаптацию операторов.
Количество требуемой памяти постоянно меняется во время выполнения программы. Частые вызовы выделения и освобождения памяти (через musaMalloc и musaFree) обычно приводят к высоким затратам на выполнение. Для устранения этой проблемы мы реализовали кэширующий аллокатор, который запрашивает блоки памяти от MUSA и стратегически разделяет и переиспользует эти блоки без их возврата к MUSA, что приводит к значительному повышению производительности.
Для управления устройствами в torch_musa реализованы три компонента: потоки устройства, события устройства и генераторы устройства. Потоки устройства используются для управления и синхронизации запущенных ядер. Событие устройства — важный компонент, связанный с потоками, который фиксирует определённую точку в выполнении потока. Генераторы устройства используются для генерации случайных чисел. Устройства инициализируются лениво, что может улучшить запуск особенно для систем с несколькими GPU.
По мере увеличения числа параметров модели, особенно для больших языковых моделей, распределённое обучение с параллельным проходом данных становится всё более важным. torch_musa уже начал поддерживать распределённое обучение с параллельным проходом данных. Поддерживаются некоторые важные примитивы коммуникации, включая send, recv, broadcast, all_reduce, reduce, all_gather, gather, scatter, reduce_scatter и barrier. Также поддерживается интерфейс torch.nn.parallel.DistributedDataParallel. Этот модуль находится на стадии быстрого развития.
Чтобы ускорить вывод модели, мы уже поддерживаем серию операторов FP16, включая linear, matmul, unary ops, binary ops, layernorm и большинство портированных ядер. С этими операторами мы можем выполнять вывод FP16 на ряд моделей. Пожалуйста, обратите внимание, что эта функция всё ещё находится в стадии экспериментов, поддержка моделей может быть ограничена.
В torch_musa поддерживается более 300 операторов.
Многие классические и популярные модели уже поддерживаются, включая Stable Diffusion, ChatGLM, Conformer, Bert, YOLOV5, ResNet50, Swin-Transformer, MobileNetv3, EfficientNet, HRNet, TSM, FastSpeech2, UNet, T5, HifiGan, Real-EsrGan, OpenPose и многие варианты GPT.
Мы предоставляем руководство для разработчиков, которое подробно описывает подготовку среды разработки и некоторые шаги разработки.
Теперь доступны образы релиза и образы разработки.
[ВАЖНО]: Если вы хотите собрать torch_musa без использования предоставленного docker образа, пожалуйста, свяжитесь с нами по электронной почте developers@mthreads.com, чтобы получить необходимые зависимости.
Мы рады представить torch_musa v1.1.0, основанную на PyTorch v2.0.0. В этом выпуске мы добавили поддержку для важных функций, включая AMP mixed precision training, MUSAExtension, вычисления с использованием TensorCore, закрепленная память и CompareTool. Кроме того, мы адаптировали более 470 операторов, улучшили модуль DDP и реализовали больше операторов для квантизации. С torch_musa пользователи могут легко ускорить приложения AI на графических картах Moore Threads.
Этот выпуск стал возможен благодаря усилиям инженеров команды AI Moore Threads и других отделов. Мы искренне надеемся, что все продолжат следить за нашими работами и участвовать в них, чтобы вместе наблюдать за быстрыми обновлениями torch_musa и графических карт Moore Threads.
Теперь мы поддерживаем обучение с использованием mixed precision для BF16 и FP16. Однако стоит отметить, что S80 и S3000 поддерживают только fp16, в то время как S4000 поддерживает как fp16, так и bf16, и интерфейс полностью совместим с PyTorch. Пользователи могут использовать AMP следующим образом:
# low_dtype может быть torch.float16 или torch.bfloat16
def train_in_amp(low_dtype=torch.float16):
set_seed()
model = SimpleModel().to(DEVICE)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# создание объекта scaler
scaler = torch.musa.amp.GradScaler()
inputs = torch.randn(6, 5).to(DEVICE) # Перемещение данных на GPU
targets = torch.randn(6, 3).to(DEVICE)
for step in range(20):
optimizer.zero_grad()
# создание окружения autocast
with torch.musa.amp.autocast(dtype=low_dtype):
outputs = model(inputs)
assert outputs.dtype == low_dtype
loss = criterion(outputs, targets)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
return loss
MUSAExtension и CUDAExtension в основном одинаковы, за исключением того, что для MUSAExtension необходимо добавить динамическую библиотеку в путь поиска динамических библиотек. Для подробного использования обратитесь к torch_musa/torch_musa/utils/README.md и документации разработчика developer documentation. Эта проблема будет решена в следующем выпуске.
Теперь torch_musa поддерживает закрепленную память, следующий код может использовать её.
cpu_tensor = torch.rand(shape, dtype=torch.float32).pin_memory("musa")
gpu_tensor = cpu_tensor.to("musa", non_blocking=True)
S4000 имеет TensorCore, поэтому поддерживает вычисления в формате TF32. Пользователи могут использовать TF32 для ускорения следующим образом:
with torch.backends.mudnn.flags(allow_tf32=True):
# ваш код обучения.
CompareTool — это экспериментальный инструмент, предназначенный для автоматического сравнения результатов вычислений между musa и cpu, что облегчает процесс отладки. Для подробного использования обратитесь к torch_musa/utils/README.md
В torch_musa поддерживается более 470 операторов.
Мы предоставляем руководство разработчика для разработчиков, которое подробно описывает подготовку среды разработки и некоторые шаги разработки.
Теперь доступны образы релиза и образы разработки.
[ВАЖНО]: Если вы хотите собрать torch_musa без использования предоставленного образа Docker, пожалуйста, скачайте стек программного обеспечения rc2.0.0 Intel CPU_Ubuntu с https://developer.mthreads.com/sdk/download/musa?equipment=&os=&driverVersion=&version=
[ВАЖНО]:
- При установке выпущенного whl пакета, пожалуйста, удалите имя устройства. Например,
- pip install torch-2.0.0-cp310-cp310-linux_x86_64.whl
"выпускается" для полноты перевода.)
Мы рады представить версию torch_musa v1.2.1, основанную на PyTorch v2.0.0. В этой версии мы поддерживаем ряд базовых и важных функций, включая torch_musa profiler
, musa_extension
, musa_convert
, codegen
и compare_tool
. Кроме того, теперь насчитывается более 600 адаптированных операторов. С этими базовыми функциями и операторами torch_musa
может поддерживать большое количество моделей в различных областях, включая недавно популярные большие языковые модели. Количество поддерживаемых операторов и моделей быстро растет. С помощью torch_musa
пользователи могут легко ускорять приложения AI на графических картах Moore Threads.
Этот выпуск стал возможен благодаря усилиям инженеров команды AI Moore Threads и других отделений. Мы искренне надеемся, что все продолжат следить за нашими работами и участвовать в них, вместе наблюдая за быстрыми обновлениями torch_musa и графических карт Moore Threads.
Мы адаптировали официальный инструмент анализа производительности PyTorch, torch.profiler
. Пользователи могут использовать этот адаптированный инструмент для анализа деталей производительности обучения или вывода моделей PyTorch на платформе MUSA. Он может захватывать информацию о вызываемых операторах на уровне хоста или ядрах, выполняемых на GPU.
Мы реализовали интерфейс MUSAExtension
, который совместим с CUDAExtension
. Этот интерфейс можно использовать для построения пользовательских операторов на основе платформы MUSA, что позволяет полностью использовать ресурсы GPU для ускорения вычислений. Многие сторонние библиотеки PyTorch, использующие CUDAExtension
, также могут быть легко перенесены на платформу MUSA.
Мы разработали инструмент перевода под названием musa_converter, который переводит строки и API связанные с CUDA в код, совместимый с torch_musa. Это повышает эффективность миграции моделей с платформы CUDA на MUSA. Пользователи могут запустить musa_convert -h
, чтобы увидеть использование инструмента musa_converter.
Мы представляем модуль codegen для автоматического связывания и регистрации пользовательских ядер MUSA. Он расширяет возможности torchgen, следует формату файлов native_functions.yaml и поддерживает различные стратегии настройки, что значительно снижает нагрузку разработчиков.
Этот инструмент предназначен для улучшения процесса отладки и проверки моделей PyTorch за счет предоставления возможностей сравнения операций с тензорами между устройствами, отслеживания иерархий модулей и обнаружения наличия NaN/Inf значений. Он направлен на обеспечение правильности и стабильности моделей через различные этапы разработки и тестирования.
Мы следовали PyTorch operator_benchmark и адаптировали его для torch_musa
. Разработчики могут использовать его так же, как в PyTorch. Это помогает разработчикам генерировать полное описание производительности оператора, и они могут сравнивать результаты с теми, которые были получены от CUDA или других ускоряющих бэкендов, постоянно повышая производительность torch_musa
.
Поддержка операторов включает torch.mode
, torch.count_nonzero
, torch.sort(stable=True)
, torch.upsample2d/3d
, torch.logical_or/and
и т.д.
Добавлена поддержка дополнительных типов данных для torch.scatter
, torch.eq
, torch.histc
, torch.logsumexp
и т.д.
Улучшены и ускорены операторы, такие как ядра индексирования, ядра встраивания, torch.nonzero
, torch.unique
, torch.clamp
и т.д.
Добавлена возможность установки ручного seed для слоя dropout.
Поддержка SDP (scale-dot production) с GQA (grouped-query attention) и причинным маской.
Теперь использование AMP совпадает с CUDA, так как torch.autocast
автоматически включает torch_musa amp.
Мы предоставляем документацию для разработчиков, которая подробно описывает подготовку среды разработки и некоторые шаги разработки.
Мы предоставляем релизный docker-образ и docker-образ для разработки.
поэтому я добавил слово "выпускается" для улучшения смысла.)
Мы рады представить версию torch_musa v1.3.0, основанную на PyTorch v2.2.0. В этой версии мы поддерживаем FSDP (Fully Sharded Data Parallel) для обучения больших моделей и улучшаем стабильность и эффективность различных операторов. В целом, мы добавляем больше операторов и поддержку большего числа типов данных Tensors для многих операторов на нашей платформе MUSA.
С помощью torch_musa v1.3.0 пользователи могут использовать большинство функций, выпущенных в PyTorch v2.2.0, на GPU MUSA и получать более стабильное обучение и инференс для различных моделей во многих областях, включая недавно популярные большие языковые модели.
Количество поддерживаемых операторов и моделей быстро растет. С torch_musa
пользователи могут легко ускорять приложения AI на графических картах Moore Threads.
Этот выпуск стал возможным благодаря усилиям инженеров команды AI Moore Threads и других отделов. Мы искренне надеемся, что все продолжат следить за нашими работами и участвовать в них, чтобы вместе наблюдать за быстрыми обновлениями torch_musa и графических карт Moore Threads.
Мы рекомендуем пользователям обратиться к официальной документации FSDP для получения дополнительных сведений о использовании, а затем вернуться в наш torch_musa
, чтобы получить те же возможности, что и в оригинальной версии.
Поддержка операторов, включая torch.conv_transpose_3d
, torch.fmod
, torch.fmax
и torch.fmin
.
Поддержка большего числа типов данных для torch.sort
, torch.unique
и других.
Мы предоставляем документацию для разработчиков, которая подробно описывает подготовку среды разработки и некоторые шаги разработки.
Мы предоставляем Docker-образ для выпуска и Docker-образ для разработки.