حول ظهور دعم CUDA في WSL 2

مايكروسوفت، والاستجابة للعديد من طلبات المستخدمين، قدم مايو 2020 في المؤتمر بناء ميزة جديدة في النظام الفرعي ويندوز لينكس 2 (وسل 2) - دعم مسرعات الفيديو. هذا يسمح لك بتشغيل تطبيقات حوسبة متخصصة في WSL 2. سوف يمهد دعم GPU الطريق للأدوات الاحترافية ويساعد على حل المهام في WSL 2 التي لا تتوفر حاليًا إلا على Linux. الآن يمكن حل هذه المهام في Windows ، باستخدام قدرات GPU.



من المهم للغاية هنا أن دعم بنية برامج الأجهزة للحوسبة المتوازية NVIDIA CUDA يأتي إلى WSL .



تم إعداد المواد التي ننشر ترجمتها من قبل متخصصي NVIDIA. هنا سنتحدث عن ما يمكن أن تتوقعه من CUDA في إصدار معاينة عامة من WSL 2.





تشغيل أطر Linux AI في حاويات WSL 2



ما هي WSL؟



WSL هي ميزة Windows 10 تسمح لك باستخدام أدوات سطر أوامر Linux مباشرة على Windows دون الحاجة إلى التعامل مع تعقيدات تطبيق تكوين التمهيد المزدوج. WSL هي بيئة حاويات متكاملة بإحكام مع Microsoft Windows. يسمح لك هذا بتشغيل تطبيقات Linux مع تطبيقات Windows التقليدية والتطبيقات الحديثة الموزعة عبر Microsoft Store.



WSL هي في الأساس أداة مطور. إذا كنت تعمل على بعض المشاريع في حاويات Linux ، فهذا يعني أنه يمكنك القيام بنفس الأشياء محليًا ، على كمبيوتر يعمل بنظام Windows ، باستخدام أدوات Linux المألوفة. عادة ، لتشغيل مثل هذه التطبيقات على Windows ، تحتاج إلى قضاء الكثير من الوقت في تكوين النظام ، فأنت بحاجة إلى بعض الأطر الخارجية والمكتبات. الآن ، مع إصدار WSL 2 ، تغير كل شيء. بفضل WSL 2 ، جاء الدعم الكامل لـ Linux kernel إلى عالم Windows.



سمحت تقنية WSL 2 و GPU paravirtualization (GPU Paravirtualization ، GPU-PV) لشركة Microsoft بنقل دعم Linux لنظام التشغيل Windows إلى مستوى جديد ، مما يجعل من الممكن إطلاق أحمال الحوسبة المصممة لوحدة معالجة الرسومات. أدناه ، سنلقي نظرة فاحصة على شكل وحدة معالجة الرسومات في WSL 2.



إذا كنت مهتمًا بموضوع دعم مسرعات الفيديو في WSL 2 ، فألق نظرة على هذه المادة وعلى هذا المستودع.



CUDA إلى WSL



للاستفادة من ميزات GPU في WSL 2 ، يجب أن يكون لديك برنامج تشغيل فيديو يدعم Microsoft WDDM على جهاز الكمبيوتر الخاص بك . يتم إنشاء برامج التشغيل هذه من قبل الشركات المصنعة لبطاقات الفيديو - مثل NVIDIA.



تتيح تقنية CUDA تطوير برامج مسرعات الفيديو NVIDIA. هذه التقنية مدعومة في WDDM ، في Windows ، لسنوات عديدة. توفر حاوية WSL 2 الجديدة من Microsoft إمكانات الحوسبة المعجلة GPU التي يمكن لتقنية CUDA الاستفادة منها ، مما يسمح بتشغيل البرامج القائمة على CUDA في WSL. لمزيد من التفاصيل ، راجع CUDA في دليل مستخدم WSL.



يتم تضمين دعم WSL CUDA في برامج تشغيل NVIDIA لـ WDDM 2.9. برامج التشغيل هذه سهلة بما يكفي للتثبيت على Windows. تصبح برامج تشغيل وضع المستخدم WSL CUDA (libcuda.so) متاحة تلقائيًا داخل الحاوية ، ويمكن للودر اكتشافها.



أضاف فريق تطوير برامج NVIDIA دعمًا لـ WDDM و GPU-PV إلى برنامج تشغيل CUDA. يتم ذلك بحيث يمكن أن تعمل برامج التشغيل هذه في بيئة Linux تعمل على Windows. لا تزال برامج التشغيل هذه في حالة معاينة ، وسيتم إصدارها عندئذٍ فقط ، وسيحدث الإصدار الرسمي لـ WSL مع دعم GPU. يمكن العثور على تفاصيل إصدار برنامج التشغيل هنا .



يوضح الشكل التالي كيفية توصيل برنامج تشغيل CUDA بـ WDDM داخل نظام ضيف Linux.





برنامج تشغيل WDDM في وضع المستخدم الذي يدعم CUDA يعمل على نظام ضيف Linux



لنفترض أنك المطور الذي قام بتثبيت توزيع WSL على أحدث إصدار من Windows من Fast Ring (بناء 20149 أو أحدث) برنامج Microsoft Windows Insider (WIP). إذا قمت بالتبديل إلى WSL 2 وكان لديك NVIDIA GPU ، فيمكنك اختبار برنامج التشغيل وتشغيل كود حوسبة GPU في WSL 2. للقيام بذلك ، ما عليك سوى تثبيت برنامج التشغيل في نظام مضيف Windows وفتح حاوية WSL. هنا ، بدون جهود إضافية ، ستتاح لك الفرصة للعمل مع التطبيقات التي تستخدم CUDA. يوضح الشكل التالي كيفية تشغيل تطبيق TensorFlow باستخدام ميزات CUDA في حاوية WSL 2.





حاوية TensorFlow التي تعمل في WSL 2



إن حقيقة أن تقنية CUDA متاحة الآن في WSL تجعل من الممكن تشغيل التطبيقات في WSL التي لم تكن تعمل في السابق إلا في بيئة Linux عادية.



لا تزال NVIDIA تعمل بنشاط في هذا المشروع وتقوم بإدخال تحسينات عليه. من بين أمور أخرى ، نحن نعمل على إضافة واجهات برمجة تطبيقات WDDM التي تم تصميمها سابقًا حصريًا لنظام Linux. سيؤدي هذا إلى حقيقة أنه في WSL ، بدون جهد إضافي من جانب المستخدم ، يمكن تشغيل المزيد والمزيد من التطبيقات.



مسألة أخرى تهمنا هي الأداء. كما ذكرنا ، فإن دعم GPU في WSL 2 يأخذ تقنية GPU-PV على محمل الجد. يمكن أن يؤثر ذلك سلبًا على سرعة أداء المهام الصغيرة على وحدة معالجة الرسومات ، في المواقف التي لن يتم فيها استخدام خطوط الأنابيب. نعمل الآن على تحقيق أكبر قدر ممكن من الحد من هذه الآثار.



NVML



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



بدأنا باستخدام برنامج تشغيل CUDA الرئيسي ، والذي سيسمح للمستخدمين بتشغيل معظم تطبيقات CUDA الحالية حتى في المراحل الأولى من دعم CUDA في WSL. ولكن كما اتضح ، فإن بعض الحاويات والتطبيقات تستخدم NVML للحصول على معلومات GPU حتى قبل تحميل CUDA. هذا هو السبب في أن إضافة دعم NVML إلى WSL هي واحدة من أهم أولوياتنا. من الممكن تمامًا أن نتمكن قريبًا من مشاركة الأخبار الجيدة بشأن حل هذه المشكلة.



حاويات GPU في WSL



بالإضافة إلى دعم WSL 2 لـ DirectX و CUDA ، تعمل NVIDIA على إضافة دعم لمجموعة أدوات حاوية NVIDIA (التي كانت تُعرف سابقًا باسم nvidia-docker2) إلى WSL 2. يمكن لتطبيقات GPU المعبأة التي يقوم العلماء بإنشائها لتعمل على بيئة Linux محلية أو سحابية الآن ، دون إجراء أي تغييرات عليها ، أن تعمل في WSL 2 على أجهزة الكمبيوتر التي تعمل بنظام Windows.



بعض حزم WSL الخاصة غير مطلوبة لهذا الغرض. يمكن لمكتبة وقت تشغيل NVIDIA (libnvidia-container) اكتشاف libdxcore ديناميكيًا واستخدامها عند تشغيل التعليمات البرمجية في بيئة WSL 2 مُسرَّعة من خلال GPU. يحدث هذا تلقائيًا بعد تثبيت حزم Docker و NVIDIA Container Toolkit ، تمامًا مثل Linux. هذا يسمح لك ، دون بذل جهد إضافي ، بتشغيل حاويات في WSL 2 تستخدم قوة GPU.



