llama-model.cpp 224 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144
  1. #include "llama-model.h"
  2. #include "llama-impl.h"
  3. #include "llama-mmap.h"
  4. #include "llama-model-loader.h"
  5. #include "ggml-cpp.h"
  6. #include <algorithm>
  7. #include <cassert>
  8. #include <cstring>
  9. #include <functional>
  10. #include <map>
  11. #include <sstream>
  12. #include <stdexcept>
  13. const char * llm_type_name(llm_type type) {
  14. switch (type) {
  15. case LLM_TYPE_14M: return "14M";
  16. case LLM_TYPE_17M: return "17M";
  17. case LLM_TYPE_22M: return "22M";
  18. case LLM_TYPE_33M: return "33M";
  19. case LLM_TYPE_60M: return "60M";
  20. case LLM_TYPE_70M: return "70M";
  21. case LLM_TYPE_80M: return "80M";
  22. case LLM_TYPE_109M: return "109M";
  23. case LLM_TYPE_137M: return "137M";
  24. case LLM_TYPE_160M: return "160M";
  25. case LLM_TYPE_220M: return "220M";
  26. case LLM_TYPE_250M: return "250M";
  27. case LLM_TYPE_270M: return "270M";
  28. case LLM_TYPE_335M: return "335M";
  29. case LLM_TYPE_410M: return "410M";
  30. case LLM_TYPE_450M: return "450M";
  31. case LLM_TYPE_770M: return "770M";
  32. case LLM_TYPE_780M: return "780M";
  33. case LLM_TYPE_0_5B: return "0.5B";
  34. case LLM_TYPE_1B: return "1B";
  35. case LLM_TYPE_1_3B: return "1.3B";
  36. case LLM_TYPE_1_4B: return "1.4B";
  37. case LLM_TYPE_1_5B: return "1.5B";
  38. case LLM_TYPE_1_6B: return "1.6B";
  39. case LLM_TYPE_2B: return "2B";
  40. case LLM_TYPE_2_8B: return "2.8B";
  41. case LLM_TYPE_3B: return "3B";
  42. case LLM_TYPE_4B: return "4B";
  43. case LLM_TYPE_6B: return "6B";
  44. case LLM_TYPE_6_9B: return "6.9B";
  45. case LLM_TYPE_7B: return "7B";
  46. case LLM_TYPE_8B: return "8B";
  47. case LLM_TYPE_9B: return "9B";
  48. case LLM_TYPE_11B: return "11B";
  49. case LLM_TYPE_12B: return "12B";
  50. case LLM_TYPE_13B: return "13B";
  51. case LLM_TYPE_14B: return "14B";
  52. case LLM_TYPE_15B: return "15B";
  53. case LLM_TYPE_16B: return "16B";
  54. case LLM_TYPE_20B: return "20B";
  55. case LLM_TYPE_30B: return "30B";
  56. case LLM_TYPE_32B: return "32B";
  57. case LLM_TYPE_34B: return "34B";
  58. case LLM_TYPE_35B: return "35B";
  59. case LLM_TYPE_40B: return "40B";
  60. case LLM_TYPE_65B: return "65B";
  61. case LLM_TYPE_70B: return "70B";
  62. case LLM_TYPE_236B: return "236B";
  63. case LLM_TYPE_314B: return "314B";
  64. case LLM_TYPE_671B: return "671B";
  65. case LLM_TYPE_SMALL: return "0.1B";
  66. case LLM_TYPE_MEDIUM: return "0.4B";
  67. case LLM_TYPE_LARGE: return "0.8B";
  68. case LLM_TYPE_XL: return "1.5B";
  69. case LLM_TYPE_A1_7B: return "A1.7B";
  70. case LLM_TYPE_A2_7B: return "A2.7B";
  71. case LLM_TYPE_8x7B: return "8x7B";
  72. case LLM_TYPE_8x22B: return "8x22B";
  73. case LLM_TYPE_16x12B: return "16x12B";
  74. case LLM_TYPE_16x3_8B: return "16x3.8B";
  75. case LLM_TYPE_10B_128x3_66B: return "10B+128x3.66B";
  76. case LLM_TYPE_57B_A14B: return "57B.A14B";
  77. case LLM_TYPE_27B: return "27B";
  78. default: return "?B";
  79. }
  80. }
  81. static const char * llama_expert_gating_func_name(llama_expert_gating_func_type type) {
  82. switch (type) {
  83. case LLAMA_EXPERT_GATING_FUNC_TYPE_SOFTMAX: return "softmax";
  84. case LLAMA_EXPERT_GATING_FUNC_TYPE_SIGMOID: return "sigmoid";
  85. default: return "unknown";
  86. }
  87. }
  88. static const std::map<llama_rope_scaling_type, const char *> LLAMA_ROPE_SCALING_TYPES = {
  89. { LLAMA_ROPE_SCALING_TYPE_NONE, "none" },
  90. { LLAMA_ROPE_SCALING_TYPE_LINEAR, "linear" },
  91. { LLAMA_ROPE_SCALING_TYPE_YARN, "yarn" },
  92. { LLAMA_ROPE_SCALING_TYPE_LONGROPE, "longrope" },
  93. };
  94. static llama_rope_scaling_type llama_rope_scaling_type_from_string(const std::string & name) {
  95. for (const auto & kv : LLAMA_ROPE_SCALING_TYPES) {
  96. if (kv.second == name) {
  97. return (llama_rope_scaling_type) kv.first;
  98. }
  99. }
  100. return LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED;
  101. }
  102. // checks if the weight tensor can be used with the specified buffer type and device
  103. static bool weight_buft_supported(const llama_hparams & hparams, ggml_tensor * w, ggml_op op, ggml_backend_buffer_type_t buft, ggml_backend_dev_t dev) {
  104. GGML_ASSERT(w != nullptr);
  105. if (op == GGML_OP_NONE) {
  106. return true;
  107. }
  108. ggml_init_params params = {
  109. /*.mem_size =*/ ggml_tensor_overhead()*8,
  110. /*.mem_buffer =*/ NULL,
  111. /*.no_alloc =*/ true,
  112. };
  113. ggml_context_ptr ctx_ptr { ggml_init(params) };
  114. if (!ctx_ptr) {
  115. throw std::runtime_error(format("failed to create ggml context"));
  116. }
  117. ggml_context * ctx = ctx_ptr.get();
  118. ggml_tensor * op_tensor = nullptr;
  119. switch (op) {
  120. case GGML_OP_GET_ROWS:
  121. {
  122. ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 512);
  123. op_tensor = ggml_get_rows(ctx, w, b);
  124. } break;
  125. case GGML_OP_MUL_MAT:
  126. {
  127. ggml_tensor * b = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, w->ne[0], 512, w->ne[2], w->ne[3]);
  128. op_tensor = ggml_mul_mat(ctx, w, b);
  129. } break;
  130. case GGML_OP_MUL_MAT_ID:
  131. {
  132. int n_expert_used = hparams.n_expert_used;
  133. ggml_tensor * b = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, w->ne[0], n_expert_used, 512);
  134. ggml_tensor * ids = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, n_expert_used, 512);
  135. op_tensor = ggml_mul_mat_id(ctx, w, b, ids);
  136. } break;
  137. case GGML_OP_ADD:
  138. {
  139. ggml_tensor * a = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, w->ne[0], w->ne[1], w->ne[2], w->ne[3]);
  140. op_tensor = ggml_add(ctx, a, w);
  141. } break;
  142. case GGML_OP_MUL:
  143. {
  144. ggml_tensor * a = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, w->ne[0], w->ne[1], w->ne[2], w->ne[3]);
  145. op_tensor = ggml_mul(ctx, a, w);
  146. } break;
  147. case GGML_OP_DIV:
  148. {
  149. ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, w->ne[0]);
  150. op_tensor = ggml_div(ctx, a, w);
  151. } break;
  152. case GGML_OP_ROPE:
  153. {
  154. int n_embd_head = hparams.n_embd_head_v;
  155. int n_head = hparams.n_head();
  156. ggml_tensor * a = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, n_embd_head, n_head, 512);
  157. ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 512);
  158. op_tensor = ggml_rope_ext(
  159. ctx, a, b, w,
  160. 0, 0, 0, 0, 0,
  161. 0, 0, 0, 0
  162. );
  163. } break;
  164. case GGML_OP_SSM_CONV:
  165. {
  166. // FIXME
  167. ggml_tensor * conv_x = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 12345, w->ne[1], 6789);
  168. op_tensor = ggml_ssm_conv(ctx, conv_x, w);
  169. } break;
  170. case GGML_OP_SSM_SCAN:
  171. {
  172. // FIXME
  173. const int64_t d_state = w->ne[0];
  174. const int64_t d_inner = w->ne[1];
  175. const int64_t n_seq_tokens = 512;
  176. const int64_t n_seqs = 1;
  177. ggml_tensor * s = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, d_state, d_inner, n_seqs);
  178. ggml_tensor * x = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, d_inner, n_seq_tokens, n_seqs);
  179. ggml_tensor * dt = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, d_inner, n_seq_tokens, n_seqs);
  180. ggml_tensor * B = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, d_state, n_seq_tokens, n_seqs);
  181. ggml_tensor * C = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, d_state, n_seq_tokens, n_seqs);
  182. op_tensor = ggml_ssm_scan(ctx, s, x, dt, w, B, C);
  183. } break;
  184. case GGML_OP_RWKV_WKV6:
  185. {
  186. // FIXME
  187. const int64_t S = 123;
  188. const int64_t H = 123;
  189. const int64_t n_tokens = 123;
  190. const int64_t n_seqs = 123;
  191. ggml_tensor * k = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, S, H, n_tokens);
  192. ggml_tensor * v = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, S, H, n_tokens);
  193. ggml_tensor * r = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, S, H, n_tokens);
  194. ggml_tensor * tf = w;
  195. ggml_tensor * td = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, S, H, n_tokens);
  196. ggml_tensor * state = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, S, n_seqs, S, H);
  197. op_tensor = ggml_rwkv_wkv6(ctx, k, v, r, tf, td, state);
  198. } break;
  199. case GGML_OP_IM2COL:
  200. {
  201. const int n_embd = hparams.n_embd;
  202. ggml_tensor * b = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, n_embd, w->ne[1], 1, 1);
  203. op_tensor = ggml_im2col(ctx, w, b, 1, 0, 0, 0, 1, 0, false, GGML_TYPE_F16);
  204. } break;
  205. default:
  206. GGML_ABORT("%s: missing test for op %s for tensor %s", __func__, ggml_op_name(op), w->name);
  207. }
  208. // create a temporary dummy buffer for the weight so that supports_op can check the buffer type
  209. GGML_ASSERT(w->buffer == nullptr);
  210. w->buffer = ggml_backend_buft_alloc_buffer(buft, 0);
  211. bool op_supported = ggml_backend_dev_supports_op(dev, op_tensor);
  212. ggml_backend_buffer_free(w->buffer);
  213. w->buffer = nullptr;
  214. return op_supported;
  215. }
  216. // lists of buffer types used for each layer
  217. using buft_list_t = std::vector<std::pair<ggml_backend_dev_t, ggml_backend_buffer_type_t>>;
  218. // find the first buffer type in the list that can use the tensor
  219. static ggml_backend_buffer_type_t select_weight_buft(const llama_hparams & hparams, ggml_tensor * tensor, ggml_op op, const buft_list_t & buft_list) {
  220. GGML_ASSERT(!buft_list.empty());
  221. for (const auto & cur : buft_list) {
  222. ggml_backend_dev_t cur_dev = cur.first;
  223. ggml_backend_buffer_type_t cur_buft = cur.second;
  224. if (weight_buft_supported(hparams, tensor, op, cur_buft, cur_dev)) {
  225. return cur_buft;
  226. }
  227. }
  228. return nullptr;
  229. }
  230. // CPU: ACCEL -> CPU extra -> GPU host -> CPU
  231. static buft_list_t make_cpu_buft_list(const std::vector<ggml_backend_dev_t> & devices) {
  232. buft_list_t buft_list;
  233. // add ACCEL buffer types
  234. for (size_t i = 0; i < ggml_backend_dev_count(); ++i) {
  235. ggml_backend_dev_t dev = ggml_backend_dev_get(i);
  236. if (ggml_backend_dev_type(dev) == GGML_BACKEND_DEVICE_TYPE_ACCEL) {
  237. auto * buft = ggml_backend_dev_buffer_type(dev);
  238. // skip
  239. if (buft != ggml_backend_cpu_buffer_type()) {
  240. buft_list.emplace_back(dev, buft);
  241. }
  242. }
  243. }
  244. // add extra buffer types
  245. auto * cpu_dev = ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_CPU);
  246. auto * cpu_reg = ggml_backend_dev_backend_reg(cpu_dev);
  247. auto ggml_backend_dev_get_extra_bufts_fn = (ggml_backend_dev_get_extra_bufts_t)
  248. ggml_backend_reg_get_proc_address(cpu_reg, "ggml_backend_dev_get_extra_bufts");
  249. if (ggml_backend_dev_get_extra_bufts_fn) {
  250. ggml_backend_buffer_type_t * extra_bufts = ggml_backend_dev_get_extra_bufts_fn(cpu_dev);
  251. while (extra_bufts && *extra_bufts) {
  252. buft_list.emplace_back(cpu_dev, *extra_bufts);
  253. ++extra_bufts;
  254. }
  255. }
  256. // add a host buffer type
  257. // storing the tensors in a host buffer is useful when the processing of large batches
  258. // is offloaded to a GPU device, since it reduces the time spent on data transfers
  259. // generally, this will be done using the first device in the list
  260. // a better approach would be to handle this on a weight-by-weight basis using the offload_op
  261. // function of the device to determine if it would benefit from being stored in a host buffer
  262. for (auto * dev : devices) {
  263. ggml_backend_buffer_type_t buft = ggml_backend_dev_host_buffer_type(dev);
  264. if (buft) {
  265. buft_list.emplace_back(dev, buft);
  266. break;
  267. }
  268. }
  269. // add the CPU buffer type
  270. for (size_t i = 0; i < ggml_backend_dev_count(); ++i) {
  271. ggml_backend_dev_t dev = ggml_backend_dev_get(i);
  272. if (ggml_backend_dev_type(dev) == GGML_BACKEND_DEVICE_TYPE_CPU) {
  273. buft_list.emplace_back(dev, ggml_backend_dev_buffer_type(dev));
  274. }
  275. }
  276. return buft_list;
  277. }
  278. // GPU: split if LLAMA_SPLIT_MODE_ROW -> GPU
  279. static buft_list_t make_gpu_buft_list(ggml_backend_dev_t dev, enum llama_split_mode split_mode, const float * tensor_split) {
  280. buft_list_t buft_list;
  281. // add the device split buffer type if requested and available
  282. if (split_mode == LLAMA_SPLIT_MODE_ROW) {
  283. ggml_backend_reg_t reg = ggml_backend_dev_backend_reg(dev);
  284. auto ggml_backend_split_buffer_type_fn = (ggml_backend_split_buffer_type_t)
  285. ggml_backend_reg_get_proc_address(reg, "ggml_backend_split_buffer_type");
  286. if (ggml_backend_split_buffer_type_fn) {
  287. size_t dev_index = [&]() {
  288. auto * reg = ggml_backend_dev_backend_reg(dev);
  289. for (size_t i = 0; i < ggml_backend_reg_dev_count(reg); ++i) {
  290. if (ggml_backend_reg_dev_get(reg, i) == dev) {
  291. return i;
  292. }
  293. }
  294. throw std::runtime_error(format("device %s not found in its backend reg", ggml_backend_dev_name(dev)));
  295. }();
  296. auto * buft = ggml_backend_split_buffer_type_fn(dev_index, tensor_split);
  297. if (buft != nullptr) {
  298. buft_list.emplace_back(dev, buft);
  299. }
  300. }
  301. }
  302. // add the device default buffer type
  303. buft_list.emplace_back(dev, ggml_backend_dev_buffer_type(dev));
  304. return buft_list;
  305. }
  306. struct llama_model::impl {
  307. impl() {}
  308. ~impl() {}
  309. uint64_t n_elements = 0;
  310. size_t n_bytes = 0;
  311. std::string desc_str;
  312. // model memory mapped files
  313. llama_mmaps mappings;
  314. // objects representing data potentially being locked in memory
  315. llama_mlocks mlock_bufs;
  316. llama_mlocks mlock_mmaps;
  317. // contexts where the model tensors metadata is stored
  318. std::vector<ggml_context_ptr> ctxs;
  319. // the model memory buffers for the tensor data
  320. std::vector<ggml_backend_buffer_ptr> bufs;
  321. buft_list_t cpu_buft_list;
  322. std::map<ggml_backend_dev_t, buft_list_t> gpu_buft_list;
  323. struct layer_dev {
  324. ggml_backend_dev_t dev;
  325. buft_list_t * buft_list;
  326. };
  327. layer_dev dev_input = {};
  328. layer_dev dev_output = {};
  329. std::vector<layer_dev> dev_layer;
  330. };
  331. llama_model::llama_model(const struct llama_model_params & params) : params(params), pimpl(std::make_unique<impl>()) {
  332. }
  333. llama_model::~llama_model() {}
  334. void llama_model::load_stats(llama_model_loader & ml) {
  335. pimpl->n_elements = ml.n_elements;
  336. pimpl->n_bytes = ml.n_bytes;
  337. }
  338. void llama_model::load_arch(llama_model_loader & ml) {
  339. arch = ml.get_arch();
  340. if (arch == LLM_ARCH_UNKNOWN) {
  341. throw std::runtime_error("unknown model architecture: '" + ml.get_arch_name() + "'");
  342. }
  343. }
  344. void llama_model::load_hparams(llama_model_loader & ml) {
  345. const gguf_context * ctx = ml.meta.get();
  346. // get metadata as string
  347. for (int i = 0; i < gguf_get_n_kv(ctx); i++) {
  348. enum gguf_type type = gguf_get_kv_type(ctx, i);
  349. if (type == GGUF_TYPE_ARRAY) {
  350. continue;
  351. }
  352. const char * name = gguf_get_key(ctx, i);
  353. const std::string value = gguf_kv_to_str(ctx, i);
  354. gguf_kv.emplace(name, value);
  355. }
  356. // get general kv
  357. ml.get_key(LLM_KV_GENERAL_NAME, name, false);
  358. ml.get_key(LLM_KV_VOCAB_SIZE, hparams.n_vocab, false) || ml.get_arr_n(LLM_KV_TOKENIZER_LIST, hparams.n_vocab, false);
  359. // everything past this point is not vocab-related
  360. if (hparams.vocab_only) {
  361. return;
  362. }
  363. ml.get_key(LLM_KV_CONTEXT_LENGTH, hparams.n_ctx_train);
  364. ml.get_key(LLM_KV_EMBEDDING_LENGTH, hparams.n_embd);
  365. ml.get_key(LLM_KV_BLOCK_COUNT, hparams.n_layer);
  366. ml.get_key(LLM_KV_EXPERT_COUNT, hparams.n_expert, false);
  367. ml.get_key(LLM_KV_EXPERT_USED_COUNT, hparams.n_expert_used, false);
  368. ml.get_key(LLM_KV_VOCAB_SIZE, hparams.n_vocab, false);
  369. if (arch == LLM_ARCH_WAVTOKENIZER_DEC) {
  370. ml.get_key(LLM_KV_FEATURES_LENGTH, hparams.n_embd_features);
  371. ml.get_key(LLM_KV_POSNET_EMBEDDING_LENGTH, hparams.posnet.n_embd);
  372. ml.get_key(LLM_KV_POSNET_BLOCK_COUNT, hparams.posnet.n_layer);
  373. ml.get_key(LLM_KV_CONVNEXT_EMBEDDING_LENGTH, hparams.convnext.n_embd);
  374. ml.get_key(LLM_KV_CONVNEXT_BLOCK_COUNT, hparams.convnext.n_layer);
  375. }
  376. GGML_ASSERT(hparams.n_expert <= LLAMA_MAX_EXPERTS);
  377. GGML_ASSERT(hparams.n_expert_used <= hparams.n_expert);
  378. if (hparams.n_expert > 0) {
  379. GGML_ASSERT(hparams.n_expert_used > 0);
  380. } else {
  381. GGML_ASSERT(hparams.n_expert_used == 0);
  382. }
  383. // zero-out the array hparams
  384. std::fill(hparams.n_head_arr.begin(), hparams.n_head_arr.end(), 0);
  385. std::fill(hparams.n_head_kv_arr.begin(), hparams.n_head_kv_arr.end(), 0);
  386. std::fill(hparams.n_ff_arr.begin(), hparams.n_ff_arr.end(), 0);
  387. std::fill(hparams.cross_attn_layers.begin(), hparams.cross_attn_layers.end(), -1);
  388. ml.get_key_or_arr(LLM_KV_FEED_FORWARD_LENGTH, hparams.n_ff_arr, hparams.n_layer, false);
  389. ml.get_key_or_arr(LLM_KV_ATTENTION_HEAD_COUNT, hparams.n_head_arr, hparams.n_layer, false);
  390. ml.get_arr(LLM_KV_ATTENTION_CROSS_ATTENTION_LAYERS, hparams.cross_attn_layers, false);
  391. // n_head_kv is optional, default to n_head
  392. hparams.n_head_kv_arr = hparams.n_head_arr;
  393. ml.get_key_or_arr(LLM_KV_ATTENTION_HEAD_COUNT_KV, hparams.n_head_kv_arr, hparams.n_layer, false);
  394. bool rope_finetuned = false;
  395. ml.get_key(LLM_KV_ROPE_SCALING_FINETUNED, rope_finetuned, false);
  396. hparams.rope_finetuned = rope_finetuned;
  397. hparams.n_ctx_orig_yarn = hparams.n_ctx_train;
  398. ml.get_key(LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, hparams.n_ctx_orig_yarn, false);
  399. // rope_freq_base (optional)
  400. hparams.rope_freq_base_train = 10000.0f;
  401. ml.get_key(LLM_KV_ROPE_FREQ_BASE, hparams.rope_freq_base_train, false);
  402. std::string rope_scaling("linear");
  403. ml.get_key(LLM_KV_ROPE_SCALING_TYPE, rope_scaling, false);
  404. hparams.rope_scaling_type_train = llama_rope_scaling_type_from_string(rope_scaling);
  405. GGML_ASSERT(hparams.rope_scaling_type_train != LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED);
  406. // rope_freq_scale (inverse of the kv) is optional
  407. float ropescale = 0.0f;
  408. if (!ml.get_key(LLM_KV_ROPE_SCALING_FACTOR, ropescale, false)) {
  409. // try the old key name
  410. ml.get_key(LLM_KV_ROPE_SCALE_LINEAR, ropescale, false);
  411. }
  412. hparams.rope_freq_scale_train = ropescale == 0.0f ? 1.0f : 1.0f/ropescale;
  413. ml.get_key(LLM_KV_ROPE_SCALING_ATTN_FACTOR, hparams.rope_attn_factor, false);
  414. // non-transformer models do not have attention heads
  415. if (hparams.n_head() > 0) {
  416. // gpt-neox n_rot = rotary_pct * (n_embd / n_head)
  417. // gpt-j n_rot = rotary_dim
  418. hparams.n_embd_head_k = hparams.n_embd / hparams.n_head();
  419. ml.get_key(LLM_KV_ATTENTION_KEY_LENGTH, hparams.n_embd_head_k, false);
  420. hparams.n_embd_head_v = hparams.n_embd / hparams.n_head();
  421. ml.get_key(LLM_KV_ATTENTION_VALUE_LENGTH, hparams.n_embd_head_v, false);
  422. // sanity check for n_rot (optional)
  423. hparams.n_rot = hparams.n_embd_head_k;
  424. ml.get_key(LLM_KV_ROPE_DIMENSION_COUNT, hparams.n_rot, false);
  425. if (arch == LLM_ARCH_LLAMA || arch == LLM_ARCH_MLLAMA || arch == LLM_ARCH_DECI || arch == LLM_ARCH_FALCON) {
  426. if (hparams.n_rot != hparams.n_embd_head_k) {
  427. throw std::runtime_error(format("invalid n_rot: %u, expected %u", hparams.n_rot, hparams.n_embd_head_k));
  428. }
  429. }
  430. } else {
  431. hparams.n_rot = 0;
  432. hparams.n_embd_head_k = 0;
  433. hparams.n_embd_head_v = 0;
  434. }
  435. // for differentiating model types
  436. uint32_t n_vocab = 0;
  437. ml.get_key(LLM_KV_VOCAB_SIZE, n_vocab, false) || ml.get_arr_n(LLM_KV_TOKENIZER_LIST, n_vocab, false);
  438. // arch-specific KVs
  439. switch (arch) {
  440. case LLM_ARCH_LLAMA:
  441. {
  442. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  443. if (hparams.n_expert == 8) {
  444. switch (hparams.n_layer) {
  445. case 32: type = LLM_TYPE_8x7B; break;
  446. case 56: type = LLM_TYPE_8x22B; break;
  447. default: type = LLM_TYPE_UNKNOWN;
  448. }
  449. } else {
  450. switch (hparams.n_layer) {
  451. case 16: type = LLM_TYPE_1B; break; // Llama 3.2 1B
  452. case 22: type = LLM_TYPE_1B; break;
  453. case 26: type = LLM_TYPE_3B; break;
  454. case 28: type = LLM_TYPE_3B; break; // Llama 3.2 3B
  455. // granite uses a vocab with len 49152
  456. case 32: type = n_vocab == 49152 ? LLM_TYPE_3B : (n_vocab < 40000 ? LLM_TYPE_7B : LLM_TYPE_8B); break;
  457. case 36: type = LLM_TYPE_8B; break; // granite
  458. case 40: type = LLM_TYPE_13B; break;
  459. case 48: type = LLM_TYPE_34B; break;
  460. case 60: type = LLM_TYPE_30B; break;
  461. case 80: type = hparams.n_head() == hparams.n_head_kv() ? LLM_TYPE_65B : LLM_TYPE_70B; break;
  462. default: type = LLM_TYPE_UNKNOWN;
  463. }
  464. }
  465. } break;
  466. case LLM_ARCH_MLLAMA:
  467. {
  468. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  469. switch (hparams.n_layer) {
  470. case 40: type = LLM_TYPE_11B; break;
  471. case 100: type = LLM_TYPE_90B; break;
  472. default: type = LLM_TYPE_UNKNOWN;
  473. }
  474. } break;
  475. case LLM_ARCH_DECI:
  476. {
  477. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  478. switch (hparams.n_layer) {
  479. case 32: type = LLM_TYPE_7B; break;
  480. case 80: type = LLM_TYPE_70B; break;
  481. default: type = LLM_TYPE_UNKNOWN;
  482. }
  483. } break;
  484. case LLM_ARCH_MINICPM:
  485. {
  486. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  487. ml.get_key(LLM_KV_EMBEDDING_SCALE, hparams.f_embedding_scale);
  488. ml.get_key(LLM_KV_RESIDUAL_SCALE, hparams.f_residual_scale);
  489. ml.get_key(LLM_KV_LOGIT_SCALE, hparams.f_logit_scale);
  490. switch (hparams.n_layer) {
  491. case 52: type = LLM_TYPE_1B; break;
  492. case 40: type = LLM_TYPE_2B; break;
  493. default: type = LLM_TYPE_UNKNOWN;
  494. }
  495. } break;
  496. case LLM_ARCH_MINICPM3:
  497. {
  498. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  499. ml.get_key(LLM_KV_ATTENTION_Q_LORA_RANK, hparams.n_lora_q);
  500. ml.get_key(LLM_KV_ATTENTION_KV_LORA_RANK, hparams.n_lora_kv);
  501. switch (hparams.n_layer) {
  502. case 62: type = LLM_TYPE_4B; break;
  503. default: type = LLM_TYPE_UNKNOWN;
  504. }
  505. } break;
  506. case LLM_ARCH_GROK:
  507. {
  508. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  509. switch (hparams.n_layer) {
  510. case 64: type = LLM_TYPE_314B; break;
  511. default: type = LLM_TYPE_UNKNOWN;
  512. }
  513. } break;
  514. case LLM_ARCH_FALCON:
  515. {
  516. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  517. switch (hparams.n_layer) {
  518. case 32: type = LLM_TYPE_7B; break;
  519. case 60: type = LLM_TYPE_40B; break;
  520. default: type = LLM_TYPE_UNKNOWN;
  521. }
  522. } break;
  523. case LLM_ARCH_BAICHUAN:
  524. {
  525. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  526. switch (hparams.n_layer) {
  527. case 32: type = LLM_TYPE_7B; break;
  528. case 40: type = LLM_TYPE_13B; break;
  529. default: type = LLM_TYPE_UNKNOWN;
  530. }
  531. if (type == LLM_TYPE_13B) {
  532. // TODO: become GGUF KV parameter
  533. hparams.f_max_alibi_bias = 8.0f;
  534. }
  535. } break;
  536. case LLM_ARCH_STARCODER:
  537. {
  538. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  539. switch (hparams.n_layer) {
  540. case 24: type = LLM_TYPE_1B; break;
  541. case 36: type = LLM_TYPE_3B; break;
  542. case 42: type = LLM_TYPE_7B; break;
  543. case 40: type = LLM_TYPE_15B; break;
  544. default: type = LLM_TYPE_UNKNOWN;
  545. }
  546. } break;
  547. case LLM_ARCH_REFACT:
  548. {
  549. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  550. switch (hparams.n_layer) {
  551. case 32: type = LLM_TYPE_1B; break;
  552. default: type = LLM_TYPE_UNKNOWN;
  553. }
  554. // TODO: become GGUF KV parameter
  555. hparams.f_max_alibi_bias = 8.0f;
  556. } break;
  557. case LLM_ARCH_BERT:
  558. {
  559. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  560. ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn);
  561. ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type, false);
  562. switch (hparams.n_layer) {
  563. case 3:
  564. type = LLM_TYPE_17M; break; // bge-micro
  565. case 6:
  566. type = LLM_TYPE_22M; break; // MiniLM-L6
  567. case 12:
  568. switch (hparams.n_embd) {
  569. case 384: type = LLM_TYPE_33M; break; // MiniLM-L12, bge-small
  570. case 768: type = LLM_TYPE_109M; break; // bge-base
  571. default: type = LLM_TYPE_UNKNOWN;
  572. } break;
  573. case 24:
  574. type = LLM_TYPE_335M; break; // bge-large
  575. default: type = LLM_TYPE_UNKNOWN;
  576. }
  577. } break;
  578. case LLM_ARCH_JINA_BERT_V2:
  579. {
  580. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  581. ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn);
  582. ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type, false);
  583. hparams.f_max_alibi_bias = 8.0f;
  584. switch (hparams.n_layer) {
  585. case 4: type = LLM_TYPE_33M; break; // jina-embeddings-small
  586. case 12: type = LLM_TYPE_137M; break; // jina-embeddings-base
  587. default: type = LLM_TYPE_UNKNOWN;
  588. }
  589. } break;
  590. case LLM_ARCH_NOMIC_BERT:
  591. {
  592. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  593. ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn);
  594. ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type);
  595. if (hparams.n_layer == 12 && hparams.n_embd == 768) {
  596. type = LLM_TYPE_137M;
  597. }
  598. } break;
  599. case LLM_ARCH_BLOOM:
  600. {
  601. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  602. switch (hparams.n_layer) {
  603. case 24: type = LLM_TYPE_1B; break;
  604. case 30:
  605. switch (hparams.n_embd) {
  606. case 2560: type = LLM_TYPE_3B; break;
  607. case 4096: type = LLM_TYPE_7B; break;
  608. default: type = LLM_TYPE_UNKNOWN;
  609. } break;
  610. default: type = LLM_TYPE_UNKNOWN;
  611. }
  612. // TODO: become GGUF KV parameter
  613. hparams.f_max_alibi_bias = 8.0f;
  614. } break;
  615. case LLM_ARCH_MPT:
  616. {
  617. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  618. ml.get_key(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv, false);
  619. ml.get_key(LLM_KV_ATTENTION_MAX_ALIBI_BIAS, hparams.f_max_alibi_bias);
  620. switch (hparams.n_layer) {
  621. case 32: type = LLM_TYPE_7B; break;
  622. case 48: type = LLM_TYPE_30B; break;
  623. default: type = LLM_TYPE_UNKNOWN;
  624. }
  625. } break;
  626. case LLM_ARCH_STABLELM:
  627. {
  628. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  629. switch (hparams.n_layer) {
  630. case 24: type = LLM_TYPE_1B; break;
  631. case 32: type = LLM_TYPE_3B; break;
  632. case 40: type = LLM_TYPE_12B; break;
  633. default: type = LLM_TYPE_UNKNOWN;
  634. }
  635. } break;
  636. case LLM_ARCH_QWEN:
  637. {
  638. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  639. switch (hparams.n_layer) {
  640. case 32: type = LLM_TYPE_7B; break;
  641. case 40: type = LLM_TYPE_13B; break;
  642. default: type = LLM_TYPE_UNKNOWN;
  643. }
  644. } break;
  645. case LLM_ARCH_QWEN2VL:
  646. {
  647. ml.get_key_or_arr(LLM_KV_ROPE_DIMENSION_SECTIONS, hparams.rope_sections, 4, true);
  648. }
  649. // fall through
  650. case LLM_ARCH_QWEN2:
  651. {
  652. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  653. switch (hparams.n_layer) {
  654. case 24: type = hparams.n_embd == 1024 ? LLM_TYPE_0_5B : LLM_TYPE_1B; break;
  655. case 28: type = hparams.n_embd == 1536 ? LLM_TYPE_1_5B : LLM_TYPE_7B; break;
  656. case 32: type = LLM_TYPE_7B; break;
  657. case 36: type = LLM_TYPE_3B; break;
  658. case 40: type = hparams.n_head() == 20 ? LLM_TYPE_4B : LLM_TYPE_13B; break;
  659. case 48: type = LLM_TYPE_14B; break;
  660. case 64: type = LLM_TYPE_32B; break;
  661. case 80: type = LLM_TYPE_70B; break;
  662. default: type = LLM_TYPE_UNKNOWN;
  663. }
  664. } break;
  665. case LLM_ARCH_QWEN2MOE:
  666. {
  667. ml.get_key(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp, false);
  668. ml.get_key(LLM_KV_EXPERT_SHARED_FEED_FORWARD_LENGTH, hparams.n_ff_shexp, false);
  669. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  670. switch (hparams.n_layer) {
  671. case 24: type = LLM_TYPE_A2_7B; break;
  672. case 28: type = LLM_TYPE_57B_A14B; break;
  673. default: type = LLM_TYPE_UNKNOWN;
  674. }
  675. } break;
  676. case LLM_ARCH_PHI2:
  677. {
  678. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  679. switch (hparams.n_layer) {
  680. case 24: type = LLM_TYPE_1B; break;
  681. case 32: type = LLM_TYPE_3B; break;
  682. default: type = LLM_TYPE_UNKNOWN;
  683. }
  684. } break;
  685. case LLM_ARCH_PHI3:
  686. {
  687. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  688. switch (hparams.n_layer) {
  689. case 24: type = LLM_TYPE_1B; break;
  690. case 32: type = LLM_TYPE_3B; break;
  691. case 40: type = LLM_TYPE_14B; break;
  692. default: type = LLM_TYPE_UNKNOWN;
  693. }
  694. // for backward compatibility ; see: https://github.com/ggerganov/llama.cpp/pull/8931
  695. if ((hparams.n_layer == 32 || hparams.n_layer == 40) && hparams.n_ctx_train == 4096) {
  696. // default value for Phi-3-mini-4k-instruct and Phi-3-medium-4k-instruct
  697. hparams.n_swa = 2047;
  698. } else if (hparams.n_layer == 32 && hparams.n_head_kv(0) == 32 && hparams.n_ctx_train == 131072) {
  699. // default value for Phi-3-mini-128k-instruct
  700. hparams.n_swa = 262144;
  701. } else if (hparams.n_layer == 40 && hparams.n_ctx_train == 131072) {
  702. // default value for Phi-3-medium-128k-instruct
  703. hparams.n_swa = 131072;
  704. }
  705. bool found_swa = ml.get_key(LLM_KV_ATTENTION_SLIDING_WINDOW, hparams.n_swa, false);
  706. if (!found_swa && hparams.n_swa == 0) {
  707. throw std::runtime_error("invalid value for sliding_window");
  708. }
  709. } break;
  710. case LLM_ARCH_PHIMOE:
  711. {
  712. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  713. switch (hparams.n_layer) {
  714. case 32: type = LLM_TYPE_16x3_8B; break;
  715. default: type = LLM_TYPE_UNKNOWN;
  716. }
  717. } break;
  718. case LLM_ARCH_PLAMO:
  719. {
  720. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  721. switch (hparams.n_layer) {
  722. case 40: type = LLM_TYPE_13B; break;
  723. default: type = LLM_TYPE_UNKNOWN;
  724. }
  725. } break;
  726. case LLM_ARCH_GPT2:
  727. {
  728. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  729. switch (hparams.n_layer) {
  730. case 12: type = LLM_TYPE_SMALL; break;
  731. case 24: type = LLM_TYPE_MEDIUM; break;
  732. case 36: type = LLM_TYPE_LARGE; break;
  733. case 48: type = LLM_TYPE_XL; break;
  734. default: type = LLM_TYPE_UNKNOWN;
  735. }
  736. } break;
  737. case LLM_ARCH_CODESHELL:
  738. {
  739. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  740. switch (hparams.n_layer) {
  741. case 42: type = LLM_TYPE_7B; break;
  742. default: type = LLM_TYPE_UNKNOWN;
  743. }
  744. } break;
  745. case LLM_ARCH_ORION:
  746. {
  747. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  748. switch (hparams.n_layer) {
  749. case 40: type = LLM_TYPE_14B; break;
  750. default: type = LLM_TYPE_UNKNOWN;
  751. }
  752. } break;
  753. case LLM_ARCH_INTERNLM2:
  754. {
  755. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  756. switch (hparams.n_layer) {
  757. case 32: type = LLM_TYPE_7B; break;
  758. case 48: type = LLM_TYPE_20B; break;
  759. default: type = LLM_TYPE_UNKNOWN;
  760. }
  761. } break;
  762. case LLM_ARCH_GEMMA:
  763. {
  764. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  765. switch (hparams.n_layer) {
  766. case 18: type = LLM_TYPE_2B; break;
  767. case 28: type = LLM_TYPE_7B; break;
  768. default: type = LLM_TYPE_UNKNOWN;
  769. }
  770. } break;
  771. case LLM_ARCH_GEMMA2:
  772. {
  773. hparams.n_swa = 4096; // default value of gemma 2
  774. ml.get_key(LLM_KV_ATTENTION_SLIDING_WINDOW, hparams.n_swa, false);
  775. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  776. ml.get_key(LLM_KV_ATTN_LOGIT_SOFTCAPPING, hparams.f_attn_logit_softcapping, false);
  777. ml.get_key(LLM_KV_FINAL_LOGIT_SOFTCAPPING, hparams.f_final_logit_softcapping, false);
  778. hparams.attn_soft_cap = true;
  779. switch (hparams.n_layer) {
  780. case 26: type = LLM_TYPE_2B; break;
  781. case 42: type = LLM_TYPE_9B; break;
  782. case 46: type = LLM_TYPE_27B; break;
  783. default: type = LLM_TYPE_UNKNOWN;
  784. }
  785. } break;
  786. case LLM_ARCH_STARCODER2:
  787. {
  788. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  789. switch (hparams.n_layer) {
  790. case 30: type = LLM_TYPE_3B; break;
  791. case 32: type = LLM_TYPE_7B; break;
  792. case 40: type = LLM_TYPE_15B; break;
  793. case 52: type = LLM_TYPE_20B; break; // granite
  794. case 88: type = LLM_TYPE_34B; break; // granite
  795. default: type = LLM_TYPE_UNKNOWN;
  796. }
  797. } break;
  798. case LLM_ARCH_MAMBA:
  799. {
  800. ml.get_key(LLM_KV_SSM_CONV_KERNEL, hparams.ssm_d_conv);
  801. ml.get_key(LLM_KV_SSM_INNER_SIZE, hparams.ssm_d_inner);
  802. ml.get_key(LLM_KV_SSM_STATE_SIZE, hparams.ssm_d_state);
  803. ml.get_key(LLM_KV_SSM_TIME_STEP_RANK, hparams.ssm_dt_rank);
  804. ml.get_key(LLM_KV_SSM_DT_B_C_RMS, hparams.ssm_dt_b_c_rms, false);
  805. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  806. switch (hparams.n_layer) {
  807. case 24:
  808. switch (hparams.n_embd) {
  809. case 768: type = LLM_TYPE_SMALL; break;
  810. default: type = LLM_TYPE_UNKNOWN;
  811. } break;
  812. case 48:
  813. switch (hparams.n_embd) {
  814. case 1024: type = LLM_TYPE_MEDIUM; break;
  815. case 1536: type = LLM_TYPE_LARGE; break;
  816. case 2048: type = LLM_TYPE_XL; break;
  817. default: type = LLM_TYPE_UNKNOWN;
  818. } break;
  819. case 64:
  820. switch (hparams.n_embd) {
  821. case 2560: type = LLM_TYPE_3B; break;
  822. default: type = LLM_TYPE_UNKNOWN;
  823. } break;
  824. default: type = LLM_TYPE_UNKNOWN;
  825. }
  826. } break;
  827. case LLM_ARCH_XVERSE:
  828. {
  829. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  830. switch (hparams.n_layer) {
  831. case 32: type = LLM_TYPE_7B; break;
  832. case 40: type = LLM_TYPE_13B; break;
  833. case 80: type = LLM_TYPE_65B; break;
  834. default: type = LLM_TYPE_UNKNOWN;
  835. }
  836. } break;
  837. case LLM_ARCH_COMMAND_R:
  838. {
  839. ml.get_key(LLM_KV_LOGIT_SCALE, hparams.f_logit_scale);
  840. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  841. switch (hparams.n_layer) {
  842. case 40: type = LLM_TYPE_35B; break;
  843. default: type = LLM_TYPE_UNKNOWN;
  844. }
  845. } break;
  846. case LLM_ARCH_COHERE2:
  847. {
  848. ml.get_key(LLM_KV_ATTENTION_SLIDING_WINDOW, hparams.n_swa);
  849. ml.get_key(LLM_KV_LOGIT_SCALE, hparams.f_logit_scale);
  850. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  851. switch (hparams.n_layer) {
  852. case 32: type = LLM_TYPE_8B; break;
  853. default: type = LLM_TYPE_UNKNOWN;
  854. }
  855. } break;
  856. case LLM_ARCH_DBRX:
  857. {
  858. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  859. ml.get_key(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv);
  860. switch (hparams.n_layer) {
  861. case 40: type = LLM_TYPE_16x12B; break;
  862. default: type = LLM_TYPE_UNKNOWN;
  863. }
  864. } break;
  865. case LLM_ARCH_OLMO:
  866. {
  867. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  868. ml.get_key(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv, false);
  869. switch (hparams.n_layer) {
  870. case 22: type = LLM_TYPE_1B; break;
  871. case 32: type = LLM_TYPE_7B; break;
  872. case 80: type = LLM_TYPE_70B; break;
  873. default: type = LLM_TYPE_UNKNOWN;
  874. }
  875. } break;
  876. case LLM_ARCH_OLMO2:
  877. {
  878. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  879. switch (hparams.n_layer) {
  880. case 16: type = LLM_TYPE_1B; break;
  881. case 32: type = LLM_TYPE_7B; break;
  882. case 40: type = LLM_TYPE_13B; break;
  883. default: type = LLM_TYPE_UNKNOWN;
  884. }
  885. } break;
  886. case LLM_ARCH_OLMOE:
  887. {
  888. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  889. switch (hparams.n_layer) {
  890. case 16: type = LLM_TYPE_A1_7B; break;
  891. default: type = LLM_TYPE_UNKNOWN;
  892. }
  893. } break;
  894. case LLM_ARCH_OPENELM:
  895. {
  896. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  897. switch (hparams.n_layer) {
  898. case 16: type = LLM_TYPE_270M; break;
  899. case 20: type = LLM_TYPE_450M; break;
  900. case 28: type = LLM_TYPE_1B; break;
  901. case 36: type = LLM_TYPE_3B; break;
  902. default: type = LLM_TYPE_UNKNOWN;
  903. }
  904. } break;
  905. case LLM_ARCH_GPTNEOX:
  906. {
  907. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  908. ml.get_key(LLM_KV_USE_PARALLEL_RESIDUAL, hparams.use_par_res);
  909. switch (hparams.n_layer) {
  910. case 6:
  911. switch (hparams.n_ff()) {
  912. case 512: type = LLM_TYPE_14M; break;
  913. case 2048: type = LLM_TYPE_70M; break;
  914. default: type = LLM_TYPE_UNKNOWN;
  915. } break;
  916. case 12:
  917. switch (hparams.n_ff()) {
  918. case 3072: type = LLM_TYPE_160M; break;
  919. default: type = LLM_TYPE_UNKNOWN;
  920. } break;
  921. case 16:
  922. switch (hparams.n_ff()) {
  923. case 8192: type = LLM_TYPE_1B; break;
  924. default: type = LLM_TYPE_UNKNOWN;
  925. } break;
  926. case 24:
  927. switch (hparams.n_ff()) {
  928. case 4096: type = LLM_TYPE_410M; break;
  929. case 8192: type = LLM_TYPE_1_4B; break;
  930. default: type = LLM_TYPE_UNKNOWN;
  931. } break;
  932. case 32:
  933. switch (hparams.n_ff()) {
  934. case 10240: type = LLM_TYPE_2_8B; break;
  935. case 16384: type = LLM_TYPE_6_9B; break;
  936. default: type = LLM_TYPE_UNKNOWN;
  937. } break;
  938. case 36:
  939. switch (hparams.n_ff()) {
  940. case 20480: type = LLM_TYPE_12B; break;
  941. default: type = LLM_TYPE_UNKNOWN;
  942. } break;
  943. case 44:
  944. switch (hparams.n_ff()) {
  945. case 24576: type = LLM_TYPE_20B; break;
  946. default: type = LLM_TYPE_UNKNOWN;
  947. } break;
  948. default: type = LLM_TYPE_UNKNOWN;
  949. }
  950. } break;
  951. case LLM_ARCH_ARCTIC:
  952. {
  953. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  954. if (hparams.n_expert == 128) {
  955. switch (hparams.n_layer) {
  956. case 35: type = LLM_TYPE_10B_128x3_66B; break;
  957. default: type = LLM_TYPE_UNKNOWN;
  958. }
  959. } else {
  960. type = LLM_TYPE_UNKNOWN;
  961. }
  962. } break;
  963. case LLM_ARCH_DEEPSEEK:
  964. {
  965. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  966. ml.get_key(LLM_KV_LEADING_DENSE_BLOCK_COUNT, hparams.n_layer_dense_lead);
  967. ml.get_key(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp);
  968. ml.get_key(LLM_KV_EXPERT_SHARED_COUNT, hparams.n_expert_shared);
  969. ml.get_key(LLM_KV_EXPERT_WEIGHTS_SCALE, hparams.expert_weights_scale);
  970. switch (hparams.n_layer) {
  971. case 28: type = LLM_TYPE_20B; break;
  972. default: type = LLM_TYPE_UNKNOWN;
  973. }
  974. } break;
  975. case LLM_ARCH_DEEPSEEK2:
  976. {
  977. bool is_lite = (hparams.n_layer == 27);
  978. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  979. ml.get_key(LLM_KV_LEADING_DENSE_BLOCK_COUNT, hparams.n_layer_dense_lead);
  980. if (!is_lite) {
  981. ml.get_key(LLM_KV_ATTENTION_Q_LORA_RANK, hparams.n_lora_q);
  982. }
  983. ml.get_key(LLM_KV_ATTENTION_KV_LORA_RANK, hparams.n_lora_kv);
  984. ml.get_key(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp);
  985. ml.get_key(LLM_KV_EXPERT_SHARED_COUNT, hparams.n_expert_shared);
  986. ml.get_key(LLM_KV_EXPERT_WEIGHTS_SCALE, hparams.expert_weights_scale);
  987. ml.get_key(LLM_KV_EXPERT_WEIGHTS_NORM, hparams.expert_weights_norm, false);
  988. ml.get_key(LLM_KV_EXPERT_GATING_FUNC, hparams.expert_gating_func, false);
  989. if (hparams.expert_gating_func == LLAMA_EXPERT_GATING_FUNC_TYPE_NONE) {
  990. // for compatibility with existing DeepSeek V2 and V2.5 GGUFs
  991. // that have no expert_gating_func model parameter set
  992. hparams.expert_gating_func = LLAMA_EXPERT_GATING_FUNC_TYPE_SOFTMAX;
  993. }
  994. ml.get_key(LLM_KV_ROPE_SCALING_YARN_LOG_MUL, hparams.rope_yarn_log_mul);
  995. switch (hparams.n_layer) {
  996. case 27: type = LLM_TYPE_16B; break;
  997. case 60: type = LLM_TYPE_236B; break;
  998. case 61: type = LLM_TYPE_671B; break;
  999. default: type = LLM_TYPE_UNKNOWN;
  1000. }
  1001. } break;
  1002. case LLM_ARCH_CHATGLM:
  1003. {
  1004. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1005. switch (hparams.n_layer) {
  1006. case 28: {
  1007. if (hparams.n_head(0) == 16) {
  1008. type = LLM_TYPE_1_5B;
  1009. } else {
  1010. type = LLM_TYPE_6B;
  1011. }
  1012. } break;
  1013. case 40: {
  1014. if (hparams.n_head(0) == 24) {
  1015. type = LLM_TYPE_4B;
  1016. } else {
  1017. type = LLM_TYPE_9B;
  1018. }
  1019. } break;
  1020. default: type = LLM_TYPE_UNKNOWN;
  1021. }
  1022. } break;
  1023. case LLM_ARCH_BITNET:
  1024. {
  1025. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1026. switch (hparams.n_layer) {
  1027. case 26: type = LLM_TYPE_3B; break;
  1028. default: type = LLM_TYPE_UNKNOWN;
  1029. }
  1030. } break;
  1031. case LLM_ARCH_T5:
  1032. {
  1033. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1034. ml.get_key(LLM_KV_ATTENTION_RELATIVE_BUCKETS_COUNT, hparams.n_rel_attn_bkts);
  1035. uint32_t dec_start_token_id;
  1036. if (ml.get_key(LLM_KV_DECODER_START_TOKEN_ID, dec_start_token_id, false)) {
  1037. hparams.dec_start_token_id = dec_start_token_id;
  1038. }
  1039. switch (hparams.n_layer) {
  1040. case 6: type = LLM_TYPE_60M; break; // t5-small
  1041. case 8: type = LLM_TYPE_80M; break; // flan-t5-small
  1042. case 12:
  1043. switch (hparams.n_ff()) {
  1044. case 3072: type = LLM_TYPE_220M; break; // t5-base
  1045. case 2048: type = LLM_TYPE_250M; break; // flan-t5-base
  1046. default: type = LLM_TYPE_UNKNOWN;
  1047. } break;
  1048. case 24:
  1049. switch (hparams.n_ff()) {
  1050. case 4096: type = LLM_TYPE_770M; break; // t5-large
  1051. case 2816: type = LLM_TYPE_780M; break; // flan-t5-large
  1052. case 16384: type = LLM_TYPE_3B; break; // t5-3b
  1053. case 5120: type = LLM_TYPE_3B; break; // flan-t5-xl
  1054. case 65536: type = LLM_TYPE_11B; break; // t5-11b
  1055. case 10240: type = LLM_TYPE_11B; break; // flan-t5-xxl
  1056. default: type = LLM_TYPE_UNKNOWN;
  1057. } break;
  1058. default: type = LLM_TYPE_UNKNOWN;
  1059. }
  1060. } break;
  1061. case LLM_ARCH_T5ENCODER:
  1062. {
  1063. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1064. ml.get_key(LLM_KV_ATTENTION_RELATIVE_BUCKETS_COUNT, hparams.n_rel_attn_bkts);
  1065. type = LLM_TYPE_UNKNOWN;
  1066. } break;
  1067. case LLM_ARCH_JAIS:
  1068. {
  1069. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  1070. ml.get_key(LLM_KV_ATTENTION_MAX_ALIBI_BIAS, hparams.f_max_alibi_bias);
  1071. switch (hparams.n_layer) {
  1072. case 24: type = LLM_TYPE_1_3B; break;
  1073. case 40: type = LLM_TYPE_13B; break;
  1074. /* TODO: add variants */
  1075. default: type = LLM_TYPE_UNKNOWN;
  1076. }
  1077. } break;
  1078. case LLM_ARCH_NEMOTRON:
  1079. {
  1080. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  1081. switch (hparams.n_layer) {
  1082. case 32: type = LLM_TYPE_4B; break;
  1083. default: type = LLM_TYPE_UNKNOWN;
  1084. }
  1085. } break;
  1086. case LLM_ARCH_EXAONE:
  1087. {
  1088. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1089. switch (hparams.n_layer) {
  1090. case 32: type = LLM_TYPE_8B; break;
  1091. default: type = LLM_TYPE_UNKNOWN;
  1092. }
  1093. } break;
  1094. case LLM_ARCH_RWKV6:
  1095. case LLM_ARCH_RWKV6QWEN2:
  1096. {
  1097. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps, false);
  1098. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps, false);
  1099. ml.get_key(LLM_KV_WKV_HEAD_SIZE, hparams.wkv_head_size);
  1100. ml.get_key(LLM_KV_TIME_MIX_EXTRA_DIM, hparams.time_mix_extra_dim);
  1101. ml.get_key(LLM_KV_TIME_DECAY_EXTRA_DIM, hparams.time_decay_extra_dim);
  1102. ml.get_key(LLM_KV_RESCALE_EVERY_N_LAYERS, hparams.rescale_every_n_layers, false);
  1103. ml.get_key(LLM_KV_TOKEN_SHIFT_COUNT, hparams.token_shift_count, false);
  1104. switch (hparams.n_layer) {
  1105. case 24: type = LLM_TYPE_1_6B; break;
  1106. case 32:
  1107. switch (hparams.n_embd) {
  1108. case 2560: type = LLM_TYPE_3B; break;
  1109. case 4096: type = LLM_TYPE_7B; break;
  1110. default: type = LLM_TYPE_UNKNOWN;
  1111. } break;
  1112. case 61: type = LLM_TYPE_14B; break;
  1113. case 64: type = LLM_TYPE_32B; break;
  1114. default: type = LLM_TYPE_UNKNOWN;
  1115. }
  1116. } break;
  1117. case LLM_ARCH_GRANITE:
  1118. case LLM_ARCH_GRANITE_MOE:
  1119. {
  1120. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1121. ml.get_key(LLM_KV_LOGIT_SCALE, hparams.f_logit_scale);
  1122. ml.get_key(LLM_KV_RESIDUAL_SCALE, hparams.f_residual_scale);
  1123. ml.get_key(LLM_KV_EMBEDDING_SCALE, hparams.f_embedding_scale);
  1124. ml.get_key(LLM_KV_ATTENTION_SCALE, hparams.f_attention_scale);
  1125. switch (hparams.n_layer) {
  1126. case 32: type = LLM_TYPE_3B; break;
  1127. case 40: type = LLM_TYPE_3B; break;
  1128. // Add additional layer/vocab/etc checks here for other model sizes
  1129. default: type = LLM_TYPE_UNKNOWN;
  1130. }
  1131. } break;
  1132. case LLM_ARCH_CHAMELEON:
  1133. {
  1134. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1135. hparams.f_norm_eps = 1e-5; // eps for qk-norm, torch default
  1136. ml.get_key(LLM_KV_SWIN_NORM, hparams.swin_norm);
  1137. switch (hparams.n_layer) {
  1138. case 32: type = LLM_TYPE_7B; break;
  1139. case 48: type = LLM_TYPE_34B; break;
  1140. default: type = LLM_TYPE_UNKNOWN;
  1141. }
  1142. } break;
  1143. case LLM_ARCH_SOLAR:
  1144. {
  1145. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
  1146. for (size_t i = 0; i < hparams.n_bskcn_arr.max_size(); ++i) {
  1147. auto & bskcn = hparams.n_bskcn_arr[i];
  1148. bskcn.fill(0);
  1149. auto kv = LLM_KV(arch);
  1150. ml.get_key_or_arr(format((kv(LLM_KV_ATTENTION_BLOCK_SKIP_CONNECTION) + ".%d").c_str(), i), bskcn, hparams.n_layer, false);
  1151. }
  1152. switch (hparams.n_layer) {
  1153. case 64: type = LLM_TYPE_22B; break;
  1154. default: type = LLM_TYPE_UNKNOWN;
  1155. }
  1156. } break;
  1157. case LLM_ARCH_WAVTOKENIZER_DEC:
  1158. {
  1159. ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps);
  1160. ml.get_key(LLM_KV_ATTENTION_GROUPNORM_EPS, hparams.f_norm_group_eps);
  1161. ml.get_key(LLM_KV_ATTENTION_GROUPNORM_GROUPS, hparams.n_norm_groups);
  1162. ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn);
  1163. } break;
  1164. default: throw std::runtime_error("unsupported model architecture");
  1165. }
  1166. pimpl->n_bytes = ml.n_bytes;
  1167. pimpl->desc_str = arch_name() + " " + type_name() + " " + ml.ftype_name();
  1168. if (hparams.f_max_alibi_bias > 0.0f) {
  1169. hparams.use_alibi = true;
  1170. }
  1171. hparams.rope_type = llama_model_rope_type(this);
  1172. }
  1173. void llama_model::load_vocab(llama_model_loader & ml) {
  1174. const auto kv = LLM_KV(arch);
  1175. vocab.load(ml, kv);
  1176. }
  1177. bool llama_model::load_tensors(llama_model_loader & ml) {
  1178. const auto & split_mode = params.split_mode;
  1179. const auto & n_gpu_layers = params.n_gpu_layers;
  1180. const auto & use_mlock = params.use_mlock;
  1181. const auto & tensor_split = params.tensor_split;
  1182. const int n_layer = hparams.n_layer;
  1183. const bool use_mmap_buffer = true;
  1184. LLAMA_LOG_INFO("%s: loading model tensors, this can take a while... (mmap = %s)\n", __func__, ml.use_mmap ? "true" : "false");
  1185. // build a list of buffer types for the CPU and GPU devices
  1186. pimpl->cpu_buft_list = make_cpu_buft_list(devices);
  1187. for (auto * dev : devices) {
  1188. buft_list_t buft_list = make_gpu_buft_list(dev, split_mode, tensor_split);
  1189. // add CPU buffer types as a fallback
  1190. buft_list.insert(buft_list.end(), pimpl->cpu_buft_list.begin(), pimpl->cpu_buft_list.end());
  1191. pimpl->gpu_buft_list.emplace(dev, std::move(buft_list));
  1192. }
  1193. // calculate the split points
  1194. bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + n_devices(), [](float x) { return x == 0.0f; });
  1195. std::vector<float> splits(n_devices());
  1196. if (all_zero) {
  1197. // default split, by free memory
  1198. for (size_t i = 0; i < n_devices(); ++i) {
  1199. ggml_backend_dev_t dev = devices[i];
  1200. size_t total;
  1201. size_t free;
  1202. ggml_backend_dev_memory(dev, &free, &total);
  1203. splits[i] = free;
  1204. }
  1205. } else {
  1206. std::copy(tensor_split, tensor_split + n_devices(), splits.begin());
  1207. }
  1208. // sum and normalize the splits to get the split points
  1209. float split_sum = 0.0f;
  1210. for (size_t i = 0; i < n_devices(); ++i) {
  1211. split_sum += splits[i];
  1212. splits[i] = split_sum;
  1213. }
  1214. for (size_t i = 0; i < n_devices(); ++i) {
  1215. splits[i] /= split_sum;
  1216. }
  1217. ggml_backend_dev_t cpu_dev = ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_CPU);
  1218. const int i_gpu_start = std::max((int) hparams.n_layer - n_gpu_layers, (int) 0);
  1219. const int act_gpu_layers = devices.empty() ? 0 : std::min(n_gpu_layers, (int)n_layer + 1);
  1220. auto get_layer_buft_list = [&](int il) -> llama_model::impl::layer_dev {
  1221. if (il < i_gpu_start || (il - i_gpu_start) >= act_gpu_layers) {
  1222. LLAMA_LOG_DEBUG("load_tensors: layer %3d assigned to device %s\n", il, ggml_backend_dev_name(cpu_dev));
  1223. return {cpu_dev, &pimpl->cpu_buft_list};
  1224. }
  1225. const int layer_gpu = std::upper_bound(splits.begin(), splits.begin() + n_devices(), float(il - i_gpu_start)/act_gpu_layers) - splits.begin();
  1226. auto * dev = devices.at(layer_gpu);
  1227. LLAMA_LOG_DEBUG("load_tensors: layer %3d assigned to device %s\n", il, ggml_backend_dev_name(dev));
  1228. return {dev, &pimpl->gpu_buft_list.at(dev)};
  1229. };
  1230. // assign the input layer
  1231. // there is very little benefit to offloading the input layer, so always keep it on the CPU
  1232. pimpl->dev_input = { cpu_dev, &pimpl->cpu_buft_list };
  1233. // assign the repeating layers to the devices according to the splits
  1234. pimpl->dev_layer.resize(n_layer);
  1235. for (int il = 0; il < n_layer; ++il) {
  1236. pimpl->dev_layer[il] = get_layer_buft_list(il);
  1237. }
  1238. // assign the output layer
  1239. pimpl->dev_output = get_layer_buft_list(n_layer);
  1240. // one ggml context per buffer type
  1241. int max_n_tensors = ml.n_tensors;
  1242. max_n_tensors += 1; // duplicated output tensor
  1243. max_n_tensors += n_layer*2; // duplicated rope freq tensors
  1244. const size_t ctx_size = ggml_tensor_overhead()*max_n_tensors;
  1245. std::map<ggml_backend_buffer_type_t, ggml_context *> ctx_map;
  1246. auto ctx_for_buft = [&](ggml_backend_buffer_type_t buft) -> ggml_context * {
  1247. auto it = ctx_map.find(buft);
  1248. if (it == ctx_map.end()) {
  1249. ggml_init_params params = {
  1250. /*.mem_size =*/ ctx_size,
  1251. /*.mem_buffer =*/ NULL,
  1252. /*.no_alloc =*/ true,
  1253. };
  1254. ggml_context * ctx = ggml_init(params);
  1255. if (!ctx) {
  1256. throw std::runtime_error(format("failed to create ggml context"));
  1257. }
  1258. ctx_map[buft] = ctx;
  1259. pimpl->ctxs.emplace_back(ctx);
  1260. return ctx;
  1261. }
  1262. return it->second;
  1263. };
  1264. const auto TENSOR_DUPLICATED = llama_model_loader::TENSOR_DUPLICATED;
  1265. const auto TENSOR_NOT_REQUIRED = llama_model_loader::TENSOR_NOT_REQUIRED;
  1266. // create tensors for the weights
  1267. {
  1268. // note: cast to int64_t since we will use these for the tensor dimensions
  1269. const int64_t n_head = hparams.n_head();
  1270. const int64_t n_head_kv = hparams.n_head_kv();
  1271. const int64_t n_embd = hparams.n_embd;
  1272. const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa();
  1273. const int64_t n_embd_v_gqa = hparams.n_embd_v_gqa();
  1274. const int64_t n_embd_head_k = hparams.n_embd_head_k;
  1275. const int64_t n_embd_head_v = hparams.n_embd_head_v;
  1276. const int64_t n_ff = hparams.n_ff();
  1277. const int64_t n_embd_gqa = n_embd_v_gqa;
  1278. const int64_t n_vocab = hparams.n_vocab;
  1279. const int64_t n_token_types = vocab.n_token_types();
  1280. const int64_t n_rot = hparams.n_rot;
  1281. const int64_t n_expert = hparams.n_expert;
  1282. const int64_t n_expert_used = hparams.n_expert_used;
  1283. const int64_t n_ctx_train = hparams.n_ctx_train;
  1284. if (n_expert > 0 && hparams.n_expert_used == 0) {
  1285. throw std::runtime_error("model has expert layers but no expert layers are used");
  1286. }
  1287. int n_moved_tensors = 0;
  1288. ggml_tensor * first_moved_tensor = nullptr;
  1289. ggml_backend_buffer_type_t first_moved_from_buft = nullptr;
  1290. ggml_backend_buffer_type_t first_moved_to_buft = nullptr;
  1291. auto create_tensor = [&](const LLM_TN_IMPL & tn, const std::initializer_list<int64_t> & ne, int flags) -> ggml_tensor * {
  1292. ggml_tensor * t_meta = ml.get_tensor_meta(tn.str().c_str());
  1293. if (!t_meta) {
  1294. if (flags & TENSOR_NOT_REQUIRED) {
  1295. return nullptr;
  1296. }
  1297. throw std::runtime_error(format("missing tensor '%s'", tn.str().c_str()));
  1298. }
  1299. // some models use the token embedding tensor as the output, but since these are used in different layers and with different ops
  1300. // the tensor is duplicated
  1301. // to handle this, we check if the tensor is duplicated, and if so, we assume that it is being loaded as the output tensor
  1302. llm_tensor tn_tensor = tn.tensor;
  1303. if (tn.tensor == LLM_TENSOR_TOKEN_EMBD && flags & TENSOR_DUPLICATED) {
  1304. tn_tensor = LLM_TENSOR_OUTPUT;
  1305. }
  1306. llm_tensor_info info;
  1307. try {
  1308. info = llm_tensor_info_for(tn_tensor);
  1309. } catch (const std::out_of_range & e) {
  1310. throw std::runtime_error(format("missing tensor info mapping for %s", tn.str().c_str()));
  1311. }
  1312. // skip unused tensors
  1313. if (info.op == GGML_OP_NONE) {
  1314. LLAMA_LOG_WARN("model has unused tensor %s -- ignoring\n", tn.str().c_str());
  1315. ml.n_created++;
  1316. return nullptr;
  1317. }
  1318. // tensors with "bias" suffix are always used with GGML_OP_ADD
  1319. ggml_op op;
  1320. bool bias = tn.suffix != nullptr && strcmp(tn.suffix, "bias") == 0;
  1321. if (bias) {
  1322. op = GGML_OP_ADD;
  1323. } else {
  1324. op = info.op;
  1325. }
  1326. // sanity checks
  1327. if (info.layer == LLM_TENSOR_LAYER_INPUT || info.layer == LLM_TENSOR_LAYER_OUTPUT) {
  1328. if (tn.bid != -1) {
  1329. GGML_ABORT("input/output layer tensor %s used with a layer number", tn.str().c_str());
  1330. }
  1331. } else {
  1332. if (tn.bid == -1) {
  1333. GGML_ABORT("repeating layer tensor %s used without a layer number", tn.str().c_str());
  1334. }
  1335. }
  1336. // select the buffer type for this tensor
  1337. buft_list_t * buft_list;
  1338. switch (info.layer) {
  1339. case LLM_TENSOR_LAYER_INPUT:
  1340. buft_list = pimpl->dev_input.buft_list;
  1341. break;
  1342. case LLM_TENSOR_LAYER_OUTPUT:
  1343. buft_list = pimpl->dev_output.buft_list;
  1344. break;
  1345. case LLM_TENSOR_LAYER_REPEATING:
  1346. buft_list = pimpl->dev_layer.at(tn.bid).buft_list;
  1347. break;
  1348. default:
  1349. GGML_ABORT("invalid layer %d for tensor %s", info.layer, tn.str().c_str());
  1350. }
  1351. ggml_backend_buffer_type_t buft = select_weight_buft(hparams, t_meta, op, *buft_list);
  1352. if (!buft) {
  1353. throw std::runtime_error(format("failed to find a compatible buffer type for tensor %s", tn.str().c_str()));
  1354. }
  1355. // avoid using a host buffer when using mmap
  1356. auto * buft_dev = ggml_backend_buft_get_device(buft);
  1357. if (ml.use_mmap && buft_dev && buft == ggml_backend_dev_host_buffer_type(buft_dev)) {
  1358. auto * cpu_dev = ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_CPU);
  1359. buft = ggml_backend_dev_buffer_type(cpu_dev);
  1360. }
  1361. if (buft != buft_list->front().second) {
  1362. n_moved_tensors++;
  1363. if (!first_moved_tensor) {
  1364. first_moved_tensor = t_meta;
  1365. first_moved_from_buft = buft_list->front().second;
  1366. first_moved_to_buft = buft;
  1367. }
  1368. }
  1369. ggml_context * ctx = ctx_for_buft(buft);
  1370. // if duplicated, check if the original tensor was allocated in the same buffer type context and avoid creating a new one
  1371. if (flags & TENSOR_DUPLICATED) {
  1372. ggml_tensor * t = ggml_get_tensor(ctx, tn.str().c_str());
  1373. if (t) {
  1374. return t;
  1375. }
  1376. }
  1377. return ml.create_tensor(ctx, tn, ne, flags);
  1378. };
  1379. layers.resize(n_layer);
  1380. // TODO: move to a separate function
  1381. const auto tn = LLM_TN(arch);
  1382. switch (arch) {
  1383. case LLM_ARCH_LLAMA:
  1384. case LLM_ARCH_REFACT:
  1385. case LLM_ARCH_MINICPM:
  1386. case LLM_ARCH_GRANITE:
  1387. case LLM_ARCH_GRANITE_MOE:
  1388. {
  1389. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1390. // output
  1391. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1392. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1393. // if output is NULL, init from the input tok embed
  1394. if (output == NULL) {
  1395. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1396. }
  1397. for (int i = 0; i < n_layer; ++i) {
  1398. auto & layer = layers[i];
  1399. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1400. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  1401. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  1402. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  1403. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  1404. // optional bias tensors
  1405. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1406. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1407. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1408. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1409. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1410. if (hparams.rope_scaling_type_train == LLAMA_ROPE_SCALING_TYPE_LONGROPE) {
  1411. layer.rope_long = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_LONG, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1412. layer.rope_short = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_SHORT, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1413. }
  1414. else {
  1415. layer.rope_freqs = create_tensor(tn(LLM_TENSOR_ROPE_FREQS, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1416. }
  1417. if (n_expert == 0) {
  1418. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1419. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1420. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1421. // optional MLP bias
  1422. layer.ffn_gate_b = create_tensor(tn(LLM_TENSOR_FFN_GATE, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED);
  1423. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1424. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED);
  1425. } else {
  1426. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  1427. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, TENSOR_NOT_REQUIRED);
  1428. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), { n_ff, n_embd, n_expert}, 0);
  1429. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  1430. }
  1431. }
  1432. } break;
  1433. case LLM_ARCH_MLLAMA:
  1434. {
  1435. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab+8}, 0);
  1436. // output
  1437. {
  1438. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1439. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, llama_model_loader::TENSOR_NOT_REQUIRED);
  1440. // if output is NULL, init from the input tok embed
  1441. if (output == NULL) {
  1442. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, llama_model_loader::TENSOR_DUPLICATED);
  1443. }
  1444. }
  1445. for (int i = 0; i < n_layer; ++i) {
  1446. auto & layer = layers[i];
  1447. if (hparams.cross_attention_layers(i)) {
  1448. layer.cross_attn_k_norm = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_K_NORM, "weight", i), {128}, 0);
  1449. layer.cross_attn_k_proj = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_K_PROJ, "weight", i), {n_embd, 1024}, 0);
  1450. layer.cross_attn_o_proj = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_O_PROJ, "weight", i), {n_embd, n_embd}, 0);
  1451. layer.cross_attn_q_norm = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_Q_NORM, "weight", i), {128}, 0);
  1452. layer.cross_attn_q_proj = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_Q_PROJ, "weight", i), {n_embd, n_embd}, 0);
  1453. layer.cross_attn_v_proj = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_V_PROJ, "weight", i), {n_embd, 1024}, 0);
  1454. layer.cross_attn_attn_gate = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_ATTN_GATE, i), {1}, 0);
  1455. layer.cross_attn_mlp_gate = create_tensor(tn(LLM_TENSOR_CROSS_ATTN_MLP_GATE, i), {1}, 0);
  1456. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1457. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1458. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1459. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1460. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1461. } else {
  1462. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1463. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  1464. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  1465. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  1466. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  1467. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1468. layer.rope_freqs = create_tensor(tn(LLM_TENSOR_ROPE_FREQS, "weight", i), {n_rot/2}, llama_model_loader::TENSOR_NOT_REQUIRED | (i != 0 ? llama_model_loader::TENSOR_DUPLICATED : 0));
  1469. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1470. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1471. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1472. }
  1473. }
  1474. } break;
  1475. case LLM_ARCH_DECI:
  1476. {
  1477. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1478. // output
  1479. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1480. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1481. // if output is NULL, init from the input tok embed
  1482. if (output == NULL) {
  1483. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1484. }
  1485. for (int i = 0; i < n_layer; ++i) {
  1486. auto & layer = layers[i];
  1487. const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(i);
  1488. const int64_t n_embd_v_gqa = hparams.n_embd_v_gqa(i);
  1489. const int64_t n_embd_gqa = hparams.n_embd_v_gqa(i);
  1490. const int64_t n_ff = hparams.n_ff(i);
  1491. const int64_t n_head = hparams.n_head(i);
  1492. const int64_t n_head_kv = hparams.n_head_kv(i);
  1493. if (n_head_kv == 0 && n_head > 0) {
  1494. // linear attention for DeciLMCausalModel
  1495. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1496. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1497. }
  1498. else if (n_head_kv > 0) {
  1499. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1500. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  1501. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  1502. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  1503. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  1504. }
  1505. // optional bias tensors
  1506. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1507. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1508. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1509. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1510. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1511. if (hparams.rope_scaling_type_train == LLAMA_ROPE_SCALING_TYPE_LONGROPE) {
  1512. layer.rope_long = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_LONG, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1513. layer.rope_short = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_SHORT, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1514. }
  1515. else {
  1516. layer.rope_freqs = create_tensor(tn(LLM_TENSOR_ROPE_FREQS, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1517. }
  1518. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1519. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1520. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1521. // optional MLP bias
  1522. layer.ffn_gate_b = create_tensor(tn(LLM_TENSOR_FFN_GATE, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED);
  1523. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1524. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED);
  1525. }
  1526. } break;
  1527. case LLM_ARCH_MINICPM3:
  1528. {
  1529. const int64_t n_embd_head_qk_rope = hparams.n_rot;
  1530. const int64_t n_embd_head_qk_nope = hparams.n_embd_head_k - hparams.n_rot;
  1531. const int64_t q_lora_rank = hparams.n_lora_q;
  1532. const int64_t kv_lora_rank = hparams.n_lora_kv;
  1533. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1534. // output
  1535. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1536. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1537. // if output is NULL, init from the input tok embed
  1538. if (output == NULL) {
  1539. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1540. }
  1541. for (int i = 0; i < n_layer; ++i) {
  1542. auto & layer = layers[i];
  1543. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1544. layer.attn_q_a_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_A_NORM, "weight", i), {q_lora_rank}, 0);
  1545. layer.attn_kv_a_norm = create_tensor(tn(LLM_TENSOR_ATTN_KV_A_NORM, "weight", i), {kv_lora_rank}, 0);
  1546. layer.wq_a = create_tensor(tn(LLM_TENSOR_ATTN_Q_A, "weight", i), {n_embd, q_lora_rank}, 0);
  1547. layer.wq_b = create_tensor(tn(LLM_TENSOR_ATTN_Q_B, "weight", i), {q_lora_rank, n_head * n_embd_head_k}, 0);
  1548. layer.wkv_a_mqa = create_tensor(tn(LLM_TENSOR_ATTN_KV_A_MQA, "weight", i), {n_embd, kv_lora_rank + (n_embd_head_qk_rope)}, 0);
  1549. layer.wkv_b = create_tensor(tn(LLM_TENSOR_ATTN_KV_B, "weight", i), {kv_lora_rank, n_head * (n_embd_head_qk_nope + n_embd_head_v)}, 0);
  1550. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), { n_head * ( n_embd_head_v), n_embd}, 0);
  1551. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1552. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1553. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1554. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1555. layer.rope_long = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_LONG, "weight", i), { n_embd_head_qk_rope/2 }, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1556. layer.rope_short = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_SHORT, "weight", i), { n_embd_head_qk_rope/2 }, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1557. }
  1558. } break;
  1559. case LLM_ARCH_GROK:
  1560. {
  1561. if (n_expert == 0) {
  1562. throw std::runtime_error("Grok model cannot have zero experts");
  1563. }
  1564. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1565. // output
  1566. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1567. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1568. // if output is NULL, init from the input tok embed
  1569. if (output == NULL) {
  1570. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1571. }
  1572. for (int i = 0; i < n_layer; ++i) {
  1573. auto & layer = layers[i];
  1574. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1575. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1576. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1577. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1578. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1579. layer.attn_out_norm = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}, 0);
  1580. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1581. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  1582. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, TENSOR_NOT_REQUIRED);
  1583. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), { n_ff, n_embd, n_expert}, 0);
  1584. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  1585. layer.layer_out_norm = create_tensor(tn(LLM_TENSOR_LAYER_OUT_NORM, "weight", i), {n_embd}, 0);
  1586. }
  1587. } break;
  1588. case LLM_ARCH_DBRX:
  1589. {
  1590. if (n_expert == 0) {
  1591. throw std::runtime_error("DBRX model cannot have zero experts");
  1592. }
  1593. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1594. // output
  1595. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1596. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1597. for (int i = 0; i < n_layer; ++i) {
  1598. auto & layer = layers[i];
  1599. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1600. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  1601. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1602. layer.attn_out_norm = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}, 0);
  1603. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  1604. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  1605. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff, n_embd, n_expert}, 0);
  1606. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  1607. }
  1608. } break;
  1609. case LLM_ARCH_BAICHUAN:
  1610. {
  1611. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1612. {
  1613. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1614. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1615. }
  1616. for (int i = 0; i < n_layer; ++i) {
  1617. auto & layer = layers[i];
  1618. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1619. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1620. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1621. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1622. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1623. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1624. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1625. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1626. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1627. }
  1628. } break;
  1629. case LLM_ARCH_FALCON:
  1630. {
  1631. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1632. // output
  1633. {
  1634. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1635. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  1636. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1637. if (!output) {
  1638. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); // needs to be on GPU
  1639. }
  1640. }
  1641. for (int i = 0; i < n_layer; ++i) {
  1642. auto & layer = layers[i];
  1643. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1644. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  1645. layer.attn_norm_2 = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1646. layer.attn_norm_2_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1647. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  1648. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1649. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1650. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1651. }
  1652. } break;
  1653. case LLM_ARCH_STARCODER:
  1654. {
  1655. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1656. pos_embd = create_tensor(tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, n_ctx_train}, 0);
  1657. // output
  1658. {
  1659. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1660. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  1661. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1662. if (!output) {
  1663. // needs to be on GPU
  1664. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1665. }
  1666. }
  1667. for (int i = 0; i < n_layer; ++i) {
  1668. auto & layer = layers[i];
  1669. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1670. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  1671. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  1672. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, 0);
  1673. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1674. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  1675. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1676. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  1677. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1678. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  1679. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1680. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  1681. }
  1682. } break;
  1683. case LLM_ARCH_BERT:
  1684. case LLM_ARCH_NOMIC_BERT:
  1685. {
  1686. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1687. type_embd = create_tensor(tn(LLM_TENSOR_TOKEN_TYPES, "weight"), {n_embd, n_token_types}, 0);
  1688. if (arch == LLM_ARCH_BERT) {
  1689. pos_embd = create_tensor(tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, n_ctx_train}, 0);
  1690. cls = create_tensor(tn(LLM_TENSOR_CLS, "weight"), {n_embd, n_embd}, TENSOR_NOT_REQUIRED);
  1691. cls_b = create_tensor(tn(LLM_TENSOR_CLS, "bias"), {n_embd}, TENSOR_NOT_REQUIRED);
  1692. cls_out = create_tensor(tn(LLM_TENSOR_CLS_OUT, "weight"), {n_embd, 1}, TENSOR_NOT_REQUIRED);
  1693. cls_out_b = create_tensor(tn(LLM_TENSOR_CLS_OUT, "bias"), {1}, TENSOR_NOT_REQUIRED);
  1694. }
  1695. tok_norm = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, 0);
  1696. tok_norm_b = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}, 0);
  1697. for (int i = 0; i < n_layer; ++i) {
  1698. auto & layer = layers[i];
  1699. if (arch == LLM_ARCH_BERT) {
  1700. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1701. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  1702. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1703. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  1704. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1705. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  1706. } else {
  1707. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  1708. }
  1709. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1710. layer.attn_out_norm = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}, 0);
  1711. layer.attn_out_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "bias", i), {n_embd}, 0);
  1712. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1713. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1714. if (arch == LLM_ARCH_BERT) {
  1715. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  1716. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  1717. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  1718. } else {
  1719. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1720. }
  1721. layer.layer_out_norm = create_tensor(tn(LLM_TENSOR_LAYER_OUT_NORM, "weight", i), {n_embd}, 0);
  1722. layer.layer_out_norm_b = create_tensor(tn(LLM_TENSOR_LAYER_OUT_NORM, "bias", i), {n_embd}, 0);
  1723. }
  1724. } break;
  1725. case LLM_ARCH_JINA_BERT_V2:
  1726. {
  1727. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); // word_embeddings
  1728. type_embd = create_tensor(tn(LLM_TENSOR_TOKEN_TYPES, "weight"), {n_embd, n_token_types}, 0); // token_type_embeddings
  1729. tok_norm = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, 0); // LayerNorm
  1730. tok_norm_b = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}, 0); //LayerNorm bias
  1731. cls = create_tensor(tn(LLM_TENSOR_CLS, "weight"), {n_embd, 1}, TENSOR_NOT_REQUIRED);
  1732. cls_b = create_tensor(tn(LLM_TENSOR_CLS, "bias"), {1}, TENSOR_NOT_REQUIRED);
  1733. for (int i = 0; i < n_layer; ++i) {
  1734. auto & layer = layers[i]; // JinaBertLayer
  1735. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1736. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  1737. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1738. layer.attn_q_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1739. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1740. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  1741. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1742. layer.attn_k_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1743. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1744. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  1745. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0); //output_dens
  1746. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0); //output_dens
  1747. layer.attn_out_norm = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}, 0); //output_norm
  1748. layer.attn_out_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "bias", i), {n_embd}, 0);
  1749. layer.attn_norm_2 = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1750. layer.attn_norm_2_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1751. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1752. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1753. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1754. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  1755. layer.layer_out_norm = create_tensor(tn(LLM_TENSOR_LAYER_OUT_NORM, "weight", i), {n_embd}, 0);
  1756. layer.layer_out_norm_b = create_tensor(tn(LLM_TENSOR_LAYER_OUT_NORM, "bias", i), {n_embd}, 0);
  1757. }
  1758. } break;
  1759. case LLM_ARCH_BLOOM:
  1760. {
  1761. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1762. tok_norm = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, 0);
  1763. tok_norm_b = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}, 0);
  1764. // output
  1765. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1766. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  1767. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1768. for (int i = 0; i < n_layer; ++i) {
  1769. auto & layer = layers[i];
  1770. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1771. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  1772. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  1773. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, 0);
  1774. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1775. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  1776. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1777. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  1778. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1779. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  1780. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1781. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  1782. }
  1783. } break;
  1784. case LLM_ARCH_MPT:
  1785. {
  1786. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1787. pos_embd = create_tensor(tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, n_ctx_train}, TENSOR_NOT_REQUIRED);
  1788. // output
  1789. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1790. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, TENSOR_NOT_REQUIRED);
  1791. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1792. if (!output) {
  1793. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); // needs to be on GPU
  1794. }
  1795. for (int i = 0; i < n_layer; ++i) {
  1796. auto & layer = layers[i];
  1797. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1798. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1799. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  1800. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1801. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1802. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1803. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1804. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1805. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1806. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1807. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1808. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED);
  1809. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1810. layer.attn_q_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1811. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1812. layer.attn_k_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1813. // AWQ ScaleActivation layer
  1814. layer.ffn_act = create_tensor(tn(LLM_TENSOR_FFN_ACT, "scales", i), {n_ff}, TENSOR_NOT_REQUIRED);
  1815. }
  1816. } break;
  1817. case LLM_ARCH_STABLELM:
  1818. {
  1819. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1820. // output
  1821. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  1822. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1823. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1824. for (int i = 0; i < n_layer; ++i) {
  1825. auto & layer = layers[i];
  1826. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1827. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  1828. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1829. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1830. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1831. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1832. // optional bias tensors, present in Stable LM 2 1.6B
  1833. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1834. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1835. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1836. // optional q and k layernorms, present in StableLM 2 12B
  1837. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd_head_k, n_head}, TENSOR_NOT_REQUIRED);
  1838. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd_head_k, n_head_kv}, TENSOR_NOT_REQUIRED);
  1839. // optional FFN norm, not present in StableLM 2 12B which uses parallel residual
  1840. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1841. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  1842. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1843. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1844. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1845. }
  1846. } break;
  1847. case LLM_ARCH_QWEN:
  1848. {
  1849. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1850. // output
  1851. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1852. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1853. for (int i = 0; i < n_layer; ++i) {
  1854. auto & layer = layers[i];
  1855. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1856. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd*3}, 0);
  1857. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd*3}, 0);
  1858. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1859. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1860. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff/2}, 0);
  1861. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff/2, n_embd}, 0);
  1862. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff/2}, 0);
  1863. }
  1864. } break;
  1865. case LLM_ARCH_QWEN2:
  1866. case LLM_ARCH_QWEN2VL:
  1867. {
  1868. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1869. // output
  1870. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1871. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1872. // if output is NULL, init from the input tok embed
  1873. if (output == NULL) {
  1874. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1875. }
  1876. for (int i = 0; i < n_layer; ++i) {
  1877. auto & layer = layers[i];
  1878. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1879. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1880. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1881. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1882. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1883. // optional bias tensors
  1884. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  1885. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  1886. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  1887. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1888. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  1889. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  1890. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1891. }
  1892. } break;
  1893. case LLM_ARCH_QWEN2MOE:
  1894. {
  1895. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1896. // output
  1897. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1898. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1899. for (int i = 0; i < n_layer; ++i) {
  1900. auto & layer = layers[i];
  1901. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1902. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1903. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1904. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1905. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1906. // optional bias tensors
  1907. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  1908. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  1909. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  1910. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  1911. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  1912. if (n_expert == 0) {
  1913. throw std::runtime_error("n_expert must be > 0 for QWEN2MOE");
  1914. }
  1915. if (n_expert_used == 0) {
  1916. throw std::runtime_error("n_expert_used must be > 0 for QWEN2MOE");
  1917. }
  1918. // MoE branch
  1919. const int64_t n_ff_exp = hparams.n_ff_exp ? hparams.n_ff_exp : n_ff / n_expert_used;
  1920. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0);
  1921. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff_exp, n_embd, n_expert}, 0);
  1922. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0);
  1923. // Shared expert branch
  1924. const int64_t n_ff_shexp = hparams.n_ff_shexp ? hparams.n_ff_shexp : n_ff;
  1925. layer.ffn_gate_inp_shexp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP_SHEXP, "weight", i), {n_embd}, 0);
  1926. layer.ffn_gate_shexp = create_tensor(tn(LLM_TENSOR_FFN_GATE_SHEXP, "weight", i), { n_embd, n_ff_shexp}, 0);
  1927. layer.ffn_down_shexp = create_tensor(tn(LLM_TENSOR_FFN_DOWN_SHEXP, "weight", i), {n_ff_shexp, n_embd}, 0);
  1928. layer.ffn_up_shexp = create_tensor(tn(LLM_TENSOR_FFN_UP_SHEXP, "weight", i), { n_embd, n_ff_shexp}, 0);
  1929. }
  1930. } break;
  1931. case LLM_ARCH_PHI2:
  1932. {
  1933. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  1934. // output
  1935. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  1936. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  1937. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  1938. output_b = create_tensor(tn(LLM_TENSOR_OUTPUT, "bias"), {n_vocab}, 0);
  1939. for (int i = 0; i < n_layer; ++i) {
  1940. auto & layer = layers[i];
  1941. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  1942. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  1943. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1944. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, TENSOR_NOT_REQUIRED);
  1945. if (layer.wqkv == nullptr) {
  1946. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  1947. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  1948. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  1949. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  1950. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  1951. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  1952. }
  1953. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  1954. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  1955. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  1956. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  1957. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  1958. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  1959. }
  1960. } break;
  1961. case LLM_ARCH_PHI3:
  1962. {
  1963. const int64_t n_embd_head = n_embd / n_head;
  1964. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), { n_embd, n_vocab }, 0);
  1965. // output
  1966. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), { n_embd }, 0);
  1967. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  1968. // if output is NULL, init from the input tok embed
  1969. if (output == NULL) {
  1970. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  1971. }
  1972. for (int i = 0; i < n_layer; ++i) {
  1973. auto & layer = layers[i];
  1974. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), { n_embd }, 0);
  1975. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), { n_embd, n_embd + 2 * n_embd_gqa }, TENSOR_NOT_REQUIRED);
  1976. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), { n_embd, n_embd }, 0);
  1977. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), { n_embd }, 0);
  1978. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd }, 0);
  1979. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), { n_embd, 2 * n_ff }, 0);
  1980. layer.rope_long = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_LONG, "weight", i), { n_rot/2 }, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1981. layer.rope_short = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_SHORT, "weight", i), { n_rot/2 }, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  1982. }
  1983. } break;
  1984. case LLM_ARCH_PHIMOE:
  1985. {
  1986. const int64_t n_embd_head = n_embd / n_head;
  1987. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), { n_embd, n_vocab }, 0);
  1988. // output
  1989. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), { n_embd }, 0);
  1990. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  1991. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), { n_embd, n_vocab }, 0);
  1992. output_b = create_tensor(tn(LLM_TENSOR_OUTPUT, "bias"), { n_vocab }, 0);
  1993. for (int i = 0; i < n_layer; ++i) {
  1994. auto & layer = layers[i];
  1995. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), { n_embd }, 0);
  1996. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), { n_embd }, 0);
  1997. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), { n_embd, n_embd + 2 * n_embd_gqa }, llama_model_loader::TENSOR_NOT_REQUIRED);
  1998. if (layer.wqkv == nullptr) {
  1999. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2000. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  2001. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2002. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  2003. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2004. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  2005. }
  2006. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), { n_embd, n_embd }, 0);
  2007. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), { n_embd }, 0);
  2008. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), { n_embd }, 0);
  2009. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), { n_embd }, 0);
  2010. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  2011. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  2012. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff, n_embd, n_expert}, 0);
  2013. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  2014. layer.rope_long = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_LONG, "weight", i), { n_embd_head/2 }, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  2015. layer.rope_short = create_tensor(tn(LLM_TENSOR_ROPE_FACTORS_SHORT, "weight", i), { n_embd_head/2 }, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  2016. }
  2017. } break;
  2018. case LLM_ARCH_PLAMO:
  2019. {
  2020. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2021. // output
  2022. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2023. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2024. for (int i = 0; i < n_layer; ++i) {
  2025. auto & layer = layers[i];
  2026. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2027. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2028. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2029. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2030. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2031. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2032. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2033. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2034. }
  2035. } break;
  2036. case LLM_ARCH_GPT2:
  2037. {
  2038. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2039. pos_embd = create_tensor(tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, n_ctx_train}, 0);
  2040. // output
  2041. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2042. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2043. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2044. for (int i = 0; i < n_layer; ++i) {
  2045. auto & layer = layers[i];
  2046. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2047. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2048. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  2049. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, 0);
  2050. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2051. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  2052. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2053. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2054. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2055. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  2056. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2057. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  2058. }
  2059. } break;
  2060. case LLM_ARCH_CODESHELL:
  2061. {
  2062. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2063. // output
  2064. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2065. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2066. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2067. for (int i = 0; i < n_layer; ++i) {
  2068. auto & layer = layers[i];
  2069. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2070. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2071. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  2072. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, 0);
  2073. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2074. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  2075. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2076. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2077. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2078. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  2079. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2080. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  2081. }
  2082. } break;
  2083. case LLM_ARCH_ORION:
  2084. {
  2085. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2086. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2087. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2088. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2089. for (int i = 0; i < n_layer; ++i) {
  2090. auto & layer = layers[i];
  2091. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2092. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2093. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2094. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2095. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2096. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2097. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2098. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2099. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2100. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2101. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2102. }
  2103. } break;
  2104. case LLM_ARCH_INTERNLM2:
  2105. {
  2106. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2107. // output
  2108. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2109. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2110. for (int i = 0; i < n_layer; ++i) {
  2111. auto & layer = layers[i];
  2112. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2113. // layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  2114. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2115. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2116. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2117. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2118. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2119. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2120. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2121. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2122. }
  2123. } break;
  2124. case LLM_ARCH_GEMMA:
  2125. {
  2126. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2127. // output
  2128. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2129. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); // same as tok_embd, duplicated to allow offloading
  2130. for (int i = 0; i < n_layer; ++i) {
  2131. auto & layer = layers[i];
  2132. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2133. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  2134. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2135. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2136. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  2137. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2138. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2139. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2140. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2141. }
  2142. } break;
  2143. case LLM_ARCH_GEMMA2:
  2144. {
  2145. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2146. // output
  2147. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2148. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); // same as tok_embd, duplicated to allow offloading
  2149. for (int i = 0; i < n_layer; ++i) {
  2150. auto & layer = layers[i];
  2151. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2152. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  2153. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2154. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2155. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  2156. layer.attn_post_norm = create_tensor(tn(LLM_TENSOR_ATTN_POST_NORM, "weight", i), {n_embd}, 0);
  2157. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2158. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2159. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2160. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2161. layer.ffn_post_norm = create_tensor(tn(LLM_TENSOR_FFN_POST_NORM, "weight", i), {n_embd}, 0);
  2162. }
  2163. } break;
  2164. case LLM_ARCH_STARCODER2:
  2165. {
  2166. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2167. // output
  2168. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2169. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2170. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2171. // if output is NULL, init from the input tok embed
  2172. if (output == NULL) {
  2173. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2174. }
  2175. for (int i = 0; i < n_layer; ++i) {
  2176. auto & layer = layers[i];
  2177. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2178. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2179. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2180. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2181. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2182. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2183. // optional bias tensors
  2184. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, 0);
  2185. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, 0);
  2186. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, 0);
  2187. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  2188. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2189. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2190. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2191. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2192. // optional bias tensors
  2193. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  2194. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP , "bias", i), { n_ff}, 0);
  2195. }
  2196. } break;
  2197. case LLM_ARCH_MAMBA:
  2198. {
  2199. const int64_t d_conv = hparams.ssm_d_conv;
  2200. const int64_t d_inner = hparams.ssm_d_inner;
  2201. const int64_t d_state = hparams.ssm_d_state;
  2202. const int64_t dt_rank = hparams.ssm_dt_rank;
  2203. // only an expansion factor of 2 is supported for now
  2204. if (2 * n_embd != d_inner) {
  2205. throw std::runtime_error("only an expansion factor of 2 is supported for now");
  2206. }
  2207. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2208. // output
  2209. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2210. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2211. // if output is NULL, init from the input tok embed, duplicated to allow offloading
  2212. if (output == NULL) {
  2213. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2214. }
  2215. for (int i = 0; i < n_layer; ++i) {
  2216. auto & layer = layers[i];
  2217. // norm
  2218. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2219. layer.ssm_in = create_tensor(tn(LLM_TENSOR_SSM_IN, "weight", i), {n_embd, 2*d_inner}, 0);
  2220. layer.ssm_conv1d = create_tensor(tn(LLM_TENSOR_SSM_CONV1D, "weight", i), {d_conv, d_inner}, 0);
  2221. layer.ssm_conv1d_b = create_tensor(tn(LLM_TENSOR_SSM_CONV1D, "bias", i), {d_inner}, 0);
  2222. layer.ssm_x = create_tensor(tn(LLM_TENSOR_SSM_X, "weight", i), {d_inner, dt_rank + 2*d_state}, 0);
  2223. layer.ssm_dt = create_tensor(tn(LLM_TENSOR_SSM_DT, "weight", i), {dt_rank, d_inner}, 0);
  2224. layer.ssm_dt_b = create_tensor(tn(LLM_TENSOR_SSM_DT, "bias", i), {d_inner}, 0);
  2225. // no "weight" suffix for these
  2226. layer.ssm_a = create_tensor(tn(LLM_TENSOR_SSM_A, i), {d_state, d_inner}, 0);
  2227. layer.ssm_d = create_tensor(tn(LLM_TENSOR_SSM_D, i), {d_inner}, 0);
  2228. // out_proj
  2229. layer.ssm_out = create_tensor(tn(LLM_TENSOR_SSM_OUT, "weight", i), {d_inner, n_embd}, 0);
  2230. }
  2231. } break;
  2232. case LLM_ARCH_XVERSE:
  2233. {
  2234. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2235. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2236. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2237. for (int i = 0; i < n_layer; ++i) {
  2238. auto & layer = layers[i];
  2239. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2240. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2241. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2242. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2243. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2244. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2245. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2246. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2247. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2248. }
  2249. } break;
  2250. case LLM_ARCH_COMMAND_R:
  2251. {
  2252. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2253. // output
  2254. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2255. // init output from the input tok embed
  2256. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2257. for (int i = 0; i < n_layer; ++i) {
  2258. auto & layer = layers[i];
  2259. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2260. if (n_layer >= 64){
  2261. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd_head_k, n_head}, 0);
  2262. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd_head_k, n_head_kv}, 0);
  2263. }
  2264. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2265. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2266. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2267. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2268. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2269. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2270. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2271. }
  2272. } break;
  2273. case LLM_ARCH_COHERE2:
  2274. {
  2275. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), { n_embd, n_vocab }, 0);
  2276. // output
  2277. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), { n_embd }, 0);
  2278. // init output from the input tok embed
  2279. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), { n_embd, n_vocab },
  2280. TENSOR_DUPLICATED);
  2281. for (int i = 0; i < n_layer; ++i) {
  2282. auto & layer = layers[i];
  2283. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), { n_embd }, 0);
  2284. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), { n_embd, n_embd }, 0);
  2285. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), { n_embd, n_embd_gqa }, 0);
  2286. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), { n_embd, n_embd_gqa }, 0);
  2287. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), { n_embd, n_embd }, 0);
  2288. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), { n_embd, n_ff }, 0);
  2289. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd }, 0);
  2290. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), { n_embd, n_ff }, 0);
  2291. }
  2292. }
  2293. break;
  2294. case LLM_ARCH_OLMO: // adapted from LLM_ARCH_LLAMA with norm params removed
  2295. {
  2296. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2297. // output
  2298. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2299. // if output is NULL, init from the input tok embed
  2300. if (output == NULL) {
  2301. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2302. }
  2303. for (int i = 0; i < n_layer; ++i) {
  2304. auto & layer = layers[i];
  2305. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2306. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2307. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2308. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2309. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2310. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2311. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2312. }
  2313. } break;
  2314. case LLM_ARCH_OLMO2:
  2315. {
  2316. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2317. // output
  2318. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2319. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2320. for (int i = 0; i < n_layer; ++i) {
  2321. auto & layer = layers[i];
  2322. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2323. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2324. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2325. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2326. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd}, 0);
  2327. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd}, 0);
  2328. layer.attn_post_norm = create_tensor(tn(LLM_TENSOR_ATTN_POST_NORM, "weight", i), {n_embd}, 0);
  2329. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2330. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2331. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2332. layer.ffn_post_norm = create_tensor(tn(LLM_TENSOR_FFN_POST_NORM, "weight", i), {n_embd}, 0);
  2333. }
  2334. } break;
  2335. case LLM_ARCH_OLMOE:
  2336. {
  2337. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2338. // output
  2339. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2340. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2341. for (int i = 0; i < n_layer; ++i) {
  2342. auto & layer = layers[i];
  2343. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2344. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2345. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2346. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2347. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2348. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd}, 0);
  2349. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd}, 0);
  2350. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2351. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  2352. if (n_expert == 0) {
  2353. throw std::runtime_error("n_expert must be > 0");
  2354. }
  2355. if (n_expert_used == 0) {
  2356. throw std::runtime_error("n_expert_used must be > 0");
  2357. }
  2358. // MoE branch
  2359. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  2360. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff, n_embd, n_expert}, 0);
  2361. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  2362. }
  2363. } break;
  2364. case LLM_ARCH_OPENELM:
  2365. {
  2366. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2367. // output
  2368. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2369. // init output from the input tok embed
  2370. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2371. for (int i = 0; i < n_layer; ++i) {
  2372. const int64_t n_head = hparams.n_head(i);
  2373. const int64_t n_head_qkv = 2*hparams.n_head_kv(i) + n_head;
  2374. const int64_t n_ff = hparams.n_ff(i);
  2375. auto & layer = layers[i];
  2376. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2377. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_head_qkv*n_embd_head_k}, 0);
  2378. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd_head_k}, 0);
  2379. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd_head_k}, 0);
  2380. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_head*n_embd_head_k, n_embd}, 0);
  2381. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2382. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2383. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2384. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2385. }
  2386. } break;
  2387. case LLM_ARCH_GPTNEOX:
  2388. {
  2389. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2390. // output
  2391. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2392. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2393. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2394. for (int i = 0; i < n_layer; ++i) {
  2395. auto & layer = layers[i];
  2396. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2397. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2398. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  2399. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, 0);
  2400. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2401. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  2402. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2403. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2404. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2405. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  2406. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2407. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  2408. }
  2409. } break;
  2410. case LLM_ARCH_ARCTIC:
  2411. {
  2412. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2413. // output
  2414. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2415. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2416. // if output is NULL, init from the input tok embed
  2417. if (output == NULL) {
  2418. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2419. }
  2420. for (int i = 0; i < n_layer; ++i) {
  2421. auto & layer = layers[i];
  2422. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2423. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2424. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2425. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2426. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2427. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2428. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_embd}, 0);
  2429. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_embd, n_embd}, 0);
  2430. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_embd}, 0);
  2431. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  2432. layer.ffn_norm_exps = create_tensor(tn(LLM_TENSOR_FFN_NORM_EXPS, "weight", i), {n_embd}, 0);
  2433. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, false);
  2434. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), { n_ff, n_embd, n_expert}, 0);
  2435. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}, 0);
  2436. }
  2437. } break;
  2438. case LLM_ARCH_DEEPSEEK:
  2439. {
  2440. const int64_t n_ff_exp = hparams.n_ff_exp;
  2441. const int64_t n_expert_shared = hparams.n_expert_shared;
  2442. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2443. // output
  2444. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2445. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2446. for (int i = 0; i < n_layer; ++i) {
  2447. auto & layer = layers[i];
  2448. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2449. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2450. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2451. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2452. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2453. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2454. if (i < (int) hparams.n_layer_dense_lead) {
  2455. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2456. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2457. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2458. } else {
  2459. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  2460. if (n_expert == 0) {
  2461. throw std::runtime_error("n_expert must be > 0");
  2462. }
  2463. if (n_expert_used == 0) {
  2464. throw std::runtime_error("n_expert_used must be > 0");
  2465. }
  2466. // MoE branch
  2467. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0);
  2468. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff_exp, n_embd, n_expert}, 0);
  2469. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0);
  2470. // Shared expert branch
  2471. layer.ffn_gate_shexp = create_tensor(tn(LLM_TENSOR_FFN_GATE_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0);
  2472. layer.ffn_down_shexp = create_tensor(tn(LLM_TENSOR_FFN_DOWN_SHEXP, "weight", i), { n_ff_exp * n_expert_shared, n_embd}, 0);
  2473. layer.ffn_up_shexp = create_tensor(tn(LLM_TENSOR_FFN_UP_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0);
  2474. }
  2475. }
  2476. } break;
  2477. case LLM_ARCH_DEEPSEEK2:
  2478. {
  2479. const bool is_lite = (hparams.n_layer == 27);
  2480. const int64_t n_embd_head_qk_rope = hparams.n_rot;
  2481. const int64_t n_embd_head_qk_nope = hparams.n_embd_head_k - hparams.n_rot;
  2482. const int64_t q_lora_rank = hparams.n_lora_q;
  2483. const int64_t kv_lora_rank = hparams.n_lora_kv;
  2484. const int64_t n_ff_exp = hparams.n_ff_exp;
  2485. const int64_t n_expert_shared = hparams.n_expert_shared;
  2486. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2487. // output
  2488. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2489. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2490. for (int i = 0; i < n_layer; ++i) {
  2491. auto & layer = layers[i];
  2492. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2493. if (!is_lite) {
  2494. layer.attn_q_a_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_A_NORM, "weight", i), {q_lora_rank}, 0);
  2495. }
  2496. layer.attn_kv_a_norm = create_tensor(tn(LLM_TENSOR_ATTN_KV_A_NORM, "weight", i), {kv_lora_rank}, 0);
  2497. if (!is_lite) {
  2498. layer.wq_a = create_tensor(tn(LLM_TENSOR_ATTN_Q_A, "weight", i), {n_embd, q_lora_rank}, 0);
  2499. layer.wq_b = create_tensor(tn(LLM_TENSOR_ATTN_Q_B, "weight", i), {q_lora_rank, n_head * n_embd_head_k}, 0);
  2500. } else {
  2501. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2502. }
  2503. layer.wkv_a_mqa = create_tensor(tn(LLM_TENSOR_ATTN_KV_A_MQA, "weight", i), {n_embd, kv_lora_rank + (n_embd_head_qk_rope)}, 0);
  2504. layer.wkv_b = create_tensor(tn(LLM_TENSOR_ATTN_KV_B, "weight", i), {kv_lora_rank, n_head * (n_embd_head_qk_nope + n_embd_head_v)}, 0);
  2505. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), { n_head * ( n_embd_head_v), n_embd}, 0);
  2506. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2507. if (i < (int) hparams.n_layer_dense_lead) {
  2508. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2509. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2510. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2511. } else {
  2512. layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0);
  2513. layer.ffn_exp_probs_b = create_tensor(tn(LLM_TENSOR_FFN_EXP_PROBS_B, "bias", i), {n_expert}, TENSOR_NOT_REQUIRED);
  2514. if (n_expert == 0) {
  2515. throw std::runtime_error("n_expert must be > 0");
  2516. }
  2517. if (n_expert_used == 0) {
  2518. throw std::runtime_error("n_expert_used must be > 0");
  2519. }
  2520. // MoE branch
  2521. layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0);
  2522. layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff_exp, n_embd, n_expert}, 0);
  2523. layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0);
  2524. // Shared expert branch
  2525. layer.ffn_gate_shexp = create_tensor(tn(LLM_TENSOR_FFN_GATE_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0);
  2526. layer.ffn_down_shexp = create_tensor(tn(LLM_TENSOR_FFN_DOWN_SHEXP, "weight", i), { n_ff_exp * n_expert_shared, n_embd}, 0);
  2527. layer.ffn_up_shexp = create_tensor(tn(LLM_TENSOR_FFN_UP_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0);
  2528. }
  2529. }
  2530. } break;
  2531. case LLM_ARCH_BITNET:
  2532. {
  2533. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2534. // output
  2535. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2536. for (int i = 0; i < n_layer; ++i) {
  2537. auto & layer = layers[i];
  2538. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2539. layer.attn_sub_norm = create_tensor(tn(LLM_TENSOR_ATTN_SUB_NORM, "weight", i), {n_embd}, 0);
  2540. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2541. layer.wq_scale = create_tensor(tn(LLM_TENSOR_ATTN_Q, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2542. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2543. layer.wk_scale = create_tensor(tn(LLM_TENSOR_ATTN_K, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2544. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2545. layer.wv_scale = create_tensor(tn(LLM_TENSOR_ATTN_V, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2546. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2547. layer.wo_scale = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2548. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2549. layer.ffn_sub_norm = create_tensor(tn(LLM_TENSOR_FFN_SUB_NORM, "weight", i), {n_ff}, 0);
  2550. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2551. layer.ffn_gate_scale = create_tensor(tn(LLM_TENSOR_FFN_GATE, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2552. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2553. layer.ffn_down_scale = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2554. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2555. layer.ffn_up_scale = create_tensor(tn(LLM_TENSOR_FFN_UP, "scale", i), {1}, TENSOR_NOT_REQUIRED);
  2556. }
  2557. } break;
  2558. case LLM_ARCH_T5:
  2559. {
  2560. const auto n_rel_attn_bkts = hparams.n_rel_attn_bkts;
  2561. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2562. // output
  2563. output_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2564. output_norm = create_tensor(tn(LLM_TENSOR_DEC_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2565. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2566. // if output is NULL, init from the input tok embed
  2567. if (output == NULL) {
  2568. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2569. }
  2570. for (int i = 0; i < n_layer; ++i) {
  2571. auto & layer = layers[i];
  2572. layer.attn_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_NORM, "weight", i), {n_embd}, 0);
  2573. layer.attn_rel_b_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_REL_B, "weight", i), {n_head, n_rel_attn_bkts}, TENSOR_NOT_REQUIRED);
  2574. layer.wq_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_Q, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2575. layer.wk_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2576. layer.wv_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2577. layer.wo_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_OUT, "weight", i), {n_embd_v_gqa, n_embd}, 0);
  2578. layer.ffn_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_NORM, "weight", i), {n_embd}, 0);
  2579. layer.ffn_gate_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_GATE, "weight", i), {n_embd, n_ff}, TENSOR_NOT_REQUIRED);
  2580. layer.ffn_down_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2581. layer.ffn_up_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2582. layer.attn_norm = create_tensor(tn(LLM_TENSOR_DEC_ATTN_NORM, "weight", i), {n_embd}, 0);
  2583. layer.attn_rel_b = create_tensor(tn(LLM_TENSOR_DEC_ATTN_REL_B, "weight", i), {n_head, n_rel_attn_bkts}, TENSOR_NOT_REQUIRED);
  2584. layer.wq = create_tensor(tn(LLM_TENSOR_DEC_ATTN_Q, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2585. layer.wk = create_tensor(tn(LLM_TENSOR_DEC_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2586. layer.wv = create_tensor(tn(LLM_TENSOR_DEC_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2587. layer.wo = create_tensor(tn(LLM_TENSOR_DEC_ATTN_OUT, "weight", i), {n_embd_v_gqa, n_embd}, 0);
  2588. layer.attn_norm_cross = create_tensor(tn(LLM_TENSOR_DEC_CROSS_ATTN_NORM, "weight", i), {n_embd}, 0);
  2589. // this tensor seems to be unused in HF transformers implementation
  2590. layer.attn_rel_b_cross = create_tensor(tn(LLM_TENSOR_DEC_CROSS_ATTN_REL_B, "weight", i), {n_head, n_rel_attn_bkts}, TENSOR_NOT_REQUIRED);
  2591. layer.wq_cross = create_tensor(tn(LLM_TENSOR_DEC_CROSS_ATTN_Q, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2592. layer.wk_cross = create_tensor(tn(LLM_TENSOR_DEC_CROSS_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2593. layer.wv_cross = create_tensor(tn(LLM_TENSOR_DEC_CROSS_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2594. layer.wo_cross = create_tensor(tn(LLM_TENSOR_DEC_CROSS_ATTN_OUT, "weight", i), {n_embd_v_gqa, n_embd}, 0);
  2595. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_DEC_FFN_NORM, "weight", i), {n_embd}, 0);
  2596. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_DEC_FFN_GATE, "weight", i), {n_embd, n_ff}, TENSOR_NOT_REQUIRED);
  2597. layer.ffn_down = create_tensor(tn(LLM_TENSOR_DEC_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2598. layer.ffn_up = create_tensor(tn(LLM_TENSOR_DEC_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2599. }
  2600. } break;
  2601. case LLM_ARCH_T5ENCODER:
  2602. {
  2603. const auto n_rel_attn_bkts = hparams.n_rel_attn_bkts;
  2604. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2605. // output
  2606. output_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2607. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2608. // if output is NULL, init from the input tok embed
  2609. if (output == NULL) {
  2610. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2611. }
  2612. for (int i = 0; i < n_layer; ++i) {
  2613. auto & layer = layers[i];
  2614. layer.attn_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_NORM, "weight", i), {n_embd}, 0);
  2615. layer.attn_rel_b_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_REL_B, "weight", i), {n_head, n_rel_attn_bkts}, TENSOR_NOT_REQUIRED);
  2616. layer.wq_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_Q, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2617. layer.wk_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2618. layer.wv_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2619. layer.wo_enc = create_tensor(tn(LLM_TENSOR_ENC_ATTN_OUT, "weight", i), {n_embd_v_gqa, n_embd}, 0);
  2620. layer.ffn_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_NORM, "weight", i), {n_embd}, 0);
  2621. layer.ffn_gate_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_GATE, "weight", i), {n_embd, n_ff}, TENSOR_NOT_REQUIRED);
  2622. layer.ffn_down_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2623. layer.ffn_up_enc = create_tensor(tn(LLM_TENSOR_ENC_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2624. }
  2625. } break;
  2626. case LLM_ARCH_JAIS:
  2627. {
  2628. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2629. // output
  2630. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2631. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2632. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2633. for (int i = 0; i < n_layer; ++i) {
  2634. auto & layer = layers[i];
  2635. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2636. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2637. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0);
  2638. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, 0);
  2639. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2640. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0);
  2641. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2642. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2643. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2644. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);
  2645. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2646. layer.ffn_gate_b = create_tensor(tn(LLM_TENSOR_FFN_GATE, "bias", i), {n_ff}, 0);
  2647. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2648. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0);
  2649. }
  2650. } break;
  2651. case LLM_ARCH_CHATGLM:
  2652. {
  2653. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2654. // output
  2655. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2656. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2657. for (int i = 0; i < n_layer; ++i) {
  2658. auto & layer = layers[i];
  2659. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2660. layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2661. layer.bqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2662. if (layer.wqkv == nullptr) {
  2663. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  2664. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2665. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2666. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2667. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2668. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2669. }
  2670. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2671. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2672. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff * 2}, 0);
  2673. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
  2674. }
  2675. } break;
  2676. case LLM_ARCH_NEMOTRON:
  2677. {
  2678. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2679. // output
  2680. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2681. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2682. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2683. for (int i = 0; i < n_layer; ++i) {
  2684. auto & layer = layers[i];
  2685. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2686. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2687. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2688. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2689. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2690. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2691. // optional bias tensors
  2692. layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  2693. layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  2694. layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, TENSOR_NOT_REQUIRED);
  2695. layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  2696. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2697. layer.ffn_norm_b = create_tensor(tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, 0);
  2698. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2699. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2700. // optional MLP bias
  2701. layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
  2702. layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED);
  2703. }
  2704. } break;
  2705. case LLM_ARCH_EXAONE:
  2706. {
  2707. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2708. // output
  2709. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2710. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2711. for (int i = 0; i < n_layer; ++i) {
  2712. auto & layer = layers[i];
  2713. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2714. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  2715. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2716. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2717. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  2718. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2719. layer.rope_freqs = create_tensor(tn(LLM_TENSOR_ROPE_FREQS, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 0));
  2720. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2721. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2722. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2723. }
  2724. } break;
  2725. case LLM_ARCH_RWKV6:
  2726. {
  2727. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2728. // Block 0, LN0
  2729. tok_norm = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, 0);
  2730. tok_norm_b = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}, 0);
  2731. // output
  2732. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2733. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2734. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2735. const int time_mix_extra_dim = hparams.time_mix_extra_dim;
  2736. const int time_decay_extra_dim = hparams.time_decay_extra_dim;
  2737. const int head_size = hparams.wkv_head_size;
  2738. const int attn_hidden_size = n_embd;
  2739. const int ffn_size = hparams.n_ff_arr[0];
  2740. for (int i = 0; i < n_layer; ++i) {
  2741. auto & layer = layers[i];
  2742. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2743. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, 0);
  2744. layer.attn_norm_2 = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "weight", i), {n_embd}, 0);
  2745. layer.attn_norm_2_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "bias", i), {n_embd}, 0);
  2746. layer.time_mix_w1 = create_tensor(tn(LLM_TENSOR_TIME_MIX_W1, "weight", i), {n_embd, time_mix_extra_dim * 5}, 0);
  2747. layer.time_mix_w2 = create_tensor(tn(LLM_TENSOR_TIME_MIX_W2, "weight", i), {time_mix_extra_dim, n_embd, 5}, 0);
  2748. layer.time_mix_lerp_x = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_X, "weight", i), {n_embd, 1, 1}, 0);
  2749. layer.time_mix_lerp_w = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_W, "weight", i), {n_embd, 1, 1}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2750. layer.time_mix_lerp_k = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_K, "weight", i), {n_embd, 1, 1}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2751. layer.time_mix_lerp_v = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_V, "weight", i), {n_embd, 1, 1}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2752. layer.time_mix_lerp_r = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_R, "weight", i), {n_embd, 1, 1}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2753. layer.time_mix_lerp_g = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_G, "weight", i), {n_embd, 1, 1}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2754. layer.time_mix_lerp_fused = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_FUSED, "weight", i), {n_embd, 1, 1, 5}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2755. GGML_ASSERT(!(layer.time_mix_lerp_fused == NULL && layer.time_mix_lerp_w == NULL));
  2756. layer.time_mix_first = create_tensor(tn(LLM_TENSOR_TIME_MIX_FIRST, "weight", i), {head_size, n_embd / head_size}, 0);
  2757. layer.time_mix_decay = create_tensor(tn(LLM_TENSOR_TIME_MIX_DECAY, "weight", i), {n_embd}, 0);
  2758. layer.time_mix_decay_w1 = create_tensor(tn(LLM_TENSOR_TIME_MIX_DECAY_W1, "weight", i), {n_embd, time_decay_extra_dim}, 0);
  2759. layer.time_mix_decay_w2 = create_tensor(tn(LLM_TENSOR_TIME_MIX_DECAY_W2, "weight", i), {time_decay_extra_dim, attn_hidden_size}, 0);
  2760. layer.time_mix_key = create_tensor(tn(LLM_TENSOR_TIME_MIX_KEY, "weight", i), {attn_hidden_size, n_embd}, 0);
  2761. layer.time_mix_value = create_tensor(tn(LLM_TENSOR_TIME_MIX_VALUE, "weight", i), {attn_hidden_size, n_embd}, 0);
  2762. layer.time_mix_receptance = create_tensor(tn(LLM_TENSOR_TIME_MIX_RECEPTANCE, "weight", i), {attn_hidden_size, n_embd}, 0);
  2763. layer.time_mix_gate = create_tensor(tn(LLM_TENSOR_TIME_MIX_GATE, "weight", i), {attn_hidden_size, n_embd}, 0);
  2764. layer.time_mix_ln = create_tensor(tn(LLM_TENSOR_TIME_MIX_LN, "weight", i), {n_embd}, 0);
  2765. layer.time_mix_ln_b = create_tensor(tn(LLM_TENSOR_TIME_MIX_LN, "bias", i), {n_embd}, 0);
  2766. layer.time_mix_output = create_tensor(tn(LLM_TENSOR_TIME_MIX_OUTPUT, "weight", i), {n_embd, attn_hidden_size}, 0);
  2767. layer.channel_mix_lerp_k = create_tensor(tn(LLM_TENSOR_CHANNEL_MIX_LERP_K, "weight", i), {n_embd, 1, 1}, 0);
  2768. layer.channel_mix_lerp_r = create_tensor(tn(LLM_TENSOR_CHANNEL_MIX_LERP_R, "weight", i), {n_embd, 1, 1}, 0);
  2769. layer.channel_mix_key = create_tensor(tn(LLM_TENSOR_CHANNEL_MIX_KEY, "weight", i), {n_embd, ffn_size}, 0);
  2770. layer.channel_mix_value = create_tensor(tn(LLM_TENSOR_CHANNEL_MIX_VALUE, "weight", i), {ffn_size, n_embd}, 0);
  2771. layer.channel_mix_receptance = create_tensor(tn(LLM_TENSOR_CHANNEL_MIX_RECEPTANCE, "weight", i), {n_embd, n_embd}, 0);
  2772. }
  2773. } break;
  2774. case LLM_ARCH_RWKV6QWEN2:
  2775. {
  2776. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2777. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2778. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2779. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, 0);
  2780. const int time_mix_extra_dim = hparams.time_mix_extra_dim;
  2781. const int time_decay_extra_dim = hparams.time_decay_extra_dim;
  2782. const int head_size = hparams.wkv_head_size;
  2783. const int attn_hidden_size = n_embd;
  2784. const int n_head_kv = hparams.n_head_kv();
  2785. int attn_key_value_size;
  2786. if (n_head_kv == 0 || attn_hidden_size / head_size == n_head_kv) {
  2787. attn_key_value_size = attn_hidden_size;
  2788. } else {
  2789. attn_key_value_size = n_head_kv * head_size;
  2790. }
  2791. for (int i = 0; i < n_layer; ++i) {
  2792. auto & layer = layers[i];
  2793. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2794. layer.time_mix_w1 = create_tensor(tn(LLM_TENSOR_TIME_MIX_W1, "weight", i), {n_embd, time_mix_extra_dim * 5}, 0);
  2795. layer.time_mix_w2 = create_tensor(tn(LLM_TENSOR_TIME_MIX_W2, "weight", i), {time_mix_extra_dim, n_embd, 5}, 0);
  2796. layer.time_mix_lerp_x = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_X, "weight", i), {n_embd, 1, 1}, 0);
  2797. layer.time_mix_lerp_fused = create_tensor(tn(LLM_TENSOR_TIME_MIX_LERP_FUSED, "weight", i), {n_embd, 1, 1, 5}, 0);
  2798. layer.time_mix_first = create_tensor(tn(LLM_TENSOR_TIME_MIX_FIRST, "weight", i), {head_size, n_embd / head_size}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2799. layer.time_mix_decay = create_tensor(tn(LLM_TENSOR_TIME_MIX_DECAY, "weight", i), {n_embd}, 0);
  2800. layer.time_mix_decay_w1 = create_tensor(tn(LLM_TENSOR_TIME_MIX_DECAY_W1, "weight", i), {n_embd, time_decay_extra_dim}, 0);
  2801. layer.time_mix_decay_w2 = create_tensor(tn(LLM_TENSOR_TIME_MIX_DECAY_W2, "weight", i), {time_decay_extra_dim, attn_hidden_size}, 0);
  2802. layer.time_mix_key = create_tensor(tn(LLM_TENSOR_TIME_MIX_KEY, "weight", i), {n_embd, attn_key_value_size}, 0);
  2803. layer.time_mix_value = create_tensor(tn(LLM_TENSOR_TIME_MIX_VALUE, "weight", i), {n_embd, attn_key_value_size}, 0);
  2804. layer.time_mix_receptance = create_tensor(tn(LLM_TENSOR_TIME_MIX_RECEPTANCE, "weight", i), {attn_hidden_size, n_embd}, 0);
  2805. layer.time_mix_gate = create_tensor(tn(LLM_TENSOR_TIME_MIX_GATE, "weight", i), {attn_hidden_size, n_embd}, 0);
  2806. // optional bias tensors
  2807. layer.time_mix_key_b = create_tensor(tn(LLM_TENSOR_TIME_MIX_KEY, "bias", i), {attn_key_value_size}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2808. layer.time_mix_value_b = create_tensor(tn(LLM_TENSOR_TIME_MIX_VALUE, "bias", i), {attn_key_value_size}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2809. layer.time_mix_receptance_b = create_tensor(tn(LLM_TENSOR_TIME_MIX_RECEPTANCE, "bias", i), {attn_hidden_size}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2810. layer.time_mix_output = create_tensor(tn(LLM_TENSOR_TIME_MIX_OUTPUT, "weight", i), {n_embd, attn_hidden_size}, 0);
  2811. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2812. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2813. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2814. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2815. }
  2816. } break;
  2817. case LLM_ARCH_CHAMELEON:
  2818. {
  2819. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2820. // output
  2821. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2822. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED);
  2823. // if output is NULL, init from the input tok embed
  2824. if (output == NULL) {
  2825. output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED);
  2826. }
  2827. for (int i = 0; i < n_layer; ++i) {
  2828. auto & layer = layers[i];
  2829. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2830. layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd_head_k, n_head}, 0);
  2831. layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd_head_k, n_head_kv}, 0);
  2832. layer.attn_q_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {n_embd_head_k, n_head}, TENSOR_NOT_REQUIRED);
  2833. layer.attn_k_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {n_embd_head_k, n_head_kv}, TENSOR_NOT_REQUIRED);
  2834. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}, 0);
  2835. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}, 0);
  2836. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}, 0);
  2837. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0);
  2838. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2839. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2840. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2841. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2842. }
  2843. } break;
  2844. case LLM_ARCH_SOLAR:
  2845. {
  2846. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0);
  2847. // output
  2848. {
  2849. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2850. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, llama_model_loader::TENSOR_NOT_REQUIRED);
  2851. }
  2852. for (int i = 0; i < n_layer; ++i) {
  2853. auto & layer = layers[i];
  2854. layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0);
  2855. layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0);
  2856. layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0);
  2857. layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0);
  2858. layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0);
  2859. layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0);
  2860. layer.bskcn_tv = create_tensor(tn(LLM_TENSOR_BSKCN_TV, "weight", i), {2}, llama_model_loader::TENSOR_NOT_REQUIRED | (i != 0 ? llama_model_loader::TENSOR_DUPLICATED : 0));
  2861. layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0);
  2862. layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0);
  2863. layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0);
  2864. }
  2865. } break;
  2866. case LLM_ARCH_WAVTOKENIZER_DEC:
  2867. {
  2868. tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {hparams.n_embd_features, n_vocab}, 0);
  2869. conv1d = create_tensor(tn(LLM_TENSOR_CONV1D, "weight"), {7, hparams.n_embd_features, hparams.posnet.n_embd}, 0);
  2870. conv1d_b = create_tensor(tn(LLM_TENSOR_CONV1D, "bias"), {1, hparams.posnet.n_embd}, 0);
  2871. // posnet
  2872. {
  2873. const int64_t n_embd = hparams.posnet.n_embd;
  2874. for (uint32_t i = 0; i < hparams.posnet.n_layer; ++i) {
  2875. auto & layer = layers[i].posnet;
  2876. // posnet:
  2877. //
  2878. // - resnet
  2879. // - resnet
  2880. // - attn
  2881. // - resnet
  2882. // - resnet
  2883. // - norm
  2884. //
  2885. switch (i) {
  2886. case 0:
  2887. case 1:
  2888. case 3:
  2889. case 4:
  2890. {
  2891. layer.norm1 = create_tensor(tn(LLM_TENSOR_POS_NET_NORM1, "weight", i), {1, n_embd}, 0);
  2892. layer.norm1_b = create_tensor(tn(LLM_TENSOR_POS_NET_NORM1, "bias", i), {1, n_embd}, 0);
  2893. layer.conv1 = create_tensor(tn(LLM_TENSOR_POS_NET_CONV1, "weight", i), {3, n_embd, n_embd}, 0);
  2894. layer.conv1_b = create_tensor(tn(LLM_TENSOR_POS_NET_CONV1, "bias", i), {1, n_embd}, 0);
  2895. layer.norm2 = create_tensor(tn(LLM_TENSOR_POS_NET_NORM2, "weight", i), {1, n_embd}, 0);
  2896. layer.norm2_b = create_tensor(tn(LLM_TENSOR_POS_NET_NORM2, "bias", i), {1, n_embd}, 0);
  2897. layer.conv2 = create_tensor(tn(LLM_TENSOR_POS_NET_CONV2, "weight", i), {3, n_embd, n_embd}, 0);
  2898. layer.conv2_b = create_tensor(tn(LLM_TENSOR_POS_NET_CONV2, "bias", i), {1, n_embd}, 0);
  2899. } break;
  2900. case 2:
  2901. {
  2902. layer.attn_norm = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_NORM, "weight", i), {1, n_embd}, 0);
  2903. layer.attn_norm_b = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_NORM, "bias", i), {1, n_embd}, 0);
  2904. layer.attn_q = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_Q, "weight", i), {1, n_embd, n_embd}, 0);
  2905. layer.attn_q_b = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_Q, "bias", i), {1, n_embd}, 0);
  2906. layer.attn_k = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_K, "weight", i), {1, n_embd, n_embd}, 0);
  2907. layer.attn_k_b = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_K, "bias", i), {1, n_embd}, 0);
  2908. layer.attn_v = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_V, "weight", i), {1, n_embd, n_embd}, 0);
  2909. layer.attn_v_b = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_V, "bias", i), {1, n_embd}, 0);
  2910. layer.attn_o = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_OUT, "weight", i), {1, n_embd, n_embd}, 0);
  2911. layer.attn_o_b = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_OUT, "bias", i), {1, n_embd}, 0);
  2912. } break;
  2913. case 5:
  2914. {
  2915. layer.norm = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_NORM, "weight", i), {1, n_embd}, 0);
  2916. layer.norm_b = create_tensor(tn(LLM_TENSOR_POS_NET_ATTN_NORM, "bias", i), {1, n_embd}, 0);
  2917. } break;
  2918. default: GGML_ABORT("unknown posnet layer");
  2919. };
  2920. }
  2921. }
  2922. GGML_ASSERT(hparams.posnet.n_embd == hparams.convnext.n_embd);
  2923. tok_norm = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {hparams.posnet.n_embd}, 0);
  2924. tok_norm_b = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {hparams.posnet.n_embd}, 0);
  2925. // convnext
  2926. {
  2927. const int64_t n_embd = hparams.convnext.n_embd;
  2928. for (uint32_t i = 0; i < hparams.convnext.n_layer; ++i) {
  2929. auto & layer = layers[i].convnext;
  2930. layer.dw = create_tensor(tn(LLM_TENSOR_CONVNEXT_DW, "weight", i), {7, 1, n_embd}, 0);
  2931. layer.dw_b = create_tensor(tn(LLM_TENSOR_CONVNEXT_DW, "bias", i), {1, n_embd}, 0);
  2932. layer.norm = create_tensor(tn(LLM_TENSOR_CONVNEXT_NORM, "weight", i), {n_embd}, 0);
  2933. layer.norm_b = create_tensor(tn(LLM_TENSOR_CONVNEXT_NORM, "bias", i), {n_embd}, 0);
  2934. layer.pw1 = create_tensor(tn(LLM_TENSOR_CONVNEXT_PW1, "weight", i), {n_embd, n_ff}, 0);
  2935. layer.pw1_b = create_tensor(tn(LLM_TENSOR_CONVNEXT_PW1, "bias", i), {n_ff}, 0);
  2936. layer.pw2 = create_tensor(tn(LLM_TENSOR_CONVNEXT_PW2, "weight", i), {n_ff, n_embd}, 0);
  2937. layer.pw2_b = create_tensor(tn(LLM_TENSOR_CONVNEXT_PW2, "bias", i), {n_embd}, 0);
  2938. layer.gamma = create_tensor(tn(LLM_TENSOR_CONVNEXT_GAMMA, "weight", i), {n_embd}, 0);
  2939. }
  2940. // output
  2941. output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0);
  2942. output_norm_b = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, 0);
  2943. }
  2944. output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {hparams.convnext.n_embd, n_embd}, 0);
  2945. output_b = create_tensor(tn(LLM_TENSOR_OUTPUT, "bias"), {n_embd}, 0);
  2946. } break;
  2947. default:
  2948. throw std::runtime_error("unknown architecture");
  2949. }
  2950. if (n_moved_tensors > 0) {
  2951. LLAMA_LOG_DEBUG("%s: tensor '%s' (%s) (and %d others) cannot be used with preferred buffer type %s, using %s instead\n",
  2952. __func__, first_moved_tensor->name, ggml_type_name(first_moved_tensor->type), n_moved_tensors - 1,
  2953. ggml_backend_buft_name(first_moved_from_buft), ggml_backend_buft_name(first_moved_to_buft));
  2954. }
  2955. }
  2956. ml.done_getting_tensors();
  2957. ml.init_mappings(true, use_mlock ? &pimpl->mlock_mmaps : nullptr);
  2958. pimpl->mappings.reserve(ml.mappings.size());
  2959. // create the backend buffers
  2960. std::vector<std::pair<ggml_context *, llama_buf_map>> ctx_bufs;
  2961. ctx_bufs.reserve(ctx_map.size());
  2962. // Ensure we have enough capacity for the maximum backend buffer we will potentially create
  2963. const size_t n_max_backend_buffer = ctx_map.size() * ml.files.size();
  2964. pimpl->bufs.reserve(n_max_backend_buffer);
  2965. for (auto & it : ctx_map) {
  2966. ggml_backend_buffer_type_t buft = it.first;
  2967. ggml_context * ctx = it.second;
  2968. // skip contexts without tensors
  2969. if (ggml_get_first_tensor(ctx) == nullptr) {
  2970. continue;
  2971. }
  2972. llama_buf_map buf_map;
  2973. buf_map.reserve(n_max_backend_buffer);
  2974. // check if it is possible to use buffer_from_host_ptr with this buffer type
  2975. ggml_backend_dev_t dev = ggml_backend_buft_get_device(buft);
  2976. if (!dev) {
  2977. // FIXME: workaround for CPU backend buft having a NULL device
  2978. dev = ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_CPU);
  2979. }
  2980. ggml_backend_dev_props props;
  2981. ggml_backend_dev_get_props(dev, &props);
  2982. bool buffer_from_host_ptr_supported = props.caps.buffer_from_host_ptr;
  2983. bool is_default_buft = buft == ggml_backend_dev_buffer_type(dev);
  2984. if (ml.use_mmap && use_mmap_buffer && buffer_from_host_ptr_supported && is_default_buft) {
  2985. for (uint32_t idx = 0; idx < ml.files.size(); idx++) {
  2986. // only the mmap region containing the tensors in the model is mapped to the backend buffer
  2987. // this is important for metal with apple silicon: if the entire model could be mapped to a metal buffer, then we could just use metal for all layers
  2988. // this allows using partial offloading when the model size exceeds the metal buffer size, but not the RAM size
  2989. void * addr = nullptr;
  2990. size_t first, last; // NOLINT
  2991. ml.get_mapping_range(&first, &last, &addr, idx, ctx);
  2992. if (first >= last) {
  2993. continue;
  2994. }
  2995. const size_t max_size = ggml_get_max_tensor_size(ctx);
  2996. ggml_backend_buffer_t buf = ggml_backend_dev_buffer_from_host_ptr(dev, (char *) addr + first, last - first, max_size);
  2997. if (buf == nullptr) {
  2998. throw std::runtime_error(format("unable to allocate %s buffer", ggml_backend_buft_name(buft)));
  2999. }
  3000. pimpl->bufs.emplace_back(buf);
  3001. buf_map.emplace(idx, buf);
  3002. }
  3003. }
  3004. else {
  3005. ggml_backend_buffer_t buf = ggml_backend_alloc_ctx_tensors_from_buft(ctx, buft);
  3006. if (buf == nullptr) {
  3007. throw std::runtime_error(format("unable to allocate %s buffer", ggml_backend_buft_name(buft)));
  3008. }
  3009. pimpl->bufs.emplace_back(buf);
  3010. if (use_mlock && ggml_backend_buffer_is_host(buf)) {
  3011. pimpl->mlock_bufs.emplace_back(new llama_mlock);
  3012. auto & mlock_buf = pimpl->mlock_bufs.back();
  3013. mlock_buf->init (ggml_backend_buffer_get_base(buf));
  3014. mlock_buf->grow_to(ggml_backend_buffer_get_size(buf));
  3015. }
  3016. for (uint32_t idx = 0; idx < ml.files.size(); idx++) {
  3017. buf_map.emplace(idx, buf);
  3018. }
  3019. }
  3020. if (pimpl->bufs.empty()) {
  3021. throw std::runtime_error("failed to allocate buffer");
  3022. }
  3023. for (auto & buf : buf_map) {
  3024. // indicate that this buffer contains weights
  3025. // this is used by ggml_backend_sched to improve op scheduling: ops that use a weight are preferably scheduled to the backend that contains the weight
  3026. ggml_backend_buffer_set_usage(buf.second, GGML_BACKEND_BUFFER_USAGE_WEIGHTS);
  3027. }
  3028. ctx_bufs.emplace_back(ctx, buf_map);
  3029. }
  3030. if (llama_supports_gpu_offload()) {
  3031. const int n_gpu = std::min(n_gpu_layers, int(hparams.n_layer));
  3032. LLAMA_LOG_INFO("%s: offloading %d repeating layers to GPU\n", __func__, n_gpu);
  3033. if (n_gpu_layers > (int) hparams.n_layer) {
  3034. LLAMA_LOG_INFO("%s: offloading output layer to GPU\n", __func__);
  3035. }
  3036. const int max_backend_supported_layers = hparams.n_layer + 1;
  3037. const int max_offloadable_layers = hparams.n_layer + 1;
  3038. LLAMA_LOG_INFO("%s: offloaded %d/%d layers to GPU\n", __func__, std::min(n_gpu_layers, max_offloadable_layers), max_backend_supported_layers);
  3039. }
  3040. // print memory requirements per buffer type
  3041. for (auto & buf : pimpl->bufs) {
  3042. LLAMA_LOG_INFO("%s: %12s model buffer size = %8.2f MiB\n", __func__, ggml_backend_buffer_name(buf.get()), ggml_backend_buffer_get_size(buf.get()) / 1024.0 / 1024.0);
  3043. }
  3044. // populate tensors_by_name
  3045. for (auto & ctx : pimpl->ctxs) {
  3046. for (auto * cur = ggml_get_first_tensor(ctx.get()); cur != NULL; cur = ggml_get_next_tensor(ctx.get(), cur)) {
  3047. tensors_by_name.emplace_back(ggml_get_name(cur), cur);
  3048. }
  3049. }
  3050. // load tensor data
  3051. for (auto & it : ctx_bufs) {
  3052. ggml_context * ctx = it.first;
  3053. auto & bufs = it.second;
  3054. if (!ml.load_all_data(ctx, bufs, use_mlock ? &pimpl->mlock_mmaps : NULL, params.progress_callback, params.progress_callback_user_data)) {
  3055. return false;
  3056. }
  3057. }
  3058. if (use_mmap_buffer) {
  3059. for (auto & mapping : ml.mappings) {
  3060. pimpl->mappings.emplace_back(std::move(mapping));
  3061. }
  3062. }
  3063. return true;
  3064. }
  3065. std::string llama_model::arch_name() const {
  3066. return llm_arch_name(arch);
  3067. }
  3068. std::string llama_model::type_name() const {
  3069. return llm_type_name(type);
  3070. }
  3071. std::string llama_model::desc() const {
  3072. return pimpl->desc_str;
  3073. }
  3074. size_t llama_model::size() const {
  3075. return pimpl->n_bytes;
  3076. }
  3077. size_t llama_model::max_nodes() const {
  3078. return std::max<size_t>(8192, tensors_by_name.size()*5);
  3079. }
  3080. size_t llama_model::n_devices() const {
  3081. return devices.size();
  3082. }
  3083. uint64_t llama_model::n_elements() const {
  3084. return pimpl->n_elements;
  3085. }
  3086. void llama_model::print_info() const {
  3087. const char * rope_scaling_type = LLAMA_ROPE_SCALING_TYPES.at(hparams.rope_scaling_type_train);
  3088. auto print_f = [](const std::function<uint32_t(uint32_t)> & f, uint32_t n) {
  3089. bool is_var = false;
  3090. std::vector<uint32_t> v;
  3091. for (uint32_t i = 0; i < n; ++i) {
  3092. v.push_back(f(i));
  3093. if (v[i] != v[0]) {
  3094. is_var = true;
  3095. }
  3096. }
  3097. std::stringstream ss;
  3098. if (is_var) {
  3099. ss << "[";
  3100. for (uint32_t i = 0; i < n; ++i) {
  3101. ss << v[i];
  3102. if (i < n - 1) {
  3103. ss << ", ";
  3104. }
  3105. }
  3106. ss << "]";
  3107. } else {
  3108. ss << v[0];
  3109. }
  3110. return ss.str();
  3111. };
  3112. // hparams
  3113. LLAMA_LOG_INFO("%s: arch = %s\n", __func__, arch_name().c_str());
  3114. LLAMA_LOG_INFO("%s: vocab_only = %d\n", __func__, hparams.vocab_only);
  3115. if (!hparams.vocab_only) {
  3116. LLAMA_LOG_INFO("%s: n_ctx_train = %u\n", __func__, hparams.n_ctx_train);
  3117. LLAMA_LOG_INFO("%s: n_embd = %u\n", __func__, hparams.n_embd);
  3118. LLAMA_LOG_INFO("%s: n_layer = %u\n", __func__, hparams.n_layer);
  3119. LLAMA_LOG_INFO("%s: n_head = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_head(il); }, hparams.n_layer).c_str());
  3120. LLAMA_LOG_INFO("%s: n_head_kv = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_head_kv(il); }, hparams.n_layer).c_str());
  3121. LLAMA_LOG_INFO("%s: n_rot = %u\n", __func__, hparams.n_rot);
  3122. LLAMA_LOG_INFO("%s: n_swa = %u\n", __func__, hparams.n_swa);
  3123. LLAMA_LOG_INFO("%s: n_embd_head_k = %u\n", __func__, hparams.n_embd_head_k);
  3124. LLAMA_LOG_INFO("%s: n_embd_head_v = %u\n", __func__, hparams.n_embd_head_v);
  3125. LLAMA_LOG_INFO("%s: n_gqa = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_gqa(il); }, hparams.n_layer).c_str());
  3126. LLAMA_LOG_INFO("%s: n_embd_k_gqa = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_embd_k_gqa(il); }, hparams.n_layer).c_str());
  3127. LLAMA_LOG_INFO("%s: n_embd_v_gqa = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_embd_v_gqa(il); }, hparams.n_layer).c_str());
  3128. LLAMA_LOG_INFO("%s: f_norm_eps = %.1e\n", __func__, hparams.f_norm_eps);
  3129. LLAMA_LOG_INFO("%s: f_norm_rms_eps = %.1e\n", __func__, hparams.f_norm_rms_eps);
  3130. LLAMA_LOG_INFO("%s: f_clamp_kqv = %.1e\n", __func__, hparams.f_clamp_kqv);
  3131. LLAMA_LOG_INFO("%s: f_max_alibi_bias = %.1e\n", __func__, hparams.f_max_alibi_bias);
  3132. LLAMA_LOG_INFO("%s: f_logit_scale = %.1e\n", __func__, hparams.f_logit_scale);
  3133. LLAMA_LOG_INFO("%s: n_ff = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_ff(il); }, hparams.n_layer).c_str());
  3134. LLAMA_LOG_INFO("%s: n_expert = %u\n", __func__, hparams.n_expert);
  3135. LLAMA_LOG_INFO("%s: n_expert_used = %u\n", __func__, hparams.n_expert_used);
  3136. LLAMA_LOG_INFO("%s: causal attn = %d\n", __func__, hparams.causal_attn);
  3137. LLAMA_LOG_INFO("%s: pooling type = %d\n", __func__, hparams.pooling_type);
  3138. LLAMA_LOG_INFO("%s: rope type = %d\n", __func__, hparams.rope_type);
  3139. LLAMA_LOG_INFO("%s: rope scaling = %s\n", __func__, rope_scaling_type);
  3140. LLAMA_LOG_INFO("%s: freq_base_train = %.1f\n", __func__, hparams.rope_freq_base_train);
  3141. LLAMA_LOG_INFO("%s: freq_scale_train = %g\n", __func__, hparams.rope_freq_scale_train);
  3142. LLAMA_LOG_INFO("%s: n_ctx_orig_yarn = %u\n", __func__, hparams.n_ctx_orig_yarn);
  3143. LLAMA_LOG_INFO("%s: rope_finetuned = %s\n", __func__, hparams.rope_finetuned ? "yes" : "unknown");
  3144. LLAMA_LOG_INFO("%s: ssm_d_conv = %u\n", __func__, hparams.ssm_d_conv);
  3145. LLAMA_LOG_INFO("%s: ssm_d_inner = %u\n", __func__, hparams.ssm_d_inner);
  3146. LLAMA_LOG_INFO("%s: ssm_d_state = %u\n", __func__, hparams.ssm_d_state);
  3147. LLAMA_LOG_INFO("%s: ssm_dt_rank = %u\n", __func__, hparams.ssm_dt_rank);
  3148. LLAMA_LOG_INFO("%s: ssm_dt_b_c_rms = %d\n", __func__, hparams.ssm_dt_b_c_rms);
  3149. }
  3150. LLAMA_LOG_INFO("%s: model type = %s\n", __func__, type_name().c_str());
  3151. if (pimpl->n_elements >= 1e12) {
  3152. LLAMA_LOG_INFO("%s: model params = %.2f T\n", __func__, pimpl->n_elements*1e-12);
  3153. } else if (pimpl->n_elements >= 1e9) {
  3154. LLAMA_LOG_INFO("%s: model params = %.2f B\n", __func__, pimpl->n_elements*1e-9);
  3155. } else if (pimpl->n_elements >= 1e6) {
  3156. LLAMA_LOG_INFO("%s: model params = %.2f M\n", __func__, pimpl->n_elements*1e-6);
  3157. } else {
  3158. LLAMA_LOG_INFO("%s: model params = %.2f K\n", __func__, pimpl->n_elements*1e-3);
  3159. }
  3160. // general kv
  3161. LLAMA_LOG_INFO("%s: general.name = %s\n", __func__, name.c_str());
  3162. if (arch == LLM_ARCH_DEEPSEEK) {
  3163. LLAMA_LOG_INFO("%s: n_layer_dense_lead = %d\n", __func__, hparams.n_layer_dense_lead);
  3164. LLAMA_LOG_INFO("%s: n_ff_exp = %d\n", __func__, hparams.n_ff_exp);
  3165. LLAMA_LOG_INFO("%s: n_expert_shared = %d\n", __func__, hparams.n_expert_shared);
  3166. LLAMA_LOG_INFO("%s: expert_weights_scale = %.1f\n", __func__, hparams.expert_weights_scale);
  3167. }
  3168. if (arch == LLM_ARCH_DEEPSEEK2) {
  3169. LLAMA_LOG_INFO("%s: n_layer_dense_lead = %d\n", __func__, hparams.n_layer_dense_lead);
  3170. LLAMA_LOG_INFO("%s: n_lora_q = %d\n", __func__, hparams.n_lora_q);
  3171. LLAMA_LOG_INFO("%s: n_lora_kv = %d\n", __func__, hparams.n_lora_kv);
  3172. LLAMA_LOG_INFO("%s: n_ff_exp = %d\n", __func__, hparams.n_ff_exp);
  3173. LLAMA_LOG_INFO("%s: n_expert_shared = %d\n", __func__, hparams.n_expert_shared);
  3174. LLAMA_LOG_INFO("%s: expert_weights_scale = %.1f\n", __func__, hparams.expert_weights_scale);
  3175. LLAMA_LOG_INFO("%s: expert_weights_norm = %d\n", __func__, hparams.expert_weights_norm);
  3176. LLAMA_LOG_INFO("%s: expert_gating_func = %s\n", __func__, llama_expert_gating_func_name((enum llama_expert_gating_func_type) hparams.expert_gating_func));
  3177. LLAMA_LOG_INFO("%s: rope_yarn_log_mul = %.4f\n", __func__, hparams.rope_yarn_log_mul);
  3178. }
  3179. if (arch == LLM_ARCH_QWEN2MOE) {
  3180. LLAMA_LOG_INFO("%s: n_ff_exp = %d\n", __func__, hparams.n_ff_exp);
  3181. LLAMA_LOG_INFO("%s: n_ff_shexp = %d\n", __func__, hparams.n_ff_shexp);
  3182. }
  3183. if (arch == LLM_ARCH_MINICPM || arch == LLM_ARCH_GRANITE || arch == LLM_ARCH_GRANITE_MOE) {
  3184. LLAMA_LOG_INFO("%s: f_embedding_scale = %f\n", __func__, hparams.f_embedding_scale);
  3185. LLAMA_LOG_INFO("%s: f_residual_scale = %f\n", __func__, hparams.f_residual_scale);
  3186. LLAMA_LOG_INFO("%s: f_attention_scale = %f\n", __func__, hparams.f_attention_scale);
  3187. }
  3188. vocab.print_info();
  3189. }
  3190. ggml_backend_dev_t llama_model::dev_layer(int il) const {
  3191. return pimpl->dev_layer.at(il).dev;
  3192. }
  3193. ggml_backend_dev_t llama_model::dev_output() const {
  3194. return pimpl->dev_output.dev;
  3195. }
  3196. template<typename F>
  3197. static bool buft_supported(ggml_backend_buffer_type_t buft, ggml_backend_dev_t dev, F & fn) {
  3198. ggml_init_params params = {
  3199. /*.mem_size =*/ ggml_tensor_overhead()*8,
  3200. /*.mem_buffer =*/ NULL,
  3201. /*.no_alloc =*/ true,
  3202. };
  3203. ggml_context_ptr ctx { ggml_init(params) };
  3204. if (!ctx) {
  3205. throw std::runtime_error(format("failed to create ggml context"));
  3206. }
  3207. ggml_backend_buffer_ptr buf { ggml_backend_buft_alloc_buffer(buft, 0) };
  3208. ggml_tensor * op_tensor = fn(ctx.get());
  3209. for (int i = 0; i < GGML_MAX_SRC; i++) {
  3210. if (op_tensor->src[i] != nullptr) {
  3211. assert(op_tensor->src[i]->buffer == nullptr);
  3212. op_tensor->src[i]->buffer = buf.get();
  3213. }
  3214. }
  3215. bool op_supported = ggml_backend_dev_supports_op(dev, op_tensor);
  3216. return op_supported;
  3217. }
  3218. template<typename F>
  3219. static ggml_backend_buffer_type_t select_buft(const buft_list_t & buft_list, const F & fn) {
  3220. for (const auto & cur : buft_list) {
  3221. ggml_backend_dev_t cur_dev = cur.first;
  3222. ggml_backend_buffer_type_t cur_buft = cur.second;
  3223. if (buft_supported(cur_buft, cur_dev, fn)) {
  3224. return cur_buft;
  3225. }
  3226. }
  3227. throw std::runtime_error(format("no suitable buffer type found"));
  3228. }
  3229. ggml_backend_buffer_type_t llama_model::select_buft(int il) const {
  3230. return ::select_buft(
  3231. *pimpl->dev_layer.at(il).buft_list,
  3232. [&](ggml_context * ctx) {
  3233. ggml_tensor * cur = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hparams.n_embd);
  3234. ggml_tensor * layer_dir = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hparams.n_embd);
  3235. return ggml_add(ctx, cur, layer_dir);
  3236. });
  3237. }
  3238. const struct ggml_tensor * llama_model::get_tensor(const char * name) const {
  3239. auto it = std::find_if(tensors_by_name.begin(), tensors_by_name.end(),
  3240. [name](const std::pair<std::string, struct ggml_tensor *> & it) {
  3241. return it.first == name;
  3242. });
  3243. if (it == tensors_by_name.end()) {
  3244. return nullptr;
  3245. }
  3246. return it->second;
  3247. }
  3248. //
  3249. // interface implementation
  3250. //
  3251. struct llama_model_params llama_model_default_params() {
  3252. struct llama_model_params result = {
  3253. /*.devices =*/ nullptr,
  3254. /*.n_gpu_layers =*/ 0,
  3255. /*.split_mode =*/ LLAMA_SPLIT_MODE_LAYER,
  3256. /*.main_gpu =*/ 0,
  3257. /*.tensor_split =*/ nullptr,
  3258. /*.progress_callback =*/ nullptr,
  3259. /*.progress_callback_user_data =*/ nullptr,
  3260. /*.kv_overrides =*/ nullptr,
  3261. /*.vocab_only =*/ false,
  3262. /*.use_mmap =*/ true,
  3263. /*.use_mlock =*/ false,
  3264. /*.check_tensors =*/ false,
  3265. };
  3266. #ifdef GGML_USE_METAL
  3267. // note: we usually have plenty of VRAM, so by default offload all layers to the GPU
  3268. result.n_gpu_layers = 999;
  3269. #endif
  3270. return result;
  3271. }
  3272. const struct llama_vocab * llama_model_get_vocab(const struct llama_model * model) {
  3273. return &model->vocab;
  3274. }
  3275. void llama_free_model(struct llama_model * model) {
  3276. llama_model_free(model);
  3277. }
  3278. void llama_model_free(struct llama_model * model) {
  3279. delete model;
  3280. }
  3281. int32_t llama_model_n_ctx_train(const struct llama_model * model) {
  3282. return model->hparams.n_ctx_train;
  3283. }
  3284. int32_t llama_model_n_embd(const struct llama_model * model) {
  3285. return model->hparams.n_embd;
  3286. }
  3287. int32_t llama_model_n_layer(const struct llama_model * model) {
  3288. return model->hparams.n_layer;
  3289. }
  3290. int32_t llama_model_n_head(const struct llama_model * model) {
  3291. return model->hparams.n_head();
  3292. }
  3293. int32_t llama_model_n_head_kv(const struct llama_model * model) {
  3294. return model->hparams.n_head_kv();
  3295. }
  3296. // deprecated
  3297. int32_t llama_n_ctx_train(const struct llama_model * model) {
  3298. return llama_model_n_ctx_train(model);
  3299. }
  3300. // deprecated
  3301. int32_t llama_n_embd(const struct llama_model * model) {
  3302. return llama_model_n_embd(model);
  3303. }
  3304. // deprecated
  3305. int32_t llama_n_layer(const struct llama_model * model) {
  3306. return llama_model_n_layer(model);
  3307. }
  3308. // deprecated
  3309. int32_t llama_n_head(const struct llama_model * model) {
  3310. return llama_model_n_head(model);
  3311. }
  3312. enum llama_rope_type llama_model_rope_type(const struct llama_model * model) {
  3313. switch (model->arch) {
  3314. // these models do not use RoPE
  3315. case LLM_ARCH_GPT2:
  3316. case LLM_ARCH_GPTJ:
  3317. case LLM_ARCH_MPT:
  3318. case LLM_ARCH_REFACT:
  3319. case LLM_ARCH_BLOOM:
  3320. case LLM_ARCH_MAMBA:
  3321. case LLM_ARCH_JINA_BERT_V2:
  3322. case LLM_ARCH_T5:
  3323. case LLM_ARCH_T5ENCODER:
  3324. case LLM_ARCH_JAIS:
  3325. case LLM_ARCH_RWKV6:
  3326. case LLM_ARCH_RWKV6QWEN2:
  3327. case LLM_ARCH_WAVTOKENIZER_DEC:
  3328. return LLAMA_ROPE_TYPE_NONE;
  3329. // use what we call a normal RoPE, operating on pairs of consecutive head values
  3330. case LLM_ARCH_LLAMA:
  3331. case LLM_ARCH_MLLAMA:
  3332. case LLM_ARCH_DECI:
  3333. case LLM_ARCH_BAICHUAN:
  3334. case LLM_ARCH_STARCODER:
  3335. case LLM_ARCH_PLAMO:
  3336. case LLM_ARCH_ORION:
  3337. case LLM_ARCH_INTERNLM2:
  3338. case LLM_ARCH_MINICPM:
  3339. case LLM_ARCH_XVERSE:
  3340. case LLM_ARCH_COMMAND_R:
  3341. case LLM_ARCH_COHERE2:
  3342. case LLM_ARCH_OLMO:
  3343. case LLM_ARCH_ARCTIC:
  3344. case LLM_ARCH_DEEPSEEK:
  3345. case LLM_ARCH_DEEPSEEK2:
  3346. case LLM_ARCH_CHATGLM:
  3347. case LLM_ARCH_GRANITE:
  3348. case LLM_ARCH_GRANITE_MOE:
  3349. case LLM_ARCH_CHAMELEON:
  3350. case LLM_ARCH_SOLAR:
  3351. return LLAMA_ROPE_TYPE_NORM;
  3352. // the pairs of head values are offset by n_rot/2
  3353. case LLM_ARCH_FALCON:
  3354. case LLM_ARCH_GROK:
  3355. case LLM_ARCH_DBRX:
  3356. case LLM_ARCH_BERT:
  3357. case LLM_ARCH_NOMIC_BERT:
  3358. case LLM_ARCH_STABLELM:
  3359. case LLM_ARCH_BITNET:
  3360. case LLM_ARCH_QWEN:
  3361. case LLM_ARCH_QWEN2:
  3362. case LLM_ARCH_QWEN2MOE:
  3363. case LLM_ARCH_OLMO2:
  3364. case LLM_ARCH_OLMOE:
  3365. case LLM_ARCH_PHI2:
  3366. case LLM_ARCH_PHI3:
  3367. case LLM_ARCH_PHIMOE:
  3368. case LLM_ARCH_GEMMA:
  3369. case LLM_ARCH_GEMMA2:
  3370. case LLM_ARCH_STARCODER2:
  3371. case LLM_ARCH_OPENELM:
  3372. case LLM_ARCH_GPTNEOX:
  3373. case LLM_ARCH_CODESHELL:
  3374. case LLM_ARCH_NEMOTRON:
  3375. case LLM_ARCH_EXAONE:
  3376. case LLM_ARCH_MINICPM3:
  3377. return LLAMA_ROPE_TYPE_NEOX;
  3378. case LLM_ARCH_QWEN2VL:
  3379. return LLAMA_ROPE_TYPE_MROPE;
  3380. // all model arches should be listed explicitly here
  3381. case LLM_ARCH_UNKNOWN:
  3382. GGML_ABORT("unknown architecture");
  3383. }
  3384. return LLAMA_ROPE_TYPE_NONE;
  3385. }
  3386. float llama_model_rope_freq_scale_train(const struct llama_model * model) {
  3387. return model->hparams.rope_freq_scale_train;
  3388. }
  3389. int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size) {
  3390. const auto & it = model->gguf_kv.find(key);
  3391. if (it == model->gguf_kv.end()) {
  3392. if (buf_size > 0) {
  3393. buf[0] = '\0';
  3394. }
  3395. return -1;
  3396. }
  3397. return snprintf(buf, buf_size, "%s", it->second.c_str());
  3398. }
  3399. int32_t llama_model_meta_count(const struct llama_model * model) {
  3400. return (int)model->gguf_kv.size();
  3401. }
  3402. int32_t llama_model_meta_key_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size) {
  3403. if (i < 0 || i >= (int)model->gguf_kv.size()) {
  3404. if (buf_size > 0) {
  3405. buf[0] = '\0';
  3406. }
  3407. return -1;
  3408. }
  3409. auto it = model->gguf_kv.begin();
  3410. std::advance(it, i);
  3411. return snprintf(buf, buf_size, "%s", it->first.c_str());
  3412. }
  3413. int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size) {
  3414. if (i < 0 || i >= (int)model->gguf_kv.size()) {
  3415. if (buf_size > 0) {
  3416. buf[0] = '\0';
  3417. }
  3418. return -1;
  3419. }
  3420. auto it = model->gguf_kv.begin();
  3421. std::advance(it, i);
  3422. return snprintf(buf, buf_size, "%s", it->second.c_str());
  3423. }
  3424. int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size) {
  3425. return snprintf(buf, buf_size, "%s", model->desc().c_str());
  3426. }
  3427. uint64_t llama_model_size(const struct llama_model * model) {
  3428. return model->size();
  3429. }
  3430. const char * llama_model_chat_template(const struct llama_model * model, const char * name) {
  3431. const auto key = name ? LLM_KV(model->arch, name)(LLM_KV_TOKENIZER_CHAT_TEMPLATE_N)
  3432. : LLM_KV(model->arch)(LLM_KV_TOKENIZER_CHAT_TEMPLATE);
  3433. const auto & it = model->gguf_kv.find(key);
  3434. if (it == model->gguf_kv.end()) {
  3435. return nullptr;
  3436. }
  3437. return it->second.c_str();
  3438. }
  3439. uint64_t llama_model_n_params(const struct llama_model * model) {
  3440. return model->n_elements();
  3441. }
  3442. bool llama_model_has_encoder(const struct llama_model * model) {
  3443. switch (model->arch) {
  3444. case LLM_ARCH_T5: return true;
  3445. case LLM_ARCH_T5ENCODER: return true;
  3446. default: return false;
  3447. }
  3448. }
  3449. bool llama_model_has_decoder(const struct llama_model * model) {
  3450. switch (model->arch) {
  3451. case LLM_ARCH_T5ENCODER: return false;
  3452. default: return true;
  3453. }
  3454. }
  3455. llama_token llama_model_decoder_start_token(const struct llama_model * model) {
  3456. return model->hparams.dec_start_token_id;
  3457. }
  3458. bool llama_model_is_recurrent(const struct llama_model * model) {
  3459. switch (model->arch) {
  3460. case LLM_ARCH_MAMBA: return true;
  3461. case LLM_ARCH_RWKV6: return true;
  3462. case LLM_ARCH_RWKV6QWEN2: return true;
  3463. default: return false;
  3464. }
  3465. }