Vertex AI ওয়ার্কবেঞ্চ: BigQuery থেকে ডেটা সহ একটি টেনসরফ্লো মডেলকে প্রশিক্ষণ দিন

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবে আপনি শিখবেন কীভাবে ডেটা অন্বেষণ এবং এমএল মডেল প্রশিক্ষণের জন্য ভার্টেক্স এআই ওয়ার্কবেঞ্চ ব্যবহার করতে হয়।

আপনি যা শিখবেন

আপনি শিখবেন কীভাবে:

  • একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স তৈরি এবং কনফিগার করুন
  • Vertex AI Workbench BigQuery কানেক্টর ব্যবহার করুন
  • Vertex AI Workbench কার্নেলে একটি মডেলকে প্রশিক্ষণ দিন

গুগল ক্লাউডে এই ল্যাবটি চালানোর মোট খরচ প্রায় ১ ডলার

২. ভার্টেক্স এআই-এর পরিচিতি

এই ল্যাবটি গুগল ক্লাউডে উপলব্ধ সর্বাধুনিক এআই প্রোডাক্টটি ব্যবহার করে। ভার্টেক্স এআই গুগল ক্লাউডের এমএল অফারিংগুলোকে একটি নির্বিঘ্ন ডেভেলপমেন্ট অভিজ্ঞতায় একীভূত করে। পূর্বে, অটোএমএল (AutoML) দিয়ে প্রশিক্ষিত মডেল এবং কাস্টম মডেলগুলো আলাদা সার্ভিসের মাধ্যমে অ্যাক্সেস করা যেত। নতুন অফারিংটি অন্যান্য নতুন প্রোডাক্টের সাথে উভয়কে একটি একক এপিআই-তে একত্রিত করেছে। আপনি আপনার বিদ্যমান প্রোজেক্টগুলোও ভার্টেক্স এআই-তে মাইগ্রেট করতে পারেন।

ভার্টেক্স এআই-এর এন্ড-টু-এন্ড এমএল ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন পণ্য রয়েছে। এই ল্যাবটি ভার্টেক্স এআই ওয়ার্কবেঞ্চের উপর আলোকপাত করবে।

ভার্টেক্স এআই ওয়ার্কবেঞ্চ, ডেটা সার্ভিস (যেমন ডেটাপ্রক, ডেটাফ্লো, বিগকোয়েরি, এবং ডেটাপ্লেক্স) এবং ভার্টেক্স এআই-এর সাথে গভীর ইন্টিগ্রেশনের মাধ্যমে ব্যবহারকারীদের দ্রুত এন্ড-টু-এন্ড নোটবুক-ভিত্তিক ওয়ার্কফ্লো তৈরি করতে সাহায্য করে। এটি ডেটা সায়েন্টিস্টদের GCP ডেটা সার্ভিসের সাথে সংযোগ স্থাপন করতে, ডেটাসেট বিশ্লেষণ করতে, বিভিন্ন মডেলিং কৌশল নিয়ে পরীক্ষা-নিরীক্ষা করতে, প্রশিক্ষিত মডেলগুলোকে প্রোডাকশনে ডেপ্লয় করতে এবং মডেলের জীবনচক্র জুড়ে MLOps পরিচালনা করতে সক্ষম করে।

৩. ব্যবহারের ক্ষেত্রের সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি লন্ডন বাইসাইকেলস হায়ার ডেটাসেটটি নিয়ে কাজ করবেন। এই ডেটাতে ২০১১ সাল থেকে লন্ডনের পাবলিক বাইকশেয়ারিং প্রোগ্রামের বাইসাইকেল ট্রিপ সম্পর্কিত তথ্য রয়েছে। আপনি ভার্টেক্স এআই ওয়ার্কবেঞ্চ বিগকোয়েরি কানেক্টরের মাধ্যমে বিগকোয়েরিতে এই ডেটাসেটটি নিয়ে কাজ শুরু করবেন। এরপর আপনি পান্ডাস ব্যবহার করে ডেটাটি একটি জুপিটার নোটবুকে লোড করবেন এবং ট্রিপটি কখন হয়েছিল ও ব্যক্তিটি কতদূর সাইকেল চালিয়েছিল তার উপর ভিত্তি করে একটি সাইকেল ট্রিপের সময়কাল অনুমান করার জন্য একটি টেনসরফ্লো মডেলকে প্রশিক্ষণ দেবেন।

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

