Sağlığı ve Doğruluğu İzleme
Platform'un uç nokta metriklerini ve tahmin istatistiklerini oku, zamanlanmış bir sağlık kontrolünden uyarı gönder ve holdout işiyle doğruluk kaymasını yakala.
Gece vardiyası ışıkları kıstığı için doğruluk 5 puan düşerken uç nokta her isteğe 200 OK yanıtı verebilir. Platform her uç noktanın davranışını gösterir, ancak kimseye uyarı göndermez ve etiketler olmadan doğruluğu göremez. Bu ders, açığı kapatan iki zamanlanmış kontrolü oluşturur ve doğruluk uyarısını simüle edilmiş bir gece vardiyasıyla denemeni sağlar.
Uygulamalı
Platform Neler Gösterir#

| Sinyal | Nerede | Ne kadar süre saklanır |
|---|---|---|
| HTTP istekleri, hata oranı (4xx ve 5xx), P95 gecikme | Dağıtım sayfasındaki ve Deployments sekmesindeki kartlar; her dakika yenilenir | Kartlar 24 saati kapsar; API, 1 saatten 30 güne kadar veri sunar |
| Sağlık | Overview sekmesindeki Endpoint kartı | Canlı; sağlıksızken otomatik olarak yeniden denenir |
| Günlükler | Logs sekmesi: en son 20 kayıt, Errors filtresi | API, sayfalama desteğiyle istek başına en fazla 200 kayıt döndürür |
| Tahmin istatistikleri ve geçici örnekler (en fazla 100 görüntü) | Monitoring sekmesi | Yalnızca hizmet veren örneğin belleğinde tutulur |

Diğer her şeyi etkileyen iki noktayı göz önünde bulundur. Metrikler yalnızca uç nokta Ready durumundayken toplanır ve dağıtımı silmek geçmişine erişimi sonlandırır. Monitoring sekmesindeki istatistikler ve örnekler uç nokta her durduğunda, yeniden başladığında, boyutu değiştiğinde veya modeli değiştirildiğinde kaybolur: burası bir arşiv değil, canlı görünümdür.
Çalışılmış Örnek: Zamanlanmış Uç Nokta Kontrolü#
Platform, hata oranı %5'in üzerine çıktığında ilgili kartı kırmızıya çevirir ve Slack, dağıtım hazır olduğunda veya başlatılamadığında haber verebilir; ancak eşik uyarıları yoktur. Bu kontrolü cron, CI veya izleme aracından 5 dakikada bir çalıştır ve sıfır dışında bir çıkış kodunda sayfalama ile uyarı gönder:
from ultralytics_platform import Platform
OWNER, DEPLOYMENT = "your-username", "yolo26n-iowa" # from the deployment page URL
P95_BUDGET_MS, MAX_ERROR_RATE = 300, 1.0 # errorRate is a percentage
with Platform() as client: # reads ULTRALYTICS_API_KEY
health = client.deployments.health(OWNER, DEPLOYMENT)
summary = client.deployments.metrics(OWNER, DEPLOYMENT, range="1h", view="overview")["summary"]
print(
f"healthy={health['healthy']} requests={summary['totalRequests']} "
f"p95={summary['p95LatencyMs']:.0f} ms errors={summary['errorRate']:.2f}%"
)
if not health["healthy"] or summary["p95LatencyMs"] > P95_BUDGET_MS or summary["errorRate"] > MAX_ERROR_RATE:
for entry in client.deployments.logs(OWNER, DEPLOYMENT, severity="ERROR,WARNING", limit=5)["entries"]:
print(entry["timestamp"], entry["severity"], entry["message"][:120])
raise SystemExit(1) # non-zero exit lets cron, CI, or your pager treat it as an alertSağlıklı bir uç nokta döndüren taklit API'ye karşı çalıştırıldığında tek satır yazdırıp 0 çıkış koduyla sonlanır; P95_BUDGET_MS = 100 ile aynı veriler 1 çıkış koduyla sonlanır:
healthy=True requests=1200 p95=180 ms errors=0.40%health, uç noktayı yoklar vehealthy,statusilelatencyMsdeğerlerini döndürür. Ayrıca sıfıra kadar ölçeklenmiş bir uç noktayı uyandırır; bu nedenle 5 dakikalık zamanlama, uç noktanın sıcak kalmasını sağlayan bir yoklama işlevi de görür.metrics(..., view="overview"), aralık içintotalRequests,errorRate(yüzde cinsinden) vep95LatencyMsdeğerlerini döndürür.logs, en son hata ve uyarıları getirir; böylece uyarı ilk ipucuyla birlikte gelir.
SDK'yı pip install -U ultralytics-platform ile yükle (SDK için Python 3.11+ gerekir). Yalnızca devam eden ihlallerde, örneğin art arda üç kontrol başarısız olduğunda, sayfalama ile uyarı gönder ve her uyarı için tek satırlık bir çalışma kılavuzu girdisi hazırla.
Çalışılmış Örnek: Holdout ile Doğruluğu İzleme#
İstek metrikleri doğruluğu gösteremez. Holdout gösterebilir: dikkatle etiketlenmiş, üretimi gerçekçi biçimde yansıtan 200–500 görüntüyü ayrı bir özel veri kümesi sürümünde tut ve bunları hiçbir zaman eğitimde kullanma. Dağıtılmış kontrol noktasını haftalık puanla ve sonuçları bir geçmiş dosyasına ekle:
import json
import sys
from datetime import date
from pathlib import Path
from ultralytics import YOLO
DEPLOYED = "pills-v1.pt" # the exact best.pt behind the endpoint
HOLDOUT = sys.argv[1] if len(sys.argv) > 1 else "medical-pills.yaml" # labeled, never trained on
metrics = YOLO(DEPLOYED).val(data=HOLDOUT, split="val", plots=False, verbose=False)
history = Path("holdout_history.jsonl")
rows = [json.loads(line) for line in history.read_text().splitlines()] if history.exists() else []
row = {"date": date.today().isoformat(), "data": HOLDOUT, "map50_95": round(float(metrics.box.map), 4)}
history.write_text("".join(json.dumps(r) + "\n" for r in [*rows, row]))
baseline = rows[0]["map50_95"] if rows else row["map50_95"]
drop = baseline - row["map50_95"]
print(f"holdout mAP50-95 {row['map50_95']:.3f} (baseline {baseline:.3f}, drop {drop:+.3f})")
if drop > 0.01: # more than 1 mAP point below the deployment-day baseline
raise SystemExit("ALERT: holdout accuracy regressed - open the retraining runbook")İlk çalıştırma, dağıtım günündeki başlangıç değerini kaydeder. Ardından, ihtiyaç duymadan önce uyarıyı dene: bu betik, holdout'un etiketleri ve görüntüleri aynı, parlaklığı %15 olan bir "gece vardiyası" kopyasını oluşturur:
import shutil
from pathlib import Path
import cv2
from ultralytics.data.utils import check_det_dataset
src = Path(check_det_dataset("medical-pills.yaml")["path"])
dst = Path("pills-night")
(dst / "images/val").mkdir(parents=True, exist_ok=True)
for img in (src / "images/val").glob("*.jpg"): # darken every holdout image to mimic a dim night shift
cv2.imwrite(str(dst / "images/val" / img.name), (cv2.imread(str(img)) * 0.15).astype("uint8"))
shutil.copytree(src / "labels/val", dst / "labels/val", dirs_exist_ok=True) # same labels, darker pixels
Path("pills-night.yaml").write_text(f"path: {dst.resolve()}\ntrain: images/val\nval: images/val\nnames:\n 0: pill\n")
print("wrote pills-night.yaml")$ python holdout_check.py
holdout mAP50-95 0.659 (baseline 0.659, drop +0.000)
$ python simulate_night_shift.py
wrote pills-night.yaml
$ python holdout_check.py pills-night.yaml
holdout mAP50-95 0.609 (baseline 0.659, drop +0.050)
ALERT: holdout accuracy regressed - open the retraining runbookGece vardiyasında her istek milisaniyeler içinde 200 yanıtı vermeyi sürdürürdü; yine de model 5 mAP puanı kaybetti. Bunu yalnızca holdout ortaya çıkarır. Holdout'u her üç ayda bir yeni etiketlenmiş üretim görüntüleriyle yenile ve yeni bir model dağıttığında başlangıç değerini sıfırla. İstatistiksel kayma testlerini model izleme kılavuzu ve Gözlemlenebilirlik ve Kayma dersi ele alır.
Kaymayı İzlemek için Monitoring Sekmesini Oku#

