আকার এবং বিন্যাস

একটি XLA অপারেশনের গঠন

HLO-এর একটি উদাহরণ বিবেচনা করুন:

add.936 = bf16[8,1,1280,16384]{3,2,0,1:T(8,128)(2,1)}
          add(exponential.183, broadcast.3115)

এটি নিম্নলিখিত উপাদানগুলি নিয়ে গঠিত:

  • অপ নাম: add.936
    • এটি এই অপারেশনের অনন্য নাম।
  • আকৃতি: bf16[8,1,1280,16384]
    • এটি Op এর আউটপুট আকৃতি। এখানে dtype হল bf316 এবং আকৃতি হল [8,1,1280,16384]
  • লেআউট (টাইলিং সহ): 3,2,0,1:T(8,128)(2,1)
    • এটি বর্ণনা করে কিভাবে অ্যারেটি মেমোরিতে সংরক্ষণ করা হয়। 3,2,0,1 মেমোরিতে অক্ষের ক্রম নির্দেশ করে (যেমন, কলাম মেজর, সারি মেজর, ইত্যাদি) এবং T(8,128)(2,1) ব্যবহৃত টাইলিং এবং প্যাডিং নির্দেশ করে।
    • লেআউট ঐচ্ছিক। যদি নির্দিষ্ট না করা থাকে, তাহলে কোনও টাইলিং নেই এবং মাত্রাগুলি সর্বাধিক-প্রধান থেকে সর্বাধিক-গৌণ পর্যন্ত ক্রমানুসারে বলে ধরে নেওয়া হয়।
  • অপারেশন: add
    • অপারেশনটি করা হচ্ছে। এখানে, এটি Add , যা Op নামেও উল্লেখ করা হয়েছে।
  • যুক্তি: exponential.183 , broadcast.3115
    • এই অপারেশনটি দুটি আর্গুমেন্ট নেয়, তাদের অনন্য নামের সাথে নির্দিষ্ট করা হয়।

আরেকটি উদাহরণ বিবেচনা করা যাক, একটি ফিউশন অপ:

%fusion.3 = bf16[32,32,4096]{2,1,0:T(8,128)(2,1)S(1)}
            fusion(bf16[32,32,8192]{2,1,0:T(8,128)(2,1)S(1)} %fusion.32),
            kind=kCustom, calls=%all-reduce-scatter.3

পূর্বে বর্ণিত উপাদানগুলি ছাড়াও, এতে রয়েছে:

  • গুণাবলী: kind এবং calls
    • এই ক্ষেত্রে, এইগুলি সম্পাদিত অপারেশন সম্পর্কে আরও তথ্য প্রদান করে: ফিউশন।
  • মেমোরি লোকেশন (মেমোরি স্পেস আইডেন্টিফায়ার): S(1)
    • এটি মেমোরি স্পেস/অবস্থান নির্দেশ করে যেখানে অ্যারেটি সংরক্ষণ করা হয়। এখানে S(1) নির্দেশ করে যে এই অ্যারেটি VMEM (একটি TPU-তে) থাকে।
  • ইনপুট আর্গুমেন্ট %fusion.32 এর আকৃতি এবং লেআউটের বিবরণ

নিম্নলিখিত বিভাগগুলিতে আকার, লেআউট এবং মেমরি স্পেস আইডেন্টিফায়ার বর্ণনা করা হয়েছে। আপনি টাইল্ড লেআউটে টাইলিং সম্পর্কে আরও জানতে পারেন।

আকার

XLA ShapeProto proto ( xla_data.proto ) একটি N-মাত্রিক অ্যারের ( সংক্ষেপে অ্যারে ) মাত্রা, আকার এবং ডেটা টাইপের সংখ্যা বর্ণনা করে।

