This page was translated by the Cloud Translation API.
Switch to English

টেনসরফ্লো প্রোফাইলার: প্রোফাইল মডেল পারফরম্যান্স

টেনসরফ্লো.অর্গ.এ দেখুন গুগল কোলাবে চালান গিটহাবের উত্স দেখুন

ওভারভিউ

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

সেটআপ

from datetime import datetime
from packaging import version

import os

টেনসরফ্লো প্রোফাইলারের জন্য টেনসরফ্লো এবং টেনসরবোর্ড ( >=2.2 ) এর সর্বশেষতম সংস্করণ প্রয়োজন।

pip install -U tensorboard_plugin_profile
WARNING: Skipping tensorflow as it is not installed.
WARNING: Skipping tensorboard as it is not installed.
[K     |████████████████████████████████| 517.1MB 31kB/s 
[K     |████████████████████████████████| 2.9MB 50.9MB/s 
[K     |████████████████████████████████| 1.1MB 61.2MB/s 
[K     |████████████████████████████████| 460kB 61.8MB/s 
[?25h
import tensorflow as tf

print("TensorFlow version: ", tf.__version__)
eababd5043

নিশ্চিত করুন যে টেনসরফ্লো জিপিইউতে অ্যাক্সেস করতে পারে।

device_name = tf.test.gpu_device_name()
if not device_name:
  raise SystemError('GPU device not found')
print('Found GPU at: {}'.format(device_name))
Found GPU at: /device:GPU:0

টেনসরবোর্ড কলব্যাক্স সহ একটি চিত্র শ্রেণিবদ্ধকরণ মডেলকে প্রশিক্ষণ দিন

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

প্রশিক্ষণ ডেটা আমদানি করার জন্য টেনসরফ্লো ডেটাসেট ব্যবহার করুন এবং প্রশিক্ষণ এবং পরীক্ষার সেটে বিভক্ত করুন।

import tensorflow_datasets as tfds
tfds.disable_progress_bar()
(ds_train, ds_test), ds_info = tfds.load(
    'mnist',
    split=['train', 'test'],
    shuffle_files=True,
    as_supervised=True,
    with_info=True,
)
WARNING:absl:Dataset mnist is hosted on GCS. It will automatically be downloaded to your
local data directory. If you'd instead prefer to read directly from our public
GCS bucket (recommended if you're running on GCP), you can instead set
data_dir=gs://tfds-data/datasets.


Downloading and preparing dataset mnist/3.0.0 (download: 11.06 MiB, generated: Unknown size, total: 11.06 MiB) to /root/tensorflow_datasets/mnist/3.0.0...
Dataset mnist downloaded and prepared to /root/tensorflow_datasets/mnist/3.0.0. Subsequent calls will reuse this data.

0 এবং 1 এর মধ্যে পিক্সেল মানগুলিকে সাধারন করে প্রশিক্ষণ এবং পরীক্ষার ডেটা প্রেরণ করুন।

def normalize_img(image, label):
  """Normalizes images: `uint8` -> `float32`."""
  return tf.cast(image, tf.float32) / 255., label

ds_train = ds_train.map(normalize_img)
ds_train = ds_train.batch(128)
ds_test = ds_test.map(normalize_img)
ds_test = ds_test.batch(128)

কেরাস ব্যবহার করে চিত্রের শ্রেণিবদ্ধকরণ মডেল তৈরি করুন।

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28, 1)),
  tf.keras.layers.Dense(128,activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(
    loss='sparse_categorical_crossentropy',
    optimizer=tf.keras.optimizers.Adam(0.001),
    metrics=['accuracy']
)

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

# Create a TensorBoard callback
logs = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S")

tboard_callback = tf.keras.callbacks.TensorBoard(log_dir = logs,
                                                 histogram_freq = 1,
                                                 profile_batch = '500,520')

model.fit(ds_train,
          epochs=2,
          validation_data=ds_test,
          callbacks = [tboard_callback])
Epoch 1/2
469/469 [==============================] - 11s 22ms/step - loss: 0.3684 - accuracy: 0.8981 - val_loss: 0.1971 - val_accuracy: 0.9436
Epoch 2/2
 50/469 [==>...........................] - ETA: 9s - loss: 0.2014 - accuracy: 0.9439WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/summary_ops_v2.py:1271: stop (from tensorflow.python.eager.profiler) is deprecated and will be removed after 2020-07-01.
Instructions for updating:
use `tf.profiler.experimental.stop` instead.

Warning:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/summary_ops_v2.py:1271: stop (from tensorflow.python.eager.profiler) is deprecated and will be removed after 2020-07-01.
Instructions for updating:
use `tf.profiler.experimental.stop` instead.

469/469 [==============================] - 11s 24ms/step - loss: 0.1685 - accuracy: 0.9525 - val_loss: 0.1376 - val_accuracy: 0.9595

<tensorflow.python.keras.callbacks.History at 0x7f23919a6a58>

মডেল প্রশিক্ষণের কর্মক্ষমতা প্রোফাইল করতে টেনসরফ্লো প্রোফাইলার ব্যবহার করুন

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

# Load the TensorBoard notebook extension.
%load_ext tensorboard

এই মডেলটির জন্য পারফরম্যান্স প্রোফাইলটি নীচের চিত্রের মতো।

# Launch TensorBoard and navigate to the Profile tab to view performance profile
%tensorboard --logdir=logs
<IPython.core.display.Javascript object>

প্রোফাইল ট্যাব ওভারভিউ পৃষ্ঠাটি খুলবে যা আপনাকে আপনার মডেল কর্মক্ষমতাটির একটি উচ্চ-স্তরের সারসংক্ষেপ দেখায়। ডানদিকে স্টেপ-টাইম গ্রাফটি দেখে আপনি দেখতে পাবেন যে মডেলটি অত্যন্ত ইনপুট আবদ্ধ (যেমন এটি ডেটা ইনপুট পাইপলাইনে অনেক সময় ব্যয় করে)। ওভারভিউ পৃষ্ঠাটি আপনার মডেল কর্মক্ষমতা অনুকূল করতে আপনার পরবর্তী পদক্ষেপগুলি অনুসরণ করতে পারে এমন পরামর্শগুলিরও প্রস্তাব দেয়।

ইনপুট পাইপলাইনে পারফরম্যান্সের বাধা কোথায় পাওয়া যায় তা বুঝতে, বামদিকে সরঞ্জাম ড্রপডাউন থেকে ট্রেস ভিউয়ারটি নির্বাচন করুন। ট্রেসিং ভিউয়ার আপনাকে প্রোফাইলের সময়কালে সিপিইউ এবং জিপিইউতে ঘটে যাওয়া বিভিন্ন ইভেন্টের একটি সময়রেখা দেখায়।

ট্রেস ভিউয়ারটি উল্লম্ব অক্ষগুলিতে একাধিক ইভেন্ট গ্রুপগুলি দেখায়। প্রতিটি ইভেন্ট গ্রুপে ট্রেস ইভেন্টে ভরাট একাধিক অনুভূমিক ট্র্যাক রয়েছে। ট্র্যাকটি থ্রেড বা জিপিইউ স্ট্রিমে সম্পাদিত ইভেন্টগুলির জন্য ইভেন্টের সময়রেখা। স্বতন্ত্র ইভেন্টগুলি টাইমলাইন ট্র্যাকগুলির রঙিন, আয়তক্ষেত্রাকার ব্লক। সময় বাম থেকে ডানে চলে আসে। কীবোর্ড শর্টকাট W (জুম ইন), S (জুম আউট), A (বাম স্ক্রোল) এবং D (ডানদিকে স্ক্রোল) ব্যবহার করে ট্রেস ইভেন্টগুলি নেভিগেট করুন।

একটি একক আয়তক্ষেত্র একটি ট্রেস ইভেন্টকে উপস্থাপন করে। ভাসমান সরঞ্জাম বারে মাউস কার্সার আইকনটি নির্বাচন করুন (বা কীবোর্ড শর্টকাট 1 ব্যবহার করুন) এবং এটি বিশ্লেষণ করতে ট্রেস ইভেন্টটি ক্লিক করুন। এটি ইভেন্টের তথ্য যেমন এর শুরু করার সময় এবং সময়কাল প্রদর্শন করবে।

ক্লিক করা ছাড়াও, আপনি ট্রেস ইভেন্টগুলির একটি গ্রুপ নির্বাচন করতে মাউসটি টানতে পারেন। এটি আপনাকে ইভেন্টের সংক্ষিপ্তসার সহ সেই অঞ্চলে সমস্ত ইভেন্টের একটি তালিকা দেবে। নির্বাচিত ইভেন্টগুলির সময়কাল পরিমাপ করতে M কী ব্যবহার করুন।

ট্রেস ইভেন্টগুলি থেকে সংগ্রহ করা হয়:

  • সিপিইউ: সিপিইউ ইভেন্টগুলি /host:CPU নামের ইভেন্ট ইভেন্টের অধীনে প্রদর্শিত হয়। প্রতিটি ট্র্যাক সিপিইউতে একটি থ্রেড উপস্থাপন করে। সিপিইউ ইভেন্টগুলির মধ্যে ইনপুট পাইপলাইন ইভেন্টগুলি, জিপিইউ অপারেশন (ওপেন) সময়সূচী ইভেন্টগুলি, সিপিইউ অপিপশন এক্সিকিউশন ইভেন্টস ইত্যাদি অন্তর্ভুক্ত include
  • জিপিইউ: জিপিইউ ইভেন্টগুলি /device:GPU: দ্বারা উপস্থাপিত ইভেন্ট গ্রুপের অধীনে প্রদর্শিত হয় /device:GPU: প্রতিটি ইভেন্ট গ্রুপ জিপিইউতে একটি স্ট্রিম উপস্থাপন করে।

ডিবাগ কর্মক্ষমতা বাধা

আপনার ইনপুট পাইপলাইনে পারফরম্যান্সের বাধাগুলি সনাক্ত করতে ট্রেস ভিউয়ারটি ব্যবহার করুন। নীচের চিত্রটি পারফরম্যান্স প্রোফাইলের একটি স্ন্যাপশট।

প্রোফাইলার_ট্রেস_ ভিউয়ার_আবাদ_আইপি

ইভেন্টের চিহ্নগুলি দেখে আপনি দেখতে পাবেন যে tf_data_iterator_get_next op চলাকালীন GPU নিষ্ক্রিয় রয়েছে। এই বিকল্পটি ইনপুট ডেটা প্রক্রিয়াকরণ এবং প্রশিক্ষণের জন্য এটি জিপিইউতে প্রেরণের জন্য দায়ী। থাম্বের একটি সাধারণ নিয়ম হিসাবে, ডিভাইসটি সর্বদা সক্রিয় রাখা ভাল (জিপিইউ / টিপিইউ) idea

ইনপুট পাইপলাইনটি অনুকূল করে tf.data API ব্যবহার করুন। এই ক্ষেত্রে, আসুন জিপিইউ প্রক্রিয়া করার জন্য সর্বদা ডেটা উপলব্ধ থাকে তা নিশ্চিত করার জন্য প্রশিক্ষণ ডেটাসেটটি ক্যাশে করে ডেটা প্রিফেচ করি। আপনার ইনপুট পাইপলাইনগুলি অনুকূল করতে tf.data ব্যবহারের আরও বিশদ জানতে এখানে দেখুন।

(ds_train, ds_test), ds_info = tfds.load(
    'mnist',
    split=['train', 'test'],
    shuffle_files=True,
    as_supervised=True,
    with_info=True,
)
ds_train = ds_train.map(normalize_img)
ds_train = ds_train.batch(128)
ds_train = ds_train.cache()
ds_train = ds_train.prefetch(tf.data.experimental.AUTOTUNE)
ds_test = ds_test.map(normalize_img)
ds_test = ds_test.batch(128)
ds_test = ds_test.cache()
ds_test = ds_test.prefetch(tf.data.experimental.AUTOTUNE)

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

model.fit(ds_train,
          epochs=2,
          validation_data=ds_test,
          callbacks = [tboard_callback])
Epoch 1/2
469/469 [==============================] - 10s 22ms/step - loss: 0.1194 - accuracy: 0.9658 - val_loss: 0.1116 - val_accuracy: 0.9680
Epoch 2/2
469/469 [==============================] - 1s 3ms/step - loss: 0.0918 - accuracy: 0.9740 - val_loss: 0.0979 - val_accuracy: 0.9712

<tensorflow.python.keras.callbacks.History at 0x7f23908762b0>

টেনসরবোর্ড পুনরায় আরম্ভ করুন এবং আপডেট ইনপুট পাইপলাইনের জন্য পারফরম্যান্স প্রোফাইলটি পর্যবেক্ষণ করতে প্রোফাইল ট্যাবটি খুলুন।

অনুকূলিত ইনপুট পাইপলাইন সহ মডেলটির জন্য পারফরম্যান্স প্রোফাইলটি নীচের চিত্রের মতো similar

%tensorboard --logdir=logs
Reusing TensorBoard on port 6006 (pid 750), started 0:00:12 ago. (Use '!kill 750' to kill it.)
<IPython.core.display.Javascript object>

ওভারভিউ পৃষ্ঠা থেকে আপনি দেখতে পাবেন যে ইনপুট স্টেপ সময় হিসাবে গড় পদক্ষেপের সময় হ্রাস পেয়েছে। স্টেপ-টাইম গ্রাফটিও ইঙ্গিত দেয় যে মডেলটি আর উচ্চ ইনপুট আবদ্ধ নয়। অনুকূলিত ইনপুট পাইপলাইনের সাহায্যে ট্রেস ইভেন্টগুলি পরীক্ষা করতে ট্রেস ভিউয়ারটি খুলুন।

প্রোফাইলার_ট্রেস_ ভিউয়ার_ভুড_চিপ

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

সারসংক্ষেপ

মডেল প্রশিক্ষণের কর্মক্ষমতা প্রোফাইল এবং ডিবাগ করতে টেনসরফ্লো প্রোফাইলার ব্যবহার করুন। টেনসরফ্লো প্রোফাইলারর সম্পর্কে আরও জানার জন্য প্রোফাইলার গাইডটি পড়ুন এবং টেনসরফ্লো ডেভ সামিট 2020 থেকে টিএফ 2 টকের পারফরম্যান্সের প্রোফাইলটি দেখুন।