AWS SageMaker Model Training: Hyperparameter Tuning, Cost Opt, Debugging | Sinhala Guide

AWS SageMaker Model Training: Hyperparameter Tuning, Cost Opt, Debugging | Sinhala Guide

ආයුබෝවන් යාළුවනේ! අද අපි කතා කරන්න යන්නේ Artificial Intelligence (AI) සහ Machine Learning (ML) ලෝකයේ ගොඩක් වැදගත් කොටසක් ගැන – ඒ තමයි AWS (Amazon Web Services) එකේ Machine Learning models පුහුණු කරන විදිහ. විශේෂයෙන්ම අපි බලමු Amazon SageMaker කියන සේවාව පාවිච්චි කරලා කොහොමද අපේ models effective විදිහට, අඩු වියදමකින්, ගැටලු නැතුව පුහුණු කරන්නේ කියලා.

AI project එකක සාර්ථකත්වය තීරණය වෙන්නේ මොඩලය පුහුණු කරන විදිහ මතයි. ඒක හරියට ගෙයක් හදනකොට අත්තිවාරම දානවා වගේ වැඩක්. හරියට training කරපු model එකක් නැතුව අපිට හොඳ prediction quality එකක් බලාපොරොත්තු වෙන්න බැහැ. මේ tutorial එකෙන් අපි model training එකේ මූලික සිද්ධාන්තවල ඉඳලා, දියුණු ක්‍රමවේද දක්වා හැමදෙයක්ම සිංහලෙන් පැහැදිලිව ඉගෙන ගනිමු. ඔයා data scientist කෙනෙක් වුණත්, machine learning engineer කෙනෙක් වුණත්, නැත්තම් මේ ක්ෂේත්‍රයට අලුත් කෙනෙක් වුණත් මේක ඔයාට ගොඩක් ප්‍රයෝජනවත් වෙයි!

1. Training Job Configuration - SageMaker හරහා මොඩලයක් පුහුණු කරමු!

Amazon SageMaker කියන්නේ Machine Learning models හදන්න, පුහුණු කරන්න, deploy කරන්න පුදමාලාවක් වගේ පහසුකම් සපයන AWS සේවාවක්. SageMaker එකේ Training Job එකක් කියන්නේ ඔයාගේ dataset එක අරගෙන, ඔයා තෝරගත්ත algorithm එකක් පාවිච්චි කරලා model එකක් පුහුණු කරන ක්‍රියාවලියට. මේක configure කරන එක තමයි පළවෙනි සහ වැදගත්ම පියවර.

අපි බලමු ප්‍රධාන configuration components මොනවද කියලා:

  • Estimator: මේක තමයි ඔයාගේ training script එක, training instance type එක, instance count එක වගේ දේවල් define කරන්නේ. SageMaker එකට built-in algorithms ගොඩක් තියෙනවා වගේම, අපිට අපේම custom script එකකුත් පාවිච්චි කරන්න පුළුවන්. PyTorch, TensorFlow, Scikit-learn වගේ ජනප්‍රිය frameworks වලට support කරන Estimators තියෙනවා.
  • Role: SageMaker ට AWS resources (S3 bucket, EC2 instances) access කරන්න අවශ්‍ය permissions තියෙන IAM Role එකක් මේකට ඕනේ. සාමාන්‍යයෙන් AmazonSageMakerFullAccess policy එක අමුණපු role එකක් පාවිච්චි කරනවා.
  • Instance Type සහ Count: Training එකට අවශ්‍ය CPU/GPU power එක තීරණය කරන්නේ මේකෙන්. ml.m5.xlarge වගේ CPU instances වගේම ml.p3.2xlarge වගේ GPU instances තියෙනවා. Dataset එකේ ප්‍රමාණය සහ training එකේ සංකීර්ණත්වය අනුව මේක තෝරාගන්න වෙනවා. විශාල models සහ datasets වලට GPU instances අත්‍යවශ්‍යයි.
  • Input Data: ඔයාගේ dataset එක තියෙන S3 location එක. SageMaker ට මේ data එක training instances වලට ලබාගන්න පුළුවන් වෙන්න ඕනේ.
  • Output Path: පුහුණු කරපු model artifact එක (එනම් train කරපු model එක) save වෙන S3 location එක. Training job එක අවසන් වූ පසු model එක මේ location එකට automatic upload වෙනවා.