نوصي بشدة أن يقوم أولئك الذين يرغبون في استخدام هذا الخيار --gpusبتثبيت أحدث إصدار من أدوات Docker (19.03 أو أحدث). لتمكين دعم WSL 2 ، اتبع التعليمات لتوزيع Linux الخاص بك وقم بتثبيت أحدث إصدار متوفر nvidia-container-toolkit.



كيف تعمل؟ يتم حل جميع المهام الخاصة بـ WSL 2 باستخدام مكتبة libnvidia-container . يمكن لهذه المكتبة الآن ، في وقت التشغيل ، اكتشاف وجود libdxcore.so واستخدام هذه المكتبة لاكتشاف جميع وحدات معالجة الرسومات المرئية لهذه الواجهة.



إذا كانت هناك حاجة لاستخدام وحدات معالجة الرسومات هذه في حاوية ، فعندئذٍ ، باستخدام libdxcore.so ، يتم إجراء مكالمة إلى موقع تخزين برنامج التشغيل ، إلى المجلد الذي يحتوي على كافة مكتبات برامج التشغيل لنظام Windows المضيف و WSL 2. مكتبة libnvidia-container.so مسؤولة عن تكوين الحاوية حتى تتمكن من الوصول إلى مستودع برنامج التشغيل بشكل صحيح. هذه المكتبة نفسها مسؤولة عن تكوين المكتبات الأساسية التي يدعمها WSL 2. ويظهر هذا الشكل بشكل تخطيطي في الشكل التالي.





نظام اكتشاف مخزن برنامج التشغيل وتخطيط الحاويات المستخدم بواسطة libnvidia-container.so في WSL 2



وهو يختلف أيضًا عن المنطق المستخدم خارج WSL. يتم تلخيص هذه العملية بالكامل باستخدام libnvidia-container.so ويجب أن تكون شفافة قدر الإمكان للمستخدم النهائي. أحد قيود هذا الإصدار المبكر هو أنه لا يمكنك تحديد وحدات معالجة الرسومات في البيئات التي تحتوي على وحدات معالجة رسومات متعددة. جميع وحدات معالجة الرسومات مرئية دائمًا في الحاوية.



يمكن تشغيل أي حاويات NVIDIA Linux تعرفها بالفعل في حاوية WSL. تدعم NVIDIA أدوات Linux ومهام سير العمل الأكثر إثارة للاهتمام التي يستخدمها المحترفون. قم بتنزيل الحاوية التي تهتم بها من NVIDIA NGC وجربها .



سنوضح لك الآن كيفية تشغيل حاويات TensorFlow و N-body في WSL 2 ، والتي تم تصميمها لاستخدام NVIDIA GPUs لتسريع العمليات الحسابية.



تشغيل حاوية الجسم N 



قم بتثبيت Docker باستخدام برنامج التثبيت النصي:



user@PCName:/mnt/c$ curl https://get.docker.com | sh


قم بتثبيت مجموعة أدوات حاوية NVIDIA. يتوفر دعم WSL 2 بدءًا من nvidia-docker2 v2.3 ومن مكتبة وقت التشغيل libnvidia-container 1.2.0-rc.1.



انشاء مستودعات stableو experimentalمفتاح GPG. التغييرات في رمز وقت التشغيل المصممة لدعم WSL 2 متاحة في المستودع التجريبي.



user@PCName:/mnt/c$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

user@PCName:/mnt/c$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

user@PCName:/mnt/c$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

user@PCName:/mnt/c$ curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list


قم بتثبيت حزم وقت تشغيل NVIDIA وتبعياتها:



user@PCName:/mnt/c$ sudo apt-get update
user@PCName:/mnt/c$ sudo apt-get install -y nvidia-docker2


دعونا نفتح حاوية WSL ونبدأ برنامج Docker الخفي فيه. إذا تم كل شيء بشكل صحيح - بعد ذلك يمكنك مشاهدة رسائل الخدمة dockerd.



user@PCName:/mnt/c$ sudo dockerd




تشغيل برنامج Docker الخفي



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



user@PCName:/mnt/c$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark




إطلاق حاوية N- الجسم



تشغيل حاوية TensorFlow



دعونا نحاول في Docker ، في بيئة WSL 2 ، حاوية أخرى شائعة - TensorFlow.



