[TUTORIAL] Fix tedd tutorial after strategy change (#4947)
authorTianqi Chen <tqchen@users.noreply.github.com>
Thu, 27 Feb 2020 00:44:09 +0000 (16:44 -0800)
committerGitHub <noreply@github.com>
Thu, 27 Feb 2020 00:44:09 +0000 (16:44 -0800)
* [TUTORIAL] Fix tedd tutorial after strategy change

* Remove scale, remove link to external gdoc

tutorials/language/tedd.py

index aa3fa15..3614688 100644 (file)
@@ -1,42 +1,40 @@
-# Licensed to the Apache Software Foundation (ASF) under one 
-# or more contributor license agreements.  See the NOTICE file 
-# distributed with this work for additional information 
-# regarding copyright ownership.  The ASF licenses this file 
-# to you under the Apache License, Version 2.0 (the 
-# "License"); you may not use this file except in compliance 
-# with the License.  You may obtain a copy of the License at 
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0 
-# 
-# Unless required by applicable law or agreed to in writing, 
-# software distributed under the License is distributed on an 
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
-# KIND, either express or implied.  See the License for the 
-# specific language governing permissions and limitations 
-# under the License. 
-""" 
-Use Tensor Expression Debug Display (TEDD) for Visualization 
-============================================================ 
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Use Tensor Expression Debug Display (TEDD) for Visualization
+============================================================
 **Author**: `Yongfeng Gu <https://github.com/yongfeng-nv>`_
 
-This is an introduction about using TEDD to visualize tensor expressions. 
+This is an introduction about using TEDD to visualize tensor expressions.
 
-Tensor Expressions are scheduled with primitives.  Although individual  
-primitives are usually easy to understand, they become complicated quickly  
-when you put them together. We have introduced an operational model of  
-schedule primitives in Tensor Expression in this document  
-(https://docs.google.com/document/d/1nmz00_n4Ju-SpYN0QFl3abTHTlR_P0dRyo5zsWC0Q1k/edit?usp=sharing)  
-to make it easier to understand 
+Tensor Expressions are scheduled with primitives.  Although individual
+primitives are usually easy to understand, they become complicated quickly
+when you put them together. We have introduced an operational model of
+schedule primitives in Tensor Expression.
 
-* the interactions between different schedule primitives, 
-* the impact of the schedule primitives on the final code generation. 
+* the interactions between different schedule primitives,
+* the impact of the schedule primitives on the final code generation.
 
-The operational model is based on a Dataflow Graph, a Schedule Tree and an  
-IterVar Relationship Graph. Schedule primitives perform operations on these  
+The operational model is based on a Dataflow Graph, a Schedule Tree and an
+IterVar Relationship Graph. Schedule primitives perform operations on these
 graphs.
 
-TEDD renders these three graphs from a given schedule.  This tutorial demonstrates 
-how to use TEDD and how to interpret the rendered graphs. 
+TEDD renders these three graphs from a given schedule.  This tutorial demonstrates
+how to use TEDD and how to interpret the rendered graphs.
 
 """
 from __future__ import absolute_import, print_function
@@ -63,39 +61,38 @@ dilation=1
 A = tvm.placeholder((in_size, in_size, in_channel, batch), name='A')
 W = tvm.placeholder((kernel, kernel, in_channel, num_filter), name='W')
 B = tvm.placeholder((1, num_filter, 1), name='bias')
-with tvm.target.create("cuda"):
+with tvm.target.create("llvm"):
     t_conv = topi.nn.conv2d(A, W, stride, padding, dilation, layout='HWCN')
     t_bias = topi.add(t_conv, B)
     t_relu = topi.nn.relu(t_bias)
-    s = topi.generic.schedule_conv2d_hwcn([t_relu]) 
-###################################################################### 
+    s = topi.generic.schedule_conv2d_hwcn([t_relu])
+
+######################################################################
 # Render Graphs with TEDD
 # -----------------------
-# We render graphs to see the computation  
-# and how it is scheduled.   
-# If you run the tutorial in a Jupyter notebook, you can use the following commented lines  
+# We render graphs to see the computation
+# and how it is scheduled.
+# If you run the tutorial in a Jupyter notebook, you can use the following commented lines
 # to render SVG figures showing in notebook directly.
 #
 
-tedd.viz_dataflow_graph(s, dot_file_path = '/tmp/dfg.dot') 
-#tedd.viz_dataflow_graph(s, show_svg = True) 
+tedd.viz_dataflow_graph(s, dot_file_path = '/tmp/dfg.dot')
+#tedd.viz_dataflow_graph(s, show_svg = True)
 
 ######################################################################
 # .. image:: https://github.com/dmlc/web-data/raw/master/tvm/tutorial/tedd_dfg.png
 #      :align: center
-#      :scale: 100%
 #
-# The first one is a dataflow graph.  Every node represents a stage with name and memory  
-# scope shown in the middle and inputs/outputs information on the sides.   
-# Edges show nodes' dependency.   
+# The first one is a dataflow graph.  Every node represents a stage with name and memory
+# scope shown in the middle and inputs/outputs information on the sides.
+# Edges show nodes' dependency.
 #
 
-tedd.viz_schedule_tree(s, dot_file_path = '/tmp/scheduletree.dot') 
-#tedd.viz_schedule_tree(s, show_svg = True) 
+tedd.viz_schedule_tree(s, dot_file_path = '/tmp/scheduletree.dot')
+#tedd.viz_schedule_tree(s, show_svg = True)
 
 ######################################################################
-# We just rendered the schedule tree graph.  You may notice an warning about ranges not 
+# We just rendered the schedule tree graph.  You may notice an warning about ranges not
 # available.
 # The message also suggests to call normalize() to infer range information.  We will
 # skip inspecting the first schedule tree and encourage you to compare the graphs before
@@ -103,62 +100,60 @@ tedd.viz_schedule_tree(s, dot_file_path = '/tmp/scheduletree.dot')
 #
 
 s = s.normalize()
-tedd.viz_schedule_tree(s, dot_file_path = '/tmp/scheduletree2.dot') 
-#tedd.viz_schedule_tree(s, show_svg = True) 
+tedd.viz_schedule_tree(s, dot_file_path = '/tmp/scheduletree2.dot')
+#tedd.viz_schedule_tree(s, show_svg = True)
 
 ######################################################################
 # .. image:: https://github.com/dmlc/web-data/raw/master/tvm/tutorial/tedd_st.png
 #      :align: center
-#      :scale: 100%
 #
-# Now, let us take a close look at the second schedule tree.  Every block under ROOT 
-# represents a  
-# stage.  Stage name shows in the top row and compute shows in the bottom row.   
-# The middle rows are for IterVars, the higher the outer, the lower the inner. 
-# An IterVar row contains its index, name, type, and other optional information. 
-# Let's use the W.shared stage as an example.  The top row tells  
-# its name, "W.shared", and memory scope, "Shared".  Its compute is  
-# :code:`W(ax0, ax1, ax2, ax3)`. 
-# Its outer most loop IterVar is ax0.ax1.fused.ax2.fused.ax3.fused.outer,  
-# indexed with 0, of kDataPar, bound to threadIdx.y, and with range(min=0, ext=8).  
-# You can also tell 
-# IterVar type with the index box color, shown in the legend. 
-# 
-# If a stage doesn't compute_at any other stage, it has an edge directly to the  
-# ROOT node.  Otherwise, it has an edge pointing to the IterVar it attaches to,  
-# such as W.shared attaches to rx.outer in the middle compute stage. 
+# Now, let us take a close look at the second schedule tree.  Every block under ROOT
+# represents a
+# stage.  Stage name shows in the top row and compute shows in the bottom row.
+# The middle rows are for IterVars, the higher the outer, the lower the inner.
+# An IterVar row contains its index, name, type, and other optional information.
+# Let's use the W.shared stage as an example.  The top row tells
+# its name, "W.shared", and memory scope, "Shared".  Its compute is
+# :code:`W(ax0, ax1, ax2, ax3)`.
+# Its outer most loop IterVar is ax0.ax1.fused.ax2.fused.ax3.fused.outer,
+# indexed with 0, of kDataPar, bound to threadIdx.y, and with range(min=0, ext=8).
+# You can also tell
+# IterVar type with the index box color, shown in the legend.
+#
+# If a stage doesn't compute_at any other stage, it has an edge directly to the
+# ROOT node.  Otherwise, it has an edge pointing to the IterVar it attaches to,
+# such as W.shared attaches to rx.outer in the middle compute stage.
 #
 
-###################################################################### 
-# .. note:: 
-# 
-#   By definition, IterVars are internal nodes and computes are leaf nodes in 
-#   a schedule tree.   The edges among IterVars and compute within one stage are 
+######################################################################
+# .. note::
+#
+#   By definition, IterVars are internal nodes and computes are leaf nodes in
+#   a schedule tree.   The edges among IterVars and compute within one stage are
 #   omitted, making every stage a block, for better readability.
 #
 
-tedd.viz_itervar_relationship_graph(s, dot_file_path = '/tmp/itervar.dot') 
-#tedd.viz_itervar_relationship_graph(s, show_svg = True) 
+tedd.viz_itervar_relationship_graph(s, dot_file_path = '/tmp/itervar.dot')
+#tedd.viz_itervar_relationship_graph(s, show_svg = True)
 
 ######################################################################
 # .. image:: https://github.com/dmlc/web-data/raw/master/tvm/tutorial/tedd_itervar_rel.png
 #      :align: center
-#      :scale: 100%
 #
-# The last one is an IterVar Relationship Graph.  Every subgraph represents a  
-# stage and contains IterVar nodes and transformation nodes.  For example,   
-# W.shared has three split nodes and three fuse nodes.  The rest are IterVar  
-# nodes of the same format as the IterVar rows in Schedule Trees.  Root  
-# IterVars are those not driven by any transformation node, such as ax0; leaf  
-# IterVars don't drive any transformation node and have non-negative indices,  
+# The last one is an IterVar Relationship Graph.  Every subgraph represents a
+# stage and contains IterVar nodes and transformation nodes.  For example,
+# W.shared has three split nodes and three fuse nodes.  The rest are IterVar
+# nodes of the same format as the IterVar rows in Schedule Trees.  Root
+# IterVars are those not driven by any transformation node, such as ax0; leaf
+# IterVars don't drive any transformation node and have non-negative indices,
 # such as ax0.ax1.fused.ax2.fused.ax3.fused.outer with index of 0.
 #
 
 
-###################################################################### 
-# Summary 
-# ------- 
-# This tutorial demonstrates the usage of TEDD.  We use an example built 
-# with TOPI to show the schedules under the hood.  You can also use 
+######################################################################
+# Summary
+# -------
+# This tutorial demonstrates the usage of TEDD.  We use an example built
+# with TOPI to show the schedules under the hood.  You can also use
 # it before and after any schedule primitive to inspect its effect.
-#
\ No newline at end of file
+#