أدوات الذكاء الاصطناعي 101

إعداد تدريب وتنمية وتحليل لغة كبيرة مع معالجات NVIDIA و CUDA

mm
أضف Unite.AI إلى مصادرك المفضلة على Google
Nvidia GPU in Ubuntu Basics of GPU Parallel Computing GPU Based LLM Training Machine

حقل الذكاء الاصطناعي (AI) شهد تقدمات ملحوظة في السنوات الأخيرة، وفي قلبها تقنية معالجات الرسومات (GPUs) ومنصة الحوسبة الموازية.

النماذج مثل GPT, BERT، وأخيرا Llama، Mistral قادرة على فهم وتوليد نصوص بشرية بطرق غير مسبوقة. ومع ذلك، يتطلب تدريب هذه النماذج كميات هائلة من البيانات والموارد الحسابية، مما يجعل معالجات الرسومات و CUDA أدوات لا غنى عنها في هذا المجال.

هذا الدليل الشامل سوف يقودك خلال عملية إعداد معالج رسومات NVIDIA (NVDA ) على نظام Ubuntu،涵يا تثبيت المكونات البرمجية الأساسية مثل برنامج تشغيل NVIDIA و CUDA Toolkit و cuDNN و PyTorch وغيرها.

صعود الإطارات الذكية المعززة ب CUDA

تعزيز الحوسبة الموازية للتعلم العميق قد تم دفعها من خلال تطوير إطارات شائعة تستخدم CUDA للعمليات الحسابية الفعالة. الإطارات مثل TensorFlow و PyTorch و MXNet لها دعم مدمج ل CUDA، مما يسمح بدمج تعزيز معالج الرسومات بشكل سلس في خطوط أنابيب التعلم العميق.

وفقا لدراسة أداء المنتجات الحسابية العميقة من NVIDIA، يمكن أن تحقق نماذج التعلم العميق المعززة ب CUDA أداء أسرع بمقدار 100 مرة مقارنة بالتنفيذات المعتمدة على المعالج المركزي.

تكنولوجيا المعالج متعدد الحواسيب (MIG) من NVIDIA، التي تم تقديمها مع архитектуре Ampere، تسمح بتقسيم معالج رسومات واحد إلى عدة مثيلات آمنة، كل منها مع موارده المخصصة. هذه الميزة تمكن من مشاركة موارد معالج الرسومات بشكل فعال بين عدة مستخدمين أو حمولات، مما يزيد من الاستفادة ويقلل من التكاليف الإجمالية.

تعزيز استنتاج لغة كبيرة مع NVIDIA TensorRT

في حين أن معالجات الرسومات كانت أداة أساسية في تدريب نماذج لغة كبيرة، فإن الاستنتاج الفعال يساوي أهمية في نشر هذه النماذج في بيئات الإنتاج. NVIDIA TensorRT، وهو محسّن ومُسرّع لاستنتاج التعلم العميق، يلعب دورا حاسما في تعزيز استنتاج لغة كبيرة على معالجات رسومات مدعومة ب CUDA.

وفقا لبيانات NVIDIA، يمكن أن يوفر TensorRT أداء استنتاج أسرع 8 مرات وتكلفة ملكية إجمالية أقل 5 مرات مقارنة بالاستنتاج المعتمد على المعالج المركزي لنماذج لغة كبيرة مثل GPT-3.

التزام NVIDIA بال مبادرات مفتوحة المصدر كان قوة دافعة وراء انتشار CUDA في مجتمع البحث العلمي. المشاريع مثل cuDNN و cuBLAS و NCCL متاحة ك مكتبات مفتوحة المصدر، مما يسمح للباحثين والمطورين باستخدام كامل إمكانيات CUDA لنمذجة التعلم العميق.

التثبيت

عندما يتعلق الأمر بتطوير الذكاء الاصطناعي، قد لا يكون استخدام أحدث البرامج دائما الخيار الأفضل. على سبيل المثال، بينما يدعم برنامج تشغيل NVIDIA الأخير (545.xx) CUDA 12.3، قد لا تدعم مكتبات PyTorch وغيرها هذا الإصدار بعد. لذلك، سنستخدم إصدار برنامج تشغيل 535.146.02 مع CUDA 12.2 لضمان التوافق.

خطوات التثبيت

1. تثبيت برنامج تشغيل NVIDIA

أولا، حدد نموذج معالج الرسومات الخاص بك. في هذا الدليل، سنستخدم معالج رسومات NVIDIA. قم بزيارة صفحة تحميل برنامج تشغيل NVIDIA، اختر برنامج التشغيل المناسب لمعالج الرسومات الخاص بك، واكتب إصدار برنامج التشغيل.

لتحقق من حزم معالج الرسومات المسبقة على Ubuntu، قم بتشغيل:


sudo ubuntu-drivers list --gpgpu

إعادة تشغيل جهاز الكمبيوتر والتأكد من التثبيت:


nvidia-smi

2. تثبيت CUDA Toolkit

