Connect with us

إعداد تدريب وضبط دقيق وتدقيق لتحليلات اللغة الكبيرة مع وحدات معالجة الرسومات من شركة نيفيديا وسيودا

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

إعداد تدريب وضبط دقيق وتدقيق لتحليلات اللغة الكبيرة مع وحدات معالجة الرسومات من شركة نيفيديا وسيودا

mm
Nvidia GPU in Ubuntu Basics of GPU Parallel Computing GPU Based LLM Training Machine

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

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

هذا الدليل الشامل سوف يرشدك خلال عملية إعداد وحدات معالجة الرسومات من شركة نيفيديا على نظام أوبنتو، ويشمل تثبيت مكونات البرمجيات الأساسية مثل سائق نيفيديا وسيودا تولكيت وسيودن وبايرتوش وغيرها.

صعود إطارات الذكاء الاصطناعي المسرعة بواسطة سيودا

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

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

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

تسريع استدلال نموذج لغة كبير مع نيفيديا تينسور آر تي

في حين أن وحدات معالجة الرسومات كانت أداة أساسية في تدريب نماذج لغة كبيرة، فإن الاستدلال الفعال يعادل الأهمية للنشر في بيئات الإنتاج. نيفيديا تينسور آر تي، وهو محسّن وتطبيق استدلال عالي الأداء للتعلم العميق، يلعب دورًا حيويًا في تسريع استدلال نموذج لغة كبير على وحدات معالجة رسومات مدعمة بسيودا.

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

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

التثبيت

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

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

1. تثبيت سائق نيفيديا

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

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


sudo ubuntu-drivers list --gpgpu

أعد تشغيل جهاز الكمبيوتر الخاص بك وافصل التثبيت:


nvidia-smi

2. تثبيت سيودا تولكيت

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

لمجموعة غير لغة كبيرة/تعلم عميق، يمكنك استخدام:


sudo apt install nvidia-cuda-toolkit

然而، لضمان التوافق مع بتس أند بايتس، سنتبع هذه الخطوات:

[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. تثبيت سيودن

تحميل حزمة سيودن من موقع نيفيديا للتنمية. تثبيته مع:


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/

تثبيت مكتبات سيودن:


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

4. إعداد بيئة فيرتشوال بايثون

أوبنتو 22.04 يأتي مع بايثون 3.10. تثبيت فينف:


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. تثبيت بتس أند بايتس من المصدر

التنقل إلى دليل بتس أند بايتس والبناء من المصدر:


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. تثبيت بايرتوش

تثبيت بايرتوش مع الأمر التالي:


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

7. تثبيت هوجينج فايس وترانسفورميرز

تثبيت مكتبات الترانسفورميرز وأكسيليريت:


pip install transformers
pip install accelerate

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

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

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

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

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


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

# تحميل نموذج جبت-2 المسبق التدريب وطوكيندر
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# نقل النموذج إلى وحدات معالجة الرسومات إذا كانت متاحة
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)

# تعريف بيانات التدريب ومتغيراتハイبر
train_data = [...] # بيانات التدريب الخاصة بك
batch_size = 32
num_epochs = 10
learning_rate = 5e-5

# تعريف دالة الخسارة والمحسّن
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# حلقة التدريب
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)

# المرور الأمامي
outputs = model(**inputs, labels=targets)
loss = outputs.loss

# المرور الخلفي وتحسين
optimizer.zero_grad()
loss.backward()
optimizer.step()

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

في هذا المثال، نُظهر تدريب نموذج جبت-2 باستخدام بايرتوش ووحدات معالجة الرسومات مدعمة بسيودا. يتم تحميل النموذج إلى وحدات معالجة الرسومات (إذا كانت متاحة)، ويتوافق حلقة التدريب مع موازاة وحدات معالجة الرسومات لتنفيذ مرور أمامي وخلفي فعال.

مكتبات سيودا المسرعة للتعلم العميق

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

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


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

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

تدريب متعدد وحدات معالجة الرسومات وتوزيعي للscalability

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

سيودا والمكتبات المرتبطة بها، مثل إن سي سي إل (مكتبة الاتصالات الجماعية لنيفيديا)، توفر بدائلات اتصال فعالة تمكن من نقل البيانات وتزامنها عبر وحدات معالجة الرسومات المتعددة، مما يسمح بتدريب موزّع في نطاق غير مسبوق.

import torch.distributed as dist

from torch.nn.parallel import DistributedDataParallel as DDP

# 초기화 تدريب موزّع
dist.init_process_group(backend='nccl', init_method='...')
local_rank = dist.get_rank()
torch.cuda.set_device(local_rank)

# إنشاء نموذج وتنقله إلى وحدات معالجة الرسومات
model = MyModel().cuda()

# تغليف النموذج بدي دي بي
model = DDP(model, device_ids=[local_rank])

# حلقة التدريب (موزعة)
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()

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

نشر نماذج التعلم العميق مع سيودا

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

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


import tensorrt as trt

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

# إنشاء محرك تينسور آر تي
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)

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

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

الختام

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

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

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