පහත තියෙන්නේ Python SageMaker SDK එක පාවිච්චි කරලා Training Job එකක් define කරන විදිහට පොඩි උදාහරණයක්:

import sagemaker
from sagemaker.pytorch import PyTorch

# Sagemaker session එකක් initialize කරමු
sagemaker_session = sagemaker.Session()

# IAM role එක (ඔයාගේ AWS account එකේ role එකට අනුව වෙනස් කරන්න)
# මේ role එකට Sagemaker, S3 වගේ services access කරන්න permissions තියෙන්න ඕනේ.
role = sagemaker.get_execution_role()

# S3 bucket එක (ඔයාගේ bucket name එකට අනුව වෙනස් කරන්න)
bucket = 'your-sagemaker-bucket-name-here'

# Output path එක define කරමු
output_path = f's3://{bucket}/output'

# PyTorch Estimator එකක් configure කරමු
# "train.py" කියන්නේ අපේ training logic එක තියෙන script එක.
pytorch_estimator = PyTorch(
    entry_point='train.py',
    source_dir='code',  # training script එක තියෙන folder එක
    role=role,
    framework_version='1.10.2', # PyTorch version එක
    py_version='py38', # Python version එක
    instance_count=1,
    instance_type='ml.m5.xlarge', # Training instance type එක
    output_path=output_path,
    hyperparameters={ # අපේ training script එකට pass කරන hyperparameters
        'epochs': 10,
        'batch_size': 64,
        'learning_rate': 0.001
    }
)

# Training job එක පටන් ගනිමු
# මෙතන 's3://{bucket}/data' කියන්නේ data set එක තියෙන S3 location එක.
# SageMaker විසින් මේ data training instance එකට download කරනවා.
pytorch_estimator.fit({'training': f's3://{bucket}/data'})

print("Training job එක සාර්ථකව අවසන්!")

මේ code එකේ train.py කියන script එක ඇතුලේ තමයි ඔයාගේ actual training logic එක තියෙන්න ඕනේ. ඒක dataset එක load කරලා, model එක train කරලා, model artifact එක /opt/ml/model/ කියන path එකට save කරන්න ඕනේ. SageMaker ඒක automatically S3 output path එකට upload කරනවා. ඔයාගේ training script එක SageMaker environment එකට අනුව customize කරන්න වෙනවා.

2. Hyperparameter Tuning - මොඩලයේ කාර්යසාධනය වැඩි දියුණු කරමු!

Machine Learning models සාර්ථක වෙන්න නම් හරියට training job එක configure කරනවා වගේම, හරියට hyperparameters තෝරාගන්න එකත් ගොඩක් වැදගත්. Hyperparameters කියන්නේ model එක train කරන්න කලින් define කරන parameters. උදාහරණයක් විදිහට learning rate එක, batch size එක, number of layers, number of epochs වගේ දේවල්. මේවායේ නිවැරදි අගයන් හොයාගන්න එක ලේසි වැඩක් නෙවෙයි, ඒක ගොඩක් වෙලාවට 'hit-and-trial' ක්‍රමයකට තමයි කරන්නේ.

SageMaker Hyperparameter Tuning කියන්නේ මේ ක්‍රියාවලිය automate කරන්න උදව් වෙන සේවාවක්. මේකෙන් පුළුවන් ඔයා define කරන hyperparameter range එකක් ඇතුලේ පුහුණු කිරීම් ගණනාවක් (multiple training jobs) run කරලා, හොඳම model එක දෙන්න පුළුවන් hyperparameter combination එක හොයාගන්න.

