AI-translated from English; not yet reviewed by a fluent editor.

# كيفية التحقق من تنفيذ إعادة كتابة Spark UDF على GPU

> خطوات عملية لاختبار Spark UDF واحدة، واختيار SQL أو cuDF أو CUDA، والتحقق من الرجوع إلى CPU، وقياس النتيجة في مسار عمل قادر على استخدام GPU.

By BIG CHANGE Editorial

Published: 2026-10-14T02:55:41.136Z
Updated: 2026-10-14T02:55:41.136Z
Canonical: https://bigchange.ai/blog/spark-udf-gpu-rewrite-verification-guide

![Conceptual charcoal illustration of a generic rackmount server with a tray pulled partly forward, showing four finned modules inside.](https://bigchange.ai/api/media/file/spark-gpu-server-hero-v1.png)
AI-generated conceptual illustration by BIG CHANGE. Generic server hardware; no NVIDIA product, Spark interface or measured result is depicted.

قد تعطل دالة يعرّفها المستخدم وتعمل على CPU استعلام Apache Spark مع أن بقية الاستعلام مسرّعة بواسطة GPU. لا يستطيع مكوّن cuDF الإضافي عمومًا تحويل أي شيفرة UDF: فهو يحوّل البيانات العمودية إلى صفوف، ويشغّل الدالة على CPU، ثم يعيد النتيجة إلى صيغة الأعمدة. [دليل NVIDIA الصادر في 13 أكتوبر](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/) يشرح مهارات الوكلاء لإعادة كتابة UDF على هيئة Spark SQL أو `RapidsUDF` عمودي أو `RapidsUDF` مدعوم بـ CUDA. والسؤال المهم لمهندس البيانات هو ما إذا كانت إعادة الكتابة تنتج الإجابات نفسها، وتبقى على GPU في الخطة المعنية، وتحسّن المهمة الفعلية.

هذا دليل مستند إلى الوثائق. لم تشغّل BIG CHANGE هذه المهارات، ولم تختبر UDF أو تقس Spark workload.

## التغيير الأبرز

- **ما الذي تغيّر:** نشرت NVIDIA سير عمل مرحليًا للوكلاء ينشئ اختبارات UDF، ويحوّل الدالة، ويقيّم التحويل، ويقارن أداء نسختي CPU وGPU، ويحسّن تنفيذ cuDF اختياريًا.
- **لمن يفيد:** المهندسون الذين لديهم مسار RAPIDS/cuDF Spark قادر على استخدام GPU ودالة CPU UDF محددة تعوقه.
- **ما ينبغي التحقق منه:** تطابق المخرجات في حالات طرفية ممثلة، وخطة تنفيذ لا تتضمن الرجوع المستهدف إلى CPU، وأداء على مستوى المهمة يمكن تكراره على العتاد المقصود.

## قبل البدء

اختر UDF واحدة لديك إذن بمشاركتها مع وكيل البرمجة. أبقِ بيانات الاعتماد وصفوف الإدخال الحساسة ومجموعات البيانات الخاصة خارج الطلب ما لم يكن الوكيل وبيئته معتمدين لذلك. قدّم مصدر UDF، وموضع تسجيلها واستدعائها، والمخططات ذات الصلة، وسلوك null والأخطاء المتوقع، وfixture اختبار صغيرًا مسموحًا. سجّل خطة Spark job الحالية ووقتها لتكون خط أساس للمقارنة.

يمثل [ملف README للمهارات](https://github.com/NVIDIA/cudf-spark/tree/cb8150b7ee4b07863bb6b267f28885def24b177e/skills) هو نقطة البدء ذات الإصدار المحدد لسير العمل. ويذكر الحاجة إلى Maven وJDK لبناء UDF، إضافة إلى حزمة متوافقة من Spark/RAPIDS/cuDF/CUDA وGPU. قبل التثبيت، طابق [دليل توافق المكوّن الإضافي الحالي](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html) مع توزيعة Spark وإصدار Scala وبرنامج التشغيل وبنية CUDA وGPU لديك. يمكن أن يكون GPU السحابي بديلًا عن العتاد المحلي، مع احتساب وقت المثيل والتخزين من المزوّد. وقد تكون لاستخدام الوكيل أو النموذج تكلفة أيضًا. يقدّم README هيكل مشروع وأمثلة، لكنه لا يثبت التوافق أو الأداء على عنقودك.

## أعد كتابة دالة واحدة وافحصها

1. **ثبّت السلوك الأصلي أولًا.** اطلب من الوكيل استخدام `udf-gen-test` على UDF المختارة وراجع الاختبارات المولّدة بنفسك. أضف حالات فعلية من العقد: مثل null والسلاسل أو المجموعات الفارغة والمدخلات المشوهة والقيم الحدية والدقة العددية والترتيب وسلوك الخطأ حسب الاقتضاء. شغّلها على UDF الأصلية. النتيجة المتوقعة هي مجموعة اختبارات أساس ناجحة، لا إعادة كتابة بعد. يعيد مثال دالة الحرارة لدى NVIDIA قيمة null صراحةً عند إدخال null؛ ولا تكون إعادة كتابتها بـ SQL مناسبة إلا إذا حافظت على ذلك السلوك مع أنواع بياناتك وإعدادات Spark الفعلية.
2. **اختر أبسط هدف مدعوم.** للمنطق القابل للتعبير عنه في Spark SQL أو DataFrame expressions، اطلب `udf-convert-to-sql`. فهذا يجعل التعبير مرئيًا لمخطط Spark وقد يتيح للمكوّن الإضافي استبدال العمليات المدعومة بنظائر GPU. إذا تعذر التعبير عن المنطق المطلوب بوضوح في SQL، فاطلب `udf-convert-to-cudf`؛ إذ يستقبل `RapidsUDF.evaluateColumnar` متجهات أعمدة GPU ويركّب عمليات cuDF. اقتصر على `udf-convert-to-cuda` عندما تتطلب الحالة نواة مخصصة عبر JNI ويكون عبء التنفيذ والصيانة الإضافي مبررًا. هذه خيارات للتقييم، وليست ضمانًا بأن كل عملية ستعمل على GPU.
3. **راجع التحويل قبل قبوله.** قارن التنفيذ المعاد كتابته بالأصلي وشغّلهما على حالات الاختبار المعتمدة نفسها. ويسرد المستودع أيضًا `udf-judge-conversion` لمراجعة منفصلة لفجوات الاختبار وأخطاء التحويل. افحص الأنواع وانتشار null والتقريب والاستثناءات والترتيب وإدارة الموارد. وفي إعادة كتابة cuDF افحص عمر الأعمدة المؤقتة؛ إذ يستخدم [مثال Scala في البرنامج التعليمي](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/) موارد محددة النطاق ويعيد عمود النتيجة. اجتياز مجموعة الاختبارات المولّدة دليل مفيد، لكن على شخص أن يقرر ما إذا كانت تغطي عقد الدالة.
4. **افحص خطة التنفيذ الفعلية.** شغّل الاستعلام المعدل مع تفعيل مكوّن cuDF، وافحص الخطة وتشخيصات RAPIDS للمشغّل المستهدف والتحويلات المجاورة. ويذكر [عرض المكوّن الإضافي](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html) من NVIDIA أن عمليات SQL غير المدعومة ترجع إلى تنفيذ Spark على CPU. إذا ظلت UDF أو المشغّلات المحيطة بها على CPU في الخطة، فحدّد التعبير أو النوع غير المدعوم وأعد النظر في اختيار الهدف. احتفظ بالخطة قبل التغيير وبعده مع نتيجة الاختبار. وجود `RapidsUDF` في اسم فئة لا يثبت وحده أن المهمة كلها بقيت على GPU.
5. **قِس أداء المهمة التي تنوي تشغيلها.** استخدم `udf-benchmark` لمقارنة التنفيذ الأصلي والمعدل باستخدام المدخلات وحجم العنقود والإعدادات وطريقة القياس نفسها. سجّل زمن المهمة وحجم الإدخال وتكافؤ المخرجات واستخدام موارد GPU/CPU. كرر التشغيل لرصد أثر الإقلاع أو التخزين المؤقت أو التنافس. وإذا كانت نسخة cuDF الصحيحة بطيئة، يتيح المستودع `udf-optimize-cudf` لتحليل الأداء ومراجعته؛ وأعد فحوص الصحة والخطة بعد كل تغيير. النتيجة المتوقعة هي مقارنة قابلة لإعادة الإنتاج حتى إن كانت إعادة الكتابة أبطأ.

## ما شكل النتيجة الناجحة

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

أبلغت NVIDIA عن مثال إنتاجي واحد خفّض فيه UDF مفعّل بـ cuDF زمن المشغّل من **274.55 إلى 12.78 ساعة** في workload يضم 600 مليار صف. هذه أزمنة مشغّل أبلغ عنها المورّد لذلك الحمل، وليست توقعًا لدالة UDF أخرى أو لمهمة كاملة. وينبغي فهم ادعاء 22 ضعفًا الأوسع في هذا السياق. قد تغيّر سعة GPU ونقل البيانات والعمليات غير المدعومة ومراجعة الشيفرة ورسوم السحابة النتيجة في مسار عملك.

## المصادر وقراءات إضافية

- [مدونة NVIDIA التقنية، 13 أكتوبر 2026](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/): تشرح الرجوع إلى CPU وخيارات SQL/cuDF/CUDA ومراحل سير العمل الأربع ومثال الأداء الوحيد الذي استشهدت به الشركة. أرقام الأداء من إفادة المورّد.
- [مهارات NVIDIA cuDF Spark، نسخة المستودع المثبتة](https://github.com/NVIDIA/cudf-spark/tree/cb8150b7ee4b07863bb6b267f28885def24b177e/skills): مدخل ذو إصدار محدد للهيكل والمهارات الفردية. تعذّر على مسار الاسترجاع لدينا الوصول إلى صفحة GitHub المثبتة؛ وقورنت تفاصيل سير العمل ببرنامج NVIDIA التعليمي وREADME المهارات المتاح على الفرع الرئيسي للمستودع.
- [نظرة عامة على مكوّن cuDF الإضافي لـ Apache Spark](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html): معلومات الإعداد والتوافق الحالية، إضافة إلى القاعدة الصريحة بأن العمليات غير المدعومة تنفذها Spark على CPU. تحقّق من قائمة التوافق الخاصة بالإصدار قبل التنفيذ.

## Sources

- [مدونة NVIDIA التقنية، How to Rewrite Apache Spark UDFs for GPU Acceleration with AI Agents](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/) — البرنامج التعليمي الأساسي ومثال workload الذي أبلغ عنه المورّد.
- [مهارات NVIDIA cuDF Spark، النسخة المثبتة](https://github.com/NVIDIA/cudf-spark/tree/cb8150b7ee4b07863bb6b267f28885def24b177e/skills) — النسخة المثبتة المحددة؛ فشل الاسترجاع بسبب عدم العثور على نسخة في ذاكرة الويب المؤقتة. قورنت التفاصيل بالبرنامج التعليمي وREADME الرئيسي المتاح.
- [مهارات NVIDIA cuDF Spark، README الرئيسي](https://github.com/NVIDIA/cudf-spark/tree/main/skills) — README حالي وقابل للتغيير لأسماء المهارات والمتطلبات المسبقة.
- [نظرة عامة على مكوّن NVIDIA cuDF الإضافي لـ Apache Spark](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html) — وثائق حالية عن الرجوع إلى CPU والتوافق؛ طابقها مع الإصدار المنشور.
