গুগল ক্লাউড এবং এনভিআইডিআইএ-এর সাথে অ্যাক্সিলারেটেড ডেটা অ্যানালিটিক্স

1. ভূমিকা

এই কোডল্যাবে, আপনি শিখবেন কিভাবে NVIDIA GPU এবং Google ক্লাউডে ওপেন-সোর্স লাইব্রেরি ব্যবহার করে বৃহৎ ডেটাসেটে আপনার ডেটা অ্যানালিটিক্স ওয়ার্কফ্লো ত্বরান্বিত করবেন। আপনি আপনার অবকাঠামো অপ্টিমাইজ করে শুরু করবেন এবং তারপর শূন্য কোড পরিবর্তন সহ GPU ত্বরণ কীভাবে প্রয়োগ করবেন তা অন্বেষণ করবেন।

তুমি pandas , একটি জনপ্রিয় ডেটা ম্যানিপুলেশন লাইব্রেরি, এর উপর মনোযোগ দেবে এবং NVIDIA এর cuDF লাইব্রেরি ব্যবহার করে এটিকে কীভাবে ত্বরান্বিত করতে হয় তা শিখবে। সবচেয়ে ভালো দিক হল, তুমি তোমার বিদ্যমান pandas কোড পরিবর্তন না করেই এই GPU ত্বরণ পেতে পারো।

তুমি কি শিখবে

  • গুগল ক্লাউডে কোল্যাব এন্টারপ্রাইজ সম্পর্কে জানুন।
  • নির্দিষ্ট GPU, CPU এবং মেমরি কনফিগারেশনের সাহায্যে একটি Colab রানটাইম পরিবেশ কাস্টমাইজ করুন।
  • NVIDIA cuDF ব্যবহার করে কোনও কোড পরিবর্তন ছাড়াই pandas গতি বাড়ান।
  • কর্মক্ষমতার বাধাগুলি সনাক্ত এবং অপ্টিমাইজ করতে আপনার কোড প্রোফাইল করুন।

2. কেন ডেটা প্রক্রিয়াকরণ ত্বরান্বিত করবেন?

৮০/২০ নিয়ম: কেন তথ্য প্রস্তুতিতে এত সময় লাগে

ডেটা প্রস্তুতি প্রায়শই একটি বিশ্লেষণ প্রকল্পের সবচেয়ে সময়সাপেক্ষ পর্যায়। ডেটা বিজ্ঞানী এবং বিশ্লেষকরা কোনও বিশ্লেষণ শুরু করার আগে তাদের বেশিরভাগ সময় ডেটা পরিষ্কার, রূপান্তর এবং কাঠামোগত করার জন্য ব্যয় করেন।

সৌভাগ্যবশত, আপনি cuDF ব্যবহার করে NVIDIA GPU-তে পান্ডা, অ্যাপাচি স্পার্ক এবং পোলারের মতো জনপ্রিয় ওপেন-সোর্স লাইব্রেরিগুলিকে ত্বরান্বিত করতে পারেন। এই ত্বরণের সাথেও, ডেটা প্রস্তুতি সময়সাপেক্ষ থাকে কারণ:

  • উৎস তথ্য খুব কমই বিশ্লেষণের জন্য প্রস্তুত: বাস্তব-বিশ্বের তথ্যে প্রায়শই অসঙ্গতি, অনুপস্থিত মান এবং ফর্ম্যাটিং সমস্যা থাকে।
  • গুণমান মডেলের কর্মক্ষমতাকে প্রভাবিত করে: খারাপ ডেটা মানের কারণে সবচেয়ে পরিশীলিত অ্যালগরিদমও অকেজো হয়ে যেতে পারে।
  • স্কেল সমস্যাগুলিকে আরও বাড়িয়ে তোলে: লক্ষ লক্ষ রেকর্ডের সাথে কাজ করার সময় আপাতদৃষ্টিতে ছোটখাটো ডেটা সমস্যাগুলি গুরুত্বপূর্ণ বাধা হয়ে দাঁড়ায়।

৩. একটি নোটবুক পরিবেশ নির্বাচন করা

যদিও অনেক ডেটা বিজ্ঞানী ব্যক্তিগত প্রকল্পের জন্য Colab-এর সাথে পরিচিত, Colab Enterprise ব্যবসার জন্য ডিজাইন করা একটি নিরাপদ, সহযোগিতামূলক এবং সমন্বিত নোটবুক অভিজ্ঞতা প্রদান করে।

গুগল ক্লাউডে, পরিচালিত নোটবুক পরিবেশের জন্য আপনার কাছে দুটি প্রাথমিক পছন্দ রয়েছে: কোল্যাব এন্টারপ্রাইজ এবং ভার্টেক্স এআই ওয়ার্কবেঞ্চ । সঠিক পছন্দটি আপনার প্রকল্পের অগ্রাধিকারের উপর নির্ভর করে।

ভার্টেক্স এআই ওয়ার্কবেঞ্চ কখন ব্যবহার করবেন

যখন আপনার অগ্রাধিকার নিয়ন্ত্রণ এবং গভীর কাস্টমাইজেশন হয় তখন Vertex AI Workbench বেছে নিন। আপনার যদি প্রয়োজন হয় তবে এটি আদর্শ পছন্দ:

  • অন্তর্নিহিত অবকাঠামো এবং মেশিনের জীবনচক্র পরিচালনা করুন।
  • কাস্টম কন্টেইনার এবং নেটওয়ার্ক কনফিগারেশন ব্যবহার করুন।
  • MLOps পাইপলাইন এবং কাস্টম লাইফসাইকেল টুলিংয়ের সাথে একীভূত করুন।

