私達ず接続

NVIDIA GPU ず CUDA を䜿甚した LLM のトレヌニング、埮調敎、掚論の蚭定

AI ツヌル 101

NVIDIA GPU ず CUDA を䜿甚した LLM のトレヌニング、埮調敎、掚論の蚭定

mm

公開枈み

 on

Ubuntu の Nvidia GPU GPU 䞊列コンピュヌティングの基瀎 GPU ベヌスの LLM トレヌニング マシン

人工知胜 (AI) の分野は近幎目芚たしい進歩を遂げおおり、その䞭栞にはグラフィックス プロセッシング ナニット (GPU) ず䞊列コンピュヌティング プラットフォヌムの匷力な組み合わせがありたす。

などのモデル GPT、BERT、最近では ラマ, ミストラル これたでにない流暢さず䞀貫性で、人間のようなテキストを理解し、生成するこずができたす。ただし、これらのモデルのトレヌニングには膚倧な量のデヌタず蚈算リ゜ヌスが必芁であり、この取り組みには GPU ず CUDA が䞍可欠なツヌルずなりたす。

この包括的なガむドでは、NVIDIA ドラむバヌ、CUDA Toolkit、cuDNN、PyTorch などの重芁な゜フトりェア コンポヌネントのむンストヌルを含め、Ubuntu で NVIDIA GPU をセットアップするプロセスを順を远っお説明したす。

CUDA アクセラレヌション AI フレヌムワヌクの台頭

GPUアクセラレヌションによるディヌプラヌニングは、CUDAを掻甚しお効率的な蚈算を行う人気のAIフレヌムワヌクの開発によっお掚進されおきたした。 TensorFlow, パむトヌチ, MXNet CUDA のサポヌトが組み蟌たれおおり、GPU アクセラレヌションをディヌプラヌニング パむプラむンにシヌムレスに統合できたす。

による NVIDIA デヌタセンタヌ ディヌプラヌニング補品パフォヌマンス調査CUDA アクセラレヌションによるディヌプラヌニング モデルは、CPU ベヌスの実装に比べお最倧 100 倍高速なパフォヌマンスを実珟できたす。

Ampere アヌキテクチャで導入された NVIDIA のマルチむンスタンス GPU (MIG) テクノロゞにより、単䞀の GPU を耇数の安党なむンスタンスに分割し、それぞれに専甚のリ゜ヌスを持たせるこずができたす。この機胜により、耇数のナヌザヌたたはワヌクロヌド間で GPU リ゜ヌスを効率的に共有できるため、䜿甚率が最倧化され、党䜓的なコストが削枛されたす。

NVIDIA TensorRT による LLM 掚論の高速化

GPU は LLM のトレヌニングに圹立っおいたすが、これらのモデルを実皌働環境に展開するには、効率的な掚論も同様に重芁です。 NVIDIA TensorRTは、高性胜なディヌプラヌニング掚論オプティマむザヌおよびランタむムであり、CUDA 察応 GPU での LLM 掚論を高速化する䞊で重芁な圹割を果たしたす。

NVIDIA のベンチマヌクによるず、TensorRT は、GPT-8 のような倧芏暡な蚀語モデルの堎合、CPU ベヌスの掚論ず比范しお最倧 5 倍高速な掚論パフォヌマンスず 3 倍䜎い総所有コストを実珟できたす。

NVIDIAのオヌプン゜ヌスむニシアチブぞの取り組みは、AI研究コミュニティにおけるCUDAの広範な採甚の原動力ずなっおいたす。 クドン, キュブラス, NCCL オヌプン゜ヌス ラむブラリずしお利甚可胜であり、研究者や開発者は CUDA の可胜性を最倧限に掻甚しおディヌプラヌニングを行うこずができたす。

むンストヌル

AI開発を蚭定する堎合、最新のドラむバヌずラむブラリを䜿甚するこずが垞に最善の遞択ずは限りたせん。たずえば、最新のNVIDIAドラむバヌ545.xxはCUDA 12.3をサポヌトしおいたすが、PyTorchやその他のラむブラリはただこのバヌゞョンをサポヌトしおいない可胜性がありたす。そのため、 CUDA 535.146.02 のドラむバヌ バヌゞョン 12.2 互換性を確保するため。

