-sdy-close-shardings

টেনসর শার্ডিং বন্ধ করে এবং প্রতিলিপিকৃত অক্ষগুলো বাদ দেয়।

-sdy-constant-or-scalar-merger

একই ধ্রুবক এবং স্কেলার সম্প্রসারণ, যাদের শার্ডিং মিলে যায়, তাদের একত্রিত করুন।

একই শার্ডিংযুক্ত ধ্রুবকগুলোর উপর একটি হালকা সিএসই (CSE) সম্পাদন করে।

ইমপোর্ট পাইপলাইনটি কনস্ট্যান্ট এবং স্কেলার এক্সপ্যানশনগুলোকে এমনভাবে বিভক্ত ও অনুলিপি করে, যাতে একটি কনস্ট্যান্ট সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে শার্ডিং ছড়িয়ে না পড়ে। যদি ছড়িয়ে পড়ার পরেও কনস্ট্যান্টগুলোর শার্ডিং একই থাকে, তবে কম্পাইলেশনের সময় বাঁচাতে এই ধাপে সেগুলোকে একীভূত করা হয়। আরও তথ্যের জন্য -sdy-constant-or-scalar-splitter দেখুন।

-sdy-convert-global-to-local

একটি SDY প্রোগ্রামকে গ্লোবাল শেপ থেকে লোকাল শেপে রূপান্তর করে।

শার্ডিং অ্যাট্রিবিউটের উপর ভিত্তি করে লজিক্যাল ডাইমেনশনগুলোকে পার্টিশন করার মাধ্যমে একটি SDY প্রোগ্রামকে গ্লোবাল শেপ থেকে লোকাল শেপে রূপান্তর করে।

এই ধাপে একটি টাইপ কনভার্টার ব্যবহার করে RankedTensorType-কে গ্লোবাল লজিক্যাল শেপ থেকে ডিভাইস-লোকাল ফিজিক্যাল শেপে ম্যাপ করা হয়।

বিকল্প

-per-dim-all-gather                     : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3                            : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.

-sdy-drop-sharding-and-mesh

প্রোগ্রাম থেকে মেশ অপ এবং শার্ডিং নোটেশন মুছে দেয়।

-sdy-drop-sharding-rules

সকল নিবন্ধিত অপস থেকে OpShardingRuleAttr বাদ দেয়।

-sdy-export-named-computations

NamedComputationOp থেকে করা কলগুলোর রূপরেখা দিন।

এমন একটি পাস তৈরি করে যা একটি NamedComputationOp একটি CallOp এ রূপান্তর করে, যেখানে উক্ত NamedComputationOp এর name একটি নতুন প্রাইভেট ফাংশন থাকে। নতুন FuncOp এবং CallOp শার্ডিংগুলো মূল NamedComputationOp এর অপারেন্ড/ফলাফলের শার্ডিংগুলোর মতোই থাকে।

যদি মডিউলটিতে NamedComputationOp এর নামের সাথে একই নামের কোনো ফাংশন থাকে, তাহলে MLIR সিম্বল টেবিল এটিকে {name}_# -এ পরিবর্তন করে দেবে।

-sdy-insert-explicit-reshards

সমস্ত অপারেশনের শার্ডিং সামঞ্জস্যপূর্ণ করার জন্য সুস্পষ্ট রিশার্ড সন্নিবেশ করে।

একটি সামঞ্জস্যপূর্ণ শার্ডিং-এর মূল অর্থ হলো, অপারেশনটি কোনো রিশার্ড কমিউনিকেশনের প্রয়োজন ছাড়াই শার্ড করা অপারেন্ডগুলো গ্রহণ করতে এবং একটি শার্ড করা ফলাফল তৈরি করতে পারে (উল্লেখ্য যে, অপারেশনটির জন্য অল-রিডিউস বা হ্যালো-সোয়াপের মতো কমিউনিকেশনের প্রয়োজন হতে পারে)।

প্রচারের পরেও, কিছু অপারেশনের শার্ডিংগুলো অসঙ্গতিপূর্ণ থাকতে পারে।

উল্লেখ্য যে, যখন কোনো অ্যাক্সিস (বা সাব-অ্যাক্সিস) একাধিক টেনসরের মধ্যে অসংলগ্ন ডাইমেনশন (যেমন matmul-এ নন-কন্ট্রাক্টিং ডাইমেনশন) শার্ড করতে ব্যবহৃত হয়, অথবা যখন কোনো অ্যাক্সিস একটি টেনসরের ডাইমেনশনকে শার্ড করে কিন্তু অন্য টেনসরের সংশ্লিষ্ট ডাইমেনশনকে করে না, তখন বলা হয় যে অপারেশনটিতে একটি শার্ডিং কনফ্লিক্ট রয়েছে। সুতরাং, এই পাসের পরে, অপারেশনগুলো কনফ্লিক্ট-মুক্ত হয়ে যায়।

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