কোলাব এন্টারপ্রাইজ কখন ব্যবহার করবেন

দ্রুত সেটআপ, ব্যবহারের সহজতা এবং নিরাপদ সহযোগিতা যখন আপনার অগ্রাধিকার হবে তখন Colab Enterprise বেছে নিন। এটি একটি সম্পূর্ণরূপে পরিচালিত সমাধান যা আপনার দলকে অবকাঠামোর পরিবর্তে বিশ্লেষণের উপর মনোযোগ দিতে সাহায্য করে। Colab Enterprise আপনাকে সাহায্য করে:

  • আপনার ডেটা গুদামের সাথে ঘনিষ্ঠভাবে সম্পর্কিত ডেটা সায়েন্স ওয়ার্কফ্লো তৈরি করুন। আপনি BigQuery Studio- তে সরাসরি আপনার নোটবুকগুলি খুলতে এবং পরিচালনা করতে পারেন।
  • ভার্টেক্স এআই-তে মেশিন লার্নিং মডেলগুলিকে প্রশিক্ষণ দিন এবং MLOps টুলের সাথে একীভূত করুন।
  • একটি নমনীয় এবং একীভূত অভিজ্ঞতা উপভোগ করুন। BigQuery-তে তৈরি একটি Colab Enterprise নোটবুক Vertex AI-তে খোলা এবং চালানো যেতে পারে, এবং বিপরীতভাবেও।

আজকের ল্যাব

এই কোডল্যাবটি ত্বরিত ডেটা বিশ্লেষণের জন্য কোল্যাব এন্টারপ্রাইজ ব্যবহার করে।

পার্থক্যগুলি সম্পর্কে আরও জানতে, সঠিক নোটবুক সমাধান নির্বাচন করার জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন।

৪. একটি রানটাইম টেমপ্লেট কনফিগার করুন

Colab Enterprise-এ, একটি রানটাইমের সাথে সংযোগ করুন যা একটি আগে থেকে কনফিগার করা রানটাইম টেমপ্লেটের উপর ভিত্তি করে তৈরি।

রানটাইম টেমপ্লেট হল একটি পুনঃব্যবহারযোগ্য কনফিগারেশন যা আপনার নোটবুকের জন্য সম্পূর্ণ পরিবেশ নির্দিষ্ট করে, যার মধ্যে রয়েছে:

  • মেশিনের ধরণ (CPU, মেমোরি)
  • অ্যাক্সিলারেটর (GPU টাইপ এবং গণনা)
  • ডিস্কের আকার এবং প্রকার
  • নেটওয়ার্ক সেটিংস এবং নিরাপত্তা নীতি
  • স্বয়ংক্রিয় নিষ্ক্রিয় শাটডাউন নিয়ম

রানটাইম টেমপ্লেট কেন কার্যকর

  • একটি সামঞ্জস্যপূর্ণ পরিবেশ পান: আপনার কাজ পুনরাবৃত্তিযোগ্য কিনা তা নিশ্চিত করার জন্য আপনি এবং আপনার সতীর্থরা প্রতিবার একই ব্যবহারের জন্য প্রস্তুত পরিবেশ পান।
  • ডিজাইন অনুসারে নিরাপদে কাজ করুন: টেমপ্লেটগুলি স্বয়ংক্রিয়ভাবে আপনার প্রতিষ্ঠানের নিরাপত্তা নীতিগুলি প্রয়োগ করে।
  • কার্যকরভাবে খরচ পরিচালনা করুন: GPU এবং CPU-এর মতো সম্পদগুলি টেমপ্লেটে আগে থেকে আকারে রাখা হয়, যা দুর্ঘটনাজনিত খরচের অতিরিক্ত বৃদ্ধি রোধ করতে সাহায্য করে।

একটি রানটাইম টেমপ্লেট তৈরি করুন

ল্যাবের জন্য একটি পুনর্ব্যবহারযোগ্য রানটাইম টেমপ্লেট সেটআপ করুন।

  1. গুগল ক্লাউড কনসোলে, নেভিগেশন মেনু > ভার্টেক্স এআই > কোলাব এন্টারপ্রাইজে যান।

Colab Enterprise-এ নেভিগেট করুন

  1. Colab Enterprise থেকে, Runtime templates এ ক্লিক করুন এবং তারপর New Template নির্বাচন করুন

একটি নতুন রানটাইম টেমপ্লেট তৈরি করুন

  1. রানটাইম বেসিকের অধীনে:
  • ডিসপ্লে নামটি gpu-template হিসেবে সেট করুন।
  • আপনার পছন্দের অঞ্চল নির্ধারণ করুন।

রানটাইম নাম এবং অঞ্চল কনফিগারেশন

  1. কনফিগার কম্পিউটের অধীনে:
  • মেশিনের ধরণটি g2-standard-4 এ সেট করুন।
  • নিষ্ক্রিয় শাটডাউন 60 মিনিটে পরিবর্তন করুন।
  1. রানটাইম টেমপ্লেটটি সংরক্ষণ করতে তৈরি করুন এ ক্লিক করুন। আপনার রানটাইম টেমপ্লেট পৃষ্ঠাটি এখন নতুন টেমপ্লেটটি প্রদর্শন করবে।

