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

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

آن را امتحان کنید!

این وظیفه از Gemma 2B و 7B، بخشی از خانواده مدل‌های باز سبک وزن و پیشرفته که از همان تحقیقات و فناوری استفاده شده برای ایجاد مدل‌های Gemini ساخته شده‌اند، پشتیبانی می‌کند. همچنین از مدل های خارجی زیر پشتیبانی می کند: Phi-2 ، Falcon-RW-1B و StableLM-3B .

علاوه بر مدل‌هایی که به صورت بومی پشتیبانی می‌شوند، کاربران می‌توانند مدل‌های دیگر را با استفاده از پیشنهادات AI Edge Google (از جمله نقشه‌برداری از مدل‌های PyTorch ) نقشه‌برداری کنند. این به کاربران امکان می‌دهد یک مدل نقشه‌برداری شده را به مدل‌های چند امضایی TensorFlow Lite صادر کنند، که با پارامترهای توکنایزر برای ایجاد یک Task Bundle همراه هستند.

شروع کنید

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

جزئیات کار

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

امکانات

LLM Inference API دارای ویژگی های کلیدی زیر است:

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

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

این کار دارای گزینه های پیکربندی زیر است:

نام گزینه شرح محدوده ارزش مقدار پیش فرض
modelPath مسیری که مدل در دایرکتوری پروژه ذخیره می شود. مسیر N/A
maxTokens حداکثر تعداد نشانه‌ها (توکن‌های ورودی + نشانه‌های خروجی) که مدل کنترل می‌کند. عدد صحیح 512
topK تعداد نشانه هایی که مدل در هر مرحله از تولید در نظر می گیرد. پیش‌بینی‌ها را به k توکن‌های محتمل‌تر محدود می‌کند. هنگام تنظیم topK ، باید یک مقدار برای randomSeed نیز تعیین کنید. عدد صحیح 40
temperature مقدار تصادفی معرفی شده در طول تولید. دمای بالاتر منجر به خلاقیت بیشتر در متن تولید شده می شود، در حالی که دمای پایین تر تولید قابل پیش بینی بیشتری را تولید می کند. هنگام تنظیم temperature ، باید مقداری برای randomSeed نیز تعیین کنید. شناور 0.8
randomSeed دانه تصادفی مورد استفاده در تولید متن. عدد صحیح 0
loraPath مسیر مطلق به مدل LoRA به صورت محلی در دستگاه. توجه: این فقط با مدل های GPU سازگار است. مسیر N/A
resultListener شنونده نتیجه را طوری تنظیم می کند که نتایج را به صورت ناهمزمان دریافت کند. فقط هنگام استفاده از روش تولید غیر همگام قابل استفاده است. N/A N/A
errorListener یک شنونده خطای اختیاری را تنظیم می کند. N/A N/A

مدل ها

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

قبل از مقداردهی اولیه API استنتاج LLM، یکی از مدل های پشتیبانی شده را دانلود کرده و فایل را در دایرکتوری پروژه خود ذخیره کنید.

جما 2B

Gemma 2B بخشی از خانواده مدل های باز سبک وزن و پیشرفته است که از همان تحقیقات و فناوری استفاده شده برای ساخت مدل های Gemini ساخته شده است. مدل شامل 2B پارامتر و وزن باز است. این مدل برای انواع وظایف تولید متن، از جمله پاسخ به سؤال، خلاصه‌سازی و استدلال مناسب است.

Gemma 2B را دانلود کنید

مدل های Gemma 2B در چهار نوع عرضه می شوند:

همچنین می‌توانید مدل را تنظیم کنید و وزن‌های جدیدی را قبل از اضافه کردن آن به برنامه اضافه کنید. برای اطلاعات بیشتر در مورد تنظیم و سفارشی کردن Gemma، به تنظیم Gemma مراجعه کنید. پس از دانلود Gemma از Kaggle Models ، مدل از قبل در قالب مناسب برای استفاده با MediaPipe است.

اگر Gemma 2B را از Hugging Face دانلود می کنید، باید مدل را به یک قالب مناسب MediaPipe تبدیل کنید . LLM Inference API نیاز به دانلود و تبدیل فایل های زیر دارد:

  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors
  • tokenizer.json
  • tokenizer_config.json

