Nástroje AI 101
Nastavení školení, jemného ladění a inferencingu LLM s NVIDIA GPU a CUDA
Obor umělé inteligence (AI) zažil v posledních letech pozoruhodný pokrok a v jeho srdci leží výkonná kombinace grafických procesorů (GPU) a paralelního výpočetního platformy.
Modely, jako jsou GPT, BERT, a nedávno Llama, Mistral jsou schopny porozumět a generovat lidský text s bezprecedentní plynulostí a koherencí. Nicméně, školení těchto modelů vyžaduje obrovské množství dat a výpočetních zdrojů, což činí GPU a CUDA nezbytnými nástroji v tomto úsilí.
Tento komplexní průvodce vás provede procesem nastavení NVIDIA GPU na Ubuntu, pokrývající instalaci základních softwarových komponent, jako je NVIDIA ovladač, CUDA Toolkit, cuDNN, PyTorch a další.
Vzestup CUDA-Accelerated AI Frameworks
GPU-accelerované hluboké učení bylo poháněno vývojem populárních AI frameworků, které využívají CUDA pro efektivní výpočet. Frameworky, jako jsou TensorFlow, PyTorch a MXNet mají vestavěnou podporu pro CUDA, umožňující bezproblémovou integraci GPU akcelerace do hlubokých učení pipeline.
Podle NVIDIA Data Center Deep Learning Product Performance Study, CUDA-accelerované hluboké učení modely mohou dosáhnout až 100krát rychlejšího výkonu ve srovnání s CPU-založenými implementacemi.
NVIDIA’s Multi-Instance GPU (MIG) technologie, představená s architekturou Ampere, umožňuje rozdělit jeden GPU do více zabezpečených instancí, každá se svými vlastními vyhrazenými zdroji. Tato funkce umožňuje efektivní sdílení GPU zdrojů mezi několika uživateli nebo úlohami, maximalizuje využití a snižuje celkové náklady.
Zrychlení LLM Inferencing s NVIDIA TensorRT
Zatímco GPU bylyinstrumentální ve školení LLM, efektivní inferencing je stejně důležité pro nasazení těchto modelů v produkčních prostředích. NVIDIA TensorRT, high-performance deep learning inference optimizer a runtime, hraje vitální roli v urychlení LLM inferencing na CUDA-povolených GPU.
Podle NVIDIA’s benchmarků, TensorRT může poskytnout až 8krát rychlejší inferencing výkon a 5krát nižší celkové náklady na vlastnictví ve srovnání s CPU-založeným inferencing pro velké jazykové modely, jako je GPT-3.
NVIDIA’s závazek k otevřeným iniciativám byl hnací silou za širokým přijetím CUDA v AI výzkumné komunitě. Projekty, jako jsou cuDNN, cuBLAS a NCCL jsou dostupné jako otevřené knihovny, umožňující výzkumníkům a vývojářům využít plný potenciál CUDA pro jejich hluboké učení.
Instalace
Při nastavování AI vývoje, použití nejnovějších ovladačů a knihoven nemusí být vždy nejlepší volbou. Například, zatímco nejnovější NVIDIA ovladač (545.xx) podporuje CUDA 12.3, PyTorch a další knihovny nemusí ještě podporovat tuto verzi. Proto budeme používat ovladač verzi 535.146.02 s CUDA 12.2 pro zajištění kompatibility.
Instalační kroky
1. Instalace NVIDIA Ovladače
Nejdříve identifikujte svůj model GPU. Pro tento průvodce používáme NVIDIA GPU. Navštivte NVIDIA Driver Download stránku, vyberte odpovídající ovladač pro váš GPU a poznamenejte si verzi ovladače.
Zkontrolujte předem sestavené GPU balíčky na Ubuntu, spusťte:
sudo ubuntu-drivers list --gpgpu
Restartujte počítač a ověřte instalaci:
nvidia-smi
2. Instalace CUDA Toolkit
CUDA Toolkit poskytuje vývojové prostředí pro vytváření high-performance GPU-accelerovaných aplikací.
Pro non-LLM/deep learning nastavení můžete použít:
sudo apt install nvidia-cuda-toolkit <p>Avšak pro zajištění kompatibility s BitsAndBytes budeme postupovat podle těchto kroků:</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>
Ověřte instalaci:
~/local/cuda-12.2/bin/nvcc --version
Nastavte environmentální proměnné:
<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. Instalace cuDNN
Stáhněte cuDNN balíček z NVIDIA Developer webové stránky. Nainstalujte jej pomocí:
<p>sudo apt install ./cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb</p>
Následujte instrukce pro přidání keyring:
<p>sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/</p>
Nainstalujte cuDNN knihovny:
<p>sudo apt update sudo apt install libcudnn8 libcudnn8-dev libcudnn8-samples</p>
4. Nastavení Python Virtuálního Prostředí
Ubuntu 22.04 přichází s Pythonem 3.10. Nainstalujte venv:
<p>sudo apt-get install python3-pip sudo apt install python3.10-venv</p>
Vytvořte a aktivujte virtuální prostředí:
<p>cd mkdir test-gpu cd test-gpu python3 -m venv venv source venv/bin/activate</p>
5. Instalace BitsAndBytes zdroje
Přejděte do adresáře BitsAndBytes a sestavte zdroje:
<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. Instalace PyTorch
Nainstalujte PyTorch pomocí následujícího příkazu:
<p>pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121</p>
7. Instalace Hugging a Transformers
Nainstalujte knihovny transformers a accelerate:
<p>pip install transformers pip install accelerate</p>
Síla Paralelního Zpracování
V jádru jsou GPU vysoce paralelní procesory navržené pro efektivní zpracování tisíců současných vláken. Tato architektura je vhodná pro výpočetně náročné úkoly, které jsou součástí školení hlubokých učení modelů, včetně LLM. CUDA platforma, vyvinutá společností NVIDIA, poskytuje software prostředí, které umožňuje vývojářům využít plný potenciál těchto GPU, umožňující jim psát kód, který může využít paralelní zpracování kapacity hardwaru.
Zrychlení LLM školení s GPU a CUDA.
Školení velkých jazykových modelů je výpočetně náročný úkol, který vyžaduje zpracování obrovského množství textu a provedení mnoha maticových operací. GPU, s tisíci jádry a vysokou paměťovou propustností, jsou ideální pro tyto úkoly. Díky CUDA mohou vývojáři optimalizovat svůj kód pro využití paralelního zpracování kapacity GPU, což výrazně snižuje dobu potřebnou pro školení LLM.
Například školení GPT-3, jednoho z největších jazykových modelů, bylo umožněno pomocí tisíců NVIDIA GPU běžících CUDA-optimovaného kódu. To umožnilo modelu být školen na bezprecedentním množství dat, vedoucí k jeho působivému výkonu v přirozeném jazykovém úkolu.
<p>import torch
import torch.nn as nn
import torch.optim as optim
from transformers import GPT2LMHeadModel, GPT2Tokenizer</p>
<p># Načtěte předškolený GPT-2 model a tokenizér
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')</p>
<p># Přesuňte model na GPU, pokud je dostupný
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)</p>
<p># Definujte školicí data a hyperparametry
train_data = [...] # Vaše školicí data
batch_size = 32
num_epochs = 10
learning_rate = 5e-5</p>
<p># Definujte ztrátovou funkci a optimalizátor
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)</p>
<p># Školicí smyčka
for epoch in range(num_epochs):
for i in range(0, len(train_data), batch_size):
# Připravte vstupní a cílové sekvence
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># Přední průchod
outputs = model(**inputs, labels=targets)
loss = outputs.loss</p>
<p># Zadní průchod a optimalizace
optimizer.zero_grad()
loss.backward()
optimizer.step()</p>
<p>print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')</p>
V tomto příkladu demonstrujeme školení GPT-2 jazykového modelu pomocí PyTorch a CUDA-povolených GPU. Model je načten na GPU (pokud je dostupný), a školicí smyčka využívá paralelního zpracování kapacity GPU pro efektivní přední a zadní průchody, urychlení školení.
CUDA-Accelerated Knihovny pro Hluboké Učení
Kromě CUDA platformy samotné, NVIDIA a otevřená komunita vyvinuli řadu CUDA-urychlených knihoven, které umožňují efektivní implementaci hlubokých učení modelů, včetně LLM. Tyto knihovny poskytují optimalizované implementace běžných operací, jako jsou maticové násobení, konvoluce a aktivační funkce, umožňující vývojářům soustředit se na modelovou architekturu a školicí proces, spíše než na nízkoúrovňovou optimalizaci.
Jedna taková knihovna je cuDNN (CUDA Deep Neural Network knihovna), která poskytuje vysoce optimalizované implementace standardních rutin používaných v hlubokých neuronových sítích. Díky cuDNN mohou vývojáři výrazně urychlit školení a inferencing svých modelů, dosahují výkonových zisků až několika řádů ve srovnání s CPU-založenými implementacemi.
<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>
V tomto kódu definujeme reziduální blok pro konvoluční neuronovou síť (CNN) pomocí PyTorch. Kontextový manažer autocast z PyTorch’s Automatic Mixed Precision (AMP) je použit pro povolení smíšeného školení, které může poskytnout významné výkonové zisky na CUDA-povolených GPU, zatímco zachovává vysokou přesnost. Funkce F.relu je optimalizována cuDNN, zajišťující efektivní provedení na GPU.
Multi-GPU a Distribuované Školení pro Škálovatelnost
Jak LLM a hluboké učení modely pokračují ve růstu velikosti a složitosti, tak i výpočetní požadavky pro školení těchto modelů rostou. Pro řešení této výzvy se výzkumníci a vývojáři obrátili na multi-GPU a distribuované školení techniky, které umožňují využít kombinovaný procesní výkon několika GPU napříč několika stroji.
CUDA a přidružené knihovny, jako je NCCL (NVIDIA Collective Communications Library), poskytují efektivní komunikační primitiva, která umožňují bezproblémovou datovou transfer a synchronizaci napříč několika GPU, umožňující distribuované školení v bezprecedentním měřítku.
&lt;/pre&gt; import torch.distributed as dist <p>from torch.nn.parallel import DistributedDataParallel as DDP</p> <p># Inicializujte distribuované školení dist.init_process_group(backend='nccl', init_method='...') local_rank = dist.get_rank() torch.cuda.set_device(local_rank)</p> <p># Vytvořte model a přesuňte ho na GPU model = MyModel().cuda()</p> <p># Zabalte model s DDP model = DDP(model, device_ids=[local_rank])</p> <p># Školicí smyčka (distribuovaná) 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>
V tomto příkladu demonstrujeme distribuované školení pomocí PyTorch’s DistributedDataParallel (DDP) modulu. Model je zabalen s DDP, který automaticky zpracovává datovou paralelnost, gradient synchronizaci a komunikaci napříč několika GPU pomocí NCCL. Tento přístup umožňuje efektivní škálování školicího procesu napříč několika stroji, umožňující výzkumníkům a vývojářům školení větších a složitějších modelů v rozumném čase.
Nasazení Hlubokých Učení Modelů s CUDA
Zatímco GPU a CUDA byly primárně používány pro školení hlubokých učení modelů, jsou také důležité pro efektivní nasazení a inferencing. Jak hluboké učení modely se stávají stále složitějšími a náročnějšími, tak je GPU akcelerace nezbytná pro dosažení reálného času v produkčních prostředích.
NVIDIA’s TensorRT je high-performance deep learning inference optimizer a runtime, který poskytuje nízkou latenci a vysoký propustnost inferencing na CUDA-povolených GPU. TensorRT může optimalizovat a urychlit modely školené v frameworkách, jako jsou TensorFlow, PyTorch a MXNet, umožňující efektivní nasazení na různých platformách, od vestavěných systémů po datové centry.
import tensorrt as trt <p># Načtěte předškolený model model = load_model(...)</p> <p># Vytvořte TensorRT engine logger = trt.Logger(trt.Logger.INFO) builder = trt.Builder(logger) network = builder.create_network() parser = trt.OnnxParser(network, logger)</p> <p># Parse a optimalizujte model success = parser.parse_from_file(model_path) engine = builder.build_cuda_engine(network)</p> <p># Spusťte inferencing na GPU context = engine.create_execution_context() inputs, outputs, bindings, stream = allocate_buffers(engine)</p> <p># Nastavte vstupní data a spusťte inferencing set_input_data(inputs, input_data) context.execute_async_v2(bindings=bindings, stream_handle=stream.ptr)</p> # Zpracujte výstup # ...
V tomto příkladu demonstrujeme použití TensorRT pro nasazení předškoleného hlubokého učení modelu na CUDA-povoleném GPU. Model je nejprve načten a optimalizován TensorRT, který generuje vysoce optimalizovaný inferencing engine přizpůsobený pro konkrétní model a hardware. Tento engine může být poté použit pro efektivní inferencing na GPU, využívající CUDA pro urychlení výpočtu.
Závěr
Kombinace GPU a CUDA byla instrumentální v pohánění pokroků v velkých jazykových modelech, počítačovém vidění, rozpoznávání řeči a dalších oblastech hlubokého učení. Díky využití paralelního zpracování kapacity GPU a optimalizovaných knihoven poskytnutých CUDA, výzkumníci a vývojáři mohou školení a nasazení stále složitějších modelů s vysokou efektivitou.
Jak obor AI pokračuje ve vývoji, tak bude důležitost GPU a CUDA pouze růst. S ještě výkonnějším hardwarem a softwarovými optimalizacemi, můžeme očekávat další průlomové objevy ve vývoji a nasazení AI systémů, tlačící hranice toho, co je možné.












