Open Models

تنظیم دقیق و استقرار محلی Mistral NeMo 12B

Mistral NeMo 12B به عنوان یک قدرت عظیم در فضای مدل‌های زبانی بزرگ (LLM) با وزن‌های باز ظاهر شده است. با ۱۲ میلیارد پارامتر و پنجره زمینه بالا، این مدل تعادلی جذاب بین عملکرد و کارایی منابع برای توسعه محلی ارائه می‌دهد. این راهنما شما را در فرآیند تنظیم دقیق و استقرار این مدل روی سخت‌افزار محلی خود همراهی می‌کند تا بیشترین بهره را از پیکربندی خود ببرید.

درک معماری

Mistral NeMo از یک معماری ترنسفورمر استاندارد با چاهک‌های توجه (attention sinks) و توجه پنجره‌ای لغزنده (sliding window attention) برای مدیریت پنجره زمینه بزرگ خود استفاده می‌کند. این طراحی امکان استنتاج کارآمد روی سخت‌افزارهای مصرفی را در صورت کم‌فشارسازی (quantization) فراهم می‌کند. برای توسعه محلی، معمولاً با نسخه‌های کم‌فشارسازی شده ۴ بیتی یا ۸ بیتی کار می‌کنید تا مصرف حافظه قابل مدیریت باقی بماند.

آماده‌سازی محیط شما

قبل از ورود به تنظیم دقیق، اطمینان حاصل کنید که محیط پایتون شما به درستی پیکربندی شده است. شما به کتابخانه‌های `transformers`، `peft` و `accelerate` نیاز دارید. در اینجا یک اسکریپت پیکربندی پایه آورده شده است:


pip install torch transformers peft accelerate bitsandbytes

بررسی اینکه کارت گرافیک (GPU) شما از قابلیت محاسباتی مورد نیاز پشتیبانی می‌کند، حیاتی است. Mistral NeMo از استفاده از کتابخانه BNB (Bits and Bytes) برای کم‌فشارسازی ۴ بیتی به طور قابل توجهی بهره می‌برد، که نیازمندی‌های حافظه VRAM را به شدت کاهش می‌دهد.

تنظیم دقیق گام‌به‌گام با LoRA

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

در اینجا یک قطعه کد پایتون برای بارگذاری مدل با کم‌فشارسازی ۴ بیتی و آماده‌سازی آن برای LoRA آورده شده است:


from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16
)

model = AutoModelForCausalLM.from_pretrained(
    "mistralai/Mistral-Nemo-12B-Base",
    quantization_config=bnb_config,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-Nemo-12B-Base")

model = prepare_model_for_kbit_training(model)
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)

پس از پیکربندی، می‌توانید با استفاده از API آموزش‌دهنده Hugging Face وارد حلقه آموزش خود شوید. اطمینان حاصل کنید که مجموعه داده شما با قالب‌های چت صحیح فرمت شده است تا با ساختار ورودی مورد انتظار مدل مطابقت داشته باشد.

استقرار با vLLM

برای ارائه مدل، `vLLM` به دلیل پهنای باند بالا و تأخیر کم، انتخاب عالی است. این ابزار از دسته‌بندی پیوسته (continuous batching) پشتیبانی می‌کند که برای مدیریت درخواست‌های همزمان متعدد در یک محیط توسعه محلی ضروری است.


from vllm import LLM, SamplingParams

# Load the model and your fine-tuned LoRA weights
llm = LLM(model="mistralai/Mistral-Nemo-12B-Base",
          lora_modules={"my_lora": "./path/to/lora_weights"},
          quantization="bitsandbytes")

sampling_params = SamplingParams(temperature=0.7, max_tokens=128)

prompts = ["Explain the capital of France in one sentence."]
outputs = llm.generate(prompts, sampling_params, lora_request="my_lora")
print(outputs[0].outputs[0].text)

نکات بهینه‌سازی عملکرد

  • اندازه دسته (Batch Size): در حین تنظیم دقیق، با اندازه دسته کوچک (۱ یا ۲) شروع کنید تا از خطاهای تمام شدن حافظه جلوگیری شود. اگر VRAM شما اجازه می‌دهد، به تدریج آن را افزایش دهید.
  • نقطه‌چک گرادیان (Gradient Checkpointing): نقطه‌چک گرادیان را فعال کنید تا زمان محاسبات را در ازای صرفه‌جویی در حافظه مبادله کنید. این مورد اغلب برای مدل‌های ۱۲ میلیاردی روی کارت‌های گرافیک ۲۴ گیگابایتی ضروری است.
  • انتخاب کم‌فشارسازی: اگرچه ۴ بیتی برای حافظه عالی است، ۸ بیتی وفاداری (کیفیت) کمی بهتری ارائه می‌دهد. بر اساس محدودیت‌های VRAM و نیازهای کیفیت خود انتخاب کنید.

نتیجه‌گیری

Mistral NeMo 12B یک مدل چندمنظوره است که به خوبی در گردش‌کارهای توسعه محلی جای می‌گیرد. با استفاده از LoRA برای تنظیم دقیق کارآمد و vLLM برای استقرار پایدار، می‌توانید برنامه‌های هوش مصنوعی قدرتمند و سفارشی‌سازی شده بسازید بدون اینکه به خدمات ابری متکی باشید. با ادامه رشد قابلیت‌های سخت‌افزاری، مانع ورود برای اجرای مدل‌های بزرگ با وزن‌های باز به صورت محلی همچنان در حال کاهش است و ابزارهایی مانند این را برای توسعه‌دهندگان در سراسر جهان در دسترس‌تر می‌کند.

Share: