Senior
26
Какие приёмы профилирования GPU (nsight, torch.profiler, py-spy)?
Компании, где спрашивали
Ответ от нейросети
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"))