Unverified Commit e165a460 authored by Scott Cyphers's avatar Scott Cyphers Committed by GitHub

Merge branch 'master' into master

parents e985e98f ce7e168a
......@@ -115,3 +115,7 @@ python/pybind11/
CMakeCache.txt
CMakeFiles/
CMakeSettings.json
# don't add dot-save files!
.save
......@@ -96,7 +96,7 @@ to improve it:
[framework integration guides]: http://ngraph.nervanasys.com/docs/latest/framework-integration-guides.html
[release notes]: https://ngraph.nervanasys.com/docs/latest/project/release-notes.html
[Github issues]: https://github.com/NervanaSystems/ngraph/issues
[contrib guide]: https://ngraph.nervanasys.com/docs/latest/project/code-contributor-README.html
[contrib guide]: https://ngraph.nervanasys.com/docs/latest/project/contribution-guide.html
[pull request]: https://github.com/NervanaSystems/ngraph/pulls
[how to import]: https://ngraph.nervanasys.com/docs/latest/howto/import.html
[ngraph_wireframes_with_notice]: doc/sphinx/source/graphics/readme_stack.png "nGraph wireframe"
......
......@@ -15,7 +15,7 @@
PROJECT_NAME = "Intel® nGraph Library and API docs"
PROJECT_NAME = "Intel® nGraph Compiler stack and API docs"
PROJECT_BRIEF = "Code reference for the Intel® nGraph C++ Library"
OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@
......@@ -240,7 +240,7 @@ EXTENSION_MAPPING =
# case of backward compatibilities issues.
# The default value is: YES.
# MARKDOWN_SUPPORT = NO
MARKDOWN_SUPPORT = NO
# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
......@@ -405,7 +405,7 @@ EXTRACT_LOCAL_METHODS = NO
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
EXTRACT_ANON_NSPACES = YES
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
......@@ -615,7 +615,7 @@ LAYOUT_FILE =
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES =
# CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
......@@ -626,7 +626,7 @@ CITE_BIB_FILES =
# messages are off.
# The default value is: NO.
QUIET = NO
QUIET = YES
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
......@@ -635,14 +635,14 @@ QUIET = NO
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.
WARNINGS = YES
WARNINGS = NO
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
WARN_IF_UNDOCUMENTED = NO
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
......@@ -786,7 +786,8 @@ EXCLUDE_SYMLINKS = NO
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS =
EXCLUDE_PATTERNS = */tools/*
*/resource/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
......@@ -1176,7 +1177,7 @@ DOCSET_PUBLISHER_ID = org.doxygen.Publisher
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_NAME = Publisher
DOCSET_PUBLISHER_NAME = AIPG Intel Corporation
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
......@@ -1897,7 +1898,7 @@ HAVE_DOT = YES
# speed.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_NUM_THREADS = 32
DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen
# generates you can specify the font name using DOT_FONTNAME. You need to make
......@@ -2144,4 +2145,4 @@ GENERATE_LEGEND = YES
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
\ No newline at end of file
DOT_CLEANUP = YES
......@@ -77,9 +77,6 @@
{# Keep modernizr in head - http://modernizr.com/docs/#installing #}
<script src="{{ pathto('_static/js/modernizr.min.js', 1) }}"></script>
{# swagger-ui loading for API doc display #}
<link rel="stylesheet" href="{{ pathto('_static/css/swagger.css', 1) }}" type="text/css" />
</head>
<body class="wy-body-for-nav" role="document">
......
/* Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org> */
.swagger-section pre code {
display: block;
padding: 0.5em;
background: #F0F0F0;
}
.swagger-section pre code,
.swagger-section pre .subst,
.swagger-section pre .tag .title,
.swagger-section pre .lisp .title,
.swagger-section pre .clojure .built_in,
.swagger-section pre .nginx .title {
color: black;
}
.swagger-section pre .string,
.swagger-section pre .title,
.swagger-section pre .constant,
.swagger-section pre .parent,
.swagger-section pre .tag .value,
.swagger-section pre .rules .value,
.swagger-section pre .rules .value .number,
.swagger-section pre .preprocessor,
.swagger-section pre .ruby .symbol,
.swagger-section pre .ruby .symbol .string,
.swagger-section pre .aggregate,
.swagger-section pre .template_tag,
.swagger-section pre .django .variable,
.swagger-section pre .smalltalk .class,
.swagger-section pre .addition,
.swagger-section pre .flow,
.swagger-section pre .stream,
.swagger-section pre .bash .variable,
.swagger-section pre .apache .tag,
.swagger-section pre .apache .cbracket,
.swagger-section pre .tex .command,
.swagger-section pre .tex .special,
.swagger-section pre .erlang_repl .function_or_atom,
.swagger-section pre .markdown .header {
color: #800;
}
.swagger-section pre .comment,
.swagger-section pre .annotation,
.swagger-section pre .template_comment,
.swagger-section pre .diff .header,
.swagger-section pre .chunk,
.swagger-section pre .markdown .blockquote {
color: #888;
}
.swagger-section pre .number,
.swagger-section pre .date,
.swagger-section pre .regexp,
.swagger-section pre .literal,
.swagger-section pre .smalltalk .symbol,
.swagger-section pre .smalltalk .char,
.swagger-section pre .go .constant,
.swagger-section pre .change,
.swagger-section pre .markdown .bullet,
.swagger-section pre .markdown .link_url {
color: #080;
}
.swagger-section pre .label,
.swagger-section pre .javadoc,
.swagger-section pre .ruby .string,
.swagger-section pre .decorator,
.swagger-section pre .filter .argument,
.swagger-section pre .localvars,
.swagger-section pre .array,
.swagger-section pre .attr_selector,
.swagger-section pre .important,
.swagger-section pre .pseudo,
.swagger-section pre .pi,
.swagger-section pre .doctype,
.swagger-section pre .deletion,
.swagger-section pre .envvar,
.swagger-section pre .shebang,
.swagger-section pre .apache .sqbracket,
.swagger-section pre .nginx .built_in,
.swagger-section pre .tex .formula,
.swagger-section pre .erlang_repl .reserved,
.swagger-section pre .prompt,
.swagger-section pre .markdown .link_label,
.swagger-section pre .vhdl .attribute,
.swagger-section pre .clojure .attribute,
.swagger-section pre .coffeescript .property {
color: #88F;
}
.swagger-section pre .keyword,
.swagger-section pre .id,
.swagger-section pre .phpdoc,
.swagger-section pre .title,
.swagger-section pre .built_in,
.swagger-section pre .aggregate,
.swagger-section pre .css .tag,
.swagger-section pre .javadoctag,
.swagger-section pre .phpdoc,
.swagger-section pre .yardoctag,
.swagger-section pre .smalltalk .class,
.swagger-section pre .winutils,
.swagger-section pre .bash .variable,
.swagger-section pre .apache .tag,
.swagger-section pre .go .typename,
.swagger-section pre .tex .command,
.swagger-section pre .markdown .strong,
.swagger-section pre .request,
.swagger-section pre .status {
font-weight: bold;
}
.swagger-section pre .markdown .emphasis {
font-style: italic;
}
.swagger-section pre .nginx .built_in {
font-weight: normal;
}
.swagger-section pre .coffeescript .javascript,
.swagger-section pre .javascript .xml,
.swagger-section pre .tex .formula,
.swagger-section pre .xml .javascript,
.swagger-section pre .xml .vbscript,
.swagger-section pre .xml .css,
.swagger-section pre .xml .cdata {
opacity: 0.5;
}
.swagger-section .swagger-ui-wrap {
line-height: 1;
font-family: "Droid Sans", sans-serif;
max-width: 960px;
margin-left: auto;
margin-right: auto;
}
.swagger-section .swagger-ui-wrap b,
.swagger-section .swagger-ui-wrap strong {
font-family: "Droid Sans", sans-serif;
font-weight: bold;
}
.swagger-section .swagger-ui-wrap q,
.swagger-section .swagger-ui-wrap blockquote {
quotes: none;
}
.swagger-section .swagger-ui-wrap p {
line-height: 1.4em;
padding: 0 0 10px;
color: #333333;
}
.swagger-section .swagger-ui-wrap q:before,
.swagger-section .swagger-ui-wrap q:after,
.swagger-section .swagger-ui-wrap blockquote:before,
.swagger-section .swagger-ui-wrap blockquote:after {
content: none;
}
.swagger-section .swagger-ui-wrap .heading_with_menu h1,
.swagger-section .swagger-ui-wrap .heading_with_menu h2,
.swagger-section .swagger-ui-wrap .heading_with_menu h3,
.swagger-section .swagger-ui-wrap .heading_with_menu h4,
.swagger-section .swagger-ui-wrap .heading_with_menu h5,
.swagger-section .swagger-ui-wrap .heading_with_menu h6 {
display: block;
clear: none;
float: left;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
width: 60%;
}
.swagger-section .swagger-ui-wrap table {
border-collapse: collapse;
border-spacing: 0;
}
.swagger-section .swagger-ui-wrap table thead tr th {
padding: 5px;
font-size: 0.9em;
color: #666666;
border-bottom: 1px solid #999999;
}
.swagger-section .swagger-ui-wrap table tbody tr:last-child td {
border-bottom: none;
}
.swagger-section .swagger-ui-wrap table tbody tr.offset {
background-color: #f0f0f0;
}
.swagger-section .swagger-ui-wrap table tbody tr td {
padding: 6px;
font-size: 0.9em;
border-bottom: 1px solid #cccccc;
vertical-align: top;
line-height: 1.3em;
}
.swagger-section .swagger-ui-wrap ol {
margin: 0px 0 10px;
padding: 0 0 0 18px;
list-style-type: decimal;
}
.swagger-section .swagger-ui-wrap ol li {
padding: 5px 0px;
font-size: 0.9em;
color: #333333;
}
.swagger-section .swagger-ui-wrap ol,
.swagger-section .swagger-ui-wrap ul {
list-style: none;
}
.swagger-section .swagger-ui-wrap h1 a,
.swagger-section .swagger-ui-wrap h2 a,
.swagger-section .swagger-ui-wrap h3 a,
.swagger-section .swagger-ui-wrap h4 a,
.swagger-section .swagger-ui-wrap h5 a,
.swagger-section .swagger-ui-wrap h6 a {
text-decoration: none;
}
.swagger-section .swagger-ui-wrap h1 a:hover,
.swagger-section .swagger-ui-wrap h2 a:hover,
.swagger-section .swagger-ui-wrap h3 a:hover,
.swagger-section .swagger-ui-wrap h4 a:hover,
.swagger-section .swagger-ui-wrap h5 a:hover,
.swagger-section .swagger-ui-wrap h6 a:hover {
text-decoration: underline;
}
.swagger-section .swagger-ui-wrap h1 span.divider,
.swagger-section .swagger-ui-wrap h2 span.divider,
.swagger-section .swagger-ui-wrap h3 span.divider,
.swagger-section .swagger-ui-wrap h4 span.divider,
.swagger-section .swagger-ui-wrap h5 span.divider,
.swagger-section .swagger-ui-wrap h6 span.divider {
color: #aaaaaa;
}
.swagger-section .swagger-ui-wrap a {
color: #547f00;
}
.swagger-section .swagger-ui-wrap a img {
border: none;
}
.swagger-section .swagger-ui-wrap article,
.swagger-section .swagger-ui-wrap aside,
.swagger-section .swagger-ui-wrap details,
.swagger-section .swagger-ui-wrap figcaption,
.swagger-section .swagger-ui-wrap figure,
.swagger-section .swagger-ui-wrap footer,
.swagger-section .swagger-ui-wrap header,
.swagger-section .swagger-ui-wrap hgroup,
.swagger-section .swagger-ui-wrap menu,
.swagger-section .swagger-ui-wrap nav,
.swagger-section .swagger-ui-wrap section,
.swagger-section .swagger-ui-wrap summary {
display: block;
}
.swagger-section .swagger-ui-wrap pre {
font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
background-color: #fcf6db;
border: 1px solid #e5e0c6;
padding: 10px;
}
.swagger-section .swagger-ui-wrap pre code {
line-height: 1.6em;
background: none;
}
.swagger-section .swagger-ui-wrap .content > .content-type > div > label {
clear: both;
display: block;
color: #0F6AB4;
font-size: 1.1em;
margin: 0;
padding: 15px 0 5px;
}
.swagger-section .swagger-ui-wrap .content pre {
font-size: 12px;
margin-top: 5px;
padding: 5px;
}
.swagger-section .swagger-ui-wrap .icon-btn {
cursor: pointer;
}
.swagger-section .swagger-ui-wrap .info_title {
padding-bottom: 10px;
font-weight: bold;
font-size: 25px;
}
.swagger-section .swagger-ui-wrap .footer {
margin-top: 20px;
}
.swagger-section .swagger-ui-wrap p.big,
.swagger-section .swagger-ui-wrap div.big p {
font-size: 1em;
margin-bottom: 10px;
}
.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input,
.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input,
.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea,
.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input {
width: 500px !important;
}
.swagger-section .swagger-ui-wrap .info_license {
padding-bottom: 5px;
}
.swagger-section .swagger-ui-wrap .info_tos {
padding-bottom: 5px;
}
.swagger-section .swagger-ui-wrap .message-fail {
color: #cc0000;
}
.swagger-section .swagger-ui-wrap .info_url {
padding-bottom: 5px;
}
.swagger-section .swagger-ui-wrap .info_email {
padding-bottom: 5px;
}
.swagger-section .swagger-ui-wrap .info_name {
padding-bottom: 5px;
}
.swagger-section .swagger-ui-wrap .info_description {
padding-bottom: 10px;
font-size: 15px;
}
.swagger-section .swagger-ui-wrap .markdown ol li,
.swagger-section .swagger-ui-wrap .markdown ul li {
padding: 3px 0px;
line-height: 1.4em;
color: #333333;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input,
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input,
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input {
display: block;
padding: 4px;
width: auto;
clear: both;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title,
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title,
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title {
font-size: 1.3em;
}
.swagger-section .swagger-ui-wrap table.fullwidth {
width: 100%;
}
.swagger-section .swagger-ui-wrap .model-signature {
font-family: "Droid Sans", sans-serif;
font-size: 1em;
line-height: 1.5em;
}
.swagger-section .swagger-ui-wrap .model-signature .signature-nav a {
text-decoration: none;
color: #AAA;
}
.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover {
text-decoration: underline;
color: black;
}
.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected {
color: black;
text-decoration: none;
}
.swagger-section .swagger-ui-wrap .model-signature .propType {
color: #5555aa;
}
.swagger-section .swagger-ui-wrap .model-signature pre:hover {
background-color: #ffffdd;
}
.swagger-section .swagger-ui-wrap .model-signature pre {
font-size: .85em;
line-height: 1.2em;
overflow: auto;
max-height: 200px;
cursor: pointer;
}
.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav {
display: block;
margin: 0;
padding: 0;
}
.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child {
padding-right: 0;
border-right: none;
}
.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li {
float: left;
margin: 0 5px 5px 0;
padding: 2px 5px 2px 0;
border-right: 1px solid #ddd;
}
.swagger-section .swagger-ui-wrap .model-signature .propOpt {
color: #555;
}
.swagger-section .swagger-ui-wrap .model-signature .snippet small {
font-size: 0.75em;
}
.swagger-section .swagger-ui-wrap .model-signature .propOptKey {
font-style: italic;
}
.swagger-section .swagger-ui-wrap .model-signature .description .strong {
font-weight: bold;
color: #000;
font-size: .9em;
}
.swagger-section .swagger-ui-wrap .model-signature .description div {
font-size: 0.9em;
line-height: 1.5em;
margin-left: 1em;
}
.swagger-section .swagger-ui-wrap .model-signature .description .stronger {
font-weight: bold;
color: #000;
}
.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper {
border-spacing: 0;
position: absolute;
background-color: #ffffff;
border: 1px solid #bbbbbb;
display: none;
font-size: 11px;
max-width: 400px;
line-height: 30px;
color: black;
padding: 5px;
margin-left: 10px;
}
.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th {
text-align: center;
background-color: #eeeeee;
border: 1px solid #bbbbbb;
font-size: 11px;
color: #666666;
font-weight: bold;
padding: 5px;
line-height: 15px;
}
.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName {
font-weight: bold;
}
.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child,
.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child {
display: inline;
}
.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before {
display: block;
content: '';
}
.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child {
margin-right: -3px;
}
.swagger-section .swagger-ui-wrap .model-signature .propName {
font-weight: bold;
}
.swagger-section .swagger-ui-wrap .model-signature .signature-container {
clear: both;
}
.swagger-section .swagger-ui-wrap .body-textarea {
width: 300px;
height: 100px;
border: 1px solid #aaa;
}
.swagger-section .swagger-ui-wrap .markdown p code,
.swagger-section .swagger-ui-wrap .markdown li code {
font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
background-color: #f0f0f0;
color: black;
padding: 1px 3px;
}
.swagger-section .swagger-ui-wrap .required {
font-weight: bold;
}
.swagger-section .swagger-ui-wrap input.parameter {
width: 300px;
border: 1px solid #aaa;
}
.swagger-section .swagger-ui-wrap h1 {
color: black;
font-size: 1.5em;
line-height: 1.3em;
padding: 10px 0 10px 0;
font-family: "Droid Sans", sans-serif;
font-weight: bold;
}
.swagger-section .swagger-ui-wrap .heading_with_menu {
float: none;
clear: both;
overflow: hidden;
display: block;
}
.swagger-section .swagger-ui-wrap .heading_with_menu ul {
display: block;
clear: none;
float: right;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
margin-top: 10px;
}
.swagger-section .swagger-ui-wrap h2 {
color: black;
font-size: 1.3em;
padding: 10px 0 10px 0;
}
.swagger-section .swagger-ui-wrap h2 a {
color: black;
}
.swagger-section .swagger-ui-wrap h2 span.sub {
font-size: 0.7em;
color: #999999;
font-style: italic;
}
.swagger-section .swagger-ui-wrap h2 span.sub a {
color: #777777;
}
.swagger-section .swagger-ui-wrap span.weak {
color: #666666;
}
.swagger-section .swagger-ui-wrap .message-success {
color: #89BF04;
}
.swagger-section .swagger-ui-wrap caption,
.swagger-section .swagger-ui-wrap th,
.swagger-section .swagger-ui-wrap td {
text-align: left;
font-weight: normal;
vertical-align: middle;
}
.swagger-section .swagger-ui-wrap .code {
font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea {
font-family: "Droid Sans", sans-serif;
height: 250px;
padding: 4px;
display: block;
clear: both;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select {
display: block;
clear: both;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean {
float: none;
clear: both;
overflow: hidden;
display: block;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label {
display: block;
float: left;
clear: none;
margin: 0;
padding: 0;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input {
display: block;
float: left;
clear: none;
margin: 0 5px 0 0;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label {
color: black;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label {
display: block;
clear: both;
width: auto;
padding: 0 0 3px;
color: #666666;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr {
padding-left: 3px;
color: #888888;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints {
margin-left: 0;
font-style: italic;
font-size: 0.9em;
margin: 0;
}
.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons {
margin: 0;
padding: 0;
}
.swagger-section .swagger-ui-wrap span.blank,
.swagger-section .swagger-ui-wrap span.empty {
color: #888888;
font-style: italic;
}
.swagger-section .swagger-ui-wrap .markdown h3 {
color: #547f00;
}
.swagger-section .swagger-ui-wrap .markdown h4 {
color: #666666;
}
.swagger-section .swagger-ui-wrap .markdown pre {
font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
background-color: #fcf6db;
border: 1px solid #e5e0c6;
padding: 10px;
margin: 0 0 10px 0;
}
.swagger-section .swagger-ui-wrap .markdown pre code {
line-height: 1.6em;
}
.swagger-section .swagger-ui-wrap div.gist {
margin: 20px 0 25px 0 !important;
}
.swagger-section .swagger-ui-wrap ul#resources {
font-family: "Droid Sans", sans-serif;
font-size: 0.9em;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource {
border-bottom: 1px solid #dddddd;
list-style-type: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a,
.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a {
color: black;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a,
.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a {
color: #555555;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child {
border-bottom: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading {
border: 1px solid transparent;
float: none;
clear: both;
overflow: hidden;
display: block;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options {
overflow: hidden;
padding: 0;
display: block;
clear: none;
float: right;
margin: 14px 10px 0 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li {
float: left;
clear: none;
margin: 0;
padding: 2px 10px;
border-right: 1px solid #dddddd;
color: #666666;
font-size: 0.9em;
list-style-type: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a {
color: #aaaaaa;
text-decoration: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover {
text-decoration: underline;
color: black;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover,
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active,
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active {
text-decoration: underline;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first {
padding-left: 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last {
padding-right: 0;
border-right: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first {
padding-left: 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 {
color: #999999;
padding-left: 0;
display: block;
clear: none;
float: left;
font-family: "Droid Sans", sans-serif;
font-weight: bold;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a {
color: #999999;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover {
color: black;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint {
list-style-type: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation {
float: none;
clear: both;
overflow: hidden;
display: block;
margin: 0 0 10px;
padding: 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading {
float: none;
clear: both;
overflow: hidden;
display: block;
margin: 0;
padding: 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 {
display: block;
clear: none;
float: left;
width: auto;
margin: 0;
padding: 0;
line-height: 1.1em;
color: black;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path {
padding-left: 10px;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a {
color: black;
text-decoration: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover {
text-decoration: underline;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a {
text-transform: uppercase;
text-decoration: none;
color: white;
display: inline-block;
width: 50px;
font-size: 0.7em;
text-align: center;
padding: 7px 0 4px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
-o-border-radius: 2px;
-ms-border-radius: 2px;
-khtml-border-radius: 2px;
border-radius: 2px;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span {
margin: 0;
padding: 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options {
overflow: hidden;
padding: 0;
display: block;
clear: none;
float: right;
margin: 6px 10px 0 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li {
float: left;
clear: none;
margin: 0;
padding: 2px 10px;
font-size: 0.9em;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a {
text-decoration: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access {
color: black;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content {
border-top: none;
padding: 10px;
-moz-border-radius-bottomleft: 6px;
-webkit-border-bottom-left-radius: 6px;
-o-border-bottom-left-radius: 6px;
-ms-border-bottom-left-radius: 6px;
-khtml-border-bottom-left-radius: 6px;
border-bottom-left-radius: 6px;
-moz-border-radius-bottomright: 6px;
-webkit-border-bottom-right-radius: 6px;
-o-border-bottom-right-radius: 6px;
-ms-border-bottom-right-radius: 6px;
-khtml-border-bottom-right-radius: 6px;
border-bottom-right-radius: 6px;
margin: 0 0 20px;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 {
font-size: 1.1em;
margin: 0;
padding: 15px 0 5px;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header {
float: none;
clear: both;
overflow: hidden;
display: block;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a {
padding: 4px 0 0 10px;
display: inline-block;
font-size: 0.9em;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit {
display: block;
clear: none;
float: left;
padding: 6px 8px;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber {
background-image: url('../images/throbber.gif');
width: 128px;
height: 16px;
display: block;
clear: none;
float: right;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error {
outline: 2px solid black;
outline-color: #cc0000;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre {
font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
padding: 10px;
font-size: 0.9em;
max-height: 400px;
overflow-y: auto;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading {
background-color: #f9f2e9;
border: 1px solid #f0e0ca;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a {
background-color: #c5862b;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #f0e0ca;
color: #c5862b;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a {
color: #c5862b;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content {
background-color: #faf5ee;
border: 1px solid #f0e0ca;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 {
color: #c5862b;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a {
color: #dcb67f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading {
background-color: #fcffcd;
border: 1px solid black;
border-color: #ffd20f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a {
text-transform: uppercase;
background-color: #ffd20f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #ffd20f;
color: #ffd20f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a {
color: #ffd20f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content {
background-color: #fcffcd;
border: 1px solid black;
border-color: #ffd20f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 {
color: #ffd20f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a {
color: #6fc992;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading {
background-color: #f5e8e8;
border: 1px solid #e8c6c7;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a {
text-transform: uppercase;
background-color: #a41e22;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #e8c6c7;
color: #a41e22;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a {
color: #a41e22;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content {
background-color: #f7eded;
border: 1px solid #e8c6c7;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 {
color: #a41e22;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a {
color: #c8787a;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading {
background-color: #e7f6ec;
border: 1px solid #c3e8d1;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a {
background-color: #10a54a;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #c3e8d1;
color: #10a54a;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a {
color: #10a54a;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content {
background-color: #ebf7f0;
border: 1px solid #c3e8d1;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 {
color: #10a54a;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a {
color: #6fc992;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading {
background-color: #FCE9E3;
border: 1px solid #F5D5C3;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a {
background-color: #D38042;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #f0cecb;
color: #D38042;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a {
color: #D38042;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content {
background-color: #faf0ef;
border: 1px solid #f0cecb;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 {
color: #D38042;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a {
color: #dcb67f;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading {
background-color: #e7f0f7;
border: 1px solid #c3d9ec;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a {
background-color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #c3d9ec;
color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a {
color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content {
background-color: #ebf3f9;
border: 1px solid #c3d9ec;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 {
color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a {
color: #6fa5d2;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading {
background-color: #e7f0f7;
border: 1px solid #c3d9ec;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a {
background-color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li {
border-right: 1px solid #dddddd;
border-right-color: #c3d9ec;
color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a {
color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content {
background-color: #ebf3f9;
border: 1px solid #c3d9ec;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 {
color: #0f6ab4;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a {
color: #6fa5d2;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content {
border-top: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last {
padding-right: 0;
border-right: none;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active {
text-decoration: underline;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first {
padding-left: 0;
}
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child,
.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first {
padding-left: 0;
}
.swagger-section .swagger-ui-wrap p#colophon {
margin: 0 15px 40px 15px;
padding: 10px 0;
font-size: 0.8em;
border-top: 1px solid #dddddd;
font-family: "Droid Sans", sans-serif;
color: #999999;
font-style: italic;
}
.swagger-section .swagger-ui-wrap p#colophon a {
text-decoration: none;
color: #547f00;
}
.swagger-section .swagger-ui-wrap h3 {
color: black;
font-size: 1.1em;
padding: 10px 0 10px 0;
}
.swagger-section .swagger-ui-wrap .markdown ol,
.swagger-section .swagger-ui-wrap .markdown ul {
font-family: "Droid Sans", sans-serif;
margin: 5px 0 10px;
padding: 0 0 0 18px;
list-style-type: disc;
}
.swagger-section .swagger-ui-wrap form.form_box {
background-color: #ebf3f9;
border: 1px solid #c3d9ec;
padding: 10px;
}
.swagger-section .swagger-ui-wrap form.form_box label {
color: #0f6ab4 !important;
}
.swagger-section .swagger-ui-wrap form.form_box input[type=submit] {
display: block;
padding: 10px;
}
.swagger-section .swagger-ui-wrap form.form_box p.weak {
font-size: 0.8em;
}
.swagger-section .swagger-ui-wrap form.form_box p {
font-size: 0.9em;
padding: 0 0 15px;
color: #7e7b6d;
}
.swagger-section .swagger-ui-wrap form.form_box p a {
color: #646257;
}
.swagger-section .swagger-ui-wrap form.form_box p strong {
color: black;
}
.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child {
padding-bottom: 0;
}
.swagger-section .title {
font-style: bold;
}
.swagger-section .secondary_form {
display: none;
}
.swagger-section .main_image {
display: block;
margin-left: auto;
margin-right: auto;
}
.swagger-section .oauth_body {
margin-left: 100px;
margin-right: 100px;
}
.swagger-section .oauth_submit {
text-align: center;
}
.swagger-section .api-popup-dialog {
z-index: 10000;
position: absolute;
width: 500px;
background: #FFF;
padding: 20px;
border: 1px solid #ccc;
border-radius: 5px;
display: none;
font-size: 13px;
color: #777;
}
.swagger-section .api-popup-dialog .api-popup-title {
font-size: 24px;
padding: 10px 0;
}
.swagger-section .api-popup-dialog .api-popup-title {
font-size: 24px;
padding: 10px 0;
}
.swagger-section .api-popup-dialog p.error-msg {
padding-left: 5px;
padding-bottom: 5px;
}
.swagger-section .api-popup-dialog button.api-popup-authbtn {
height: 30px;
}
.swagger-section .api-popup-dialog button.api-popup-cancel {
height: 30px;
}
.swagger-section .api-popup-scopes {
padding: 10px 20px;
}
.swagger-section .api-popup-scopes li {
padding: 5px 0;
line-height: 20px;
}
.swagger-section .api-popup-scopes .api-scope-desc {
padding-left: 20px;
font-style: italic;
}
.swagger-section .api-popup-scopes li input {
position: relative;
top: 2px;
}
.swagger-section .api-popup-actions {
padding-top: 10px;
}
.swagger-section .access {
float: right;
}
.swagger-section .auth {
float: right;
}
.swagger-section #api_information_panel {
position: absolute;
background: #FFF;
border: 1px solid #ccc;
border-radius: 5px;
display: none;
font-size: 13px;
max-width: 300px;
line-height: 30px;
color: black;
padding: 5px;
}
.swagger-section #api_information_panel p .api-msg-enabled {
color: green;
}
.swagger-section #api_information_panel p .api-msg-disabled {
color: red;
}
.swagger-section .api-ic {
height: 18px;
vertical-align: middle;
display: inline-block;
background: url(../images/explorer_icons.png) no-repeat;
}
.swagger-section .ic-info {
background-position: 0 0;
width: 18px;
margin-top: -7px;
margin-left: 4px;
}
.swagger-section .ic-warning {
background-position: -60px 0;
width: 18px;
margin-top: -7px;
margin-left: 4px;
}
.swagger-section .ic-error {
background-position: -30px 0;
width: 18px;
margin-top: -7px;
margin-left: 4px;
}
.swagger-section .ic-off {
background-position: -90px 0;
width: 58px;
margin-top: -4px;
cursor: pointer;
}
.swagger-section .ic-on {
background-position: -160px 0;
width: 58px;
margin-top: -4px;
cursor: pointer;
}
.swagger-section #header {
background-color: #89bf04;
padding: 14px;
}
.swagger-section #header a#logo {
font-size: 1.5em;
font-weight: bold;
text-decoration: none;
background: transparent url(../images/logo_small.png) no-repeat left center;
padding: 20px 0 20px 40px;
color: white;
}
.swagger-section #header form#api_selector {
display: block;
clear: none;
float: right;
}
.swagger-section #header form#api_selector .input {
display: block;
clear: none;
float: left;
margin: 0 10px 0 0;
}
.swagger-section #header form#api_selector .input input#input_apiKey {
width: 200px;
}
.swagger-section #header form#api_selector .input input#input_baseUrl {
width: 400px;
}
.swagger-section #header form#api_selector .input a#explore {
display: block;
text-decoration: none;
font-weight: bold;
padding: 6px 8px;
font-size: 0.9em;
color: white;
background-color: #547f00;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-o-border-radius: 4px;
-ms-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
}
.swagger-section #header form#api_selector .input a#explore:hover {
background-color: #547f00;
}
.swagger-section #header form#api_selector .input input {
font-size: 0.9em;
padding: 3px;
margin: 0;
}
.swagger-section #content_message {
margin: 10px 15px;
font-style: italic;
color: #999999;
}
.swagger-section #message-bar {
min-height: 30px;
text-align: center;
padding-top: 10px;
}
......@@ -1638,9 +1638,9 @@ html {
body {
font-family: "RobotoSlab", Sans, sans-serif;
font-weight: normal;
color: #38403f;
color: #3f3c3d;
min-height: 100%;
overflow-x: hidden;
overflow-x: visible;
background: #fcfcfc;
}
......@@ -1731,11 +1731,13 @@ p {
h1 {
font-size: 153%;
color: #585351;
}
h2, .rst-content .toctree-wrapper p.caption {
font-size: 139%;
font-weight: lighter;
color: #826c62;
}
h3 {
......@@ -1854,7 +1856,7 @@ div[class^='highlight'] td.code {
code, p.caption {
font-family: "NeoSansIntel-Light", sans, monospace;
color: #A79992;
color: #585351;
font-size: 0.99em;
line-height: 1.39em;
}
......@@ -1875,7 +1877,7 @@ caption-text {
padding-top: 0.29em;
padding-left: 0.11em;
padding-bottom: 0.23em;
text-align: rig6ht;
text-align: right;
}
div[class^='highlight'] pre {
......@@ -2771,7 +2773,7 @@ span[id*='MathJax-Span'] {
padding: 0 1.618em;
margin-bottom: 0;
display: block;
font-family: NeoSansIntel, sans;
font-family: "NeoSansIntel", sans;
font-weight: bold;
text-transform: uppercase;
font-size: 80%;
......@@ -2925,11 +2927,12 @@ span[id*='MathJax-Span'] {
padding: 0.809em;
margin-bottom: 0.809em;
z-index: 200;
background-color: #0071c5;
background-color: #fcfcfc;
text-align: center;
padding: 0.809em;
display: block;
color: #fcfcfc;
color: #585351;
font-family: "NeoSansIntel-Regular", sans;
margin-bottom: 0.809em;
}
.wy-side-nav-search input[type=text] {
......@@ -2937,14 +2940,14 @@ span[id*='MathJax-Span'] {
line-height: 1.3em;
border-radius: 50px;
padding: 6px 12px;
border-color: #8eb0af;
border-color: #aba09b;
}
.wy-side-nav-search img {
display: block;
margin: auto auto 0.809em auto;
height: 45px;
width: 45px;
background-color: #8eb0af;
background-color: #aba09b;
padding: 5px;
border-radius: 100%;
}
......@@ -2975,7 +2978,7 @@ span[id*='MathJax-Span'] {
margin-top: -0.4045em;
margin-bottom: 0.809em;
font-weight: normal;
color: rgba(255, 255, 255, 0.3);
color: #3f3c3d;
}
.wy-nav .wy-menu-vertical header {
......@@ -2985,7 +2988,7 @@ span[id*='MathJax-Span'] {
color: #dadada;
}
.wy-nav .wy-menu-vertical a:hover {
background-color: #8eb0af;
background-color: #aba09b;
color: #fff;
}
......@@ -3035,7 +3038,7 @@ span[id*='MathJax-Span'] {
overflow-x: hidden;
overflow-y: hidden;
min-height: 100%;
background: #5f5f5f;
background: #585351;
z-index: 200;
}
......@@ -3049,7 +3052,7 @@ span[id*='MathJax-Span'] {
.wy-nav-top {
display: none;
background: #0071c5;
background: #fcfcfc;
color: #fff;
padding: 0.4045em 0.809em;
position: relative;
......@@ -3066,14 +3069,14 @@ span[id*='MathJax-Span'] {
clear: both;
}
.wy-nav-top a {
color: #fff;
font-weight: bold;
color: #585351;
font-family: "NeoSansIntel-Regular", sans;
}
.wy-nav-top img {
margin-right: 12px;
height: 45px;
width: 45px;
background-color: #0071c5;
background-color: #fcfcfc;
padding: 5px;
border-radius: 100%;
}
......@@ -3092,15 +3095,15 @@ span[id*='MathJax-Span'] {
.wy-nav-content {
padding: 1.618em 3.236em;
height: 100%;
max-width: 850px !important;
max-width: 979px !important;
margin: auto;
}
.wy-body-mask {
position: fixed;
width: 100%;
width: auto;
height: 100%;
background: rgba(0, 0, 0, 0.2);
background: ;
display: none;
z-index: 499;
}
......@@ -3137,11 +3140,11 @@ footer span.commit code, footer span.commit .rst-content tt, .rst-content footer
#search-results .search li {
margin-bottom: 24px;
border-bottom: solid 1px #e1e4e5;
border-bottom: solid 1px #f3cdba;
padding-bottom: 24px;
}
#search-results .search li:first-child {
border-top: solid 1px #e1e4e5;
border-top: solid 1px #f3cdba;
padding-top: 24px;
}
#search-results .search li a {
......
{
"version": 3,
"mappings": "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",
"sources": ["../../../bower_components/neat/app/assets/stylesheets/grid/_grid.scss","../../../bower_components/bourbon/dist/addons/_prefixer.scss","../../../bower_components/wyrm/sass/wyrm_core/_reset.sass","../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/font-awesome/scss/_path.scss","../../../bower_components/font-awesome/scss/_core.scss","../../../bower_components/font-awesome/scss/_larger.scss","../../../bower_components/font-awesome/scss/_fixed-width.scss","../../../bower_components/font-awesome/scss/_list.scss","../../../bower_components/font-awesome/scss/_variables.scss","../../../bower_components/font-awesome/scss/_bordered-pulled.scss","../../../bower_components/font-awesome/scss/_spinning.scss","../../../bower_components/font-awesome/scss/_rotated-flipped.scss","../../../bower_components/font-awesome/scss/_mixins.scss","../../../bower_components/font-awesome/scss/_stacked.scss","../../../bower_components/font-awesome/scss/_icons.scss","../../../bower_components/wyrm/sass/wyrm_core/_font_icon_defaults.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../bower_components/wyrm/sass/wyrm_core/_alert.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss","../../../bower_components/wyrm/sass/wyrm_core/_button.sass","../../../bower_components/wyrm/sass/wyrm_core/_dropdown.sass","../../../bower_components/wyrm/sass/wyrm_core/_form.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_outer-container.scss","../../../bower_components/neat/app/assets/stylesheets/settings/_grid.scss","../../../bower_components/neat/app/assets/stylesheets/grid/_span-columns.scss","../../../bower_components/wyrm/sass/wyrm_core/_neat_extra.sass","../../../bower_components/wyrm/sass/wyrm_core/_generic.sass","../../../sass/_table.sass","../../../sass/_type.sass","../../../sass/_pygments.sass","../../../sass/_pygments_light.sass","../../../sass/_theme_breadcrumbs.sass","../../../sass/_theme_badge.sass","../../../sass/_theme_rst.sass","../../../sass/_theme_mathjax.sass","../../../sass/_theme_font_local.sass","../../../sass/_theme_layout.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_private.scss"],
"sources": [],
"names": [],
"file": "theme.css"
}
......@@ -2554,9 +2554,10 @@ div[class^='highlight'] pre {
}
.function {
border-right: dashed 0.19em #f4f2f0;
border-bottom: solid 0.23em #f4f2f0;
border-top: solid 0.31em #77a29f;
border-right: dashed 0.19em #f3cdba;
border-bottom: solid 0.23em #826c62;
border-top: solid 0.31em #826c62;
background: #aba09b;
}
......
......@@ -9,4 +9,4 @@ sticky_navigation = True
logo_only =
collapse_navigation = False
display_version = True
use_bower = FALSE
use_bower = False
.. backend-support/cpp-api.rst:
Runtime Backends
################
.. figure:: ../graphics/backend-dgm.png
:width: 650px
Various backends are accessible via nGraph core APIs
Backend
=======
.. doxygenclass:: ngraph::runtime::Backend
:project: ngraph
:members:
Tensor
======
.. doxygenclass:: ngraph::runtime::Tensor
:project: ngraph
:members:
HostTensor
==========
.. doxygenclass:: ngraph::runtime::HostTensor
:project: ngraph
:members:
PlaidML
=======
.. doxygenclass:: ngraph::runtime::plaidml::PlaidML_Backend
:project: ngraph
:members:
\ No newline at end of file
.. index.rst
.. backend-support/index.rst
#######################
Interact with Backends
#######################
Transformer, CPU, GPU, PlaidML
###############################
Backend
========
* :ref:`hybrid_transformer`
* :ref:`cpu_backend`
* :ref:`plaidml_backend`
* :ref:`gpu_backend`
What is a backend?
------------------
Backends are responsible for function execution and value allocation. They
can be used to :doc:`carry out a programmed computation<../howto/execute>`
......@@ -14,32 +22,38 @@ from a framework by using a CPU or GPU; or they can be used with an *Interpreter
mode, which is primarily intended for testing, to analyze a program, or for a
framework developer to develop customizations. Experimental APIs to support
current and future nGraph Backends are also available; see, for example, the
section on :ref:`plaidml_`.
section on :ref:`plaidml_backend`.
.. figure:: ../graphics/backend-dgm.png
:width: 650px
.. _hybrid_transformer:
Hybrid Transformer
==================
.. doxygenclass:: ngraph::runtime::Backend
:project: ngraph
:members:
Lorem ipsum
.. _cpu_backend:
Tensor
=======
CPU Backend
===========
.. doxygenclass:: ngraph::runtime::Tensor
:project: ngraph
:members:
Lorem ipsum
.. _gpu_backend:
.. _plaidml_:
GPU Backend
===========
PlaidML
========
Lorem ipsum
.. _plaidml_backend:
PlaidML Backend
===============
The nGraph ecosystem has recently added initial (experimental) support for `PlaidML`_,
which is an advanced :abbr:`Machine Learning (ML)` library that can further
......@@ -47,10 +61,4 @@ accelerate training models built on GPUs. When you select the ``PlaidML`` option
as a backend, it behaves as an advanced tensor compiler that can further speed up
training with large data sets.
.. doxygenclass:: ngraph::runtime::plaidml::PlaidML_Backend
:project: ngraph
:members:
.. _PlaidML: https://github.com/plaidml
......@@ -220,12 +220,13 @@ paths for what you'll want to do next: either compile a framework to run a DL
training model, or load an import of an "already-trained" model for inference
on an Intel nGraph-enabled backend.
For the former case, this early |version|, :doc:`framework-integration-guides`,
For the former case, this early |version|, :doc:`frameworks/index`,
can help you get started with a training a model on a supported framework.
* :doc:`MXNet<framework-integration-guides>` framework,
* :doc:`TensorFlow<framework-integration-guides>` framework, and
* :doc:`neon<framework-integration-guides>` framework,
* :doc:`MXNet<frameworks/tensorflow_integ>` framework,
* :doc:`TensorFlow<frameworks/mxnet_integ>` framework,
* :doc:`ONNX & ONNXIFI<frameworks/onnx_integ>`, and
* :doc:`PaddlePaddle<frameworks/paddle_integ>` framework.
For the latter case, if you've followed a tutorial from `ONNX`_, and you have an
......
......@@ -73,11 +73,11 @@ author = 'Intel Corporation'
# built documents.
#
# The short X.Y version.
version = '0.12'
version = '0.13'
# The Documentation full version, including alpha/beta/rc tags. Some features
# available in the latest code will not necessarily be documented first
release = '0.12.1'
release = '0.13-0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
......
.. core/overview.rst:
Overview
========
.. debug:
Debugging
#########
Error hints
===========
Common mistakes
===============
Wiki, other help
================
.. nbench:
###################
Working with nBench
###################
.. performance-profile:
Performance profiling
#####################
.. FW-specific validation performance comparisons via nbench
\ No newline at end of file
.. visualize:
Visualization
#############
.. framework-integration-guides:
###############################
Integrate Supported Frameworks
###############################
* :ref:`mxnet_intg`
* :ref:`tensorflow_intg`
A framework is "supported" when there is a framework :term:`bridge` that can be
cloned from one of our GitHub repos and built to connect to nGraph device backends,
all the while maintaining the framework's programmatic or user interface. Bridges
currently exist for the TensorFlow\* and MXNet\* frameworks.
.. figure:: graphics/bridge-to-graph-compiler.png
:width: 733px
:alt: JiT compiling of a computation
:abbr:`Just-in-Time (JiT)` Compiling for computation
Once connected via the bridge, the framework can then run and train a deep
learning model with various workloads on various backends using nGraph Compiler
as an optimizing compiler available through the framework.
.. _mxnet_intg:
MXNet\* bridge
===============
* See the README on `nGraph-MXNet`_ Integration.
* **Testing latency for Inference**: See the :doc:`frameworks/testing-latency`
doc for a fully-documented example how to compile and test latency with an
MXNet-supported model.
* **Training**: For experimental or alternative approaches to distributed training
methodologies, including data parallel training, see the MXNet-relevant sections
of the docs on :doc:`distr/index` and :doc:`How to <howto/index>` topics like
:doc:`howto/distribute-train`.
.. _tensorflow_intg:
TensorFlow\* bridge
===================
See the `ngraph tensorflow bridge README`_ for how to install the `DSO`_ for the
nGraph-TensorFlow bridge.
.. _nGraph-MXNet: https://github.com/NervanaSystems/ngraph-mxnet/blob/master/README.md
.. _MXNet: http://mxnet.incubator.apache.org
.. _DSO: http://csweb.cs.wfu.edu/%7Etorgerse/Kokua/More_SGI/007-2360-010/sgi_html/ch03.html
.. _being the fastest: https://github.com/soumith/convnet-benchmarks
.. _ngraph tensorflow bridge README: https://github.com/NervanaSystems/ngraph-tf/blob/master/README.md
.. frameworks/generic-configs.rst:
Configurations available to any framework
#########################################
Enabling Deep Learning paradigms
================================
Framework architects or engineers who can't quite find what they need among
the existing DL tools may need to build something new off a "stock" framework,
or someting entirely from scratch. For this category of developer, we have
:doc:`documented several ways <../howto/index>` you can incorporate built-in
compiler support for users of your framework; this includes out-of-box support
for things like Intel® MKL-DNN and PlaidML when your framework supports nGraph
as a "backend" or engine.
.. important:: nGraph does not provide an interface for "users" of frameworks
(for example, we cannot dictate or control how Tensorflow* or MXNet* presents
interfaces to users). Please keep in mind that designing and documenting
the :abbr:`User Interface (UI)` of step 3 above is entirely in the realm
of the framework owner or developer and beyond the scope of the nGraph
Compiler stack. However, any framework can be designed to make direct use
of nGraph Compiler stack-based features and then expose an accompanying UI,
output message, or other detail to a user.
The nGraph :abbr:`IR Intermediate Representation` is format that can understand
inputs from a framework. Today, there are two primary tasks that can be accomplished
in the “bridge code” space of the nGraph IR:
#. Compiling a dataflow graph
#. Executing a pre-compiled graph.
See the :doc:`../framework-integration-guides` for how we built bridges with our
initially-supported frameworks. For more in-depth help in writing things like
graph optimizations and bridge code, we provide articles on how to
:doc:`../fusion/index`, and programmatically :doc:`../howto/execute` that can
target various compute resources using nGraph when a framework provides some
inputs to be computed.
.. note:: Configuration options can be added manually on the command line or via
scripting. Please keep in mind that fine-tuning of parameters is as much of
an art as it is a science; there are virtually limitless ways to do so and
our documentation provides only a sampling.
Integrating nGraph with new frameworks
======================================
Integrating new frameworks
==========================
This section details some of the *configuration options* and some of the
*environment variables* that can be used to tune for optimal performance when
......@@ -78,7 +33,7 @@ something like:
FMV
===
---
FMV stands for :abbr:`Function Multi-Versioning`, and it can also provide a
number of generic ways to patch or bring architecture-based optimizations to
......@@ -90,9 +45,8 @@ for Intel® Architecture, and it includes at least one older CPU, the
`following article may be helpful`_.
Training Deep Neural Networks
==============================
-----------------------------
Before tweaking various environment variables, be aware that how the computation
gets executed depends upon the ordering of the data format that the model is
......@@ -108,6 +62,7 @@ For CPU (and most cuDNN) backends, the preferred layout is currently ``NCHW``.
* **H** -- Height of the image
* **W** -- Width of the image
Intel® Math Kernel Library for Deep Neural Networks
---------------------------------------------------
......@@ -127,7 +82,7 @@ additional component to be able to use these configuration settings.
nGraph-enabled Intel® Xeon®
============================
---------------------------
The list below includes recommendations on data layout, parameters, and
application configuration to achieve best performance running DNN workloads on
......
.. frameworks/index.rst:
#####################
Connecting Frameworks
#####################
.. TODO update CODEOWNERS for this new structure
Current framework integrations
==============================
.. toctree::
:maxdepth: 1
tensorflow_integ.rst
mxnet_integ.rst
onnx_integ.rst
paddle_integ.rst
validated/testing-latency.rst
A framework is "supported" when there is a framework :term:`bridge` that can be
cloned from one of our GitHub repos and built to connect to nGraph device backends,
all the while maintaining the framework's programmatic or user interface. Bridges
currently exist for the TensorFlow\* and MXNet\* frameworks.
.. figure:: ../graphics/bridge-to-graph-compiler.png
:width: 733px
:alt: JiT compiling of a computation
:abbr:`Just-in-Time (JiT)` Compiling for computation
Once connected via the bridge, the framework can then run and train a deep
learning model with various workloads on various backends using nGraph Compiler
as an optimizing compiler available through the framework.
While a :abbr:`Deep Learning (DL)` :term:`framework` is ultimately meant for
end use by data scientists, or for deployment in cloud container environments,
nGraph Core ops and the nGraph C++ Library are designed for framework builders
themselves. We invite anyone working on new and novel frameworks or neural
network designs to explore our highly-modular stack of components that can
network designs to explore our highly-modularized stack of components that can
be implemented or integrated in virtually limitless ways.
Please read the articles in this section if you are considering incorporating
......@@ -17,61 +45,10 @@ design. Articles here are also useful if you are working on something
built-from-scratch, or on an existing framework that is less widely-supported
than the popular frameworks like TensorFlow and PyTorch.
.. toctree::
:maxdepth: 1
generic-configs.rst
testing-latency.rst
validation.rst
Understanding users of frameworks
=================================
A data scientist or ML engineer may not initially know which framework is the
"best" framework to use to start working on his or her problem set. While there
are several to choose from, it can be daunting and time consuming to scope the
wide array of features and customization options offered by some of the more
popular frameworks:
#. First **find** a tested and working DL model that does something *similar*
to what the data scientist or ML engineer wants to do. To assist with this
stage, we've already provided organized tables of :doc:`validation` examples.
#. Next, **replicate** that result using well-known datasets to confirm that the
model does indeed work. To assist with this stage, we've released several
:doc:`pip installation options <../framework-integration-guides>` that can
be used to test basic examples.
#. Finally, **modify** some aspect: add new datasets, or adjust an algorithm's
parameters to hone in on specifics that can better train, forecast, or predict
scenarios modeling the real-world problem. This is also the stage where it
makes sense to `tune the workload to extract best performance`_.
.. important:: nGraph does not provide an interface for "users" of frameworks
(for example, we cannot dictate or control how Tensorflow* or MXNet* presents
interfaces to users). Please keep in mind that designing and documenting
the :abbr:`User Interface (UI)` is entirely in the realm of the framework owner
or developer and beyond the scope of the nGraph Compiler stack. However, any
framework can be designed to make direct use of nGraph Compiler stack-based
features and then expose an accompanying UI, output message, or other detail
to a user.
Clearly, one challenge of the framework developer is to differentiate from
the pack by providing a means for the data scientist to obtain reproducible
results. The other challenge is to provide sufficient documentation, or to
provide sufficient hints for how to do any "fine-tuning" for specific use cases.
With the nGraph Compiler stack powering your framework, it becomes much easier
to help your users get reproducible results with nothing more complex than the
CPU that powers their operating system.
In general, the larger and more complex a framework is, the harder it becomes
to navigate and extract the best performance; configuration options that are
enabled by "default" from the framework side can sometimes slow down compilation
without the developer being any the wiser. Sometimes only `a few small`_
adjustments can increase performance. Likewise, a minimalistic framework that
is designed around one specific kind of model can sometimes offer significant
performance-improvement opportunities by lowering overhead.
See :doc:`generic-configs` to get started.
.. figure:: ../graphics/translation-flow-to-ng-fofx.png
:width: 725px
:alt: Translation flow to nGraph function graph
.. _tune the workload to extract best performance: https://ai.intel.com/accelerating-deep-learning-training-inference-system-level-optimizations
......
.. mxnet_integ.rst:
MXNet\* bridge
===============
* See the `README`_ on nGraph-MXNet repo.
* **Testing inference latency**: See the :doc:`validated/testing-latency`
doc for a fully-documented example how to compile and test latency with an
MXNet-supported model.
* **Training**: For experimental or alternative approaches to distributed
training methodologies, including data parallel training, see the
MXNet-relevant sections of the docs on :doc:`../distr/index` and
:doc:`How to <../howto/index>` topics like :doc:`../howto/distribute-train`.
.. _README: https://github.com/NervanaSystems/ngraph-mxnet/blob/master/README.md
\ No newline at end of file
.. onnx_integ.rst:
ONNX & ONNXIFI
==============
\ No newline at end of file
.. paddle_integ.rst:
PaddlePaddle
============
.. tensorflow_integ.rst:
TensorFlow\* bridge
===================
See the `ngraph tensorflow bridge README`_ for how to install the `DSO`_ for the
nGraph-TensorFlow bridge.
.. _DSO: http://csweb.cs.wfu.edu/%7Etorgerse/Kokua/More_SGI/007-2360-010/sgi_html/ch03.html
.. _ngraph tensorflow bridge README: https://github.com/NervanaSystems/ngraph-tf/blob/master/README.md
.. frameworks/validation.rst:
.. frameworks/validated/list.rst:
##############################
Validated Models and Workloads
##############################
#################################
Validated workloads by framework
#################################
We validated performance [#f1]_ for the following TensorFlow\* and MXNet\* workloads:
We validated performance [#f1]_ for the following TensorFlow\* and MXNet\*
workloads:
* :ref:`tensorflow_valid`
* :ref:`mxnet_valid`
* :ref:`onnx_valid`
* :doc:`testing-latency`
.. _tensorflow_valid:
TensorFlow
==========
......@@ -36,6 +46,9 @@ TensorFlow
DRAW, Image generation
A3C, Reinforcement learning
.. _mxnet_valid:
MXNet
=====
......@@ -63,8 +76,11 @@ MXNet
DCGAN, Generative adversarial network
A3C, Reinforcement learning
.. _onnx_valid:
ONNX
=====
====
Additionally, we validated the following workloads are functional through
`nGraph ONNX importer`_:
......
.. frameworks/testing_latency:
.. frameworks/validated/testing-latency.rst:
Testing latency
......@@ -23,7 +23,7 @@ reasons outlined in our `features`_ documentation.
the experimental backend if you already use the ngraph-mxnet Github repo
.. figure:: ../graphics/ngraph-mxnet-models.png
.. figure:: ../../graphics/ngraph-mxnet-models.png
:width: 533px
:alt: Up to 45X faster
......@@ -85,14 +85,14 @@ into a static graph. Also note that any model with a saved checkpoint can be
considered a "static graph" in nGraph. For this example, we'll presume that the
model is pre-trained.
.. literalinclude:: ../../../examples/subgraph_snippets/mxnet-gluon-example.py
.. literalinclude:: ../../../../examples/subgraph_snippets/mxnet-gluon-example.py
:language: python
:lines: 17-32
To load the model into nGraph, we simply bind the symbol into an Executor.
.. literalinclude:: ../../../examples/subgraph_snippets/mxnet-gluon-example.py
.. literalinclude:: ../../../../examples/subgraph_snippets/mxnet-gluon-example.py
:language: python
:lines: 34-35
......@@ -101,7 +101,7 @@ the graph, and in the case of Resnet, sends the entire graph to nGraph for
compilation. This produces a single call to an NNVM ``NGraphSubgraphOp`` embedded
with the compiled model. At this point, we can test the model's performance.
.. literalinclude:: ../../../examples/subgraph_snippets/mxnet-gluon-example.py
.. literalinclude:: ../../../../examples/subgraph_snippets/mxnet-gluon-example.py
:language: python
:lines: 40-48
......
.. fusion/index.rst:
Optimize Graphs
===============
with nGraph Compiler fusions
----------------------------
The nGraph Compiler is an optimizing compiler. As such, it provides a way to
capture a given :term:`function graph` and perform a series of optimization
passes over that graph. The result is a semantically-equivalent graph that, when
executed using any |InG| :doc:`backend <../programmable/index>`, has optimizations
inherent at the hardware level: superior runtime characteristics to increase
training performance or reduce inference latency.
There are several ways to describe what happens when we capture and translate
the framework's output of ops into an nGraph graph. :term:`Fusion` is the term
we shall use in our documentation; the action also can be described as:
*combining*, *folding*, *squashing*, *collapsing*, or *merging* of graph
functions.
Optimization passes may include algebraic simplifications, domain-specific
simplifications, and fusion. Most passes share the same mode of operation (or
the same operational structure) and consist of various stages (each one a
:term:`step`) where a developer can experiment with the intercepted or dynamic
graph. These steps may be cycled or recycled as needed:
#. Locate a list of potentially-transformable subgraphs in the given graph.
#. Transform the selected candidates into semantically-equivalent subgraphs
that execute faster, or with less memory (or both).
#. Verify that the optimization pass performs correctly, with any or all expected
transformations, with the ``NGRAPH_SERIALIZE_TRACING`` option, which
serializes a graph in the `json` format after a pass.
#. Measure and evaluate your performance improvements with ``NGRAPH_CPU_TRACING``,
which produces timelines compatible with ``chrome://tracing``.
Optimizations can be experimented upon without using any backend by registering
a pass with pass manager (``Manager``), calling ``run_passes`` on a function, and
then inspecting the transformed graph.
Optimization passes can be programmed ahead of time if you know or can predict
what your graph will look like when it's ready to be executed (in other words:
which `ops` can be automatically translated into :doc:`nGraph Core ops <../ops/index>`).
The ``Interpreter`` is simply a backend providing reference implementations of
ngraph ops in C++, with the focus on simplicity over performance.
Example
-------
.. fusion/index.rst:
Pattern matcher
###############
* :ref:`overview`
* :ref:`passes_list`
* :ref:`more_detail`
* :ref:`passes_examples`
* :doc:`optimize-graphs`
.. _overview:
Generic graph optimizers: Optimization passes
=============================================
The pass manager infrastructure in nGraph makes it easy to reuse and mix the
generic optimization passes. It also permits you to roll your own device-specific
optimizations; that is, the same unified interface and APIs may be used to
cover both things.
Invoking these passes is fairly straightforward:
#. Create a "pass manager" object.
#. Populate it with the desired passes.
#. Pass to it a pointer to your unoptimized graph, and it’ll return a pointer
to an optimized graph.
nGraph Core includes a large library of hardware-agnostic passes -- passes useful
for almost any kind of hardware backend. Some of these passes should be familiar
to people who are comfortable with classical compiler designs. Others, like the
reshape/transpose elimination and sinking passes, are quite specific to deep
learning.
Let’s take a look at some of these passes.
.. _passes_list:
List of Passes
==============
* :ref:`algebraic_simpl`
* :ref:`common_subex_elim`
* :ref:`constant_fold`
* :ref:`reshape_transpose_elim`
* :ref:`reshape_transpose_sink`
.. _algebraic_simpl:
Algebraic Simplification
------------------------
The **Algebraic Simplification** pass implements what amounts to a "grab bag" of
algebraic simplification rules. It does some basic things like rewrite "zero
times x" to simply "zero", or "zero plus x" to plain "x".
It can also do a number of tricks more specific to deep learning. For example,
if we discover that a tensor is being sliced up by adjacent segments, only to
have those slices concatenated back together again, we can skip the slicing and
concatting altogether.
Or, if a tensor is being padded, but the actual width of the padding is zero
all around, we can skip the padding step entirely.
Several other transformations like this are implemented in the algebraic
simplification pass. And while none of these transformations might seem
particularly impressive on their own, when everything comes together the
results of this pass often yield improvement even on the initial graph straight
out of the bridge. This pass is also quite important as a "glue" pass that can
be used to clean up and/or re-simplify after other passes have done their own
tricks.
.. _common_subex_elim:
Common Subexpression Elimination
--------------------------------
.. _constant_fold:
Constant Folding
----------------
.. _core_fusion:
Core Fusion
-----------
.. _reshape_transpose_elim:
Reshape/Transpose Elimination
-----------------------------
The pass called **Reshape/Transpose Elimination** will find and optimize where
we can "push" two ``Transpose`` ops through a matrix multiplication. For example,
if you have two matrices (say, *foo* and *bar*), both of these matrices will be
transposed (to produce *foo.t* and *bar.t*, respectively), aftew which *foo.t*
and *bar.t* get multiplied together.
Often a more efficient way to implement this is to switch the order of the
arguments *foo* and *bar*, multiply them together, and then transpose the output
of the matmul. Effectively, this cuts two `Transpose` operations down to just
one, where the **Reshape/Transpose** elimination will do that rewrite for you.
Another common pattern can be optimized via nGraph is the case where two
transpositions cancel each other out. One example of this is taking the
"Transpose" of the transpose of a matrix, though actually a more common case is
when the graph is translating among different batch formats. We can often move
these operations around through a process called **Reshape sinking/swimming**,
and in cases where two transposes wind up canceling each other out, we can cut
them both out of the graph.
.. _reshape_transpose_sink:
``Reshape/Transpose Sinking``
-----------------------------
.. _elementzero_tensor_elim:
``Zero-Element Tensor Elimination``
-----------------------------------
.. _more_detail:
More detail
-----------
Let us first consider a simple example. A user would like to execute a graph
that describes the following arithmetic expression:
......@@ -80,4 +171,35 @@ optimizer.
graph-rewrite.rst
passes-that-use-matcher.rst
optimize-graphs.rst
.. _passes_examples:
Examples of Passes
==================
The effectiveness of these passes is more striking to look at in terms of an
actual input graph, such as one from the framework bridge.
*Figure 0* shows an excerpt from ``MobileNet v1``, a topology which makes heavy
use of group convolution.
.. _figure-mobilenet-gc:
.. figure:: ../graphics/mobilenet-group-conv.png
:width: 700px
:alt:
Figure 0: Each of these grouped convolution complexes -- the
operations within the rectangles on the left -- is very wide; each is too
wide to fit legibly on the illustration.
The group convolution fusion is able to replace each of those giant subgraphs
with a single CPU group convolution node. This ends up being a win in several
ways:
* sheer node count,
* mappability to MKL-DNN (which has an accelerated group convolution implementation),
* elimination of unnecessary temporaries, and so on.
\ No newline at end of file
digraph G {
Label_0 -> Max_2
Constant_1 -> Max_2
Label_0 [shape=ellipse color=black]
Constant_1 [shape=ellipse color=black]
Max_2 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Negative_1 -> Negative_2;
Parameter_0 [shape=box color=blue]
Negative_1 [shape=ellipse color=black]
Negative_2 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Abs_1 -> Negative_2 -> Negative_3;
Parameter_0 [shape=box color=blue]
Abs_1 [shape=ellipse color=black]
Negative_2 [shape=ellipse color=black]
Negative_3 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Add_2
Parameter_1 -> Add_2
Add_2 -> Abs_3 -> Negative_4 -> Negative_5
Parameter_0 [shape=box color=blue]
Parameter_1 [shape=box color=blue]
Add_2 [shape=ellipse color=black]
Abs_3 [shape=ellipse color=black]
Negative_4 [shape=ellipse color=black]
Negative_5 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Add_2
Parameter_1 -> Add_2
Add_2 -> Negative_3 -> Negative_4
Parameter_0 [shape=box color=blue]
Parameter_1 [shape=box color=blue]
Add_2 [shape=ellipse color=black]
Negative_3 [shape=ellipse color=black]
Negative_4 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Sub_2
Parameter_1 -> Sub_2
Sub_2 -> Negative_3 -> Negative_4
Parameter_0 [shape=box color=blue]
Parameter_1 [shape=box color=blue]
Sub_2 [shape=ellipse color=black]
Negative_3 [shape=ellipse color=black]
Negative_4 [shape=ellipse color=black]
}
digraph G {
Parameter_1 -> Negative_2 -> Negative_3;
Parameter_1 [shape=box color=blue]
Negative_2 [shape=ellipse color=black]
Negative_3 [shape=ellipse color=black]
}
digraph G {
Label_0 -> Negative_1 -> Negative_2;
Label_0 [shape=ellipse color=black]
Negative_1 [shape=ellipse color=black]
Negative_2 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Add_2
Constant_1 -> Add_2
Parameter_0 [shape=box color=blue]
Constant_1 [shape=ellipse color=black]
Add_2 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Add_3
Constant_1 -> Broadcast_2
Broadcast_2 -> Add_3
Parameter_0 [shape=box color=blue]
Constant_1 [shape=ellipse color=black]
Broadcast_2 [shape=ellipse color=black]
Add_3 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Add_2
Constant_1 -> Broadcast_2
Constant_1 -> Add_3
Parameter_0 [shape=box color=blue]
Constant_1 [shape=ellipse color=black]
Broadcast_2 [shape=ellipse color=black]
Add_3 [shape=ellipse color=black]
}
digraph G {
Constant_1 -> Skip_2
Label_3 -> Add_4
Skip_2 -> Add_4
Constant_1 [shape=ellipse color=black]
Skip_2 [shape=ellipse color=black]
Label_3 [shape=ellipse color=black]
Add_4 [shape=ellipse color=black]
}
digraph G {
Parameter_0 -> Add_2
Constant_1 -> Add_2
Add_2 -> Add_3
Constant_2 -> Add_3
Add_3 -> Add_4
Constant_3 -> Add_4
Parameter_0 [shape=box color=blue]
Constant_1 [shape=ellipse color=black]
Constant_2 [shape=ellipse color=black]
Constant_3 [shape=ellipse color=black]
Add_2 [shape=ellipse color=black]
Add_3 [shape=ellipse color=black]
Add_4 [shape=ellipse color=black]
}
digraph G {
Label_0 -> Add_2
Constant_1 -> Add_2
Label_0 [shape=ellipse color=black]
Constant_1 [shape=ellipse color=black]
Add_2 [shape=ellipse color=black]
}
.. fusion/optimize-graphs:
Optimize Graphs
===============
with nGraph Compiler fusions
----------------------------
The nGraph Compiler is an optimizing compiler. As such, it provides a way to
capture a given :term:`function graph` and perform a series of optimization
passes over that graph. The result is a semantically-equivalent graph that, when
executed using any :doc:`backend <../backend-support/index>`, has optimizations
inherent at the hardware level: superior runtime characteristics to increase
training performance or reduce inference latency.
There are several ways to describe what happens when we capture and translate
the framework's output of ops into an nGraph graph. :term:`Fusion` is the term
we shall use in our documentation; the action also can be described as:
*combining*, *folding*, *squashing*, *collapsing*, or *merging* of graph
functions.
Optimization passes may include algebraic simplifications, domain-specific
simplifications, and fusion. Most passes share the same mode of operation (or
the same operational structure) and consist of various stages (each one a
:term:`step`) where a developer can experiment with the intercepted or dynamic
graph. These steps may be cycled or recycled as needed:
#. Locate a list of potentially-transformable subgraphs in the given graph.
#. Transform the selected candidates into semantically-equivalent subgraphs
that execute faster, or with less memory (or both).
#. Verify that the optimization pass performs correctly, with any or all expected
transformations, with the ``NGRAPH_SERIALIZE_TRACING`` option, which
serializes a graph in the `json` format after a pass.
#. Measure and evaluate your performance improvements with ``NGRAPH_CPU_TRACING``,
which produces timelines compatible with ``chrome://tracing``.
Optimizations can be experimented upon without using any backend by registering
a pass with pass manager (``Manager``), calling ``run_passes`` on a function, and
then inspecting the transformed graph.
Optimization passes can be programmed ahead of time if you know or can predict
what your graph will look like when it's ready to be executed (in other words:
which `ops` can be automatically translated into :doc:`nGraph Core ops <../ops/index>`).
The ``Interpreter`` is simply a backend providing reference implementations of
ngraph ops in C++, with the focus on simplicity over performance.
......@@ -41,6 +41,25 @@ Glossary
of a graph's functional operations (``ops``) into one or more of
nGraph's core ops.
ISA
An acronym for "Instruction Set Architecture," an ISA is machine code that
is compatible with the underlying silicon architecture. A realization of
an ISA is called an *implementation*. An ISA permits multiple
implementations that may vary in performance, physical size, memory use or
reuse, and monetary cost among other things. An ISA defines everything a
machine-language programmer needs to know in order to program a particular
backend device. What an ISA defines will differ among ISAs; in general, it
defines things like:
- supported *data types*;
- physical *states* available, such as the main memory and registers;
- *semantics*, such as the memory consistency and addressing modes;
- *low-level machine instructions* that comprise a machine language;
- and the *input/output model*.
Be careful to not confuse ISAs with microarchitectures.
op
An op represents an operation. Ops are stateless and have zero
......
.. graph-basics:
#############
Graph Basics
#############
Overview
========
This section provides a brief overview of some concepts used in the nGraph
Library. It also introduces new ideas regarding our unique departure from the
first generation of deep learning software design.
The historical dominance of GPUs at the beginning of the current
:abbr:`DL (Deep Learning)` boom means that many framework authors made
GPU-specific design decisions at a very deep level. Those assumptions created
an "ecosystem" of frameworks that all behave essentially the same at the
framework's hardware abstraction layer:
* The framework expects to own memory allocation.
* The framework expects the execution device to be a GPU.
* The framework expects complete control of the GPU, and that the device doesn't
need to be shared.
* The framework expects that developers will write things in a `SIMT-friendly`_
manner.
Some of these design decisions have implications that do not translate well to
the newer, more demanding generation of **adaptable software**. For example,
most frameworks that expect full control of the GPU devices experience their
own per-device inefficiency for resource utilization whenever the system is
oversubscribed.
Most framework owners will tell you to refactor the model in order to remove
operations that are not implemented on the GPU, rather than attempt to run
multiple models in parallel, or attempt to figure out how to build graphs
more efficiently. In other words, if a model requires any operation that
hasn't been implemented on GPU, it must wait for copies to propagate from
the CPU to the GPU(s). An effect of this inefficiency is that it slows down
the system. For data scientists who are facing a large curve of uncertainty in
how large (or how small) the compute-power needs of their model will be,
investing heavily in frameworks reliant upon GPUs may not be the best decision.
Meanwhile, the shift toward greater diversity in deep learning **hardware devices**
requires that these assumptions be revisited. Incorporating direct support for
all of the different hardware targets out there, each of which has its own
preferences when it comes to the above factors, is a very heavy burden
on framework owners.
Adding the nGraph compiler to the system lightens that burden by raising the
abstraction level, and by letting any hardware-specific backends make these
decisions automatically. The nGraph Compiler is designed to be able to take into
account the needs of each target hardware platform, and to achieve maximum
performance.
This makes things easier on framework owners, but also (as new models are developed)
on data scientists, who will not have to keep in mind nearly as many low-level
hardware details when architecting their models with layers of complexity for
anything other than a :abbr:`Just-in-Time (JIT)` compilation.
While the first generation frameworks tended to need to make a tradeoff between
being "specialized" and "adaptable" (the trade-off between training and inference),
nGraph Library permits algorithms implemented in a DNN to be both specialized
and adaptable. The new generation of software design in and around AI ecosystems
can and should be much more flexible.
* :ref:`framework_bridges`
* :ref:`about_transformers`
* :ref:`graph_shaping`
.. _framework_bridges:
Framework bridges
=================
In the nGraph ecosystem, a framework is what the data scientist uses to solve
a specific (and usually large-scale) deep learning computational problem with
the use of a high-level, data science-oriented language.
A framework :term:`bridge` is a software layer (typically a plugin *for* or an
extension *to* a framework) that translates the data science-oriented language
into a compute-oriented language called a :term:`data-flow graph`. The bridge
can then present the problem to the nGraph :abbr:`Abstraction Layer (AL)` which
is responsible for execution on an optimized backend by performing graph
transformations that replace subgraphs of the computation with more optimal
(in terms of machine code) subgraphs. Throughout this process, ``ops`` represent
tensor operations.
Either the framework can provide its own graph of functions to be compiled and
optimized via :abbr:`Ahead-of-Time (AoT)` compilation to send back to the
framework, or an entity (framework or user) who requires the flexibility of
shaping ops directly can use our graph construction functions to experiment with
building runtime APIs for their framework, thus exposing more flexible multi-theaded compute
power options to
See the section on :doc:`howto/execute` for a detailed walk-through describing
how this translation can be programmed to happen automatically via a framework.
.. _about_transformers:
Transformer ops
================
A framework bridge may define its own bridge-specific ops, as long as they can be
converted to transformer ops. This is usually achieved by them first being
converted to core ops on the way. For example, if a framework has a
``PaddedCell`` op, nGraph pattern replacement facilities can be used to convert
it into one of our core ops. More detail on transformer ops will be coming soon.
.. _graph_shaping:
Graph shaping
=============
Tensors
-------
*Tensors* are maps from coordinates to scalar values, all of the same
type, called the *element type* of the tensor. Coordinates are tuples
of non-negative integers; all the coordinates for a tensor have the
same length, called the *rank* of the tensor. We often use
:math:`n`-tensor for tensors with rank :math:`n`.
The :term:`shape` of a tensor is a tuple of non-negative integers that
represents an exclusive upper bound for coordinate values. A tensor has an
element for every coordinate less than the shape, so the *size* of the tensor
is the product of the values in the shape.
An :math:`n`-dimensional array is the usual implementation for a
tensor, and the two terms are often used interchangeably, but a tensor
could just as easily be represented by a function that returns 0 for
every coordinate or a function that adds the elements of two other
tensors at the same coordinate and returns that sum.
Ops
---
A computation graph is a composition of tensor computations, called
``ops``, which are nodes in the graph. In the graph, every :term:`op`
*input* must be associated with an op *output*, and every op output
must have a fixed element type and shape to correspond with the
tensors used in the computation. Every op has zero or more inputs and
zero or more outputs. The outputs represent tensors that will be
provided during execution. Ops may also have additional attributes
that do not change during execution.
Every `op` is a `Node`, but not all nodes are ops. This is because
pattern graphs are another kind of graph that includes ops combined
with nodes that describe how to match subgraphs during graph
optimization.
Constructed ops have element types and shapes for each of their outputs, which
are determined during op construction from the element types and shapes
associated with the inputs, as well as additional attributes of the ops. For
example, tensor addition is defined for two tensors of the same shape and size
and results in a tensor with the same element type and shape:
.. math::
(A+B)_I = A_I + B_I
Here, :math:`X_I` means the value of a coordinate :math:`I` for the tensor
:math:`X`. So the value of the sum of two tensors is a tensor whose value at a
coordinate is the sum of the elements' two inputs. Unlike many frameworks, it
does not require the user or the framework bridge to specify anything about
storage or arrays.
An ``Add`` op is used to represent an elementwise tensor sum. To
construct an Add op, each of the two inputs of the ``Add`` must be
assigned some output of some already-created op. All outputs of
constructed ops have element types and shapes, so when the Add is
constructed, it verifies that the two input tensors have the same
element type and shape and then sets its output to have the same
element type and shape.
Since all nodes supplying outputs for inputs to a new node must exist
before the new node can be created, it is impossible to construct a
cyclic graph. Furthermore, type-checking is performed as the ops are
constructed.
Functions
---------
Ops are grouped together in a ``Function``, which describes a
computation that can be invoked on tensor arguments to compute tensor
results. When called by a bridge, the bridge provides tensors in the
form of row-major arrays for each argument and each computed
result. The same array can be used for more than one argument, but
each result must use a distinct array, and argument arrays cannot be
used as result arrays.
Function definition begins with creating one or more ``Parameter``
ops, which represent the tensors that will be supplied as arguments to
the function. Parameters have no inputs and attributes for the
element type and shape of the tensor that will be provided as an
argument. The unique output of the ``Parameter`` will have the
provided element type and shape.
A ``Function`` has ``Parameters``, a vector of ``Parameter`` ops,
where no ``Parameter`` op may appear more than once in the vector. A
``Parameter`` op has no inputs and attributes for its shape and
element type; arrays passed to the function must have the same shape
and element type as the corresponding parameter. The ``Function``
also has ``Nodes``, a vector of ops that are the results being
computed.
During execution, the output of the nth ``Parameter`` op will be the tensor
corresponding to the array provided as the nth argument, and the outputs
of all result ops will be written into the result arrays in row-major
order.
An Example
==========
::
#include <memory>
#include <ngraph.hpp>
using ngraph;
// f(a, b, c) = (a + b) * c
void make_function()
{
// First construct the graph
Shape shape{32, 32};
auto a = std::make_shared<op::Parameter>(element::f32, shape);
auto b = std::make_shared<op::Parameter>(element::f32, shape);
auto c = std::make_shared<op::Parameter>(element::f32, shape);
auto t0 = std::make_shared<op::Add>(a, b);
auto t1 = std::make_shared<op::Multiply>(t0, c);
auto f = std::make_shared<Function>(Nodes{t1}, Parameters{a, b, c});
}
We use shared pointers for all ops. For each parameter, we need to
element type and shape attributes. When the function is called, each
argument must conform to the corresponding parameter element type and
shape.
During typical graph construction, all ops have one output and some
number of inputs, which makes it easy to construct the graph by
assigning each unique output of a constructor argument node to an
input of the op being constructed. For example, `Add` need to supply
node outputs to each of its two inputs, which we supply from the
unique outputs of the parameters `a` and `b`.
We do not perform any implicit element type coercion or shape
conversion (such as broadcasts) since these can be
framework-dependent, so all the shapes for the add and multiply must
be the same. If there is a mismatch, the constructor will throw an
exception.
After the graph is constructed, we create the function, passing the
`Function` constructor the nodes that are results and the parameters
that are arguments.
.. _SIMT-friendly: https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads
......@@ -137,7 +137,7 @@ update computation for ``N`` will be given by the node
The different update nodes will share intermediate computations. So to
get the updated values for the weights as computed with the specified
:doc:`backend <../programmable/index>`,
:doc:`backend <../backend-support/index>`.
.. literalinclude:: ../../../examples/mnist_mlp/mnist_mlp.cpp
:language: cpp
......
......@@ -6,11 +6,11 @@ Train using multiple nGraph CPU backends with data parallel
In the :doc:`previous section <../howto/derive-for-training>`, we described the
steps needed to create a "trainable" nGraph model. Here we demonstrate how to
train a data parallel model by distributing the graph across devices.
train a data parallel model by distributing the graph to more than one device.
As of release version 0.12, the default build is with OpenMPI. To use the
`Intel MLSL`_ library, set the following compilation flag at build time:
To use this mode of training, create an nGraph build with the cmake flag
``-DNGRAPH_DISTRIBUTED_ENABLE=TRUE``.
To deploy data-parallel training on backends supported by nGraph API, the
......@@ -20,14 +20,13 @@ To deploy data-parallel training on backends supported by nGraph API, the
.. literalinclude:: ../../../examples/mnist_mlp/dist_mnist_mlp.cpp
:language: cpp
:lines: 180-196
:emphasize-lines: 9-12
:emphasize-lines: 8-11
We need to initialize and finalize distributed training with ``Distributed`` object;
see the `full raw code`_.
Finally, to run the training using two nGraph devices, invoke :command:`mpirun` which is a distributed with
`Intel MLSL`_ library.
This will launch two nGraph CPU backends.
Finally, to run the training using two nGraph devices, invoke :command:`mpirun` which
is distributed with `Intel MLSL`_ library. This will launch two nGraph CPU backends.
.. code-block:: console
......
......@@ -18,9 +18,9 @@ directory. We'll be deconstructing the steps that must happen (either programmat
or manually) in order to successfully execute a computation:
* :ref:`define_cmp`
* :ref:`specify_bkd`
* :ref:`specify_backend`
* :ref:`compile_cmp`
* :ref:`allocate_bkd_storage`
* :ref:`allocate_backend_storage`
* :ref:`initialize_inputs`
* :ref:`invoke_cmp`
* :ref:`access_outputs`
......@@ -108,7 +108,7 @@ function, in the order they are to be passed to the compiled function. A
the computation of the results.
.. _specify_bkd:
.. _specify_backend:
Specify the backend upon which to run the computation
=====================================================
......@@ -126,10 +126,10 @@ There are two backends for the CPU: the optimized ``"CPU"`` backend, which uses
the `Intel MKL-DNN`_, and the ``"INTERPRETER"`` backend, which runs reference
versions of kernels that favor implementation clarity over speed. The
``"INTERPRETER"`` backend can be slow, and is primarily intended for testing.
See the documentation on :doc:`runtime options for various backends <../programmable/index>`
See the documentation on :doc:`runtime options for various backends <../backend-support/index>`
for additional details.
To continue with our original example and select the ``"CPU"`` backend:
To continue with our original example and select the ``"CPU_Backend"``:
.. literalinclude:: ../../../examples/abc/abc.cpp
:language: cpp
......@@ -149,7 +149,7 @@ thread needs to execute the function at the same time, create multiple
``CallFrame`` objects from the ``ExternalFunction``.
.. _allocate_bkd_storage:
.. _allocate_backend_storage:
Allocate backend storage for the inputs and outputs
===================================================
......@@ -175,7 +175,8 @@ the three parameters and the return value.
Each tensor is a shared pointer to a :term:`Tensorview`, which is the interface
backends implement for tensor use. When there are no more references to the
tensor view, it will be freed when convenient for the backend. See the
:doc:`../programmable/index` documentation for details on ``Tensor``.
:doc:`../backend-support/cpp-api` documentation for details on how to work
with ``Tensor``.
.. _initialize_inputs:
......
.. howto/index:
How to
======
Constructing Graphs
===================
.. toctree::
:maxdepth: 1
......
......@@ -17,126 +17,75 @@
.. This documentation is available online at
.. https://ngraph.nervanasys.com/docs/latest
######################
nGraph Compiler stack
######################
Welcome
=======
See the latest :doc:`project/release-notes`.
nGraph is an open-source C++ library, compiler stack, and runtime accelerator
for software and neural network engineering within the :abbr:`Deep Learning (DL)`
ecosystem. nGraph simplifies development and makes it possible to design, write,
compile, and deploy :abbr:`Deep Neural Network (DNN)`-based solutions that can
be adapted and deployed across many frameworks and backends. See our project
:doc:`project/about` and `ecosystem`_ for more details.
.. figure:: graphics/ngcompiler-ecosystem.png
:width: 650px
:alt: ecosystem
The Intel nGraph Compiler stack supports a broad ecosystem of frameworks and backends.
.. _quickstart:
Quick Start
===========
We have many documentation pages to help you get started.
* **TensorFlow or MXNet users** can get started with
:doc:`framework-integration-guides`.
* `TensorFlow bridge to nGraph`_
* `Compiling MXNet with nGraph`_
.. note:: Note that the ``pip`` package option works only with Ubuntu 16.04
or greater and Intel® Xeon® CPUs. CPUs without Intel® Advanced Vector Extensions
512 (Intel® AVX-512) will not run these packages; the alternative is to
build from source. Wider support for other CPUs will be offered starting
in early 2019.
* **Data scientists** interested in the `ONNX`_ format will find the
`nGraph ONNX companion tool`_ of interest.
* **Framework authors and architects** will likely want to :doc:`buildlb`
and learn how nGraph can be used to :doc:`howto/execute`. For examples
of generic configurations or optimizations available when designing or
bridging a framework directly with nGraph, see :doc:`frameworks/index`.
* To start learning about nGraph's set of **Core ops** and how they can
be used with Ops from other frameworks, go to :doc:`ops/index`.
* **Optimization pass writers** will find :doc:`fusion/index` useful. Also
look for our upcoming documentation on :term:`quantization`.
* For details about **PlaidML integration** and other nGraph runtime APIs,
see the section :doc:`programmable/index`.
.. csv-table::
:header: "Framework", "Bridge Available?", "ONNX Support?"
:widths: 27, 10, 10
TensorFlow, Yes, Yes
MXNet, Yes, Yes
PaddlePaddle, Coming Soon, Yes
PyTorch, No, Yes
Other, Write your own, Custom
.. toctree::
:maxdepth: 1
.. csv-table::
:header: "Backend", "Current support", "Future nGraph support"
:widths: 35, 10, 10
project/introduction.rst
Intel® Architecture Processors (CPUs), Yes, Yes
Intel® Nervana™ Neural Network Processor (NNPs), Yes, Yes
Intel® Architecture GPUs, Yes, Yes
AMD\* GPUs, via PlaidML, Yes
:abbr:`Field Programmable Gate Arrays (FPGA)` (FPGAs), Coming soon, Yes
NVIDIA\* GPUs, via PlaidML, Some
Intel Movidius™ Myriad™ 2 (VPU), Coming soon, Yes
.. toctree::
:maxdepth: 1
:caption: Framework Support
frameworks/index.rst
frameworks/validated/list.rst
frameworks/generic-configs.rst
.. note:: The code in this repo is under active development as we're continually
adding support for more kinds of DL models and ops, compiler optimizations,
and backend optimizations.
.. toctree::
:maxdepth: 1
:caption: nGraph Core
core/overview.rst
Pattern matcher <fusion/index.rst>
nGraph ops <ops/about.rst>
Graph construction <howto/index.rst>
Using the Python API <python_api/index.rst>
Compiler passes <fusion/graph-rewrite.rst>
buildlb.rst
Using the C++ API <ops/index.rst>
.. toctree::
:maxdepth: 1
:caption: Backend support
=======
backend-support/index.rst
backend-support/cpp-api.rst
Contents
========
.. toctree::
:maxdepth: 1
:caption: Python Ops for ONNX
:caption: Distributed training
distr/index.rst
python_api/index.rst
.. toctree::
:maxdepth: 1
:caption: Core Documentation
:caption: Diagnostics and visualization
diagnostics/nbench.rst
diagnostics/performance-profile.rst
diagnostics/visualize.rst
diagnostics/debug.rst
buildlb.rst
framework-integration-guides.rst
frameworks/validation.rst
frameworks/index.rst
graph-basics.rst
howto/index.rst
ops/about.rst
ops/index.rst
fusion/index.rst
programmable/index.rst
distr/index.rst
.. toctree::
:maxdepth: 2
:maxdepth: 1
:caption: Project Metadata
project/index.rst
project/release-notes.rst
project/contribution-guide.rst
project/index.rst
glossary.rst
Indices and tables
==================
......
.. about:
Architecture, Features, FAQs
############################
......@@ -168,7 +167,7 @@ added with new functions that build sub-graphs from existing core ops.
For a more detailed dive into how custom bridge code can be implemented, see our
documentation on how to :doc:`../howto/execute`. To learn how TensorFlow and
MXNet currently make use of custom bridge code, see the section on
:doc:`../framework-integration-guides`.
:doc:`../frameworks/index`.
.. figure:: ../graphics/bridge-to-graph-compiler.png
:width: 733px
......
.. code-contributor-README:
.. contribution-guide:
######################
Code Contributor Guide
######################
##################
Contribution Guide
##################
License
=======
......@@ -12,6 +12,7 @@ preferably by being contributed under the Apache 2 license. Code
contributed with another license will need the license reviewed by
Intel before it can be accepted.
Code formatting
===============
......@@ -259,5 +260,8 @@ it is automatically enforced and reduces merge conflicts.
int* z;
To contribute documentation for your code, please see the :doc:`doc-contributor-README`.
.. _Apache 2: https://www.apache.org/licenses/LICENSE-2.0
.. _repo wiki: https://github.com/NervanaSystems/ngraph/wiki
\ No newline at end of file
......@@ -99,7 +99,7 @@ and the generated output will show readers of your helpful documentation
:caption: "caption for a block of code that initializes tensors"
Our documentation practices are designed around "write once, reuse" that we can
use to prevent code bloat. See the :doc:`code-contributor-README` for our code
use to prevent code bloat. See the :doc:`contribution-guide` for our code
style guide.
......@@ -127,7 +127,7 @@ To build documentation locally, run:
.. code-block:: console
$ sudo apt-get install python3-sphinx
$ sudo apt-get install python3-sphinxcd
$ pip3 install [-I] Sphinx==1.7.5 [--user]
$ pip3 install [-I] breathe numpy [--user]
$ cd doc/sphinx/
......@@ -165,3 +165,6 @@ stable reST documentation.
.. _wiki: https://github.com/NervanaSystems/ngraph/wiki/
.. _breathe: https://breathe.readthedocs.io/en/latest/
.. _doxygen: http://www.doxygen.org/index.html
.. 45555555555555555555555555555
\ No newline at end of file
.. governance:
Governance
##########
\ No newline at end of file
.. project/index.rst
.. project/index:
#################
More about nGraph
......@@ -7,9 +7,11 @@ More about nGraph
This section contains documentation about the project and how to contribute.
.. toctree::
:maxdepth: 1
:maxdepth: 2
about.rst
release-notes.rst
code-contributor-README.rst
about.rst
other-efforts.rst
contribution-guide.rst
governance.rst
doc-contributor-README.rst
.. introduction:
############
Introduction
############
The nGraph Compiler stack provides industry-standard reference and implementation
guidelines for working with various :abbr:`Deep Learning (DL)` (DL) models and
optimizing an :abbr:`Artificial Neural Network (ANN)` (often abbreviated :term:`NN`)
to run graph-based computations for training, inference, testing, or validation.
Because today's NNs make use of many custom-purpose devices (FPGAs, GPUs, CPUs,
and custom silicon), having such a standard simplifies what would otherwise be
an enormously complex and difficult-to-scale pipeline (:ref:`Figure 3 <figure-3>`)
from "training with your favorite framework using GPUs" (:ref:`Figure 4 <figure-4>`),
to deploying that (now) pre-trained model in a datacenter or production
environment, where infrastructure owners or software developers renting anything
in a datacenter ought to be mutually concerned with **efficiency per-watt**, to
keep costs in check.
So what exactly are the motivations behind the nGraph Compiler stack?
Motivations
===========
Kernel libraries do not support graph-level optimizations
---------------------------------------------------------
A framework designed for training using GPUs requires integration with a kernel
library unique to that vendor's hardware. For example, after integration, a
kernel library can run operations that it is "familar" with optimally; however,
the graph itself within any larger :term:`NN` won't be optimal.
.. _figure-0:
.. figure:: ../graphics/framework-to-kernel-lib.png
:width: 555px
:alt:
Figure 0: Lack of graph-level optimization makes framework-to-kernel library
integration enormously inefficient. The computation graph above represents
the computation: "A plus B times C".
.. _figure-1:
.. figure:: ../graphics/framework-to-graph-opt.png
:width: 555px
:alt:
Figure 1: Notice that an operation on the constant B (in this case a ``Broadcast``)
can be done at compile time. This is an example of constant folding, and it
is not available to a device-based kernel library.
.. _figure-2:
.. figure:: ../graphics/ngraph-algebraic-simp.png
:width: 555px
:alt:
Figure 2: Finally notice that the constant has value "zero" thus the add is an
*identity* operation and can be eliminated. This is an example of **Algebraic
simplification**, and it is not available to a device-based kernel library.
After the two graph-level optimizations above (**Algebraic Simplification** and
**Constant Folding**), we now have an optimal graph: A times C. Again, kernel
libraries do not support this type of optimization. Although each implementation
can be done individually, it will eventually yield an "exploding" number of
kernels the larger and more complex an :abbr:`NN (Neural Network)` becomes. For
some insight on why this happens, see the next section.
Too Many Kernels to write
-------------------------
A typical network is constructed using some kind of language-based API, which
translates the network or :abbr:`DL (Deep Learning)` model (statically or
dynamically) into serialized graphs. Those graphs can then passed through a
compilation process (the *Graph optimization or compilation* step in
*Figure 3* below), where various graph-level optimizations, like constant folding
or fusion can happen. These processes require unique vendor-provided libraries
to communicate with a driver (possibly through OpenCL\*, CUDA\*, or SYCL\*), to
compile and execute an implementation (kernel) for a specific
:abbr:`Instruction Set Architecture (ISA)`, or :term:`ISA`.
Illustrated below is a simplified DL stack, showing relative complexity of
each component. Note that optimizing for any one on its own usually requires
engineering expertise that can be highly specialized to that component, and that
the terms have been simplified for illustrative purposes.
.. _figure-3:
.. figure:: ../graphics/components-dl-stack.png
:width: 700px
:alt: A simplified DL stack
Figure 3: Components of a DL stack, simplified for illustrative purposes.
There are many deep learning frameworks, each with its own strengths and user
bases. A setup that is common to many DL practitioners is shown in the
illustration below.
.. _figure-4:
.. figure:: ../graphics/a-common-stack.png
:width: 700px
:alt: A common implementation
Figure 4: A commonly-implemented stack uses TensorFlow\* as the frontend.
The input is either optimized via Grappler, or executed directly via TensorFlow.
In either case, when targeting an Nvidia\* GPU, cuDNN is called to select an
optimal kernel for the operation; cuDNN then relies on CUDA\* or direct access
to run code on the target; in this toy example, the target is a V100.
A natural result of this approach is that the framework-level integration of
kernel libraries does not scale. Rather, each individual framework must be
manually integrated with each hardware-specific kernel library. Each integration
is unique to the framework and its set of deep learning operators, its view on
memory layout, its feature set, etc. Each of these connections, then, represents
significant work for what will ultimately be a brittle setup that is enormously
expensive to maintain.
.. _figure-5:
.. figure:: ../graphics/dl-current-state.png
:width: 700px
:alt: Scalability matters
Figure 5: The number of kernels necessary to achieve optimal performance is
bounded by the product of the number of chip designs one wishes to support,
the number of data types supported, the number of operations, and the
cardinality of each parameter for each operation.
In the past, this upper bound was quite limited; however, since the industry is
shifting toward a more diverse future in terms of deep learning hardware, the
number of distinct kernels is exploding and will continue to explode.
Get the best of both worlds
---------------------------
Integrating a framework on nGraph can be an attractive option for hardware
companies trying to design their own deep learning hardware or network architecture.
Framework integration is non-trivial amount of work, and nGraph automatically
does much of the heavy lifting. Furthermore, PlaidML can provide a wide range of
hardware coverage and optimization automatically. Any hardware that supports
LLVM, OpenCL, OpenGL, CUDA or Metal can be supported automatically with PlaidML
and nGraph.
.. _figure-6:
.. figure:: ../graphics/graph-compilers-at-a-glance.png
:width: 700px
:alt: Overview of various graph and tensor compilers.
Figure 6: Overview of various graph and tensor compilers.
.. _figure-7:
.. figure:: ../graphics/tensor-compilers-at-a-glance.png
:width: 700px
:alt: A closer look at tensor compilers.
Figure 7: A closer look at tensor compilers.
.. _other-efforts:
Other notable efforts
=====================
......@@ -214,3 +214,13 @@ size_t Function::get_graph_size() const
}
return total_size;
}
size_t Function::get_placement() const
{
return m_placement;
}
void Function::set_placement(size_t placement)
{
m_placement = placement;
}
......@@ -90,6 +90,9 @@ namespace ngraph
/// graphs and should not be considered the actual memory consumption of a graph.
size_t get_graph_size() const;
size_t get_placement() const;
void set_placement(size_t placement);
protected:
ResultVector m_results;
ParameterVector m_parameters;
......@@ -104,5 +107,6 @@ namespace ngraph
size_t m_instance_id;
std::string m_name;
const std::string m_unique_name;
size_t m_placement;
};
}
......@@ -17,7 +17,7 @@
add_library(hybrid_base STATIC
hybrid_backend.cpp
hybrid_util.cpp
pass/assign_placement.cpp
pass/default_placement.cpp
pass/dump.cpp
pass/fix_get_output_element.cpp
pass/liveness.cpp
......
......@@ -20,7 +20,7 @@
#include "ngraph/pass/visualize_tree.hpp"
#include "ngraph/runtime/host_tensor.hpp"
#include "ngraph/runtime/hybrid/hybrid_util.hpp"
#include "ngraph/runtime/hybrid/pass/assign_placement.hpp"
#include "ngraph/runtime/hybrid/pass/default_placement.hpp"
#include "ngraph/runtime/hybrid/pass/dump.hpp"
#include "ngraph/runtime/hybrid/pass/fix_get_output_element.hpp"
#include "ngraph/runtime/hybrid/pass/liveness.hpp"
......@@ -74,7 +74,7 @@ runtime::Handle runtime::hybrid::HybridBackend::compile(shared_ptr<Function> fun
// Run placement pass
ngraph::pass::Manager pass_manager;
pass_manager.register_pass<runtime::hybrid::pass::AssignPlacement>(m_backend_list);
pass_manager.register_pass<runtime::hybrid::pass::DefaultPlacement>(m_backend_list);
pass_manager.register_pass<runtime::hybrid::pass::FixGetOutputElement>();
pass_manager.register_pass<runtime::hybrid::pass::Liveness>();
pass_manager.register_pass<runtime::hybrid::pass::Dump>("graph.dump");
......@@ -94,7 +94,7 @@ runtime::Handle runtime::hybrid::HybridBackend::compile(shared_ptr<Function> fun
size_t subfunction_number = 0;
for (shared_ptr<Function>& sub_function : instance.m_sub_functions)
{
size_t placement = runtime::hybrid::get_colocated_function_placement(sub_function);
size_t placement = sub_function->get_placement();
if (m_debug_enabled)
{
string name = "subfunction_" + to_string(subfunction_number++);
......@@ -149,7 +149,7 @@ bool runtime::hybrid::HybridBackend::call(shared_ptr<Function> func,
for (const shared_ptr<Function>& sub_function : instance.m_sub_functions)
{
// Init backend
size_t placement = runtime::hybrid::get_colocated_function_placement(sub_function);
size_t placement = sub_function->get_placement();
auto backend = m_backend_list[placement];
// Prepare parameter Tensors
......
......@@ -15,6 +15,7 @@
//*****************************************************************************
#include "ngraph/runtime/hybrid/hybrid_util.hpp"
#include "ngraph/log.hpp"
#include "ngraph/pass/manager.hpp"
#include "ngraph/pass/visualize_tree.hpp"
......@@ -25,20 +26,20 @@ static Node* take_independent_node_with_placement_priority(
map<size_t, deque<Node*>>& independent_nodes_by_placement, size_t placement)
{
Node* selected_node = nullptr;
if (independent_nodes_by_placement.find(placement) != independent_nodes_by_placement.end() &&
independent_nodes_by_placement.at(placement).size() != 0)
auto it = independent_nodes_by_placement.find(placement);
if (it != independent_nodes_by_placement.end() && it->second.size() != 0)
{
selected_node = independent_nodes_by_placement.at(placement).front();
independent_nodes_by_placement.at(placement).pop_front();
selected_node = it->second.front();
it->second.pop_front();
}
else
{
for (auto& it : independent_nodes_by_placement)
for (auto& p : independent_nodes_by_placement)
{
if (it.second.size() > 0)
if (p.second.size() > 0)
{
selected_node = it.second.front();
it.second.pop_front();
selected_node = p.second.front();
p.second.pop_front();
break;
}
}
......@@ -238,8 +239,10 @@ pair<vector<shared_ptr<Function>>, unordered_map<shared_ptr<op::Parameter>, shar
{
ParameterVector par_vector;
ResultVector res_vector;
size_t placement = -1;
for (auto node : cluster)
{
placement = node->get_placement_index();
if (auto res_node = dynamic_pointer_cast<op::Result>(node))
{
res_vector.push_back(res_node);
......@@ -250,6 +253,7 @@ pair<vector<shared_ptr<Function>>, unordered_map<shared_ptr<op::Parameter>, shar
}
}
auto sub_function = make_shared<Function>(res_vector, par_vector);
sub_function->set_placement(placement);
sub_functions.push_back(sub_function);
#ifdef HYBRID_DEBUG
ngraph::pass::Manager pass_manager;
......@@ -261,26 +265,3 @@ pair<vector<shared_ptr<Function>>, unordered_map<shared_ptr<op::Parameter>, shar
return make_pair(sub_functions, map_parameter_to_result);
}
// Assert that nodes in the function is colocated and return that placement
size_t runtime::hybrid::get_colocated_function_placement(shared_ptr<Function> func)
{
auto ops = func->get_ops();
//it's okay to not do Placement::DEFAULT check; the same node will be checked in the loop below
size_t function_placement = ops.front()->get_placement_index();
for (auto op : ops)
{
size_t node_placement = op->get_placement_index();
if (node_placement == Node::placement_invalid)
{
throw ngraph_error("Node " + op->get_name() + " should have a device placement");
}
if (function_placement != node_placement)
{
throw ngraph_error("Function contains nodes of two different placements");
}
}
return function_placement;
}
......@@ -35,9 +35,6 @@ namespace ngraph
std::vector<std::shared_ptr<Function>>,
std::unordered_map<std::shared_ptr<op::Parameter>, std::shared_ptr<op::Result>>>
split_function_by_placement(const std::shared_ptr<Function>& f);
// Assert that nodes in the function is colocated and return that placement
size_t get_colocated_function_placement(std::shared_ptr<Function> func);
}
}
}
......@@ -14,7 +14,7 @@
// limitations under the License.
//*****************************************************************************
#include "ngraph/runtime/hybrid/pass/assign_placement.hpp"
#include "ngraph/runtime/hybrid/pass/default_placement.hpp"
#include "ngraph/log.hpp"
#include "ngraph/node.hpp"
#include "ngraph/placement.hpp"
......@@ -23,13 +23,13 @@
using namespace ngraph;
using namespace std;
runtime::hybrid::pass::AssignPlacement::AssignPlacement(
runtime::hybrid::pass::DefaultPlacement::DefaultPlacement(
const vector<shared_ptr<runtime::Backend>>& placement_backends)
: m_placement_backends(placement_backends)
{
}
bool runtime::hybrid::pass::AssignPlacement::run_on_node(shared_ptr<Node> node)
bool runtime::hybrid::pass::DefaultPlacement::run_on_node(shared_ptr<Node> node)
{
size_t backend_index = 0;
for (auto backend : m_placement_backends)
......
......@@ -30,16 +30,16 @@ namespace ngraph
{
namespace pass
{
class AssignPlacement;
class DefaultPlacement;
}
}
}
}
class ngraph::runtime::hybrid::pass::AssignPlacement : public ngraph::pass::NodePass
class ngraph::runtime::hybrid::pass::DefaultPlacement : public ngraph::pass::NodePass
{
public:
AssignPlacement(
DefaultPlacement(
const std::vector<std::shared_ptr<ngraph::runtime::Backend>>& placement_backends);
private:
......
......@@ -56,7 +56,7 @@ TEST(HYBRID, abc)
auto t1 = A * B;
auto t2 = t1 * D;
auto C = make_shared<op::Parameter>(element::f32, shape);
auto f = make_shared<Function>((t2 + C) * t1, ParameterVector{A, B, C, D});
auto f = make_shared<Function>(((t2 + C) + A) * t1, ParameterVector{A, B, C, D});
shared_ptr<runtime::Backend> backend = runtime::Backend::create("H1");
static_pointer_cast<runtime::hybrid::HybridBackend>(backend)->set_debug_enabled(true);
......@@ -75,5 +75,5 @@ TEST(HYBRID, abc)
auto handle = backend->compile(f);
backend->call_with_validate(handle, {result}, {a, b, c, d});
EXPECT_EQ(read_vector<float>(result), (vector<float>{145, 552, 1113, 1408}));
EXPECT_EQ(read_vector<float>(result), (vector<float>{150, 576, 1176, 1536}));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment