چیتشیت
تستهای حالت سایه، قناری و A/B برای مدلهای زبانی بزرگ (LLM)
Shadow, Canary and A/B Tests for LLMs
اجراهای سایه، گیتهای قناری، بازگشت به عقب سریع، تستهای ترتیبی A/B، محافظهای آشوب و گزارشهای دریفت کانفیگ.
فهرست مطالب
توالی مسیر پیشروی شبیهسازیشده
گامبهگام- حالت سایهکاندیدا رونوشت درخواستهای محیط عملیاتی را میگیرد. خروجیها به لاگها میروند، نه به کاربران.
- لاگ سایهخروجی را Diff بگیرید. تعداد توکنها، تاخیر، امتناع مدل و خطاها را لاگ کنید.
- قناریشیفت ترافیک به میزان 1٪، 10٪، 25٪، 50٪، 75٪ و 100٪.
- گیتهای کنترلیبررسی پنج متریک در هر مرحله، هر 5 تا 15 دقیقه.
- تست A/Bاختیاری. وقتی مدل جدید بهطور مشخص متفاوت است، آن را با ترافیک 50٪ اجرا کنید.
- ارتقا به مرحله بعدرفتن به 100٪ ترافیک پس از گذراندن تمام گیتهای قناری.
- بازگشت به عقببرگرداندن پرچم. دایجست پینشده را روی مدل قبلی قرار دهید.
گیتهای کنترلی قناری در شبیهساز
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
STAGES | 0.01, 0.10, 0.25, 0.50, 0.75, 1.00 | شش سهمیه ترافیک |
latency_p99_ms | 1.5 | خط مبنا 900 میلیثانیه |
cost_per_req | 1.2 | خط مبنا 0.02. تخطی بالاتر از 20٪ |
error_rate | 2.0 | خطاهای 5xx به علاوهی امتناع صریح مدل |
output_len_p99 | 1.4 | خط مبنا 450 توکن |
thumbs_down_rate | 1.5 | خط مبنا 0.03 |
`rng.uniform` noise | 0.92, 1.08 | نویز روی هر متریک سنجیدهشده |
اجرای آزمایشگاهها
کار و کد| وظیفه | کد |
|---|---|
| شبیهساز قناری، درس 20 | code/main.py |
| تزریق 25٪ پسرفت هزینه | Regression(cost_mult=1.25) |
| تزریق 80٪ پسرفت تاخیر | Regression(latency_mult=1.80) |
| بررسی یک مرحله در برابر گیتهای کنترلی | check_gates(metrics) |
| شبیهساز ترتیبی A/B، درس 21 | code/main.py |
| اندازه نمونه در توان آزمون 80٪ | fixed_sample_size(baseline, lift) |
| شبیهسازی 5٪ بهبود | simulate(0.03, 0.0315) |
| اجراکنندهی آشوب، درس 24 | run_experiment(e) |
اصطلاحات مسیر پیشروی شبیهسازیشده و تست A/B
مفهومها- حالت سایه
- بدون هیچ اثری روی کاربر. یک اسموکتست، نه آزمون کیفیت.
- قناری
- مسیر پیشروی تدریجی به سمت کاربران واقعی، همراه با گیتهای کنترلی متریک.
- غیرقطعی بودن
- تا 15٪ واریانس دقت در اجراهای متوالی روی ورودیهای یکسان.
- پرچم سیاست
- بازگشت به عقب در کانفیگ. در چند ثانیه انجام میشود، نه چند ساعت.
- پین مدل
- دایجست تغییرناپذیر در رجیستری. خودکار ارتقا پیدا نمیکند.
- ارزیابی در مقابل تست A/B
- ارزیابی میپرسد «آیا مدل از پس کار برمیآید؟» تست A/B میپرسد «آیا کاربران به آن اهمیت میدهند؟»
- روش CUPED
- حذف اثر واریانس دورهی قبل با رگرسیون. کاهش متداول 30 تا 70 درصدی.
- روش SRM
- عدمانطباق نسبت نمونه. تقسیم 50/50 که خروجی 47/53 بدهد دچار مشکل است.
قاعدهی توقف ترتیبی
کدpython
required = fixed_sample_size(baseline, lift) # توان آزمون 80٪، آلفا 0.05
adjusted = int(required * 1.4) # بافر غیرقطعی بودن LLM
if n_a > 100 and n_b > 100 and sequential_stopped_at is None:
z = z_statistic(success_a, n_a, success_b, n_b)
n_total = n_a + n_b
threshold = math.sqrt(2 * math.log(1 / 0.05) + math.log(n_total)) # رشد همراه با log(n)
if abs(z) > threshold:
sequential_stopped_at = n_total # توقف زودهنگام با مشخصشدن برندهی قطعی
صفحات مهندسی آشوب
معماریآزمایشهای اجراکنندهی آشوب
دستورها| دستور | کارکرد |
|---|---|
ERROR_BUDGET_PER_DAY = 0.001 | سطح توافق SLO برابر 99.9٪ |
EXPECTED_ERROR_RATE = 0.0005 | نرخ خطای خط مبنا |
burn_rate > 2.0 | نیمهی اول قاعدهی لغو |
e.blast_radius_pct > 0.2 | نیمهی دوم. هر دو باید برقرار باشند |
pod kill (1 decode replica) | 5 دقیقه، شعاع تخریب 5٪. تکمیل شد |
provider 429 fallback | 5 دقیقه، شعاع تخریب 30٪. لغو شد |
malformed prompt tokenizer stall | 3 دقیقه، شعاع تخریب 10٪. تکمیل شد |
دستورهای تحلیلگر دریفت
دستورها| دستور | کارکرد |
|---|---|
go run . --input fixtures/config.json --out /tmp/drift.json | نوشتن گزارش دریفت در یک فایل |
go build -o /tmp/drift-explainer . | بیلد کردن باینری |
/tmp/drift-explainer --input fixtures/config.json --check | بازگرداندن کد 2 در صورت وجود دریفت |
python3 scripts/project_test.py configuration-drift-explainer --init <work> | ایجاد یک کد اولیهی تازه |
python3 scripts/project_test.py configuration-drift-explainer --stage 1 --path <work> --strict | نمرهدهی به یک مرحله |
python3 scripts/project_test.py configuration-drift-explainer --all --solution --strict | نمرهدهی به پاسخ مرجع |
گزارش دریفت
مفهومها- ورودی
layers،observedو گزینهی اختیاریsensitive. اولویت با لایههای بعدی است.- برابر (equal)
- مقدار مؤثر با مقدار دیدهشده مطابقت دارد.
- تغییریافته (changed)
- مقادیر بر اساس
reflect.DeepEqualفرق دارند. - مفقود (missing)
- لایهها کلید را تعریف کردهاند اما کانفیگ دیدهشده ندارد.
- غیرمنتظره (unexpected)
- کانفیگ دیدهشده کلیدی دارد که در هیچ لایهای تعریف نشده است.
- تاریخچه
- همهی لایههایی که کلید را مقداردهی کردهاند، به ترتیب. مقادیر سایهانداخته باقی میمانند.
- پاکسازی دادههای حساس
- نامهای رمزعبور، secret، توکن، api-key و گواهیها به
[REDACTED]تبدیل میشوند. - خروجی
- نسخهی شمای
schemaVersionبرابر با 1. مجوز فایل دسترسی فقطمالک0600است.
عیبیابی
عیبیابیافزایش 40 درصدی هزینه یک روز پس از تغییر وضعیت
- علت
- نبود مراحل سایه یا قناری
- راهحل
- ابتدا اجرای سایه. بستن گیت روی سقف 20٪ بالای هزینه خط مبنا
بازگشت به عقب 3 ساعت طول میکشد
- علت
- بازگشت به عقب نیاز به دیپلوی مجدد دارد
- راهحل
- تغییر دادن پرچم سیاست. پین کردن دایجست قدیمی
هشدار کاذب در گیتهای کنترلی قناری
- علت
- گیتها داخل کف نویز تعریف شدهاند
- راهحل
- تنظیم گیتها در نقطهای بالاتر از کف نویز
نویزی بودن گیت بازخورد در ترافیک 1٪
- علت
- تنها 50 تا 150 نقطهی داده در هر بازه
- راهحل
- توقف طولانیتر در هر مرحله
تقسیم 50/50 خروجی 47/53 میدهد
- علت
- مشکل SRM. سیستم تخصیص مختل است
- راهحل
- ابتدا هش تخصیص را اصلاح کنید
تست A/B هرگز به معناداری آماری نمیرسد
- علت
- غیرقطعی بودن اندازه نمونه مؤثر را پایین میآورد
- راهحل
- اندازه نمونه را 1.3 تا 1.5 برابر کنید
خطای OOM پس از خطاهای 429 پرووایدر
- علت
- تلاشهای مجدد گیتوی همروندی را تشدید میکنند
- راهحل
- تزریق یک خطای 429 پرووایدر به مدت 5 دقیقه
مقدار سکرت در گزارش دریفت دیده میشود
- علت
- یک کلید با نام بیخطر حاوی مقادیر حساس است
- راهحل
- اضافه کردن کلید به لیست
sensitive
پرسش و پاسخ
پرسش و پاسخ- آیا حالت سایه کیفیت را اثبات میکند؟
- خیر. تنها خطاهای قطعی، هزینه، طول خروجی و امتناع مدل را شناسایی میکند.
- چه زمانی از مرحلهی تست A/B صرفنظر میکنید؟
- وقتی که مدل جدید فقط یک نسخهی بهبودیافته باشد.
- آیا «پایدار» به معنی همان خط مبنا است؟
- خیر. پایدار یعنی درون دامنهی واریانس مورد انتظار.
- 20 تست با اطمینان 95٪؟
- یک مثبت کاذب بر اساس تصادف رخ میدهد. از روش Bonferroni یا Benjamini-Hochberg استفاده کنید.
- کدام آزمایش مهندسی آشوب لغو میشود؟
- خطای 429 پرووایدر. در صورتی که نرخ مصرف خطا بالای 2.0 و شعاع تخریب بالای 20٪ باشد.
- گزینهی
--checkدر صورت وجود دریفت چه کدی برمیگرداند؟ - کد خروج 2.
نکات کلیدی
نکتهها- مسیر بازگشت به عقب را پیش از استقرار اصلاح کنید؛ نباید نیازی به دیپلوی مجدد داشته باشد.
- هزینهی هر درخواست را پایش کنید. مدلی با 20٪ کیفیت بهتر ممکن است در هر فراخوانی 3 برابر گرانتر باشد.
- هر زمان که مصرف بودجه خطای روزانه از 2 برابر حد انتظار فراتر رفت، آزمایشهای آشوب را متوقف کنید.
- اولین آزمون آشوب: متوقف کردن ناگهانی یک رپلیکای رمزگشایی زیر بار ترافیک یکنواخت.
- زمانبندی دورهای: استقرار قناری هفتگی، روز مانور ماهانه و ممیزی فصلی.
- شناسههای مبدا را در نام لایهها بیاورید، هرگز مقادیر سکرت را در آنها قرار ندهید.