Gerçek ödünleşim
Yerel çıkarım genellikle bir gecikme optimizasyonu olarak çerçevelenir. Sadece bu değildir. Bir model cihazda çalıştığında, girdi cihazdan hiç ayrılmaz. Bu, gizlilik, uyumluluk ve çevrimdışı davranış sonuçları olan bir veri çıkışı kararıdır ve aynı zamanda gidiş-dönüş süresini de azaltır.
Ödünleşim artımlı değil, yapısaldır.
Yerel çıkarımın kazandırdıkları:
- cihaz sınırı içinde kalan veri;
- saha araçları, araçlar, klinik ortamlar ve bodrumda kullanılan her şey için önemli olan ağsız çalışma;
- donanım bedeli ödendikten sonra öngörülebilir istek başına maliyet;
- uzak bir uç noktanın kullanılabilirliğine veya hız sınırlarına bağımlılık olmaması.
Yerel çıkarımın maliyetleri:
- yetenek: daha küçük parametre sayıları, agresif niceleme ve sınırlı bağlam pencereleri akıl yürütme derinliğini, araç kullanım güvenilirliğini ve uzun belge işlemeyi azaltır;
- bellek ve termal bütçe, hangi modellerin uygulamanın geri kalanıyla eşzamanlı çalışabileceğini kısıtlar;
- değerlendirilmesi, sürümlenmesi ve dağıtılması gereken ikinci bir çıkarım yığını;
- daha yavaş yineleme, çünkü bir cihazdaki modeli güncellemek bir dağıtım komutu değil, bir dağıtım problemidir.
Uzak çıkarım tüm bunları tersine çevirir. Yetenek satın alır — daha büyük modeller, daha uzun bağlam, daha güçlü araç orkestrasyonu — karşılığında veriyi ürünün kontrol etmediği bir sınırın ötesine taşır ve bağlantıya ve üçüncü bir tarafın çalışma süresine katı bir bağımlılık getirir.
Çoğu faydalı sistem her ikisine de ihtiyaç duyar. Dolayısıyla mühendislik sorusu "yerel mi uzak mı" değil, "sınır nerede duruyor ve belirli bir isteğin hangi tarafa düşeceğine ne karar veriyor" sorusudur.

Sınırı çizmek
Yaygın hata, model güvenine göre yönlendirme yapmaktır: yerel çalıştır, yerel model emin değilse yukarı taşı. Bu caziptir çünkü izlemesi kolaydır ve iki nedenden dolayı yanlıştır. Birincisi, küçük nicelemiş modellerden gelen güven puanları kötü kalibre edilmiştir, bu nedenle yükseltme tetikleyicisi öngörülemez şekilde ateşlenir. İkincisi ve daha önemlisi, yanlış değişkene göre yönlendirme yapar. Bir yükün cihazdan ayrılıp ayrılamayacağı, sorunun ne kadar zor olduğunun değil, verinin bir özelliğidir.
Bunun yerine veri sınıfına göre yönlendirin. Sınıfları açıkça tanımlayın ve her birine izin verilen bir yürütme konumu atayın:
sınıf örnekler konum
--------------- -------------------------------- ------------------
regüle-kişisel tanımlayıcılar, sağlık notları yalnızca yerel
cihaza-özel ham sensör kareleri, yerel dosyalar yalnızca yerel
kullanıcı-içeriği taslaklar, transkriptler, mesajlar varsayılan yerel,
rıza ile uzak
türetilmiş embedding'ler, redakte özetler uzak izinli
kamusal belgeler, referans materyali uzak tercih edilir
Sınıflandırma adımı çıkarımdan önce, girdi üzerinde çalışır ve mümkün olduğunda deterministiktir: şema kontrolleri, alan düzeyinde etiketler, kaynak kökeni. Sınıflandırmanın bir modele ihtiyaç duyduğu durumlarda, tek işi bir sınıf etiketi yaymak olan küçük bir yerel sınıflandırıcı kullanın — kullanıcıya yanıt vermek değil.
Kullanışlı bir desen, akıl yürütmeyi yerel tutmak ve yükün özel olduğu durumlarda araç çağrısını uzak tutmaktır. Yerel model ne yapacağına ve hangi argümanlarla yapacağına karar verir; uzak çağrı yalnızca minimum argüman kümesini taşır, asla tam bağlamı taşımaz. Bir takvim araması bir tarih aralığına ihtiyaç duyar, onu üreten konuşmaya değil. Bir retrieval çağrısı bir sorgu dizesine ve bir ad alanına ihtiyaç duyar, kullanıcının taslağına değil. Bu, uzak hizmetlerin yeteneğini onlardan faydalanan kısımlar için korur — taze veri, büyük dizinler, ağır hesaplama — özel malzeme cihazda kalırken.
Dürüst ödünleşim burada yaşar. Akıl yürütmeyi araç çağrısından ayırmak, uzak modelin tam bağlamı görme yeteneğini kaybetmenize neden olur, ki bu tam olarak uzak modelleri belirsiz, çok adımlı görevlerde iyi yapan şeydir. Daha küçük bir çıkış yüzeyi için bir miktar yanıt kalitesinden feragat ediyorsunuz. Bu feragat sınıf başına kasıtlı olarak yapılmalı ve kaydedilmelidir.
Bozulmuş çalışmayı bir hata yolu olarak değil, birinci sınıf bir durum olarak tasarlayın.
ent:

