چیت‌شیت

طراحی سیستم‌های یادگیری ماشین، دریفت و مخازن ویژگی

ML System Design, Drift and Feature Stores

تعریف وظیفه، برآورد هزینه سرویس‌دهی، شکست خطوط مبنا، استقرار ایمن، کشف دریفت و انحراف آموزش و سرویس‌دهی.

  • ۱۰ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. یک تعریف، دو خواننده
  2. از هدف تا انتشار ایمن
  3. فراخوانی‌های جعبه‌ابزار
  4. قیمت‌گذاری سرویس‌دهی دسته‌ای و آنلاین
  5. دستورات
  6. فرمول‌های دریفت و انحراف
  7. پیش‌فرض‌ها و ارقام
  8. خطاها و راه‌حل‌ها
  9. اختصارات
  10. پرسش‌ها

یک تعریف، دو خواننده

معماری
بازپرmaterializeرویدادهای خامرجیستریتعاریف ویژگیذخیره‌ساز آفلاینتاریخچه با برچسب‌های زمانیپیوند مبتنی بر نقطه در زمانبرچسب‌ها به مجموعه داده آموزشذخیره‌ساز آنلاینجدیدترین مقدار به ازای موجودیتدرخواست سرویس‌دهیچند میلی‌ثانیهویژگی‌های ثبت‌شدهزمان سرویس‌دهیبررسی انحرافنرخ عدم‌تطابق به ازای هر ویژگی

از هدف تا انتشار ایمن

گام‌به‌گام
  1. وظیفهپیش‌بینی، موجودیت، افق زمانی و تصمیمی که از آن استفاده می‌کند را مشخص کنید.
  2. معیارهامعیارهای آفلاین، آنلاین، کسب‌وکار و گاردریل را قبل از مدل انتخاب کنید.
  3. خطوط مبنابدیهی، مبتنی بر شهود و سیستم فعلی. ابتدا حداقل بهبود را مشخص کنید.
  4. دادهمنبع برچسب، تاخیر برچسب و وجود هر ویژگی در زمان پیش‌بینی را بررسی کنید.
  5. بودجه‌هاتاخیر p99، اوج QPS، هزینه روزانه و کهنگی داده را تعیین کنید.
  6. سایه‌وار (Shadow)مدل جدید یک کپی از ترافیک زنده را امتیازدهی می‌کند. هیچ‌کس از خروجی آن استفاده نمی‌کند.
  7. قناری (Canary)تصمیم‌های واقعی برای 1 تا 5 درصد ترافیک. با نقض گاردریل، بازگردانی کنید.
  8. تست A/Bتقسیم تصادفی کاربران. سنجش معیار کسب‌وکار با آزمون آماری.

فراخوانی‌های جعبه‌ابزار

کار و کد
وظیفهکد
ارزان‌ترین طرح متناسب با بودجهchoose_serving(workload, costs)
بهبود نسبت به بهترین خط مبناcompare_to_baselines(..., min_lift=0.02)
امتیازدهی به سند طراحیreview_design_doc(doc, ready_score=0.85)
دریفت عددی، دسته‌بندی ده‌ک‌هاpsi(reference, current, bins=10)
بزرگ‌ترین شکاف CDFks_statistic(sample_a, sample_b)
دریفت دسته‌ایchi_square_test(reference_counts, current_counts)
پیوند مبتنی بر زمان با TTLpoint_in_time_join(labels, rows, ttl_days)
مقایسه ویژگی‌های ثبت‌شدهdetect_skew(training, serving, features)

قیمت‌گذاری سرویس‌دهی دسته‌ای و آنلاین

کد
python
refresh_hours = workload.max_staleness_hours - costs.batch_job_hours
if refresh_hours <= 0:                                      # کار طولانی‌تر از حد مجاز
    return ServingPlan("batch", False, ...)
runs_per_day = 24.0 / refresh_hours
predictions = workload.entities * runs_per_day
dollars = (predictions / 1e6 * costs.batch_dollars_per_million
    + workload.requests_per_day / 1e6 * costs.lookup_dollars_per_million)
replicas = max(costs.min_replicas, math.ceil(workload.peak_qps / costs.replica_qps))
dollars = replicas * costs.replica_dollars_per_hour * 24.0  # پرداخت آنلاین بابت زمان بیکاری
feasible = costs.online_latency_ms <= workload.latency_budget_ms

دستورات

دستورها
دستورعملکرد
python3 code/main.pyاجرای دموی هر درس با کتابخانه استاندارد
python3 code/main.py my_design_doc.jsonبررسی سند طراحی خود شما
stats.ks_2samp(reference_amounts, current_amounts)آماره KS و p-value در scipy
stats.chi2_contingency(table)آماره کای‌اسکوئر، p-value و درجه آزادی
DummyClassifier(strategy="most_frequent")خط مبنای کلاس اکثریت
feast applyثبت تعاریف ویژگی در Feast
feast materialize-incremental <end time>کپی آخرین مقادیر به ذخیره‌ساز آنلاین
store.get_historical_features(entity_df=...)ویژگی‌های آموزش مبتنی بر نقطه در زمان

