Web için LLM Çıkarım rehberi

LLM Tahmini API'si, web uygulamaları için büyük dil modellerini (LLM'ler) tamamen tarayıcıda çalıştırmanıza olanak tanır. Bu API'yi 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 sağlar. Böylece, en yeni cihaz üzerinde üretken yapay zeka modellerini web uygulamalarınıza uygulayabilirsiniz.

Görev, Gemma'nın şu varyantlarını destekler: Gemma-2 2B, Gemma 2B ve Gemma 7B. Gemma, Gemini modellerini oluşturmak için kullanılan aynı araştırma ve teknolojiden oluşturulmuş, hafif ve son teknoloji açık modellerden oluşan bir ailedir. Ayrıca Phi-2, Falcon-RW-1B ve StableLM-3B harici modellerini de destekler.

Bu görevi MediaPipe Studio demosunda görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel bakış bölümüne bakın.

Kod örneği

LLM Tahmini API'si için örnek uygulama, referans olarak kullanabileceğiniz bu görevin JavaScript'de temel bir uygulamasını sağlar. Kendi metin oluşturma uygulamanızı oluşturmaya başlamak için bu örnek uygulamayı kullanabilirsiniz.

LLM Tahmini API'sine GitHub'daki örnek uygulamadan erişebilirsiniz.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle LLM Tahmini API'yi kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü koşulları da dahil olmak üzere, geliştirme ortamınızı MediaPipe Tasks'i kullanmak için ayarlama hakkında genel bilgi için Web için kurulum kılavuzuna bakın.

Tarayıcı uyumluluğu

LLM Inference API için WebGPU uyumlu bir web tarayıcısı gerekir. Uyumlu tarayıcıların tam listesi için GPU tarayıcı uyumluluğu başlıklı makaleyi inceleyin.

JavaScript paketleri

LLM Tahmine Dayalı API kodu, @mediapipe/tasks-genai paketi üzerinden kullanılabilir. Bu kitaplıkları, platformun Kurulum kılavuzundaki bağlantılardan bulabilir ve indirebilirsiniz.

Yerel hazırlık için gerekli paketleri yükleyin:

npm install @mediapipe/tasks-genai

Bir sunucuya dağıtmak için doğrudan HTML sayfanıza kod eklemek üzere jsDelivr gibi bir içerik yayınlama ağı (CDN) hizmeti kullanın:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
    crossorigin="anonymous"></script>
</head>

Model

MediaPipe LLM Tahmini API'si, bu görevle uyumlu bir eğitimli model gerektirir. Web uygulamaları için model, GPU ile uyumlu olmalıdır.

LLM Inference API için mevcut eğitilmiş modeller hakkında daha fazla bilgi edinmek istiyorsanız göreve genel bakıştaki Modeller bölümüne bakın.

Model indirme

LLM Inference API'yi başlatmadan önce, desteklenen modellerden birini indirin ve dosyayı proje dizininizde depolayın:

  • Gemma-2 2B: Gemma model ailesinin en son sürümü. Gemini modellerini oluşturmak için kullanılan aynı araştırma ve teknolojiden oluşturulan hafif, son teknoloji açık model ailesinin bir parçasıdır.
  • Gemma 2B: Gemini modellerini oluşturmak için kullanılan aynı araştırma ve teknolojiden oluşturulan hafif, son teknoloji açık model ailesinin bir parçasıdır. Soru yanıtlama, özetleme ve akıl yürütme dahil olmak üzere çeşitli metin oluşturma görevleri için uygundur.
  • Phi-2: Soru-cevap, sohbet ve kod biçimi için en uygun 2,7 milyar parametre içeren Dönüştürücü modeli.
  • Falcon-RW-1B: 350 milyar RefinedWeb jetonu üzerinde eğitilmiş, 1 milyar parametreli nedensel kod çözücü model.
  • StableLM-3B: 1 trilyon farklı İngilizce ve kod veri kümesi jetonunda önceden eğitilmiş, 3 milyar parametre içeren yalnızca kod çözücü dil modeli.

Desteklenen modellere ek olarak, PyTorch modellerini çok imzalı LiteRT (tflite) modellerine aktarmak için Google'ın AI Edge Torch'unu kullanabilirsiniz. Daha fazla bilgi için PyTorch modelleri için Torch Üretken Dönüştürücü başlıklı makaleyi inceleyin.

KaggleModels'de bulunan Gemma-2 2B modelini kullanmanızı öneririz. Kullanılabilir diğer modeller hakkında daha fazla bilgi için göreve genel bakıştaki Modeller bölümüne bakın.

Modeli MediaPipe biçimine dönüştürme

LLM Tahmini API'si, bazılarında model dönüşümü gerektiren iki kategori model türüyle uyumludur. Modeliniz için gerekli adımlar yöntemini belirlemek üzere tabloyu kullanın.

Modeller Dönüşüm yöntemi Uyumlu platformlar Dosya türü
Desteklenen modeller Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon MediaPipe Android, iOS, web .bin
Diğer PyTorch modelleri Tüm PyTorch LLM modelleri AI Edge Torch Üretken kitaplığı Android, iOS .task