৪. আপনার পরিবেশ প্রস্তুত করুন

এই কোডল্যাবটি চালানোর জন্য আপনার বিলিং চালু করা একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্ট প্রয়োজন হবে। প্রজেক্ট তৈরি করতে, এখানের নির্দেশাবলী অনুসরণ করুন।

ধাপ ১: কম্পিউট ইঞ্জিন এপিআই সক্রিয় করুন

Compute Engine- এ যান এবং যদি এটি আগে থেকে চালু না থাকে, তাহলে Enable নির্বাচন করুন।

ধাপ ২: Vertex AI API সক্রিয় করুন

আপনার ক্লাউড কনসোলের Vertex AI বিভাগে যান এবং Enable Vertex AI API-তে ক্লিক করুন।

ভার্টেক্স এআই ড্যাশবোর্ড

ধাপ ৩: একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করুন

আপনার ক্লাউড কনসোলের Vertex AI সেকশন থেকে Workbench-এ ক্লিক করুন:

ভার্টেক্স এআই মেনু

নোটবুকস এপিআই (Notebooks API) সক্রিয় করুন, যদি আগে থেকে সক্রিয় করা না থাকে।

নোটবুক_এপিআই

একবার চালু হয়ে গেলে, ম্যানেজড নোটবুকস-এ ক্লিক করুন:

নোটবুকস_ইউআই

তারপর নতুন নোটবুক নির্বাচন করুন।

নতুন নোটবুক

আপনার নোটবুকের একটি নাম দিন এবং 'Permission'-এর অধীনে 'Service account' নির্বাচন করুন।

পরিষেবা_অ্যাকাউন্ট

উন্নত সেটিংস নির্বাচন করুন।

সিকিউরিটি-এর অধীনে, 'Enable terminal' নির্বাচন করুন, যদি এটি আগে থেকে সক্রিয় করা না থাকে।

সক্ষম_টার্মিনাল

আপনি অন্যান্য সমস্ত উন্নত সেটিংস অপরিবর্তিত রাখতে পারেন।

এরপর, Create-এ ক্লিক করুন।

ইনস্ট্যান্সটি তৈরি হয়ে গেলে, ওপেন জুপিটারল্যাব (OPEN JUPYTERLAB ) নির্বাচন করুন।

সক্ষম_টার্মিনাল

৫. BigQuery-তে ডেটাসেট অন্বেষণ করুন

Vertex AI Workbench ইনস্ট্যান্সে, বাম দিকে যান এবং BigQuery in Notebooks কানেক্টরটিতে ক্লিক করুন।

BQ সংযোগকারী

BigQuery কানেক্টর আপনাকে BigQuery ডেটাসেটগুলো সহজে অন্বেষণ ও কোয়েরি করার সুযোগ দেয়। আপনার প্রোজেক্টের যেকোনো ডেটাসেট ছাড়াও, আপনি 'Add Project' বোতামে ক্লিক করে অন্যান্য প্রোজেক্টের ডেটাসেটও অন্বেষণ করতে পারেন।

পিন

এই ল্যাবের জন্য, আপনি BigQuery পাবলিক ডেটাসেট থেকে ডেটা ব্যবহার করবেন। london_bicycles ডেটাসেটটি না পাওয়া পর্যন্ত নিচে স্ক্রল করুন। আপনি দেখতে পাবেন যে এই ডেটাসেটটিতে cycle_hire এবং cycle_stations নামে দুটি টেবিল রয়েছে। চলুন, এগুলোর প্রত্যেকটি সম্পর্কে জেনে নেওয়া যাক।

লন্ডন_বাইক_ডিএস

প্রথমে, cycle_hire টেবিলটির উপর ডাবল ক্লিক করুন। আপনি দেখবেন যে টেবিলটি একটি নতুন ট্যাবে খুলবে, যেখানে টেবিলের স্কিমা এবং সেইসাথে সারির সংখ্যা ও আকারের মতো মেটাডেটাও থাকবে।

সাইকেল_হায়ার_ডিএস

