Sobes.tech
Senior

როგორ დავპროფილოთ LLM-ის ინფერენსი GPU-ზე (nsight, torch profiler)?

sobes.tech AI

პასუხი AI-სგან

GPU-ზე დიდი ენის მოდელების (LLM) ინფერენსის პროფილირება ხშირად გამოიყენება ინსტრუმენტებით, როგორიცაა NVIDIA Nsight Systems და PyTorch Profiler.

NVIDIA Nsight Systems უზრუნველყოფს დეტალურ ინფორმაციას GPU-ის დატვირთვის, კოდის შესრულების დროის, მეხსიერების გამოყენებისა და CPU-GPU ურთიერთქმედების შესახებ. LLM-ის ინფერენსის პროფილირებისათვის საჭიროა:

  1. დაიწყეთ ინფერენსი nsight-ის ჩასმული ბრძანებით, მაგალითად:
nsys profile --trace=cuda,nvtx python inference_script.py
  1. ანალიზი გაუკეთეთ შეგროვილ მონაცემებს Nsight Systems-ის GUI-ში, ყურადღება მიაქციეთ:
    • 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) კომბინაციით შესაძლებელია მიიღოთ სრული სურათი GPU-ზე LLM-ის ინფერენსის შესრულების შესახებ და ოპტიმიზაცია განახორციელოთ ბლოკირებებზე.