সাহায্য Kaggle উপর TensorFlow সঙ্গে গ্রেট বেরিয়ার রিফ রক্ষা চ্যালেঞ্জ যোগদান

Grappler এর সাথে TensorFlow গ্রাফ অপটিমাইজেশন

TensorFlow.org-এ দেখুন GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

ওভারভিউ

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

গ্র্যাপলার হল টেনসরফ্লো রানটাইমে ডিফল্ট গ্রাফ অপ্টিমাইজেশান সিস্টেম। Grappler গ্রাফ মোড (মধ্যে মধ্যে অপ্টিমাইজেশন প্রযোজ্য tf.function ) গ্রাফ simplifications এবং এই ধরনের ফাংশন মৃতদেহ ইনলাইনিং আন্ত পদ্ধতিগত অপ্টিমাইজেশন সক্ষম করতে হিসাবে অন্যান্য উচ্চ পর্যায়ের অপ্টিমাইজেশন মাধ্যমে আপনার TensorFlow কম্পিউটেশন পারফরম্যান্সের উন্নতি করতে। অপ্টিমাইজ tf.Graph এছাড়াও ডিভাইস শিখর মেমোরি ব্যবহার হ্রাস করে এবং Compute সম্পদ গ্রাফ নোড ম্যাপিং নিখুঁত দ্বারা হার্ডওয়্যার হার্ডওয়্যার ব্যবহার উন্নত।

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

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

Grappler সঞ্চালিত নামক একটি টপ লেভেল চালক মাধ্যমে অপ্টিমাইজেশন গ্রাফ MetaOptimizer । নিম্নলিখিত গ্রাফ অপ্টিমাইজারগুলি TensorFlow-এর সাথে উপলব্ধ:

  • স্থায়ী ভাঁজ অপটিমাইজার - স্ট্যাটিক্যালি গ্রাফে ধ্রুবক নোড ভাঁজ দ্বারা যখন সম্ভব tensors মান infers এবং ধ্রুবক ব্যবহার ফলাফলের materializes।
  • পাটিগণিত অপটিমাইজার - সরলীকৃত গাণিতিক অপারেশন সাধারণ subexpressions দূর এবং গাণিতিক বিবৃতি সরল দ্বারা।
  • বিন্যাস অপটিমাইজার - সেরা অনুকূল রূপ টেন্সর যেমন convolutions যেমন ডেটা বিন্যাস নির্ভরশীল অপারেশন চালানো লেআউট আরো দক্ষতার সঙ্গে।
  • Remapper অপটিমাইজার - Remaps অপ্টিমাইজ নিলীন একশিলা কার্নেলের সাথে সাধারণভাবে occuring subgraphs প্রতিস্থাপন আরও দক্ষ বাস্তবায়নের সম্মুখের subgraphs।
  • স্মৃতি অপটিমাইজার - গ্রাফ CPU- র করতে GPU মেমরি সোয়াপিং শিখর মেমরি ব্যবহার কমাতে জন্য প্রতিটি অপারেশন এবং টিপে CPU- র-GPU মেমরিতে কপি অপারেশনের জন্য শিখর মেমোরি ব্যবহার পরিদর্শন বিশ্লেষণ।
  • নির্ভরতা অপটিমাইজার - মুছে ফেলা বা rearranges নিয়ন্ত্রণ নির্ভরতা একটি মডেল ধাপের জন্য জটিল পথ কমান বা অন্যান্য অপ্টিমাইজেশন সক্ষম করে। এছাড়াও নোডগুলিকে সরিয়ে দেয় যা কার্যকরভাবে নো-অপস যেমন আইডেন্টিটি।
  • কেঁটে সাফ অপটিমাইজার - আলুবোখারা নোড গ্রাফ থেকে আউটপুট কোনো প্রভাব আছে। এটি সাধারণত গ্রাফের আকার কমাতে এবং অন্যান্য গ্র্যাপলার পাসে প্রক্রিয়াকরণের গতি বাড়াতে প্রথমে চালানো হয়।
  • ফাংশন অপটিমাইজার - সেরা অনুকূল রূপ দেয় একটি TensorFlow প্রোগ্রামের ফাংশন গ্রন্থাগারের inlines অন্যান্য আন্ত পদ্ধতিগত অপ্টিমাইজেশন সক্ষম করতে মৃতদেহ কাজ করে।
  • আকৃতি অপটিমাইজার - সেরা অনুকূল রূপ subgraphs যে আকৃতি কাজ ও সম্পর্কিত তথ্য আকৃতি।
  • Autoparallel অপটিমাইজার - স্বয়ংক্রিয়ভাবে ব্যাচ মাত্রা বরাবর বিভাজন দ্বারা গ্রাফ parallelizes। এই অপ্টিমাইজার ডিফল্টরূপে বন্ধ করা হয়.
  • লুপ অপটিমাইজার - সেরা অনুকূল রূপ লুপ-পরিবর্তিত লুপ থেকে বের subgraphs উত্তোলন দ্বারা এবং loops মধ্যে অপ্রয়োজনীয় স্ট্যাক অপারেশন সরিয়ে গ্রাফ নিয়ন্ত্রণ প্রবাহ। এছাড়াও স্ট্যাটিকভাবে পরিচিত ট্রিপ গণনা সহ লুপগুলিকে অপ্টিমাইজ করে এবং শর্তসাপেক্ষে স্ট্যাটিকভাবে পরিচিত মৃত শাখাগুলি সরিয়ে দেয়।
  • Scoped বরাদ্দকরণ অপটিমাইজার - প্রবর্তন scoped allocators ডেটা স্থানান্তরণ কমাতে এবং কিছু অপারেশন সংহত করতে।
  • পিন হোস্ট অপটিমাইজার করুন - CPU- র সম্মুখের অদলবদল ছোট অপারেশন। এই অপ্টিমাইজার ডিফল্টরূপে বন্ধ করা হয়.
  • অটো মিশ্র স্পষ্টতা অপটিমাইজার - float16 রূপান্তর ধরনের তথ্য যেখানে প্রযোজ্য পারফরম্যান্সের উন্নতি করতে। বর্তমানে শুধুমাত্র GPU-তে প্রযোজ্য।
  • ডিবাগ নগ্ন - রেখাচিত্রমালা যেমন ডিবাগ অপারেশন এর সাথে সম্পর্কিত নোড tf.debugging.Assert , tf.debugging.check_numerics এবং 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)