আপনি প্রিভিউ ট্যাবে ক্লিক করলে ডেটার একটি নমুনা দেখতে পাবেন। জনপ্রিয় যাত্রাগুলো কী কী তা দেখতে চলুন একটি সাধারণ কোয়েরি চালানো যাক। প্রথমে, কোয়েরি টেবিল বোতামে ক্লিক করুন।

সাইকেল_হায়ার_প্রিভিউ_ডিএস

এরপর, নিচের কোডটি SQL এডিটরে পেস্ট করুন এবং 'Submit Query'-তে ক্লিক করুন।

SELECT
  start_station_name,
  end_station_name,
  IF(start_station_name = end_station_name,
    TRUE,
    FALSE) same_station,
  AVG(duration) AS avg_duration,
  COUNT(*) AS total_rides
FROM
  `bigquery-public-data.london_bicycles.cycle_hire`
GROUP BY
  start_station_name,
  end_station_name,
  same_station
ORDER BY
  total_rides DESC

অনুসন্ধানের ফলাফল থেকে আপনি দেখতে পাবেন যে, হাইড পার্ক কর্নার স্টেশন থেকে সাইকেলে যাতায়াতই সবচেয়ে জনপ্রিয় ছিল।

journey_query_results

এরপরে, cycle_stations টেবিলটিতে ডাবল ক্লিক করুন, যা প্রতিটি স্টেশন সম্পর্কে তথ্য প্রদান করে।

আমরা cycle_hire এবং cycle_stations টেবিল দুটিকে যুক্ত করতে চাই। cycle_stations টেবিলে প্রতিটি স্টেশনের অক্ষাংশ/দ্রাঘিমাংশ (lat/lon) রয়েছে। শুরু এবং শেষ স্টেশনের মধ্যবর্তী দূরত্ব গণনা করে প্রতিটি সাইকেল যাত্রায় অতিক্রান্ত দূরত্ব অনুমান করার জন্য আপনি এই তথ্যটি ব্যবহার করবেন।

এই গণনাটি করার জন্য, আপনি BigQuery জিওগ্রাফি ফাংশন ব্যবহার করবেন। বিশেষত, আপনি প্রতিটি ল্যাট/লন স্ট্রিংকে একটি ST_GEOGPOINT- এ রূপান্তর করবেন এবং দুটি বিন্দুর মধ্যে সরলরেখার দূরত্ব মিটারে গণনা করতে ST_DISTANCE ফাংশনটি ব্যবহার করবেন। প্রতিটি সাইকেল যাত্রায় অতিক্রান্ত দূরত্বের প্রক্সি হিসাবে আপনি এই মানটি ব্যবহার করবেন।

নিচের কোয়েরিটি আপনার SQL এডিটরে কপি করুন এবং তারপর 'Submit Query'-তে ক্লিক করুন। লক্ষ্য করুন যে JOIN কন্ডিশনে তিনটি টেবিল রয়েছে, কারণ সাইকেলটির শুরুর স্টেশন এবং শেষের স্টেশন উভয়ের ল্যাট/লন পাওয়ার জন্য আমাদের স্টেশন টেবিলটি দুইবার জয়েন করতে হবে।

WITH staging AS (
    SELECT
        STRUCT(
            start_stn.name,
            ST_GEOGPOINT(start_stn.longitude, start_stn.latitude) AS POINT,
            start_stn.docks_count,
            start_stn.install_date
        ) AS starting,
        STRUCT(
            end_stn.name,
            ST_GEOGPOINT(end_stn.longitude, end_stn.latitude) AS point,
            end_stn.docks_count,
            end_stn.install_date
        ) AS ending,
        STRUCT(
            rental_id,
            bike_id,
            duration, --seconds
            ST_DISTANCE(
                ST_GEOGPOINT(start_stn.longitude, start_stn.latitude),
                ST_GEOGPOINT(end_stn.longitude, end_stn.latitude)
            ) AS distance, --meters
            start_date,
            end_date
        ) AS bike
        FROM `bigquery-public-data.london_bicycles.cycle_stations` AS start_stn
        LEFT JOIN `bigquery-public-data.london_bicycles.cycle_hire` as b
        ON start_stn.id = b.start_station_id
        LEFT JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS end_stn
        ON end_stn.id = b.end_station_id
        LIMIT 700000)

