مدل زبانی بزرگ ai.llm
اجرای مدلهای زبانی Llama و Qwen از پروندهی GGUF.
واردسازی هوش مصنوعی.مدل زبانی بزرگ
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
این بسته مدلهای زبانی بزرگ خانوادهی Llama را روی پردازنده اجرا میکند، با سلام خالص و بی هیچ کتابخانهی بیرونی. مدل را در قالب GGUF دانلود کنید، با بارگذاری مدل جیجییواف بخوانید و با تولید متن بسازید، یا حلقه را خودتان با پیشرو و یک نمونهبردار (دما، top-k، top-p و جریمهی تکرار) بچرخانید.
برای مدلهای کوچکی است که درون برنامهی خودتان اجرا میشوند: دستهبندی یا بازنویسی متنهای کوتاه بی اینترنت، دستیاری محلی در یک ابزار، یا یاد گرفتن گام به گام کار یک ترنسفورمر. برای مدلهای بزرگ یا سرعت بالا، سروری مثل llama.cpp یا یک API را از راه net.http صدا بزنید.
چه چیزی اجرا میشود و چه هزینهای دارد
- ساختار لایهها همان Llama است: RMSNorm، موقعیت چرخشی، توجه با پرسوجوی گروهی و بلوک پیشخور SwiGLU، به همراه بایاسهای اختیاری توجه که Qwen2 دارد. Qwen2.5 Instruct آزموده شده است؛ Llama و Mistral همین ساختار را دارند. معماریهایی با ساختار دیگر، مثل Phi، بار نمیشوند یا متن بیمعنا میسازند.
- محدودیتهای پرونده در gguf اینجا هم هست: کوچکتر از ۲ گیگابایت و فقط وزنهای
F32،F16،Q8_0،Q4_0وQ4_1، نه کوانتیزههای K. - هر وزن هنگام بار شدن مدل به
اعشار۳۲باز میشود، پس Qwen2.5 0.5B که پروندهاش ۰٫۷ گیگابایت است حدود ۳ گیگابایت حافظه میخواهد. حافظهی کلید و مقدار به اندازهیcfg.ctxساخته میشود که در آغاز کل بافت مدل است (۳۲۷۶۸ برای Qwen)؛ برای صرفهجویی در حافظه آن را پیش ازحافظه کلید مقدار جدیدکم کنید. رمزگذاریتوکنهای ویژهای مثل<|im_start|>را درون متن نمیشناسد و آنها را به تکههای معمولی میشکند که مدل نمیفهمد. شناسهشان را درتوکنساز.indexپیدا کنید و خودتان بگذاریدشان، همان کاری که نمونهی گفتگو میکند.
توکنساز، نمونهبرداری و تولید روی مدل کوچک تصادفیای هم که با مدل تصادفی ساخته میشود کار میکنند؛ نمونهی مرجع پایین همین صفحه به همین شکل بی دانلود اجرا میشود.
پاسخ گفتگو، توکن به توکن
مدلهای آموزش دیده برای دستورپذیری، گفتگو را دقیقا در قالبی میخواهند که با آن آموزش دیدهاند. Qwen دور هر نوبت <|im_start|> و <|im_end|> میگذارد و ورودی با باز کردن نوبت دستیار تمام میشود تا مدل پاسخ را بنویسد. قالب هر مدل در فایل GGUF آن زیر tokenizer.chat_template است؛ برای خواندنش به جیجییواف سر بزنید. این نشانهها هر کدام یک توکن ویژهاند، پس افزودن نوبت شناسهشان را از توکنساز.index میگذارد و فقط متن میانشان را رمزگذاری میکند.
به جای تولید که کل متن را در پایان برمیگرداند، این برنامه حلقه را خودش اجرا میکند تا هر توکن همان وقت که انتخاب شد چاپ شود. نخستین فراخوانی پیشرو کل ورودی را میخواند؛ پس از آن هر فراخوانی فقط تازهترین توکن را میدهد، چون حافظه کلید مقدار همهی پیش از آن را به یاد دارد. حلقه با توکن پایان نوبت، پس از ۸۰ توکن یا وقتی بافت پر شود میایستد. پیش از آن cfg.ctx به ۴۰۹۶ کم شده تا حافظهی کلید و مقدار به جای ۸۰۰ مگابایت حدود ۱۰۰ مگابایت بگیرد.
mkdir -p models
curl -L -o models/qwen2.5-0.5b-instruct-q8_0.gguf \
https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct-GGUF/resolve/main/qwen2.5-0.5b-instruct-q8_0.gguf
salam run llm-guide-chat.salam
واردسازی هوش مصنوعی.مدل زبانی بزرگ
واردسازی هوش مصنوعی.تانسور
تابع افزودن نوبت(توکنساز &: مدل زبانی بزرگ.توکنساز، شناسهها &: وکتور<صحیح>، نقش: رشته، متن: رشته):
شناسهها.بیفزا(توکنساز.نمایه.بگیر("<|im_start|>"))
تکه := توکنساز.رمزگذاری(نقش + "\n" + متن)
هر شناسه در تکه:
شناسهها.بیفزا(شناسه)
پایان
اگر متن.طول() > ۰:
شناسهها.بیفزا(توکنساز.نمایه.بگیر("<|im_end|>"))
خط تازه := توکنساز.رمزگذاری("\n")
هر شناسه در خط تازه:
شناسهها.بیفزا(شناسه)
پایان
پایان
پایان
تابع ریشه:
مسیر := "models/qwen2.5-0.5b-instruct-q8_0.gguf"
ناپایا مدل := مدل زبانی بزرگ.مدل {}
ناپایا توکنساز := مدل زبانی بزرگ.توکنساز جدید(مدل زبانی بزرگ.توکنساز بایتی)
اگر وارونه مدل زبانی بزرگ.بارگذاری مدل جیجییواف(مسیر، مدل، توکنساز):
سرچاپ "بارگذاری نشد:"، مسیر
برگشت ۱
پایان
توکنساز.افزودن توکن آغاز = نادرست
علامت توقف := توکنساز.نمایه.بگیر("<|im_end|>")
مدل.پیکربندی.بیشینه طول = ۴۰۹۶
ناپایا حافظه := مدل زبانی بزرگ.حافظه کلید مقدار جدید(مدل.پیکربندی)
ناپایا نمونهبردار := مدل زبانی بزرگ.نمونهبردار جدید(۴۲)
نمونهبردار.دما = ۰.۷
نمونهبردار.احتمال تجمعی = ۰.۹
نمونهبردار.جریمه تکرارها = ۱.۱
ناپایا شناسهها := وکتور {} برگردان وکتور<صحیح>
افزودن نوبت(توکنساز، شناسهها، "system"، "You are a helpful assistant. Answer in Persian, in one sentence.")
افزودن نوبت(توکنساز، شناسهها، "user"، "چرا آسمان آبی است؟")
افزودن نوبت(توکنساز، شناسهها، "assistant"، "")
ناپایا لاجیتها := مدل زبانی بزرگ.پیشرو(مدل، حافظه، شناسهها)
ناپایا گفتهها := وکتور {} برگردان وکتور<صحیح>
ناپایا گام := وکتور {} برگردان وکتور<صحیح>
گام.بیفزا(۰)
تا گفتهها.طول() < ۸۰ و حافظه.شمار توکنها < حافظه.گنجایش:
بعدی := نمونهبردار.نمونه(لاجیتها، لاجیتها.بعد(۰) - ۱، گفتهها)
تانسور.آزادسازی(لاجیتها)
اگر بعدی == علامت توقف یا بعدی == توکنساز.توکن پایانی:
بشکن
پایان
گفتهها.بیفزا(بعدی)
گام.بنشان(۰، بعدی)
چاپ توکنساز.رمزگشایی(گام)
لاجیتها = مدل زبانی بزرگ.پیشرو(مدل، حافظه، گام)
پایان
سرچاپ ""
سرچاپ "توکنهای ورودی:"، شناسهها.طول()، "پاسخ:"، گفتهها.طول()
حافظه.آزادسازی()
مدل.آزادسازی()
توکنساز.آزادسازی()
پایانآسمان آبی است با پسران آبی از طریق تمرکت خود را مطرح میکنند.
توکنهای ورودی: 37 پاسخ: 37
همین خروجی نشان میدهد از مدلی با نیم میلیارد وزن چه انتظاری باید داشت: جملهی فارسی میسازد ولی معنایش درست نیست. فارسی این مدلهای کوچک ضعیف است و دانستههایشان هم قابل اعتماد نیست؛ برای فهم واقعی، مدل بزرگتر یا سرور جداگانه لازم است. برای کار واقعی با salam build --release بسازید: مدل روی پردازنده اجرا میشود و ساخت انتشار بررسی مرزها را از حلقههای درونی برمیدارد. با این حال روی یک رایانهی معمولی برای هر توکن چند ثانیه صبر کنید.
متن چطور توکن میشود
مدل هرگز حرف نمیبیند، فقط شناسهی توکن. توکنساز BPE از تکنویسهها شروع میکند و فهرست ادغامهایش را به ترتیب اعمال میکند، پس تکههای پرکاربردی مثل lower یک توکن میشوند و واژههای کمیاب به چند تکه میشکنند. BPE بایتی، همان که GPT 2 و Llama 3 و Qwen به کار میبرند، فاصله را Ġ مینویسد، پس فاصلهی پیش از هر واژه بخشی از یک توکن است. این توکنساز با پنج ادغام دستی ساخته شده تا گامها دیده شوند.
واردسازی هوش مصنوعی.مدل زبانی بزرگ
تابع نمایش(توکنساز &: مدل زبانی بزرگ.توکنساز، متن: رشته):
شناسهها := توکنساز.رمزگذاری(متن)
ناپایا تکه ها := ""
هر شناسه در شناسهها:
تکه ها = تکه ها + "[" + توکنساز.متن توکن(شناسه) + "]"
پایان
سرچاپ متن، "<-"، شناسهها.طول()، "توکن"، تکه ها
پایان
تابع ریشه:
ناپایا توکنساز := مدل زبانی بزرگ.توکنساز جدید(مدل زبانی بزرگ.توکنساز بایتی)
هر تکه در ["l"، "o"، "w"، "e"، "r"، "n"، "s"، "t"، "Ġ"، "lo"، "low"، "er"، "lower"]:
_ := توکنساز.افزودن توکن(تکه، ۰.۰)
پایان
توکنساز.افزودن ادغام("l"، "o")
توکنساز.افزودن ادغام("lo"، "w")
توکنساز.افزودن ادغام("e"، "r")
توکنساز.افزودن ادغام("low"، "er")
توکنساز.پایان()
توکنساز.افزودن توکن آغاز = نادرست
نمایش(توکنساز، "low")
نمایش(توکنساز، "lower")
نمایش(توکنساز، "slower")
نمایش(توکنساز، "newest")
نمایش(توکنساز، "lower tower")
سرچاپ "رفت و برگشت:"، توکنساز.رمزگشایی(توکنساز.رمزگذاری("lower tower")) == "lower tower"
توکنساز.آزادسازی()
پایانtower به تکههای ow ادغام نمیشود چون ادغامها فقط lo و low را میشناسند. شمردن توکنها به همین روش راه سنجیدن این است که ورودی پیش از فرستادن در بافت مدل جا میشود یا نه.
دما و top-k
مدل برای هر توکن واژگان امتیازی (لاجیت) میدهد و نمونهبردار امتیازها را به یک انتخاب تبدیل میکند. حریصانه همیشه بالاترین را برمیدارد. نمونهبردار به تناسب احتمالها تصادفی انتخاب میکند: دمای کمتر از یک احتمالها را به سوی محبوبترین تیز میکند، دمای بیشتر از یک صافشان میکند، و top_k پیش از انتخاب همه جز k بهترین را کنار میگذارد. برنامه با هر تنظیم ۱۰۰۰ بار از چهار امتیاز ثابت انتخاب میکند و میشمارد هر توکن چند بار برنده شده.
واردسازی هوش مصنوعی.مدل زبانی بزرگ
واردسازی هوش مصنوعی.تانسور
تابع شمارش(نمونهبردار &: مدل زبانی بزرگ.نمونهبردار، لاجیت ها &: تانسور.تانسور): رشته:
ناپایا دیده := [۰، ۰، ۰، ۰]
ناپایا اخیر := وکتور {} برگردان وکتور<صحیح>
تکرار ۱۰۰۰:
دیده[نمونهبردار.نمونه(لاجیت ها، ۰، اخیر)] += ۱
پایان
برگشت "" + دیده[۰] + " " + دیده[۱] + " " + دیده[۲] + " " + دیده[۳]
پایان
تابع ریشه:
ناپایا داده := وکتور {} برگردان وکتور<اعشار۳۲>
هر م در [۲.۰، ۱.۵، ۰.۵، -۱.۰]:
داده.بیفزا(م برگردان اعشار۳۲)
پایان
ناپایا شکل := تانسور.شکل دو(۱، ۴)
ناپایا لاجیت ها := تانسور.از آرایه(شکل، داده)
سرچاپ "حریصانه همیشه این را برمیدارد:"، مدل زبانی بزرگ.حریصانه(لاجیت ها، ۰)
ناپایا ساده := مدل زبانی بزرگ.نمونهبردار جدید(۱)
سرچاپ "دمای ۱.۰:"، شمارش(ساده، لاجیت ها)
ناپایا سرد := مدل زبانی بزرگ.نمونهبردار جدید(۱)
سرد.دما = ۰.۳
سرچاپ "دمای ۰.۳:"، شمارش(سرد، لاجیت ها)
ناپایا داغ := مدل زبانی بزرگ.نمونهبردار جدید(۱)
داغ.دما = ۲.۰
سرچاپ "دمای ۲.۰:"، شمارش(داغ، لاجیت ها)
ناپایا دو برتر := مدل زبانی بزرگ.نمونهبردار جدید(۱)
دو برتر.شمار محتملترینها = ۲
سرچاپ "top_k ۲: "، شمارش(دو برتر، لاجیت ها)
پایاندانهای که به نمونهبردار جدید میدهید انتخابها را تکرارپذیر میکند و برای همین این خروجی هیچوقت عوض نمیشود. برای پاسخهای دقیق دمای پایین به کار ببرید؛ برای نوشتههای گوناگون، حدود ۰.۷ تا ۱.۰ با top_p برابر ۰.۹. repeat_penalty بیشتر از یک امتیاز توکنهای تازه به کار رفته را پایین میآورد و جلوی تکرار بیپایان مدلهای کوچک را میگیرد.
گونهها
پیکربندی Config
ساختار پیکربندی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| واژگان | vocab | صحیح = 0 | اندازهی واژگان. |
| اندازه جاسازی | dim | صحیح = 0 | اندازهی جاسازی. |
| لایهها | layers | صحیح = 0 | شمار لایهها. |
| سرهای توجه | heads | صحیح = 1 | شمار سرهای توجه. |
| سرهای کلید مقدار | kv_heads | صحیح = 1 | شمار سرهای کلید و مقدار؛ کمتر از heads یعنی توجه گروهی. |
| لایه پیشرو | ff | صحیح = 0 | اندازهی لایهی پیشرو. |
| بیشینه طول | ctx | صحیح = 512 | بیشترین طول متن. |
| اپسیلون | eps | اعشار۶۴ = 1e-05 | عدد کوچک نرمالسازی. |
| پایه جاسازی چرخشی | rope_theta | اعشار۶۴ = 10000 | پایهی جاسازی چرخشی. |
| نوع جاسازی چرخشی | rope_kind | صحیح | گونهی جاسازی چرخشی، یکی از ثابتهای روپ .... |
واردسازی هوش مصنوعی.مدل زبانی بزرگ
واردسازی هوش مصنوعی.تانسور
تابع ریشه:
ناپایا توکنساز := مدل زبانی بزرگ.توکنساز جدید(مدل زبانی بزرگ.توکنساز بایتی)
هر متن در ["a"، "b"، "c"، "ab"]:
_ := توکنساز.افزودن توکن(متن، ۰.۰)
پایان
توکنساز.افزودن ادغام("a"، "b")
توکنساز.پایان()
توکنساز.افزودن توکن آغاز = نادرست
ناپایا شناسهها := توکنساز.رمزگذاری("abcab")
سرچاپ توکنساز.اندازه()، شناسهها.طول()، توکنساز.متن توکن(شناسهها.دریافت(۰))، توکنساز.رمزگشایی(شناسهها)
سرچاپ مدل زبانی بزرگ.توکنساز قطعه جمله، مدل زبانی بزرگ.روپ عادی، مدل زبانی بزرگ.روپ نئوایکس
ناپایا پیکربندی := مدل زبانی بزرگ.پیکربندی { واژگان = توکنساز.اندازه()، اندازه جاسازی = ۸، لایهها = ۲، سرهای توجه = ۲، سرهای کلید مقدار = ۱، لایه پیشرو = ۱۶، بیشینه طول = ۳۲ }
سرچاپ پیکربندی.بعد سر()
ناپایا مدل := مدل زبانی بزرگ.مدل تصادفی(پیکربندی، ۷)
ناپایا حافظه := مدل زبانی بزرگ.حافظه کلید مقدار جدید(پیکربندی)
سرچاپ مدل.موفق، مدل.لایهها.طول()، حافظه.گنجایش
ناپایا لاجیتها := مدل زبانی بزرگ.پیشرو(مدل، حافظه، شناسهها)
سرچاپ تانسور.رشته شکل(لاجیتها)، حافظه.شمار توکنها
ناپایا آخر := مدل زبانی بزرگ.ردیف لاجیت(لاجیتها، شناسهها.طول() - ۱)
حریص := مدل زبانی بزرگ.حریصانه(لاجیتها، شناسهها.طول() - ۱)
سرچاپ تانسور.رشته شکل(آخر)، حریص == تانسور.نمایه بیشینه همه(آخر)
ناپایا نمونهبردار := مدل زبانی بزرگ.نمونهبردار جدید(۱)
نمونهبردار.دما = ۰.۸
نمونهبردار.شمار محتملترینها = ۳
نمونهبردار.احتمال تجمعی = ۰.۹
نمونهبردار.جریمه تکرارها = ۱.۱
ناپایا اخیر := وکتور {} برگردان وکتور<صحیح>
بعدی := نمونهبردار.نمونه(لاجیتها، شناسهها.طول() - ۱، اخیر)
سرچاپ بعدی >= ۰ و بعدی < توکنساز.اندازه()
حافظه.بازنشانی()
تولیدی := مدل زبانی بزرگ.تولید شناسهها(مدل، حافظه، شناسهها، ۴، نمونهبردار، -۱)
سرچاپ تولیدی.طول()
حافظه.بازنشانی()
متن تولیدی := مدل زبانی بزرگ.تولید(مدل، حافظه، توکنساز، "ab"، ۳، نمونهبردار)
سرچاپ متن تولیدی.طول() > ۰
تانسور.آزادسازی(لاجیتها)
تانسور.آزادسازی(آخر)
حافظه.آزادسازی()
مدل.آزادسازی()
توکنساز.آزادسازی()
پایانبعد سر head_dim
تابع بعد سر(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
لایه Layer
ساختار لایه| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نرمالسازی توجه | attn_norm | تانسور.تانسور | نرمالسازی پیش از توجه. |
| وزن پرسش | wq | تانسور.تانسور | وزن پرسش. |
| وزن کلید | wk | تانسور.تانسور | وزن کلید. |
| وزن مقدار | wv | تانسور.تانسور | وزن مقدار. |
| وزن خروجی توجه | wo | تانسور.تانسور | وزن خروجی توجه. |
| بایاس پرسش | bq | تانسور.تانسور | بایاس پرسوجو؛ برای مدلهایی که ندارند خالی است. مدلهای Qwen2 آن را دارند. |
| بایاس کلید | bk | تانسور.تانسور | بایاس کلید؛ اگر مدل نداشته باشد خالی است. |
| بایاس مقدار | bv | تانسور.تانسور | بایاس مقدار؛ اگر مدل نداشته باشد خالی است. |
| نرمالسازی پیشرو | ffn_norm | تانسور.تانسور | نرمالسازی پیش از لایهی پیشرو. |
| وزن دروازه | w_gate | تانسور.تانسور | وزن دروازهی SwiGLU. |
| وزن بالا | w_up | تانسور.تانسور | وزن بالابر. |
| وزن پایین | w_down | تانسور.تانسور | وزن پایینبر. |
نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
آزادسازی free
تابع آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
مدل Model
ساختار مدل| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| پیکربندی | cfg | پیکربندی | پیکربندی. |
| جاسازی توکنها | tok_embed | تانسور.تانسور | جدول جاسازی توکنها. |
| لایهها | layers | وکتور<لایه> | لایهها. |
| نرمالسازی پایانی | out_norm | تانسور.تانسور | نرمالسازی پایانی. |
| وزن خروجی | out_head | تانسور.تانسور | وزن خروجی به واژگان. |
| موفق | ok | منطقی = نادرست | درست ساخته یا بارگذاری شد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
آزادسازی free
تابع آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
حافظه کلید مقدار KVCache
ساختار حافظه کلید مقدار| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| کلیدها | k | وکتور<تانسور.تانسور> | کلیدها، یکی برای هر لایه. |
| مقدارها | v | وکتور<تانسور.تانسور> | مقدارها. |
| شمار توکنها | len | صحیح = 0 | شمار توکنهای پردازششده. |
| گنجایش | ctx | صحیح = 0 | گنجایش. |
نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
بازنشانی reset
تابع بازنشانی()نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
آزادسازی free
تابع آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
توکنساز Tokenizer
ساختار توکنساز| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| گونه | kind | صحیح | گونه. |
| توکنها | tokens | وکتور<رشته> | متن توکنها. |
| امتیازها | scores | وکتور<اعشار۶۴> | امتیازها برای SentencePiece. |
| نمایه | index | نگاشت<رشته، صحیح> | شمارهی هر توکن. |
| ادغامها | merges | نگاشت<رشته، صحیح> | رتبهی ادغامهای BPE. |
| کلیدهای ادغام | merge_keys | وکتور<رشته> | کلیدهای ادغام. |
| توکن آغاز | bos | صحیح = -1 | شمارهی توکن آغاز؛ ۱- یعنی ندارد. |
| توکن پایانی | eos | صحیح = -1 | شمارهی توکن پایان. |
| توکن ناشناخته | unk | صحیح = 0 | شمارهی توکن ناشناخته. |
| افزودن توکن آغاز | add_bos | منطقی = درست | رمزگذاری توکن آغاز را بیفزاید. |
| شماره بایتها | byte_ids | وکتور<صحیح> | شمارهی توکن هر بایت. |
| نگاشت بایت نویسه | b2u | وکتور<صحیح> | نگاشت بایت به نویسه در BPE بایتی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
افزودن توکن add_token
تابع افزودن توکن(text: رشته، score: اعشار۶۴): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
افزودن ادغام add_merge
تابع افزودن ادغام(a: رشته، b: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
پایان finish
تابع پایان()نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
اندازه size
تابع اندازه(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
متن توکن token_text
تابع متن توکن(id: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
رمزگذاری encode
تابع رمزگذاری(text: رشته): وکتور<صحیح>نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
رمزگشایی decode
تابع رمزگشایی(ids &: وکتور<صحیح>): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
آزادسازی free
تابع آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
نمونهبردار Sampler
ساختار نمونهبردار| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| دما | temperature | اعشار۶۴ = 1 | دما؛ کمتر یعنی پاسخ قطعیتر. |
| شمار محتملترینها | top_k | صحیح = 0 | فقط از k توکن محتملتر؛ صفر یعنی بی محدودیت. |
| احتمال تجمعی | top_p | اعشار۶۴ = 1 | فقط از توکنهایی که مجموع احتمالشان تا p است. |
| جریمه تکرارها | repeat_penalty | اعشار۶۴ = 1 | جریمهی تکرار توکنهای اخیر. |
| مولد تصادفی | rng | تانسور.مولد تصادفی | مولد تصادفی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
نمونه sample
تابع نمونه(logits &: تانسور.تانسور، row: صحیح، recent &: وکتور<صحیح>): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
پایاها و متغیرها
روپ عادی ROPE_NORMAL
پایا روپ عادی: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
روپ نئوایکس ROPE_NEOX
پایا روپ نئوایکس: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
توکنساز قطعه جمله TOK_SPM
پایا توکنساز قطعه جمله: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
توکنساز بایتی TOK_BPE
پایا توکنساز بایتی: صحیح۳۲ = 1نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
تابعها
پیکربندی از جیجییواف ConfigFromGguf
تابع پیکربندی از جیجییواف(g &: جیجییواف.جیجییواف): پیکربندیواردسازی هوش مصنوعی.مدل زبانی بزرگ
واردسازی هوش مصنوعی.جیجییواف
تابع ریشه خطادار:
مسیر := "models/qwen2.5-0.5b-instruct-q8_0.gguf"
ناپایا مدل := مدل زبانی بزرگ.مدل {}
ناپایا توکنساز := مدل زبانی بزرگ.توکنساز جدید(مدل زبانی بزرگ.توکنساز بایتی)
اگر وارونه مدل زبانی بزرگ.بارگذاری مدل جیجییواف(مسیر، مدل، توکنساز):
سرچاپ "مدل بارگذاری نشد:"، مسیر
برگشت
پایان
ناپایا حافظه := مدل زبانی بزرگ.حافظه کلید مقدار جدید(مدل.پیکربندی)
ناپایا نمونهبردار := مدل زبانی بزرگ.نمونهبردار جدید(۴۲)
نمونهبردار.دما = ۰.۷
سرچاپ مدل زبانی بزرگ.تولید(مدل، حافظه، توکنساز، "پایتخت ایران"، ۲۰، نمونهبردار)
ناپایا پرونده := تلاش جیجییواف.بارگذاری جیجییواف(مسیر)
پیکربندی := مدل زبانی بزرگ.پیکربندی از جیجییواف(پرونده)
سرچاپ پیکربندی.واژگان، پیکربندی.اندازه جاسازی، پیکربندی.لایهها، پیکربندی.سرهای توجه، پیکربندی.سرهای کلید مقدار، پیکربندی.لایه پیشرو، پیکربندی.بیشینه طول، پیکربندی.اپسیلون، پیکربندی.پایه جاسازی چرخشی، پیکربندی.نوع جاسازی چرخشی
ناپایا مدل۲ := مدل زبانی بزرگ.مدل از جیجییواف(پرونده)
ناپایا توکنساز۲ := مدل زبانی بزرگ.توکنساز از جیجییواف(پرونده)
سرچاپ توکنساز۲.توکن آغاز، توکنساز۲.توکن پایانی، توکنساز۲.توکن ناشناخته
مدل۲.آزادسازی()
توکنساز۲.آزادسازی()
پرونده.آزادسازی()
حافظه.آزادسازی()
مدل.آزادسازی()
توکنساز.آزادسازی()
پایانمدل از جیجییواف ModelFromGguf
تابع مدل از جیجییواف(g &: جیجییواف.جیجییواف): مدلنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Load.salam
توکنساز از جیجییواف TokenizerFromGguf
تابع توکنساز از جیجییواف(g &: جیجییواف.جیجییواف): توکنسازنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Load.salam
بارگذاری مدل جیجییواف LoadGgufModel
تابع بارگذاری مدل جیجییواف(path: رشته، m &: مدل، t &: توکنساز): منطقی.gguf بارگذاری میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Load.salam
حافظه کلید مقدار جدید NewKVCache
تابع حافظه کلید مقدار جدید(cfg &: پیکربندی): حافظه کلید مقدارنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
مدل تصادفی RandomModel
تابع مدل تصادفی(cfg &: پیکربندی، seed: صحیح۶۴): مدلنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
توکنساز جدید NewTokenizer
تابع توکنساز جدید(kind: صحیح): توکنسازنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
پیشرو Forward
تابع پیشرو(m &: مدل، cache &: حافظه کلید مقدار، tokens &: وکتور<صحیح>): تانسور.تانسورنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
ردیف لاجیت LogitsRow
تابع ردیف لاجیت(logits &: تانسور.تانسور، row: صحیح): تانسور.تانسورنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
نمونهبردار جدید NewSampler
تابع نمونهبردار جدید(seed: صحیح۶۴): نمونهبردارنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
حریصانه Greedy
تابع حریصانه(logits &: تانسور.تانسور، row: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
تولید شناسهها GenerateIds
تابع تولید شناسهها(m &: مدل، cache &: حافظه کلید مقدار، prompt_ids &: وکتور<صحیح>، max_new: صحیح، sp &: نمونهبردار، eos: صحیح): وکتور<صحیح>نمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam
تولید Generate
تابع تولید(m &: مدل، cache &: حافظه کلید مقدار، tok &: توکنساز، prompt: رشته، max_new: صحیح، sp &: نمونهبردار): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: ai-llm-Generate.salam