Sobes.tech
Senior

Как да профилираме инференса на LLM на GPU (nsight, torch profiler)?

sobes.tech AI

Отговор от AI

За профилиране на inference на големи езикови модели (LLM) на GPU често се използват инструменти като NVIDIA Nsight Systems и PyTorch Profiler.

NVIDIA Nsight Systems предоставя подробна информация за натоварването на GPU, времето за изпълнение на ядрата, използването на паметта и взаимодействието CPU-GPU. За профилиране на inference на LLM трябва:

  1. Да стартирате inference с команда, обвита в nsight, например:
nsys profile --trace=cuda,nvtx python inference_script.py
  1. Да анализирате събраните данни в GUI-то на Nsight Systems, обръщайки внимание на:
    • Времето за изпълнение на CUDA ядрата
    • Забавяния между извикванията
    • Използването на паметта на GPU

PyTorch Profiler позволява подробно профилиране на операциите вътре в модела:

import torch
from torch.profiler import profile, record_function, ProfilerActivity

def inference(model, input):
    with profile(activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], record_shapes=True) as prof:
        with record_function("model_inference"):
            output = model(input)
    print(prof.key_averages().table(sort_by="cuda_time_total"))
    return output

Това помага да се идентифицират тесните места в изчисленията, например бавни операции или неефективно използване на паметта.

Обобщено, комбинирайки системното профилиране (Nsight) и профилирането на ниво рамка (PyTorch Profiler), може да се получи пълна картина за производителността на inference на LLM на GPU и да се оптимизират тесните места.