मॉडल और डेटा सिक्योरिटीमध्यमपाठ 1725 मिनट का पाठ

मॉडल फ़ाइलें जो कोड चलाती हैं: pickle और safetensors

कुछ मॉडल फ़ाइल फ़ॉर्मैट लोड करते ही कोड चला सकते हैं। जानें ऐसा क्यों होता है, और मॉडल्स को सुरक्षित रूप से कैसे लोड करें।

पाठ वीडियो में

60 सेकंड में

मॉडल फ़ाइलें जो कोड चलाती हैं: pickle और safetensors

कुछ मॉडल फ़ाइल फ़ॉर्मैट लोड करते ही कोड चला सकते हैं। जानें ऐसा क्यों होता है, और मॉडल्स को सुरक्षित रूप से कैसे लोड करें।

1/5
आसान शब्दों में
कुछ पार्सल बस ऐसे डिब्बे होते हैं जिनके अंदर चीज़ें रखी होती हैं। वहीं कुछ ऐसे डिब्बे जैसे होते हैं जिनका ढक्कन खोलते ही स्प्रिंग बाहर कूद पड़ता है। pickle मॉडल फ़ाइल दूसरी तरह की हो सकती है: इसे खोलते ही आपके कंप्यूटर पर कुछ भी हो सकता है।
पायथन का pickle फ़ॉर्मैट पायथन ऑब्जेक्ट्स को सेव करता है ताकि उन्हें बाद में लोड किया जा सके। कुछ ऑब्जेक्ट्स को दोबारा बनाने के लिए, pickle लोड करते समय फ़ंक्शन्स को कॉल कर सकता है। इसका मतलब है कि एक pickle फ़ाइल को इस तरह लिखा जा सकता है कि वह लोड होते ही कोई भी कोड चला दे। पायथन के अपने डॉक्यूमेंटेशन में ही चेतावनी दी गई है कि कभी भी किसी अविश्वसनीय स्रोत से डेटा को unpickle न करें।
कई मशीन लर्निंग टूल्स मॉडल्स को सेव करने के लिए सीधे या दूसरे फ़ॉर्मैट्स के अंदर pickle का इस्तेमाल करते रहे हैं। इसलिए किसी मॉडल फ़ाइल को डाउनलोड करके लोड करना, किसी अजनबी का प्रोग्राम चलाने जैसा ही हो सकता है।

ज़्यादा सुरक्षित फ़ॉर्मैट्स

फ़ॉर्मैटक्या लोड करने पर कोड चला सकता है?नोट्स
पायथन pickle (और इस पर बने फ़ॉर्मैट्स)हाँकेवल उन्हीं स्रोतों से लोड करें जिन पर आपको पूरा भरोसा हो
safetensorsनहीं, यह केवल tensors स्टोर करता हैलोड करने के लिए सुरक्षित और तेज़ बनाया गया है; व्यापक रूप से समर्थित है
ONNXलोड करने पर मनमाना पायथन कोड चलाने के लिए नहीं बनाया गया हैफिर भी कस्टम ऑपरेटर्स और अपने द्वारा इस्तेमाल किए जाने वाले रनटाइम की जांच ज़रूर करें
GGUF और इस जैसे अन्य वेट फ़ॉर्मैट्सलोड करने पर मनमाना कोड चलाने के लिए नहीं बनाया गया हैलोडर में बग्स की संभावना फिर भी हो सकती है; टूल्स को अपडेट रखें
safetensors केवल संख्याओं के नाम वाले ऐरे (tensors) और एक छोटा हेडर स्टोर करता है। इसे लोड करने पर केवल डेटा पढ़ा जाता है; यह मनमाने पायथन ऑब्जेक्ट्स को दोबारा नहीं बनाता। जब भी आप वेट्स शेयर या डाउनलोड करें, तो इसी को प्राथमिकता दें।
Load weights from safetensors after checking the hashpython
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. 1

    सुरक्षित फ़ॉर्मैट्स को प्राथमिकता दें

    safetensors मांगें या उसमें बदलें। अज्ञात स्रोतों से मिली pickle फ़ाइलों को स्वीकार न करें।
  2. 2

    सत्यापित करें

    पब्लिशर द्वारा बताए गए हैश (hash) और हस्ताक्षर (जहाँ उपलब्ध हो) से मिलान करें।
  3. 3

    स्कैन करें

    ऐसा मॉडल स्कैनर चलाएं जो pickle-आधारित फ़ाइलों में ख़तरनाक कोड ढूँढता हो। स्कैनर मदद तो करते हैं, लेकिन कुछ चीज़ें उनसे छूट भी सकती हैं।
  4. 4

    अलग रखें

    किसी भी अविश्वसनीय मॉडल को एक sandbox में लोड करें: एक ऐसा फेंकने योग्य कंटेनर या VM जिसमें कोई सीक्रेट्स, क्लाउड क्रेडेंशियल्स और नेटवर्क न हो।
  5. 5

    रिमोट कोड की समीक्षा करें

    अगर रिमोट कोड की सचमुच ज़रूरत है, तो उसे पढ़ें, ठीक उसी रिविज़न को पिन करें, और जाँची-परखी हुई कॉपी को स्टोर करें।
ख़तरा
किसी ऐसे लैपटॉप या सर्वर पर अविश्वसनीय pickle-आधारित मॉडल कभी लोड न करें जिसमें क्लाउड कीज़, SSH कीज़ या प्रोडक्शन का एक्सेस हो। अगर यह कोड चलाता है, तो यह आपकी अनुमतियों के साथ ही चलेगा।
यह करके देखें। अपने कोड में pickle.load, torch.load, joblib.load और रिमोट-कोड वाले विकल्पों को खोजें। हर एक के लिए लिखें कि वह फ़ाइल कहाँ से आती है।

और देखें और पढ़ें

लैब

एक स्क्रिप्ट जो मॉडल फ़ाइल के हैश की पुष्टि करती है और उसे safetensors के साथ लोड करती है, साथ ही आपके कोड में जोखिम भरे लोड्स की एक लिस्ट।

~20 min

समस्या

safetensors फ़ॉर्मैट में पब्लिश किया गया कोई छोटा, जाना-माना ओपन मॉडल उसके आधिकारिक पेज से डाउनलोड करें, साथ ही उसका पब्लिश किया गया हैश भी लें (कई हब हर फ़ाइल का SHA-256 दिखाते हैं)।

  1. पाठ के कोड सैंपल को अपनाएं: SHA-256 निकालें और पब्लिश किए गए मान से इसकी तुलना करें।
  2. फ़ाइल की एक कॉपी में एक बाइट बदलें और दिखाएं कि स्क्रिप्ट इसे अस्वीकार कर देती है।
  3. मूल फ़ाइल को safetensors के साथ लोड करें और टेंसर के नाम व शेप्स प्रिंट करें।
  4. अपनी किसी रिपॉजिटरी में 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%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें