From ab570f337b1d413704da71e50d0ed28e303cfa2e Mon Sep 17 00:00:00 2001 From: Junghwan Park Date: Sat, 15 Jun 2024 18:48:08 +0900 Subject: [PATCH] =?UTF-8?q?Edge=20=EB=A9=94=EB=89=B4=20=EC=BD=98=ED=85=90?= =?UTF-8?q?=EC=B8=A0=20=EC=B6=94=EA=B0=80=20(#54)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _includes/footer_scripts.html | 2 +- _sass/announcement.scss | 310 ++++++++++++++++ _sass/base_styles.scss | 5 + _sass/community-stories.scss | 187 ++++++++++ _sass/events.scss | 333 ++++++++++++++++++ _sass/navigation.scss | 2 + assets/images/2023-03-22-batchsizescaling.svg | 1 + assets/images/2023-03-22-inferencespeedup.svg | 1 + .../images/2023-03-22-torchbenchtraining.svg | 1 + assets/images/2023-03-22-trainingspeedup.svg | 1 + assets/images/PyTorch_XLA Future Stack.svg | 1 + assets/images/arrows-icon.svg | 1 + assets/images/chip-icon.svg | 1 + assets/images/cursor-icon.svg | 1 + assets/images/executorch-arrows.svg | 1 + assets/images/hugging_face_transformers.svg | 1 + assets/images/intel-new-logo.svg | 1 + assets/images/logo-white.svg | 31 ++ assets/images/mobile-icon.svg | 1 + assets/images/pytorch-edge-arrows.svg | 1 + assets/images/pytorch-logo.png | Bin assets/images/pytorch-timeline.svg | 1 + assets/images/pytorch_bg_purple.jpg | Bin 0 -> 40426 bytes assets/images/snowflake-logo.svg | 26 ++ assets/images/squares-icon.svg | 1 + assets/images/stopwatch-icon.svg | 1 + assets/images/t-vs-eager-mode.svg | 80 +++++ assets/main.scss | 8 +- edge.html | 55 +++ executorch.html | 74 ++++ 30 files changed, 1127 insertions(+), 2 deletions(-) create mode 100644 _sass/announcement.scss create mode 100644 _sass/community-stories.scss create mode 100644 _sass/events.scss create mode 100644 assets/images/2023-03-22-batchsizescaling.svg create mode 100644 assets/images/2023-03-22-inferencespeedup.svg create mode 100644 assets/images/2023-03-22-torchbenchtraining.svg create mode 100644 assets/images/2023-03-22-trainingspeedup.svg create mode 100644 assets/images/PyTorch_XLA Future Stack.svg create mode 100644 assets/images/arrows-icon.svg create mode 100644 assets/images/chip-icon.svg create mode 100644 assets/images/cursor-icon.svg create mode 100644 assets/images/executorch-arrows.svg create mode 100644 assets/images/hugging_face_transformers.svg create mode 100644 assets/images/intel-new-logo.svg create mode 100644 assets/images/logo-white.svg create mode 100644 assets/images/mobile-icon.svg create mode 100644 assets/images/pytorch-edge-arrows.svg mode change 100755 => 100644 assets/images/pytorch-logo.png create mode 100644 assets/images/pytorch-timeline.svg create mode 100644 assets/images/pytorch_bg_purple.jpg create mode 100644 assets/images/snowflake-logo.svg create mode 100644 assets/images/squares-icon.svg create mode 100644 assets/images/stopwatch-icon.svg create mode 100644 assets/images/t-vs-eager-mode.svg create mode 100644 edge.html create mode 100644 executorch.html diff --git a/_includes/footer_scripts.html b/_includes/footer_scripts.html index 5a5ae48b..191c5d58 100644 --- a/_includes/footer_scripts.html +++ b/_includes/footer_scripts.html @@ -17,7 +17,7 @@ scrollToAnchor.bind(); - var hasStaticHeader = $(".blog-header, .blog-detail-header, .resources-header, .get-started-header, .features-header, .ecosystem-header, .hub-header, .mobile-header, .coc-header").length > 0; + var hasStaticHeader = $(".blog-header, .blog-detail-header, .resources-header, .get-started-header, .features-header, .ecosystem-header, .hub-header, .mobile-header, .coc-header, .announcement-header").length > 0; if (!hasStaticHeader) { $(window).on("scroll", function() { diff --git a/_sass/announcement.scss b/_sass/announcement.scss new file mode 100644 index 00000000..3dd2b81d --- /dev/null +++ b/_sass/announcement.scss @@ -0,0 +1,310 @@ +.announcement { + .hero-content { + top: $mobile_header_height + 80px; + height: 250px; + position: relative; + margin-bottom: 120px; + justify-content: center; + + @include desktop { + top: $mobile_header_height + 110px; + height: 350px; + } + + h1 { + font-size: rem(60px); + text-transform: uppercase; + font-weight: lighter; + letter-spacing: 1.08px; + margin-bottom: rem(10px); + line-height: 1.05; + color: $white; + + @include desktop { + font-size: rem(72px); + } + + } + + h1.small { + font-size: 40px; + @include desktop { + font-size: 58px; + } + } + + .lead { + margin-bottom: rem(25px); + padding-top: rem(30px); + color: $white; + width: 100%; + } + } + + .row { + justify-content: center; + } + + .main-content { + margin-bottom: 5rem; + padding-bottom: 0; + } + + .main-background { + height: 370px; + @include desktop { + height: 450px; + } + + } + + .card-container { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 20px; + padding-top: 3rem; + .card { + border: none; + display: block; + a { + color: $black; + } + .card-body { + display: flex; + flex-direction: column; + height: 100%; + justify-content: space-between; + padding: 0; + + img { + width: 100%; + height: 207px; + object-fit: contain; + padding: 20px; + @media screen and (min-width: 1000px) { + padding: 30px; + } + } + } + } + @media screen and (min-width: 1000px) { + grid-template-columns: repeat(3, 1fr); + gap: 36px; + } + } + + .contact-us-section { + background-color: $code_background_color; + padding: 50px 0; + .row { + justify-content: center; + .lead { + padding-top: rem(24px); + } + .hbspt-form { + padding: 30px 0; + + .hs-button { + background-image: url($baseurl + "/assets/images/chevron-right-orange.svg"); + background-size: 6px 13px; + background-position: top 16px right 11px; + background-repeat: no-repeat; + border-radius: 0; + border: none; + background-color: $white; + color: $quick_start_grey; + font-weight: 400; + position: relative; + letter-spacing: 0.25px; + padding: rem(12px) rem(32px) rem(12px) rem(12px); + margin: 10px 0; + + @include animated_border_hover_state; + + @include desktop { + background-position: top 19px right 11px; + } + + } + + fieldset.form-columns-2, fieldset.form-columns-1 { + max-width: 100%; + .hs-form-field { + max-width: 100%; + padding: 10px 0; + width: 100%; + input { + border: none; + width: 100%; + } + textarea { + border: none; + width: 100%; + } + } + } + + li.hs-form-radio { + input[type=radio] { + width: auto !important; + } + + span { + margin-left: 5px; + } + } + + ul { + list-style-type: none; + } + } + } + } + + .light-background-section { + background-color: $white; + .content { + padding: 40px 0; + } + } + + .grey-background-section { + background-color: #f3f4f7; + padding: 60px 0; + img { + height: 100px; + } + p { + font-size: 14px; + line-height: 170%; + } + } + + .color-background-section { + background-image: url("/assets/images/pytorch_bg_purple.jpg"); + background-size: 100% 100%; + background-repeat: no-repeat; + padding: 60px 0; + h2 { + color: white; + } + } + + .body-side-text { + .lead { + margin-bottom: rem(25px); + padding-top: rem(24px); + } + } + + img { + width: 100%; + } + + h2.upper { + font-size: 25px; + line-height: 130%; + text-align: center; + letter-spacing: 1.75px; + text-transform: uppercase; + margin-bottom: 30px; + } + + h3.upper { + font-size: 19px; + text-transform: uppercase; + letter-spacing: 1.75px; + line-height: 130%; + margin: 25px 0; + } + + table.benefits { + background-color: white; + font-size: 14px; + text-align: center; + td.benefit { + border-left: none; + min-width: 300px; + text-align: left; + @include desktop { + min-width: 520px; + } + } + tbody { + td { + border-left: 1px solid #812CE5; + vertical-align: middle; + } + td.benefit { + font-weight: 600; + } + } + thead, tfoot { + background-color: #812CE5; + color: white; + font-size: 16px; + font-weight: 700; + @include desktop { + font-size: 20px; + } + td { + border-left: 1px solid #000; + vertical-align: middle; + border-top: none; + } + a { + text-decoration: underline; + color: white; + } + td.price { + font-size: 14px; + line-height: 1.2; + @include desktop { + font-size: 16px; + } + } + } + img { + width: 15px; + } + } + .modal-header { + border-bottom: none; + padding-bottom: 0; + } + + .consolidated-employees { + tbody td { + font-weight: 600; + } + td.no-border { + border-left: none; + } +} + + .member-boxes { + gap: 20px; + margin: 0; + div.col-sm { + background-color: white; + } + } +} + +.board-member { + margin: 35px 0; + img { + margin-bottom: 15px; + } + a svg { + margin-top: 5px; + height: 25px; + max-width: 30px; + fill: #000; + color: #000; + } + a:hover svg { + fill: $orange; + color: $orange; + } +} diff --git a/_sass/base_styles.scss b/_sass/base_styles.scss index 396f5c29..a548253b 100644 --- a/_sass/base_styles.scss +++ b/_sass/base_styles.scss @@ -183,9 +183,14 @@ a, .btn { &.mobile-background { background-image: url($baseurl + "/assets/images/get-started-background.jpg"); } + &.deep-learning-background { background-image: url($baseurl + "/assets/images/deep-learning-thank-you-background.jpg"); } + + &.announcement-background { + background-image: url($baseurl + "/assets/images/pytorch_bg_purple.jpg"); + } } .bg-light-grey { diff --git a/_sass/community-stories.scss b/_sass/community-stories.scss new file mode 100644 index 00000000..7d2c0d0c --- /dev/null +++ b/_sass/community-stories.scss @@ -0,0 +1,187 @@ +.comm-stories { + .community-stories-wrapper { + background-color: white; + } + .community-stories { + padding-top: 0; + .production-info-container, + .research-info-container { + display: flex; + flex-flow: column; + } + .sticky-top { + top: 15%; + } + } + .production-container, + .research-container { + display: flex; + padding-left: 0; + @media (max-width: 767px) { + flex-flow: wrap; + } + } + .production-section, .research-section { + max-width: 920px; + margin: 0 auto 0 auto; + padding: 0 30px 43px 30px; + width: 90%; + .production-item, .research-item { + padding-bottom: 2rem; + padding-top: 2rem; + border-bottom: 1px solid #d6d7d8; + h2 { + padding-bottom: 1rem; + } + } + } + .production-side-nav-container, + .research-side-nav-container { + #research-sidebar-list, + #production-sidebar-list{ + padding-left: 0; + .active { + color: $orange; + } + ul { + padding-left: 3rem; + list-style: none; + li { + line-height: 36px; + a { + color: #8c8c8c; + } + } + } + } + } + + .production-section, .research-section { + p { + font-size: 18px; + margin-top: 2rem; + } + @include small-desktop { + width: 100%; + padding-left: 5px; + padding-right: 5px; + } + @media (max-width: 767px) { + width: 100%; + padding-left: 5px; + padding-right: 5px; + } + } + + .main-content-wrapper { + margin-top: 275px; + @include desktop { + margin-top: 380px; + } + } + + .jumbotron { + color: $white; + height: 190px; + @include desktop { + height: 260px; + } + } +} +.ecosystem .community-stories.main-content { + padding-top: 0; +} + +.community-stories-container-fluid { + height: 5rem; + width: 100%; + padding-bottom: 7rem; + @media screen and (max-width: 767px) { + margin-top: 2rem; + } + @include full-nav-menu-desktop { + margin-left: 0; + } +} + + + +.comm-stories .community-stories.main-content .navbar { + padding-left: 0; + padding-bottom: 0; + padding-top: 0; + .nav-item { + cursor: pointer; + &:last-of-type { + position: relative; + } + } + @media (min-width: 992px) { + .nav-item { + padding: 2rem; + cursor: pointer; + } + + .nav-link { + position: relative; + top: 10%; + transform: translateY(-50%); + } + } + + .nav-select { + background-color: $white; + .nav-link { + color: $orange; + font-weight: 500; + } + } + + .nav-link { + font-size: rem(18px); + color: #8c8c8c; + @include desktop { + margin-left: rem(30px); + } + &:hover { + color: $orange; + } + } + + .community-stories-nav-link { + padding-left: rem(20px); + padding-right: rem(20px); + + @include desktop { + padding-left: rem(30px); + padding-right: rem(30px); + } + } + + .community-stories-nav { + flex-direction: row; + } + + .nav-item { + padding-top: rem(15px); + padding-bottom: rem(15px); + @include desktop { + padding-bottom: 0; + padding-top: 2rem; + } + @include small-desktop { + padding-bottom: 0; + padding-top: 2rem; + } + @media (max-width: 990px) { + padding-bottom: rem(10px); + padding-top: 1rem; + } + } + + .navbar-toggler { + margin-left: rem(40px); + } +} + + diff --git a/_sass/events.scss b/_sass/events.scss new file mode 100644 index 00000000..83000fc8 --- /dev/null +++ b/_sass/events.scss @@ -0,0 +1,333 @@ +.ecosystem { + .events-wrapper { + background-color: white; + @include desktop { + margin-top: 472px; + } + } + .events { + padding-top: 0; + .event-info-container { + display: flex; + flex-flow: column; + } + .sticky-top { + top: 15%; + } + .event-label { + margin-bottom: 2rem; + } + } + .live-event-container { + display: flex; + @media (max-width: 767px) { + flex-flow: wrap; + } + } + .events-section { + max-width: 920px; + margin: 0 auto 0 auto; + padding: 0 30px 43px 30px; + width: 90%; + .event-item { + padding-bottom: 3rem; + border-bottom: 1px solid #D6D7D8; + h2 { + padding-bottom: 1rem; + } + } + } + .event-side-nav-container { + padding-left: 3rem; + ul { + list-style: none; + } + } + .live-events-section { + p { + font-size: 18px; + margin-top: 2rem; + } + @include small-desktop { + width: 100%; + padding-left: 5px; + padding-right: 5px; + } + @media (max-width: 767px) { + width: 100%; + padding-left: 5px; + padding-right: 5px; + } + } +} +.ecosystem .events.main-content { + padding-top: 0; +} + +.events-container-fluid { + height: 5rem; + width: 100%; + padding-bottom: 7rem; + @media screen and (max-width: 767px) { + margin-top: 2rem; + } + @include full-nav-menu-desktop { + margin-left: 0; + } +} + +.ecosystem .events.main-content .navbar { + padding-left: 0; + padding-bottom: 0; + padding-top: 0; + .nav-item { + cursor: pointer; + &:last-of-type { + position: relative; + } + } + @media (min-width: 992px) { + .nav-item { + padding: 2rem; + cursor: pointer; + } + + .nav-link { + position: relative; + top: 10%; + transform: translateY(-50%); + } + } + + .nav-select { + background-color: $white; + .nav-link { + color: $orange; + font-weight: 500; + } + } + + .nav-link { + font-size: rem(18px); + color: #8c8c8c; + @include desktop { + margin-left: rem(30px); + } + &:hover { + color: $orange; + } + } + + .events-nav-link { + padding-left: rem(20px); + padding-right: rem(20px); + + @include desktop { + padding-left: rem(30px); + padding-right: rem(30px); + } + } + + .events-nav { + flex-direction: row; + } + + .nav-item { + padding-top: rem(15px); + padding-bottom: rem(15px); + @include desktop { + padding-bottom: 0; + padding-top: 2rem; + } + @include small-desktop { + padding-bottom: 0; + padding-top: 2rem; + } + @media (max-width: 990px) { + padding-bottom: rem(10px); + padding-top: 1rem; + } + } + + .navbar-toggler { + margin-left: rem(40px); + } +} + +.events-video-wrapper { + width: 100%; + border: 1px solid $mid_gray; + background-color: $light_grey; + height: 21rem; + margin-top: 2.5rem; + .video-container { + display: flex; + top: 12%; + } + .video-tabs { + display: flex; + } + .events-video-nav { + flex-direction: row; + padding-right: 0; + margin-bottom: 1rem; + .nav-item { + border-right: 1px solid $mid_gray; + border-bottom: 1px solid $mid_gray; + } + .nav-select { + background-color: $white; + border-bottom: none; + .nav-link { + color: $orange; + } + } + } + .events-nav-link { + text-align: center; + } + .video { + position: relative; + height: 0; + padding-bottom: 30%; + place-self: center; + } + .video-info { + margin-left: 3rem; + max-width: 45%; + } + iframe { + height: 100%; + width: 100%; + position: absolute; + } +} +.video-links-container { + border: 1px solid $mid_gray; + .video-links { + display: flex; + .video-link-item { + padding-left: 1rem; + list-style: none; + } + } +} +.episode-header-text { + font-size: 26px; + margin-bottom: 2rem; +} +.episode-card-row { + display: block; + @media screen and (min-width: 908px) { + display: flex; + flex-wrap: wrap; + margin-bottom: 2rem; + } + .episode-card.resource-card { + height: 14rem; + margin-right: 1rem; + margin-bottom: 1rem; + background-color: $light_grey; + border: none; + max-width: 31%; + flex: auto; + ul { + list-style: none; + } + a{ + color: inherit; + } + .episode-body { + display: block; + position: relative; + top: 30px; + margin-left: 20px; + } + + .episode-title { + margin-left: 3.2rem; + margin-bottom: .5rem; + font-size: rem(24px); + @include desktop { + margin-left: 2.5rem; + } + } + + .guest-name { + font-weight: 500; + font-size: rem(20px); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + .episode-info { + display: flex; + justify-content: space-between; + span { + padding-left: 5px; + padding-right: 5px; + } + } + .info-divide { + display: block; + border-bottom: 1px solid #D6D7D8; + margin-top: .5rem; + margin-bottom: .5rem; + } + .episode-poster { + color: $orange; + } + .episode-date-time { + display: flex; + padding-left: 0; + span { + padding-left: 5px; + padding-right: 5px; + } + } + @media screen and (max-width: 907px) { + max-width: 100%; + margin-bottom: 1.25rem; + } + } + .episode-card.resource-card.pytorch-resource:before { + content: ""; + background-size: 32px 32px; + background-repeat: no-repeat; + display: block; + position: absolute; + height: 32px; + width: 32px; + top: 30px; + left: 15px; + @include desktop { + left: 30px; + top: 30px; + } + } +} + +.podcast-container { + padding-left: 0; + @include desktop { + display: flex; + .podcast-card:not(:first-of-type) { + margin-left: 1rem; + } + } + .podcast-card { + display: flex; + align-items: center; + justify-content: center; + margin-top: 2rem; + border: 1px solid #D6D7D8; + height: rem(140px); + @include animated_border_hover_state; + } + .podcast-title { + font-size: 24px; + font-weight: 400; + } + +} diff --git a/_sass/navigation.scss b/_sass/navigation.scss index 43d732c8..6c329949 100644 --- a/_sass/navigation.scss +++ b/_sass/navigation.scss @@ -24,6 +24,7 @@ &.ecosystem-header, &.hub-header, &.coc-header, + &.announcement-header, &.mobile-header { background-color: $white; border-bottom: 1px solid #e2e2e2; @@ -235,6 +236,7 @@ .ecosystem-header, .hub-header, .coc-header, +.announcement-header, .mobile-header { .header-logo { background-image: url($baseurl + "/assets/images/logo-ko.svg"); diff --git a/assets/images/2023-03-22-batchsizescaling.svg b/assets/images/2023-03-22-batchsizescaling.svg new file mode 100644 index 00000000..1fa09c7a --- /dev/null +++ b/assets/images/2023-03-22-batchsizescaling.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/2023-03-22-inferencespeedup.svg b/assets/images/2023-03-22-inferencespeedup.svg new file mode 100644 index 00000000..db16bdba --- /dev/null +++ b/assets/images/2023-03-22-inferencespeedup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/2023-03-22-torchbenchtraining.svg b/assets/images/2023-03-22-torchbenchtraining.svg new file mode 100644 index 00000000..56699961 --- /dev/null +++ b/assets/images/2023-03-22-torchbenchtraining.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/2023-03-22-trainingspeedup.svg b/assets/images/2023-03-22-trainingspeedup.svg new file mode 100644 index 00000000..bc0873a0 --- /dev/null +++ b/assets/images/2023-03-22-trainingspeedup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/PyTorch_XLA Future Stack.svg b/assets/images/PyTorch_XLA Future Stack.svg new file mode 100644 index 00000000..f573882a --- /dev/null +++ b/assets/images/PyTorch_XLA Future Stack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/arrows-icon.svg b/assets/images/arrows-icon.svg new file mode 100644 index 00000000..690eb971 --- /dev/null +++ b/assets/images/arrows-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/chip-icon.svg b/assets/images/chip-icon.svg new file mode 100644 index 00000000..b46477ee --- /dev/null +++ b/assets/images/chip-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/cursor-icon.svg b/assets/images/cursor-icon.svg new file mode 100644 index 00000000..8a186d4e --- /dev/null +++ b/assets/images/cursor-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/executorch-arrows.svg b/assets/images/executorch-arrows.svg new file mode 100644 index 00000000..2febe67c --- /dev/null +++ b/assets/images/executorch-arrows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/hugging_face_transformers.svg b/assets/images/hugging_face_transformers.svg new file mode 100644 index 00000000..091946ae --- /dev/null +++ b/assets/images/hugging_face_transformers.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/intel-new-logo.svg b/assets/images/intel-new-logo.svg new file mode 100644 index 00000000..5133faa1 --- /dev/null +++ b/assets/images/intel-new-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/logo-white.svg b/assets/images/logo-white.svg new file mode 100644 index 00000000..26faf2f0 --- /dev/null +++ b/assets/images/logo-white.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/mobile-icon.svg b/assets/images/mobile-icon.svg new file mode 100644 index 00000000..ba5cbebf --- /dev/null +++ b/assets/images/mobile-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/pytorch-edge-arrows.svg b/assets/images/pytorch-edge-arrows.svg new file mode 100644 index 00000000..f25e6771 --- /dev/null +++ b/assets/images/pytorch-edge-arrows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/pytorch-logo.png b/assets/images/pytorch-logo.png old mode 100755 new mode 100644 diff --git a/assets/images/pytorch-timeline.svg b/assets/images/pytorch-timeline.svg new file mode 100644 index 00000000..6997d283 --- /dev/null +++ b/assets/images/pytorch-timeline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/pytorch_bg_purple.jpg b/assets/images/pytorch_bg_purple.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f48b15de3246d9819f257dbd03751b0c5c762fa GIT binary patch literal 40426 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 M + + + Group + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/squares-icon.svg b/assets/images/squares-icon.svg new file mode 100644 index 00000000..2b9a75a3 --- /dev/null +++ b/assets/images/squares-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/stopwatch-icon.svg b/assets/images/stopwatch-icon.svg new file mode 100644 index 00000000..eed1bb86 --- /dev/null +++ b/assets/images/stopwatch-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/t-vs-eager-mode.svg b/assets/images/t-vs-eager-mode.svg new file mode 100644 index 00000000..f56363d3 --- /dev/null +++ b/assets/images/t-vs-eager-mode.svg @@ -0,0 +1,80 @@ + + + + + + + + ~1.5X + ~1.5X + ~1.7X + ~2.3X + 1X + eager-mode + Eager Mode + Eager Mode + + + DistillGPT2 + TorchInductor + CamemBert + T5Small + \ No newline at end of file diff --git a/assets/main.scss b/assets/main.scss index 3137d7f2..6ddad66e 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -34,5 +34,11 @@ $baseurl:"{{ site.baseurl }}"; @import "deep-learning"; @import "contributors"; @import "enterprise"; +@import "events"; +@import "community-stories"; +@import "announcement"; + + +// Import for PyTorchKR +@import "community"; @import "coc"; -@import "community"; \ No newline at end of file diff --git a/edge.html b/edge.html new file mode 100644 index 00000000..88953a15 --- /dev/null +++ b/edge.html @@ -0,0 +1,55 @@ +--- +layout: default +title: PyTorch Edge +body-class: announcement +background-class: announcement-background +permalink: /edge +--- + +
+
+
+

PyTorch Edge

+

Build innovative and privacy-aware AI experiences for edge devices

+
+
+
+
+
+ +
+
+
+
+

PyTorch Edge

+

The AI landscape is quickly evolving, with AI models being deployed beyond server to edge devices such as mobile phones, wearables, AR/VR/MR and embedded devices. PyTorch Edge extends PyTorch's research-to-production stack to these edge devices and paves the way for building innovative, privacy-aware experiences with superior productivity, portability, and performance, optimized for these diverse hardware platforms.

+

Introducing ExecuTorch

+

To advance our PyTorch Edge offering, we developed ExecuTorch, our new runtime for edge devices. ExecuTorch facilitates PyTorch inference on edge devices while supporting portability across hardware platforms with lower runtime and framework tax. ExecuTorch was developed collaboratively between industry leaders including Meta, Arm, Apple, and Qualcomm.

+

With ExecuTorch, we’ve renewed our commitment to on-device AI. This extends our ecosystem in a much more “in the spirit of PyTorch” way, with productivity, hackability, and extensibility as critical components. We look forward to supporting edge and embedded applications with low latency, strong privacy, and innovation on the edge.

+
+
+
+ +
+
+
+
+

Learn more about PyTorch Edge

+
+
+
+
+

What’s New in ExecuTorch

+ + ExecuTorch + +
+
+

Try ExecuTorch

+ + ExecuTorch Documentation + +
+
+
+
\ No newline at end of file diff --git a/executorch.html b/executorch.html new file mode 100644 index 00000000..17e4ae6e --- /dev/null +++ b/executorch.html @@ -0,0 +1,74 @@ +--- +layout: default +title: PyTorch ExecuTorch +body-class: announcement +background-class: announcement-background +permalink: /executorch-overview +--- + +
+
+
+

ExecuTorch

+

End-to-end solution for enabling on-device inference capabilities across mobile and edge devices

+
+
+
+
+
+ +
+
+
+
+

What is ExecuTorch?

+

ExecuTorch is an end-to-end solution for enabling on-device inference capabilities across mobile and edge devices including wearables, embedded devices and microcontrollers. It is part of the PyTorch Edge ecosystem and enables efficient deployment of various PyTorch models (vision, speech, Generative AI, and more) to edge devices. Key value propositions of ExecuTorch are:

+ +
+
+
+ Mobile icon +
+
+ Portability: Compatibility with a wide variety of computing platforms, from high-end mobile phones to highly constrained embedded systems and microcontrollers. +
+
+
+
+ Chip icon +
+
+ Productivity: Enabling developers to use the same toolchains and SDK from PyTorch model authoring and conversion, to debugging and deployment to a wide variety of platforms. +
+
+
+
+ Stopwatch icon +
+
+ Performance: Providing end users with a seamless and high-performance experience due to a lightweight runtime and utilizing full hardware capabilities such as CPUs, NPUs and DSPs. +
+
+
+ +

Explore ExecuTorch

+ +

ExecuTorch is currently powering various experiences across AR, VR and Family of Apps (FOA) products and services at Meta. We are excited to see how the community leverages our all new on-device AI stack. You can learn more about key components of ExecuTorch and its architecture, how it works, and explore documentation pages and detailed tutorials.

+ +

+ + ExecuTorch Documentation + +

+ +

Why ExecuTorch?

+ +

Supporting on-device AI presents unique challenges with diverse hardware, critical power requirements, low/no internet connectivity, and realtime processing needs. These constraints have historically prevented or slowed down the creation of scalable and performant on-device AI solutions. We designed ExecuTorch, backed by our industry leaders like Meta, Arm, Apple, and Qualcomm, to be highly portable and provide superior developer productivity without losing on performance.

+ +

ExecuTorch Alpha Release

+ +

ExecuTorch was initially introduced to the community at the 2023 PyTorch Conference. With our most recent alpha release, we further expanded ExecuTorch’s capabilities across multiple dimensions. First, we enabled support for the deployment of large language models (LLMs) on various edge devices. Second, with ExecuTorch alpha, we have further stabilized the API surface. Lastly, we have significantly improved the developer experience by simplifying the installation flow as well as improving observability and developer productivity via the ExecuTorch SDK. ExecuTorch alpha release also provides early support for the recently announced Llama 3 8B along with demonstrations on how to run this model on an iPhone 15 Pro and a Samsung Galaxy S24 mobile phone.

+ +
+
+
\ No newline at end of file