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

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

امتحانش کن!

این وظیفه پشتیبانی داخلی برای انواع LLMها را فراهم می‌کند. مدل‌های میزبانی شده در صفحه انجمن LiteRT با فرمت سازگار با MediaPipe در دسترس هستند و نیازی به هیچ مرحله تبدیل یا کامپایل اضافی ندارند.

شما می‌توانید از LiteRT Torch برای خروجی گرفتن از مدل‌های PyTorch به مدل‌های چند امضایی LiteRT ( tflite ) استفاده کنید که با پارامترهای توکن‌ساز برای ایجاد Task Bundles همراه هستند. مدل‌های تبدیل‌شده با LiteRT Torch با LLM Inference API سازگار هستند و می‌توانند روی CPU backend اجرا شوند و این آنها را برای برنامه‌های اندروید و iOS مناسب می‌کند.

شروع کنید

با دنبال کردن یکی از این راهنماهای پیاده‌سازی برای پلتفرم مورد نظر خود، استفاده از این وظیفه را شروع کنید. این راهنماهای مختص پلتفرم، شما را در پیاده‌سازی اولیه این وظیفه، با مثال‌های کدی که از یک مدل موجود و گزینه‌های پیکربندی پیشنهادی استفاده می‌کنند، راهنمایی می‌کنند:

جزئیات وظیفه

این بخش قابلیت‌ها، ورودی‌ها، خروجی‌ها و گزینه‌های پیکربندی این وظیفه را شرح می‌دهد.

ویژگی‌ها

API استنتاج LLM شامل ویژگی‌های کلیدی زیر است:

  1. تولید متن به متن - متن را بر اساس یک متن ورودی تولید کنید.
  2. انتخاب LLM - چندین مدل را برای سفارشی‌سازی برنامه برای موارد استفاده خاص خود اعمال کنید. همچنین می‌توانید وزن‌های سفارشی را دوباره آموزش داده و به مدل اعمال کنید.
  3. پشتیبانی از LoRA - قابلیت LLM را با مدل LoRA گسترش داده و سفارشی کنید، یا با آموزش روی تمام مجموعه داده‌های خود، یا با استفاده از مدل‌های LoRA از پیش ساخته شده از جامعه متن باز (با مدل‌های تبدیل شده با LiteRT Torch Generative API سازگار نیست).
ورودی‌های وظیفه خروجی‌های وظیفه
رابط برنامه‌نویسی کاربردی استنتاج LLM ورودی‌های زیر را می‌پذیرد:
  • متن درخواست (مثلاً یک سوال، موضوع ایمیل، سندی که باید خلاصه شود)
رابط برنامه‌نویسی کاربردی استنتاج LLM نتایج زیر را ارائه می‌دهد:
  • متن تولید شده بر اساس ورودی (مثلاً پاسخ به سوال، پیش‌نویس ایمیل، خلاصه‌ای از سند)

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

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

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

مدل‌ها

رابط برنامه‌نویسی کاربردی استنتاج LLM از بسیاری از مدل‌های زبان بزرگ متن به متن، از جمله پشتیبانی داخلی برای چندین مدل که برای اجرا در مرورگرها و دستگاه‌های تلفن همراه بهینه شده‌اند، پشتیبانی می‌کند. این مدل‌های سبک وزن می‌توانند برای اجرای استنتاج‌ها به طور کامل روی دستگاه استفاده شوند.

قبل از مقداردهی اولیه API استنتاج LLM، یک مدل را دانلود کرده و فایل را در دایرکتوری پروژه خود ذخیره کنید. می‌توانید از یک مدل از پیش تبدیل شده از مخزن LiteRT Community HuggingFace استفاده کنید، یا یک مدل را با استفاده از مبدل مولد AI Edge Torch به فرمت سازگار با MediaPipe تبدیل کنید.

اگر از قبل LLM برای استفاده با LLM Inference API ندارید، با یکی از مدل‌های زیر شروع کنید.

جما-۳ان

