আপনার স্থানীয় টেনসরফ্লো সর্বত্র সর্বত্র ইভেন্টের জন্য আরএসভিপি!
This page was translated by the Cloud Translation API.
Switch to English

এক্সএলএ: মেশিন লার্নিংয়ের জন্য অনুকূলিতকরণ সংকলক

এক্সএলএ (এক্সিলারেটেড লিনিয়ার বীজগণিত) লিনিয়ার বীজগণিতের জন্য একটি ডোমেন-নির্দিষ্ট সংকলক যা সম্ভাব্য কোনও উত্স কোড পরিবর্তন না করে টেনসরফ্লো মডেলগুলিকে ত্বরান্বিত করতে পারে।

ফলাফলগুলি গতি এবং মেমরির ব্যবহারের উন্নতি: উদাহরণস্বরূপ, এক্সএলএ ব্যবহার করে 8 ভোল্টা ভি 100 জিপিইউ ব্যবহার করে বিইআরটি এমএলক্রিপ সাবমিশন একটি ~ 7x কার্যকারিতা উন্নতি করেছে এবং x 5x ব্যাচের আকারের উন্নতি অর্জন করেছে:

ভূমিকা

যখন টেনসরফ্লো প্রোগ্রামটি চালানো হয় তখন সমস্ত অপারেশন টেনসরফ্লো এক্সিকিউটারের দ্বারা স্বতন্ত্রভাবে সম্পাদন করা হয়। প্রতিটি টেনসরফ্লো অপারেশনটিতে একটি পূর্বনির্ধারিত জিপিইউ কার্নেল বাস্তবায়ন থাকে যা নির্বাহক প্রেরণ করে।

এক্সএলএ চলমান মডেলগুলির একটি বিকল্প মোড সরবরাহ করে: এটি টেনসরফ্লো গ্রাফকে প্রদত্ত মডেলের জন্য বিশেষত উত্পন্ন গণনা কার্নেলের ক্রমকে সংকলন করে। যেহেতু এই কার্নেলগুলি মডেলের পক্ষে স্বতন্ত্র, তারা অপ্টিমাইজেশনের জন্য মডেল-নির্দিষ্ট তথ্যটি ব্যবহার করতে পারে। উদাহরণস্বরূপ, আসুন একটি তেনসরফ্লো গণনার প্রসঙ্গে একটি অপ্টিমাইজেশন এক্সএলএ যা দেখায়:

def model_fn(x, y, z):
  return tf.reduce_sum(x + y * z)

এক্সএলএ ছাড়াই চলুন, গ্রাফটি তিনটি কার্নেল চালু করে: একটি গুণনের জন্য একটি, সংযোজনের জন্য একটি এবং হ্রাসের জন্য একটি। তবে, এক্সএলএ গ্রাফটি অনুকূল করতে পারে যাতে এটি ফলাফলকে একটি একক কার্নেল প্রবর্তনের সাথে গণনা করে। এটি একক জিপিইউ কার্নেলের সাথে সংযোজন, গুণ এবং হ্রাস "ফিউজ" করে এটি করে। তদতিরিক্ত, এই ফিউজড ক্রিয়াকলাপটি y*z এবং x+y*z মেমোরিতে উত্পাদিত মধ্যবর্তী মানগুলি লিখবে না; পরিবর্তে এটি পুরোপুরি জিপিইউ রেজিস্টারে রেখে তাদের ব্যবহারকারীদের কাছে এই মধ্যবর্তী গণনার ফলাফলগুলি "স্ট্রিম" করে। ফিউশনটি এক্সএলএর একক অতি গুরুত্বপূর্ণ অপটিমাইজেশন। মেমরি ব্যান্ডউইদথ সাধারণত হার্ডওয়্যার এক্সিলিটারগুলির জন্য দুর্লভ সম্পদ, তাই মেমরি অপারেশনগুলি অপসারণ কার্যকারিতা উন্নত করার অন্যতম সেরা উপায়।

টেনসরফ্লো মডেলগুলির জন্য এক্সএলএল সক্ষম করুন

tf.function(jit_compile=True) সহ সুস্পষ্ট সংকলন tf.function(jit_compile=True)

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

@tf.function(jit_compile=True)
def train_mnist(images, labels):
    images, labels = cast(images, labels)

    with tf.GradientTape() as tape:
      predicted_labels = layer(images)
      loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
          logits=predicted_labels, labels=labels
      ))
    layer_variables = layer.trainable_variables
    grads = tape.gradient(loss, layer_variables)
    optimizer.apply_gradients(zip(grads, layer_variables))

jit_compile এপিআই-তে অবশ্যই শব্দার্থ -সংকলন থাকতে হবে : হয় পুরো ফাংশনটি errors.InvalidArgumentError দিয়ে সংকলিত হয়, অথবা একটি errors.InvalidArgumentError । এক্সএলএ বর্তমানে ফাংশনগুলি সংকলন করতে পারে না যেখানে মাত্রা অনুমানযোগ্য নয়: এটি হ'ল সম্পূর্ণ গণনাটি পরিচালনা না করে যদি সমস্ত টেনেন্সরের মাত্রা নির্ধারণ করা সম্ভব না হয়। উদাহরণস্বরূপ, নিম্নলিখিত ফাংশনটি সংকলন করবে না:

@tf.function
def not_compilable(x):
  return tf.unique(x)

রানগুলি জুড়ে আকারগুলি বিভিন্ন রকম হতে পারে:

@tf.function(jit_compile=True)
def recompiled_on_launch(a, b):
  return a + b