SELECT * from STAGING

৬. একটি টেনসরফ্লো কার্নেলে একটি এমএল মডেলকে প্রশিক্ষণ দিন

ভার্টেক্স এআই ওয়ার্কবেঞ্চ-এর একটি কম্পিউট কম্প্যাটিবিলিটি লেয়ার রয়েছে, যা আপনাকে একটিমাত্র নোটবুক ইনস্ট্যান্স থেকেই টেনসরফ্লো, পাইস্পার্ক, আর (R) ইত্যাদির কার্নেল চালু করার সুযোগ দেয়। এই ল্যাবে, আপনি টেনসরফ্লো কার্নেল ব্যবহার করে একটি নোটবুক তৈরি করবেন।

ডেটাফ্রেম তৈরি করুন

কোয়েরিটি এক্সিকিউট হওয়ার পর, ‘Copy code for DataFrame’-এ ক্লিক করুন। এর মাধ্যমে আপনি একটি নোটবুকে পাইথন কোড পেস্ট করতে পারবেন, যা BigQuery ক্লায়েন্টের সাথে সংযোগ স্থাপন করে এই ডেটাটিকে একটি pandas DataFrame হিসেবে এক্সট্র্যাক্ট করবে।

কপি_ফর_ডিএফ

এরপর, লঞ্চারে ফিরে যান এবং একটি TensorFlow 2 নোটবুক তৈরি করুন।

tf_kernel

নোটবুকের প্রথম সেলে, কোয়েরি এডিটর থেকে কপি করা কোডটি পেস্ট করুন। এটি দেখতে নিচের মতো হবে:

# The following two lines are only necessary to run once.
# Comment out otherwise for speed-up.
from google.cloud.bigquery import Client, QueryJobConfig
client = Client()

query = """WITH staging AS (
    SELECT
        STRUCT(
            start_stn.name,
            ST_GEOGPOINT(start_stn.longitude, start_stn.latitude) AS POINT,
            start_stn.docks_count,
            start_stn.install_date
        ) AS starting,
        STRUCT(
            end_stn.name,
            ST_GEOGPOINT(end_stn.longitude, end_stn.latitude) AS point,
            end_stn.docks_count,
            end_stn.install_date
        ) AS ending,
        STRUCT(
            rental_id,
            bike_id,
            duration, --seconds
            ST_DISTANCE(
                ST_GEOGPOINT(start_stn.longitude, start_stn.latitude),
                ST_GEOGPOINT(end_stn.longitude, end_stn.latitude)
            ) AS distance, --meters
            start_date,
            end_date
        ) AS bike
        FROM `bigquery-public-data.london_bicycles.cycle_stations` AS start_stn
        LEFT JOIN `bigquery-public-data.london_bicycles.cycle_hire` as b 
        ON start_stn.id = b.start_station_id
        LEFT JOIN `bigquery-public-data.london_bicycles.cycle_stations` AS end_stn
        ON end_stn.id = b.end_station_id
        LIMIT 700000)

SELECT * from STAGING"""
job = client.query(query)
df = job.to_dataframe()

এই ল্যাবের জন্য, প্রশিক্ষণের সময় কম রাখতে আমরা ডেটাসেটটি ৭০০০০০-এ সীমাবদ্ধ রেখেছি। কিন্তু আপনি নির্দ্বিধায় কোয়েরিটি পরিবর্তন করতে এবং সম্পূর্ণ ডেটাসেট নিয়ে পরীক্ষা-নিরীক্ষা করতে পারেন।

এরপর, প্রয়োজনীয় লাইব্রেরিগুলো ইম্পোর্ট করুন।

from datetime import datetime
import pandas as pd
import tensorflow as tf

এই অনুশীলনের এমএল অংশের জন্য প্রয়োজনীয় কলামগুলো নিয়ে একটি সংক্ষিপ্ত ডেটাফ্রেম তৈরি করতে নিম্নলিখিত কোডটি চালান।

values = df['bike'].values
duration = list(map(lambda a: a['duration'], values))
distance = list(map(lambda a: a['distance'], values))
dates = list(map(lambda a: a['start_date'], values))
data = pd.DataFrame(data={'duration': duration, 'distance': distance, 'start_date':dates})
data = data.dropna()

