@genai-fi/nanogpt 0.20.0 → 0.20.2
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-D5CbfCiV.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,225 @@
|
|
|
1
|
+
import { Fs as e, Ii as t, ii as n } from "../../dist-BewPQWjc.js";
|
|
2
|
+
import { isPackedTensor as r } from "../../utilities/packed.js";
|
|
3
|
+
import { reshape16 as i } from "../reshape16.js";
|
|
4
|
+
import { sum16 as a } from "../sum16.js";
|
|
5
|
+
import { r as o, t as s } from "../../pack16-Ck-spx_F.js";
|
|
6
|
+
import { s as c } from "../../webgpu_program-WOyIVMlZ.js";
|
|
7
|
+
import { c as l } from "../../webgpu_util-B_F3SShA.js";
|
|
8
|
+
import { slice16 as u } from "../slice16.js";
|
|
9
|
+
import { createReduceInfo as d } from "./utils/reductions.js";
|
|
10
|
+
//#region lib/ops/webgpu/normRMSGrad.ts
|
|
11
|
+
var f = class {
|
|
12
|
+
outputShape;
|
|
13
|
+
shaderKey = "RMSNormGrad";
|
|
14
|
+
dispatchLayout;
|
|
15
|
+
dispatch;
|
|
16
|
+
workgroupSize = [
|
|
17
|
+
64,
|
|
18
|
+
1,
|
|
19
|
+
1
|
|
20
|
+
];
|
|
21
|
+
variableNames = [
|
|
22
|
+
"x",
|
|
23
|
+
"gamma",
|
|
24
|
+
"dy"
|
|
25
|
+
];
|
|
26
|
+
uniforms = "reduceSize : i32, batchSize: i32";
|
|
27
|
+
inputShape;
|
|
28
|
+
size = !1;
|
|
29
|
+
rowsPerWorkgroup;
|
|
30
|
+
packed = !1;
|
|
31
|
+
outputComponent;
|
|
32
|
+
constructor(e, t = 4, n = !1) {
|
|
33
|
+
if (this.packed = n, this.shaderKey = `RMSNormGrad_${t}`, this.rowsPerWorkgroup = t, this.inputShape = [e.batchSize, e.inSize], this.outputShape = [e.batchSize + e.batchSize / this.rowsPerWorkgroup, e.inSize], this.dispatchLayout = l(this.outputShape), this.dispatch = [
|
|
34
|
+
e.batchSize / this.rowsPerWorkgroup,
|
|
35
|
+
1,
|
|
36
|
+
1
|
|
37
|
+
], e.batchSize % this.rowsPerWorkgroup !== 0) throw Error(`RMSNormGradProgram: batch size ${e.batchSize} must be divisible by rowsPerWorkgroup ${this.rowsPerWorkgroup}`);
|
|
38
|
+
if (e.inSize > 1024) throw Error(`RMSNormGradProgram: inSize ${e.inSize} exceeds max of 1024`);
|
|
39
|
+
}
|
|
40
|
+
getUserCode() {
|
|
41
|
+
let e = this.workgroupSize[0], t = this.rowsPerWorkgroup, n = `
|
|
42
|
+
var<workgroup> partials : array<vec2<f32>, ${e}>;
|
|
43
|
+
var<workgroup> accumulation: array<${this.packed ? "vec2<f32>" : "f32"}, 1024>;
|
|
44
|
+
`, r = this.packed ? "\n let X = unpack2x16float(u32(x[offset + k]));\n let DY = unpack2x16float(u32(dy[offset + k]));\n let G = unpack2x16float(u32(gamma[k]));\n sum_x2 = fma(X.x, X.x, sum_x2);\n sum_x2 = fma(X.y, X.y, sum_x2);\n sum_dygx = fma(DY.x * G.x, X.x, sum_dygx);\n sum_dygx = fma(DY.y * G.y, X.y, sum_dygx);\n " : "\n let X = f32(x[offset + k]);\n let DY = f32(dy[offset + k]);\n let G = f32(gamma[k]);\n sum_x2 = fma(X, X, sum_x2);\n sum_dygx = fma(DY * G, X, sum_dygx);\n ", i = this.packed ? "\n let X = unpack2x16float(u32(x[offset + k]));\n let DY = unpack2x16float(u32(dy[offset + k]));\n let G = unpack2x16float(u32(gamma[k]));\n\n let dyGamma = DY * G;\n let dx = vec2<f32>(\n fma(dyGamma.x, invRMS, -X.x * scale),\n fma(dyGamma.y, invRMS, -X.y * scale)\n );\n\n result[offset + k] = i32(pack2x16float(dx));\n\n // dGamma\n accumulation[k] = fma(DY, X * invRMS, accumulation[k]);\n " : "\n let X = f32(x[offset + k]);\n let DY = f32(dy[offset + k]);\n let G = f32(gamma[k]);\n\n let dyGamma = DY * G;\n let dx = fma(dyGamma, invRMS, -X * scale);\n\n result[offset + k] = dx;\n\n // dGamma\n accumulation[k] = fma(DY, X * invRMS, accumulation[k]);\n ", a = this.packed ? "\n result[outDgBase + k] = i32(pack2x16float(accumulation[k]));\n " : "\n result[outDgBase + k] = accumulation[k];\n ";
|
|
45
|
+
return `
|
|
46
|
+
fn DIV_CEIL(a : u32, b : u32) -> u32 {
|
|
47
|
+
return ((a - 1u) / b + 1u);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
${n}
|
|
51
|
+
|
|
52
|
+
${c("index")} {
|
|
53
|
+
// One workgroup per row (batch).
|
|
54
|
+
let Length = uniforms.reduceSize;
|
|
55
|
+
let BatchSize = uniforms.batchSize;
|
|
56
|
+
for (var k = i32(localId.x); k < Length; k = k + ${e}) {
|
|
57
|
+
accumulation[k] = ${this.packed ? "vec2<f32>(0.0f)" : "0.0f"};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
for (var rowOff = 0; rowOff < ${t}; rowOff = rowOff + 1) {
|
|
61
|
+
let row = i32(workgroupId.x) * ${t} + rowOff;
|
|
62
|
+
let offset = row * Length;
|
|
63
|
+
|
|
64
|
+
var sum_x2 = 0.0f;
|
|
65
|
+
var sum_dygx = 0.0f;
|
|
66
|
+
|
|
67
|
+
for (var k = i32(localId.x); k < Length; k = k + ${e}) {
|
|
68
|
+
${r}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
partials[localId.x] = vec2<f32>(sum_x2, sum_dygx);
|
|
72
|
+
workgroupBarrier();
|
|
73
|
+
|
|
74
|
+
var reduceSize = min(u32(Length), ${e}u);
|
|
75
|
+
for (var currentSize = reduceSize / 2u; reduceSize > 1u; currentSize = reduceSize / 2u) {
|
|
76
|
+
let interval = DIV_CEIL(reduceSize, 2u);
|
|
77
|
+
if (localId.x < currentSize) {
|
|
78
|
+
partials[localId.x] = partials[localId.x] + partials[localId.x + interval];
|
|
79
|
+
}
|
|
80
|
+
reduceSize = interval;
|
|
81
|
+
workgroupBarrier();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let invN = 1.0f / f32(${this.packed ? "Length * 2" : "Length"});
|
|
85
|
+
let mean_x2 = fma(partials[0].x, invN, 1e-8);
|
|
86
|
+
let mean_dygx = partials[0].y * invN;
|
|
87
|
+
|
|
88
|
+
let invRMS = inverseSqrt(mean_x2);
|
|
89
|
+
let scale = (mean_dygx / (mean_x2)) * invRMS;
|
|
90
|
+
|
|
91
|
+
// write dx and dGamma.
|
|
92
|
+
for (var k = i32(localId.x); k < Length; k = k + ${e}) {
|
|
93
|
+
${i}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
workgroupBarrier();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Write out the partially accumulated dGamma
|
|
100
|
+
let outDgBase = BatchSize * Length + i32(workgroupId.x) * Length;
|
|
101
|
+
for (var k = i32(localId.x); k < Length; k = k + ${e}) {
|
|
102
|
+
${a}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
}, p = class {
|
|
108
|
+
outputShape;
|
|
109
|
+
shaderKey = "RMSNormGrad";
|
|
110
|
+
dispatchLayout;
|
|
111
|
+
dispatch;
|
|
112
|
+
workgroupSize = [
|
|
113
|
+
64,
|
|
114
|
+
1,
|
|
115
|
+
1
|
|
116
|
+
];
|
|
117
|
+
variableNames = ["x", "dy"];
|
|
118
|
+
uniforms = "reduceSize : i32, batchSize: i32";
|
|
119
|
+
inputShape;
|
|
120
|
+
size = !1;
|
|
121
|
+
packed = !1;
|
|
122
|
+
outputComponent;
|
|
123
|
+
constructor(e, t = !1) {
|
|
124
|
+
this.packed = t, this.shaderKey = "RMSNormGrad_NoGamma", this.inputShape = [e.batchSize, e.inSize], this.outputShape = [e.batchSize, e.inSize], this.dispatchLayout = l(this.outputShape), this.dispatch = [
|
|
125
|
+
e.batchSize,
|
|
126
|
+
1,
|
|
127
|
+
1
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
getUserCode() {
|
|
131
|
+
let e = this.workgroupSize[0], t = `
|
|
132
|
+
var<workgroup> partials : array<vec2<f32>, ${e}>;
|
|
133
|
+
`, n = this.packed ? "\n let X = unpack2x16float(u32(x[offset + k]));\n let DY = unpack2x16float(u32(dy[offset + k]));\n sum_x2 = fma(X.x, X.x, sum_x2);\n sum_x2 = fma(X.y, X.y, sum_x2);\n sum_dygx = fma(DY.x, X.x, sum_dygx);\n sum_dygx = fma(DY.y, X.y, sum_dygx);\n " : "\n let X = f32(x[offset + k]);\n let DY = f32(dy[offset + k]);\n sum_x2 = fma(X, X, sum_x2);\n sum_dygx = fma(DY, X, sum_dygx);\n ", r = this.packed ? "\n let X = unpack2x16float(u32(x[offset + k]));\n let DY = unpack2x16float(u32(dy[offset + k]));\n\n let dx = vec2<f32>(\n fma(DY.x, invRMS, -X.x * scale),\n fma(DY.y, invRMS, -X.y * scale)\n );\n\n result[offset + k] = i32(pack2x16float(dx));\n " : "\n let X = f32(x[offset + k]);\n let DY = f32(dy[offset + k]);\n\n let dx = fma(DY, invRMS, -X * scale);\n\n result[offset + k] = dx;\n ";
|
|
134
|
+
return `
|
|
135
|
+
fn DIV_CEIL(a : u32, b : u32) -> u32 {
|
|
136
|
+
return ((a - 1u) / b + 1u);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
${t}
|
|
140
|
+
|
|
141
|
+
${c("index")} {
|
|
142
|
+
// One workgroup per row (batch).
|
|
143
|
+
let Length = uniforms.reduceSize;
|
|
144
|
+
let BatchSize = uniforms.batchSize;
|
|
145
|
+
|
|
146
|
+
let row = i32(workgroupId.x);
|
|
147
|
+
let offset = row * Length;
|
|
148
|
+
|
|
149
|
+
var sum_x2 = 0.0f;
|
|
150
|
+
var sum_dygx = 0.0f;
|
|
151
|
+
|
|
152
|
+
for (var k = i32(localId.x); k < Length; k = k + ${e}) {
|
|
153
|
+
${n}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
partials[localId.x] = vec2<f32>(sum_x2, sum_dygx);
|
|
157
|
+
workgroupBarrier();
|
|
158
|
+
|
|
159
|
+
var reduceSize = min(u32(Length), ${e}u);
|
|
160
|
+
for (var currentSize = reduceSize / 2u; reduceSize > 1u; currentSize = reduceSize / 2u) {
|
|
161
|
+
let interval = DIV_CEIL(reduceSize, 2u);
|
|
162
|
+
if (localId.x < currentSize) {
|
|
163
|
+
partials[localId.x] = partials[localId.x] + partials[localId.x + interval];
|
|
164
|
+
}
|
|
165
|
+
reduceSize = interval;
|
|
166
|
+
workgroupBarrier();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
let invN = 1.0f / f32(${this.packed ? "Length * 2" : "Length"});
|
|
170
|
+
let mean_x2 = fma(partials[0].x, invN, 1e-8);
|
|
171
|
+
let mean_dygx = partials[0].y * invN;
|
|
172
|
+
|
|
173
|
+
let invRMS = inverseSqrt(mean_x2);
|
|
174
|
+
let scale = (mean_dygx / (mean_x2)) * invRMS;
|
|
175
|
+
|
|
176
|
+
// write dx and dGamma.
|
|
177
|
+
for (var k = i32(localId.x); k < Length; k = k + ${e}) {
|
|
178
|
+
${r}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
`;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
function m(t) {
|
|
185
|
+
let { dy: c, x: l, gamma: m } = t.inputs;
|
|
186
|
+
e(l.shape, c.shape, "Error in RMSNormGrad dy: ");
|
|
187
|
+
let h = r(l), g = m ? r(m) : !1, _ = r(c), v = h || g || _, y = !v || h ? l : s(l), b = !v || g || !m ? m : s(m), x = !v || _ ? c : s(c);
|
|
188
|
+
b && e(b.shape, [y.shape[y.shape.length - 1]], "Error in RMSNormGrad gamma: ");
|
|
189
|
+
let S = t.backend, C = d(b ? [
|
|
190
|
+
y,
|
|
191
|
+
b,
|
|
192
|
+
x
|
|
193
|
+
] : [y, x], -1), w = m ? new f(C, 4, v) : new p(C, v), T = [{
|
|
194
|
+
type: "int32",
|
|
195
|
+
data: [w.inputShape[1]]
|
|
196
|
+
}, {
|
|
197
|
+
type: "int32",
|
|
198
|
+
data: [w.inputShape[0]]
|
|
199
|
+
}];
|
|
200
|
+
if (C.inSize > 1024) throw Error(`rmsNormGradGPU: inSize ${C.inSize} exceeds max of 1024`);
|
|
201
|
+
let E = S.runWebGPUProgram(w, b ? [
|
|
202
|
+
y,
|
|
203
|
+
b,
|
|
204
|
+
x
|
|
205
|
+
] : [y, x], v ? "packedF16" : "float32", T);
|
|
206
|
+
v && !h && y.dispose(), v && !g && b && b.dispose(), v && !_ && x.dispose();
|
|
207
|
+
let D = n().makeTensorFromTensorInfo(E);
|
|
208
|
+
if (m) {
|
|
209
|
+
let e = u(D, [0, 0], [C.batchSize, C.inSize]), t = u(D, [C.batchSize, 0], [C.batchSize / 4, C.inSize]);
|
|
210
|
+
D.dispose();
|
|
211
|
+
let n = i(e, l.shape);
|
|
212
|
+
e.dispose();
|
|
213
|
+
let r = a(t, [0]);
|
|
214
|
+
return t.dispose(), [n, !v || g ? r : o(r)];
|
|
215
|
+
} else {
|
|
216
|
+
let e = i(D, l.shape);
|
|
217
|
+
return D.dispose(), [e];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
t({
|
|
221
|
+
kernelName: "RMSNormGrad",
|
|
222
|
+
backendName: "webgpu",
|
|
223
|
+
kernelFunc: m
|
|
224
|
+
});
|
|
225
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Ii as e } from "../../dist-BewPQWjc.js";
|
|
2
|
+
import t from "./pack16_program.js";
|
|
3
|
+
//#region lib/ops/webgpu/pack16.ts
|
|
4
|
+
function n(e) {
|
|
5
|
+
let { x: n } = e.inputs, { scaling: r, padding: i } = e.attrs, a = e.backend;
|
|
6
|
+
if (n.shape[n.shape.length - 1] % 2 != 0) throw Error("Last dimension of input tensor must be even to use Pack16.");
|
|
7
|
+
e.attrs && (e.attrs.originalShape = n.shape);
|
|
8
|
+
let o = new t(n.shape, i), s = r !== 1;
|
|
9
|
+
s && o.useScaling();
|
|
10
|
+
let c = [{
|
|
11
|
+
type: "float32",
|
|
12
|
+
data: [r]
|
|
13
|
+
}];
|
|
14
|
+
return a.runWebGPUProgram(o, [n], "packedF16", s ? c : void 0);
|
|
15
|
+
}
|
|
16
|
+
e({
|
|
17
|
+
kernelName: "Pack16",
|
|
18
|
+
backendName: "webgpu",
|
|
19
|
+
kernelFunc: n
|
|
20
|
+
});
|
|
21
|
+
//#endregion
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { WebGPUProgram } from '@tensorflow/tfjs-backend-webgpu';
|
|
2
|
+
export default class PackProgram implements WebGPUProgram {
|
|
3
|
+
outputShape: number[];
|
|
4
|
+
shaderKey: string;
|
|
5
|
+
dispatchLayout: {
|
|
6
|
+
x: number[];
|
|
7
|
+
};
|
|
8
|
+
dispatch: [number, number, number];
|
|
9
|
+
workgroupSize: [number, number, number];
|
|
10
|
+
variableNames: string[];
|
|
11
|
+
uniforms?: string;
|
|
12
|
+
size: boolean;
|
|
13
|
+
outputComponent: number;
|
|
14
|
+
scaling: boolean;
|
|
15
|
+
padding: number;
|
|
16
|
+
constructor(outShape: number[], padding?: number);
|
|
17
|
+
useScaling(): void;
|
|
18
|
+
getUserCode(): string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { s as e } from "../../webgpu_program-WOyIVMlZ.js";
|
|
2
|
+
import { c as t, i as n } from "../../webgpu_util-B_F3SShA.js";
|
|
3
|
+
//#region lib/ops/webgpu/pack16_program.ts
|
|
4
|
+
var r = class {
|
|
5
|
+
outputShape;
|
|
6
|
+
shaderKey = "Pack16";
|
|
7
|
+
dispatchLayout;
|
|
8
|
+
dispatch;
|
|
9
|
+
workgroupSize = [
|
|
10
|
+
64,
|
|
11
|
+
1,
|
|
12
|
+
1
|
|
13
|
+
];
|
|
14
|
+
variableNames = ["x"];
|
|
15
|
+
uniforms;
|
|
16
|
+
size = !0;
|
|
17
|
+
outputComponent = 4;
|
|
18
|
+
scaling = !1;
|
|
19
|
+
padding = 0;
|
|
20
|
+
constructor(e, r = 0) {
|
|
21
|
+
if (e[e.length - 1] % 2 != 0 && r === 0) throw Error("Last dimension of output shape must be even to use Pack16.");
|
|
22
|
+
if (r % 4 != 0) throw Error("Padding must be a multiple of 4 to use Pack16.");
|
|
23
|
+
if (this.outputShape = [...e.slice(0, -1), e[e.length - 1]], r > 0) {
|
|
24
|
+
this.shaderKey += `_Padded${r}`, this.padding = r;
|
|
25
|
+
for (let e = this.outputShape.length - 2; e < this.outputShape.length; e++) this.outputShape[e] % this.padding !== 0 && (this.outputShape[e] += this.padding - this.outputShape[e] % this.padding);
|
|
26
|
+
this.outputComponent = 1;
|
|
27
|
+
}
|
|
28
|
+
this.outputShape[this.outputShape.length - 1] /= 2, this.outputShape[this.outputShape.length - 1] % this.outputComponent !== 0 && (this.outputComponent = 1), this.dispatchLayout = t(this.outputShape), this.dispatch = n(this.dispatchLayout, this.outputShape, this.workgroupSize, [
|
|
29
|
+
this.outputComponent,
|
|
30
|
+
1,
|
|
31
|
+
1
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
useScaling() {
|
|
35
|
+
this.shaderKey += "_Scaled", this.uniforms = "scaling : f32,", this.scaling = !0;
|
|
36
|
+
}
|
|
37
|
+
getUserCode() {
|
|
38
|
+
if (this.padding > 0 && this.outputComponent === 1) {
|
|
39
|
+
let t = this.outputShape.length;
|
|
40
|
+
return `
|
|
41
|
+
${e("index")} {
|
|
42
|
+
if (index < uniforms.size) {
|
|
43
|
+
var coords = getCoordsFromIndex(index);
|
|
44
|
+
coords[${t} - 1] = coords[${t} - 1] * 2;
|
|
45
|
+
let row = coords[${t} - 2];
|
|
46
|
+
let col = coords[${t} - 1];
|
|
47
|
+
let width = uniforms.xShape[${t} - 1];
|
|
48
|
+
let height = uniforms.xShape[${t} - 2];
|
|
49
|
+
|
|
50
|
+
var value1 = 0.0f;
|
|
51
|
+
if (col < width && row < height) {
|
|
52
|
+
let baseInputIndex = getIndexFromCoords${t}D(coords, uniforms.xShape);
|
|
53
|
+
value1 = x[baseInputIndex] ${this.scaling ? "* uniforms.scaling" : ""};
|
|
54
|
+
}
|
|
55
|
+
var value2 = 0.0f;
|
|
56
|
+
if (col + 1 < width && row < height) {
|
|
57
|
+
coords[${t} - 1] = coords[${t} - 1] + 1;
|
|
58
|
+
let baseInputIndex = getIndexFromCoords${t}D(coords, uniforms.xShape);
|
|
59
|
+
value2 = x[baseInputIndex] ${this.scaling ? "* uniforms.scaling" : ""};
|
|
60
|
+
}
|
|
61
|
+
let packed = i32(pack2x16float(vec2<f32>(value1, value2)));
|
|
62
|
+
result[index] = packed;
|
|
63
|
+
}
|
|
64
|
+
}`;
|
|
65
|
+
}
|
|
66
|
+
return this.outputComponent === 1 ? `
|
|
67
|
+
${e("index")} {
|
|
68
|
+
if (index < uniforms.size) {
|
|
69
|
+
let baseInputIndex = index * 2;
|
|
70
|
+
let x1 = x[baseInputIndex] ${this.scaling ? "* uniforms.scaling" : ""};
|
|
71
|
+
let x2 = x[baseInputIndex + 1] ${this.scaling ? "* uniforms.scaling" : ""};
|
|
72
|
+
let packed = i32(pack2x16float(vec2<f32>(x1, x2)));
|
|
73
|
+
result[index] = packed;
|
|
74
|
+
}
|
|
75
|
+
}` : `
|
|
76
|
+
${e("index")} {
|
|
77
|
+
if (index < uniforms.size) {
|
|
78
|
+
let baseInputIndex = index * 2;
|
|
79
|
+
let x1 = x[baseInputIndex] ${this.scaling ? "* uniforms.scaling" : ""};
|
|
80
|
+
let x2 = x[baseInputIndex + 1] ${this.scaling ? "* uniforms.scaling" : ""};
|
|
81
|
+
let packed = vec4<i32>(
|
|
82
|
+
i32(pack2x16float(vec2<f32>(x1.x, x1.y))),
|
|
83
|
+
i32(pack2x16float(vec2<f32>(x1.z, x1.w))),
|
|
84
|
+
i32(pack2x16float(vec2<f32>(x2.x, x2.y))),
|
|
85
|
+
i32(pack2x16float(vec2<f32>(x2.z, x2.w)))
|
|
86
|
+
);
|
|
87
|
+
result[index] = packed;
|
|
88
|
+
}
|
|
89
|
+
}`;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
//#endregion
|
|
93
|
+
export { r as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Fs as e, Ii as t } from "../../dist-BewPQWjc.js";
|
|
2
|
+
import { isPackedTensor as n } from "../../utilities/packed.js";
|
|
3
|
+
import { t as r } from "../../matMul16-BNfZSnNM.js";
|
|
4
|
+
import { slice16 as i } from "../slice16.js";
|
|
5
|
+
//#region lib/ops/webgpu/qkv.ts
|
|
6
|
+
function a(t) {
|
|
7
|
+
let { x: a, kernel: o } = t.inputs, { heads: s } = t.attrs, c = a.shape[0], l = a.shape[1], u = a.shape[2], d = n(a);
|
|
8
|
+
if (e(o.shape, [d ? u * 2 : u, 3 * u], "Error in QKV: "), u % s !== 0) throw Error(`Channel dimension ${u} must be divisible by number of heads ${s} in QKV.`);
|
|
9
|
+
let f = r(a, o, !1, !1, {
|
|
10
|
+
forceOutputShape: [
|
|
11
|
+
c,
|
|
12
|
+
l,
|
|
13
|
+
3 * s,
|
|
14
|
+
u / s
|
|
15
|
+
],
|
|
16
|
+
perm: [
|
|
17
|
+
0,
|
|
18
|
+
2,
|
|
19
|
+
1,
|
|
20
|
+
3
|
|
21
|
+
]
|
|
22
|
+
}), p = [
|
|
23
|
+
i(f, [
|
|
24
|
+
0,
|
|
25
|
+
0,
|
|
26
|
+
0,
|
|
27
|
+
0
|
|
28
|
+
], [
|
|
29
|
+
c,
|
|
30
|
+
s,
|
|
31
|
+
l,
|
|
32
|
+
u / s
|
|
33
|
+
]),
|
|
34
|
+
i(f, [
|
|
35
|
+
0,
|
|
36
|
+
s,
|
|
37
|
+
0,
|
|
38
|
+
0
|
|
39
|
+
], [
|
|
40
|
+
c,
|
|
41
|
+
s,
|
|
42
|
+
l,
|
|
43
|
+
u / s
|
|
44
|
+
]),
|
|
45
|
+
i(f, [
|
|
46
|
+
0,
|
|
47
|
+
2 * s,
|
|
48
|
+
0,
|
|
49
|
+
0
|
|
50
|
+
], [
|
|
51
|
+
c,
|
|
52
|
+
s,
|
|
53
|
+
l,
|
|
54
|
+
u / s
|
|
55
|
+
])
|
|
56
|
+
];
|
|
57
|
+
return f.dispose(), p;
|
|
58
|
+
}
|
|
59
|
+
t({
|
|
60
|
+
kernelName: "QKV",
|
|
61
|
+
backendName: "webgpu",
|
|
62
|
+
kernelFunc: a
|
|
63
|
+
});
|
|
64
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Fs as e, Ii as t } from "../../dist-BewPQWjc.js";
|
|
2
|
+
import { isPackedTensor as n } from "../../utilities/packed.js";
|
|
3
|
+
import { s as r } from "../../webgpu_program-WOyIVMlZ.js";
|
|
4
|
+
import { c as i, i as a } from "../../webgpu_util-B_F3SShA.js";
|
|
5
|
+
//#region lib/ops/webgpu/rope.ts
|
|
6
|
+
var o = class {
|
|
7
|
+
variableNames = [
|
|
8
|
+
"x",
|
|
9
|
+
"sin",
|
|
10
|
+
"cos"
|
|
11
|
+
];
|
|
12
|
+
outputShape;
|
|
13
|
+
shaderKey = "Rope";
|
|
14
|
+
dispatchLayout;
|
|
15
|
+
dispatch;
|
|
16
|
+
workgroupSize = [
|
|
17
|
+
64,
|
|
18
|
+
1,
|
|
19
|
+
1
|
|
20
|
+
];
|
|
21
|
+
size = !0;
|
|
22
|
+
uniforms = "pastLen: i32";
|
|
23
|
+
constructor(e, t, n, r) {
|
|
24
|
+
this.shaderKey = `Rope_${r}`, this.outputShape = [
|
|
25
|
+
e,
|
|
26
|
+
t,
|
|
27
|
+
n,
|
|
28
|
+
r
|
|
29
|
+
], this.dispatchLayout = i(this.outputShape), this.dispatch = a(this.dispatchLayout, this.outputShape, this.workgroupSize);
|
|
30
|
+
}
|
|
31
|
+
getUserCode() {
|
|
32
|
+
let e = this.outputShape[3];
|
|
33
|
+
return `
|
|
34
|
+
${r("index")} {
|
|
35
|
+
if (index < uniforms.size) {
|
|
36
|
+
let coords = getCoordsFromIndex(index); // [b, h, t, d]
|
|
37
|
+
let b = coords[0];
|
|
38
|
+
let h = coords[1];
|
|
39
|
+
let t = coords[2];
|
|
40
|
+
let d = coords[3];
|
|
41
|
+
|
|
42
|
+
let rotaryDim = ${e};
|
|
43
|
+
|
|
44
|
+
var outVal = 0.0;
|
|
45
|
+
|
|
46
|
+
let xIdx = b * uniforms.outShapeStrides[0] +
|
|
47
|
+
h * uniforms.outShapeStrides[1] +
|
|
48
|
+
t * uniforms.outShapeStrides[2] +
|
|
49
|
+
d;
|
|
50
|
+
|
|
51
|
+
if (d < rotaryDim) {
|
|
52
|
+
let idx = (t + uniforms.pastLen) * uniforms.cosShape[1] + d / 2;
|
|
53
|
+
let cos = cos[idx];
|
|
54
|
+
let sin = sin[idx];
|
|
55
|
+
|
|
56
|
+
let ownX = x[xIdx] * cos;
|
|
57
|
+
var evenOdd = 0.0;
|
|
58
|
+
|
|
59
|
+
if (d % 2 == 0) {
|
|
60
|
+
// even index
|
|
61
|
+
evenOdd = -x[xIdx + 1];
|
|
62
|
+
} else {
|
|
63
|
+
// odd index
|
|
64
|
+
evenOdd = x[xIdx - 1];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
outVal = fma(evenOdd, sin, ownX);
|
|
68
|
+
} else {
|
|
69
|
+
// pass through for non-rotary dims
|
|
70
|
+
outVal = x[xIdx];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
setOutputAtIndex(index, outVal);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
}, s = class {
|
|
79
|
+
variableNames = [
|
|
80
|
+
"x",
|
|
81
|
+
"sin",
|
|
82
|
+
"cos"
|
|
83
|
+
];
|
|
84
|
+
outputShape;
|
|
85
|
+
shaderKey = "Rope";
|
|
86
|
+
dispatchLayout;
|
|
87
|
+
dispatch;
|
|
88
|
+
workgroupSize = [
|
|
89
|
+
64,
|
|
90
|
+
1,
|
|
91
|
+
1
|
|
92
|
+
];
|
|
93
|
+
size = !0;
|
|
94
|
+
uniforms = "pastLen: i32";
|
|
95
|
+
constructor(e, t, n, r) {
|
|
96
|
+
this.shaderKey = `Rope_${r}`, this.outputShape = [
|
|
97
|
+
e,
|
|
98
|
+
t,
|
|
99
|
+
n,
|
|
100
|
+
r / 2
|
|
101
|
+
], this.dispatchLayout = i(this.outputShape), this.dispatch = a(this.dispatchLayout, this.outputShape, this.workgroupSize);
|
|
102
|
+
}
|
|
103
|
+
getUserCode() {
|
|
104
|
+
return `
|
|
105
|
+
${r("index")} {
|
|
106
|
+
if (index < uniforms.size) {
|
|
107
|
+
let coords = getCoordsFromIndex(index); // [b, h, t, d]
|
|
108
|
+
let b = coords[0];
|
|
109
|
+
let h = coords[1];
|
|
110
|
+
let t = coords[2];
|
|
111
|
+
let d = coords[3];
|
|
112
|
+
|
|
113
|
+
var outVal = vec2<f32>(0.0, 0.0);
|
|
114
|
+
|
|
115
|
+
let xIdx = b * uniforms.outShapeStrides[0] +
|
|
116
|
+
h * uniforms.outShapeStrides[1] +
|
|
117
|
+
t * uniforms.outShapeStrides[2] +
|
|
118
|
+
d;
|
|
119
|
+
|
|
120
|
+
let idx = (t + uniforms.pastLen) * uniforms.cosShape[1] + d;
|
|
121
|
+
let cos = cos[idx];
|
|
122
|
+
let sin = sin[idx];
|
|
123
|
+
|
|
124
|
+
let xPair = unpack2x16float(u32(x[xIdx]));
|
|
125
|
+
let ownX = vec2<f32>(xPair.x * cos, xPair.y * cos);
|
|
126
|
+
|
|
127
|
+
let evenOdd = vec2<f32>(
|
|
128
|
+
-xPair.y,
|
|
129
|
+
xPair.x
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
outVal = vec2<f32>(
|
|
133
|
+
fma(evenOdd.x, sin, ownX.x),
|
|
134
|
+
fma(evenOdd.y, sin, ownX.y)
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
result[index] = i32(pack2x16float(outVal));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
function c(t) {
|
|
144
|
+
let { x: r } = t.inputs, { pastLen: i, negSin: a, ropeCache: c } = t.attrs, l = t.backend, u = n(r), d = r.shape[0], f = r.shape[1], p = r.shape[2], m = u ? r.shape[3] * 2 : r.shape[3], h = a ? c.getNegSin() : c.getSin(), g = c.getCos();
|
|
145
|
+
if (e(h.shape, g.shape, "Error in Rope: "), h.shape[0] < p + i) throw Error(`Sin tensor shape ${h.shape} is not compatible with seqLength ${p} and pastLen ${i}.`);
|
|
146
|
+
if (h.shape[1] * 2 < m) throw Error(`Sin tensor shape ${h.shape} is not compatible with feature dimension ${m}.`);
|
|
147
|
+
if (h.shape.length !== 3) throw Error(`Sin tensor must be 3-dimensional, but got shape ${h.shape}.`);
|
|
148
|
+
let _ = u ? new s(d, f, p, m) : new o(d, f, p, m), v = [{
|
|
149
|
+
type: "int32",
|
|
150
|
+
data: [i]
|
|
151
|
+
}], y = u ? "packedF16" : r.dtype;
|
|
152
|
+
return l.runWebGPUProgram(_, [
|
|
153
|
+
r,
|
|
154
|
+
h,
|
|
155
|
+
g
|
|
156
|
+
], y, v);
|
|
157
|
+
}
|
|
158
|
+
t({
|
|
159
|
+
kernelName: "Rope",
|
|
160
|
+
backendName: "webgpu",
|
|
161
|
+
kernelFunc: c
|
|
162
|
+
});
|
|
163
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Fs as e, Ii 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
|
+
//#region lib/ops/webgpu/scatterSub.ts
|
|
5
|
+
var a = class {
|
|
6
|
+
variableNames = [
|
|
7
|
+
"labels",
|
|
8
|
+
"softmaxProbs",
|
|
9
|
+
"dy"
|
|
10
|
+
];
|
|
11
|
+
outputShape;
|
|
12
|
+
shaderKey = "ScatterSub";
|
|
13
|
+
dispatchLayout;
|
|
14
|
+
dispatch;
|
|
15
|
+
workgroupSize = [
|
|
16
|
+
64,
|
|
17
|
+
1,
|
|
18
|
+
1
|
|
19
|
+
];
|
|
20
|
+
size = !0;
|
|
21
|
+
constructor(e, t) {
|
|
22
|
+
this.outputShape = [e, t], this.dispatchLayout = r(this.outputShape), this.dispatch = i(this.dispatchLayout, this.outputShape, this.workgroupSize);
|
|
23
|
+
}
|
|
24
|
+
getUserCode() {
|
|
25
|
+
return `
|
|
26
|
+
${n("index")} {
|
|
27
|
+
if (index < uniforms.size) {
|
|
28
|
+
let coords = getCoordsFromIndex(index); // [batch, depth]
|
|
29
|
+
let idx = i32(labels[coords[0]]);
|
|
30
|
+
let prob = softmaxProbs[index];
|
|
31
|
+
let dy = dy[coords[0]];
|
|
32
|
+
setOutputAtIndex(index, select(prob, prob - 1.0, idx == coords[1]) * dy);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
function o(t) {
|
|
39
|
+
let { logits: n, labels: r, dy: i } = t.inputs, o = t.backend, s = r.shape[0], c = n.shape[1];
|
|
40
|
+
e(i.shape, [s], "Error in EfficientScatterSub dy: "), e(n.shape, [s, c], "Error in EfficientScatterSub logits: "), e(r.shape, [s], "Error in EfficientScatterSub labels: ");
|
|
41
|
+
let l = new a(s, c);
|
|
42
|
+
return o.runWebGPUProgram(l, [
|
|
43
|
+
r,
|
|
44
|
+
n,
|
|
45
|
+
i
|
|
46
|
+
], "float32");
|
|
47
|
+
}
|
|
48
|
+
t({
|
|
49
|
+
kernelName: "EfficientScatterSub",
|
|
50
|
+
backendName: "webgpu",
|
|
51
|
+
kernelFunc: o
|
|
52
|
+
});
|
|
53
|
+
//#endregion
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WebGPUBackend } from '@tensorflow/tfjs-backend-webgpu';
|
|
2
|
+
import { SliceAttrs, SliceInputs, TensorInfo } from '@tensorflow/tfjs-core';
|
|
3
|
+
export declare function slice(args: {
|
|
4
|
+
inputs: SliceInputs;
|
|
5
|
+
backend: WebGPUBackend;
|
|
6
|
+
attrs: SliceAttrs;
|
|
7
|
+
}): TensorInfo;
|