جما 7B

Gemma 7B یک مدل جما بزرگتر با پارامترهای 7B و وزن باز است. این مدل برای انواع وظایف تولید متن، از جمله پاسخ به سؤال، خلاصه‌سازی و استدلال قدرتمندتر است. Gemma 7B فقط در وب پشتیبانی می شود.

Gemma 7B را دانلود کنید

مدل Gemma 7B در یک نوع عرضه می شود:

اگر Gemma 7B را از Hugging Face دانلود می‌کنید، باید مدل را به یک قالب مناسب MediaPipe تبدیل کنید . LLM Inference API نیاز به دانلود و تبدیل فایل های زیر دارد:

  • model-00001-of-00004.safetensors
  • model-00002-of-00004.safetensors
  • model-00003-of-00004.safetensors
  • model-00004-of-00004.safetensors
  • tokenizer.json
  • tokenizer_config.json

فالکون 1 بی

Falcon-1B یک مدل 1 میلیارد پارامتری فقط رمزگشای علی است که بر روی 350B توکن RefinedWeb آموزش داده شده است.

Falcon 1B را دانلود کنید

API LLM Inference به فایل‌های زیر نیاز دارد که به صورت محلی دانلود و ذخیره شوند:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

پس از دانلود فایل های مدل فالکون، مدل آماده تبدیل به فرمت MediaPipe می باشد. مراحل تبدیل مدل به فرمت MediaPipe را دنبال کنید.

StableLM 3B

StableLM-3B یک مدل زبان فقط رمزگشای 3 میلیارد پارامتری است که بر روی 1 تریلیون توکن از مجموعه داده‌های انگلیسی متنوع و کد برای 4 دوره از قبل آموزش داده شده است.

StableLM 3B را دانلود کنید

API LLM Inference به فایل‌های زیر نیاز دارد که به صورت محلی دانلود و ذخیره شوند:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

پس از دانلود فایل های مدل StableLM، مدل آماده تبدیل به فرمت MediaPipe است. مراحل تبدیل مدل به فرمت MediaPipe را دنبال کنید.

فی-2

Phi-2 یک مدل ترانسفورماتور 2.7 میلیارد پارامتری است. با استفاده از متون مصنوعی مختلف NLP و وب سایت های فیلتر شده آموزش داده شد. این مدل برای درخواست هایی که از فرمت پرسش-پاسخ، چت و کد استفاده می کنند، مناسب تر است.

Phi-2 را دانلود کنید

API LLM Inference به فایل‌های زیر نیاز دارد که به صورت محلی دانلود و ذخیره شوند:

  • tokenizer.json
  • tokenizer_config.json
  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors

پس از دانلود فایل های مدل Phi-2، مدل آماده تبدیل به فرمت MediaPipe است. مراحل تبدیل مدل به فرمت MediaPipe را دنبال کنید.

مدل های صادراتی AI Edge

AI Edge یک پیشنهاد گوگل است که به شما امکان می دهد مدل های نقشه برداری شده توسط کاربر را به مدل های TensorFlow Lite با امضای چندگانه تبدیل کنید. برای جزئیات بیشتر در مورد نقشه برداری و صادرات مدل ها، از صفحه AI Edge Torch GitHub دیدن کنید.

پس از صادرات مدل به فرمت TFLite، مدل آماده تبدیل به فرمت MediaPipe است. برای اطلاعات بیشتر، تبدیل مدل به فرمت MediaPipe را ببینید.

تبدیل مدل به فرمت MediaPipe

تبدیل مدل بومی

اگر از LLM خارجی (Phi-2، Falcon، یا StableLM) یا نسخه غیر Kaggle Gemma استفاده می‌کنید، از اسکریپت‌های تبدیل ما برای قالب‌بندی مدل برای سازگاری با MediaPipe استفاده کنید.

فرآیند تبدیل مدل به بسته MediaPipe PyPI نیاز دارد. اسکریپت تبدیل در تمام بسته های MediaPipe بعد از 0.10.11 در دسترس است.

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

