Sobes.tech
Senior
26

Какие приёмы профилирования GPU (nsight, torch.profiler, py-spy)?

Компании, где спрашивали
SelectelSelectel

Ответ от нейросети

sobes.tech AI

Профилирование GPU в задачах машинного обучения и распределённого обучения помогает выявить узкие места и оптимизировать производительность. Вот основные приёмы с инструментами:

  • Nsight Systems и Nsight Compute (NVIDIA)

    • Nsight Systems даёт системный профиль, показывает загрузку GPU, CPU, синхронизацию.
    • Nsight Compute — детальный анализ производительности отдельных CUDA-ядр.
    • Используется для выявления задержек, неэффективного использования памяти и вычислительных ресурсов.
  • torch.profiler (PyTorch)

    • Встроенный профайлер для отслеживания времени выполнения операций на CPU и GPU.
    • Позволяет собирать трассировки, анализировать распределение времени по операциям.
    • Поддерживает интеграцию с TensorBoard для визуализации.
  • py-spy

    • Профайлер для Python-приложений, работает без модификации кода.
    • Позволяет видеть, какие функции занимают время, но не специализирован для GPU.

При распределённом обучении важно:

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

Пример использования torch.profiler:

import torch
import torch.profiler

with torch.profiler.profile(
    activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA],
    record_shapes=True,
    with_stack=True
) as prof:
    model(input)

print(prof.key_averages().table(sort_by="cuda_time_total"))