রানটাইম টেমপ্লেট মেশিনের ধরণ সেট করুন এবং টেমপ্লেট তৈরি করুন

৫. রানটাইম শুরু করুন

আপনার টেমপ্লেট প্রস্তুত থাকলে, আপনি একটি নতুন রানটাইম তৈরি করতে পারেন।

  1. Colab Enterprise থেকে, Runtimes-এ ক্লিক করুন এবং তারপর Create নির্বাচন করুন।

রানটাইম তৈরির মেনু খোলে

  1. রানটাইম টেমপ্লেটের অধীনে, gpu-template বিকল্পটি নির্বাচন করুন। তৈরি করুন ক্লিক করুন এবং রানটাইম বুট হওয়ার জন্য অপেক্ষা করুন।

একটি নতুন রানটাইম বুট করুন

  1. কয়েক মিনিট পরে, আপনি রানটাইম উপলব্ধ দেখতে পাবেন।

রানটাইম ব্যবহারের জন্য উপলব্ধ কিনা তা পরীক্ষা করে।

৬. নোটবুক সেট আপ করুন

এখন যেহেতু আপনার অবকাঠামো চলছে, আপনাকে ল্যাব নোটবুকটি আমদানি করতে হবে এবং এটি আপনার রানটাইমের সাথে সংযুক্ত করতে হবে।

নোটবুকটি আমদানি করুন

  1. Colab Enterprise থেকে, My notebooks-এ ক্লিক করুন এবং তারপর Import-এ ক্লিক করুন।

নোটবুক আমদানি ফলকটি খোলে

  1. URL রেডিও বোতামটি নির্বাচন করুন এবং নিম্নলিখিত URL টি ইনপুট করুন:

https://github.com/GoogleCloudPlatform/ai-ml-recipes/blob/main/notebooks/analytics/gpu_accelerated_analytics.ipynb

  1. Import এ ক্লিক করুন। Colab Enterprise GitHub থেকে নোটবুকটি আপনার পরিবেশে কপি করবে।

একটি পাবলিক রিপোজিটরি থেকে নোটবুকটি কপি করে

রানটাইমের সাথে সংযোগ করুন

  1. নতুন আমদানি করা নোটবুকটি খুলুন।
  2. "সংযোগ করুন" এর পাশের নিচের তীরটিতে ক্লিক করুন।
  3. "একটি রানটাইমে সংযোগ করুন" নির্বাচন করুন।

নোটবুক আমদানি ফলকটি খোলে

  1. ড্রপডাউন ব্যবহার করুন এবং আপনার পূর্বে তৈরি করা রানটাইম নির্বাচন করুন।
  2. সংযোগ করুন ক্লিক করুন।

নোটবুক আমদানি ফলকটি খোলে

আপনার নোটবুক এখন একটি GPU-সক্ষম রানটাইমের সাথে সংযুক্ত। এখন আপনি কোয়েরি চালানো শুরু করতে পারেন!

৭. NYC ট্যাক্সি ডেটাসেট প্রস্তুত করুন

এই কোডল্যাবটি NYC ট্যাক্সি ও লিমোজিন কমিশন (TLC) ট্রিপ রেকর্ড ডেটা ব্যবহার করে।

ডেটাসেটে নিউ ইয়র্ক সিটির হলুদ ট্যাক্সি থেকে পৃথক ভ্রমণের রেকর্ড রয়েছে এবং এর মধ্যে রয়েছে যেমন:

  • পিক-আপ এবং ড্রপ-অফ তারিখ, সময় এবং অবস্থান
  • ভ্রমণের দূরত্ব
  • আইটেমাইজড ভাড়ার পরিমাণ
  • যাত্রী সংখ্যা

ডেটা ডাউনলোড করুন

এরপর, ২০২৪ সালের পুরো ট্রিপের ডেটা ডাউনলোড করুন। ডেটা Parquet ফাইল ফর্ম্যাটে সংরক্ষণ করা হয়।

নিম্নলিখিত কোড ব্লকটি এই পদক্ষেপগুলি সম্পাদন করে:

  1. ডাউনলোড করার জন্য বছর এবং মাসের পরিসর নির্ধারণ করে।
  2. ফাইলগুলি সংরক্ষণ করার জন্য nyc_taxi_data নামে একটি স্থানীয় ডিরেক্টরি তৈরি করে।
  3. প্রতি মাসে লুপ করে, সংশ্লিষ্ট Parquet ফাইলটি ডাউনলোড করে যদি এটি ইতিমধ্যেই বিদ্যমান না থাকে, এবং ডিরেক্টরিতে সংরক্ষণ করে।

ডেটা সংগ্রহ করতে এবং রানটাইমে সংরক্ষণ করতে এই কোডটি আপনার নোটবুকে চালান:

from tqdm import tqdm
import requests
import time
import os

YEAR = 2024
DATA_DIR = "nyc_taxi_data"

os.makedirs(DATA_DIR, exist_ok=True)
print(f"Checking/Downloading files for {YEAR}...")


for month in tqdm(range(1, 13), unit="file"):
    
    # Define standardized filename for both local path and URL
    file_name = f"yellow_tripdata_{YEAR}-{month:02d}.parquet"
    local_path = os.path.join(DATA_DIR, file_name)
    url = f"https://d37ci6vzurychx.cloudfront.net/trip-data/{file_name}"

    if not os.path.exists(local_path):
        try:
            with requests.get(url, stream=True) as response:
                response.raise_for_status()
                with open(local_path, 'wb') as f:
                    for chunk in response.iter_content(chunk_size=8192):
                        f.write(chunk)
            time.sleep(1)
        except requests.exceptions.HTTPError as e:

            print(f"\nSkipping {file_name}: {e}")

            if os.path.exists(local_path):
                os.remove(local_path)