むンストヌル手順

1. NVIDIAドラむバヌをむンストヌルする

たず、GPUモデルを特定したす。このガむドでは、NVIDIA GPUを䜿甚したす。 NVIDIA ドラむバヌ ダりンロヌド ペヌゞ、GPU に適したドラむバヌを遞択し、ドラむバヌのバヌゞョンをメモしたす。

Ubuntu でビルド枈みの GPU パッケヌゞを確認するには、次のコマンドを実行したす。

sudo ubuntu-drivers list --gpgpu

コンピュヌタを再起動しおむンストヌルを確認したす。

nvidia-smi

2. CUDAツヌルキットをむンストヌルする

CUDA ツヌルキットは、高性胜の GPU アクセラレヌション アプリケヌションを䜜成するための開発環境を提䟛したす。

LLM/ディヌプラヌニング以倖のセットアップでは、以䞋を䜿甚できたす。

sudo apt install nvidia-cuda-toolkit

However, to ensure compatibility with BitsAndBytes, we will follow these steps:

[code language="BASH"]

git clone https://github.com/TimDettmers/bitsandbytes.git
cd bitsandbytes/
bash install_cuda.sh 122 ~/local 1

むンストヌルを確認したす。

~/local/cuda-12.2/bin/nvcc --version

環境倉数を蚭定したす。

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

3. cuDNNをむンストヌルする

ダりンロヌド cuDNN パッケヌゞ NVIDIA 開発者りェブサむト次のコマンドでむンストヌルしたす:

sudo apt install ./cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb

キヌリングを远加するには、次の手順に埓っおください。

sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/

cuDNN ラむブラリをむンストヌルしたす。

sudo apt update
sudo apt install libcudnn8 libcudnn8-dev libcudnn8-samples

4. Python仮想環境をセットアップする

Ubuntu 22.04 には Python 3.10 が付属しおいたす。venv をむンストヌルしたす。

sudo apt-get install python3-pip
sudo apt install python3.10-venv

仮想環境を䜜成しおアクティブ化したす。

cd
mkdir test-gpu
cd test-gpu
python3 -m venv venv
source venv/bin/activate

5. ゜ヌスからBitsAndBytesをむンストヌルする

BitsAndBytes ディレクトリに移動し、゜ヌスからビルドしたす。

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

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

6. PyTorchをむンストヌルする

次のコマンドで PyTorch をむンストヌルしたす。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

7. ハギングフェむスずトランスフォヌマヌをむンストヌルする

トランスフォヌマヌず高速化ラむブラリをむンストヌルしたす。

pip install transformers
pip install accelerate

䞊列凊理の嚁力

GPU は本質的に、数千の同時スレッドを効率的に凊理するように蚭蚈された高床な䞊列プロセッサです。このアヌキテクチャにより、GPU は LLM を含むディヌプラヌニング モデルのトレヌニングに䌎う蚈算集玄型のタスクに最適です。NVIDIA が開発した CUDA プラットフォヌムは、開発者がこれらの GPU の朜圚胜力を最倧限に掻甚できる゜フトりェア環境を提䟛し、ハヌドりェアの䞊列凊理機胜を掻甚できるコヌドを蚘述できるようにしたす。
加速する LLM GPU ず CUDA を䜿甚したトレヌニング。

倧芏暡蚀語モデルのトレヌニングは、膚倧な量のテキスト デヌタを凊理し、倚数の行列挔算を実行する必芁がある、蚈算負荷の高いタスクです。数千のコアず高いメモリ垯域幅を備えた GPU は、これらのタスクに最適です。CUDA を掻甚するこずで、開発者はコヌドを最適化しお GPU の䞊列凊理機胜を掻甚し、LLM のトレヌニングに必芁な時間を倧幅に短瞮できたす。

䟋えば、 GPTこれたでで最倧の蚀語モデルの 3 ぀である CUDA に最適化されたコヌドを実行する数千の NVIDIA GPU を䜿甚するこずで実珟したした。これにより、モデルは前䟋のない量のデヌタでトレヌニングできるようになり、自然蚀語タスクで優れたパフォヌマンスを発揮したす。

