Δυσκολεύεστε με το AI ή την ανάπτυξη πλήρους πακέτου; Οι ειδικοί μας είναι εδώ για να σας καθοδηγήσουν: εξατομικευμένες συμβουλές, τεχνική ενσωμάτωση και πολλά άλλα. Επικοινωνήστε μαζί μας στο [email protected].

Πώς να επιταχύνετε την εξαγωγή συμπερασμάτων βαθιάς μάθησης για μετασχηματιστές επεξεργασίας φυσικής γλώσσας

Τα προηγμένα μοντέλα βαθιάς μάθησης για την επεξεργασία φυσικής γλώσσας που βασίζονται σε μετασχηματιστές δίνουν εντυπωσιακά αποτελέσματα, αλλά η επίτευξη υψηλών ταχύτητας είναι δύσκολο. Σε αυτό το άρθρο συνοψίζουμε τις καλύτερες επιλογές που έχετε αν θέλετε να μειώσετε την καθυστέρηση των προβλέψεών σας στην παραγωγή.

Χρησιμοποιήστε καλύτερη CPU ή GPU

Όταν κάποιος θέλει να βελτιώσει την ταχύτητα των μοντέλων επεξεργασίας φυσικής γλώσσας που βασίζονται σε μετασχηματιστές, η "αφελής" προσέγγιση είναι η χρήση περισσότερων προηγμένο υλικό.

Τις περισσότερες φορές αυτή είναι μια αναπόφευκτη λύση, καθώς όλες οι καθαρές λύσεις που βασίζονται σε λογισμικό έχουν όρια. Φανταστείτε ότι εκτελείτε εξαγωγή συμπερασμάτων σε μια CPU. Μπορεί να περάσετε εβδομάδες δουλεύοντας σε χαμηλό επίπεδο βελτιστοποίησης για το αγαπημένο σας μοντέλο που βασίζεται στον Transformer, είναι πολύ πιθανό ότι θα εξακολουθήσετε να έχετε καλύτερη βελτίωση της ταχύτητας μεταφέροντας απλώς το μοντέλο σας σε ένα NVIDIA A100 GPU.

Σήμερα οι πιο ευρέως χρησιμοποιούμενες GPU για εξαγωγή συμπερασμάτων στην παραγωγή είναι οι NVIDIA Tesla T4 και V100.

GPU NVIDIA Tesla

Τι γίνεται όμως αν έχετε ήδη αναβαθμίσει το υλικό σας; Ή αν ο προϋπολογισμός σας είναι περιορισμένος και δεν μπορείτε να να αντέξετε οικονομικά να να αξιοποιήσετε τις τελευταίες ακριβές GPU τελευταίας τεχνολογίας; Διαβάστε τα παρακάτω!

Συμπερασματολογία παρτίδας

Η συμπερασματολογία παρτίδας αφορά την αποστολή πολλών αιτημάτων ταυτόχρονα στο μοντέλο σας, έτσι ώστε να αντιμετωπίζει τα αιτήματα όλα μαζί.

Η συμπερασματολογία παρτίδας είναι πολύ ισχυρή, επειδή θα χρειαστεί σχεδόν τον ίδιο χρόνο για να αντιμετωπίσει το μοντέλο σας πολλά αιτήματα όπως χρειάζεται για να αντιμετωπίσει 1 αίτημα. Κάτω από την κουκούλα ορισμένες λειτουργίες θα παραγοντοποιηθούν, οπότε αντί να κάνει τα πάντα n φορές, το μοντέλο θα πρέπει να τα κάνει μόνο μία φορά.

Τεχνικά μιλώντας, δεν μειώνει την καθυστέρηση των αιτημάτων σας, επειδή τα αιτήματά σας δεν θα είναι αντιμετωπιστούν γρηγορότερα, αλλά θα βελτιώσει δραματικά την απόδοση της εφαρμογής σας (η εφαρμογή σας μπορεί να χειριστεί περισσότερα αιτήματα με το ίδιο υλικό).

Η συμπερασματολογία παρτίδας δεν είναι τέλεια όμως.

