در سال گذشته شاهد حضور هزاران مدل بزرگ زبانی در دنیا بودیم. مدلهای بزرگ زبانی یا LLMها مدلهایی هستند که قادرند متونی نزدیک به متون تولیدشده توسط انسان رو بعنوان خروجی به ما تحویل بدن. یکی از شناختهشدهترین مدلهایی که در این حوزه وجود داره و احتمالا شما هم میشناسید، ChatGPT ئه که توسط شرکت OpenAI عرضه شده. اما ChatGPT یک مشکل بزرگ داره و اون هم اینه که انحصاریه. یعنی شما نه میدونید که با دیتایی که به مدل میدید چی کار میکنه و نه اجازه دارید مدل رو روی زیرساخت خودتون اجرا کنید.
حالا پس از عمومیت و محبوبیت یافتن این مدل، شرکتها و حتی اشخاص آمدند و مدلهای اوپن سورسی ارائه کردن. یکی از این مدلهای خوب، مدل LLaMa-2 بود که توسط متا (فیسبوک) ارائه شد.
فاینتیون کردن و همچنین ساخت یک مدل جدید بر اساس این مدل، برخلاف قبل، روند بهتری داره و نتایج بهترند. از همین رو تصمیم بر این شد که مدل Chinkara بر اساس این مدل و بر اساس دیتاست OpenAssistant Guanaco توسعه پیدا کنه.
این مدل، با پروانه MIT منتشر میشه و این یعنی که شما قادر خواهی بود از این مدل در نرمافزارها و پروژههای تجاری و حتی متنبسته و ناآزاد هم استفاده کنید.
روش استفادهبرای استفاده از چینکارا، شما نیاز به یک GPU با حداقل ۸ گیگ VRAM دارید که CUDA هم پشتیبانی کنه. بهترین گزینه برای من ۲۰۸۰ بود (با ۱۲ گیگ VRAM) ولی خب اگر کارت شما ۸ گیگه، میتونید از اون استفاده کنید.
بعدش لازمه این کتابخونهها رو نصب کنید:
pip install -U bitsandbytes
pip install -U git+https://github.com/huggingface/transformers.git
pip install -U git+https://github.com/huggingface/peft.git
pip install -U git+https://github.com/huggingface/accelerate.git
pip install -U datasets
pip install -U einops
پس از نصب کتابخونههای مذکور، کافیه که به شکل زیر پیشنیازها رو دانلود کنید. دقت کنید اینجا حدود ۱۴ گیگابایت فایل دانلود میشه پس بهتره هارددیسکتون جای خالی داشته باشه:
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
model_name = "Trelis/Llama-2-7b-chat-hf-sharded-bf16"
adapters_name = 'MaralGPT/chinkara-7b-improved'
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
torch_dtype=torch.bfloat16,
device_map="auto",
max_memory= {i: '24000MB' for i in range(torch.cuda.device_count())},
quantization_config=BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type='nf4'
),
)
model = PeftModel.from_pretrained(model, adapters_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
پس از این که پیشنیازها (شامل مدل LLaMa-2 و اداپتر چینکارا) رو دانلود و بارگذاری کردید، لازمه که به مدل بفهمونیم چیزی که ما میخواهیم ازش استفاده کنیم لامای خام نیست بلکه چینکاراست. پس برای این کار کافیه که این رو هم به کدمون اضافه کنیم:
from peft import LoraConfig, get_peft_model
model = PeftModel.from_pretrained(model, adapters_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
سپس کافیه که به شکل زیر، بهش پرامپت بدیم و نتیجه رو ببینیم:
prompt = "What is the answer to life, universe and everything?"
prompt = f"###Human: {prompt} ###Assistant:"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
outputs = model.generate(inputs=inputs.input_ids, max_new_tokens=50, temperature=0.5, repetition_penalty=1.0)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(answer)
مشکلات و مسائلی که ممکنه پیش بیاد- از اونجایی که تعداد پارامترهای مدل کم بود و دیتاست، به شدت متنوع، ممکنه کارکردش کمی دچار مشکل بشه. به همین خاطر اگر دیدید داره پاسخش رو تکرار میکنه، نگران نباشید. در آینده نزدیک بهتر میشه.
- این مدل ممکنه بتونه فارسی پاسخ بده اما نیت ساخت این مدل، مدل فارسی نبود. مدل فارسی در دست ساخته و به زودی ازش رونمایی میشه.
- اگر سختافزار کافی برای اجرای مدل رو ندارید نگران نباشید، راهحل جایگزین در ادامه معرفی شده.
- طبق آزمایشاتی که روی مدل انجام شد در «محاسبات» و «استدلال» ضعیفه. اما میتونه پاسخ پرسشهای زیادی رو بده. دوست دارم بدونم خلاقیت شما به کجا میکشونه مدل رو
لینکها و راهحلهای جایگزینمدل در گیتهاب (حاوی یک لینک Open In Colab برای دوستانی که GPU ندارند) :
لینک مدل در HuggingFace :
لینک لینکهای فوق با مدل Improved بروز شدند.