Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Dersorta düzey

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.

Sonuç

Bir modeli özel bir uç noktaya dağıtabilir, trafik düzenine göre ücretsiz ve özel boyut seçenekleri arasında tercih yapabilir ve soğuk başlangıçlar ile 429 yanıtlarında yeniden deneyen, gerçek hatalarda ise hemen başarısız olan bir istemciyle çağırabilirsin.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Modelin Deploy sekmesinde, gecikmesi en düşük bölgedeki Deploy düğmesine tıkla.

  2. Ücretsiz 1 vCPU, 2 GiB boyutuyla başla; yalnızca sürekli gerçek zamanlı trafik için özel boyut seç.

  3. /predict değerini sunucundan dağıtıma bağlı anahtarla çağır; 429 yanıtlarında ve zaman aşımlarında artan bekleme süreleriyle yeniden dene.

  4. Yeni modelleri Replace model ile kullanıma sun: URL, bölge ve anahtar aynı kalır.

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
HizmetPlatform kullanıcıları arasında paylaşılırTek model, tek kiracı
BölgelerVeri bölgen (US, EU veya AP)42 bölgeden herhangi biri
Hız sınırıAnahtar başına dakikada 20 istekDoğrudan çağrılarda Platform sınırı yok
İstek boyutuYaklaşık 4,5 MB32 MB, istek başına en fazla 1 saat (video çalışır)
Kimlik doğrulamaHerhangi 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:

Bölge işaretlerinin yer aldığı dünya haritasını ve ölçülen gecikmeye göre sıralanmış, her satırında bir Deploy düğmesi bulunan Bölge Gecikmesi tablosunu gösteren Ultralytics Platform model Deploy sekmesi

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:

Model seçicisi, gecikme tablosu bulunan küçük bir bölge haritası ve CPU'nun 1 vCPU, belleğin 2 GiB olarak ayarlandığı Ultralytics Platform New Deployment iletişim kutusu

Trafik düzenine göre boyutlandırma:

TrafikBoyutMaliyet
Toplu işler, dahili araçlar, ani trafik artışı olan demolarVarsayılan 1 vCPU, 2 GiB; sıfıra kadar ölçeklenirTü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 örnekHazı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ılarKendi yönlendiricinin arkasında, her bölge için bir uç noktaHer uç nokta boyutuna göre ücretlendirilir

Bölge gecikme tablosunu ve özel 1 vCPU, 4 GiB boyutuna ayarlanmış CPU ve bellek seçicilerini gösteren Ultralytics Platform New Deployment iletişim kutusu

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#

İstek, hata oranı ve P95 gecikme kartlarını, konum haritasını, kopyalanabilir uç nokta URL'sinin bulunduğu Endpoint kartını ve fiyat bilgilerini içeren Deployment Information bölümünü gösteren exp-3-los-angeles Ultralytics Platform dağıtım sayfası

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=90 yaklaşı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-After gönderdiğinde bu değer dikkate alınır. Her uç nokta tek bir örnekten hizmet verir ve yoğun olduğunda 429 ile yükü azaltır.
  • Diğer 4xx hataları anında başarısız olur: 401 yanlış anahtar, 413 ise 32 MB'tan büyük bir gövde anlamına gelir; bu iki sorun da kendiliğinden düzelmez.
  • Yanıt, images içinde her görüntü (veya video karesi) için bir girdi içerir; her girdide results (class, name, confidence, box ve x1, y1, x2, y2) ile milisaniye cinsinden speed bulunur.

İ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#

API anahtarı tarayıcıya gönderiliyor

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.

Sessiz geçen bir gecenin ardından gelen ilk istek zaman aşımına uğruyor

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ç.

Büyük videolar reddediliyor

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.

Dene

Kazanan modelini varsayılan boyutta, gecikmenin en düşük olduğu bölgede dağıt. Sunucundan veya terminalinden client.py ile çağır; ardından uç nokta bir saat boşta kaldıktan sonra (sayfasını açmadan) bir isteğin süresini, sonra da hemen ardından bir isteğin süresini ölç. Son olarak modeli ikinci sıradaki modelinle değiştir ve aynı URL'nin yeni modelin sonuçlarını döndürdüğünü doğrula.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • client.py, uç noktanın nesne sayılarını yazdırır.

  • Soğuk ve sıcak istekleri ölçtün ve boyutlandırma kararını aylık maliyetiyle birlikte not ettin.

  • Model değişimi tamamlandı ve aynı URL yeni modeli sundu.

Çö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.

Sırada ne var

Yayındasın. Sırada, uç nokta veya model bozulduğunda bunu sana bildirecek iki kontrolü oluşturacaksın.

İlerlemeni kaydetmek için giriş yap