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

XLA: মেশিন লার্নিং জন্য নিখুঁত কম্পাইলার

XLA (অ্যাক্সিলারেটেড লিনিয়ার বীজগণিত) রৈখিক বীজগণিত করে যা সম্ভাব্য কোন সোর্স কোড পরিবর্তনের সঙ্গে TensorFlow মডেলের ত্বরান্বিত করতে পারেন জন্য একটি ডোমেন-নির্দিষ্ট কম্পাইলার হয়।

ফলাফল গতি এবং মেমরির ব্যবহার উন্নতি আছেন: সবচেয়ে অভ্যন্তরীণ benchmarks 1.15x চালানো ~ দ্রুত পর XLA সক্রিয় করা হয়। নিচে ডেটা সেটটি একটি একক NVidia V100 GPU এর মাধ্যমে মূল্যায়ন হয়:

ভূমিকা

যখন একটি TensorFlow প্রোগ্রাম চালানো হয়, অপারেশনের সব TensorFlow নির্বাহক দ্বারা স্বতন্ত্রভাবে মৃত্যুদন্ড কার্যকর করা হয়। প্রতিটি TensorFlow অপারেশন precompiled জিপিইউ কার্নেল বাস্তবায়ন যে নির্বাহক পাঠাবে হয়েছে।

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

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

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

TensorFlow মডেলের জন্য XLA সক্ষম করুন

স্বয়ং-ক্লাস্টারিং

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

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

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

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

বিস্তারিত ব্যবহার উদাহরণস্বরূপ দ্রষ্টব্য স্বয়ংক্রিয় ক্লাস্টারিং টিউটোরিয়াল colab

tf.function সঙ্গে স্পষ্ট সংকলন

স্বয়ং-ক্লাস্টারিং কোডে কোন পরিবর্তন ছাড়া দ্রুত মডেল তৈরীর জন্য একটি দুর্দান্ত সরঞ্জাম, কিন্তু এটা বুঝতে কি পরিবর্তন সম্পন্ন করা হয়েছে কঠিন হতে পারে।

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

 @tf.function(experimental_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))
 

experimental_compile এপিআই আবশ্যক কম্পাইল শব্দার্থবিদ্যা রয়েছে: হয় সমগ্র ফাংশন XLA সঙ্গে কম্পাইল করা হয়, অথবা একটি errors.InvalidArgumentError ব্যতিক্রম ফেলে দেওয়া হয়। যে, যদি সমগ্র গণনার চলমান ছাড়া সব tensors এর মাত্রা অনুমান করা সম্ভব নয়: XLA বর্তমানে ফাংশন যেখানে মাত্রা inferrable নয় কম্পাইল করতে পারবে না। উদাহরণস্বরূপ, নিম্নলিখিত ফাংশন কম্পাইল না:

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

আকার রান যদিও জুড়ে বিভিন্ন রকমের হতে পারে:

 @tf.function(experimental_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]))
 

দেখুন টিউটোরিয়াল colab আরো বিস্তারিত ব্যবহার উদাহরণস্বরূপ।

সঙ্গে CPU- র জন্য AOT (এগিয়ে অফ সময়) সংকলন tfcompile

এছাড়াও আপনি একটি স্বতন্ত্র ব্যবহার করতে পারেন tfcompile টুল, যা (শুধুমাত্র x86-64 'CPU- র জন্য) এক্সিকিউটেবল কোড মধ্যে TensorFlow গ্রাফ পরিবর্তন করে।

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

XLA অন্তর্দর্শন সুবিধা যা আপনাকে উত্পন্ন প্রোগ্রাম পরিদর্শন প্রদান করে। উত্পন্ন প্রোগ্রাম ডাম্প করার জন্য, পরিবেশ ভেরিয়েবল ব্যবহার XLA_FLAGS :

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

পরে পরান সঞ্চালিত হয়, আপনি নিম্নলিখিত ফাইলগুলি খুঁজে পেতে পারেন /tmp/generated :

  • module_XXXX.*_optimizations.txt জেনারেট করা XLA প্রোগ্রাম , প্রতিটি কম্পাইল ক্লাস্টার প্রতি এক। সেই যখন জমা দেওয়ার XLA বাগ রিপোর্ট সংযুক্ত করা অত্যন্ত সহায়ক!

  • module_XXXX.ir-*.ll মধ্যে জেনারেট করা ফাইল LLVM অন্তর্বর্তী উপস্থাপনা, সঙ্গে NVPTX intrinsics।

  • module_XXXX.ptx জেনারেট করা PTX ফাইল।

এছাড়াও আপনি গ্রাফ সঙ্গে TensorFlow গ্রাফ ভেতরে XLA ক্লাস্টার এর এমবেডিং visualizing ডাম্প করতে পারেন:

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

গঠনকর বাগ রিপোর্ট

একটি বাগ রিপোর্ট অনেক পুনর্গঠন করা হলে উত্পন্ন XLA প্রোগ্রাম এবং ব্যবহৃত স্বয়ংক্রিয় ক্লাস্টারিং এম্বেড করার জন্য ডাম্প অন্তর্ভুক্ত সহজ। তাদের একটি TensorFlow স্বয়ংক্রিয় ক্লাস্টারিং, লঞ্চ সঙ্গে চলমান প্রোগ্রামের জন্য উৎপন্ন করার জন্য:

 $ 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 ডিরেক্টরি (উপরে উল্লিখিত)।

যদি সম্ভব হয়, ব্যবহার করে একটি একক XLA প্রোগ্রাম একটি বাগ বিছিন্ন করার চেষ্টা replay_computation এবং iteratively এই উত্পন্ন প্রোগ্রাম চলমান।

XLA Frontends

এছাড়াও TensorFlow থেকে XLA প্রোগ্রাম দ্বারা উত্পন্ন করা যেতে পারে:

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

আরও পড়া