llama-model.cpp 216 KB

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