توفر أدوات تطوير CUDA بيئة التطوير لإنشاء تطبيقات معززة بمعالج الرسومات وأداء عال.

للمساعدة في تثبيت CUDA، يمكنك استخدام:


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. ثم قم بتثبيتها باستخدام:


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

اتبع الإرشادات لإضافة المفتاح:


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

قوة المعالجة الموازية

في جوهرها، معالجات الرسومات هي معالجات موازية عالية الأداء مصممة لمعالجة آلاف الخيوط المتزامنة بكفاءة. هذه الهندسة تجعلها مناسبة للغاية للمهام الحسابية الشديدة المشاركة في تدريب نماذج التعلم العميق، بما في ذلك نماذج اللغة الكبيرة. منصة CUDA، التي طورتها NVIDIA، توفر بيئة برمجية تسمح للمطورين باستخدام كامل إمكانيات هذه المعالجات، مما يسمح لهم بكتابة رمز يمكنه استغلال القدرات الموازية للمعالج.

تعزيز نماذج اللغة الكبيرة مع معالجات الرسومات و CUDA.

تدريب نماذج اللغة الكبيرة هو مهمة حسابية شديدة تتطلب معالجة كميات هائلة من بيانات النص وتنفيذ العديد من عمليات المصفوفة. معالجات الرسومات، مع آلاف النوى وذاكرة النطاق الترددي العالية، هي مثالية لهذه المهام. من خلال استغلال CUDA، يمكن للمطورين تحسين رمزهم للاستفادة من القدرات الموازية لمعالجات الرسومات، مما يقلل بشكل كبير من الوقت اللازم لتدريب نماذج اللغة الكبيرة.

على سبيل المثال، تدريب GPT-3، واحدة من أكبر نماذج اللغة حتى الآن، تم إمكانها من خلال استخدام آلاف معالجات الرسومات من NVIDIA التي تعمل برمز محسّن ب CUDA. هذا سمح للنموذج بالتدريب على كمية غير مسبوقة من البيانات، مما أدى إلى أدائه المثير للإعجاب في المهام اللغوية.


<p>import torch
import torch.nn as nn
import torch.optim as optim
from transformers import GPT2LMHeadModel, GPT2Tokenizer</p>

<p># تحميل نموذج GPT-2 المسبق التدريب و Tokenizer
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')</p>

<p># نقل النموذج إلى معالج الرسومات إذا كان متاحًا
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 {epoch+1}/{num_epochs}, Loss: {loss.item()}')</p>

</code>

<p>في هذا المثال، نُظهر تدريب نموذج <a href="https://www.unite.ai/understanding-sparse-autoencoders-gpt-4-claude-3-an-in-depth-technical-exploration/">GPT-2</a> باستخدام PyTorch ومعالجات الرسومات مدعومة ب CUDA. يتم تحميل النموذج على معالج الرسومات (إذا كان متاحًا)، وتستخدم حلقة التدريب موازاة معالجات الرسومات لتنفيذ المرور الأمامي والخلفي بكفاءة، مما يسرع عملية التدريب.</p>

<h2>مكتبات CUDA المعززة للتعلم العميق</h2>
<p>إضافة إلى منصة CUDA نفسها، طورت NVIDIA والمجتمع المفتوح مجموعة من المكتبات المعززة ب CUDA التي تمكن من تنفيذ نماذج التعلم العميق بكفاءة، بما في ذلك نماذج اللغة الكبيرة. توفر هذه المكتبات تنفيذات محسنة للعمليات الشائعة، مثل ضرب المصفوفات والتحويلات والدوال التنشيطية، مما يسمح للمطورين بالتركيز على هندسة النموذج وعمليات التدريب بدلاً من التحسينات Düşük المستوى.</p>

<p>مكتبة واحدة من هذه المكتبات هي cuDNN (CUDA Deep Neural Network library)، التي توفر تنفيذات محسنة للروتينات القياسية المستخدمة في الشبكات العصبية العميقة. من خلال استغلال cuDNN، يمكن للمطورين تعزيز تدريب واستنتاج نماذجهم بشكل كبير، مما يؤدي إلى تحسين الأداء بمقدار عدة أضعاف مقارنة بالتنفيذات المعتمدة على المعالج المركزي.</p>

[code language="PYTHON"]

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

في هذا المثال، نحدد كتلة متبقية لشبكة عصبية متConvolutional باستخدام PyTorch. يتم استخدام مدير السياق autocast من PyTorch لتمكين التدريب المختلط الدقة، مما يمكن أن يوفر مكاسب أداء كبيرة على معالجات الرسومات مدعومة ب CUDA مع الحفاظ على دقة عالية. دالة F.relu محسنة بواسطة cuDNN، مما يضمن التنفيذ الفعال على معالجات الرسومات.

التدريب المتعدد للمعالجات والتدريب الموزع للتناسب

