diff --git a/_downloads/62d97d49a32414049819dd8bb8378080/01-vector-add.py b/_downloads/62d97d49a32414049819dd8bb8378080/01-vector-add.py index 122e1ac13..ad6303858 100644 --- a/_downloads/62d97d49a32414049819dd8bb8378080/01-vector-add.py +++ b/_downloads/62d97d49a32414049819dd8bb8378080/01-vector-add.py @@ -41,8 +41,8 @@ def _add( # %% -# Let's also declare a helper function that to (1) allocate the output vector -# and (2) enqueueing the above kernel. +# Let's also declare a helper function to (1) allocate the `z` tensor +# and (2) enqueue the above kernel with appropriate grid/block sizes. def add(x, y): @@ -80,7 +80,7 @@ print(f'The maximum difference between torch and triton is ' f'{torch.max(torch. # %% # Benchmark # ----------- -# We can now benchmark our custom op for vectors of increasing sizes to get a sense of how it does relative to PyTorch. +# We can now benchmark our custom op on vectors of increasing sizes to get a sense of how it does relative to PyTorch. # To make things easier, Triton has a set of built-in utilities that allow us to concisely plot the performance of your custom ops # for different problem sizes. @@ -111,6 +111,6 @@ def benchmark(size, provider): # %% -# We can now run the decorated function above. Pass `show_plots=True` to see the plots and/or +# We can now run the decorated function above. Pass `print_data=True` to see the performance number, `show_plots=True` to plot them, and/or # `save_path='/path/to/results/' to save them to disk along with raw CSV data benchmark.run(print_data=True, show_plots=True) \ No newline at end of file diff --git a/_downloads/662999063954282841dc90b8945f85ce/tutorials_jupyter.zip b/_downloads/662999063954282841dc90b8945f85ce/tutorials_jupyter.zip index a64b0a1fe..85fcdbb4b 100644 Binary files a/_downloads/662999063954282841dc90b8945f85ce/tutorials_jupyter.zip and b/_downloads/662999063954282841dc90b8945f85ce/tutorials_jupyter.zip differ diff --git a/_downloads/763344228ae6bc253ed1a6cf586aa30d/tutorials_python.zip b/_downloads/763344228ae6bc253ed1a6cf586aa30d/tutorials_python.zip index 4bf5a9d63..7ab3fb329 100644 Binary files a/_downloads/763344228ae6bc253ed1a6cf586aa30d/tutorials_python.zip and b/_downloads/763344228ae6bc253ed1a6cf586aa30d/tutorials_python.zip differ diff --git a/_downloads/f191ee1e78dc52eb5f7cba88f71cef2f/01-vector-add.ipynb b/_downloads/f191ee1e78dc52eb5f7cba88f71cef2f/01-vector-add.ipynb index facb8e259..19763a6af 100644 --- a/_downloads/f191ee1e78dc52eb5f7cba88f71cef2f/01-vector-add.ipynb +++ b/_downloads/f191ee1e78dc52eb5f7cba88f71cef2f/01-vector-add.ipynb @@ -40,7 +40,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's also declare a helper function that to (1) allocate the output vector\nand (2) enqueueing the above kernel.\n\n" + "Let's also declare a helper function to (1) allocate the `z` tensor\nand (2) enqueue the above kernel with appropriate grid/block sizes.\n\n" ] }, { @@ -83,7 +83,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Benchmark\nWe can now benchmark our custom op for vectors of increasing sizes to get a sense of how it does relative to PyTorch.\nTo make things easier, Triton has a set of built-in utilities that allow us to concisely plot the performance of your custom ops\nfor different problem sizes.\n\n" + "## Benchmark\nWe can now benchmark our custom op on vectors of increasing sizes to get a sense of how it does relative to PyTorch.\nTo make things easier, Triton has a set of built-in utilities that allow us to concisely plot the performance of your custom ops\nfor different problem sizes.\n\n" ] }, { @@ -101,7 +101,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can now run the decorated function above. Pass `show_plots=True` to see the plots and/or\n`save_path='/path/to/results/' to save them to disk along with raw CSV data\n\n" + "We can now run the decorated function above. Pass `print_data=True` to see the performance number, `show_plots=True` to plot them, and/or\n`save_path='/path/to/results/' to save them to disk along with raw CSV data\n\n" ] }, { diff --git a/_images/sphx_glr_01-vector-add_001.png b/_images/sphx_glr_01-vector-add_001.png index c0a985d8f..eca8ea46e 100644 Binary files a/_images/sphx_glr_01-vector-add_001.png and b/_images/sphx_glr_01-vector-add_001.png differ diff --git a/_images/sphx_glr_01-vector-add_thumb.png b/_images/sphx_glr_01-vector-add_thumb.png index 392112bdd..912915ae6 100644 Binary files a/_images/sphx_glr_01-vector-add_thumb.png and b/_images/sphx_glr_01-vector-add_thumb.png differ diff --git a/_images/sphx_glr_02-fused-softmax_001.png b/_images/sphx_glr_02-fused-softmax_001.png index ad6d87c1e..c1332c255 100644 Binary files a/_images/sphx_glr_02-fused-softmax_001.png and b/_images/sphx_glr_02-fused-softmax_001.png differ diff --git a/_images/sphx_glr_02-fused-softmax_thumb.png b/_images/sphx_glr_02-fused-softmax_thumb.png index 6e732fde8..7dad44800 100644 Binary files a/_images/sphx_glr_02-fused-softmax_thumb.png and b/_images/sphx_glr_02-fused-softmax_thumb.png differ diff --git a/_images/sphx_glr_03-matrix-multiplication_001.png b/_images/sphx_glr_03-matrix-multiplication_001.png index 7b9e8d723..5ef51868d 100644 Binary files a/_images/sphx_glr_03-matrix-multiplication_001.png and b/_images/sphx_glr_03-matrix-multiplication_001.png differ diff --git a/_images/sphx_glr_03-matrix-multiplication_thumb.png b/_images/sphx_glr_03-matrix-multiplication_thumb.png index 9102541d7..5ab57c015 100644 Binary files a/_images/sphx_glr_03-matrix-multiplication_thumb.png and b/_images/sphx_glr_03-matrix-multiplication_thumb.png differ diff --git a/_sources/getting-started/installation.rst.txt b/_sources/getting-started/installation.rst.txt index 1a514fe9f..57fd589a2 100644 --- a/_sources/getting-started/installation.rst.txt +++ b/_sources/getting-started/installation.rst.txt @@ -6,7 +6,13 @@ Installation Binary Distributions --------------------- -You can install the latest nightly release of Triton from pip: +You can install the latest stable release of Triton from pip: + + pip install triton + +Binary wheels are available for CPython 3.6-3.9 and PyPy 3.6-3.7. + +And the latest nightly release: .. code-block:: bash @@ -27,9 +33,10 @@ You can install the Python package from source by running the following commands git clone https://github.com/ptillet/triton.git; cd triton/python; + pip install cmake; # build time dependency pip install -e . -This may take a while (10-20 minutes) as it will download and compile LLVM from source. +Note that, if llvm-11 is not present on your system, the setup.py script will download LLVM static libraries on the web and link against that. You can then test your installation by running the unit tests: @@ -42,20 +49,4 @@ and the benchmarks .. code-block:: bash cd bench/ - python -m run --with-plots --result-dir /tmp/triton-bench - -+++++++++++++++ -C++ Package -+++++++++++++++ - -Those not interested in Python integration may want to use the internals of Triton (i.e, runtime, parser, codegen, driver, intermediate representation) directly. This can be done by running the following commands: - -.. code-block:: bash - - git clone https://github.com/ptillet/triton.git; - mkdir build; - cd build; - cmake ../; - make -j8; - -Note that while direct usage of the C++ API is not officially supported, a usage tutorial can be found `here `_ + python -m run --with-plots --result-dir /tmp/triton-bench \ No newline at end of file diff --git a/_sources/getting-started/tutorials/01-vector-add.rst.txt b/_sources/getting-started/tutorials/01-vector-add.rst.txt index 31887b3eb..0d4e69c20 100644 --- a/_sources/getting-started/tutorials/01-vector-add.rst.txt +++ b/_sources/getting-started/tutorials/01-vector-add.rst.txt @@ -73,8 +73,8 @@ Compute Kernel .. GENERATED FROM PYTHON SOURCE LINES 44-46 -Let's also declare a helper function that to (1) allocate the output vector -and (2) enqueueing the above kernel. +Let's also declare a helper function to (1) allocate the `z` tensor +and (2) enqueue the above kernel with appropriate grid/block sizes. .. GENERATED FROM PYTHON SOURCE LINES 46-64 @@ -149,7 +149,7 @@ Seems like we're good to go! Benchmark ----------- -We can now benchmark our custom op for vectors of increasing sizes to get a sense of how it does relative to PyTorch. +We can now benchmark our custom op on vectors of increasing sizes to get a sense of how it does relative to PyTorch. To make things easier, Triton has a set of built-in utilities that allow us to concisely plot the performance of your custom ops for different problem sizes. @@ -193,7 +193,7 @@ for different problem sizes. .. GENERATED FROM PYTHON SOURCE LINES 114-116 -We can now run the decorated function above. Pass `show_plots=True` to see the plots and/or +We can now run the decorated function above. Pass `print_data=True` to see the performance number, `show_plots=True` to plot them, and/or `save_path='/path/to/results/' to save them to disk along with raw CSV data .. GENERATED FROM PYTHON SOURCE LINES 116-116 @@ -216,13 +216,13 @@ We can now run the decorated function above. Pass `show_plots=True` to see the p vector-add-performance: size Triton Torch - 0 4096.0 9.600000 9.600000 + 0 4096.0 9.540372 9.600000 1 8192.0 19.200000 19.200000 2 16384.0 38.400001 38.400001 3 32768.0 76.800002 76.800002 4 65536.0 127.999995 127.999995 5 131072.0 219.428568 219.428568 - 6 262144.0 341.333321 341.333321 + 6 262144.0 341.333321 384.000001 7 524288.0 472.615390 472.615390 8 1048576.0 614.400016 614.400016 9 2097152.0 722.823517 722.823517 @@ -239,7 +239,7 @@ We can now run the decorated function above. Pass `show_plots=True` to see the p .. rst-class:: sphx-glr-timing - **Total running time of the script:** ( 0 minutes 11.009 seconds) + **Total running time of the script:** ( 0 minutes 10.979 seconds) .. _sphx_glr_download_getting-started_tutorials_01-vector-add.py: diff --git a/_sources/getting-started/tutorials/02-fused-softmax.rst.txt b/_sources/getting-started/tutorials/02-fused-softmax.rst.txt index 1897cccb5..ed9463e4a 100644 --- a/_sources/getting-started/tutorials/02-fused-softmax.rst.txt +++ b/_sources/getting-started/tutorials/02-fused-softmax.rst.txt @@ -263,15 +263,15 @@ We will then compare its performance against (1) :code:`torch.softmax` and (2) t N Triton Torch (native) Torch (jit) 0 256.0 512.000001 546.133347 273.066674 1 384.0 585.142862 585.142862 267.130429 - 2 512.0 630.153853 585.142849 264.258068 - 3 640.0 682.666684 640.000002 265.974036 + 2 512.0 630.153853 606.814814 264.258068 + 3 640.0 682.666684 640.000002 269.473696 4 768.0 702.171410 664.216187 273.066663 .. ... ... ... ... - 93 12160.0 812.359066 405.755985 329.483481 + 93 12160.0 812.359066 406.179533 329.483481 94 12288.0 812.429770 415.661740 329.602681 95 12416.0 810.840807 412.149375 328.900662 - 96 12544.0 809.290334 412.971190 329.022957 - 97 12672.0 811.007961 412.097543 329.142870 + 96 12544.0 810.925276 412.971190 329.022957 + 97 12672.0 809.389265 412.097543 329.142870 [98 rows x 4 columns] @@ -290,7 +290,7 @@ In the above plot, we can see that: .. rst-class:: sphx-glr-timing - **Total running time of the script:** ( 1 minutes 8.799 seconds) + **Total running time of the script:** ( 1 minutes 8.179 seconds) .. _sphx_glr_download_getting-started_tutorials_02-fused-softmax.py: diff --git a/_sources/getting-started/tutorials/03-matrix-multiplication.rst.txt b/_sources/getting-started/tutorials/03-matrix-multiplication.rst.txt index cda06e115..0c381324d 100644 --- a/_sources/getting-started/tutorials/03-matrix-multiplication.rst.txt +++ b/_sources/getting-started/tutorials/03-matrix-multiplication.rst.txt @@ -372,36 +372,36 @@ We can now compare the performance of our kernel against that of cuBLAS. Here we M cuBLAS ... Triton Triton (+ LeakyReLU) 0 128.0 0.455111 ... 0.512000 0.512000 1 256.0 2.978909 ... 2.978909 2.978909 - 2 384.0 7.372800 ... 8.507077 8.507077 - 3 512.0 14.563555 ... 16.384000 15.420235 - 4 640.0 22.260869 ... 23.272727 23.272727 + 2 384.0 7.372800 ... 7.899428 7.899428 + 3 512.0 14.563555 ... 15.420235 15.420235 + 4 640.0 22.260869 ... 24.380953 24.380953 5 768.0 32.768000 ... 34.028308 34.028308 - 6 896.0 39.025776 ... 39.025776 35.123201 + 6 896.0 39.025776 ... 39.025776 39.025776 7 1024.0 49.932191 ... 52.428801 52.428801 - 8 1152.0 45.242181 ... 46.656000 45.938215 + 8 1152.0 45.242181 ... 46.656000 46.656000 9 1280.0 51.200001 ... 56.109587 56.109587 - 10 1408.0 64.138541 ... 65.684049 65.684049 - 11 1536.0 80.430545 ... 76.106321 76.106321 - 12 1664.0 63.372618 ... 61.636381 61.636381 + 10 1408.0 64.138541 ... 65.684049 59.258433 + 11 1536.0 79.526831 ... 75.296679 75.296679 + 12 1664.0 63.372618 ... 62.061463 61.636381 13 1792.0 72.983276 ... 68.953520 68.953520 - 14 1920.0 69.467336 ... 70.172588 68.776119 - 15 2048.0 73.908442 ... 75.573044 75.573044 - 16 2176.0 83.500614 ... 79.855747 79.226957 - 17 2304.0 68.251065 ... 72.607513 73.051599 - 18 2432.0 71.305746 ... 79.813818 78.917033 - 19 2560.0 77.833728 ... 76.382283 76.740048 - 20 2688.0 82.823267 ... 80.880718 82.642823 - 21 2816.0 83.873477 ... 77.882512 77.330158 - 22 2944.0 82.102191 ... 80.122235 79.610276 - 23 3072.0 78.643199 ... 81.707223 83.514905 - 24 3200.0 84.321474 ... 89.012517 85.219705 - 25 3328.0 83.226931 ... 86.320498 82.464255 - 26 3456.0 81.026701 ... 84.508982 86.689860 - 27 3584.0 87.211821 ... 91.750399 87.042978 - 28 3712.0 84.230479 ... 83.526206 82.902362 - 29 3840.0 80.197243 ... 82.102449 80.667046 - 30 3968.0 88.231331 ... 81.079024 83.807647 - 31 4096.0 93.596744 ... 90.504200 89.777746 + 14 1920.0 66.782607 ... 67.434145 68.435645 + 15 2048.0 73.262953 ... 75.573044 75.234154 + 16 2176.0 83.155572 ... 80.494588 78.608000 + 17 2304.0 68.446623 ... 72.607513 72.607513 + 18 2432.0 71.125224 ... 80.963875 80.963875 + 19 2560.0 77.649287 ... 75.851852 76.740048 + 20 2688.0 81.401408 ... 84.483418 85.051697 + 21 2816.0 80.617762 ... 77.605356 79.733474 + 22 2944.0 81.967162 ... 80.902653 77.505492 + 23 3072.0 82.540970 ... 84.010539 84.638425 + 24 3200.0 84.432717 ... 88.642656 89.260810 + 25 3328.0 80.617354 ... 83.323259 86.632127 + 26 3456.0 82.183044 ... 87.252780 84.420490 + 27 3584.0 85.797134 ... 95.654673 96.269155 + 28 3712.0 83.317214 ... 88.404730 84.730571 + 29 3840.0 81.019778 ... 86.197974 85.730230 + 30 3968.0 92.652949 ... 87.159957 86.911637 + 31 4096.0 93.271527 ... 91.616198 91.678778 [32 rows x 5 columns] @@ -411,7 +411,7 @@ We can now compare the performance of our kernel against that of cuBLAS. Here we .. rst-class:: sphx-glr-timing - **Total running time of the script:** ( 2 minutes 26.808 seconds) + **Total running time of the script:** ( 2 minutes 11.538 seconds) .. _sphx_glr_download_getting-started_tutorials_03-matrix-multiplication.py: diff --git a/_sources/getting-started/tutorials/sg_execution_times.rst.txt b/_sources/getting-started/tutorials/sg_execution_times.rst.txt index e426eff0a..0af30eae9 100644 --- a/_sources/getting-started/tutorials/sg_execution_times.rst.txt +++ b/_sources/getting-started/tutorials/sg_execution_times.rst.txt @@ -5,12 +5,12 @@ Computation times ================= -**03:46.617** total execution time for **getting-started_tutorials** files: +**03:30.696** total execution time for **getting-started_tutorials** files: +---------------------------------------------------------------------------------------------------------+-----------+--------+ -| :ref:`sphx_glr_getting-started_tutorials_03-matrix-multiplication.py` (``03-matrix-multiplication.py``) | 02:26.808 | 0.0 MB | +| :ref:`sphx_glr_getting-started_tutorials_03-matrix-multiplication.py` (``03-matrix-multiplication.py``) | 02:11.538 | 0.0 MB | +---------------------------------------------------------------------------------------------------------+-----------+--------+ -| :ref:`sphx_glr_getting-started_tutorials_02-fused-softmax.py` (``02-fused-softmax.py``) | 01:08.799 | 0.0 MB | +| :ref:`sphx_glr_getting-started_tutorials_02-fused-softmax.py` (``02-fused-softmax.py``) | 01:08.179 | 0.0 MB | +---------------------------------------------------------------------------------------------------------+-----------+--------+ -| :ref:`sphx_glr_getting-started_tutorials_01-vector-add.py` (``01-vector-add.py``) | 00:11.009 | 0.0 MB | +| :ref:`sphx_glr_getting-started_tutorials_01-vector-add.py` (``01-vector-add.py``) | 00:10.979 | 0.0 MB | +---------------------------------------------------------------------------------------------------------+-----------+--------+ diff --git a/getting-started/installation.html b/getting-started/installation.html index e42c26f4d..0a613963b 100644 --- a/getting-started/installation.html +++ b/getting-started/installation.html @@ -98,7 +98,6 @@
  • Binary Distributions
  • From Source
  • @@ -186,7 +185,12 @@

    Installation

    Binary Distributions

    -

    You can install the latest nightly release of Triton from pip:

    +

    You can install the latest stable release of Triton from pip:

    +
    +

    pip install triton

    +
    +

    Binary wheels are available for CPython 3.6-3.9 and PyPy 3.6-3.7.

    +

    And the latest nightly release:

    pip install -U --pre triton
     
    @@ -198,10 +202,11 @@

    You can install the Python package from source by running the following commands:

    git clone https://github.com/ptillet/triton.git;
     cd triton/python;
    +pip install cmake; # build time dependency
     pip install -e .
     
    -

    This may take a while (10-20 minutes) as it will download and compile LLVM from source.

    +

    Note that, if llvm-11 is not present on your system, the setup.py script will download LLVM static libraries on the web and link against that.

    You can then test your installation by running the unit tests:

    pytest -vs .
     
    @@ -212,18 +217,6 @@ python -m run --with-plots --result-dir /tmp/triton-bench
    -
    -

    C++ Package

    -

    Those not interested in Python integration may want to use the internals of Triton (i.e, runtime, parser, codegen, driver, intermediate representation) directly. This can be done by running the following commands:

    -
    git clone https://github.com/ptillet/triton.git;
    -mkdir build;
    -cd build;
    -cmake ../;
    -make -j8;
    -
    -
    -

    Note that while direct usage of the C++ API is not officially supported, a usage tutorial can be found here

    -
    diff --git a/getting-started/tutorials/01-vector-add.html b/getting-started/tutorials/01-vector-add.html index ddd97199f..085f0757c 100644 --- a/getting-started/tutorials/01-vector-add.html +++ b/getting-started/tutorials/01-vector-add.html @@ -228,8 +228,8 @@ to download the full example code

    tl.store(Z + offsets, z) -

    Let’s also declare a helper function that to (1) allocate the output vector -and (2) enqueueing the above kernel.

    +

    Let’s also declare a helper function to (1) allocate the z tensor +and (2) enqueue the above kernel with appropriate grid/block sizes.

    def add(x, y):
         z = torch.empty_like(x)
         N = z.shape[0]
    @@ -268,7 +268,7 @@ The maximum difference between torch and triton is 0.0
     

    Benchmark

    -

    We can now benchmark our custom op for vectors of increasing sizes to get a sense of how it does relative to PyTorch. +

    We can now benchmark our custom op on vectors of increasing sizes to get a sense of how it does relative to PyTorch. To make things easier, Triton has a set of built-in utilities that allow us to concisely plot the performance of your custom ops for different problem sizes.

    @triton.testing.perf_report(
    @@ -296,7 +296,7 @@ for different problem sizes.

    return gbps(ms), gbps(max_ms), gbps(min_ms)
    -

    We can now run the decorated function above. Pass show_plots=True to see the plots and/or +

    We can now run the decorated function above. Pass print_data=True to see the performance number, show_plots=True to plot them, and/or `save_path=’/path/to/results/’ to save them to disk along with raw CSV data

    benchmark.run(print_data=True, show_plots=True)
     
    @@ -305,13 +305,13 @@ for different problem sizes.

    Out:

    vector-add-performance:
                size      Triton       Torch
    -0        4096.0    9.600000    9.600000
    +0        4096.0    9.540372    9.600000
     1        8192.0   19.200000   19.200000
     2       16384.0   38.400001   38.400001
     3       32768.0   76.800002   76.800002
     4       65536.0  127.999995  127.999995
     5      131072.0  219.428568  219.428568
    -6      262144.0  341.333321  341.333321
    +6      262144.0  341.333321  384.000001
     7      524288.0  472.615390  472.615390
     8     1048576.0  614.400016  614.400016
     9     2097152.0  722.823517  722.823517
    @@ -323,7 +323,7 @@ for different problem sizes.

    15 134217728.0 851.577704 850.656574
    -

    Total running time of the script: ( 0 minutes 11.009 seconds)

    +

    Total running time of the script: ( 0 minutes 10.979 seconds)