P
PipeCraft

Roadmap Progress

ข้อมูลเบื้องต้นเกี่ยวกับวิศวกรรมข้อมูล (Introduction to Data Engineering) Python สำหรับ Data Engineering พื้นฐาน Linux & CLI สำหรับวิศวกรข้อมูล Git สำหรับระบบงานข้อมูลและทีมพัฒนา ระบบเครือข่ายและระบบประมวลผลแบบกระจายศูนย์ (Networking & Distributed Systems) SQL ขั้นสูง (Window Functions & Optimization) ฐานข้อมูลไม่ใช่เชิงสัมพันธ์ (NoSQL Databases & Modern Stores) การออกแบบโครงสร้างข้อมูล (Star/Snowflake & SCD) โครงสร้างพื้นฐานเครือข่ายระบบคลาวด์ (Cloud-based Networking) สถาปัตยกรรม Data Lakehouse (Apache Iceberg & MinIO) Local-first Data Engineering ด้วย DuckDB โครงสร้างพื้นฐานในรูปแบบโค้ด (IaC ด้วย Terraform) การแปลงข้อมูลระดับโปรด้วย dbt-core ข้อตกลงร่วมด้านข้อมูล (Data Contracts) การบริการและการส่งต่อข้อมูลวิเคราะห์ (Data Serving & Reverse ETL) การประมวลผลข้อมูลขนาดใหญ่แบบกระจายด้วย Apache Spark ระบบจัดการเวิร์กโฟลว์ข้อมูล (Airflow, Dagster & Prefect) การประมวลผลข้อมูลแบบเรียลไทม์ด้วย Kafka & Redpanda การจัดการคอนเทนเนอร์และคลัสเตอร์ (Containers & Kubernetes) ระบบ CI/CD และการเฝ้าระวังคุณภาพข้อมูล (CI/CD, Monitoring & Testing) ระบบความปลอดภัยและการควบคุมข้อมูล (Security, Governance & Privacy) ระบบปฏิบัติการและประมวลผลโมเดล (Machine Learning & MLOps)
บทที่ 5: ระบบประมวลผลขนาดใหญ่และการจัดลำดับงาน (Orchestration, Scale & Streaming)

ระบบปฏิบัติการและประมวลผลโมเดล (Machine Learning & MLOps)

5.7 ระบบปฏิบัติการประมวลผลสมองกล (Machine Learning & MLOps)

ระบบ MLOps ควบคุมการเชื่อมโยงระบบข้อมูลเพื่อสร้าง ฝึกสอน และส่งต่อผลลัพธ์การทำนายของโมเดลปัญญาประดิษฐ์ให้เกิดประโยชน์ในบริการหลักองค์กร

MLOps Feature Store Architecture Diagram

3D Isometric MLOps Pipeline and Real-time Feature Store Architecture

1. วงจร MLOps และการวางโครงสร้างระบบจำลองท่อฝึกสอนปัญญาประดิษฐ์

ทฤษฎีและกลไกการทำงาน (How it works): การรันระบบปัญญาประดิษฐ์ระดับโปรดักชันต้องการกระบวนการจัดเก็บโค้ด ข้อมูล และโมเดลอย่างมีระเบียบ วงจร MLOps ครอบคลุมตั้งแต่การสกัดข้อมูลสร้างตัวแปร (Feature Engineering) การฝึกสอนแบบบันทึกประวัติรักษาสถิติการคำนวณ (Model Training) และการตรวจสอบความถูกต้องก่อนปล่อยบริการจริง เพื่อป้องกันสภาวะโค้ดเพี้ยน

# Conceptual architecture of ML pipeline orchestration
[Raw Data] -> [Feature Pipeline] -> [Feature Store] -> [Training Pipeline] -> [Model Registry] -> [Serving API]
                    

Use Case ในชีวิตจริง (Real-world Scenario): แอปพลิเคชันเสนอสินเชื่อธนาคารประเมินเครดิตลูกค้า ระบบ MLOps pipeline จะควบคุมรอบการรวบรวมประวัติธุรกรรมเพื่อเทรนโมเดลใหม่ทุกสิ้นเดือนเพื่อให้สถิติการคาดคะเนหนี้เสียสอดคล้องต่อสภาพเศรษฐกิจปัจจุบัน

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): ความล้มเหลวจากการที่สภาพแวดล้อมรันไทม์ของการเทรนข้อมูลแตกต่างกับสภาพแวดล้อมระบบรันจริง (Training-Serving Skew) แก้ไขโดยนำคอนเทนเนอร์ (Docker) และ Feature Store มาครอบใช้คุมขอบข่ายตัวแปรกลางชุดเดียวกัน