`start_date` কলামটি একটি পাইথন datetime । মডেলে সরাসরি এই datetime ব্যবহার করার পরিবর্তে, আপনি দুটি নতুন ফিচার তৈরি করবেন যা নির্দেশ করবে বাইক ট্রিপটি সপ্তাহের কোন দিন এবং দিনের কোন ঘণ্টায় সংঘটিত হয়েছিল।

data['weekday'] = data['start_date'].apply(lambda a: a.weekday())
data['hour'] = data['start_date'].apply(lambda a: a.time().hour)
data = data.drop(columns=['start_date'])

সবশেষে, বোঝার সুবিধার জন্য সময়কাল কলামটিকে সেকেন্ড থেকে মিনিটে রূপান্তর করুন।

data['duration'] = data['duration'].apply(lambda x:float(x / 60))

ফরম্যাট করা ডেটাফ্রেমটির প্রথম কয়েকটি সারি পরীক্ষা করুন। প্রতিটি সাইকেল ভ্রমণের জন্য, আপনার কাছে এখন ভ্রমণের দিন ও ঘণ্টার তথ্য এবং অতিক্রান্ত দূরত্বের তথ্য রয়েছে। এই তথ্য থেকে, আপনি অনুমান করার চেষ্টা করবেন যে ভ্রমণটিতে কতক্ষণ সময় লেগেছিল।

data.head()

ডেটা_হেড

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

# Use 80/20 train/eval split
train_size = int(len(data) * .8)
print ("Train size: %d" % train_size)
print ("Evaluation size: %d" % (len(data) - train_size))

# Split data into train and test sets
train_data = data[:train_size]
val_data = data[train_size:]

TensorFlow মডেল তৈরি করুন

আপনি Keras Functional API ব্যবহার করে একটি TensorFlow মডেল তৈরি করবেন। ইনপুট ডেটা প্রিপ্রসেস করার জন্য, আপনি Keras preprocessing layers API ব্যবহার করবেন।

নিম্নলিখিত ইউটিলিটি ফাংশনটি পান্ডাস ডেটাফ্রেম থেকে একটি tf.data.Dataset তৈরি করবে।

def df_to_dataset(dataframe, label, shuffle=True, batch_size=32):
  dataframe = dataframe.copy()
  labels = dataframe.pop(label)
  ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
  if shuffle:
    ds = ds.shuffle(buffer_size=len(dataframe))
  ds = ds.batch(batch_size)
  ds = ds.prefetch(batch_size)
  return ds

উপরের ফাংশনটি ব্যবহার করে দুটি tf.data.Dataset তৈরি করুন, একটি প্রশিক্ষণের জন্য এবং অন্যটি যাচাইকরণের জন্য। আপনি কিছু সতর্কবার্তা দেখতে পারেন, কিন্তু আপনি নিরাপদে সেগুলি উপেক্ষা করতে পারেন।

train_dataset = df_to_dataset(train_data, 'duration')
validation_dataset = df_to_dataset(val_data, 'duration')

মডেলে আপনি নিম্নলিখিত প্রিপ্রসেসিং লেয়ারগুলো ব্যবহার করবেন:

  • নর্মালাইজেশন লেয়ার : ইনপুট ফিচারগুলোর ফিচার-ভিত্তিক নর্মালাইজেশন সম্পাদন করে।
  • IntegerLookup লেয়ার : পূর্ণসংখ্যা ক্যাটাগরিক্যাল মানগুলোকে পূর্ণসংখ্যা সূচকে রূপান্তর করে।
  • CategoryEncoding লেয়ার : পূর্ণসংখ্যা ক্যাটাগরিক্যাল ফিচারগুলোকে ওয়ান-হট, মাল্টি-হট, বা টিএফ-আইডিএফ ডেন্স রিপ্রেজেন্টেশনে রূপান্তরিত করে।

মনে রাখবেন যে এই লেয়ারগুলো ট্রেইনেবল নয় । এর পরিবর্তে, adapt() মেথডের মাধ্যমে প্রিপ্রসেসিং লেয়ারকে ট্রেনিং ডেটার সংস্পর্শে এনে এর স্টেট সেট করা হয়।