Πρώτον, δεν είναι πάντα κατάλληλο για online συμπερασμό (δηλαδή για εφαρμογές που απευθύνονται σε πελάτες), διότι για να δημιουργήσετε τις παρτίδες σας θα πρέπει να αποθηκεύσετε κάποια αιτήματα χρηστών, οπότε ορισμένοι χρήστες θα έχουν να περιμένουν περισσότερο από το συνηθισμένο.

2η πρόκληση: η ομαδική εξαγωγή συμπερασμάτων λειτουργεί καλύτερα για παρόμοια αιτήματα. Για παράδειγμα, αν αναπτύσσετε ένα μοντέλο επεξεργασίας φυσικής γλώσσας κειμένου, η ομαδοποίηση θα είναι πιο αποτελεσματική αν δημιουργείτε παρτίδες αιτήσεων που έχουν το ίδιο μήκος.

Τέλος, η εξαγωγή συμπερασμάτων παρτίδας δεν εκτελείται από το ίδιο το μοντέλο βαθιάς μάθησης, αλλά από ένα ανώτερο επίπεδο, όπως ένας αποκλειστικός διακομιστής εξαγωγής συμπερασμάτων. Δεν είναι πάντα εύκολο να υλοποιήσετε ένα τέτοιο επίπεδο. Για το παράδειγμα, ο Triton Inference Server της NVIDIA (βλ. παρακάτω) είναι πολύ καλός στην εκτέλεση συμπερασμού παρτίδας, αλλά πρέπει πρώτα να βρείτε έναν τρόπο να κάνετε το μοντέλο σας συμβατό με το Triton.

Μόλις καταφέρετε να εξαγάγετε το μοντέλο σας στο Triton, η εξαγωγή συμπερασμάτων σε παρτίδες είναι πανεύκολη. Για παράδειγμα, εδώ είναι πώς μπορείτε να δημιουργήσετε δέσμες που αποτελούνται από έως και 128 αιτήσεις και να περιμένετε 5 δευτερόλεπτα το πολύ πριν επεξεργαστείτε την δέσμη (αυτό πρέπει να τεθεί στο αρχείο "config.pbtxt").

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Αξιοποίηση προσαρμοσμένων εφαρμογών

Πολλοί άνθρωποι και εταιρείες εργάζονται σκληρά πάνω σε βελτιστοποιήσεις χαμηλού επιπέδου για κάποια επεξεργασία φυσικής γλώσσας βασισμένη σε μετασχηματιστές μοντέλα. Μπορεί να είναι καλή ιδέα να αξιοποιήσετε αυτές τις προσαρμοσμένες υλοποιήσεις του μοντέλου σας.

Τις περισσότερες φορές αυτές οι προσαρμοσμένες εφαρμογές είναι εύκολες στη χρήση και δεν απαιτούν σχεδόν καμία πρόσθετη εργασία από τους από εσάς. Επιτρέψτε μου να αναφέρω μερικές από αυτές εδώ:

Ακολουθεί ένα παράδειγμα για το πώς μπορείτε να εκτελέσετε συμπερασμό για το μοντέλο GPT Neo 2.7B χάρη στο DeepSpeed. Δεν είναι πολύ δύσκολο, έτσι δεν είναι;

# Filename: gpt-neo-2.7b-generation.py
import os
import deepspeed
import torch
from transformers import pipeline

local_rank = int(os.getenv('LOCAL_RANK', '0'))
world_size = int(os.getenv('WORLD_SIZE', '1'))
generator = pipeline('text-generation', model='EleutherAI/gpt-neo-2.7B',
                        device=local_rank)



generator.model = deepspeed.init_inference(generator.model,
                                            mp_size=world_size,
                                            dtype=torch.float,
                                            replace_method='auto')

string = generator("DeepSpeed is", do_sample=True, min_length=50)
if not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
    print(string)         
            