2. คลังเก็บฟีเจอร์กลาง: การบริการแบบความหน่วงต่ำปะทะข้อมูลวิจัยแบบแบทช์ (Feast Feature Store)

ทฤษฎีและกลไกการทำงาน (How it works): ระบบคลังเก็บฟีเจอร์ (**Feature Store - เช่น Feast**) แยกฐานการทำงานออกเป็น: - **Offline Store (เช่น Snowflake, Iceberg)**: เก็บประวัติข้อมูลย้อนหลังสำหรับดึงมาวิจัยฝึกสอนโมเดล (Batch Training) - **Online Store (เช่น Redis, DynamoDB)**: ดึงค่าตัวแปรสรุปล่าสุดมาพักไว้เพื่อนำส่งแบบความหน่วงต่ำระดับไมโครวินาทีให้ API เรียกใช้ประเมินทันควัน

# Feast Feature View definition configuration
from datetime import timedelta
from feast import Entity, FeatureView, Field, ValueType
from feast.types import Int64, Float32

# Entity defines the primary key matching records
customer = Entity(name="customer_id", value_type=ValueType.INT64)

customer_fv = FeatureView(
    name="customer_analytics_features",
    entities=[customer],
    ttl=timedelta(days=90),
    schema=[
        Field(name="monthly_orders_count", dtype=Int64),
        Field(name="average_transaction_value", dtype=Float32)
    ],
    source=None # Points to data lake source table
)
                    

Use Case ในชีวิตจริง (Real-world Scenario): โมเดลสแกนบัตรโกงเงินประเมินธุรกรรมขาเข้า ยิงขอดึงสถิติยอดรูด 10 นาทีล่าสุดของลูกค้าจาก Online Store ใน Redis เพื่อเช็คความน่าสงสัยได้ในเวลาต่ำกว่า 20 ไมโครวินาที

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): ข้อมูลใน Online Store และ Offline Store มีตรรกะที่สเกลเวลาไม่ซิงก์กัน แก้ไขโดยรันจ๊อบซิงก์ความจำ (Feast Materialization) คอยกวาดอัปเดตข้อมูลขึ้น Redis สม่ำเสมอตามคาบเวลา

3. ระบบลงทะเบียนและควบคุมเวอร์ชันของแบบจำลองปัญญาประดิษฐ์ด้วย MLflow

ทฤษฎีและกลไกการทำงาน (How it works): เมื่อวิศวกรทำการเทรนโมเดลหลายรอบ ตัวแปรโมเดลจำเป็นต้องได้รับระบบจดทะเบียน **Model Registry** (เช่น MLflow) เพื่อระบุหมายเลขเวอร์ชันของโมเดล บันทึกพารามิเตอร์ และประเมินค่าดัชนีผลงาน (Metrics เช่น Accuracy/F1 Score) เพื่อช่วยในการควบคุมสิทธิ์สลับระดับความพร้อมการใช้งาน (Staging, Production)

# Python code to log metadata metrics and register model using MLflow
import mlflow

with mlflow.start_run():
    mlflow.log_param("learning_rate", 0.01)
    mlflow.log_metric("accuracy", 0.94)
    # Log model artifacts to the registry repository
    mlflow.sklearn.log_model(model, "churn-model-artifact", registered_model_name="CustomerChurnModel")
                    

Use Case ในชีวิตจริง (Real-world Scenario): ทีมวิศวกรข้อมูลทดสอบพบเวอร์ชัน 2.4 ได้คะแนนแม่นยำดีกว่าตัวเดิม ระบบจัดการสั่งโปรโมตเลื่อนสถานะเวอร์ชัน 2.4 ให้เป็น 'Production' ผ่าน MLflow Dashboard เพื่อพร้อมนำไปบริการลูกค้าทันที

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): การไม่มีสถิติตรวจเช็ครหัสโปรเจกต์ต้นตอที่บิวด์เวอร์ชันนั้น (Lack of reproducibility) แก้ไขโดยผูกเก็บ commit SHA ของ Git เข้าไปในระบบจดจำพารามิเตอร์ของ MLflow ทุกครั้งในการสร้างเวอร์ชันใหม่

4. การตรวจสอบความผันแปรของข้อมูลและการฝึกแบบจำลองอัตโนมัติ (Data & Concept Drift)

ทฤษฎีและกลไกการทำงาน (How it works): ประสิทธิภาพของโมเดลปัญญาประดิษฐ์มักดิ่งลงเมื่อเวลาผ่านไปจากสาเหตุ: - **Data Drift**: พารามิเตอร์การกระจายข้อมูลขาเข้าเปลี่ยนแปลงไปจากตอนฝึกสอน (เช่น ยอดเข้าเว็บของวัยรุ่นเปลี่ยนกลุ่มไปเป็นกลุ่มผู้สูงอายุ) - **Concept Drift**: พฤติกรรมความสัมพันธ์เป้าหมายสลายไป (เช่น พฤติกรรมซื้อของหลังช่วงโรคระบาด) เพื่อดักจับสิ่งนี้ ระบบเฝ้าสังเกตจะรันเปรียบเทียบสถิติการกระจายตัวของข้อมูล และทริกเกอร์ให้ท่อส่งทำการฝึกฝนโมเดลซ้ำ (Automated Retraining) เมื่อผลทดสอบตกเกณฑ์มาตรฐาน

# Concept check script triggering retraining on drift detection alert
def check_drift_and_retrain(reference_dataset, current_dataset):
    # Perform Kolmogorov-Smirnov statistical test for drift detection
    drift_detected = calculate_ks_test(reference_dataset, current_dataset)
    if drift_detected:
        print("Data Drift Detected! Launching retraining workflow pipeline.")
        # trigger_airflow_dag("train_churn_model")
                    

Use Case ในชีวิตจริง (Real-world Scenario): ระบบแนะนำบทความข่าวประเด็นร้อนที่พบยอดสแกนคลิกอ่านตกเนื่องจากพฤติกรรมลูกค้าหันไปสนใจความเคลื่อนไหวอื่น ระบบตรวจดริฟต์ส่งสัญญาณเตือนปลุกท่อฝึกเพื่อเทรนโมเดลใหม่ทันควัน

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): การสั่งฝึกสอนใหม่พร่ำเพรื่อจากข้อมูลเบี่ยงเบนชั่วคราว (Transient anomalies) อาจสิ้นเปลืองค่าไฟและเกิดจ๊อบล้มเหลว แก้ไขโดยกำหนดด่านการเช็คตรวจสอบช่วงเวลาที่ยาวขึ้น (เช่น สังเกตดริฟต์ลึกเฉลี่ย 7 วัน)

5. ยุทธวิธีการให้บริการแบบจำลองปัญญาประดิษฐ์: Real-time API vs. Batch Inference

ทฤษฎีและกลไกการทำงาน (How it works): การเลือกรูปแบบการทำนายผลลัพธ์ (Inference Model): - **Batch Inference**: โหลดข้อมูลมารันทำนายผลพร้อมกันทีเดียวล้านแถวช่วงกลางคืน (เช่น การคำนวณคะแนนลูกค้า Churn รายเดือน) เซฟประหยัดพลังคอมพิวต์สูง - **Real-time API**: รันโมเดลทำนายผลทันทีตามอินพุตที่ผู้ใช้ยิงขอผ่าน API (เช่น ระบบแนะนำสินค้าตามคลิกล่าสุด) ตอบสนองเร็วระดับมิลลิวินาที

# Python FastAPI serving real-time machine learning predictions
from fastapi import FastAPI
import pickle

app = FastAPI()
model = pickle.load(open("model.pkl", "rb"))

@app.post("/predict")
def predict_churn(customer_features: dict):
    prediction = model.predict([list(customer_features.values())])
    return {"churn_risk": float(prediction[0])}
                    

Use Case ในชีวิตจริง (Real-world Scenario): การวิเคราะห์ประเมินการทุจริตธุรกรรมบัตรเครดิตต้องพึ่งพา Real-time API เพื่อบล็อกการทุจริตให้ทันเวลา 1 วินาทีก่อนจ่ายเงินเสร็จ ขณะที่คะแนนการตลาดใช้แบบ Batch ในการอัปเดตระบบ CRM

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): ระบบ Real-time API รันช้าและหน่วงเวลาเนื่องจากการแปลงข้อมูลตัวแปรสกีมา (Inference Latency) แก้ไขโดยคอมไพล์แปลงโมเดลให้อยู่ในตระกูลสปีดสูง เช่น ONNX หรือ TensorRT

