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

গ্রেপলারের সাথে টেনসরফ্লো গ্রাফ অপ্টিমাইজেশন

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

ওভারভিউ

টেনসরফ্লো গণনা সম্পাদন করতে গ্রাফ এবং আগ্রহী দুটি কার্যকর ব্যবহার করে। একটি tf.Graph tf.Operation অবজেক্ট (অপস) এর একটি সেট থাকে যা গণনা এবং tf.Tensor অবজেক্টের ইউনিটগুলি উপস্থাপন করে যা ops এর মধ্যে প্রবাহিত ডেটার ইউনিটগুলির প্রতিনিধিত্ব করে।

টানসরফ্লো রানটাইম-এ গ্রেপলার হ'ল ডিফল্ট গ্রাফ অপ্টিমাইজেশন সিস্টেম। আন্তঃ-পদ্ধতিগত অপ্টিমাইজেশানগুলি সক্ষম করার জন্য tf.function গ্রাফের সরলীকরণ এবং অন্যান্য উচ্চ-স্তরের অপ্টিমাইজেশনের মাধ্যমে আপনার উচ্চ-স্তরের অপ্টিমাইজেশনের মাধ্যমে আপনার টেনসরফ্লো গণনাগুলির কার্যকারিতা উন্নত করতে গ্রাফ মোডে ( tf.function মধ্যে) অনুকূলকরণ প্রয়োগ করে tf.function tf.Graph . tf.Graph ডিভাইস পিক মেমরির ব্যবহার হ্রাস করে এবং গণনা সংস্থানগুলিতে গ্রাফ নোডগুলির ম্যাপিংকে অনুকূলিত করে হার্ডওয়্যার ব্যবহারের উন্নতি করে।

আপনার tf.Graph অপ্টিমাইজেশনের উপর সূক্ষ্ম নিয়ন্ত্রণের জন্য tf.config.optimizer.set_experimental_options() ব্যবহার করুন।

উপলব্ধ গ্রাফ অপ্টিমাইজার

