From 90aea5b7564acd547443676a56589a72be0caf26 Mon Sep 17 00:00:00 2001 From: gh-actions-bot Date: Tue, 16 Jul 2024 00:09:21 +0000 Subject: [PATCH] [GH-PAGES] Updated website --- main/.buildinfo | 2 +- main/.doctrees/environment.pickle | Bin 3134443 -> 383796 bytes .../tutorials/01-vector-add.doctree | Bin 27613 -> 27613 bytes .../tutorials/02-fused-softmax.doctree | Bin 45127 -> 45127 bytes .../03-matrix-multiplication.doctree | Bin 71068 -> 71068 bytes .../tutorials/04-low-memory-dropout.doctree | Bin 32619 -> 32619 bytes .../tutorials/05-layer-norm.doctree | Bin 52862 -> 52862 bytes .../tutorials/06-fused-attention.doctree | Bin 61269 -> 61269 bytes .../tutorials/07-extern-functions.doctree | Bin 21289 -> 21289 bytes .../tutorials/08-grouped-gemm.doctree | Bin 29939 -> 29939 bytes .../tutorials/09-persistent-matmul.doctree | Bin 48678 -> 48678 bytes .../tutorials/sg_execution_times.doctree | Bin 19355 -> 19355 bytes .../generated/triton.Config.doctree | Bin 17150 -> 17151 bytes .../generated/triton.autotune.doctree | Bin 23580 -> 23578 bytes .../generated/triton.heuristics.doctree | Bin 9139 -> 9137 bytes .../python-api/generated/triton.jit.doctree | Bin 20745 -> 20743 bytes .../generated/triton.language.abs.doctree | Bin 5381 -> 5379 bytes .../generated/triton.language.advance.doctree | Bin 6742 -> 6741 bytes .../generated/triton.language.arange.doctree | Bin 7283 -> 7281 bytes .../generated/triton.language.argmax.doctree | Bin 10825 -> 10824 bytes .../generated/triton.language.argmin.doctree | Bin 10825 -> 10824 bytes .../triton.language.associative_scan.doctree | Bin 10490 -> 10489 bytes .../triton.language.atomic_add.doctree | Bin 13289 -> 13288 bytes .../triton.language.atomic_and.doctree | Bin 13305 -> 13304 bytes .../triton.language.atomic_cas.doctree | Bin 14246 -> 14245 bytes .../triton.language.atomic_max.doctree | Bin 13289 -> 13288 bytes .../triton.language.atomic_min.doctree | Bin 13289 -> 13288 bytes .../triton.language.atomic_or.doctree | Bin 13283 -> 13282 bytes .../triton.language.atomic_xchg.doctree | Bin 13319 -> 13318 bytes .../triton.language.atomic_xor.doctree | Bin 13305 -> 13304 bytes .../triton.language.broadcast.doctree | Bin 6382 -> 6380 bytes .../triton.language.broadcast_to.doctree | Bin 8066 -> 8065 bytes .../generated/triton.language.cast.doctree | Bin 13414 -> 13413 bytes .../generated/triton.language.cat.doctree | Bin 7722 -> 7720 bytes .../generated/triton.language.cdiv.doctree | Bin 7529 -> 7528 bytes .../generated/triton.language.ceil.doctree | Bin 5374 -> 5372 bytes .../generated/triton.language.clamp.doctree | Bin 10145 -> 10143 bytes .../generated/triton.language.cos.doctree | Bin 5365 -> 5363 bytes .../generated/triton.language.cumprod.doctree | Bin 8901 -> 8900 bytes .../generated/triton.language.cumsum.doctree | Bin 8879 -> 8878 bytes .../triton.language.debug_barrier.doctree | Bin 4173 -> 4172 bytes .../triton.language.device_assert.doctree | Bin 8287 -> 8285 bytes .../triton.language.device_print.doctree | Bin 10037 -> 10035 bytes .../generated/triton.language.div_rn.doctree | Bin 6661 -> 6659 bytes .../generated/triton.language.dot.doctree | Bin 15091 -> 15089 bytes .../generated/triton.language.erf.doctree | Bin 5381 -> 5379 bytes .../generated/triton.language.exp.doctree | Bin 5375 -> 5373 bytes .../generated/triton.language.exp2.doctree | Bin 5406 -> 5404 bytes .../triton.language.expand_dims.doctree | Bin 8783 -> 8782 bytes .../generated/triton.language.fdiv.doctree | Bin 7072 -> 7070 bytes .../generated/triton.language.flip.doctree | Bin 7940 -> 7939 bytes .../generated/triton.language.floor.doctree | Bin 5389 -> 5387 bytes .../generated/triton.language.fma.doctree | Bin 7481 -> 7479 bytes .../generated/triton.language.full.doctree | Bin 8140 -> 8138 bytes .../triton.language.histogram.doctree | Bin 7575 -> 7574 bytes ...on.language.inline_asm_elementwise.doctree | Bin 20424 -> 20422 bytes .../triton.language.interleave.doctree | Bin 6736 -> 6734 bytes .../generated/triton.language.join.doctree | Bin 7424 -> 7422 bytes .../generated/triton.language.load.doctree | Bin 25658 -> 25656 bytes .../generated/triton.language.log.doctree | Bin 5387 -> 5385 bytes .../generated/triton.language.log2.doctree | Bin 5402 -> 5400 bytes .../triton.language.make_block_ptr.doctree | Bin 8651 -> 8649 bytes .../generated/triton.language.max.doctree | Bin 12321 -> 12320 bytes .../triton.language.max_constancy.doctree | Bin 5600 -> 5599 bytes .../triton.language.max_contiguous.doctree | Bin 4969 -> 4968 bytes .../generated/triton.language.maximum.doctree | Bin 8388 -> 8386 bytes .../generated/triton.language.min.doctree | Bin 12321 -> 12320 bytes .../generated/triton.language.minimum.doctree | Bin 8388 -> 8386 bytes .../triton.language.multiple_of.doctree | Bin 4938 -> 4937 bytes .../triton.language.num_programs.doctree | Bin 5637 -> 5635 bytes .../generated/triton.language.permute.doctree | Bin 8886 -> 8885 bytes .../triton.language.program_id.doctree | Bin 5607 -> 5605 bytes .../generated/triton.language.rand.doctree | Bin 7709 -> 7707 bytes .../generated/triton.language.randint.doctree | Bin 8210 -> 8208 bytes .../triton.language.randint4x.doctree | Bin 7899 -> 7897 bytes .../generated/triton.language.randn.doctree | Bin 7752 -> 7750 bytes .../generated/triton.language.range.doctree | Bin 16138 -> 16135 bytes .../generated/triton.language.ravel.doctree | Bin 6438 -> 6437 bytes .../generated/triton.language.reduce.doctree | Bin 10578 -> 10577 bytes .../generated/triton.language.reshape.doctree | Bin 8401 -> 8400 bytes .../generated/triton.language.rsqrt.doctree | Bin 5417 -> 5415 bytes .../generated/triton.language.sigmoid.doctree | Bin 6474 -> 6473 bytes .../generated/triton.language.sin.doctree | Bin 5361 -> 5359 bytes .../generated/triton.language.softmax.doctree | Bin 7019 -> 7018 bytes .../generated/triton.language.sort.doctree | Bin 11985 -> 11984 bytes .../generated/triton.language.split.doctree | Bin 8697 -> 8696 bytes .../generated/triton.language.sqrt.doctree | Bin 5398 -> 5396 bytes .../generated/triton.language.sqrt_rn.doctree | Bin 5533 -> 5531 bytes .../triton.language.static_assert.doctree | Bin 5500 -> 5498 bytes .../triton.language.static_print.doctree | Bin 8913 -> 8911 bytes .../triton.language.static_range.doctree | Bin 13380 -> 13377 bytes .../generated/triton.language.store.doctree | Bin 24063 -> 24062 bytes .../generated/triton.language.sum.doctree | Bin 9588 -> 9587 bytes .../triton.language.swizzle2d.doctree | Bin 6741 -> 6740 bytes .../generated/triton.language.tensor.doctree | Bin 92626 -> 93039 bytes .../generated/triton.language.trans.doctree | Bin 9509 -> 9508 bytes .../generated/triton.language.umulhi.doctree | Bin 6629 -> 6627 bytes .../generated/triton.language.view.doctree | Bin 8024 -> 8023 bytes .../generated/triton.language.where.doctree | Bin 10111 -> 10109 bytes .../generated/triton.language.xor_sum.doctree | Bin 9700 -> 9699 bytes .../generated/triton.language.zeros.doctree | Bin 7274 -> 7272 bytes .../triton.language.zeros_like.doctree | Bin 5376 -> 5374 bytes .../triton.testing.Benchmark.doctree | Bin 47091 -> 47089 bytes .../triton.testing.assert_close.doctree | Bin 12737 -> 12735 bytes .../generated/triton.testing.do_bench.doctree | Bin 14496 -> 14494 bytes .../triton.testing.do_bench_cudagraph.doctree | Bin 9601 -> 9599 bytes .../triton.testing.perf_report.doctree | Bin 5829 -> 5827 bytes main/.doctrees/python-api/triton.doctree | Bin 7765 -> 7797 bytes .../python-api/triton.language.doctree | Bin 126344 -> 127032 bytes .../python-api/triton.testing.doctree | Bin 8998 -> 9038 bytes main/.doctrees/sg_execution_times.doctree | Bin 19883 -> 19883 bytes .../tutorials_jupyter.zip | Bin 130162 -> 130162 bytes .../tutorials_python.zip | Bin 115034 -> 115034 bytes main/_images/sphx_glr_01-vector-add_001.png | Bin 28468 -> 28487 bytes main/_images/sphx_glr_01-vector-add_thumb.png | Bin 17797 -> 17912 bytes .../_images/sphx_glr_02-fused-softmax_001.png | Bin 30654 -> 31341 bytes .../sphx_glr_02-fused-softmax_thumb.png | Bin 20291 -> 20497 bytes .../sphx_glr_03-matrix-multiplication_001.png | Bin 36251 -> 38385 bytes .../sphx_glr_03-matrix-multiplication_002.png | Bin 29868 -> 29407 bytes ...phx_glr_03-matrix-multiplication_thumb.png | Bin 21093 -> 21606 bytes main/_images/sphx_glr_05-layer-norm_001.png | Bin 35074 -> 34403 bytes main/_images/sphx_glr_05-layer-norm_thumb.png | Bin 22230 -> 21732 bytes .../sphx_glr_06-fused-attention_001.png | Bin 22216 -> 23320 bytes .../sphx_glr_06-fused-attention_002.png | Bin 19765 -> 19550 bytes .../sphx_glr_06-fused-attention_003.png | Bin 23028 -> 22296 bytes .../sphx_glr_06-fused-attention_thumb.png | Bin 18038 -> 18011 bytes main/_images/sphx_glr_08-grouped-gemm_001.png | Bin 34862 -> 33893 bytes .../sphx_glr_08-grouped-gemm_thumb.png | Bin 20460 -> 19712 bytes .../tutorials/01-vector-add.rst.txt | 12 +- .../tutorials/02-fused-softmax.rst.txt | 198 +++++++++--------- .../03-matrix-multiplication.rst.txt | 66 +++--- .../tutorials/04-low-memory-dropout.rst.txt | 2 +- .../tutorials/05-layer-norm.rst.txt | 48 ++--- .../tutorials/06-fused-attention.rst.txt | 32 +-- .../tutorials/07-extern-functions.rst.txt | 2 +- .../tutorials/08-grouped-gemm.rst.txt | 4 +- .../tutorials/09-persistent-matmul.rst.txt | 2 +- .../tutorials/sg_execution_times.rst.txt | 20 +- main/_sources/sg_execution_times.rst.txt | 20 +- main/_static/searchtools.js | 7 +- .../tutorials/01-vector-add.html | 12 +- .../tutorials/02-fused-softmax.html | 198 +++++++++--------- .../tutorials/03-matrix-multiplication.html | 66 +++--- .../tutorials/04-low-memory-dropout.html | 2 +- .../tutorials/05-layer-norm.html | 48 ++--- .../tutorials/06-fused-attention.html | 32 +-- .../tutorials/07-extern-functions.html | 2 +- .../tutorials/08-grouped-gemm.html | 4 +- .../tutorials/09-persistent-matmul.html | 2 +- .../tutorials/sg_execution_times.html | 20 +- main/searchindex.js | 2 +- main/sg_execution_times.html | 20 +- 152 files changed, 412 insertions(+), 411 deletions(-) diff --git a/main/.buildinfo b/main/.buildinfo index 07c1cacb3e6e..566fba1058ce 100644 --- a/main/.buildinfo +++ b/main/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 1466ed63583833c34ee1142b9ed470c5 +config: fe32c7cb5b97ad0f8d9995fdc7770612 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/main/.doctrees/environment.pickle b/main/.doctrees/environment.pickle index 6ba33ce862dc7e61adcadfce3f926326afc9ae09..cad16e82d9bb754f3106c0928b041fdfc08e0190 100644 GIT binary patch literal 383796 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