ප්‍රධාන Tuning Strategies දෙකක් තියෙනවා:

  • Random Search: මේකෙන් hyperparameters random විදිහට තෝරගෙන training jobs run කරනවා. ගොඩක් වෙලාවට Bayesian search එකට වඩා වේගවත්, හැබැයි optimal solution එක හොයාගන්න වැඩි training jobs ගාණක් අවශ්‍ය වෙන්න පුළුවන්.
  • Bayesian Search: මේක කලින් training jobs වල ප්‍රතිඵල පාවිච්චි කරලා, ඊළඟට test කරන්න ඕනේ hyperparameter combinations මොනවද කියලා predict කරනවා. මේක Random search එකට වඩා optimal solution එකක් හොයාගන්න හොඳයි, හැබැයි ටිකක් වෙලා යනවා.

අපි බලමු කොහොමද PyTorch Estimator එකක් පාවිච්චි කරලා Hyperparameter Tuner එකක් configure කරන්නේ කියලා:

from sagemaker.tuner import HyperparameterTuner, IntegerParameter, CategoricalParameter, ContinuousParameter

# Estimator එක කලින් වගේම define කරමු
# (pytorch_estimator එක කලින් section එකේ විදිහටම define කරන්න)
# ... (for brevity, assuming pytorch_estimator is defined as in Section 1) ...

# Hyperparameter ranges define කරමු
hyperparameter_ranges = {
    'learning_rate': ContinuousParameter(0.0001, 0.1), # 0.0001 සිට 0.1 දක්වා continuous අගයන්
    'batch_size': CategoricalParameter([32, 64, 128]), # 32, 64, 128 යන අගයන් අතරින් තෝරයි
    'epochs': IntegerParameter(5, 15) # 5 සිට 15 දක්වා integer අගයන්
}

# Training job එකේ objective metric එක define කරමු
# මේ metric එක තමයි Tuner එක වැඩිදියුණු කරන්න බලන්නේ.
# ඔයාගේ training script එකෙන් මේ නම සහිත metric එකක් print කරන්න ඕනේ.
objective_metric_name = 'validation:accuracy'
objective_type = 'Maximize' # Accuracy වැඩි කරන්න ඕනේ

# Hyperparameter Tuner එක initialize කරමු
tuner = HyperparameterTuner(
    estimator=pytorch_estimator,
    objective_metric_name=objective_metric_name,
    hyperparameter_ranges=hyperparameter_ranges,
    max_jobs=10,  # උපරිම training jobs ගාණ (මේකෙන් වියදම බලපානවා)
    max_parallel_jobs=2, # එකවර run කරන්න පුළුවන් jobs ගාණ
    objective_type=objective_type,
    strategy='Bayesian', # Tuning strategy එක ('Random' හෝ 'Bayesian')
    # training script එකෙන් මේ metric එක output කරන විදිහට match වෙන Regex එකක් දෙන්න ඕනේ.
    metric_definitions=[{'Name': 'validation:accuracy', 'Regex': 'Validation Accuracy: (.*?)$'}]
)

# Tuning job එක පටන් ගනිමු
tuner.fit({'training': f's3://{bucket}/data'})

# හොඳම training job එක ලබාගනිමු
best_training_job = tuner.best_training_job()
print(f"හොඳම training job එක: {best_training_job}")

මෙහිදී metric_definitions කියන එක ගොඩක් වැදගත්. ඔයාගේ training script එකෙන් print කරන logs වල තියෙන metric එකක් (උදා: 'Validation Accuracy: 0.85') SageMaker ට parse කරගන්න පුළුවන් වෙන්න මේකේ Regex එක හරියට දෙන්න ඕනේ. ඒ වගේම max_jobs සහ max_parallel_jobs හරියට තෝරාගන්න එක වියදම් කළමනාකරණයට සහ tuning process එකේ වේගයට බලපානවා.

3. Distributed Training Strategies - විශාල දත්ත කට්ටල සමග වැඩ කරමු!

ගොඩක් වෙලාවට අපිට විශාල datasets එක්ක වැඩ කරන්න වෙනවා, එතකොට තනි instance එකක් පාවිච්චි කරලා model එකක් train කරන එකට ගොඩක් වෙලා යනවා, නැත්තම් memory limit එකක් එන්න පුළුවන්. මේ වගේ අවස්ථාවලට තමයි Distributed Training පාවිච්චි කරන්නේ. Distributed Training කියන්නේ එක training job එකක් EC2 instances කිහිපයක් හරහා බෙදාහරින එක, ඒ වගේම එක් instance එකක් ඇතුලෙත් GPUs කිහිපයක් පාවිච්චි කරන්න පුළුවන්.

