مارال ۷ میلیارد پارامتریدر ماههای گذشته، شخصا تلاشهای زیادی کردم تا بتونم زبان فارسی را به یکی از مدلهای زبانی بزرگ اضافه کنم. مدلی که بتونه فارسیای تولید کنه که از لحاظ ساختار زبانی فارسی، درست باشند. اما خب بسیاری از مدلها، قادر به درک درست از زبان فارسی نبودند و این پروژه به شکل عجیبی گیر کرده بود. تا این که شرکت فرانسوی Mistral AI مدل Mistral خودشون رو ارائه کرد.
مدل میسترال هم مثل بسیاری از مدلهای دیگر، فارسی رو درست و حسابی نمیفهمید اما خب درک خوبی از «الفبای فارسی» داشت. به همین خاطر تصمیم به فاینتیون کردن این مدل گرفتم و یک مدل PEFT ازش تولید شد. این کافی نبود ولی، مدل peft نمیتونست به درستی از دانشی که میسترال داره استفاده کنه.
به همین خاطر، در این مرحله یک تیم دونفره شدیم و روی این مدل کار کردیم و بهبودش دادیم. با کمک چندین تن از دوستانمون زیرساخت گرافیکی لازم رو تهیه کردیم و حالا مارال ۷ میلیارد پارامتری اینجاست!
لینکهای مربوطهپروانه انتشاراین مدل با پروانه MIT منتشر شده که به شما امکان استفاده تجاری ازش رو میده. همچنین میتونید بدون مشکل از این مدل در پروژههای آزاد و ناآزاد استفاده کنید
روش اجرا (برای GPUهای محدود)خب طبق معمول، این مدل نیازمند GPUئه برای اجرا و از اونجا که حجم مدل ۱۵ گیگه، حداقل GPU مورد نیاز یک T4 ئه (که روی کگل و کولب میتونید به صورت محدود رایگان داشته باشیدش). برای دستگاه خانگی از یک ۳۰۹۰ استفاده کردم و نتیجه بد نبود. اما کدی که در ادامه قرار میدم، برای اجرای بدون مشکل روی T4, 2090, 3060 و ... است.
خب، اول این کتابخونهها رو نصب میکنیم:
pip install transformers accelerate bitsandbytes
و سپس این کد رو باید اجرا کنید:
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
import torch
model_name_or_id = "MaralGPT/Maral-7B-alpha-1"
model = AutoModelForCausalLM.from_pretrained(model_name_or_id, torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name_or_id)
prompt = "در سال ۱۹۹۶ چه کسی رییس جمهور آمریکا بود؟"
prompt = f"### Human:{prompt}\n### Assistant:"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
generation_config = GenerationConfig(
do_sample=True,
top_k=1,
temperature=0.5,
max_new_tokens=300,
pad_token_id=tokenizer.eos_token_id
)
outputs = model.generate(**inputs, generation_config=generation_config)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
مشکلات حال حاضر- مدل در حال حاضر به شدت میتونه هذیانگویی یا Hallucinate کنه و دلیلش دیتای کمیه که دیده.
- مدل علاقه زیادی به تکرار خودش داره