নিম্নলিখিত ফাংশনটি একটি নর্মালাইজেশন লেয়ার তৈরি করবে যা আপনি ডিসট্যান্স ফিচারে ব্যবহার করতে পারবেন। মডেলটি ফিট করার আগে, আপনি ট্রেনিং ডেটার উপর adapt() মেথড ব্যবহার করে স্টেটটি সেট করবেন। এটি নর্মালাইজেশনের জন্য প্রয়োজনীয় মিন এবং ভ্যারিয়েন্স গণনা করবে। পরবর্তীতে, যখন আপনি মডেলটিতে ভ্যালিডেশন ডেটাসেট পাস করবেন, তখন ট্রেনিং ডেটার উপর গণনা করা এই একই মিন এবং ভ্যারিয়েন্স ভ্যালিডেশন ডেটাকে স্কেল করার জন্য ব্যবহৃত হবে।

def get_normalization_layer(name, dataset):
  # Create a Normalization layer for our feature.
  normalizer = tf.keras.layers.Normalization(axis=None)

  # Prepare a Dataset that only yields our feature.
  feature_ds = dataset.map(lambda x, y: x[name])

  # Learn the statistics of the data.
  normalizer.adapt(feature_ds)

  return normalizer

একইভাবে, নিম্নলিখিত ফাংশনটি একটি ক্যাটাগরি এনকোডিং তৈরি করে যা আপনি ঘন্টা এবং সপ্তাহের দিনের বৈশিষ্ট্যগুলিতে ব্যবহার করবেন।

def get_category_encoding_layer(name, dataset, dtype, max_tokens=None):
  index = tf.keras.layers.IntegerLookup(max_tokens=max_tokens)

  # Prepare a Dataset that only yields our feature
  feature_ds = dataset.map(lambda x, y: x[name])

  # Learn the set of possible values and assign them a fixed integer index.
  index.adapt(feature_ds)

  # Create a Discretization for our integer indices.
  encoder = tf.keras.layers.CategoryEncoding(num_tokens=index.vocabulary_size())

  # Apply one-hot encoding to our indices. The lambda function captures the
  # layer so we can use them, or include them in the functional model later.
  return lambda feature: encoder(index(feature))

এরপরে, মডেলের প্রিপ্রসেসিং অংশটি তৈরি করুন। প্রথমে, প্রতিটি ফিচারের জন্য একটি করে tf.keras.Input লেয়ার তৈরি করুন।

# Create a Keras input layer for each feature
numeric_col = tf.keras.Input(shape=(1,), name='distance')
hour_col = tf.keras.Input(shape=(1,), name='hour', dtype='int64')
weekday_col = tf.keras.Input(shape=(1,), name='weekday', dtype='int64')

এরপর নর্মালাইজেশন এবং ক্যাটাগরি এনকোডিং লেয়ারগুলো তৈরি করে একটি লিস্টে সংরক্ষণ করুন।

all_inputs = []
encoded_features = []

# Pass 'distance' input to normalization layer
normalization_layer = get_normalization_layer('distance', train_dataset)
encoded_numeric_col = normalization_layer(numeric_col)
all_inputs.append(numeric_col)
encoded_features.append(encoded_numeric_col)

# Pass 'hour' input to category encoding layer
encoding_layer = get_category_encoding_layer('hour', train_dataset, dtype='int64')
encoded_hour_col = encoding_layer(hour_col)
all_inputs.append(hour_col)
encoded_features.append(encoded_hour_col)

# Pass 'weekday' input to category encoding layer
encoding_layer = get_category_encoding_layer('weekday', train_dataset, dtype='int64')
encoded_weekday_col = encoding_layer(weekday_col)
all_inputs.append(weekday_col)
encoded_features.append(encoded_weekday_col)

প্রিপ্রসেসিং লেয়ারগুলো নির্ধারণ করার পর, আপনি মডেলের বাকি অংশ নির্ধারণ করতে পারেন। আপনি সমস্ত ইনপুট ফিচারগুলোকে একত্রিত করে একটি ডেন্স লেয়ারে পাঠাবেন। যেহেতু এটি একটি রিগ্রেশন সমস্যা, তাই আউটপুট লেয়ারটি একটি একক ইউনিট হবে।