Dağıtım yaptığın hafta grafiklerin şeklini not et, sonra karşılaştır. Güven, doğruluğu değil kesinliği ölçer; bu nedenle grafikleri holdout ile birlikte değerlendir:
| Örüntü | Olası neden | Eylem |
|---|---|---|
| Güven değeri düşüyor, holdout sabit | Zararsız alan kayması | İzle; sonraki veri kümesi sürümü için örnekleri kaydet |
| Güven ve holdout değerleri düşüyor | Gerçek doğruluk gerilemesi | Yeniden eğit (10. ders) |
| Kutu boyutları veya konumları aniden değişiyor | Kamera taşınmış, lens veya saha değişmiş | Modele müdahale etmeden önce kamerayı kontrol et |
| Görüntü başına tahmin sayısı düşüyor, güven sabit | Kamera çevrimdışı, sahne daha sakin veya istemcide hata var | Üst sistemleri incele |
| P95 gecikme artıyor, çıkarım süresi sabit | İstek işleme, yük boyutu veya kapasite | Model değil, altyapı |
Üretim Görüntülerini Geri Besle#
Monitoring sekmesinde örnekleri seçip Save to dataset düğmesine tıkla; tahminleriyle birlikte normal veri alım sürecinden geçerler ve meta verilerinde deploymentId ile bölge bilgilerini korurlar. Agents bölümündeki Collect Uncertain Detections şablonu, aynı işlemi tüm bir veri kümesi için yapar: dağıtımını kullanarak tahmin üretir ve güven aralığında tespitler içeren görüntüleri bir inceleme veri kümesine kopyalar.

Yaygın Hatalar#
Belirti: Etiketlemeyi düşündüğün örnekler yeniden boyutlandırma veya model değişikliğinden sonra kayboluyor. Çözüm: Bu örnekler sunum örneğinin belleğinde tutulur. Bunları bir veri kümesine kaydet ve örneği durdurmadan, yeniden boyutlandırmadan veya modeli değiştirmeden önce içe alımın tamamlanmasını bekle.
Belirti: Daha iyi bir modeli yayımladıktan hemen sonra ayrılmış küme uyarısı tetikleniyor veya bir daha hiç tetiklenmiyor. Çözüm: Geçmişteki ilk satır başlangıç ölçümüdür. Modeli her değiştirdiğinde yeni bir holdout_history.jsonl başlat (veya yeni bir başlangıç ölçümü satırı kaydet).
Belirti: Sistem durumu normal görünürken trafik patlaması sırasında hata oranı yükseliyor. Çözüm: 429 yanıtları hata olarak sayılır, ancak “kapasite dolu” anlamına gelir. Günlükleri kontrol et; 429 yanıtları görüyorsan trafiği daha fazla uç noktaya dağıt veya daha büyük bir özel boyut kullan.
Çözümü göster
Hap uç noktası için örnek yanıt: P95_BUDGET_MS = 300 ve MAX_ERROR_RATE = 1.0 içeren */5 * * * * python endpoint_check.py || ./page-oncall.sh cron girdisi; gerçek P95 değeri 180 ms iken bütçeyi 100 ms olarak ayarlamak 1 durum koduyla çıkıp bildirim gönderiyor, yani bağlantı doğru çalışıyor. Haftalık CI işi, 300 görüntülü özel doğrulama kümesi sürümünde DEPLOYED = "pills-v2.pt" ile holdout_check.py komutunu çalıştırıyor: temel değer 0,69. Gece vardiyasındaki deneme değeri 0,05 düşürüyor ve 1 durum koduyla ALERT satırını yazdırıyor; bu da CI işinin başarısız olmasına ve kanala bildirim gitmesine neden oluyor. Akşam vardiyasından alınan on iki İzleme örneği, Herkese açık hale getir seçeneğiyle pill-review konumuna kaydediliyor; her örnek deploymentId ve europe-west1 ile etiketleniyor.