随着 نمو نماذج اللغة الكبيرة ونمذجة التعلم العميق في الحجم والتعقيد، تزداد المتطلبات الحسابية لتدريب هذه النماذج. لمواجهة هذا التحدي، لجأ الباحثون والمطورون إلى تقنيات التدريب المتعدد للمعالجات والتدريب الموزع، مما يسمح لهم باستغلال قوة معالجة معالجات الرسومات المتعددة عبر عدة أجهزة.

CUDA ومكتباتها المرتبطة، مثل NCCL (NVIDIA Collective Communications Library)، توفر بدائلات اتصال فعالة تمكن من نقل البيانات وتزامنها بشكل سلس عبر معالجات الرسومات المتعددة، مما يسمح بالتدريب الموزع على نطاق غير مسبوق.


<p>import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP</p>

<p># 初始化 distributed training
dist.init_process_group(backend='nccl', init_method='...')
local_rank = dist.get_rank()
torch.cuda.set_device(local_rank)</p>

<p># إنشاء نموذج وتنقله إلى معالج الرسومات
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 DistributedDataParallel (DDP). يتم تغليف النموذج ب DDP، الذي يتعامل تلقائيًا مع موازاة البيانات وتنسيق التدرج والاتصال عبر معالجات الرسومات المتعددة باستخدام NCCL. هذا النهج يسمح بتمكين كفاءة من عملية التدريب عبر عدة أجهزة، مما يسمح للباحثين والمطورين بتدريب نماذج أكبر وأكثر تعقيدًا في وقت معقول.

نشر نماذج التعلم العميق مع CUDA

في حين أن معالجات الرسومات و CUDA تم استخدامهما بشكل رئيسي لتدريب نماذج التعلم العميق، فهما أيضا حاسمان للاستنتاج الفعال والنشر. مع نمو نماذج التعلم العميق في التعقيد والاستهلاك الموارد، يصبح تعزيز معالج الرسومات ضروريًا لتحقيق أداء في الوقت الفعلي في بيئات الإنتاج.

TensorRT من NVIDIA هو محسّن استنتاج عالي الأداء ووقت تشغيل للتعلم العميق، يوفر أداء استنتاج منخفض التأخير وعالٍ على معالجات الرسومات مدعومة ب CUDA. يمكن لـ TensorRT تحسين وتسريع نماذج مدربة في إطارات مثل TensorFlow و PyTorch و MXNet، مما يسمح بنشر فعال على منصات مختلفة، من الأنظمة المدمجة إلى مراكز البيانات.

import tensorrt as trt

# تحميل نموذج مسبق التدريب
model = load_model(…)

# إنشاء محرك TensorRT
logger = trt.Logger(trt.Logger.INFO)
builder = trt.Builder(logger)
network = builder.create_network()
parser = trt.OnnxParser(network, logger)

# تحليل وتنظيم النموذج
success = parser.parse_from_file(model_path)
engine = builder.build_cuda_engine(network)

# تشغيل استنتاج على معالج الرسومات
context = engine.create_execution_context()
inputs, outputs, bindings, stream = allocate_buffers(engine)

# تعيين بيانات الإدخال وتنفيذ استنتاج
set_input_data(inputs, input_data)
context.execute_async_v2(bindings=bindings, stream_handle=stream.ptr)

# معالجة الإخراج
# …

في هذا المثال، نُظهر استخدام TensorRT لنشر نموذج تعلم عميق مسبق التدريب على معالج رسومات مدعوم ب CUDA. يتم تحليل وتنظيم النموذج بواسطة TensorRT، مما يولد محرك استنتاج محسّن للغاية مخصص للنموذج والمعدات. يمكن استخدام هذا المحرك لتنفيذ استنتاج فعال على معالج الرسومات، مستغلا CUDA للحساب المعزز.

الختام

معالجات الرسومات و CUDA كانت أداة أساسية في دفع تقدم نماذج اللغة الكبيرة والرؤية الحاسوبية والتعرف على الكلام والمجالات الأخرى للتعلم العميق. من خلال استغلال القدرات الموازية لمعالجات الرسومات والمكتبات المحسنة التي توفرها CUDA، يمكن للمطورين تدريب ونشر نماذج معقدة بشكل كبير بكفاءة.

随着 استمرار تطور مجال الذكاء الاصطناعي، سوف يزداد أهمية معالجات الرسومات و CUDA. مع تطور الأجهزة والتحسينات البرمجية، يمكننا توقع المزيد من الاختراقات في تطوير ونشر أنظمة الذكاء الاصطناعي، مما يوسع حدود الإمكانيات.

لقد قمت بإنفاق الخمس سنوات الماضية في غمرة العالم المثير للاهتمام من التعلم الآلي والتعلم العميق. وقد أدت شغفي وخبرتي إلى المساهمة في أكثر من 50 مشروعًا متنوعًا في هندسة البرمجيات، مع التركيز بشكل خاص على الذكاء الاصطناعي والتعلم الآلي. كما أدت فضولي المستمر إلى جذبي نحو معالجة اللغة الطبيعية، وهو مجال أنا متحمس لاستكشافه بشكل أكبر.