পরিভাষা, স্বরলিপি এবং রীতিনীতি

  • একটি অ্যারের প্রকৃত মাত্রার সংখ্যা হলো ১ এর চেয়ে বড় আকারের মাত্রার সংখ্যা।

  • একটি N মাত্রিক অ্যারের জন্য মাত্রা 0 থেকে N-1 পর্যন্ত সংখ্যাযুক্ত। একটি মাত্রার আকার একটি অ-ঋণাত্মক পূর্ণসংখ্যা। বিশেষ করে, আকার 0 বৈধ। মাত্রা সংখ্যাগুলি সুবিধার জন্য ইচ্ছামত লেবেল। এই মাত্রা সংখ্যাগুলির ক্রম আকৃতির বিন্যাসে কোনও নির্দিষ্ট গৌণ/প্রধান ক্রম নির্দেশ করে না। বিন্যাসটি LayoutProto প্রোটো দ্বারা নির্ধারিত হয়।

  • প্রচলিত নিয়ম অনুসারে, মাত্রাগুলি মাত্রা সংখ্যার ক্রমবর্ধমান ক্রমে তালিকাভুক্ত করা হয়। উদাহরণস্বরূপ, [A x B x C] আকারের একটি 3-মাত্রিক অ্যারের জন্য, মাত্রা 0 এর আকার A , মাত্রা 1 এর আকার B এবং মাত্রা 2 এর আকার C রয়েছে।

    XLA-তে কিছু ইউটিলিটি পাইথনের মতো নেতিবাচক সূচক সমর্থন করে: Dimension -1 হল শেষ মাত্রা ( N মাত্রিক অ্যারের জন্য N-1 এর সমতুল্য)। উদাহরণস্বরূপ, উপরে বর্ণিত 3-মাত্রিক অ্যারের জন্য, dimension -1 এর আকার C , dimension -2 এর আকার B , ইত্যাদি।

  • দুই, তিন এবং চার মাত্রিক অ্যারেতে প্রায়শই মাত্রার সাথে সম্পর্কিত নির্দিষ্ট অক্ষর থাকে। উদাহরণস্বরূপ, একটি 2D অ্যারের জন্য:

    • মাত্রা ০: y
    • মাত্রা ১: x

    একটি 3D অ্যারের জন্য:

    • মাত্রা ০: z
    • মাত্রা ১: y
    • মাত্রা ২: x

    একটি 4D অ্যারের জন্য:

    • মাত্রা ০: p
    • মাত্রা ১: z
    • মাত্রা ২: y
    • মাত্রা ৩: x
  • XLA API-তে যে ফাংশনগুলি মাত্রা গ্রহণ করে, সেগুলি মাত্রা সংখ্যার ক্রমবর্ধমান ক্রমে তা করে। এটি initializer_list হিসাবে মাত্রা পাস করার সময় ব্যবহৃত ক্রম অনুসারে মেলে; যেমন

    ShapeUtil::MakeShape(F32, {A, B, C, D})

    এমন একটি আকৃতি তৈরি করবে যার মাত্রা আকার অ্যারে [A, B, C, D] ক্রম নিয়ে গঠিত।

লেআউট

LayoutProto প্রোটো বর্ণনা করে কিভাবে একটি অ্যারে মেমরিতে উপস্থাপন করা হয়। এতে নিম্নলিখিত ক্ষেত্রগুলি অন্তর্ভুক্ত রয়েছে:

message LayoutProto {
  repeated int64 minor_to_major;
  int64 tail_padding_alignment_in_elements;
  ...
}

ক্ষুদ্র থেকে প্রধান মাত্রার ক্রমবিন্যাস

একমাত্র প্রয়োজনীয় ক্ষেত্র হল minor_to_major । এই ক্ষেত্রটি একটি আকৃতির মধ্যে মাত্রার minor-to-major ক্রম বর্ণনা করে। minor_to_major এর মান হল অ্যারের মাত্রার ক্রম (একটি N মাত্রিক অ্যারের জন্য 0 থেকে N-1 ) যার প্রথম মান হল সবচেয়ে-ক্ষুদ্র মাত্রা থেকে শেষ মান পর্যন্ত যা সবচেয়ে-বৃহৎ মাত্রা। সবচেয়ে-ক্ষুদ্র মাত্রা হল সেই মাত্রা যা রৈখিক মেমরিতে বিন্যাসিত অ্যারের উপাদানগুলির মধ্য দিয়ে যাওয়ার সময় সবচেয়ে দ্রুত পরিবর্তিত হয়।

