راهنمای استنتاج LLM برای وب

رابط برنامه‌نویسی کاربردی استنتاج LLM به شما امکان می‌دهد مدل‌های زبان بزرگ (LLM) را برای برنامه‌های وب به‌طور کامل روی دستگاه اجرا کنید، که می‌توانید از آن‌ها برای انجام طیف وسیعی از وظایف، مانند تولید متن، بازیابی اطلاعات به شکل زبان طبیعی و خلاصه‌سازی اسناد، استفاده کنید. این وظیفه پشتیبانی داخلی برای چندین مدل زبان بزرگ متن به متن را فراهم می‌کند، بنابراین می‌توانید جدیدترین مدل‌های هوش مصنوعی مولد روی دستگاه را در برنامه‌های وب خود اعمال کنید. اگر از جدیدترین مدل‌های Gemma-3n استفاده می‌کنید، ورودی‌های تصویر و صدا نیز پشتیبانی می‌شوند.

برای افزودن سریع LLM Inference API به برنامه وب خود، از راهنمای شروع سریع استفاده کنید. برای مثال اولیه یک برنامه وب که LLM Inference API را اجرا می‌کند، به برنامه نمونه مراجعه کنید. برای درک عمیق‌تر از نحوه عملکرد LLM Inference API، به بخش‌های گزینه‌های پیکربندی ، تبدیل مدل و تنظیم LoRA مراجعه کنید.

شما می‌توانید این وظیفه را در عمل با نسخه آزمایشی MediaPipe Studio مشاهده کنید. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این وظیفه، به نمای کلی مراجعه کنید.

شروع سریع

برای افزودن LLM Inference API به برنامه وب خود، از مراحل زیر استفاده کنید. LLM Inference API به یک مرورگر وب با سازگاری با WebGPU نیاز دارد. برای مشاهده لیست کامل مرورگرهای سازگار، به بخش سازگاری با GPU مرورگر مراجعه کنید.

وابستگی‌ها را اضافه کنید

رابط برنامه‌نویسی کاربردی استنتاج LLM از بسته‌ی @mediapipe/tasks-genai استفاده می‌کند.

بسته‌های مورد نیاز برای مرحله‌بندی محلی را نصب کنید:

npm install @mediapipe/tasks-genai

برای استقرار در سرور، از یک سرویس شبکه تحویل محتوا (CDN) مانند jsDelivr استفاده کنید تا کد را مستقیماً به صفحه HTML خود اضافه کنید:

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

دانلود یک مدل

Gemma-3n E4B یا E2B را از HuggingFace دانلود کنید. مدل‌هایی که در نامشان "-Web" وجود دارد، به‌طور خاص برای استفاده در وب تبدیل شده‌اند، بنابراین اکیداً توصیه می‌شود که همیشه از یکی از این مدل‌ها استفاده کنید.

برای اطلاعات بیشتر در مورد مدل‌های موجود، به مستندات Models مراجعه کنید، یا صفحه انجمن HuggingFace ما را مرور کنید، که چندین نوع دیگر Gemma 3 را ارائه می‌دهد که در مستندات پوشش داده نشده‌اند، اما به‌طور ویژه برای وب تبدیل شده‌اند، مانند 270M ، 4B ، 12B ، 27B و MedGemma-27B-Text .

مدل را در دایرکتوری پروژه خود ذخیره کنید:

<dev-project-root>/assets/gemma-3n-E4B-it-int4-Web.litertlm

مسیر مدل را با پارامتر modelAssetPath از شیء baseOptions مشخص کنید:

baseOptions: { modelAssetPath: `/assets/gemma-3n-E4B-it-int4-Web.litertlm`}

مقداردهی اولیه وظیفه

وظیفه را با گزینه‌های پیکربندی اولیه راه‌اندازی کنید:

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-3n-E4B-it-int4-Web.litertlm'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101
});

اجرای وظیفه

از تابع generateResponse() برای ایجاد استنتاج‌ها استفاده کنید.

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

برای پخش جریانی پاسخ، از موارد زیر استفاده کنید:

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

راهنمایی چندوجهی

