From 3774e9226327edeb59997447cba69c431e18da56 Mon Sep 17 00:00:00 2001 From: josephthaliath Date: Tue, 6 Dec 2022 10:41:38 +0530 Subject: [PATCH] Installation documention Issue-Id: AIMLFW-12 Signed-off-by: josephthaliath Change-Id: I8edebaa5fc10eea2f9bf9223c0bfa9f3b105fd75 --- docs/_static/logo.png | Bin 0 -> 12427 bytes docs/conf.py | 23 +++ docs/conf.yaml | 6 + docs/favicon.ico | Bin 0 -> 15086 bytes docs/index.rst | 18 +++ docs/installation-guide.rst | 334 ++++++++++++++++++++++++++++++++++++++++++++ docs/requirements-docs.txt | 6 + tox.ini | 30 ++++ 8 files changed, 417 insertions(+) create mode 100644 docs/_static/logo.png create mode 100644 docs/conf.py create mode 100644 docs/conf.yaml create mode 100644 docs/favicon.ico create mode 100644 docs/index.rst create mode 100644 docs/installation-guide.rst create mode 100644 docs/requirements-docs.txt create mode 100644 tox.ini diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3803e046ed58ac73cdc9515c50b369cfb91504b7 GIT binary patch literal 12427 zcmZWwbx<5Im&e@}*W&K(#ob{SE5+T47b~#1ySvNcP}~*@6e#ZQR-B?muixAscQ-eA z$(y`4zj)qcl9wn=bp=c`QZyJC7)&KaS?zy3?O#ksLHd_235@OhV+b}kFfbySFfc?ext&^K{}f2(DhjeN z@BayfJrybcB*-30YI4Z?$Vh0|1l*aJ|7zw;P?D7bdas`6`S}~!_#E|3`5l&bv5yk{ zO%{qj9~5wPWTXZoNaIooDmSP8(k`6#TDz70)VX$1ws8(eKTRmDqO#J|5a#@;RgxJ$ z8{beln}M5JkkJ)aH2$E=a)&$ebeUM+om*$kC#-5w{!XJuX_!z&7{wi@a1#P zk&_qy(VMu46J*a^N0TP5;N&lb$ zWDmyVfy5{Nbz@W{^8Gn86mW;wk0`@(-iexuN>e4d9noNzkS0GbV9|nE?NsR`XGh<_ zuJ0t>^1-3Re&Gis0@rlGoIlP=wU$9Mya5BUAXRg}^M++XqLo&P6hOsd8$bA#sPW4A zmEEgl9^r_himwBHcu~Ew!Ij?%u`E8w3%F$Ai3c_gUr^KE2s&Y@X*GAk(>>M1v~VJh zA<+wzDzdjUB7lHmh7?9C7w~oW^eLcjgw>4mC)_n&#pIv`XE+LJy6WD;dG_s3G(ROj z_P#`U87C>@eHpK!K%YW)#4fIEEjEf@sBZ8j02_mw0M)e!tC0(~MH`_lVX_{Wbz;y~MQ44w&o}9XEW-S!e+%?&w;jP-KKp&aUBocLAkXwsjpkafF zW;x-eL$HSdn`_Mnodf2YkKqfi5I1dpUK&#QpyQqjqAuT~P%9-CijLZCOa!0>lpbo# zRzI}r(CFxTqS|AJkS!Yx_ovb`*%`M#GZ8q4qUfV-Ajfz|IQlK0Zifx>L*H1dI-x`i zLCmReO@tnusnIVZ!O%#zbav3G?s}aOyOdxVvm4M3SPn14beN!<#dp>LEytF!crcGA z10g!|X4Io-3x`6ZaH-AEfb9ZsAYrKvbz0!{GEbuMuW%q~--39ZCbA=vGtwr85poTZ zG!!3>+l+{S9<(E@11ie9_u(P3hvgryeJEEj#+maj(b&l&VG&;3mgv003(Bu zgO0#j`cH#~v!$~|fTBQ*J)7ImIHP*x$gZ|L5HW^5Y0%baZD z!R!XwcDsa7_!hIobEqho61f#_W|v4STnHbhoV?KyP<+t+yVrcqG^Mb_RAHlcBFGvM z&Mi4A7h=(LJ9>wcH)MSExgS09DAHBlc<8@N8|M2bIoh(mm|g-)rg zq)qx2R`F~VrW@0n(}f?0IgomR7Gx}KML^MvfQqskO#yHmQ=$o$_8i`4XUxK9z=Lf2 zgP_WFdP1*$gGuAEY~`D~{0NHU0VFZy{bafHFZu%*LGM8)M@ zex#F@WgX*^cYYn4KJp%BAD7#l34vC2x#K+Xn8kFJU|`_;F-7;?u)B1zEBX~H)Guh! zfGCynW0ul{+ABxHawz>V`qeX=m#S6)Dx4&MU}zwPg)xdh5Ccc!nl$+Pl4Sv3T>p`@ zQ-4TE;1<=cX_ZaMBpWVHGFuyBzSkQvA1C>HW#MKi)TSb<0Uvl)(WDpu5w zI!ebPHXoVZBmc}mtqbn?Y8-lXM59`$l23jFx+B}knI~Q4FHAhmI0&w^8TEEXhmOg( zBN7TRo_7SDvDyVU_tLH=yA-ntNkb{nDEUL{0aCtOZgLaOy6)Pq7fTmZXy1vw_+|HL z^=jutjaxS52aMCcq`n&v;o3ugN+b_pJ^mWh(9{Xl+C=bQHmrmEn7v6q=kL&(P@*?i z`T@#MN^o>u60KXal(_@guZ=*K!EA4=%x9V|MamWCC`Id7{@xhPDYou$&f2u=4{@SW z)D4}Wowil7_Py{4f%(97T&=?Yc`Ndsl23TCdr7M0 zWp4=q0dj>F?p;>yUA48fjs$)TA>t_=nz`8vgYv1^Rc;nI;dNvJQ(e%17|lyvF^jJ> ze{vwcR_+*ehBj5`ORc&dTq-U+Vb*6u`J3d04d@4gs_E>T(Z}7ts!6Nfj=`cUohQfk zU=!T-naGhtuV0<%q|sQeKREkG@kL16g@cH=iBMe7$EF+@^k-hf|5o)w5>I%ydME%i zySt-XbvSm>%xk)zid$lrn@s&?m*39*cseU1KBI?-Y%_wp77V|99E6}%g};~uImkUC zni4>V36vF7FeBs;JO+Q}tB3Sq5Yy`jFcDAX;6jWpvRBP}So)ZTjpW=e!p1+v`(G4X z&@^-^r}=?aP&J9df3324?vUO;`VVSyHm^b z1r`(byCBo4UL~)qy(|mGeWQ(gPY>y4#p49}JvzN&5Uq;#OuO7(^e_Q#bo|apDxyCF z4Q;t{g@2ZGyistdOUm2{!U-5jiVT4UZsFloE~u^KDU$TB=;3rhK2gnEO5c% zx-24XgKJqCv#ty?0aL4B979MLBfcumXmKe41?V7`fCA_t8AdJlb6%GPqVpa;6vP+$db61w{FH%7SQCe|1&~5l7kOX zgJ59y$6`nQBJc23r7A$+b*ww0HbkUU*N^?aCJdG!?$Zd>-mFcp{MRZ6e8%6n(RBDv zZU_zl+X;YUuYBBdQLpaKhwbJKK}VH(ziv14iNE*1iF9#ST`x!ho8>3geN5B3*iJ3v ze67*qAKOKB=7z!8}AahgzS4Wn~lJi}-L zDyr3+@YB7y!$rOA^{JQAf{B0G9JE<7rt3of2SLQp4at|Cs!%D0!iZ|BW4q)QMg#6$ zw(r~K#ZB8u<|gVojHBcg;l@sOUm#McNm3Dvla@ydn1LkWb1r{swbmy14^JZGwn;dN zg%nrP8K*s@n?Wx!EOjA{ANUPTB-Jy1a+RjQ?tnV<((FzN_+%MkbEmi)Q4=E;>4NDZ z$RW6R(EhfvOQZ3D(h^F8I@F5x9i21>uelhSP~u(|6XAmpI^`nPXGDsa|> zd0-7>P#{q!se>WtVpNUxi^-Sc^hLXcds+u2Lh~EUK4nk_U1EE5m)2Zh0N9<3Q^(Q$rUA4k+$#wH@OB=C#S8Pj^AmIqs-B9iE;*30n_v>Bj}o#XPbZ}_#PiZ{9`Sz+kE`vSb|la4CUSpf;F zD>@dikM3UTnA^z>0a}SR_!E^Vm=7OKLL$Oi>n5*X`|mO;Y>B^R&V*-xE5HR7t)uJq zu!y`hrud)fkH>j{L8k<*c;3%rdHTXtaBHz6PL*{`UR|9HxB~piK;4-c;RA^)K>m+E zK7ih;-rH))*QteY)uHLtg;8iHJ5?)knuLruq0RUfA|Ly52!2Q~Nt5$TLu<59?}vlC z$dBODeSA4N`q#U?ue8OVT!epBe5RFTi*@&1gzN1z-a6yL@JD#XA}rE&S>HRU|SHZ0n14EVpcv7EL@@3U2N=!-;S!k;W-qa%m|{Zq9IHH_Y`Ij zJR2hvQ`f5T)dyJ<%z6nx?uf4tw>fb-wJP7U!Wea^SG)28ZA{M(qTSGbRJi}3q#StF zCz^=Vqa+3%wZ=^@N3Lnr6zkf{0WWj3EY|AP_;e%?V+rpgz~42sSnK`zHQ(~u!Yz*U)ixRd&&IpOpy!bYaBh| zY;5V%Q^JM3X%BQkJ6Mor-lMqE+O1>amj#AR>^mdv(}QHPWToHxu5zWhtzSn9F*iP@ zI#z-h>Wkp^R8VhNK>7gFp(*h5=G-69XXLXXTa_w2YhWO$Jl&5pl#DdqR5^PBu`qNm z)-R>l)Gz#FlyZiK@s<(cmCsdW3gyy#9vwvmb^JM+2bCxVFr7grKWb5Q-SO#0TtC4G z)Zq}Qwx5NGYA$|t+7f7Z+rBl+$yzATAU5N)!rfouB%_yF5SRV&=y>PY+T83H2r=v+DhoB zkP3`!En_QHS2aDUOO2%vqmOe2UXw|tynP*?ti4tRD=-$~A^$7zrWLt1ZGqD%d@-1qH|y6iGs4fAu5 z2&K(elKr26ii{1+r)Ove0!dV_gAX1A$EiY8>Wck^^~%I`FBMb}p_{7OF=C5unG#*V zv9`Av+%BB2!#&3dg>T(qKuY@tb=0IK$kf0Q1qXyqQN5T@?QnWAeZibwT!@0b%SC&k zgg%g%JbArkCZlK2{B=e3ABokPY&8sN+PRJYUBq>;P@qU5;$B(9Qra}fm;}Vc%T*3~ z5k7v0l`p>35BTqa+FyVARZHZpfna=PmMi#-2`q|EGapPIEg+a>rk|w>m61cY({2Br z`LnCL6jyhmVa{9)vVWhP0G_|Xib$*>*}>=93;{@MC-0mPAwxxPTz~ z;c@KpnNa&TZXQ>~Xn7oR2HgS_1}TG(Ngh%0c|cJaa)~UE%db=kwWIAQbOt2g}84P5iHl^of509Jk?hPv{1=<-8 zlnx+jNH_7&P`utKW_#op)>fx1RA6IWe(65Q${#7`uASyIoaE%UW4+=%nwoe_WX^}L zfzA40t3O*-D2-AShE{7{&6ODn)U}P&^~_F(J<+^#iSp*~_P02?a&ACWm?UR>>4QpBO6)G+&-^*5R-gH^xLlMpbCX(zKB3}sw8Tao8m#B?D4{lq zwo)WooQDg0!TpZv`n)-LLs(gAiRm@9B>wy_fBDPQJ;0dQl0-gpk zrYSci%~B?YI6<>GzBb?V(p~9VgC-R~xWL;iMH`$T*V%WT1&P9Paav0ca)AeWaWu`samF zwu$oQSCBCrh^EnF)`tYW|8^WcT2-KRENP71C0|CvS%{gOk_%yh zcbN?AInRY3AS{(u+3C9CijtVd)RQ!kVuUeNijSYDY(w?A|G}X8F~wqyZ978sKmZi< zi%rnskuV+$MaBY@q6^qgR;Fk?5|u42-T!dE$VI#7wd>q*d z-WH)dYpQmP$i!k3MCV72KUGW5d6p8gO0qI_wQ{a7LReILW3fz6_>Lt=HVr0&>N~Kc z;ULzMg2_XZhfawYt=4MLpf_;vrtFj6W@UX`u@5=hV=yx`a_`D+hx4r7O&O; zGhE6D%kg7~4tlRcbrLXXanQ1ZNjzu<6YZuU9I6y}wK=u5jAbQw^yCYQhi)>O=gl+n zp$pUH(L6RdJ~MDC~I-MKDV< zdRmlK>0nb5*(FQy5D_Hwkx9&bHZg1KZ0fGkxkr<>dUkgxXagwn1^PWvV1gi`eSZVx z;6)GdTOZ7^uBD-nvyW04E^<82)Jh|b^V8y6N_dEk3gYQ6jL;8WwGBgE5Ifb~3mDllLs5Q; z=WV9)GUI|WGX5Cxv&aY4QST(_i6I^FZPyfb;vKkU6Vd1F6iZ1x;i_FK^}HV&sEvQ`XO4cE1G~Y~-Vu!p zZQHbMB}jG+#Bqr(6r{=fOio;# zG5@eo5R+&1tX1!}!Z=_^P4hkRT<|U}!>&lL8(7gHkO_hgUeOEGJw+=O?Isn>IWZ%O zWjrpxMSNGB!e*gLBhY5jkh+FDgac&w?Od0HQ+oN9HjQf&oH$QY402$Y9fa{mf3mbc z>?YJPrH?I8`KoDzYxmaz(Ti}`?I6ZIvM;DbPHrH!l!qF)V*rW=H5VfgPe6Y}g#C;s zPHrZ_&=%2jrnYcs@7$h+7F;~Rg@ zGE_-QAMQqf@aRldNNTJ7W=F&E+BuE@r{pqUgybaw-`~QKaa739x!A0&CjB(TwpvwS@_a zKNx6u&*OCpkhAqjejO^ccM>a#$anVJoo8i_Xf~)9V6{H5pJE|D52^oX_ILp+6Byuj zQtHQ2_+jjvNzinX((dkO*GI(S4Ca?q>C+b#w%GJBfNgZ@SV`&)9ypS5BY($avQ)U-f^JORv8{1<^PrUvs_buagKm5R!n4QovZJArNGt8!(WVP3315N@+ z$KQIX0?N*Ei?zLQ!>J|pO5#}lJD_SHNdny)36ms%IL^gXrpABppe9(+7pYDuFQDwe zB)(_ammv>hLDlep8g3Lr%*W{Q54QN*-$GZ5aKyVXl}RtrV|H6bkM}=C(TsGg&X%cp=l#03^75Q76{%jzycX3i3QF%UKd6KlA5=-s#Tz>gF=* zUo)x@99K@S6Y`hyfCPzmtwDKu%W?df$=(`q=9+pC|&} z?kWgNeitM83fDgYs}4WqD_Y*o0PPR03+SsZq+%(^g>>FGG71d%Gl`=YjSQvYMLUY} zD%82S84UHaGMQ6(Z$>-NUu3+3Q^ z5Zk}*3m`ts;S3kzx4f$5qw$B?vBsIHJ0(0WI!w^`w~J`ZaePt+rgY2^mph=ggfo^} zyQ#UdBCqSlVHG{$jnU=x|A2C> z@J!=>Y8r`mG@kx_DgtFKuPMMMk>$^(wLqC}Oz~3Hrv|@af?w7ky=-Ydewj$F0~%@2 z4$M_?V0qK^nXuYd?JKE1!R1fylSB`m-My}I(NBjy$PtruO@l-Cmh9xDI3iPFKDVWe zOLcc&HkTa(&%wy~&&NM0yYA+_*INkSwDO;NA_#AVf4WW?Ycd}jGqX#<|Ag=UxS&5~5)Yhw z&scT0+G=@lRH}V7?TPDFqDoEx=X8&@e>Qk|4rXtg_6&%z(!iO_CuSVqhdn^Gu^AO& z6)L^5lbZB*@Te?a%6}dlXY0Mb1*@`nEcH{?b~IP9GiRI~Tdc43pl~70f~WbVQ&=Rb zuB^k3*k7t6R)|pQQEtijnep^n-=9uVYj6>ybyoLQILBq8dyW=3zSU2V1Y|!u)NX4t z*C8xgbhAp<%X>~i&c@ig@N#tdpFOo8`3y=p6WfR~lN$UJ>DjiW=B>cVyF|nfK<~fs zJwI7`Z*rB&0Et05G*4-RE|!;Ig~i%h2j!Vw>fTC&(m#Egp7*=$ z3c|rT0RnW&2!DgmwfIaHk`qE_K62{RCqblZT3p_|@zOj&m*a2DF8{ zNJpd|I4jl$k|OxBMt)l!!Jl7U7LMsdzYFw-%cl_gaVQWo7hfoooe6grU!4aIjgPfv z@mA&gowTj=9Q8_u2Fm}vkks3I#u96qS$i(G;A@FnEKNQHqcor{sG)rU5^EoW(o&+y z8^bL=_^#^tYK7y-YpO*j5)iPO%550oB5H*FJEfJvE)bg1=l3CX-xZR%{937%(GQy) zNEN$s3czc_>Wi+%%fP7u6v1>;#S;zw()cy|Tbt!Uxb})-`lvqBig=^@53X3(dz;VQ z=JTX=qC}f+{iR5^xt~yH(&x4h6?JxIm=6Y27&X!cWmhcgXcGn?Z736mqc4J`teGlx zNr#aMTz(-SSE35=9Z&=)qyEa4Ts@cEa}qzUyos~bKRJULx=;pJ8E4uS8r&R7!HRol z;LovzKOm0n?^G+E^qAGVvf;Bi%Hb9t!zlOICy=-$a&7)ehv}qwZ&*i`>@b(hntJD; zmH2P2M%cH@m%0(}OKB!^0YY&hSa?U(`rY)RJV&KEYM_jChp|a?!&VGrs&sylJ~vMX zMG)g94TbYITO}x^xo+C0=x7{Uf6X-qI~T5XRkAMffnO1a*ibiNSMCMz_iLJ1!R$fo zL#Q=NpCYZQ!;txN2YfzhD}$)_UdLynbi*($g|chojo39uzd-5b%My-nFnr=+K;F0; zvjvi)0z$Ln3O}1InL2GT4nxl9Gq(ni?d^VX*Dm})P`m(*aEVc(5{cu?*8fz^=MW38}DmAqs`cl-H}+2 zBtIH$mRznH<6`rxyQpr^+8*Q9g}&zrVqBE6&+&a62Yx~^=8~rKLz^E$OKU2NCO!^< z63Ka*eDk^}S6S%%ATGXVf5qe+uv!Nt;@n)4^yQQOF@~S?G)@OX$;~*KqN>qoyMF4Y zIE(*M%n=z|&9HQ)GrtnISIE=Dz&5!p&@u_n@e0QtS=wiV-@Ed{}r7QHO{% ziim6qrPD6z0tD71$44Z^Y2oh%NqGmeXZI{c-WAK{5dmKDMgynMUz>a!C)%;?%@pZF z9fQN?-9uk`l^|cV$4-AcBUB&DKou-Y50;-Jtm9>wA|MqaK>UR51DMMcs6C)gi}kj^ zmRg+9dM@8t_sj1eF_trk4V;8X(OPC8dqh2KCvzKr+PDC|CF*&^`4{EEOPaHSti$D8 zp_1c!u`A^K5ve{O+YhM16p#xa_t_I&P$@d`pcRV&Y9a|H@BEsq06}@3uo}||Iqt8| z+6&KGb>u71xNmD6=9UzV>w~||#hXWeRx?+HCQ_6!-(gS(nntH)FaBU%kB6hwxs{^D z?fw!!?4zcH=u&<}z38=WEhQ>793(D@2PZXbvF}Jr3y|`!N6Z78z@Xw{FYYo`}9+L@(`n7lS zFCN6YG`M>wpc?y+^2Mvy4xyVoNO8ylqri?qoRl8_26e$o%FT>LB^iiUg)YvozJTd` z*xBpkNd8%F*_Riu%(@hprXOaas)D=U#jbCD-}kpxJLUc_l#&G+pqdiDRL$BfRHfr# zD~@auhDybSxlnyQX8Gg5dlW9f zQv#6p%^~@1H#`-}y#s@Xg=4{3H5A5>Hj%XgkWhU-Mr*}(Hve)d(27x8BCKPwO=6;| z&5W5DfK z-(v_?k3icspur?LSyQmp7nl9+L|jjeY8)iTI3$F)s6<9|$_IGh6DAxRk~&D}up0Id zvu4qphT@FL+7dezJC&xjJ}T?d4P^ewo!;QQDXO>9qfMJG!=4th78 z0@=v6aO%`v^4uE($I6SPTTHR;$e@L#f;pXf3!q8^?=!cu292 zgON%JV%B#z9yu44xFe4|eVLI56q_HRv)tw-n0)lvcBD?_+$)mv*n0+hZbr!ug6sr+ z+1qx}1XVHdQXb))F`a_6Dk3|z3x%`H6lFuEB0kPW zT*9}0mIsSF5{G%~>%XJ4_Awu?BUq_G{R}7ZeyTVV z-h|h1v5k>hvPL$md90a|T#KeP5k$md{KWiwmh?;0#$fKV##==z6#Xm_)wSgmZvpP2 zLyzdO5NC7~?MHK*v^_fZFZFJm_4tIK{L4*0O5*7tl_9me07^tJT_x><2lu$-3`?5b z$ih16^1OnrjM1O5>cHVy`n2sNE2~44>f!tW^j*AUyW~_FhaJ0^0NtH6T@tOZg5%nN z{}jsK^JOZFvcYS@DKdu7pOol$39KS{IkA4g@n}q3fUf`8u{=EQFiOeVp3i)OJzOE7 z^_y31F+_nI9(!^33`eXT!{|ti% z*G0zIasepqF;@zsRi#g6c|SGzkgSZd##cT2&)>&~s^X93fY+?+@7wM$PQ%;F;+5kS zAl;7y&#xTHpE$B)_k}OJCd|8JMm}zbQdJ}9qKC31qiM@_YG%oT%b2T9LWC%)Yz*?m zf@UnG{8Nja_mA9u>lp9GSLjH_%!0&>Afj5vS*FI33Tt@z9j|yMxB?Xkt-o z0Qy-=#zb&c80qO}BmxWt#rzvtzqt984ltSg^>!Y>oQS0fG9$$U33&!$(g#~#l+35{ zHG*`6)sT9mwtJAA1=Za~|5m>JnIc%=)~!gGP4bP(l-Ooy<#CQp(D$A#Hfg--p(<3t z=!`P4S1ZzF974zh#4&nxj$XTgyM14Nn_k4HRa_pyVlQ4_y| z)IWL855U8|jF@-f;~_v#yAs&EbW(?!Xh0w8*W4+C6Kl|I$uap!&APy!VqJ2;dBrsX zir!U8%7au)fQe~bjJYJ?iPdq}>=0Pl<`tMHxcxH8zk2A{1_yE)eE9=bZrAu^RI`=I4$`@8Bb%IK5g?Ob!isZyRTF~?tR-bIqP%2FD@Q;VkdG zjg=wklGzF1Okgj{-z&v-4=L(7IENo|H#9#dH;; zhQC2QH9j|_Wdo%aDI4KLJd%_TS9c9(kqUP}IWwpM2^X|A>^NLM=TW{{o~$M!u!S^q~=A@Pt*$%52N`xXYF8Zh8=NxBC=h z?u=1GW}FsxJ}x1(y=)0mvAP_tT|?H$m}zOzQ2Zjl?U=)SD&I2Qod5yfYNJPwT6xZy zZPO4#vYHp49bewS6SD`~H;&E)(h1y3Q|`xN4-fXbHa}{Y{v-&FMB6j3rDBmXhmjr^ zBCIbGJw5kisNT(w<%L1LGZ*GLZ5N*xyNeIsa+hK$OjXKLKvEKMQo#+@+$W3IRgIz&8^`59$@`w~^E~HS=Nvd315SI6Sj<7m z<)mA2I6XNW4wu{Txig3J0M|OBWZzGEkHd+;53KPU+`<_RVb@hJOLg&A{f!h$4Wh)s zoukD4dq#=Bm=rA@x+YpY@=UaN-2G_r#OINsugjMR=Tv_0u;@jo-HOK(t+!?kusoLB z%k1XYye^MC{$rH;pU#HQ+Wl2Lt$j|U*z5gBv7c?EIOv;5ai0U=e+>T0Xz>sw_zC=w ziL^{S74kJL6NNzLP_$?PEfGd4XWJ!J4d?GscyO~$T6OttKG)=CPfL@m4_mAMZGRWx z=-fWS(bX}+(K9Ym?0Y{_EUAqY_a^W|z5w$O$SeNnCj2p??a;&3a~Ga%GF9$vKIo$;rRJE#K?zTk0q_iEwoKF2d2}&j?2kCHM*akhbv82X{DR zF(i`Wgv%&KxSVF#Y#|S`Q)Fp!zJOQV%pD-3ArB(NB3kO?Oy7I-qENXXO&%zrF(V{2Vq^e~816@72I5+9Acgt{ zQ@G1eigKKQdQ8)?{}_>e{#fwG3s+N^T{8KY9VQFo6R5+%3h=MDFxts|6Q{oK!TbRv z1l)y-dpOao-d;3%av$oq;B%5L{fq*Z29w`H3HdJYCZBn(w-&7vSM_bac z{>~KQ{V6SVo(x+FMP25iY>9s*`XLc@SW9zkQmK2_W2nOs$i8|Dqg{v1jWX=?F}8FK z+t^>J_HXzR-AJ7n)BYodvGV1Vp{&?_5*rkxK*`bC$*bDw0khFv5hFiL6 zv+8>v=^*qB@8$C6_>kcw-!zAUl0zwI?N=0(*arS7YW`m1J|MSI?Z|aFhg^mjP*7iE zn&HmI_#)IJ3O1u2zfIde-hK;B;_q(gg98nHkY3L<+`5`;nEVfY-0WJkwXIQ@r`zGN z^Tv^ETNp`G=8<$$NL%^qJ*OB|q5aFjUk3gP@K?JG;nepS$RW>u9ciLxFxH91;Ez?! zKl=C=+h&lfDH{W9JU8@#Vd@L6;pXA`_;+wP?H2ZOnKgdyxN7;%2$E(jd_Dh?VDb+S zWcIK0{no7n_J0-QcZ2s==Aqyp>M@~nAMi`T-xvJD!9T0#7o4Q-12`vK`+oRvte31Z zO1u>O%OSe&3XH=11Af1l;WfUI1Jixyy2^ZJI~#k?ba=n%bG1K%|GgfcaXO3ob8J23 z{~kEM`^?SYuVnKln}0Opm+>!mNTUf>`^d`VB>34__zC>m$=ood8a6ap`?*ih_FqpJ z96lf|QYkyMf@HfRTi_o>fw6-rAmK~$*}aiG&j0t2`^CE^+Rtjs`$+MU&fwnwex*MC zS=M{Vw#zBDo`GM}2WjYo%?G)L8ynZQ*@OFXhpY?#S$;H;WCxb(=U+X6BrC^Lz>awG zxp{{?vTGIYkI1hry!w6{D_kLf{an|_zrbcUiMwWkUA3N}+=D*IfTZSHblc~tdET(~ zi-!jvNqQ+i))N0Tl57m6fC~r6H>Zre@`ya1P@?+->Y#bXyOgoQRpY>4sbfE||8U#g z?Dy@B-dZ=6Yzw1pJ#+colk zQAfVTMBaIn=lP5p>;Eq7?A}=6>QCZ?NvCx9VgF%he<#xm*b|+F4K?(Ek-86f7MWKB zj``hsXKk~WUr6~~o~eg_>s$)j5lI2}ZjpbP5<+VJ=d{NwhyL$fxwY?)bNF!z_-oku zs~*3p^qtL5BlX;2_y_xq*H4Wyl%uABV8@Y!~skr)&B4Pr~I_ zGJXWVvKjx5B^3DcdGar?iPN68QJZuWY{ne$wTSprErm$iL{N4!f!jrF6=#nEu%k$Gcny{|xZgGy93P z-$uR7uMn@xU9kTQ$%3#xVEelL;6KawZ-f7dE`K~p53ZuX$B)RrT;1lHwr?m`!iL(v z3ujCB#yPAH0{;uP|M}i_4>@=H9sKvnvdgbvzX~~zK2Wb`mgX11|Flqkbw_zq{-CQz zVK;Tn+rEtIP={$P>3`Sj;I{?;BgQ|*>MU&M8Q32{?tuNjkV}wE^ubZGvcV-4A|a?4NJ2y_<*GA7s(xIokgb`0qh}0Xyr1bE-bD;{O8v zXQab_bQMW2>?HqUJ$A1izXjlTYf1mRUSIC8wsV}rrp%F6=g{^AU}wVm;7`bHu(P@7 zBHo`NE1P?aUkU!Q#`ZtDnk2tn)Mq!EYmYG|+H{s{OPw}|5;}fmedvf&x5sGvBCr=i zav`h_eh2$a$Q82emPLGrY{vf*O8d4jwdJ?YrjK|c z)2BDo+>D(`KIAF*|A5>A|8=tB-6X#FDdW!t|2Z}PdXk+^rhuG0{rs4VeDahv-A~sp zuuZIb?LN6J%$nbV_1}<rbGdgKt_6K&7h-$`+jFH-!6Jy(8i^Ca-s z$TBxmK<;z>(G|!ixO|}C6E%}MH6!_>t%lsGv9>3R@yDOX<`7frllb>3* z1m`cMI;<$`X%}7gp?Qabjy%J{KrnBG z6hhu?D~ubzv*f{M+@F&`4tA*)znfw$_;t>%@{?=qE|c#6Zq@F|I|LZEJN^F$zDslqI_OAFfpz-32eoZhc@qCKmr-qKg}aSA07Uue0PP1 zrtLLl@c9%2`Qe0_vg7Nj0u(u~wIQ$UdUD)@_D@sUzjpg;_zC=E9}8JhN_MkfkoA}n za1@hOuOhM%fzcYmhgd-b5PLB9D1eQCyMI1e4|-14Uo`OdZsf1$dnuOj-4xC2lhs3Z zIN@X2{ho^Ho?oXwRDE!<_Raip;EygP`^Xn$w*(UYf^5GnCYzbXWIYw- zmqlbfwh(oLj4e>hn0yk90Q(Tg=gs&p@x2v1O`Gd0WqTrBrN=kk4am)ZZ6A0mFb?+D zkZ{Y(mfK&$9|88okTCGiFDBc0V4saLq=;<4DI}X|kV)Vl4;kGee-1w|r;k2n?Q7Cq z3k_tuB8EtAWajz5sMTrrrhU=tF6N?)DiUo{%|C4X>e^3B{HzZ&{9l88>KpmX1hU*2 z{J`8+t@rYzvF`^RN}3k%@Xw;A%-WxEjwiPpbtFy&|N6@R75__&-w5!x=r`AHf6aT@ zia{MD7Y|Gi$Sca%X4Za>b1?H|5nI#5X{f`Rzp(uWtL(o*&_6F)5S-gd!_}5jwr29* z0)PK)q^v?;b+WAJF5um7da%9spp@!wjYdvVb2wqgXUO&me;W@ z%uRnQO$l!YKZ*~S&qL}p?5t$-kPqWm5cSH&x^N3)`Z(sLWb^~-pqf9UF#j|izZ(0W ziSetk|B34HE0|DFYc;v>3`EKwU#NGUY|7Z0&*0@j5+Heuor#Jcds43kez*HXJ#P~^ zT~(6sa4p$mZn94(SIwb1^AF>nrJjFmF#lM8gEe7Rv6A=Qi-+cmO2f>SRWyrFw1)9b zzX9_H5I@K|$OHdU_!0}jpM&;)gt6Sf?|hR;bdAXVqLOTm*OSej8nWJ6Mb>Lyl3-;8 z@#D+MGPay}G38_)TV7|jyz+tRs+TLeuB~!5+*jYKIp$5QulpYC9U%7L|H`+Jc6;U0 zA0CgX-0csl?|BDjgkOlnj6aLW=A4qOPbo=oq@Jwy*OA4pTH>bHR+(+BQJ8M3KGt=8 z)vPY-s~t=>*Zl2uI{#PS!I#?+?JorXNboOrxkJane_wo^iX5`2%J!VH2K*J^&jJ5+ z-tO8IZbt14vy>XoZpqdEHeFw1@Gfjb*&T>DoJOhQaLm}}5)P*WD>FHq_N)wt7FIH4 zVH}QLTGnoc>9WxDx!W+s=kcYP?(v;ck zGib8eGqg(8Gx1sd?ADi>=Van>Oiws_KJ;@~$+%Eva=hzQT%1lN>au+%E7kWl)Cc^U zda3G(`l{-U`fJ*Opo6swYbOJIXlyq;s1y6FX;=1MCE2KvI!}v>TYVsnd0L(E;VoXs zX?ibGEVGFc_nQ&CQz5HMuAH z=#%@X-MhVz7xP|(qq_@odR8GP?0%H^(`x8PjCllPJY)*;NWMYt!feO_iWElBw{}T2 zgDm%Di@RP*<{Dp;z%Tq(`BTWT=nDN&kz&`JD3K5Ha-_)9>IWHwI6cdSdZm9^gZ>!A z@8gg^v<$K1sn)5~)AVGCh4HD)h_i~!jFVv%t$QKI!xgy_nM<6V>KAx

4K$ruCE1 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 XY+}&}KC=mD;X?Iq*l*cA?B4$ePY*3q literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..8d39895 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,18 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. SPDX-License-Identifier: CC-B + +.. Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved. + +Welcome to O-RAN SC aimlfw-dep Documentation +============================================ + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + installation-guide.rst + + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/installation-guide.rst b/docs/installation-guide.rst new file mode 100644 index 0000000..648346c --- /dev/null +++ b/docs/installation-guide.rst @@ -0,0 +1,334 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +.. Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved. + + +Installation Guide +================== + +.. contents:: + :depth: 3 + :local: + +Abstract +-------- + +This document describes how to install AIMLFW, it's dependencies and required system resources. + + +Version history + ++--------------------+--------------------+--------------------+--------------------+ +| **Date** | **Ver.** | **Author** | **Comment** | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ +| 2022-11-30 | 0.1.0 | | First draft | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ +| | | | | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ +| | | | | +| | | | | +| | | | | ++--------------------+--------------------+--------------------+--------------------+ + + +Introduction +------------ + +.. + + +This document describes the supported software and hardware configurations for the reference component as well as providing guidelines on how to install and configure such reference system. + +The audience of this document is assumed to have good knowledge in RAN network nd Linux system. + + +Hardware Requirements +--------------------- +.. + +Below are the minimum requirements for installing the AIMLFW + +1. OS: Ubuntu 18.04 server +2. 8 cpu cores +3. 16 GB RAM +4. 60 GB harddisk + +Software Installation and Deployment +------------------------------------ +.. + +.. code:: bash + + git clone "https://gerrit.o-ran-sc.org/r/aiml-fw/aimlfw-dep" + cd aimlfw-dep + +Update recipe file “RECIPE_EXAMPLE/example_recipe_latest_stable.yaml” which includes update of VM IP and datalake details +Note: In case the Influx DB datalake is not available, this can be skipped at this stage and can be updated after installing datalake. + +.. code:: bash + + bin/install_traininghost.sh + + + +Check running state of all pods and services using below command + +.. code:: bash + + kubectl get pods --all-namespaces + kubectl get svc --all-namespaces + + +Check the AIMLFW dashboard by using the following url + +.. code:: bash + + http://localhost:32005/ + +In case Influx DB datalake not available, it can be installed using the steps mentioned in section “Install influx db as datalake”. Once installed the access details of the datalake can be updated in RECIPE_EXAMPLE/example_recipe_latest_stable.yaml . Once updated, follow the below steps for reinstall of some components: + +.. code:: bash + + bin/uninstall.sh + bin/install.sh -f RECIPE_EXAMPLE/example_recipe_latest_stable.yaml + +Following are the steps to build sample training pipeline image for QoE prediction example. +This step is required before triggering training for the QoE prediction example. + +.. code:: bash + + cd /tmp/ + git clone "https://gerrit.o-ran-sc.org/r/portal/aiml-dashboard" + docker build -f aiml-dashboard/kf-pipelines/Dockerfile.pipeline -t traininghost/pipelineimage:latest aiml-dashboard/kf-pipelines/. + +Software Uninstallation +----------------------- + +.. code:: bash + + bin/uninstall_traininghost.sh + +Install Influx DB as datalake +----------------------------- + +.. code:: bash + + helm install my-release bitnami/influxdb + kubectl exec -it bash + +From below command we can get username, org name, org id and access token + +.. code:: bash + + cat bitnami/influxdb/influxd.bolt | tr -cd "[:print:]" + +eg: {"id":"0a576f4ba82db000","token":"xJVlOom1GRUxDNkldo1v","status":"active","description":"admin's Token","orgID":"783d5882c44b34f0","userID":"0a576f4b91edb000","permissions" ... + +Use the tokens further in the below configurations and in the recipe file. + +Following are the steps to add qoe data to influx DB + + +Execute below from inside influx Db container to create a bucket: + +.. code:: bash + + influx bucket create -n UEData -o primary -t + + +Install the following dependencies + +.. code:: bash + + sudo pip3 install pandas + sudo pip3 install influxdb_client + + +Use the insert.py in ric-app/qp repository to upload the qoe data in influx DB + + +.. code:: bash + + git clone https://gerrit.o-ran-sc.org/r/ric-app/qp + cd qp/qp + +update insert.py file with the following content: + +.. code:: bash + + import pandas as pd + from influxdb_client import InfluxDBClient + from influxdb_client.client.write_api import SYNCHRONOUS + import datetime + + + class INSERTDATA: + + def __init__(self): + self.client = InfluxDBClient(url = "http://localhost:8086", token="") + + + def explode(df): + for col in df.columns: + if isinstance(df.iloc[0][col], list): + df = df.explode(col) + d = df[col].apply(pd.Series) + df[d.columns] = d + df = df.drop(col, axis=1) + return df + + + def jsonToTable(df): + df.index = range(len(df)) + cols = [col for col in df.columns if isinstance(df.iloc[0][col], dict) or isinstance(df.iloc[0][col], list)] + if len(cols) == 0: + return df + for col in cols: + d = explode(pd.DataFrame(df[col], columns=[col])) + d = d.dropna(axis=1, how='all') + df = pd.concat([df, d], axis=1) + df = df.drop(col, axis=1).dropna() + return jsonToTable(df) + + + def time(df): + df.index = pd.date_range(start=datetime.datetime.now(), freq='10ms', periods=len(df)) + df['measTimeStampRf'] = df['measTimeStampRf'].apply(lambda x: str(x)) + return df + + + def populatedb(): + df = pd.read_json('cell.json.gz', lines=True) + df = df[['cellMeasReport']].dropna() + df = jsonToTable(df) + df = time(df) + db = INSERTDATA() + write_api = db.client.write_api(write_options=SYNCHRONOUS) + write_api.write(bucket="UEData",record=df, data_frame_measurement_name="liveCell",org="primary") + + populatedb() + + +Update in insert.py file + +Follow below command to port forward to access Influx DB + +.. code:: bash + + kubectl port-forward svc/my-release-influxdb 8086:8086 + +To insert data: + +.. code:: bash + + python3 insert.py + +To check inserted data in Influx DB , execute below command inside the influx DB container: + +.. code:: bash + + influx query 'from(bucket: "UEData") |> range(start: -1000d)' -o primary -t + + +Install Kserve for deploying models +----------------------------------- + +To install Kserve run the below commands + +.. code:: bash + + curl -s "https://raw.githubusercontent.com/kserve/kserve/release-0.7/hack/quick_install.sh" | bash + +Deploy trained qoe prediction model on Kserve +--------------------------------------------- + +Create namespace using command below + +.. code:: bash + + kubectl create namespace kserve-test + +Create qoe.yaml file with below contents + +.. code:: bash + + apiVersion: "serving.kserve.io/v1beta1" + kind: "InferenceService" + metadata: + name: qoe-model + spec: + predictor: + tensorflow: + storageUri: "" + runtimeVersion: "2.5.1" + resources: + requests: + cpu: 0.1 + memory: 0.5Gi + limits: + cpu: 0.1 + memory: 0.5Gi + + +To deploy model update the Model URL in the qoe.yaml file and execute below command to deploy model + +.. code:: bash + + kubectl apply -f qoe.yaml -n kserve-test + +Check running state of pod using below command + +.. code:: bash + + kubectl get pods -n kserve-test + + +Test predictions using model deployed on Kserve +----------------------------------------------- + +Use below command to obtain Ingress port for Kserve. + +.. code:: bash + + kubectl get svc istio-ingressgateway -n istio-system + +Obtain nodeport corresponding to port 80. +In the below example, the port is 31206 +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +istio-ingressgateway LoadBalancer 10.105.222.242 15021:31423/TCP,80:31206/TCP,443:32145/TCP,31400:32338/TCP,15443:31846/TCP 4h15m + + +Create predict.sh file with following contents + +.. code:: bash + + model_name=qoe-model + curl -v -H "Host: $model_name.kserve-test.example.com" http://:/v1/models/$model_name:predict -d @./input_qoe.json + +Update the IP of host where Kserve is deployed and ingress port of Kserve obtained using above method. + +Create sample data for predictions in file input_qoe.json. Add the following content in input_qoe.json file. + +.. code:: bash + + {"signature_name": "serving_default", "instances": [[[2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56], + [2.56, 2.56]]]} + + +Use command below to trigger predictions + +.. code:: bash + + source predict.sh diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt new file mode 100644 index 0000000..7372123 --- /dev/null +++ b/docs/requirements-docs.txt @@ -0,0 +1,6 @@ +sphinx +sphinx_rtd_theme>=1.0.0 +docutils<0.17 +sphinxcontrib-httpdomain +recommonmark +lfdocs-conf diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..72742cf --- /dev/null +++ b/tox.ini @@ -0,0 +1,30 @@ +# documentation only +[tox] +minversion = 2.0 +envlist = + docs, + docs-linkcheck, +skipsdist = true + +[testenv:docs] +basepython = python3 +deps = + sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf + +commands = + sphinx-build -W -b html -n -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/html + echo "Generated docs available in {toxinidir}/docs/_build/html" +whitelist_externals = echo + +[testenv:docs-linkcheck] +basepython = python3 +deps = sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf +commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/linkcheck -- 2.16.6