मॉडल फ़ाइलें जो कोड चलाती हैं: pickle और safetensors
कुछ मॉडल फ़ाइल फ़ॉर्मैट लोड करते ही कोड चला सकते हैं। जानें ऐसा क्यों होता है, और मॉडल्स को सुरक्षित रूप से कैसे लोड करें।
60 सेकंड में
मॉडल फ़ाइलें जो कोड चलाती हैं: pickle और safetensors
कुछ मॉडल फ़ाइल फ़ॉर्मैट लोड करते ही कोड चला सकते हैं। जानें ऐसा क्यों होता है, और मॉडल्स को सुरक्षित रूप से कैसे लोड करें।
ज़्यादा सुरक्षित फ़ॉर्मैट्स
| फ़ॉर्मैट | क्या लोड करने पर कोड चला सकता है? | नोट्स |
|---|---|---|
| पायथन pickle (और इस पर बने फ़ॉर्मैट्स) | हाँ | केवल उन्हीं स्रोतों से लोड करें जिन पर आपको पूरा भरोसा हो |
| safetensors | नहीं, यह केवल tensors स्टोर करता है | लोड करने के लिए सुरक्षित और तेज़ बनाया गया है; व्यापक रूप से समर्थित है |
| ONNX | लोड करने पर मनमाना पायथन कोड चलाने के लिए नहीं बनाया गया है | फिर भी कस्टम ऑपरेटर्स और अपने द्वारा इस्तेमाल किए जाने वाले रनटाइम की जांच ज़रूर करें |
| GGUF और इस जैसे अन्य वेट फ़ॉर्मैट्स | लोड करने पर मनमाना कोड चलाने के लिए नहीं बनाया गया है | लोडर में बग्स की संभावना फिर भी हो सकती है; टूल्स को अपडेट रखें |
import hashlib
from safetensors.torch import load_file
EXPECTED_SHA256 = "paste-the-published-hash-here"
path = "model.safetensors"
h = hashlib.sha256()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(1 << 20), b""):
h.update(chunk)
if h.hexdigest() != EXPECTED_SHA256:
raise SystemExit("Hash mismatch: do not load this file")
state_dict = load_file(path) # reads tensors only
print(len(state_dict), "tensors loaded")
# model.load_state_dict(state_dict) # into a model class you trustमॉडल लोड करते समय कोड चलने के अन्य तरीके
- कुछ लाइब्रेरीज़ में अक्सर
trust_remote_codeजैसा एक विकल्प होता है, जो मॉडल रिपॉजिटरी के साथ आए पायथन कोड को डाउनलोड करके चला देता है। इसे चालू करने का मतलब है अपनी मशीन पर उस लेखक का कोड चलाना। - कस्टम लेयर्स या ऑपरेटर्स के लिए शायद आपको अलग से कोड इंस्टॉल करना पड़े।
- मॉडल रिपॉजिटरी में मौजूद नोटबुक, सेटअप स्क्रिप्ट और उदाहरण कोड भी आम कोड ही होते हैं।
- कुछ फ़्रेमवर्क ज़्यादा सुरक्षित लोडिंग मोड देते हैं, जैसे
torch.loadके लिए PyTorch काweights_onlyविकल्प। देखें कि आपका वर्शन क्या सपोर्ट करता है और इसे डिफ़ॉल्ट बना लें।
सुरक्षित लोडिंग नीति
- 1
सुरक्षित फ़ॉर्मैट्स को प्राथमिकता दें
safetensors मांगें या उसमें बदलें। अज्ञात स्रोतों से मिली pickle फ़ाइलों को स्वीकार न करें। - 2
सत्यापित करें
पब्लिशर द्वारा बताए गए हैश (hash) और हस्ताक्षर (जहाँ उपलब्ध हो) से मिलान करें। - 3
स्कैन करें
ऐसा मॉडल स्कैनर चलाएं जो pickle-आधारित फ़ाइलों में ख़तरनाक कोड ढूँढता हो। स्कैनर मदद तो करते हैं, लेकिन कुछ चीज़ें उनसे छूट भी सकती हैं। - 4
अलग रखें
किसी भी अविश्वसनीय मॉडल को एक sandbox में लोड करें: एक ऐसा फेंकने योग्य कंटेनर या VM जिसमें कोई सीक्रेट्स, क्लाउड क्रेडेंशियल्स और नेटवर्क न हो। - 5
रिमोट कोड की समीक्षा करें
अगर रिमोट कोड की सचमुच ज़रूरत है, तो उसे पढ़ें, ठीक उसी रिविज़न को पिन करें, और जाँची-परखी हुई कॉपी को स्टोर करें।
pickle.load, torch.load, joblib.load और रिमोट-कोड वाले विकल्पों को खोजें। हर एक के लिए लिखें कि वह फ़ाइल कहाँ से आती है।और देखें और पढ़ें
लैब
एक स्क्रिप्ट जो मॉडल फ़ाइल के हैश की पुष्टि करती है और उसे safetensors के साथ लोड करती है, साथ ही आपके कोड में जोखिम भरे लोड्स की एक लिस्ट।
समस्या
safetensors फ़ॉर्मैट में पब्लिश किया गया कोई छोटा, जाना-माना ओपन मॉडल उसके आधिकारिक पेज से डाउनलोड करें, साथ ही उसका पब्लिश किया गया हैश भी लें (कई हब हर फ़ाइल का SHA-256 दिखाते हैं)।
- पाठ के कोड सैंपल को अपनाएं: SHA-256 निकालें और पब्लिश किए गए मान से इसकी तुलना करें।
- फ़ाइल की एक कॉपी में एक बाइट बदलें और दिखाएं कि स्क्रिप्ट इसे अस्वीकार कर देती है।
- मूल फ़ाइल को
safetensorsके साथ लोड करें और टेंसर के नाम व शेप्स प्रिंट करें। - अपनी किसी रिपॉजिटरी में
pickle.load,torch.load,joblib.loadऔर रिमोट-कोड विकल्पों को खोजें। फ़ाइल के स्रोत के साथ हर एक की लिस्ट बनाएं।
कोड चलाने के लिए बनाई गई कोई भी pickle फ़ाइल न तो लिखें और न ही चलाएं।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1हैश मॉडल पेज वाले हैश से मेल खाता है। इससे क्या साबित होता है, और क्या साबित नहीं होता?दिखाएं
यह साबित करता है कि आपके पास जो फ़ाइल है, वह वही है जिसके बारे में पेज पर बताया गया है, यानी रास्ते में इसमें कोई खराबी नहीं आई या इसे बदला नहीं गया। यह यह साबित नहीं करता कि फ़ाइल सुरक्षित है या पब्लिशर भरोसेमंद है। अगर किसी हमलावर का पेज पर नियंत्रण है, तो वह मेल खाते हैश के साथ कोई ख़राब फ़ाइल पब्लिश कर सकता है। किसी जानी-पहचानी पहचान से जुड़े हस्ताक्षर और स्रोत पर भरोसा, इस कमी को पूरा करते हैं।
Q2भले ही मॉडल फ़ाइल safetensors हो, फिर भी बिना नेटवर्क एक्सेस वाला sandbox क्यों ज़रूरी है?दिखाएं
हो सकता है कि वेट्स सुरक्षित हों, लेकिन दूसरे हिस्से शायद न हों: रिमोट कोड, कस्टम ऑपरेटर्स, टोकनाइज़र फ़ाइलें, या लोडर में मौजूद बग्स। नेटवर्क एक्सेस न होने पर, अगर कोई कोड चलता भी है, तो वह डेटा बाहर नहीं भेज सकता या और टूल्स डाउनलोड नहीं कर सकता। यह एक आसान और सस्ता सुरक्षा कवच है।
अक्सर पूछे जाने वाले सवाल
क्या हर pickle फ़ाइल ख़तरनाक होती है?
आपके द्वारा खुद बनाई गई और सुरक्षित रखी गई pickle फ़ाइल को लोड करना ठीक है। ख़तरा ऐसी फ़ाइल को लोड करने में है जिसे किसी और ने बनाया या बदला हो सकता है। यह फ़ॉर्मैट आपको यह नहीं बता सकता कि फ़ाइल कैसी है।
क्या हम किसी अविश्वसनीय pickle मॉडल को सुरक्षित रूप से safetensors में बदल सकते हैं?
कन्वर्ट करने का मतलब आमतौर पर पहले pickle को लोड करना होता है, जो कि जोखिम भरा कदम है। ऐसा केवल बिना किसी सीक्रेट्स और बिना नेटवर्क वाले एक अलग sandbox में ही करें, फिर safetensors आउटपुट को वेरिफ़ाई करके इस्तेमाल करें।
क्या मॉडल हब अपलोड की गई फ़ाइलों को स्कैन करते हैं?
कुछ प्लेटफ़ॉर्म अपलोड की गई फ़ाइलों को स्कैन करते हैं और चेतावनियाँ दिखाते हैं। यह मददगार है, लेकिन सिर्फ़ इसी पर भरोसा न करें। स्कैनर नए तौर-तरीकों को पकड़ने से चूक सकते हैं, और फ़ाइलें कई दूसरी जगहों से भी आ सकती हैं, जैसे कि शेयर्ड ड्राइव और चैट अटैचमेंट।
joblib के साथ सेव किए गए scikit-learn मॉडल्स के बारे में क्या?
joblib अंदरूनी तौर पर pickle का ही इस्तेमाल करता है, इसलिए वही नियम यहाँ भी लागू होते हैं। केवल उन्हीं फ़ाइलों को लोड करें जिन पर आपको भरोसा हो, या जहाँ आपके टूल्स सपोर्ट करते हों, वहाँ सुरक्षित आदान-प्रदान के लिए बने फ़ॉर्मैट का इस्तेमाल करें।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।