برای مدل‌های Gemma-3n، رابط برنامه‌نویسی کاربردی استنتاج LLM از فراخوانی چندوجهی پشتیبانی می‌کند. با فعال بودن چندوجهی، کاربران می‌توانند ترکیبی مرتب از تصاویر، صدا و متن را در فراخوانی‌های خود بگنجانند. سپس LLM یک پاسخ متنی ارائه می‌دهد.

برای شروع، از Gemma-3n E4B یا Gemma-3n E2B ، در قالب سازگار با MediaPipe و وب، استفاده کنید. برای اطلاعات بیشتر، به مستندات Gemma-3n مراجعه کنید.

برای فعال کردن پشتیبانی از بینایی، مطمئن شوید که maxNumImages روی یک مقدار مثبت تنظیم شده است. این حداکثر تعداد قطعات تصویری را که LLM می‌تواند در یک اعلان پردازش کند، تعیین می‌کند.

برای فعال کردن پشتیبانی صوتی، مطمئن شوید که supportAudio روی true تنظیم شده است.

llmInference = await LlmInference.createFromOptions(genai, {
    baseOptions: {
        modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101,
    maxNumImages: 5,
    supportAudio: true,
});

اکنون می‌توان پاسخ‌ها را مانند قبل تولید کرد، اما با استفاده از یک آرایه مرتب از رشته‌ها، تصاویر و داده‌های صوتی:

const response = await llmInference.generateResponse([
  '<start_of_turn>user\n',
  'Describe ',
  {imageSource: '/assets/test_image.png'},
  ' and then transcribe ',
  {audioSource: '/assets/test_audio.wav'},
  '<end_of_turn>\n<start_of_turn>model\n',
]);

برای بینایی، URLهای تصویر و رایج‌ترین اشیاء تصویر، ویدئو یا بوم پشتیبانی می‌شوند. برای صدا، فقط AudioBuffer تک کاناله و URLهای فایل صوتی تک کاناله پشتیبانی می‌شوند. جزئیات بیشتر را می‌توانید با مرور کد منبع بیابید.

نمونه درخواست

برنامه نمونه، نمونه‌ای از یک برنامه تولید متن پایه برای وب است که از API استنتاج LLM استفاده می‌کند. می‌توانید از این برنامه به عنوان نقطه شروع برای برنامه وب خود استفاده کنید یا هنگام تغییر یک برنامه موجود به آن مراجعه کنید. کد نمونه در GitHub میزبانی می‌شود.

مخزن git را با استفاده از دستور زیر کلون کنید:

git clone https://github.com/google-ai-edge/mediapipe-samples

برای اطلاعات بیشتر، به راهنمای راه‌اندازی برای وب مراجعه کنید.

گزینه‌های پیکربندی

برای راه‌اندازی یک برنامه وب از گزینه‌های پیکربندی زیر استفاده کنید:

نام گزینه توضیحات محدوده ارزش مقدار پیش‌فرض
modelPath مسیر جایی که مدل در دایرکتوری پروژه ذخیره می‌شود. مسیر ناموجود
maxTokens حداکثر تعداد توکن‌ها (توکن‌های ورودی + توکن‌های خروجی) که مدل مدیریت می‌کند. عدد صحیح ۵۱۲
topK تعداد توکن‌هایی که مدل در هر مرحله از تولید در نظر می‌گیرد. پیش‌بینی‌ها را به k توکن برتر با بیشترین احتمال تولید محدود می‌کند. عدد صحیح ۴۰
temperature میزان تصادفی بودنِ ایجاد شده در طول تولید. دمای بالاتر منجر به خلاقیت بیشتر در متن تولید شده می‌شود، در حالی که دمای پایین‌تر تولید قابل پیش‌بینی‌تری را ایجاد می‌کند. شناور ۰.۸
randomSeed بذر تصادفی مورد استفاده در طول تولید متن. عدد صحیح 0
loraRanks رتبه‌بندی‌های LoRA که توسط مدل‌های LoRA در زمان اجرا استفاده می‌شوند. توجه: این فقط با مدل‌های GPU سازگار است. آرایه عدد صحیح ناموجود

تبدیل مدل

رابط برنامه‌نویسی کاربردی استنتاج LLM با انواع مدل‌های زیر سازگار است که برخی از آنها نیاز به تبدیل مدل دارند. از جدول برای شناسایی روش مراحل مورد نیاز برای مدل خود استفاده کنید.

مدل‌ها روش تبدیل پلتفرم‌های سازگار نوع فایل
جما-۳ ۱ب تبدیل لازم نیست اندروید، وب .وظیفه
Gemma 2B، Gemma 7B، Gemma-2 2B تبدیل لازم نیست اندروید، آی‌او‌اس، وب .bin
فی-۲، استیبل ال‌ام، فالکون اسکریپت تبدیل MediaPipe اندروید، آی‌او‌اس، وب .bin
تمام مدل‌های PyTorch LLM کتابخانه مولد LiteRT Torch اندروید، آی‌او‌اس .وظیفه

برای یادگیری نحوه تبدیل مدل‌های دیگر، به بخش تبدیل مدل مراجعه کنید.

سفارشی‌سازی LoRA

رابط برنامه‌نویسی کاربردی استنتاج LLM از تنظیم LoRA (انطباق با رتبه پایین) با استفاده از کتابخانه PEFT (تنظیم دقیق پارامتر-کارآمد) پشتیبانی می‌کند. تنظیم LoRA رفتار LLMها را از طریق یک فرآیند آموزش مقرون‌به‌صرفه سفارشی می‌کند و به جای آموزش مجدد کل مدل، مجموعه کوچکی از وزن‌های قابل آموزش را بر اساس داده‌های آموزشی جدید ایجاد می‌کند.

رابط برنامه‌نویسی کاربردی استنتاج LLM از افزودن وزن‌های LoRA به لایه‌های توجه مدل‌های Gemma-2 2B ، Gemma 2B و Phi-2 پشتیبانی می‌کند. مدل را با فرمت safetensors دانلود کنید.

مدل پایه باید در قالب safetensors باشد تا بتوان وزن‌های LoRA را ایجاد کرد. پس از آموزش LoRA، می‌توانید مدل‌ها را به قالب FlatBuffers تبدیل کنید تا روی MediaPipe اجرا شوند.

وزن‌های LoRA را آماده کنید

از راهنمای روش‌های LoRA از PEFT برای آموزش یک مدل LoRA تنظیم‌شده روی مجموعه داده خودتان استفاده کنید.

API استنتاج LLM فقط از LoRA در لایه‌های توجه پشتیبانی می‌کند، بنابراین فقط لایه‌های توجه را در LoraConfig مشخص کنید:

# 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"],
)

