StableHLO-তে কোয়ান্টাইজেশনের ধরন
কোয়ান্টাইজেশন হল ফ্লোটিং-পয়েন্ট সংখ্যা (যেমন মূল মডেলগুলিতে ব্যবহৃত) নিম্ন-নির্ভুল পূর্ণসংখ্যাগুলিতে রূপান্তর করে মেশিন লার্নিং মডেলগুলিকে অপ্টিমাইজ করার একটি কৌশল। এটি মেমরির ব্যবহার হ্রাস করে এবং কম্পিউটেশনের গতি বাড়ায়, সীমিত সংস্থান সহ ডিভাইসগুলিতে স্থাপনের জন্য মডেলগুলিকে আরও দক্ষ করে তোলে।
StableHLO কোয়ান্টাইজেশন LiteRT কোয়ান্টাইজেশন স্পেসিফিকেশন অনুসরণ করে, একটি অভিন্ন কোয়ান্টাইজেশন স্কিম ব্যবহার করে যা পার-টেনসর এবং প্রতি-অক্ষের কোয়ান্টাইজেশন উভয়ের জন্য সমর্থন করে। এটি MLIR এর কোয়ান্ট উপভাষা থেকে এর টাইপ এক্সপ্রেশন উত্তরাধিকার সূত্রে প্রাপ্ত, কোয়ান্টাইজড ডেটা টাইপগুলিকে উপস্থাপন করার জন্য একটি প্রমিত উপায় প্রদান করে।
ইউনিফর্ম কোয়ান্টাইজেশন একটি ইউনিফর্ম স্টেপ সাইজ ব্যবহার করে পূর্ণসংখ্যাগুলিতে ভাসমান-বিন্দু মান ম্যাপ করে, যার ফলে সমানভাবে ব্যবধানে কোয়ান্টাইজড মানগুলি তৈরি হয়। এটি দুটি মূল পরিমাপকরণ পরামিতি ব্যবহার করে একটি অ্যাফাইন রেশনশিপের মাধ্যমে অর্জন করা হয়।
ইউনিফর্ম কোয়ান্টাইজেশন ফ্লোটিং-পয়েন্ট সংখ্যার উপস্থাপনাকে সরল করে পূর্ণসংখ্যাগুলিতে ম্যাপ করে যা সমানভাবে ব্যবধানে রয়েছে। এই ম্যাপিংটি একটি অ্যাফাইন ট্রান্সফর্মেশনের মাধ্যমে অর্জন করা হয় যা দুটি মূল প্যারামিটার ব্যবহার করে: স্কেল এবং জিরো পয়েন্ট । স্কেল নির্ধারণ করে পরপর কোয়ান্টাইজড মানগুলির মধ্যে ধাপের আকার নির্ধারণ করে। একটি ছোট স্কেল মানে পরিমাপকৃত মানগুলি একসাথে কাছাকাছি। শূন্য বিন্দু পূর্ণসংখ্যার মানকে সংজ্ঞায়িত করে যা মূল ফ্লোটিং-পয়েন্ট স্পেসে শূন্যকে উপস্থাপন করে।
ইউনিফর্ম কোয়ান্টাইজেশনে মূল ফ্লোটিং-পয়েন্ট মান ( real_value
) এবং quantized integer value ( quantized_value
) এর মধ্যে সম্পর্ক হল:
real_value = scale * (quantized_value - zero_point)
পার-টেনসর কোয়ান্টাইজেশন
প্রতি-টেনসর কোয়ান্টাইজেশনে, টেনসরের মধ্যে থাকা সমস্ত মানগুলির জন্য একটি একক স্কেল এবং শূন্য বিন্দু ব্যবহার করা হয়। একটি প্রতি-টেনসর কোয়ান্টাইজড টাইপ StableHLO তে প্রকাশ করা হয় এইভাবে:
quant.uniform scale:zero_point>
উদাহরণ : !quant.uniform<i8:f32, 0.01:50>
এটি 0.01
এর একটি স্কেল এবং 50
এর একটি শূন্য বিন্দু ব্যবহার করে একটি 32-বিট ফ্লোটিং-পয়েন্ট সংখ্যা ( f32
) সংরক্ষণ করতে ব্যবহৃত একটি 8-বিট পূর্ণসংখ্যা ( i8
) উপস্থাপন করে।
প্রতি-অক্ষ কোয়ান্টাইজেশন
প্রতি-অক্ষ পরিমাপকরণ প্রতি-টেনসর পরিমাপকরণের তুলনায় আরও সূক্ষ্ম-দানাযুক্ত পদ্ধতির প্রস্তাব করে। সমগ্র টেনসরের জন্য একটি একক স্কেল এবং শূন্য বিন্দু ব্যবহার করার পরিবর্তে, প্রতি-অক্ষের পরিমাপকরণ টেনসরের একটি নির্দিষ্ট মাত্রা quantized_dimension
বরাবর স্লাইসগুলিতে পৃথক স্কেল এবং শূন্য পয়েন্ট নির্ধারণ করে। এটি বিশেষভাবে উপযোগী যখন মানগুলি বিভিন্ন মাত্রায় উল্লেখযোগ্যভাবে পরিবর্তিত হয়, তথ্য এবং নির্ভুলতার আরও ভাল সংরক্ষণের অনুমতি দেয়।
মাত্রার আকার সহ একটি টেনসর টি বিবেচনা করুন [4, 3, 2]
। আমরা এই টেনসরটিকে দ্বিতীয় মাত্রা ( quantized_dimension = 1
) বরাবর পরিমাপ করতে বেছে নিই। এর মানে আমাদের তিনটি স্লাইস থাকবে (যেহেতু দ্বিতীয় মাত্রার আকার 3), প্রতিটির নিজস্ব স্কেল এবং শূন্য বিন্দু রয়েছে:
t[:, 0, :]: This slice gets scale[0] and zero_point[0].
t[:, 1, :]: This slice gets scale[1] and zero_point[1].
t[:, 2, :]: This slice gets scale[2] and zero_point[2].
StableHLO-তে, প্রতি-অক্ষের কোয়ান্টাইজড টাইপকে এভাবে প্রকাশ করা হয়:
quant.uniform {scale0:zero_point0, scale1:zero_point1, ...}>
যেখানে scale:zero_point
ধারণকৃত টেনসরের quantized_dimension
বরাবর স্লাইসের সংখ্যার সাথে মেলে।
উদাহরণ : tensor<4x3x2x!quant.uniform<i8:f32:1, {0.2:20, 0.1:10, 0.3:30}>>
StableHLO-তে কোয়ান্টাইজেশন পাস
StableHLO বেশ কয়েকটি কম্পাইলার পাস সরবরাহ করে যা কোয়ান্টাইজেশন সম্পর্কিত বিভিন্ন রূপান্তর এবং অপ্টিমাইজেশানের অনুমতি দেয়, আপনি কীভাবে কোয়ান্টাইজড মডেলগুলি পরিচালনা করেন তাতে আপনাকে নমনীয়তা দেয়। এই পাসগুলি হল:
stablehlo-legalize-qdq-to-quantized-op
এই পাসটি কোয়ান্টাইজড মডেলে একটি সাধারণ প্যাটার্নকে ফিউজ করে, একটি ডিকোয়ান্টাইজ অপারেশনের পরে একটি ফ্লোটিং-পয়েন্ট অপারেশন এবং অবশেষে একটি কোয়ান্টাইজ অপারেশন, একটি একক কোয়ান্টাইজড অপারেশনে পরিণত হয়। বিস্তারিত
stablehlo-বৈধ-পরিমাণিত-অপ-টু-qdq
এই পাস আগের পাসের বিপরীত করে। এটি একটি কোয়ান্টাইজড অপারেশনকে তার ডিকোয়ান্টাইজ, ফ্লোটিং-পয়েন্ট অপারেশন এবং কোয়ান্টাইজ অপারেশনের সমতুল্য ক্রমে পচিয়ে দেয়। বিস্তারিত
stablehlo-বৈধ-পরিমাণ-থেকে-গণিত
এই পাসটি কোয়ান্টাইজড ধরনের স্ট্যাবলএইচএলও অপারেশনগুলিকে পূর্ণসংখ্যার ধরনের সমতুল্য অপারেশনে রূপান্তর করে। এটি মূলত স্ট্যান্ডার্ড গাণিতিক ক্রিয়াকলাপ ব্যবহার করে পরিমাপকরণ গাণিতিক প্রয়োগ করে। এই পচন পদ্ধতিটি এমন সিস্টেমের জন্য উপযোগী যেগুলি নেটিভভাবে কোয়ান্টাইজেশন সমর্থন করে না, কিন্তু তারপরও কোয়ান্টাইজেশন গাণিতিক ব্যবহার করে কোয়ান্টাইজড মডেলের শব্দার্থ প্রকাশ করতে পারে। বিস্তারিত
stablehlo-quant-বৈধ-থেকে-tosa-rescale
StableHLO TOSA উপভাষায় তাদের সংশ্লিষ্ট উপস্থাপনাগুলিতে কোয়ান্টাইজড ক্রিয়াকলাপগুলিকে বৈধ করার ক্ষমতা প্রদান করে৷ এই বৈধকরণ StableHLO এবং TOSA-এর মধ্যে সামঞ্জস্য এবং আন্তঃকার্যযোগ্যতা সহজতর করে। এই পাসটি কৌশলগতভাবে StableHLO কোয়ান্টাইজড অপারেশনগুলিকে StableHLO এবং TOSA অপারেশনের সংমিশ্রণে রূপান্তরিত করে, TOSA উপভাষাটি প্রাথমিকভাবে rescale
অপারেশনের জন্য নিযুক্ত করা হয়। tosa.rescale
op টোসা ফ্রেমওয়ার্কের মধ্যে কোয়ান্টাইজড ডেটার সঠিক উপস্থাপনা সক্ষম করে কোয়ান্টাইজড মানের স্কেল এবং জিরো পয়েন্ট সামঞ্জস্য করতে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। বিস্তারিত
tosa-rescale-legalize-to-stablehlo
এই পাসটি TOSA পুনঃস্কেল অপারেশনগুলিকে StableHLO আদিম গণিত অপারেশনগুলিতে পুনর্লিখন করে। এই পাসের জন্য প্রধান ব্যবহারের ক্ষেত্রে একটি হল StableHLO দোভাষীকে TOSA পুনঃস্কেল অপারেশন সম্বলিত প্রোগ্রামগুলি মূল্যায়ন করার অনুমতি দেওয়া। বিস্তারিত
কোয়ান্টাইজড প্রোগ্রাম মূল্যায়ন
StableHLO রেফারেন্স ইন্টারপ্রেটার দক্ষতার সাথে কোয়ান্টাইজড ক্রিয়াকলাপ সমন্বিত প্রোগ্রামগুলি চালাতে পারে। এটি অর্জন করার জন্য, এটি প্রথমে শুধুমাত্র পূর্ণসংখ্যা ক্রিয়াকলাপ ব্যবহার করে প্রোগ্রামটিকে একটি সমতুল্য উপস্থাপনায় নামিয়ে দেয়। এই কম করার প্রক্রিয়ার মধ্যে কম্পাইলার পাসের একটি সিরিজ জড়িত যা ব্যাখ্যার আগে প্রোগ্রামকে রূপান্তরিত করে।
মূলত, দোভাষী কোয়ান্টাইজড ক্রিয়াকলাপগুলিকে তাদের সংশ্লিষ্ট পূর্ণসংখ্যা গাণিতিক বাস্তবায়নে রূপান্তর করতে stablehlo-legalize-quant-to-math
পাস ব্যবহার করে। এই পাসটি স্কেল গুণ/বিভাগ এবং শূন্য-বিন্দু যোগ পরিচালনার জন্য CHLO সম্প্রচার ক্রিয়াকলাপ প্রবর্তন করে। StableHLO দোভাষীর সাথে সামঞ্জস্য নিশ্চিত করার জন্য, এই CHLO অপারেশনগুলিকে তারপর StableHLO অপারেশনে বৈধ করা হয়। এটি আকৃতি-সম্পর্কিত ক্রিয়াকলাপগুলিকে প্রবর্তন করে যা পরবর্তীতে ক্যানোনিকালাইজেশন পাসগুলির একটি সিরিজ ব্যবহার করে ক্যানোনিকালাইজড এবং অপ্টিমাইজ করা হয়।
এই কমানোর প্রক্রিয়ার সাথে জড়িত পাসের সম্পূর্ণ ক্রমটি নিম্নরূপ:
stablehlo-legalize-quant-to-math
chlo-legalize-to-stablehlo
canonicalize
shape-legalize-to-stablehlo
stablehlo-canonicalize-dynamism
কোয়ান্টাইজড টেস্ট কেস
StableHLO কোয়ান্টাইজড ক্রিয়াকলাপগুলির সঠিকতা এবং আচরণ যাচাই করার জন্য কোয়ান্টাইজড টেস্ট কেসগুলির একটি বিস্তৃত স্যুট সরবরাহ করে। এই পরীক্ষার কেসগুলি ইউনিট পরীক্ষা হিসাবে কাজ করে, যা কোয়ান্টাইজড পরিস্থিতিতে বিভিন্ন StableHLO অপারেশন কভার করে।
একটি quantized পরীক্ষার ক্ষেত্রে একটি সাধারণ উদাহরণ মত দেখায়
func.func @main() -> tensor<11xf32> {
%operand_0 = stablehlo.constant dense<...> : tensor<11xf32>
%operand_1 = stablehlo.constant dense<...> : tensor<11xf32>
%golden = stablehlo.constant dense<...> : tensor<11xf32>
%0 = stablehlo.uniform_quantize %operand_0 : (tensor<11xf32>) -> tensor<11x!quant.uniform<i8:f32, 0.3>>
%1 = stablehlo.uniform_quantize %operand_1 : (tensor<11xf32>) -> tensor<11x!quant.uniform<i8:f32, 0.3>>
%2 = stablehlo.add %1, %0 : tensor<11x!quant.uniform<i8:f32, 0.3>>
%result = stablehlo.uniform_dequantize %2 : (tensor<11x!quant.uniform<i8:f32, 0.3>>) -> tensor<11xf32>
%4 = stablehlo.custom_call @check.eq(%golden, %result) : (tensor<11xf32>, tensor<11xf32>) -> tensor<i1>
return %3 : tensor<11xf32>
}
এবং অন্তর্ভুক্ত:
- ইনপুট ডেটা: অপারেশনের জন্য প্রতিনিধিত্বমূলক ইনপুট মান।
- গোল্ডেন আউটপুট: StableHLO রেফারেন্স ইন্টারপ্রেটার এবং HLO মূল্যায়নকারীর সাথে মেনে ইনপুট ডেটাতে প্রয়োগ করার সময় অপারেশনের প্রত্যাশিত আউটপুট।
এই পরীক্ষার ক্ষেত্রে মূল্যবান:
- StableHLO কোয়ান্টাইজেশন যাচাই করা: নিশ্চিত করা যে StableHLO অপারেশনের কোয়ান্টাইজেশন আচরণ প্রত্যাশিত ফলাফলের সাথে সারিবদ্ধ।
- ক্রস-ভ্যালিডেশন: অন্যান্য বাস্তবায়ন বা কাঠামোর সাথে StableHLO কোয়ান্টাইজেশনের আচরণের তুলনা করা।
- ডিবাগিং এবং ডেভেলপমেন্ট: নতুন কোয়ান্টাইজেশন ফিচার বা অপ্টিমাইজেশনের ডেভেলপমেন্ট এবং ডিবাগিং এ সাহায্য করা।