From 7cf65d0581477669ecc85a246937ad890ff73376 Mon Sep 17 00:00:00 2001 From: InSec <158599047+InSec@users.noreply.github.com> Date: Mon, 5 Jan 2026 09:12:11 +0800 Subject: [PATCH] [Doc]modify the quantization user guide and add a quantization adaptation developer guide (#5554) ### What this PR does / why we need it? This PR makes the following modifications: 1.delete the `user_guide/feature_guide/quantization-llm-compressor.md` and merge it into `user_guide/feature_guide/quantization.md`. 2.update the content of `user_guide/feature_guide/quantization.md`. 3.add guidance `developer_guide/feature_guide/quantization.md' on the adaptation of quantization algorithms and quantized models. ### Does this PR introduce _any_ user-facing change? N/A ### How was this patch tested? - vLLM version: v0.13.0 - vLLM main: https://github.com/vllm-project/vllm/commit/7157596103666ee7ccb7008acee8bff8a8ff1731 --------- Signed-off-by: IncSec <1790766300@qq.com> Signed-off-by: InSec <1790766300@qq.com> --- .../assets/quantization/get_quant_method.png | Bin 0 -> 11218 bytes .../quantization/quant_algorithm_overview.png | Bin 0 -> 28162 bytes .../quantization/quant_method_base_class.png | Bin 0 -> 3534 bytes .../quantization/quant_method_call_flow.png | Bin 0 -> 14972 bytes .../quantization/quant_methods_overview.png | Bin 0 -> 18418 bytes .../developer_guide/feature_guide/index.md | 1 + .../feature_guide/quantization.md | 111 ++++++++++++++ docs/source/user_guide/feature_guide/index.md | 1 - .../quantization-llm-compressor.md | 65 -------- .../user_guide/feature_guide/quantization.md | 142 ++++++++++++------ 10 files changed, 204 insertions(+), 116 deletions(-) create mode 100644 docs/source/assets/quantization/get_quant_method.png create mode 100644 docs/source/assets/quantization/quant_algorithm_overview.png create mode 100644 docs/source/assets/quantization/quant_method_base_class.png create mode 100644 docs/source/assets/quantization/quant_method_call_flow.png create mode 100644 docs/source/assets/quantization/quant_methods_overview.png create mode 100644 docs/source/developer_guide/feature_guide/quantization.md delete mode 100644 docs/source/user_guide/feature_guide/quantization-llm-compressor.md diff --git a/docs/source/assets/quantization/get_quant_method.png b/docs/source/assets/quantization/get_quant_method.png new file mode 100644 index 0000000000000000000000000000000000000000..45a9a8d18c8386ccf52bf8fda084354f3c4c9f04 GIT binary patch literal 11218 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 literal 0 HcmV?d00001 diff --git a/docs/source/assets/quantization/quant_algorithm_overview.png b/docs/source/assets/quantization/quant_algorithm_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..aec9be0c287b4e2034c2ceada5f42c45d26610b2 GIT binary patch literal 28162 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 IR&)RW07W19_W%F@ literal 0 HcmV?d00001 diff --git a/docs/source/assets/quantization/quant_method_call_flow.png b/docs/source/assets/quantization/quant_method_call_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..3df576065add13d7d28aac61d174f6923bb81fe2 GIT binary patch literal 14972 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

S;CP~aZ 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 literal 0 HcmV?d00001 diff --git a/docs/source/assets/quantization/quant_methods_overview.png b/docs/source/assets/quantization/quant_methods_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..de152a733af654a99ea7f9d4f51943f1bc4087fe GIT binary patch literal 18418 zcmY(pW0YpWvMpM+ZQHihW!tvh)n#?rwr$(CZQIuOdhdJBdGF013prv%W@JRnl{qq$ zr6eRSegOe#h>IwyD{>L-{Cl252F?biVFAqt7O>+;l`JA9AtqfIfAfbAx3K>L!jpyZ zrG2Qa(2CsrwddLLEqEp1Bsl83@LBu_1h6dZr^35ac*s03B?RD~d^^OC?0(!5Ie{z2e002WoA;j;UJVL;C>4(ZU<%3P1 z->u)OUmu_l0D10kC`k3~@|k<(@!G3Dd)KSXSMxr53Ap(N`(b>^eazhv90hE@jeqoh zGLHGN0%*Pozg}N=cMu=_hzuhBHIRQVz8ZWgRLT$GwSEGA925;SepG%qKNN0q-)0>Y ze15*aFJBHn{Q&nga``*Zlzs|9Mc&dHGVbMs$Zox}}~N8s?_(GblIVI|ty z>(v(rdb>q=1Giyz2n=TRTx3ct{?4NG2vn3SHQnlP`Rx4vpkc@><@$2-$$p{|q8Cob z)>fs!%Kv9ucII>bI}1(+J_Gnpy-~xtoFZ9DNA(7=O`Dt)W}02 znp(_+O^sUF2Tu3UmLzwu+c00kl`kOq4DdZYLxdR0T9$ zWv0qIt}ej^5ARGRuvWthB!>8Jll1ByTxo>RZ5ZrMb7k{#o|BO9=#O(OeVCs+_itJb zp|XU5?0#wny3g~JmgPvs!;AqpdL&5DA%`Cq@U0{BF~Pa2JrAwGMdqW_M0scm&Oo$N)KPB7<+jeCrU#7<|Uj>Q(1qLIJeP*zCzgrGi3q<*kAC|&+N5k|5?Vye8K zhlhvd>XO+1K&Yj_P)}&W)Vsw;JlZRw(a=%RjwkFNSlLcr|H=Lrrk4sX)K~D;F0DHP zq2N>vS$=c>+wskOZP|b1|BG-EN(-U0|1-M({{TnzU_`t5@fR`@k8Kbe=kcKl)YVVH$$a8DDk)oLjIKb=ZkvRdNb9*L z`+>*c3KIbky>>i?X;Bt9`3t4XILd{NNRU8q`wAa$bJ8Dnfq8|@Or*XGe{H7n8+NRt zDV%{(rmxto&PoRe9oG(bVQDnRqwpX)4mED|kDc#Mr6Jq5QpF>>F>E<8Bp*1wph>JR z=v$SK-*#*%=@+0GC>1bis9jBG5fo%bC=Zd5B*9!YF;D@@3o_Hj7=-uM>&;X=F*i!h zzdWcWGTS*s=|*W2E&_~6C`;jH{BXvNxb;jvpf-m;bNi+YefPly8lecT5?qKRr%W$n zVJ4FdHFipZI>4+{i|Wv?&=R?>@@MCMyim627%+wC`|bDQ0he1S+b5Se*z#o9$zYFL z&NLKKh4k?4;+8;Dlkmx^7mI+wQvH3U#jz*jtczZ3fE6dG?#XFxT~50oGHZybVH{sw zlK7S^yYv_`S2TP3wl_6coC}AT>{aI9EGmxd{|1xL$n4m4$-MmWqe42N6Igo9Zq4bx zs2t6Yx6PI#uU74W^I9C5bKVm)nx<2&IvDYgeoF`o^d7%^G(+pA8<=3J_z%iyogw_p zsBwxxr`?nTR>BE8JKOP_%(9^^%?KMQj5#q=9aLPQd8$Hr$Yrk@$HZb_J*d4if`Hvn@|xps~g7Ek+nH_dJ_f z|Du1BKSIUPkIy98k$FBKp^fD^_;9rkpUa-(%WLCmgI<$K;*I_#At7EJO?5$OkOP?@ zMZ&SS@4Xge$Kr99`Q`7IghRe}IQyWjCq!cGpQ5D46HX`} z`(~g2A(#KXV}lrT$5A=A^sVEH@Y^?$*;@naBuKG?hk(EPnM~#q)DS1U_^ux4Oc#45 zm9GJSeHw>rxvuSlD=p(IEOBrd`>zZBk!&3h&<|h|3D~Vb z6be*S;SHT~H(iJM+n3UP`M^cW{|63L-v!uZ{EscE@4(u+dag;f0~ijB{yWy`uv$u~ zO4Uz_-4be#{rbSIR8FMzhOcLBt0{JjpgSb8g>?TwgoXkvn73}Gj~mg*(~@{30_`&w z{Rq*tdYlL#{vfm6$>S2!*lp_xnQG21W#Z*Xyq9sCJgpmBrp*y8Oim4>{Py!PQ(2um ztIy5Gga_o^-J0(@(bKKwIwZ#1Q)$r5FM6#w;=v)IPD6*xz>IyOKy&F8hM-fp5R&zI zDs;ku&*kMvxP6QW!pEx-?^N05a)dbMRXzQuA;t`Y7JySKBGF>&87HMG6J=3Z)g)Cb20oqM_PS%0t zu_1C|mw~{%k7wyY^gyf{s4wjN-G!qEz1sX9v_kZplm-24YMaeADHFZ4SL+~_%Z(#K zpqc!lOb8wJ5!Q~1z+5$4%_xE3tIU~E`EbQ0;j+F5{tL}Ky4%DY9e-J+<6s_ouOa(- zhhYkUA_s}9j%qIoBFqAW4Bb4p;3D{usLi&}71lYXcctWOE0@bvzgZV~u~*1V!n-~VjcJk=8d}1@sR62gD>S0f5Xce+u2Z~5Y5bLi2Nm9 zdEkFsYiI8GDA8I-&37Sp&DS00PaGDtOK~6Aorm85!@VYz^Rn0k5v#XDuvHx2{9Q}v zqzDpOQohcf=JOQm_(&$y+&=oCp0GsAyTL5X*+E%j8>}-OAJvPSbrG||ifYix_LB<- zrs}f+LVxS?Gvs&byD|k@Sdn4{ha7>&T?!n9!j- z|K+*D7}qWFqN}bwf!E5DB=SdvqtRiUBQom`N=&dAnKi4d!0v&y>r>whRmJb54ehn7 z^Yj*^mNL^b6e+xAbLfk=(Bc~uZks1|I+^Kg?%BoVX^F`&tFW#xL3TEUgd8+OFP#DB zB)dey@mPrV%+ltITEiA$fBh|Jij@qQk25rcxmq{%Wv0S@XdW%3IcFTG)5^vQ3lU^v z@@V@j_-Bdq>13|-!3d8kx+Vj-q>_7E{KveE>eA$t)A?}`c++|3^YsA6+MjM+HYUZvd3#y}|@HV-*Q{1Ai znaAPq+Mk&e=N$Lu;cP#^j;0)2;zG(C9ZX7=po;b;8m{NzSr*Y-z6gAeWY|49`Wv3~ zKT6H>fssNuK`uC*rLwYzeD;U;K|w)CB9n(23$KRu@kIxeXLT(l!k-JO{lCie{e;C& zYVjsq8QKR-q*N?N-6!FufrM!OOj3{z?Zyu?Uza;HBC2S&^{e56a!~I1WCBfqPBeqD z<|igm7PXhx)4wHr4CBsaGHM1vX-r_{C>yS}t}f}9)n*~5VZ0n7J)!1!oFAPSg7wuy zuN$o09dprlr;oq8c25nAd#3)DQzty5Ex~nmHDe9f)z;*(^%i-|+Nz~bkuZ^9F4&l4 zsXb{F%GK2KLTa~53#YMTdRkOi?um6;wnU3EJW|O_3aP1{KI}$_7F56{MY*yQ+<}I$@Dh_F*i~ z0eJ;9@u1JMW@xO%*>!`GtVGa+N5L)7^cms<)|QWkcY1a(M4GY!s8LN;=|OMhw~KA& zo_qyD3$gN(hNq2%8wdwmS*EC|G9tXg!d=RYAbb95R%Db_vzx>o?QIq$AXQs>hYSvQ znllie0%0^=0y)Ze-9_UjJV-KM@juw<=1dZtH=vzOHt3J8u`3p*kFBQ`(79k4J=cT-}}zuAYR0V2*Sbt%w& zC??*wUc&T+zqDXUQs5-NnO&_HT|Nh#oU4sJwBXycbD`ifJ>z90%nyZXUK;>&?Ys_T z52C}U;wn5U4|24jSx*2;i_b5!S6%kN=OX?z)aWF;i{XWLoqopjo7<+~x@fSKUJfD< zBJw=k{2;xD?umPob`WkWmZ9=8bLhjfH;wqCP&vLi3!vJcSr?t;k&rx_j86#wx>!15^mx)3E(4xA2JFi z76<=BL=&4JY$M7nqAChFU#Ydftn~Sg83U!%Od^91g)rr0nzNNJE}heipN7~Szd65C zK@~LFxA)qQvUlv3w!hWY7B5?H5Y?}y# za+V%hxL@!+LQbc+LZiHqvCP`{jqUR1v6*=_5vrqDZ(+ao_JTU;5hWRFt#blPekE*i ze@kboDYAi0ObEhqevlRE^r+1<8TF~L)_NKCb&MTkcc88^i{@13LS^!o6$%Wg9@f=w zBuCQgghBxe%bsKQm*?g!uzbaCh~1kVoFFvinLovlX5BUg_XwOS3!6?Ga}w>QT?Z;V z>be>#7o>h3K+t+8d*o3T1x(s|MvuLdAc^CSm}>FW z80{~`QgTn`=P@H{&XP2P_u!oOEPGPvF9dAP%Yq*h1gcPR?3?MpHtB`F@EVwsMwriE z{4o}QlCzU=jM3<5L4|N)VuL0|oX~oSU#r8+162}FZb5bJiGR?8=Bm|?7f{*B7CBM( z2SFP~s?S`>Ohcx56}iAx6Y(Ini)+OecB^R{zY$Uo&F!zo5vu!$!C>MMceJG_QnLD@ zY)P~)eWUGenZ6<8WZ^4qb~i21RXzsbx?un6V5+jJCvsHIUYn1FC)p!6etRN1fJ@ zBkjak9D*xOFqKbCi=~2-4RY+2_g47>xe6Nh*0{*SL=V@^fd-_2YtqeJ@EJ3U!HeU# zzuJX8-?N=Pvn4XDwz`ObqK7EAsvm`i6fNsuuFIgSsH#YITW)m570FXp3n`D44?QRn zZSn1X;qM0Z1^w)KQ~ky8-i`Zo!3||EBQS`w$Vl_?-q-!*=>iEdD4}X}nKaenUW1+I zt6B)Nk{H6HPc(u7il^If*?~s#6`>Z`iMRq*35F8J&6Sc-K;=qh@liF1kTKv}ejR?I zlMPaHIC&4t6&vD6tM@%tJVDL&GSSsWMq}j~CWM2?+I`@eG_eBAid&oYRz>y2dsp7J z^V!cAKWY9sAG9rtcJ&8pX#iQDk$e{!MZiWDBApRaM#9RG2%|P$Oy`cr#CfIJ+0Oel zI75e9-V+YCuW$N<9v?u4zu*{1Lr~Dw7X%ZaxLs4Qz;$|FsnCX3xrg|t+3(}C?lA|5 zK|^@0`neU$YHJI&a~3$j6ANctDrk@!a2?OT9^htH9gh1|fuM04a)1Z)b4tR-4K!=1sgAvr0~Dr^89LUFFskNVijAelQunh?p5+a26N+=bm{q{ zFd8C?+mSpt6i6pmMF-`4<7b?~KFF+6)M3@!|1La{-1Z54yWl|u44O?)H1_S#R?J{GpX5ASgdnxtzBj%@EkMhdZE z__LTre@cWjd+nn}5ztZy#ajNxyW_79eQMS6oUNkvx+o!c%po0E>PG=?C)VbQ*KUTMc-|b+!95=dJQ=cEM-AK0>369LeZFW|g0qi{Sn`G-6^9;-OBzW9R|P+E zPe5t)Fi|kMFB36`vfu$c^4>E07)Go`PJjs4&ae66{f`Kw5o>F$0St=#?56T})79e^ zU@(H{;ndv5SyuA_x9LIb=3IxZ3(9Ejwa8Gxw`M^2XyG#_sT(mmq*Y!*ls+yCPf2e= z6l?Y`b%KXb9PQG=uF-ajVgGzg0)wmf? zM)G)rNzXIc;(6V)oBLN^_9Q->-cUoh(}j(dE3VaNVY}T}i5*U0u;Y^3={Ww;*-A(D zpIU~x)b?@rE`;8)m?vy)Aa3t_g9~=SGpetOz7A_CjU#U;Szr7| z*(_r~ROdwiZzB^mL7mG8g3hm`V2xuIs0&w=##RI|f@-n$XIEQh)mSAZQqpYylvP9~ z2!ur;*2qy==UJy9*Mq-EEy4vdP#j#)hHn5U2L)>rgP;b*lj-04jyi1uaOd_V#${UNii zd{*ZWf>7X@c;QYiGnR{ zX*X_i(;&h1dkA0ksA6Tg4QOfam~u@*!^blx)W^+c9rSX@7wRutY&DXp~it((malR zDijY$!M8019Kls`zqJ#J+l(i2<@t)&#gHH-MD+jew_~mZB`S8hNzu(WkviWn%xD8) zh%OjnYkHv8vQu*!I=b7cY2+8?Sb9qO2(J77$pQ0cD?20qK!;c05UT) z_W=%78i~x*g1K$DTy8w1`V1&TpVtoA8~z)q#w3I_7S{ALI^SwJ?xuu!y@IE*{ z0IX~ATanK$JzHFW&M?8X7Tb-}MdceSMaMO*UUInS`RNz45|V$qQSiv`x`sKNViFqQwTU#Wxp+_Q}X zeDHJthurbF%83*>W)TOd*#Wq`_F;GX-qabFT2A5#TekXLIu`rq%p-RamYe1D2&xMV z^7n3hK?n&;op_^+3vp zm#NC51~V}p>;v)eMy@2~us#Vf9Dt#NkW72`*D?@!-~i=T5Wq73sv4tH#n0r|8Du>Jj76@hFk3vtC@+8~T3WY+yf zRcQhC)yz@6yK-iGcs-F;HfOUMP-*E3F<#ia0kJJ!M9t#fCL*$IsICtCdLUfOKu-I^K07774a(N5YL6Awul)^jjR}P#8zhr7Ux zm|uLezj9GP({of1kp9^MgejSsBb?wLOSh>eT&R=JZeL(+y;TeM5GeK-ccQHN_8#g_ z&++=LOtYG~+lLH-b==xlxg#WZqhd6ptVF%+G{Le_9%tD43q%bDwK9f6(dy~^V81M| z6Fc4CGhKmf!z+sg#fr$6&+v_BBH0E7!c&_AJP(K3&Iw0S8BA!3I7zufOinx&O8}vv zSbHcS2O~Pb5+XuJS0Vv3dJ+s{?Kx^kGAa(k1^9WEi$>=N?1Ck%;9?@b0D+1Gs=Gz-fWB@#D2 zR|dij3W|_7m<^Jjst`ud6v1z4QG@o!> zTU~~dNd8~hg~1ZEgg*j#kT?Mw@}DksY;C%(qCrIVNGas4q9s7r%U}h&=8n#MZU-%O z@7bj((9)@FX}T=bg-&zSL)p^c&NTfHxwy4j{wx0ux=YwL!IRMw(7N(CPv(yk)&|Zv z70|f41kGfde2fP2+k7^|e$Jh|LP57FgjN$@h?mjg9ttYZpJAT~IW;jT8$uRu6jm+M zuh^N_q{du=_i$dZeG0dL=M=LbBCWH?XAu0IfbMHQ{%(%ia~ZQuk)w+;J7i36h9U_Y zn$ys$)6@^SvZ#olX?JMe{ZQAO*}o=e2VZfT7B~8$N$5KPDVbajILe>qhmtQ%Z;zx) zjSLIKs8Q@+_zlC=TDS%>_`nypM!ws15UE`2j*|Aqi;HQxP-g8_{P1uH?tVc0WdB|+ zt8nSof6K{^hC6YsyO_pj!D{!}b4*!CWh3O`$)|+&tA3bx>mVZ`HP3s`YiT5WL0~2j zMX%=x@}GlcwQVGg6u+dC?Y~Hr===BYR|76Ekxf{*sivtL_D--N8Zud7vk?`KyD+I+ z@w;{S$vwXhGTzi4JT+X^Ajwhj1;yY1g{yyvwS}g)7y*0tnRewMJ2JV!4RFx6L1hd} z#g2qqjb@Hs9DQ0>r7;xl3s5r|&um|7LQZ003zaS8lA~;kOb(kBC}A5o%f!~cbVd4Z zbyugZZEm$y&X=RG{szaIG^I)Og+Qb@*v`k@^{o-NjuTT1WkyNGTnYcVXff;FO})d4 zni{=%LSo2LUv5__ntnXb7Gusmfr9W?})G^q%f^!($(W2@i${NVQo z@Wm*sVf(l(#z1%SdRIf+{+l|}Tl;iagJ%Osr2Z^a=c z)=}Twge-~F2_cIQ1WPc<=~$5qFQHkqffM#lNP@Ys_wcIQL5`YDtM=GtL3`F;Whuqg zZf{%MPV_F2uX>I^)s35voknK?EW8u)dZUW%*t5#!U*fAxn@ZD)DJ!1DmK1&E&ULIrK#T3L9nDt)xzjG^T{O-L5kg?_AI21(tr8 z+5t>>Zc4=QMD<9vKMN$N_%cO@qc|(TN9I`6zuiLB9Y5(%g%K0mvm^3-BrVnB@) zL7@c~Oh`A{6{Jv7DOux9Tjjq?Fhfwm~V?2bftT$(Y6hRvE)ZCywneDQHs)8=8XTD z+C;}kVa&9Op%;Gm)S#@t`jzTEdD5EP6u}h9h(NgZ{`2f-DuE4U(s~lTmJBv}sl0~B zAtNqdNkaYvO2bpJpqn*0g@zoIy&uQV9WK-}kmM_zG1%7==C3a@JPw5GoJ%b)c&p+k zj_U(rx&C225Ge(^>REb|@jUS4HS#)X5oWGi!qKZ`DB=@I654j4L_sbWI*3c-O)gjJj6yRKoB3*;l2OvU)HTQ36gGV; z&t87dHd9F)IXM=PeMa3mtvYEKIDr|JF|LTlDv#%(+L711ZW&j~dqMKXh;ZfW6P5=NNk?#*T^z z7+t3{&-J=ybTS@DrA7)34J`#-K@P0k-^+Rj$Muhmtj_;4fXJ4opCs%Q2Gf=*VP-(6 zDz>6ri{vVJqIUDyDf9&r6VMIip~E%wG2zF}Tgr8<)gCD1Z|PzQZfbhNL;V*d85s?5 z+2%`SKM(%di>$#r-tR~`2?smHF0^ni&8Wn$qZ;CeRIR9Ww)#y;;^?=Sp*|d3va>I1k8Mm?i3tp|fJFI4txY0b_O$i1Tug@^( zG;eCLiDxd4%cmzt9H{!1;AKkfXvnycUrgNe7|NT=R%5t8c)QoH8A;dX8>nBTr3aRZ z6~~1E0VMN@Ikk;Tmw1~N^?O@^20Xoq;5X@{Aq4ivC#IwgKr>2aCK%8D;qw?g{RL(S z(`8w!B(sA*$OGV^HA&8ZWRr!)VnGB71d2yaHSVkAw0rGs&Fd`T95E8OEvQ{>xPb+W z*D(=~=4&@BJ?TZ4G{}cqB*KSYwr39;M7Uo5SLgpv&&92JG$q*f%9MRi=D^4@tn+C0kGAP*zNq2$71yp0J_}Eub*9rHRY=yr`5?KpH7?nHy74nIo=@$;r2!xea zCb^YR14?1!PZR5Nq_^h>iV;9%+_qi2YvFggdR(>imlrrXst?^I#RZ&-a%`rX`kP*N=zVbxm3vSwN+a**BRi_b@^3n_0-; z$TzE0EM#}?9bQyMW66WyS?M()1jg(Ve4r#}!xObEl;%YVpRGN-W6 zoE3ywkX6kSy?pFCaU86;^IKm{`{Aa+n|w0&1L}8(lIjLwF4mVO^4F00lMp{3kJ~Cp z&}^KBQ%IwVd`^KT@)SKqBqN>v?siF+Oj4yE#BQdD2h|Yf<5=uWj(zaehz-R`r#`kZ z^!K#5P?DM+nbPjjbrE|e$?tqYq^sgA@wk!~TLzUq0;8PJ2`?&_4q6>YFI1+isz2^p z?cX{Kq!_xVrf$a|b=$~e$=Y-9L2Yefw#X*N$S5X(j4`1`klTS~eLMxbw`lO=}@ zqSNQEc|jiNak)lj_(l;hBpeESMVe6_V zUwbgsJ{Ev-OoR_E{r&uan69-_r2@wsK@FBxGX3`03pHp2hdN={DDn561t6SS}nZQWAY7;<8iJDJl zXbxQt#TI%pCcwSKGsb?_S$9$;vavrCzmlG3*?g=EUzX~fxE3rK)FH|hg%z3Ka1Na? zZSBWwpMSOgTfZwkn520T{l1blKe>&2@%7sm(|!6oD5vT`q<814C1Ivhl$Pt?h*pzW z)!W9d0YRQmT>$C#*We%ou@n^wc5O$$Hvp)r(>%`oWlLtPtO01TF^qWJS{bOGH(j`; z{o8cu6?K#Jz~p2)3%)1-CUimPc>}V|3FJPYd2yz2V29@xoa#1UcV(Ow!PHH>ARRbU zC2<8*tO#?%^t}<=Jo<)1XfAyeO%=`;qHSwD<@bHF>ija=-eeh#usL$1Y|3vl{DMX? zg6S>g1_~_McU*8}G*@RMz8Zt{T+2$zON#IhJqHDEbTthE0O^IV)GO_wDpGpCYB1M9cq;9+$q8!B?xNt@(-fdWv25B&rGZv{Uu|D z%oRZ#Ja9EJL}r`A3dCS-!QQ6Z1EV+(Wa!89u$^#(OY`S|(q_X;%!rf0-5M;D9lk<; z1otgK>5tPMdSuS>$1#ZQYho15FT4V!J;JDO3T(CXx2vF2J6|ArHq1s=%qKK(RBl-= zv-p;ECR22T0hBYiH1ACh^$+}Lfi3-Zcodt}1_90yTebBCThRdm_xM@LbK;Clp2!|9 z#{Kex>lFWQhPkt{KN__|mbh8cQ}dNkg4U6E)ShhAqIj_@;hQFvUMkSVs!y!u3s=6# zKG`TmH)Vw{B30U9Mlew(fz6tf^VxZzIFKD+fri%i9wMP|r@=&8?^hF59=(o}k1>A< z3T&p#hg-JW*tkV;<0G#(k)Mqc+J&D+h6r9KjPT}L$Fl*o;QHEl28K=s1kd6>V(q=9 z0O{jXu_K^jEmwu$ulCETD1;u-PDOK81mM$FfpN4bY}nb6^ViS`?J}{TTZSFN%<$V+ z=O_xiN@jh0;E9)ID#>H;mt>^sRQ@lGg!u(gay{5U!6ZHYQ6KOmbm; zz=Wv&iHOZ9%qa*|#J&fL)R4(0W-lF65*(eLq;{KQ<>>8JA*T%R;G?-T<)z01t=eqY z{^)^&sqyf8?xm;b6-mjim?-tE5h~abaisu2Xif(y!2+r?VU*Ui;C-Q%?~tI8XFy;6 zgI(s1;$QjP@+s6o=6kiX?se0?9>XJoHm4u+pAue;BM)vjK&Fq?Bi`&;2=imOK(lyebY>0w;W8Zk z3G=aTa;9PmClq|AoV5gD9_W)I&y@H0;nB2kof5VY6=UU4zze97c~yPY3c04p*c3x5 zaj>3gPPmAIpf5)oj`5V>xVWJbO%ovT#og_s`ESAP%c?5?*)*MxqkHh1mG?HwYvWg+ zRms|~)`1OPAE+r>SE$(>!5C=b3c`1F^n3TL5pKcPNyV=gd2gH|F+^NvDTT7r1A?4> zVNLY=F)GLyeoQo!g(n_Trs_FTe&$o)v>Wvadnoy{Vwwlv0ed@Tb5PLDt+k;?LYh_j zB!*KRn2)vcM0V0dp+cz*iV7CswWA%*ax98D2k`aeq1iP z4C>pZA#}58)lOU4y+7lh9cW!<9iq7{w7y3O46Mk$M#~$K#3T&j%WkhC=?=JRTP_L@ z&133!9pxRsS-DiHI8U{i|U3CRbunrBd7s)Z2c2|?1;2AhIUK(hiCDDzvQNo zl}T1|c9XK{BEI!yU`E(zNY4EW3?codx)KqM!r%ExH=l*c`7K6$eA! zdQQeq@SuQv)8u!C9Tf>KzJN!02a@U(30QhXS25>A{Ir3?4_OARnz5BX293+6+L1~* zrOfGb>pPv0`s*QH{d8f-s#50Oc;kg3lxRR+2y9GXI{P)XU3NAr8^Oc}f*-SFZ5T9{ z&8%j0;vBuI$x$C@m##RNSR8lUUXktOb036!|pfH^ysz(!BOrX zLnGb#8HyeG@y~^g&ZKGfuf>joF;C46aS^mf{RZGvjLouW{NAFVe$_;R68Be;E%Skv z0NLZ`JSAbPa)!1r%moG#TrtxkwxhMrC6J$|7qKHGXgG6>k4oTx0{BLNrsQedf1R;w zaXyUKzp86bKl^^=>bC{t@9Ficv!xU1|ANo0UBwP=hzKp0?XdE*OkKfWUy1^reJNuG zi^X~{X)}S+v*2(Y9wcL9Aj1_7bbZLlv$Sb1|D7)FrF3jNoBnFzdVm7~>_7M;qp5D7 z3Hq#vD}Y4qeSBNd`1NObAMb%m5_0W#?Z?9+Jj1$PaFS;>b?pM}wsm4fVWowJbkW=mp~$8Kf*gR#vFQ>9r2O{l6619-|8sB>5qfj?9aKYM@+beS~D5I=bgS zrdNcyZC7bvo1y0x7HN-0{2Gze+-0!rFI2@l*+a#6ZtfZHJQ2X3$iVsz2lni zC*CdwAf3On1s$z+82b_Z6&MJCa__>N0w4!hBMd3q{PHK=ie-nH${S~L$S92tkY|J` zNPSRB0ZJVPm4}{HQ{vO5L+2Bf9S>-u@0FSZ!>)U#(B#rjR$bSrTu}**YE}}IA zFg%^oH!L=AQ^Fx87nf^Gj&6GTLCC7ROOw}tpU6F`AZfyp~OvHBI-3EOOv^U6&4UJ2Y~Y+>O(dZjr=xEm#&yzj!EX)m-mez<>u3y-twAI5kauajbUdYU17i z7lfIg0o6dP(jjcxqL&q)p&poeN_=T<179z;5&o-pbkpyi>5(hF*K=egbwcf#7dS`q_1a%9yFcCywiMkJsbxi2mJIiM4P zQFW;c!eM(%u0}9N)|%2Zmuo2w-5P;gVzB1aL^J}8f?{_4Y~Ul5~sgoaA9=sR^g)_ z{*!jjKrExVFRpDyPu_!+*l#qVygihZv!zHbQCg>v1lHJ}>z*PH%6g83NH*Z+Np*4T z*#6zAvGNGP#Ka}SVGTnLo>V=i@iF!7eQ44m?%&N`=54b?g4l^*$3w!n z7aO-Lc&+PMDxRh(@i)j)f8kWN%j;pd{p-YD=Yit9WFqV??$OD=yHyKRV$+MfT)3%^ zdmTI4-@JD)HE2ubfQ&a}5Kze#@9cx_r8N@ouyady`Gl1I-e&J)18I({2SfA3YkHMK z`^hXkpWbp%Rr%><;z?6fte7*Z6XRLVl&V2oGc!akUDUfH+iB`%G!4iT5$G5HF`;t3 zRO_+ct$O?PufnGUTnfQRlQwq)r-FO!;yS)vZGRh85^?*zo7;C*aHR=Yv8r$h{tdJZ zyZcunh2|cXmLYn9l&9La`tat({#gWuU3ABj&Nt<1$jb?E^#gC3df2#HN2s=j-xng| z8N&=UjgHHxrjK(Ml~y-mQoCHA?l|_Nbtmrf#RB{quG*|};TV>d$b77srUL=l0?Ly8 zsc6r7jmv3lP^GYm{wh;8Z2JwxeZ)^(GDW-P4M^lYEoBa9aK=ZcLP1hzQ{{AtyN-Ykmbl-N)9x$rWjk2Gg^Ofb)Qg(`Qb@6S!0%&LQj zw4uQ+$!NXYnvg!#uFK1|*=o?h8v~dPAAif9w!6B{P z4~{bh|5U0R|AA4A+(6m`%-dz_0OVGVy0Uhb>?#t>3S)!^*K@#7K?8fB{`)mHkg*+u zd_qZ&dE3$fdrx>H-K)6#MW$LaPACByY}P7frp*0OsC^d|>NuP04}Hy>VGcu$GXxjHJeu$qi_yh8pDM>qCTK8)ehe4w4NQw1Y~+avS3VKUcC} z#%E#s%`ce4F1tMm)eVl;LWaNfc;(EpvYhpm+YLxigmQp<`5i|?_LPa|3}Q^S!7K_1 z5(umV%4fOWXy+2l)DLD%M<$Ut&8Ebd!oM4x7)YZ|So{I+Wo0QPpG-AH@?tsMTR*PC zEs;2=WQP`T4anOMO1hx#VNO{hpm$kxlLpMz(+mS=x4x7DbjG4mV?fMT6e@^3`_W(Qh0#<*&MuXn)3 z(VxD5hnw)9XzQI|DaEUQ_o&ctI+psPltUG)(V~oT`}w;-$6evwHvMFRbRsvMj+Rk! zCe90KvAUFRw+38g5`@4(V>2j1QD=zR9d3S+Y`CCG9iu#_8~U7M_5l`6B$QC`Pw^`x>ShwXJ$u&V zc-1g;=k@7N^6BSxMMsmvHXMJhJ0Dozj+~|Rgx*Eo@7TI3*u zO9tz+0}st-`qo71)57F|CKDbe;acacz~>Q@;c$!{jG#+OKNMRF+<6^LpML4NCYUpZ z)8M%q6te_bQzb$q#EJs%h|_PI@eo>{j9L05?w01F^A!`1aWT=(dm+)VU|1#&N0zu_ zkyQN@N|MH2jvHFZRaoxfATouw2voSdt5Gh|zW-K{S`Ch1o3b*y@K{Z8(;}8N{0)=Z zc+nrPUM~v6xG_YD%3p&N7TsI@pnLFlXG|$R`Tj$3w%<*-idf6~z+L#*gU$ePYx!Jz z7-pD?(76YV2L!EfjIMM%uDNqP%!>mi4{&6kdI^jKWO1VBDVvGKT4?cY9LG$Lzr0cv z#kJwzXr@&SWXlI*;e@cBw1K!v0-+a|_PxD#J;qUO9C%ILzR3TI^E=1T6dHvcS#-A>N2w_~aP-ZGe#bBWYt!7|EZQru~3eL(BUkWs;HG7A|^Iv3=T=}``0^v+d4;m8NM!OvbRCj5O z0?L;QC!dn5E)jF@@sT@Uhr3ZYA+BOwN1~iO>ez+>y{5egoi8p$(O**5jMAilBu#-= zXJ1)(I5HqV ziL6h~mTVkMD|(8;*|=pzs~|uB{S(2e#g=QIgOo2+rOA{g?`5yEXU_YZ8Zr@^fK8&+ z`qtmMRxYaCATBJPqZIydf;xED;V6rhk&iqNpHFcDG3Y&BN8}j}ksc;EPRsfEMr4l$ zUh@1|#lR)@Hq$Jl1#smG!u&;usd*~JH@evM*4RFnK%_Z%(D3;9MtUV&GEY5QQX}F- za4mjPu!53P7p7pe{vQOGcph}!f{(EW_!g>hDf>L8UAkTN{1j*;Nf_P{KRNr?UXwM; zB3LIn`O%DQEFs-MCe*Jzjp20N_lHDDPG;cviVuvA+fi^{?rCY;PX}1_MTHbQ`vUgRjgY|^;E(2p zU^r!`XZ3&|m0&lRse-t+r|xB0^4&6aXcy|;5z$=;WhpyVP+;(XGR5;=Wbw*f+_tXm z*3xmzX@c7(hAKSd7Zx#AnDUN$7bXy@$6~?R5Jma&K&s{mf7pe`Wt$d`J0lKW2sN)` z!q{H4NB2o;AW%h$TL!K~teG1R5Go{( zSujnEuO6}kmpIObfb3R?6xYy%l;_%#Pm`I#%yTF(&cz8_MJ4R_Np2D8`i_TbCVAprqKK6ShW0XKRNRyjE(fP zp5`13rhkb>1gKJqE05N3F=wxhcuc$Hp-?9=gz>*yK=Jm{^aqEWy|Xa)bBn|_r%6fs zz3cz|H0S`p!&R5j!)FhE%Ta5}80X$6WKrx+SpIx4;^wbL6YC{LbUk;-<$fH_=46&a zO+{hxGh$RWo{{fQi>>#C@z14iZgO-8o7A1QrQ>&tKZhf$Ll>LY0|raHck5eBKVPta z)q6W5we*nMFD|)C0k#z)NahkrHnalGCl4!;b-f)TyDt5ks^PYL$6wHIsi=(I;s-iV z6KIeJU>g2J>3ae^iae7%82-gO#N;FppDTj^IO~D`=xE9yMTF@1^aqA|Poj`b+HclY z0Bg2P@G7bO>9uqSf2Yo8dA=^eu@|@OmAWHSd;En5s8E#5<+se6-l&oixwva-v<;u& zb(HL?p*OyO&41beh1?Ba>a$17^K{CDLjCWIW_2o2A+fydq4<)xIyLNWvHk75R?rO@ zHd(o2dY;t_lLwvKgOP=9kKo^rSwM?(9e}>ZtWvWhQ^loN%D~wOX676_xAY^Yo*0-F z$#>5KGJAe*^Z!+!co)@A=%c*g?!_Q08_hdnpROtT1P%2J)64ggRQxAXYQHNHzkieQy$@S;%`8Iz>XbXeb1sAzH5T)P(DiP8NJ8W>A17wBPg`u|xm> zpDyQ+vIq4gKgaMf^S+K)K>8**5~up$ zPWiX*6H9l`RCVlf@}8iNByv&==*Cs{&r9_IX@xLQAyh+d+Qc(5teZ7bP32C>)bOd0qIVi-Y|m|I-q zjT?3#j6Se11JZddK;KM`lx;TGDvxDn6XPZO)f)pY>_d!_O*Mkrghe-a4jxAG-ehfG zu8wA$i?^B3U=<|Z2N8w|SERy!`JKiF=8<*Y1$zbkE3w|_b8!){i82x6IDzc}!c-G= zhUdwTwjHBI2%D+m^XO08GTnhnemlOWD{oX6dCbyOM=(kWHg~DtoR9)?c?4yNLw9Q8 z#Qv#=&jNL;)NAk`y@@N5AP#Hn@w>EfSNQykz(VzoqkTYc<6NbVE#hSw~ zrvV)$URCaS%e1}8zXgk+8^;pvLz@HymGlpfV>v!I(!i~QSn9r2Gs>>&eIw@)t8$)H zQ;o@+oFe5n8#~7}5eN@DEu{d%ie%3TQooS+3|2_+1C&AcSH&einACpAK%kL&TOGjK ziK4E&3x=~WoCRa8(*MN4ic#vd8Uhi;gM^uZ%REBu*o~3o`C^MOU@Yb((-(6v-~;e7 zJ9DwZIELnV6GS;ZQzEj8Qjspc^D{Bt^p2Gc#>3a(5ds?m!*fPl)o7A&wgSrw_62~$ zE-fH(bJ2)a0<4Ir0i2}8 **Note** +> +> You can choose to convert the model yourself or use the quantized model we uploaded. +> See . +> Before you quantize a model, ensure that the RAM size is enough. -To quantize a model, you should install [ModelSlim](https://gitcode.com/Ascend/msit/tree/master) which is the Ascend compression and acceleration tool. It is an affinity-based compression tool designed for acceleration, using compression as its core technology and built upon the Ascend platform. +## Quantization Tools -Install ModelSlim: +vLLM Ascend supports models quantized by two main tools: `ModelSlim` and `LLM-Compressor`. + +### 1. ModelSlim (Recommended) + +[ModelSlim](https://gitcode.com/Ascend/msit/blob/master/msmodelslim/README.md) is an Ascend-friendly compression tool focused on acceleration, using compression techniques, and built for Ascend hardware. It includes a series of inference optimization technologies such as quantization and compression, aiming to accelerate large language dense models, MoE models, multimodal understanding models, multimodal generation models, etc. + +#### Installation + +To use ModelSlim for model quantization, install it from its [Git repository](https://gitcode.com/Ascend/msit): ```bash -# The branch(br_release_MindStudio_8.1.RC2_TR5_20260624) has been verified -git clone -b br_release_MindStudio_8.1.RC2_TR5_20260624 https://gitcode.com/Ascend/msit/tree/master +# Install br_release_MindStudio_8.3.0_20261231 version +git clone https://gitcode.com/Ascend/msit.git -b br_release_MindStudio_8.3.0_20261231 cd msit/msmodelslim bash install.sh -pip install accelerate ``` -## Quantize model +#### Model Quantization -:::{note} -You can choose to convert the model yourself or use the quantized model we uploaded. -See https://www.modelscope.cn/models/vllm-ascend/Kimi-K2-Instruct-W8A8. -This conversion process requires a larger CPU memory, ensure that the RAM size is greater than 2 TB. -::: +The following example shows how to generate W8A8 quantized weights for the [Qwen3-MoE model](https://gitcode.com/Ascend/msit/blob/master/msmodelslim/example/Qwen3-MOE/README.md). -### Adapts and changes -1. Ascend does not support the `flash_attn` library. To run the model, you need to follow the [guide](https://gitee.com/ascend/msit/blob/master/msmodelslim/example/DeepSeek/README.md#deepseek-v3r1) and comment out certain parts of the code in `modeling_deepseek.py` located in the weights folder. -2. The current version of transformers does not support loading weights in FP8 quantization format. you need to follow the [guide](https://gitee.com/ascend/msit/blob/master/msmodelslim/example/DeepSeek/README.md#deepseek-v3r1) and delete the quantization related fields from `config.json` in the weights folder. - -### Generate the W8A8 weights +**Quantization Script:** ```bash -cd example/DeepSeek +cd example/Qwen3-MOE +# Support multi-card quantization export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False -export MODEL_PATH="/root/.cache/Kimi-K2-Instruct" -export SAVE_PATH="/root/.cache/Kimi-K2-Instruct-W8A8" -python3 quant_deepseek_w8a8.py --model_path $MODEL_PATH --save_path $SAVE_PATH --batch_size 4 +# Set model and save paths +export MODEL_PATH="/path/to/your/model" +export SAVE_PATH="/path/to/your/quantized_model" + +# Run quantization script +python3 quant_qwen_moe_w8a8.py --model_path $MODEL_PATH \ +--save_path $SAVE_PATH \ +--anti_dataset ../common/qwen3-moe_anti_prompt_50.json \ +--calib_dataset ../common/qwen3-moe_calib_prompt_50.json \ +--trust_remote_code True ``` -Here is the full converted model files except safetensors: +After quantization completes, the output directory will contain the quantized model files. + +For more examples, refer to the [official examples](https://gitcode.com/Ascend/msit/tree/master/msmodelslim/example). + +### 2. LLM-Compressor + +[LLM-Compressor](https://github.com/vllm-project/llm-compressor) is a unified compressed model library for faster vLLM inference. + +#### Installation ```bash -. -|-- config.json -|-- configuration.json -|-- configuration_deepseek.py -|-- generation_config.json -|-- modeling_deepseek.py -|-- quant_model_description.json -|-- quant_model_weight_w8a8_dynamic.safetensors.index.json -|-- tiktoken.model -|-- tokenization_kimi.py -`-- tokenizer_config.json +pip install llmcompressor ``` -## Run the model +#### Model Quantization -Now, you can run the quantized model with vLLM Ascend. Examples for online and offline inference are provided as follows: +`LLM-Compressor` provides various quantization scheme examples. To generate W8A8 dynamic quantized weights: -### Offline inference +```bash +# Navigate to LLM-Compressor examples directory +cd examples/quantization/llm-compressor + +# Run quantization script +python3 w8a8_int8_dynamic.py +``` + +For more content, refer to the [official examples](https://github.com/vllm-project/llm-compressor/tree/main/examples). + +Currently supported quantization types by LLM-Compressor: `W8A8` and `W8A8_DYNAMIC`. + +## Running Quantized Models + +Once you have a quantized model which is generated by **ModelSlim**, you can use vLLM Ascend for inference by specifying the `--quantization ascend` parameter to enable quantization features, while for models quantized by **LLM-Compressor**, do not need to add this parameter. + +### Offline Inference ```python import torch @@ -76,12 +101,20 @@ prompts = [ "Hello, my name is", "The future of AI is", ] +# Set sampling parameters sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=40) -llm = LLM(model="{quantized_model_save_path}", - max_model_len=2048, +llm = LLM(model="/path/to/your/quantized_model", + max_model_len=4096, trust_remote_code=True, - # Enable quantization by specifying `quantization="ascend"` + # Set appropriate TP and DP values + tensor_parallel_size=2, + data_parallel_size=1, + # Set an unused port + port=8000, + # Set serving model name + served_model_name="quantized_model", + # Specify `quantization="ascend"` to enable quantization for models quantized by ModelSlim quantization="ascend") outputs = llm.generate(prompts, sampling_params) @@ -91,16 +124,25 @@ for output in outputs: print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}") ``` -### Online inference +### Online Inference -Enable quantization by specifying `--quantization ascend`, for more details, see the [DeepSeek-V3-W8A8 Tutorial](https://vllm-ascend.readthedocs.io/en/latest/tutorials/multi_node.html). +```bash +# Corresponding to offline inference +python -m vllm.entrypoints.api_server \ + --model /path/to/your/quantized_model \ + --max-model-len 4096 \ + --port 8000 \ + --tensor-parallel-size 2 \ + --data-parallel-size 1 \ + --served-model-name quantized_model \ + --trust-remote-code \ + --quantization ascend +``` -## FAQs +The above commands are for reference only. For more details, consult the [official guide](../../tutorials/index.md). -### 1. How to solve the KeyError "xxx.layers.0.self_attn.q_proj.weight"? +## References -First, make sure you specify `ascend` as the quantization method. Second, check if your model is converted by the `br_release_MindStudio_8.1.RC2_TR5_20260624` ModelSlim version. Finally, if it still does not work, submit an issue. Maybe some new models need to be adapted. - -### 2. How to solve the error "Could not locate the configuration_deepseek.py"? - -Please convert DeepSeek series models using `br_release_MindStudio_8.1.RC2_TR5_20260624` ModelSlim, where the missing configuration_deepseek.py error has been fixed. +- [ModelSlim Documentation](https://gitcode.com/Ascend/msit/blob/master/msmodelslim/README.md) +- [LLM-Compressor GitHub](https://github.com/vllm-project/llm-compressor) +- [vLLM Quantization Guide](https://docs.vllm.ai/en/latest/quantization/)