PyTorch एक ओपन-सोर्स और समुदाय-नेतृत्वित डीप लर्निंग फ़्रेमवर्क है, जो मशीन लर्निंग मॉडल बनाने का लचीला और कुशल तरीका प्रदान करता है। इसमें उपयोगकर्ता-अनुकूल इंटरफ़ेस, विस्तृत सामुदायिक सहायता, और Python इकोसिस्टम के साथ सहज एकीकरण है।
PyTorch 2.0 ने मुख्य कम्पाइलर ऑपरेशनों में बुनियादी बदलाव पेश किए हैं, जबकि डेवलपर्स के लिए वही परिचितता और सरलता बनाए रखी है। यह नवीनतम सुधार तेज़ प्रदर्शन और Dynamic Shapes तथा Distributed के लिए विस्तारित समर्थन का वादा करता है।
PyTorch 2.0 में नया क्या है?
PyTorch कुछ हिस्सों को C++ से वापस Python में ला रहा है, जिससे यह तेज़ और हैकेबल बन रहा है। संस्करण 2.0 के साथ, उन्होंने `torch.compile` पेश किया है, जिसने कम्पाइलर स्तर पर PyTorch के कार्य करने के तरीके को बदल दिया है। यह फ़ीचर वैकल्पिक है और आपके पुराने कोड को प्रभावित नहीं करता।
PyTorch 2.0 Compile
`torch.compile` फ़ीचर के लिए मजबूत नींव प्रदान करने हेतु, नई तकनीकों को पेश किया गया:
- TorchDynamo. एक Python-स्तरीय Just-in-Time (JIT) कम्पाइलर जो विशेष रूप से PyTorch को तेज़ करने के लिए बनाया गया है। CPython में फ़्रेम इवैल्यूएशन API के साथ एकीकृत होकर, यह रनटाइम पर Python बाइटकोड को डायनेमिक रूप से संशोधित करता है, जिससे कोड का निष्पादन तेज़ हो जाता है।
- AOTAutograd. PyTorch पर मॉडल प्रशिक्षण को तेज़ करने में डेवलपर्स की सहायता के लिए एक टूलकिट। यह अग्रिम रूप से फ़ॉरवर्ड और बैकवर्ड दोनों ग्राफ़ ट्रेस करता है। साथ ही, AOTAutograd अत्याधुनिक डीप लर्निंग कम्पाइलरों का उपयोग करके निकाले गए ग्राफ़ों को बिना रुकावट कम्पाइल करने के सरल तंत्र प्रदान करता है।
- PrimTorch. PyTorch ऑपरेटरों की संख्या को 2000+ से घटाकर लगभग 250 प्रिमिटिव ऑपरेटरों के संक्षिप्त सेट तक सीमित करके, PrimTorch ने PyTorch फ़ीचर्स या बैकएंड विकसित करने की प्रक्रिया को उल्लेखनीय रूप से सरल बना दिया है।
- TorchInductor. एक PyTorch-नेटिव डीप लर्निंग कम्पाइलर जो स्वतः ही PyTorch मॉडलों को कई एक्सेलेरेटर और बैकएंड्स के लिए जेनरेटेड कोड में मैप करता है। TorchInductor GPU त्वरक के लिए OpenAI Triton को बिल्डिंग ब्लॉक के रूप में उपयोग करता है।
सारी नई तकनीकें Python में लिखी गई हैं और Dynamic shapes को सपोर्ट करती हैं। यह नए PyTorch को कोड तेज़ी से चलाने, अधिक लचीला और आसानी से हैकेबल बनाता है, जिससे प्रवेश अवरोध कम होता है।
कोड उदाहरण
आइए PyTorch Compiler के त्वरित और सरल कोड इम्प्लीमेंटेशन की समीक्षा करें।
बिना torch.compile के
import torch
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
बिना torch.compile के
मॉडल का प्रदर्शन बढ़ाने के लिए, बस मॉडल के चारों ओर torch.compile रैपर जोड़ें और एक कम्पाइल्ड मॉडल प्राप्त करें। यह प्लग-एंड-प्ले है।
import torch
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
compiled_model = torch.compile(model)
PyTorch लाइब्रेरी के साथ डीप लर्निंग मॉडल बनाना सीखें: Deep Learning with PyTorch कोर्स।
आप बिना कोई बदलाव किए सरलता से अपना मॉडल ट्रेन कर सकते हैं।
import torch
model = torch.compile(model)
for batch in dataloader:
run_epoch(model, batch)
या आप मॉडल इन्फ़रेंस चला सकते हैं।
model = torch.compile(model)
model(**input)
torch.compile() के साथ अतिरिक्त पैरामीटर आते हैं:
- mode: आप निर्दिष्ट कर सकते हैं कि कम्पाइलर को कम्पाइलिंग के दौरान किस चीज़ के लिए ऑप्टिमाइज़ करना चाहिए।
- dynamic: Dynamic Shapes के लिए कोड पाथ सक्षम करने हेतु उपयोग होता है।
- fullgraph: प्रोग्राम को एक सिंगल ग्राफ़ में कम्पाइल करता है।
- backend: डिफ़ॉल्ट रूप से यह TorchInductor उपयोग करता है, लेकिन आप अन्य उपलब्ध कम्पाइलर बैकएंड भी निर्दिष्ट कर सकते हैं।
def torch.compile(model: Callable,
*,
mode: Optional[str] = "default",
dynamic: bool = False,
fullgraph:bool = False,
backend: Union[str, Callable] = "inductor",
**kwargs
) -> torch._dynamo.NNOptimizedModule
PyTorch API की मूल बातें सीखें और हमारे PyTorch Tutorial का उपयोग करके स्क्रैच से एक सरल न्यूरल नेटवर्क बनाएँ।
बेंचमार्क
PyTorch 2.0 के साथ शुरुआत करते हुए, डेवलपर्स ने नई कम्पाइल फ़ीचर के प्रदर्शन बेंचमार्क बनाने के लिए 163 ओपन-सोर्स (46 HuggingFace Transformers, 61 TIMM, और 56 TorchBench) मॉडल्स का उपयोग किया है। बेंचमार्क में Image classification, Image generation, Language modeling, Recommender systems, और Reinforcement learning जैसे कार्य शामिल हैं।
परिणाम दर्शाते हैं कि NVIDIA A100 GPUs पर ट्रेनिंग के दौरान प्रदर्शन में उल्लेखनीय सुधार हुआ है।
नोट: वर्तमान में, डिफ़ॉल्ट बैकएंड केवल CPU और Nvidia Volta तथा Ampere GPUs श्रृंखला को सपोर्ट करता है।

NVIDIA A100 GPU पर PyTorch कम्पाइलर बेंचमार्क
यह एक शुरुआत है, और आने वाले अपडेट में आप और अधिक प्रदर्शन तथा स्केलेबिलिटी सुधार देखेंगे।
PyTorch 2.0 कैसे इन्स्टॉल करें
आप pip का उपयोग करके PyTorch का नया संस्करण सरलता से इन्स्टॉल कर सकते हैं।
नीचे दिया गया कमांड कॉपी-पेस्ट करके अपने टर्मिनल में चलाएँ।
GPUs के लिए: CUDA 11.8
नए संस्करण के GPUs ने काफ़ी बेहतर प्रदर्शन दिखाया है।
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu118
GPUs के लिए: CUDA 11.7
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu117
CPUs के लिए:
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cpu
सत्यापन के लिए:
git clone https://github.com/pytorch/pytorch
cd tools/dynamo
python verify_dynamo.py
PyTorch 2.0 के साथ Hugging Face को तेज़ करना
आइए Hugging Face transformers को तेज़ करने के लिए torch.compile फ़ंक्शन आज़माएँ। आप एक सिंगल-लाइन डेकोरेटर से अपना Hugging Face कोड तेज़ चला सकते हैं।
नोट: torch.compile() के साथ, हमने ट्रेनिंग पर 30%-200% प्रदर्शन वृद्धि देखी है - TorchDynamo Performance Dashboard।
इस उदाहरण में, हम तेज़ इन्फ़रेंस के लिए “dolly-v2-3b" बड़े भाषा मॉडल पर torch.compile लागू करेंगे। Google Colab में कोड चलाने के लिए, हमें पहले आवश्यक Python लाइब्रेरीज़ इन्स्टॉल करनी होंगी।
%%capture
%pip install transformers accelerate xformers
फिर, हम Hugging Face transformers का उपयोग करके tokenizer और भाषा मॉडल को डाउनलोड व लोड करेंगे। उसके बाद, हम nn.Module को torch.compile() फ़ंक्शन में जोड़ेंगे।
import torch
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
GenerationConfig,
pipeline,
)
tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-3b")
model = AutoModelForCausalLM.from_pretrained(
"databricks/dolly-v2-3b", device_map="auto", torch_dtype=torch.bfloat16
)
model = torch.compile(model) #only line of code is required
अंतिम चरण में, हम tokenizer का उपयोग करके टेक्स्ट को टोकन्स में बदलेंगे, उसे model.generate में देंगे, और फिर tokenizer.batch_decode का उपयोग करके जेनरेट हुए आउटपुट को टेक्स्ट में डिकोड करेंगे।
prompt = "I love you because"
inputs = tokenizer(prompt, return_tensors="pt").to(device="cuda:0")
# Generate
generate_ids = model.generate(inputs.input_ids, max_length=50)
tokenizer.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)[0]
जैसा कि हम देख सकते हैं, “dolly-v2” ने वाक्य को इस तरह पूरा किया है: “you are a good person…”
"I love you because you are a good person.
You are kind, you help others, you are honest, you are loyal, you are humble, you are humble, you are humble.
You are a good person."
यह Hugging Face pipeline के साथ भी काम करता है। बस टास्क टाइप, मॉडल, और tokenizer दें।
generator = pipeline("text-generation", model= model,tokenizer=tokenizer)
generator("What is the name of Germany's Capital?")
आउटपुट:
[{'generated_text': "What is the name of Germany's Capital?
The name of Germany's Capital is Berlin."}]
compile फ़ंक्शन transformers, accelerate, और TIMM Python लाइब्रेरीज़ के साथ बॉक्स से बाहर काम करता है।
यदि आप यह सोचकर असमंजस में हैं कि अपनी डीप लर्निंग और AI करियर की शुरुआत कहाँ से करें, तो Machine Learning Scientist with Python करियर ट्रैक एक उत्कृष्ट शुरुआती बिंदु है। यह आवश्यक Python कौशलों का व्यापक अवलोकन प्रदान करता है, जो आपको मशीन लर्निंग साइंटिस्ट के रूप में नौकरी पाने में मदद कर सकता है।
एक प्रमाणित डेटा साइंटिस्ट के रूप में, मैं अत्याधुनिक तकनीक का उपयोग करके नवाचारी मशीन लर्निंग अनुप्रयोग बनाने के लिए उत्साहित रहता/रहती हूँ। स्पीच रिकॉग्निशन, डेटा विश्लेषण और रिपोर्टिंग, MLOps, संवादात्मक AI और NLP में मजबूत पृष्ठभूमि के साथ, मैंने ऐसे बुद्धिमान सिस्टम विकसित करने में अपनी विशेषज्ञता निखारी है जो वास्तविक प्रभाव डाल सकें। तकनीकी दक्षता के अलावा, मैं जटिल अवधारणाओं को स्पष्ट और संक्षिप्त भाषा में प्रस्तुत करने में भी निपुण हूँ। परिणामस्वरूप, मैं डेटा साइंस पर एक मांग में रहने वाला/वाली ब्लॉगर बन गया/गई हूँ, और डेटा प्रोफेशनलों के बढ़ते समुदाय के साथ अपने अनुभव और विचार साझा करता/करती हूँ। वर्तमान में, मैं कंटेंट निर्माण और संपादन पर केंद्रित हूँ, बड़े भाषा मॉडलों के साथ काम करते हुए ऐसा प्रभावशाली और आकर्षक कंटेंट विकसित कर रहा/रही हूँ जो व्यवसायों और व्यक्तियों दोनों को अपने डेटा का अधिकतम लाभ उठाने में मदद कर सके।
