Machine Learning Academy · पाठ

joblib और pickle से मॉडल सहेजना

शिक्षार्थी प्रशिक्षित पाइपलाइन को joblib और pickle दोनों से क्रमबद्ध करेंगे, उसे वापस लोड करेंगे और सफल रूपांतरण की पुष्टि के लिए जाँचेंगे कि पूर्वानुमान समान हैं।

पाठ 1, कुल 4 में से13 चरण

joblib और pickle से मॉडल सहेजना, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

मॉडल को सुरक्षित रखने का महत्व

मशीन लर्निंग मॉडल को प्रशिक्षित करना महँगा होता है: इसमें कुछ मिनटों से लेकर कई घंटे तक लग सकते हैं और पर्याप्त कंप्यूटिंग संसाधन खर्च होते हैं। मॉडल परसिस्टेंस फिट किए गए मॉडल को डिस्क पर सहेजता है, ताकि दोबारा प्रशिक्षण के बिना अनुमान के लिए उसे तुरंत लोड किया जा सके। यह डेटा साइंस नोटबुक और प्रोडक्शन प्रणाली के बीच की कड़ी है — क्रमबद्ध मॉडल फ़ाइल वह परिनियोज्य कलाकृति है जिसे डेटा इंजीनियर पैकेज करके उपलब्ध कराते हैं।

मॉडल फ़ाइल में क्या सहेजा जाता है?

जब आप फिट किए गए sklearn मॉडल या पाइपलाइन को क्रमबद्ध करते हैं, तो फ़ाइल में ये चीज़ें सुरक्षित रहती हैं: सभी फिट किए गए पैरामीटर (जैसे स्केलर का माध्य और विचरण, ट्री की संरचना तथा लॉजिस्टिक रिग्रेशन के गुणांक), हाइपरपैरामीटर सेटिंग्स और Python वर्ग की परिभाषा का संदर्भ। इसमें प्रशिक्षण डेटा शामिल नहीं होता। फ़ाइल लोड करने पर एक ऐसा Python ऑब्जेक्ट फिर से बन जाता है जिस पर तुरंत predict चलाया जा सकता है।

joblib.dump से सहेजना

joblib sklearn ऑब्जेक्ट के लिए अनुशंसित क्रमबद्धन उपकरण है। यह मेमोरी मैपिंग का उपयोग करके बड़े NumPy ऐरे को कुशलता से संभालता है और पारदर्शी संपीड़न का समर्थन करता है। सामान्य कार्यप्रवाह यह है: मॉडल को प्रशिक्षित करें, उसे .joblib फ़ाइल में dump करें, फिर अनुमान के लिए किसी अलग स्क्रिप्ट या सेवा में लोड करें।

import joblib
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(C=1.0, max_iter=300))
])
pipe.fit(X, y)

# Save
joblib.dump(pipe, '/tmp/cancer_model.joblib')
print('Model saved to /tmp/cancer_model.joblib')

joblib.load से लोड करना

joblib.load फ़ाइल को क्रम-विपरीत करता है और ठीक वही फिट की गई पाइपलाइन ऑब्जेक्ट लौटाता है। लोड किए गए मॉडल में मूल मॉडल जैसे ही सभी गुण होते हैं — named_steps, फिट किए गए स्केलर पैरामीटर और वर्गीकारक गुणांक। आप बिना किसी अतिरिक्त सेटअप के तुरंत predict, predict_proba या score चला सकते हैं।

import joblib
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

# Load in a fresh context
model = joblib.load('/tmp/cancer_model.joblib')

predictions = model.predict(X_test[:5])
print('Predictions:', predictions)
print('Test accuracy:', model.score(X_test, y_test).round(4))

क्रमबद्धन के लिए pickle का उपयोग

Python की मानक लाइब्रेरी का pickle मॉड्यूल भी sklearn ऑब्जेक्ट को क्रमबद्ध करता है। फ़ाइलों को बाइनरी मोड में खोलें ('wb' लिखने के लिए और 'rb' पढ़ने के लिए)। pickle.HIGHEST_PROTOCOL स्थिरांक उपलब्ध सबसे कुशल प्रोटोकॉल का उपयोग करता है। छोटे मॉडलों या स्क्रिप्टिंग संदर्भों के लिए pickle पूरी तरह पर्याप्त है।

import pickle
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = LogisticRegression().fit(X, y)

