CPU-তে চলা user-defined function অন্যথায় GPU-তে ত্বরান্বিত Apache Spark query-কে বাধাগ্রস্ত করতে পারে। cuDF plugin সাধারণত যেকোনো UDF code রূপান্তর করতে পারে না: এটি columnar data-কে row-তে বদলে CPU-তে function চালায়, তারপর ফল আবার column-এ ফেরায়। NVIDIA-র ১৩ অক্টোবরের guide -এ UDF-কে Spark SQL, columnar RapidsUDF, অথবা CUDA-সমর্থিত RapidsUDF হিসেবে পুনর্লিখনের agent skill বর্ণনা করা হয়েছে। data engineer-এর জন্য মূল প্রশ্ন হলো, পুনর্লিখনে একই উত্তর আসে কি না, প্রাসঙ্গিক plan-এ GPU-তেই থাকে কি না, এবং বাস্তব job উন্নত হয় কি না।

এটি নথিভিত্তিক guide। BIG CHANGE এই skill চালায়নি, কোনো UDF পরীক্ষা করেনি বা Spark workload মাপেনি।

বড় পরিবর্তন

  • কী বদলেছে: NVIDIA UDF test তৈরি, function রূপান্তর, রূপান্তর যাচাই, CPU ও GPU সংস্করণের benchmark এবং প্রয়োজনে cuDF implementation optimize করার জন্য ধাপভিত্তিক agent workflow প্রকাশ করেছে।
  • কারা উপকৃত হবেন: GPU-সক্ষম RAPIDS/cuDF Spark pipeline-সহ এমন engineer, যার নির্দিষ্ট CPU UDF সেটিকে বাধা দিচ্ছে।
  • যা যাচাই করবেন: প্রতিনিধিত্বমূলক edge case-এ output মেলে কি না, লক্ষ্য করা CPU fallback ছাড়া execution plan, এবং নির্দিষ্ট hardware-এ পুনরাবৃত্তিযোগ্য job-level performance।

শুরু করার আগে

coding agent-এর সঙ্গে ভাগ করার অনুমতি আছে এমন একটি UDF বেছে নিন। agent ও তার environment অনুমোদিত না হলে credential, সংবেদনশীল input row বা মালিকানাধীন dataset prompt-এ দেবেন না। UDF source, registration ও call site, প্রাসঙ্গিক schema, প্রত্যাশিত null ও error behavior এবং অনুমোদিত ছোট test fixture দিন। তুলনার ভিত্তি হিসেবে বিদ্যমান Spark job-এর plan ও সময় নথিবদ্ধ করুন।

এই skills README হলো workflow-এর versioned সূচনা। এতে UDF build করতে Maven ও JDK, পাশাপাশি সামঞ্জস্যপূর্ণ Spark/RAPIDS/cuDF/CUDA stack এবং GPU দরকার বলা হয়েছে। কিছু ইনস্টল করার আগে নিজের Spark distribution, Scala version, driver, CUDA build ও GPU-র সঙ্গে বর্তমান plugin compatibility guide মিলিয়ে নিন। cloud GPU স্থানীয় hardware-এর বিকল্প হতে পারে, তবে provider-এর instance time ও storage-এর বিল হয়। agent/model ব্যবহারেরও খরচ হতে পারে। README scaffold ও example দেয়, কিন্তু আপনার cluster-এর compatibility বা performance নিশ্চিত করে না।

