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

পারফরম্যান্স টিপস

এই নথিটি টিএফডিএস-নির্দিষ্ট পারফরম্যান্স টিপস সরবরাহ করে। নোট করুন যে টিএফডিএস ডেটাসেটগুলি tf.data.Dataset গুলি হিসাবে tf.data.Dataset , তাই tf.data গাইডের পরামর্শ এখনও প্রযোজ্য।

বেঞ্চমার্ক ডেটাসেটস

যেকোন tf.data.Dataset অবজেক্টকে বেঞ্চমার্ক করতে tfds.core.benchmark(ds) ব্যবহার করুন।

ফলাফলগুলি স্বাভাবিক করার জন্য batch_size= ইঙ্গিত করার batch_size= নিশ্চিত করুন (উদাহরণস্বরূপ 100 batch_size= / সেকেন্ড>> 3200 পূর্ব / সেকেন্ড)।

ds = tfds.load('mnist', split='train').batch(32).prefetch()
# Display some benchmark statistics
tfds.core.benchmark(ds, batch_size=32)
# Second iteration is much faster, due to auto-caching
tfds.core.benchmark(ds, batch_size=32)

ছোট ডেটাসেট (<গিগাবাইট)

সমস্ত টিএফডিএস ডেটাসেটগুলি ডেটাতে TFRecord বিন্যাসে TFRecord করে। ছোট ডেটাসেটের জন্য (যেমন, মনিস্ট, সিফার, ...), .tfrecord থেকে পড়া উল্লেখযোগ্য ওভারহেড যুক্ত করতে পারে।

যেহেতু এই ডেটাসেটগুলি মেমরির সাথে খাপ খায় তাই ডেটাसेटকে ক্যাশে বা প্রি-লোড করে পারফরম্যান্সে উল্লেখযোগ্যভাবে উন্নতি করা সম্ভব। নোট করুন যে টিএফডিএস স্বয়ংক্রিয়ভাবে ছোট ডেটাসেটগুলিকে ক্যাশে করে (বিশদগুলির জন্য পরবর্তী বিভাগটি দেখুন)।

ডেটাসেট ক্যাচিং

এখানে একটি ডেটা পাইপলাইনের একটি উদাহরণ যা চিত্রগুলি স্বাভাবিক করার পরে ডেটাসেটকে স্পষ্টভাবে ক্যাশে করে।

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


