استقرار مدلهای زبانی بزرگ (LLMs) در دستگاههای لبهای مجموعهای منحصربهفرد از چالشهای مهندسی را به همراه دارد. در حالی که GPUها قدرت پردازش موازی عظیمی ارائه میدهند، اما اغلب مصرف انرژی بالایی دارند، گرانقیمت هستند یا در دروازههای اینترنت اشیاء (IoT)، تلفنهای همراه و سیستمهای تعبیهشده بهطور فیزیکی موجود نیستند. برای توسعهدهندگانی که هدفشان اجرای عاملهای هوشمند بر روی معماریهای فقط CPU است، عملکرد خام مدلهای نقطه شناور ۳۲ بیتی یا ۱۶ بیتی استاندارد بهطور قطع ناکافی است.
راهحل در یک رویکرد دوگانه نهفته است: کمدقتسازی مدل برای کاهش ردپای حافظه و سربار محاسباتی، و تقطیر دانش برای فشردهسازی قابلیتهای استدلال در معماریهای کوچکتر و کارآمدتر. این مقاله بررسی میکند که چگونه میتوان این تکنیکها را ترکیب کرد تا استنتاج با تأخیر کم بر روی سختافزارهای محدود از نظر منابع به دست آید.
مورد استفاده از کمدقتسازی در CPU
کمدقتسازی (Quantization) شامل نمایش اعداد با دقت کمتر است. در حالی که مدلهای LLM مدرن معمولاً از FP32 (نقطه شناور ۳۲ بیتی) یا FP16 (نقطه شناور ۱۶ بیتی) استفاده میکنند، کمدقتسازی به INT8 (عدد صحیح ۸ بیتی) یا حتی INT4 میتواند اندازه مدل را به ترتیب ۴ برابر یا ۸ برابر کاهش دهد. در پردازندههای مرکزی (CPU) که در عملیات حساب صحیح تخصص دارند، این کار نه تنها صرفهجویی در حافظه ایجاد میکند، بلکه به عنوان یک ضریب عملکرد عمل میکند.
موتورهای استنتاج مدرن مانند ONNX Runtime و llama.cpp هستههای بهینهشدهای برای استنتاج INT8/INT4 دارند. با کاهش نوع داده، استفاده از پهنای باند بین حافظه پنهان (Cache) CPU و هستهها را به حداقل میرساند که این امر منجر به افزایش قابل توجهی در بازده (Throughput) به ازای هر وات میشود.
تقطیر دانش: یادگیری از غولها
کمدقتسازی به تنهایی ممکن است کافی نباشد اگر مدل اصلی بیش از حد بزرگ یا کند باشد. تقطیر دانش به ما امکان میدهد یک مدل کوچکتر "دانشجو" را آموزش دهیم تا رفتار یک مدل بزرگتر "معلم" را تقلید کند. دانشجو نه تنها از برچسبهای سخت (پاسخ صحیح) بلکه از "دانش تاریک" موجود در احتمالات نرمافزار (Softmax) معلم نیز یاد میگیرد.
این امر برای استقرار در لبه حیاتی است، زیرا یک مدل تقطیر شده اغلب میتواند با مدلی دارای ۷ میلیارد پارامتر برابری کند، در حالی که روی بودجه سختافزاری مناسب برای یک مدل ۷۰۰ میلیون پارامتری اجرا میشود. وقتی با کمدقتسازی ترکیب شود، نتیجه یک مدل بسیار کارآمد است که به راحتی در RAM محدود جا میشود.
پیادهسازی خط لوله
بیایید به یک جریان کاری عملی با استفاده از کتابخانه Hugging Face `transformers` نگاهی بیندازیم. ما یک راهاندازی ساده تقطیر را به همراه یادداشتی در مورد پیادهسازی کمدقتسازی نشان خواهیم داد.
گام ۱: راهاندازی حلقه تقطیر
from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments
import torch
# بارگذاری یک مدل معلم بزرگ
teacher_model = AutoModelForCausalLM.from_pretrained("facebook/opt-1.3b")
teacher_model.eval()
# بارگذاری یک مدل دانشجو کوچکتر
student_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-125m")
# تعریف یک تابع تلف ساده برای تقطیر
def distillation_loss(student_logits, teacher_logits, temperature=2.0):
teacher_probs = torch.softmax(teacher_logits / temperature, dim=-1)
student_probs = torch.log_softmax(student_logits / temperature, dim=-1)
return torch.nn.functional.kl_div(student_probs, teacher_probs, reduction='batchmean') * (temperature ** 2)
# در طول آموزش، مدل معلم را یخ بزنید و مدل دانشجو را بهروزرسانی کنید
# نکته: در عمل، برای سهولت از ماژول 'distillation' هگزینگفیس استفاده کنید
گام ۲: کمدقتسازی پس از آموزش
پس از تقطیر، مدل را به فرمت ONNX صادر کرده و کمدقتسازی پویا یا ایستا را اعمال کنید. ONNX Runtime از کمدقتسازی پویا برای CPUها بهطور مؤثر پشتیبانی میکند که ماتریسهای وزن را در زمان اجرا به INT8 کمدقت میکند، بدون اینکه نیاز به آموزش مجدد باشد.
import onnxruntime as ort
from onnxruntime.quantization import quantize_dynamic, QuantType
# کمدقتسازی مدل ONNX تقطیر شده
quantize_dynamic(
"model.onnx",
"model_quantized.onnx",
weight_type=QuantType.QUInt8
)
# بارگذاری و اجرای استنتاج
session = ort.InferenceSession("model_quantized.onnx")
نتیجهگیری
استقرار LLMها در دستگاههای لبهای فقط با CPU دیگر یک مفهوم آیندهنگرانه نیست؛ بلکه یک ضرورت روزآمد برای هوش مصنوعی مقیاسپذیر، خصوصی و با تأخیر کم است. با بهرهگیری از کمدقتسازی برای بهینهسازی کارایی محاسباتی و تقطیر دانش برای فشردهسازی ظرفیت مدل، توسعهدهندگان میتوانند شکاف بین مدلهای قدرتمند مبتنی بر ابر و محدودیتهای سختافزار لبه را پر کنند. با پیشرفت شتابدهندههای سختافزاری و کتابخانههای نرمافزاری، مرز بین قابلیتهای "لبه" و "ابر" تنها تیرهتر خواهد شد و این تکنیکهای بهینهسازی را به مهارتهای ضروری برای مهندس هوش مصنوعی مدرن تبدیل میکند.