کتابخانه‌ی استاندارد · یادگیری ماشین

مدل زبانی بزرگ llm

اجرای مدل‌های زبانی Llama و Qwen از پرونده‌ی GGUF.

واردسازی مدل زبانی بزرگ

این بسته مدل‌های زبانی بزرگ با معماری Llama، مثل Llama، Qwen و Mistral، را بی وابستگی بیرونی روی پردازنده اجرا می‌کند. مدل کوانتیزه‌شده را در قالب GGUF دانلود کنید، با بارگذاری مدل جی‌جی‌یو‌اف بخوانید و با تولید متن بسازید.

برای کنترل بیشتر، پیشرو لاجیت‌ها را می‌دهد و نمونه‌بردار با دما، top-k، top-p و جریمه‌ی تکرار توکن بعدی را برمی‌گزیند. نمونه‌ی اجراشدنی یک مدل کوچک تصادفی می‌سازد تا بی دانلود کار کند.

گونه‌ها

توکن‌ساز Tokenizer

ساختار توکن‌ساز
توکن‌ساز: متن را به شماره‌ها و برعکس تبدیل می‌کند.
نامانگلیسیگونهتوضیح
kindkindصحیحگونه.
tokenstokensوکتور<رشته>متن توکن‌ها.
scoresscoresوکتور<اعشار۶۴>امتیازها برای SentencePiece.
indexindexنگاشت<رشته، صحیح>شماره‌ی هر توکن.
mergesmergesنگاشت<رشته، صحیح>رتبه‌ی ادغام‌های BPE.
merge_keysmerge_keysوکتور<رشته>کلیدهای ادغام.
bosbosصحیح = -1شماره‌ی توکن آغاز؛ ۱- یعنی ندارد.
eoseosصحیح = -1شماره‌ی توکن پایان.
unkunkصحیح = 0شماره‌ی توکن ناشناخته.
add_bosadd_bosمنطقی = درسترمزگذاری توکن آغاز را بیفزاید.
byte_idsbyte_idsوکتور<صحیح>شماره‌ی توکن هر بایت.
b2ub2uوکتور<صحیح>نگاشت بایت به نویسه در BPE بایتی.
llm-Generate.salam
واردسازی مدل زبانی بزرگ
واردسازی تانسور

روال ریشه:
    ناپایا توکن‌ساز := مدل زبانی بزرگ.توکن‌ساز جدید(مدل زبانی بزرگ.توکن‌ساز بایتی)
    هر متن در ["a"، "b"، "c"، "ab"]:
        _ := توکن‌ساز.افزودن توکن(متن، ۰.۰)
    پایان
    توکن‌ساز.افزودن ادغام("a"، "b")
    توکن‌ساز.پایان()
    توکن‌ساز.add_bos = نادرست
    ناپایا شناسه‌ها := توکن‌ساز.رمزگذاری("abcab")
    سرچاپ توکن‌ساز.اندازه()، شناسه‌ها.طول()، توکن‌ساز.متن توکن(شناسه‌ها.دریافت(۰))، توکن‌ساز.رمزگشایی(شناسه‌ها)
    سرچاپ مدل زبانی بزرگ.توکن‌ساز قطعه جمله، مدل زبانی بزرگ.روپ عادی، مدل زبانی بزرگ.روپ نئوایکس

    ناپایا پیکربندی := مدل زبانی بزرگ.پیکربندی { vocab = توکن‌ساز.اندازه()، dim = ۸، layers = ۲، heads = ۲، kv_heads = ۱، ff = ۱۶، ctx = ۳۲ }
    سرچاپ پیکربندی.بعد سر()
    ناپایا مدل := مدل زبانی بزرگ.مدل تصادفی(پیکربندی، ۷)
    ناپایا حافظه := مدل زبانی بزرگ.حافظه کلید مقدار جدید(پیکربندی)
    سرچاپ مدل.ok، مدل.layers.طول()، حافظه.ctx

    ناپایا لاجیت‌ها := مدل زبانی بزرگ.پیشرو(مدل، حافظه، شناسه‌ها)
    سرچاپ تانسور.رشته شکل(لاجیت‌ها)، حافظه.len
    ناپایا آخر := مدل زبانی بزرگ.ردیف لاجیت(لاجیت‌ها، شناسه‌ها.طول() - ۱)
    حریص := مدل زبانی بزرگ.حریصانه(لاجیت‌ها، شناسه‌ها.طول() - ۱)
    سرچاپ تانسور.رشته شکل(آخر)، حریص == تانسور.نمایه بیشینه همه(آخر)

    ناپایا نمونه‌بردار := مدل زبانی بزرگ.نمونه‌بردار جدید(۱)
    نمونه‌بردار.temperature = ۰.۸
    نمونه‌بردار.top_k = ۳
    نمونه‌بردار.top_p = ۰.۹
    نمونه‌بردار.repeat_penalty = ۱.۱
    ناپایا اخیر := وکتور {} برگردان وکتور<صحیح>
    بعدی := نمونه‌بردار.نمونه(لاجیت‌ها، شناسه‌ها.طول() - ۱، اخیر)
    سرچاپ بعدی >= ۰ و بعدی < توکن‌ساز.اندازه()

    حافظه.بازنشانی()
    تولیدی := مدل زبانی بزرگ.تولید شناسه‌ها(مدل، حافظه، شناسه‌ها، ۴، نمونه‌بردار، -۱)
    سرچاپ تولیدی.طول()
    حافظه.بازنشانی()
    متن تولیدی := مدل زبانی بزرگ.تولید(مدل، حافظه، توکن‌ساز، "ab"، ۳، نمونه‌بردار)
    سرچاپ متن تولیدی.طول() > ۰
    تانسور.آزادسازی(لاجیت‌ها)
    تانسور.آزادسازی(آخر)
    حافظه.آزادسازی()
    مدل.آزادسازی()
    توکن‌ساز.آزادسازی()