উদাহরণ:

ইনপুট:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

আউটপুট:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

উপরের উদাহরণে, lhs এবং rhs উভয়ই তাদের অ-সংকোচনশীল ডাইমেনশনগুলিতে "x" অক্ষ বরাবর শার্ড করা হয়েছে, যা বেমানান। এই পাসটি ডট অপারেশনের আগে rhs এর উপর একটি সুস্পষ্ট রিশার্ড সন্নিবেশ করে, যাতে ডট অপারেশনের শার্ডিংগুলো সামঞ্জস্যপূর্ণ হয়।

বিকল্প

-enable-full-version : Enable full version.

-sdy-insert-func-call-reshards

func এবং call শার্ডিং দ্বন্দ্বের জন্য রিশার্ড সন্নিবেশ করে।

ফলাফলের উপর func এবং call sharding দ্বন্দ্বের জন্য reshard সন্নিবেশ করে।

-sdy-pad-for-divisibility

অবিভাজ্য শার্ডিংযুক্ত টেনসরগুলোকে বিভাজ্য আকারে প্যাড করে।

-sdy-propagate-to-func-results

ফাংশন টার্মিনেটর থেকে ফাংশন রেজাল্ট পর্যন্ত শার্ডিংগুলো ছড়িয়ে দিন।

main func ছাড়া, func terminator ভ্যালুগুলোর শার্ডিং সংশ্লিষ্ট func.func রেজাল্টে কপি করে।

-sdy-remove-all-gather-reduce-scatter-for-cmv1

CMV1-এর জন্য sdy.all_gather এবং sdy.reduce স্ক্যাটার অপসারণ করে।

`all-gather + dot` প্যাটার্ন থেকে `all-gather` অপসারণ করে। `dot + reduce-scatter` প্যাটার্ন থেকে `reduce-scatter` অপসারণ করে। এই পরিবর্তনটি `collective matmul V1` (CMV1)-এর সাথে সামঞ্জস্য রক্ষার জন্য করা হয়েছে। এটি `b/432019089`-এর জন্য একটি অস্থায়ী সমাধান।

-sdy-remove-propagation-debug-info

এক্সপোর্ট করার সময় প্রোপাগেশন ডিবাগ তথ্য (প্রোপাগেশন এজ এবং অরিজিন শার্ডিং) মুছে ফেলে।

-sdy-remove-sharding-groups

প্রচারের পর ShardingGroupOps মুছে ফেলে।

-sdy-remove-sub-axes-in-input-output-shardings

ইনপুট/আউটপুট শার্ডিং থেকে সাব-অ্যাক্সিসগুলো অপসারণ করে।

Shardy-এর কিছু ব্যবহারকারী আশা করেন যে ফাংশনের ইনপুট/আউটপুটগুলোতে সাব-অ্যাক্সিস ছাড়া শার্ডিং থাকবে। এই পাসটি ইনপুট/আউটপুট ওপেন ডাইমেনশন শার্ডিং থেকে সাব-অ্যাক্সিস এবং তাদের ট্রেইলিং অ্যাক্সিসগুলো সরিয়ে দেয়। এই পাসটি সাধারণত sdy-update-non-divisible-input-output-shardings পরে করা হয়, যাতে সাব-অ্যাক্সিস সরানোর ফলে কোনো নন-ডিভিজিবল শার্ডিং তৈরি না হয়।

-sdy-reshard-to-collectives

ReshardOp-কে বিভিন্ন Shardy সম্মিলিত অপস-এ রূপান্তর করে।

রিশার্ড অপস-গুলোকে মিলিয়ে বিভিন্ন শার্ডি কালেক্টিভ অপস-এ পুনর্লিখন করে। এই ধাপের পর মডিউলটিতে কোনো রিশার্ড অপস অবশিষ্ট থাকে না।

ঐচ্ছিকভাবে যদি keepRedundantReshards মান true হয়, তবে শুধুমাত্র অপ্রয়োজনীয় রিশার্ড অপারেশনগুলোই অবশিষ্ট থাকে। ডিফল্টরূপে এটি ধরে নেয় যে সুস্পষ্ট রিশার্ডগুলো ইতিমধ্যেই সন্নিবেশিত হয়েছে ( sdy-insert-explicit-reshards ) এবং অপ্রয়োজনীয় রিশার্ডগুলো রাখে না। যদি সুস্পষ্ট রিশার্ডগুলো আগে থেকে সন্নিবেশিত না হয়ে থাকে, তবে অপ্রয়োজনীয় রিশার্ডগুলো রাখা উচিত।

উদাহরণ:

ইনপুট:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

আউটপুট:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