all_features = tf.keras.layers.concatenate(encoded_features)
x = tf.keras.layers.Dense(64, activation="relu")(all_features)
output = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(all_inputs, output)

সবশেষে, মডেলটি কম্পাইল করুন।

model.compile(optimizer = tf.keras.optimizers.Adam(0.001),
              loss='mean_squared_logarithmic_error')

এখন যেহেতু আপনি মডেলটি সংজ্ঞায়িত করেছেন, আপনি এর স্থাপত্যটি কল্পনা করতে পারেন।

tf.keras.utils.plot_model(model, show_shapes=True, rankdir="LR")

কেরাস_মডেল

উল্লেখ্য যে, এই সাধারণ ডেটাসেটের জন্য মডেলটি বেশ জটিল। এটি শুধুমাত্র প্রদর্শনের উদ্দেশ্যে তৈরি করা হয়েছে।

কোডটি যে চলছে, তা নিশ্চিত করার জন্য চলুন ১টি ইপোকের জন্য ট্রেনিং করানো যাক।

model.fit(train_dataset, validation_data = validation_dataset, epochs = 1)

GPU দিয়ে মডেলকে প্রশিক্ষণ দিন

এরপর, আপনি মডেলটিকে আরও বেশি সময় ধরে প্রশিক্ষণ দেবেন এবং প্রশিক্ষণের গতি বাড়াতে হার্ডওয়্যার সুইচার ব্যবহার করবেন। Vertex AI Workbench আপনাকে আপনার ইনস্ট্যান্স বন্ধ না করেই হার্ডওয়্যার পরিবর্তন করার সুযোগ দেয়। শুধুমাত্র প্রয়োজনের সময় GPU যোগ করার মাধ্যমে আপনি খরচ কম রাখতে পারেন।

হার্ডওয়্যার প্রোফাইল পরিবর্তন করতে, উপরের ডান কোণায় থাকা মেশিনের ধরনের উপর ক্লিক করুন এবং 'Modify hardware' নির্বাচন করুন।

হার্ডওয়্যার পরিবর্তন করুন

‘Attach GPUs’ নির্বাচন করুন এবং একটি NVIDIA T4 Tensor Core GPU নির্বাচন করুন।

add_gpu

হার্ডওয়্যারটি কনফিগার হতে প্রায় পাঁচ মিনিট সময় লাগবে। প্রক্রিয়াটি সম্পন্ন হয়ে গেলে, চলুন মডেলটিকে আরও কিছুক্ষণ ট্রেন করি। আপনি লক্ষ্য করবেন যে এখন প্রতিটি ইপক-এ কম সময় লাগছে।

model.fit(train_dataset, validation_data = validation_dataset, epochs = 5)

🎉 অভিনন্দন! 🎉

আপনি শিখেছেন কীভাবে Vertex AI Workbench ব্যবহার করে নিম্নলিখিত কাজগুলো করা যায়:

  • BigQuery-তে ডেটা অন্বেষণ করুন
  • পাইথনে ডেটা লোড করতে BigQuery ক্লায়েন্ট ব্যবহার করুন।
  • কেরাস প্রিপ্রসেসিং লেয়ার এবং একটি জিপিইউ ব্যবহার করে একটি টেনসরফ্লো মডেলকে প্রশিক্ষণ দিন।

Vertex AI-এর বিভিন্ন অংশ সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।

৭. পরিচ্ছন্নতা

যেহেতু আমরা নোটবুকটিকে ৬০ মিনিট নিষ্ক্রিয় থাকার পর টাইম আউট হওয়ার জন্য কনফিগার করেছি, তাই ইনস্ট্যান্সটি শাট ডাউন করার বিষয়ে আমাদের চিন্তা করার দরকার নেই। আপনি যদি ইনস্ট্যান্সটি ম্যানুয়ালি শাট ডাউন করতে চান, তাহলে কনসোলের Vertex AI Workbench সেকশনে থাকা Stop বাটনে ক্লিক করুন। আর যদি নোটবুকটি পুরোপুরি মুছে ফেলতে চান, তাহলে Delete বাটনে ক্লিক করুন।

মুছে ফেলুন