فرمول‌های دریفت و انحراف

مفهوم‌ها
تغییر کوواریات
تغییر P(x). مانیتورهای ورودی آن را تشخیص می‌دهند.
تغییر توزیع پیشین
تغییر P(y). مانیتورهای پیش‌بینی و خروجی آن را تشخیص می‌دهند.
تغییر مفهوم
تغییر P(y | x). فقط مانیتورهای خروجی آن را تشخیص می‌دهند.
PSI
$\sum (\text{current} - \text{reference}) \cdot \ln(\text{current} / \text{reference})$ روی بازه‌ها.
KS D
بزرگ‌ترین شکاف میان دو CDF تجربی. 0 برای یکسان، 1 برای بدون همپوشانی.
Cramér's V
جذر chi2 / grand_total برای یک جدول دو ردیفه.
قانون لیتل
در حال پردازش = نرخ پردازش ضرب در تاخیر. 400 rps در 50 میلی‌ثانیه برابر 20 است.
بهبود (Lift)
امتیاز مدل منهای امتیاز قوی‌ترین خط مبنا.

پیش‌فرض‌ها و ارقام

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
family_alpha0.01بونفرونی، 0.005 برای هر کدام از دو تست
psi_warn0.10PSI کمتر از 0.1 پایدار است
psi_drift0.25بالای 0.25 تغییر معنادار است
ks_drift0.10D باید قبول شود و p زیر آلفا باشد
min_cramers_v0.10اندازه‌ی اثر برای دسته‌ها
patience2پنجره‌های متوالی دریفت پیش از هشدار
window_size500step=250, label_delay=500
PSI share clip0.0001توقف لاگ بی‌پایان

خطاها و راه‌حل‌ها

عیب‌یابی
  • تایم‌اوت سرویس مدل

    علت
    نبود برنامه برای شکست
    راه‌حل
    استفاده از خط مبنای مبتنی بر شهود
  • شکست تسک دسته‌ای شبانه

    علت
    گم شدن امتیازها
    راه‌حل
    ارائه آخرین امتیازهای معتبر، سپس استفاده از قانون
  • جهش توزیع امتیاز

    علت
    تصمیمات غلط در مقیاس بالا
    راه‌حل
    توقف اقدامات و ارسال هشدار به نیروی انسانی
  • دریفت ورودی‌ها، پایداری دقت

    علت
    تغییر کوواریات
    راه‌حل
    اغلب هیچ. خروجی را زیر نظر بگیرید
  • افت دقت، ورودی‌ها آرام

    علت
    تغییر مفهوم
    راه‌حل
    جمع‌آوری برچسب‌های تازه، سپس بازآموزی
  • آفلاین 0.948، زنده ضعیف‌تر

    علت
    پیوند خام ردیف‌های آینده را می‌خواند
    راه‌حل
    پیوند مبتنی بر نقطه در زمان
  • پیش‌فرض سرویس‌دهی -1، آموزش 365

    علت
    دو مسیر کد مجزا
    راه‌حل
    یک تعریف در رجیستری
  • 60 هشدار کاذب در روز

    علت
    50 ویژگی به‌صورت ساعتی با 0.05
    راه‌حل
    بونفرونی، اندازه‌ی اثر، پایداری

اختصارات

اصطلاح‌ها
PSI
شاخص پایداری جمعیت. برگرفته از اعتبارسنجی بانکی.
KS
آزمون کولموگروف-اسمیرنوف. آزمون دو نمونه‌ای روی CDFها، بدون نیاز به دسته‌بندی.
TTL
زمان حیات. مقدار قدیمی‌تر مفقود محسوب می‌شود.
QPS
پرس‌وجو در ثانیه. متناسب با اوج طراحی کنید، نه میانگین.
p99
تاخیری که 99 درخواست از 100 درخواست کمتر از آن می‌مانند.
CBPE
برآورد عملکرد مبتنی بر اطمینان. در مواجهه با تغییر مفهوم شکست می‌خورد.

پرسش‌ها

پرسش و پاسخ
چه زمانی از یادگیری ماشین استفاده نکنیم؟
یک قانون کوتاه جواب می‌دهد، برچسبی نیست، اقدامی انجام نمی‌شود، یا یک خطا هم غیرقابل‌قبول است.
چرا AUC نه؟
روی آستانه‌هایی میانگین می‌گیرد که هرگز استفاده نمی‌کنید. به جای آن با نوع تصمیم هماهنگ شوید.
تقسیم داده‌ها چگونه باشد؟
آموزش 60-80%، اعتبارسنجی 10-20%، آزمون 10-20%. تازه‌ترین بازه زمانی را جدا نگه دارید.
چگونه حلقه‌ی بازخورد را بشکنیم؟
بخشی تصادفی را نگه دارید که هرگز مشمول مداخله نشود.
علت انحراف را چطور پیدا کنیم؟
خواندن آنلاین، محاسبه مجدد و مسیر کد دوم را مقایسه کنید.
پس از بازآموزی چه کنیم؟
آزمون روی برچسب‌های اخیر، اجرای سایه‌وار و قناری، سپس ریست کردن پنجره مرجع.