MetaOptimizer নামে পরিচিত একটি শীর্ষ স্তরের ড্রাইভারের মাধ্যমে গ্রাফ অপ্টিমাইজেশন সম্পাদন করে। নিম্নলিখিত গ্রাফ অপ্টিমাইজারগুলি টেনসরফ্লো সহ উপলব্ধ:

  • কনস্ট্যান্ট ফোল্ডিং অপটিমাইজার - গ্রাফের ধ্রুবক নোডগুলি ভাঁজ করে যখন সম্ভব তখন টেনারগুলির মান স্থির করে এবং ধ্রুবকগুলি ব্যবহার করে ফলাফলটি কার্যকর করে।
  • পাটিগণিত অপ্টিমাইজার - সাধারণ সুপ্রেসপ্রেসনগুলি মুছে ফেলে এবং পাটিগণিতের বিবৃতি সরল করে গণিতের ক্রিয়াকলাপকে সহজতর করে।
  • লেআউট অপ্টিমাইজার - আরও দক্ষতার সাথে কনভোলশনের মতো ডেটা ফর্ম্যাট নির্ভর অপারেশনগুলি সম্পাদন করতে টেনসর লেআউটগুলি অনুকূল করে।
  • রিম্যাপার অপটিমাইজার - সাধারণভাবে ঘটমান সাবোগ্রাফ্টগুলি অপ্টিমাইজড ফিউজড মোনোলিথিক কার্নেলগুলি দিয়ে প্রতিস্থাপিত করে অধিকতর দক্ষ প্রয়োগে সাবগ্রাফগুলি পুনরায় সেট করে।
  • মেমোরি অপ্টিমাইজার - প্রতিটি ক্রিয়াকলাপের জন্য পিক মেমরির ব্যবহারটি পরীক্ষা করার জন্য গ্রাফটি বিশ্লেষণ করে এবং শিখর স্মৃতি ব্যবহার কমাতে সিপিইউতে জিপিইউ মেমরিটি অদলবদলের জন্য সিপিইউ-জিপিইউ মেমরি অনুলিপি অপারেশন সন্নিবেশ করে।
  • নির্ভরতা অপ্টিমাইজার - একটি মডেল পদক্ষেপের জন্য সমালোচনামূলক পথটি সংক্ষিপ্ত করতে বা অন্যান্য অপ্টিমাইজেশানকে সক্ষম করার জন্য নিয়ন্ত্রণ নির্ভরতাগুলি সরিয়ে দেয় বা পুনর্বিন্যাস করে। কার্যকরভাবে কোনও পরিচয় যেমন আইডেন্টিটি নয় এমন নোডগুলিও সরিয়ে দেয়।
  • ছাঁটাই অপটিমাইজার - ছাঁটা নোডগুলি যা গ্রাফ থেকে আউটপুটে কোনও প্রভাব ফেলে না। গ্রাফের আকার হ্রাস করতে এবং অন্যান্য গ্রেপলার পাসগুলিতে প্রসেসিংয়ে গতি বাড়ানোর জন্য এটি প্রথমে চালিত হয়।
  • ফাংশন অপ্টিমাইজার - একটি টেনসরফ্লো প্রোগ্রামের ফাংশন লাইব্রেরিটিকে অনুকূলিত করে এবং অন্যান্য আন্তঃ-পদ্ধতিগত অপ্টিমাইজেশানগুলি সক্ষম করতে ফাংশন সংস্থাগুলিকে ইনলাইন করে।
  • শেপ অপ্টিমাইজার - আকার এবং আকার সম্পর্কিত তথ্যের উপর কাজ করে এমন অনুচ্ছেদগুলিকে অনুকূল করে।
  • অটোপ্যারেনালাল অপটিমাইজার - ব্যাচের মাত্রাটি বিভাজন করে গ্রাফগুলিকে স্বয়ংক্রিয়ভাবে সমান্তরাল করে। এই অপ্টিমাইজারটি ডিফল্ট হিসাবে বন্ধ করা আছে।
  • লুপ অপ্টিমাইজার - লুপের বাইরে লুপ-ইনভেরিয়েন্ট সাবগ্রাফগুলি উত্তোলন করে এবং লুপগুলিতে অপ্রয়োজনীয় স্ট্যাক অপারেশনগুলি সরিয়ে গ্রাফ নিয়ন্ত্রণ প্রবাহকে অনুকূল করে তোলে। এছাড়াও স্থিতিশীলভাবে পরিচিত ট্রিপ গণনা সহ লুপগুলি অনুকূল করে এবং শর্তসাপেক্ষে স্ট্যাটিকালি পরিচিত মৃত শাখাগুলি সরিয়ে দেয়।
  • স্কোপযুক্ত বরাদ্দকারী অপ্টিমাইজার - ডেটা চলাচল হ্রাস করতে এবং কিছু ক্রিয়াকলাপ একীকরণের জন্য স্কোপড বরাদ্দকারীদের পরিচয় করিয়ে দেয়।
  • হোস্ট অপ্টিমাইজারে পিন করুন - সিপিইউতে ছোট অপারেশনগুলি অদলবদল করে। এই অপ্টিমাইজারটি ডিফল্ট হিসাবে বন্ধ করা আছে।
  • স্বতঃ মিশ্রিত নির্ভুলতা অপ্টিমাইজার - কর্মক্ষমতা উন্নত করতে প্রযোজ্য যেখানে ডেটা প্রকারকে ফ্লোট 16 এ রূপান্তর করে। বর্তমানে শুধুমাত্র জিপিইউতে প্রযোজ্য।
  • ডিবাগ স্ট্রিপার - ডিবাগিং অপারেশনের সাথে সম্পর্কিত tf.debugging.Assert , tf.debugging.check_numerics এবং গ্রাফ থেকে tf.debugging.Assert সম্পর্কিত নোডগুলি tf.print করে। এই অপ্টিমাইজারটি ডিফল্ট হিসাবে বন্ধ করা আছে।

সেটআপ

import numpy as np
import timeit
import traceback
import contextlib


import tensorflow as tf

সহজেই অপ্টিমাইজারের স্থিতিগুলিতে টগল করতে একটি প্রসঙ্গে পরিচালক তৈরি করুন।

@contextlib.contextmanager
def options(options):
  old_opts = tf.config.optimizer.get_experimental_options()
  tf.config.optimizer.set_experimental_options(options)
  try:
    yield
  finally:
    tf.config.optimizer.set_experimental_options(old_opts)

গ্রেপলারের সাথে এবং ছাড়া কার্যকরকরণের পারফরম্যান্সের তুলনা করুন

টেনসরফ্লো 2 এবং এর বাইরে ডিফল্টরূপে অধীর আগ্রহে কার্যকর করা হয়। ডিফল্ট এক্সিকিউশনটিকে গ্রাফ মোডে স্যুইচ করতে tf.function ব্যবহার করুন। উপরের গ্রাফ অপ্টিমাইজেশানগুলি প্রয়োগ করতে এবং সম্পাদন কার্যকারিতা উন্নত করতে গ্র্যাপলার পটভূমিতে স্বয়ংক্রিয়ভাবে চলে।

ধ্রুবক ভাঁজ অপ্টিমাইজার

প্রাথমিক উদাহরণ হিসাবে, কোনও ফাংশন বিবেচনা করুন যা ধ্রুবকগুলিতে অপারেশন করে এবং একটি আউটপুট দেয়।