پایان
خروجی4 3 ab abcab 0 0 1 4 true 2 32 3x4 3 1x4 true true 4 true

افزودن توکن add_token

روال افزودن توکن(text: رشته، score: اعشار۶۴): صحیح
توکنی می‌افزاید و شماره‌اش را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

افزودن ادغام add_merge

روال افزودن ادغام(a: رشته، b: رشته)
قاعده‌ی ادغام BPE به ترتیب رتبه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

پایان finish

روال پایان()
پس از افزودن توکن‌ها صدا بزنید تا جدول‌ها آماده شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

اندازه size

روال اندازه(): صحیح
شمار توکن‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

متن توکن token_text

روال متن توکن(id: صحیح): رشته
متن یک توکن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

رمزگذاری encode

روال رمزگذاری(text: رشته): وکتور<صحیح>
متن به شماره‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

رمزگشایی decode

روال رمزگشایی(ids &: وکتور<صحیح>): رشته
شماره‌ها به متن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

آزادسازی free

روال آزادسازی()
آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

نمونه‌بردار Sampler

ساختار نمونه‌بردار
نمونه‌بردار: توکن بعدی را از لاجیت‌ها برمی‌گزیند.
نامانگلیسیگونهتوضیح
temperaturetemperatureاعشار۶۴ = 1دما؛ کمتر یعنی پاسخ قطعی‌تر.
top_ktop_kصحیح = 0فقط از k توکن محتمل‌تر؛ صفر یعنی بی محدودیت.
top_ptop_pاعشار۶۴ = 1فقط از توکن‌هایی که مجموع احتمالشان تا p است.
repeat_penaltyrepeat_penaltyاعشار۶۴ = 1جریمه‌ی تکرار توکن‌های اخیر.
rngrngtensor.Rngمولد تصادفی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

نمونه sample

روال نمونه(logits &: tensor.Tensor، row: صحیح، recent &: وکتور<صحیح>): صحیح
توکن بعدی را با توجه به توکن‌های اخیر برمی‌گزیند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

پیکربندی Config

ساختار پیکربندی
پیکربندی معماری مدل، از نوع Llama.
نامانگلیسیگونهتوضیح
vocabvocabصحیح = 0اندازه‌ی واژگان.
dimdimصحیح = 0اندازه‌ی جاسازی.
layerslayersصحیح = 0شمار لایه‌ها.
headsheadsصحیح = 1شمار سرهای توجه.
kv_headskv_headsصحیح = 1شمار سرهای کلید و مقدار؛ کمتر از heads یعنی توجه گروهی.
ffffصحیح = 0اندازه‌ی لایه‌ی پیشرو.
ctxctxصحیح = 512بیشترین طول متن.
epsepsاعشار۶۴ = 1e-05عدد کوچک نرمال‌سازی.
rope_thetarope_thetaاعشار۶۴ = 10000پایه‌ی جاسازی چرخشی.
rope_kindrope_kindصحیحگونه‌ی جاسازی چرخشی، یکی از ثابت‌های روپ ....

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

