Keras এবং TensorFlow দিয়ে Multi-GPU এবং Multi-node training কনফিগার করা মডেল ট্রেনিংয়ের গতি এবং দক্ষতা অনেক বাড়াতে পারে, বিশেষত যখন আপনার ডেটাসেট বড় বা মডেল জটিল হয়। Multi-GPU এবং Multi-node training দ্বারা আপনি একাধিক GPU বা সিস্টেম ব্যবহার করে প্রশিক্ষণের কাজ দ্রুততর করতে পারবেন।
১. Multi-GPU Training (Multiple GPUs on a Single Machine)
Keras এবং TensorFlow multi-GPU training সহজেই সমর্থন করে। MirroredStrategy ব্যবহার করে আপনি একটি মেশিনে একাধিক GPU তে মডেল প্রশিক্ষণ করতে পারেন। এটি ডিস্ট্রিবিউটেড ট্রেনিং এর জন্য TensorFlow এর একমাত্র কৌশল।
১.১. Multi-GPU Training Configuration with tf.distribute.MirroredStrategy
MirroredStrategy একটি সহজ এবং জনপ্রিয় উপায় যেটি একাধিক GPU তে মডেল ট্রেনিং করতে সাহায্য করে। এটি সকল GPU তে ডেটা মিরর করে এবং ট্রেনিং প্রক্রিয়া সমন্বিতভাবে চালায়।
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets import mnist
# Multi-GPU strategy ব্যবহার করা
strategy = tf.distribute.MirroredStrategy()
print('Number of devices: ', strategy.num_replicas_in_sync)
# ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ডেটা প্রিপ্রসেসিং
x_train = x_train / 255.0
x_test = x_test / 255.0
# Strategy scope এর মধ্যে মডেল তৈরি করা
with strategy.scope():
model = Sequential([
Dense(128, activation='relu', input_shape=(784,)),
Dense(10, activation='softmax')
])
model.compile(optimizer=Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# মডেল ট্রেনিং
model.fit(x_train.reshape(-1, 784), y_train, epochs=5, batch_size=64)
প্রধান বিষয়গুলো:
MirroredStrategy(): এই কৌশলটি সমস্ত GPU তে সমান্তরালভাবে মডেল ট্রেনিং করতে সাহায্য করে। এটি সিঙ্ক্রোনাইজড ট্রেনিং চালায়।strategy.scope(): মডেল নির্মাণ এবং কম্পাইল করার সময় এই স্কোপের মধ্যে থাকা প্রয়োজন যাতে সব GPU তে একই মডেল তৈরি হয়।
২. Multi-node Training (Multiple Nodes, Each with Multiple GPUs)
Multi-node training ব্যবহার করে আপনি একাধিক সার্ভার (nodes) ব্যবহার করে ট্রেনিং চালাতে পারেন, যেখানে প্রতিটি সার্ভারে একাধিক GPU থাকতে পারে। TensorFlow এ ParameterServerStrategy এবং MultiWorkerMirroredStrategy সহ বিভিন্ন কৌশল রয়েছে যেগুলি একাধিক নোডে মডেল ট্রেনিং করতে সহায়ক।
২.১. Multi-worker training with tf.distribute.MultiWorkerMirroredStrategy
MultiWorkerMirroredStrategy ব্যবহার করে একাধিক সার্ভারে ট্রেনিং চালানো হয়। এতে কয়েকটি নোডে একাধিক GPU তে ট্রেনিং সম্পন্ন হতে পারে। আপনি যদি ক্লাউডে বা বড় স্কেলে কাজ করেন, তবে এটি একটি জনপ্রিয় কৌশল।
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets import mnist
# MultiWorkerMirroredStrategy ব্যবহার করা
strategy = tf.distribute.MultiWorkerMirroredStrategy()
print('Number of devices: ', strategy.num_replicas_in_sync)
# ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ডেটা প্রিপ্রসেসিং
x_train = x_train / 255.0
x_test = x_test / 255.0
# Strategy scope এর মধ্যে মডেল তৈরি করা
with strategy.scope():
model = Sequential([
Dense(128, activation='relu', input_shape=(784,)),
Dense(10, activation='softmax')
])
model.compile(optimizer=Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# মডেল ট্রেনিং
model.fit(x_train.reshape(-1, 784), y_train, epochs=5, batch_size=64)
MultiWorkerMirroredStrategy ব্যবহারের সময় TensorFlow এর সাথে সব নোডে ট্রেনিং ডেটা মিরর করা হয় এবং তারা একে অপরের সাথে সমন্বয় সাধন করে। এটি ডিস্ট্রিবিউটেড ট্রেনিংয়ের জন্য বেশ কার্যকরী।
২.২. Cluster Configuration for Multi-Node Training
ক্লাস্টার কনফিগারেশনের জন্য, আপনাকে TF_CONFIG পরিবেশ ভেরিয়েবল ব্যবহার করতে হবে, যাতে সার্ভার এবং কাজের সংখ্যা নির্ধারণ করা যায়। নিম্নলিখিত কনফিগারেশন একটি উদাহরণ:
{
"cluster": {
"worker": ["worker1.example.com:12345", "worker2.example.com:12345"]
},
"task": {
"type": "worker",
"index": 0
}
}
worker1.example.com:12345এবংworker2.example.com:12345হল দুইটি আলাদা সার্ভার যেগুলি একে অপরের সাথে কাজ করবে। আপনাকে এই সার্ভারের জন্য পোর্ট নম্বর কনফিগার করতে হবে।
এই কনফিগারেশনটি আপনার ট্রেনিং সার্ভারে সেট করতে হবে এবং তারপর tf.distribute.MultiWorkerMirroredStrategy ব্যবহার করে ট্রেনিং চালানো যাবে।
৩. Hyperparameter Tuning for Multi-GPU and Multi-node Training
Keras Tuner বা Hyperopt ব্যবহার করে আপনি multi-GPU বা multi-node ট্রেনিং এর জন্য হাইপারপারামিটার অপটিমাইজেশন করতে পারেন। কিন্তু, এটি করার জন্য আপনাকে Distributed Training এর সাথে কনফিগারেশন করতে হবে, যাতে প্রতিটি GPU এবং নোড সঠিকভাবে কাজ করে।
from keras_tuner import Hyperband
# Hyperband Strategy ব্যবহার করে টিউনিং
tuner = Hyperband(
MyHyperModel(),
objective='val_accuracy',
max_epochs=10,
factor=3,
directory='my_dir',
project_name='multi_gpu_tuning'
)
tuner.search(x_train, y_train, epochs=10, validation_data=(x_val, y_val))
৪. সারাংশ
- Multi-GPU Training: একাধিক GPU তে মডেল ট্রেনিং করার জন্য
tf.distribute.MirroredStrategyব্যবহার করা হয়। - Multi-node Training: একাধিক নোডে (সার্ভার) ট্রেনিং চালানোর জন্য
tf.distribute.MultiWorkerMirroredStrategyব্যবহার করা হয়। - TF_CONFIG: মাল্টি-নোড কনফিগারেশন এবং সার্ভারের জন্য পরিবেশ ভেরিয়েবল সেট করা।
- Hyperparameter Tuning: Keras Tuner বা অন্যান্য টুল ব্যবহার করে মাল্টি-GPU এবং মাল্টি-node ট্রেনিং এর জন্য হাইপারপারামিটার অপটিমাইজেশন করা যেতে পারে।
এই কৌশলগুলি ব্যবহার করে আপনি ডিস্ট্রিবিউটেড ট্রেনিং এর মাধ্যমে আপনার মডেল প্রশিক্ষণ গতি এবং কার্যকারিতা বৃদ্ধি করতে পারেন।
Read more