Nástroje AI 101

Nastavení školení, jemného ladění a inferencingu LLM s NVIDIA GPU a CUDA

mm
Přidejte Unite.AI mezi své preferované zdroje na Google
Nvidia GPU in Ubuntu Basics of GPU Parallel Computing GPU Based LLM Training Machine

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=&amp;quot;BASH&amp;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.

&amp;lt;/pre&amp;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é.

Já pět let se ponořím do fascinujícího světa strojového učení a hlubokého učení. Mé vášně a odborné znalosti mě vedly k tomu, abych se podílel na více než 50 různých projektech softwarového inženýrství, se zvláštním zaměřením na AI/ML. Mé pokračující zvědavosti mě také přivedly k přirozenému jazykovému zpracování, oblasti, kterou jsem ochoten prozkoumat dále.