आज के गहरे शिक्षण परिदृश्य में, संसाधन-विवश वातावरण में तैनाती के लिए मॉडल का अनुकूलन पहले से कहीं अधिक महत्वपूर्ण है। वेट परिमाणीकरण मॉडल मापदंडों की सटीकता को कम करके इस आवश्यकता को संबोधित करता है, आमतौर पर 32-बिट फ्लोटिंग पॉइंट वैल्यू से कम-चौड़ाई के प्रतिनिधित्व को कम करता है, इस प्रकार छोटे मॉडल पैदा करते हैं जो सीमित संसाधनों के साथ हार्डवेयर पर तेजी से चल सकते हैं। यह ट्यूटोरियल एक पूर्व-प्रशिक्षित Resnet18 मॉडल पर Pytorch की गतिशील परिमाणीकरण तकनीक का उपयोग करके वजन परिमाणीकरण की अवधारणा का परिचय देता है। ट्यूटोरियल यह पता लगाएगा कि वजन वितरण का निरीक्षण कैसे करें, कुंजी परतों (जैसे पूरी तरह से जुड़ी परतें) पर गतिशील मात्रा में लागू करें, मॉडल आकारों की तुलना करें, और परिणामी परिवर्तनों की कल्पना करें। यह ट्यूटोरियल आपको गहरी सीखने के मॉडल को तैनात करने के लिए आवश्यक सैद्धांतिक पृष्ठभूमि और व्यावहारिक कौशल से लैस करेगा।
import torch
import torch.nn as nn
import torch.quantization
import torchvision.models as models
import matplotlib.pyplot as plt
import numpy as np
import os
print("Torch version:", torch.__version__)
हम आवश्यक पुस्तकालयों जैसे कि Pytorch, Torchvision, और Matplotlib को आयात करते हैं, और Pytorch संस्करण को प्रिंट करते हैं, यह सुनिश्चित करते हुए कि सभी आवश्यक मॉड्यूल मॉडल हेरफेर और विज़ुअलाइज़ेशन के लिए तैयार हैं।
model_fp32 = models.resnet18(pretrained=True)
model_fp32.eval()
print("Pretrained ResNet18 (FP32) model loaded.")
एक प्रीट्रेन्ड RESNET18 मॉडल को FP32 (फ्लोटिंग-पॉइंट) सटीकता में लोड किया गया है और मूल्यांकन मोड पर सेट किया गया है, इसे आगे की प्रक्रिया और परिमाणीकरण के लिए तैयार किया गया है।
fc_weights_fp32 = model_fp32.fc.weight.data.cpu().numpy().flatten()
plt.figure(figsize=(8, 4))
plt.hist(fc_weights_fp32, bins=50, color="skyblue", edgecolor="black")
plt.title("FP32 - FC Layer Weight Distribution")
plt.xlabel("Weight values")
plt.ylabel("Frequency")
plt.grid(True)
plt.show()
इस ब्लॉक में, FP32 मॉडल की अंतिम पूरी तरह से जुड़े परत से वज़न निकाला जाता है और चपटा किया जाता है, फिर एक हिस्टोग्राम को किसी भी परिमाणीकरण को लागू करने से पहले उनके वितरण की कल्पना करने के लिए प्लॉट किया जाता है।
quantized_model = torch.quantization.quantize_dynamic(model_fp32, {nn.Linear}, dtype=torch.qint8)
quantized_model.eval()
print("Dynamic quantization applied to the model.")
हम मॉडल के लिए गतिशील परिमाणीकरण लागू करते हैं, विशेष रूप से रैखिक परतों को लक्षित करते हैं-उन्हें कम-सटीक प्रारूपों में बदलने के लिए, मॉडल आकार और अनुमान विलंबता को कम करने के लिए एक प्रमुख तकनीक का प्रदर्शन करते हैं।
def get_model_size(model, filename="temp.p"):
torch.save(model.state_dict(), filename)
size = os.path.getsize(filename) / 1e6
os.remove(filename)
return size
fp32_size = get_model_size(model_fp32, "fp32_model.p")
quant_size = get_model_size(quantized_model, "quant_model.p")
print(f"FP32 Model Size: {fp32_size:.2f} MB")
print(f"Quantized Model Size: {quant_size:.2f} MB")
एक सहायक फ़ंक्शन को डिस्क पर मॉडल आकार को बचाने और जांचने के लिए परिभाषित किया गया है; फिर, इसका उपयोग मूल FP32 मॉडल और परिमाणित मॉडल के आकारों को मापने और तुलना करने के लिए किया जाता है, जो परिमाणीकरण के संपीड़न प्रभाव को प्रदर्शित करता है।
dummy_input = torch.randn(1, 3, 224, 224)
with torch.no_grad():
output_fp32 = model_fp32(dummy_input)
output_quant = quantized_model(dummy_input)
print("Output from FP32 model (first 5 elements):", output_fp32(0)(:5))
print("Output from Quantized model (first 5 elements):", output_quant(0)(:5))
एक छवि को अनुकरण करने के लिए एक डमी इनपुट टेंसर बनाया जाता है, और FP32 और परिमाणित मॉडल दोनों इस इनपुट पर चलाए जाते हैं ताकि आप उनके आउटपुट की तुलना कर सकें और यह मान्यता दे सकें कि परिमाणीकरण भविष्यवाणियों को काफी बदल नहीं देता है।
if hasattr(quantized_model.fc, 'weight'):
fc_weights_quant = quantized_model.fc.weight().dequantize().cpu().numpy().flatten()
else:
fc_weights_quant = quantized_model.fc._packed_params._packed_weight.dequantize().cpu().numpy().flatten()
plt.figure(figsize=(14, 5))
plt.subplot(1, 2, 1)
plt.hist(fc_weights_fp32, bins=50, color="skyblue", edgecolor="black")
plt.title("FP32 - FC Layer Weight Distribution")
plt.xlabel("Weight values")
plt.ylabel("Frequency")
plt.grid(True)
plt.subplot(1, 2, 2)
plt.hist(fc_weights_quant, bins=50, color="salmon", edgecolor="black")
plt.title("Quantized - FC Layer Weight Distribution")
plt.xlabel("Weight values")
plt.ylabel("Frequency")
plt.grid(True)
plt.tight_layout()
plt.show()
इस ब्लॉक में, मात्राबद्ध वजन (डेक्वेंटाइजेशन के बाद) को पूरी तरह से जुड़े परत से निकाला जाता है और मात्राकरण के कारण वजन वितरण में परिवर्तन को चित्रित करने के लिए मूल FP32 वेट के खिलाफ हिस्टोग्राम के माध्यम से तुलना की जाती है।
अंत में, ट्यूटोरियल ने मॉडल के आकार और प्रदर्शन पर इसके प्रभाव को उजागर करते हुए वजन परिमाणीकरण को समझने और लागू करने के लिए एक चरण-दर-चरण मार्गदर्शिका प्रदान की है। एक पूर्व-प्रशिक्षित Resnet18 मॉडल की मात्रा निर्धारित करके, हमने वजन वितरण में बदलाव, मॉडल संपीड़न में मूर्त लाभ, और संभावित अनुमान गति में सुधार का अवलोकन किया। यह अन्वेषण आगे के प्रयोग के लिए चरण निर्धारित करता है, जैसे कि परिमाणीकरण अवेयर ट्रेनिंग (QAT) को लागू करना, जो कि परिमाणित मॉडल पर प्रदर्शन को और अधिक अनुकूलित कर सकता है।
यह रहा कोलैब नोटबुक। इसके अलावा, हमें फॉलो करना न भूलें ट्विटर और हमारे साथ जुड़ें तार -चैनल और लिंक्डइन जीआरओयूपी। हमारे साथ जुड़ने के लिए मत भूलना 85K+ एमएल सबरेडिट।

Asif Razzaq MarkTechPost Media Inc के सीईओ हैं .. एक दूरदर्शी उद्यमी और इंजीनियर के रूप में, ASIF सामाजिक अच्छे के लिए कृत्रिम बुद्धिमत्ता की क्षमता का उपयोग करने के लिए प्रतिबद्ध है। उनका सबसे हालिया प्रयास एक आर्टिफिशियल इंटेलिजेंस मीडिया प्लेटफॉर्म, मार्कटेकपोस्ट का शुभारंभ है, जो मशीन लर्निंग और डीप लर्निंग न्यूज के अपने गहन कवरेज के लिए खड़ा है, जो तकनीकी रूप से ध्वनि और आसानी से एक व्यापक दर्शकों द्वारा समझ में आता है। मंच 2 मिलियन से अधिक मासिक विचारों का दावा करता है, दर्शकों के बीच अपनी लोकप्रियता को दर्शाता है।
