العتاد وتمرير PCI (Hardware & PCI Passthrough)
يتيحه لك Vapor تعيين أجهزة العتاد الفيزيائي مباشرة للأجهزة الافتراضية باستخدام تمرير PCIe (VFIO).
المتطلبات الأساسية
لاستخدام تمرير PCI، يجب أن يدعم عتاد المضيف لديك IOMMU (Intel VT-d أو AMD-Vi)، ويجب تمكينه في BIOS للمضيف ومعلمات النواة (Kernel).
تعيين جهاز PCI
- تأكد من إيقاف تشغيل جهاز VM.
- انتقل إلى تبويب Hardware الخاص بـ VM.
- انقر على Add PCI Device.
- سيعرض Vapor جميع أجهزة PCI المتاحة على المضيف (مثل بطاقات الرسم GPU، بطاقات الشبكة، وحدات تحكم NVMe).
- حدد الجهاز واحفظ.
WARNING
يؤدي تعيين جهاز PCI لجهاز VM إلى إزالة ذلك الجهاز من نظام تشغيل المضيف. لا تقم بتعيين بطاقة الشبكة التي تستخدمها للوصول إلى وحدة تحكم الويب لـ Vapor، وإلا ستفقد الاتصال!
التوصيل الساخن (Hotplugging)
يدعم Vapor التوصيل الساخن لمكونات عتاد افتراضية معينة دون إيقاف تشغيل VM:
- الأقراص (Disks): يمكنك إرفاق أقراص افتراضية جديدة بـ VM شغال.
- واجهات الشبكة (Network Interfaces): يمكنك إضافة أو إزالة واجهات شبكة افتراضية.
(ملاحظة: يتطلب التوصيل الساخن للمعالج والذاكرة دعمًا محددًا من نظام تشغيل الضيف وقد لا يكون متاحًا لجميع أنواع أنظمة التشغيل).
NVIDIA vGPU (الأجهزة الوسيطة / Mediated Devices)
يوفر تمرير PCI وحدة GPU كاملة لجهاز VM واحد. بينما يقوم NVIDIA vGPU بتقسيم وحدة GPU واحدة للمؤسسات إلى عدة وحدات GPU افتراضية حتى تتمكن أجهزة VM متعددة من مشاركتها في وقت واحد — على سبيل المثال، ثمانية أجهزة VM تتلقى كل منها شريحة بحجم 2 جيجابايت من بطاقة Tesla T4 بحجم 16 جيجابايت.
كل شريحة هي جهاز وسيط (mediated device / mdev): وهو مثيل تم إنشاؤه على المضيف من ملف تعريف (profile) يحدد حجم ذاكرة التخزين المؤقت للإطارات (framebuffer)، ورؤوس العرض، والحد الأقصى للدقة.
التمرير (Passthrough) أم vGPU؟
| تمرير PCI (Passthrough) | vGPU | |
|---|---|---|
| عدد VM لكل GPU | واحد | متعدد |
| طراز GPU | أي طراز | المدعومة بـ NVIDIA vGPU فقط |
| ترخيص إضافي | لا يوجد | يتطلب برنامج NVIDIA vGPU |
| برنامج تشغيل المضيف | لا يوجد (الجهاز مخفي عن المضيف) | NVIDIA vGPU Manager |
| برنامج تشغيل الضيف | برنامج تشغيل NVIDIA القياسي | برنامج تشغيل الضيف NVIDIA vGPU (GRID) |
IMPORTANT
لا يمكن لوحدة GPU القيام بكلتا العمليتين في وقت واحد. بينما يتم تعيين البطاقة لجهاز VM كجهاز تمرير، فإنها تكون مرتبطة بـ vfio-pci ولا يمكنها خدمة vGPU، والعكس صحيح أيضًا.
أ. المتطلبات
- وحدة NVIDIA GPU تدعم vGPU — Tesla T4 و V100 و A100 و H100 و L40 و RTX 6000 Ada والبطاقات المماثلة لمراكز البيانات. بطاقات GeForce الموجهة للمستهلكين لا تدعم vGPU.
- ترخيص واستحقاق برنامج NVIDIA vGPU، والذي يمنحك الوصول إلى بوابة تراخيص NVIDIA (NVIDIA Licensing Portal).
- تمكين IOMMU على المضيف (Intel VT-d أو AMD-Vi)، كما هو الحال بالنسبة لتمرير PCI.
- رؤوس النواة (kernel headers) وأدوات البناء للمضيف، لأن برنامج التشغيل يتم تجميعه للنواة القيد التشغيل لديك.
TIP
في وحدات GPU القائمة على بنية Ampere والأحدث، يجب تمكين الوظائف الافتراضية لـ SR-IOV على المضيف قبل ظهور ملفات تعريف vGPU (/usr/lib/nvidia/sriov-manage -e <pci_address>)، وتُنشأ المثيلات مقابل الوظيفة الافتراضية بدلاً من البطاقة الفيزيائية. البطاقات الأقدم مثل Tesla T4 لا تتطلب هذه الخطوة.
ب. الحصول على برنامج التشغيل
Vapor لا يمكنه شحن أو تنزيل برامج تشغيل NVIDIA نيابة عنك. إنها برامج مرخصة وتتطلب بوابة NVIDIA حسابًا خاصًا بك — لذا تقوم بتنزيلها بموجب استحقاقك وتحميلها إلى Vapor.
- قم بتسجيل الدخول إلى NVIDIA Licensing Portal باستخدام حساب المؤسسة الخاص بك.
- قم بتنزيل حزمة NVIDIA vGPU software لنظام Linux KVM. إنها أرشيف واحد يحتوي على برامج تشغيل المضيف والضيف معًا.
- قم باستخراج الأرشيف. تحتاج إلى ملفين:
- برنامج تشغيل المضيف:
NVIDIA-Linux-x86_64-<version>-vgpu-kvm.run— يتم تثبيته على مضيف Vapor. - برنامج تشغيل الضيف: من مجلد
Guest_Drivers— يتم تثبيته داخل كل VM.
- برنامج تشغيل المضيف:
WARNING
يجب أن تأتي برامج تشغيل المضيف والضيف من نفس فرع الإصدار (release branch). يتطابق برنامج تشغيل المضيف 550.144.02 مع برنامج تشغيل الضيف 550.144.03. خلط الفروع — على سبيل المثال برنامج تشغيل ضيف 570.x مقابل مضيف 550.x — غير مدعوم وسيفشل. نظرًا لأن أرشيفات NVIDIA تحتوي على إصدارات متعددة بأسماء ملفات متطابقة تقريبًا، تحقق من الإصدار قبل التحميل.
ج. تحميل برنامج التشغيل إلى المضيف
- انتقل إلى Third-Party Libraries.
- ابحث عن مربع NVIDIA vGPU Manager.
- اختر برنامج تشغيل المضيف
*-vgpu-kvm.runوانقر على Upload.
عمليات التحميل قابلة للاستئناف (resumable)، لذا فإن الاتصال المقطوع يستأنف من حيث توقف بدلاً من إعادة بدء النقل.
د. التحقق من جاهزية المضيف
يعرض مربع NVIDIA vGPU Manager كل شرط أساسي مع حالته الحالية. يتم التحقق من كل شرط بشكل مستقل، حتى تتمكن من رؤية ما يعيق العملية بالضبط:
| الفحص | ما يعنيه |
|---|---|
| NVIDIA GPU present | تم العثور على بطاقة تدعم vGPU على ناقل PCI. |
| IOMMU enabled | تم التمهيد للمضيف باستخدام intel_iommu=on أو amd_iommu=on. |
| GPU free for the vGPU driver | البطاقة غير مرتبطة بـ vfio-pci. إذا كانت كذلك، يذكر الفحص اسم VM الذي يمررها. |
| Kernel headers for the running kernel | تم تثبيت الرؤوس المطابقة للنواة التي تم التمهيد بها. |
| Build toolchain | gcc و make و dkms متاحة. |
| Secure Boot | Secure Boot لا يحظر الوحدات غير الموقعة. |
| nouveau not holding the GPU | برنامج التشغيل مفتوح المصدر nouveau غير محمل. |
| vGPU Manager package uploaded | حزمة برنامج تشغيل المضيف مخزنة على المضيف. |
| vGPU driver active | تم تحميل برنامج التشغيل وتعلن وحدات GPU عن ملفات التعريف. |
قم بحل أي شيء يتم الإبلاغ عن فقده قبل التثبيت. هناك أمران يستحقان الإشارة إليهما:
- رؤوس النواة (Kernel headers). قم بتثبيت الحزمة المطابقة للنواة القيد التشغيل —
linux-headers-$(uname -r)— وليس الحزمة العامةlinux-headers-amd64، والتي قد تتبع نواة أحدث من تلك التي قمت بالتمهيد بها. يتم بناء برنامج التشغيل مقابل النواة القيد التشغيل وسيفشل إذا كانت هناك اختلافات. - وحدة GPU لا تزال قيد الاستخدام. إذا كانت البطاقة ممررة إلى جهاز VM، فأوقف تشغيل جهاز VM هذا وقم بتحرير البطاقة:bash
virsh nodedev-reattach pci_0000_81_00_0
هـ. تثبيت برنامج تشغيل المضيف
- في مربع NVIDIA vGPU Manager، ابحث عن Guided install.
- انقر على Install driver، ثم أكّد.
يقوم التثبيت ببناء وحدة النواة، وتحميلها، وبدء خدمتي nvidia-vgpud و nvidia-vgpu-mgr، والتأكد من ظهور ملفات تعريف vGPU. يتم عرض التقدم أثناء التشغيل ويكتمل عادةً في دقيقة إلى دقيقتين. إذا فشل، قم بتوسيع Show log — يوضح مخرج البناء السبب.
CAUTION
يؤدي التثبيت إلى استبدال وحدات نواة NVIDIA القيد التشغيل. يرفض Vapor البدء طالما أن أي مثيل vGPU نشط، لأن إلغاء تحميل برنامج التشغيل سيؤدي إلى سحب وحدة GPU من جهاز VM شغال. قم بإيقاف تشغيل أجهزة VM هذه وإزالة مثيلات vGPU الخاصة بها أولاً.
عندما ينجح التثبيت، ستظهر لك رسالة مثل "vGPU Manager installed — 1 GPU(s) offering 14 profiles"، ويتغير فحص vGPU driver active إلى اللون الأخضر. عادة لا يلزم إعادة التشغيل؛ وإذا كانت مطلوبة، يذكر Vapor ذلك صراحةً.
و. إضافة vGPU إلى VM
يتم تكوين vGPUs في معالج VM، لكل من الأجهزة الجديدة والحالية.
- أنشئ VM جديدًا، أو قم بتعديل جهاز حالي يكون موقوف التشغيل (powered off).
- انتقل إلى Step 4 — Hardware، ثم Advanced Configuration.
- تحت NVIDIA vGPU (Mediated Device)، انقر على + Add vGPU (Mediated Device).
- اختر ملف تعريف (profile). منتقي الملفات قابل للبحث حسب الاسم، أو معرف ملف التعريف، أو حجم VRAM أو GPU، ويوضح عدد الشرائح المتبقية من كل منها. ملفات التعريف التي لا تملك سعة متبقية لا يمكن تحديدها.
- اترك Existing mdev Device UUID فارغًا — ينسئ Vapor المثيل لك ويقوم بتدميره عند حذف VM. قم بتعبئته فقط لإرفاق مثيل أنشأته بنفسك.
- Guest PCI Address اختياري؛ اتركه فارغًا ما لم تكن بحاجة إلى تثبيت الجهاز في فتحة محددة داخل الضيف.
- احفظ وأنهِ المعالج.
IMPORTANT
لا يمكن إضافة أو إزالة vGPUs إلا بينما يكون جهاز VM موقوف التشغيل (powered off). لا يدعم NVIDIA vGPU التوصيل الساخن (hot-plug) ولا الفصل الساخن (hot-unplug)، لذا يتم تعطيل هذه التعديلات على جهاز VM شغال. التغييرات التي يتم إجراؤها عبر API على VM شغال يتم كتابتها في تكوينه المحفوظ وتدخل حيز التنفيذ عند إعادة التشغيل التالية.
تسمية ملفات التعريف
تتبع ملفات التعريف النمط GRID <card>-<size><series>، على سبيل المثال GRID T4-2Q:
- Q — Virtual Workstation. رسوميات احترافية و CUDA. الخيار المعتاد للحوسبة.
- C — Compute Server. للحوسبة فقط، بدون عرض.
- B — Virtual PC. أحمال عمل المكاتب والمتصفح، بدون CUDA.
- A — Virtual Application. بث التطبيقات.
الرقم هو حجم ذاكرة التخزين المؤقت للإطارات بالجيجابايت، لذا فإن T4-2Q هو ملف تعريف محطة عمل بحجم 2 جيجابايت ويمكن لبطاقة T4 بحجم 16 جيجابايت استضافة ثمانية منها.
ز. تثبيت برنامج تشغيل الضيف
يرى جهاز VM وحدة vGPU كجهاز PCI بمجرد تمهيده، ولكنه يظل خاملاً حتى يتم تثبيت برنامج تشغيل الضيف داخل VM. هذا تثبيت عادي للبرامج داخل الضيف، يتم بواسطة مسؤول VM نفسه — لا يشارك Vapor في ذلك.
قبل البدء، تأكد من أن الضيف يمكنه رؤية الجهاز:
lspci -nn | grep -i nvidia
# 05:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1eb8]إذا لم يتم إدراج أي شيء، فإن vGPU غير مرفق — عد إلى القسم و.
TIP
قم بتثبيت برنامج التشغيل مرة واحدة في صورة ذهبية (golden image) أو قالب، ثم قم باستنساخ أجهزة VM منها. يستمر برنامج التشغيل بعد الاستنساخ، لذا يصبح هذا القسم بأكمله مهمة تُنفذ مرة واحدة لكل صورة بدلاً من كل VM.
ز.1 إدخال برنامج التثبيت إلى VM
استخدم ما يناسب بيئتك:
- عبر الشبكة، إذا كان لدى VM اتصال و SSH:bash
scp NVIDIA-Linux-x86_64-<version>-grid.run user@<vm-ip>:~/ - من المضيف عبر HTTP، مفيد لأجهزة VM على شبكة libvirt NAT بدون SSH وارد. على المضيف، قم بتوفير المجلد الذي يحتوي على برنامج تشغيل الضيف:bashثم داخل VM، حيث
cd /path/to/Guest_Drivers && python3 -m http.server 8000 --bind 192.168.122.1192.168.122.1هي بوابة libvirt:bashأوقف الخادم عند الانتهاء.curl -O http://192.168.122.1:8000/NVIDIA-Linux-x86_64-<version>-grid.run - كـ محرك أقراص CD-ROM افتراضي، إذا لم يكن لدى VM شبكة: قم ببناء ISO يحتوي على برنامج التشغيل، وقم بتحميله تحت ISO Images، وإرفاقه بـ VM.
ز.2 Debian و Ubuntu
# المتطلبات الأساسية. استخدم الرؤوس المطابقة للنواة القيد التشغيل — قد تتبع
# حزمة linux-headers-amd64 العامة نواة أحدث من تلك التي تم التمهيد بها،
# ويتم بناء برنامج التشغيل مقابل النواة القيد التشغيل.
sudo apt-get update
sudo apt-get install -y dkms build-essential "linux-headers-$(uname -r)"
# تثبيت برنامج التشغيل
sudo dpkg -i nvidia-linux-grid-<branch>_<version>_amd64.deb
sudo rebootWARNING
في نظام Debian، يعلن ملف .deb الخاص بـ NVIDIA عن التبعية لـ حزمة تسمى linux-headers، وهي غير موجودة في أرشيف Debian — الحزم الحقيقية هي linux-headers-amd64 و linux-headers-<version>، ولا توفر أي منهما هذا الاسم (provides). هذه خصوصية من خصوصيات Ubuntu في حزم NVIDIA وستوقف dpkg أثناء التثبيت.
قم بحلها بشكل نظيف باستخدام equivs shim بدلاً من فرض dpkg، مما يترك قاعدة بيانات الحزم غير متسقة:
sudo apt-get install -y equivs
cat > linux-headers-shim <<EOF
Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: linux-headers
Version: $(uname -r)
Provides: linux-headers
Depends: linux-headers-$(uname -r)
Description: Satisfies the NVIDIA guest driver's bare linux-headers dependency
EOF
equivs-build linux-headers-shim
sudo dpkg -i linux-headers_*.deb
# الآن يتم تثبيت برنامج التشغيل بشكل طبيعي
sudo dpkg -i nvidia-linux-grid-<branch>_<version>_amd64.deb
sudo rebootبدلاً من ذلك، يمكنك تخطي مشكلة الحزم تمامًا باستخدام برنامج التثبيت .run الموضح في ز.4.
ز.3 RHEL و Rocky و AlmaLinux
sudo dnf install -y dkms gcc make "kernel-devel-$(uname -r)" "kernel-headers-$(uname -r)"
sudo rpm -ivh nvidia-linux-grid-<branch>-<version>.x86_64.rpm
sudo rebootز.4 أي توزيعة Linux (برنامج التثبيت .run)
يعمل برنامج التثبيت .run في أي مكان ويتجنب الخصائص المميزة لحزم التوزيعات، ولكنه لا يقوم بتحديث نفسه من خلال مدير الحزم لديك.
sudo sh NVIDIA-Linux-x86_64-<version>-grid.run --dkms
sudo rebootيسجل خيار --dkms الوحدة مع DKMS بحيث يتم إعادة بنائها تلقائيًا عند تحديث نواة الضيف. بدونه، يتوقف برنامج التشغيل عن التحميل بعد ترقية النواة التالية.
إذا أبلغ برنامج التثبيت عن تعارض مع nouveau، فاسمحه بكتابة القائمة السوداء، ثم أعد التشغيل وقم بتشغيله مرة أخرى.
ز.5 Windows
- انسخ برنامج تثبيت الضيف
.exeإلى VM. - قم بتشغيله واقبل الإعدادات الافتراضية.
- أعد التشغيل.
- تأكد من ظهور المحول في إدارة الأجهزة (Device Manager) تحت Display adapters.
ز.6 التحقق
داخل الضيف:
nvidia-smiيجب أن يبلغ عن اسم ملف التعريف وحجم ذاكرة التخزين المؤقت للإطارات الذي حددته، على سبيل المثال:
| GPU Name Persistence-M | Bus-Id Disp.A |
| 0 GRID T4-2Q On | 00000000:05:00.0 Off |
| | 1MiB / 2048MiB |للتحقق من أن الضيف يستخدم vGPU حقيقي بالفعل وليس بطاقة ممررة:
nvidia-smi -q | grep -A2 "GPU Virtualization Mode"
# Virtualization Mode : VGPUعلى المضيف، يجب أن تكون الجلسة نفسها مرئية من الجانب الآخر، مما يؤكد أيضًا أن برامج تشغيل المضيف والضيف تتواصل مع بعضها البعض:
nvidia-smi vgpu
# 0 Tesla T4 | 00000000:81:00.0 | 0%
# 3251634273 GRID T4-2Q | 0c6a... my-vm | 0%ز.7 ترخيص الضيف
بدون خادم ترخيص، يستمر تحميل برنامج التشغيل ويعمل nvidia-smi مفيدًا عن حالة Unlicensed. قم بتكوين عنوان Delegated License Service (DLS) أو Cloud License Service (CLS) في /etc/nvidia/gridd.conf داخل الضيف (أو عبر لوحة تحكم NVIDIA في Windows) لترخيصه بالكامل.
ح. إدارة أجهزة vGPU على المضيف
يعرض Virtualization → vGPU Devices كل جهاز وسيط على المضيف، بشكل مستقل عن أي VM.
- Capacity (السعة) لكل ملف تعريف، مع تظليل ملفات التعريف المستنفدة.
- Assigned To (المعين إلى) — VM الذي يحمل كل مثيل، أو شارة Unassigned (غير معين).
- Create (إنشاء) مثيل جديد مسبقًا.
- Remove (إزالة) مثيل لإعادة سعته إلى GPU.
TIP
لا تؤدي إزالة vGPU من VM دائمًا إلى تدمير المثيل الأساسي. يتم تدمير المثيلات التي أنشأها Vapor لجهاز VM معه، ولكن المثيلات التي أنشأتها بنفسك يتم تحريرها فقط. لا يزال المثيل غير المعين يستهلك سعة GPU، لذا تحقق من هذه الصفحة إذا كانت الشرائح المجانية تبدو مفقودة.
ط. استكشاف الأخطاء وإصلاحها (Troubleshooting)
لا تظهر ملفات تعريف vGPU في المعالج. تحقق من مربع NVIDIA vGPU Manager. السبب الأكثر شيوعًا هو عدم تثبيت برنامج تشغيل المضيف vGPU Manager — لا يوفر برنامج تشغيل مركز بيانات NVIDIA القياسي وبرنامج التشغيل مفتوح المصدر nouveau ميزة vGPU، وفقط حزمة vgpu-kvm هي التي تنشئ شجرة ملفات التعريف.
"No capacity left for profile … available_instances is 0". في وحدات GPU التي لا تحتوي على SR-IOV (بما في ذلك Tesla T4)، يتم قفل البطاقة على حجم ذاكرة تخزين مؤقت للإطارات واحد بينما يوجد أي مثيل. إذا كان لديك مثيلات بحجم 2 جيجابايت قيد التشغيل، فيمكن إنشاء ملفات تعريف بحجم 2 جيجابايت أخرى فقط. للتبديل بين الأحجام، قم بإزالة كل مثيل حالي على وحدة GPU تلك أولاً — بما في ذلك المثيلات غير المعينة، والتي تكون مرئية تحت vGPU Devices.
لن يبدأ VM بعد إعادة تشغيل المضيف. ينشئ Vapor المثيلات بشكل دائم بحيث يتم إعادة إنشائها تلقائيًا عند التمهيد. المثيل الذي تم إنشاؤه خارج Vapor — باستخدام كتابة sysfs مباشرة، على سبيل المثال — يكون عابرًا ويختفي عند إعادة التشغيل، مما يترك VM يشير إلى جهاز لم يعد موجودًا. تحقق باستخدام:
mdevctl list -dالمثيلات المعلمة بـ auto يتم إعادة إنشائها عند التمهيد.
nvidia-smi مفقود داخل VM. لم يتم تثبيت برنامج تشغيل الضيف. انظر القسم ز.
تم تثبيت برنامج تشغيل الضيف ولكن nvidia-smi يبلغ عن خطأ. من المحتمل أن فروع برامج تشغيل المضيف والضيف غير متطابقة. قارن nvidia-smi على المضيف مع إصدار برنامج تشغيل الضيف — يجب أن يكونا من نفس الفرع.