-sdy-add-data-flow-edges
প্রতিটি ডেটা-প্রবাহ প্রান্তের জন্য DataFlowEdgeOp
সন্নিবেশ করায়।
ডেটা-ফ্লো প্রান্তের মালিক প্রতিটি মানের জন্য DataFlowEdgeOp
সন্নিবেশ করায়, অর্থাৎ, মডিউলের প্রতিটি অপ-এ getDataFlowEdgeOwners
দ্বারা ফেরত দেওয়া সমস্ত মান।
ঢোকানো DataFlowEdgeOp
মালিকের টার্গেটের বিদ্যমান শার্ডিং গ্রহণ করবে যদি এটি বিদ্যমান থাকে।
-sdy-apply-sharding-constraints
সীমাবদ্ধতাগুলি প্রয়োগ করে যা তাদের ইনপুটের শর্ডিং নির্দেশ করে৷
একটি ShardingConstraintOp
এর শার্ডিংকে এর ইনপুটে অনুলিপি করে যদি এটি নিম্নলিখিত সবগুলিকে সন্তুষ্ট করে:
- ইনপুটটিতে একটি বিদ্যমান শার্ডিং নেই৷
-
ShardingConstraintOp
এর শার্ডিং সম্পূর্ণরূপে বন্ধ। - ইনপুটটিতে
ShardingConstraintOp
বাManualComputationOp
টাইপের অন্য কোনও ব্যবহারকারী নেই যার একটি ভিন্ন শার্ডিং রয়েছে৷
এই শর্তগুলি নির্দেশ করে যে ShardingConstraintOp
তার ইনপুটের শার্ডিং নির্দেশ করে।
যদি ইনপুটটি একটি ডেটা-ফ্লো প্রান্তের লক্ষ্য হয়, তাহলে অপের শার্ডিং সেট করার পরিবর্তে, আমরা input
সমস্ত ব্যবহারকে ShardingConstraintOp
দিয়ে প্রতিস্থাপন করি, যাতে প্রান্তের সমস্ত লক্ষ্যগুলির শার্ডিংকে সীমাবদ্ধ না করা যায়৷
উল্লেখ্য যে ShardingConstraintOp
এর শার্ডিং এই পাস নির্বিশেষে প্রচারের সময় এটির ইনপুট বা ব্যবহারকারীদের কাছে প্রচার করবে, কিন্তু যেহেতু একটি মাত্রার বন্ধ সম্পত্তি প্রচারিত হয় না, তাই উপরের ক্ষেত্রে সীমাবদ্ধতাকে সম্পূর্ণভাবে সম্মান করার জন্য শার্ডিংটি অনুলিপি করা গুরুত্বপূর্ণ।
উপরন্তু, যদি একটি টেনসর ShardingConstraintOp
s এর একটি চেইন দ্বারা ব্যবহৃত হয় যা নিম্নলিখিত সমস্তগুলিকে সন্তুষ্ট করে:
- টেনসরটি
ShardingConstraintOp
দ্বারা উত্পাদিত হয় না এবংShardingConstraintOp
বাManualComputationOp
টাইপের অন্য কোন ব্যবহারকারী নেই; - চেইনের
ShardingConstraintOp
এর কোনোটিরই শেষটি ছাড়া একাধিক ব্যবহার নেই; - চেইনের শেষ
ShardingConstraintOp
এShardingConstraintOp
বাManualComputationOp
টাইপের কোনো ব্যবহারকারী নেই (অন্যথায় এটি চেইনের শেষ নয়);
তারপর এই পাসটি চেইনের ইনপুটের অন্যান্য সমস্ত ব্যবহার প্রতিস্থাপন করে, যে:
- একটি
func.return
op নয়; - চেইনে শেষ
ShardingConstraintOp
পরে সংজ্ঞায়িত করা হয়েছে (এবং একই ব্লকের মধ্যে)
শৃঙ্খলের ফলাফলের সাথে, যেহেতু এটি সেই ব্যবহারগুলির শার্ডিংকে নির্দেশ করে।
-sdy-constant-splitter
ধ্রুবক সাব-কম্পিউটেশনকে বিভক্ত করে যাতে প্রতিটির একটি একক ব্যবহার থাকে।
ধ্রুবক সাব-কম্পিউটেশনকে বিভক্ত করে যাতে তাদের একজন একক ব্যবহারকারী থাকে।
এটি নিশ্চিত করে যে একটি ধ্রুবক সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে একটি শার্ডিং প্রচারিত হয় না, কারণ এটি একটি মিথ্যা নির্ভরতা হিসাবে বিবেচিত হয় (একটি ধ্রুবকের ব্যবহারগুলি একই ধ্রুবক ব্যবহার করার কারণে একইভাবে শার্ড করা উচিত নয়)। কার্যত, প্রতিটি ব্যবহারের একটি আলাদা শার্ডিং থাকতে পারে যা ধ্রুবক সাব-কম্পিউটেশনের নিজস্ব অনুলিপিতে বিচ্ছিন্নভাবে প্রচার করতে পারে।
একটি ধ্রুবক সাব-গণনা হয়:
- একটি ধ্রুবক বা আইওটা অপ (কোনও অপারেন্ড নেই)
- একটি ব্রডকাস্ট, স্লাইস, বা বিশুদ্ধ উপাদান-ভিত্তিক অপ, যার অপারেন্ডগুলি ধ্রুবক সাব-কম্পিউটেশন (পুনরাবৃত্তভাবে) দ্বারা সংজ্ঞায়িত করা হয়, তার অপারেন্ডগুলিকে সংজ্ঞায়িত করে এমন সম্পূর্ণ সাব-কম্পিউটেশন সহ।
মনে রাখবেন যে একটি ধ্রুবক সাব-কম্পিউটেশনের মধ্যে, একটি মান সেই সাব-কম্পিউটেশনের মধ্যে একাধিক ব্যবহার করতে পারে।
-sdy-lift-inlined-meshes
MeshOp
s-এর প্রতীক হিসাবে শার্ডিং-এ ইনলাইনযুক্ত MeshAttr
s তুলছে।
একটি TensorShardingAttr
এ যেকোন ইনলাইনযুক্ত MeshAttr
একটি জাল প্রতীক নামের সাথে প্রতিস্থাপন করে, মডিউলে একটি বিদ্যমান বা নতুন MeshOp
উল্লেখ করে, যেমন দুটি MeshOp
এর একটি অভিন্ন MeshAttr
নেই (বিদ্যমান MeshOp
গুলিও অনুমান করা হয়েছে)।
প্রতিটি নতুন MeshOp
এর নাম হয় হবে:
-
maximal_mesh_{device-id}
, একটি সর্বাধিক জালের জন্য (যেমন, খালি অক্ষ তালিকা এবং একটি একক ডিভাইস আইডি), অথবা - [
mesh
,mesh_0
,mesh_1
, ...]-এ প্রথম উপলব্ধ নাম।
-sdy-manual-axes-cleanup
ManualComputationOp
s-এ ম্যানুয়াল অক্ষের ব্যবহার পরিষ্কার করে
- যে কোনো ইন/আউট শার্ডিংয়ের জন্য যা একটি ম্যানুয়াল অক্ষ নির্দিষ্ট করেনি, সেই ম্যানুয়াল অক্ষটিকে এর প্রতিলিপিকৃত_অক্ষে যোগ করুন। ম্যানুয়াল অক্ষগুলি সর্বদা সম্পূর্ণরূপে নির্দিষ্ট করা হয়েছে তা নিশ্চিত করার জন্য এটি।
- ম্যানুয়াল অক্ষগুলিকে জাল অক্ষ ঘোষণার ক্রমে সাজায়।
-sdy-sharding-group-import
শার্ডিং গ্রুপের জন্য ক্যানোনিকালাইজেশন এবং বৈধতা পাস।
আমদানির পরে শার্ডিং গ্রুপগুলিতে ক্যানোনিকালাইজেশন এবং বৈধতা প্রয়োগ করে। যথা: এগুলি হল:
শেয়ারিং গ্রুপ একীকরণ
গ্রুপ মেম্বারশিপের ট্রানজিটিভ প্রপার্টি ব্যবহার করে শার্ডিং গ্রুপকে একত্রিত করে। যে কোনো সময় যখন একটি টেনসর T একটি শার্ডিং গ্রুপ G1 এবং শার্ডিং গ্রুপ G2-এ থাকে, তখন আমরা অনুমান করতে পারি যে G1 এবং G2-এর সমস্ত সদস্যকে একইভাবে শার্ড করা উচিত। এইভাবে আমরা একটি একক গ্রুপে G1 এবং G2 একত্রিত করতে পারি। মার্জ করার পর ক্যানোনিকাল গ্রুপ আইডির সেট হবে ন্যূনতম গ্রুপের সেটের জন্য 0,1,...N-1।
Sharding গ্রুপ বৈধতা
যাচাই করে যে শার্ডিং গ্রুপগুলি ভালভাবে গঠিত এবং বাস্তবায়নের মধ্যে অনুমানের সাথে সামঞ্জস্যপূর্ণ। এটি বর্তমানে দাবি করে যে যদি একটি শার্ডিং গ্রুপে একটি
ManualComputationOp
ব্লকের মধ্যে সংজ্ঞায়িত একটিValue
থাকে, তাহলে সেই গ্রুপের অন্যান্য সমস্ত মান অবশ্যই একই ব্লকে থাকবে।