ප්‍රධාන Distributed Training Strategies දෙකක් තියෙනවා:

  1. Data Parallelism: මේක තමයි බහුලවම පාවිච්චි කරන්නේ. මෙතනදී dataset එක කුඩා කොටස් වලට කඩලා, ඒ එක් එක් කොටස වෙන වෙනම instances වලට යවනවා. හැම instance එකක්ම එකම model copy එකක් අරගෙන, තමන්ට අදාළ data කොටසෙන් model එක train කරනවා. පස්සේ මේ හැම instance එකකින්ම update වෙන gradients එකතු කරලා, global model එක update කරනවා. SageMaker එකේ Distributed Data Parallel (DDP) implementations තියෙනවා PyTorch, TensorFlow වගේ frameworks වලට. මේ සඳහා instance_count එක 1ට වඩා වැඩි අගයක් දීලා, SageMaker SDK එකේ distributed training configurations පාවිච්චි කරන්න පුළුවන්.
  2. Model Parallelism: සමහර models (විශේෂයෙන්ම විශාල Large Language Models - LLMs වගේ) තනි GPU එකකටවත් memory එක මදි වෙන්න පුළුවන්. Model Parallelism එකේදී model එකේ layers හෝ components කිහිපයකට කඩලා, ඒ එක් එක් කොටස වෙන වෙනම instances වලට පටවනවා. මේක Data Parallelism එකට වඩා implement කරන්න සංකීර්ණයි. SageMaker Model Parallelism පුහුණු කිරීම් සරල කිරීම සඳහා SageMaker Model Parallelism Library වගේ පහසුකම් සපයනවා.

SageMaker මේ දෙකටම support කරනවා. ඔයාට අවශ්‍ය වෙන්නේ Estimator එකේ instance_count එක 1ට වඩා වැඩි අගයක් දීලා, framework එකට අදාළ distributed training settings configure කරන එක විතරයි. SageMaker MPI, Horovod, PyTorch DDP වගේ දේවල් manage කරනවා, ඒ නිසා ඔයාට ගොඩක් සංකීර්ණ setup එකක් ගැන හිතන්න අවශ්‍ය වෙන්නේ නැහැ.

4. Spot Training - වියදම් අඩු කරගෙන smart වැඩ කරමු!

AWS කියන්නේ ගොඩක් powerful සේවාවක් වුණාට, හරියට management එකක් නැති වුණොත් ගොඩක් වියදම් වෙන්නත් පුළුවන්. Machine Learning training jobs වලට GPU instances පාවිච්චි කරනකොට මේ වියදම තවත් වැඩි වෙනවා. මෙතනදී තමයි AWS Spot Instances සහ SageMaker Spot Training එක වැදගත් වෙන්නේ.

Spot Instances කියන්නේ AWS එකේ තියෙන free EC2 capacity එක අඩු මිලට ලබා දෙන service එකක්. මේවා On-Demand instances වලට වඩා 70-90% දක්වා ලාභදායී වෙන්න පුළුවන්. හැබැයි මේවාට තියෙන එකම issue එක තමයි, AWS එකට ඒ capacity එක අවශ්‍ය වුණොත්, ඔයාගේ instance එකට විනාඩි 2ක notice එකක් දීලා terminate කරන්න පුළුවන්. මේකට අපි කියන්නේ 'Spot interruption' කියලා.

සාමාන්‍ය training jobs වලට මේක ප්‍රශ්නයක් වෙන්න පුළුවන්, මොකද training එක අතරමැද නැවතුනොත් ආපහු මුල ඉඳන් පටන් ගන්න වෙනවා. හැබැයි SageMaker Spot Training වලදී මේ ගැටලුවට විසඳුමක් දීලා තියෙනවා.

SageMaker Spot Training enable කරාම, SageMaker automatic විදිහට checkpointing add කරනවා. ඒ කියන්නේ training job එක terminate වුණොත්, කලින් save කරපු checkpoint එකෙන් ආපහු training එක පටන් ගන්න පුළුවන්. ඒ නිසා අපිට training job එකක් සාර්ථකව අවසන් කරගන්න පුළුවන්, ගොඩක් අඩු වියදමකින්.