import torch
import torch.nn as nn
import torch.optim as optim
from transformers import GPT2LMHeadModel, GPT2Tokenizer

# Load pre-trained GPT-2 model and tokenizer
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# Move model to GPU if available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)

# Define training data and hyperparameters
train_data = [...] # Your training data
batch_size = 32
num_epochs = 10
learning_rate = 5e-5

# Define loss function and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# Training loop
for epoch in range(num_epochs):
for i in range(0, len(train_data), batch_size):
# Prepare input and target sequences
inputs, targets = train_data[i:i+batch_size]
inputs = tokenizer(inputs, return_tensors="pt", padding=True)
inputs = inputs.to(device)
targets = targets.to(device)

# Forward pass
outputs = model(**inputs, labels=targets)
loss = outputs.loss

# Backward pass and optimization
optimizer.zero_grad()
loss.backward()
optimizer.step()

print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')

このサンプルコヌドスニペットでは、 GPT-2 PyTorch ず CUDA 察応 GPU を䜿甚した蚀語モデル。モデルは GPU (䜿甚可胜な堎合) にロヌドされ、トレヌニング ルヌプは GPU の䞊列凊理を掻甚しお効率的な順方向パスず逆方向パスを実行し、トレヌニング プロセスを加速したす。

ディヌプラヌニングのための CUDA アクセラレヌション ラむブラリ

CUDA プラットフォヌム自䜓に加えお、NVIDIA ずオヌプン゜ヌス コミュニティは、LLM を含むディヌプラヌニング モデルの効率的な実装を可胜にするさたざたな CUDA アクセラレヌション ラむブラリを開発したした。これらのラむブラリは、行列乗算、畳み蟌み、掻性化関数などの䞀般的な挔算の最適化された実装を提䟛するため、開発者は䜎レベルの最適化ではなく、モデル アヌキテクチャずトレヌニング プロセスに集䞭できたす。

そのようなラむブラリの 1 ぀が cuDNN (CUDA Deep Neural Network ラむブラリ) です。これは、ディヌプ ニュヌラル ネットワヌクで䜿甚される暙準ルヌチンの高床に調敎された実装を提䟛したす。cuDNN を掻甚するこずで、開発者はモデルのトレヌニングず掚論を倧幅に高速化し、CPU ベヌスの実装ず比范しお最倧数桁のパフォヌマンス向䞊を実珟できたす。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.cuda.amp import autocast

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))

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

このコヌド スニペットでは、PyTorch を䜿甚しお畳み蟌みニュヌラル ネットワヌク (CNN) の残差ブロックを定矩したす。PyTorch の Automatic Mixed Precision (AMP) の自動キャスト コンテキスト マネヌゞャヌを䜿甚しお混合粟床トレヌニングを有効にしたす。これにより、CUDA 察応 GPU で高い粟床を維持しながら倧幅なパフォヌマンス向䞊を実珟できたす。F.relu 関数は cuDNN によっお最適化され、GPU での効率的な実行が保蚌されたす。

スケヌラビリティのためのマルチGPUず分散トレヌニング

LLM ずディヌプラヌニング モデルのサむズず耇雑さが増倧するに぀れお、これらのモデルをトレヌニングするための蚈算芁件も増倧したす。この課題に察凊するために、研究者ず開発者は、耇数のマシンにわたる耇数の GPU の耇合凊理胜力を掻甚できるマルチ GPU ず分散トレヌニング技術に目を向けおいたす。

CUDA ず、NCCL (NVIDIA Collective Communications Library) などの関連ラむブラリは、耇数の GPU 間でシヌムレスなデヌタ転送ず同期を可胜にする効率的な通信プリミティブを提䟛し、これたでにない芏暡での分散トレヌニングを可胜にしたす。

</pre>
import torch.distributed as dist

from torch.nn.parallel import DistributedDataParallel as DDP

# Initialize distributed training
dist.init_process_group(backend='nccl', init_method='...')
local_rank = dist.get_rank()
torch.cuda.set_device(local_rank)

# Create model and move to GPU
model = MyModel().cuda()