ds, ds_info = tfds.load(
    'mnist',
    split='train',
    as_supervised=True,  # returns `(img, label)` instead of dict(image=, ...)
    with_info=True,
)
# Applying normalization before `ds.cache()` to re-use it.
# Note: Random transformations (e.g. images augmentations) should be applied
# after both `ds.cache()` (to avoid caching randomness) and `ds.batch()` (for
# vectorization [1]).
ds = ds.map(normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
ds = ds.cache()
# For true randomness, we set the shuffle buffer to the full dataset size.
ds = ds.shuffle(ds_info.splits['train'].num_examples)
# Batch after shuffling to get unique batches at each epoch.
ds = ds.batch(128)
ds = ds.prefetch(tf.data.experimental.AUTOTUNE)

এই ডেটাসেটের উপরে পুনরাবৃত্তি করার সময়, দ্বিতীয় পুনরাবৃত্তিটি ক্যাশিংয়ের জন্য প্রথম ধন্যবাদটির চেয়ে অনেক দ্রুত হবে।

অটো-ক্যাচিং

ডিফল্টরূপে, টিএফডিএস স্বয়ংক্রিয়ভাবে ডেটাসেটগুলি ক্যাশে করে যা নিম্নলিখিত সীমাবদ্ধতাগুলি পূরণ করে:

  • মোট ডেটাসেট আকার (সমস্ত বিভাজন) সংজ্ঞায়িত করা হয়েছে এবং <250 মাইবি
  • shuffle_files অক্ষম করা আছে, বা শুধুমাত্র একটি একক shuffle_files পঠিত

try_autocaching=False tfds.ReadConfig থেকে try_autocaching=False পাস করার মাধ্যমে অটো-ক্যাচিং থেকে বেরিয়ে আসা সম্ভব tfds.load কোনও নির্দিষ্ট ডেটাসেট অটো-ক্যাশে ব্যবহার করবে কিনা তা দেখতে ডেটাসেট ক্যাটালগ ডকুমেন্টেশনে একবার দেখুন।

একক টেনসর হিসাবে সম্পূর্ণ ডেটা লোড হচ্ছে

যদি আপনার ডেটাসেট মেমরির সাথে ফিট করে তবে আপনি একটি একক টেনসর বা নুমপি অ্যারে হিসাবে সম্পূর্ণ ডেটাসেটটি লোড করতে পারেন। একক tf.Tensor সমস্ত উদাহরণ ব্যাচ করতে batch_size=-1 সেট করে এটি করা সম্ভব। তারপর ব্যবহার tfds.as_numpy থেকে রুপান্তরের জন্য tf.Tensor করার np.array

(img_train, label_train), (img_test, label_test) = tfds.as_numpy(tfds.load(
    'mnist',
    split=['train', 'test'],
    batch_size=-1,
    as_supervised=True,
))

বড় ডেটাসেট

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

শিফেল এবং প্রশিক্ষণ

প্রশিক্ষণের সময়, ডেটাটি ভালভাবে বদলাতে গুরুত্বপূর্ণ; খারাপভাবে বদলানো ডেটার ফলে নিম্ন প্রশিক্ষণের নির্ভুলতা হতে পারে।

রেকর্ডগুলি ds.shuffle জন্য ds.shuffle ব্যবহার করার পাশাপাশি, আপনার একাধিক ফাইলগুলিতে শারদযুক্ত বৃহত্তর ডেটাসেটের জন্য ভাল shuffle_files=True আচরণ পেতে shuffle_files=True সেট করা উচিত। অন্যথায়, যুগগুলি একই ক্রমে শার্ডগুলি পড়বে এবং সুতরাং ডেটা সত্যই এলোমেলোভাবে করা হবে না।

ds = tfds.load('imagenet2012', split='train', shuffle_files=True)

অতিরিক্তভাবে, যখন shuffle_files=True , টিএফডিএস options.experimental_deterministic অক্ষম করে per ডিটারমিনিস্টিক tfds.ReadConfig , tfds.ReadConfig সাহায্যে এই বৈশিষ্ট্যটি অপ্ট-আউট করা সম্ভব: read_config.shuffle_seed সেট read_config.shuffle_seed বা read_config.options.experimental_deterministic ওভাররাইট করে read_config.options.experimental_deterministic

কর্মীদের জুড়ে আপনার ডেটা অটো-শার্ট করুন

একাধিক কর্মীদের প্রশিক্ষণ দেওয়ার সময়, আপনি input_context এর input_context আর্গুমেন্টটি ব্যবহার করতে পারেন input_context tfds.ReadConfig , যাতে প্রতিটি কর্মী ডেটার একটি উপসেট পড়বে।

input_context = tf.distribute.InputContext(
    input_pipeline_id=1,  # Worker id
    num_input_pipelines=4,  # Total number of workers
)
read_config = tfds.ReadConfig(
    input_context=input_context,
)
ds = tfds.load('dataset', split='train', read_config=read_config)

এটি সাবস্কিট এপিআই এর পরিপূরক। প্রথমে সাবপ্লিট এপিআই প্রয়োগ করা হয় ( train[:50%] পড়ার জন্য ফাইলের তালিকায় রূপান্তরিত হয়), তারপরে সেই ফাইলগুলিতে একটি ds.shard() op প্রয়োগ করা হয়। উদাহরণ: train[:50%] ব্যবহার করার সময় train[:50%] num_input_pipelines=2 , 2 জন কর্মীর প্রত্যেকটি 1/4 ডেটা পড়বে।

যখন shuffle_files=True , ফাইলগুলি এক শ্রমিকের মধ্যেই বদলে যায় তবে কর্মীদের জুড়ে নয়। প্রতিটি কর্মী যুগের মধ্যে ফাইলগুলির একই উপসেটটি পড়বেন।

দ্রুত চিত্রের ডিকোডিং

ডিফল্টরূপে টিএফডিএস স্বয়ংক্রিয়ভাবে চিত্রগুলি ডিকোড করে। তবে, এমন কিছু ক্ষেত্রে রয়েছে যেখানে tfds.decode.SkipDecoding সাহায্যে চিত্রের ডিকোডিং tfds.decode.SkipDecoding এবং ম্যানুয়ালি tf.io.decode_image op প্রয়োগ করতে আরও পারফরম্যান্স হতে পারে:

  • উদাহরণগুলি ফিল্টার করার পরে চিত্রগুলি ডিকোড করার জন্য ( ds.filter ) উদাহরণগুলি ফিল্টার করার সময়।
  • চিত্রগুলি ক্রপ করার সময় tf.image.decode_and_crop_jpeg ব্যবহার করতে।

উভয় উদাহরণের কোডটি ডিকোড গাইডে পাওয়া যায়।