LLM Inference API, büyük dil modellerini (LLM) tamamen web uygulamaları için tarayıcınızda çalıştırmanızı sağlar. Bu modelleri metin oluşturma, bilgileri doğal dil biçiminde alma ve belgeleri özetleme gibi çeşitli görevleri gerçekleştirmek için kullanabilirsiniz. Görev, birden fazla metinden metne büyük dil modeli için yerleşik destek sunar. Böylece, cihazdaki en yeni üretken yapay zeka modellerini web uygulamalarınıza uygulayabilirsiniz.
Bu görevi MediaPipe Studio demosu ile çalışırken görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.
Kod örneği
LLM Inference API için örnek uygulama, size referans olması açısından bu görevin JavaScript'te temel bir uygulamasını sağlar. Kendi metin oluşturma uygulamanızı geliştirmeye başlamak için bu örnek uygulamayı kullanabilirsiniz.
LLM Inference API'nin örnek uygulamasına GitHub'dan erişebilirsiniz.
Kurulum
Bu bölümde geliştirme ortamınızı kurmanın temel adımları açıklanmaktadır. Projelerinizi özel olarak LLM Inference API kullanmak için kodlayın. Platform sürümü gereksinimleri de dahil olmak üzere geliştirme ortamınızı MediaPipe Görevleri'ni kullanmak üzere ayarlama hakkında genel bilgiler için Web için kurulum kılavuzuna bakın.
Tarayıcı uyumluluğu
LLM Inference API için WebGPU uyumluluğuna sahip bir web tarayıcısı gereklidir. Uyumlu tarayıcıların tam listesi için GPU tarayıcı uyumluluğu bölümüne bakın.
JavaScript paketleri
LLM Inference API kodu, @mediapipe/tasks-genai
paketi üzerinden kullanılabilir. Bu kitaplıkları, platform Kurulum kılavuzunda sağlanan bağlantılardan bulup indirebilirsiniz.
Yerel hazırlık için gerekli paketleri yükleyin:
npm install @mediapipe/tasks-genai
Sunucuya dağıtmak için jsDelivr gibi bir içerik yayınlama ağı (CDN) hizmeti kullanarak kodu doğrudan HTML sayfanıza ekleyin:
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
crossorigin="anonymous"></script>
</head>
Model
MediaPipe LLM Inference API için bu görevle uyumlu, eğitilmiş bir model gerekir. Web uygulamaları için modelin GPU ile uyumlu olması gerekir.
LLM Inference API için eğitilmiş modeller hakkında daha fazla bilgi almak isterseniz göreve genel bakış Modeller bölümüne göz atın.
Model indirme
LLM Inference API'yi başlatmadan önce, desteklenen modellerden birini indirin ve dosyayı proje dizininizde depolayın:
- Gemma: Gemini modellerini oluşturmak için kullanılan aynı araştırma ve teknolojiyle oluşturulmuş, hafif ve son teknoloji ürünü açık model ailesinin bir parçası. Soru yanıtlama, özetleme ve akıl yürütme gibi çeşitli metin oluşturma görevleri için uygundur. Gemma 2B veya Gemma 7B model varyantını indirin.
- Phi-2: 2,7 milyar parametreden oluşan Dönüştürücü modeli; soru-cevap, sohbet ve kod biçimleri için idealdir.
- Falcon-RW-1B: 350 milyar RefinedWeb jetonu üzerinde eğitilmiş 1 milyar parametre nedensel kod çözücü yalnızca kod çözücü modeli.
- StableLM-3B: Çeşitli İngilizce ve kod veri kümelerinde 1 trilyon jeton üzerinde önceden eğitilmiş, 3 milyar parametreye sahip yalnızca kod çözücü dil modeli.
Kaggle Modellerinde mevcut olan ve LLM Inference API ile uyumlu olan bir biçimde sunulan Gemma 2B veya Gemma 7B'yi kullanmanızı öneririz. Başka bir LLM kullanıyorsanız modeli MediaPipe uyumlu bir biçime dönüştürmeniz gerekir. Gemma hakkında daha fazla bilgi için Gemma sitesine bakın. Kullanılabilen diğer modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümüne bakın.
Modeli MediaPipe biçimine dönüştür
Yerel model dönüşümü
Harici bir LLM (Phi-2, Falcon veya StableLM) veya Gemma'nın Kaggle olmayan bir sürümünü kullanıyorsanız modeli MediaPipe ile uyumlu olacak şekilde biçimlendirmek için dönüştürme komut dosyalarımızı kullanın.
Model dönüştürme işlemi MediaPipe PyPI paketini gerektirir. Dönüşüm komut dosyası, 0.10.11
tarihinden itibaren tüm MediaPipe paketlerinde kullanılabilir.
Bağımlılıkları yüklemek ve içe aktarmak için aşağıdaki adımları uygulayın:
$ python3 -m pip install mediapipe
Modeli dönüştürmek için genai.converter
kitaplığını kullanın:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
LoRA modelini dönüştürmek için ConversionConfig
, temel model seçeneklerini ve ek LoRA seçeneklerini belirtmelidir. API yalnızca GPU ile LoRA çıkarımını desteklediğinden arka uç 'gpu'
olarak ayarlanmalıdır.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Dönüştürücü, biri temel model, diğeri LoRA modeli için olmak üzere iki TFLite düz arabellek dosyası oluşturur.
Parametre | Açıklama | Kabul Edilen Değerler |
---|---|---|
input_ckpt |
model.safetensors veya pytorch.bin dosyasının yolu. Bazen model güvenlik koruyucularının biçiminin birden fazla dosyaya kırıldığını (ör. model-00001-of-00003.safetensors , model-00001-of-00003.safetensors ) unutmayın. model*.safetensors gibi bir dosya kalıbı belirtebilirsiniz. |
PATH |
ckpt_format |
Model dosyasının biçimi. | {"safetensors", "pytorch"} |
model_type |
Dönüştürülen LLM. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
Modeli çalıştırmak için kullanılan işlemci (yetki verilmiş kullanıcı). | {"cpu", "gpu"} |
output_dir |
Katman başına ağırlık dosyalarını barındıran çıkış dizinine giden yol. | PATH |
output_tflite_file |
Çıkış dosyasının yolu. Örneğin, "model_cpu.bin" veya "model_gpu.bin". Bu dosya yalnızca LLM Inference API ile uyumludur ve genel bir "tflite" dosyası olarak kullanılamaz. | PATH |
vocab_model_file |
tokenizer.json ve tokenizer_config.json dosyalarını depolayan dizinin yolu. Gemma için, fare imlecini tek tokenizer.model dosyasının üzerine getirin. |
PATH |
lora_ckpt |
LoRA bağdaştırıcı ağırlığını depolayan safetytensors dosyasının LoRA ckpt'sinin yolu. | PATH |
lora_rank |
LoRA kpt derecesini temsil eden bir tam sayı. Lora ağırlıklarını dönüştürmek için gereklidir. Sağlanmazsa dönüştürücü, LoRA ağırlığının olmadığını varsayar. Not: LoRA'yı yalnızca GPU arka ucu destekler. | Tamsayı |
lora_output_tflite_file |
LoRA ağırlıkları için çıkış tflite dosya adı. | PATH |
AI Edge model dönüşümü
AI Edge üzerinden TFLite modeline eşlenmiş bir LLM kullanıyorsanız paket komut dosyamızı kullanarak bir Görev Paketi oluşturun. Paketleme işlemi, eşlenen modeli ek meta verilerle (ör. Tokenizer Parametreleri) gerekir.
Model paketleme işlemi için MediaPipe PyPI paketi gerekir. Dönüşüm komut dosyası, 0.10.14
tarihinden itibaren tüm MediaPipe paketlerinde kullanılabilir.
Bağımlılıkları yüklemek ve içe aktarmak için aşağıdaki adımları uygulayın:
$ python3 -m pip install mediapipe
Modeli gruplandırmak için genai.bundler
kitaplığını kullanın:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Parametre | Açıklama | Kabul Edilen Değerler |
---|---|---|
tflite_model |
AI Edge'den dışa aktarılan TFLite modelinin yolu. | PATH |
tokenizer_model |
SentencePiece belirteç oluşturucu modeline giden yol. | PATH |
start_token |
Modele özel başlangıç jetonu. Başlangıç jetonu, sağlanan jeton oluşturucu modelinde bulunmalıdır. | Dize |
stop_tokens |
Modele özel durak jetonları. Durdurma jetonları, sağlanan jeton oluşturucu modelinde mevcut olmalıdır. | LİSTE[STRING] |
output_filename |
Çıkış görev paketi dosyasının adı. | PATH |
Modeli proje dizinine ekleyin
Modeli proje dizininizde depolayın:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
baseOptions
nesnesi modelAssetPath
parametresiyle modelin yolunu belirtin:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Görevi oluşturma
Görevi çıkarımlara hazırlamak için LLM Inference API createFrom...()
işlevlerinden birini kullanın. createFromModelPath()
işlevini, eğitilen model dosyasına göreli veya mutlak bir yolla kullanabilirsiniz. Kod örneğinde createFromOptions()
işlevi kullanılmaktadır. Mevcut yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri'ne bakın.
Aşağıdaki kod bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir:
const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
llmInference = await LlmInference.createFromOptions(genai, {
baseOptions: {
modelAssetPath: '/assets/gemma-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Yapılandırma seçenekleri
Bu görev, Web ve JavaScript uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
modelPath |
Modelin proje dizininde depolandığı yol. | PATH | Yok |
maxTokens |
Modelin işlediği maksimum jeton sayısı (giriş jetonları + çıkış jetonları). | Tamsayı | 512 |
topK |
Modelin, oluşturma işleminin her adımında dikkate aldığı jeton sayısı.
Tahminleri en olası k simge ile sınırlar. topK ayarlarken randomSeed için de bir değer belirlemeniz gerekir. |
Tamsayı | 40 |
temperature |
Oluşturma sırasında sunulan rastgelelik miktarı. Sıcaklık ne kadar yüksek olursa üretilen metin daha fazla yaratıcılık gerektirir, düşük sıcaklık ise daha tahmin edilebilir üretim sağlar. temperature ayarlarken randomSeed için de bir değer belirlemeniz gerekir. |
Kayan | 0,8 |
randomSeed |
Metin oluşturma sırasında kullanılan rastgele çekirdek. | Tamsayı | 0 |
loraRanks |
Çalışma zamanı sırasında LoRA modelleri tarafından kullanılacak LoRA sıralaması. Not: Bu yalnızca GPU modelleriyle uyumludur. | Tam sayı dizisi | Yok |
Verileri hazırlama
LLM Inference API, metin (string
) verilerini kabul eder. Görev, tokenizasyon ve tensör ön işlemesi dahil olmak üzere veri girişi ön işlemesini yürütür.
Tüm ön işlemeler, generateResponse()
işlevi içinde gerçekleştirilir. Giriş metninin önceden işlenmesine gerek yoktur.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Görevi çalıştırma
LLM Inference API, çıkarımları tetiklemek için generateResponse()
işlevini kullanır.
Metin sınıflandırmada bu, giriş metni için olası kategorilerin döndürülmesi anlamına gelir.
Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüleceğini gösterir.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Yanıtı akış şeklinde yayınlamak için şunu kullanın:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Sonuçları işleme ve görüntüleme
LLM Inference API, oluşturulan yanıt metnini içeren bir dize döndürür.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
LoRA modeli özelleştirme
Mediapipe LLM çıkarım API'si, büyük dil modelleri için Düşük Sıralama Uyarlaması'nı (LoRA) destekleyecek şekilde yapılandırılabilir. Geliştiriciler, ince ayarlı LoRA modelleri kullanan uygun maliyetli bir eğitim süreciyle LLM'lerin davranışını özelleştirebilir.
LLM Inference API'nin LoRA desteği, yalnızca dikkat katmanları için geçerli olan LoRA ağırlıkları ile GPU arka ucu için Gemma-2B ve Phi-2 modellerinde kullanılabilir. Bu ilk uygulama, gelecekteki geliştirmeler için deneysel bir API işlevi görmektedir. Gelecek güncellemelerde daha fazla model ve çeşitli katman türlerini desteklemesi planlanmaktadır.
LoRA modelleri hazırlama
Desteklenen model türleri (Gemma-2B veya Phi-2) ile kendi veri kümenizde hassas ayarlar yapılmış bir LoRA modeli eğitmek için HuggingFace talimatlarını uygulayın. Gemma-2B ve Phi-2 modellerinin her ikisi de HuggingFace'te koruyucu biçimde mevcuttur. LLM Inference API yalnızca dikkat katmanlarında LoRA'yı desteklediğinden, sadece aşağıdaki gibi LoraConfig
oluştururken dikkat katmanlarını belirtin:
# For Gemma-2B
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
Test için HuggingFace'te LLM Inference API'ye uyan, herkesin erişebileceği ve hassas ayarları yapılmış LoRA modelleri mevcuttur. Örneğin, Gemma-2B için monsterapi/gemma-2b-lora-maths-orca-200k ve Phi-2 için lole25/phi-2-sft-ultrachat-lora.
Hazırlanan veri kümesiyle ilgili eğitim verip modeli kaydettikten sonra, hassas ayarlar yapılmış LoRA model ağırlıklarını içeren bir adapter_model.safetensors
dosyası elde ediyorsunuz. Safetensors dosyası, model dönüştürme işleminde kullanılan LoRA kontrol noktasıdır.
Sonraki adım olarak, MediaPipe Python Paketini kullanarak model ağırlıklarını TensorFlow Lite Flatbuffer ürününe dönüştürmeniz gerekir. ConversionConfig
alanında temel model seçeneklerinin yanı sıra ek LoRA seçenekleri de belirtilmelidir. API yalnızca GPU ile LoRA çıkarımını desteklediğinden arka uç 'gpu'
olarak ayarlanmalıdır.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Dönüştürücü, biri temel model, diğeri LoRA modeli için olmak üzere iki TFLite düz arabellek dosyası oluşturur.
LoRA modeli çıkarımı
Web, Android ve iOS LLM Inference API, LoRA modeli çıkarımını destekleyecek şekilde güncellendi. Web, çalışma zamanında farklı LoRA modellerini değiştirebilen dinamik LoRA'yı destekler. Android ve iOS, görevin ömrü boyunca aynı LoRA ağırlıklarını kullanan statik LoRA'yı destekler.
Web, çalışma zamanı boyunca dinamik LoRA'yı destekler. Yani kullanıcılar başlatma sırasında kullanılacak LoRA sıralamalarını beyan eder ve çalışma sırasında farklı LoRA modellerini değiştirebilir.const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
const llmInference = await LlmInference.createFromOptions(genai, {
// options for the base model
...
// LoRA ranks to be used by the LoRA models during runtime
loraRanks: [4, 8, 16]
});
Çalışma sırasında temel model başlatıldıktan sonra kullanılacak LoRA modellerini yükleyin. Ayrıca, LLM yanıtı oluştururken LoRA model referansını ileterek LoRA modelini tetikleyin.
// Load several LoRA models. The returned LoRA model reference is used to specify
// which LoRA model to be used for inference.
loraModelRank4 = await llmInference.loadLoraModel(loraModelRank4Url);
loraModelRank8 = await llmInference.loadLoraModel(loraModelRank8Url);
// Specify LoRA model to be used during inference
llmInference.generateResponse(
inputPrompt,
loraModelRank4,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});