print("\nDownload complete.")

৮. ট্যাক্সি ভ্রমণের তথ্য অন্বেষণ করুন

এখন যেহেতু আপনি ডেটাসেটটি ডাউনলোড করেছেন, এখন একটি প্রাথমিক অনুসন্ধানমূলক ডেটা বিশ্লেষণ (EDA) করার সময়। EDA-এর লক্ষ্য হল ডেটার গঠন বোঝা, অসঙ্গতি খুঁজে বের করা এবং সম্ভাব্য প্যাটার্নগুলি উন্মোচন করা।

এক মাসের ডেটা লোড করুন

এক মাসের ডেটা লোড করে শুরু করুন। এটি যথেষ্ট পরিমাণে নমুনা (৩০ লক্ষেরও বেশি সারি) প্রদান করে যা অর্থবহ এবং ইন্টারেক্টিভ বিশ্লেষণের জন্য মেমরির ব্যবহার পরিচালনাযোগ্য রাখে।

import pandas as pd
import glob

# Load the last month of the downloaded data
df = pd.read_parquet("nyc_taxi_data/yellow_tripdata_2024-12.parquet")
df.head()

সারসংক্ষেপ পরিসংখ্যান পান

সংখ্যাসূচক কলামের জন্য উচ্চ-স্তরের সারাংশ পরিসংখ্যান তৈরি করতে .describe() পদ্ধতিটি ব্যবহার করুন। অপ্রত্যাশিত সর্বনিম্ন বা সর্বোচ্চ মানের মতো সম্ভাব্য ডেটা মানের সমস্যাগুলি সনাক্ত করার জন্য এটি একটি দুর্দান্ত প্রথম পদক্ষেপ।

df.describe().round(2)

সারাংশ পরিসংখ্যান প্রদর্শন করে

ডেটার মান পরীক্ষা করুন

.describe() থেকে আউটপুট তাৎক্ষণিকভাবে একটি সমস্যা প্রকাশ করে। লক্ষ্য করুন যে tpep_pickup_datetime এবং tpep_dropoff_datetime এর জন্য min মান ২০০৮ সালের, যা ২০২৪ সালের ডেটাসেটের জন্য অর্থহীন।

এটি হলো কেন সবসময় আপনার ডেটা পরীক্ষা করা উচিত তার একটি উদাহরণ। আপনি ডেটাফ্রেম বাছাই করে এই বহির্মুখী তারিখগুলি ধারণকারী সঠিক সারিগুলি খুঁজে বের করে এটি আরও তদন্ত করতে পারেন।

# Sort by the dropoff datetime to see the oldest records
df.sort_values("tpep_pickup_datetime").head()

ডেটা বিতরণ কল্পনা করুন

এরপর, আপনি সংখ্যাসূচক কলামের হিস্টোগ্রাম তৈরি করে তাদের বিতরণ কল্পনা করতে পারেন। এটি আপনাকে trip_distance এবং fare_amount এর মতো বৈশিষ্ট্যগুলির বিস্তার এবং স্কিউ বুঝতে সাহায্য করে। .hist() ফাংশনটি একটি ডেটাফ্রেমে সমস্ত সংখ্যাসূচক কলামের জন্য হিস্টোগ্রাম প্লট করার একটি দ্রুত উপায়।

_ = df.hist(figsize=(20, 20))

অবশেষে, কয়েকটি মূল কলামের মধ্যে সম্পর্ক কল্পনা করার জন্য একটি স্ক্যাটার ম্যাট্রিক্স তৈরি করুন। যেহেতু লক্ষ লক্ষ পয়েন্ট প্লট করা ধীর এবং প্যাটার্নগুলিকে অস্পষ্ট করতে পারে, তাই .sample() ব্যবহার করে 100,000 সারির একটি এলোমেলো নমুনা থেকে প্লট তৈরি করুন।

_ = pd.plotting.scatter_matrix(
    df[['passenger_count', 'trip_distance', 'tip_amount', 'total_amount']].sample(100_000),
    diagonal="kde",
    figsize=(15, 15)
)

৯. Parquet ফাইল ফরম্যাট কেন ব্যবহার করবেন?

NYC ট্যাক্সি ডেটাসেটটি Apache Parquet ফর্ম্যাটে সরবরাহ করা হয়েছে। এটি বৃহৎ-স্কেল বিশ্লেষণের জন্য ইচ্ছাকৃতভাবে করা একটি পছন্দ। CSV এর মতো ফাইল টাইপের তুলনায় Parquet এর বেশ কিছু সুবিধা রয়েছে:

  • দক্ষ এবং দ্রুত: কলামার ফর্ম্যাট হিসেবে, Parquet সংরক্ষণ এবং পড়ার জন্য অত্যন্ত দক্ষ। এটি আধুনিক কম্প্রেশন পদ্ধতিগুলিকে সমর্থন করে যার ফলে ফাইলের আকার ছোট হয় এবং উল্লেখযোগ্যভাবে দ্রুত I/O হয়, বিশেষ করে GPU গুলিতে।
  • স্কিমা সংরক্ষণ করে: Parquet ফাইলের মেটাডেটায় ডেটা টাইপ সংরক্ষণ করে। ফাইলটি পড়ার সময় আপনাকে কখনই ডেটা টাইপ অনুমান করতে হবে না।
  • নির্বাচনী পঠন সক্ষম করে: কলামার কাঠামো আপনাকে বিশ্লেষণের জন্য প্রয়োজনীয় নির্দিষ্ট কলামগুলিই পড়তে দেয়। এটি মেমোরিতে লোড করার পরিমাণ নাটকীয়ভাবে হ্রাস করতে পারে।

