From 6b6f6859028240412610e2fd8b3f485e283ce6c3 Mon Sep 17 00:00:00 2001 From: Nick Mitchell Date: Tue, 24 Feb 2026 17:20:37 -0500 Subject: [PATCH] fix: update vllm-llmd 0.5.0 patch to latest IBM/vllm rebase Signed-off-by: Nick Mitchell --- docker/vllm/llm-d/genpatch.sh | 30 +++++++++--------- .../patches/0.5.0/01-spans-llmd-vllm.patch.gz | Bin 10991 -> 10272 bytes 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docker/vllm/llm-d/genpatch.sh b/docker/vllm/llm-d/genpatch.sh index f6ac7207..aa0331cf 100755 --- a/docker/vllm/llm-d/genpatch.sh +++ b/docker/vllm/llm-d/genpatch.sh @@ -5,26 +5,26 @@ set -e SCRIPTDIR=$(cd $(dirname "$0") && pwd) SPANS_VLLM_FORK=https://github.com/starpit/vllm-ibm.git -SPANS_VLLM_BRANCH=spnl-ibm +SPANS_VLLM_BRANCH=spnl-ibm-3 +SPANS_VLLM_BASE=1892993bc1 . "$SCRIPTDIR/defaults.env" -BASE_VLLM_FORK=https://github.com/$VLLM_ORG/$VLLM_REPO.git -BASE_VLLM_COMMIT_SHA=$VLLM_COMMIT_SHA +#BASE_VLLM_FORK=https://github.com/$VLLM_ORG/$VLLM_REPO.git +#BASE_VLLM_COMMIT_SHA=$VLLM_COMMIT_SHA -T=vllm -#trap "rm -rf $T" EXIT +T=$(mktemp -d) +trap "rm -rf $T" EXIT -git clone $BASE_VLLM_FORK $T/vllm-llmd -cd $T/vllm-llmd -git fetch origin $BASE_VLLM_COMMIT_SHA -git checkout -q $BASE_VLLM_COMMIT_SHA -BASE_VLLM_REVISION=$BASE_VLLM_COMMIT_SHA +git clone $SPANS_VLLM_FORK -b $SPANS_VLLM_BRANCH $T/vllm-ibm +cd $T/vllm-ibm -git remote add spans $SPANS_VLLM_FORK -git fetch spans $SPANS_VLLM_BRANCH - -git rebase spans/$SPANS_VLLM_BRANCH -C0 +#git clone $BASE_VLLM_FORK $T/vllm-llmd +#cd $T/vllm-llmd +#git fetch origin $BASE_VLLM_COMMIT_SHA +#git checkout -q $BASE_VLLM_COMMIT_SHA +#BASE_VLLM_REVISION=$BASE_VLLM_COMMIT_SHA +#git apply $T/spans.patch # Notes: gzip --no-name ensures deterministic output (gzip won't save mtime in the file); this helps with git sanity mkdir -p "$SCRIPTDIR"/patches/$LLMD_VERSION -git diff $BASE_VLLM_REVISION | gzip --no-name -c > "$SCRIPTDIR"/patches/$LLMD_VERSION/01-spans-llmd-vllm.patch.gz +(cd $T/vllm-ibm && git diff $SPANS_VLLM_BASE..HEAD | gzip --no-name -c > "$SCRIPTDIR"/patches/$LLMD_VERSION/01-spans-llmd-vllm.patch.gz) diff --git a/docker/vllm/llm-d/patches/0.5.0/01-spans-llmd-vllm.patch.gz b/docker/vllm/llm-d/patches/0.5.0/01-spans-llmd-vllm.patch.gz index e7fa2e27451225ce14ca65c4f9272920f66375bc..a88a1c980a6c8a1c7c536ab0bb7eca5033c587a5 100644 GIT binary patch literal 10272 zcmV+*DBsr~iwFpEES_lq19Nb0Y%OVGZ7nk`c5^LcH)LfnG&3%6VRU0?0PTJ2cH=hE z;D0{_KK02C)s|>cvSeE)%EsNTPW-iRZ96@gaeR0v5waOmq?#9BzD&;9ci1=FC)uh3 zK!O)t+)2*P?lv>i7Rf@PP*tcZpg_R&W;51q-+Bpib}q(;?@q?%++~ye_m&s9{E6*# z`m@P&a$uQe&$R}-`;OCLR;M%A-Q8-p+j{A(?d|OXhVQ>;ZR?;lVB7Go)nRb|K8zTD z;6W0%*uv*d%-Mq%0~OZ~zCSk|Z%4enG47IN5f68EiqD%Y3E8iq7qB!ox7Zf6p$&hw zU%g^~zjG4i#VonwY>`Hb5O9YxxP@o4FuMQmTiaXPS9k~ibLbJie>grqVUKs-^o~7p z=0qGYd%-Q%<3gQ&xL|R*ScFl6McC_j;RGz^b0z?r#jc74Szk^L)h0r_dGEF|=yWQE|#35<#084g))c2*VH?IwK zq0{PsDzvPFE~o;?j9s3;`?-DWO?eRW_K^z$_GTWBhU{?ROz(KRYj!fQ_dx2~aPb^@ zw|B`Ee@ccdyJgcbNFr~NCSeq#|g##49WS6r><} zmnS@$dw~~&aM^_4IS*c#MqArqZ1Uj2i^AZ#adq}#e0ucH@x`Tmet2b87;hl-_7CHHiIkTNg4%AzP%o{ ztsAz@t_9Eyd(8~P8n8C=d7w}t~V z;&fhtU^{H?JQ-L~`BjTq%^dw>NX}c~c;NO=&?|PB7?C;yJ$eU))A98Uhz~Grz?WK3|MF<^X67 zZ=vWU9-W2(Zy_@fX*}w6_Xhjo{+0(kauV)}H`dm+YTPR}3B!b?3(|A(ECxlg7oaw$0*@frUj* z#$>K}l$V=!u`D+_`B!W2eiR-YZAwDy~NZiT-8*F;}{Z&KpX$H1ENdxYpt-J%X25y7+({_>s&2|_pMRsxcgTO-}WJ$}~EmS7TFz$_vJUbq7x$a6!$4gV#*(7ib{Jd0tQ0`QbYo3^yR}?#V{6 z#Q3lydc3S7{Wj>ISVBtiY&nxPI*j3NwrRZ>+6VkH-7We54A#~8eK0&y`x$j_t!K| zP@Aw`h>|_j6UPVLoQ5ulDHb~DAd99LhGhaiD0h-lECx-Tg z5qDpp-G+~KzCmY8LW;C(RvnKbTV(H=ts4OC<8`NO4~%# zLM41aD*%D;nfC;AVFanU_wZi3BOCwizv5?5-ub`2`z82Cn9{%r#U5ZM^lnih4v&}< z#~yLaWQ`Jnb20h@5kEoz`#I$?1+e5DTowvD1|z2EZ!xhwN=1ZQ#qQu%fNTIP`UbQ03)S#PMY$5$hF+P}k?hLtjT{HwY zB7)Xf32elAkcpBXkC6wu<*+*#*R(&Upc=`uViLxvNSa1USPIySt961g0OaT-9=+s_l;`cq*`@MF8>@dV zsmULelqDqPhAQ9Au^hTj%p9bpL5Y&Z>rY7@dcH zDqTy!(}?~+&=lPx|IxgW!{Jfe<@C1>$IQD;g`5hOY6GUdg8v*pX#?|OW-MSVg}pdr z;DW*L%IFpcyx1f^3}7&m_Ym0`p|6P_4mk$ZD=!u6u5{L&5UU!p=%i4h+CM7&K^1&) zx4ag_U3=~m`-Wy3#DnGyDK$O@b_1oi+z_6vd9%*szF6a~Cx1Q>#C;`9H0)@Yqi6Ai zegcKMk4HbTrW;&=KLwK`yDs=}oa~zN2qRPu!6Ueh2&3z&Upxw2Z;F-#{9UAc2=#7< ziJ2B`;UsdV_dF@~aGfS$qbs_qCKyUKI-%$XwaA-u6aO*tL47v(&_zVkJETL+7RzoX z>PCblz`6Qm7h|P+(T3Hy`3qfchxHXlk#ZrzNyr{F!7? zD~&eLcB8$oZ0CZA-c@X~{%u(O=sV(1?n# zg+{>RVu&(p07;pWBPiQpS6A<^*pU4uG;3(?&VGldzX`PB)`*+RF3MPkSi`_&!?=@K zI4T-Ke>$oxTfzt8vj`;KFpdwYBR!K~966q82F%8RtZvbUH- z=yzMYY#aXVV?GJuf;)(01V6sMK_^#crd;)C<2GS?1mV9=64O8`PDYUl?SseqpB}ga?l_jD-M@2QKz-%&2T_ zFE6$oF9KiG-vtti{Kg^R4m3J?UW6XD9iqm-@phbrXJcxJMaS zh`K6DnJcB)lsH>BRWHfUL^jni9N5BSm)mxf})G#8fmp2nci*}=#fjhzQ;hdlR= zn0V&O1%8j=rai@G_`Z`*b$?HGzJ_ab z6UrAA6g(eM*ELMj1b4|@55oNC1s^rgH}1d~#|s+GHP~Y62}4X2`GAjNi(;1Xv(jyq z$&sWN@#bBjR3QPEo@M=_^jy>3a*3?hlwN2IG@Zr5Boa)tBhvVq6s)S7Jo8l;5@_QV zCxNjDU@WQP6lbuA4Ofy4?ni7{ep@sn^wRiT*65t2pCS0fnU6q@%4eV}ZS?r*?cIh| z>qd(>u(UpW33XNrh}7d}Q)Y0r)FwR3Zd!#b=x0;AYsoGLPlY#VNtGIjKg}vVuVBCj zQN<$+{BZ6ASEGb2Hi6hL$(OK54+WtIc>+*z)s@8@l0D7ZV#o%zbY-ZiS0wka*XU(e z76EIeNIRo8YWNgGbf6i}LyS{_AVlm)ZK@;*5iu4dG@QgiUY9WGJ{YOzi(#+V(R zA2kXJtS<1OOK6p2ix4>hb_&8X*+%n=S<9cMe37s-2$E)g_&CPag3V(~+2wek(?4Ea zosX#`R)sw`jcuHL8sVEux;Ni|t+*I}{Aql7Wj;85TDC8%E|)`i?4u?cyx9~X246~j zM#`T=`O)ds_~P{N*uETJd>UWaxTJZLf+i2pPZ<>0piT~^x zO(?0&y-j@&=Y=sCyv2oV;(m$c(~W}w%x5|%=7S=pG*Y;lskCk;7+I)@2o$hyv)GaD zTe=g$C)&L#RCpw;9$H<2rPI><6VZ{~s`C01tvD_~EWQ4ZjJR%RcfZ-v#86NI%vOsS zsVIUxqKkn+Mx6?ZK@T8&8nR;yj=_;(ZuYuE0jr(Q!V-U)H&qm(7K8@hf$*7pmZbp$E)F6``cTq{LLV$dmP~B4m@+0pYiNG! zI@h3Us_SNWvx(i!mY_*o>VAWwGh88h2Zq6k!$6fUJlp_DoP>)K3hmJv1U1f}KpSb?afr%~0KFR*_FQVj?V{M6-k3M!J&`nn}pUqIH9o{LvS z-Z10c(vPAu2%jny(Q6%=-(x?EMGQO`Afzq zFBqGws$YqyGMZpp5J!UvV25dPhqFCXnk+o=To`iWETNqI#{_#_#^fO`Bu3~~=09eW zS${g|^k=5I*O~VFPIuqI{KsCuU(A1qLWMNPL-y%Px8KEV2L7>nn9Km-T>ayGY`^_+ z{Px4q=?{`Xnj`+{a%_L<+9zl4#>e)>Pp7Bji{jj&277$=g9JP}y*wYk#kGk`foYki zee(V%`(%7|arE}G1i76<$_0;z9{zu}6!7@$;xL0ge|KC5_)0Ft6iXtrqLuW@vO0>( zRM&&$llMcM{R7apwH%J-Lp4B#|KX4W*XF}tC-oCs%x^|vnBX9UK1>@}7JZsFu=ZQs z1C*&;Jc?;Y8&^`%TJ0g_pm53_2Gx%5=P}M))aWF!W_$-XtQ~IKS8MIUzKNh3pZVPA&+8(Vh zSF4kuu}z)W%8L4&*nHVCO=2v8Z>f*VB-)W$zTB#zTP!gbvtltW9m5Q`{Hl@GK%FxSOsiq_EpKt{Y;?zH5i17_eS zBT$xNGn!JzrG52M(mp`Q+lmUM4FFcQTtfiOZ(FME&DCvo^cKh7ZGfvbs}0iavRoO4 zjf=%ss|#9-5HN>6HYj}6u%fZz6NW$1T7jY5T=qK}ydkw@50aY8lNgM1l zErAb%n;OS1!UT~F45J<2dFD~P6G03aJ==Uf;V!QJ-@$}}=Ko(-N-dKZ^m>CmXVy2( z?!?*~3@o=>vrOWJxV32Fg(cBN?V^9$ZQ08q6~xIP+}WXC(x)O9oiRCyt7%A8@MpY_CkoMJRX-N#1;2�@APkJePzan69^hzCvk?#rs7xmw)|{TO}mI*Gn8ig3Z8^&*&di3 zwHOae7rNQX0_xKdP~HiyFQJ}mU{|E2QV@<*zw4)t8uQP#4;Y0B)jk+TRDt6?$i+AW zlq1wh(J(g}jZ-WG-h)OZ7%BprQv7C`qB7yKfUoqSWF+FvfIq1>H0FxU>`RO?xzcYT zlnvqEwKcq9?fO@^JA>XB7+(0!R4}E*UcbJ7bfVjsTGLn}#zvKCOR(TH3|`+a@MEPY zd6u^jPevRAYgaQK^%F65+86I6G@P^HO|Yg%lwp$Nm{ zB1Z3Z_5?4n^4|s$u{YKl1OXVQv-N;4w=snK6;t^d=HQYcDCVX(KOw6Y_Yfh^74a)A zoz|`w7Nx1h?jB7o_Bt)gTFb^asprGE*I4%Ax>~Lj+Z6a(XoI?zwxwj-@!Dj;wYmy& z5-ZH+va4lP6yvhIya-QLqSGaeR{<})U&7H+NQBs5O;LDK3J7q$MCM>dg}auJ z@Gi|Xc6Sf-VEeBUaIuGtinrxJx1bE8;%#d~tr#tRQ%;EJ0voLkz(3o`9oo^*ckSN0 zQRe9Nr>&~w7EWZx;VeNZ#Qc`NAQ6R^y)DykaYW2XN46!nlF5# zaHkKXTpmvypJ(GiW12!epHT?*=Pay&C;>)&IJzU2$>-f0ZTL6Ggc=Eha?ExjjLxXo z7tDGvy<3<2*2+Gb*I)5WrOx$vL|x;0Sm{$YB{|%WvW7}FcLz9P?f3RpbfVR4uE>`^ zEg-NP)jTU}g%{jQJ))nb*K$Py32~&~l*T9}zK`nV@I}3*Fa;t5J(=TQ6Q@DMv9m1V zSQf9XDI?>y-fn+?|KMP7V44TBp6gC|x3?~CTZegB{I;%~_#{buk<`jQN4n=x!2N0o zyQ_j-HMp=Bm;i#v;TlyJp2l+Q?D*cqvt!%{padkm08TU zcn%?ukDFh`33M(&IVNZ{xTDh#mn)$zkB{CRo&I3|{pj@F+23nGA=DL|dXES%&d$ec zYdtx!&o9RBkA7YWd2;wOLS7u6{xGhi5i73i+%*aV23&sl3evhw?kEMoL895#2E^?H ziU$u4gge<#O+oivZmYoGB0_;QQ1$|mCAjW}aJ^L=m#|YgD`0nOkk$fPtJql>3-h4L z&TUI-`J3ajw;$|}tB|QOiZU3>iD}TD)#~D=l)Zjyx3?L)b@Ia5Ear*b!C*FxY%y;E z-PG}YNxHCv+iEI1jBASHci#|mQSZfl2VQ4Zz(bn?0oDBjpg?GQ&c3O6E8L8ZRBSXL z_)Y~~8#nwMAp;z-0IkzvKaLOILGSzL*gije_ip@-?d-5_wg{y_q(c}p7gKEi^{_?Z zH*O%Q1V^&&g3qMu(lInS_Q=ax34CMIs;}mQavdtV2^kGSQJ3 zwGAk=ySW5?&IVagEWR(Sa_c6XO?pQ2nw)@ zT-E)FW~D5G>g{z@+xlp)K)3DuQOe1P;o1h=+pM}h#Ya%d&6_oOS+gcfn>G0Z&0;mp z$~ryG8T583K{vp`<;GzEUW>cu*n=?67N2pVL(v+{^h-b_w9ZMkU3;WF$uBD3h97zF80>=9=WiZ#hg7J&N~ms8OA$z?Sa!SQFw1d`oOkKAy2Ql&*4_((sk{z6r$6op%=rLiE>tPGT>NVP!XGO60- zImxo8S|eG#XvKDmrm?~z5}|#ji{F&sl7iV{A6K9jbPK>fu7;pCLt_QD!tA?ZMFqij zxeD7^4I>##)d-x$=87r!TDlC`OyLCN)B!4zl8&5mXp*0hjjj1eNK|iRZQ2l@YMF+y zCSOo$TS)~cFIK_H7pmZ7r3y|qHZFLTqawV@9}y@@H_(vDCK@s!E>23SxP<9>5hJ5x zQ>jiilWLKkLeulfpz55ekWHOWR#$H1YRpauL=J|laX(XN!Q>or6_>fHy;npDK`;?|T!xVAMf>;D_HX0oI; zA8?VNGKnBtlvSI$(`%%<4p{ay3A`-}B5(#+<0R@FSA~ET)fE?aenLB)8Dwp+r=`I@ zRV*_N2ll#n3ek3NSDi+*`Ea0+UID}M=}X=ECSIA9uTRjFPn&yW1UEjdv9%AIdE_s^ zmG_?#p-bB&R@qp)t$mQrfwk$xx2_hKg&6?NVP`OxLLdH%M`3JG?sQaFpv8#zk=9Ze z&bD(b+ar-z5$$)w#Q4}^A2in0g5X}EQsLKvP88^*taf@*rN~ZfowHc@&y?VvIt$~n z#pKVXSWVuc<$t^T-3`(>y|4K%E&sLKrOaW!^CH&$duPDP1I#sOTgnwlwA z{|8bttB74bMObXJ-g#C`1b$8IXxG=o&ez1w*Tl}(#Lkx`c2@V$4HGzpRQpo9oee58 zEY&ApZi#yT`k?Q?8`ox(iu^w+L9d3zOI(vAL4f|^xd4CeW$PK zM2Tv4XFaOIM>H`r&guU6M4kQ6to}gAS7NRlXUoek@l08njfRnEx9Y7Pz}d zFL1+0Qi$tLWz+L4MjmBKR%Tymc4l;MibqDLxf;~UL9I2Q-5j*r%(#0XxvPEUwpJTU zlX;_ubtGhYz#O!@2DF!h_R0*cMBYW+%z1|vIPci$S_3i=+Su*x zel;Nf_6DSO2ZCuB@f{J-EW*$)ZZ%MSDfbkZ&JKEAYu~X<^Po4Ia*Ojp{hk6fD2kg0 z)Bw;rw1Yjd4sA~k{lrcaZxHYt;Iw#}3dc5{%7{@H{4r=(TF^o9N*hyT+r84E+j+rK zcusFj=*9LlNLYKsEPd>J!RO%vXKuRiX|G${f((YR7!l)+&$K;ke!MhZE(c(sM$z}1 zs6ZuahLWab)cr1w;);!?))d+YV-|5Pb3ULxDaV5aaj(Ikl%Tj?T>)xmvCVjpZ?>JL zc!gUrroLY~kfaWC*4!7N%~0lR67Uep2XC54LCVe26x-q*X*MX5~wd6oypzpKt;nQ0L zJ`u2*&c0%ckgP2X(ZunQF&8bXKh0(qDhZkm}fMtfCqBpL{| zcvQNt*&ixfq$oC#DXv?TJF<#+;h-lr@m#}qb*W>}L<6y{xWz5v7ZlxjWYS@vTrAtv zm0q7&$FXA_(kAgg+i7p=z#lR(mIW#p9^0Yzt1l(f<%#RKgFQ9(M=!ZR z=-)ugU(>#~0e>v-LAhfrCH3_rZZ?NzclP@?OqCk_wgk`biiZfZ3gz#O7MuBLd?$}M zD$ckN8!`C@yO{V3a=0KH!vb;;`#9^6QTg50oj`!bUG9FfP(?y2M{t1I!pH9 zS%PMj`N)81SqGi=&9?FHZdb)+nsNx1%kBhR!)7m>2v1zd*{w0J@(%ZTJ3AfQKOSEG zs5<|qd(f>tDtd$mNR-c0p|dRWb1bX#o{eilgnppNm7Ag1pgrc$46-m{bN4i$ZO^&; zAC1z)zV7Qi+_+viHnF9sI5+_Oz|CA;|ZrDiO@^qQHSBIesg%d zW?mG-GqLV7(q)IvkG5FVn3_SaIjg%mrCkFq&IqY;Ss01xb0YU|OGO}0Y2a>|X$|&E zJu(uh5Y%rgoAWzXCr^kF2SEI-im^0LzFME<%D_6F+X=*c=+5Y`Q3oPTy4?JW;?*Ca z2F-U-N1UYromycS6=GT|s&0WdPa?;@=g)C=9tj<`vMsizm1b3zlc(iMfeDPHC*nOF zFCa%Wa!X-|+mcY!Jru{JV|XQD^16qD1J{SabBmd#c_X*f1VFK^Z|&P*W+^lkT5dFQ z7>pPz)UVWZIt4*4;?wjP3YKJ8ZMU8f&l-$bmDl-gE5}4Zkp@UnQTA5glG>0%VKOd1 zA4i>lrTID)?Bw2D3QOoF^eu4UwooOIV}2$M9*6@W@-qxeWE!mx!3^%W*6rmRldq_? z=rdo@8MdiB(1ZF4m@NE_N{SYYiq{OE)M;X)EIPsk>$&+716_6hG{j*`c2^o?6y&g4 z$(PXq=CW0MFf37U(<%t4Xg_N3O2e_tuj*GxUM;fu8slwo)N+Bo0yPC}&HC^J&r#vg z&g~+VQEik4L3xz397u*K{chiJ`|f1dGM@>Qs1B~fgrs^6y?tGk&bcf0 zEItxP*2`0~dVO(fRu3Y*em+q7;ryo)r1^pvT+P*hsfr3N^)xJ-N{ zwhGVB!Psc!6i!+I8akS!9{rL7P^(P^@J-rO-!>?`K_m2Q5^?8V-}6=9G3eHF?M_js z;u%yWPNdL)aeH(f(&#j+BP!7^#JJiN!ImwQ$&NxA#qlTHt-d_s5_`33*in!bvcyKT z@=HT=x=4*CZWO$DHkwl1`#quVgTg5{6>TqYNNb}|^HG&YC2BRwMpZIP(0DF^T{ivBmuabAEjrT_qiwBAhs literal 10991 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