$ python3 -m pip install mediapipe

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

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، 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.

پارامتر شرح ارزش های پذیرفته شده
input_ckpt مسیر فایل model.safetensors یا pytorch.bin . توجه داشته باشید که گاهی اوقات قالب مدل safetensors به ​​چندین فایل تقسیم می شود، به عنوان مثال model-00001-of-00003.safetensors ، model-00001-of-00003.safetensors . می توانید یک الگوی فایل مانند model*.safetensors را مشخص کنید. مسیر
ckpt_format فرمت فایل مدل {"Safetensors"، "pytorch"}
model_type LLM در حال تبدیل است. {"PHI_2"، "FALCON_RW_1B"، "STABLELM_4E1T_3B"، "GEMMA_2B"}
backend پردازنده (Delegate) مورد استفاده برای اجرای مدل. {"cpu"، "gpu"}
output_dir مسیر دایرکتوری خروجی که میزبان فایل های وزن هر لایه است. مسیر
output_tflite_file مسیر فایل خروجی به عنوان مثال، "model_cpu.bin" یا "model_gpu.bin". این فایل فقط با LLM Inference API سازگار است و نمی‌تواند به عنوان یک فایل «tflite» عمومی استفاده شود. مسیر
vocab_model_file مسیر دایرکتوری که فایل‌های tokenizer.json و tokenizer_config.json را ذخیره می‌کند. برای Gemma، به فایل single tokenizer.model اشاره کنید. مسیر
lora_ckpt مسیر فایل LoRA ckpt of safetensors که وزن آداپتور LoRA را ذخیره می کند. مسیر
lora_rank یک عدد صحیح نشان دهنده رتبه LoRA ckpt. برای تبدیل وزنه های لور مورد نیاز است. اگر ارائه نشده باشد، مبدل فرض می کند که وزن LoRA وجود ندارد. توجه: فقط باطن GPU از LoRA پشتیبانی می کند. عدد صحیح
lora_output_tflite_file خروجی نام فایل tflite برای وزن های LoRA. مسیر

تبدیل مدل AI Edge

اگر از LLM نگاشت شده به مدل TFLite از طریق AI Edge استفاده می‌کنید، از اسکریپت بسته‌بندی ما برای ایجاد Task Bundle استفاده کنید. فرآیند بسته‌بندی، مدل نگاشت‌شده را با ابرداده‌های اضافی (مثلاً پارامترهای 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 نشانه شروع خاص مدل توکن شروع باید در مدل توکنایزر ارائه شده وجود داشته باشد. STRING
stop_tokens نشانه های توقف خاص را مدل کنید. توکن های توقف باید در مدل توکنایزر ارائه شده وجود داشته باشد. LIST[STRING]
output_filename نام فایل بسته کار خروجی. مسیر

سفارشی سازی LoRA

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

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

مدل های LoRA را آماده کنید

دستورالعمل‌های HuggingFace را دنبال کنید تا یک مدل LoRA تنظیم‌شده را روی مجموعه داده خود با انواع مدل‌های پشتیبانی‌شده، Gemma-2B یا Phi-2 آموزش دهید. مدل‌های Gemma-2B و Phi-2 هر دو در HuggingFace در قالب محافظ‌های ایمنی موجود هستند. از آنجایی که LLM Inference API فقط از LoRA در لایه های توجه پشتیبانی می کند، در حین ایجاد LoraConfig فقط لایه های توجه را به صورت زیر مشخص کنید:

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

برای آزمایش، مدل‌های 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 Python به یک Flatbuffer Flatbuffer TensorFlow Lite تبدیل کنید. 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

Web، Android و iOS LLM Inference API برای پشتیبانی از استنتاج مدل LoRA به روز شده است. وب از LoRA پویا پشتیبانی می کند، که می تواند مدل های مختلف LoRA را در طول زمان اجرا تغییر دهد. اندروید و iOS از LoRA استاتیک پشتیبانی می‌کنند که از وزن‌های LoRA یکسان در طول عمر کار استفاده می‌کند.

Android از 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() به عنوان مدل پایه استفاده کنید.