Web için LLM Çıkarım rehberi

ziyaret edin.

LLM Inference API, büyük dil modellerini (LLM) tamamen pek çok farklı işlem için kullanabileceğiniz bir web tarayıcısı metin oluşturma, doğal dil biçiminde bilgi alma, ve belgeleri özetler. Görev, birden fazla kullanıcı için Metinden metne dönüştürülebilir büyük dil modelleri sayesinde cihazdaki en yeni özellikleri uygulayabilirsiniz üretken yapay zeka modellerini kullanabilirsiniz.

Bu görevi MediaPipe Studio ile demo'ya gidin. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.

Kod örneği

LLM Inference API için örnek uygulama, aşağıdaki bilgilerin temel bir bu görevi JavaScript'te bulabilirsiniz. Aşağıdaki örnek uygulamayı kullanarak kendi metin oluşturma uygulamanızı oluşturmaya başladınız.

LLM Inference API örnek uygulamasına şuradan erişebilirsiniz: GitHub'ı tıklayın.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili özel olarak LLM Inference API'yi kullanacak kod projeleri içerir. Şu konularda genel bilgi için: MediaPipe Tasks'ı kullanmak için geliştirme ortamınızı ayarlayarak platform sürümü gereksinimleri hakkında daha fazla bilgi için Web.

Tarayıcı uyumluluğu

LLM Inference API, WebGPU uyumluluğuna sahip bir web tarayıcısı gerektirir. Tam fiyat için uyumlu tarayıcıların listesi için GPU tarayıcısına bakın uyumluluk başlıklı makaleyi inceleyin.

JavaScript paketleri

LLM Inference API koduna @mediapipe/tasks-genai paketinden yararlanın. Bu kitaplıkları, şurada sağlanan bağlantılardan bulup indirebilirsiniz: platform Kurulum rehberini inceleyin.

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

npm install @mediapipe/tasks-genai

Sunucuya dağıtmak için şunun gibi bir içerik yayınlama ağı (CDN) hizmeti kullanın: jsDelivr ile 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, bu görevi görebilir. Web uygulamaları için model, GPU ile uyumlu olmalıdır.

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

Model indirme

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

  • Gemma oluşturmak için kullanılan araştırma ve teknolojinin Gemini modelleri Pek çok farklı türde metin oluşturma görevleri (soru cevaplama, özetleme ve e-posta gibi) muhakeme. Gemma 2B veya Gemma 7B model varyantını indirin.
  • Phi-2: 2,7 milyar parametre Soru-Cevap, sohbet ve kod için en uygun dönüştürücü modeli biçimindedir.
  • Falcon-RW-1B: 1 milyar 350 milyarlık jetonlarla eğitilen yalnızca parametre nedensel kod çözücü modeli RefinedWeb.
  • StableLM-3B: 3 1 trilyon kez önceden eğitilmiş bir milyar parametre yalnızca kod çözücü dil modeli jetonları arasında yer alır.

Kaggle'da bulabileceğiniz Gemma 2B veya Gemma 7B'yi kullanmanızı öneririz. Modeller LLM Inference API ile uyumlu bir biçimde olmalıdır. Şunu kullanıyorsanız: başka bir LLM olarak değiştirirseniz modeli bir LLM'ye dönüştürmeniz MediaPipe uyumlu bir biçim. Gemma hakkında daha fazla bilgi için Gemma sitesi. Daha fazla bilgi için görmek için Modeller bölümüne göre göreve genel bakış bölümünü inceleyin.

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

Yerel model dönüştürme

Harici bir LLM (Phi-2, Falcon veya StableLM) ya da Kaggle olmayan bir LLM kullanıyorsanız sürümünü yüklemek istiyorsanız dönüşüm komut dosyalarımızı kullanarak modeli uyumlu bir şekilde çalışır.

Model dönüştürme işlemi için MediaPipe PyPI paketi gerekir. Dönüşüm komut dosyası, 0.10.11 tarihinden sonraki tüm MediaPipe paketlerinde kullanılabilir.

