ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร
ผู้เรียนจะลงทะเบียนเวอร์ชันแบบจำลองใน MLflow Model Registry เลื่อนสถานะจาก Staging ไป Production และเขียนกระบวนการเลื่อนสถานะอัตโนมัติด้วย API ของ Python
ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร เป็นบทเรียน Machine Learning Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Machine Learning Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Machine Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทะเบียนโมเดลคืออะไร
ทะเบียนโมเดลคือแค็ตตาล็อกส่วนกลางที่จัดเก็บโมเดลที่ฝึกแล้วพร้อมเวอร์ชันและข้อมูลเมตา แทนที่จะจัดการไฟล์โมเดลที่กระจัดกระจายอยู่ในระบบไฟล์ ทะเบียนจะมอบแหล่งข้อมูลจริงเพียงแหล่งเดียว พร้อมด้วยเวอร์ชันที่มีชื่อ ระยะการใช้งาน (Staging, Production, Archived) และคำอธิบายประกอบที่ค้นหาได้ ทะเบียนโมเดลของ MLflow เป็นโซลูชันโอเพนซอร์สที่ใช้กันแพร่หลายที่สุด และผสานรวมกับเซิร์ฟเวอร์ติดตามของ MLflow ได้โดยตรง
การลงทะเบียนโมเดลจากการรัน
หลังจากฝึกโมเดลแล้ว ให้ลงทะเบียนโดยเชื่อมโมเดลเข้ากับสิ่งประดิษฐ์ของการรัน MLflow ที่มีอยู่ คุณสามารถลงทะเบียนได้โดยตรงขณะบันทึกด้วยอาร์กิวเมนต์ registered_model_name หรือดำเนินการภายหลังด้วยไคลเอ็นต์ MLflow ทะเบียนจะสร้างรายการโมเดลที่มีชื่อ (เช่น 'SentimentClassifier') และกำหนดให้เป็น เวอร์ชัน 1 การลงทะเบียนครั้งถัดไปด้วยชื่อโมเดลเดียวกันจะเพิ่มหมายเลขเวอร์ชันโดยอัตโนมัติ
import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
# Option 1: Register during logging
with mlflow.start_run():
clf = RandomForestClassifier(n_estimators=100, random_state=42)
# clf.fit(X_train, y_train)
mlflow.sklearn.log_model(
sk_model=clf,
artifact_path='model',
registered_model_name='SentimentClassifier' # auto-registers
)
print('Model registered as SentimentClassifier v1')การใช้ไคลเอ็นต์ MLflow สำหรับการดำเนินการกับทะเบียน
API ภาษา Python ของ MlflowClient ช่วยให้ควบคุมทะเบียนด้วยโปรแกรมได้ ใช้ API นี้เพื่อลงทะเบียนโมเดลจากสิ่งประดิษฐ์ของการรันที่มีอยู่ เปลี่ยนระยะการใช้งาน และเพิ่มคำอธิบาย ทั้งหมดนี้ทำได้จากสคริปต์แทนส่วนติดต่อผู้ใช้ ซึ่งจำเป็นอย่างยิ่งสำหรับกระบวนการ CI/CD อัตโนมัติที่โมเดลใหม่ควรถูกเลื่อนขั้นหลังผ่านการทดสอบประเมินผลเท่านั้น โดยไม่ต้องให้นักวิทยาศาสตร์ข้อมูลดำเนินการผ่านส่วนติดต่อผู้ใช้ด้วยตนเอง
from mlflow.tracking import MlflowClient
client = MlflowClient(tracking_uri='http://localhost:5000')
# Option 2: Register from an existing run artifact
run_id = 'abc123def456' # get this from mlflow.last_active_run().info.run_id
model_uri = f'runs:/{run_id}/model'
model_version = mlflow.register_model(
model_uri=model_uri,
name='SentimentClassifier'
)
print('Version:', model_version.version)
print('Status:', model_version.status) # PENDING_REGISTRATION -> READYระยะการใช้งาน: None, Staging, Production, Archived
โมเดลแต่ละเวอร์ชันในทะเบียนจะมีระยะการใช้งาน เวอร์ชันใหม่เริ่มต้นที่ None หลังผ่านการประเมินอัตโนมัติ ให้เลื่อนขั้นไปยัง Staging เพื่อทดสอบการผสานรวม เมื่อผ่าน Staging แล้ว ให้เลื่อนขั้นไปยัง Production ซึ่งเป็นเวอร์ชันที่ให้บริการการใช้งานจริง เมื่อมีเวอร์ชันใหม่มาแทนที่ ให้ย้ายเวอร์ชันเดิมไปยัง Archived เพื่อเก็บประวัติไว้โดยไม่ลบ เวอร์ชันหนึ่งชื่อโมเดลควรมีอยู่ใน Production ได้เพียงเวอร์ชันเดียวในแต่ละครั้ง
from mlflow.tracking import MlflowClient
client = MlflowClient()
# Transition version 1 to Staging
client.transition_model_version_stage(
name='SentimentClassifier',
version='1',
stage='Staging',
archive_existing_versions=False
)
print('Version 1 -> Staging')
# After testing, promote to Production (archives previous Production)
client.transition_model_version_stage(
name='SentimentClassifier',
version='1',
stage='Production',
archive_existing_versions=True # auto-archives old Production
)
print('Version 1 -> Production')การเพิ่มคำอธิบายและแท็กให้เวอร์ชัน
เวอร์ชันโมเดลควรมีข้อมูลเมตาที่มนุษย์อ่านเข้าใจได้ เพิ่มคำอธิบายเพื่ออธิบายสิ่งที่เปลี่ยนแปลงในเวอร์ชันนี้ เช่น ข้อมูลฝึก การประมวลผลเบื้องต้น หรืออัลกอริทึม เพิ่มแท็กเพื่อให้กรองได้อย่างรวดเร็ว เช่น สภาพแวดล้อมการปรับใช้หรือเวอร์ชันชุดข้อมูล ข้อมูลเมตาที่ดีช่วยให้ตอบคำถามด้านการตรวจสอบได้ เช่น “โมเดลใดกำลังให้บริการในเดือนกุมภาพันธ์” แม้ผ่านการปรับใช้ไปแล้วหลายเดือน โดยไม่ต้องค้นประวัติ git
from mlflow.tracking import MlflowClient
client = MlflowClient()
# Add description to version
client.update_model_version(
name='SentimentClassifier',
version='1',
description=('RandomForest trained on IMDB v2 (50k reviews). '
'Test accuracy 0.924, F1 0.921. '
'Replaces rule-based baseline.')
)
# Add tags for filtering and search
client.set_model_version_tag(
name='SentimentClassifier',
version='1',
key='dataset',
value='imdb_v2'
)
client.set_model_version_tag('SentimentClassifier', '1', 'algorithm', 'random_forest')
print('Description and tags added.')การโหลดโมเดล Production เพื่อการอนุมาน
ในบริการอนุมานของคุณ ควรโหลดโมเดลด้วย ชื่อแทนระยะ ('Production') แทนการใช้หมายเลขเวอร์ชันที่กำหนดตายตัว วิธีนี้ช่วยให้เมื่อคุณเลื่อนเวอร์ชันใหม่ไปยัง Production บริการอนุมานจะใช้โมเดลใหม่โดยอัตโนมัติในการโหลดครั้งถัดไป โดยไม่ต้องแก้ไขโค้ด รูปแบบ URI models:/ เป็นข้อตกลงอันทรงพลังของ MLflow สำหรับการโหลดตามระยะ
import mlflow.sklearn
# Load the current Production model by stage
model_name = 'SentimentClassifier'
stage = 'Production'
model_uri = f'models:/{model_name}/{stage}'
production_model = mlflow.sklearn.load_model(model_uri)
print('Loaded model from:', model_uri)
# Or load a specific version
version_uri = f'models:/{model_name}/1'
v1_model = mlflow.sklearn.load_model(version_uri)
print('Loaded specific version 1')
# Make predictions
# predictions = production_model.predict(X_new)การค้นหาและเปรียบเทียบเวอร์ชัน
เมื่อมีเวอร์ชันสะสมมากขึ้น ให้ใช้เมธอด ค้นหา ของ client เพื่อกรองตามระยะ แท็ก หรือเมตริก จากนั้นเปรียบเทียบประสิทธิภาพของแต่ละเวอร์ชันด้วยโปรแกรม โดยดึง ID ของการรันที่เชื่อมโยงกับแต่ละเวอร์ชัน เรียกดูเมตริกของการรัน และค้นหาเวอร์ชันที่มีประสิทธิภาพดีที่สุดเพื่อเลื่อนระยะ ระบบอัตโนมัตินี้ช่วยป้องกันข้อผิดพลาดจากการทำงานด้วยตนเอง และทำให้การตัดสินใจเลื่อนระยะอิงจากการเปรียบเทียบเมตริกอย่างเป็นกลางแทนการคาดเดา
from mlflow.tracking import MlflowClient
client = MlflowClient()
# List all versions of a model
versions = client.search_model_versions("name='SentimentClassifier'")
for v in versions:
print(f'Version {v.version}: stage={v.current_stage}, run_id={v.run_id[:8]}')
# Get the metric from the associated training run
for v in versions:
run = client.get_run(v.run_id)
acc = run.data.metrics.get('test_accuracy', 'N/A')
print(f' Version {v.version} accuracy: {acc}')สคริปต์เลื่อนระยะอัตโนมัติ
ไปป์ไลน์ฝึกโมเดลซ้ำควรเลื่อนโมเดลใหม่ไปยัง Staging โดยอัตโนมัติ เฉพาะเมื่อโมเดลนั้นมีประสิทธิภาพดีกว่าโมเดล Production ปัจจุบันบนชุดข้อมูลประเมินที่กันไว้ รูปแบบ แชมป์/ผู้ท้าชิง นี้ช่วยป้องกันการถดถอย โดยโมเดล Production คือแชมป์ และโมเดลใหม่คือผู้ท้าชิง ผู้ท้าชิงจะถูกเลื่อนระยะก็ต่อเมื่อทำได้ดีกว่าแชมป์ตามเมตริกที่ตกลงกันไว้ เช่น F1 บนชุดตรวจสอบ
from mlflow.tracking import MlflowClient
import mlflow.sklearn
client = MlflowClient()
def get_metric(run_id, metric_name):
return client.get_run(run_id).data.metrics.get(metric_name, 0)
def promote_if_better(model_name, challenger_version, metric='test_f1'):
# Get current production version
prod_versions = client.get_latest_versions(model_name, stages=['Production'])
if not prod_versions:
print('No production model found -- promoting challenger directly.')
client.transition_model_version_stage(model_name, challenger_version, 'Production')
return
prod_v = prod_versions[0]
prod_score = get_metric(prod_v.run_id, metric)
chall_run_id = client.get_model_version(model_name, challenger_version).run_id
chall_score = get_metric(chall_run_id, metric)
print(f'Champion {metric}: {prod_score:.4f} Challenger: {chall_score:.4f}')
if chall_score > prod_score:
client.transition_model_version_stage(model_name, challenger_version,
'Production', archive_existing_versions=True)
print('Challenger promoted to Production!')
else:
print('Champion retained.')การเก็บโมเดลที่ถูกแทนที่เข้าคลัง
เมื่อเวอร์ชันใหม่เข้าสู่ Production เวอร์ชัน Production เก่าควรย้ายไปยัง Archived แทนการลบ โมเดลที่อยู่ใน Archived จะไม่ถูกรวมในการสืบค้นด้วย get_latest_versions แต่ยังสามารถดาวน์โหลดได้เพื่อการตรวจสอบ การย้อนกลับ หรือการเปรียบเทียบในอนาคต อย่าลบเวอร์ชันโมเดลในอุตสาหกรรมที่อยู่ภายใต้การกำกับดูแล เพราะธุรกิจบริการทางการเงินและการดูแลสุขภาพจำเป็นต้องเก็บประวัติเวอร์ชันทั้งหมดสำหรับการตรวจสอบด้านการปฏิบัติตามข้อกำหนด
from mlflow.tracking import MlflowClient
client = MlflowClient()
# Manually archive a specific version
client.transition_model_version_stage(
name='SentimentClassifier',
version='1',
stage='Archived'
)
print('Version 1 archived.')
# List only archived versions
archived = client.search_model_versions(
"name='SentimentClassifier' and stage='Archived'"
)
for v in archived:
print(f'Archived: v{v.version} created {v.creation_timestamp}')การให้บริการโมเดลด้วย mlflow models serve
MLflow สามารถให้บริการโมเดลที่ลงทะเบียนไว้เป็น REST API ภายในเครื่องได้ด้วยคำสั่งเดียว จุดปลายทางรับข้อมูล JSON และส่งคืนผลการทำนาย วิธีนี้เหมาะสำหรับการสร้างต้นแบบอย่างรวดเร็วและการทดสอบการผสานรวมก่อนนำไปใช้งานบนแพลตฟอร์มคลาวด์ สำหรับการใช้งานจริง ควรใช้การให้บริการบนคอนเทนเนอร์ (Docker + FastAPI หรือการส่งออก Docker ของ MLflow) เพื่อให้รองรับการขยายระบบและการติดตามตรวจสอบได้ดียิ่งขึ้น
# Serve the Production model as a local REST endpoint
# mlflow models serve -m 'models:/SentimentClassifier/Production' --port 8080
# Then call it with curl:
# curl -X POST http://localhost:8080/invocations \
# -H 'Content-Type: application/json' \
# -d '{"dataframe_records": [{"feature1": 0.5, "feature2": 1.2}]}'
# Or with Python requests:
import requests
data = {'dataframe_records': [{'feature1': 0.5, 'feature2': 1.2}]}
response = requests.post('http://localhost:8080/invocations', json=data)
print('Prediction:', response.json())เว็บฮุกและการแจ้งเตือนของรีจิสทรี
MLflow Registry (ใน Databricks และการติดตั้งระดับองค์กรบางรูปแบบ) รองรับ เว็บฮุก ที่เรียกกลับผ่าน HTTP เมื่อเกิดการเปลี่ยนระยะของโมเดล สำหรับ MLflow แบบโอเพนซอร์ส ให้จำลองเว็บฮุกด้วยการตรวจสอบรีจิสทรีเป็นระยะในงาน cron รูปแบบระบบอัตโนมัติที่พบบ่อย ได้แก่ การส่งการแจ้งเตือน Slack เมื่อโมเดลเข้าสู่ Staging การเรียกใช้การทดสอบการผสานรวมเมื่อโมเดลไปถึง Staging และการแจ้งเตือนทีมเมื่อมีการอัปเดต Production
# Polling script (run on a schedule, e.g., cron every 5 minutes)
from mlflow.tracking import MlflowClient
import json
import os
client = MlflowClient()
state_file = '/tmp/model_registry_state.json'
def load_state():
if os.path.exists(state_file):
return json.load(open(state_file))
return {}
def save_state(state):
json.dump(state, open(state_file, 'w'))
state = load_state()
prod = client.get_latest_versions('SentimentClassifier', stages=['Production'])
if prod:
current_prod = prod[0].version
if state.get('production_version') != current_prod:
print(f'ALERT: Production changed to version {current_prod}')
# send_slack_notification(current_prod)
state['production_version'] = current_prod
save_state(state)ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับแนวคิดการเรียนรู้ของเครื่องด้วย Python จากบทเรียนนี้
ทบทวนบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า MLflow Model Registry จัดเก็บโมเดลแบบมีเวอร์ชันพร้อมระยะวงจรการใช้งาน ได้แก่ None, Staging, Production และ Archived ควรโหลดโมเดลด้วยชื่อแทนระยะ ('Production') แทนหมายเลขเวอร์ชัน เพื่อให้สามารถอัปเดตได้อย่างราบรื่นโดยไม่ต้องแก้ไขโค้ด และ สคริปต์เลื่อนระยะอัตโนมัติใช้รูปแบบแชมป์/ผู้ท้าชิงเพื่อป้องกันการถดถอยของโมเดลในระบบจริง ต่อไปเราจะสร้างเวิร์กโฟลว์ GitHub Actions ที่ฝึกโมเดลซ้ำและเลื่อนระยะโดยอัตโนมัติเมื่อมีข้อมูลใหม่เข้ามา
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Machine Learning Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Machine Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร”
ผู้เรียนจะลงทะเบียนเวอร์ชันแบบจำลองใน MLflow Model Registry เลื่อนสถานะจาก Staging ไป Production และเขียนกระบวนการเลื่อนสถานะอัตโนมัติด้วย API ของ Python คุณปฏิบัติ Machine Learning Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Machine Learning Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Machine Learning Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Machine Learning Academy นี้ได้ไหม
ได้ บทเรียน Machine Learning Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การติดตามการทดลองด้วย MLflow: บันทึกพารามิเตอร์ ตัวชี้วัด และสิ่งประดิษฐ์
- สภาพแวดล้อมที่ทำซ้ำได้ด้วย Docker สำหรับการเรียนรู้ของเครื่อง
- ทะเบียนแบบจำลอง: การเตรียมใช้งาน การผลิต และการจัดเก็บถาวร
- ไปป์ไลน์การฝึกใหม่อัตโนมัติด้วย GitHub Actions