مدل‌های Gemma-3n E2B و E4B جدیدترین مدل‌های خانواده Gemma هستند که از مدل‌های سبک و پیشرفته باز ساخته شده‌اند و از همان تحقیقات و فناوری مورد استفاده برای ایجاد مدل‌های Gemini ساخته شده‌اند. مدل‌های Gemma 3n برای اجرای کارآمد در دستگاه‌های کم مصرف طراحی شده‌اند. آن‌ها قادر به ورودی چندوجهی، مدیریت ورودی متن، تصویر و صدا و تولید خروجی‌های متنی هستند.

مدل‌های Gemma 3n از فناوری فعال‌سازی انتخابی پارامترها برای کاهش نیاز به منابع استفاده می‌کنند. این تکنیک به مدل‌ها اجازه می‌دهد تا با اندازه مؤثر پارامترهای 2B و 4B کار کنند، که کمتر از تعداد کل پارامترهای موجود در آنهاست.

دانلود Gemma-3n E2B

دانلود Gemma-3n E4B

مدل‌های Gemma-3n E2B و E4B از HuggingFace با فرمت .litertlm موجود هستند و آماده استفاده با LLM Inference API برای اندروید و وب می‌باشند.

جما-۳ ۱ب

Gemma-3 1B سبک‌ترین مدل در خانواده‌ی مدل‌های سبک و پیشرفته‌ی Gemma است که با استفاده از همان تحقیقات و فناوری مورد استفاده در ساخت مدل‌های Gemini ساخته شده است. این مدل شامل پارامترهای 1B و وزن‌های آزاد است.

دانلود جما-۳ ۱بی

مدل Gemma-3 1B از HuggingFace با فرمت .task / .litertlm موجود است و آماده استفاده با LLM Inference API برای برنامه‌های اندروید و وب است.

هنگام اجرای Gemma-3 1B با LLM Inference API، گزینه‌های زیر را به ترتیب پیکربندی کنید:

  • preferredBackend : از این گزینه برای انتخاب بین CPU یا GPU backend استفاده کنید. این گزینه فقط برای اندروید در دسترس است.
  • supportedLoraRanks : رابط برنامه‌نویسی کاربردی استنتاج LLM نمی‌تواند برای پشتیبانی از انطباق رتبه پایین (LoRA) با مدل Gemma-3 1B پیکربندی شود. از گزینه‌های supportedLoraRanks یا loraRanks استفاده نکنید.
  • maxTokens : مقدار maxTokens باید با اندازه context ساخته شده در مدل مطابقت داشته باشد. این را می‌توان به عنوان حافظه پنهان Key-Value (KV) یا طول context نیز نامید.
  • numResponses : همیشه باید ۱ باشد. این گزینه فقط برای وب در دسترس است.

هنگام اجرای Gemma-3 1B در برنامه‌های وب، مقداردهی اولیه می‌تواند باعث ایجاد یک بلوک طولانی در نخ فعلی شود. در صورت امکان، همیشه مدل را از یک نخ کارگر اجرا کنید.

جما-۲ ۲بی

Gemma-2 2B نوع 2B از Gemma-2 است و روی همه پلتفرم‌ها کار می‌کند.

دانلود جما-۲ ۲بی

این مدل شامل پارامترهای 2B و وزن‌های باز است. Gemma-2 2B به خاطر مهارت‌های استدلال پیشرفته برای مدل‌های کلاس خود شناخته شده است.

تبدیل مدل در پای‌تورچ

مدل‌های مولد PyTorch را می‌توان با استفاده از API مولد LiteRT Torch به فرمتی سازگار با MediaPipe تبدیل کرد. می‌توانید از این API برای تبدیل مدل‌های PyTorch به مدل‌های چند امضایی LiteRT (TensorFlow Lite) استفاده کنید. برای جزئیات بیشتر در مورد نگاشت و خروجی گرفتن از مدل‌ها، به صفحه GitHub LiteRT Torch مراجعه کنید.

تبدیل یک مدل PyTorch با استفاده از LiteRT Torch Generative API شامل مراحل زیر است:

  1. چک‌پوینت‌های مدل PyTorch را دانلود کنید.
  2. از API مولد LiteRT Torch برای نوشتن، تبدیل و کوانتیزه کردن مدل به فرمت فایل سازگار با MediaPipe ( .tflite ) استفاده کنید.
  3. یک Task Bundle ( .task / .litertlm ) از فایل tflite و توکن‌ساز مدل ایجاد کنید.

