-mpmd-delay-inferred-fragments
অনুমিত খণ্ডাংশগুলোকে যথাসম্ভব দেরিতে কার্যকর করার জন্য বিলম্বিত করা হয়।
অনুমানকৃত ফ্র্যাগমেন্টগুলিকে যথাসম্ভব দেরিতে, অর্থাৎ তাদের প্রথম কনজিউমারের ঠিক আগে, এক্সিকিউট করার জন্য সরিয়ে দেয়।
-mpmd-delay-transfers-from-cpu
সিপিইউ থেকে ডেটা স্থানান্তর বিলম্বিত করে, যাতে তা যথাসম্ভব দেরিতে কার্যকর হয়।
সিপিইউ থেকে ডিভাইসে ডেটা স্থানান্তরের অপারেশনগুলোকে তাদের প্রথম ব্যবহারকারীর ঠিক আগে নিয়ে আসে। এর মানে হলো, স্থানান্তরিত বাফারগুলোর জন্য মেমরি বরাদ্দ করা স্থগিত রাখা, যা এইচবিএম (HBM) ব্যবহারের জন্য সুবিধাজনক হতে পারে।
-mpmd-lower-to-fragment-calls
MPMD ফ্র্যাগমেন্টগুলিকে ফ্র্যাগমেন্ট কল এবং ফাংশনে পরিণত করে।
সমস্ত ফ্র্যাগমেন্টকে ফ্র্যাগমেন্ট কল দিয়ে প্রতিস্থাপন করে।
এই ধাপে, একই বডি ও মেশ শেপযুক্ত প্রতিটি ফ্র্যাগমেন্ট গ্রুপের জন্য একটি ফাংশন তৈরি করা হয়, যেখানে গ্রুপের মধ্যে প্রথম পাওয়া ফ্র্যাগমেন্টটির নামটি সিম্বল নেম হিসেবে ব্যবহৃত হয়, এবং এটিকে সিম্বল টেবিলে যুক্ত করা হয়।
প্রতিটি ফাংশনের বডি সংশ্লিষ্ট গ্রুপের প্রথম প্রাপ্ত ফ্র্যাগমেন্টের বডি থেকে নেওয়া হয়, এবং সেই ফ্র্যাগমেন্টের মেশের নাম ব্যবহার করে টপোলজি থেকে মেশের আকৃতি নেওয়া হয়। যদি ফ্র্যাগমেন্টটিতে ইনপুট-আউটপুট অ্যালিয়াসিং সম্পর্কিত আর্গুমেন্ট অ্যাট্রিবিউট থাকে, তবে সেগুলি লোয়ার্ড ফাংশনের আর্গুমেন্ট অ্যাট্রিবিউটগুলিতে বরাদ্দ করা হবে।
যেহেতু ফাংশনগুলোর নাম অনন্য হতে হবে, তাই এই ধাপে একই মূল নামের প্রথম ফাংশনটি ছাড়া বাকি সবগুলোর নামের সাথে একটি ইনডেক্স যুক্ত করা হয়। অর্থাৎ, i > 0 এর জন্য "some_name" নামের i-তম ফাংশনটির নাম হবে "some_name_i"।
বিকল্প
-verbose-logging : Whether to enable verbose logging
-mpmd-mark-aliasing-and-donation
প্রতিটি খণ্ডকে উপনাম বা দানের তথ্য দিয়ে চিহ্নিত করে।
যখন কোনো Fragment ops-এর ইনপুটকে কোনো আউটপুটের সাথে এলিয়াস করা যায় বা দান করা যায়, তখন সেটিতে একটি arg_attrs অ্যাট্রিবিউট সেট করা হয়। এলিয়াস করা যায় এমন প্রতিটি ইনপুটের একটি tf.aliasing_output অ্যাট্রিবিউট থাকবে। অন্যথায়, একটি jax.buffer_donor = true অ্যাট্রিবিউট থাকবে। উদাহরণস্বরূপ, {arg_attrs =\[{tf.aliasing_output = 0 : i32}, {jax.buffer_donor = true}, {}\]} দেখায় যে প্রথম ইনপুটটিকে আউটপুট ০ দিয়ে অ্যালিয়াস করা যেতে পারে, দ্বিতীয় ইনপুটটিকে ডোনেট করা যেতে পারে যাতে XLA একটি অ্যালিয়াস করা আউটপুট খুঁজে পায়, এবং তৃতীয় ইনপুটটিকে অ্যালিয়াস বা ডোনেট করা যায় না।
-mpmd-mark-fragment-reserved-memory
কম্পাইলেশনের জন্য যে পরিমাণ মেমরি সংরক্ষণ করতে হবে, তা দিয়ে প্রতিটি ফ্র্যাগমেন্ট চিহ্নিত করুন।
প্রতিটি ফ্র্যাগমেন্টে একটি reserved_hbm_bytes অ্যাট্রিবিউট নির্ধারণ করা হয়, যা XLA-কে জানিয়ে দেয় প্রতিটি ফ্র্যাগমেন্ট কম্পাইল করার সময় কত বাইট জায়গা রাখতে হবে। একটি মেশের লাইভ টেনসরগুলোর হিসাব রাখার মাধ্যমে, XLA এক্সিকিউশনের সময়কার প্রকৃত সর্বনিম্ন মেমরি ব্যবহার সম্পর্কে জানতে পারে, এবং আমরা এক্সিকিউটেবলে এমন অপটিমাইজেশন প্রয়োগ করা থেকে এটিকে বিরত রাখতে পারি যা ডিভাইসের ক্ষমতার বাইরে মেমরি ব্যবহার বাড়িয়ে দেবে। দ্রষ্টব্য: এই ধাপে ধরে নেওয়া হয় যে ফ্র্যাগমেন্টগুলো প্রোগ্রাম অর্ডার অনুযায়ী এক্সিকিউট করা হয়।
-mpmd-mark-input-output-with-layouts
ফাংশন আর্গুমেন্ট/ফলাফল থেকে ফ্র্যাগমেন্ট আর্গুমেন্ট/ফলাফলে লেআউট স্থানান্তর করে।
প্রোগ্রাম ইনপুট থেকে mhlo.layout_mode অ্যাট্রিবিউটগুলো সেইসব ফ্র্যাগমেন্টে প্রেরণ করা হয় যারা প্রোগ্রাম ইনপুট গ্রহণ করে, এবং প্রোগ্রাম আউটপুট থেকে mhlo.layout_mode অ্যাট্রিবিউটগুলো সেইসব ফ্র্যাগমেন্টে প্রেরণ করা হয় যারা আউটপুট তৈরি করে। যদি কোনো প্রোগ্রাম আর্গুমেন্ট রিটার্ন করা হয়, তবে mhlo.layout_mode প্রোগ্রাম রেজাল্টে প্রেরণ করা হয়। যে সমস্ত ইনপুট, আউটপুট এবং ফ্র্যাগমেন্ট আর্গুমেন্ট/রেজাল্ট একটি ট্রান্সফার অপের সাথে সংযুক্ত থাকে, সেগুলোকে সর্বদা ডিফল্ট লেআউট দিয়ে ওভাররাইট করা হয়, কারণ ট্রান্সফার শুধুমাত্র ডিফল্ট লেআউট সমর্থন করে।
যদি কোনো প্রোগ্রাম আর্গুমেন্ট AUTO লেআউটে সেট করা থাকে এবং সেটি একাধিক ফ্র্যাগমেন্টে ব্যবহৃত হয়, তাহলে ফ্র্যাগমেন্টগুলো জুড়ে একটি সামঞ্জস্যপূর্ণ লেআউট সেটআপ করার জন্য আমরা সেটিকে DEFAULT লেআউট হিসেবে সেট করে দিই।
যদি প্রোগ্রামের আউটপুট, যা একটি ফ্র্যাগমেন্টের ফলাফলও বটে, অটো লেআউটে সেট করা থাকে এবং অন্যান্য ফ্র্যাগমেন্টে ইনপুট হিসেবে ব্যবহৃত হয়, তাহলে ফ্র্যাগমেন্টগুলো জুড়ে একটি সামঞ্জস্যপূর্ণ লেআউট তৈরি করার জন্য আমরা সেটিকে ডিফল্ট লেআউট হিসেবেও সেট করে দিই।
-mpmd-mark-offloaded-input-output
অফলোড করা ইনপুট এবং আউটপুট মানগুলোকে চিহ্নিত করে, যাতে কম্পাইলার বুঝতে পারে যে সেগুলো হোস্ট মেমরিতে রয়েছে।
ফ্র্যাগমেন্ট আর্গুমেন্ট এবং ফলাফলকে অ্যাট্রিবিউট দিয়ে চিহ্নিত করে, যাতে কোন মানগুলো হোস্ট মেমরিতে থাকে তা শনাক্ত করা যায় এবং এই তথ্য XLA ব্যবহার করতে পারে। এছাড়াও এন্ট্রিপয়েন্ট ফাংশনের আর্গুমেন্ট এবং ফলাফলকে চিহ্নিত করে, যাতে Pathways এই তথ্য ব্যবহার করতে পারে।
-mpmd-sink-create-token-into-fragments
stablehlo.create টোকেন অপসগুলোকে ফ্র্যাগমেন্ট বডিতে সিঙ্ক করে।
MPMD ডায়ালেক্টটি এখনও ক্রস-ফ্র্যাগমেন্ট টোকেন পাসিং সমর্থন করে না। তাই এর পরিবর্তে, এই পাসটি টোকেনগুলোকে ডুপ্লিকেট করে এবং প্রতিটি ফ্র্যাগমেন্টে অন্তর্ভুক্ত করে, যার ফলে ফ্র্যাগমেন্টগুলোর মধ্যে টোকেন-ভিত্তিক সিকোয়েন্সিং বিচ্ছিন্ন হয়ে যায়।
এই পাসের পর, কোনো টোকেনই আর ফ্র্যাগমেন্ট সীমানা অতিক্রম করে না।
-mpmd-validate-no-backward-deps
শুধুমাত্র-ফরোয়ার্ড প্রোগ্রামগুলিতে কোনও পশ্চাৎমুখী নির্ভরতা নেই তা যাচাই করে।
এটি যাচাই করে যে ফ্র্যাগমেন্ট কলগুলির মধ্যেকার প্রতিটি ডেটা নির্ভরতা আভিধানিকভাবে পূর্ববর্তী মেশ নাম থেকে পরবর্তী নামে পরিবর্তিত হয়। একটি পশ্চাৎমুখী নির্ভরতা পাইপলাইন বাবল তৈরি করে।
ডিফল্টরূপে, এই পাসটি এই ধরনের প্রতিটি ডিপেন্ডেন্সির জন্য একটি সতর্কবার্তা দেয়। যদি fail-on-backward-deps সেট করা থাকে, তবে এটি একটি এরর দেখায় এবং ব্যর্থ হয়।
এই পাসটি শুধুমাত্র ফরোয়ার্ড-অনলি প্রোগ্রামগুলোর জন্য প্রযোজ্য, অর্থাৎ, যে প্রোগ্রামগুলোর সমস্ত ফ্র্যাগমেন্টের ট্রান্সপোজ কাউন্ট ০। ব্যাকওয়ার্ড ফ্র্যাগমেন্টযুক্ত প্রোগ্রামগুলো (ট্রান্সপোজ কাউন্ট ≠ ০) বাদ দেওয়া হয়।
বিকল্প
-fail-on-backward-deps : Whether to emit an error (and fail) instead of a warning.
-mpmd-validate-no-inferred-fragments
যাচাই করে যে কোনো অনুমিত খণ্ডাংশ বিদ্যমান নেই।
যাচাই করে যে সমস্ত অনুমানকৃত খণ্ডাংশ একত্রিত হয়েছে।
ডিফল্টরূপে, কোনো অনুমিত খণ্ডাংশ অবশিষ্ট থাকলে এই পাসটি একটি ত্রুটি প্রদর্শন করে। যদি fail-on-inferred-fragments false-এ সেট করা হয়, তবে এটি পরিবর্তে একটি সতর্কবার্তা প্রদর্শন করে।
বিকল্প
-fail-on-inferred-fragments : Whether to emit an error (and fail) instead of a warning.
-mpmd-validate-no-param-transfers
নিশ্চিত করে যে কোনো প্যারামিটার টেনসর মেশগুলোর মধ্যে স্থানান্তরিত হচ্ছে না।
এটি নিশ্চিত করে যে TransferOps এমন কোনো টেনসর স্থানান্তর না করে, যার JAX লোকেশন তথ্য একটি কনফিগারযোগ্য প্যাটার্নের (ডিফল্ট: "params['transformer") সাথে মিলে যায়। এই ধরনের স্থানান্তর সাধারণত নির্দেশ করে যে মডেল প্যারামিটারগুলো ভুলবশত বিভিন্ন মেশের মধ্যে স্থানান্তরিত হচ্ছে।
ডিফল্টরূপে, এই পাসটি একটি সতর্কবার্তা দেয়। এর পরিবর্তে একটি ত্রুটি দেখাতে এবং ব্যর্থ হতে fail-on-param-transfers=true সেট করুন।
বিকল্প
-fail-on-param-transfers : Whether to emit an error (and fail) instead of a warning (default: false).
-param-pattern : Pattern to match against the location info of transferred tensors.
-mpmd-validate-no-reshards
নিশ্চিত করে যে শুধুমাত্র রিশার্ড-যুক্ত কোনো ফ্র্যাগমেন্ট নেই।
একটি রিশার্ড-অনলি ফ্র্যাগমেন্ট হলো এমন একটি ফ্র্যাগমেন্ট যাতে শুধুমাত্র এর আর্গুমেন্টগুলোর একটির mpmd.return থাকে। এই ফ্র্যাগমেন্টগুলো সাধারণত একটি অপ্রত্যাশিত রিশার্ড নির্দেশ করে।
ডিফল্টরূপে, এই পাসটি এই ধরনের প্রতিটি ফ্র্যাগমেন্টের জন্য একটি সতর্কবার্তা দেয়। যদি fail-on-reshard-only-fragments সেট করা থাকে, তবে এটি একটি ত্রুটি দেখায় এবং ব্যর্থ হয়।
বিকল্প
-fail-on-reshard-only-fragments : Whether to emit an error (and fail) instead of a warning.