بعد سر head_dim

روال بعد سر(): صحیح
اندازه‌ی هر سر توجه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

لایه Layer

ساختار لایه
وزن‌های یک لایه‌ی ترنسفورمر.
نامانگلیسیگونهتوضیح
attn_normattn_normtensor.Tensorنرمال‌سازی پیش از توجه.
wqwqtensor.Tensorوزن پرسش.
wkwktensor.Tensorوزن کلید.
wvwvtensor.Tensorوزن مقدار.
wowotensor.Tensorوزن خروجی توجه.
ffn_normffn_normtensor.Tensorنرمال‌سازی پیش از لایه‌ی پیشرو.
w_gatew_gatetensor.Tensorوزن دروازه‌ی SwiGLU.
w_upw_uptensor.Tensorوزن بالابر.
w_downw_downtensor.Tensorوزن پایین‌بر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

آزادسازی free

روال آزادسازی()
وزن‌ها را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

مدل Model

ساختار مدل
مدل زبانی.
نامانگلیسیگونهتوضیح
cfgcfgپیکربندیپیکربندی.
tok_embedtok_embedtensor.Tensorجدول جاسازی توکن‌ها.
layerslayersوکتور<لایه>لایه‌ها.
out_normout_normtensor.Tensorنرمال‌سازی پایانی.
out_headout_headtensor.Tensorوزن خروجی به واژگان.
okokمنطقی = نادرستدرست ساخته یا بارگذاری شد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

آزادسازی free

روال آزادسازی()
مدل را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

حافظه کلید مقدار KVCache

ساختار حافظه کلید مقدار
حافظه‌ی کلید و مقدار: کلیدها و مقدارهای توکن‌های پیشین را نگه می‌دارد تا هر توکن تازه فقط یک بار حساب شود.
نامانگلیسیگونهتوضیح
kkوکتورکلیدها، یکی برای هر لایه.
vvوکتورمقدارها.
lenlenصحیح = 0شمار توکن‌های پردازش‌شده.
ctxctxصحیح = 0گنجایش.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

بازنشانی reset

روال بازنشانی()
برای متن تازه خالی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

آزادسازی free

روال آزادسازی()
آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

پایاها و متغیرها

توکن‌ساز قطعه جمله TOK_SPM

پایا توکن‌ساز قطعه جمله: صحیح۳۲ = 0
توکن‌ساز SentencePiece، مثل Llama 2.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

توکن‌ساز بایتی TOK_BPE

پایا توکن‌ساز بایتی: صحیح۳۲ = 1
توکن‌ساز BPE بایتی، مثل GPT-2، Llama 3 و Qwen.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

روپ عادی ROPE_NORMAL

پایا روپ عادی: صحیح۳۲ = 0
جاسازی چرخشی Llama.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

روپ نئوایکس ROPE_NEOX

پایا روپ نئوایکس: صحیح۳۲ = 1
جاسازی چرخشی GPT-NeoX، برای Qwen و مدل‌های مشابه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

روال‌ها

توکن‌ساز جدید NewTokenizer

روال توکن‌ساز جدید(kind: صحیح): توکن‌ساز
توکن‌ساز خالی از یک گونه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

نمونه‌بردار جدید NewSampler

روال نمونه‌بردار جدید(seed: صحیح۶۴): نمونه‌بردار
نمونه‌بردار با بذر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

حریصانه Greedy

روال حریصانه(logits &: tensor.Tensor، row: صحیح): صحیح
محتمل‌ترین توکن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

تولید شناسه‌ها GenerateIds

روال تولید شناسه‌ها(m &: مدل، cache &: حافظه کلید مقدار، prompt_ids &: وکتور<صحیح>، max_new: صحیح، sp &: نمونه‌بردار، eos: صحیح): وکتور<صحیح>
تا n توکن تازه پس از شماره‌های آغازین تولید می‌کند؛ با توکن پایان می‌ایستد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

تولید Generate

روال تولید(m &: مدل، cache &: حافظه کلید مقدار، tok &: توکن‌ساز، prompt: رشته، max_new: صحیح، sp &: نمونه‌بردار): رشته
متن آغازین را ادامه می‌دهد و متن تازه را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

پیشرو Forward