Gemma 2B, Gemma 7B ve Gemma-2 2B için dönüştürülmüş .bin dosyalarını Kaggle'da barındırıyoruz. Bu modeller, LLM Tahmini API'miz kullanılarak doğrudan dağıtılabilir. Diğer modelleri nasıl dönüştürebileceğinizi öğrenmek için Model Dönüşüm bölümüne bakın.

Modeli proje dizinine ekleme

Modeli proje dizininizde depolayın:

<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin

baseOptions nesnesi modelAssetPath parametresini kullanarak modelin yolunu belirtin:

baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}

Görevi oluşturun

Görevi çıkarım çalıştırmaya hazırlamak için LLM Inference API createFrom...() işlevlerinden birini kullanın. createFromModelPath() işlevini, eğitilmiş model dosyasının göreli veya mutlak yoluyla kullanabilirsiniz. Kod örneğinde createFromOptions() işlevi kullanılmaktadır. Kullanılabilir yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.

Aşağıdaki kodda, bu görevin nasıl oluşturulacağı ve yapılandırılacağı gösterilmektedir:

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örevde, web ve JavaScript uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
modelPath Modelin proje dizininde depolandığı yolunu belirtir. 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 jetonla sınırlandırır. Tamsayı 40
temperature Oluşturma sırasında uygulanan rastgelelik miktarı. Sıcaklık yükseldikçe üretilen metinde daha fazla yaratıcılık elde edilir. Sıcaklık düştükçe ise daha tahmin edilebilir bir üretim elde edilir. Kayan 0,8
randomSeed Metin oluşturma sırasında kullanılan rastgele tohum. Tamsayı 0
loraRanks LoRA modelleri tarafından çalışma zamanında kullanılacak LoRA sıralamaları. Not: Bu özellik yalnızca GPU modelleriyle uyumludur. Tam sayı dizisi Yok

Verileri hazırlama

LLM Inference API, metin (string) verilerini kabul eder. Görev, dize oluşturma ve tenör ön işleme dahil olmak üzere veri girişi ön işleme işlemlerini yönetir.

Tüm ön işleme işlemleri generateResponse() işlevi içinde gerçekleştirilir. Giriş metninin ek olarak ön işleme tabi tutulmasına 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ım yapmak için generateResponse() işlevini kullanır. Metin sınıflandırmada bu, giriş metni için olası kategorileri döndürmek anlamına gelir.

Aşağıdaki kodda, işleme işleminin görev modeliyle nasıl yürütüleceği gösterilmektedir.

const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;

Yanıtı yayınlamak için aşağıdakileri kullanın:

llmInference.generateResponse(
  inputPrompt,
  (partialResult, done) => {
        document.getElementById('output').textContent += partialResult;
});

Sonuçları işleme ve görüntüleme

LLM Tahmini API'si, 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 rütbeli uyarlamayı (LoRA) destekleyecek şekilde yapılandırılabilir. Geliştiriciler, hassas ayarlanmış LoRA modellerini kullanarak LLM'lerin davranışını uygun maliyetli bir eğitim süreciyle özelleştirebilir.

LLM Çıkarma API'sinin LoRA desteği, GPU arka ucu için tüm Gemma varyantları ve Phi-2 modellerinde çalışır. LoRA ağırlıkları yalnızca dikkat katmanlarına uygulanır. Bu ilk uygulama, gelecekteki geliştirmeler için deneysel bir API görevi görür. Önümüzdeki güncellemelerde daha fazla model ve çeşitli katman türlerini destekleme planları vardır.

LoRA modelleri hazırlama

Gemma veya Phi-2 gibi desteklenen model türleriyle kendi veri kümenizde hassas ayarlanmış bir LoRA modeli eğitmek için HuggingFace'taki talimatları uygulayın. Gemma-2 2B, Gemma 2B ve Phi-2 modelleri, HuggingFace'ta safetensors biçiminde kullanılabilir. LLM Inference API yalnızca dikkat katmanlarında LoRA'yı desteklediğinden, LoraConfig'ü oluştururken yalnızca dikkat katmanlarını aşağıdaki gibi belirtin:

# For Gemma
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'ta bulunan LLM Inference API'ye uygun, herkese açık ince ayarlanmış LoRA modelleri vardır. Ö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ümesinde eğitim yaptıktan ve modeli kaydettikten sonra, ince ayarlanmış LoRA model ağırlıklarını içeren bir adapter_model.safetensors dosyası elde edersiniz. safetensors dosyası, model dönüştürme işleminde kullanılan LoRA kontrol noktasıdır.

Bir sonraki adımda, MediaPipe Python paketini kullanarak model ağırlıklarını TensorFlow Lite Flatbuffer'a dönüştürmeniz gerekir. ConversionConfig, temel model seçeneklerinin yanı sıra ek LoRA seçeneklerini belirtmelidir. API yalnızca GPU ile LoRA çıkarımları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 flatbuffer dosyası oluşturur.

LoRA model çıkarımı

Web, Android ve iOS LLM Tahmini API'si, LoRA model çıkarımlarını desteklemek için güncellendi.

Web, çalışma zamanında dinamik LoRA'yı destekler. Yani kullanıcılar, başlatma sırasında kullanılacak LoRA sıralarını belirtir ve çalışma zamanı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]
});

Temel model başlatıldıktan sonra çalışma zamanında kullanılacak LoRA modellerini yükleyin. Ayrıca, LLM yanıtını 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;
});