Parquet বৈশিষ্ট্যগুলি অন্বেষণ করুন

আপনার ডাউনলোড করা ফাইলগুলির একটি ব্যবহার করে এই দুটি শক্তিশালী বৈশিষ্ট্য অন্বেষণ করা যাক।

সম্পূর্ণ ডেটাসেট লোড না করেই মেটাডেটা পরীক্ষা করুন

যদিও আপনি একটি স্ট্যান্ডার্ড টেক্সট এডিটরে Parquet ফাইল দেখতে পারবেন না, তবুও আপনি মেমোরিতে কোনও ডেটা লোড না করেই সহজেই এর স্কিমা এবং মেটাডেটা পরীক্ষা করতে পারেন। এটি একটি ফাইলের গঠন দ্রুত বোঝার জন্য কার্যকর।

from pyarrow.parquet import ParquetFile
import pyarrow as pa

# Open one of the downloaded files
pf = ParquetFile('nyc_taxi_data/yellow_tripdata_2024-12.parquet')

# Print the schema
print("File Schema:")
print(pf.schema)

# Print the file metadata
print("\nFile Metadata:")
print(pf.metadata)

আপনার প্রয়োজনীয় কলামগুলোই পড়ুন

কল্পনা করুন আপনার কেবল ভ্রমণের দূরত্ব এবং ভাড়ার পরিমাণ বিশ্লেষণ করতে হবে। Parquet এর সাহায্যে আপনি কেবল সেই কলামগুলি লোড করতে পারবেন, যা সম্পূর্ণ ডেটাফ্রেম লোড করার চেয়ে অনেক দ্রুত এবং মেমরি-দক্ষ।

import pandas as pd

# Read only four specific columns from the Parquet file
df_subset = pd.read_parquet(
    'nyc_taxi_data/yellow_tripdata_2024-12.parquet',
    columns=['passenger_count', 'trip_distance', 'tip_amount', 'total_amount']
)

df_subset.head()

১০. NVIDIA cuDF দিয়ে পান্ডাদের গতি বাড়ান

NVIDIA CUDA for DataFrames (cuDF) হল একটি ওপেন-সোর্স, GPU-অ্যাক্সিলারেটেড লাইব্রেরি যা আপনাকে DataFrames-এর সাথে ইন্টারঅ্যাক্ট করতে দেয়। cuDF আপনাকে GPU-তে ফিল্টারিং, জয়েনিং এবং গ্রুপিংয়ের মতো সাধারণ ডেটা অপারেশনগুলি ব্যাপক সমান্তরালতার সাথে সম্পাদন করতে দেয়।

এই কোডল্যাবে আপনি যে মূল বৈশিষ্ট্যটি ব্যবহার করেন তা হল cudf.pandas অ্যাক্সিলারেটর মোড। যখন আপনি এটি সক্ষম করেন, তখন আপনার স্ট্যান্ডার্ড pandas কোডটি স্বয়ংক্রিয়ভাবে GPU-চালিত cuDF কার্নেলগুলি ব্যবহার করার জন্য পুনঃনির্দেশিত হয়, আপনার কোড পরিবর্তন করার প্রয়োজন ছাড়াই।

GPU অ্যাক্সিলারেশন সক্ষম করুন

একটি Colab Enterprise নোটবুকে NVIDIA cuDF ব্যবহার করতে, pandas আমদানি করার আগে আপনাকে এর ম্যাজিক এক্সটেনশন লোড করতে হবে।

প্রথমে, স্ট্যান্ডার্ড pandas লাইব্রেরিটি পরীক্ষা করুন। লক্ষ্য করুন আউটপুটটি ডিফল্ট pandas ইনস্টলেশনের পথ দেখায়।

import pandas as pd
pd # Note the output for the standard pandas library

এখন, cudf.pandas এক্সটেনশনটি লোড করুন এবং আবার pandas আমদানি করুন। pd মডিউলের আউটপুট কীভাবে পরিবর্তিত হয় তা দেখুন - এটি নিশ্চিত করে যে GPU-অ্যাক্সিলারেটেড সংস্করণটি এখন সক্রিয়।

%load_ext cudf.pandas
import pandas as pd
pd # Note the new output, indicating cudf.pandas is active

cudf.pandas সক্রিয় করার অন্যান্য উপায়

যদিও ম্যাজিক কমান্ড ( %load_ext ) একটি নোটবুকের সবচেয়ে সহজ পদ্ধতি, আপনি অন্যান্য পরিবেশেও অ্যাক্সিলারেটর সক্ষম করতে পারেন:

  • পাইথন স্ক্রিপ্টে: আপনার pandas আমদানি করার আগে import cudf.pandas এবং cudf.pandas.install() কল করুন।
  • নোটবুক-বহির্ভূত পরিবেশ থেকে: python -m cudf.pandas your_script.py ব্যবহার করে আপনার স্ক্রিপ্ট চালান।

১১. সিপিইউ বনাম জিপিইউ কর্মক্ষমতা তুলনা করুন