def test_function_1():
  @tf.function
  def simple_function(input_arg):
    print('Tracing!')
    a = tf.constant(np.random.randn(2000,2000), dtype = tf.float32)
    c = a
    for n in range(50):
      c = c@a
    return tf.reduce_mean(c+input_arg)

  return simple_function

ধ্রুবক ভাঁজ অপ্টিমাইজারটি বন্ধ করুন এবং ফাংশনটি সম্পাদন করুন:

with options({'constant_folding': False}):
  print(tf.config.optimizer.get_experimental_options())
  simple_function = test_function_1()
  # Trace once
  x = tf.constant(2.2)
  simple_function(x)
  print("Vanilla execution:", timeit.timeit(lambda: simple_function(x), number = 1), "s")
{'constant_folding': False, 'disable_model_pruning': False, 'disable_meta_optimizer': False}
Tracing!
Vanilla execution: 0.0801323579999007 s

ধ্রুবক ভাঁজ অপ্টিমাইজার সক্ষম করুন এবং ফাংশন নির্বাহের একটি গতি-আপ পর্যবেক্ষণ করতে আবার ফাংশনটি কার্যকর করুন।

with options({'constant_folding': True}):
  print(tf.config.optimizer.get_experimental_options())
  simple_function = test_function_1()
  # Trace once
  x = tf.constant(2.2)
  simple_function(x)
  print("Constant folded execution:", timeit.timeit(lambda: simple_function(x), number = 1), "s")
{'constant_folding': True, 'disable_model_pruning': False, 'disable_meta_optimizer': False}
Tracing!
Constant folded execution: 0.0006300529998952697 s

ডিবাগ স্ট্রিপার অপ্টিমাইজার

একটি সাধারণ ফাংশন বিবেচনা করুন যা এর ইনপুট আর্গুমেন্টের সংখ্যার মানটি পরীক্ষা করে এবং এটি ফেরত দেয়।

def test_function_2():
  @tf.function
  def simple_func(input_arg):
    output = input_arg
    tf.debugging.check_numerics(output, "Bad!")
    return output
  return simple_func

প্রথমে ডিবাগ স্ট্রিপার অপ্টিমাইজারটি বন্ধ করে ফাংশনটি সম্পাদন করুন।

test_func = test_function_2()
p1 = tf.constant(float('inf'))
try:
  test_func(p1)
except tf.errors.InvalidArgumentError as e:
  traceback.print_exc(limit=2)
Traceback (most recent call last):
  File "<ipython-input-8-1ac473fdfbab>", line 4, in <module>
    test_func(p1)
  File "/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/eager/def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
tensorflow.python.framework.errors_impl.InvalidArgumentError: 2 root error(s) found.
  (0) Invalid argument:  Bad! : Tensor had Inf values
     [[node CheckNumerics (defined at <ipython-input-7-cbee1561c83e>:5) ]]
  (1) Invalid argument:  Bad! : Tensor had Inf values
     [[node CheckNumerics (defined at <ipython-input-7-cbee1561c83e>:5) ]]
     [[Identity/_4]]
0 successful operations.
0 derived errors ignored. [Op:__inference_simple_func_131]

Errors may have originated from an input operation.
Input Source operations connected to node CheckNumerics:
 input_arg (defined at <ipython-input-8-1ac473fdfbab>:4)

Input Source operations connected to node CheckNumerics:
 input_arg (defined at <ipython-input-8-1ac473fdfbab>:4)

Function call stack:
simple_func -> simple_func


tf.debugging.check_numerics একটি অকার্যকর যুক্তি ত্রুটি উত্থাপন করে কারণ test_func Inf আর্গুমেন্ট।

ডিবাগ স্ট্রিপার অপ্টিমাইজার সক্ষম করুন এবং আবার ফাংশন চালানো।

with options({'debug_stripper': True}):
  test_func2 = test_function_2()
  p1 = tf.constant(float('inf'))
  try:
    test_func2(p1)
  except tf.errors.InvalidArgumentError as e:
    traceback.print_exc(limit=2)

ডিবাগ স্ট্রিপার অপটিমাইজার গ্রাফ থেকে tf.debug.check_numerics নোড tf.debug.check_numerics করে এবং কোনও ত্রুটি না বাড়িয়ে ফাংশনটি কার্যকর করে।

সারসংক্ষেপ

টেনসরফ্লো রানটাইম কার্যকর করার আগে গ্রাফারকে স্বয়ংক্রিয়ভাবে গ্রাফগুলি অনুকূল করতে ব্যবহার করে pp বিভিন্ন গ্রাফ অপ্টিমাইজার সক্ষম বা অক্ষম করতে tf.config.optimizer.set_experimental_options ব্যবহার করুন।

গ্রেপলার সম্পর্কে আরও তথ্যের জন্য টেনসরফ্লো গ্রাফ অপটিমাইজেশন দেখুন