উপরের উদাহরণে, %0 : tensor<16x2xf32> টেনসরটিকে শার্ড করা হয়েছে এভাবে\[{"x", "y", "z"}, {}\] তারপর, একজন reshard অপারেটর এটিকে রিশার্ড করছে এভাবে\[{"x"}, {}\] প্রথম অক্ষের ক্ষেত্রে, রিশার্ডের পর {"y", "z"} সাফিক্সটি অপসারিত হওয়ায় আমরা ধরে নিতে পারি যে আমরা {"y", "z"} সম্পূর্ণরূপে একত্রিত করেছি। দ্বিতীয় মাত্রাটি অপরিবর্তিত থাকে।

বিকল্প

-keep-redundant-reshards : Whether it keeps redundant reshards or removes.

-sdy-resolve-permutation-factors

kPermutation ফ্যাক্টরগুলিতে ম্যাপ করা ডাইমেনশনগুলির উপর শার্ডিং সমাধান করে।

kPermutation ফ্যাক্টর ব্যবহার করে ডাইমেনশন শার্ডিং করার জন্য ডিভাইসগুলোর মধ্যে যোগাযোগের প্রয়োজন হতে পারে (যেমন, উইন্ডোজের জন্য হ্যালো এক্সচেঞ্জ অথবা রিভার্সের জন্য কালেক্টিভ পারমিউটস)।

যদি enableHaloExchange মান true হয়, তাহলে পাসটি পারমিউটেশন ফ্যাক্টরগুলো সমাধান করার জন্য একটি উপলব্ধ অপ্টিমাইজড কমিউনিকেশন লজিক ব্যবহার করবে। অন্যথায়, পাসটি সেই ডাইমেনশনগুলো প্রতিলিপি করার জন্য কেবল sdy.reshard অপস সন্নিবেশ করবে। enableHaloExchange এর ডিফল্ট মান হলো true।

বিকল্প

-enable-halo-exchange : Implement halo exchange logic for windowed operations.

-sdy-sharding-constraint-to-reshard

ShardingConstraintOp-কে ReshardOp-এ রূপান্তর করে।

-sdy-sink-data-flow-edges

সমস্ত DataFlowEdgeOp তাদের ইনপুটে অন্তর্ভুক্ত করে।

প্রতিটি DataFlowEdgeOp এর শার্ডিংকে তার ইনপুটে (এজটির রুট টার্গেট) স্থানান্তর করে এবং অপ-টিকে তার ইনপুট দিয়ে প্রতিস্থাপন করে।

বিকল্প

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-sink-func-data-flow-edges

সমস্ত FuncDataFlowEdgeOp তাদের ইনপুটে অন্তর্ভুক্ত করে।

প্রতিটি FuncDataFlowEdgeOp এর শার্ডিংকে তার ইনপুটে স্থানান্তর করে এবং অপ-টিকে তার ইনপুট দিয়ে প্রতিস্থাপন করে।

-sdy-unflatten-call-graph

কল গ্রাফকে অসমতল করে।

এটি গ্রাফকে আনফ্ল্যাটেন করে। এটি ফাংশনগুলোর সাথে সংযুক্ত 'original_func_name' অ্যাট্রিবিউট দ্বারা বর্ণিত একই ইনপুট/আউটপুট শার্ডিং এবং একই অরিজিনযুক্ত ফাংশনগুলোকে ডিডুপ্লিকেট করে।

বিকল্প

-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.

-sdy-update-non-divisible-input-output-shardings

এটি FuncOp-এর ইনপুট/আউটপুটগুলোকে সুষমভাবে শার্ড করে, ফলে অবিভাজ্য শার্ডিংয়ের কারণে প্যাডিংয়ের কোনো প্রয়োজন হয় না।

Shardy-এর ব্যবহারকারীরা আশা করেন যে ফাংশনের ইনপুট/আউটপুটগুলো সুষমভাবে বিভাজ্য/শার্ডযোগ্য হবে, যাতে তাদের টেনসর প্যাডিং করার প্রয়োজন না হয়। প্রোপাগেশনের কারণে ইনপুট/আউটপুটগুলোর শার্ডিং অবিভাজ্য হতে পারে, তাই এই ধাপে সেগুলোকে মূল শার্ডিংয়ের বৃহত্তম ডাইমেনশনের শার্ডিং প্রিফিক্সে আপডেট করা হয়, যা সুষমভাবে শার্ড করা থাকে।

-sdy-verify-unreduced-axes

অক্ষের অপরিবর্তিত ব্যবহারের সামঞ্জস্য যাচাই করে।

যাচাই করে যে প্রতিটি অপারেশনের ক্ষেত্রে, যদি তার অপারেন্ডগুলির অক্ষগুলি অপরিবর্তিত থাকে, তবে অপারেশনটি হয় সেগুলিকে স্পষ্টভাবে হ্রাস করে (যেমন, sdy.reshard এর মাধ্যমে) অথবা সেগুলিকে তার ফলাফলে প্রেরণ করে (কিংবা এটি func.call মতো একটি বাউন্ডিং অপারেশন)।