-sdy-close-shardings

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

-sdy-constant-merger

মিলিত শার্ডিংয়ের সাথে অভিন্ন ধ্রুবক মার্জ করুন।

অভিন্ন শার্ডিং সহ ধ্রুবকগুলিতে হালকা ওজনের CSE সম্পাদন করে।

আমদানি পাইপলাইন ধ্রুবকগুলিকে বিভক্ত করে এবং নকল করে যাতে একটি ধ্রুবক সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে শার্ডিং প্রচারিত হয় না। প্রচারের পরে যদি ধ্রুবকগুলির একই শার্ডিং থাকে তবে এই পাসটি সংকলনের সময় বাঁচাতে তাদের একত্রিত করে।

-sdy-drop-sharding-rules

সমস্ত নিবন্ধিত অপারেশন থেকে OpShardingRuleAttr ড্রপ করুন।

-sdy-insert-explicit-reshards

সমস্ত ক্রিয়াকলাপের সামঞ্জস্যপূর্ণ শার্ডিংগুলি তৈরি করতে সুস্পষ্ট রিশার্ডগুলি সন্নিবেশ করায়৷

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

প্রচারের পরে, কিছু অপারেশনে এখনও বেমানান শার্ডিং থাকতে পারে।

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

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

উদাহরণ:

ইনপুট:

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 এ একটি স্পষ্ট রিশার্ড সন্নিবেশ করায়, যাতে ডট অপারেশনে সামঞ্জস্যপূর্ণ শার্ডিং থাকে।

-sdy-remove-sharding-groups

প্রচারের পরে ShardingGroupOps সরিয়ে দেয়।

-sdy-reshard-to-collectives

ReshardOp কে বিভিন্ন Shardy যৌথ অপারেশনে রূপান্তর করে।