একবারে একটি function পুনর্লিখুন ও যাচাই করুন

  1. মূল আচরণ স্থির করুন। নির্বাচিত UDF-এ agent-কে udf-gen-test ব্যবহার করতে বলুন এবং তৈরি test নিজে পর্যালোচনা করুন। contract থেকে বাস্তব case যোগ করুন: প্রযোজ্য হলে null, খালি string বা collection, malformed input, boundary value, numeric precision, ordering ও error behavior। মূল UDF-এ সেগুলো চালান। প্রত্যাশিত ফল হলো passing baseline test suite, পুনর্লিখন নয়। NVIDIA-র temperature function example null input-এ স্পষ্টভাবে null ফেরায়; আপনার data type ও Spark setting-এও সেই আচরণ থাকলেই SQL rewrite প্রাসঙ্গিক।
  2. সমর্থিত সহজতম target বেছে নিন। Spark SQL বা DataFrame expression-এ প্রকাশযোগ্য logic-এর জন্য udf-convert-to-sql চান। এতে expression Spark planner-এর কাছে দৃশ্যমান হয় এবং plugin-কে সমর্থিত operation-এর GPU বিকল্প নিতে দিতে পারে। SQL-এ দরকারি logic পরিষ্কারভাবে প্রকাশ করা না গেলে udf-convert-to-cudf চান: এর RapidsUDF.evaluateColumnar GPU column vector নেয় এবং cuDF operation সাজায়। udf-convert-to-cuda শুধু তখনই নিন, যখন JNI-র মাধ্যমে custom kernel দরকার এবং অতিরিক্ত implementation ও maintenance যুক্তিযুক্ত। এগুলো যাচাই করার বিকল্প, সব operation GPU-তে চলার প্রতিশ্রুতি নয়।
  3. রূপান্তর গ্রহণের আগে পর্যালোচনা করুন। rewritten implementation মূলটির সঙ্গে তুলনা করুন এবং একই অনুমোদিত test case-এ দুটিই চালান। repository-তে test gap ও conversion bug আলাদাভাবে যাচাইয়ের জন্য udf-judge-conversion -ও আছে। type, null propagation, rounding, exception, ordering ও resource handling দেখুন। cuDF rewrite-এ temporary column-এর lifetime পরীক্ষা করুন; tutorial-এর Scala example scoped resource ব্যবহার করে result column ফেরায়। generated test suite পাস করা কার্যকর প্রমাণ, কিন্তু function contract যথেষ্টভাবে পরীক্ষা হয়েছে কি না তা মানুষকেই নির্ধারণ করতে হবে।
  4. চালানো plan পরীক্ষা করুন। cuDF plugin চালু রেখে পরিবর্তিত query চালান এবং লক্ষ্য operator ও আশপাশের conversion-এর plan ও RAPIDS diagnostics দেখুন। NVIDIA-র plugin overview বলছে, অসমর্থিত SQL operation Spark CPU-তে fallback করে। plan-এ UDF বা আশপাশের operator CPU-তে থাকলে অসমর্থিত expression বা type শনাক্ত করে target choice আবার বিবেচনা করুন। test result-এর সঙ্গে আগের ও পরের plan রাখুন। কোনো class-এর নাম RapidsUDF থাকলেই পুরো job GPU-তে থাকে তা প্রমাণ হয় না।
  5. যে job চালানোর পরিকল্পনা, সেটির benchmark করুন। একই input, cluster size, configuration ও measurement method-এ মূল ও পরিবর্তিত implementation তুলনা করতে udf-benchmark ব্যবহার করুন। job-এর elapsed time, input size, output equivalence এবং GPU/CPU resource use লিখুন। startup, cache বা contention-এর প্রভাব দেখতে একাধিকবার চালান। সঠিক cuDF সংস্করণ ধীর হলে repository-র udf-optimize-cudf দিয়ে profile করে সংশোধন করুন; প্রতিটি পরিবর্তনের পর correctness ও plan আবার যাচাই করুন। rewrite খারাপ ফল দিলেও পুনরুৎপাদনযোগ্য তুলনাই প্রত্যাশিত ফল।

সফল ফল কেমন দেখায়

নির্বাচিত UDF অনুমোদিত case-এ নথিভুক্ত আচরণের সঙ্গে মেলে, execution plan-এ লক্ষ্য করা CPU fallback আর থাকে না এবং প্রতিনিধিত্বমূলক benchmark-এ end-to-end-এ অর্থবহ ফল দেখা যায়—তখন candidate-টি সাধারণ code review-এর জন্য প্রস্তুত। কোনো check ব্যর্থ হলে মূল implementation রাখুন, ব্যর্থ expression-এ rewrite সীমিত করে সেই ধাপ আবার চালান। দ্রুত benchmark-এর চেয়ে semantic mismatch গুরুতর; plan অপরিবর্তিত থাকলে লক্ষ্য করা GPU path প্রতিষ্ঠিত হয়নি।

NVIDIA একটি production example জানিয়েছে, যেখানে cuDF-সক্ষম UDF ৬০০ বিলিয়ন row-এর workload-এ operator time ২৭৪.৫৫ ঘণ্টা থেকে ১২.৭৮ ঘণ্টায় নামিয়েছে । এগুলো ওই workload-এর operator time সম্পর্কে vendor-এর প্রতিবেদন; অন্য UDF বা end-to-end job-এর পূর্বাভাস নয়। বিস্তৃত ২২ গুণ দাবিকেও এই প্রেক্ষাপটে দেখতে হবে। GPU capacity, data movement, অসমর্থিত operation, code review এবং cloud charge আপনার pipeline-এর ফল বদলাতে পারে।

সূত্র ও আরও পড়ুন

  • NVIDIA Technical Blog, ১৩ অক্টোবর ২০২৬: CPU fallback, SQL/cuDF/CUDA বিকল্প, workflow-এর চার ধাপ এবং কোম্পানির উদ্ধৃত একমাত্র performance example ব্যাখ্যা করে। performance figure vendor-এর প্রতিবেদন।
  • NVIDIA cuDF Spark skills, pin করা repository revision: scaffold ও আলাদা skill-এর versioned entry point। আমাদের retrieval route pin করা GitHub page-এ পৌঁছাতে পারেনি; workflow detail NVIDIA tutorial এবং repository-র main branch-এ পাওয়া skills README-এর সঙ্গে মিলিয়ে দেখা হয়েছে।
  • Apache Spark-এর cuDF plugin overview: বর্তমান setup ও compatibility তথ্য এবং অসমর্থিত operation Spark CPU-তে চলে—এই স্পষ্ট নিয়ম। implementation-এর আগে release-নির্দিষ্ট compatibility list দেখুন।