From 5f456edce9f05f38bbeecf295ede1713f2a9d9b4 Mon Sep 17 00:00:00 2001 From: Max Pumperla Date: Tue, 18 Apr 2023 22:24:15 +0200 Subject: [PATCH] Revert "Revert "[docs] new landing page"" (#34534) Signed-off-by: elliottower --- doc/source/_includes/_contribute.md | 28 -- doc/source/_static/css/custom.css | 114 +++++- doc/source/_static/img/AIR.png | Bin 0 -> 732 bytes doc/source/_static/img/Core.png | Bin 0 -> 425 bytes doc/source/_static/img/LandingPageBG.jpg | Bin 0 -> 35876 bytes doc/source/_static/img/chat.png | Bin 0 -> 218 bytes doc/source/_static/img/code.png | Bin 0 -> 3046 bytes doc/source/_static/img/colab.png | Bin 0 -> 1486 bytes doc/source/_static/img/download.png | Bin 0 -> 3035 bytes doc/source/_static/img/github-fill.png | Bin 0 -> 481 bytes doc/source/_static/img/mail.png | Bin 0 -> 263 bytes doc/source/_static/img/meetup.png | Bin 0 -> 931 bytes doc/source/_static/img/pen.png | Bin 0 -> 207 bytes doc/source/_static/img/ray_logo.png | Bin 0 -> 3504 bytes doc/source/_static/img/rayclusters.png | Bin 0 -> 279 bytes doc/source/_static/img/slack-fill.png | Bin 0 -> 490 bytes doc/source/_static/img/twitter-fill.png | Bin 0 -> 394 bytes doc/source/_static/js/custom.js | 20 -- doc/source/conf.py | 2 +- doc/source/index.md | 431 ++++++++++++++++++++--- 20 files changed, 494 insertions(+), 101 deletions(-) delete mode 100644 doc/source/_includes/_contribute.md create mode 100644 doc/source/_static/img/AIR.png create mode 100644 doc/source/_static/img/Core.png create mode 100644 doc/source/_static/img/LandingPageBG.jpg create mode 100644 doc/source/_static/img/chat.png create mode 100644 doc/source/_static/img/code.png create mode 100644 doc/source/_static/img/colab.png create mode 100644 doc/source/_static/img/download.png create mode 100644 doc/source/_static/img/github-fill.png create mode 100644 doc/source/_static/img/mail.png create mode 100644 doc/source/_static/img/meetup.png create mode 100644 doc/source/_static/img/pen.png create mode 100644 doc/source/_static/img/ray_logo.png create mode 100644 doc/source/_static/img/rayclusters.png create mode 100644 doc/source/_static/img/slack-fill.png create mode 100644 doc/source/_static/img/twitter-fill.png diff --git a/doc/source/_includes/_contribute.md b/doc/source/_includes/_contribute.md deleted file mode 100644 index 971c677d6a4e..000000000000 --- a/doc/source/_includes/_contribute.md +++ /dev/null @@ -1,28 +0,0 @@ -```{admonition} Get involved and become part of the Ray community -:class: tip - -πŸ’¬ [Join our community](https://forms.gle/9TSdDYUgxYs8SA9e8): -Discuss all things Ray with us in our community Slack channel or use our -[discussion board](https://discuss.ray.io/) to ask questions and get answers. - -πŸ’‘ [Open an issue](https://github.com/ray-project/ray/issues/new/choose): -Help us improve Ray by submitting feature requests, bug-reports, or simply ask for help and get support via GitHub issues. - -πŸ‘©β€πŸ’» [Create a pull request](https://github.com/ray-project/ray/pulls): -Found a typo in the documentation? Want to add a new feature? Submit a pull request to help us improve Ray. - -πŸ“° [Subscribe to the Ray newsletter](https://share.hsforms.com/1Ee3Gh8c9TY69ZQib-yZJvgc7w85): -Get the latest news from Ray in a monthly email: Ray updates, community highlights, events, useful tutorials, and more! - -🐦 [Follow us on Twitter](https://twitter.com/raydistributed): -Stay up to date with the latest news and updates on Ray. - -⭐ [Star and follow us on GitHub](https://github.com/ray-project/ray): -Support Ray by following its development on GitHub and give us a boost by starring the project. - -🀝🏿 [Join our Meetup Group](https://www.meetup.com/Bay-Area-Ray-Meetup/): -Join one of our community events to learn more about Ray and get a chance to meet the team behind Ray. - -πŸ™Œ [Discuss on Stack Overflow](https://stackoverflow.com/questions/tagged/ray): -Use the `[ray]` tag on Stack Overflow to ask and answer questions about Ray usage. -``` diff --git a/doc/source/_static/css/custom.css b/doc/source/_static/css/custom.css index caae0617fcc8..d2e920761432 100644 --- a/doc/source/_static/css/custom.css +++ b/doc/source/_static/css/custom.css @@ -79,6 +79,19 @@ div.navbar-brand-box { } } +@media screen and (max-width: 767px) { + .remove-mobile { + display: none; + } + } + + @media screen and (max-width: 767px) { + .row-2-column { + flex-direction: column; + margin-top: 20px; + } + } + /* Make Algolia search box scrollable */ .algolia-autocomplete .ds-dropdown-menu { height: 60vh !important; @@ -520,4 +533,103 @@ span.rst-current-version > span.fa.fa-book { /* Adjustment to Version block */ .rst-versions { z-index: 1200 !important; -} \ No newline at end of file +} + +.image-header { + display: flex; + flex-direction: row; + align-items: center; + padding-left: 16px; + padding-right:16px; + gap: 16px; +} + +.info-box { + box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.05); + border-radius: 8px; + padding: 20px; +} + +.info-box:hover{ + box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.1); +} + +.no-underline{ + text-decoration: none; +} +.no-underline:hover{ + text-decoration: none; +} + +.icon-hover:hover{ + height: 30px ; + width: 30px; +} + +.info-box-2 { + background-color: #F9FAFB; + border-radius: 8px; + padding-right: 16px; + padding-left: 16px; + padding-bottom: 24px; + padding-top: 4px; +} + + +.bold-link { + color: #000000 !important; + font-weight: 600; +} + +.community-box { + border: 1px solid #D2DCE6; + border-radius: 8px; + display: flex; + margin-bottom: 16px; +} + +.community-box:hover { + box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.05); + text-decoration: none; +} + +.community-box p { + margin-top: 1rem !important; +} + +.tab-pane pre { + margin: 0; + padding: 0; + max-height: 252px; + overflow-y: auto; +} + +.grid-container { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px,1fr)); + grid-gap: 16px; +} + +.grid-item { +padding: 20px; +} + + +.nav-pills { + background-color: #F9FAFB; + color: #000000; + padding: 8px; + border-bottom:none; + border-radius: 8px; +} + +.nav-pills .nav-link.active { + background-color: #FFFFFF !important; + box-shadow: 0px 3px 14px 2px rgba(3,28,74,0.12); + border-radius: 8px; + padding: 20px; + color: #000000; + font-weight: 500; +} + + diff --git a/doc/source/_static/img/AIR.png b/doc/source/_static/img/AIR.png new file mode 100644 index 0000000000000000000000000000000000000000..885225eb742c03001c85e6585c20b3329c1b0a20 GIT binary patch literal 732 zcmV<20wev2P))_I=SG}o2kmir$tGl%Cwu>i^UBt)BZ&;*kX%_Jky z5%(#u0>Kv!r)jFIs?t#uHG=otKf_8KZbVCJ4Rn@eU3V!ZG6X1VbD_|yv1YQ>=|C+O zsKcKT7^l+-o6QDgSz-wU7koaSYc7Skf=lL9{6#sOMg9Y2bLL+tVCwDw O0000fr literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/Core.png b/doc/source/_static/img/Core.png new file mode 100644 index 0000000000000000000000000000000000000000..f76c57c6a56b0dc43acf896b479ff36c27c8b593 GIT binary patch literal 425 zcmV;a0apHrP)B_II_<&!^1r)5}R6E#~Du^l-b5<{qd!2fyDy6H! z^V*gzdcfx#1x#BO5vkDaNO7>mdGpt(^N?@!QdC=34`Gdaq7-mGS0Xev|z|F<^1jHTSD7Skv( z*-=9<*-&FJ$x+6$Pz)w1iV|T$sOa@hNQ043gVrN-|1h>l_cMaf-CKkuOMWRgke>R^ Ta>S=N00000NkvXXu0mjf>29u^ literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/LandingPageBG.jpg b/doc/source/_static/img/LandingPageBG.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63daa159a8f4e29f828e3d42a0ff62d983d652c6 GIT binary patch literal 35876 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 G(f1z^w53r1 literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/chat.png b/doc/source/_static/img/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..111961379b03b56772640ffd4637988c3c6403ee GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g)!3HFq6y&A?Db50q$YKTtZeb8+WSBKa0w~B> z9OUlAuhlMg+l>$o=l^f+BU3b-I?&&y`vrOg7#t(h#wL+}S zS06g6SEpQ?Tz}l$`qhN8;+29ajuRFhIkH4~%1sSz9*-Xz*ZV*0(2#RmusjQ1ZxSj3k{`7T?ocSL8;)zimNsX#f^1ma87t|?L5zZ%OoD$fiDD+r%p{qa?;h{H=kI+P#Uj2idGFnO?!D*l@0@$z zhp^3c?erH9k4B@T<#9KpK_~Jpwe|!#XJ|CqUjDK^fYKJa@-J0-%#q6Juy1R$bxeXb zl4x?h++Umf!Y`I!dzJ$8IC`Z#E?^x;r5^)Txg!GQ(vI>>K)`R2P9F%m@k)c*Y4ei} z>gcIT)B5T80C#$m#*zy zsAIHPLlncVRPH{eF|X}$95<3HUj;x45>!voxkTqxD0w&9-qrp&*;w0`Mw=Uli#Zos za}M6xc?1hk&7Mic5l_g%zO}pFS}U~+`in!UjWO3lb77xHrRB9-pUlP2cuyMd`c5iu zPaESr6^Tpqi)L)bP7or4!pI;rFQDc~XcWQId?W^CHTAm^2qZq74P8g+%IHTcPoDu0 zZE0s=7){l{!G&U7BGqKD0GSHf9NC@Ex*8q&Sm`iRu<8k|y|X7rQr0;j;>N=jz;-uN zsi+iaf;}+W<_>MiyUXGXnuP@6lvWuUxT45XSr(QW8KH{iQ|Z{bgaJAo>PTQ2WHvGL zKro07fo{3VsH}rdgN<=AMb&rm7_ynr@8n8zJ;-e8vgMw1G3#IS0S%mMadBqz(ur37Bnqe z=_W+8GJ`i$Y^^$zQvR_jA=Y!kho)v`ag3VICC3;NNYMn~>^-@L*i3a7)%{GLK^YXwYU^HlL8wU~(PsK}Cdq>@B=FJ4KFeE)V`yTX7`Zo_5?rB5DkCYKw5LImBW`OOB8fZ9#djIb&M$ zMhSMP+7^nbk3QD!dHpI({&BwcVY5cLraxB3?LW?YIJ1Pii5C;-u5((*l|% zLXOP>)(Qu@U=e2KlP2!U1r3i?>YSO3EwDQC|!kTTgvP|ns&qGaoIJFaIAAJ$h&OKDD1XB+@-pDpCyw29FiF@{b znEm_@8*Lr4{?3Wwh8M7#wB4+*s7|O3CKv-05h}IaR*=f@+2;!rsJnGCBGp(}I?1VJJ&wqw zaD@igh$v-;$)SS$^4krCD%sQnkBI>1o7-`L$p*jmn;%2kHD742@C@73M(tpN7e%c^ zbC$5=sund$QqVR-Y7SL}q8MqS!G04D0eZ{0Qb)1R@7x2U`##ks*!Ocht zqr{E8$f#g6wgUom)>VFz?VadZ_Z_skd=^Ld>;;_O3I8L{caY`F=R7N+@?teOM+2G| zykUFqHLf)csyk)VI)rr?WZK|X#^?|lYFVW3+%Fb~^)KmJlfs$rxs&=_H(|5{*f=$U zFA!o&$~)5ivOqZ+q*ENL+1lRYTtUe2UXS+WI~)E}wTLOd+Ruq)k z;>I*+nO7hyxH1c(SrGXXcIXSj2yKmt6%+#OB*Y$;$Z(F`2C@q65@--As=5DK?T_8Q zMDU-wNk|c{z1aqdde^q#$LlpFmimsM4d^}8x7fxcnp=TwRM27ughm8_U?KH$R7(P> zTVX^ijT^8JjS)fZ#$IQqA(u%WPgKhIGM{b zx0Dw=t?j$?&{!kI&Ub5fg5?h$JF~AP@Cnh^OUsIzEcj=X!ps}B3+x!;UQJWZ- z$GCq}$gu+;gd&h1Y_|Z|xt~T)=ca*?;qN%CqQjNK(NFSt_2k@BODhnDZ+or2^u)uP zv^7_ZwE&|GqhhoP@V)%kp6fL#AM+;dhg*8UE07*qoM6N<$f+VNW?EnA( literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/colab.png b/doc/source/_static/img/colab.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ecc3d8e046de339d171a78e6cfddeb16aba9c2 GIT binary patch literal 1486 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 FV1jR_wDJG| literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/pen.png b/doc/source/_static/img/pen.png new file mode 100644 index 0000000000000000000000000000000000000000..9c20e731afdb426f33900b1747252789b3f16580 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-1!HlL zyA#8@b22Z19F}xPUq=Rpjs4tz5?O)#6i*k&kP61P6Ap4V7znT|7xDI1-
%-H)P zOU<3fUy5%!JYf4~&CGq0<=nQ_xy}yL@4s(z@0xg8>8rBPqWhcvyYMmHIKS6JwP9-Y tL?;IScdl)xRktsxNwmy@z{*FT7(O@_GK+6m)C;ta!PC{xWt~$(69C}iM2`Rf literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/ray_logo.png b/doc/source/_static/img/ray_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6f83b08a5ed0cf0551f00acfa708dcb0a43bbc94 GIT binary patch literal 3504 zcmV;h4NvlkP)5P2@uf400B%iL5&iHN{mvhiLv+xXp|5! zAu$Ds7_!6%1sW&;Dnt{vi2*HAs8!pppCwrHmk_QB0j>nZ)ew*n2oZIFUPHRhH!1zgpZtBumuYMW1bGYq-^Y+o(=Fux z^2^Qx4N59+qpFuwh+-MklHWLF267mBZTMR6H=98I*$Sw|0K2@kzX>}bUwKOF##i{ z(`fbpK^|4>iUmpTQ<^^iPRmA}gMZ<=_F~VStkb4nO|D)5ctfm|uuReM?p{?$S#U7Y z6mAADvg`b*c5Ye{3f$b&B29O^smINvey!fF=ZNX<#@0fFErwZ&`hcKEly=3lr0fj| zSye2#3I%JV(yFHvjyj1Whh20Otr9S=l-CK#HltR=Y?%t2xS z4-mqja9~UDBxLX*G;f+E-Q~p+<^gic#%io7LQq-M0BaVFSX&mT39$+tdhS`lLDC|p z0A*jZY|b(gU|{ED7H}(orY17y@%$_L5x%i*5I*#-9vEsN?)=w0Jp7LiPRxNmqaL!1 zfF9svNsVlJQZGY6iaJVSK4#}f3p@=bFdUXR5RL$S6x~9`B~;J^BLh9K?Sdg#^PU#3 zJF`ge=~LVAgY$-9#eibPVnRGpc^|Oh5%s_c=gb*|mMue_fp|&{M4n4CfdnT()1?;Z z=!)d$ulq6D#o^Qw>zC8VZ8sz^4n z2Dp--WP6gRPzJUXYV7PDA`1|MHPnhJgJ%Wu@$^6EZ5%wbx5M{VFY5uzK7=Lsqv+uJ zd9tB8Yg)##WPd7&N~}0QwI?ZtBtsDtOOmJF=>;+8ih-c8M_SPziivri;t7Zb z6S>bCfpe9|nx<~BbWRmwg5s!H8vdVBR3?&q$(Gbi*>L&pe=qXbZ=N#%>qmNU{YVS% zJa>@qy?kh~L_g1M>x!k_6$EIpV&ed+OeJ#&eo`FaMZcIN&Bu}@uvD4gwNrIZW$+pa ztv)Dq(=BWI;p#K{p!+y98{v-KGca+SO8S>ttjrs#8cenIa$f5x!@QK{>DEOLOmcWz zp;8xPpt@NJt@c2D7_Go_MNmugbaCPPTd?MoUe1PpJhT97-rED$f3)8fIec7Mm1NIS z7kyQsS2#_Vs`oRZeVSmy1C!APVr~5{&FeizsZzZ%(#?(RKN=NkrTh(N^(RI8Dn+7i zjMTDPDZhgvm~~K|S9#Om7#bX*_|sve{9rtH0((lhkeRR$Vx99jYek-N`>V%c``?bk z%9O!=n7Cx5KcLl1QjL&jxxzz$RP%$ya22;L3luMpu^Pb9rKv1^tQ-z-%~^eL=DT~? zay$0T<5O=)Dit1-3U*my>8n57hP5k%@OJ-aA*WoNNgJ2#uXfm^*&~@0$KL4R+C+?l zy$BO?5gvZ61Bd50lF49!Ry-}mynhii6oy5-@cv2B5sQn=wUQ%5v#h|qmkwe6tdA%6 z&BNU<&53K%zh&(J_iq}8l|$i#p#JjCX_#3Oib(N+S&{DJP*ULAFU_zbXwWI!Uynb; zLTG^iN@}n)2g-9922tF3)7m~(;5W&VS3GizzWBQ-I5ZRC(hp{f_kiscE;+rI71%Se z2-p993T{Y0d;Yt~5W4z|HV1wl`ufpDSMFOc&cIDOrXfG%4~^UiZ$I2oqr39fkfZO;-LPHo}$KQ#oI;AZA!#i2IBaDv8lzdZ&M zvjW?F48=boCPt}cosiYftVBO(SP z3@>qg({5%E#ivzBk2fPmHUnc)%EY|_Vq!I+1 zC3z_$>S%PT*HS^AR%8;#i79aVvoqNfsZ5b_SU$*`2Mm-b_gVO;TV^bK9%~`Bc)^;r z!TU?(3aEgjZLO?w7;q-` z6*xE@;b(uE<56EZcYs;^vBdTVr-c;wp{Pb+S6B8LytpKOJdsO$%9jp^O=cF*eWxW z-V(Z35zG||v$91N5CnsKN@7lhc^@9L6%=)`v{0<)+T2f2-6KNt%xiB6o86rF#QdM( zm5+&BHz}{0mCHUG0jfrs6?|lkXllx&S%y*6(#kcfgDSjQzGO`|u$qYK&4xrZ*?#ZW ze?1NxPV0qhKi22M52vCq$H;@@9cc<{Km*85P2y5Blj>=GR*OCB6|)XfrTgo#AaOwX z?Tyx1q?1CWwG@Vp61et+wb|3p;VFWzrSkg^d*`{L&Bu7EQg7WcLm6UJVO`5|s&{hU z5oA#c_RSl7pA1@JdSjqkDW30Mt-P|>NgIyAZ{eodArtDcqLx*S?$DQymgQur;B-z^b64Aio{LGB6RQ{2>9&$zs|?XPiX_dSScDRsYY0~{ z1zwGydKA51X^muCQ<1=Mdehul0$8(0!>yj)5bB=i32?CsH1APq`G`;rug20w)j28y zpuA4AwhlB=!7sQ7_JkN|tU$p{ub!!_50y}gMa$cU2(YbgB<%)c#k%C~ceGc+gTC7a z@6MY>U~jO{fZ|PQzK7!}&g0|7lKFX3%&AMX{-7!lY$I5EfT`SuQkPepD78c>kP`gI z+Tq|N21OU)FEfgQAuq776t{-)@1C+NeSZ%{aLZRL4$u&&s->z$?e%bp-tr!yWSa6? z**opASeKlEHOWMSfM^1yfN<}w&o6&dm|!t%O<#_C%JejgR010{rBzv|2wKGl z*~=R8=b(ZfQ>%RkCX~Ip!Uox?7v*)cr&UA8Ul!-$)_lTBjNi5VC@tc~^wm9z)JEOp z{na`vQSCV>P=Zo>5tNMA$TB*QIGudHhSxn|l%f&}Fz$^V*tqNF>aT3-WAv_rtFhhQ zlJr=M`LAxQM&Z%jf42eNBq)CY1IoBU=<)z{z4xfP=K#=MF_1F0-IH6eKb=3G%s#g3 ehUL3zng0h;LmymQ4jj(_00001JYHoqV$bCCB2gZTyCFYShkY^U0zx*o9`@UqT(9ysCo4oIjtN&L;_G!A7?f01M71_-Wh~}P~ObIJkVzhp00i_>zopr00_!sssI20 literal 0 HcmV?d00001 diff --git a/doc/source/_static/img/slack-fill.png b/doc/source/_static/img/slack-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..5a82f6cd6cd3a72cdc46887815a510002713283d GIT binary patch literal 490 zcmV&GPPkpRoh&EEi9-x2A)&5A47gII&V;iAt!Sq?;Zgrx5Bm z{Y?k>#16b>JlkO@uG-TXWZZTy6#mx0MQTi?z_!yA*>sfwO94t~-F~C{&7u;H!%8o} zN1!3}%6E7q4j{!kPeq|7bjtq|7NJ2N=ZMWWV>2RwhAai0XVYPunkurF4xJr9qrhWt z7~Z^e;;-3*tZiyQL?$)|OvJG8HZ_FJ>Xbq}FJfV{8~g3qdNwU&Y12s1Fh&EhW^Yvr zos)0MFa;&zR6<>fO)A1U&=Uq<;GqhVqfb51Vd>Qg+g78(soa{4#DMhVyy-)QJHXZC zd=JF1x7VK3*ojyK6!ZXoIa>ICXF9I+-XT!okz`N<0jZSVJb zEfi?=>k3d`5iufq#EIAtTccg^^JW{Y2ZoSqK|Cz1Io6!ml?6zNOlUfHn3-HSmNQ<) z9rbenx0Jw4vnLJ`Lvv|tog<;)rDEbp;I2tz^os>%ckWjzWy#XEO#7w`m&8;MOoBEX zRvD%ZnH7eED#N%z!vlm`^X%#xuHc~E;Q*3aiZcr=+2~EvM}BCPAVx+^@cz>kE5hp>x@uRnrNkJXa$PYL oo9isQ#``mIM1GC9q19jN39hOMaRTm62mk;807*qoM6N<$f@i~+pa1{> literal 0 HcmV?d00001 diff --git a/doc/source/_static/js/custom.js b/doc/source/_static/js/custom.js index c80a832415b5..ff4f883b65a3 100644 --- a/doc/source/_static/js/custom.js +++ b/doc/source/_static/js/custom.js @@ -102,23 +102,3 @@ window.onload = function() { localStorage.removeItem("scroll"); } }; - - -let firstLink = document.getElementsByClassName("caption")[0]; -firstLink.classList.add("toctree-l1", "current"); -firstLink.style.textTransform = "none"; -firstLink.style.fontWeight = "normal"; -firstLink.innerText = ""; - -let home = document.createElement("a"); -home.classList.add("reference", "internal"); - -const version = window.location.href.split("/")[4]; -const res = (version === "latest" || version === "master") ? version : "latest"; - -home.href = "https://docs.ray.io/en/" + res + "/index.html"; -home.textContent = "Ray Docs Home"; - -home.style = firstLink.style; -home.style.color = "#5a5a5a"; -firstLink.appendChild(home); diff --git a/doc/source/conf.py b/doc/source/conf.py index d3a36145b791..28c50db32e28 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -257,7 +257,7 @@ "use_issues_button": True, "use_edit_page_button": True, "path_to_docs": "doc/source", - "home_page_in_toc": False, + "home_page_in_toc": True, "show_navbar_depth": 1, "announcement": "
", } diff --git a/doc/source/index.md b/doc/source/index.md index 313daa4eb143..cb33f3860e65 100644 --- a/doc/source/index.md +++ b/doc/source/index.md @@ -1,79 +1,408 @@ ```{include} /_includes/overview/announcement.md ``` -# Welcome to the Ray documentation +```{title} Welcome to Ray! +``` -````{panels} -:container: text-center -:column: col-lg-6 px-2 py-2 -:card: +```{raw} html ---- -getting_started + + + + -**Getting started** -^^^^^^^^^^^^^^^ -Learn how to install Ray, compute an example with the Ray Core API, and use Ray's ML libraries. + -+++ +Welcome to Ray! -{link-badge}`ray-overview/index.html,"Overview",cls=badge-light` -{link-badge}`ray-overview/getting-started.html,"Getting started",cls=badge-light` +
+
+
+
+

Welcome to Ray!

+

Ray is an open-source unified framework for scaling AI and Python applications. + It provides the compute layer for parallel processing so that + you don’t need to be a distributed systems expert. +

+ +
+
+ +
+
+
+
---- -user_guide -**User guides** -^^^^^^^^^^^ +
+

Getting Started

+ + + +
-Learn about the key concepts and features. Get in-depth information about Ray's libraries and tooling. -+++ +

Scaling with Ray

-{link-badge}`data/user-guide.html,"Data",cls=badge-light` -{link-badge}`train/user-guides.html,"Train",cls=badge-light` -{link-badge}`tune/tutorials/overview.html,"Tune",cls=badge-light` -{link-badge}`serve/tutorials/index.html,"Serve",cls=badge-light` -{link-badge}`ray-core/user-guide.html,"Core",cls=badge-light` -{link-badge}`cluster/running-applications/index.html,"Clusters",cls=badge-light` ---- -api +
+ +
+
+
+

+from ray import data
 
-**API reference**
-^^^^^^^^^^^^^
+# Step 1: read 100 files in parallel from S3 directory
+dataset = data.read_csv(paths="s3://structured/data", parallelism=100)
 
-Find detailed descriptions of the Ray APIs, their functions, classes, and methods.
-The reference assumes familiarity with the key concepts.
+# Step 2: partition the dataset into blocks
+dataset = dataset.repartition(num_blocks=1000)
 
-+++
+# Step 3: preprocess the data at scale, 1000 blocks in parallel
+preprocessor = data.preprocessors.StandardScaler(columns=["value"])
+dataset_transformed = preprocessor.fit_transform(dataset=dataset)
 
-{link-badge}`ray-references/api.html,"API reference",cls=badge-light`
+            
+ +
+
+

+from ray.air.config import ScalingConfig
+from ray.train.torch import TorchTrainer
 
----
-contribute
+# Step 1: setup PyTorch model training as you normally would
+def train_loop_per_worker():
+    model = ...
+    train_dataset = ...
+    for epoch in range(num_epochs):
+        ...  # model training logic
 
-**Developer guides**
-^^^^^^^^^^^^^^^
+# Step 2: setup Ray's PyTorch Trainer to run on 32 GPUs
+trainer = TorchTrainer(
+    train_loop_per_worker=train_loop_per_worker,
+    scaling_config=ScalingConfig(num_workers=32, use_gpu=True),
+    datasets={"train": train_dataset},
+)
 
-Find information about Ray's internals, and how to debug or profile Ray, fix a bug, or contribute a new feature.
+# Step 3: run distributed model training on 32 GPUs
+result = trainer.fit()
+            
+ +
+
+

+from ray import tune
+from ray.air.config import ScalingConfig
+from ray.train.lightgbm import LightGBMTrainer
 
-+++
+train_dataset, eval_dataset = ...
 
-{link-badge}`https://docs.ray.io/en/master/ray-contribute/getting-involved.html,"Developer guides",cls=badge-light`
+# Step 1: setup Ray's LightGBM Trainer to train on 64 CPUs
+trainer = LightGBMTrainer(
+    ...
+    scaling_config=ScalingConfig(num_workers=64),
+    datasets={"train": train_dataset, "eval": eval_dataset},
+)
 
-````
+# Step 2: setup Ray Tuner to run 1000 trials
+tuner = tune.Tuner(
+    trainer=trainer,
+    param_space=hyper_param_space,
+    tune_config=tune.TuneConfig(num_sa
+    les=1000),
+)
 
-## Getting involved
+# Step 3: run distributed HPO with 1000 trials; each trial runs on 64 CPUs
+result_grid = tuner.fit()
 
-Ray is also an active community of developers, researchers, and folks that love machine learning.
-Here's how to get involved with the Ray community:
+            
+ +
+
+

+from ray.train.batch_predictor import BatchPredictor
+from ray.train.torch import TorchPredictor
+
+dataset = ...
+
+# Step 1: create batch predictor to run inference at scale
+batch_predictor = BatchPredictor.from_checkpoint(
+    checkpoint=model_checkpoint, predictor_cls=TorchPredictor
+)
+
+# Step 2: run batch inference on 64 GPUs
+results = batch_predictor.predict(dataset, batch_size=512, num_gpus_per_worker=64)
+            
+ +
+
+

+from ray import serve
+from ray.serve import PredictorDeployment
+from ray.train.lightgbm import LightGBMPredictor
+
+# Deploy 50 replicas of the LightGBM model as a live endpoint.
+# Convert incoming JSON requests into a DataFrame.
+serve.run(
+    PredictorDeployment.options(
+        name="LightGBM_Service",
+        num_replicas=50,
+    ).bind(
+        predictor_cls=LightGBMPredictor,
+        checkpoint=lgbm_best_checkpoint,
+        http_adapter=serve.http_adapters.pandas_read_json,
+    )
+)
+            
+ +
+
+

+from ray.rllib.algorithms.ppo import PPOConfig
+
+# Step 1: configure PPO to run 64 parallel workers to collect samples from the env.
+ppo_config = (
+    PPOConfig()
+    .environment(env="Taxi-v3")
+    .rollouts(num_rollout_workers=64)
+    .framework("torch")
+    .training(model=rnn_lage)
+)
+
+# Step 2: build the PPO algorithm
+ppo_algo = ppo_config.build()
+
+# Step 3: train and evaluate PPO
+for _ in range(5):
+    print(ppo_algo.train())
+
+ppo_algo.evaluate()
+            
+ +
+ + +
+
+
+ +
+ + +
+

Beyond the basics

+
+ +
+
+
+ +

Ray AI Runtime

+
+

Scale the entire ML pipeline from data ingest to model serving with high-level Python APIs that integrate with popular ecosystem frameworks.

+ Learn more about AIR > +
+
+
+ +

Ray Core

+
+

Scale generic Python code with simple, foundational primitives that enable a high degree of control for building distributed applications or custom platforms.

+ Learn more about Core > +
+
+
+ +

Ray Clusters

+
+

Deploy a Ray cluster on AWS, GCP, Azure or kubernetes from a laptop to a large cluster to seamlessly scale workloads for production

+ Learn more about clusters > +
+
-```{include} _includes/_contribute.md -``` -If you're interested in contributing to Ray, see the -[contributing guide for the current release](ray-contribute/getting-involved) -or the -[latest version of our contributing guide](https://docs.ray.io/en/latest/ray-contribute/getting-involved.html) -to read about the contribution process and see what you can work on. +
+

Getting involved

+
+ +``` \ No newline at end of file