Uç Nokta Dağıt ve Çağır
42 bölgeden birinde özel bir uç nokta oluştur, boyutunu trafiğine göre belirle ve bunu soğuk başlangıçları, 429 yanıtlarını ve geçersiz anahtarları yönetebilen bir istemciyle çağır.
Sıfıra kadar küçülen ücretsiz bir uç noktanın ilk isteğe yanıt vermesi bir dakika kadar sürebilir; basit bir istemci bu gecikmeyi kullanıcıya gösterilen bir zaman aşımına dönüştürür. Sızdırılmış bir anahtar, silindikten sonra bile çalışmaya devam eder. Bu derste kazanan modelini dağıtacak, uç noktanın boyutunu bilinçli biçimde belirleyecek ve her üretim entegrasyonunun ihtiyaç duyduğu küçük istemciyi yazacaksın.
Uygulamalı
Paylaşılan Çıkarım mı, Özel Uç Nokta mı?#
Her model, test için uygun olan Platform'un paylaşılan çıkarım API'si üzerinden zaten çağrılabilir. Üretim trafiği için özel uç nokta kullan:
| Paylaşılan çıkarım | Özel uç nokta | |
|---|---|---|
| Hizmet | Platform kullanıcıları arasında paylaşılır | Tek model, tek kiracı |
| Bölgeler | Veri bölgen (US, EU veya AP) | 42 bölgeden herhangi biri |
| Hız sınırı | Anahtar başına dakikada 20 istek | Doğrudan çağrılarda Platform sınırı yok |
| İstek boyutu | Yaklaşık 4,5 MB | 32 MB, istek başına en fazla 1 saat (video çalışır) |
| Kimlik doğrulama | Herhangi bir çalışma alanı API anahtarı | Yalnızca dağıtıma bağlı anahtar |
Uç Noktayı Oluşturma ve Boyutlandırma#
Modelin Deploy sekmesini aç. Tarayıcın 42 bölgenin tamamına (Amerika'da 14, Avrupa'da 13, Asya-Pasifik'te 12, Orta Doğu ve Afrika'da 3) olan gecikmeyi ölçer ve tabloyu bu değere göre sıralar:

Sana istek gönderenlere en yakın satırdaki Deploy düğmesine tıkla, CPU, bellek, fiyat ve oluşturulan adı (ör. yolo26n-iowa) gözden geçir ve Create Deployment düğmesine tıkla. Profilindeki Deployments sekmesinden New Deployment ile de başlayabilirsin:

Trafik düzenine göre boyutlandırma:
| Trafik | Boyut | Maliyet |
|---|---|---|
| Toplu işler, dahili araçlar, ani trafik artışı olan demolar | Varsayılan 1 vCPU, 2 GiB; sıfıra kadar ölçeklenir | Tüm planlarda ücretsiz |
| Soğuk başlangıcı bekleyemeyen, sürekli gerçek zamanlı trafik | Özel boyut (1–8 vCPU, 2–32 GiB) ve sürekli çalışan bir örnek | Hazır duruma geldikten durdurulana kadar, boşta olduğu süre de dahil, saatlik ücretlendirilir: Iowa'da 1 vCPU, 4 GiB için yaklaşık 0,12 $/saat |
| Birden fazla kıtadaki kullanıcılar | Kendi yönlendiricinin arkasında, her bölge için bir uç nokta | Her uç nokta boyutuna göre ücretlendirilir |

Planlar 3 (Free), 10 (Pro) veya sınırsız (Enterprise) dağıtıma izin verir; durdurulan uç noktalar da sayıya dahildir. Rozetinde Ready yazdığında uç nokta trafiği kabul eder:
Çalışılmış Örnek: Üretim Ortamında Sorunsuz Çalışan Bir İstemci#