এখন সবচেয়ে গুরুত্বপূর্ণ অংশের জন্য: একটি CPU-তে স্ট্যান্ডার্ড pandas কর্মক্ষমতা GPU-তে cudf.pandas এর সাথে তুলনা করা।

CPU-র জন্য সম্পূর্ণ ন্যায্য বেসলাইন নিশ্চিত করতে, আপনাকে প্রথমে Colab রানটাইম রিসেট করতে হবে। এটি পূর্ববর্তী বিভাগগুলিতে আপনার দ্বারা সক্রিয় করা যেকোনো GPU অ্যাক্সিলারেটর সাফ করে। আপনি নিম্নলিখিত সেলটি চালিয়ে অথবা রানটাইম মেনু থেকে রিস্টার্ট সেশন নির্বাচন করে রানটাইম পুনরায় চালু করতে পারেন।

import IPython

IPython.Application.instance().kernel.do_shutdown(True)

বিশ্লেষণ পাইপলাইন সংজ্ঞায়িত করুন

এখন পরিবেশ পরিষ্কার, আপনি বেঞ্চমার্কিং ফাংশনটি সংজ্ঞায়িত করবেন। এই ফাংশনটি আপনাকে ঠিক একই পাইপলাইন চালানোর অনুমতি দেয় - লোডিং, সর্টিং এবং সারসংক্ষেপ - আপনি যে কোনও pandas মডিউলে এটিতে পাস করেন তা ব্যবহার করে।

import time
import glob
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def run_analytics_pipeline(pd_module):
    """Loads, sorts, and summarizes data using the provided pandas module."""
    timings = {}

    # 1. Load all 2024 Parquet files from the directory
    t0 = time.time()
    df = pd_module.concat(
        [pd_module.read_parquet(f) for f in glob.glob("nyc_taxi_data/*_2024*.parquet")],
        ignore_index=True
    )
    timings["load"] = time.time() - t0

    # 2. Sort the data by multiple columns
    t0 = time.time()
    df = df.sort_values(
        ['tpep_pickup_datetime', 'trip_distance', 'passenger_count'],
        ascending=[False, True, False]
    )
    timings["sort"] = time.time() - t0

    # 3. Perform a groupby and aggregation
    t0 = time.time()
    df['tpep_pickup_datetime'] = pd_module.to_datetime(df['tpep_pickup_datetime'])
    _ = (
        df.loc[df.tpep_pickup_datetime > '2024-11-01']
          .groupby(['VendorID', 'tpep_pickup_datetime'])
          [['passenger_count', 'fare_amount']]
          .agg(['min', 'mean', 'max'])
    )
    timings["summarize"] = time.time() - t0

    return timings

তুলনাটি চালান

প্রথমে, আপনি CPU-তে স্ট্যান্ডার্ড pandas ব্যবহার করে পাইপলাইনটি চালাবেন। তারপর, আপনি cudf.pandas সক্ষম করবেন এবং এটি আবার GPU-তে চালাবেন।

# --- Run on CPU ---
print("Running analytics pipeline on CPU...")
# Ensure we are using standard pandas
import pandas as pd
assert "cudf" not in str(pd), "Error: cuDF is still active. Please restart the kernel."

cpu_times = run_analytics_pipeline(pd)
print(f"CPU times: {cpu_times}")

# --- Run on GPU ---
print("\nEnabling cudf.pandas and running on GPU...")
# Load the extension
%load_ext cudf.pandas
import pandas as gpu_pd

gpu_times = run_analytics_pipeline(gpu_pd)
print(f"GPU times: {gpu_times}")

ফলাফলগুলি কল্পনা করুন

অবশেষে, পার্থক্যটি কল্পনা করুন। নিম্নলিখিত কোডটি প্রতিটি অপারেশনের গতি গণনা করে এবং সেগুলিকে পাশাপাশি প্লট করে।

# Create a DataFrame for plotting
results_df = pd.DataFrame([cpu_times, gpu_times], index=["CPU", "GPU"]).T
total_cpu_time = results_df['CPU'].sum()
total_gpu_time = results_df['GPU'].sum()
speedup = total_cpu_time / total_gpu_time

print("--- Performance Results ---")
print(results_df)
print(f"\nTotal CPU Time: {total_cpu_time:.2f} seconds")
print(f"Total GPU Time: {total_gpu_time:.2f} seconds")
print(f"Overall Speedup: {speedup:.2f}x")

# Plot the results
fig, ax = plt.subplots(figsize=(10, 6))
results_df.plot(kind='bar', ax=ax, color={"CPU": "tab:blue", "GPU": "tab:green"})

ax.set_ylabel("Time (seconds)")
ax.set_title(f"CPU vs. GPU Runtimes (Overall Speedup: {speedup:.2f}x)", fontsize=14)
ax.tick_params(axis='x', rotation=0)

# Add numerical labels to the bars
for container in ax.containers:
    ax.bar_label(container, fmt="%.2f", padding=3)

plt.tight_layout()
plt.show()

নমুনা ফলাফল:

CPU বনাম GPU কর্মক্ষমতা প্রদর্শন করে

CPU-র তুলনায় GPU স্পষ্ট গতি বৃদ্ধি প্রদান করে।

১২. বাধা খুঁজে পেতে আপনার কোড প্রোফাইল করুন

