چیتشیت
طراحی سیستمهای یادگیری ماشین، دریفت و مخازن ویژگی
ML System Design, Drift and Feature Stores
تعریف وظیفه، برآورد هزینه سرویسدهی، شکست خطوط مبنا، استقرار ایمن، کشف دریفت و انحراف آموزش و سرویسدهی.
فهرست مطالب
یک تعریف، دو خواننده
معماریاز هدف تا انتشار ایمن
گامبهگام- وظیفهپیشبینی، موجودیت، افق زمانی و تصمیمی که از آن استفاده میکند را مشخص کنید.
- معیارهامعیارهای آفلاین، آنلاین، کسبوکار و گاردریل را قبل از مدل انتخاب کنید.
- خطوط مبنابدیهی، مبتنی بر شهود و سیستم فعلی. ابتدا حداقل بهبود را مشخص کنید.
- دادهمنبع برچسب، تاخیر برچسب و وجود هر ویژگی در زمان پیشبینی را بررسی کنید.
- بودجههاتاخیر p99، اوج QPS، هزینه روزانه و کهنگی داده را تعیین کنید.
- سایهوار (Shadow)مدل جدید یک کپی از ترافیک زنده را امتیازدهی میکند. هیچکس از خروجی آن استفاده نمیکند.
- قناری (Canary)تصمیمهای واقعی برای 1 تا 5 درصد ترافیک. با نقض گاردریل، بازگردانی کنید.
- تست 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) |
| بزرگترین شکاف CDF | ks_statistic(sample_a, sample_b) |
| دریفت دستهای | chi_square_test(reference_counts, current_counts) |
| پیوند مبتنی بر زمان با TTL | point_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_alpha | 0.01 | بونفرونی، 0.005 برای هر کدام از دو تست |
psi_warn | 0.10 | PSI کمتر از 0.1 پایدار است |
psi_drift | 0.25 | بالای 0.25 تغییر معنادار است |
ks_drift | 0.10 | D باید قبول شود و p زیر آلفا باشد |
min_cramers_v | 0.10 | اندازهی اثر برای دستهها |
patience | 2 | پنجرههای متوالی دریفت پیش از هشدار |
window_size | 500 | step=250, label_delay=500 |
PSI share clip | 0.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%. تازهترین بازه زمانی را جدا نگه دارید.
- چگونه حلقهی بازخورد را بشکنیم؟
- بخشی تصادفی را نگه دارید که هرگز مشمول مداخله نشود.
- علت انحراف را چطور پیدا کنیم؟
- خواندن آنلاین، محاسبه مجدد و مسیر کد دوم را مقایسه کنید.
- پس از بازآموزی چه کنیم؟
- آزمون روی برچسبهای اخیر، اجرای سایهوار و قناری، سپس ریست کردن پنجره مرجع.