রিশার্ড অপ্সের সাথে মেলে এবং সেগুলিকে বিভিন্ন শার্ডি সমষ্টিগত অপ্সে আবার লেখে। এই পাসের পর, মডিউলে আর কোনো রিশার্ড অপ্স থাকবে না। এই পাসটি অনুমান করে যে স্পষ্ট রিশার্ডগুলি ইতিমধ্যেই ঢোকানো হয়েছে ( 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 অপ আছে এটি resharding হিসাবে\[{"x"}, {}\] . প্রথম অক্ষগুলিতে, যেহেতু প্রত্যয়টি {"y", "z"} রিশার্ডের পরে সরানো হয়েছে, তাই আমরা অনুমান করি যে আমরা {"y", "z"} সমস্ত-সংগ্রহ করেছি। দ্বিতীয় মাত্রা পরিবর্তন করা হয় না.

-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-temp-explicit-reshards-for-optimizations

সুনির্দিষ্ট অপ্টিমাইজেশানের জন্য সুস্পষ্ট রিশার্ড সন্নিবেশ করায়।

এই পাসটি একটি অস্থায়ী সমাধান যতক্ষণ না আমরা ডিফল্টভাবে sdy-insert-explicit-reshards পাস সক্রিয় করতে পারি।

এটি আমাদের অপ্টিমাইজেশানের জন্য নির্দিষ্ট ক্রিয়াকলাপগুলিতে সুস্পষ্ট রিশার্ড সন্নিবেশ করার অনুমতি দেয়।

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

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

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

,

-sdy-close-shardings

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

-sdy-constant-merger

মিলিত শার্ডিংয়ের সাথে অভিন্ন ধ্রুবক মার্জ করুন।

অভিন্ন শার্ডিং সহ ধ্রুবকগুলিতে হালকা ওজনের CSE সম্পাদন করে।

আমদানি পাইপলাইন ধ্রুবকগুলিকে বিভক্ত করে এবং নকল করে যাতে একটি ধ্রুবক সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে শার্ডিং প্রচারিত হয় না। প্রচারের পরে যদি ধ্রুবকগুলির একই শার্ডিং থাকে তবে এই পাসটি সংকলনের সময় বাঁচাতে তাদের একত্রিত করে।

-sdy-drop-sharding-rules

সমস্ত নিবন্ধিত অপারেশন থেকে OpShardingRuleAttr ড্রপ করুন।

-sdy-insert-explicit-reshards

সমস্ত ক্রিয়াকলাপের সামঞ্জস্যপূর্ণ শার্ডিংগুলি তৈরি করতে সুস্পষ্ট রিশার্ডগুলি সন্নিবেশ করায়৷

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

প্রচারের পরে, কিছু অপারেশনে এখনও বেমানান শার্ডিং থাকতে পারে।

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

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

উদাহরণ:

ইনপুট:

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 এ একটি স্পষ্ট রিশার্ড সন্নিবেশ করায়, যাতে ডট অপারেশনে সামঞ্জস্যপূর্ণ শার্ডিং থাকে।

-sdy-remove-sharding-groups

প্রচারের পরে ShardingGroupOps সরিয়ে দেয়।

-sdy-reshard-to-collectives

ReshardOp কে বিভিন্ন Shardy যৌথ অপারেশনে রূপান্তর করে।

রিশার্ড অপ্সের সাথে মেলে এবং সেগুলিকে বিভিন্ন শার্ডি সমষ্টিগত অপ্সে আবার লেখে। এই পাসের পর, মডিউলে আর কোনো রিশার্ড অপ্স থাকবে না। এই পাসটি অনুমান করে যে স্পষ্ট রিশার্ডগুলি ইতিমধ্যেই ঢোকানো হয়েছে ( 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 অপ আছে এটি resharding হিসাবে\[{"x"}, {}\] . প্রথম অক্ষগুলিতে, যেহেতু প্রত্যয়টি {"y", "z"} রিশার্ডের পরে সরানো হয়েছে, তাই আমরা অনুমান করি যে আমরা {"y", "z"} সমস্ত-সংগ্রহ করেছি। দ্বিতীয় মাত্রা পরিবর্তন করা হয় না.

-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-temp-explicit-reshards-for-optimizations

সুনির্দিষ্ট অপ্টিমাইজেশানের জন্য সুস্পষ্ট রিশার্ড সন্নিবেশ করায়।

এই পাসটি একটি অস্থায়ী সমাধান যতক্ষণ না আমরা ডিফল্টভাবে sdy-insert-explicit-reshards পাস সক্রিয় করতে পারি।

এটি আমাদের অপ্টিমাইজেশানের জন্য নির্দিষ্ট ক্রিয়াকলাপগুলিতে সুস্পষ্ট রিশার্ড সন্নিবেশ করার অনুমতি দেয়।

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

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

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

,

-sdy-close-shardings

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

-sdy-constant-merger

মিলিত শার্ডিংয়ের সাথে অভিন্ন ধ্রুবক মার্জ করুন।

অভিন্ন শার্ডিং সহ ধ্রুবকগুলিতে হালকা ওজনের CSE সম্পাদন করে।

আমদানি পাইপলাইন ধ্রুবকগুলিকে বিভক্ত করে এবং নকল করে যাতে একটি ধ্রুবক সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে শার্ডিং প্রচারিত হয় না। প্রচারের পরে যদি ধ্রুবকগুলির একই শার্ডিং থাকে তবে এই পাসটি সংকলনের সময় বাঁচাতে তাদের একত্রিত করে।

-sdy-drop-sharding-rules

সমস্ত নিবন্ধিত অপারেশন থেকে OpShardingRuleAttr ড্রপ করুন।

-sdy-insert-explicit-reshards

সমস্ত ক্রিয়াকলাপের সামঞ্জস্যপূর্ণ শার্ডিংগুলি তৈরি করতে সুস্পষ্ট রিশার্ডগুলি সন্নিবেশ করায়৷

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

প্রচারের পরে, কিছু অপারেশনে এখনও বেমানান শার্ডিং থাকতে পারে।

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

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

উদাহরণ:

ইনপুট:

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 এ একটি স্পষ্ট রিশার্ড সন্নিবেশ করায়, যাতে ডট অপারেশনে সামঞ্জস্যপূর্ণ শার্ডিং থাকে।

-sdy-remove-sharding-groups

প্রচারের পরে ShardingGroupOps সরিয়ে দেয়।

-sdy-reshard-to-collectives

ReshardOp কে বিভিন্ন Shardy যৌথ অপারেশনে রূপান্তর করে।

রিশার্ড অপ্সের সাথে মেলে এবং সেগুলিকে বিভিন্ন শার্ডি সমষ্টিগত অপ্সে আবার লেখে। এই পাসের পর, মডিউলে আর কোনো রিশার্ড অপ্স থাকবে না। এই পাসটি অনুমান করে যে স্পষ্ট রিশার্ডগুলি ইতিমধ্যেই ঢোকানো হয়েছে ( 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 অপ আছে এটি resharding হিসাবে\[{"x"}, {}\] . প্রথম অক্ষগুলিতে, যেহেতু প্রত্যয়টি {"y", "z"} রিশার্ডের পরে সরানো হয়েছে, তাই আমরা অনুমান করি যে আমরা {"y", "z"} সমস্ত-সংগ্রহ করেছি। দ্বিতীয় মাত্রা পরিবর্তন করা হয় না.

-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-temp-explicit-reshards-for-optimizations

সুনির্দিষ্ট অপ্টিমাইজেশানের জন্য সুস্পষ্ট রিশার্ড সন্নিবেশ করায়।

এই পাসটি একটি অস্থায়ী সমাধান যতক্ষণ না আমরা ডিফল্টভাবে sdy-insert-explicit-reshards পাস সক্রিয় করতে পারি।

এটি আমাদের অপ্টিমাইজেশানের জন্য নির্দিষ্ট ক্রিয়াকলাপগুলিতে সুস্পষ্ট রিশার্ড সন্নিবেশ করার অনুমতি দেয়।

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

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

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

,

-sdy-close-shardings

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

-sdy-constant-merger

মিলিত শার্ডিংয়ের সাথে অভিন্ন ধ্রুবক মার্জ করুন।

অভিন্ন শার্ডিং সহ ধ্রুবকগুলিতে হালকা ওজনের CSE সম্পাদন করে।

আমদানি পাইপলাইন ধ্রুবকগুলিকে বিভক্ত করে এবং নকল করে যাতে একটি ধ্রুবক সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে শার্ডিং প্রচারিত হয় না। প্রচারের পরে যদি ধ্রুবকগুলির একই শার্ডিং থাকে তবে এই পাসটি সংকলনের সময় বাঁচাতে তাদের একত্রিত করে।

-sdy-drop-sharding-rules

সমস্ত নিবন্ধিত অপারেশন থেকে OpShardingRuleAttr ড্রপ করুন।

-sdy-insert-explicit-reshards

সমস্ত ক্রিয়াকলাপের সামঞ্জস্যপূর্ণ শার্ডিংগুলি তৈরি করতে সুস্পষ্ট রিশার্ডগুলি সন্নিবেশ করায়৷

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

প্রচারের পরে, কিছু অপারেশনে এখনও বেমানান শার্ডিং থাকতে পারে।

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

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

উদাহরণ:

ইনপুট:

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 এ একটি স্পষ্ট রিশার্ড সন্নিবেশ করায়, যাতে ডট অপারেশনে সামঞ্জস্যপূর্ণ শার্ডিং থাকে।

-sdy-remove-sharding-groups

প্রচারের পরে ShardingGroupOps সরিয়ে দেয়।

-sdy-reshard-to-collectives

ReshardOp কে বিভিন্ন Shardy যৌথ অপারেশনে রূপান্তর করে।

রিশার্ড অপ্সের সাথে মেলে এবং সেগুলিকে বিভিন্ন শার্ডি সমষ্টিগত অপ্সে আবার লেখে। এই পাসের পর, মডিউলে আর কোনো রিশার্ড অপ্স থাকবে না। এই পাসটি অনুমান করে যে স্পষ্ট রিশার্ডগুলি ইতিমধ্যেই ঢোকানো হয়েছে ( 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 অপ আছে এটি resharding হিসাবে\[{"x"}, {}\] . প্রথম অক্ষগুলিতে, যেহেতু প্রত্যয়টি {"y", "z"} রিশার্ডের পরে সরানো হয়েছে, তাই আমরা অনুমান করি যে আমরা {"y", "z"} সমস্ত-সংগ্রহ করেছি। দ্বিতীয় মাত্রা পরিবর্তন করা হয় না.

-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-temp-explicit-reshards-for-optimizations

সুনির্দিষ্ট অপ্টিমাইজেশানের জন্য সুস্পষ্ট রিশার্ড সন্নিবেশ করায়।

এই পাসটি একটি অস্থায়ী সমাধান যতক্ষণ না আমরা ডিফল্টভাবে sdy-insert-explicit-reshards পাস সক্রিয় করতে পারি।

এটি আমাদের অপ্টিমাইজেশানের জন্য নির্দিষ্ট ক্রিয়াকলাপগুলিতে সুস্পষ্ট রিশার্ড সন্নিবেশ করার অনুমতি দেয়।

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

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

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