Όταν χρησιμοποιείτε μια από αυτές τις προσαρμοσμένες υλοποιήσεις, μην ξεχνάτε να ελέγχετε αυστηρά την ποιότητα της νέας σας μοντέλου, καθώς δεν μπορείτε ποτέ να είστε 100% σίγουροι ότι δεν υπάρχει κάποιο σφάλμα σε αυτές τις νέες υλοποιήσεις.

Χρήση ειδικής μηχανής εξαγωγής συμπερασμάτων

Τόσο η Microsoft όσο και η NVIDIA εργάστηκαν σε προηγμένες μηχανές εξαγωγής συμπερασμάτων για να βελτιώσουν την εξαγωγή συμπερασμάτων επιδόσεις.

ONNX Runtime ("ORT"), από τη Microsoft, είναι ένα cross-platform σύστημα εξαγωγής συμπερασμάτων και εκπαίδευσης μηχανικής μάθησης επιταχυντή (δείτε εδώ). Το TensorRT ("TRT"), της NVIDIA, είναι ένα SDK για βαθιά μάθηση υψηλής απόδοσης. συμπερασμού. Περιλαμβάνει έναν βελτιστοποιητή συμπερασμού βαθιάς μάθησης και ένα runtime που παρέχει χαμηλή καθυστέρηση και υψηλή απόδοση για εφαρμογές εξαγωγής συμπερασμάτων βαθιάς μάθησης (δείτε εδώ).

Επιπλέον, ο NVIDIA Triton Inference Server είναι ένα λογισμικό εξυπηρέτησης συμπερασμάτων που καθιστά τα συμπεράσματα AI ευκολότερη, καθιστώντας δυνατή την ανάπτυξη μοντέλων AI από διάφορα πλαίσια. Χάρη στο Triton μπορείτε να για για παράδειγμα να εκτελείτε εύκολα συμπερασμούς δέσμης, να εκτελείτε ταυτόχρονα πολλαπλά μοντέλα βαθιάς μάθησης στην ίδια GPU, να αναπτύσσετε μοντέλα σε πολλαπλές GPU και πολλά άλλα. Δείτε εδώ.

ONNX Runtime
TensorRT
Triton Inference Server

Τα παραπάνω φαίνονται συναρπαστικά, αλλά φυσικά δεν είναι τόσο απλά... Για να μπορέσει το μοντέλο σας να αξιοποιήσει αυτά τα ειδικές μηχανές εξαγωγής συμπερασμάτων, πρέπει πρώτα να μετατρέψετε το υπάρχον μοντέλο σας σε κατάλληλη μορφή.

Έχετε διάφορες επιλογές:

Όταν παίζετε με τις παραπάνω μεθόδους, θα πρέπει να είστε πολύ προσεκτικοί με την ποιότητα των εξαγόμενων μοντέλων σας. Μπορείτε μπορεί να νομίζετε ότι εξαγάγατε με επιτυχία το μοντέλο σας, αλλά είναι πιθανό να χάσατε κάποια ακρίβεια στην κατά τη διαδικασία, γι' αυτό να είστε πολύ αυστηροί ως προς τον τρόπο με τον οποίο δοκιμάζετε το νέο εξαγόμενο μοντέλο σας.

Συμπέρασμα

Τα σύγχρονα μοντέλα Επεξεργασίας Φυσικής Γλώσσας που βασίζονται σε μετασχηματιστές δίνουν εντυπωσιακά αποτελέσματα, έτσι ώστε όλο και περισσότερες εταιρείες να θέλουν να να τα χρησιμοποιούν στην παραγωγή. Πολύ συχνά όμως φαίνεται ότι οι επιδόσεις είναι απογοητευτικές...

Η βελτίωση της ταχύτητας των προβλέψεών σας είναι ζωτικής σημασίας, αλλά, όπως θα μπορούσατε να δείτε παραπάνω, δεν υπάρχουν λύση που να ταιριάζει σε όλους.

Αν έχετε ερωτήσεις σχετικά με το πώς να επιταχύνετε την εξαγωγή συμπερασμάτων, μη διστάσετε να επικοινωνήσετε μαζί μας!

Julien Salinas
CTO στο NLP Cloud