TensorFlow.org-এ দেখুন | Google Colab-এ চালান | GitHub-এ উৎস দেখুন | নোটবুক ডাউনলোড করুন |
এই নির্দেশিকাটি দেখায় কিভাবে TPUs- এ টেনসরফ্লো 1 এর embedding_column
API থেকে TPUEstimator
এর সাথে TPUEmbedding
লেয়ার API-এ TPUStrategy
এর সাথে এম্বেডিং প্রশিক্ষণ স্থানান্তর করা যায়।
এমবেডিং হল (বড়) ম্যাট্রিক্স। এগুলি হল লুকআপ টেবিল যা একটি স্পার্স ফিচার স্পেস থেকে ঘন ভেক্টরে ম্যাপ করে। এমবেডিংগুলি কার্যকরী এবং ঘন উপস্থাপনা প্রদান করে, জটিল মিল এবং বৈশিষ্ট্যগুলির মধ্যে সম্পর্ককে ক্যাপচার করে।
টেনসরফ্লোতে TPU-তে প্রশিক্ষণ এমবেডিংয়ের জন্য বিশেষ সহায়তা অন্তর্ভুক্ত রয়েছে। এই টিপিইউ-নির্দিষ্ট এমবেডিং সমর্থন আপনাকে একটি একক TPU ডিভাইসের মেমরির চেয়ে বড় এমবেডিংগুলিকে প্রশিক্ষণ দিতে এবং TPUগুলিতে স্পার্স এবং র্যাগড ইনপুট ব্যবহার করতে দেয়।
- TensorFlow 1-এ,
tf.compat.v1.estimator.tpu.TPUEstimator
হল একটি উচ্চ স্তরের API যা প্রশিক্ষণ, মূল্যায়ন, ভবিষ্যদ্বাণী, এবং TPU-এর সাথে পরিবেশনের জন্য রপ্তানিকে অন্তর্ভুক্ত করে। এটিtf.compat.v1.tpu.experimental.embedding_column
এর জন্য বিশেষ সমর্থন রয়েছে। - TensorFlow 2 এ এটি বাস্তবায়ন করতে, TensorFlow সুপারিশকারীদের
tfrs.layers.embedding.TPUEmbedding
লেয়ার ব্যবহার করুন। প্রশিক্ষণ এবং মূল্যায়নের জন্য, একটি TPU বিতরণ কৌশল ব্যবহারtf.distribute.TPUStrategy
— যা Keras API-এর সাথে সামঞ্জস্যপূর্ণ, উদাহরণস্বরূপ, মডেল বিল্ডিং (tf.keras.Model
), অপ্টিমাইজার (tf.keras.optimizers.Optimizer
), এবংModel.fit
বাtf.function
এবংtf.GradientTape
সহ একটি কাস্টম প্রশিক্ষণ লুপের সাথে প্রশিক্ষণ।
অতিরিক্ত তথ্যের জন্য, tfrs.layers.embedding.TPUEmbedding
স্তরের API ডকুমেন্টেশন, সেইসাথে tf.tpu.experimental.embedding.TableConfig
এবং tf.tpu.experimental.embedding.FeatureConfig
ডক্স দেখুন। tf.distribute.TPUSstrategy-এর tf.distribute.TPUStrategy
জন্য, ডিস্ট্রিবিউটেড ট্রেনিং গাইড এবং ইউজ TPUs গাইড দেখুন। আপনি যদি TPUStrategy
থেকে TPUEstimator
এ স্থানান্তরিত হন, TPU মাইগ্রেশন গাইডটি দেখুন।
সেটআপ
TensorFlow সুপারিশকারী ইনস্টল করে এবং কিছু প্রয়োজনীয় প্যাকেজ আমদানি করে শুরু করুন:
pip install tensorflow-recommenders
import tensorflow as tf
import tensorflow.compat.v1 as tf1
# TPUEmbedding layer is not part of TensorFlow.
import tensorflow_recommenders as tfrs
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/requests/__init__.py:104: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (2.3.0)/charset_normalizer (2.0.11) doesn't match a supported version! RequestsDependencyWarning)
এবং প্রদর্শনের উদ্দেশ্যে একটি সাধারণ ডেটাসেট প্রস্তুত করুন:
features = [[1., 1.5]]
embedding_features_indices = [[0, 0], [0, 1]]
embedding_features_values = [0, 5]
labels = [[0.3]]
eval_features = [[4., 4.5]]
eval_embedding_features_indices = [[0, 0], [0, 1]]
eval_embedding_features_values = [4, 3]
eval_labels = [[0.8]]
টেনসরফ্লো 1: টিপিইউ-এ টিপিইউইস্টিমেটর সহ ট্রেন এম্বেডিং
TensorFlow 1-এ, আপনি tf.compat.v1.tpu.experimental.embedding_column
API ব্যবহার করে TPU এম্বেডিং সেট আপ করেন এবং tf.compat.v1.estimator.tpu.TPUEstimator দিয়ে tf.compat.v1.estimator.tpu.TPUEstimator
তে মডেলটিকে প্রশিক্ষণ/মূল্যায়ন করেন।
ইনপুটগুলি টিপিইউ এম্বেডিং টেবিলের জন্য শূন্য থেকে শব্দভান্ডারের আকার পর্যন্ত পূর্ণসংখ্যা। tf.feature_column.categorical_column_with_identity
দিয়ে শ্রেণীবদ্ধ আইডিতে ইনপুট এনকোডিং দিয়ে শুরু করুন। key
প্যারামিটারের জন্য "sparse_feature"
ব্যবহার করুন, যেহেতু ইনপুট বৈশিষ্ট্যগুলি পূর্ণসংখ্যা-মূল্যবান, যখন num_buckets
হল এম্বেডিং টেবিলের জন্য শব্দভান্ডারের আকার ( 10
)৷
embedding_id_column = (
tf1.feature_column.categorical_column_with_identity(
key="sparse_feature", num_buckets=10))
এর পরে, স্পার্স ক্যাটাগরিকাল ইনপুটগুলিকে tpu.experimental.embedding_column
সহ একটি ঘন উপস্থাপনায় রূপান্তর করুন, যেখানে dimension
হল এমবেডিং টেবিলের প্রস্থ। এটি প্রতিটি num_buckets
এর জন্য একটি এমবেডিং ভেক্টর সংরক্ষণ করবে।
embedding_column = tf1.tpu.experimental.embedding_column(
embedding_id_column, dimension=5)
এখন, tf.estimator.tpu.experimental.EmbeddingConfigSpec এর মাধ্যমে tf.estimator.tpu.experimental.EmbeddingConfigSpec
নির্দিষ্ট এমবেডিং কনফিগারেশন সংজ্ঞায়িত করুন। আপনি এটিকে পরে tf.estimator.tpu.TPUEstimator
এ একটি embedding_config_spec
প্যারামিটার হিসেবে পাঠাবেন।
embedding_config_spec = tf1.estimator.tpu.experimental.EmbeddingConfigSpec(
feature_columns=(embedding_column,),
optimization_parameters=(
tf1.tpu.experimental.AdagradParameters(0.05)))
পরবর্তী, একটি TPUEstimator
ব্যবহার করতে, সংজ্ঞায়িত করুন:
- প্রশিক্ষণ ডেটার জন্য একটি ইনপুট ফাংশন
- মূল্যায়ন ডেটার জন্য একটি মূল্যায়ন ইনপুট ফাংশন
-
TPUEstimator
নির্দেশ দেওয়ার জন্য একটি মডেল ফাংশন কীভাবে প্রশিক্ষণ অপটি বৈশিষ্ট্য এবং লেবেলগুলির সাথে সংজ্ঞায়িত করা হয়
def _input_fn(params):
dataset = tf1.data.Dataset.from_tensor_slices((
{"dense_feature": features,
"sparse_feature": tf1.SparseTensor(
embedding_features_indices,
embedding_features_values, [1, 2])},
labels))
dataset = dataset.repeat()
return dataset.batch(params['batch_size'], drop_remainder=True)
def _eval_input_fn(params):
dataset = tf1.data.Dataset.from_tensor_slices((
{"dense_feature": eval_features,
"sparse_feature": tf1.SparseTensor(
eval_embedding_features_indices,
eval_embedding_features_values, [1, 2])},
eval_labels))
dataset = dataset.repeat()
return dataset.batch(params['batch_size'], drop_remainder=True)
def _model_fn(features, labels, mode, params):
embedding_features = tf1.keras.layers.DenseFeatures(embedding_column)(features)
concatenated_features = tf1.keras.layers.Concatenate(axis=1)(
[embedding_features, features["dense_feature"]])
logits = tf1.layers.Dense(1)(concatenated_features)
loss = tf1.losses.mean_squared_error(labels=labels, predictions=logits)
optimizer = tf1.train.AdagradOptimizer(0.05)
optimizer = tf1.tpu.CrossShardOptimizer(optimizer)
train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step())
return tf1.estimator.tpu.TPUEstimatorSpec(mode, loss=loss, train_op=train_op)
এই ফাংশনগুলিকে সংজ্ঞায়িত করে, একটি tf.distribute.cluster_resolver.TPUClusterResolver
তৈরি করুন যা ক্লাস্টার তথ্য প্রদান করে, এবং একটি tf.compat.v1.estimator.tpu.RunConfig
অবজেক্ট।
আপনার সংজ্ঞায়িত মডেল ফাংশনের সাথে, আপনি এখন একটি TPUEstimator
তৈরি করতে পারেন। এখানে, আপনি চেকপয়েন্ট সঞ্চয় বাদ দিয়ে প্রবাহকে সহজ করবেন। তারপর, আপনি TPUEstimator
এর প্রশিক্ষণ এবং মূল্যায়ন উভয়ের জন্য ব্যাচের আকার নির্দিষ্ট করবেন।
cluster_resolver = tf1.distribute.cluster_resolver.TPUClusterResolver(tpu='')
print("All devices: ", tf1.config.list_logical_devices('TPU'))
All devices: []
tpu_config = tf1.estimator.tpu.TPUConfig(
iterations_per_loop=10,
per_host_input_for_training=tf1.estimator.tpu.InputPipelineConfig
.PER_HOST_V2)
config = tf1.estimator.tpu.RunConfig(
cluster=cluster_resolver,
save_checkpoints_steps=None,
tpu_config=tpu_config)
estimator = tf1.estimator.tpu.TPUEstimator(
model_fn=_model_fn, config=config, train_batch_size=8, eval_batch_size=8,
embedding_config_spec=embedding_config_spec)
WARNING:tensorflow:Estimator's model_fn (<function _model_fn at 0x7eff1dbf4ae8>) includes params argument, but params are not passed to Estimator. WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpc68an8jx INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpc68an8jx', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': None, '_session_config': allow_soft_placement: true cluster_def { job { name: "worker" tasks { key: 0 value: "10.240.1.2:8470" } } } isolate_session_state: true , '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': None, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({'worker': ['10.240.1.2:8470']}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': 'grpc://10.240.1.2:8470', '_evaluation_master': 'grpc://10.240.1.2:8470', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1, '_tpu_config': TPUConfig(iterations_per_loop=10, num_shards=None, num_cores_per_replica=None, per_host_input_for_training=3, tpu_job_name=None, initial_infeed_sleep_secs=None, input_partition_dims=None, eval_training_input_configuration=2, experimental_host_call_every_n_steps=1, experimental_allow_per_host_v2_parallel_get_next=False, experimental_feed_hook=None), '_cluster': <tensorflow.python.distribute.cluster_resolver.tpu.tpu_cluster_resolver.TPUClusterResolver object at 0x7eff1dbfa2b0>} INFO:tensorflow:_TPUContext: eval_on_tpu True
মডেল প্রশিক্ষণ শুরু করতে TPUEstimator.train
এ কল করুন:
estimator.train(_input_fn, steps=1)
INFO:tensorflow:Querying Tensorflow master (grpc://10.240.1.2:8470) for TPU system metadata. INFO:tensorflow:Found TPU system: INFO:tensorflow:*** Num TPU Cores: 8 INFO:tensorflow:*** Num TPU Workers: 1 INFO:tensorflow:*** Num TPU Cores Per Worker: 8 INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, -1, -3018931587863375246) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 1249032734884062775) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, -3881759543008185868) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 17179869184, -3421771184935649663) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 17179869184, 8872583169621331661) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 17179869184, -1222373804129613329) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 17179869184, 6258068298163390748) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 17179869184, 5190265587768274342) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 17179869184, 3073578684150069836) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 17179869184, 2071242092327503173) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, -1319360343564144287) WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version. Instructions for updating: Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts. INFO:tensorflow:Calling model_fn. WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/tpu/feature_column_v2.py:479: IdentityCategoricalColumn._num_buckets (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version. Instructions for updating: The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead. INFO:tensorflow:Querying Tensorflow master (grpc://10.240.1.2:8470) for TPU system metadata. INFO:tensorflow:Found TPU system: INFO:tensorflow:*** Num TPU Cores: 8 INFO:tensorflow:*** Num TPU Workers: 1 INFO:tensorflow:*** Num TPU Cores Per Worker: 8 INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, -1, -3018931587863375246) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 1249032734884062775) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, -3881759543008185868) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 17179869184, -3421771184935649663) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 17179869184, 8872583169621331661) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 17179869184, -1222373804129613329) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 17179869184, 6258068298163390748) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 17179869184, 5190265587768274342) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 17179869184, 3073578684150069836) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 17179869184, 2071242092327503173) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, -1319360343564144287) WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/adagrad.py:77: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version. Instructions for updating: Call initializer instance with the dtype argument instead of passing it to the constructor INFO:tensorflow:Bypassing TPUEstimator hook INFO:tensorflow:Done calling model_fn. INFO:tensorflow:TPU job name worker INFO:tensorflow:Graph was finalized. INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/tpu/tpu_estimator.py:758: Variable.load (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version. Instructions for updating: Prefer Variable.assign which has equivalent behavior in 2.X. INFO:tensorflow:Initialized dataset iterators in 0 seconds INFO:tensorflow:Installing graceful shutdown hook. INFO:tensorflow:Creating heartbeat manager for ['/job:worker/replica:0/task:0/device:CPU:0'] INFO:tensorflow:Configuring worker heartbeat: shutdown_mode: WAIT_FOR_COORDINATOR INFO:tensorflow:Init TPU system INFO:tensorflow:Initialized TPU in 9 seconds INFO:tensorflow:Starting infeed thread controller. INFO:tensorflow:Starting outfeed thread controller. INFO:tensorflow:Enqueue next (1) batch(es) of data to infeed. INFO:tensorflow:Dequeue next (1) batch(es) of data from outfeed. INFO:tensorflow:Outfeed finished for iteration (0, 0) INFO:tensorflow:loss = 0.5212165, step = 1 INFO:tensorflow:Stop infeed thread controller INFO:tensorflow:Shutting down InfeedController thread. INFO:tensorflow:InfeedController received shutdown signal, stopping. INFO:tensorflow:Infeed thread finished, shutting down. INFO:tensorflow:infeed marked as finished INFO:tensorflow:Stop output thread controller INFO:tensorflow:Shutting down OutfeedController thread. INFO:tensorflow:OutfeedController received shutdown signal, stopping. INFO:tensorflow:Outfeed thread finished, shutting down. INFO:tensorflow:outfeed marked as finished INFO:tensorflow:Shutdown TPU system. INFO:tensorflow:Loss for final step: 0.5212165. INFO:tensorflow:training_loop marked as finished <tensorflow_estimator.python.estimator.tpu.tpu_estimator.TPUEstimator at 0x7eff1dbfa7b8>
তারপর, মূল্যায়ন ডেটা ব্যবহার করে মডেলটি মূল্যায়ন করতে TPUEstimator.evaluate
কল করুন:
estimator.evaluate(_eval_input_fn, steps=1)
INFO:tensorflow:Could not find trained model in model_dir: /tmp/tmpc68an8jx, running initialization to evaluate. INFO:tensorflow:Calling model_fn. INFO:tensorflow:Querying Tensorflow master (grpc://10.240.1.2:8470) for TPU system metadata. INFO:tensorflow:Found TPU system: INFO:tensorflow:*** Num TPU Cores: 8 INFO:tensorflow:*** Num TPU Workers: 1 INFO:tensorflow:*** Num TPU Cores Per Worker: 8 INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, -1, -3018931587863375246) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 1249032734884062775) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, -3881759543008185868) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 17179869184, -3421771184935649663) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 17179869184, 8872583169621331661) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 17179869184, -1222373804129613329) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 17179869184, 6258068298163390748) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 17179869184, 5190265587768274342) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 17179869184, 3073578684150069836) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 17179869184, 2071242092327503173) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, -1319360343564144287) WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/tpu/tpu_estimator.py:3406: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version. Instructions for updating: Deprecated in favor of operator or tf.math.divide. INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Starting evaluation at 2022-02-05T13:21:42 INFO:tensorflow:TPU job name worker INFO:tensorflow:Graph was finalized. INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Init TPU system INFO:tensorflow:Initialized TPU in 11 seconds INFO:tensorflow:Starting infeed thread controller. INFO:tensorflow:Starting outfeed thread controller. INFO:tensorflow:Initialized dataset iterators in 0 seconds INFO:tensorflow:Enqueue next (1) batch(es) of data to infeed. INFO:tensorflow:Dequeue next (1) batch(es) of data from outfeed. INFO:tensorflow:Outfeed finished for iteration (0, 0) INFO:tensorflow:Evaluation [1/1] INFO:tensorflow:Stop infeed thread controller INFO:tensorflow:Shutting down InfeedController thread. INFO:tensorflow:InfeedController received shutdown signal, stopping. INFO:tensorflow:Infeed thread finished, shutting down. INFO:tensorflow:infeed marked as finished INFO:tensorflow:Stop output thread controller INFO:tensorflow:Shutting down OutfeedController thread. INFO:tensorflow:OutfeedController received shutdown signal, stopping. INFO:tensorflow:Outfeed thread finished, shutting down. INFO:tensorflow:outfeed marked as finished INFO:tensorflow:Shutdown TPU system. INFO:tensorflow:Inference Time : 12.50468s INFO:tensorflow:Finished evaluation at 2022-02-05-13:21:54 INFO:tensorflow:Saving dict for global step 1: global_step = 1, loss = 36.28813 INFO:tensorflow:evaluation_loop marked as finished {'loss': 36.28813, 'global_step': 1}
টেনসরফ্লো 2: টিপিইউ স্ট্র্যাটেজি সহ টিপিইউতে এম্বেডিং প্রশিক্ষণ দিন
TensorFlow 2-এ, TPU কর্মীদের প্রশিক্ষণ দিতে, মডেল সংজ্ঞা এবং প্রশিক্ষণ/মূল্যায়নের জন্য কেরাস API-এর সাথে tf.distribute.TPUStrategy
ব্যবহার করুন। (Keras Model.fit এবং একটি কাস্টম প্রশিক্ষণ লুপ ( tf.function
এবং tf.GradientTape
) প্রশিক্ষণের আরও উদাহরণের জন্য TPUs নির্দেশিকা ব্যবহার করুন।)
যেহেতু রিমোট ক্লাস্টারের সাথে সংযোগ করতে এবং টিপিইউ কর্মীদের আরম্ভ করার জন্য আপনাকে কিছু প্রারম্ভিক কাজ সম্পাদন করতে হবে, তাই ক্লাস্টারের তথ্য প্রদান করতে এবং ক্লাস্টারের সাথে সংযোগ করতে একটি TPUClusterResolver
তৈরি করে শুরু করুন। ( TPUs ব্যবহার করুন গাইডের TPU প্রারম্ভিক বিভাগে আরও জানুন।)
cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='')
tf.config.experimental_connect_to_cluster(cluster_resolver)
tf.tpu.experimental.initialize_tpu_system(cluster_resolver)
print("All devices: ", tf.config.list_logical_devices('TPU'))
INFO:tensorflow:Clearing out eager caches INFO:tensorflow:Clearing out eager caches INFO:tensorflow:Initializing the TPU system: grpc://10.240.1.2:8470 INFO:tensorflow:Initializing the TPU system: grpc://10.240.1.2:8470 INFO:tensorflow:Finished initializing TPU system. INFO:tensorflow:Finished initializing TPU system. All devices: [LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:0', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:1', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:2', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:3', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:4', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:5', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:6', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:7', device_type='TPU')]
এর পরে, আপনার ডেটা প্রস্তুত করুন। এটি টেনসরফ্লো 1 উদাহরণে আপনি কীভাবে একটি ডেটাসেট তৈরি করেছেন তার অনুরূপ, ডেটাসেট ফাংশনটি এখন প্যারাম params
পরিবর্তে একটি tf.distribute.InputContext
অবজেক্ট পাস করা হয়েছে। আপনি স্থানীয় ব্যাচের আকার নির্ধারণ করতে এই বস্তুটি ব্যবহার করতে পারেন (এবং এই পাইপলাইনটি কোন হোস্টের জন্য, যাতে আপনি আপনার ডেটা সঠিকভাবে ভাগ করতে পারেন)।
-
tfrs.layers.embedding.TPUEmbedding
API ব্যবহার করার সময়,Dataset.batch
এর সাথে ডেটাসেট ব্যাচ করার সময়drop_remainder=True
বিকল্পটি অন্তর্ভুক্ত করা গুরুত্বপূর্ণ, যেহেতুTPUEmbedding
জন্য একটি নির্দিষ্ট ব্যাচের আকার প্রয়োজন। - উপরন্তু, একই ব্যাচের আকার অবশ্যই মূল্যায়ন এবং প্রশিক্ষণের জন্য ব্যবহার করতে হবে যদি তারা একই ডিভাইসের সেটে সংঘটিত হয়।
- পরিশেষে, আপনাকে
tf.keras.utils.experimental.DatasetCreator
ব্যবহার করতে হবে বিশেষ ইনপুট বিকল্পের সাথে—experimental_fetch_to_device=False
—intf.distribute.InputOptions
(যা কৌশল-নির্দিষ্ট কনফিগারেশন ধারণ করে)। এটি নীচে প্রদর্শিত হয়:
global_batch_size = 8
def _input_dataset(context: tf.distribute.InputContext):
dataset = tf.data.Dataset.from_tensor_slices((
{"dense_feature": features,
"sparse_feature": tf.SparseTensor(
embedding_features_indices,
embedding_features_values, [1, 2])},
labels))
dataset = dataset.shuffle(10).repeat()
dataset = dataset.batch(
context.get_per_replica_batch_size(global_batch_size),
drop_remainder=True)
return dataset.prefetch(2)
def _eval_dataset(context: tf.distribute.InputContext):
dataset = tf.data.Dataset.from_tensor_slices((
{"dense_feature": eval_features,
"sparse_feature": tf.SparseTensor(
eval_embedding_features_indices,
eval_embedding_features_values, [1, 2])},
eval_labels))
dataset = dataset.repeat()
dataset = dataset.batch(
context.get_per_replica_batch_size(global_batch_size),
drop_remainder=True)
return dataset.prefetch(2)
input_options = tf.distribute.InputOptions(
experimental_fetch_to_device=False)
input_dataset = tf.keras.utils.experimental.DatasetCreator(
_input_dataset, input_options=input_options)
eval_dataset = tf.keras.utils.experimental.DatasetCreator(
_eval_dataset, input_options=input_options)
এরপরে, একবার ডেটা প্রস্তুত হয়ে গেলে, আপনি একটি TPUStrategy
তৈরি করবেন এবং এই কৌশলটির ( Strategy.scope
) সুযোগের অধীনে একটি মডেল, মেট্রিক্স এবং একটি অপ্টিমাইজার সংজ্ঞায়িত করবেন।
আপনাকে steps_per_execution
এ Model.compile
এর জন্য একটি নম্বর বাছাই করা উচিত কারণ এটি প্রতিটি tf.function
কলের সময় চালানোর জন্য ব্যাচের সংখ্যা নির্দিষ্ট করে এবং কার্যক্ষমতার জন্য গুরুত্বপূর্ণ। এই যুক্তিটি TPUEstimator
এ ব্যবহৃত iterations_per_loop
এর অনুরূপ।
tf.tpu.experimental.embedding_column
(এবং tf.tpu.experimental.shared_embedding_column
) এর মাধ্যমে TensorFlow 1 এ যে বৈশিষ্ট্যগুলি এবং টেবিল কনফিগারেশন নির্দিষ্ট করা হয়েছিল তা সরাসরি কনফিগারেশন অবজেক্টের একটি জোড়ার মাধ্যমে TensorFlow 2-এ নির্দিষ্ট করা যেতে পারে:
(আরো বিস্তারিত জানার জন্য সংশ্লিষ্ট API ডকুমেন্টেশন পড়ুন।)
strategy = tf.distribute.TPUStrategy(cluster_resolver)
with strategy.scope():
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)
dense_input = tf.keras.Input(shape=(2,), dtype=tf.float32, batch_size=global_batch_size)
sparse_input = tf.keras.Input(shape=(), dtype=tf.int32, batch_size=global_batch_size)
embedded_input = tfrs.layers.embedding.TPUEmbedding(
feature_config=tf.tpu.experimental.embedding.FeatureConfig(
table=tf.tpu.experimental.embedding.TableConfig(
vocabulary_size=10,
dim=5,
initializer=tf.initializers.TruncatedNormal(mean=0.0, stddev=1)),
name="sparse_input"),
optimizer=optimizer)(sparse_input)
input = tf.keras.layers.Concatenate(axis=1)([dense_input, embedded_input])
result = tf.keras.layers.Dense(1)(input)
model = tf.keras.Model(inputs={"dense_feature": dense_input, "sparse_feature": sparse_input}, outputs=result)
model.compile(optimizer, "mse", steps_per_execution=10)
INFO:tensorflow:Found TPU system: INFO:tensorflow:Found TPU system: INFO:tensorflow:*** Num TPU Cores: 8 INFO:tensorflow:*** Num TPU Cores: 8 INFO:tensorflow:*** Num TPU Workers: 1 INFO:tensorflow:*** Num TPU Workers: 1 INFO:tensorflow:*** Num TPU Cores Per Worker: 8 INFO:tensorflow:*** Num TPU Cores Per Worker: 8 INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 0, 0) INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 0, 0)
এর সাথে, আপনি প্রশিক্ষণ ডেটাসেটের সাথে মডেলটিকে প্রশিক্ষণ দিতে প্রস্তুত:
model.fit(input_dataset, epochs=5, steps_per_epoch=10)
Epoch 1/5 10/10 [==============================] - 2s 164ms/step - loss: 0.4005 Epoch 2/5 10/10 [==============================] - 0s 3ms/step - loss: 0.0036 Epoch 3/5 10/10 [==============================] - 0s 3ms/step - loss: 3.0932e-05 Epoch 4/5 10/10 [==============================] - 0s 3ms/step - loss: 2.5767e-07 Epoch 5/5 10/10 [==============================] - 0s 3ms/step - loss: 2.1366e-09 <keras.callbacks.History at 0x7efd8c461c18>
অবশেষে, মূল্যায়ন ডেটাসেট ব্যবহার করে মডেলটি মূল্যায়ন করুন:
model.evaluate(eval_dataset, steps=1, return_dict=True)
1/1 [==============================] - 1s 1s/step - loss: 15.3952 {'loss': 15.395216941833496}
পরবর্তী পদক্ষেপ
API ডক্সে TPU-নির্দিষ্ট এম্বেডিং সেট আপ সম্পর্কে আরও জানুন:
-
tfrs.layers.embedding.TPUEmbedding
: বিশেষ করে বৈশিষ্ট্য এবং টেবিল কনফিগারেশন সম্পর্কে, অপ্টিমাইজার সেট করা, একটি মডেল তৈরি করা (Keras ফাংশনাল API ব্যবহার করে বা সাবক্লাসিংtf.keras.Model
এর মাধ্যমে), প্রশিক্ষণ/মূল্যায়ন, এবংtf.saved_model
সাথে মডেল পরিবেশন করা -
tf.tpu.experimental.embedding.TableConfig
-
tf.tpu.experimental.embedding.FeatureConfig
TensorFlow 2-এ TPUStrategy
সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি বিবেচনা করুন:
- নির্দেশিকা: TPUs ব্যবহার করুন (tf.distribute.TPUSstrategy সহ Keras
Model.fit
কাস্টম ট্রেনিং লুপের সাথে প্রশিক্ষণ কভার করুন, সেইসাথেtf.distribute.TPUStrategy
এর সাথে পারফরম্যান্স উন্নত করারtf.function
) - গাইড: TensorFlow এর সাথে প্রশিক্ষণ বিতরণ করা হয়েছে
- গাইড: TPUEstimator থেকে TPUStrategy এ স্থানান্তর করুন ।
আপনার প্রশিক্ষণ কাস্টমাইজ করার বিষয়ে আরও জানতে, পড়ুন:
TPUs—মেশিন লার্নিংয়ের জন্য Google-এর বিশেষ ASICs—Google Colab , TPU Research Cloud এবং Cloud TPU-এর মাধ্যমে পাওয়া যায়।