Grappler সঙ্গে এবং ছাড়া মৃত্যুদন্ড কর্মক্ষমতা তুলনা

TensorFlow 2 এবং, executes পরলোক সাগ্রহে ডিফল্টরূপে। ব্যবহার করুন 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.0018392090000816097 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.0006749789999958011 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)
2021-09-22 20:34:55.871238: E tensorflow/core/kernels/check_numerics_op.cc:292] abnormal_detected_host @0x7f4878e00100 = {0, 1} Bad!
Traceback (most recent call last):
  File "/tmp/ipykernel_22954/3616845043.py", line 4, in <module>
    test_func(p1)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py", line 885, in __call__
    result = self._call(*args, **kwds)
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Bad! : Tensor had Inf values
     [[node CheckNumerics (defined at tmp/ipykernel_22954/2241890286.py:5) ]] [Op:__inference_simple_func_131]

Errors may have originated from an input operation.
Input Source operations connected to node CheckNumerics:
 input_arg (defined at tmp/ipykernel_22954/3616845043.py:4)

Function call stack:
simple_func

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

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

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 গ্রাফ থেকে নোড এবং কোনো ত্রুটি উত্থাপন ছাড়াই ফাংশন সঞ্চালন করে।

সারসংক্ষেপ

TensorFlow রানটাইম কার্যকর করার আগে গ্রাফ স্বয়ংক্রিয়ভাবে অপ্টিমাইজ করতে Grappler ব্যবহার করে। ব্যবহারের tf.config.optimizer.set_experimental_options সক্ষম বা বিভিন্ন গ্রাফ optimizers নিষ্ক্রিয় করতে।

Grappler সম্পর্কে আরো তথ্যের জন্য, দেখুন TensorFlow গ্রাফ নিখুঁতকরণ