روال پیشرو(m &: مدل، cache &: حافظه کلید مقدار، tokens &: وکتور<صحیح>): tensor.Tensor
توکن‌ها را از مدل می‌گذراند و لاجیت هر جایگاه را برمی‌گرداند؛ حافظه به‌روز می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

ردیف لاجیت LogitsRow

روال ردیف لاجیت(logits &: tensor.Tensor، row: صحیح): tensor.Tensor
لاجیت یک جایگاه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

پیکربندی از جی‌جی‌یو‌اف ConfigFromGguf

روال پیکربندی از جی‌جی‌یو‌اف(g &: gguf.Gguf): پیکربندی
پیکربندی از فراداده‌ی GGUF.
llm-Load.salam
واردسازی مدل زبانی بزرگ
واردسازی جی‌جی‌یو‌اف

روال ریشه:
    مسیر := "models/qwen2.5-0.5b-instruct-q8_0.gguf"
    ناپایا مدل := مدل زبانی بزرگ.مدل {}
    ناپایا توکن‌ساز := مدل زبانی بزرگ.توکن‌ساز جدید(مدل زبانی بزرگ.توکن‌ساز بایتی)
    اگر وارونه مدل زبانی بزرگ.بارگذاری مدل جی‌جی‌یو‌اف(مسیر، مدل، توکن‌ساز):
        سرچاپ "مدل بارگذاری نشد:"، مسیر
        برگشت
    پایان
    ناپایا حافظه := مدل زبانی بزرگ.حافظه کلید مقدار جدید(مدل.cfg)
    ناپایا نمونه‌بردار := مدل زبانی بزرگ.نمونه‌بردار جدید(۴۲)
    نمونه‌بردار.temperature = ۰.۷
    سرچاپ مدل زبانی بزرگ.تولید(مدل، حافظه، توکن‌ساز، "پایتخت ایران"، ۲۰، نمونه‌بردار)

    ناپایا سالم := نادرست
    ناپایا پرونده := جی‌جی‌یو‌اف.بارگذاری جی‌جی‌یو‌اف(مسیر، سالم)
    پیکربندی := مدل زبانی بزرگ.پیکربندی از جی‌جی‌یو‌اف(پرونده)
    سرچاپ پیکربندی.vocab، پیکربندی.dim، پیکربندی.layers، پیکربندی.heads، پیکربندی.kv_heads، پیکربندی.ff، پیکربندی.ctx، پیکربندی.eps، پیکربندی.rope_theta، پیکربندی.rope_kind
    ناپایا مدل۲ := مدل زبانی بزرگ.مدل از جی‌جی‌یو‌اف(پرونده)
    ناپایا توکن‌ساز۲ := مدل زبانی بزرگ.توکن‌ساز از جی‌جی‌یو‌اف(پرونده)
    سرچاپ توکن‌ساز۲.bos، توکن‌ساز۲.eos، توکن‌ساز۲.unk
    مدل۲.آزادسازی()
    توکن‌ساز۲.آزادسازی()
    پرونده.آزادسازی()
    حافظه.آزادسازی()
    مدل.آزادسازی()
    توکن‌ساز.آزادسازی()
پایان

مدل از جی‌جی‌یو‌اف ModelFromGguf

روال مدل از جی‌جی‌یو‌اف(g &: gguf.Gguf): مدل
وزن‌ها را از پرونده‌ی GGUF بارگذاری می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Load.salam

توکن‌ساز از جی‌جی‌یو‌اف TokenizerFromGguf

روال توکن‌ساز از جی‌جی‌یو‌اف(g &: gguf.Gguf): توکن‌ساز
توکن‌ساز را از واژگان پرونده می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Load.salam

بارگذاری مدل جی‌جی‌یو‌اف LoadGgufModel

روال بارگذاری مدل جی‌جی‌یو‌اف(path: رشته، m &: مدل، t &: توکن‌ساز): منطقی
مدل و توکن‌ساز را از پرونده‌ی .gguf بارگذاری می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Load.salam

حافظه کلید مقدار جدید NewKVCache

روال حافظه کلید مقدار جدید(cfg &: پیکربندی): حافظه کلید مقدار
حافظه برای پیکربندی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam

مدل تصادفی RandomModel

روال مدل تصادفی(cfg &: پیکربندی، seed: صحیح۶۴): مدل
مدل با وزن‌های تصادفی؛ برای آزمون بی دانلود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: llm-Generate.salam