Spot Training enable කරන්න නම්, ඔයාගේ Estimator එකේ use_spot_instances කියන parameter එක True කරන්න ඕනේ. වගේම, max_run (training job එක run වෙන්න පුළුවන් උපරිම කාලය) සහ max_wait (spot instance එකක් බලාගෙන ඉන්න පුළුවන් උපරිම කාලය) කියන parameters දෙකත් define කරන්න පුළුවන්.

# Spot Training enable කරමු
pytorch_estimator_spot = PyTorch(
    entry_point='train.py',
    source_dir='code',
    role=role,
    framework_version='1.10.2',
    py_version='py38',
    instance_count=1,
    instance_type='ml.m5.xlarge',
    output_path=output_path,
    use_spot_instances=True,  # මේක තමයි magical line එක!
    max_run=3600,             # Training එකට උපරිම ගතවිය හැකි කාලය (තත්පර 3600 = පැය 1)
    max_wait=7200,            # Spot instance එකක් බලාගෙන ඉන්න පුළුවන් උපරිම කාලය (තත්පර 7200 = පැය 2)
    hyperparameters={
        'epochs': 10,
        'batch_size': 64
    }
)

pytorch_estimator_spot.fit({'training': f's3://{bucket}/data'})

මතක තියාගන්න, checkpointing හරියට වැඩ කරන්න නම් ඔයාගේ training script එක ඇතුලෙත් model state එක regularly save කරන logic එකක් තියෙන්න ඕනේ. SageMaker framework Estimators වලට built-in checkpointing support එකක් තියෙනවා, ඒත් custom scripts වලට ඔයාට ඒ logic එක add කරන්න වෙනවා. මේකෙන් ඔයාගේ ML project වල වියදම් සැලකිය යුතු ලෙස අඩු කරගන්න පුළුවන්.

5. Debugging Training Failures සහ Model Evaluation Metrics - වැරදි හදාගෙන හොඳම ප්‍රතිඵල ලබාගනිමු!

Training job එකක් fail වෙන්න පුළුවන් හේතු ගොඩක් තියෙනවා. Dataset එකේ error එකක්, training script එකේ bug එකක්, memory එක මදි වීමක්, network issue එකක්, හෝ model convergence වෙන්නේ නැතිවීමක් වගේ දේවල්. SageMaker Debugger කියන්නේ මේ වගේ අවස්ථාවලදී training failures analyze කරන්න උදව් වෙන සේවාවක්.

SageMaker Debugger එකෙන් පුළුවන් training job එක run වෙන අතරතුර CPU/GPU utilization, memory usage, gradient values, loss values වගේ metrics monitor කරන්න. මේවා පාවිච්චි කරලා Overfitting, Underfitting, vanishing/exploding gradients වගේ පොදු ගැටලු හඳුනාගන්න පුළුවන්. Debugger Rules පාවිච්චි කරලා මේ වගේ ගැටලු detect වුණාම alerts generate කරන්නත් පුළුවන්.

Model Evaluation Metrics:

Model එකක් train කරාට පස්සේ ඒක කොච්චර හොඳට වැඩ කරනවද කියලා මනින්න අපිට evaluation metrics අවශ්‍යයි. Dataset එකේ වර්ගය (classification, regression) අනුව මේ metrics වෙනස් වෙනවා.

