@genai-fi/nanogpt 0.20.0 → 0.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseTokeniser-DSg9zcYq.js +221 -0
- package/dist/DatasetBuilder-DgURD85T.js +712 -0
- package/dist/Generator.d.ts +82 -0
- package/dist/Generator.js +2 -0
- package/dist/RealDiv-DBu0FQqT.js +362 -0
- package/dist/Reshape-CABOPB9d.js +94 -0
- package/dist/Reshape-DqO3r8BC.js +17 -0
- package/dist/TeachableLLM.d.ts +70 -0
- package/dist/TeachableLLM.js +2 -0
- package/dist/Trainer.d.ts +43 -0
- package/dist/Trainer.js +2 -0
- package/dist/backend.d.ts +2 -0
- package/dist/backend.js +13 -0
- package/dist/backend_util-Cg-roD1p.js +399 -0
- package/dist/binary_op_util-CrYk9LXL.js +103 -0
- package/dist/checks/appendCache.d.ts +1 -0
- package/dist/checks/appendCache.js +55 -0
- package/dist/checks/attentionMask.d.ts +1 -0
- package/dist/checks/attentionMask.js +56 -0
- package/dist/checks/check.d.ts +9 -0
- package/dist/checks/check.js +32 -0
- package/dist/checks/gelu.d.ts +1 -0
- package/dist/checks/gelu.js +46 -0
- package/dist/checks/index.d.ts +26 -0
- package/dist/checks/index.js +28 -0
- package/dist/checks/matMulGelu.d.ts +1 -0
- package/dist/checks/matMulGelu.js +84 -0
- package/dist/checks/normRMS.d.ts +1 -0
- package/dist/checks/normRMS.js +28 -0
- package/dist/checks/normRMSGrad.d.ts +1 -0
- package/dist/checks/normRMSGrad.js +22 -0
- package/dist/checks/packUnpack.d.ts +1 -0
- package/dist/checks/packUnpack.js +46 -0
- package/dist/checks/qkv.d.ts +1 -0
- package/dist/checks/qkv.js +34 -0
- package/dist/checks/rope.d.ts +1 -0
- package/dist/checks/rope.js +30 -0
- package/dist/checks/weights.d.ts +14 -0
- package/dist/checks/weights.js +27 -0
- package/dist/chunk-BPntVaq0.js +23 -0
- package/dist/complex_util-CkazZsaH.js +60 -0
- package/dist/concat_util-CWDZCBlA.js +19 -0
- package/dist/data/docx.d.ts +2 -0
- package/dist/data/docx.js +3046 -0
- package/dist/data/pdf.d.ts +2 -0
- package/dist/data/pdf.js +17 -0
- package/dist/data/textLoader.d.ts +7 -0
- package/dist/data/textLoader.js +613 -0
- package/dist/dist-BewPQWjc.js +7572 -0
- package/dist/dist-DVmq73nz.js +8775 -0
- package/dist/dist-DXwIvKxl.js +896 -0
- package/dist/dist-VEU5mfO0.js +7545 -0
- package/dist/gelu-Bf1HW1RY.js +27 -0
- package/dist/gpgpu_math-DvLcCH6u.js +1612 -0
- package/dist/inference/types.d.ts +16 -0
- package/dist/inference/types.js +0 -0
- package/dist/kernel_funcs_utils-HiXOOx3f.js +229 -0
- package/dist/layers/BaseLayer.d.ts +44 -0
- package/dist/layers/BaseLayer.js +76 -0
- package/dist/layers/CausalSelfAttention.d.ts +39 -0
- package/dist/layers/CausalSelfAttention.js +99 -0
- package/dist/layers/LoRA.d.ts +14 -0
- package/dist/layers/LoRA.js +48 -0
- package/dist/layers/MLP.d.ts +17 -0
- package/dist/layers/MLP.js +34 -0
- package/dist/layers/PositionEmbedding.d.ts +8 -0
- package/dist/layers/PositionEmbedding.js +27 -0
- package/dist/layers/RMSNorm.d.ts +12 -0
- package/dist/layers/RMSNorm.js +20 -0
- package/dist/layers/RoPECache.d.ts +18 -0
- package/dist/layers/RoPECache.js +337 -0
- package/dist/layers/TiedEmbedding.d.ts +13 -0
- package/dist/layers/TiedEmbedding.js +32 -0
- package/dist/layers/TransformerBlock.d.ts +27 -0
- package/dist/layers/TransformerBlock.js +51 -0
- package/dist/layers/WeightStore.d.ts +20 -0
- package/dist/layers/WeightStore.js +69 -0
- package/dist/loader/load.d.ts +6 -0
- package/dist/loader/load.js +2 -0
- package/dist/loader/loadHF.d.ts +8 -0
- package/dist/loader/loadHF.js +2 -0
- package/dist/loader/loadTransformers.d.ts +4 -0
- package/dist/loader/loadTransformers.js +2 -0
- package/dist/loader/loadZipMeta.d.ts +3 -0
- package/dist/loader/loadZipMeta.js +16 -0
- package/dist/loader/newZipLoad.d.ts +3 -0
- package/dist/loader/newZipLoad.js +2 -0
- package/dist/loader/oldZipLoad.d.ts +9 -0
- package/dist/loader/oldZipLoad.js +2 -0
- package/dist/loader/save.d.ts +16 -0
- package/dist/loader/save.js +2 -0
- package/dist/loader/types.d.ts +68 -0
- package/dist/loader/types.js +0 -0
- package/dist/main-CPjeMv0G.js +13500 -0
- package/dist/main.d.ts +50 -0
- package/dist/main.js +16 -0
- package/dist/matMul16-BNfZSnNM.js +81 -0
- package/dist/matMulGelu-CPTntosE.js +162 -0
- package/dist/models/NanoGPTV1.d.ts +16 -0
- package/dist/models/NanoGPTV1.js +2 -0
- package/dist/models/NanoGPTV2.d.ts +16 -0
- package/dist/models/NanoGPTV2.js +2 -0
- package/dist/models/config.d.ts +27 -0
- package/dist/models/config.js +37 -0
- package/dist/models/factory.d.ts +3 -0
- package/dist/models/factory.js +2 -0
- package/dist/models/model.d.ts +44 -0
- package/dist/models/model.js +2 -0
- package/dist/ops/adamAdjust.d.ts +2 -0
- package/dist/ops/adamAdjust.js +18 -0
- package/dist/ops/adamMoments.d.ts +2 -0
- package/dist/ops/adamMoments.js +16 -0
- package/dist/ops/add16.d.ts +2 -0
- package/dist/ops/add16.js +12 -0
- package/dist/ops/appendCache.d.ts +2 -0
- package/dist/ops/appendCache.js +25 -0
- package/dist/ops/attentionMask.d.ts +2 -0
- package/dist/ops/attentionMask.js +16 -0
- package/dist/ops/concat16.d.ts +2 -0
- package/dist/ops/concat16.js +8 -0
- package/dist/ops/cpu/adamAdjust.d.ts +1 -0
- package/dist/ops/cpu/adamAdjust.js +16 -0
- package/dist/ops/cpu/adamMoments.d.ts +1 -0
- package/dist/ops/cpu/adamMoments.js +16 -0
- package/dist/ops/cpu/appendCache.d.ts +1 -0
- package/dist/ops/cpu/appendCache.js +65 -0
- package/dist/ops/cpu/attentionMask.d.ts +1 -0
- package/dist/ops/cpu/attentionMask.js +16 -0
- package/dist/ops/cpu/fusedSoftmax.d.ts +9 -0
- package/dist/ops/cpu/fusedSoftmax.js +22 -0
- package/dist/ops/cpu/gatherSub.d.ts +1 -0
- package/dist/ops/cpu/gatherSub.js +12 -0
- package/dist/ops/cpu/gelu.d.ts +1 -0
- package/dist/ops/cpu/gelu.js +36 -0
- package/dist/ops/cpu/matMul16.d.ts +1 -0
- package/dist/ops/cpu/matMul16.js +14 -0
- package/dist/ops/cpu/matMulGelu.d.ts +1 -0
- package/dist/ops/cpu/matMulGelu.js +41 -0
- package/dist/ops/cpu/matMulMul.d.ts +1 -0
- package/dist/ops/cpu/matMulMul.js +20 -0
- package/dist/ops/cpu/mulDropout.d.ts +1 -0
- package/dist/ops/cpu/mulDropout.js +20 -0
- package/dist/ops/cpu/normRMS.d.ts +1 -0
- package/dist/ops/cpu/normRMS.js +35 -0
- package/dist/ops/cpu/qkv.d.ts +5 -0
- package/dist/ops/cpu/qkv.js +73 -0
- package/dist/ops/cpu/rope.d.ts +6 -0
- package/dist/ops/cpu/rope.js +81 -0
- package/dist/ops/cpu/scatterSub.d.ts +1 -0
- package/dist/ops/cpu/scatterSub.js +12 -0
- package/dist/ops/dot16.d.ts +2 -0
- package/dist/ops/dot16.js +29 -0
- package/dist/ops/dropout.d.ts +2 -0
- package/dist/ops/dropout.js +11 -0
- package/dist/ops/dropout16.d.ts +2 -0
- package/dist/ops/dropout16.js +22 -0
- package/dist/ops/gatherSub.d.ts +2 -0
- package/dist/ops/gatherSub.js +13 -0
- package/dist/ops/gelu.d.ts +3 -0
- package/dist/ops/gelu.js +2 -0
- package/dist/ops/globalNorm.d.ts +2 -0
- package/dist/ops/globalNorm.js +19 -0
- package/dist/ops/grads/add16.d.ts +1 -0
- package/dist/ops/grads/add16.js +27 -0
- package/dist/ops/grads/attentionMask.d.ts +1 -0
- package/dist/ops/grads/attentionMask.js +26 -0
- package/dist/ops/grads/dropout16.d.ts +1 -0
- package/dist/ops/grads/dropout16.js +1 -0
- package/dist/ops/grads/gelu.d.ts +2 -0
- package/dist/ops/grads/gelu.js +2 -0
- package/dist/ops/grads/matMul16.d.ts +2 -0
- package/dist/ops/grads/matMul16.js +2 -0
- package/dist/ops/grads/matMulGelu.d.ts +1 -0
- package/dist/ops/grads/matMulGelu.js +22 -0
- package/dist/ops/grads/mul16.d.ts +1 -0
- package/dist/ops/grads/mul16.js +1 -0
- package/dist/ops/grads/normRMS.d.ts +3 -0
- package/dist/ops/grads/normRMS.js +37 -0
- package/dist/ops/grads/pack16.d.ts +2 -0
- package/dist/ops/grads/pack16.js +2 -0
- package/dist/ops/grads/qkv.d.ts +3 -0
- package/dist/ops/grads/qkv.js +46 -0
- package/dist/ops/grads/rope.d.ts +2 -0
- package/dist/ops/grads/rope.js +2 -0
- package/dist/ops/grads/softmax16.d.ts +2 -0
- package/dist/ops/grads/softmax16.js +23 -0
- package/dist/ops/grads/unpack16.d.ts +2 -0
- package/dist/ops/grads/unpack16.js +2 -0
- package/dist/ops/grads/utils.d.ts +4 -0
- package/dist/ops/grads/utils.js +12 -0
- package/dist/ops/log.d.ts +0 -0
- package/dist/ops/log.js +1 -0
- package/dist/ops/matMul16.d.ts +15 -0
- package/dist/ops/matMul16.js +2 -0
- package/dist/ops/matMulGelu.d.ts +3 -0
- package/dist/ops/matMulGelu.js +20 -0
- package/dist/ops/matMulMul.d.ts +2 -0
- package/dist/ops/matMulMul.js +16 -0
- package/dist/ops/mul16.d.ts +2 -0
- package/dist/ops/mul16.js +43 -0
- package/dist/ops/mulDrop.d.ts +2 -0
- package/dist/ops/mulDrop.js +15 -0
- package/dist/ops/normRMS.d.ts +2 -0
- package/dist/ops/normRMS.js +22 -0
- package/dist/ops/pack16.d.ts +2 -0
- package/dist/ops/pack16.js +2 -0
- package/dist/ops/qkv.d.ts +2 -0
- package/dist/ops/qkv.js +16 -0
- package/dist/ops/reshape16.d.ts +2 -0
- package/dist/ops/reshape16.js +33 -0
- package/dist/ops/rope.d.ts +3 -0
- package/dist/ops/rope.js +2 -0
- package/dist/ops/scatterSub.d.ts +2 -0
- package/dist/ops/scatterSub.js +13 -0
- package/dist/ops/slice16.d.ts +2 -0
- package/dist/ops/slice16.js +11 -0
- package/dist/ops/softmax16.d.ts +2 -0
- package/dist/ops/softmax16.js +9 -0
- package/dist/ops/sub16.d.ts +2 -0
- package/dist/ops/sub16.js +11 -0
- package/dist/ops/sum16.d.ts +2 -0
- package/dist/ops/sum16.js +13 -0
- package/dist/ops/transpose16.d.ts +3 -0
- package/dist/ops/transpose16.js +32 -0
- package/dist/ops/unpack16.d.ts +2 -0
- package/dist/ops/unpack16.js +2 -0
- package/dist/ops/webgl/adamAdjust.d.ts +1 -0
- package/dist/ops/webgl/adamAdjust.js +82 -0
- package/dist/ops/webgl/adamMoments.d.ts +1 -0
- package/dist/ops/webgl/adamMoments.js +44 -0
- package/dist/ops/webgl/appendCache.d.ts +1 -0
- package/dist/ops/webgl/appendCache.js +53 -0
- package/dist/ops/webgl/attentionMask.d.ts +1 -0
- package/dist/ops/webgl/attentionMask.js +64 -0
- package/dist/ops/webgl/dropout16.d.ts +1 -0
- package/dist/ops/webgl/dropout16.js +12 -0
- package/dist/ops/webgl/fusedSoftmax.d.ts +11 -0
- package/dist/ops/webgl/fusedSoftmax.js +70 -0
- package/dist/ops/webgl/gatherSub.d.ts +1 -0
- package/dist/ops/webgl/gatherSub.js +28 -0
- package/dist/ops/webgl/gelu.d.ts +2 -0
- package/dist/ops/webgl/gelu.js +48 -0
- package/dist/ops/webgl/log.d.ts +17 -0
- package/dist/ops/webgl/log.js +14 -0
- package/dist/ops/webgl/matMul16.d.ts +1 -0
- package/dist/ops/webgl/matMul16.js +37 -0
- package/dist/ops/webgl/matMulGelu.d.ts +21 -0
- package/dist/ops/webgl/matMulGelu.js +2 -0
- package/dist/ops/webgl/matMulMul.d.ts +14 -0
- package/dist/ops/webgl/matMulMul.js +24 -0
- package/dist/ops/webgl/mulDropout.d.ts +1 -0
- package/dist/ops/webgl/mulDropout.js +32 -0
- package/dist/ops/webgl/normRMS.d.ts +1 -0
- package/dist/ops/webgl/normRMS.js +114 -0
- package/dist/ops/webgl/qkv.d.ts +1 -0
- package/dist/ops/webgl/qkv.js +54 -0
- package/dist/ops/webgl/rope.d.ts +1 -0
- package/dist/ops/webgl/rope.js +72 -0
- package/dist/ops/webgl/scatterSub.d.ts +1 -0
- package/dist/ops/webgl/scatterSub.js +28 -0
- package/dist/ops/webgpu/adamAdjust.d.ts +1 -0
- package/dist/ops/webgpu/adamAdjust.js +77 -0
- package/dist/ops/webgpu/adamMoments.d.ts +1 -0
- package/dist/ops/webgpu/adamMoments.js +76 -0
- package/dist/ops/webgpu/add16.d.ts +1 -0
- package/dist/ops/webgpu/add16.js +14 -0
- package/dist/ops/webgpu/appendCache.d.ts +1 -0
- package/dist/ops/webgpu/appendCache.js +130 -0
- package/dist/ops/webgpu/attentionMask.d.ts +1 -0
- package/dist/ops/webgpu/attentionMask.js +42 -0
- package/dist/ops/webgpu/attentionMask32_program.d.ts +19 -0
- package/dist/ops/webgpu/attentionMask32_program.js +62 -0
- package/dist/ops/webgpu/clipScale.d.ts +1 -0
- package/dist/ops/webgpu/clipScale.js +45 -0
- package/dist/ops/webgpu/concat16.d.ts +19 -0
- package/dist/ops/webgpu/concat16.js +111 -0
- package/dist/ops/webgpu/dropout16.d.ts +1 -0
- package/dist/ops/webgpu/dropout16.js +59 -0
- package/dist/ops/webgpu/gatherSub.d.ts +1 -0
- package/dist/ops/webgpu/gatherSub.js +52 -0
- package/dist/ops/webgpu/gelu.d.ts +14 -0
- package/dist/ops/webgpu/gelu.js +147 -0
- package/dist/ops/webgpu/index.d.ts +0 -0
- package/dist/ops/webgpu/index.js +26 -0
- package/dist/ops/webgpu/matMul16.d.ts +1 -0
- package/dist/ops/webgpu/matMul16.js +70 -0
- package/dist/ops/webgpu/matMul16_program.d.ts +42 -0
- package/dist/ops/webgpu/matMul16_program.js +303 -0
- package/dist/ops/webgpu/mul16.d.ts +1 -0
- package/dist/ops/webgpu/mul16.js +14 -0
- package/dist/ops/webgpu/norm2.d.ts +1 -0
- package/dist/ops/webgpu/norm2.js +46 -0
- package/dist/ops/webgpu/normRMS.d.ts +1 -0
- package/dist/ops/webgpu/normRMS.js +26 -0
- package/dist/ops/webgpu/normRMS16_program.d.ts +10 -0
- package/dist/ops/webgpu/normRMS16_program.js +28 -0
- package/dist/ops/webgpu/normRMS32_program.d.ts +10 -0
- package/dist/ops/webgpu/normRMS32_program.js +28 -0
- package/dist/ops/webgpu/normRMSGrad.d.ts +1 -0
- package/dist/ops/webgpu/normRMSGrad.js +225 -0
- package/dist/ops/webgpu/pack16.d.ts +1 -0
- package/dist/ops/webgpu/pack16.js +21 -0
- package/dist/ops/webgpu/pack16_program.d.ts +19 -0
- package/dist/ops/webgpu/pack16_program.js +93 -0
- package/dist/ops/webgpu/qkv.d.ts +1 -0
- package/dist/ops/webgpu/qkv.js +64 -0
- package/dist/ops/webgpu/rope.d.ts +1 -0
- package/dist/ops/webgpu/rope.js +163 -0
- package/dist/ops/webgpu/scatterSub.d.ts +1 -0
- package/dist/ops/webgpu/scatterSub.js +53 -0
- package/dist/ops/webgpu/slice16.d.ts +7 -0
- package/dist/ops/webgpu/slice16.js +74 -0
- package/dist/ops/webgpu/softmax16.d.ts +17 -0
- package/dist/ops/webgpu/softmax16.js +18 -0
- package/dist/ops/webgpu/softmax16_program.d.ts +13 -0
- package/dist/ops/webgpu/softmax16_program.js +89 -0
- package/dist/ops/webgpu/softmax16_subgroup_program.d.ts +17 -0
- package/dist/ops/webgpu/softmax16_subgroup_program.js +70 -0
- package/dist/ops/webgpu/softmax16grad.d.ts +1 -0
- package/dist/ops/webgpu/softmax16grad.js +31 -0
- package/dist/ops/webgpu/sub16.d.ts +1 -0
- package/dist/ops/webgpu/sub16.js +14 -0
- package/dist/ops/webgpu/sum16.d.ts +1 -0
- package/dist/ops/webgpu/sum16.js +29 -0
- package/dist/ops/webgpu/transpose16.d.ts +1 -0
- package/dist/ops/webgpu/transpose16.js +37 -0
- package/dist/ops/webgpu/transpose16_program.d.ts +16 -0
- package/dist/ops/webgpu/transpose16_program.js +51 -0
- package/dist/ops/webgpu/transpose16_shared_program.d.ts +15 -0
- package/dist/ops/webgpu/transpose16_shared_program.js +79 -0
- package/dist/ops/webgpu/unpack16.d.ts +1 -0
- package/dist/ops/webgpu/unpack16.js +60 -0
- package/dist/ops/webgpu/utils/binary_op.d.ts +35 -0
- package/dist/ops/webgpu/utils/binary_op.js +141 -0
- package/dist/ops/webgpu/utils/deviceInfo.d.ts +7 -0
- package/dist/ops/webgpu/utils/deviceInfo.js +11 -0
- package/dist/ops/webgpu/utils/reductions.d.ts +43 -0
- package/dist/ops/webgpu/utils/reductions.js +263 -0
- package/dist/pack16-Ck-spx_F.js +39 -0
- package/dist/patches/webgpu_backend.d.ts +18 -0
- package/dist/patches/webgpu_backend.js +43 -0
- package/dist/patches/webgpu_base.d.ts +21 -0
- package/dist/patches/webgpu_base.js +22 -0
- package/dist/patches/webgpu_program.d.ts +36 -0
- package/dist/patches/webgpu_program.js +293 -0
- package/dist/pdf-UoDqCYzz.js +16726 -0
- package/dist/picomatch-3tUnMMbd.js +1063 -0
- package/dist/rope-CbeGlsV8.js +25 -0
- package/dist/selu_util-zkAx5doH.js +24 -0
- package/dist/shared-D1coEFea.js +1314 -0
- package/dist/shared-DOgWaqvL.js +5 -0
- package/dist/slice_util-Dgb3ANWI.js +208 -0
- package/dist/tfjs_backend-BjuQ5FqB.js +614 -0
- package/dist/tokeniser/BaseTokeniser.d.ts +33 -0
- package/dist/tokeniser/BaseTokeniser.js +2 -0
- package/dist/tokeniser/CharTokeniser.d.ts +24 -0
- package/dist/tokeniser/CharTokeniser.js +92 -0
- package/dist/tokeniser/bpe.d.ts +28 -0
- package/dist/tokeniser/bpe.js +170 -0
- package/dist/tokeniser/messages.d.ts +61 -0
- package/dist/tokeniser/messages.js +0 -0
- package/dist/tokeniser/type.d.ts +34 -0
- package/dist/tokeniser/type.js +0 -0
- package/dist/training/AdamW.d.ts +36 -0
- package/dist/training/AdamW.js +128 -0
- package/dist/training/BasicTrainer.d.ts +63 -0
- package/dist/training/BasicTrainer.js +265 -0
- package/dist/training/DatasetBuilder.d.ts +26 -0
- package/dist/training/DatasetBuilder.js +2 -0
- package/dist/training/Evaluator.d.ts +19 -0
- package/dist/training/Evaluator.js +48 -0
- package/dist/training/LRScheduler.d.ts +12 -0
- package/dist/training/LRScheduler.js +38 -0
- package/dist/training/PreTrainer.d.ts +11 -0
- package/dist/training/PreTrainer.js +22 -0
- package/dist/training/SFTTrainer.d.ts +12 -0
- package/dist/training/SFTTrainer.js +24 -0
- package/dist/training/loss.d.ts +3 -0
- package/dist/training/loss.js +19 -0
- package/dist/training/orthoGrad.d.ts +2 -0
- package/dist/training/orthoGrad.js +10 -0
- package/dist/training/sparseCrossEntropy.d.ts +7 -0
- package/dist/training/sparseCrossEntropy.js +47 -0
- package/dist/training/tasks/ConversationTask.d.ts +18 -0
- package/dist/training/tasks/ConversationTask.js +38 -0
- package/dist/training/tasks/PretrainingTask.d.ts +17 -0
- package/dist/training/tasks/PretrainingTask.js +42 -0
- package/dist/training/tasks/StartSentenceTask.d.ts +18 -0
- package/dist/training/tasks/StartSentenceTask.js +45 -0
- package/dist/training/tasks/Task.d.ts +22 -0
- package/dist/training/tasks/Task.js +55 -0
- package/dist/training/tasks/splitter.d.ts +5 -0
- package/dist/training/tasks/splitter.js +18 -0
- package/dist/training/types.d.ts +78 -0
- package/dist/training/types.js +0 -0
- package/dist/training/validation.d.ts +17 -0
- package/dist/training/validation.js +2 -0
- package/dist/utilities/arrayClose.d.ts +1 -0
- package/dist/utilities/arrayClose.js +16 -0
- package/dist/utilities/datasetID.d.ts +2 -0
- package/dist/utilities/datasetID.js +18 -0
- package/dist/utilities/dummy.d.ts +9 -0
- package/dist/utilities/dummy.js +36 -0
- package/dist/utilities/multinomialCPU.d.ts +2 -0
- package/dist/utilities/multinomialCPU.js +9 -0
- package/dist/utilities/naming.d.ts +4 -0
- package/dist/utilities/naming.js +0 -0
- package/dist/utilities/packed.d.ts +4 -0
- package/dist/utilities/packed.js +13 -0
- package/dist/utilities/parameters.d.ts +11 -0
- package/dist/utilities/parameters.js +38 -0
- package/dist/utilities/performance.d.ts +2 -0
- package/dist/utilities/performance.js +16 -0
- package/dist/utilities/profile.d.ts +17 -0
- package/dist/utilities/profile.js +33 -0
- package/dist/utilities/safetensors.d.ts +3 -0
- package/dist/utilities/safetensors.js +53 -0
- package/dist/utilities/sentences.d.ts +5 -0
- package/dist/utilities/sentences.js +32 -0
- package/dist/utilities/tokenParse.d.ts +1 -0
- package/dist/utilities/tokenParse.js +17 -0
- package/dist/utilities/topP.d.ts +1 -0
- package/dist/utilities/topP.js +12 -0
- package/dist/utilities/waitForModel.d.ts +2 -0
- package/dist/utilities/waitForModel.js +12 -0
- package/dist/utilities/weights.d.ts +12 -0
- package/dist/utilities/weights.js +40 -0
- package/dist/utilities/yielder.d.ts +1 -0
- package/dist/utilities/yielder.js +7 -0
- package/dist/webgpu-Dt7BMzWz.js +525 -0
- package/dist/webgpu_program-WOyIVMlZ.js +392 -0
- package/dist/webgpu_util-B_F3SShA.js +106 -0
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { WebGPUProgram } from '@tensorflow/tfjs-backend-webgpu';
|
|
2
|
+
import { BinaryOpType } from '@tensorflow/tfjs-backend-webgpu/dist/binary_op_util';
|
|
3
|
+
export { BinaryOpType };
|
|
4
|
+
export declare class BinaryOpProgram implements WebGPUProgram {
|
|
5
|
+
dispatch: [number, number, number];
|
|
6
|
+
dispatchLayout: {
|
|
7
|
+
x: number[];
|
|
8
|
+
};
|
|
9
|
+
outputComponent: number;
|
|
10
|
+
op: BinaryOpType;
|
|
11
|
+
outputShape: number[];
|
|
12
|
+
shaderKey: string;
|
|
13
|
+
size: boolean;
|
|
14
|
+
variableNames: string[];
|
|
15
|
+
workgroupSize: [number, number, number];
|
|
16
|
+
variableComponents: number[];
|
|
17
|
+
constructor(op: BinaryOpType, aShape: number[], bShape: number[]);
|
|
18
|
+
getUserCode(): string;
|
|
19
|
+
}
|
|
20
|
+
export declare class BinaryOpScalarProgram implements WebGPUProgram {
|
|
21
|
+
dispatch: [number, number, number];
|
|
22
|
+
dispatchLayout: {
|
|
23
|
+
x: number[];
|
|
24
|
+
};
|
|
25
|
+
outputComponent: number;
|
|
26
|
+
op: BinaryOpType;
|
|
27
|
+
outputShape: number[];
|
|
28
|
+
shaderKey: string;
|
|
29
|
+
size: boolean;
|
|
30
|
+
variableNames: string[];
|
|
31
|
+
workgroupSize: [number, number, number];
|
|
32
|
+
variableComponents: number[];
|
|
33
|
+
constructor(op: BinaryOpType, aShape: number[]);
|
|
34
|
+
getUserCode(): string;
|
|
35
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { In as e, Js as t } from "../../../dist-BewPQWjc.js";
|
|
2
|
+
import { s as n } from "../../../webgpu_program-WOyIVMlZ.js";
|
|
3
|
+
import { c as r, i } from "../../../webgpu_util-B_F3SShA.js";
|
|
4
|
+
import { n as a, t as o } from "../../../binary_op_util-CrYk9LXL.js";
|
|
5
|
+
//#region lib/ops/webgpu/utils/binary_op.ts
|
|
6
|
+
var s = class {
|
|
7
|
+
dispatch;
|
|
8
|
+
dispatchLayout;
|
|
9
|
+
outputComponent;
|
|
10
|
+
op;
|
|
11
|
+
outputShape;
|
|
12
|
+
shaderKey;
|
|
13
|
+
size = !0;
|
|
14
|
+
variableNames = ["A", "B"];
|
|
15
|
+
workgroupSize;
|
|
16
|
+
variableComponents;
|
|
17
|
+
constructor(n, a, o) {
|
|
18
|
+
this.outputShape = e(a, o), this.dispatchLayout = r(this.outputShape), this.op = n;
|
|
19
|
+
let s = a.length > 0 && a[a.length - 1] % 4 == 0, c = o.length > 0 && o[o.length - 1] % 4 == 0;
|
|
20
|
+
if (s && c) this.outputComponent = 4, this.variableComponents = [4, 4];
|
|
21
|
+
else if (s && (t(o) || o[o.length - 1] === 1) || c && (t(a) || a[a.length - 1] === 1)) throw Error("Cannot broadcast 16-bit float binary ops with mixed vector sizes");
|
|
22
|
+
else throw Error("16-bit float binary ops require inner dimension to be multiple of 4");
|
|
23
|
+
this.shaderKey = `binary_${n}_${this.variableComponents}`, this.workgroupSize = [
|
|
24
|
+
128,
|
|
25
|
+
1,
|
|
26
|
+
1
|
|
27
|
+
], this.dispatch = i(this.dispatchLayout, this.outputShape, this.workgroupSize, [
|
|
28
|
+
this.outputComponent,
|
|
29
|
+
1,
|
|
30
|
+
1
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
getUserCode() {
|
|
34
|
+
let e = this.outputComponent === 4 ? "vec4<f32>" : "f32";
|
|
35
|
+
return `
|
|
36
|
+
${`
|
|
37
|
+
fn binaryOperation(a : ${e}, b : ${e}) -> ${e} {
|
|
38
|
+
${a(this.op, this.outputComponent === 4)}
|
|
39
|
+
};
|
|
40
|
+
`}
|
|
41
|
+
${n("index")} {
|
|
42
|
+
if (index < uniforms.size) {
|
|
43
|
+
let a = A[index];
|
|
44
|
+
let b = B[index];
|
|
45
|
+
|
|
46
|
+
let v4a1 = vec4<f32>(
|
|
47
|
+
unpack2x16float(u32(a.x)),
|
|
48
|
+
unpack2x16float(u32(a.y))
|
|
49
|
+
);
|
|
50
|
+
let v4a2 = vec4<f32>(
|
|
51
|
+
unpack2x16float(u32(a.z)),
|
|
52
|
+
unpack2x16float(u32(a.w))
|
|
53
|
+
);
|
|
54
|
+
let v4b1 = vec4<f32>(
|
|
55
|
+
unpack2x16float(u32(b.x)),
|
|
56
|
+
unpack2x16float(u32(b.y))
|
|
57
|
+
);
|
|
58
|
+
let v4b2 = vec4<f32>(
|
|
59
|
+
unpack2x16float(u32(b.z)),
|
|
60
|
+
unpack2x16float(u32(b.w))
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
let v4res1 = binaryOperation(v4a1, v4b1);
|
|
64
|
+
let v4res2 = binaryOperation(v4a2, v4b2);
|
|
65
|
+
|
|
66
|
+
let res = vec4<i32>(
|
|
67
|
+
i32(pack2x16float(v4res1.xy)),
|
|
68
|
+
i32(pack2x16float(v4res1.zw)),
|
|
69
|
+
i32(pack2x16float(v4res2.xy)),
|
|
70
|
+
i32(pack2x16float(v4res2.zw))
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
result[index] = res;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
}, c = class {
|
|
79
|
+
dispatch;
|
|
80
|
+
dispatchLayout;
|
|
81
|
+
outputComponent;
|
|
82
|
+
op;
|
|
83
|
+
outputShape;
|
|
84
|
+
shaderKey;
|
|
85
|
+
size = !0;
|
|
86
|
+
variableNames = ["A", "B"];
|
|
87
|
+
workgroupSize;
|
|
88
|
+
variableComponents;
|
|
89
|
+
constructor(e, t) {
|
|
90
|
+
if (this.outputShape = t, this.dispatchLayout = r(this.outputShape), this.op = e, t.length > 0 && t[t.length - 1] % 4 == 0) this.outputComponent = 4, this.variableComponents = [4, 1];
|
|
91
|
+
else throw Error("16-bit float binary ops require inner dimension to be multiple of 4");
|
|
92
|
+
this.shaderKey = `binary_scal_${e}_${this.variableComponents}`, this.workgroupSize = [
|
|
93
|
+
128,
|
|
94
|
+
1,
|
|
95
|
+
1
|
|
96
|
+
], this.dispatch = i(this.dispatchLayout, this.outputShape, this.workgroupSize, [
|
|
97
|
+
this.outputComponent,
|
|
98
|
+
1,
|
|
99
|
+
1
|
|
100
|
+
]);
|
|
101
|
+
}
|
|
102
|
+
getUserCode() {
|
|
103
|
+
let e = this.outputComponent === 4 ? "vec4<f32>" : "f32";
|
|
104
|
+
return `
|
|
105
|
+
${`
|
|
106
|
+
fn binaryOperation(a : ${e}, b : ${e}) -> ${e} {
|
|
107
|
+
${a(this.op, this.outputComponent === 4)}
|
|
108
|
+
};
|
|
109
|
+
`}
|
|
110
|
+
${n("index")} {
|
|
111
|
+
if (index < uniforms.size) {
|
|
112
|
+
let a = A[index];
|
|
113
|
+
let b = B[0];
|
|
114
|
+
|
|
115
|
+
let v4a1 = vec4<f32>(
|
|
116
|
+
unpack2x16float(u32(a.x)),
|
|
117
|
+
unpack2x16float(u32(a.y))
|
|
118
|
+
);
|
|
119
|
+
let v4a2 = vec4<f32>(
|
|
120
|
+
unpack2x16float(u32(a.z)),
|
|
121
|
+
unpack2x16float(u32(a.w))
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
let v4res1 = binaryOperation(v4a1, vec4<f32>(b));
|
|
125
|
+
let v4res2 = binaryOperation(v4a2, vec4<f32>(b));
|
|
126
|
+
|
|
127
|
+
let res = vec4<i32>(
|
|
128
|
+
i32(pack2x16float(v4res1.xy)),
|
|
129
|
+
i32(pack2x16float(v4res1.zw)),
|
|
130
|
+
i32(pack2x16float(v4res2.xy)),
|
|
131
|
+
i32(pack2x16float(v4res2.zw))
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
result[index] = res;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
`;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
//#endregion
|
|
141
|
+
export { s as BinaryOpProgram, c as BinaryOpScalarProgram, o as BinaryOpType };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { default as WebGPUBackendPatch } from '../../../../patches/webgpu_backend';
|
|
2
|
+
export interface DeviceInformation {
|
|
3
|
+
subgroupsSupported: boolean;
|
|
4
|
+
subgroupMaxSize: number;
|
|
5
|
+
variableSubgroups: boolean;
|
|
6
|
+
}
|
|
7
|
+
export default function createDeviceInformation(backend: WebGPUBackendPatch): DeviceInformation;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region lib/ops/webgpu/utils/deviceInfo.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let t = e.device.features.has("subgroups");
|
|
4
|
+
return {
|
|
5
|
+
subgroupsSupported: t,
|
|
6
|
+
subgroupMaxSize: e.subgroupMaxSize,
|
|
7
|
+
variableSubgroups: e.subgroupMinSize !== e.subgroupMaxSize && t
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { e as default };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { backend_util, TensorInfo } from '@tensorflow/tfjs-core';
|
|
2
|
+
import { WebGPUProgram } from '@tensorflow/tfjs-backend-webgpu/dist/webgpu_program';
|
|
3
|
+
import { WebGPUBackend } from '@tensorflow/tfjs-backend-webgpu';
|
|
4
|
+
import { DeviceInformation } from './deviceInfo';
|
|
5
|
+
export interface ReduceParams {
|
|
6
|
+
reductionOp: 'mean' | 'sum';
|
|
7
|
+
elementwise?: boolean;
|
|
8
|
+
forceWorkgroupSize?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function createReduceInfo(inputs: TensorInfo[], axis: number | number[]): backend_util.ReduceInfo;
|
|
11
|
+
export declare class ReduceProgram implements WebGPUProgram {
|
|
12
|
+
atomic: boolean;
|
|
13
|
+
outputShape: number[];
|
|
14
|
+
shaderKey: string;
|
|
15
|
+
dispatchLayout: {
|
|
16
|
+
x: number[];
|
|
17
|
+
};
|
|
18
|
+
dispatch: [number, number, number];
|
|
19
|
+
workgroupSize: [number, number, number];
|
|
20
|
+
variableNames: string[];
|
|
21
|
+
uniforms: string;
|
|
22
|
+
inputShape: number[];
|
|
23
|
+
size: boolean;
|
|
24
|
+
packed: boolean;
|
|
25
|
+
outputComponent: number;
|
|
26
|
+
variableComponents?: number[];
|
|
27
|
+
elementwise: boolean;
|
|
28
|
+
subgroups: boolean;
|
|
29
|
+
subgroupBuiltins: boolean;
|
|
30
|
+
deviceInfo: DeviceInformation;
|
|
31
|
+
params: ReduceParams;
|
|
32
|
+
utilityFunctions?: string;
|
|
33
|
+
constructor(deviceInfo: DeviceInformation, reduceInfo: backend_util.ReduceInfo, params: ReduceParams, packed: boolean);
|
|
34
|
+
protected getWriteSnippet(): string;
|
|
35
|
+
protected getPreprocessSnippet(): string;
|
|
36
|
+
protected getPostprocessSnippet(): string;
|
|
37
|
+
protected getReadSnippet(): string;
|
|
38
|
+
getUserCode(): string;
|
|
39
|
+
}
|
|
40
|
+
export declare function reduce(program: ReduceProgram, inputs: TensorInfo[], backend: WebGPUBackend, extraUniforms?: {
|
|
41
|
+
type: string;
|
|
42
|
+
data: number[];
|
|
43
|
+
}[], output?: TensorInfo): TensorInfo;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { ii as e, kt as t, nc as n, oc as r, wn as i } from "../../../dist-BewPQWjc.js";
|
|
2
|
+
import { reshape16 as a } from "../../reshape16.js";
|
|
3
|
+
import { s as o } from "../../../webgpu_program-WOyIVMlZ.js";
|
|
4
|
+
import { c as s } from "../../../webgpu_util-B_F3SShA.js";
|
|
5
|
+
//#region lib/ops/webgpu/utils/reductions.ts
|
|
6
|
+
function c(e, t, n, r) {
|
|
7
|
+
return e && !t ? "\n bestValue = subgroupAdd(bestValue);\n " : e ? `
|
|
8
|
+
bestValue = subgroupAdd(bestValue);
|
|
9
|
+
let lane = localId.x % subgroupSize;
|
|
10
|
+
if (lane == 0) {
|
|
11
|
+
bestValues[localId.x / subgroupSize] = bestValue;
|
|
12
|
+
}
|
|
13
|
+
workgroupBarrier();
|
|
14
|
+
let numSubgroups = ${n} / subgroupSize;
|
|
15
|
+
bestValue = select(${r ? "vec2<f32>(0.0f)" : "0.0f"}, bestValues[lane], lane < numSubgroups);
|
|
16
|
+
bestValue = subgroupAdd(bestValue);
|
|
17
|
+
` : `
|
|
18
|
+
bestValues[localId.x] = bestValue;
|
|
19
|
+
workgroupBarrier();
|
|
20
|
+
|
|
21
|
+
var reduceSize = min(u32(Length), ${n}u);
|
|
22
|
+
for (var currentSize = reduceSize / 2u; reduceSize > 1u;
|
|
23
|
+
currentSize = reduceSize / 2u) {
|
|
24
|
+
let interval = DIV_CEIL(reduceSize, 2u);
|
|
25
|
+
if (localId.x < currentSize) {
|
|
26
|
+
let candidate = bestValues[localId.x + interval];
|
|
27
|
+
bestValue = bestValue + candidate;
|
|
28
|
+
bestValues[localId.x] = bestValue;
|
|
29
|
+
}
|
|
30
|
+
reduceSize = interval;
|
|
31
|
+
workgroupBarrier();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
bestValue = bestValues[0];
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
function l(e) {
|
|
38
|
+
let t = `${e.workgroupSizeX}`, n = e.subgroups && !e.variableSubgroups ? "" : `
|
|
39
|
+
var<workgroup> bestValues : array<f32, ${e.workgroupSizeX}>;
|
|
40
|
+
`, r = c(e.subgroups, e.variableSubgroups, e.workgroupSizeX, !1);
|
|
41
|
+
return `
|
|
42
|
+
fn DIV_CEIL(a : u32, b : u32) -> u32 {
|
|
43
|
+
return ((a - 1u) / b + 1u);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
fn readInput(index: i32) -> vec2<f32> {
|
|
47
|
+
${e.inputReadSnippet ? e.inputReadSnippet : "\n let packed = u32(x[index]);\n return unpack2x16float(packed);\n "}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
${n}
|
|
51
|
+
${e.utilityFunctions ?? ""}
|
|
52
|
+
|
|
53
|
+
${o("index")} {
|
|
54
|
+
let outputIndex = index / ${t};
|
|
55
|
+
let offset = outputIndex * uniforms.reduceSize;
|
|
56
|
+
var bestValue = 0.0f;
|
|
57
|
+
let Length = uniforms.reduceSize;
|
|
58
|
+
let tid = i32(localId.x);
|
|
59
|
+
|
|
60
|
+
for (var k = tid; k < Length;
|
|
61
|
+
k = k + ${t}) {
|
|
62
|
+
var candidate = readInput(offset + k);
|
|
63
|
+
${e.inputSnippet}
|
|
64
|
+
bestValue = bestValue + candidate.x + candidate.y;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
${r}
|
|
68
|
+
bestValue = bestValue ${e.reductionOp === "mean" ? "/ f32(uniforms.reduceSize * 2i)" : ""};
|
|
69
|
+
|
|
70
|
+
${e.reducedSnippet ? e.reducedSnippet : ""}
|
|
71
|
+
|
|
72
|
+
for (var k = tid; k < Length;
|
|
73
|
+
k = k + ${t}) {
|
|
74
|
+
${e.outputSnippet}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
}
|
|
79
|
+
function u(e) {
|
|
80
|
+
let t = `${e.workgroupSizeX}`, n = e.subgroups && !e.variableSubgroups ? "" : `
|
|
81
|
+
var<workgroup> bestValues : array<vec2<f32>, ${e.workgroupSizeX}>;
|
|
82
|
+
`, r = c(e.subgroups, e.variableSubgroups, e.workgroupSizeX, !0);
|
|
83
|
+
return `
|
|
84
|
+
fn DIV_CEIL(a : u32, b : u32) -> u32 {
|
|
85
|
+
return ((a - 1u) / b + 1u);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
fn readInput(index: i32) -> vec2<f32> {
|
|
89
|
+
${e.inputReadSnippet ? e.inputReadSnippet : "\n let packed = u32(x[index]);\n return unpack2x16float(packed);\n "}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
${n}
|
|
93
|
+
${e.utilityFunctions ?? ""}
|
|
94
|
+
|
|
95
|
+
${o("index")} {
|
|
96
|
+
let outputIndex = index / ${t};
|
|
97
|
+
let offset1 = outputIndex * 2 * uniforms.reduceSize;
|
|
98
|
+
let offset2 = offset1 + uniforms.reduceSize;
|
|
99
|
+
var bestValue = vec2<f32>(0.0f, 0.0f);
|
|
100
|
+
let Length = uniforms.reduceSize;
|
|
101
|
+
let tid = i32(localId.x);
|
|
102
|
+
|
|
103
|
+
for (var k = tid; k < Length;
|
|
104
|
+
k = k + ${t}) {
|
|
105
|
+
var candidate = readInput(offset1 + k);
|
|
106
|
+
${e.inputSnippet}
|
|
107
|
+
let bv1 = candidate.x + candidate.y;
|
|
108
|
+
|
|
109
|
+
candidate = readInput(offset2 + k);
|
|
110
|
+
${e.inputSnippet}
|
|
111
|
+
let bv2 = candidate.x + candidate.y;
|
|
112
|
+
|
|
113
|
+
bestValue = bestValue + vec2<f32>(bv1, bv2);
|
|
114
|
+
}
|
|
115
|
+
${r}
|
|
116
|
+
bestValue = bestValue ${e.reductionOp === "mean" ? "/ f32(uniforms.reduceSize * 2i)" : ""};
|
|
117
|
+
|
|
118
|
+
${e.reducedSnippet ?? ""}
|
|
119
|
+
${e.outputSnippet}
|
|
120
|
+
}
|
|
121
|
+
`;
|
|
122
|
+
}
|
|
123
|
+
function d(e) {
|
|
124
|
+
return e.elementwise ? l(e) : u(e);
|
|
125
|
+
}
|
|
126
|
+
function f(e) {
|
|
127
|
+
let t = `${e.workgroupSizeX}`, n = e.subgroups && !e.variableSubgroups ? "" : `
|
|
128
|
+
var<workgroup> bestValues : array<f32, ${e.workgroupSizeX}>;
|
|
129
|
+
`, r = c(e.subgroups, e.variableSubgroups, e.workgroupSizeX, !1);
|
|
130
|
+
return `
|
|
131
|
+
fn DIV_CEIL(a : u32, b : u32) -> u32 {
|
|
132
|
+
return ((a - 1u) / b + 1u);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
fn readInput(index: i32) -> f32 {
|
|
136
|
+
${e.inputReadSnippet ? e.inputReadSnippet : "\n return x[index];\n "}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
${n}
|
|
140
|
+
${e.utilityFunctions ?? ""}
|
|
141
|
+
|
|
142
|
+
${o("index")} {
|
|
143
|
+
let outputIndex = index / ${e.workgroupSizeX};
|
|
144
|
+
let offset = outputIndex * uniforms.reduceSize;
|
|
145
|
+
var bestValue = 0.0f;
|
|
146
|
+
let Length = uniforms.reduceSize;
|
|
147
|
+
let tid = i32(localId.x);
|
|
148
|
+
|
|
149
|
+
for (var k = tid; k < Length;
|
|
150
|
+
k = k + ${e.workgroupSizeX}) {
|
|
151
|
+
var candidate = readInput(offset + k);
|
|
152
|
+
${e.inputSnippet}
|
|
153
|
+
bestValue = bestValue + candidate;
|
|
154
|
+
}
|
|
155
|
+
${r}
|
|
156
|
+
|
|
157
|
+
bestValue = bestValue ${e.reductionOp === "mean" ? "/ f32(uniforms.reduceSize)" : ""};
|
|
158
|
+
|
|
159
|
+
${e.reducedSnippet}
|
|
160
|
+
|
|
161
|
+
${e.elementwise ? `for (var k = tid; k < Length;
|
|
162
|
+
k = k + ${t}) {
|
|
163
|
+
${e.outputSnippet}
|
|
164
|
+
}` : `${e.outputSnippet}`}
|
|
165
|
+
}
|
|
166
|
+
`;
|
|
167
|
+
}
|
|
168
|
+
function p(e, t) {
|
|
169
|
+
let a = e[0], o = n(t, a.shape), [, s] = i(a.shape, o), c = r(s), l = r(a.shape) / c;
|
|
170
|
+
return {
|
|
171
|
+
windowSize: c,
|
|
172
|
+
inSize: c,
|
|
173
|
+
batchSize: l,
|
|
174
|
+
outSize: l
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
var m = class {
|
|
178
|
+
atomic = !1;
|
|
179
|
+
outputShape;
|
|
180
|
+
shaderKey = "reduce16";
|
|
181
|
+
dispatchLayout;
|
|
182
|
+
dispatch;
|
|
183
|
+
workgroupSize = [
|
|
184
|
+
64,
|
|
185
|
+
1,
|
|
186
|
+
1
|
|
187
|
+
];
|
|
188
|
+
variableNames = ["x"];
|
|
189
|
+
uniforms = "reduceSize : i32,";
|
|
190
|
+
inputShape;
|
|
191
|
+
size = !1;
|
|
192
|
+
packed = !0;
|
|
193
|
+
outputComponent;
|
|
194
|
+
variableComponents;
|
|
195
|
+
elementwise;
|
|
196
|
+
subgroups = !1;
|
|
197
|
+
subgroupBuiltins = !1;
|
|
198
|
+
deviceInfo;
|
|
199
|
+
params;
|
|
200
|
+
utilityFunctions;
|
|
201
|
+
constructor(e, t, n, r) {
|
|
202
|
+
this.params = n, this.inputShape = [t.batchSize, t.inSize], this.deviceInfo = e, this.packed = r;
|
|
203
|
+
let i = n.forceWorkgroupSize ? n.forceWorkgroupSize : t.inSize % 64 == 0 ? 64 : 32;
|
|
204
|
+
e.subgroupsSupported && !n.forceWorkgroupSize ? (this.workgroupSize = [
|
|
205
|
+
Math.min(i, e.subgroupMaxSize),
|
|
206
|
+
1,
|
|
207
|
+
1
|
|
208
|
+
], this.subgroups = !0, e.variableSubgroups && (this.subgroupBuiltins = !0)) : this.workgroupSize[0] = i, this.outputShape = n.elementwise ? [t.batchSize, t.inSize] : r ? [t.outSize / 2] : [t.outSize], this.dispatchLayout = s(this.outputShape), this.dispatch = [
|
|
209
|
+
n.elementwise ? t.batchSize : r ? t.batchSize / 2 : t.batchSize,
|
|
210
|
+
1,
|
|
211
|
+
1
|
|
212
|
+
], this.outputComponent = 1, this.variableComponents = [1], this.elementwise = n.elementwise === !0;
|
|
213
|
+
}
|
|
214
|
+
getWriteSnippet() {
|
|
215
|
+
return this.packed ? "result[outputIndex] = i32(pack2x16float(bestValue));" : "result[outputIndex] = bestValue;";
|
|
216
|
+
}
|
|
217
|
+
getPreprocessSnippet() {
|
|
218
|
+
return "";
|
|
219
|
+
}
|
|
220
|
+
getPostprocessSnippet() {
|
|
221
|
+
return "";
|
|
222
|
+
}
|
|
223
|
+
getReadSnippet() {
|
|
224
|
+
return this.packed ? "\n let packed = u32(x[index]);\n return unpack2x16float(packed);\n " : "return f32(x[index]);";
|
|
225
|
+
}
|
|
226
|
+
getUserCode() {
|
|
227
|
+
let e = this.workgroupSize[0];
|
|
228
|
+
return this.packed ? d({
|
|
229
|
+
...this.params,
|
|
230
|
+
workgroupSizeX: e,
|
|
231
|
+
subgroups: this.subgroups,
|
|
232
|
+
variableSubgroups: this.deviceInfo.variableSubgroups,
|
|
233
|
+
inputReadSnippet: this.getReadSnippet(),
|
|
234
|
+
inputSnippet: this.getPreprocessSnippet(),
|
|
235
|
+
outputSnippet: this.getWriteSnippet(),
|
|
236
|
+
reducedSnippet: this.getPostprocessSnippet(),
|
|
237
|
+
utilityFunctions: this.utilityFunctions
|
|
238
|
+
}) : f({
|
|
239
|
+
...this.params,
|
|
240
|
+
workgroupSizeX: e,
|
|
241
|
+
subgroups: this.subgroups,
|
|
242
|
+
variableSubgroups: this.deviceInfo.variableSubgroups,
|
|
243
|
+
inputReadSnippet: this.getReadSnippet(),
|
|
244
|
+
inputSnippet: this.getPreprocessSnippet(),
|
|
245
|
+
outputSnippet: this.getWriteSnippet(),
|
|
246
|
+
reducedSnippet: this.getPostprocessSnippet(),
|
|
247
|
+
utilityFunctions: this.utilityFunctions
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
function h(n, r, i, o, s) {
|
|
252
|
+
let c = r[0], l = [{
|
|
253
|
+
type: "int32",
|
|
254
|
+
data: [n.inputShape[n.inputShape.length - 1]]
|
|
255
|
+
}, ...o ?? []], u = s;
|
|
256
|
+
!s && n.atomic && (u = t(n.outputShape, "int32"));
|
|
257
|
+
let d = i.runWebGPUProgram(n, r, n.packed ? "packedF16" : n.atomic ? "int32" : "float32", l, u), f = e().makeTensorFromTensorInfo(d);
|
|
258
|
+
if (n.outputShape.length === 1 && n.outputShape[0] <= 2) return f;
|
|
259
|
+
let p = a(f, n.elementwise ? c.shape : n.packed ? [...c.shape.slice(0, -2), c.shape[c.shape.length - 2] / 2] : [...c.shape.slice(0, -2), c.shape[c.shape.length - 2]]);
|
|
260
|
+
return f.dispose(), p;
|
|
261
|
+
}
|
|
262
|
+
//#endregion
|
|
263
|
+
export { m as ReduceProgram, p as createReduceInfo, h as reduce };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Fi as e, ii as t, mr as n } from "./dist-BewPQWjc.js";
|
|
2
|
+
import { isPackedTensor as r } from "./utilities/packed.js";
|
|
3
|
+
//#region lib/ops/grads/unpack16.ts
|
|
4
|
+
var i = {
|
|
5
|
+
kernelName: "Unpack16",
|
|
6
|
+
inputsToSave: [],
|
|
7
|
+
outputsToSave: [],
|
|
8
|
+
gradFunc: (e) => ({ x: () => s(e) })
|
|
9
|
+
};
|
|
10
|
+
e(i);
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region lib/ops/unpack16.ts
|
|
13
|
+
function a(e, n = 1, i = !1) {
|
|
14
|
+
if (!r(e)) return e;
|
|
15
|
+
let a = t().runKernel("Unpack16", { x: e }, { scaling: n });
|
|
16
|
+
return i && e.dispose(), a;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region lib/ops/grads/pack16.ts
|
|
20
|
+
var o = {
|
|
21
|
+
kernelName: "Pack16",
|
|
22
|
+
inputsToSave: [],
|
|
23
|
+
outputsToSave: [],
|
|
24
|
+
gradFunc: (e, t, r) => ({ x: () => {
|
|
25
|
+
let t = a(e);
|
|
26
|
+
return r.originalShape && r.padding && r.padding > 0 ? n(t, Array(t.shape.length).fill(0), r.originalShape) : t;
|
|
27
|
+
} })
|
|
28
|
+
};
|
|
29
|
+
e(o);
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region lib/ops/pack16.ts
|
|
32
|
+
function s(e, n = 1, r = 0) {
|
|
33
|
+
return t().runKernel("Pack16", { x: e }, {
|
|
34
|
+
scaling: n,
|
|
35
|
+
padding: r
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { i, o as n, a as r, s as t };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DataType, TensorInfo } from '@tensorflow/tfjs-core';
|
|
2
|
+
import { WebGPUBackend } from '@tensorflow/tfjs-backend-webgpu/dist/webgpu';
|
|
3
|
+
import { WebGPUProgram } from './webgpu_program';
|
|
4
|
+
type ProgramUniform = {
|
|
5
|
+
type: string;
|
|
6
|
+
data: number[];
|
|
7
|
+
}[];
|
|
8
|
+
interface ExtendedAdapterInfo extends GPUAdapterInfo {
|
|
9
|
+
subgroupMaxSize: number;
|
|
10
|
+
subgroupMinSize: number;
|
|
11
|
+
}
|
|
12
|
+
export default class WebGPUBackendPatch extends WebGPUBackend {
|
|
13
|
+
readonly subgroupMaxSize: number;
|
|
14
|
+
readonly subgroupMinSize: number;
|
|
15
|
+
constructor(device: GPUDevice, adapterInfo?: ExtendedAdapterInfo);
|
|
16
|
+
runWebGPUProgram(program: WebGPUProgram, inputs: TensorInfo[], outputDtype: DataType, programDefinedUniform?: ProgramUniform, output?: TensorInfo): TensorInfo;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Ms as e, Ps as t, Vs as n, oc as r } from "../dist-BewPQWjc.js";
|
|
2
|
+
import { l as i } from "../webgpu_program-WOyIVMlZ.js";
|
|
3
|
+
import { compileProgram as a } from "./webgpu_program.js";
|
|
4
|
+
import { t as o } from "../webgpu-Dt7BMzWz.js";
|
|
5
|
+
//#region lib/patches/webgpu_backend.ts
|
|
6
|
+
var s = (e, n) => {
|
|
7
|
+
let r = e.limits.maxComputeWorkgroupsPerDimension, i = n.dispatchLayout, a = n.dispatch;
|
|
8
|
+
if (a.every((e) => e <= r)) return a;
|
|
9
|
+
t(a[0] > r && i.y === void 0 && i.z === void 0, () => "Dispatch size exceeds WebGPU limits in Y or Z dimension.");
|
|
10
|
+
let o = Math.ceil(Math.sqrt(a[0]));
|
|
11
|
+
return o > r ? (o = Math.ceil(Math.cbrt(a[0])), t(o <= r, () => "Total dispatch size exceeds WebGPU maximum."), [
|
|
12
|
+
o,
|
|
13
|
+
o,
|
|
14
|
+
o
|
|
15
|
+
]) : [
|
|
16
|
+
o,
|
|
17
|
+
o,
|
|
18
|
+
1
|
|
19
|
+
];
|
|
20
|
+
}, c = class extends o {
|
|
21
|
+
subgroupMaxSize;
|
|
22
|
+
subgroupMinSize;
|
|
23
|
+
constructor(e, t) {
|
|
24
|
+
super(e, t), this.subgroupMaxSize = t?.subgroupMaxSize ?? 0, this.subgroupMinSize = t?.subgroupMinSize ?? 0;
|
|
25
|
+
}
|
|
26
|
+
runWebGPUProgram(t, o, c, l, u) {
|
|
27
|
+
if (u ||= this.makeTensorInfo(t.outputShape, c), r(u.shape) === 0) return this.tensorMap.get(u.dataId).values = n(u.dtype, 0), u;
|
|
28
|
+
this.uploadToGPU(u.dataId), t.dispatch = s(this.device, t);
|
|
29
|
+
let d = o.map((e, n) => {
|
|
30
|
+
if (e.dtype === "complex64") throw Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");
|
|
31
|
+
return this.uploadToGPU(e.dataId), {
|
|
32
|
+
dtype: this.tensorMap.get(e.dataId).dtype,
|
|
33
|
+
shape: e.shape,
|
|
34
|
+
name: t.variableNames[n]
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
t.shaderKey = i(t, d, u);
|
|
38
|
+
let f = e().getBool("WEBGPU_ENGINE_COMPILE_ONLY");
|
|
39
|
+
return t.shaderKey in this.pipelineCache || (this.pipelineCache[t.shaderKey] = a(this.device, t, d, u, f)), t.pipeline = this.pipelineCache[t.shaderKey], f || this.recordAndSubmit(t, u, o, l), u;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { c as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Google Inc. All Rights Reserved.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
* =============================================================================
|
|
16
|
+
*/
|
|
17
|
+
export interface GPUOptions {
|
|
18
|
+
powerPreference?: 'low-power' | 'high-performance';
|
|
19
|
+
disableSubgroups?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function registerWebGPUBackend(options?: GPUOptions): void;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { li as e } from "../dist-BewPQWjc.js";
|
|
2
|
+
import t from "./webgpu_backend.js";
|
|
3
|
+
//#region lib/patches/webgpu_base.ts
|
|
4
|
+
function n(n) {
|
|
5
|
+
e("webgpu", async () => {
|
|
6
|
+
let e = { powerPreference: n?.powerPreference ?? "high-performance" };
|
|
7
|
+
console.log("Using custom WebGPU backend with power preference:", e.powerPreference);
|
|
8
|
+
let r = await navigator.gpu.requestAdapter(e), i = {}, a = [];
|
|
9
|
+
r.features.has("timestamp-query") && a.push("timestamp-query"), r.features.has("bgra8unorm-storage") && a.push(["bgra8unorm-storage"]), !n?.disableSubgroups && r.features.has("subgroups") && a.push("subgroups"), i.requiredFeatures = a;
|
|
10
|
+
let o = r.limits;
|
|
11
|
+
return i.requiredLimits = {
|
|
12
|
+
maxComputeWorkgroupStorageSize: o.maxComputeWorkgroupStorageSize,
|
|
13
|
+
maxComputeWorkgroupsPerDimension: o.maxComputeWorkgroupsPerDimension,
|
|
14
|
+
maxStorageBufferBindingSize: o.maxStorageBufferBindingSize,
|
|
15
|
+
maxBufferSize: o.maxBufferSize,
|
|
16
|
+
maxComputeWorkgroupSizeX: o.maxComputeWorkgroupSizeX,
|
|
17
|
+
maxComputeInvocationsPerWorkgroup: o.maxComputeInvocationsPerWorkgroup
|
|
18
|
+
}, new t(await r.requestDevice(i), "info" in r ? r.info : "requestAdapterInfo" in r ? await r.requestAdapterInfo() : void 0);
|
|
19
|
+
}, 3);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { n as registerWebGPUBackend };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DataType, TensorInfo } from '@tensorflow/tfjs-core';
|
|
2
|
+
export declare enum PixelsOpType {
|
|
3
|
+
FROM_PIXELS = 0,
|
|
4
|
+
DRAW = 1
|
|
5
|
+
}
|
|
6
|
+
export interface WebGPUProgram {
|
|
7
|
+
atomic?: boolean;
|
|
8
|
+
subgroups?: boolean;
|
|
9
|
+
subgroupBuiltins?: boolean;
|
|
10
|
+
dispatch: [number, number, number];
|
|
11
|
+
dispatchLayout: {
|
|
12
|
+
x: number[];
|
|
13
|
+
y?: number[];
|
|
14
|
+
z?: number[];
|
|
15
|
+
};
|
|
16
|
+
outputComponent?: number;
|
|
17
|
+
outputShape: number[];
|
|
18
|
+
pixelsOpType?: PixelsOpType;
|
|
19
|
+
shaderKey: string;
|
|
20
|
+
size?: boolean;
|
|
21
|
+
uniforms?: string;
|
|
22
|
+
variableNames: string[];
|
|
23
|
+
variableComponents?: number[];
|
|
24
|
+
workgroupSize: [number, number, number];
|
|
25
|
+
workPerThread?: number;
|
|
26
|
+
pipeline?: GPUComputePipeline | Promise<GPUComputePipeline>;
|
|
27
|
+
getUserCode: () => string;
|
|
28
|
+
}
|
|
29
|
+
export declare const compileProgram: (device: GPUDevice, program: WebGPUProgram, inputsData: InputInfo[], output: TensorInfo, parallelCompilation: boolean) => GPUComputePipeline | Promise<GPUComputePipeline>;
|
|
30
|
+
interface InputInfo {
|
|
31
|
+
dtype: DataType;
|
|
32
|
+
shape: number[];
|
|
33
|
+
name: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function getStartHeaderString(useGlobalIndex: boolean, program: WebGPUProgram): string;
|
|
36
|
+
export {};
|