উদাহরণস্বরূপ, নিম্নলিখিত 2D আকারের অ্যারে [2 x 3] বিবেচনা করুন:

a b c
d e f

এখানে মাত্রা 0 হল আকার 2, এবং মাত্রা 1 হল আকার 3। যদি লেআউটে minor_to_major ক্ষেত্রটি [0, 1] হয়, তাহলে মাত্রা 0 হল সবচেয়ে ছোট মাত্রা এবং মাত্রা 1 হল সবচেয়ে বড় মাত্রা। এটি লিনিয়ার মেমরিতে নিম্নলিখিত লেআউটের সাথে মিলে যায়:

a d b e c f

0 থেকে N-1 পর্যন্ত এই মাইনর-টু-মেজর ডাইমেনশন অর্ডারটি কলাম-মেজরের মতো (২-ডাইমেনশনের জন্য)। মাত্রার একঘেয়ে ক্রম ধরে নিলে, কোডে এই লেআউটটিকে আমরা আরও একটি উপায়ে উল্লেখ করতে পারি তা হল "dim 0 is minor"।

অন্যদিকে, যদি লেআউটে minor_to_major ক্ষেত্রটি [1, 0] হয়, তাহলে লিনিয়ার মেমরিতে লেআউটটি হল:

a b c d e f

একটি N মাত্রিক অ্যারের জন্য N-1 থেকে 0 পর্যন্ত মাইনর-টু-মেজর ডাইমেনশন অর্ডার সারি-মেজর (2-মাত্রিকের জন্য) এর অনুরূপ। মাত্রার একঘেয়ে ক্রম ধরে নিলে, কোডে এই লেআউটটিকে আমরা আরও একটি উপায়ে উল্লেখ করতে পারি তা হল "dim 0 is major"।

ডিফল্ট মাইনর-টু-মেজর অর্ডারিং

নতুন তৈরি আকারের জন্য ডিফল্ট লেআউট হল "মাত্রা ক্রম প্রধান থেকে ক্ষুদ্রতর" (অর্থাৎ [N-1, ..., 0] )।

প্যাডিং

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

অ্যারেতে ইনডেক্সিং

index_util.h- এর IndexUtil ক্লাসটি আকৃতি এবং বিন্যাসের ভিত্তিতে বহুমাত্রিক সূচক এবং রৈখিক সূচকের মধ্যে রূপান্তরের জন্য ইউটিলিটি প্রদান করে। বহুমাত্রিক সূচকগুলিতে প্রতিটি মাত্রার জন্য একটি int64 সূচক অন্তর্ভুক্ত থাকে। রৈখিক সূচক হল একটি একক int64 মান যা অ্যারে ধারণকারী বাফারে সূচী করে। আকার এবং বিন্যাস তৈরি এবং পরিচালনা সহজ করে এমন ইউটিলিটিগুলির জন্য একই ডিরেক্টরিতে shape_util.h এবং layout_util.h দেখুন।

মেমোরি স্পেস আইডেন্টিফায়ার

HLO-তে, প্রতিটি অ্যারে একটি মেমরি স্পেস আইডেন্টিফায়ার দিয়ে টীকা করা যেতে পারে, যা S(n) হিসেবে লেখা হয়।

  • S(0) (প্রায়শই বাদ দেওয়া হয়) ডিভাইসের উচ্চ ব্যান্ডউইথ মেমোরি (HBM) নির্দেশ করে।
  • S(1) ডিভাইস ভার্চুয়াল মেমরি (VMEM) উপস্থাপন করে।
  • S(2) , S(3) , ইত্যাদি, অতিরিক্ত ডিভাইস নির্দিষ্ট মেমরি স্পেসের সাথে সম্পর্কিত।
  • S(5) হোস্ট মেমোরি নির্দেশ করে।