🛠️ Weekend Sandbox Challenge: Feast Feature View Schema setup

โจทย์ปฏิบัติการ: จงเขียนจำลองสเปคคอนฟิก Feast Feature View ของโมเดลคาดการณ์ Churn Risk โดยระบุคีย์หลัก Entity และจัดเตรียมคอลัมน์ฟีเจอร์สำหรับนำไปใช้งาน

# local_feature_store.py
from datetime import timedelta
from feast import Entity, FeatureView, Field
from feast.types import Int64, Float32

# 1. Define Entity
customer = Entity(name="customer_id", value_type=Int64)

# 2. Define Feature View
customer_stats_fv = FeatureView(
    name="customer_stats",
    entities=[customer],
    ttl=timedelta(days=30),
    schema=[
        Field(name="orders_count_30d", dtype=Int64),
        Field(name="avg_spend_30d", dtype=Float32)
    ],
    source=None # Points to Parquet source
)
                    

💼 Senior Technical Interview Q&A

Q1: คลังเก็บฟีเจอร์ตัวแปร (Feature Store) ทำหน้าที่เคลียร์จุดพังด้านข้อขัดแย้งของชุดข้อมูล (Training-Serving Skew) อย่างไร?

A1: Training-Serving Skew เกิดจากการใช้สูตรแปลงฟีเจอร์คนละแบบตอนเทรนโมเดล (Offline) และตอนทำนายจริง (Online) Feature Store ทำหน้าที่รวมศูนย์การแปลงฟีเจอร์ โดยใช้สูตรเดียวกันแปลงไปเก็บไว้ทั้งในฐานข้อมูลวิจัย (Offline) และ Redis (Online) ช่วยป้องกันปัญหาสูตรคำนวณคลาดเคลื่อน

Q2: ความแตกต่างเชิงกลไกระหว่าง Data Drift และ Concept Drift ในระบบ MLOps คืออะไร และเราจะมีมาตรการรับมืออย่างไร?

A2: Data Drift คือการกระจายตัวของข้อมูลอินพุตเปลี่ยนแปลงไปจากอดีต (เช่น กลุ่มลูกค้าเปลี่ยนช่วงอายุ) ส่วน Concept Drift คือความสัมพันธ์ระหว่างอินพุตกับเป้าหมายเปลี่ยนไป (เช่น พฤติกรรมตัดสินใจซื้อเปลี่ยนไปสิ้นเชิง) การแก้ไขทำโดยตั้งระบบสังเกตการณ์ดริฟต์ และเริ่มกระบวนการเทรนโมเดลใหม่โดยอัตโนมัติ (Automated Retraining)

ข้อดี / จุดเด่น & ข้อเสีย / ข้อควรระวัง

ข้อดี / จุดเด่น

  • ช่วยประหยัดเวลาการทำระบบบริการสมองกล AI ให้ขยายตัวสเกลได้ง่ายแบบระบบซอฟต์แวร์
  • ระบบมีการประมวลผลและคำนวณสเกลภาพรวมประเมินประสิทธิภาพโมเดลตลอดเวลา

ข้อเสีย / ข้อควรระวัง

  • มีสถาปัตยกรรมโครงสร้างพื้นฐานระบบประมวลผลที่ยุ่งยาก ซับซ้อน และใช้อุปกรณ์แรมสูงมาก
  • หากมีข้อมูลแปลกปลอมหลุดเข้าไปในกระบวนการฝึกฝน อาจทำให้ผลพยากรณ์โมเดลเพี้ยนไปได้ยาวนาน

ปฏิบัติการจริง (Lab Practice)

Bilingual Guide

แล็บ: สร้างท่อข้อมูลป้อนโมเดลฝึกประมวลผล AI

💡 คำแนะนำ & ทริกเด็ด

หลีกเลี่ยงการทำ Feature Engineering ซ้ำๆ ในหลายๆ โมเดล ให้ทำแบบระบบ Feature Store ร่วมศูนย์กลาง เพื่อประหยัดคอมพิวต์ประมวลผลและลดโอกาสการเกิดข้อผิดพลาดของข้อมูลฟีเจอร์ไม่ตรงกัน