-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0e384e19.527043ea.js
1 lines (1 loc) · 6.64 KB
/
0e384e19.527043ea.js
1
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{103:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return o})),n.d(t,"metadata",(function(){return l})),n.d(t,"rightToc",(function(){return c})),n.d(t,"default",(function(){return u}));var r=n(2),i=n(6),a=(n(0),n(125)),o={id:"intro",title:"Introduction"},l={id:"intro",isDocsHomePage:!0,title:"Introduction",description:"What is Skyline?",source:"@site/docs/intro.md",permalink:"/docs/",editUrl:"https://github.com/skylineprof/skyline/edit/master/website/docs/intro.md",sidebar:"sidebar",next:{title:"Research Paper",permalink:"/docs/research"}},c=[{value:"What is Skyline?",id:"what-is-skyline",children:[]},{value:"Why Build Skyline?",id:"why-build-skyline",children:[]}],s={rightToc:c};function u(e){var t=e.components,n=Object(i.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h2",{id:"what-is-skyline"},"What is Skyline?"),Object(a.b)("p",null,"Skyline is a tool used with ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://atom.io"}),"Atom")," to profile, visualize, and\ndebug the ",Object(a.b)("em",{parentName:"p"},"computational training performance")," of\n",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://pytorch.org"}),"PyTorch")," deep neural networks."),Object(a.b)("img",{className:"shadow--tl",style:{borderRadius:"5px",marginBottom:"30px"},src:"/img/skyline_light.png",alt:"A screenshot of Skyline's user interface."}),Object(a.b)("p",null,"What makes Skyline special is that it provides ",Object(a.b)("em",{parentName:"p"},"interactive")," performance\nprofiling. When hovering over visualizations, Skyline will highlight the\nline(s) of code associated with that visualization\u2014making it easy to connect\nthe profiling data to the code. Some of Skyline's visualizations are also\nmanipulatable. When dragging the throughput or memory visualizations, Skyline\nwill mutate the code to indicate the batch size that should be used to achieve\nthese manipulated metrics."),Object(a.b)("p",null,"As an in-editor profiling tool, Skyline can help you recognize and diagnose\nperformance issues during development. Skyline transparently re-profiles your\nmodel in the background as you make changes to ensure that you always get to\nsee the latest performance data."),Object(a.b)("p",null,"Skyline is also a standalone performance profiler. If you do not want to use\nthe interactive profiling interface, you can also get Skyline to output a file\nwith its profiling data. See the ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/standalone"}),"Standalone Profiling")," page for\nmore information."),Object(a.b)("h2",{id:"why-build-skyline"},"Why Build Skyline?"),Object(a.b)("p",null,"Deep neural networks (DNNs) have taken the world by storm. However, using DNNs\nin practice can be challenging because they can take a significant amount of\ncomputational resources and time to train.",Object(a.b)("sup",null,Object(a.b)("a",{href:"https://openai.com/blog/ai-and-compute/"},"1"),",",Object(a.b)("a",{href:"https://arxiv.org/abs/1906.02243"},"2"),",",Object(a.b)("a",{href:"https://arxiv.org/abs/1910.01500"},"3")),"\nAs a result, there are often times when developers will need to debug and tune\ntheir DNNs for performance. The problem is, doing this debugging and tuning\neffectively with existing tools is difficult! It requires intimate knowledge\nacross the entire software and hardware stack\u2014something that not all deep\nlearning developers have (or should need)."),Object(a.b)("p",null,"With Skyline, our goal was to build an easy-to-use tool that is tailored for\ndeep learning developers. Skyline lets you inspect the computational training\nperformance of your models directly in your development environment. It shows\ndomain-specific metrics such as your model's training throughput and memory\nfootprint. And it supports a variety of additional features such as"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"\ud83c\udfd6 In-editor computational performance profiling"),Object(a.b)("li",{parentName:"ul"},"\ud83d\udd2e Interactive code-linked visualizations"),Object(a.b)("li",{parentName:"ul"},"\ud83c\udf88 Profiling during development"),Object(a.b)("li",{parentName:"ul"},"\ud83d\udcbe Memory profiling: overall usage and breakdowns"),Object(a.b)("li",{parentName:"ul"},"\ud83d\udef0 Remote project profiling support (alpha)")),Object(a.b)("p",null,"We designed Skyline to be intuitive and fun to use. We hope that you will give\nit a try!"))}u.isMDXComponent=!0},125:function(e,t,n){"use strict";n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return h}));var r=n(0),i=n.n(r);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=i.a.createContext({}),u=function(e){var t=i.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=u(e.components);return i.a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},b=i.a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,o=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),p=u(n),b=r,h=p["".concat(o,".").concat(b)]||p[b]||d[b]||a;return n?i.a.createElement(h,l(l({ref:t},s),{},{components:n})):i.a.createElement(h,l({ref:t},s))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=b;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var s=2;s<a;s++)o[s]=n[s];return i.a.createElement.apply(null,o)}return i.a.createElement.apply(null,n)}b.displayName="MDXCreateElement"}}]);