Classification models සඳහා බහුලව පාවිච්චි කරන metrics කිහිපයක්:

  • Accuracy: නිවැරදිව classify කරපු predictions ගණන මුළු predictions ගණනින් බෙදලා. හැබැයි dataset එක imbalance නම් (එක් class එකක samples ගොඩක් වැඩියි නම්) මේක විතරක් පාවිච්චි කරන එක එච්චර හොඳ නැහැ.
  • Precision: Model එක positive කියලා identify කරපු predictions වලින්, ඇත්තටම positive වෙලා තියෙන predictions ගණන. False Positives (වැරදියට positive කියලා කිව්ව ඒවා) අඩු කරන්න අවශ්‍ය අවස්ථාවලදී වැදගත්. (උදා: spam detection - වැරදියට සාමාන්‍ය email එකක් spam කරන්න හොඳ නැහැ)
  • Recall (Sensitivity): ඇත්තටම positive වෙලා තියෙන predictions වලින්, model එකට identify කරන්න පුළුවන් වෙච්ච predictions ගණන. False Negatives (ඇත්තටම positive වුණත් negative කියලා කිව්ව ඒවා) අඩු කරන්න අවශ්‍ය අවස්ථාවලදී වැදගත්. (උදා: disease detection - රෝගී කෙනෙක්ව වැරදියට නිරෝගී කියලා කියන්න හොඳ නැහැ)
  • F1-Score: Precision සහ Recall වල harmonic mean එක. මේ දෙකේම හොඳ balance එකක් අවශ්‍ය අවස්ථාවලදී පාවිච්චි කරනවා.

Regression models සඳහා බහුලව පාවිච්චි කරන metrics කිහිපයක්:

  • Mean Absolute Error (MAE): Actual values සහ predicted values අතර ඇති වෙන සාමාන්‍ය absolute error එක.
  • Mean Squared Error (MSE): Actual values සහ predicted values අතර ඇති වෙන සාමාන්‍ය squared error එක. Outliers වලට සංවේදීයි.
  • Root Mean Squared Error (RMSE): MSE එකේ වර්ගමූලය. MAE වලට වඩා outliers වලට දඬුවම් දෙනවා.

ඔයාගේ business problem එකට ගැලපෙන metric එකක් තෝරාගන්න එක ගොඩක් වැදගත්. සමහර වෙලාවට model එකේ Accuracy එක 95% වුණත්, Precision හෝ Recall ගොඩක් අඩු වෙන්න පුළුවන්, ඒක business එකට හානිකර වෙන්නත් පුළුවන්. ඒ නිසා context එක තේරුම් අරගෙන නිවැරදි metric එක තෝරගන්න එක අත්‍යවශ්‍යයි.

අවසන් වශයෙන් - ඔයාගේ AI Journey එකට සුබ පැතුම්!

ඉතින් යාළුවනේ, අපි මේ tutorial එකෙන් Amazon SageMaker පාවිච්චි කරලා Machine Learning model training එකක් කොහොමද හරියට configure කරන්නේ, Hyperparameter tuning කරලා model එකේ performance එක වැඩි කරන්නේ, Distributed training පාවිච්චි කරලා විශාල datasets එක්ක වැඩ කරන්නේ, Spot Training පාවිච්චි කරලා වියදම් අඩු කරගන්නේ, වගේම training failures debug කරලා, model evaluation metrics හරියට තෝරාගන්නේ කොහොමද කියලා විස්තරාත්මකව කතා කළා.

මේවා තමයි effective සහ efficient ML development එකක තියෙන ප්‍රධාන පියවර. AWS SageMaker වගේ platform එකක් පාවිච්චි කරලා මේ හැමදෙයක්ම automate කරගන්නත්, speed up කරගන්නත් පුළුවන්. SageMaker කියන්නේ AI/ML engineers ලට සහ Data Scientists ලට වටිනාම tool එකක් කියන එක අමුතුවෙන් කියන්න ඕනේ නැහැ.

දැන් ඔයාට හොඳ අවබෝධයක් තියෙනවා model training එක ගැන. මේ දැනුම ඔයාගේ ඊළඟ ML project එකට ගොඩක් උදව් වෙයි. පුළුවන් නම් මේ concepts ටික ඔයාගේම code එකක් ලියලා try කරලා බලන්න. මොකද ප්‍රායෝගිකව කරනකොට තමයි ගොඩක් දේවල් ඉගෙන ගන්න පුළුවන් වෙන්නේ.

මේ ගැන ඔයාගේ අදහස්, ප්‍රශ්න පහලින් comment කරන්න. ඔයාගේ අත්දැකීම් අපිත් එක්ක බෙදාගන්නත් අමතක කරන්න එපා! ඔයාගේ AI journey එක සාර්ථක වේවා!