Her uç noktanın https://predict-<id>-<hash>-<region>.a.run.app gibi bir URL'si vardır ve bu URL /predict (POST), /health ve etkileşimli bir /docs sayfası sunar. Uç nokta yalnızca oluşturulurken bağlanan API anahtarını kabul eder; çalışma alanı sahipleri bu anahtarı dağıtımın Predict sekmesindeki Docs bölümünde, Python, JavaScript ve cURL kod parçacıklarının yanında önceden doldurulmuş olarak görür. Kod parçacıkları tek bir istek gönderir; üretim kodunun ayrıca soğuk başlangıçta ve yoğun bir örnekte de sorunsuz çalışması gerekir:
import os
import time
from collections import Counter
import httpx
URL = "https://YOUR_DEPLOYMENT_URL.run.app/predict"
HEADERS = {"Authorization": f"Bearer {os.environ['ULTRALYTICS_API_KEY']}"} # the deployment's bound key, server-side only
def predict(client, path, conf=0.25, attempts=4):
"""POST one image; retry timeouts, 429, and 5xx with backoff; fail fast on other errors."""
for attempt in range(attempts):
try:
with open(path, "rb") as f:
r = client.post(URL, headers=HEADERS, data={"conf": conf}, files={"file": f}, timeout=90)
if r.status_code < 400:
return r.json()
if r.status_code != 429 and r.status_code < 500:
r.raise_for_status() # 401 wrong key, 413 too large: retrying won't help
wait, reason = float(r.headers.get("Retry-After", 2**attempt)), r.status_code
except httpx.TimeoutException: # a scaled-to-zero endpoint can take up to a minute to wake
wait, reason = 2**attempt, "timeout"
print(f"attempt {attempt + 1}: {reason}, retrying in {wait:.0f} s")
time.sleep(wait)
raise RuntimeError(f"endpoint still unavailable after {attempts} attempts")
with httpx.Client() as client:
response = predict(client, "bus.jpg")
for image in response["images"]:
counts = Counter(d["name"] for d in image["results"])
print(f"{sum(counts.values())} objects {dict(counts)} in {image['speed']['inference']:.1f} ms")Bunu, önce bir kez 429 yanıtı veren, ardından uç noktanın yanıt biçiminde bus.jpg için gerçek bir YOLO26n sonucu döndüren yerel bir taklit sunucusuna karşı test ettik:
attempt 1: 429, retrying in 2 s
5 objects {'bus': 1, 'person': 4} in 34.9 msÖnemli kararların satır satır açıklaması:
timeout=90yaklaşık bir dakikaya kadar sürebilen soğuk başlangıcı kapsar; çoğu HTTP istemcisinin varsayılan zaman aşımı çok daha kısadır.- 429 ve 5xx hataları yeniden denenir; uç nokta
Retry-Aftergönderdiğinde bu değer dikkate alınır. Her uç nokta tek bir örnekten hizmet verir ve yoğun olduğunda429ile yükü azaltır. - Diğer 4xx hataları anında başarısız olur:
401yanlış anahtar,413ise 32 MB'tan büyük bir gövde anlamına gelir; bu iki sorun da kendiliğinden düzelmez. - Yanıt,
imagesiçinde her görüntü (veya video karesi) için bir girdi içerir; her girdideresults(class,name,confidence,boxvex1,y1,x2,y2) ile milisaniye cinsindenspeedbulunur.
İsteğe bağlı form alanları conf (varsayılan 0.25), iou (0.7), imgsz (modelin eğitim boyutu), video için vid_stride ve 0–1 koordinatları için normalize=true şeklindedir. cURL karşılığı, her alan için bir satırdır:
curl -X POST "https://YOUR_DEPLOYMENT_URL.run.app/predict" \
-H "Authorization: Bearer $ULTRALYTICS_API_KEY" \
-F "file=@bus.jpg" -F "conf=0.25" -F "iou=0.7" -F "imgsz=640"URL'yi Değiştirmeden Yeni Sürümleri Yayına Al#
Dağıtım sayfasındaki Replace model, aynı çalışma alanındaki tamamlanmış başka bir modeli devreye alır. Yeni model hazır olana kadar eski model hizmet vermeye devam eder; URL, bölge ve anahtar değişmez. Dağıtım başarısız olursa önceki model yayında kalır. Geri alma işlemi, önceki modeli seçerek aynı işlemi yapmaktır; bu nedenle önceki modeli projede tut. Update configuration mevcut dağıtımın boyutunu değiştirir, Stop ise faturalandırmayı duraklatır ve URL'yi korur.
Bazı değişiklikler yeni bir uç nokta gerektirir: bölgeler sabittir (taşımak için uç noktayı silip yeniden oluşturman ve yeni bir URL alman gerekir) ve özel alan adları desteklenmez. Bu nedenle, arayanların markana ait sabit bir ana makine adına ihtiyacı varsa önüne kendi ağ geçidini koy. Platform dışında çalıştırmak için modeli dışa aktar (Dağıtım için Dışa Aktar) veya Triton Inference Server arkasında kendi sunucunda barındır.
Yaygın Hatalar#
Belirti: Uç noktan, kaynağını açıklayamadığın trafik alıyor. Çözüm: Anahtarı hiçbir zaman web veya mobil uygulamaya koyma; uç noktayı arka ucundan çağır. Bağlı anahtarı silmek veya devre dışı bırakmak uç noktayı kilitlemez, çünkü uç nokta bu anahtar dizesini kabul etmeye devam eder. Erişimi iptal etmek için dağıtımı durdur veya sil ve yeni bir anahtara bağlı yeni bir dağıtım oluştur.
Belirti: Sabah gelen ilk istek başarısız oluyor, yeniden deneme ise başarılı oluyor. Çözüm: Varsayılan boyuttaki uç noktalar sıfıra ölçeklenir. En az 90 saniyelik zaman aşımı kullan, beklenen trafik başlamadan önce bir /health çağrısıyla uç noktayı ısıt veya her isteğin hızlı olması gerekiyorsa özel boyuta geç.
Belirti: Yüklemeler 413 ile başarısız oluyor. Çözüm: Özel uç noktalar, 32 MB'a kadar istek gövdelerini kabul eder. Uzun videoları daha kısa kliplere böl veya örneklenmiş kareler gönder; kareleri sunucu tarafında atlamak için vid_stride değerini ilet.
Çözümü göster
Hap hattı kamerası için örnek yanıt: v2-finetune modelini europe-west1 bölgesine (Almanya'daki tesisten gecikmenin en düşük olduğu St. Ghislain) varsayılan boyutta dağıt. Bir saatlik boşta kalma süresinden sonraki soğuk istek: 38 sn; 90 saniyelik zaman aşımı bunu karşılıyor. Sıcak istek: 0,3 sn. Karar: Hat PLC'si vardiyalar sırasında her 30 saniyede bir kare gönderdiğinden uç nokta tüm vardiya boyunca sıcak kalır ve yalnızca ilk kare soğuk başlangıç maliyetine yol açar. Hat denetleyicisinden her vardiyadan 2 dakika önce yapılan bir /health çağrısı bu maliyeti de ortadan kaldırır; böylece ücretsiz varsayılan boyut korunur ve özel 1 vCPU, 4 GiB örneğe kıyasla ayda yaklaşık 90 $ tasarruf edilir. Modeli v1-baseline olarak geri değiştirdiğinde aynı URL'den v1 sonuçları gelir; tamamlamak için modeli yeniden v2 olarak değiştir.