Bu belgede, aynı giriş metni için vektörleştirme sonuçlarını yeniden kullanarak model çağrılarını azaltmak, gecikme süresini düşürmek ve maliyetlerden tasarruf etmek amacıyla AI_EMBED işlevi için harici bir önbellek tablosunun nasıl yapılandırılacağı açıklanmaktadır.
Arka plan bilgileri
AI_EMBED işlevi, vektörleştirme sonuçları için kalıcı bir önbellek olarak harici bir tablo belirtmek üzere CACHE_TABLE parametresini kullanır. Çalışma zamanında aşağıdaki şekilde çalışır:
Önbellekte bulunma (Cache hit): Eşzamanlı olmayan arama bir eşleşme bulursa işlev doğrudan sonucu döndürür ve model çağrısını atlar.
Önbellekte bulunmama (Cache miss): Eşzamanlı olmayan arama bir eşleşme bulamazsa işlev vektörü hesaplamak için modeli çağırır, sonucu döndürür ve bunu eşzamanlı olmayan şekilde önbellek tablosuna geri yazar.
Bu mekanizma, aynı giriş metnine sahip tekrarlayan istekler için gereksiz model çağrılarını önler.
Sınırlamalar
Bu özellik yalnızca Realtime Compute for Apache Flink VVR 11.8.preview1 ve sonraki sürümler tarafından desteklenir.
Enable Stream Storage Apache Fluss Edition. Önbellek tablosu bir Fluss birincil anahtar tablosu olmalıdır.
Önbellek tablosu oluşturun
Önbellek tablosunun birincil anahtar türü, CACHE_KEY türü ile uyumlu olmalıdır.
Açıkça belirtilen anahtar modu
Birincil anahtar türü, CACHE_KEY tarafından belirtilen sütunun türü ile uyumlu olmalıdır. Örneğin, kaynak tablodaki cache_key bir INT ise:
CREATE TABLE `fluss`.`default`.`ai_cache` (
cache_key INT NOT NULL,
embedding ARRAY<FLOAT>,PRIMARY KEY (cache_key) NOT ENFORCED
);
Otomatik oluşturulan anahtar modu
SHA256 hash değerini depolamak için birincil anahtar STRING türünde olmalıdır:
CREATE TABLE `fluss`.`default`.`ai_cache_sha` (
cache_key STRING NOT NULL,
embedding ARRAY<FLOAT>,PRIMARY KEY (cache_key) NOT ENFORCED
);
Sözdizimi
AI_EMBED(
MODEL => MODEL <MODEL NAME>,
INPUT => <INPUT COLUMN NAME>
[, DIMENSION => <DIMENSION VALUE>]
[, CACHE_TABLE => TABLE <catalog>.<db>.<table>
[, CACHE_KEY => DESCRIPTOR(<column>)]]
[, CONFIG => MAP[...]]
)
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CACHE_KEY modları
Açıkça belirtilen (Önerilen): Giriş tablosundaki belirli bir sütunun değerini arama anahtarı olarak kullanır. Verilerinizde zaten benzersiz bir anahtar varsa bu mod önerilir.
CACHE_KEY => DESCRIPTOR(cache_key)
Otomatik oluşturma: CACHE_KEY parametresini iletmezseniz sistem aşağıdaki kurallara göre bir anahtar oluşturur:
-- If CACHE_KEY is not provided, the system automatically generates the key:
-- key = LOWER(SHA256(model_id || ':' || dimension || ':' || input_text))
CACHE_TABLE => TABLE `fluss-ql`.`default`.`ai_cache1`
Bu mod, çalışma zamanında bir SHA256 hash hesaplama ek yüküne neden olur ancak model, boyut ve giriş metni kombinasyonunun her biri için benzersiz bir anahtarı otomatik olarak garanti eder.
Performans ayarlama
Ayarlama parametreleri
SET 'table.exec.async-ml-predict.max-concurrent-operations' = '100';
SET 'table.exec.async-ml-predict.output-mode' = 'ALLOW_UNORDERED';
SET 'table.exec.async-ml-predict.timeout' = '120s';
Parametreler
Parametre | Varsayılan | Açıklama |
| 10 | Eşzamanlı önbellek aramaları veya model çağrıları için maksimum kayıt sayısı. Bu değeri artırmak aktarım hızını iyileştirebilir. Ancak çok yüksek ayarlamak model hizmetini aşırı yükleyebilir veya aşırı bellek kullanımına neden olabilir. |
|
| Çıktı sırası modu.
|
| 3min | Hem arama hem de tahmin için izin verilen maksimum toplam süre. Bu değer çok düşük ayarlanırsa önbellekte bulunmama durumunda normal bir işlem zaman aşımına uğrayabilir. |
Öneri: Aşağıdaki nedenlerle ALLOW_UNORDERED kullanımı önemli performans avantajları sağlar:
Önbellekte bulunma durumu genellikle yalnızca tek bir arama gerektirirken önbellekte bulunmama durumu ek bir model çağrısı gerektirir.
ORDEREDmodunda tek bir önbellekte bulunmama durumu sonraki tüm önbellekte bulunma durumlarının çıktılanmasını engeller.ALLOW_UNORDEREDmodunda önbellekte bulunanlar önceki bulunmama durumlarının tamamlanmasını beklemeden hemen çıktılanır.
Yalnızca ekleme yapılan akışlar ALLOW_UNORDERED modunu kullanır. Geri çekmeli (retraction) akışlar için sistem ALLOW_UNORDERED belirtilse bile ORDERED moduna geri döner.
İzleme ölçümleri
Bir iş çalışırken önbelleğin etkinliğini izlemek için Flink ölçümlerini kullanabilirsiniz.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnek
Fluss birincil anahtar tablosu örneği:
-- Create the cache table (Fluss) in advance
CREATE TABLE `fluss`.`default`.`embedding_cache` (
cache_key STRING NOT NULL,
embedding ARRAY<FLOAT>,
PRIMARY KEY (cache_key) NOT ENFORCED
);
Bu örnekte önbellek olarak bir Fluss birincil anahtar tablosu kullanılır ve aktarım hızını artırmak için çıktı modu ALLOW_UNORDERED olarak ayarlanır.
-- Tuning parameters
SET 'table.exec.async-ml-predict.max-concurrent-operations' = '100';
SET 'table.exec.async-ml-predict.output-mode' = 'ALLOW_UNORDERED';
-- Create the model
CREATE TEMPORARY MODEL embedding_model
INPUT (text STRING)
OUTPUT (embedding ARRAY<FLOAT>)
WITH (
'provider' = 'openai-compat',
'task' = 'embeddings',
'model' = 'text-embedding-v4',
'dimension' = '1024'
);
-- Business query
INSERT INTO result_sink
SELECT id, content, embedding
FROM source_table, LATERAL TABLE(AI_EMBED(
MODEL => MODEL embedding_model,
INPUT => content,
CONFIG => MAP['async', 'true'],
CACHE_TABLE => TABLE `fluss`.`default`.`embedding_cache`
));