- hangi isteklerin yerelde azaltılmış kaliteyle sunulduğunu;
- hangilerinin kuyruğa alınıp bağlantı geri geldiğinde yeniden oynatıldığını ve yeniden oynatmanın idempotency ile nasıl etkileştiğini;
- hangilerinin doğrudan reddedildiğini, nedenini söyleyen bir mesajla;
- kullanıcının bozulmuş çıktıyı tam çıktıdan ayırt edebilmesi için arayüzün ne ilettiğini.
Çevrimdışıyken sessizce daha kötü yanıtlar üreten ve bunu bildirmeyen bir sistem, şu anda bir şeyi yapamayacağını söyleyen bir sistemden daha zor güvenilir.
Ayrımı ölçmek
Sınır oluştuktan sonra izleme gerektirir. Ağırlığın çoğunu üç ölçüm taşır.
Birincisi, yerel hizmet oranı: tamamen cihaz üstünde sunulan isteklerin payı, veri sınıfına göre ayrıştırılmış. Tek bir toplu sayı önemsediğiniz şeyi gizler, çünkü önemsiz isteklerden kaynaklanan yüksek bir yerel oran, hassas sınıfların gerçekten yerelde kalıp kalmadığı hakkında hiçbir şey söylemez. Sınıf başına izleyin ve model ve uygulama sürümleri boyunca izleyin, çünkü bir prompt değişikliği yönlendirmeyi kaydırabilir.
İkincisi, sınıf başına kalite farkı. Her sınıf için küçük bir değerlendirme seti tutun ve hem yerel hem de uzak yol üzerinde çalıştırın. Fark, sınırın yanıt kalitesinde neye mal olduğunu söyler. Bir sınıftaki fark ihmal edilebilirse, yerel yol genişletilebilir. Büyükse, mevcut ayrım için belgelenmiş bir nedeniniz vardır — ve toptan yükseltme yerine hedefli iyileştirme için bir aday.
Üçüncüsü, bağlamın serileştirilmesi dahil uçtan uca ölçülen gidiş-dönüş gecikmesi. Yerel-uzak karşılaştırmalarının en sık yanlış gittiği yer burasıdır. Uzak bir çağrı sadece ağ süresi değildir; prompt birleştirme, tokenizasyon, serileştirme, taşıma, uç noktada kuyruklama, prefill, decode ve deserializasyondur. Yerel bir çağrının kendi ek yükü vardır: model yükleme, bellek baskısı ve uygulamanın geri kalanıyla rekabet maliyeti. Her ikisini de aynı başlangıç noktasından ölçün — girdinin mevcut olduğu an — yoksa karşılaştırma anlamsızdır.
Sonra sessiz yükseltmeyi izleyin. Bu, bir yerel yedek yolun bazı koşullar altında tam prompt'u uzak bir uç noktaya ilettiği başarısızlık modudur. Genellikle birkaç mekanizmadan biriyle ortaya çıkar: orijinal yükü yeniden gönderen bir yeniden deneme sarmalayıcısı; ham girdileri bir gözlemlenebilirlik arka ucuna gönderen bir günlükleme veya izleme yolu; uzak API bir mesaj listesi beklediği için tüm konuşmayı bağlam olarak geçen bir araç çağrısı bağdaştırıcısı; veya çıkış politikasında ilgili bir değişiklik olmadan bir sınıfı yerelden uzağa çeviren bir özellik bayrağı.
Savunma, çıkışı açık ve denetlenebilir hale getirmektir. Her giden yük, veri sınıfını bilen ve yalnızca o sınıf için izin verilen alanları yayabilen tek bir bileşen tarafından oluşturulmalıdır. Testlerde bunu doğrulayın: regüle-kişisel bir girdi verildiğinde, giden yük yasaklı kümeden hiçbir alan içermemelidir. Çıkan sınıfı ve alan adlarını günlüğe kaydedin, değerleri değil. Politika her çağrı noktasında değil de tek bir darboğazda uygulanırsa, sessiz yükseltme bir üretim olayı yerine bir test hatası haline gelir.
Pratik özet: girdileri hassasiyete göre sınıflandırın, bu sınıflandırmaya göre yönlendirin, özel yükleri cihazda tutarken ihtiyaç duyan kısımlar için uzak yeteneği ödünç alın, çevrimdışı davranışı sınıf başına tanımlayın ve yerel oran, kalite farkı ve çıkış yüzeyinin tümü görünür olacak şekilde ayrımı izleyin. Gecikme, kullanıcıların fark ettiği faydadır. Veri çıkışı ise sistemin dağıtılabilir olup olmadığına karar veren şeydir.