قم بتنزيل صورة TensorFlow Docker. لتجنب مشاكل الاتصال بـ Docker ، قم بتشغيل الأمر التالي في وضع sudo:



user@PCName:/mnt/c$ docker pull tensorflow/tensorflow:latest-gpu-py3


لنحفظ النسخة المعدلة قليلاً من البرنامج التعليمي GPU من TensorFlow Tutorial 15 إلى القرص على Cالنظام المضيف. يتم تثبيت هذا القرص افتراضيًا في حاوية WSL 2 كـ /mnt/c.



user@PCName:/mnt/c$ vi ./matmul.py
import sys
import numpy as np
import tensorflow as tf
from datetime import datetime

device_name = sys.argv[1]  # Choose device from cmd line. Options: gpu or cpu
shape = (int(sys.argv[2]), int(sys.argv[2]))
if device_name == "gpu":
    device_name = "/gpu:0"
else:
    device_name = "/cpu:0"

tf.compat.v1.disable_eager_execution()
with tf.device(device_name):
    random_matrix = tf.random.uniform(shape=shape, minval=0, maxval=1)
    dot_operation = tf.matmul(random_matrix, tf.transpose(random_matrix))
    sum_operation = tf.reduce_sum(dot_operation)

startTime = datetime.now()
with tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True)) as session:
        result = session.run(sum_operation)
        print(result)

#  
print("Shape:", shape, "Device:", device_name)
print("Time taken:", datetime.now() - startTime)


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



user@PCName:/mnt/c$ docker run --runtime=nvidia --rm -ti -v "${PWD}:/mnt/c" tensorflow/tensorflow:latest-gpu-jupyter python /mnt/c/matmul.py gpu 20000




نتائج تنفيذ البرنامج النصي Matmul.py



عند استخدام GPU في حاوية WSL 2 ، يتم تسريع تنفيذ التعليمات البرمجية بشكل ملحوظ مقارنةً بتنفيذها على وحدة المعالجة المركزية.



دعنا نجري تجربة أخرى مصممة لدراسة أداء حوسبة GPU. يتعلق الأمر بالكود من دليل Jupyter Notebook. بعد بدء الحاوية ، سترى رابطًا إلى خادم Jupyter Notebook.



user@PCName:/mnt/c$ docker run -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter




تشغيل Jupyter Notebook



يجب أن تكون قادرًا الآن على تشغيل العروض التوضيحية في بيئة Jupyter Notebook. لاحظ أنه للاتصال بـ Jupyter Notebook باستخدام Microsoft Edge ، استخدمه بدلاً من 127.0.0.1localhost.



انتقل إلىtensorflow-tutorialsوابدأ المفكرةclassification.ipynb.



لمشاهدة نتائج تسريع GPU ، اذهب إلى القائمةCell، وحددRun Allوعرض السجل في حاوية WSL 2 Jupyter Notebook.





Jupyter Notebook Journal



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



مراجعة WSL



لفهم كيفية إضافة دعم GPU إلى WSL 2 ، سنتحدث الآن عن إطلاق Linux على Windows وكيف ترى الحاويات الأجهزة.



قدمت Microsoft تقنية WSL في Build في عام 2016. وجدت هذه التقنية بسرعة تطبيقًا واسعًا وأصبحت شائعة بين مطوري Linux الذين يحتاجون إلى تشغيل التطبيقات المستندة إلى Windows ، مثل Office ، إلى جانب أدوات التطوير لنظام Linux والبرامج ذات الصلة.



سمح نظام WSL 1 بتشغيل ثنائيات Linux غير المعدلة. ومع ذلك ، فقد استخدم طبقة مضاهاة kernel Linux التي تم تنفيذها كنظام فرعي NT kernel. عالج هذا النظام الفرعي المكالمات من تطبيقات Linux ، وأعاد توجيهها إلى آليات Windows 10 المناسبة.



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



مع أخذ ذلك في الاعتبار ، قررت Microsoft السير في الاتجاه الآخر وأصدرت WSL 2 ، إصدار جديد من WSL. تعمل حاويات WSL 2 على توزيعات Linux كاملة في بيئة افتراضية ، ولكنها لا تزال تستفيد بشكل كامل من نظام حاويات Windows 10 الجديد.