# Save
with open('/tmp/iris_model.pkl', 'wb') as f:
    pickle.dump(model, f, protocol=pickle.HIGHEST_PROTOCOL)

# Load
with open('/tmp/iris_model.pkl', 'rb') as f:
    loaded = pickle.load(f)

print('Score:', loaded.score(X, y).round(4))
print('Coefficients shape:', loaded.coef_.shape)

joblib और pickle फ़ाइल आकारों की तुलना

1000 ट्री वाले RandomForest जैसे बड़े मॉडल के लिए joblib का मेमोरी-मैप किया गया NumPy ऐरे भंडारण अधिक कुशल होता है। जब मॉडल में बड़े पैरामीटर मैट्रिक्स हों, तब यह अंतर विशेष रूप से स्पष्ट हो जाता है। छोटे मॉडलों (LogReg, SVM) के लिए आकार का अंतर नगण्य होता है।

import joblib
import pickle
import os
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=20, random_state=0)
rf = RandomForestClassifier(n_estimators=100, random_state=0).fit(X, y)

# joblib
joblib.dump(rf, '/tmp/rf_model.joblib')

# pickle
with open('/tmp/rf_model.pkl', 'wb') as f:
    pickle.dump(rf, f)

print(f'joblib size: {os.path.getsize("/tmp/rf_model.joblib"):,} bytes')
print(f'pickle size: {os.path.getsize("/tmp/rf_model.pkl"):,} bytes')

joblib के साथ संपीड़न

फ़ाइल को zlib का उपयोग करके संपीड़ित करने के लिए joblib.dump(model, path, compress=3) का उपयोग करें। संपीड़न स्तर 1 (तेज़, बड़ी फ़ाइल) से 9 (धीमा, सबसे छोटी फ़ाइल) तक होते हैं। स्तर 3 एक व्यावहारिक डिफ़ॉल्ट है। LZ4 संपीड़न (zlib से तेज़) के लिए: compress=('lz4', 1)। संपीड़ित फ़ाइलों के लिए लोड होने का समय थोड़ा बढ़ जाता है, लेकिन नेटवर्क स्थानांतरण और संग्रहण में होने वाली बचत अक्सर इसके योग्य होती है।

import joblib
import os
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, random_state=0)
rf = RandomForestClassifier(n_estimators=100, random_state=0).fit(X, y)

for level in [0, 3, 6, 9]:
    path = f'/tmp/rf_compress_{level}.joblib'
    joblib.dump(rf, path, compress=level)
    size = os.path.getsize(path)
    print(f'compress={level}: {size:,} bytes')

राउंड-ट्रिप संगति का सत्यापन

लोड करने के बाद हमेशा सत्यापित करें कि लोड किया गया मॉडल मूल मॉडल के समान पूर्वानुमान उत्पन्न करता है। इससे छिपे हुए डेटा-भ्रष्टाचार, संस्करणों के असंगत होने या फ़ाइल के अधूरे रूप से लिखे जाने से सुरक्षा मिलती है। समान इनपुट पर np.array_equal का उपयोग करके पूर्वानुमानों की तुलना करें।

import joblib
import numpy as np
from sklearn.datasets import load_iris
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_iris(return_X_y=True)
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())]).fit(X, y)
original_preds = pipe.predict(X)

joblib.dump(pipe, '/tmp/verify_pipe.joblib')
loaded = joblib.load('/tmp/verify_pipe.joblib')
loaded_preds = loaded.predict(X)

if np.array_equal(original_preds, loaded_preds):
    print('Round-trip PASSED: predictions are identical.')
else:
    diff = (original_preds != loaded_preds).sum()
    print(f'Round-trip FAILED: {diff} different predictions!')

संस्करण पिन करना और मेटाडेटा

scikit-learn 1.2 से पिकल किया गया मॉडल, आंतरिक बदलावों के कारण scikit-learn 1.5 में ठीक से लोड नहीं हो सकता। मॉडल के साथ हमेशा एक मेटाडेटा फ़ाइल रखें, जिसमें sklearn संस्करण, Python संस्करण, प्रशिक्षण की तारीख, डेटासेट संस्करण और प्रमुख मेट्रिक्स दर्ज हों। यह आपका मॉडल कार्ड है — एक शासन-संबंधी दस्तावेज़, जो बताता है कि मॉडल क्या है और इसे कैसे तैयार किया गया।

import json
import sklearn
import sys
from datetime import datetime