recompiled_on_launch(tf.ones([1, 10]), tf.ones([1, 10]))
recompiled_on_launch(tf.ones([1, 100]), tf.ones([1, 100]))

আরও বিস্তারিত ব্যবহারের উদাহরণের জন্য টিউটোরিয়াল কোলাব দেখুন।

অটো-ক্লাস্টারিং

কোনও পরিবর্তন ছাড়াই টেনসরফ্লো মডেলগুলিতে এক্সএলএ ব্যবহার শুরু করার একটি সহজ উপায় হ'ল স্বয়ংক্রিয় ক্লাস্টারিং সক্ষম করা, যা টেনসরফ্লো ফাংশনগুলির মধ্যে স্বয়ংক্রিয়ভাবে ক্লাস্টারগুলি (সংযুক্ত সাবগ্রাফ্ট) সন্ধান করে যা এক্সএলএল ব্যবহার করে সংকলন ও সম্পাদন করা যায়। TF_XLA_FLAGS এনভায়রনমেন্ট ভেরিয়েবল সেট করে GPU এ অটো-ক্লাস্টারিং সক্ষম করা যেতে পারে:

$ TF_XLA_FLAGS=--tf_xla_auto_jit=2 path/to/your/tf/program

অটো-ক্লাস্টারিং বর্তমানে জিপিইউ কাজের চাপের জন্য অনুকূলিত হয়েছে, তবে এটি সিপিইউতে অতিরিক্ত --tf_xla_cpu_global_jit ব্যবহার করে সক্ষম করা --tf_xla_cpu_global_jit :

$ TF_XLA_FLAGS="--tf_xla_auto_jit=2 --tf_xla_cpu_global_jit" path/to/your/program

বিশদ ব্যবহারের উদাহরণের জন্য অটো-ক্লাস্টারিং টিউটোরিয়াল কোলাব দেখুন

tfcompile সহ tfcompile জন্য tfcompile (পূর্বে-সময়ের) সংকলন

আপনি স্ট্যান্ডেলোন tfcompile ব্যবহার করতে পারেন, যা tfcompile গ্রাফকে এক্সিকিউটেবল কোডে রূপান্তর করে (কেবল x86-64 সিপিইউ জন্য)।

সংকলিত প্রোগ্রামগুলি পরিদর্শন করুন

এক্সএলএ এনট্রোস্পেকশন সুবিধা সরবরাহ করে যা আপনাকে উত্পন্ন প্রোগ্রামগুলি পরীক্ষা করতে দেয়। উত্পন্ন প্রোগ্রামগুলি ডাম্প করতে, পরিবেশ পরিবর্তনশীল XLA_FLAGS ব্যবহার করুন:

$ XLA_FLAGS="--xla_dump_to=/tmp/generated" TF_XLA_FLAGS="--tf_xla_auto_jit=2" my/tensorflow/program

ডাম্পিং সম্পন্ন হওয়ার পরে, আপনি /tmp/generated মধ্যে নিম্নলিখিত ফাইলগুলি সন্ধান করতে পারেন:

টেনসরফ্লো গ্রাফের সাথে এক্সএলএল ক্লাস্টারগুলির এম্বেডিং ভিজ্যুয়ালাইজিং গ্রাফটি আপনি এগুলি দিয়ে ফেলতে পারেন:

$ TF_DUMP_GRAPH_PREFIX=/tmp/generated TF_XLA_FLAGS="--tf_xla_clustering_debug"

পুনরুত্পাদনযোগ্য বাগ রিপোর্ট

এতে উত্পন্ন এক্সএলএ প্রোগ্রাম এবং ব্যবহৃত স্বয়ংক্রিয়-ক্লাস্টারিং এম্বেডিংয়ের জন্য ডাম্প অন্তর্ভুক্ত থাকলে একটি বাগ রিপোর্ট পুনরুত্পাদন করা অনেক সহজ। অটো-ক্লাস্টারিং সহ চলমান টেনসরফ্লো প্রোগ্রামের জন্য এগুলি উত্পন্ন করতে, চালু করুন:

$ TF_DUMP_GRAPH_PREFIX=/tmp/generated \
  TF_XLA_FLAGS="--tf_xla_clustering_debug --tf_xla_auto_jit=2" \
  XLA_FLAGS="--xla_dump_hlo_as_text --xla_dump_to=/tmp/generated" \
    my/tensorflow/program"

বাগ ফাইল করার সময়, /tmp/generated ডিরেক্টরি (উপরে উল্লিখিত) এর বিষয়বস্তু সংযুক্ত করুন।

যদি সম্ভব হয় তবে replay_computation ব্যবহার করে এবং উত্পন্ন প্রোগ্রামগুলিতে পুনরাবৃত্তভাবে এটি চালিয়ে একক এক্সএলএ প্রোগ্রামে বাগটি আলাদা করার চেষ্টা করুন।

আরও পড়া

এক্সএলএ ফ্রন্টএন্ডস

টেনসরফ্লো ছাড়াও, এক্সএলএ প্রোগ্রামগুলি এর দ্বারা উত্পাদিত হতে পারে:

  • Jax : পাইথন + + NumPy প্রোগ্রামের Composable রূপান্তরের
  • জুলিয়া : বৈজ্ঞানিক কম্পিউটিংয়ের জুলিয়া ভাষা
  • পাইটর্চ : পাইটর্চ কাঠামো
  • এনএক্স : এলিক্সির প্রোগ্রামিং ভাষার জন্য সংখ্যার কম্পিউটিং লাইব্রেরি