GPU ত্বরণের সাথেও, কিছু pandas অপারেশন CPU-তে ফিরে যেতে পারে যদি সেগুলি এখনও cuDF দ্বারা সমর্থিত না হয়। এই "CPU ফলব্যাক" কর্মক্ষমতা বাধা হয়ে দাঁড়াতে পারে।

এই ক্ষেত্রগুলি সনাক্ত করতে সাহায্য করার জন্য, cudf.pandas দুটি অন্তর্নির্মিত প্রোফাইলার রয়েছে। আপনি এগুলি ব্যবহার করে দেখতে পারেন যে আপনার কোডের কোন অংশগুলি GPU-তে চলছে এবং কোনটি CPU-তে ফিরে যাচ্ছে।

  • %%cudf.pandas.profile : আপনার কোডের একটি উচ্চ-স্তরের, ফাংশন-বাই-ফাংশন সারাংশের জন্য এটি ব্যবহার করুন। কোন ডিভাইসে কোন অপারেশন চলছে তার একটি দ্রুত সারসংক্ষেপ পাওয়ার জন্য এটি সর্বোত্তম।
  • %%cudf.pandas.line_profile : বিস্তারিত, লাইন-বাই-লাইন বিশ্লেষণের জন্য এটি ব্যবহার করুন। আপনার কোডের সঠিক লাইনগুলি চিহ্নিত করার জন্য এটি সেরা টুল যা CPU-তে ফ্যালব্যাকের কারণ হচ্ছে।

একটি নোটবুক সেলের উপরে "সেল ম্যাজিক" হিসেবে এই প্রোফাইলারগুলি ব্যবহার করুন।

%%cudf.pandas.profile সহ ফাংশন-স্তরের প্রোফাইলিং

প্রথমে, আগের বিভাগের একই অ্যানালিটিক্স পাইপলাইনে ফাংশন-লেভেল প্রোফাইলারটি চালান। আউটপুট প্রতিটি কল করা ফাংশন, এটি যে ডিভাইসে চালানো হয়েছিল (GPU বা CPU), এবং এটি কতবার কল করা হয়েছিল তার একটি টেবিল দেখায়।

%load_ext cudf.pandas
import pandas as pd
import glob

pd.DataFrame({"a": [1]})

cudf.pandas সক্রিয় আছে কিনা তা নিশ্চিত করার পর, আপনি একটি প্রোফাইল চালাতে পারেন।

%%cudf.pandas.profile

df = pd.concat([pd.read_parquet(f) for f in glob.glob("nyc_taxi_data/*2024*.parquet")], ignore_index=True)

df = df.sort_values(['tpep_pickup_datetime', 'trip_distance', 'passenger_count'], ascending=[False, True, False])

summary = (
    df
        .loc[(df.tpep_pickup_datetime > '2024-11-01')]
        .groupby(['VendorID','tpep_pickup_datetime'])
        [['passenger_count', 'fare_amount']]
        .agg(['min', 'mean', 'max'])
)

পান্ডাদের প্রোফাইলিং তথ্য প্রদর্শন করে

%%cudf.pandas.line_profile সহ লাইন-বাই-লাইন প্রোফাইলিং

এরপর, লাইন-লেভেল প্রোফাইলারটি চালান। এটি আপনাকে আরও অনেক বেশি গ্রানুলার ভিউ দেয়, যা GPU-তে প্রতিটি লাইন কোড এক্সিকিউট করতে CPU-এর তুলনায় কত সময় ব্যয় করে তা দেখায়। এটি অপ্টিমাইজ করার জন্য নির্দিষ্ট বাধা খুঁজে বের করার সবচেয়ে কার্যকর উপায়।

%%cudf.pandas.line_profile

df = pd.concat([pd.read_parquet(f) for f in glob.glob("nyc_taxi_data/*2024*.parquet")], ignore_index=True)

df = df.sort_values(['tpep_pickup_datetime', 'trip_distance', 'passenger_count'], ascending=[False, True, False])

summary = (
    df
        .loc[(df.tpep_pickup_datetime > '2024-11-01')]
        .groupby(['VendorID','tpep_pickup_datetime'])
        [['passenger_count', 'fare_amount']]
        .agg(['min', 'mean', 'max'])
)

পান্ডাদের প্রোফাইলিং (লাইন অনুসারে) তথ্য প্রদর্শন করে

কমান্ড লাইন থেকে প্রোফাইলিং

এই প্রোফাইলারগুলি কমান্ড লাইন থেকেও পাওয়া যায়, যা পাইথন স্ক্রিপ্টগুলির স্বয়ংক্রিয় পরীক্ষা এবং প্রোফাইলিংয়ের জন্য কার্যকর।

আপনি কমান্ড লাইন ইন্টারফেসে নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

  • python -m cudf.pandas --profile your_script.py
  • python -m cudf.pandas --line_profile your_script.py

১৩. গুগল ক্লাউড স্টোরেজের সাথে একীভূত করুন

গুগল ক্লাউড স্টোরেজ (GCS) একটি স্কেলেবল এবং টেকসই অবজেক্ট স্টোরেজ পরিষেবা। যখন আপনি Colab Enterprise ব্যবহার করেন, তখন GCS আপনার ডেটাসেট, মডেল চেকপয়েন্ট এবং অন্যান্য শিল্পকর্ম সংরক্ষণের জন্য একটি দুর্দান্ত জায়গা।

আপনার Colab Enterprise রানটাইমে GCS বাকেটগুলিতে সরাসরি ডেটা পড়ার এবং লেখার জন্য প্রয়োজনীয় অনুমতি রয়েছে এবং সর্বাধিক পারফরম্যান্সের জন্য এই ক্রিয়াকলাপগুলি GPU-ত্বরিত।