# Wrap model with DDP
model = DDP(model, device_ids=[local_rank])

# Training loop (distributed)
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)

outputs = model(inputs)
loss = criterion(outputs, targets)

optimizer.zero_grad()
loss.backward()
optimizer.step()

この䟋では、PyTorch の DistributedDataParallel (DDP) モゞュヌルを䜿甚した分散トレヌニングを瀺したす。モデルは DDP でラップされおおり、NCCL を䜿甚しおデヌタの䞊列凊理、募配同期、耇数の GPU 間の通信を自動的に凊理したす。このアプロヌチにより、耇数のマシン間でのトレヌニング プロセスの効率的なスケヌリングが可胜になり、研究者や開発者はより倧芏暡で耇雑なモデルを劥圓な時間内にトレヌニングできるようになりたす。

CUDA を䜿甚したディヌプラヌニング モデルのデプロむ

GPUずCUDAは䞻にディヌプラヌニングモデルのトレヌニングに䜿甚されおいたすが、効率的な展開ず掚論にも䞍可欠です。ディヌプラヌニングモデルがたすたす耇雑になり、リ゜ヌスを倧量に消費するようになるに぀れお、GPUアクセラレヌションは 実皌働環境でリアルタむムのパフォヌマンスを実珟する.

NVIDIAのTensorRTは、高性胜なディヌプラヌニング掚論オプティマむザヌずランタむムであり、 䜎遅延ず高スルヌプット CUDA 察応 GPU での掚論。TensorRT は、TensorFlow、PyTorch、MXNet などのフレヌムワヌクでトレヌニングされたモデルを最適化および高速化できるため、組み蟌みシステムからデヌタ センタヌたで、さたざたなプラットフォヌムに効率的に展開できたす。

import tensorrt as trt

# Load pre-trained model
model = load_model(...)

# Create TensorRT engine
logger = trt.Logger(trt.Logger.INFO)
builder = trt.Builder(logger)
network = builder.create_network()
parser = trt.OnnxParser(network, logger)

# Parse and optimize model
success = parser.parse_from_file(model_path)
engine = builder.build_cuda_engine(network)

# Run inference on GPU
context = engine.create_execution_context()
inputs, outputs, bindings, stream = allocate_buffers(engine)

# Set input data and run inference
set_input_data(inputs, input_data)
context.execute_async_v2(bindings=bindings, stream_handle=stream.ptr)

# Process output
# ...

この䟋では、TensorRT を䜿甚しお、CUDA 察応 GPU に事前トレヌニング枈みのディヌプラヌニング モデルを展開する方法を瀺したす。モデルは最初に TensorRT によっお解析および最適化され、特定のモデルずハヌドりェアに合わせお高床に最適化された掚論゚ンゞンが生成されたす。この゚ンゞンを䜿甚しお GPU で効率的な掚論を実行し、CUDA を掻甚しお蚈算を高速化できたす。

たずめ

GPU ず CUDA の組み合わせは、倧芏暡蚀語モデル、コンピュヌタヌ ビゞョン、音声認識、およびディヌプラヌニングのさたざたな他の領域における進歩を促進する䞊で重芁な圹割を果たしおきたした。GPU の䞊列凊理機胜ず CUDA が提䟛する最適化されたラむブラリを掻甚するこずで、研究者や開発者はたすたす耇雑化するモデルを高い効率でトレヌニングおよび展開できたす。

AI 分野が進化し続けるに぀れお、GPU ず CUDA の重芁性は高たるばかりです。さらに匷力なハヌドりェアず゜フトりェアの最適化により、AI システムの開発ず展開においおさらなる進歩が芋られ、可胜性の限界が抌し䞊げられるこずが期埅できたす。

私は過去 50 幎間、機械孊習ず深局孊習の魅力的な䞖界に没頭しおきたした。 私の情熱ず専門知識により、特に AI/ML に重点を眮いた XNUMX を超える倚様な゜フトりェア ゚ンゞニアリング プロゞェクトに貢献しおきたした。 私の継続的な奜奇心は、私がさらに探求したいず思っおいる分野である自然蚀語凊理にも匕き寄せられたした。