پس از آموزش روی مجموعه داده آماده شده و ذخیره مدل، وزن‌های مدل LoRA که به دقت تنظیم شده‌اند در adapter_model.safetensors موجود هستند. فایل safetensors نقطه بررسی LoRA است که در طول تبدیل مدل استفاده می‌شود.

تبدیل مدل

از بسته پایتون MediaPipe برای تبدیل وزن‌های مدل به فرمت Flatbuffer استفاده کنید. ConversionConfig گزینه‌های مدل پایه را به همراه گزینه‌های اضافی LoRA مشخص می‌کند.

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_FILE,
)

converter.convert_checkpoint(config)

مبدل دو فایل سازگار با MediaPipe تولید می‌کند، یکی برای مدل پایه و دیگری برای مدل LoRA.

استنتاج مدل LoRA

وب در زمان اجرا از LoRA پویا پشتیبانی می‌کند، به این معنی که کاربران رتبه‌های LoRA را در زمان مقداردهی اولیه اعلام می‌کنند. این بدان معناست که می‌توانید مدل‌های مختلف LoRA را در زمان اجرا تغییر دهید.

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]
});

مدل‌های LoRA را در زمان اجرا، پس از مقداردهی اولیه مدل پایه، بارگذاری کنید. مدل LoRA را با ارسال مرجع مدل هنگام تولید پاسخ LLM، فعال کنید.

// 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;
});