একটি GCS বাকেট তৈরি করুন

প্রথমে, একটি নতুন GCS বাকেট তৈরি করুন। GCS বাকেটের নামগুলি বিশ্বব্যাপী অনন্য, তাই এর নামের সাথে একটি UUID যুক্ত করুন।

from google.cloud import storage
import uuid

unique_suffix = uuid.uuid4().hex[:12]
bucket_name = f'nyc-taxi-codelab-{unique_suffix}'
project_id = storage.Client().project

client = storage.Client()

try:
    bucket = client.create_bucket(bucket_name)
    print(f"Successfully created bucket: gs://{bucket.name}")
except Exception as e:
    print(f"Bucket creation failed. You may already own it or the name is taken: {e}")

সরাসরি GCS-এ ডেটা লিখুন

এখন, আপনার নতুন GCS বাকেটে সরাসরি একটি DataFrame সংরক্ষণ করুন। যদি পূর্ববর্তী বিভাগগুলি থেকে df ভেরিয়েবলটি উপলব্ধ না হয়, তাহলে কোডটি প্রথমে এক মাসের ডেটা লোড করে।

%%cudf.pandas.line_profile

# Ensure the DataFrame exists before saving to GCS
if 'df' not in locals():
    print("DataFrame not found, loading a sample file...")
    df = pd.read_parquet('nyc_taxi_data/yellow_tripdata_2024-12.parquet')

print(f"Writing data to gs://{bucket_name}/nyc_taxi_data.parquet...")
df.to_parquet(f"gs://{bucket_name}/nyc_taxi_data.parquet", index=False)
print("Write operation complete.")

GCS-এ ফাইলটি যাচাই করুন

আপনি বাকেটটিতে গিয়ে GCS-এ ডেটা আছে কিনা তা যাচাই করতে পারেন। নিম্নলিখিত কোডটি একটি ক্লিকযোগ্য লিঙ্ক তৈরি করে।

from IPython.display import Markdown

gcs_url = f"https://console.cloud.google.com/storage/browser/{bucket_name}?project={project_id}"
Markdown(f'**[Click here to view your GCS bucket in the Google Cloud Console]({gcs_url})**')

GCS থেকে সরাসরি ডেটা পড়ুন

অবশেষে, একটি GCS পাথ থেকে সরাসরি একটি DataFrame-এ ডেটা পড়ুন। এই অপারেশনটি GPU-ত্বরিত, যা আপনাকে উচ্চ গতিতে ক্লাউড স্টোরেজ থেকে বড় ডেটাসেট লোড করতে দেয়।

%%cudf.pandas.line_profile

print(f"Reading data from gs://{bucket_name}/nyc_taxi_data.parquet...")
df_from_gcs = pd.read_parquet(f"gs://{bucket_name}/nyc_taxi_data.parquet")

df_from_gcs.head()

১৪. পরিষ্কার করা

আপনার গুগল ক্লাউড অ্যাকাউন্টে অপ্রত্যাশিত চার্জ এড়াতে, আপনার তৈরি করা রিসোর্সগুলি পরিষ্কার করতে হবে।

আপনার ডাউনলোড করা ডেটা মুছে ফেলুন:

# Permanately delete the GCS bucket
print(f"Deleting GCS bucket: gs://{bucket_name}...")
!gsutil rm -r -f gs://{bucket_name}
print("Bucket deleted.")

# Remove NYC taxi dataset on the Colab runtime
print("Deleting local 'nyc_taxi_data' directory...")
!rm -rf nyc_taxi_data
print("Local files deleted.")

আপনার Colab রানটাইম বন্ধ করুন

  • গুগল ক্লাউড কনসোলে, কোল্যাব এন্টারপ্রাইজ রানটাইম পৃষ্ঠায় যান।
  • অঞ্চল মেনুতে, আপনার রানটাইম ধারণকারী অঞ্চলটি নির্বাচন করুন।
  • আপনি যে রানটাইমটি মুছতে চান তা নির্বাচন করুন।
  • মুছে ফেলুন ক্লিক করুন।
  • নিশ্চিত করুন ক্লিক করুন।

তোমার নোটবুক মুছে ফেলো

  • গুগল ক্লাউড কনসোলে, কোল্যাব এন্টারপ্রাইজ মাই নোটবুকস পৃষ্ঠায় যান।
  • অঞ্চল মেনুতে, আপনার নোটবুকটি যে অঞ্চলে রয়েছে তা নির্বাচন করুন।
  • আপনি যে নোটবুকটি মুছতে চান তা নির্বাচন করুন।
  • মুছে ফেলুন ক্লিক করুন।
  • নিশ্চিত করুন ক্লিক করুন।

১৫. অভিনন্দন

অভিনন্দন! আপনি Colab Enterprise-এ NVIDIA cuDF ব্যবহার করে একটি pandas analytics ওয়ার্কফ্লো সফলভাবে ত্বরান্বিত করেছেন। আপনি GPU-সক্ষম রানটাইম কনফিগার করতে, শূন্য-কোড-পরিবর্তন ত্বরণের জন্য cudf.pandas সক্ষম করতে, বাধার জন্য প্রোফাইল কোড তৈরি করতে এবং Google ক্লাউড স্টোরেজের সাথে একীভূত করতে শিখেছেন।

রেফারেন্স ডক্স