مبدل Torch Generative فقط برای CPU تبدیل می‌کند و به یک دستگاه لینوکس با حداقل ۶۴ گیگابایت رم نیاز دارد.

برای ایجاد یک Task Bundle، از اسکریپت bundling برای ایجاد یک Task Bundle استفاده کنید. فرآیند bundling، مدل نگاشت شده را با ابرداده‌های اضافی (مثلاً پارامترهای Tokenizer) که برای اجرای استنتاج سرتاسری مورد نیاز است، بسته‌بندی می‌کند.

فرآیند بسته‌بندی مدل به بسته MediaPipe PyPI نیاز دارد. اسکریپت تبدیل در تمام بسته‌های MediaPipe پس از 0.10.14 موجود است.

وابستگی‌ها را با دستور زیر نصب و وارد کنید:

$ python3 -m pip install mediapipe

از کتابخانه genai.bundler برای بسته‌بندی مدل استفاده کنید:

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)
پارامتر توضیحات مقادیر پذیرفته شده
tflite_model مسیر منتهی به مدل TFLite صادر شده توسط AI Edge. مسیر
tokenizer_model مسیر رسیدن به مدل توکن‌ساز SentencePiece. مسیر
start_token توکن شروع مخصوص مدل. توکن شروع باید در مدل توکن‌ساز ارائه شده موجود باشد. رشته
stop_tokens توکن‌های توقف مخصوص مدل. توکن‌های توقف باید در مدل توکن‌ساز ارائه شده وجود داشته باشند. لیست [رشته]
output_filename نام فایل بسته وظیفه خروجی. مسیر

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

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

پشتیبانی LoRA از API استنتاج LLM برای همه انواع Gemma و مدل‌های Phi-2 برای backend پردازنده گرافیکی (GPU) کار می‌کند، و وزن‌های LoRA فقط برای لایه‌های توجه قابل اعمال هستند. این پیاده‌سازی اولیه به عنوان یک API آزمایشی برای توسعه‌های آینده عمل می‌کند و برنامه‌هایی برای پشتیبانی از مدل‌ها و انواع مختلف لایه‌ها در به‌روزرسانی‌های آینده وجود دارد.

آماده‌سازی مدل‌های LoRA

دستورالعمل‌های HuggingFace را برای آموزش یک مدل LoRA تنظیم‌شده روی مجموعه داده خودتان با انواع مدل‌های پشتیبانی‌شده، Gemma یا Phi-2، دنبال کنید. مدل‌های Gemma-2 2B ، Gemma 2B و Phi-2 هر دو در HuggingFace با فرمت safetensors در دسترس هستند. از آنجایی که LLM Inference API فقط از 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 تنظیم‌شده و در دسترس عموم وجود دارند که با LLM Inference API که در HuggingFace موجود است، سازگار هستند. برای مثال، monsterapi/gemma-2b-lora-maths-orca-200k برای Gemma-2B و lole25/phi-2-sft-ultrachat-lora برای Phi-2.

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

در مرحله بعدی، باید وزن‌های مدل را با استفاده از بسته پایتون MediaPipe به یک TensorFlow Lite Flatbuffer تبدیل کنید. ConversionConfig باید گزینه‌های مدل پایه و همچنین گزینه‌های اضافی LoRA را مشخص کند. توجه داشته باشید که از آنجایی که API فقط از استنتاج LoRA با GPU پشتیبانی می‌کند، backend باید روی 'gpu' تنظیم شود.

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)

مبدل دو فایل بافر تخت TFLite را خروجی می‌دهد، یکی برای مدل پایه و دیگری برای مدل LoRA.

استنتاج مدل LoRA

رابط برنامه‌نویسی کاربردی استنتاج LLM وب، اندروید و iOS برای پشتیبانی از استنتاج مدل LoRA به‌روزرسانی شده‌اند.

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

// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
        .setModelPath('<path to base model>')
        .setMaxTokens(1000)
        .setTopK(40)
        .setTemperature(0.8)
        .setRandomSeed(101)
        .setLoraPath('<path to LoRA model>')
        .build()

// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)

برای اجرای استنتاج LLM با LoRA، از همان متدهای generateResponse() یا generateResponseAsync() مدل پایه استفاده کنید.