Bağımlılıkları aşağıdakilerle yükleyip içe aktarı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 modeli belirtmelidir hem de ek LoRA seçenekleri yer alıyor. Yalnızca API'nin yalnızca GPU ile LoRA çıkarımını destekliyorsa 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 için olmak üzere iki TFLite sabit arabellek dosyası çıktısı verir diğeri ise LoRA modeli içindir.

Parametre Açıklama Kabul Edilen Değerler
input_ckpt model.safetensors veya pytorch.bin dosyasının yolu. Bazı durumlarda model güvenli tensor biçiminin birden fazla dosyaya bölündüğünü (ör. model-00001-of-00003.safetensors, model-00001-of-00003.safetensors. model*.safetensors gibi bir dosya kalıbı belirtebilirsiniz. YOL
ckpt_format Model dosyasının biçimi. {"safetensors", "pytorch"}
model_type Dönüştürülen LLM. {&quot;PHI_2&quot;, &quot;FALCON_RW_1B&quot;, &quot;STABLELM_4E1T_3B&quot;, &quot;GEMMA_2B&quot;}
backend Modeli çalıştırmak için kullanılan işlemci (yetki verilmiş kullanıcı). {&quot;cpu&quot;, &quot;gpu&quot;}
output_dir Katman başına ağırlık dosyalarını barındıran çıkış dizininin yolu. YOL
output_tflite_file Çıkış dosyasının yolu. Örneğin, "model_cpu.bin" veya "model_gpu.bin" ekleyin. Bu dosya yalnızca LLM Inference API ile uyumludur ve genel bir "tflite" dosyası olarak kullanılamaz. YOL
vocab_model_file tokenizer.json ve tokenizer_config.json dosya. Gemma için, fare imlecini tek tokenizer.model dosyasının üzerine getirin. YOL
lora_ckpt LoRA adaptör ağırlığını depolayan güvenlitensörlerin LoRA ckpt dosyasının yolu. YOL
lora_rank LoRA ckpt rütbesini temsil eden bir tam sayı Lora ağırlıklarını dönüştürmek için gereklidir. Sağlanmazsa dönüştürücü, herhangi bir LoRA ağırlığı olmadığını varsayar. Not: Yalnızca GPU arka ucu, LoRA'yı destekler. Tamsayı
lora_output_tflite_file LoRA ağırlıkları için çıkış tflite dosya adı. YOL

AI Edge modeli dönüştürme

AI Edge üzerinden TFLite modeliyle eşlenmiş bir LLM kullanıyorsanız komut dosyasını kullanarak Görev Paketi oluşturun. Paketleme sürecinde ek meta veriler (ör. Tokenizer Parametreleri) gerekiyor uçtan uca çıkarım yapmak için de kullanılabilir.

Model paketleme işlemi MediaPipe PyPI paketi gerektirir. Dönüşüm komut dosyası, 0.10.14 tarihinden sonraki tüm MediaPipe paketlerinde kullanılabilir.

Bağımlılıkları aşağıdakilerle yükleyip içe aktarı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'in dışa aktarılan TFLite modelinin yolu. YOL
tokenizer_model SentencePiece jeton oluşturucu modelinin yolu. YOL
start_token Modele özel başlangıç jetonu. Başlangıç jetonu sağlayan token oluşturucu modeli. Dize
stop_tokens Modele özel durdurma jetonları. Durdurma jetonları sağlayan token oluşturucu modeli. LİSTE[STRING]
output_filename Çıkış görev paketi dosyasının adı. YOL

Modeli proje dizinine ekleyin

Modeli proje dizininizde depolayın:

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

baseOptions nesnesi modelAssetPath ile modelin yolunu belirtin parametresi:

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

Görevi oluşturma

Görevi hazırlamak için LLM Inference API createFrom...() işlevlerinden birini kullanın bir yöntem de vardır. createFromModelPath() işlevini bir eğitilen model dosyasının göreli veya mutlak yolunu ifade eder. Kod örneğinde createFromOptions() işlevi. Daha fazla bilgi için yapılandırma seçenekleri için Yapılandırma seçenekleri başlıklı makaleye 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. YOL Yok
maxTokens Modelin işlediği maksimum jeton sayısı (giriş jetonları + çıkış jetonları). Tamsayı 512
topK Modelin, oluşturma sürecinin 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 sunulan rastgelelik miktarı. Daha yüksek oluşturulan metinde daha fazla yaratıcılığa yol açar. Ancak, daha düşük sıcaklıklarda üretim daha tahmin edilebilir hale gelir. Kayan 0,8
randomSeed Metin oluşturma sırasında kullanılan rastgele başlangıç noktası. Tamsayı 0
loraRanks LoRA sıralaması, çalışma zamanında LoRA modelleri tarafından kullanılacak. Not: Bu yalnızca GPU modelleriyle uyumludur. Tam sayı dizisi Yok

Verileri hazırlama

LLM Inference API, metin (string) verilerini kabul eder. Görev, veri girişini işler ön işleme dahil edilir.

Tüm ön işlemler, generateResponse() işlevi içinde gerçekleştirilir. Her biri 100'den az gösterim alan giriş metninin ek olarak ö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ırması için bu, giriş metni.

Aşağıdaki kod, görevle işlemin nasıl yürütüleceğini gösterir modeli.

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

Yanıtı akış şeklinde sunmak 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 modelini özelleştirme

Mediapipe LLM çıkarım API'si, Düşük Dereceli Uyarlama'yı (LoRA) destekleyecek şekilde yapılandırılabilir büyük dil modelleri için. Geliştiriciler, ince ayar yapılmış LoRA modellerinden yararlanarak uygun maliyetli bir eğitim süreci ile LLM'lerin davranışını özelleştirmek.

LLM Inference API için LoRA desteği, Gemma-2B ve Phi-2 modellerinde GPU arka ucu (LoRA ağırlıkları yalnızca dikkat katmanları için geçerlidir). Bu ilk uygulama gelecekteki geliştirmeler için deneysel bir API işlevi görür yakında daha fazla model ve çeşitli katman türlerini desteklemeyi planlıyoruz güncellemelerine göz atın.

LoRA modellerini hazırlama

Desteklenen model türleri (Gemma-2B veya Phi-2) ile kendi veri kümenizde hassas ayarlanmış bir LoRA modeli eğitmek için HuggingFace talimatlarını uygulayın. Gemma-2B ve Phi-2 modellerinin her ikisi de HuggingFace'te güvenli tensor biçiminde kullanılabilir. LLM Inference API yalnızca dikkat katmanlarında LoRA'yı desteklediğinden, LoraConfig öğesini aşağıdaki gibi oluştururken yalnızca 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 amacıyla HuggingFace'te LLM Inference API'ye uyan ve herkesin erişebileceği, ince ayar yapılmış 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ümesi üzerinde eğitim alıp modeli kaydettikten sonra, ince ayar yapılmış LoRA modeli 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 Paketi'ni kullanarak model ağırlıklarını bir TensorFlow Lite Flatbuffer'a dönüştürmeniz gerekir. ConversionConfig, temel model seçeneklerini ve ek LoRA seçeneklerini belirtmelidir. API yalnızca GPU ile LoRA çıkarımını desteklediğinden arka ucun 'gpu' olarak ayarlanması gerekir.

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 için olmak üzere iki TFLite sabit arabellek dosyası çıktısı verir diğeri ise LoRA modeli içindir.

LoRA modeli çıkarımı

Web, Android ve iOS LLM Inference API, LoRA model çıkarımını destekleyecek şekilde güncellendi. Web, çalışma zamanı boyunca 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ında dinamik LoRA'yı destekler. Yani kullanıcılar başlatma sırasında kullanılacak LoRA sıralamalarının kullanılacağını ve çalışma sırasında farklı LoRA modellerinin değiştirilebileceğini beyan eder.

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 zamanı 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;
});