Εργαλεία ΤΝ 101
Ρύθμιση ενός Συστήματος Εκπαίδευσης, Μελλοντικής Βελτίωσης και Συσχετίσεων με LLM με NVIDIA GPUs και CUDA
Το πεδίο της τεχνητής νοημοσύνης (AI) έχει καταγράψει αξιοσημείωτες προόδους τα τελευταία χρόνια, και στην καρδιά του βρίσκεται η शकτική συνδυασμός των μονάδων επεξεργασίας γραφικών (GPUs) και της πλατφόρμας παράλληλης επεξεργασίας.
Μοντέλα όπως το GPT, BERT, και πιο πρόσφατα το Llama, Mistral είναι ικανά να κατανοούν και να παράγουν ανθρώπινο κείμενο με беспреCEDENT φλουεντ και συνάφεια. Ωστόσο, η εκπαίδευση αυτών των μοντέλων απαιτεί τεράστιες ποσότητες δεδομένων και υπολογιστικών πόρων, καθιστώντας τις GPUs και το CUDA απαραίτητους εργαλεία σε αυτή την προσπάθεια.
Αυτή η綜合 οδηγία θα σας οδηγήσει μέσω της διαδικασίας ρύθμισης ενός NVIDIA GPU στο Ubuntu, καλύπτοντας την εγκατάσταση των απαραίτητων στοιχείων λογισμικού όπως ο οδηγός NVIDIA, το CUDA Toolkit, το cuDNN, το PyTorch και άλλα.
Η Άνοδος των Πλατφόρμων AI με CUDA
Η深런 εκπαίδευση με επιτάχυνση GPU έχει τροφοδοτηθεί από την ανάπτυξη δημοφιλών πλατφόρμων AI που εκμεταλλεύονται το CUDA για αποτελεσματική επεξεργασία. Πλατφόρμες όπως το TensorFlow, PyTorch, και MXNet έχουν ενσωματωμένη υποστήριξη για CUDA, επιτρέποντας άρτια ενσωμάτωση της επιτάχυνσης GPU στις διαδικασίες深런 εκπαίδευσης.
Σύμφωνα με τη Σύμβαση NVIDIA Data Center Deep Learning Product Performance, τα μοντέλα深런 εκπαίδευσης με CUDA possono να επιτύχουν έως και 100 φορές ταχύτερη απόδοση σε σύγκριση με τις υλοποιήσεις CPU.
Η τεχνολογία Multi-Instance GPU (MIG) της NVIDIA, που εισήχθη με την αρχιτεκτονική Ampere, επιτρέπει σε μια seule GPU να χωριστεί σε πολλαπλά ασφαλή экземπλάρ, το καθένα με τους δικούς του αφορισμένους πόρους. Αυτό το χαρακτηριστικό ermöglicht την αποτελεσματική διαμοίραση των πόρων GPU μεταξύ πολλαπλών χρηστών ή φόρτων εργασίας, μεγιστοποιώντας την αξιοποίηση και μειώνοντας τους συνολικούς κόστους.
Επιτάχυνση LLM με NVIDIA TensorRT
Ενώ οι GPUs έχουν καταστεί αναπόσπαστο μέρος της εκπαίδευσης LLM, η αποτελεσματική συσχέτιση είναι εξίσου κρίσιμη για την ανάπτυξη αυτών των μοντέλων σε περιβάλλοντα παραγωγής. Το NVIDIA TensorRT, ένα υψηλής απόδοσης εργαλείο βελτιστοποίησης και εκτέλεσης συσχετίσεων, играє σημαντικό ρόλο στην επιτάχυνση LLM με CUDA-ενεργές GPUs.
Σύμφωνα με τα δεδομένα της NVIDIA, το TensorRT μπορεί να προσφέρει έως και 8 φορές ταχύτερη απόδοση συσχετίσεων και 5 φορές χαμηλότερο συνολικό κόστος ιδιοκτησίας σε σύγκριση με τις CPU-βασισμένες συσχετίσεις για μεγάλα μοντέλα γλωσσών όπως το GPT-3.
Η NVIDIA έχει δεσμευτεί για τις ανοιχτές πρωτοβουλίες, οι οποίες έχουν καταστεί κινητήρια δύναμη πίσω από την ευρεία υιοθέτηση του CUDA στην κοινότητα έρευνας AI. Projects όπως το cuDNN, cuBLAS, και NCCL είναι διαθέσιμα ως ανοιχτά βιβλιοθήκες, επιτρέποντας στους ερευνητές και τους dévelopπερ να αξιοποιήσουν πλήρως το CUDA για τις ανάγκες τους.
Εγκατάσταση
Όταν ρυθμίζετε ένα περιβάλλον ανάπτυξης AI, η χρήση των τελευταίων οδηγών και βιβλιοθηκών δεν είναι πάντα η καλύτερη επιλογή. Για παράδειγμα, ενώ ο τελευταίος οδηγός NVIDIA (545.xx) υποστηρίζει CUDA 12.3, το PyTorch και άλλες βιβλιοθήκες μπορεί να μην υποστηρίζουν ακόμη αυτή τη версия. Για αυτό, θα χρησιμοποιήσουμε τον οδηγό 535.146.02 με CUDA 12.2 για να διασφαλίσουμε τη συμβατότητα.
Βήματα Εγκατάστασης
1. Εγκατάσταση Οδηγού NVIDIA
Πρώτα, αναγνωρίστε το μοντέλο της GPU σας. Για αυτή την οδηγία, χρησιμοποιούμε τον οδηγό NVIDIA. Επισκεφθείτε τη σελίδα λήψης οδηγού NVIDIA, επιλέξτε τον κατάλληλο οδηγό για την GPU σας και σημειώστε την έκδοση του οδηγού.
Για να ελέγξετε τις προετοιμασμένες συσκευές GPU στο Ubuntu, εκτελέστε:
sudo ubuntu-drivers list --gpgpu
Επανεκκινήστε τον υπολογιστή σας και επικυρώστε την εγκατάσταση:
nvidia-smi
2. Εγκατάσταση CUDA Toolkit
Το CUDA Toolkit παρέχει το περιβάλλον ανάπτυξης για τη δημιουργία εφαρμογών με υψηλή απόδοση που επιταχύνουν την GPU.
Για μια μη-LLM/深런 εγκατάσταση, μπορείτε να χρησιμοποιήσετε:
sudo apt install nvidia-cuda-toolkit <p>Ωστόσο, για να διασφαλίσουμε τη συμβατότητα με το BitsAndBytes, θα ακολουθήσουμε αυτά τα βήματα:</p> [code language=&quot;BASH&quot;] <p>git clone https://github.com/TimDettmers/bitsandbytes.git cd bitsandbytes/ bash install_cuda.sh 122 ~/local 1</p>
Επικυρώστε την εγκατάσταση:
~/local/cuda-12.2/bin/nvcc --version
Ορίστε τις μεταβλητές περιβάλλοντος:
<p>export CUDA_HOME=/home/roguser/local/cuda-12.2/ export LD_LIBRARY_PATH=/home/roguser/local/cuda-12.2/lib64 export BNB_CUDA_VERSION=122 export CUDA_VERSION=122</p>
3. Εγκατάσταση cuDNN
Κατεβάστε το πακέτο cuDNN από τη σελίδα του NVIDIA Developer. Εγκαταστήστε το με:
<p>sudo apt install ./cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb</p>
Ακολουθήστε τις οδηγίες για να προσθέσετε το keyring:
<p>sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/</p>
Εγκαταστήστε τις βιβλιοθήκες cuDNN:
<p>sudo apt update sudo apt install libcudnn8 libcudnn8-dev libcudnn8-samples</p>
4. Ρύθμιση Περιβάλλοντος Python
Το Ubuntu 22.04 έρχεται με Python 3.10. Εγκαταστήστε venv:
<p>sudo apt-get install python3-pip sudo apt install python3.10-venv</p>
Δημιουργήστε και ενεργοποιήστε το εικονικό περιβάλλον:
<p>cd mkdir test-gpu cd test-gpu python3 -m venv venv source venv/bin/activate</p>
5. Εγκατάσταση BitsAndBytes από Πηγή
Μεταβείτε στο κατάλογο BitsAndBytes και κτίστε το από την πηγή:
<p>cd ~/bitsandbytes CUDA_HOME=/home/roguser/local/cuda-12.2/ \ LD_LIBRARY_PATH=/home/roguser/local/cuda-12.2/lib64 \ BNB_CUDA_VERSION=122 \ CUDA_VERSION=122 \ make cuda12x</p> <p>CUDA_HOME=/home/roguser/local/cuda-12.2/ \ LD_LIBRARY_PATH=/home/roguser/local/cuda-12.2/lib64 \ BNB_CUDA_VERSION=122 \ CUDA_VERSION=122 \ python setup.py install</p>
6. Εγκατάσταση PyTorch
Εγκαταστήστε το PyTorch με την ακόλουθη εντολή:
<p>pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121</p>
7. Εγκατάσταση Hugging και Transformers
Εγκαταστήστε τις βιβλιοθήκες transformers και accelerate:
<p>pip install transformers pip install accelerate</p>
Η Δύναμη της Παράλληλης Επεξεργασίας
Στην καρδιά τους, οι GPUs είναι υψηλά παράλληλοι επεξεργαστές που σχεδιάστηκαν για να χειρίζονται χιλιάδες συγχρονισμένες νήματα αποτελεσματικά. Αυτή η αρχιτεκτονική τους καθιστά κατάλληλους για τις υπολογιστικά απαιτητικές εργασίες που εμπλέκονται στην εκπαίδευση μοντέλων深런 εκπαίδευσης, συμπεριλαμβανομένων των LLM. Η πλατφόρμα CUDA, που αναπτύχθηκε από την NVIDIA, παρέχει ένα περιβάλλον λογισμικού που επιτρέπει στους dévelopπερ να αξιοποιήσουν πλήρως το δυναμικό των GPU, επιτρέποντάς τους να γράψουν κώδικα που μπορεί να εκμεταλλευτεί τις ικανότητες παράλληλης επεξεργασίας του υλικού.
Επιτάχυνση LLM Εκπαίδευσης με GPUs και CUDA.
Η εκπαίδευση μεγάλων μοντέλων γλωσσών είναι μια υπολογιστικά απαιτητική εργασία που απαιτεί την επεξεργασία τεράστιων ποσοτήτων κειμένου και την εκτέλεση πολλών ματριακών операций. Οι GPUs, με τις χιλιάδες πυρήνες και την υψηλή μνήμη, είναι ιδανικοί για αυτές τις εργασίες. Με την αξιοποίηση του CUDA, οι dévelopπερ μπορούν να βελτιστοποιήσουν τον κώδικά τους για να εκμεταλλευτούν τις ικανότητες παράλληλης επεξεργασίας των GPU, μειώνοντας σημαντικά τον χρόνο που απαιτείται για την εκπαίδευση LLM.
Για παράδειγμα, η εκπαίδευση του GPT-3, ενός από τα μεγαλύτερα μοντέλα γλωσσών μέχρι σήμερα, έγινε δυνατή μέσω της χρήσης χιλιάδων NVIDIA GPUs που εκτελούσαν κώδικα που είχε βελτιστοποιηθεί για το CUDA. Αυτό επέτρεψε στο μοντέλο να εκπαιδευτεί σε μια άνευ προηγουμένου ποσότητα δεδομένων, οδηγώντας στην εντυπωσιακή του απόδοση στις φυσικές γλώσσες.
<p>import torch
import torch.nn as nn
import torch.optim as optim
from transformers import GPT2LMHeadModel, GPT2Tokenizer</p>
<p># Φόρτωση προ-εκπαιδευμένου μοντέλου GPT-2
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')</p>
<p># Μεταφορά του μοντέλου στην GPU αν είναι διαθέσιμη
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)</p>
<p># Ορίστε τα δεδομένα εκπαίδευσης και τις υπερπαράμετρους
train_data = [...] # Τα δεδομένα εκπαίδευσης σας
batch_size = 32
num_epochs = 10
learning_rate = 5e-5</p>
<p># Ορίστε τη συνάρτηση απώλειας και τον βελτιστοποιητή
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)</p>
<p># Βρόχος εκπαίδευσης
for epoch in range(num_epochs):
for i in range(0, len(train_data), batch_size):
# Προετοιμασία εισαγωγής και στόχου
inputs, targets = train_data[i:i+batch_size]
inputs = tokenizer(inputs, return_tensors="pt", padding=True)
inputs = inputs.to(device)
targets = targets.to(device)</p>
<p># Προώθηση
outputs = model(**inputs, labels=targets)
loss = outputs.loss</p>
<p># Πίσω προώθηση και βελτίωση
optimizer.zero_grad()
loss.backward()
optimizer.step()</p>
<p>print(f'Εποχή {epoch+1}/{num_epochs}, Απώλεια: {loss.item()}')</p>
Σε αυτό το παράδειγμα, δείχνουμε την εκπαίδευση ενός μοντέλου GPT-2 με PyTorch και CUDA-ενεργές GPUs. Το μοντέλο φορτώνεται στην GPU (αν είναι διαθέσιμη), και ο βρόχος εκπαίδευσης αξιοποιεί την παράλληλη επεξεργασία των GPU για αποτελεσματικές προώθησεις και πίσω προώθησεις, επιταχύνοντας την εκπαίδευση.
CUDA-Επιταχυνόμενες Βιβλιοθήκες για Deep Learning
Εκτός από την πλατφόρμα CUDA, η NVIDIA και η κοινότητα ανοιχτού κώδικα έχουν αναπτύξει eine σειρά από βιβλιοθήκες που επιταχύνουν το CUDA, οι οποίες ermöglichtουν την αποτελεσματική υλοποίηση μοντέλων深런 εκπαίδευσης, συμπεριλαμβανομένων των LLM. Αυτές οι βιβλιοθήκες παρέχουν βελτιστοποιημένες υλοποιήσεις κοινούς операциων, όπως ματριακές πολλαπλασιασμοί, συσχετίσεις και συναρτήσεις ενεργοποίησης, επιτρέποντας στους dévelopπερ να εστιάσουν στην αρχιτεκτονική του μοντέλου και τη διαδικασία εκπαίδευσης αντί για την χαμηλού επιπέδου βελτιστοποίηση.
Μια τέτοια βιβλιοθήκη είναι το cuDNN (CUDA Deep Neural Network library), το οποίο παρέχει υψηλά βελτιστοποιημένες υλοποιήσεις τυπικών ρουτινών που χρησιμοποιούνται σε sâu νευρωνικά δίκτυα. Με την αξιοποίηση του cuDNN, οι dévelopπερ μπορούν να επιταχύνουν σημαντικά την εκπαίδευση και την έξοδο των μοντέλων τους, επιτύγχανοντας απόδοση που είναι αρκετές φορές μεγαλύτερη από τις υλοποιήσεις CPU.
<p>import torch import torch.nn as nn import torch.nn.functional as F from torch.cuda.amp import autocast</p> <p>class ResidualBlock(nn.Module): def __init__(self, in_channels, out_channels, stride=1): super().__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False) self.bn1 = nn.BatchNorm2d(out_channels) self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False) self.bn2 = nn.BatchNorm2d(out_channels) self.shortcut = nn.Sequential() if stride != 1 or in_channels != out_channels: self.shortcut = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False), nn.BatchNorm2d(out_channels))</p> <p>def forward(self, x): with autocast(): out = F.relu(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) out += self.shortcut(x) out = F.relu(out) return out</p>
Σε αυτό το παράδειγμα, ορίζουμε ένα μπλοκ υπολοίπου για ένα σύστημα νευρωνικού δικτύου (CNN) με PyTorch. Ο διαχειριστής περιεχομένου από το PyTorch’s Automatic Mixed Precision (AMP) χρησιμοποιείται για να ενεργοποιήσει την εκπαίδευση με μικτή ακρίβεια, η οποία μπορεί να προσφέρει σημαντική απόδοση σε CUDA-ενεργές GPUs ενώ διατηρεί υψηλή ακρίβεια. Η συνάρτηση F.relu είναι βελτιστοποιημένη από το cuDNN, εξασφαλίζοντας αποτελεσματική εκτέλεση σε GPUs.
Πολυ-GPU και Κατανεμημένη Εκπαίδευση για Κλιμάκωση
Όσο τα LLM και τα μοντέλα深런 εκπαίδευσης συνεχίζουν να μεγαλώνουν σε μέγεθος και πολυπλοκότητα, οι υπολογιστικές απαιτήσεις για την εκπαίδευση αυτών των μοντέλων αυξάνονται επίσης. Για να αντιμετωπίσουν αυτή την πρόκληση, οι ερευνητές και dévelopπερ έχουν στραφεί σε τεχνικές πολυ-GPU και κατανεμημένης εκπαίδευσης, οι οποίες τους επιτρέπουν να αξιοποιήσουν την συνδυασμένη επεξεργαστική ισχύ πολλαπλών GPU σε πολλαπλά μηχανήματα.
Το CUDA και οι συνδεδεμένες βιβλιοθήκες, όπως το NCCL (NVIDIA Collective Communications Library), παρέχουν αποτελεσματικές πρωτοκολές επικοινωνίας που ermöglichtουν την άρτια μεταφορά δεδομένων και συγχρονισμό μεταξύ πολλαπλών GPU, επιτρέποντας την κατανεμημένη εκπαίδευση σε άνευ προηγουμένου κλίμακα.
<p>import torch.distributed as dist from torch.nn.parallel import DistributedDataParallel as DDP</p> <p># Αρχικοποίηση κατανεμημένης εκπαίδευσης dist.init_process_group(backend='nccl', init_method='...') local_rank = dist.get_rank() torch.cuda.set_device(local_rank)</p> <p># Δημιουργία μοντέλου και μεταφορά στην GPU model = MyModel().cuda()</p> <p># Ένδυση μοντέλου με DDP model = DDP(model, device_ids=[local_rank])</p> <p># Βρόχος εκπαίδευσης (κατανεμημένος) for epoch in range(num_epochs): for data in train_loader: inputs, targets = data inputs = inputs.cuda(non_blocking=True) targets = targets.cuda(non_blocking=True)</p> <p>outputs = model(inputs) loss = criterion(outputs, targets)</p> <p>optimizer.zero_grad() loss.backward() optimizer.step()</p>
Σε αυτό το παράδειγμα, δείχνουμε την κατανεμημένη εκπαίδευση με το PyTorch’s DistributedDataParallel (DDP) module. Το μοντέλο είναι τυλιγμένο με DDP, το οποίο αυτόματα χειρίζεται την παράλληλη επεξεργασία δεδομένων, συγχρονισμό gradient και επικοινωνία μεταξύ πολλαπλών GPU χρησιμοποιώντας το NCCL. Αυτή η προσέγγιση ermöglicht την αποτελεσματική κλιμάκωση της διαδικασίας εκπαίδευσης σε πολλαπλά μηχανήματα, επιτρέποντας στους ερευνητές και dévelopπερ να εκπαιδεύσουν μεγαλύτερα και πιο πολύπλοκα μοντέλα σε 合理 χρόνο.
Ανάπτυξη Μοντέλων Deep Learning με CUDA
Ενώ οι GPUs και το CUDA έχουν χρησιμοποιηθεί κυρίως για την εκπαίδευση μοντέλων深런 εκπαίδευσης, είναι επίσης κρίσιμα για την αποτελεσματική ανάπτυξη και έξοδο. Όσο τα μοντέλα深런 εκπαίδευσης γίνονται όλο και πιο πολύπλοκα και απαιτητικά, η επιτάχυνση GPU είναι απαραίτητη για την επίτευξη πραγματικού χρόνου απόδοσης σε περιβάλλοντα παραγωγής.
Το NVIDIA’s TensorRT είναι ένα υψηλής απόδοσης εργαλείο βελτιστοποίησης και εκτέλεσης συσχετίσεων που παρέχει χαμηλής καθυστέρησης και υψηλής απόδοσης έξοδο σε CUDA-ενεργές GPUs. Το TensorRT μπορεί να βελτιστοποιήσει και να επιταχύνει μοντέλα που έχουν εκπαιδευτεί σε πλατφόρμες όπως το TensorFlow, PyTorch και MXNet, ermöglichtοντας την αποτελεσματική ανάπτυξη σε διάφορες πλατφόρμες, από ενσωματωμένα συστήματα έως κέντρα δεδομένων.
import tensorrt as trt <p># Φόρτωση προ-εκπαιδευμένου μοντέλου model = load_model(...)</p> <p># Δημιουργία μηχανή TensorRT logger = trt.Logger(trt.Logger.INFO) builder = trt.Builder(logger) network = builder.create_network() parser = trt.OnnxParser(network, logger)</p> <p># Ανάλυση και βελτιστοποίηση μοντέλου success = parser.parse_from_file(model_path) engine = builder.build_cuda_engine(network)</p> <p># Εκτέλεση έξοδου στο GPU context = engine.create_execution_context() inputs, outputs, bindings, stream = allocate_buffers(engine)</p> <p># Ορίστε τα δεδομένα εισαγωγής και εκτελέστε την έξοδο set_input_data(inputs, input_data) context.execute_async_v2(bindings=bindings, stream_handle=stream.ptr)</p> # Επεξεργασία έξοδου # ...
Σε αυτό το παράδειγμα, δείχνουμε την χρήση του TensorRT για την ανάπτυξη ενός προ-εκπαιδευμένου μοντέλου深런 εκπαίδευσης σε CUDA-ενεργή GPU. Το μοντέλο είναι πρώτα αναλυμένο και βελτιστοποιημένο από το TensorRT, το οποίο παράγει ένα υψηλά βελτιστοποιημένο μηχάνημα έξοδου που είναι προσαρμοσμένο για το συγκεκριμένο μοντέλο και το υλικό. Αυτό το μηχάνημα μπορεί να χρησιμοποιηθεί για την αποτελεσματική έξοδο στο GPU, αξιοποιώντας το CUDA για την επιτάχυνση της επεξεργασίας.
Συμπέρασμα
Ο συνδυασμός των GPU και του CUDA έχει καταστεί κρίσιμος για τις προόδους στα μεγάλα μοντέλα γλωσσών, την όραση υπολογιστών, την αναγνώριση ομιλίας και διάφορους άλλους τομείς της深런 εκπαίδευσης. Με την αξιοποίηση των ικανότητων παράλληλης επεξεργασίας των GPU και των βελτιστοποιημένων βιβλιοθηκών που παρέχει το CUDA, οι ερευνητές και dévelopπερ μπορούν να εκπαιδεύσουν και να αναπτύξουν όλο και πιο πολύπλοκα μοντέλα με υψηλή αποδοτικότητα.
Όσο το πεδίο της AI συνεχίζει να εξελίσσεται, η σημασία των GPU και του CUDA θα αυξηθεί. Με ακόμα πιο ισχυρό υλικό και λογισμικό, μπορούμε να περιμένουμε να δούμε περαιτέρω прорывούς στην ανάπτυξη και ανάπτυξη συστημάτων AI, που θα ωθήσουν τα όρια του τι είναι δυνατό.