fused-attention-batch4-head32-d64-fwd-causal=True:
      N_CTX  Triton [FP16]  Triton [FP8]
-0   1024.0     113.385494     93.231589
-1   2048.0     141.236211    112.587231
-2   4096.0     154.912658    124.788749
-3   8192.0     167.409449    131.746001
-4  16384.0     170.826127    135.577739
+0   1024.0     114.576118     93.770834
+1   2048.0     140.554006    110.461577
+2   4096.0     155.833908    122.716015
+3   8192.0     165.748638    129.162773
+4  16384.0     171.207451    133.933123
 fused-attention-batch4-head32-d64-fwd-causal=False:
      N_CTX  Triton [FP16]  Triton [FP8]
-0   1024.0     156.440266    129.196888
-1   2048.0     166.409771    140.830441
-2   4096.0     169.408340    136.333865
-3   8192.0     172.762207    143.414153
-4  16384.0     175.455178    143.562768
+0   1024.0     157.252966    129.125552
+1   2048.0     166.577245    141.413943
+2   4096.0     170.047206    137.960651
+3   8192.0     171.741761    143.775832
+4  16384.0     175.229696    144.606824
 fused-attention-batch4-head32-d64-bwd-causal=True:
      N_CTX  Triton [FP16]  Triton [FP8]
-0   1024.0      73.565420     72.779406
-1   2048.0      97.957491     97.942745
-2   4096.0     117.538940    116.205826
-3   8192.0     126.157821    128.499504
-4  16384.0     132.658984    135.099245
+0   1024.0      73.653940     72.609228
+1   2048.0      98.056100     97.946040
+2   4096.0     116.551437    116.186967
+3   8192.0     126.632440    128.444165
+4  16384.0     132.052073    135.095851
 
@@ -779,7 +779,7 @@ bench_flash_attention.run(save_path=".", print_data=True)
-

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

+

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