মডেল সেভ করা এবং চেকপয়েন্টিং (Checkpointing) মডেল ট্রেনিংয়ের একটি গুরুত্বপূর্ণ অংশ, বিশেষ করে যখন ট্রেনিং প্রক্রিয়া দীর্ঘ সময় নেয়। মডেল সেভ এবং চেকপয়েন্টিংয়ের মাধ্যমে আমরা মডেলের বর্তমান অবস্থা সংরক্ষণ করতে পারি এবং প্রয়োজন হলে সেখান থেকে পুনরায় ট্রেনিং শুরু করতে পারি। PyTorch ব্যবহার করে মডেল সেভ করার পদ্ধতি এবং চেকপয়েন্টিং নিচে আলোচনা করা হলো:
১. মডেল সেভ করার পদ্ধতি
মডেল ট্রেনিং শেষে মডেল সংরক্ষণ করা যায়, যাতে এটি পুনরায় ব্যবহার করা যায় বা ডেপলয়মেন্ট করা যায়। PyTorch-এ সাধারণত মডেল সেভ করার জন্য torch.save() ফাংশন ব্যবহার করা হয়।
উদাহরণ: মডেলের ওজন (weights) সংরক্ষণ করা
import torch
# মডেলের ওজন সংরক্ষণ করা
torch.save(model.state_dict(), 'model_weights.pth')
- এখানে,
model.state_dict()মডেলের ওজন এবং অন্যান্য প্যারামিটার সংরক্ষণ করে। ফাইলটি'model_weights.pth'নামে সেভ করা হয়েছে। - মডেলের ওজন লোড করার জন্য:
# মডেলের আর্কিটেকচার পুনরায় তৈরি করা
model = SimpleNN()
# সংরক্ষিত ওজন লোড করা
model.load_state_dict(torch.load('model_weights.pth'))
# মডেলকে এভালুয়েশন মোডে সেট করা (যদি টেস্ট বা ডেপলয় করতে চান)
model.eval()
মডেলের সম্পূর্ণ অবস্থা সংরক্ষণ করা
মডেলের ওজনের পাশাপাশি, সম্পূর্ণ মডেল সংরক্ষণ করার জন্য:
# সম্পূর্ণ মডেল সংরক্ষণ করা
torch.save(model, 'full_model.pth')
- সম্পূর্ণ মডেল লোড করার জন্য:
# সম্পূর্ণ মডেল লোড করা
model = torch.load('full_model.pth')
model.eval()
এভাবে, আপনি সম্পূর্ণ মডেল আর্কিটেকচার ও ওজন একসাথে সংরক্ষণ এবং পুনরায় লোড করতে পারেন।
২. Checkpointing
Checkpointing হলো মডেলের ট্রেনিং প্রক্রিয়ার একটি নির্দিষ্ট অবস্থায় মডেল সংরক্ষণ করা, যাতে ট্রেনিং পুনরায় শুরু করলে পূর্ববর্তী অবস্থান থেকে শুরু করা যায়। এটি বিশেষ করে লম্বা সময়ের ট্রেনিংয়ে বা মডেল টিউনিংয়ের সময় সহায়ক।
Checkpointing-এর উদাহরণ
import torch
# চেকপয়েন্ট সংরক্ষণ করা
checkpoint = {
'epoch': epoch,
'model_state': model.state_dict(),
'optimizer_state': optimizer.state_dict(),
'loss': loss
}
torch.save(checkpoint, 'checkpoint.pth')
এখানে, আমরা মডেলের বর্তমান অবস্থা, অপ্টিমাইজারের অবস্থা, এবং বর্তমান ইপক সংরক্ষণ করছি।
Checkpoint থেকে মডেল লোড করা
# চেকপয়েন্ট লোড করা
checkpoint = torch.load('checkpoint.pth')
model.load_state_dict(checkpoint['model_state'])
optimizer.load_state_dict(checkpoint['optimizer_state'])
start_epoch = checkpoint['epoch']
loss = checkpoint['loss']
# ট্রেনিং পুনরায় শুরু করা
for epoch in range(start_epoch, num_epochs):
# ট্রেনিং কোড
pass
এভাবে, চেকপয়েন্ট থেকে মডেলের ওজন এবং অপ্টিমাইজারের অবস্থা পুনরায় লোড করে পূর্ববর্তী অবস্থান থেকে ট্রেনিং শুরু করা যায়।
৩. Checkpointing পদ্ধতির কিছু Best Practices
ইপকের নির্দিষ্ট ইন্টারভালে চেকপয়েন্ট সংরক্ষণ: প্রতিটি ইপক বা নির্দিষ্ট ইন্টারভালে চেকপয়েন্ট সংরক্ষণ করলে, মডেল ট্রেনিং চলাকালীন হঠাৎ কোনো সমস্যা হলে আগের অবস্থান থেকে পুনরায় শুরু করা যায়।
লস বা পারফরম্যান্সের উপর ভিত্তি করে চেকপয়েন্ট সংরক্ষণ: কিছু ক্ষেত্রে, মডেলের লস বা পারফরম্যান্স কম হলে (যেমন: লস ভ্যালু সর্বনিম্ন হলে) চেকপয়েন্ট সংরক্ষণ করতে পারেন। এভাবে, আপনি সর্বোত্তম অবস্থায় মডেলটি সংরক্ষণ করতে পারবেন।
if loss < best_loss:
best_loss = loss
torch.save(model.state_dict(), 'best_model.pth')
- সংরক্ষিত চেকপয়েন্ট নামকরণ: ট্রেনিং ইপকের সাথে চেকপয়েন্ট ফাইলের নাম যুক্ত করলে সহজে চেকপয়েন্ট ট্র্যাক করা যায়, যেমন
'checkpoint_epoch_10.pth'।
এইভাবে, মডেল সেভ এবং চেকপয়েন্টিং ব্যবহার করে আপনি মডেল ট্রেনিংয়ের সময় সঠিকভাবে মডেল সংরক্ষণ এবং পুনরায় লোড করতে পারবেন, যা মডেল ট্রেনিং এবং উন্নয়নের একটি গুরুত্বপূর্ণ দিক।
Read more