metadata = {
    'model_file': 'cancer_model.joblib',
    'sklearn_version': sklearn.__version__,
    'python_version': sys.version.split()[0],
    'training_date': datetime.utcnow().isoformat(),
    'dataset': 'breast_cancer',
    'test_accuracy': 0.9789,
    'features': 30,
    'algorithm': 'LogisticRegression'
}

with open('/tmp/cancer_model_metadata.json', 'w') as f:
    json.dump(metadata, f, indent=2)

print(json.dumps(metadata, indent=2))

सुरक्षा: अविश्वसनीय पिकल फ़ाइलों को कभी लोड न करें

महत्वपूर्ण सुरक्षा चेतावनी: लोड करते समय pickle और joblib दोनों मनमाना Python कोड चला सकते हैं। किसी अविश्वसनीय स्रोत से मॉडल फ़ाइल को कभी लोड न करें — यह मॉडल के रूप में छिपा हुआ दुर्भावनापूर्ण पेलोड हो सकता है। संगठनों के बीच साझा किए जाने वाले मॉडलों के लिए अधिक सुरक्षित फ़ॉर्मैट पर विचार करें: ONNX (ओपन न्यूरल नेटवर्क एक्सचेंज) एक मानकीकृत, निरीक्षण योग्य फ़ॉर्मैट है, जिसे अधिकांश फ़्रेमवर्क समर्थन करते हैं।

फ़ाइल नामकरण परंपराएँ

अच्छी नामकरण परंपराएँ फ़ाइल नाम में महत्वपूर्ण जानकारी शामिल करती हैं: एल्गोरिदम, डेटासेट, तारीख और मेट्रिक। इससे मॉडल रजिस्ट्री स्वयं-वर्णनात्मक बनती है और उत्पादन में गलती से गलत मॉडल संस्करण लोड होने से बचाव होता है।

from datetime import date
from sklearn.metrics import accuracy_score
import joblib

# Example naming convention
dataset = 'breast_cancer'
algorithm = 'logreg'
test_acc = 0.9789
today = date.today().strftime('%Y%m%d')

filename = f'{dataset}_{algorithm}_{today}_acc{int(test_acc*100)}.joblib'
print('Model filename:', filename)
# e.g.: breast_cancer_logreg_20260620_acc97.joblib

# Load the model we saved earlier (demo)
model = joblib.load('/tmp/cancer_model.joblib')
print('Loaded OK')

त्वरित जाँच

इस पाठ से joblib और pickle के साथ मॉडल सीरियलाइज़ेशन की अपनी समझ की जाँच करें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: joblib.dump और joblib.load फिट किए गए sklearn मॉडलों को कुशलतापूर्वक सीरियलाइज़ और पुनर्स्थापित करते हैं, pickle भी काम करता है, लेकिन बड़े NumPy ऐरे वाले मॉडलों के लिए मेमोरी मैपिंग के कारण joblib को प्राथमिकता दी जाती है, और मॉडल के साथ हमेशा एक मेटाडेटा फ़ाइल रखें, जिसमें शासन और प्रजनन-क्षमता के लिए लाइब्रेरी संस्करण, प्रशिक्षण की तारीख और प्रमुख मेट्रिक्स दर्ज हों। आगे हम मॉडल रजिस्ट्री में कई मॉडल संस्करणों को ट्रैक करने के लिए संस्करण-नामकरण परंपरा और मेटाडेटा साइडकार्ड तैयार करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “joblib और pickle से मॉडल सहेजना” पाठ निःशुल्क है?

हाँ—“joblib और pickle से मॉडल सहेजना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“joblib और pickle से मॉडल सहेजना” में मैं क्या सीखूँगा?

शिक्षार्थी प्रशिक्षित पाइपलाइन को joblib और pickle दोनों से क्रमबद्ध करेंगे, उसे वापस लोड करेंगे और सफल रूपांतरण की पुष्टि के लिए जाँचेंगे कि पूर्वानुमान समान हैं। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“joblib और pickle से मॉडल सहेजना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. joblib और pickle से मॉडल सहेजना
  2. मॉडलों का संस्करण प्रबंधन: फ़ाइल नाम और मेटाडेटा क्यों महत्वपूर्ण हैं
  3. FastAPI एंडपॉइंट से पूर्वानुमान उपलब्ध कराना
  4. पूर्वानुमानों की निगरानी: इनपुट और आउटपुट का लॉगिंग
← Machine Learning Academy पर वापस जाएँ