في حين أن WSL 2 يستخدم خدمات Hyper-V في Windows 10 ، إلا أنه ليس جهازًا افتراضيًا تقليديًا ، بل هو محرك مساعد ظاهري خفيف الوزن. هذه الآلية مسؤولة عن إدارة الذاكرة الافتراضية المرتبطة بالذاكرة الفعلية ، مما يسمح لحاويات WSL 2 بتخصيص الذاكرة ديناميكيًا عن طريق الوصول إلى نظام مضيف Windows.



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



تم تقديم WSL 2 في برنامج Windows Insider كميزة معاينة وتم إصداره في أحدث تحديث لـ Windows 10 ، الإصدار 2004.



في WSL 2 ، من أحدث إصدار من Windows ، هناك المزيد من التحسينات التي تؤثر على الكثير من الأشياء - من مكدسات الشبكة إلى آليات VHD الأساسية لنظام التخزين. وصف لجميع الميزات الجديدة في WSL 2 خارج نطاق هذه المادة. يمكنك معرفة المزيد عنها في هذه الصفحة ، التي تقارن WSL 2 و WSL 1.



Linux Core WSL 2



تم تجميع نواة Linux المستخدمة في WSL 2 بواسطة Microsoft من أحدث فرع مستقر ، باستخدام شفرة المصدر المتاحة على kernel.org. تم ضبط هذه النواة خصيصًا لـ WSL 2 ، وتم تحسينها من حيث الحجم والأداء لضمان تشغيل Linux على Windows. النواة مدعومة من خلال آلية Windows Update. هذا يعني أن المستخدم لا داعي للقلق بشأن تنزيل آخر تحديثات الأمان وتحسينات kernel. كل هذا يتم تلقائيًا.



تدعم Microsoft العديد من توزيعات Linux في WSL. قامت الشركة ، وفقًا لقواعد مجتمع المصدر المفتوح ، بنشر مستودع WSL2-Linux-Kernel GitHub شفرة المصدر الخاصة بنواة WSL 2 مع التعديلات اللازمة للتكامل مع Windows 10. 



دعم GPU في WSL



أضاف مطورو Microsoft دعمًا لوحدات معالجة الرسومات الحقيقية باستخدام تقنية GPU-PV في حاويات WSL 2. هنا ، تقوم نواة رسومات نظام التشغيل (dxgkrnl) بتنظيم برنامج تشغيل وضع kernel الموجود على المضيف مع مكالمات من مكونات وضع المستخدم التي يتم تنفيذها في الجهاز الظاهري الضيف.



قامت Microsoft بتطوير هذه التكنولوجيا كقدرة WDDM ، ومنذ إنشائها كان هناك العديد من إصدارات Windows. تم تنفيذ هذا العمل بمشاركة موردي الأجهزة المستقلين (بائع الأجهزة المستقل ، IHV). دعمت برامج تشغيل رسومات NVIDIA GPU-PV منذ الأيام الأولى لهذه التقنية في إصدارات معاينة المنتجات المتوفرة في برنامج Windows Insider. يمكن الوصول إلى جميع وحدات معالجة الرسومات NVIDIA المدعومة حاليًا بواسطة نظام تشغيل الضيف في جهاز افتراضي باستخدام Hyper-V.



للاستفادة من إمكانات GPU-PV في WSL 2 ، كان على Microsoft إنشاء قاعدة إطار الرسومات الخاص بها لضيف Linux: WDDM مع دعم بروتوكول GPU-PV. يأتي برنامج تشغيل Microsoft الجديد خلف dxgkrnl ، وهو النظام المسؤول عن دعم WDDM على Linux. يمكن العثور على رمز برنامج التشغيل في مستودع WSL2-Linux-Kernel.



من المتوقع أن تقدم Dxgkrnl دعم تسريع GPU في حاويات WSL 2 في WDDM 2.9. تقول Microsoft أن dxgkrnl هو برنامج تشغيل GPU Linux يعتمد على بروتوكول GPU-PV وليس له علاقة ببرنامج تشغيل Windows يحمل اسمًا مشابهًا.



يمكنك حاليًا تنزيل إصدار معاينة برنامج تشغيل NVIDIA WDDM 2.9. في الأشهر القليلة المقبلة ، سيتم توزيع برنامج التشغيل هذا عبر Windows Update في إصدار WIP من Windows ، مما يجعل من الضروري تنزيل برنامج التشغيل وتثبيته يدويًا.



فهم GPU-PV



برنامج التشغيل dxgkrnl يجعل الجهاز الجديد / dev / dxg متاحًا في وضع المستخدم في ضيف Linux. كما تم نقل طبقة خدمة D3DKMT kernel ، التي كانت متاحة على Windows ، كجزء من مكتبة dxcore إلى Linux. يتفاعل مع dxgkrnl باستخدام مجموعة من مكالمات IOCTL الخاصة.



يتصل إصدار ضيف Linux من dxgkrnl بـ dxg kernel على مضيف Windows باستخدام قنوات ناقل VM متعددة. تقوم نواة dxg على المضيف بمعالجة ما يأتي من عملية Linux ، تمامًا مثل ما يأتي من تطبيقات Windows العادية باستخدام WDDM. على وجه التحديد ، يرسل dxg kernel ما استلمه إلى KMD (برنامج تشغيل وضع Kernel ، وهو برنامج تشغيل وضع kernel فريد لكل HIV). يقوم برنامج تشغيل وضع kernel بتحضير ما يستقبله للإرسال إلى مسرع رسومات الأجهزة. يوضح الشكل التالي مخططًا مبسطًا للتفاعل بين جهاز Linux / dev / dxg و KMD.





رسم تخطيطي مبسط لكيفية تمكين مكونات مضيف Windows لجهاز dxg للعمل في ضيف Linux



عندما يتعلق الأمر بتوفير هذا السلوك في ضيوف Windows ، كانت برامج تشغيل NVIDIA تدعم GPU-PV في Windows 10 لبعض الوقت. يمكن استخدام وحدات معالجة الرسومات NVIDIA لتسريع إخراج الحوسبة والرسومات في جميع تطبيقات Windows 10 باستخدام طبقة الظاهرية من Microsoft. يسمح استخدام GPU-PV أيضًا بالعمل مع vGPU. فيما يلي بعض الأمثلة على التطبيقات المماثلة:





هذه هي الطريقة التي يبدو بها تشغيل تطبيق DirectX في حاوية Windows Sandbox باستخدام مسرع الفيديو NVIDIA GeForce GTX 1070.





تسريع الرسومات في حاوية Windows Sandbox بواسطة NVIDIA GeForce GTX 1070



دعم وضع المستخدم



لإضافة دعم لعرض الرسومات إلى WSL ، قام فريق التطوير المقابل من Microsoft أيضًا بنقل مكون وضع المستخدم dxcore إلى Linux.



توفر مكتبة dxcore واجهة برمجة تطبيقات تتيح لك الحصول على معلومات حول بطاقات الرسومات المتوافقة مع WDDM المتاحة على نظامك. تم تصميم هذه المكتبة كبديل منخفض المستوى عبر النظام الأساسي لأداة العمل مع محولات DXGI في نظامي التشغيل Windows و Linux. تقوم المكتبة أيضًا بتلخيص الوصول إلى خدمات dxgkrnl (مكالمات IOCTL على مكالمات Linux و GDI على Windows) باستخدام طبقة واجهة برمجة التطبيقات D3DKMT ، والتي تستخدمها CUDA ومكونات وضع المستخدم الأخرى التي تعتمد على دعم WSL WDDM.



وفقًا لمايكروسوفت ، ستكون مكتبة dxcore (libdxcore.so) متاحة على كل من Windows و Linux. تخطط NVIDIA لإضافة دعم لـ DirectX 12 وواجهة برمجة تطبيقات CUDA إلى برنامج التشغيل. تستهدف هذه الإضافات قدرات WSL الجديدة المتوفرة مع WDDM 2.9. سيتم ربط كلتا مكتبات API بـ dxcore حتى يتمكنوا من توجيه dxg لتنظيم طلباتهم إلى KMD على النظام المضيف.



جرب الميزات الجديدة لـ WSL 2



هل تريد استخدام جهاز الكمبيوتر الذي يعمل بنظام Windows لتعلم الآلة بشكل حقيقي ومهام الذكاء الاصطناعي مع الاستمرار في الاستمتاع ببيئة Linux؟ إذا كان الأمر كذلك ، فإن دعم CUDA في WSL يمنحك فرصة رائعة للقيام بذلك. بيئة WSL هي المكان الذي أثبتت فيه حاويات CUDA Docker أنها بيئة الحوسبة الأكثر شيوعًا بين علماء البيانات.





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



هل جربت CUDA في WSL 2 حتى الآن؟






All Articles