From 4227c9be4268ac844921b90f31595f81236bd317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Thu, 14 Aug 2025 23:21:24 +0200 Subject: [PATCH 001/174] CUDA: fix negative KV_max values in FA (#15321) --- ggml/src/ggml-cuda/fattn-common.cuh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/fattn-common.cuh b/ggml/src/ggml-cuda/fattn-common.cuh index e46f0e2081..d4ed938391 100644 --- a/ggml/src/ggml-cuda/fattn-common.cuh +++ b/ggml/src/ggml-cuda/fattn-common.cuh @@ -539,11 +539,15 @@ static __global__ void flash_attn_mask_to_KV_max( all_inf = warp_reduce_all(all_inf); if (!all_inf) { - KV_max_sj += FATTN_KQ_STRIDE; break; } } + // If the break in the loop was not triggered, KV_max_sj is now -FATTN_KQ_STRIDE. + // If the break was triggered it's the lower edge of the tile with the first non-masked values. + // In either case, walk back the decrementation by FATTN_KQ_STRIDE. + KV_max_sj += FATTN_KQ_STRIDE; + if (threadIdx.x != 0) { return; } From b07791aa1d4831a08ad54ca19aa206c0c5c0f34a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Fri, 15 Aug 2025 11:23:17 +0200 Subject: [PATCH 002/174] test-opt: fix backend support check (#15317) * test-opt: fix backend support check * Update tests/test-opt.cpp Co-authored-by: Georgi Gerganov --------- Co-authored-by: Georgi Gerganov --- tests/test-opt.cpp | 55 +++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/tests/test-opt.cpp b/tests/test-opt.cpp index dc36b29eab..f02b4cad8c 100644 --- a/tests/test-opt.cpp +++ b/tests/test-opt.cpp @@ -438,7 +438,6 @@ static std::pair test_forward_backward( float weights; ggml_backend_tensor_get(cd.weights, &weights, 0, sizeof(float)); const bool subtest_ok = weights == -ndata * .5; - TEST_LOG("%s: ndata=%d weights=%f\n", __func__, (int) ndata, (double) weights); helper_after_test_forward_backward(optim, __func__, high_level, shuffle, "weights_after_forward_backward", subtest_ok, ntest, npass); } { @@ -821,11 +820,7 @@ static std::pair test_regression( ggml_backend_tensor_get(b, &b_fit, 0, sizeof(float)); float tol = adamw ? 1e-2 : 5e-2; const bool aok = almost_equal(a_fit, a_true, tol); - if (!aok) - TEST_LOG("%s: a_fit=%f a_true=%f\n", __func__, (double)a_fit, (double)a_true); const bool bok = almost_equal(b_fit, b_true, tol); - if (!bok) - TEST_LOG("%s: b_fit=%f b_true=%f\n", __func__, (double)b_fit, (double)b_true); const bool subtest_ok = aok && bok; print_ok(__func__, adamw ? subtest_ok : true, npass, ntest, "subtest=weights"); } @@ -934,19 +929,49 @@ int main(void) { printf(" Device memory: %zu MB (%zu MB free)\n", total / 1024 / 1024, free / 1024 / 1024); printf("\n"); - if (optim == GGML_OPT_OPTIMIZER_TYPE_SGD && !strcmp(devname, "Vulkan0")) - //TODO: even though backend returns false for currently - // unimplemented sgd op, we still need this - continue; - if (!strcmp(devname, "WebGPU")) - // GGML_OP_SUM implementation missing - continue; - std::pair result = test_backend(backend_sched, backends[i], optim); + bool skip; + { + struct ggml_init_params params = { + /*.mem_size =*/ 6*ggml_tensor_overhead(), + /*.mem_buffer =*/ nullptr, + /*.no_alloc =*/ true, + }; + ggml_context * ctx = ggml_init(params); + ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); + ggml_set_param(a); + ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); + ggml_tensor * c = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); + ggml_tensor * d = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); - printf(" %d/%d tests passed\n", result.first, result.second); + ggml_tensor * t = nullptr; + switch (optim) { + case GGML_OPT_OPTIMIZER_TYPE_ADAMW: { + ggml_tensor * p = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 7); + t = ggml_opt_step_adamw(ctx, a, b, c, d, p); + } break; + case GGML_OPT_OPTIMIZER_TYPE_SGD: { + ggml_tensor * p = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 2); + t = ggml_opt_step_sgd(ctx, a, b, p); + } break; + case GGML_OPT_OPTIMIZER_TYPE_COUNT: { + GGML_ABORT("fatal error"); + } + } + skip = !ggml_backend_supports_op(backends[i], t); + ggml_free(ctx); + } + + std::pair result; + if (!skip) { + result = test_backend(backend_sched, backends[i], optim); + printf(" %d/%d tests passed\n", result.first, result.second); + } printf(" Backend %s %s: ", ggml_backend_name(backends[i]), ggml_opt_optimizer_name(optim)); - if (result.first == result.second) { + if (skip) { + printf("\033[0;33mSKIPPED\033[0m\n"); + n_ok++; + } else if (result.first == result.second) { printf("\033[1;32mOK\033[0m\n"); n_ok++; } else { From 7aeee88cfe9c0434eac722b0f7c21404f48758a5 Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Fri, 15 Aug 2025 03:27:02 -0700 Subject: [PATCH 003/174] ci : move ccache action to ggml-org fork (#15328) --- .github/workflows/build.yml | 44 +++++++++++------------ .github/workflows/copilot-setup-steps.yml | 2 +- .github/workflows/release.yml | 18 +++++----- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d4ed3ce7e1..d5af79f240 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,7 +64,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-arm64 evict-old-files: 1d @@ -104,7 +104,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-x64 evict-old-files: 1d @@ -144,7 +144,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-arm64-webgpu evict-old-files: 1d @@ -199,7 +199,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-cpu-cmake evict-old-files: 1d @@ -251,7 +251,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-latest-cmake-sanitizer-${{ matrix.sanitizer }} evict-old-files: 1d @@ -330,7 +330,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-latest-cmake-rpc evict-old-files: 1d @@ -363,7 +363,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-vulkan evict-old-files: 1d @@ -400,7 +400,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-webgpu evict-old-files: 1d @@ -457,7 +457,7 @@ jobs: sudo apt-get install -y build-essential git cmake rocblas-dev hipblas-dev libcurl4-openssl-dev - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-hip evict-old-files: 1d @@ -487,7 +487,7 @@ jobs: apt-get install -y build-essential git cmake libcurl4-openssl-dev - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-musa evict-old-files: 1d @@ -532,7 +532,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-sycl evict-old-files: 1d @@ -580,7 +580,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-sycl-fp16 evict-old-files: 1d @@ -611,7 +611,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-ios evict-old-files: 1d @@ -648,7 +648,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-tvos evict-old-files: 1d @@ -720,7 +720,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-swift evict-old-files: 1d @@ -766,7 +766,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-msys2 variant: ccache @@ -834,7 +834,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-latest-cmake-${{ matrix.build }} variant: ccache @@ -948,7 +948,7 @@ jobs: apt install -y cmake build-essential ninja-build libgomp1 git libcurl4-openssl-dev - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-latest-cmake-cuda evict-old-files: 1d @@ -977,7 +977,7 @@ jobs: uses: actions/checkout@v4 - name: Install ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-cuda-${{ matrix.cuda }} variant: ccache @@ -1033,7 +1033,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-latest-cmake-sycl variant: ccache @@ -1079,7 +1079,7 @@ jobs: & 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' --version - name: Install ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ${{ github.job }} evict-old-files: 1d @@ -1146,7 +1146,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: android-build evict-old-files: 1d diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index a6553187ef..2d61ce3035 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -29,7 +29,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: copilot-setup-steps evict-old-files: 1d diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4ed6126f48..4dbe51b7f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,7 +32,7 @@ jobs: fetch-depth: 0 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-arm64 evict-old-files: 1d @@ -85,7 +85,7 @@ jobs: fetch-depth: 0 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: macOS-latest-cmake-x64 evict-old-files: 1d @@ -147,7 +147,7 @@ jobs: fetch-depth: 0 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-cpu-cmake evict-old-files: 1d @@ -198,7 +198,7 @@ jobs: fetch-depth: 0 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: ubuntu-22-cmake-vulkan evict-old-files: 1d @@ -256,7 +256,7 @@ jobs: fetch-depth: 0 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-latest-cmake-cpu-${{ matrix.arch }} variant: ccache @@ -328,7 +328,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-latest-cmake-${{ matrix.backend }}-${{ matrix.arch }} variant: ccache @@ -398,7 +398,7 @@ jobs: uses: actions/checkout@v4 - name: Install ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-cuda-${{ matrix.cuda }} variant: ccache @@ -471,7 +471,7 @@ jobs: uses: actions/checkout@v4 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-latest-cmake-sycl variant: ccache @@ -545,7 +545,7 @@ jobs: git clone https://github.com/rocm/rocwmma --branch rocm-6.2.4 --depth 1 - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.16 + uses: ggml-org/ccache-action@v1.2.16 with: key: windows-latest-cmake-hip-${{ matrix.name }}-x64 evict-old-files: 1d From d3248d9b6557c75d59954c594bb53cf517591e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Fri, 15 Aug 2025 14:02:39 +0200 Subject: [PATCH 004/174] ci : fix ios-xcode-build (#15324) * fix ios-xcode-build * use xcode-select with fixed version * switch to macos-15 to get xcode 16.4 --- .github/workflows/build.yml | 5 +++++ .github/workflows/release.yml | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d5af79f240..83aaea9947 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1113,6 +1113,11 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Build id: cmake_build run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4dbe51b7f0..9ebb0236fa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -600,7 +600,7 @@ jobs: name: llama-bin-win-hip-${{ matrix.name }}-x64.zip ios-xcode-build: - runs-on: macos-latest + runs-on: macos-15 steps: - name: Checkout code @@ -608,6 +608,10 @@ jobs: with: fetch-depth: 0 + - name: Setup Xcode + run: | + sudo xcode-select -s /Applications/Xcode_16.4.app + - name: Build id: cmake_build run: | From ff27f80a74bbe5303acd511a6781a1de6d619b3c Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Fri, 15 Aug 2025 21:11:22 +0800 Subject: [PATCH 005/174] ggml: initial IBM zDNN backend (#14975) * ggml-zdnn: inital backend impl Signed-off-by: Aaron Teo ggml-zdnn: temp change z17 to arch15 Signed-off-by: Aaron Teo ggml-zdnn: fix build bugs Signed-off-by: Aaron Teo * ggml-zdnn: tensor->extra logging check Signed-off-by: Aaron Teo ggml-zdnn: add layout name mapping, ztensor information Signed-off-by: Aaron Teo ggml-zdnn: separate logging into its own line Signed-off-by: Aaron Teo ggml-zdnn: add shape comparison Signed-off-by: Aaron Teo ggml-zdnn: add ggml_tensor shape log Signed-off-by: Aaron Teo ggml-zdnn: fix incorrect shape logging Signed-off-by: Aaron Teo * ggml-zdnn: add output buffer check Signed-off-by: Aaron Teo * ggml-zdnn: run compute and store into tensor->extra Signed-off-by: Aaron Teo * ggml-zdnn: add set_tensor Signed-off-by: Aaron Teo * ggml-zdnn: add more loggers Signed-off-by: Aaron Teo * ggml-zdnn: update set_tensor logging to check only for matmul Signed-off-by: Aaron Teo * ggml-zdnn: last working matmul version Signed-off-by: Aaron Teo * ggml-zdnn: add comments to prevent accidentally deleting lines Signed-off-by: Aaron Teo * ggml-zdnn: support op out_prod Signed-off-by: Aaron Teo * ggml-zdnn: update op out_prod to use tensor->extra Signed-off-by: Aaron Teo * ggml-zdnn: rewrite the backend implementation Signed-off-by: Aaron Teo * ggml-zdnn: bugfix new impl Signed-off-by: Aaron Teo * ggml-zdnn: fix compiler warnings and bugfixes Signed-off-by: Aaron Teo * ggml-zdnn: test ztensor finding in init_tensor Signed-off-by: Aaron Teo * ggml-zdnn: implement at least 1 op to test Signed-off-by: Aaron Teo * ggml-zdnn: assign tensor->extra to buffer Signed-off-by: Aaron Teo * ggml-zdnn: add check for view tensors to prevent init_tensor Signed-off-by: Aaron Teo * ggml-zdnn: rework init_tensor to create new buffers Signed-off-by: Aaron Teo * ggml-zdnn: switch to std vector instead of array Signed-off-by: Aaron Teo * ggml-zdnn: switch buffers back and set to arbitrary number Signed-off-by: Aaron Teo * ggml-zdnn: impl init_tensor Signed-off-by: Aaron Teo * ggml-zdnn: update supports_op matmul matrix Signed-off-by: Aaron Teo * ggml-zdnn: fix incorrect ztensor shape, reduce memory padding Signed-off-by: Aaron Teo * ggml-zdnn: code clean up Signed-off-by: Aaron Teo * ggml-zdnn: impl matmul Signed-off-by: Aaron Teo * ggml-zdnn: fix compiler error missing type Signed-off-by: Aaron Teo * ggml-zdnn: fix missing data transform call Signed-off-by: Aaron Teo * ggml-zdnn: add bias init_tensor Signed-off-by: Aaron Teo * ggml-zdnn: tighten memory usage, change string allocation Signed-off-by: Aaron Teo * ggml-zdnn: add bias ztensor and data free Signed-off-by: Aaron Teo * ggml-zdnn: add bias data transform Signed-off-by: Aaron Teo * ggml-zdnn: add more debug info for extra buffer transform Signed-off-by: Aaron Teo * ggml-zdnn: add logger to check if mat mul ops go through set_tensor Signed-off-by: Aaron Teo * ggml-zdnn: activate bias transform in matmul Signed-off-by: Aaron Teo * ggml-zdnn: move weights transform into mulmat Signed-off-by: Aaron Teo * ggml-zdnn: add more safeguards in matmul Signed-off-by: Aaron Teo * ggml-zdnn: fix sequencing of transforms Signed-off-by: Aaron Teo * ggml-zdnn: bugfix transform ztensor vs origtensor Signed-off-by: Aaron Teo * ggml-zdnn: figure out why sigtrap is happening Signed-off-by: Aaron Teo * ggml-zdnn: fix sigsegv Signed-off-by: Aaron Teo * ggml-zdnn: move everything back to local declaration Signed-off-by: Aaron Teo * ggml-zdnn: move bias data to local also Signed-off-by: Aaron Teo * ggml-zdnn: bring back working matmul Signed-off-by: Aaron Teo * ggml-zdnn: rewrite into mre Signed-off-by: Aaron Teo * ggml-zdnn: fix missing vector import Signed-off-by: Aaron Teo * ggml-zdnn: fix missing vector import in header Signed-off-by: Aaron Teo * ggml-zdnn: attempt to fix sigsegv Signed-off-by: Aaron Teo * ggml-zdnn: fix missing load tensor Signed-off-by: Aaron Teo * ggml-zdnn: fix invalid ztensor buffer release Signed-off-by: Aaron Teo * ggml-zdnn: add logging to debug free buffer Signed-off-by: Aaron Teo * ggml-zdnn: remove free_buffer debug info Signed-off-by: Aaron Teo * ggml-zdnn: add parmblkformat detections Signed-off-by: Aaron Teo * ggml-zdnn: add nnpa installed detection Signed-off-by: Aaron Teo * ggml-zdnn: add zdnn_init call for static libs Signed-off-by: Aaron Teo * ggml-zdnn: add init_tensor Signed-off-by: Aaron Teo * ggml-zdnn: attempt at fixing invalid buffer Signed-off-by: Aaron Teo * ggml-zdnn: switch to using deque to fix pointer deref problem Signed-off-by: Aaron Teo * ggml-zdnn: add weights logging to check Signed-off-by: Aaron Teo * ggml-zdnn: attempt to use unique ptr Signed-off-by: Aaron Teo * ggml-zdnn: add tensor to pre_tfm_desc logging Signed-off-by: Aaron Teo * ggml-zdnn: add inputs logging Signed-off-by: Aaron Teo * ggml-zdnn: disable op_none initialisation for testing Signed-off-by: Aaron Teo * ggml-zdnn: fix missing return from init_tensor Signed-off-by: Aaron Teo * ggml-zdnn: load ztensors in cgraph exec Signed-off-by: Aaron Teo * ggml-zdnn: work on moving output ztensor as well Signed-off-by: Aaron Teo * ggml-zdnn: disable logging and breakpoints for full test Signed-off-by: Aaron Teo * ggml-zdnn: attempt at manually changing the layout Signed-off-by: Aaron Teo * ggml-zdnn: attempt at using default nwhc format instead Signed-off-by: Aaron Teo * ggml-zdnn: disable global load ztensor for now Signed-off-by: Aaron Teo * ggml-zdnn: fix errorenous output load tensor Signed-off-by: Aaron Teo * ggml-zdnn: add guards to prevent loading ztensor if transformed Signed-off-by: Aaron Teo * ggml-zdnn: code cleanup Signed-off-by: Aaron Teo * ggml-zdnn: bring load ztensor back to init routine Signed-off-by: Aaron Teo * ggml-zdnn: code clean up Signed-off-by: Aaron Teo * ggml-zdnn: fix ztensor deallocation abort stabilise ggml <-> zdnn api Signed-off-by: Aaron Teo * ggml-zdnn: clean up matmul selection Signed-off-by: Aaron Teo * ggml-zdnn: clean up project structure Signed-off-by: Aaron Teo * ggml-zdnn: update documentation, prepare for upstream Signed-off-by: Aaron Teo * chore: add codeowners Signed-off-by: Aaron Teo * ggml-zdnn: disable batched matmul Signed-off-by: Aaron Teo * ggml-zdnn: attempt at fixing tensor views during matmul Signed-off-by: Aaron Teo * ggml-zdnn: deny all view tensors directly Signed-off-by: Aaron Teo * ggml-zdnn: fix pr comments Signed-off-by: Aaron Teo * docs: update ops docs for zdnn Signed-off-by: Aaron Teo * ggml-zdnn: redo test-backend-ops for ops.md Signed-off-by: Aaron Teo * ggml-zdnn: fix typo in build-s390x.md Signed-off-by: Aaron Teo * codeowners: remove taronaeo for now Signed-off-by: Aaron Teo * Revert "codeowners: remove taronaeo for now" This reverts commit 411ea4ed78d08778967bd0bd33a6538cfcbe082f. * ggml-zdnn: remove unused ggml_zdnn macro Signed-off-by: Aaron Teo --------- Signed-off-by: Aaron Teo --- .../ISSUE_TEMPLATE/010-bug-compilation.yml | 2 +- .github/ISSUE_TEMPLATE/011-bug-results.yml | 2 +- .github/labeler.yml | 5 + CODEOWNERS | 1 + docs/build-s390x.md | 40 +- docs/ops.md | 177 +- docs/ops/zDNN.csv | 8134 +++++++++++++++++ ggml/CMakeLists.txt | 1 + ggml/include/ggml-zdnn.h | 16 + ggml/src/CMakeLists.txt | 1 + ggml/src/ggml-backend-reg.cpp | 7 + ggml/src/ggml-cpu/CMakeLists.txt | 2 +- ggml/src/ggml-zdnn/CMakeLists.txt | 36 + ggml/src/ggml-zdnn/ggml-zdnn-impl.h | 97 + ggml/src/ggml-zdnn/ggml-zdnn.cpp | 846 ++ 15 files changed, 9265 insertions(+), 102 deletions(-) create mode 100644 docs/ops/zDNN.csv create mode 100644 ggml/include/ggml-zdnn.h create mode 100644 ggml/src/ggml-zdnn/CMakeLists.txt create mode 100644 ggml/src/ggml-zdnn/ggml-zdnn-impl.h create mode 100644 ggml/src/ggml-zdnn/ggml-zdnn.cpp diff --git a/.github/ISSUE_TEMPLATE/010-bug-compilation.yml b/.github/ISSUE_TEMPLATE/010-bug-compilation.yml index 95a0b5cc75..feb0d51205 100644 --- a/.github/ISSUE_TEMPLATE/010-bug-compilation.yml +++ b/.github/ISSUE_TEMPLATE/010-bug-compilation.yml @@ -40,7 +40,7 @@ body: attributes: label: GGML backends description: Which GGML backends do you know to be affected? - options: [AMX, BLAS, CPU, CUDA, HIP, Metal, Musa, RPC, SYCL, Vulkan, OpenCL] + options: [AMX, BLAS, CPU, CUDA, HIP, Metal, Musa, RPC, SYCL, Vulkan, OpenCL, zDNN] multiple: true validations: required: true diff --git a/.github/ISSUE_TEMPLATE/011-bug-results.yml b/.github/ISSUE_TEMPLATE/011-bug-results.yml index d1034bbb69..c42a14ff83 100644 --- a/.github/ISSUE_TEMPLATE/011-bug-results.yml +++ b/.github/ISSUE_TEMPLATE/011-bug-results.yml @@ -42,7 +42,7 @@ body: attributes: label: GGML backends description: Which GGML backends do you know to be affected? - options: [AMX, BLAS, CPU, CUDA, HIP, Metal, Musa, RPC, SYCL, Vulkan, OpenCL] + options: [AMX, BLAS, CPU, CUDA, HIP, Metal, Musa, RPC, SYCL, Vulkan, OpenCL, zDNN] multiple: true validations: required: true diff --git a/.github/labeler.yml b/.github/labeler.yml index df6a7a40ed..c4da4ab4e1 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -22,6 +22,11 @@ Vulkan: - any-glob-to-any-file: - ggml/include/ggml-vulkan.h - ggml/src/ggml-vulkan/** +IBM zDNN: + - changed-files: + - any-glob-to-any-file: + - ggml/include/ggml-zdnn.h + - ggml/src/ggml-zdnn/** documentation: - changed-files: - any-glob-to-any-file: diff --git a/CODEOWNERS b/CODEOWNERS index 4c0dd4b725..b698b1f4cb 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -10,3 +10,4 @@ /ggml/src/ggml-opt.cpp @JohannesGaessler /ggml/src/gguf.cpp @JohannesGaessler /ggml/src/ggml-vulkan/ @0cc4m +/ggml/src/ggml-zdnn/ @taronaeo diff --git a/docs/build-s390x.md b/docs/build-s390x.md index 4d5857753a..b36a199814 100644 --- a/docs/build-s390x.md +++ b/docs/build-s390x.md @@ -76,6 +76,23 @@ cmake --build build --config Release -j $(nproc) cmake --build build --config Release -j $(nproc) ``` +## IBM zDNN Accelerator + +This provides acceleration using the IBM zAIU co-processor located in the Telum I and Telum II processors. Make sure to have the [IBM zDNN library](https://github.com/IBM/zDNN) installed. + +#### Compile from source from IBM + +You may find the official build instructions here: [Building and Installing zDNN](https://github.com/IBM/zDNN?tab=readme-ov-file#building-and-installing-zdnn) + +### Compilation + +```bash +cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DGGML_ZDNN=ON +cmake --build build --config Release -j$(nproc) +``` + ## Getting GGUF Models All models need to be converted to Big-Endian. You can achieve this in three cases: @@ -145,15 +162,15 @@ All models need to be converted to Big-Endian. You can achieve this in three cas ### 1. SIMD Acceleration -Only available in IBM z15 or later system with the `-DGGML_VXE=ON` (turned on by default) compile flag. No hardware acceleration is possible with llama.cpp with older systems, such as IBM z14/arch12. In such systems, the APIs can still run but will use a scalar implementation. +Only available in IBM z15/LinuxONE 3 or later system with the `-DGGML_VXE=ON` (turned on by default) compile flag. No hardware acceleration is possible with llama.cpp with older systems, such as IBM z14/arch12. In such systems, the APIs can still run but will use a scalar implementation. ### 2. NNPA Vector Intrinsics Acceleration -Only available in IBM z16 or later system with the `-DGGML_NNPA=ON` (turned off by default) compile flag. No hardware acceleration is possible with llama.cpp with older systems, such as IBM z15/arch13. In such systems, the APIs can still run but will use a scalar implementation. +Only available in IBM z16/LinuxONE 4 or later system with the `-DGGML_NNPA=ON` (turned off by default) compile flag. No hardware acceleration is possible with llama.cpp with older systems, such as IBM z15/arch13. In such systems, the APIs can still run but will use a scalar implementation. -### 3. zDNN Accelerator +### 3. zDNN Accelerator (WIP) -_Only available in IBM z16 / LinuxONE 4 or later system. No support currently available._ +Only available in IBM z17/LinuxONE 5 or later system with the `-DGGML_ZDNN=ON` compile flag. No hardware acceleration is possible with llama.cpp with older systems, such as IBM z15/arch13. In such systems, the APIs will default back to CPU routines. ### 4. Spyre Accelerator @@ -229,11 +246,12 @@ IBM VXE/VXE2 SIMD acceleration depends on the BLAS implementation. It is strongl ## Appendix A: Hardware Support Matrix -| | Support | Minimum Compiler Version | -| ------- | ------- | ------------------------ | -| IBM z15 | ✅ | | -| IBM z16 | ✅ | | -| IBM z17 | ✅ | GCC 15.1.0 | +| | Support | Minimum Compiler Version | +| -------- | ------- | ------------------------ | +| IBM z15 | ✅ | | +| IBM z16 | ✅ | | +| IBM z17 | ✅ | GCC 15.1.0 | +| IBM zDNN | ✅ | | - ✅ - supported and verified to run as intended - 🚫 - unsupported, we are unlikely able to provide support @@ -242,7 +260,7 @@ IBM VXE/VXE2 SIMD acceleration depends on the BLAS implementation. It is strongl | | VX/VXE/VXE2 | NNPA | zDNN | Spyre | | ---------- | ----------- | ---- | ---- | ----- | -| FP32 | ✅ | ✅ | ❓ | ❓ | +| FP32 | ✅ | ✅ | ✅ | ❓ | | FP16 | ✅ | ✅ | ❓ | ❓ | | BF16 | 🚫 | 🚫 | ❓ | ❓ | | Q4_0 | ✅ | ✅ | ❓ | ❓ | @@ -273,4 +291,4 @@ IBM VXE/VXE2 SIMD acceleration depends on the BLAS implementation. It is strongl - 🚫 - acceleration unavailable, will still run using scalar implementation - ❓ - acceleration unknown, please contribute if you can test it yourself -Last Updated by **Aaron Teo (aaron.teo1@ibm.com)** on July 25, 2025. +Last Updated by **Aaron Teo (aaron.teo1@ibm.com)** on July 31, 2025. diff --git a/docs/ops.md b/docs/ops.md index 1a474d9047..9a81ca0a97 100644 --- a/docs/ops.md +++ b/docs/ops.md @@ -12,91 +12,92 @@ Legend: - 🟡 Partially supported by this backend - ❌ Not supported by this backend -| Operation | BLAS | CANN | CPU | CUDA | Metal | OpenCL | SYCL | Vulkan | -|-----------|------|------|------|------|------|------|------|------| -| ABS | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| ACC | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| ADD | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | -| ADD1 | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | -| ARANGE | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | -| ARGMAX | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| ARGSORT | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| CLAMP | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | 🟡 | -| CONCAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | 🟡 | ✅ | -| CONT | ❌ | 🟡 | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | -| CONV_2D | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | -| CONV_2D_DW | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| CONV_TRANSPOSE_1D | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| CONV_TRANSPOSE_2D | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | -| COS | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | -| COUNT_EQUAL | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| CPY | ❌ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| CROSS_ENTROPY_LOSS | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | -| CROSS_ENTROPY_LOSS_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | -| DIAG_MASK_INF | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | -| DIV | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | -| DUP | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | ✅ | 🟡 | -| ELU | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| EXP | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| FLASH_ATTN_EXT | ❌ | 🟡 | ✅ | 🟡 | 🟡 | ❌ | ❌ | 🟡 | -| GATED_LINEAR_ATTN | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | -| GEGLU | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | -| GEGLU_ERF | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | -| GEGLU_QUICK | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | -| GELU | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| GELU_ERF | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| GELU_QUICK | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| GET_ROWS | ❌ | 🟡 | ✅ | 🟡 | ✅ | 🟡 | 🟡 | 🟡 | -| GET_ROWS_BACK | ❌ | ❌ | 🟡 | 🟡 | ❌ | ❌ | ❌ | ❌ | -| GROUP_NORM | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| HARDSIGMOID | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| HARDSWISH | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| IM2COL | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | ✅ | -| L2_NORM | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| LEAKY_RELU | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| LOG | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | -| MEAN | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | -| MUL | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | -| MUL_MAT | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| MUL_MAT_ID | ❌ | 🟡 | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | -| NEG | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| NORM | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | -| OPT_STEP_ADAMW | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| OUT_PROD | 🟡 | ❌ | 🟡 | 🟡 | ❌ | ❌ | 🟡 | ❌ | -| PAD | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| PAD_REFLECT_1D | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | -| POOL_2D | ❌ | 🟡 | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| REGLU | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | -| RELU | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| REPEAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | ✅ | 🟡 | -| REPEAT_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| RMS_NORM | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | ✅ | -| RMS_NORM_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| RMS_NORM_MUL_ADD | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| ROLL | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | -| ROPE | ❌ | 🟡 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| ROPE_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| RWKV_WKV6 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| RWKV_WKV7 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| SCALE | ❌ | 🟡 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| SET | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | -| SET_ROWS | ❌ | ❌ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| SGN | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| SIGMOID | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| SILU | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | -| SILU_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | -| SIN | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | -| SOFT_MAX | ❌ | 🟡 | ✅ | ✅ | ✅ | ✅ | 🟡 | ✅ | -| SOFT_MAX_BACK | ❌ | ❌ | 🟡 | 🟡 | ❌ | ❌ | ❌ | ✅ | -| SQR | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | -| SQRT | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | ❌ | -| SSM_CONV | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | -| SSM_SCAN | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | -| STEP | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | -| SUB | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | -| SUM | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | -| SUM_ROWS | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| SWIGLU | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | -| TANH | ❌ | ✅ | ✅ | 🟡 | 🟡 | ✅ | 🟡 | 🟡 | -| TIMESTEP_EMBEDDING | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| UPSCALE | ❌ | 🟡 | ✅ | ✅ | 🟡 | ✅ | 🟡 | ✅ | +| Operation | BLAS | CANN | CPU | CUDA | Metal | OpenCL | SYCL | Vulkan | zDNN | +|-----------|------|------|------|------|------|------|------|------|------| +| ABS | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| ACC | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| ADD | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | ❌ | +| ADD1 | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | +| ARANGE | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | +| ARGMAX | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| ARGSORT | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| CLAMP | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | 🟡 | ❌ | +| CONCAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | 🟡 | ✅ | ❌ | +| CONT | ❌ | 🟡 | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | ❌ | +| CONV_2D | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | +| CONV_2D_DW | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| CONV_TRANSPOSE_1D | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| CONV_TRANSPOSE_2D | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| COS | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | ❌ | +| COUNT_EQUAL | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| CPY | ❌ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| CROSS_ENTROPY_LOSS | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| CROSS_ENTROPY_LOSS_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| DIAG_MASK_INF | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | ❌ | +| DIV | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | ❌ | +| DUP | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | ✅ | 🟡 | ❌ | +| ELU | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| EXP | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| FLASH_ATTN_EXT | ❌ | 🟡 | ✅ | 🟡 | 🟡 | ❌ | ❌ | 🟡 | ❌ | +| GATED_LINEAR_ATTN | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | +| GEGLU | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | ❌ | +| GEGLU_ERF | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | ❌ | +| GEGLU_QUICK | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | ❌ | +| GELU | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| GELU_ERF | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| GELU_QUICK | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| GET_ROWS | ❌ | 🟡 | ✅ | 🟡 | ✅ | 🟡 | 🟡 | 🟡 | ❌ | +| GET_ROWS_BACK | ❌ | ❌ | 🟡 | 🟡 | ❌ | ❌ | ❌ | ❌ | ❌ | +| GROUP_NORM | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| HARDSIGMOID | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| HARDSWISH | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| IM2COL | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | ✅ | ❌ | +| L2_NORM | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| LEAKY_RELU | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| LOG | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | +| MEAN | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | +| MUL | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | ❌ | +| MUL_MAT | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | +| MUL_MAT_ID | ❌ | 🟡 | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ❌ | +| NEG | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| NORM | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | ❌ | +| OPT_STEP_ADAMW | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| OUT_PROD | 🟡 | ❌ | 🟡 | 🟡 | ❌ | ❌ | 🟡 | ❌ | ❌ | +| PAD | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| PAD_REFLECT_1D | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | +| POOL_2D | ❌ | 🟡 | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| REGLU | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | ❌ | +| RELU | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| REPEAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | ✅ | 🟡 | ❌ | +| REPEAT_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| RMS_NORM | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | ✅ | ❌ | +| RMS_NORM_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| RMS_NORM_MUL_ADD | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| ROLL | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | +| ROPE | ❌ | 🟡 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| ROPE_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| RWKV_WKV6 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| RWKV_WKV7 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | +| SCALE | ❌ | 🟡 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| SET | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | +| SET_ROWS | ❌ | ❌ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| SGN | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| SIGMOID | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| SILU | ❌ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ❌ | +| SILU_BACK | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | +| SIN | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | ❌ | +| SOFTCAP | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| SOFT_MAX | ❌ | 🟡 | ✅ | ✅ | ✅ | ✅ | 🟡 | ✅ | ❌ | +| SOFT_MAX_BACK | ❌ | ❌ | 🟡 | 🟡 | ❌ | ❌ | ❌ | ✅ | ❌ | +| SQR | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | ❌ | +| SQRT | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | ❌ | ❌ | +| SSM_CONV | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | +| SSM_SCAN | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | +| STEP | ❌ | ✅ | ✅ | 🟡 | 🟡 | ❌ | 🟡 | ❌ | ❌ | +| SUB | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ✅ | ❌ | +| SUM | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | +| SUM_ROWS | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| SWIGLU | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | 🟡 | ❌ | +| TANH | ❌ | ✅ | ✅ | 🟡 | 🟡 | ✅ | 🟡 | 🟡 | ❌ | +| TIMESTEP_EMBEDDING | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | +| UPSCALE | ❌ | 🟡 | ✅ | ✅ | 🟡 | ✅ | 🟡 | ✅ | ❌ | diff --git a/docs/ops/zDNN.csv b/docs/ops/zDNN.csv new file mode 100644 index 0000000000..bf633844f5 --- /dev/null +++ b/docs/ops/zDNN.csv @@ -0,0 +1,8134 @@ +"backend_name","op_name","op_params","test_mode","supported","error_message","backend_reg_name" +"zDNN","ABS","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","ABS","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","SGN","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","SGN","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","NEG","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","NEG","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","STEP","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","STEP","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","TANH","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","TANH","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","ELU","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","ELU","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","RELU","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","RELU","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","SIGMOID","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","SIGMOID","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","GELU","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","GELU","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","SILU","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","SILU","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","EXP","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","EXP","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f16,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f16,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","ABS","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","ABS","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","SGN","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","SGN","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","NEG","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","NEG","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","STEP","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","STEP","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","TANH","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","TANH","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","ELU","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","ELU","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","RELU","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","RELU","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","SIGMOID","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","SIGMOID","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","GELU","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","GELU","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","SILU","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","SILU","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","EXP","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","EXP","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f16,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f16,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","ABS","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","ABS","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","SGN","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","SGN","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","NEG","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","NEG","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","STEP","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","STEP","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","TANH","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","TANH","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","ELU","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","ELU","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","RELU","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","RELU","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","SIGMOID","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","SIGMOID","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","GELU","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","GELU","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","SILU","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","SILU","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","EXP","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","EXP","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f32,ne_a=[128,2,2,2],v=0","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f32,ne_a=[5,7,11,13],v=0","support","0","no","zDNN" +"zDNN","ABS","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","ABS","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","SGN","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","SGN","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","NEG","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","NEG","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","STEP","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","STEP","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","TANH","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","TANH","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","ELU","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","ELU","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","RELU","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","RELU","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","SIGMOID","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","SIGMOID","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","GELU","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","GELU","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","GELU_QUICK","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","SILU","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","SILU","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","HARDSWISH","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","HARDSIGMOID","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","EXP","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","EXP","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f32,ne_a=[128,2,2,2],v=1","support","0","no","zDNN" +"zDNN","GELU_ERF","type=f32,ne_a=[5,7,11,13],v=1","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","REGLU","type=f16,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f16,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f16,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f16,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f16,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[128,2,2,2],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[5,7,11,13],v=0,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[128,2,2,2],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[5,7,11,13],v=0,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[128,2,2,2],v=0,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[5,7,11,13],v=0,split","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","REGLU","type=f32,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU","type=f32,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","SWIGLU","type=f32,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_ERF","type=f32,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[128,2,2,2],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[5,7,11,13],v=1,swapped=0","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[128,2,2,2],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[5,7,11,13],v=1,swapped=1","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[128,2,2,2],v=1,split","support","0","no","zDNN" +"zDNN","GEGLU_QUICK","type=f32,ne_a=[5,7,11,13],v=1,split","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f32,n=1,m=8,r=2,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f32,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f32,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f32,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f32,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f16,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f16,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f16,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=f16,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=bf16,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=bf16,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=bf16,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=bf16,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_0,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_0,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_0,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_0,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_1,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_1,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_1,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_1,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_0,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_0,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_0,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_0,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_1,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_1,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_1,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_1,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q8_0,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q8_0,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q8_0,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q8_0,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q2_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q2_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q2_K,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q2_K,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q3_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q3_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q3_K,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q3_K,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_K,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q4_K,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_K,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q5_K,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q6_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q6_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q6_K,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=q6_K,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xxs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xxs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xxs,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xxs,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xs,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_xs,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_s,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_s,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_s,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq2_s,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_xxs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_xxs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_xxs,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_xxs,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_s,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_s,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_s,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_s,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_m,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_m,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_m,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq1_m,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_nl,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_nl,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_nl,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_nl,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_s,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_s,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_s,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq3_s,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_xs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_xs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_xs,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=iq4_xs,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=i32,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=i32,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS","type=i32,n=256,m=5,r=4,b=7,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS","type=i32,n=256,m=5,r=4,b=7,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=f32,n=1,m=8,r=2,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=f32,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=f32,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=f16,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=f16,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=bf16,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=bf16,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q4_0,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q4_0,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q4_1,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q4_1,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q5_0,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q5_0,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q5_1,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q5_1,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q8_0,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q8_0,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q2_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q2_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q3_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q3_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q4_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q4_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q5_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q5_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q6_K,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=q6_K,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq2_xxs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq2_xxs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq2_xs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq2_xs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq2_s,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq2_s,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq3_xxs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq3_xxs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq1_s,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq1_s,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq1_m,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq1_m,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq4_nl,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq4_nl,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq3_s,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq3_s,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq4_xs,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=iq4_xs,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=i32,n=256,m=5,r=4,b=1,v=0","support","0","no","zDNN" +"zDNN","GET_ROWS_BACK","type=i32,n=256,m=5,r=4,b=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[1,8,1,3],nr23=[1,1],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[3,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[31,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[33,5,1,1],nr23=[2,3],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[3,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[31,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[33,5,1,1],nr23=[2,3],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[3,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[31,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[33,5,1,7],nr23=[2,3],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[3,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[31,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f32,ne=[33,5,1,7],nr23=[2,3],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[3,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[31,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[33,5,1,1],nr23=[2,3],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[3,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[31,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[33,5,1,1],nr23=[2,3],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[3,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[31,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[33,5,1,7],nr23=[2,3],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[3,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[31,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=f16,ne=[33,5,1,7],nr23=[2,3],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[3,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[31,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[33,5,1,1],nr23=[2,3],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[3,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[31,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[33,5,1,1],nr23=[2,3],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[3,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[31,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[33,5,1,7],nr23=[2,3],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[3,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[31,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=bf16,ne=[33,5,1,7],nr23=[2,3],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[96,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[96,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_0,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[96,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[96,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_1,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[96,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[96,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_0,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[96,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[96,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_1,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[96,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[96,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q8_0,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q2_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q3_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q4_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q5_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=q6_K,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xxs,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_xs,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq2_s,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_xxs,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_s,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq1_m,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[96,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[96,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_nl,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq3_s,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[768,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[768,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","zDNN" +"zDNN","SET_ROWS","type=iq4_xs,ne=[768,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=avg,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=1,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=1,k1=3,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=1,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=1,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=1,p0=1,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=0,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=0,p1=1","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=1,p1=0","support","0","no","zDNN" +"zDNN","POOL_2D","pool_type=max,type_input=f32,ne_input=[10,10,3,1],k0=3,k1=3,s0=2,s1=2,p0=1,p1=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=0,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=0,p1=0,d0=3,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=3,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=3,p1=0,d0=3,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=0,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=0,p1=0,d0=3,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=3,p1=0,d0=1,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=3,p1=0,d0=3,d1=0,is_2D=0","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,32],ne_kernel=[3,3,1,32],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,32],ne_kernel=[3,3,2,32],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,1024],ne_kernel=[3,3,1,1024],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,1024],ne_kernel=[3,3,2,1024],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,2048],ne_kernel=[3,3,1,2048],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,2048],ne_kernel=[3,3,2,2048],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,2560],ne_kernel=[3,3,1,2560],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,2560],ne_kernel=[3,3,2,2560],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[5,5,1,32],ne_kernel=[3,4,1,32],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D_DW","ne_input=[17,34,9,1],ne_kernel=[3,3,1,9],stride=1,padding=0,dilation=1,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D_DW","ne_input=[17,34,9,1],ne_kernel=[3,3,1,9],stride=1,padding=0,dilation=1,cwhn=1","support","0","no","zDNN" +"zDNN","CONV_2D_DW","ne_input=[32,8,64,1],ne_kernel=[3,3,1,64],stride=2,padding=1,dilation=1,cwhn=0","support","0","no","zDNN" +"zDNN","CONV_2D_DW","ne_input=[32,8,64,1],ne_kernel=[3,3,1,64],stride=2,padding=1,dilation=1,cwhn=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[3,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[3,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[3,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[3,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[3,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[3,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1337,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1337,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1337,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1337,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1337,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1337,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1337,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1337,1,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1337,1,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[3,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[3,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[3,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[3,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[3,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[3,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[3,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[3,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[3,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1337,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1337,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1337,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1337,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1337,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1337,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1337,1,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1337,1,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1337,1,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[3,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[3,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[3,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[3,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[3,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[3,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1337,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1337,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,1,1,1],ne_kernel=[1337,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1337,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1337,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[1337,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1337,9,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1337,9,1,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,1,1,1],ne_kernel=[1337,9,1,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[3,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[3,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[3,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[3,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[3,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[3,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[3,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[3,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[3,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1337,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1337,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[1,7,1,1],ne_kernel=[1337,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1337,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1337,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,7,1,1],ne_kernel=[1337,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1337,9,7,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1337,9,7,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[13,7,1,1],ne_kernel=[1337,9,7,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[197,32,1,1],ne_kernel=[16,32,32,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[2,3,2,1],s0=3,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[2,3,2,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[2,3,2,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[3,2,2,1],s0=2,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[3,2,2,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[3,1,2,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,1,1,1],s0=1,p0=0,d0=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_2D","ne_input=[3,2,3,1],ne_kernel=[2,2,1,3],stride=1","support","0","no","zDNN" +"zDNN","CONV_TRANSPOSE_2D","ne_input=[10,10,9,1],ne_kernel=[3,3,1,9],stride=2","support","0","no","zDNN" +"zDNN","COUNT_EQUAL","type=f32,ne=[4,500,1,1]","support","0","no","zDNN" +"zDNN","COUNT_EQUAL","type=f32,ne=[4,5000,1,1]","support","0","no","zDNN" +"zDNN","ARGMAX","type=f32,ne=[32,1,1,1]","support","0","no","zDNN" +"zDNN","ARGMAX","type=f32,ne=[100,10,1,1]","support","0","no","zDNN" +"zDNN","ARGMAX","type=f32,ne=[1024,10,1,1]","support","0","no","zDNN" +"zDNN","ARGMAX","type=f32,ne=[1024,12,1,1]","support","0","no","zDNN" +"zDNN","ARGMAX","type=f32,ne=[2000,10,1,1]","support","0","no","zDNN" +"zDNN","ARGMAX","type=f32,ne=[5438,3,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,1],nr=[1,1,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,1],nr=[2,1,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,1],nr=[1,2,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,1],nr=[1,1,2,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,1],nr=[1,1,1,2]","support","0","no","zDNN" +"zDNN","REPEAT","type=i32,ne=[10,5,4,1],nr=[2,1,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=i16,ne=[10,5,4,1],nr=[1,1,1,2]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,3],nr=[1,1,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,3],nr=[2,1,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,3],nr=[1,2,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,3],nr=[1,1,2,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=f32,ne=[10,5,4,3],nr=[1,1,1,2]","support","0","no","zDNN" +"zDNN","REPEAT","type=i32,ne=[10,5,4,3],nr=[2,1,1,1]","support","0","no","zDNN" +"zDNN","REPEAT","type=i16,ne=[10,5,4,3],nr=[1,1,1,2]","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,1,1,1],v=0","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[2,1,1,1],v=0","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,2,1,1],v=0","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,1,2,1],v=0","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,1,1,2],v=0","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,1,1,1],v=1","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[2,1,1,1],v=1","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,2,1,1],v=1","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,1,2,1],v=1","support","0","no","zDNN" +"zDNN","REPEAT_BACK","type=f32,ne=[8,6,4,2],nr=[1,1,1,2],v=1","support","0","no","zDNN" +"zDNN","DUP","type=f32,ne=[10,10,20,1]","support","0","no","zDNN" +"zDNN","DUP","type=f16,ne=[10,10,20,1]","support","0","no","zDNN" +"zDNN","DUP","type=i32,ne=[10,10,20,1]","support","0","no","zDNN" +"zDNN","DUP","type=i16,ne=[10,10,20,1]","support","0","no","zDNN" +"zDNN","DUP","type=f32,ne=[10,10,5,1],permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","DUP","type=f16,ne=[10,10,5,1],permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","DUP","type=f32,ne=[10,10,5,1],permute=[1,0,2,3]","support","0","no","zDNN" +"zDNN","DUP","type=f16,ne=[10,10,5,1],permute=[1,0,2,3]","support","0","no","zDNN" +"zDNN","DUP","type=i16,ne=[10,8,3,1],permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","DUP","type=i16,ne=[10,8,3,1],permute=[1,2,0,3]","support","0","no","zDNN" +"zDNN","SET","type_src=f32,type_dst=f32,ne=[6,5,4,3],dim=1","support","0","no","zDNN" +"zDNN","SET","type_src=f32,type_dst=f32,ne=[6,5,4,3],dim=2","support","0","no","zDNN" +"zDNN","SET","type_src=f32,type_dst=f32,ne=[6,5,4,3],dim=3","support","0","no","zDNN" +"zDNN","SET","type_src=i32,type_dst=i32,ne=[6,5,4,3],dim=1","support","0","no","zDNN" +"zDNN","SET","type_src=i32,type_dst=i32,ne=[6,5,4,3],dim=2","support","0","no","zDNN" +"zDNN","SET","type_src=i32,type_dst=i32,ne=[6,5,4,3],dim=3","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[1,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[1,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[1,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[2,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[2,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[2,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[3,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[3,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[3,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[1,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[1,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[1,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[2,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[2,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[2,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[3,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[3,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[3,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[1,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[1,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[1,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[2,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[2,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[2,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[3,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[3,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[3,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=q4_0,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=q4_1,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=q5_0,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=q5_1,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=q8_0,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=q2_K,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=q3_K,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=q4_K,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=q5_K,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=q6_K,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=iq2_xxs,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=iq2_xs,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=iq2_s,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=iq3_xxs,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=iq1_s,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=iq1_m,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=iq4_nl,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=iq3_s,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[512,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[512,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[512,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[768,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[768,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=iq4_xs,ne=[768,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=bf16,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=bf16,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q4_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q4_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q4_1,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q4_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q5_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q5_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q5_1,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q5_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q8_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q8_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q2_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q3_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q3_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q4_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q4_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q5_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q5_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q6_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=q6_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq2_xxs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq2_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq2_xs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq2_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq2_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq2_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq3_xxs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq3_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq1_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq1_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq1_m,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq1_m,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq4_nl,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq4_nl,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq3_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq3_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq4_xs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=iq4_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=f16,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=f16,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=bf16,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q4_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q4_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q4_1,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q4_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q5_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q5_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q5_1,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q5_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q8_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q8_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q2_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q3_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q3_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q4_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q4_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q5_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q5_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q6_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=q6_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq2_xxs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq2_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq2_xs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq2_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq2_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq2_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq3_xxs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq3_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq1_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq1_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq1_m,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq1_m,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq4_nl,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq4_nl,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq3_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq3_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq4_xs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=iq4_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f16,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f16,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=bf16,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=bf16,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q4_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q4_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q4_1,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q4_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q5_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q5_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q5_1,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q5_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q8_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q8_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q2_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q3_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q3_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q4_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q4_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q5_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q5_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q6_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=q6_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq2_xxs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq2_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq2_xs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq2_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq2_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq2_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq3_xxs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq3_xxs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq1_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq1_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq1_m,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq1_m,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq4_nl,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq4_nl,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq3_s,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq3_s,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq4_xs,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=iq4_xs,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=bf16,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_0,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_1,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_0,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_1,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q8_0,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q2_K,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q3_K,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q4_K,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q5_K,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=q6_K,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xxs,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_xs,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq2_s,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_xxs,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_s,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq1_m,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_nl,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq3_s,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=iq4_xs,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f16,ne=[256,2,3,4],permute_src=[1,0,2,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f16,type_dst=f32,ne=[256,2,3,4],permute_src=[1,0,2,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f16,ne=[256,2,3,4],permute_src=[1,0,2,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CPY","type_src=f32,type_dst=f32,ne=[256,2,3,4],permute_src=[1,0,2,3],permute_dst=[0,0,0,0]","support","0","no","zDNN" +"zDNN","CONT","type=f32,ne=[10,10,10,1]","support","0","no","zDNN" +"zDNN","CONT","type=f32,ne=[2,1,1,1]","support","0","no","zDNN" +"zDNN","CONT","type=f32,ne=[2,1,3,5]","support","0","no","zDNN" +"zDNN","CONT","type=f32,ne=[2,3,5,7]","support","0","no","zDNN" +"zDNN","CONT","type=f16,ne=[2,1,1,1]","support","0","no","zDNN" +"zDNN","CONT","type=f16,ne=[2,1,3,5]","support","0","no","zDNN" +"zDNN","CONT","type=f16,ne=[2,3,5,7]","support","0","no","zDNN" +"zDNN","CONT","type=bf16,ne=[2,1,1,1]","support","0","no","zDNN" +"zDNN","CONT","type=bf16,ne=[2,1,3,5]","support","0","no","zDNN" +"zDNN","CONT","type=bf16,ne=[2,3,5,7]","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f16,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f16,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f16,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f16,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,8,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,1,1],nr=[32,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,320,320],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[2,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[1,2,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[1,1,2,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[1,1,1,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[1,1,2,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[1,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[10,5,4,3],nr=[2,2,2,2],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1280,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1280,1,1,1],nr=[1,16,16,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1280,16,16,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1280,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,1280,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[16,16,1280,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,1920,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,2560,1],nr=[16,16,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,1280,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,1920,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[1,1,640,1],nr=[32,32,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[5120,1,1,1],nr=[1,256,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","SUB","type=f32,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","MUL","type=f32,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","DIV","type=f32,ne=[640,1,1,1],nr=[1,1,1,1],nf=1","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[2,1,1,1],nf=2","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[16,5,4,3],nr=[1,2,1,1],nf=3","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,1,2,1],nf=4","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[16,5,4,3],nr=[1,1,1,2],nf=5","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,1,2,2],nf=6","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[10,5,4,3],nr=[1,2,2,2],nf=7","support","0","no","zDNN" +"zDNN","ADD","type=f32,ne=[16,5,4,3],nr=[2,2,2,2],nf=8","support","0","no","zDNN" +"zDNN","ADD1","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","SCALE","type=f32,ne=[10,10,10,10],scale=2.000000,bias=0.000000","support","0","no","zDNN" +"zDNN","SCALE","type=f32,ne=[10,10,10,10],scale=2.000000,bias=1.000000","support","0","no","zDNN" +"zDNN","SOFTCAP","type=f32,ne=[10,10,10,10],softcap=50.000000","support","0","no","zDNN" +"zDNN","SILU_BACK","type=f32,ne=[64,5,4,3],eps=0.000001","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.000000","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.000000","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.000000","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.000000","support","0","no","zDNN" +"zDNN","RMS_NORM_BACK","type=f32,ne=[64,5,4,3],eps=0.000000","support","0","no","zDNN" +"zDNN","L2_NORM","type=f32,ne=[64,5,4,3]","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.000001","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.000001","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.000001","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.000001","support","0","no","zDNN" +"zDNN","RMS_NORM_BACK","type=f32,ne=[64,5,4,3],eps=0.000001","support","0","no","zDNN" +"zDNN","L2_NORM","type=f32,ne=[64,5,4,3]","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.000100","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.000100","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.000100","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.000100","support","0","no","zDNN" +"zDNN","RMS_NORM_BACK","type=f32,ne=[64,5,4,3],eps=0.000100","support","0","no","zDNN" +"zDNN","L2_NORM","type=f32,ne=[64,5,4,3]","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.100000","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=0,eps=0.100000","support","0","no","zDNN" +"zDNN","NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.100000","support","0","no","zDNN" +"zDNN","RMS_NORM","type=f32,ne=[64,5,4,3],v=1,eps=0.100000","support","0","no","zDNN" +"zDNN","RMS_NORM_BACK","type=f32,ne=[64,5,4,3],eps=0.100000","support","0","no","zDNN" +"zDNN","L2_NORM","type=f32,ne=[64,5,4,3]","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.000000,broadcast=0","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.000000,broadcast=1","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.000001,broadcast=0","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.000001,broadcast=1","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.000100,broadcast=0","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.000100,broadcast=1","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.100000,broadcast=0","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=0.100000,broadcast=1","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=1.000000,broadcast=0","support","0","no","zDNN" +"zDNN","RMS_NORM_MUL_ADD","type=f32,ne=[64,5,4,3],eps=1.000000,broadcast=1","support","0","no","zDNN" +"zDNN","L2_NORM","type=f32,ne=[64,5,4,3]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1024,1,1],ne_b=[3,1024,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[8,1024,1,1],ne_b=[3,1024,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1024,4,1],ne_b=[3,1024,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1536,1,1],ne_b=[3,1536,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[8,1536,1,1],ne_b=[3,1536,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1536,4,1],ne_b=[3,1536,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,2048,1,1],ne_b=[3,2048,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[8,2048,1,1],ne_b=[3,2048,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,2048,4,1],ne_b=[3,2048,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1024,1,1],ne_b=[4,1024,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[8,1024,1,1],ne_b=[4,1024,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1024,4,1],ne_b=[4,1024,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1536,1,1],ne_b=[4,1536,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[8,1536,1,1],ne_b=[4,1536,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,1536,4,1],ne_b=[4,1536,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,2048,1,1],ne_b=[4,2048,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[8,2048,1,1],ne_b=[4,2048,1,1]","support","0","no","zDNN" +"zDNN","SSM_CONV","type=f32,ne_a=[4,2048,4,1],ne_b=[4,2048,1,1]","support","0","no","zDNN" +"zDNN","SSM_SCAN","type=f32,d_state=16,head_dim=1,n_head=1024,n_group=1,n_seq_tokens=32,n_seqs=4","support","0","no","zDNN" +"zDNN","SSM_SCAN","type=f32,d_state=128,head_dim=64,n_head=16,n_group=2,n_seq_tokens=32,n_seqs=4","support","0","no","zDNN" +"zDNN","SSM_SCAN","type=f32,d_state=256,head_dim=64,n_head=8,n_group=2,n_seq_tokens=32,n_seqs=4","support","0","no","zDNN" +"zDNN","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=1,n_seqs=1","support","0","no","zDNN" +"zDNN","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=1","support","0","no","zDNN" +"zDNN","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=4","support","0","no","zDNN" +"zDNN","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=128,n_seqs=4","support","0","no","zDNN" +"zDNN","RWKV_WKV7","type=f32,head_count=32,head_size=64,n_seq_tokens=1,n_seqs=1","support","0","no","zDNN" +"zDNN","RWKV_WKV7","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=1","support","0","no","zDNN" +"zDNN","RWKV_WKV7","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=4","support","0","no","zDNN" +"zDNN","RWKV_WKV7","type=f32,head_count=32,head_size=64,n_seq_tokens=128,n_seqs=4","support","0","no","zDNN" +"zDNN","GATED_LINEAR_ATTN","type=f32,head_count=32,head_size=64,n_seq_tokens=1,n_seqs=1","support","0","no","zDNN" +"zDNN","GATED_LINEAR_ATTN","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=1","support","0","no","zDNN" +"zDNN","GATED_LINEAR_ATTN","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=4","support","0","no","zDNN" +"zDNN","GATED_LINEAR_ATTN","type=f32,head_count=32,head_size=64,n_seq_tokens=128,n_seqs=4","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","1","yes","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=4,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_0,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_K,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xxs,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=32,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q4_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=1,k=32,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=1,k=32,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=32,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=q6_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_xs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq2_s,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_s,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq1_m,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=1,k=32,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_nl,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq3_s,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=iq4_xs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=1,k=1,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=64,n=2,k=128,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=83,n=2,k=128,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=64,n=2,k=64,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=83,n=2,k=64,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=64,n=45,k=128,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=45,k=64,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=193,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=67,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[1,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[1,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[1,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[1,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[2,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[2,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[2,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[2,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[4,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[4,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[4,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[4,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[8,1],nr=[1,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[8,1],nr=[1,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=128,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1056,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=128,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1056,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=128,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1056,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1056,n=1,k=129,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=128,n=1,k=1057,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1056,n=1,k=129,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=128,n=1,k=1057,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1056,n=1,k=129,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=128,n=1,k=1057,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=128,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1056,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=128,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1056,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=128,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1056,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=1057,n=1,k=129,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f16,type_b=f32,m=129,n=1,k=1057,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=1057,n=1,k=129,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=bf16,type_b=f32,m=129,n=1,k=1057,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=1057,n=1,k=129,bs=[8,1],nr=[4,1],per=[0,2,1,3],v=0","support","0","no","zDNN" +"zDNN","MUL_MAT","type_a=f32,type_b=f32,m=129,n=1,k=1057,bs=[8,1],nr=[4,1],per=[0,1,2,3],v=1","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=16,n_used=16,b=0,m=32,n=1024,k=16","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=16,n_used=16,b=1,m=32,n=1024,k=16","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q5_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q5_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q5_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q5_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q2_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q2_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q3_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q3_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q5_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q5_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q6_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=q6_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq2_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq3_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq3_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq1_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq1_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq1_m,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq1_m,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq4_nl,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq4_nl,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq3_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq3_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq4_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=iq4_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=bf16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","zDNN" +"zDNN","MUL_MAT_ID","type_a=bf16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f32,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=f16,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_1,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=q4_K,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","zDNN" +"zDNN","OUT_PROD","type_a=iq2_xxs,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","zDNN" +"zDNN","SQR","type=f16,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","SQRT","type=f16,ne=[10,3,3,2]","support","0","no","zDNN" +"zDNN","LOG","type=f16,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","SIN","type=f16,ne=[10,2,2,2]","support","0","no","zDNN" +"zDNN","COS","type=f16,ne=[10,2,2,2]","support","0","no","zDNN" +"zDNN","CLAMP","type=f16,ne=[10,5,4,3],min=-0.500000,max=0.500000","support","0","no","zDNN" +"zDNN","SQR","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","SQRT","type=f32,ne=[10,3,3,2]","support","0","no","zDNN" +"zDNN","LOG","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","SIN","type=f32,ne=[10,2,2,2]","support","0","no","zDNN" +"zDNN","COS","type=f32,ne=[10,2,2,2]","support","0","no","zDNN" +"zDNN","CLAMP","type=f32,ne=[10,5,4,3],min=-0.500000,max=0.500000","support","0","no","zDNN" +"zDNN","DIAG_MASK_INF","type=f32,ne=[10,10,1,1],n_past=5","support","0","no","zDNN" +"zDNN","DIAG_MASK_INF","type=f32,ne=[10,10,3,1],n_past=5","support","0","no","zDNN" +"zDNN","DIAG_MASK_INF","type=f32,ne=[10,10,3,2],n_past=5","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f32,nr23=[3,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[2,3],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f16,nr23=[3,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[2,3],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f32,nr23=[3,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[2,3],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f16,nr23=[3,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[2,3],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f32,nr23=[3,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[2,3],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f16,nr23=[3,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[2,3],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f32,nr23=[3,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f32,nr23=[2,3],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,16,1,3],mask=1,m_prec=f16,nr23=[3,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,15,1,1],mask=1,m_prec=f16,nr23=[2,3],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[15,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,16,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,15,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1024,1024,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[1023,1023,1,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,2,32,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,2,32,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[16,2,32,1],mask=0,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[32,2,32,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[32,2,32,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[32,2,32,1],mask=1,m_prec=f32,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX","type=f32,ne=[32,2,32,1],mask=1,m_prec=f16,nr23=[1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,16,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,15,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,1024,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,1023,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,16,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,15,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,1024,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,1023,1,1],scale=1.000000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,16,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,15,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,1024,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,1023,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,16,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,15,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,1024,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,1023,1,1],scale=0.100000,max_bias=0.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,16,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,15,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,1024,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,1023,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,16,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,15,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,1024,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,1023,1,1],scale=1.000000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,16,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,15,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[16,1024,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[15,1023,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,16,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,15,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1024,1024,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","SOFT_MAX_BACK","type=f32,ne=[1023,1023,1,1],scale=0.100000,max_bias=8.000000","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,40,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,52,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,64,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,1,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,71,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,8,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=20,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,2,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,32,4,1],n_dims=32,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=128,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,12,2,1],n_dims=20,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,28,2,1],n_dims=32,mode=8,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[80,16,2,1],n_dims=80,mode=24,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.000000,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.000000,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.000000,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f32,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=0,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","ROPE_BACK","type=f16,ne_a=[64,128,2,1],n_dims=64,mode=2,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=0","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=1","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=2","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=3","support","0","no","zDNN" +"zDNN","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=3","support","0","no","zDNN" +"zDNN","ARGSORT","type=f32,ne=[8,1,1,1],order=0","support","0","no","zDNN" +"zDNN","ARGSORT","type=f32,ne=[16,10,10,10],order=0","support","0","no","zDNN" +"zDNN","ARGSORT","type=f32,ne=[60,10,10,10],order=0","support","0","no","zDNN" +"zDNN","ARGSORT","type=f32,ne=[8,1,1,1],order=1","support","0","no","zDNN" +"zDNN","ARGSORT","type=f32,ne=[16,10,10,10],order=1","support","0","no","zDNN" +"zDNN","ARGSORT","type=f32,ne=[60,10,10,10],order=1","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[512,512,3,2],scale_factor=2,mode=nearest,transpose=0","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[512,512,3,2],scale_factor=2,mode=nearest,transpose=1","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[2,5,7,11],ne_tgt=[5,7,11,13],mode=0","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[5,7,11,13],ne_tgt=[2,5,7,11],mode=0","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[512,512,3,2],scale_factor=2,mode=bilinear,transpose=0","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[512,512,3,2],scale_factor=2,mode=bilinear,transpose=1","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[2,5,7,11],ne_tgt=[5,7,11,13],mode=1","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[5,7,11,13],ne_tgt=[2,5,7,11],mode=1","support","0","no","zDNN" +"zDNN","UPSCALE","type=f32,ne=[2,5,7,11],ne_tgt=[5,7,11,13],mode=257","support","0","no","zDNN" +"zDNN","SUM","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","SUM_ROWS","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","MEAN","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","GROUP_NORM","type=f32,ne=[64,64,320,1],num_groups=32,eps=0.000001","support","0","no","zDNN" +"zDNN","GROUP_NORM","type=f32,ne=[9,9,1280,1],num_groups=32,eps=0.000001","support","0","no","zDNN" +"zDNN","ACC","type=f32,ne_a=[256,17,1,1],ne_b=[256,16,1,1]","support","0","no","zDNN" +"zDNN","PAD","type=f32,ne_a=[512,512,1,1],pad_0=1,pad_1=1","support","0","no","zDNN" +"zDNN","PAD_REFLECT_1D","type=f32,ne_a=[512,34,2,1],pad_0=10,pad_1=9","support","0","no","zDNN" +"zDNN","ROLL","shift0=3,shift1=-2,shift3=1,shift4=-1","support","0","no","zDNN" +"zDNN","ARANGE","type=f32,start=0.000000,stop=10.000000,step=1.000000","support","0","no","zDNN" +"zDNN","TIMESTEP_EMBEDDING","type=f32,ne_a=[2,1,1,1],dim=320,max_period=10000","support","0","no","zDNN" +"zDNN","LEAKY_RELU","type=f32,ne_a=[10,5,4,3],negative_slope=0.100000","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=128,hsv=128,nh=4,nr23=[16,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=10.000000,prec=def,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=128,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=192,hsv=192,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=256,hsv=256,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=4,nr23=[4,1],kv=512,nb=35,mask=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","0","no","zDNN" +"zDNN","CROSS_ENTROPY_LOSS","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","CROSS_ENTROPY_LOSS","type=f32,ne=[30000,1,1,1]","support","0","no","zDNN" +"zDNN","CROSS_ENTROPY_LOSS_BACK","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" +"zDNN","CROSS_ENTROPY_LOSS_BACK","type=f32,ne=[30000,1,1,1]","support","0","no","zDNN" +"zDNN","OPT_STEP_ADAMW","type=f32,ne=[10,5,4,3]","support","0","no","zDNN" diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 1fb7abeaf0..90e274ccdb 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -188,6 +188,7 @@ option(GGML_VULKAN_VALIDATE "ggml: enable Vulkan validation" option(GGML_VULKAN_RUN_TESTS "ggml: run Vulkan tests" OFF) option(GGML_WEBGPU "ggml: use WebGPU" OFF) option(GGML_WEBGPU_DEBUG "ggml: enable WebGPU debug output" OFF) +option(GGML_ZDNN "ggml: use zDNN" OFF) option(GGML_METAL "ggml: use Metal" ${GGML_METAL_DEFAULT}) option(GGML_METAL_USE_BF16 "ggml: use bfloat if available" OFF) option(GGML_METAL_NDEBUG "ggml: disable Metal debugging" OFF) diff --git a/ggml/include/ggml-zdnn.h b/ggml/include/ggml-zdnn.h new file mode 100644 index 0000000000..c2c30c977c --- /dev/null +++ b/ggml/include/ggml-zdnn.h @@ -0,0 +1,16 @@ +#pragma once + +#include "ggml.h" +#include "ggml-backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +GGML_BACKEND_API ggml_backend_t ggml_backend_zdnn_init(void); + +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_zdnn_reg(void); + +#ifdef __cplusplus +} +#endif diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 177fb28213..2b5b8169d7 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -382,6 +382,7 @@ ggml_add_backend(RPC) ggml_add_backend(SYCL) ggml_add_backend(Vulkan) ggml_add_backend(WebGPU) +ggml_add_backend(zDNN) ggml_add_backend(OpenCL) foreach (target ggml-base ggml) diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp index 6c31513750..5f02a710a1 100644 --- a/ggml/src/ggml-backend-reg.cpp +++ b/ggml/src/ggml-backend-reg.cpp @@ -49,6 +49,10 @@ #include "ggml-webgpu.h" #endif +#ifdef GGML_USE_ZDNN +#include "ggml-zdnn.h" +#endif + #ifdef GGML_USE_OPENCL #include "ggml-opencl.h" #endif @@ -180,6 +184,9 @@ struct ggml_backend_registry { #ifdef GGML_USE_WEBGPU register_backend(ggml_backend_webgpu_reg()); #endif +#ifdef GGML_USE_ZDNN + register_backend(ggml_backend_zdnn_reg()); +#endif #ifdef GGML_USE_OPENCL register_backend(ggml_backend_opencl_reg()); #endif diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index f188d1638d..ce0a3e1285 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -460,7 +460,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) # NOTE: Only available from GCC 15.1.0 onwards. Any z17 machine with compile issues must first verify their GCC version. # binutils must also be updated to the latest for the -march=z17 flag to work. Otherwise, use -march=arch15. message(STATUS "z17 target") - list(APPEND ARCH_FLAGS -march=z17) + list(APPEND ARCH_FLAGS -march=arch15) else() message(STATUS "Unknown target") message(WARNING "Unknown target. If you are compiling for z14 and earlier, you might have to add -DGGML_VXE=OFF.") diff --git a/ggml/src/ggml-zdnn/CMakeLists.txt b/ggml/src/ggml-zdnn/CMakeLists.txt new file mode 100644 index 0000000000..0a723ce4de --- /dev/null +++ b/ggml/src/ggml-zdnn/CMakeLists.txt @@ -0,0 +1,36 @@ +if (DEFINED ZDNN_ROOT) + message(STATUS "zdnn: using ZDNN_ROOT override: ${ZDNN_ROOT}") + set(ZDNN_HINT "${ZDNN_ROOT}") +else() + set(ZDNN_HINT "") +endif() + +find_path(ZDNN_INCLUDE + NAMES zdnn.h + HINTS ${ZDNN_HINT} /usr /usr/local + PATH_SUFFIXES include) +if (ZDNN_INCLUDE) + message(STATUS "zdnn: found include: ${ZDNN_INCLUDE}") +else() + message(FATAL_ERROR "zdnn: include directory not found, please set ZDNN_ROOT to the proper path if necessary") +endif() + +find_library(ZDNN_LIB + NAMES zdnn + HINTS ${ZDNN_HINT} /usr /usr/local + PATH_SUFFIXES lib lib64) +if (ZDNN_LIB) + message(STATUS "zdnn: found library: ${ZDNN_LIB}") +else() + message(FATAL_ERROR "zdnn: library not found, please set ZDNN_ROOT to the proper path if necessary") +endif() + +file(GLOB GGML_SOURCES_ZDNN "*.c" "*.cpp") +file(GLOB GGML_HEADERS_ZDNN "*.h" "*.hpp") + +ggml_add_backend_library(ggml-zdnn ${GGML_HEADERS_ZDNN} ${GGML_SOURCES_ZDNN}) +target_link_libraries(ggml-zdnn PRIVATE ${ZDNN_LIB}) +target_include_directories(ggml-zdnn PRIVATE ${ZDNN_INCLUDE}) +target_link_directories(ggml-zdnn PRIVATE ${ZDNN_LIB}) + +target_compile_definitions(ggml-zdnn PRIVATE GGML_USE_ZDNN) diff --git a/ggml/src/ggml-zdnn/ggml-zdnn-impl.h b/ggml/src/ggml-zdnn/ggml-zdnn-impl.h new file mode 100644 index 0000000000..9dcb040fa8 --- /dev/null +++ b/ggml/src/ggml-zdnn/ggml-zdnn-impl.h @@ -0,0 +1,97 @@ +#ifndef GGML_ZDNN_IMPL +#define GGML_ZDNN_IMPL + +#include "zdnn.h" +#include "ggml.h" +#include "ggml-zdnn.h" + +#include +#include +#include + +#define GGML_ZDNN_NAME "zDNN" +#define GGML_ZDNN_VERSION ZDNN_VERNUM + +#define vec_neg(a) (-(a)) // Vector Negate +#define vec_add(a, b) ((a) + (b)) // Vector Add +#define vec_sub(a, b) ((a) - (b)) // Vector Subtract +#define vec_mul(a, b) ((a) * (b)) // Vector Multiply +#define vec_div(a, b) ((a) / (b)) // Vector Divide +#define vec_sl(a, b) ((a) << (b)) // Vector Shift Left +#define vec_sra(a, b) ((a) >> (b)) // Vector Shift Right +#define vec_sr(a, b) ((a) >> (b)) // Vector Shift Right Algebraic +#define vec_slo(a, b) vec_slb(a, (b) << 64) // Vector Shift Left by Octet +#define vec_sro(a, b) vec_srb(a, (b) << 64) // Vector Shift Right by Octet + +#ifndef vec_and +#define vec_and(a, b) ((a) & (b)) // Vector AND +#endif + +#ifndef vec_or +#define vec_or(a, b) ((a) | (b)) // Vector OR +#endif + +#ifndef vec_xor +#define vec_xor(a, b) ((a) ^ (b)) // Vector XOR +#endif + +typedef signed char char8x16_t __attribute__((vector_size(16))); +typedef unsigned char uchar8x16_t __attribute__((vector_size(16))); + +typedef int8_t int8x16_t __attribute__((vector_size(16))); +typedef int16_t int16x8_t __attribute__((vector_size(16))); +typedef int32_t int32x4_t __attribute__((vector_size(16))); +typedef uint8_t uint8x16_t __attribute__((vector_size(16))); +typedef uint16_t uint16x8_t __attribute__((vector_size(16))); +typedef uint32_t uint32x4_t __attribute__((vector_size(16))); + +typedef float float32x4_t __attribute__((vector_size(16))); +typedef double double64x2_t __attribute__((vector_size(16))); + +typedef signed long long long64x2_t __attribute__((vector_size(16))); +typedef unsigned long long ulong64x2_t __attribute__((vector_size(16))); + +#define ZDNN_CHECK(stmt) \ + do { \ + zdnn_status status = (stmt); \ + GGML_ASSERT(status == ZDNN_OK); \ + } while (0); + +struct ggml_backend_zdnn_device_context { + int zdnn_device; + int zdnn_device_ref_count; + + bool has_parmblkformat_0; + bool has_parmblkformat_1; + + size_t max_size; + + char name[128]; +}; + +struct ggml_backend_zdnn_context { + int device; + ggml_cgraph * gf; +}; + +struct ggml_backend_zdnn_buffer { + void * data; + size_t size; + + zdnn_tensor_desc pre_tfm_desc; + zdnn_tensor_desc tfm_desc; + zdnn_ztensor ztensor; + + char name[GGML_MAX_NAME]; +}; + +struct ggml_backend_zdnn_buffer_context { + void * all_data; + size_t all_size; + bool owned; + + int n_buffers; + std::vector> buffers; +}; + +#endif // GGML_ZDNN_IMPL diff --git a/ggml/src/ggml-zdnn/ggml-zdnn.cpp b/ggml/src/ggml-zdnn/ggml-zdnn.cpp new file mode 100644 index 0000000000..7507a52aea --- /dev/null +++ b/ggml/src/ggml-zdnn/ggml-zdnn.cpp @@ -0,0 +1,846 @@ +#include "zdnn.h" +#include "ggml-zdnn.h" +#include "ggml-zdnn-impl.h" + +#include "ggml-impl.h" +#include "ggml-backend-impl.h" + +#include +#include +#include +#include + +inline zdnn_data_types ggml_zdnn_type_mapping(ggml_type type) { + switch (type) { + case GGML_TYPE_F32: + return FP32; + case GGML_TYPE_F16: + return FP16; + case GGML_TYPE_BF16: + return BFLOAT; + case GGML_TYPE_I8: + return INT8; + case GGML_TYPE_I32: + return INT32; + case GGML_TYPE_Q8_0: + return INT8; + default: + GGML_ABORT("%s: fatal: unable to determine zTensor data type", + __func__); + break; + } +} + +inline void ggml_zdnn_create_tensor(zdnn_tensor_desc & pre_tfm_desc, + zdnn_tensor_desc & tfm_desc, + zdnn_ztensor & ztensor, + const ggml_tensor * src, + const int64_t * ne, + const zdnn_data_layouts layout) { + zdnn_init_pre_transformed_desc( + layout, + ggml_zdnn_type_mapping(src->type), + &pre_tfm_desc, + ne[3], ne[2], ne[1], ne[0] + ); + + ZDNN_CHECK(zdnn_generate_transformed_desc(&pre_tfm_desc, &tfm_desc)); + ZDNN_CHECK(zdnn_init_ztensor_with_malloc(&pre_tfm_desc, &tfm_desc, &ztensor)); +} + +inline void ggml_zdnn_load_tensor(zdnn_ztensor & ztensor, + void * buffer) { + ZDNN_CHECK(zdnn_transform_ztensor(&ztensor, buffer)); +} + +inline void ggml_zdnn_init_tensor(ggml_backend_zdnn_buffer * buffer, const ggml_tensor * tensor) { + switch (tensor->op) { + case GGML_OP_MUL_MAT: + { + zdnn_init_pre_transformed_desc( + ZDNN_2D, + ggml_zdnn_type_mapping(tensor->type), + &buffer->pre_tfm_desc, + tensor->ne[1], tensor->ne[0] + ); + } break; + + default: + { + // For 4D tensors, GGML uses NCHW layout. However, because zDNN + // automatically transforms everything to NHWC, we will use it + // directly to avoid the performance penalty changing the + // layout and reshaping the tensor. + zdnn_init_pre_transformed_desc( + ZDNN_NHWC, + ggml_zdnn_type_mapping(tensor->type), + &buffer->pre_tfm_desc, + tensor->ne[3], tensor->ne[2], tensor->ne[1], tensor->ne[0] + ); + + // TODO: Consider adding a ggml check. + // TODO: If tensor = 4D, use ZDNN_NCHW by default. + // TODO: If tensor = 2D, use ZDNN_NHWC by default. + } break; + } + + ZDNN_CHECK(zdnn_generate_transformed_desc(&buffer->pre_tfm_desc, &buffer->tfm_desc)); + ZDNN_CHECK(zdnn_init_ztensor_with_malloc(&buffer->pre_tfm_desc, &buffer->tfm_desc, &buffer->ztensor)); +} + +static void ggml_zdnn_mul_mat_op(ggml_backend_zdnn_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + GGML_TENSOR_BINARY_OP_LOCALS; + + const enum ggml_type type = src0->type; + + GGML_ASSERT(ne0 == ne01); + GGML_ASSERT(ne1 == ne11); + GGML_ASSERT(ne2 == ne12); + GGML_ASSERT(ne3 == ne13); + + // we don't support permuted src0 or src1 + GGML_ASSERT(nb00 == ggml_type_size(type)); + GGML_ASSERT(nb10 == ggml_type_size(src1->type)); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + const ggml_tensor * weights = src0; + const ggml_tensor * inputs = src1; + ggml_tensor * output = dst; + + ggml_backend_zdnn_buffer * weights_extra = (ggml_backend_zdnn_buffer *)weights->extra; + ggml_backend_zdnn_buffer * inputs_extra = (ggml_backend_zdnn_buffer *)inputs->extra; + ggml_backend_zdnn_buffer * output_extra = (ggml_backend_zdnn_buffer *)output->extra; + + zdnn_tensor_desc ptd_bias, td_bias; + zdnn_ztensor zt_bias; + + const int64_t weights_rows = ne01; + const int64_t weights_cols = ne00; + const int64_t inputs_rows = ne11; + const int64_t inputs_cols = ne10; + + assert(inputs_cols == weights_cols); + + const int64_t output_rows = ne1; + const int64_t output_cols = ne0; + + const int64_t bias_dim [GGML_MAX_DIMS] = { 1, 1, 1, output_cols }; + ggml_zdnn_create_tensor(ptd_bias, td_bias, zt_bias, output, bias_dim, ZDNN_1D); + + void * bias_data = (void *)calloc(ne0, ggml_element_size(output)); + if (weights_extra->ztensor.is_transformed == false) ggml_zdnn_load_tensor(weights_extra->ztensor, weights->data); + if (inputs_extra->ztensor.is_transformed == false) ggml_zdnn_load_tensor(inputs_extra->ztensor, inputs->data); + ggml_zdnn_load_tensor(zt_bias, bias_data); + + // GGML_LOG_INFO("%s: tensor '%s' tensor dimensions: [%ld, %ld, %ld, %ld] pre_tfm_desc dimensions: [%ld, %ld, %ld, %ld]\n", + // __func__, weights_extra->name, + // weights->ne[3], weights->ne[2], weights->ne[1], weights->ne[0], + // weights_extra->pre_tfm_desc.dim1, + // weights_extra->pre_tfm_desc.dim2, + // weights_extra->pre_tfm_desc.dim3, + // weights_extra->pre_tfm_desc.dim4); + + // GGML_LOG_INFO("%s: tensor '%s' tensor dimensions: [%ld, %ld, %ld, %ld] pre_tfm_desc dimensions: [%ld, %ld, %ld, %ld]\n", + // __func__, inputs_extra->name, + // inputs->ne[3], inputs->ne[2], inputs->ne[1], inputs->ne[0], + // inputs_extra->pre_tfm_desc.dim1, + // inputs_extra->pre_tfm_desc.dim2, + // inputs_extra->pre_tfm_desc.dim3, + // inputs_extra->pre_tfm_desc.dim4); + + GGML_ASSERT(weights_extra->pre_tfm_desc.dim1 == weights->ne[0] && "weights_extra->pre_tfm_desc.dim1 must match weights->ne[0]"); + GGML_ASSERT(weights_extra->pre_tfm_desc.dim2 == weights->ne[1] && "weights_extra->pre_tfm_desc.dim2 must match weights->ne[1]"); + GGML_ASSERT(inputs_extra->pre_tfm_desc.dim1 == inputs->ne[0] && "inputs_extra->pre_tfm_desc.dim1 must match inputs->ne[0]"); + GGML_ASSERT(inputs_extra->pre_tfm_desc.dim2 == inputs->ne[1] && "inputs_extra->pre_tfm_desc.dim2 must match inputs->ne[1]"); + + ZDNN_CHECK(zdnn_matmul_transpose_op(&inputs_extra->ztensor, &weights_extra->ztensor, &zt_bias, + false, true, MATMUL_OP_ADDITION, &output_extra->ztensor)); + // TODO: Remove in the future as we are currently DLF16 -> FP32 then in the next op, FP32 -> DLF16 again. Inefficient. + ZDNN_CHECK(zdnn_transform_origtensor(&output_extra->ztensor, output->data)); + + ZDNN_CHECK(zdnn_free_ztensor_buffer(&zt_bias)); + free(bias_data); +} + +static void ggml_zdnn_mul_mat_dispatch(ggml_backend_zdnn_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + bool use_mul_mat_vec = + (src0->type == GGML_TYPE_F16 || src0->type == GGML_TYPE_F16) + && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32 + && src0->ne[0] % 2 == 0 && src1->ne[1] == 1; + + bool use_mul_mat_vec_q = + ggml_is_quantized(src0->type) + && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32; + + bool use_mul_mat_q = + ggml_is_quantized(src0->type) + && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32; + + // debug helpers + // GGML_LOG_INFO("%s: use_mul_mat_vec = %d\n", __func__, use_mul_mat_vec); + // GGML_LOG_INFO("%s: use_mul_mat_vec_q = %d\n", __func__, use_mul_mat_vec_q); + // GGML_LOG_INFO("%s: use_mul_mat_q = %d\n", __func__, use_mul_mat_q); + // GGML_LOG_INFO("%s: src0: %8d %8d %8d %8d\n", __func__, src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]); + // GGML_LOG_INFO("%s: %8d %8d %8d %8d\n", __func__, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]); + // GGML_LOG_INFO("%s: src1: %8d %8d %8d %8d\n", __func__, src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3]); + // GGML_LOG_INFO("%s: %8d %8d %8d %8d\n", __func__, src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3]); + // GGML_LOG_INFO("%s: src0 is contiguous %d, transposed %d, type = %s, name = %s\n", __func__, ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name); + // GGML_LOG_INFO("%s: src1 is contiguous %d, transposed %d, type = %s, name = %s\n", __func__, ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); + + if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16 + && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) + && src1->ne[2] * src1->ne[3] > 1) { + // general KQ + KQV multi-batch + GGML_LOG_INFO("%s: using zdnn_mul_mat_batched for KQ + KQV multi-batch\n", __func__); + // ggml_zdnn_mul_mat_batched(ctx, src0, src1, dst); + } else if (use_mul_mat_vec) { + GGML_LOG_INFO("%s: using zdnn_op_mul_mat_vec for vector multiplication\n", __func__); + // ggml_zdnn_op_mul_mat(ctx, src0, src1, dst, ggml_zdnn_op_mul_mat_vec, nullptr); + } else if (use_mul_mat_vec_q) { + GGML_LOG_INFO("%s: using zdnn_op_mul_mat_vec_q for quantized vector multiplication\n", __func__); + // ggml_zdnn_op_mul_mat(ctx, src0, src1, dst, ggml_zdnn_op_mul_mat_vec_q, ggml_zdnn_quantize_row_q8_1); + } else if (use_mul_mat_q) { + GGML_LOG_INFO("%s: using zdnn_op_mul_mat_q for quantized matrix multiplication\n", __func__); + // ggml_zdnn_op_mul_mat(ctx, src0, src1, dst, ggml_zdnn_op_mul_mat_q, ggml_zdnn_quantize_mmq_q8_1); + } else { + // GGML_LOG_INFO("%s: using zdnn_op_mul_mat for general matrix multiplication\n", __func__); + ggml_zdnn_mul_mat_op(ctx, src0, src1, dst); + } +} + +static bool ggml_zdnn_compute_forward(ggml_backend_zdnn_context * ctx, ggml_tensor * dst) { + switch (dst->op) { + case GGML_OP_MUL_MAT: + ggml_zdnn_mul_mat_dispatch(ctx, dst->src[0], dst->src[1], dst); + break; + + default: + return false; + } + + return true; +} + +static enum ggml_status ggml_zdnn_graph_compute(ggml_backend_t backend, ggml_cgraph * gf) { + ggml_backend_zdnn_context * ctx = ( ggml_backend_zdnn_context *)backend->context; + ggml_backend_zdnn_device_context * ctx_dev = (ggml_backend_zdnn_device_context *)backend->device->context; + + ctx->gf = gf; + for (int i = 0; i < gf->n_nodes; i++) { + ggml_tensor * node = gf->nodes[i]; + + if (ggml_is_empty(node) + || node->op == GGML_OP_NONE + || node->op == GGML_OP_RESHAPE + || node->op == GGML_OP_VIEW + || node->op == GGML_OP_PERMUTE + || node->op == GGML_OP_TRANSPOSE) { + continue; + } + + bool ok = ggml_zdnn_compute_forward(ctx, node); + if (!ok) { + GGML_LOG_ERROR("%s: unsupported op %s (%s)\n", + __func__, node->name, ggml_op_name(node->op)); + } + + GGML_ASSERT(ok); + } + + return GGML_STATUS_SUCCESS; +} + +static bool ggml_zdnn_supports_op(const ggml_backend_zdnn_device_context * ctx_dev, const ggml_tensor * op) { + switch (op->op) { + case GGML_OP_NONE: + case GGML_OP_RESHAPE: + case GGML_OP_VIEW: + case GGML_OP_TRANSPOSE: + case GGML_OP_PERMUTE: + return true; + + case GGML_OP_MUL_MAT: + { + const ggml_tensor * src0 = op->src[0]; + const ggml_tensor * src1 = op->src[1]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne0 = op->ne[0]; + const int64_t ne1 = op->ne[1]; + + const int64_t max_batch = ctx_dev->max_size; + + return ggml_is_matrix(src0) && + ggml_is_matrix(src1) && + ggml_is_contiguous(src0) && + ggml_is_contiguous(src1) && + src0->view_src == nullptr && src1->view_src == nullptr && + src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && + (ne0 <= max_batch && ne1 <= max_batch && ne10 <= max_batch); + } break; + + default: + return false; + } +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// globals +// + +// initialised in ggml_backend_zdnn_reg +static ggml_backend_reg g_ggml_backend_zdnn_reg; +static ggml_backend_device g_ggml_backend_zdnn_device; + +static ggml_backend_zdnn_device_context g_ggml_ctx_dev_main = { + /* .zdnn_device = */ 0, + /* .zdnn_device_ref_count = */ 0, + /* .has_parmblkformat_0 = */ false, + /* .has_parmblkformat_1 = */ false, + /* .max_size = */ 0, + /* .name = */ "", +}; + +static int ggml_backend_zdnn_device_acq(ggml_backend_zdnn_device_context * ctx) { + assert(ctx != NULL); + + if (ctx->zdnn_device == 0) { + ctx->zdnn_device = 1; + } + + if (ctx->zdnn_device >= 1) { + ctx->has_parmblkformat_0 = zdnn_is_nnpa_parmblk_fmt_installed(1, NNPA_PARMBLKFORMAT_0); + ctx->has_parmblkformat_1 = zdnn_is_nnpa_parmblk_fmt_installed(1, NNPA_PARMBLKFORMAT_1); + ctx->max_size = zdnn_get_nnpa_max_dim_idx_size(); + strncpy(ctx->name, GGML_ZDNN_NAME, sizeof(ctx->name) - 1); + } + + ctx->zdnn_device_ref_count++; + return ctx->zdnn_device; +} + +static void ggml_backend_zdnn_device_rel(ggml_backend_zdnn_device_context * ctx) { + assert(ctx != NULL); + assert(ctx->zdnn_device_ref_count > 0); + + ctx->zdnn_device_ref_count--; + if (ctx->zdnn_device_ref_count == 0) { + if (ctx->zdnn_device >= 0) { + ctx->zdnn_device = 0; + } + } +} + +static ggml_backend_zdnn_context * ggml_zdnn_init(ggml_backend_dev_t dev) { + GGML_LOG_INFO("%s: allocating\n", __func__); + GGML_LOG_INFO("%s: found 1 device\n", __func__); + + #ifdef STATIC_LIB + zdnn_init(); + #endif + + ggml_backend_zdnn_context * ctx = new ggml_backend_zdnn_context(); + ggml_backend_zdnn_device_context * ctx_dev = (ggml_backend_zdnn_device_context *)dev->context; + + int device = 1; + GGML_LOG_INFO("%s: picking default device: %s\n", __func__, ctx_dev->name); + + ctx->device = device; + GGML_LOG_INFO("%s: NNPA name: %s\n", __func__, ctx_dev->name); + GGML_LOG_INFO("%s: NNPA_PARMBLKFORMAT_0 = %s\n", __func__, ctx_dev->has_parmblkformat_0 ? "true" : "false"); + GGML_LOG_INFO("%s: NNPA_PARMBLKFORMAT_1 = %s\n", __func__, ctx_dev->has_parmblkformat_1 ? "true" : "false"); + + ctx->gf = nullptr; + + return ctx; +} + +static void ggml_zdnn_free(ggml_backend_zdnn_context * ctx) { + GGML_LOG_INFO("%s: deallocating\n", __func__); + delete ctx; +} + +// +// backend interface +// + +static void ggml_backend_zdnn_buffer_free_buffer(ggml_backend_buffer_t buffer) { + ggml_backend_zdnn_buffer_context * ctx = (ggml_backend_zdnn_buffer_context *)buffer->context; + + for (int i = 0; i < ctx->n_buffers; i++) { + if (ctx->buffers[i]->ztensor.buffer != NULL && ctx->buffers[i]->ztensor.is_transformed) { + ZDNN_CHECK(zdnn_free_ztensor_buffer(&ctx->buffers[i]->ztensor)); + } + } + + delete ctx; +} + +static void * ggml_backend_zdnn_buffer_get_base(ggml_backend_buffer_t buffer) { + ggml_backend_zdnn_buffer_context * ctx = (ggml_backend_zdnn_buffer_context *)buffer->context; + return ctx->all_data; +} + +static enum ggml_status ggml_backend_zdnn_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { + if (tensor->view_src != NULL) { + assert(tensor->view_src->buffer->buft == buffer->buft); + return GGML_STATUS_SUCCESS; + } + + ggml_backend_zdnn_buffer_context * ctx = (ggml_backend_zdnn_buffer_context *)buffer->context; + + const int64_t tsize = ggml_nbytes(tensor); + int buffer_idx = ctx->n_buffers; + + std::unique_ptr zdnn_buffer = std::make_unique(); + zdnn_buffer->data = tensor->data; + zdnn_buffer->size = tsize; + strncpy(zdnn_buffer->name, tensor->name, GGML_MAX_NAME - 1); + + ggml_zdnn_init_tensor(zdnn_buffer.get(), tensor); + tensor->extra = zdnn_buffer.get(); + + ctx->buffers.push_back(std::move(zdnn_buffer)); + ctx->n_buffers++; + + // GGML_LOG_INFO("%s: initialised tensor '%s' in buffer %d, size = %8.2f MiB\n", + // __func__, tensor->name, buffer_idx, tsize); + + return GGML_STATUS_SUCCESS; +} + +static void ggml_backend_zdnn_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) { + memset((char *)tensor->data + offset, value, size); + + GGML_UNUSED(buffer); +} + +static void ggml_backend_zdnn_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { + memcpy((char *)tensor->data + offset, data, size); + + GGML_UNUSED(buffer); +} + +static void ggml_backend_zdnn_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { + memcpy(data, (const char *)tensor->data + offset, size); + + GGML_UNUSED(buffer); +} + +static void ggml_backend_zdnn_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { + ggml_backend_zdnn_buffer_context * ctx = (ggml_backend_zdnn_buffer_context *)buffer->context; + + memset(ctx->all_data, value, ctx->all_size); +} + +static ggml_backend_buffer_i ggml_backend_zdnn_buffer_i = { + /* .free_buffer = */ ggml_backend_zdnn_buffer_free_buffer, + /* .get_base = */ ggml_backend_zdnn_buffer_get_base, + /* .init_tensor = */ ggml_backend_zdnn_buffer_init_tensor, + /* .memset_tensor = */ ggml_backend_zdnn_buffer_memset_tensor, + /* .set_tensor = */ ggml_backend_zdnn_buffer_set_tensor, + /* .get_tensor = */ ggml_backend_zdnn_buffer_get_tensor, + /* .cpy_tensor = */ NULL, + /* .clear = */ ggml_backend_zdnn_buffer_clear, + /* .reset = */ NULL, +}; + +// +// default buffer type +// + +static const char * ggml_backend_zdnn_buffer_type_get_name(ggml_backend_buffer_type_t buft) { + return GGML_ZDNN_NAME; + + GGML_UNUSED(buft); +} + +static ggml_backend_buffer_t ggml_backend_zdnn_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { + ggml_backend_zdnn_buffer_context * ctx = new ggml_backend_zdnn_buffer_context(); + + const size_t size_page = sysconf(_SC_PAGESIZE); + + size_t size_aligned = size; + if ((size_aligned % size_page) != 0) { + size_aligned += size_page - (size_aligned % size_page); + } + + ggml_backend_zdnn_device_context * ctx_dev = (ggml_backend_zdnn_device_context *)buft->device->context; + + GGML_ASSERT(ctx_dev->zdnn_device >= 0); + int device = ctx_dev->zdnn_device; GGML_UNUSED(device); + + ctx->all_data = ggml_aligned_malloc(size_aligned); + ctx->all_size = size_aligned; + ctx->owned = true; + ctx->n_buffers = 1; + + if (ctx->all_data != NULL) { + std::unique_ptr zdnn_buffer = std::make_unique(); + zdnn_buffer->data = ctx->all_data; + zdnn_buffer->size = size_aligned; + ctx->buffers.push_back(std::move(zdnn_buffer)); + } + + if (size_aligned > 0 && (ctx->all_data == NULL)) { + GGML_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f\n", + __func__, size_aligned / 1024.0 / 1024.0); + delete ctx; + return NULL; + } + + return ggml_backend_buffer_init(buft, ggml_backend_zdnn_buffer_i, ctx, size); +} + +static size_t ggml_backend_zdnn_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { + return 256; + + GGML_UNUSED(buft); +} + +static bool ggml_backend_zdnn_buffer_type_is_host(ggml_backend_buffer_type_t buft) { + return true; + + GGML_UNUSED(buft); +} + +ggml_backend_buffer_type_t ggml_backend_zdnn_buffer_type(void) { + static ggml_backend_buffer_type ggml_backend_buffer_type_zdnn = { + /* .iface = */ { + /* .get_name = */ ggml_backend_zdnn_buffer_type_get_name, + /* .alloc_buffer = */ ggml_backend_zdnn_buffer_type_alloc_buffer, + /* .get_alignment = */ ggml_backend_zdnn_buffer_type_get_alignment, + /* .get_max_size = */ NULL, + /* .get_alloc_size = */ NULL, // defaults to ggml_nbytes + /* .is_host = */ ggml_backend_zdnn_buffer_type_is_host, + }, + /* .device = */ &g_ggml_backend_zdnn_device, + /* .context = */ NULL, + }; + + return &ggml_backend_buffer_type_zdnn; +} + +static const char * ggml_backend_zdnn_buffer_from_ptr_type_get_name(ggml_backend_buffer_type_t buft) { + return GGML_ZDNN_NAME "_Mapped"; + + GGML_UNUSED(buft); +} + +static ggml_backend_buffer_type_t ggml_backend_zdnn_buffer_from_ptr_type(void) { + static ggml_backend_buffer_type ggml_backend_buffer_from_ptr_type_zdnn = { + /* .iface = */ { + /* .get_name = */ ggml_backend_zdnn_buffer_from_ptr_type_get_name, + /* .alloc_buffer = */ ggml_backend_zdnn_buffer_type_alloc_buffer, + /* .get_alignment = */ ggml_backend_zdnn_buffer_type_get_alignment, + /* .get_max_size = */ NULL, + /* .get_alloc_size = */ NULL, // defaults to ggml_nbytes + /* .is_host = */ ggml_backend_zdnn_buffer_type_is_host, + }, + /* .device = */ &g_ggml_backend_zdnn_device, + /* .context = */ NULL, + }; + + return &ggml_backend_buffer_from_ptr_type_zdnn; +} + +// +// backend +// + +static const char * ggml_backend_zdnn_name(ggml_backend_t backend) { + return GGML_ZDNN_NAME; + + GGML_UNUSED(backend); +} + +static void ggml_backend_zdnn_free(ggml_backend_t backend) { + ggml_backend_zdnn_context * ctx = (ggml_backend_zdnn_context *)backend->context; + + ggml_zdnn_free(ctx); + free(backend); +} + +static enum ggml_status ggml_backend_zdnn_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) { + return ggml_zdnn_graph_compute(backend, cgraph); +} + +static ggml_backend_i ggml_backend_zdnn_i = { + /* .get_name = */ ggml_backend_zdnn_name, + /* .free = */ ggml_backend_zdnn_free, + /* .set_tensor_async = */ NULL, + /* .get_tensor_async = */ NULL, + /* .cpy_tensor_async = */ NULL, + /* .synchronize = */ NULL, + /* .graph_plan_create = */ NULL, + /* .graph_plan_free = */ NULL, + /* .graph_plan_update = */ NULL, + /* .graph_plan_compute = */ NULL, + /* .graph_compute = */ ggml_backend_zdnn_graph_compute, + /* .event_record = */ NULL, + /* .event_wait = */ NULL, +}; + +static ggml_guid_t ggml_backend_zdnn_guid(void) { + static const char * guid_str = "IBM-ZDNN-ACCELER"; + return reinterpret_cast((void *)guid_str); +} + +// TODO: remove in the future +ggml_backend_t ggml_backend_zdnn_init(void) { + ggml_backend_dev_t dev = ggml_backend_reg_dev_get(ggml_backend_zdnn_reg(), 0); + + ggml_backend_zdnn_context * ctx = ggml_zdnn_init(dev); + if (ctx == NULL) { + GGML_LOG_ERROR("%s: error: failed to allocate context\n", __func__); + return NULL; + } + + ggml_backend_t backend = (ggml_backend_t)malloc(sizeof(ggml_backend)); + *backend = (ggml_backend) { + /* .guid = */ ggml_backend_zdnn_guid(), + /* .iface = */ ggml_backend_zdnn_i, + /* .device = */ dev, + /* .context = */ ctx, + }; + + return backend; +} + +bool ggml_backend_is_zdnn(ggml_backend_t backend) { + return backend != NULL && + ggml_guid_matches(backend->guid, ggml_backend_zdnn_guid()); + + GGML_UNUSED(backend); +} + +// +// backend device +// + +static const char * ggml_backend_zdnn_device_get_name(ggml_backend_dev_t dev) { + return GGML_ZDNN_NAME; + + GGML_UNUSED(dev); +} + +static const char * ggml_backend_zdnn_device_get_description(ggml_backend_dev_t dev) { + return "IBM Z Neural Network Processing Assist (NNPA)"; +} + +static void ggml_backend_zdnn_device_get_memory(ggml_backend_dev_t dev, size_t * free, size_t * total) { + *free = 0; + *total = 0; +} + +static enum ggml_backend_dev_type ggml_backend_zdnn_device_get_type(ggml_backend_dev_t dev) { + return GGML_BACKEND_DEVICE_TYPE_ACCEL; + + GGML_UNUSED(dev); +} + +static void ggml_backend_zdnn_device_get_props(ggml_backend_dev_t dev, ggml_backend_dev_props * props) { + props->name = ggml_backend_zdnn_device_get_name(dev); + props->description = ggml_backend_zdnn_device_get_description(dev); + props->type = ggml_backend_zdnn_device_get_type(dev); + ggml_backend_zdnn_device_get_memory(dev, &props->memory_free, &props->memory_total); + props->caps = (ggml_backend_dev_caps) { + /* .async = */ false, + /* .host_buffer = */ false, + /* .buffer_from_host_ptr = */ true, + /* .events = */ false, + }; +} + +static ggml_backend_t ggml_backend_zdnn_device_init(ggml_backend_dev_t dev, const char * params) { + ggml_backend_zdnn_context * ctx = ggml_zdnn_init(dev); + if (ctx == NULL) { + GGML_LOG_ERROR("%s: error: failed to allocate context\n", __func__); + return NULL; + } + + ggml_backend_t backend = (ggml_backend *)malloc(sizeof(ggml_backend)); + *backend = (ggml_backend) { + /* .guid = */ ggml_backend_zdnn_guid(), + /* .iface = */ ggml_backend_zdnn_i, + /* .device = */ dev, + /* .context = */ ctx, + }; + + return backend; + + GGML_UNUSED(params); +} + +static ggml_backend_buffer_type_t ggml_backend_zdnn_device_get_buffer_type(ggml_backend_dev_t dev) { + return ggml_backend_zdnn_buffer_type(); + + GGML_UNUSED(dev); +} + +static ggml_backend_buffer_t ggml_backend_zdnn_device_buffer_from_ptr(ggml_backend_dev_t dev, void * ptr, size_t size, size_t max_tensor_size) { + ggml_backend_zdnn_buffer_context * ctx = new ggml_backend_zdnn_buffer_context(); + + ctx->all_data = ptr; + ctx->all_size = size; + ctx->owned = false; + ctx->n_buffers = 0; + + const size_t size_page = sysconf(_SC_PAGESIZE); + + // page-align the data ptr + { + const uintptr_t offs = (uintptr_t) ptr % size_page; + ptr = (void *)((char *)ptr - offs); + size += offs; + } + + size_t size_aligned = size; + if ((size_aligned % size_page) != 0) { + size_aligned += size_page - (size_aligned % size_page); + } + + ggml_backend_zdnn_device_context * ctx_dev = (ggml_backend_zdnn_device_context *)dev->context; + + GGML_ASSERT(ctx_dev->zdnn_device >= 0); + int device = ctx_dev->zdnn_device; GGML_UNUSED(device); + + std::unique_ptr zdnn_buffer = std::make_unique(); + zdnn_buffer->data = ptr; + zdnn_buffer->size = size; + ctx->buffers.push_back(std::move(zdnn_buffer)); + + GGML_LOG_INFO("%s: allocated buffer, size = %8.2f MiB\n", + __func__, size_aligned / 1024.0 / 1024.0); + + ++ctx->n_buffers; + + return ggml_backend_buffer_init(ggml_backend_zdnn_buffer_from_ptr_type(), ggml_backend_zdnn_buffer_i, ctx, size); +} + +static bool ggml_backend_zdnn_device_supports_op(ggml_backend_dev_t dev, const ggml_tensor * op) { + ggml_backend_zdnn_device_context * ctx_dev = (ggml_backend_zdnn_device_context *) dev->context; + + return ggml_zdnn_supports_op(ctx_dev, op); +} + +static bool ggml_backend_zdnn_device_supports_buft(ggml_backend_dev_t dev, ggml_backend_buffer_type_t buft) { + return + buft->iface.get_name == ggml_backend_zdnn_buffer_type_get_name || + buft->iface.get_name == ggml_backend_zdnn_buffer_from_ptr_type_get_name; + + GGML_UNUSED(dev); +} + +static ggml_backend_device_i ggml_backend_zdnn_device_i = { + /* .get_name = */ ggml_backend_zdnn_device_get_name, + /* .get_description = */ ggml_backend_zdnn_device_get_description, + /* .get_memory = */ ggml_backend_zdnn_device_get_memory, + /* .get_type = */ ggml_backend_zdnn_device_get_type, + /* .get_props = */ ggml_backend_zdnn_device_get_props, + /* .init_backend = */ ggml_backend_zdnn_device_init, + /* .get_buffer_type = */ ggml_backend_zdnn_device_get_buffer_type, + /* .get_host_buffer_type = */ NULL, + /* .buffer_from_host_ptr = */ ggml_backend_zdnn_device_buffer_from_ptr, + /* .supports_op = */ ggml_backend_zdnn_device_supports_op, + /* .supports_buft = */ ggml_backend_zdnn_device_supports_buft, + /* .offload_op = */ NULL, + /* .event_new = */ NULL, + /* .event_free = */ NULL, + /* .event_synchronize = */ NULL, +}; + +// +// backend registry +// + +static const char * ggml_backend_zdnn_reg_get_name(ggml_backend_reg_t reg) { + return GGML_ZDNN_NAME; + + GGML_UNUSED(reg); +} + +static size_t ggml_backend_zdnn_reg_device_count(ggml_backend_reg_t reg) { + if (!zdnn_is_nnpa_installed()) { + return 0; + } + return 1; + + GGML_UNUSED(reg); +} + +static ggml_backend_dev_t ggml_backend_zdnn_reg_device_get(ggml_backend_reg_t reg, size_t index) { + GGML_ASSERT(index == 0); + + return &g_ggml_backend_zdnn_device; + + GGML_UNUSED(reg); + GGML_UNUSED(index); +} + +static ggml_backend_feature g_ggml_backend_zdnn_features[] = { + { "NNPA", zdnn_is_nnpa_installed() ? "1" : "0" }, + { "NNPA_PARMBLKFORMAT_0", zdnn_is_nnpa_parmblk_fmt_installed(1, NNPA_PARMBLKFORMAT_0) ? "1" : "0" }, + { "NNPA_PARMBLKFORMAT_1", zdnn_is_nnpa_parmblk_fmt_installed(1, NNPA_PARMBLKFORMAT_1) ? "1" : "0" }, + { NULL, NULL }, +}; + +static ggml_backend_feature * ggml_backend_zdnn_get_features(ggml_backend_reg_t reg) { + return g_ggml_backend_zdnn_features; + + GGML_UNUSED(reg); +} + +static void * ggml_backend_zdnn_get_proc_address(ggml_backend_reg_t reg, const char * name) { + if (strcmp(name, "ggml_backend_get_features") == 0) { + return (void *) ggml_backend_zdnn_get_features; + } + + return NULL; + + GGML_UNUSED(reg); +} + +static ggml_backend_reg_i ggml_backend_zdnn_reg_i = { + /* .get_name = */ ggml_backend_zdnn_reg_get_name, + /* .get_device_count = */ ggml_backend_zdnn_reg_device_count, + /* .get_device = */ ggml_backend_zdnn_reg_device_get, + /* .get_proc_address = */ ggml_backend_zdnn_get_proc_address, +}; + +static void ggml_zdnn_cleanup(void) { + ggml_backend_zdnn_device_rel(&g_ggml_ctx_dev_main); +} + +// TODO: make thread-safe +ggml_backend_reg_t ggml_backend_zdnn_reg(void) { + ggml_backend_zdnn_device_acq(&g_ggml_ctx_dev_main); + + // register cleanup callback + atexit(ggml_zdnn_cleanup); + + { + g_ggml_backend_zdnn_reg = (ggml_backend_reg) { + /* .api_version = */ GGML_ZDNN_VERSION, + /* .iface = */ ggml_backend_zdnn_reg_i, + /* .context = */ NULL, + }; + + g_ggml_backend_zdnn_device = (ggml_backend_device) { + /* .iface = */ ggml_backend_zdnn_device_i, + /* .reg = */ &g_ggml_backend_zdnn_reg, + /* .context = */ &g_ggml_ctx_dev_main, + }; + + return &g_ggml_backend_zdnn_reg; + } +} + +GGML_BACKEND_DL_IMPL(ggml_backend_zdnn_reg) From db3010bd23980bad5f5d93ec3e6757ec531a413b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 15 Aug 2025 16:28:28 +0300 Subject: [PATCH 006/174] vulkan : fix compile warnings on macos (#15340) ggml-ci --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index b26801826f..c5354293aa 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -8360,7 +8360,7 @@ static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context& subctx, cons (uint32_t)src0->ne[0], (uint32_t)n_dims, freq_scale, (uint32_t)src0->ne[1], freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1]}, theta_scale, src2 != nullptr, (uint32_t)src0->ne[2], s1, s2, - sections[0], sections[1], sections[2], sections[3], backprop + { sections[0], sections[1], sections[2], sections[3] }, backprop }, dryrun); } @@ -9627,7 +9627,6 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr default: std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(node->op) << std::endl; GGML_ABORT("fatal error"); - return false; } vk_context compute_ctx; @@ -10912,7 +10911,6 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm default: return false; } - break; case GGML_OP_GLU: switch (ggml_get_glu_op(op)) { case GGML_GLU_OP_GEGLU: @@ -10928,7 +10926,6 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm default: return false; } - break; case GGML_OP_MUL_MAT: case GGML_OP_MUL_MAT_ID: { @@ -10992,7 +10989,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm } return true; - } break; + } case GGML_OP_FLASH_ATTN_EXT: { ggml_backend_vk_device_context * ctx = (ggml_backend_vk_device_context *)dev->context; @@ -11082,7 +11079,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm default: return false; } - } break; + } case GGML_OP_SET_ROWS: { switch (op->type) { @@ -11099,7 +11096,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm default: return false; } - } break; + } case GGML_OP_CONT: case GGML_OP_CPY: case GGML_OP_DUP: @@ -11151,7 +11148,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm return true; } return false; - } break; + } case GGML_OP_REPEAT: return ggml_type_size(op->type) == sizeof(float) && ggml_type_size(op->src[0]->type) == sizeof(float); case GGML_OP_REPEAT_BACK: From 5edf1592fdb9131d01321aeef4241c6a34969e27 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 15 Aug 2025 17:16:36 +0300 Subject: [PATCH 007/174] vulkan : fix out-of-bounds access in argmax kernel (#15342) ggml-ci --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 2 +- ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp | 17 +++++++++++++---- tests/test-backend-ops.cpp | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index c5354293aa..76a0cfa4f0 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -8392,7 +8392,7 @@ static void ggml_vk_sum_rows(ggml_backend_vk_context * ctx, vk_context& subctx, } static void ggml_vk_argmax(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_ARGMAX, { (uint32_t)src0->ne[0], 0, 0.0f, 0.0f }, dryrun); + ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_ARGMAX, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], 0.0f, 0.0f }, dryrun); } static void ggml_vk_count_equal(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, bool dryrun = false) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp b/ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp index eaf4da341e..a1d4c240dd 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/argmax.comp @@ -5,6 +5,8 @@ #extension GL_EXT_control_flow_attributes : enable +#define FLT_MAX 3.402823466e+38F + layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; @@ -19,19 +21,26 @@ void main() { const uint row = gl_WorkGroupID.z * 262144 + gl_WorkGroupID.y * 512 + gl_WorkGroupID.x; const uint col = gl_LocalInvocationID.x; - if (col >= p.KX) { + if (row >= p.KY) { return; } - A_TYPE amax = data_a[row*p.KX + col]; - tmp[col] = col; + + A_TYPE amax = -FLT_MAX; + uint acol = col; + + if (col < p.KX) { + amax = data_a[row*p.KX + col]; + } for (uint i = col + BLOCK_SIZE; i < p.KX; i += BLOCK_SIZE) { A_TYPE val = data_a[row*p.KX + i]; if (val > amax) { amax = val; - tmp[col] = i; + acol = i; } } + + tmp[col] = acol; tmpmax[col] = amax; barrier(); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index cc9c3a0d57..f4565f9b71 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -5528,6 +5528,7 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_count_equal(GGML_TYPE_F32, {4, 5000, 1, 1})); test_cases.emplace_back(new test_argmax(GGML_TYPE_F32, {32, 1, 1, 1})); + test_cases.emplace_back(new test_argmax(GGML_TYPE_F32, {32, 513, 1, 1})); test_cases.emplace_back(new test_argmax(GGML_TYPE_F32, {100, 10, 1, 1})); test_cases.emplace_back(new test_argmax(GGML_TYPE_F32, {1024, 10, 1, 1})); test_cases.emplace_back(new test_argmax(GGML_TYPE_F32, {1024, 12, 1, 1})); From e2c1bfff5305c661ac53e9d57cb732ff626a2242 Mon Sep 17 00:00:00 2001 From: lhez Date: Sat, 16 Aug 2025 00:52:14 +0800 Subject: [PATCH 008/174] opencl: add initial mxfp4 support via mv (#15270) * opencl: add reference `mul_mv_mxfp4_f32` * opencl: add reference `mul_mv_id` for mxfp4 * Q4_0 tranpose fix for Adreno --------- Co-authored-by: shawngu-quic --- ggml/src/ggml-opencl/CMakeLists.txt | 2 + ggml/src/ggml-opencl/ggml-opencl.cpp | 147 +++++++++++++- .../kernels/mul_mv_id_mxfp4_f32.cl | 189 ++++++++++++++++++ .../ggml-opencl/kernels/mul_mv_mxfp4_f32.cl | 144 +++++++++++++ ggml/src/ggml-opencl/kernels/transpose.cl | 20 ++ 5 files changed, 496 insertions(+), 6 deletions(-) create mode 100644 ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32.cl create mode 100644 ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32.cl diff --git a/ggml/src/ggml-opencl/CMakeLists.txt b/ggml/src/ggml-opencl/CMakeLists.txt index d8290faa46..015821f34f 100644 --- a/ggml/src/ggml-opencl/CMakeLists.txt +++ b/ggml/src/ggml-opencl/CMakeLists.txt @@ -82,7 +82,9 @@ set(GGML_OPENCL_KERNELS mul_mv_q4_0_f32_1d_8x_flat mul_mv_q4_0_f32_1d_16x_flat mul_mv_q6_k + mul_mv_mxfp4_f32 mul_mv_id_q4_0_f32_8x_flat + mul_mv_id_mxfp4_f32 mul_mm_f32_f32_l4_lm mul_mm_f16_f32_l4_lm mul diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index fc838684ac..b8cbf6cf0d 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -365,6 +365,7 @@ struct ggml_backend_opencl_context { cl_program program_mul_mv_q4_0_f32_1d_8x_flat; cl_program program_mul_mv_q4_0_f32_1d_16x_flat; cl_program program_mul_mv_q6_K; + cl_program program_mul_mv_mxfp4_f32; cl_program program_mul_mv_f16_f16; cl_program program_mul_mv_f16_f32_1row; cl_program program_mul_mv_f16_f32_l4; @@ -398,6 +399,7 @@ struct ggml_backend_opencl_context { cl_program program_conv_2d_f16_f32; cl_program program_tsembd; cl_program program_mul_mv_id_q4_0_f32_8x_flat; + cl_program program_mul_mv_id_mxfp4_f32; cl_program program_mul_mm_f32_f32_l4_lm; cl_program program_mul_mm_f16_f32_l4_lm; @@ -439,6 +441,7 @@ struct ggml_backend_opencl_context { cl_kernel kernel_convert_block_q4_0_noshuffle; cl_kernel kernel_mul_mat_q4_0_f32_1d_8x_flat, kernel_mul_mat_q4_0_f32_1d_16x_flat; cl_kernel kernel_mul_mv_q6_K_f32; + cl_kernel kernel_mul_mv_mxfp4_f32; cl_kernel kernel_im2col_f32, kernel_im2col_f16; cl_kernel kernel_argsort_f32_i32; cl_kernel kernel_sum_rows_f32; @@ -455,6 +458,7 @@ struct ggml_backend_opencl_context { cl_kernel kernel_conv_2d_f16_f32; cl_kernel kernel_timestep_embedding; cl_kernel kernel_mul_mv_id_q4_0_f32_8x_flat; + cl_kernel kernel_mul_mv_id_mxfp4_f32; cl_kernel kernel_mul_mm_f32_f32_l4_lm; cl_kernel kernel_mul_mm_f16_f32_l4_lm; @@ -577,6 +581,7 @@ struct ggml_backend_opencl_context { cl_kernel kernel_transpose_32; cl_kernel kernel_transpose_32_16; cl_kernel kernel_transpose_16; + cl_kernel kernel_transpose_16_4x1; cl_mem A_s_d_max; // max scale buffer size for transpose cl_mem A_q_d_max; // max weight buffer size for transpose @@ -971,6 +976,22 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } + // mul_mv_mxfp4_f32 + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "mul_mv_mxfp4_f32.cl.h" + }; +#else + const std::string kernel_src = read_file("mul_mv_mxfp4_f32.cl"); +#endif + backend_ctx->program_mul_mv_mxfp4_f32 = + build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + + CL_CHECK((backend_ctx->kernel_mul_mv_mxfp4_f32 = clCreateKernel(backend_ctx->program_mul_mv_mxfp4_f32, "kernel_mul_mv_mxfp4_f32", &err), err)); + GGML_LOG_CONT("."); + } + // mul_mv_f16_f16 { #ifdef GGML_OPENCL_EMBED_KERNELS @@ -1611,6 +1632,22 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } + // mul_mv_id_mxfp4_f32 + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "mul_mv_id_mxfp4_f32.cl.h" + }; +#else + const std::string kernel_src = read_file("mul_mv_id_mxfp4_f32.cl"); +#endif + backend_ctx->program_mul_mv_id_mxfp4_f32 = + build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + + CL_CHECK((backend_ctx->kernel_mul_mv_id_mxfp4_f32 = clCreateKernel(backend_ctx->program_mul_mv_id_mxfp4_f32, "kernel_mul_mv_id_mxfp4_f32", &err), err)); + GGML_LOG_CONT("."); + } + // Adreno kernels #ifdef GGML_OPENCL_USE_ADRENO_KERNELS // transpose @@ -1628,6 +1665,7 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve CL_CHECK((backend_ctx->kernel_transpose_32_16 = clCreateKernel(backend_ctx->program_transpose, "kernel_transpose_32_16", &err), err)); CL_CHECK((backend_ctx->kernel_transpose_32 = clCreateKernel(backend_ctx->program_transpose, "kernel_transpose_32", &err), err)); CL_CHECK((backend_ctx->kernel_transpose_16 = clCreateKernel(backend_ctx->program_transpose, "kernel_transpose_16", &err), err)); + CL_CHECK((backend_ctx->kernel_transpose_16_4x1 = clCreateKernel(backend_ctx->program_transpose, "kernel_transpose_16_4x1", &err), err)); GGML_LOG_CONT("."); } @@ -2552,13 +2590,14 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te return true; } else if (op->src[0]->type == GGML_TYPE_F32) { return op->src[1]->type == GGML_TYPE_F32; - } else if (op->src[0]->type == GGML_TYPE_Q4_0 || + } else if (op->src[0]->type == GGML_TYPE_Q4_0 || op->src[0]->type == GGML_TYPE_MXFP4 || op->src[0]->type == GGML_TYPE_Q6_K) { return op->src[1]->type == GGML_TYPE_F32 && ggml_is_contiguous(op->src[0]) && ggml_is_contiguous(op->src[1]); } return false; case GGML_OP_MUL_MAT_ID: - if (op->src[0]->type == GGML_TYPE_Q4_0) { + if (op->src[0]->type == GGML_TYPE_Q4_0 || + op->src[0]->type == GGML_TYPE_MXFP4) { if (op->src[1]->type == GGML_TYPE_F32) { return ggml_is_contiguous(op->src[0]) && ggml_is_contiguous(op->src[1]); } @@ -2944,7 +2983,10 @@ static void ggml_backend_opencl_buffer_set_tensor(ggml_backend_buffer_t buffer, // cl_mem qT_d = clCreateBuffer(context, CL_MEM_READ_WRITE, q_size_bytes, NULL, &err); CL_CHECK(err); - // size_t d_size_bytes = M * (K / 32) / 2 * sizeof(float); + bool K_tile_trans = true; + if ((K / 32) % 4 != 0){ + K_tile_trans =false; + } size_t d_size_bytes = M * (K / 32) * 2; region.origin = 0; region.size = d_size_bytes; @@ -2985,10 +3027,15 @@ static void ggml_backend_opencl_buffer_set_tensor(ggml_backend_buffer_t buffer, qT_d_image1D = clCreateImage(context, 0, &img_fmt_1d, &img_desc_1d, NULL, &err); CL_CHECK(err); - img_fmt_1d = { CL_RGBA, CL_HALF_FLOAT }; memset(&img_desc_1d, 0, sizeof(img_desc_1d)); + if (K_tile_trans) { + img_fmt_1d = { CL_RGBA, CL_HALF_FLOAT }; + img_desc_1d.image_width = M * K / 32 / 4; + } else { + img_fmt_1d = { CL_R, CL_HALF_FLOAT }; + img_desc_1d.image_width = M * K / 32; + } img_desc_1d.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; - img_desc_1d.image_width = M * K / 32 / 4; img_desc_1d.buffer = extra->d; d_d_image1D = clCreateImage(context, 0, &img_fmt_1d, &img_desc_1d, NULL, &err); CL_CHECK(err); @@ -3024,6 +3071,10 @@ static void ggml_backend_opencl_buffer_set_tensor(ggml_backend_buffer_t buffer, int width_s = K / 32 / 4; kernel = backend_ctx->kernel_transpose_16; + if (!K_tile_trans) { + kernel = backend_ctx->kernel_transpose_16_4x1; + width_s = K / 32; + } CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &d_d_image1D)); CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &dT_d_image1D)); CL_CHECK(clSetKernelArg(kernel, 2, sizeof(int), &height_s)); @@ -6254,11 +6305,47 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co CL_CHECK(clSetKernelArg(kernel, 13, sizeof(int), &r2)); CL_CHECK(clSetKernelArg(kernel, 14, sizeof(int), &r3)); break; + case GGML_TYPE_MXFP4: { + kernel = backend_ctx->kernel_mul_mv_mxfp4_f32; + + if (backend_ctx->gpu_family == INTEL) { + nth0 = 16; + nth1 = 2; + ndst = nth1*2; + } else if (backend_ctx->gpu_family == ADRENO) { + nth0 = 64; + nth1 = 2; + ndst = nth1*2; + } else { + GGML_ASSERT(false && "TODO: Unknown GPU"); + } + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0->data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset0)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_ulong), &nb01)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(cl_ulong), &nb02)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(cl_ulong), &nb03)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(cl_ulong), &nb11)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(cl_ulong), &nb12)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(cl_ulong), &nb13)); + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(int), &ne0)); + CL_CHECK(clSetKernelArg(kernel, 15, sizeof(int), &ne1)); + CL_CHECK(clSetKernelArg(kernel, 16, sizeof(int), &r2)); + CL_CHECK(clSetKernelArg(kernel, 17, sizeof(int), &r3)); + CL_CHECK(clSetKernelArg(kernel, 18, sizeof(float)*nth0,nullptr)); + break; + } default: GGML_ASSERT(false && "not implemented"); } - if (src0t == GGML_TYPE_Q4_0 || + if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_MXFP4 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q8_0 || src0t == GGML_TYPE_Q2_K) { @@ -6307,10 +6394,12 @@ static void ggml_cl_mul_mat_id(ggml_backend_t backend, const ggml_tensor * src0, ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; + ggml_tensor_extra_cl * extra0 = (ggml_tensor_extra_cl *)src0->extra; ggml_tensor_extra_cl * extra1 = (ggml_tensor_extra_cl *)src1->extra; ggml_tensor_extra_cl * extra2 = (ggml_tensor_extra_cl *)src2->extra; ggml_tensor_extra_cl * extrad = (ggml_tensor_extra_cl *)dst->extra; + cl_ulong offset0 = extra0->offset + src0->view_offs; cl_ulong offset1 = extra1->offset + src1->view_offs; cl_ulong offset2 = extra2->offset + src2->view_offs; cl_ulong offsetd = extrad->offset + dst->view_offs; @@ -6325,7 +6414,9 @@ static void ggml_cl_mul_mat_id(ggml_backend_t backend, const ggml_tensor * src0, const int ne03 = src0->ne[3]; const cl_ulong nb00 = src0->nb[0]; + const cl_ulong nb01 = src0->nb[1]; const cl_ulong nb02 = src0->nb[2]; + const cl_ulong nb03 = src0->nb[3]; const int ne10 = src1->ne[0]; const int ne11 = src1->ne[1]; @@ -6334,6 +6425,7 @@ static void ggml_cl_mul_mat_id(ggml_backend_t backend, const ggml_tensor * src0, const cl_ulong nb11 = src1->nb[1]; const cl_ulong nb12 = src1->nb[2]; + const cl_ulong nb13 = src1->nb[3]; const int ne20 = src2->ne[0]; const int ne21 = src2->ne[1]; @@ -6401,6 +6493,49 @@ static void ggml_cl_mul_mat_id(ggml_backend_t backend, const ggml_tensor * src0, break; } + case GGML_TYPE_MXFP4: { + kernel = backend_ctx->kernel_mul_mv_id_mxfp4_f32; + + if (backend_ctx->gpu_family == INTEL) { + sgs = 16; + nsg = 2; + ndst = 2; + } else if (backend_ctx->gpu_family == ADRENO) { + sgs = 64; + nsg = 2; + ndst = 2; + } else { + GGML_ASSERT(false && "TODO: Unknown GPU"); + } + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0->data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset0)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extra2->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offset2)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(cl_ulong), &nb01)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(cl_ulong), &nb02)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(cl_ulong), &nb03)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(int), &ne11)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(cl_ulong), &nb11)); + CL_CHECK(clSetKernelArg(kernel, 15, sizeof(cl_ulong), &nb12)); + CL_CHECK(clSetKernelArg(kernel, 16, sizeof(cl_ulong), &nb13)); + CL_CHECK(clSetKernelArg(kernel, 17, sizeof(int), &ne20)); + CL_CHECK(clSetKernelArg(kernel, 18, sizeof(int), &ne21)); + CL_CHECK(clSetKernelArg(kernel, 19, sizeof(cl_ulong), &nb21)); + CL_CHECK(clSetKernelArg(kernel, 20, sizeof(int), &ne0)); + CL_CHECK(clSetKernelArg(kernel, 21, sizeof(int), &ne1)); + CL_CHECK(clSetKernelArg(kernel, 22, sizeof(int), &r2)); + CL_CHECK(clSetKernelArg(kernel, 23, sizeof(int), &r3)); + CL_CHECK(clSetKernelArg(kernel, 24, sizeof(float)*sgs,nullptr)); + + break; + } default: GGML_ASSERT(false && "not implemented");; } diff --git a/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32.cl b/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32.cl new file mode 100644 index 0000000000..d50bd1fc42 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/mul_mv_id_mxfp4_f32.cl @@ -0,0 +1,189 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#ifdef cl_intel_subgroups +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#else +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif + +#ifdef cl_intel_required_subgroup_size +#pragma OPENCL EXTENSION cl_intel_required_subgroup_size : enable +#define INTEL_GPU 1 +#define REQD_SUBGROUP_SIZE_16 __attribute__((intel_reqd_sub_group_size(16))) +#define REQD_SUBGROUP_SIZE_32 __attribute__((intel_reqd_sub_group_size(32))) +#elif defined(cl_qcom_reqd_sub_group_size) +#pragma OPENCL EXTENSION cl_qcom_reqd_sub_group_size : enable +#define ADRENO_GPU 1 +#define REQD_SUBGROUP_SIZE_64 __attribute__((qcom_reqd_sub_group_size("half"))) +#define REQD_SUBGROUP_SIZE_128 __attribute__((qcom_reqd_sub_group_size("full"))) +#endif + +#define QK_MXFP4 32 +typedef struct { + uchar e; // E8M0 + uchar qs[QK_MXFP4/2]; +} block_mxfp4; + +constant static float kvalues_mxfp4_f[16] = { + 0, .5f, 1.f, 1.5f, 2.f, 3.f, 4.f, 6.f, -0, -.5f, -1.f, -1.5f, -2.f, -3.f, -4.f, -6.f +}; + +static inline float e8m0_to_fp32(uchar x) { + int bits; + + if (x == 0) { + bits = 0x00400000; + } else { + bits = (uint) x << 23; + } + + return as_float(bits); +} + +#ifdef INTEL_GPU +#define N_R0_MXFP4 2 // number of rows each subgroup works on +#define N_SG_MXFP4 2 // number of subgroups in a work group +#define N_SIMDWIDTH 16 // subgroup size +#elif defined (ADRENO_GPU) +#define N_R0_MXFP4 2 +#define N_SG_MXFP4 2 +#define N_SIMDWIDTH 64 +#endif + +inline void mul_mv_mxfp4_f32( + global char * src0, + global char * src1, + global char * dst, + int ne00, + ulong nb01, + ulong nb02, + ulong nb03, + int ne12, + ulong nb11, + ulong nb12, + ulong nb13, + int ne0, + int ne1, + int r2, + int r3, + local char * shmem +) { + local float * shmem_f32 = (local float *) shmem; + int nb = ne00/QK_MXFP4; + + int r0 = get_group_id(0); + int r1 = get_group_id(1); + int im = 0; + + int first_row = (r0 * N_SG_MXFP4 + get_sub_group_id()) * N_R0_MXFP4; + + uint i12 = im%ne12; + uint i13 = im/ne12; + + ulong offset_src0 = first_row*nb01 + (i12/r2)*nb02 + (i13/r3)*nb03; + ulong offset_src1 = r1*nb11 + (i12 )*nb12 + (i13 )*nb13; + + global block_mxfp4 * x = (global block_mxfp4 *) (src0 + offset_src0); + global float * y = (global float *) (src1 + offset_src1); + + const short ix = get_sub_group_local_id()/2; // 0...15 + const short it = get_sub_group_local_id()%2; // 0 or 1 + + shmem_f32[get_sub_group_local_id()] = kvalues_mxfp4_f[get_sub_group_local_id()%16]; + barrier(CLK_LOCAL_MEM_FENCE); + + float4 yl[4]; + float sumf[N_R0_MXFP4] = {0.f}; + + global float * yb = y + ix * QK_MXFP4 + it * 8; + + for (int ib = ix; ib < nb; ib += N_SIMDWIDTH/2) { + global float4 * y4 = (global float4 *)yb; + yl[0] = y4[0]; + yl[1] = y4[4]; + yl[2] = y4[1]; + yl[3] = y4[5]; + + for (short row = 0; row < N_R0_MXFP4; row++) { + global block_mxfp4 * xb = x + row*nb + ib; + global uchar * q2 = (global uchar *)(xb->qs + 8*it); + + float4 acc1 = yl[0]*(float4)(shmem_f32[q2[0] & 0x0F], shmem_f32[q2[1] & 0x0F], shmem_f32[q2[2] & 0x0F], shmem_f32[q2[3] & 0x0F]); + float4 acc2 = yl[1]*(float4)(shmem_f32[q2[0] >> 4 ], shmem_f32[q2[1] >> 4 ], shmem_f32[q2[2] >> 4 ], shmem_f32[q2[3] >> 4 ]); + float4 acc3 = yl[2]*(float4)(shmem_f32[q2[4] & 0x0F], shmem_f32[q2[5] & 0x0F], shmem_f32[q2[6] & 0x0F], shmem_f32[q2[7] & 0x0F]); + float4 acc4 = yl[3]*(float4)(shmem_f32[q2[4] >> 4 ], shmem_f32[q2[5] >> 4 ], shmem_f32[q2[6] >> 4 ], shmem_f32[q2[7] >> 4 ]); + + acc1 = (acc1 + acc3) + (acc2 + acc4); + + sumf[row] += e8m0_to_fp32(xb->e) * ((acc1.s0 + acc1.s1) + (acc1.s2 + acc1.s3)); + } + + yb += (N_SIMDWIDTH/2) * QK_MXFP4; + } + + global float * dst_f32 = (global float *) dst + (ulong)im*ne0*ne1 + (ulong)r1*ne0; + + for (int row = 0; row < N_R0_MXFP4 && first_row + row < ne0; ++row) { + float sum_all = sub_group_reduce_add(sumf[row]); + if (get_sub_group_local_id() == 0) { + dst_f32[first_row + row] = sum_all; + } + } +} + +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_16 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_mul_mv_id_mxfp4_f32( + global char * src0, + ulong offset0, + global char * src1, + ulong offset1, + global char * src2, + ulong offset2, + global char * dst, + ulong offsetd, + int ne00, + ulong nb01, + ulong nb02, + ulong nb03, + int ne11, + int ne12, + ulong nb11, + ulong nb12, + ulong nb13, + int ne20, + int ne21, + ulong nb21, + int ne0, + int ne1, + int r2, + int r3, + local char * shmem +) { + src0 = (global char *)((global char *)src0 + offset0); + src1 = (global char *)((global char *)src1 + offset1); + src2 = (global char *)((global char *)src2 + offset2); + dst = (global char *)((global char *)dst + offsetd); + + const int iid1 = get_group_id(2)/ne20; + const int idx = get_group_id(2)%ne20; + + int i02 = ((global int *) (src2 + iid1*nb21))[idx]; + + int i11 = idx % ne11; + int i12 = iid1; + + int i1 = idx; + int i2 = i12; + + global char * src0_cur = src0 + i02*nb02; + global char * src1_cur = src1 + i11*nb11 + i12*nb12; + + global char * dst_cur = dst + (i1*ne0 + i2*ne1*ne0)*sizeof(float); + + mul_mv_mxfp4_f32(src0_cur, src1_cur, dst_cur, + ne00, nb01, nb02, nb03, ne12, nb11, nb12, nb13, ne0, ne1, r2, r3, shmem); +} diff --git a/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32.cl b/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32.cl new file mode 100644 index 0000000000..9a4d4b9bad --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/mul_mv_mxfp4_f32.cl @@ -0,0 +1,144 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#ifdef cl_intel_subgroups +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#else +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif + +#ifdef cl_intel_required_subgroup_size +#pragma OPENCL EXTENSION cl_intel_required_subgroup_size : enable +#define INTEL_GPU 1 +#define REQD_SUBGROUP_SIZE_16 __attribute__((intel_reqd_sub_group_size(16))) +#define REQD_SUBGROUP_SIZE_32 __attribute__((intel_reqd_sub_group_size(32))) +#elif defined(cl_qcom_reqd_sub_group_size) +#pragma OPENCL EXTENSION cl_qcom_reqd_sub_group_size : enable +#define ADRENO_GPU 1 +#define REQD_SUBGROUP_SIZE_64 __attribute__((qcom_reqd_sub_group_size("half"))) +#define REQD_SUBGROUP_SIZE_128 __attribute__((qcom_reqd_sub_group_size("full"))) +#endif + +#define QK_MXFP4 32 +typedef struct { + uchar e; // E8M0 + uchar qs[QK_MXFP4/2]; +} block_mxfp4; + +constant static float kvalues_mxfp4_f[16] = { + 0, .5f, 1.f, 1.5f, 2.f, 3.f, 4.f, 6.f, -0, -.5f, -1.f, -1.5f, -2.f, -3.f, -4.f, -6.f +}; + +static inline float e8m0_to_fp32(uchar x) { + int bits; + + if (x == 0) { + bits = 0x00400000; + } else { + bits = (uint) x << 23; + } + + return as_float(bits); +} + +#ifdef INTEL_GPU +#define N_R0_MXFP4 2 // number of rows each subgroup works on +#define N_SG_MXFP4 2 // number of subgroups in a work group +#define N_SIMDWIDTH 16 // subgroup size +#elif defined (ADRENO_GPU) +#define N_R0_MXFP4 2 +#define N_SG_MXFP4 2 +#define N_SIMDWIDTH 64 +#endif + +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_16 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_mul_mv_mxfp4_f32( + global char * src0, + ulong offset0, + global char * src1, + ulong offset1, + global char * dst, + ulong offsetd, + int ne00, + ulong nb01, + ulong nb02, + ulong nb03, + int ne12, + ulong nb11, + ulong nb12, + ulong nb13, + int ne0, + int ne1, + int r2, + int r3, + local char * shmem +) { + src0 = (global char*)((global char*)src0 + offset0); + src1 = (global char*)((global char*)src1 + offset1); + dst = (global char*)((global char*)dst + offsetd); + + local float * shmem_f32 = (local float *) shmem; + int nb = ne00/QK_MXFP4; + + int r0 = get_group_id(0); + int r1 = get_group_id(1); + int im = get_group_id(2); + + int first_row = (r0 * N_SG_MXFP4 + get_sub_group_id()) * N_R0_MXFP4; + + uint i12 = im%ne12; + uint i13 = im/ne12; + + ulong offset_src0 = first_row*nb01 + (i12/r2)*nb02 + (i13/r3)*nb03; + ulong offset_src1 = r1*nb11 + (i12 )*nb12 + (i13 )*nb13; + + global block_mxfp4 * x = (global block_mxfp4 *) (src0 + offset_src0); + global float * y = (global float *) (src1 + offset_src1); + + const short ix = get_sub_group_local_id()/2; // 0...15 + const short it = get_sub_group_local_id()%2; // 0 or 1 + + shmem_f32[get_sub_group_local_id()] = kvalues_mxfp4_f[get_sub_group_local_id()%16]; + barrier(CLK_LOCAL_MEM_FENCE); + + float4 yl[4]; + float sumf[N_R0_MXFP4] = {0.f}; + + global float * yb = y + ix * QK_MXFP4 + it * 8; + + for (int ib = ix; ib < nb; ib += N_SIMDWIDTH/2) { + global float4 * y4 = (global float4 *)yb; + yl[0] = y4[0]; + yl[1] = y4[4]; + yl[2] = y4[1]; + yl[3] = y4[5]; + + for (short row = 0; row < N_R0_MXFP4; row++) { + global block_mxfp4 * xb = x + row*nb + ib; + global uchar * q2 = (global uchar *)(xb->qs + 8*it); + + float4 acc1 = yl[0]*(float4)(shmem_f32[q2[0] & 0x0F], shmem_f32[q2[1] & 0x0F], shmem_f32[q2[2] & 0x0F], shmem_f32[q2[3] & 0x0F]); + float4 acc2 = yl[1]*(float4)(shmem_f32[q2[0] >> 4 ], shmem_f32[q2[1] >> 4 ], shmem_f32[q2[2] >> 4 ], shmem_f32[q2[3] >> 4 ]); + float4 acc3 = yl[2]*(float4)(shmem_f32[q2[4] & 0x0F], shmem_f32[q2[5] & 0x0F], shmem_f32[q2[6] & 0x0F], shmem_f32[q2[7] & 0x0F]); + float4 acc4 = yl[3]*(float4)(shmem_f32[q2[4] >> 4 ], shmem_f32[q2[5] >> 4 ], shmem_f32[q2[6] >> 4 ], shmem_f32[q2[7] >> 4 ]); + + acc1 = (acc1 + acc3) + (acc2 + acc4); + + sumf[row] += e8m0_to_fp32(xb->e) * ((acc1.s0 + acc1.s1) + (acc1.s2 + acc1.s3)); + } + + yb += (N_SIMDWIDTH/2) * QK_MXFP4; + } + + global float * dst_f32 = (global float *) dst + (ulong)im*ne0*ne1 + (ulong)r1*ne0; + + for (int row = 0; row < N_R0_MXFP4 && first_row + row < ne0; ++row) { + float sum_all = sub_group_reduce_add(sumf[row]); + if (get_sub_group_local_id() == 0) { + dst_f32[first_row + row] = sum_all; + } + } +} diff --git a/ggml/src/ggml-opencl/kernels/transpose.cl b/ggml/src/ggml-opencl/kernels/transpose.cl index a11490b304..536dd560a9 100644 --- a/ggml/src/ggml-opencl/kernels/transpose.cl +++ b/ggml/src/ggml-opencl/kernels/transpose.cl @@ -24,6 +24,26 @@ kernel void kernel_transpose_16( write_imageh(output, (i_2+3)*rows+j, (half4)(temp0.s3, temp1.s3, temp2.s3, temp3.s3)); } +// Padded kernel for irregular shape +kernel void kernel_transpose_16_4x1( + __read_only image1d_buffer_t input, + __write_only image1d_buffer_t output, + const uint rows, + const uint cols +) { + + const int i = get_global_id(0); + const int j = get_global_id(1); + const int j_2 = j << 2; + + half temp0 = read_imageh(input, (j_2 + 0) * cols + i).x; + half temp1 = read_imageh(input, (j_2 + 1) * cols + i).x; + half temp2 = read_imageh(input, (j_2 + 2) * cols + i).x; + half temp3 = read_imageh(input, (j_2 + 3) * cols + i).x; + + write_imageh(output, i * rows + j, (half4)(temp0, temp1, temp2, temp3)); +} + // 32-bit transpose, loading/storing a 4x4 tile of elements kernel void kernel_transpose_32( __read_only image1d_buffer_t input, From 5e6229a8409ac786e62cb133d09f1679a9aec13e Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Fri, 15 Aug 2025 19:50:52 +0200 Subject: [PATCH 009/174] common : fix double bos, use common_chat_templates for add_bos and add_eos (#15326) This commit updates common_chat_templates_apply_jinja to use the the add_bos and add_eos parameters from the chat template instead of the inputs. The motivation for this is that currently if the `add_bos` and `add_eos` from the input parameters are used it is possible to there will be a missmatch between the model and the chat template which can lead to the the removal of duplicate BOS/EOS tokens in chat.cpp `apply` to not happen leading to two BOS tokens being added to the template. --- common/chat.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/chat.cpp b/common/chat.cpp index 00f30994b5..23d3828f9c 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -2061,8 +2061,8 @@ static common_chat_params common_chat_templates_apply_jinja( params.enable_thinking = inputs.enable_thinking; params.grammar = inputs.grammar; params.now = inputs.now; - params.add_bos = inputs.add_bos; - params.add_eos = inputs.add_eos; + params.add_bos = tmpls->add_bos; + params.add_eos = tmpls->add_eos; params.extra_context = json::object(); for (auto el : inputs.chat_template_kwargs) { From 912ff8c119f01ae029543c7fdf7a84f91a0437a3 Mon Sep 17 00:00:00 2001 From: rmatif Date: Sat, 16 Aug 2025 10:05:55 +0200 Subject: [PATCH 010/174] OpenCL: add initial FA support (#14987) * add F16/F16 fa support * fix kernel init * use mad instead of fma * use inline function * mark FA with sinks as unsupported for now * add pragma unroll to loops --- ggml/src/ggml-opencl/CMakeLists.txt | 3 + ggml/src/ggml-opencl/ggml-opencl.cpp | 248 +++++++++++++ .../src/ggml-opencl/kernels/flash_attn_f16.cl | 343 +++++++++++++++++ .../src/ggml-opencl/kernels/flash_attn_f32.cl | 343 +++++++++++++++++ .../ggml-opencl/kernels/flash_attn_f32_f16.cl | 346 ++++++++++++++++++ 5 files changed, 1283 insertions(+) create mode 100644 ggml/src/ggml-opencl/kernels/flash_attn_f16.cl create mode 100644 ggml/src/ggml-opencl/kernels/flash_attn_f32.cl create mode 100644 ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl diff --git a/ggml/src/ggml-opencl/CMakeLists.txt b/ggml/src/ggml-opencl/CMakeLists.txt index 015821f34f..9a7ccbcff0 100644 --- a/ggml/src/ggml-opencl/CMakeLists.txt +++ b/ggml/src/ggml-opencl/CMakeLists.txt @@ -112,6 +112,9 @@ set(GGML_OPENCL_KERNELS mul_mat_f16_f32 conv2d conv2d_f16_f32 + flash_attn_f32_f16 + flash_attn_f16 + flash_attn_f32 ) foreach (K ${GGML_OPENCL_KERNELS}) diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index b8cbf6cf0d..8a2ac7e377 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -424,6 +425,14 @@ struct ggml_backend_opencl_context { cl_kernel kernel_diag_mask_inf, kernel_diag_mask_inf_8; cl_kernel kernel_soft_max, kernel_soft_max_4; cl_kernel kernel_soft_max_f16, kernel_soft_max_4_f16; + std::map, cl_kernel> kernels_flash_attn_f16; + std::map, cl_kernel> kernels_flash_attn_f16_q1; + std::map, cl_kernel> kernels_flash_attn_f32; + std::map, cl_kernel> kernels_flash_attn_f32_q1; + std::map, cl_kernel> kernels_flash_attn_f32_f16; + std::map, cl_kernel> kernels_flash_attn_f32_f16_q1; + std::map, int> kernels_flash_attn_bm; + std::map, int> kernels_flash_attn_bn; cl_kernel kernel_get_rows_f32, kernel_get_rows_f16, kernel_get_rows_q4_0; cl_kernel kernel_set_rows_f32, kernel_set_rows_f16; cl_kernel kernel_rope_norm_f32, kernel_rope_norm_f16, kernel_rope_neox_f32, kernel_rope_neox_f16; @@ -1308,6 +1317,73 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } + // flash_attn + { + #ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src_f16 { + #include "flash_attn_f16.cl.h" + }; + const std::string kernel_src_f32 { + #include "flash_attn_f32.cl.h" + }; + const std::string kernel_src_f32_f16 { + #include "flash_attn_f32_f16.cl.h" + }; + #else + const std::string kernel_src_f16 = read_file("flash_attn_f16.cl"); + const std::string kernel_src_f32 = read_file("flash_attn_f32.cl"); + const std::string kernel_src_f32_f16 = read_file("flash_attn_f32_f16.cl"); + #endif + + if (!kernel_src_f16.empty() && !kernel_src_f32.empty() && !kernel_src_f32_f16.empty()) { + const struct { int dk; int dv; int bm; int bn; } fa_dims[] = { + { 64, 64, 64, 64}, { 80, 80, 64, 32}, { 96, 96, 64, 32}, + {112, 112, 32, 32}, {128, 128, 32, 32}, {192, 128, 16, 16}, + {192, 192, 16, 16}, {256, 256, 16, 16}, + }; + + for (size_t i = 0; i < sizeof(fa_dims)/sizeof(fa_dims[0]); ++i) { + const int dk = fa_dims[i].dk; + const int dv = fa_dims[i].dv; + const int bm = fa_dims[i].bm; + const int bn = fa_dims[i].bn; + std::string OPTS = compile_opts + + " -D DK=" + std::to_string(dk) + + " -D DV=" + std::to_string(dv) + + " -D BLOCK_M=" + std::to_string(bm) + + " -D BLOCK_N=" + std::to_string(bn); + + cl_program prog_f16 = build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src_f16.c_str(), OPTS); + cl_kernel k_f16, k_f16_q1; + CL_CHECK((k_f16 = clCreateKernel(prog_f16, "flash_attn_f16", &err), err)); + CL_CHECK((k_f16_q1 = clCreateKernel(prog_f16, "flash_attn_f16_q1", &err), err)); + backend_ctx->kernels_flash_attn_f16[{dk, dv}] = k_f16; + backend_ctx->kernels_flash_attn_f16_q1[{dk, dv}] = k_f16_q1; + CL_CHECK(clReleaseProgram(prog_f16)); + + cl_program prog_f32 = build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src_f32.c_str(), OPTS); + cl_kernel k_f32, k_f32_q1; + CL_CHECK((k_f32 = clCreateKernel(prog_f32, "flash_attn_f32", &err), err)); + CL_CHECK((k_f32_q1 = clCreateKernel(prog_f32, "flash_attn_f32_q1", &err), err)); + backend_ctx->kernels_flash_attn_f32[{dk, dv}] = k_f32; + backend_ctx->kernels_flash_attn_f32_q1[{dk, dv}] = k_f32_q1; + CL_CHECK(clReleaseProgram(prog_f32)); + + cl_program prog_f32_f16 = build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src_f32_f16.c_str(), OPTS); + cl_kernel k_f32_f16, k_f32_f16_q1; + CL_CHECK((k_f32_f16 = clCreateKernel(prog_f32_f16, "flash_attn_f32_f16", &err), err)); + CL_CHECK((k_f32_f16_q1 = clCreateKernel(prog_f32_f16, "flash_attn_f32_f16_q1", &err), err)); + backend_ctx->kernels_flash_attn_f32_f16[{dk, dv}] = k_f32_f16; + backend_ctx->kernels_flash_attn_f32_f16_q1[{dk, dv}] = k_f32_f16_q1; + CL_CHECK(clReleaseProgram(prog_f32_f16)); + + backend_ctx->kernels_flash_attn_bm[{dk, dv}] = bm; + backend_ctx->kernels_flash_attn_bn[{dk, dv}] = bn; + } + GGML_LOG_CONT("."); + } + } + // argsort { #ifdef GGML_OPENCL_EMBED_KERNELS @@ -2636,6 +2712,45 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te return op->src[0]->type == GGML_TYPE_F32; case GGML_OP_SUM_ROWS: return op->src[0]->type == GGML_TYPE_F32 && ggml_is_contiguous(op->src[0]); + case GGML_OP_FLASH_ATTN_EXT: + { + if (op->src[4]) { + return false; + } + + const ggml_tensor * q = op->src[0]; + const ggml_tensor * k = op->src[1]; + const ggml_tensor * v = op->src[2]; + + const int dk = q->ne[0]; + const int dv = v->ne[0]; + + const struct { int dk; int dv; } supported_dims[] = { + { 64, 64}, { 80, 80}, { 96, 96}, + {112, 112}, {128, 128}, {192, 128}, + {192, 192}, {256, 256}, + }; + + bool dims_supported = false; + for (size_t i = 0; i < sizeof(supported_dims)/sizeof(supported_dims[0]); ++i) { + if (supported_dims[i].dk == dk && supported_dims[i].dv == dv) { + dims_supported = true; + break; + } + } + if (!dims_supported) { + return false; + } + + const bool is_f32_f32 = q->type == GGML_TYPE_F32 && k->type == GGML_TYPE_F32 && + v->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32; + const bool is_f16_f16 = q->type == GGML_TYPE_F16 && k->type == GGML_TYPE_F16 && + v->type == GGML_TYPE_F16 && op->type == GGML_TYPE_F16; + const bool is_f32_f16 = q->type == GGML_TYPE_F32 && k->type == GGML_TYPE_F16 && + v->type == GGML_TYPE_F16 && op->type == GGML_TYPE_F32; + + return is_f32_f32 || is_f16_f16 || is_f32_f16; + } default: return false; } @@ -5451,6 +5566,133 @@ static void ggml_cl_timestep_embedding(ggml_backend_t backend, const ggml_tensor backend_ctx->enqueue_ndrange_kernel(kernel, 3, global_work_size, NULL, dst); } +static void ggml_cl_flash_attn(ggml_backend_t backend, const ggml_tensor * q, const ggml_tensor * k, ggml_tensor * dst) { + const ggml_tensor * v = dst->src[2]; + const ggml_tensor * mask = dst->src[3]; + GGML_ASSERT(q->extra); + GGML_ASSERT(k->extra); + GGML_ASSERT(v->extra); + GGML_ASSERT(dst->extra); + if (mask) { + GGML_ASSERT(mask->extra); + } + + ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; + + const int n_q = q->ne[1]; + const int n_kv = k->ne[1]; + const int d_head_q = q->ne[0]; + const int d_head_v = v->ne[0]; + const int n_head = q->ne[2]; + const int n_head_kv = k->ne[2]; + const int n_batch = q->ne[3]; + + cl_kernel kernel = NULL; + + const bool is_f16 = q->type == GGML_TYPE_F16; + const bool is_mixed = q->type == GGML_TYPE_F32 && k->type == GGML_TYPE_F16; + const std::pair dk_dv = {d_head_q, d_head_v}; + + if (n_q == 1) { + if (is_mixed) { + kernel = backend_ctx->kernels_flash_attn_f32_f16_q1.at(dk_dv); + } else if (is_f16) { + kernel = backend_ctx->kernels_flash_attn_f16_q1.at(dk_dv); + } else { + kernel = backend_ctx->kernels_flash_attn_f32_q1.at(dk_dv); + } + } else { + if (is_mixed) { + kernel = backend_ctx->kernels_flash_attn_f32_f16.at(dk_dv); + } else if (is_f16) { + kernel = backend_ctx->kernels_flash_attn_f16.at(dk_dv); + } else { + kernel = backend_ctx->kernels_flash_attn_f32.at(dk_dv); + } + } + GGML_ASSERT(kernel != NULL); + + ggml_tensor_extra_cl * extra_q = (ggml_tensor_extra_cl *)q->extra; + ggml_tensor_extra_cl * extra_k = (ggml_tensor_extra_cl *)k->extra; + ggml_tensor_extra_cl * extra_v = (ggml_tensor_extra_cl *)v->extra; + ggml_tensor_extra_cl * extra_o = (ggml_tensor_extra_cl *)dst->extra; + ggml_tensor_extra_cl * extra_mask = mask ? (ggml_tensor_extra_cl *)mask->extra : NULL; + + cl_ulong offset_q = extra_q->offset + q->view_offs; + cl_ulong offset_k = extra_k->offset + k->view_offs; + cl_ulong offset_v = extra_v->offset + v->view_offs; + cl_ulong offset_o = extra_o->offset + dst->view_offs; + cl_mem mask_buffer = extra_mask ? extra_mask->data_device : NULL; + cl_ulong offset_mask = extra_mask ? extra_mask->offset + mask->view_offs : 0; + + const cl_ulong q_nb1 = q->nb[1], q_nb2 = q->nb[2], q_nb3 = q->nb[3]; + const cl_ulong k_nb1 = k->nb[1], k_nb2 = k->nb[2], k_nb3 = k->nb[3]; + const cl_ulong v_nb1 = v->nb[1], v_nb2 = v->nb[2], v_nb3 = v->nb[3]; + const cl_ulong o_nb1 = dst->nb[1], o_nb2 = dst->nb[2], o_nb3 = dst->nb[3]; + const cl_ulong mask_nb1 = mask ? mask->nb[1] : 0; + const cl_ulong mask_nb2 = mask ? mask->nb[2] : 0; + const cl_ulong mask_nb3 = mask ? mask->nb[3] : 0; + const int mask_ne2 = mask ? mask->ne[2] : 0; + const int mask_ne3 = mask ? mask->ne[3] : 0; + + float scale, max_bias, logit_softcap; + const float * params = (const float *)dst->op_params; + scale = params[0]; + max_bias = params[1]; + logit_softcap = params[2]; + + const int is_causal = (mask == NULL && n_q > 1 && n_q == n_kv); + + const int n_head_log2_val = n_head > 0 ? 1u << (int)floorf(log2f((float)n_head)) : 0; + const float n_head_log2_f = n_head_log2_val > 0 ? (float)n_head_log2_val : 1.0f; + const float m0 = powf(2.0f, -(max_bias) / n_head_log2_f); + const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2_f); + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra_q->data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset_q)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra_k->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset_k)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extra_v->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offset_v)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(cl_mem), &extra_o->data_device)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_ulong), &offset_o)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(float), &scale)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(int), &n_q)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &n_kv)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(int), &is_causal)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(int), &n_head)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(cl_ulong), &q_nb1)); CL_CHECK(clSetKernelArg(kernel, 14, sizeof(cl_ulong), &q_nb2)); CL_CHECK(clSetKernelArg(kernel, 15, sizeof(cl_ulong), &q_nb3)); + CL_CHECK(clSetKernelArg(kernel, 16, sizeof(cl_ulong), &k_nb1)); CL_CHECK(clSetKernelArg(kernel, 17, sizeof(cl_ulong), &k_nb2)); CL_CHECK(clSetKernelArg(kernel, 18, sizeof(cl_ulong), &k_nb3)); + CL_CHECK(clSetKernelArg(kernel, 19, sizeof(cl_ulong), &v_nb1)); CL_CHECK(clSetKernelArg(kernel, 20, sizeof(cl_ulong), &v_nb2)); CL_CHECK(clSetKernelArg(kernel, 21, sizeof(cl_ulong), &v_nb3)); + CL_CHECK(clSetKernelArg(kernel, 22, sizeof(cl_ulong), &o_nb1)); CL_CHECK(clSetKernelArg(kernel, 23, sizeof(cl_ulong), &o_nb2)); CL_CHECK(clSetKernelArg(kernel, 24, sizeof(cl_ulong), &o_nb3)); + CL_CHECK(clSetKernelArg(kernel, 25, sizeof(float), &max_bias)); + CL_CHECK(clSetKernelArg(kernel, 26, sizeof(float), &m0)); + CL_CHECK(clSetKernelArg(kernel, 27, sizeof(float), &m1)); + CL_CHECK(clSetKernelArg(kernel, 28, sizeof(int), &n_head_log2_val)); + CL_CHECK(clSetKernelArg(kernel, 29, sizeof(float), &logit_softcap)); + CL_CHECK(clSetKernelArg(kernel, 30, sizeof(int), &n_head_kv)); + CL_CHECK(clSetKernelArg(kernel, 31, sizeof(cl_mem), &mask_buffer)); + CL_CHECK(clSetKernelArg(kernel, 32, sizeof(cl_ulong), &offset_mask)); + CL_CHECK(clSetKernelArg(kernel, 33, sizeof(cl_ulong), &mask_nb1)); + CL_CHECK(clSetKernelArg(kernel, 34, sizeof(cl_ulong), &mask_nb2)); + CL_CHECK(clSetKernelArg(kernel, 35, sizeof(cl_ulong), &mask_nb3)); + CL_CHECK(clSetKernelArg(kernel, 36, sizeof(int), &mask_ne2)); + CL_CHECK(clSetKernelArg(kernel, 37, sizeof(int), &mask_ne3)); + + if (n_q == 1) { + const size_t wg_size = 64; + size_t local_work_size[] = { wg_size, 1 }; + size_t global_work_size[] = { wg_size, (size_t)(n_head * n_batch) }; + backend_ctx->enqueue_ndrange_kernel(kernel, 2, global_work_size, local_work_size, dst); + } else { + const int block_m = backend_ctx->kernels_flash_attn_bm.at(dk_dv); + const size_t wg_size = block_m; + size_t local_work_size[] = { wg_size, 1 }; + size_t global_work_size[] = { (size_t)((n_q + block_m - 1) / block_m) * wg_size, (size_t)(n_head * n_batch) }; + backend_ctx->enqueue_ndrange_kernel(kernel, 2, global_work_size, local_work_size, dst); + } +} + static void ggml_cl_mul_mat_f16_f32_tiled(ggml_backend_t backend, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; @@ -7607,6 +7849,12 @@ bool ggml_cl_compute_forward(ggml_backend_t backend, struct ggml_tensor * tensor } func = ggml_cl_sum_rows; break; + case GGML_OP_FLASH_ATTN_EXT: + if (!any_on_device) { + return false; + } + ggml_cl_flash_attn(backend, tensor->src[0], tensor->src[1], tensor); + return true; default: return false; } diff --git a/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl b/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl new file mode 100644 index 0000000000..fea06867e1 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/flash_attn_f16.cl @@ -0,0 +1,343 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#define ACC_TYPE float +#define ACC_TYPE4 float4 +#define DATA_TYPE half +#define DATA_TYPE4 half4 +#define CONVERT_ACC4(x) convert_float4(x) +#define CONVERT_DATA4(x) convert_half4(x) + +#define DK_VEC (DK/4) +#define DV_VEC (DV/4) +#define WG_SIZE (BLOCK_M) +#define Q1_WG_SIZE 64 + +inline float get_alibi_slope( + const float max_bias, const uint h, const uint n_head_log2, const float m0, const float m1 +) { + if (max_bias <= 0.0f) { + return 1.0f; + } + const float base = h < n_head_log2 ? m0 : m1; + const int exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; + + return pow(base, exph); +} +__kernel void flash_attn_f16( + const global void * q_void, ulong q_offset, + const global void * k_void, ulong k_offset, + const global void * v_void, ulong v_offset, + global void * o_void, ulong o_offset, + const float scale, + const int n_q, + const int n_kv, + const int is_causal, + const int n_head, + const ulong q_nb1, const ulong q_nb2, const ulong q_nb3, + const ulong k_nb1, const ulong k_nb2, const ulong k_nb3, + const ulong v_nb1, const ulong v_nb2, const ulong v_nb3, + const ulong o_nb1, const ulong o_nb2, const ulong o_nb3, + const float max_bias, + const float m0, + const float m1, + const int n_head_log2, + const float logit_softcap, + const int n_head_kv, + const global void* mask_void, + const ulong mask_offset, + const ulong mask_nb1, + const ulong mask_nb2, + const ulong mask_nb3, + const int mask_ne2, + const int mask_ne3 +) { + const int tid = get_local_id(0); + const int block_q_idx = get_group_id(0); + const int head_batch_idx = get_global_id(1); + + const int my_query_row = block_q_idx * BLOCK_M + tid; + + const int batch_idx = head_batch_idx / n_head; + const int head_idx = head_batch_idx % n_head; + + const int gqa_ratio = n_head / n_head_kv; + const int head_kv_idx = head_idx / gqa_ratio; + + const global char* q_base = (const global char*)q_void + q_offset; + const global char* k_base = (const global char*)k_void + k_offset; + const global char* v_base = (const global char*)v_void + v_offset; + global char* o_base = (global char*)o_void + o_offset; + + const global char* mask_base = NULL; + if (mask_void != NULL) { + const int mask_head_idx = head_idx % mask_ne2; + const int mask_batch_idx = batch_idx % mask_ne3; + mask_base = (const global char*)mask_void + mask_offset + mask_batch_idx * mask_nb3 + mask_head_idx * mask_nb2; + } + + ACC_TYPE4 q_priv[DK_VEC]; + if (my_query_row < n_q) { + const ulong q_row_offset = batch_idx * q_nb3 + head_idx * q_nb2 + my_query_row * q_nb1; + const global DATA_TYPE4* q_ptr = (const global DATA_TYPE4*)(q_base + q_row_offset); + #pragma unroll + for (int i = 0; i < DK_VEC; ++i) { + q_priv[i] = CONVERT_ACC4(q_ptr[i]); + } + } + + ACC_TYPE4 o_acc[DV_VEC]; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_acc[i] = (ACC_TYPE4)(0.0f); + } + ACC_TYPE m_i = -INFINITY; + ACC_TYPE l_i = 0.0f; + + float slope = get_alibi_slope(max_bias, head_idx, n_head_log2, m0, m1); + + __local DATA_TYPE4 l_k[BLOCK_N][DK_VEC]; + __local DATA_TYPE4 l_v[BLOCK_N][DV_VEC]; + + for (int k_start = 0; k_start < n_kv; k_start += BLOCK_N) { + for (int i = tid; i < BLOCK_N * DK_VEC; i += WG_SIZE) { + const int row = i / DK_VEC; + const int col = i % DK_VEC; + const int k_row_idx = k_start + row; + if (k_row_idx < n_kv) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_row_idx * k_nb1; + l_k[row][col] = ((__global DATA_TYPE4*)(k_base + k_row_offset))[col]; + } + } + for (int i = tid; i < BLOCK_N * DV_VEC; i += WG_SIZE) { + const int row = i / DV_VEC; + const int col = i % DV_VEC; + const int v_row_idx = k_start + row; + if (v_row_idx < n_kv) { + const ulong v_row_offset = batch_idx * v_nb3 + head_kv_idx * v_nb2 + v_row_idx * v_nb1; + l_v[row][col] = ((__global DATA_TYPE4*)(v_base + v_row_offset))[col]; + } + } + barrier(CLK_LOCAL_MEM_FENCE); + + if (my_query_row >= n_q) { + continue; + } + + for (int j = 0; j < BLOCK_N; j += 2) { + const int k_row0 = k_start + j; + const int k_row1 = k_start + j + 1; + + ACC_TYPE4 dot_acc0 = (ACC_TYPE4)(0.0f); + ACC_TYPE4 dot_acc1 = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc0 = mad(q_priv[k], CONVERT_ACC4(l_k[j][k]), dot_acc0); + dot_acc1 = mad(q_priv[k], CONVERT_ACC4(l_k[j+1][k]), dot_acc1); + } + ACC_TYPE score0 = (dot_acc0.s0 + dot_acc0.s1 + dot_acc0.s2 + dot_acc0.s3) * scale; + ACC_TYPE score1 = (dot_acc1.s0 + dot_acc1.s1 + dot_acc1.s2 + dot_acc1.s3) * scale; + + if (is_causal) { + if (k_row0 > (n_kv - n_q + my_query_row)) score0 = -INFINITY; + if (k_row1 > (n_kv - n_q + my_query_row)) score1 = -INFINITY; + } + + if (k_row0 >= n_kv) score0 = -INFINITY; + if (k_row1 >= n_kv) score1 = -INFINITY; + + if (mask_base != NULL) { + const global DATA_TYPE* mask_ptr = (const global DATA_TYPE*)(mask_base + my_query_row * mask_nb1); + if (k_row0 < n_kv) score0 += slope * (ACC_TYPE)mask_ptr[k_row0]; + if (k_row1 < n_kv) score1 += slope * (ACC_TYPE)mask_ptr[k_row1]; + } + + if (logit_softcap > 0.0f) { + score0 = logit_softcap * tanh(score0 / logit_softcap); + score1 = logit_softcap * tanh(score1 / logit_softcap); + } + + const ACC_TYPE m_new = max(m_i, max(score0, score1)); + const ACC_TYPE p0 = exp(score0 - m_new); + const ACC_TYPE p1 = exp(score1 - m_new); + const ACC_TYPE scale_prev = exp(m_i - m_new); + + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_acc[i] = o_acc[i] * scale_prev + p0 * CONVERT_ACC4(l_v[j][i]) + p1 * CONVERT_ACC4(l_v[j+1][i]); + } + l_i = l_i * scale_prev + p0 + p1; + m_i = m_new; + } + } + + if (my_query_row < n_q) { + const ulong o_row_offset = batch_idx * o_nb3 + my_query_row * o_nb2 + head_idx * o_nb1; + global DATA_TYPE4 *o_row = (global DATA_TYPE4 *)(o_base + o_row_offset); + if (l_i > 0.0f) { + const ACC_TYPE l_inv = 1.0f / l_i; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_row[i] = CONVERT_DATA4(o_acc[i] * l_inv); + } + } else { + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_row[i] = (DATA_TYPE4)(0.0f); + } + } + } +} + +__kernel void flash_attn_f16_q1( + const global void * q_void, ulong q_offset, + const global void * k_void, ulong k_offset, + const global void * v_void, ulong v_offset, + global void * o_void, ulong o_offset, + const float scale, + const int n_q, + const int n_kv, + const int is_causal, + const int n_head, + const ulong q_nb1, const ulong q_nb2, const ulong q_nb3, + const ulong k_nb1, const ulong k_nb2, const ulong k_nb3, + const ulong v_nb1, const ulong v_nb2, const ulong v_nb3, + const ulong o_nb1, const ulong o_nb2, const ulong o_nb3, + const float max_bias, + const float m0, + const float m1, + const int n_head_log2, + const float logit_softcap, + const int n_head_kv, + const global void* mask_void, + const ulong mask_offset, + const ulong mask_nb1, + const ulong mask_nb2, + const ulong mask_nb3, + const int mask_ne2, + const int mask_ne3 +) { + const int tid = get_local_id(0); + const int head_batch_idx = get_global_id(1); + + const int batch_idx = head_batch_idx / n_head; + const int head_idx = head_batch_idx % n_head; + + const int gqa_ratio = n_head / n_head_kv; + const int head_kv_idx = head_idx / gqa_ratio; + + const global char* q_base = (const global char*)q_void + q_offset; + const global char* k_base = (const global char*)k_void + k_offset; + const global char* v_base = (const global char*)v_void + v_offset; + global char* o_base = (global char*)o_void + o_offset; + + const global char* mask_base = NULL; + if (mask_void != NULL) { + const int mask_head_idx = head_idx % mask_ne2; + const int mask_batch_idx = batch_idx % mask_ne3; + mask_base = (const global char*)mask_void + mask_offset + mask_batch_idx * mask_nb3 + mask_head_idx * mask_nb2; + } + + ACC_TYPE4 q_priv[DK_VEC]; + const ulong q_row_offset = batch_idx * q_nb3 + head_idx * q_nb2; + const global DATA_TYPE4* q_ptr = (const global DATA_TYPE4*)(q_base + q_row_offset); + #pragma unroll + for (int i = 0; i < DK_VEC; ++i) { + q_priv[i] = CONVERT_ACC4(q_ptr[i]); + } + + float slope = get_alibi_slope(max_bias, head_idx, n_head_log2, m0, m1); + + ACC_TYPE m_i = -INFINITY; + for (int k_idx = tid; k_idx < n_kv; k_idx += Q1_WG_SIZE) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_idx * k_nb1; + const global DATA_TYPE4* k_ptr = (const global DATA_TYPE4*)(k_base + k_row_offset); + ACC_TYPE4 dot_acc = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc = mad(q_priv[k], CONVERT_ACC4(k_ptr[k]), dot_acc); + } + ACC_TYPE score = (dot_acc.s0 + dot_acc.s1 + dot_acc.s2 + dot_acc.s3) * scale; + if (mask_base != NULL) { + const global DATA_TYPE* mask_ptr = (const global DATA_TYPE*)(mask_base); + score += slope * (ACC_TYPE)mask_ptr[k_idx]; + } + if (logit_softcap > 0.0f) { + score = logit_softcap * tanh(score / logit_softcap); + } + m_i = max(m_i, score); + } + + __local ACC_TYPE local_m[Q1_WG_SIZE]; + local_m[tid] = m_i; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_m[tid] = max(local_m[tid], local_m[tid + s]); + barrier(CLK_LOCAL_MEM_FENCE); + } + const ACC_TYPE m_final = local_m[0]; + + ACC_TYPE4 o_acc[DV_VEC]; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) o_acc[i] = (ACC_TYPE4)(0.0f); + ACC_TYPE l_i = 0.0f; + + for (int k_idx = tid; k_idx < n_kv; k_idx += Q1_WG_SIZE) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_idx * k_nb1; + const ulong v_row_offset = batch_idx * v_nb3 + head_kv_idx * v_nb2 + k_idx * v_nb1; + const global DATA_TYPE4* k_ptr = (const global DATA_TYPE4*)(k_base + k_row_offset); + const global DATA_TYPE4* v_ptr = (const global DATA_TYPE4*)(v_base + v_row_offset); + ACC_TYPE4 dot_acc = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc = mad(q_priv[k], CONVERT_ACC4(k_ptr[k]), dot_acc); + } + ACC_TYPE score = (dot_acc.s0 + dot_acc.s1 + dot_acc.s2 + dot_acc.s3) * scale; + if (mask_base != NULL) { + const global DATA_TYPE* mask_ptr = (const global DATA_TYPE*)(mask_base); + score += slope * (ACC_TYPE)mask_ptr[k_idx]; + } + if (logit_softcap > 0.0f) { + score = logit_softcap * tanh(score / logit_softcap); + } + const ACC_TYPE p = exp(score - m_final); + l_i += p; + #pragma unroll + for (int i = 0; i < DV_VEC; i++) { + o_acc[i] = mad(p, CONVERT_ACC4(v_ptr[i]), o_acc[i]); + } + } + + __local ACC_TYPE local_l[Q1_WG_SIZE]; + __local ACC_TYPE4 local_o_comp[Q1_WG_SIZE]; + local_l[tid] = l_i; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_l[tid] += local_l[tid + s]; + barrier(CLK_LOCAL_MEM_FENCE); + } + + const ulong o_row_offset = batch_idx * o_nb3 + head_idx * o_nb1; + global DATA_TYPE4 *o_row = (global DATA_TYPE4 *)(o_base + o_row_offset); + const ACC_TYPE l_final = local_l[0]; + + if (l_final > 0.0f) { + const ACC_TYPE l_inv = 1.0f / l_final; + for (int i = 0; i < DV_VEC; i++) { + local_o_comp[tid] = o_acc[i]; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_o_comp[tid] += local_o_comp[tid + s]; + barrier(CLK_LOCAL_MEM_FENCE); + } + if (tid == 0) { + o_row[i] = CONVERT_DATA4(local_o_comp[0] * l_inv); + } + } + } else if (tid == 0) { + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) o_row[i] = (DATA_TYPE4)(0.0f); + } +} diff --git a/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl b/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl new file mode 100644 index 0000000000..2d657327d6 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/flash_attn_f32.cl @@ -0,0 +1,343 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#define ACC_TYPE float +#define ACC_TYPE4 float4 +#define DATA_TYPE float +#define DATA_TYPE4 float4 +#define CONVERT_ACC4(x) (x) +#define CONVERT_DATA4(x) (x) + +#define DK_VEC (DK/4) +#define DV_VEC (DV/4) +#define WG_SIZE (BLOCK_M) +#define Q1_WG_SIZE 64 + +inline float get_alibi_slope( + const float max_bias, const uint h, const uint n_head_log2, const float m0, const float m1 +) { + if (max_bias <= 0.0f) { + return 1.0f; + } + const float base = h < n_head_log2 ? m0 : m1; + const int exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; + + return pow(base, exph); +} +__kernel void flash_attn_f32( + const global void * q_void, ulong q_offset, + const global void * k_void, ulong k_offset, + const global void * v_void, ulong v_offset, + global void * o_void, ulong o_offset, + const float scale, + const int n_q, + const int n_kv, + const int is_causal, + const int n_head, + const ulong q_nb1, const ulong q_nb2, const ulong q_nb3, + const ulong k_nb1, const ulong k_nb2, const ulong k_nb3, + const ulong v_nb1, const ulong v_nb2, const ulong v_nb3, + const ulong o_nb1, const ulong o_nb2, const ulong o_nb3, + const float max_bias, + const float m0, + const float m1, + const int n_head_log2, + const float logit_softcap, + const int n_head_kv, + const global void* mask_void, + const ulong mask_offset, + const ulong mask_nb1, + const ulong mask_nb2, + const ulong mask_nb3, + const int mask_ne2, + const int mask_ne3 +) { + const int tid = get_local_id(0); + const int block_q_idx = get_group_id(0); + const int head_batch_idx = get_global_id(1); + + const int my_query_row = block_q_idx * BLOCK_M + tid; + + const int batch_idx = head_batch_idx / n_head; + const int head_idx = head_batch_idx % n_head; + + const int gqa_ratio = n_head / n_head_kv; + const int head_kv_idx = head_idx / gqa_ratio; + + const global char* q_base = (const global char*)q_void + q_offset; + const global char* k_base = (const global char*)k_void + k_offset; + const global char* v_base = (const global char*)v_void + v_offset; + global char* o_base = (global char*)o_void + o_offset; + + const global char* mask_base = NULL; + if (mask_void != NULL) { + const int mask_head_idx = head_idx % mask_ne2; + const int mask_batch_idx = batch_idx % mask_ne3; + mask_base = (const global char*)mask_void + mask_offset + mask_batch_idx * mask_nb3 + mask_head_idx * mask_nb2; + } + + ACC_TYPE4 q_priv[DK_VEC]; + if (my_query_row < n_q) { + const ulong q_row_offset = batch_idx * q_nb3 + head_idx * q_nb2 + my_query_row * q_nb1; + const global DATA_TYPE4* q_ptr = (const global DATA_TYPE4*)(q_base + q_row_offset); + #pragma unroll + for (int i = 0; i < DK_VEC; ++i) { + q_priv[i] = CONVERT_ACC4(q_ptr[i]); + } + } + + ACC_TYPE4 o_acc[DV_VEC]; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_acc[i] = (ACC_TYPE4)(0.0f); + } + ACC_TYPE m_i = -INFINITY; + ACC_TYPE l_i = 0.0f; + + float slope = get_alibi_slope(max_bias, head_idx, n_head_log2, m0, m1); + + __local DATA_TYPE4 l_k[BLOCK_N][DK_VEC]; + __local DATA_TYPE4 l_v[BLOCK_N][DV_VEC]; + + for (int k_start = 0; k_start < n_kv; k_start += BLOCK_N) { + for (int i = tid; i < BLOCK_N * DK_VEC; i += WG_SIZE) { + const int row = i / DK_VEC; + const int col = i % DK_VEC; + const int k_row_idx = k_start + row; + if (k_row_idx < n_kv) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_row_idx * k_nb1; + l_k[row][col] = ((__global DATA_TYPE4*)(k_base + k_row_offset))[col]; + } + } + for (int i = tid; i < BLOCK_N * DV_VEC; i += WG_SIZE) { + const int row = i / DV_VEC; + const int col = i % DV_VEC; + const int v_row_idx = k_start + row; + if (v_row_idx < n_kv) { + const ulong v_row_offset = batch_idx * v_nb3 + head_kv_idx * v_nb2 + v_row_idx * v_nb1; + l_v[row][col] = ((__global DATA_TYPE4*)(v_base + v_row_offset))[col]; + } + } + barrier(CLK_LOCAL_MEM_FENCE); + + if (my_query_row >= n_q) { + continue; + } + + for (int j = 0; j < BLOCK_N; j += 2) { + const int k_row0 = k_start + j; + const int k_row1 = k_start + j + 1; + + ACC_TYPE4 dot_acc0 = (ACC_TYPE4)(0.0f); + ACC_TYPE4 dot_acc1 = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc0 = mad(q_priv[k], CONVERT_ACC4(l_k[j][k]), dot_acc0); + dot_acc1 = mad(q_priv[k], CONVERT_ACC4(l_k[j+1][k]), dot_acc1); + } + ACC_TYPE score0 = (dot_acc0.s0 + dot_acc0.s1 + dot_acc0.s2 + dot_acc0.s3) * scale; + ACC_TYPE score1 = (dot_acc1.s0 + dot_acc1.s1 + dot_acc1.s2 + dot_acc1.s3) * scale; + + if (is_causal) { + if (k_row0 > (n_kv - n_q + my_query_row)) score0 = -INFINITY; + if (k_row1 > (n_kv - n_q + my_query_row)) score1 = -INFINITY; + } + + if (k_row0 >= n_kv) score0 = -INFINITY; + if (k_row1 >= n_kv) score1 = -INFINITY; + + if (mask_base != NULL) { + const global DATA_TYPE* mask_ptr = (const global DATA_TYPE*)(mask_base + my_query_row * mask_nb1); + if (k_row0 < n_kv) score0 += slope * (ACC_TYPE)mask_ptr[k_row0]; + if (k_row1 < n_kv) score1 += slope * (ACC_TYPE)mask_ptr[k_row1]; + } + + if (logit_softcap > 0.0f) { + score0 = logit_softcap * tanh(score0 / logit_softcap); + score1 = logit_softcap * tanh(score1 / logit_softcap); + } + + const ACC_TYPE m_new = max(m_i, max(score0, score1)); + const ACC_TYPE p0 = exp(score0 - m_new); + const ACC_TYPE p1 = exp(score1 - m_new); + const ACC_TYPE scale_prev = exp(m_i - m_new); + + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_acc[i] = o_acc[i] * scale_prev + p0 * CONVERT_ACC4(l_v[j][i]) + p1 * CONVERT_ACC4(l_v[j+1][i]); + } + l_i = l_i * scale_prev + p0 + p1; + m_i = m_new; + } + } + + if (my_query_row < n_q) { + const ulong o_row_offset = batch_idx * o_nb3 + my_query_row * o_nb2 + head_idx * o_nb1; + global DATA_TYPE4 *o_row = (global DATA_TYPE4 *)(o_base + o_row_offset); + if (l_i > 0.0f) { + const ACC_TYPE l_inv = 1.0f / l_i; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_row[i] = CONVERT_DATA4(o_acc[i] * l_inv); + } + } else { + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_row[i] = (DATA_TYPE4)(0.0f); + } + } + } +} + +__kernel void flash_attn_f32_q1( + const global void * q_void, ulong q_offset, + const global void * k_void, ulong k_offset, + const global void * v_void, ulong v_offset, + global void * o_void, ulong o_offset, + const float scale, + const int n_q, + const int n_kv, + const int is_causal, + const int n_head, + const ulong q_nb1, const ulong q_nb2, const ulong q_nb3, + const ulong k_nb1, const ulong k_nb2, const ulong k_nb3, + const ulong v_nb1, const ulong v_nb2, const ulong v_nb3, + const ulong o_nb1, const ulong o_nb2, const ulong o_nb3, + const float max_bias, + const float m0, + const float m1, + const int n_head_log2, + const float logit_softcap, + const int n_head_kv, + const global void* mask_void, + const ulong mask_offset, + const ulong mask_nb1, + const ulong mask_nb2, + const ulong mask_nb3, + const int mask_ne2, + const int mask_ne3 +) { + const int tid = get_local_id(0); + const int head_batch_idx = get_global_id(1); + + const int batch_idx = head_batch_idx / n_head; + const int head_idx = head_batch_idx % n_head; + + const int gqa_ratio = n_head / n_head_kv; + const int head_kv_idx = head_idx / gqa_ratio; + + const global char* q_base = (const global char*)q_void + q_offset; + const global char* k_base = (const global char*)k_void + k_offset; + const global char* v_base = (const global char*)v_void + v_offset; + global char* o_base = (global char*)o_void + o_offset; + + const global char* mask_base = NULL; + if (mask_void != NULL) { + const int mask_head_idx = head_idx % mask_ne2; + const int mask_batch_idx = batch_idx % mask_ne3; + mask_base = (const global char*)mask_void + mask_offset + mask_batch_idx * mask_nb3 + mask_head_idx * mask_nb2; + } + + ACC_TYPE4 q_priv[DK_VEC]; + const ulong q_row_offset = batch_idx * q_nb3 + head_idx * q_nb2; + const global DATA_TYPE4* q_ptr = (const global DATA_TYPE4*)(q_base + q_row_offset); + #pragma unroll + for (int i = 0; i < DK_VEC; ++i) { + q_priv[i] = CONVERT_ACC4(q_ptr[i]); + } + + float slope = get_alibi_slope(max_bias, head_idx, n_head_log2, m0, m1); + + ACC_TYPE m_i = -INFINITY; + for (int k_idx = tid; k_idx < n_kv; k_idx += Q1_WG_SIZE) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_idx * k_nb1; + const global DATA_TYPE4* k_ptr = (const global DATA_TYPE4*)(k_base + k_row_offset); + ACC_TYPE4 dot_acc = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc = mad(q_priv[k], CONVERT_ACC4(k_ptr[k]), dot_acc); + } + ACC_TYPE score = (dot_acc.s0 + dot_acc.s1 + dot_acc.s2 + dot_acc.s3) * scale; + if (mask_base != NULL) { + const global DATA_TYPE* mask_ptr = (const global DATA_TYPE*)(mask_base); + score += slope * (ACC_TYPE)mask_ptr[k_idx]; + } + if (logit_softcap > 0.0f) { + score = logit_softcap * tanh(score / logit_softcap); + } + m_i = max(m_i, score); + } + + __local ACC_TYPE local_m[Q1_WG_SIZE]; + local_m[tid] = m_i; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_m[tid] = max(local_m[tid], local_m[tid + s]); + barrier(CLK_LOCAL_MEM_FENCE); + } + const ACC_TYPE m_final = local_m[0]; + + ACC_TYPE4 o_acc[DV_VEC]; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) o_acc[i] = (ACC_TYPE4)(0.0f); + ACC_TYPE l_i = 0.0f; + + for (int k_idx = tid; k_idx < n_kv; k_idx += Q1_WG_SIZE) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_idx * k_nb1; + const ulong v_row_offset = batch_idx * v_nb3 + head_kv_idx * v_nb2 + k_idx * v_nb1; + const global DATA_TYPE4* k_ptr = (const global DATA_TYPE4*)(k_base + k_row_offset); + const global DATA_TYPE4* v_ptr = (const global DATA_TYPE4*)(v_base + v_row_offset); + ACC_TYPE4 dot_acc = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc = mad(q_priv[k], CONVERT_ACC4(k_ptr[k]), dot_acc); + } + ACC_TYPE score = (dot_acc.s0 + dot_acc.s1 + dot_acc.s2 + dot_acc.s3) * scale; + if (mask_base != NULL) { + const global DATA_TYPE* mask_ptr = (const global DATA_TYPE*)(mask_base); + score += slope * (ACC_TYPE)mask_ptr[k_idx]; + } + if (logit_softcap > 0.0f) { + score = logit_softcap * tanh(score / logit_softcap); + } + const ACC_TYPE p = exp(score - m_final); + l_i += p; + #pragma unroll + for (int i = 0; i < DV_VEC; i++) { + o_acc[i] = mad(p, CONVERT_ACC4(v_ptr[i]), o_acc[i]); + } + } + + __local ACC_TYPE local_l[Q1_WG_SIZE]; + __local ACC_TYPE4 local_o_comp[Q1_WG_SIZE]; + local_l[tid] = l_i; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_l[tid] += local_l[tid + s]; + barrier(CLK_LOCAL_MEM_FENCE); + } + + const ulong o_row_offset = batch_idx * o_nb3 + head_idx * o_nb1; + global DATA_TYPE4 *o_row = (global DATA_TYPE4 *)(o_base + o_row_offset); + const ACC_TYPE l_final = local_l[0]; + + if (l_final > 0.0f) { + const ACC_TYPE l_inv = 1.0f / l_final; + for (int i = 0; i < DV_VEC; i++) { + local_o_comp[tid] = o_acc[i]; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_o_comp[tid] += local_o_comp[tid + s]; + barrier(CLK_LOCAL_MEM_FENCE); + } + if (tid == 0) { + o_row[i] = CONVERT_DATA4(local_o_comp[0] * l_inv); + } + } + } else if (tid == 0) { + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) o_row[i] = (DATA_TYPE4)(0.0f); + } +} diff --git a/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl b/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl new file mode 100644 index 0000000000..7067bd2591 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/flash_attn_f32_f16.cl @@ -0,0 +1,346 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#define ACC_TYPE float +#define ACC_TYPE4 float4 +#define Q_DATA_TYPE4 float4 +#define KV_DATA_TYPE4 half4 +#define O_DATA_TYPE4 float4 +#define MASK_DATA_TYPE half +#define CONVERT_Q_ACC4(x) (x) +#define CONVERT_KV_ACC4(x) convert_float4(x) +#define CONVERT_O_DATA4(x) (x) + +#define DK_VEC (DK/4) +#define DV_VEC (DV/4) +#define WG_SIZE (BLOCK_M) +#define Q1_WG_SIZE 64 + +inline float get_alibi_slope( + const float max_bias, const uint h, const uint n_head_log2, const float m0, const float m1 +) { + if (max_bias <= 0.0f) { + return 1.0f; + } + const float base = h < n_head_log2 ? m0 : m1; + const int exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; + + return pow(base, exph); +} +__kernel void flash_attn_f32_f16( + const global void * q_void, ulong q_offset, + const global void * k_void, ulong k_offset, + const global void * v_void, ulong v_offset, + global void * o_void, ulong o_offset, + const float scale, + const int n_q, + const int n_kv, + const int is_causal, + const int n_head, + const ulong q_nb1, const ulong q_nb2, const ulong q_nb3, + const ulong k_nb1, const ulong k_nb2, const ulong k_nb3, + const ulong v_nb1, const ulong v_nb2, const ulong v_nb3, + const ulong o_nb1, const ulong o_nb2, const ulong o_nb3, + const float max_bias, + const float m0, + const float m1, + const int n_head_log2, + const float logit_softcap, + const int n_head_kv, + const global void* mask_void, + const ulong mask_offset, + const ulong mask_nb1, + const ulong mask_nb2, + const ulong mask_nb3, + const int mask_ne2, + const int mask_ne3 +) { + const int tid = get_local_id(0); + const int block_q_idx = get_group_id(0); + const int head_batch_idx = get_global_id(1); + + const int my_query_row = block_q_idx * BLOCK_M + tid; + + const int batch_idx = head_batch_idx / n_head; + const int head_idx = head_batch_idx % n_head; + + const int gqa_ratio = n_head / n_head_kv; + const int head_kv_idx = head_idx / gqa_ratio; + + const global char* q_base = (const global char*)q_void + q_offset; + const global char* k_base = (const global char*)k_void + k_offset; + const global char* v_base = (const global char*)v_void + v_offset; + global char* o_base = (global char*)o_void + o_offset; + + const global char* mask_base = NULL; + if (mask_void != NULL) { + const int mask_head_idx = head_idx % mask_ne2; + const int mask_batch_idx = batch_idx % mask_ne3; + mask_base = (const global char*)mask_void + mask_offset + mask_batch_idx * mask_nb3 + mask_head_idx * mask_nb2; + } + + ACC_TYPE4 q_priv[DK_VEC]; + if (my_query_row < n_q) { + const ulong q_row_offset = batch_idx * q_nb3 + head_idx * q_nb2 + my_query_row * q_nb1; + const global Q_DATA_TYPE4* q_ptr = (const global Q_DATA_TYPE4*)(q_base + q_row_offset); + #pragma unroll + for (int i = 0; i < DK_VEC; ++i) { + q_priv[i] = CONVERT_Q_ACC4(q_ptr[i]); + } + } + + ACC_TYPE4 o_acc[DV_VEC]; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_acc[i] = (ACC_TYPE4)(0.0f); + } + ACC_TYPE m_i = -INFINITY; + ACC_TYPE l_i = 0.0f; + + float slope = get_alibi_slope(max_bias, head_idx, n_head_log2, m0, m1); + + __local KV_DATA_TYPE4 l_k[BLOCK_N][DK_VEC]; + __local KV_DATA_TYPE4 l_v[BLOCK_N][DV_VEC]; + + for (int k_start = 0; k_start < n_kv; k_start += BLOCK_N) { + for (int i = tid; i < BLOCK_N * DK_VEC; i += WG_SIZE) { + const int row = i / DK_VEC; + const int col = i % DK_VEC; + const int k_row_idx = k_start + row; + if (k_row_idx < n_kv) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_row_idx * k_nb1; + l_k[row][col] = ((__global KV_DATA_TYPE4*)(k_base + k_row_offset))[col]; + } + } + for (int i = tid; i < BLOCK_N * DV_VEC; i += WG_SIZE) { + const int row = i / DV_VEC; + const int col = i % DV_VEC; + const int v_row_idx = k_start + row; + if (v_row_idx < n_kv) { + const ulong v_row_offset = batch_idx * v_nb3 + head_kv_idx * v_nb2 + v_row_idx * v_nb1; + l_v[row][col] = ((__global KV_DATA_TYPE4*)(v_base + v_row_offset))[col]; + } + } + barrier(CLK_LOCAL_MEM_FENCE); + + if (my_query_row >= n_q) { + continue; + } + + for (int j = 0; j < BLOCK_N; j += 2) { + const int k_row0 = k_start + j; + const int k_row1 = k_start + j + 1; + + ACC_TYPE4 dot_acc0 = (ACC_TYPE4)(0.0f); + ACC_TYPE4 dot_acc1 = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc0 = mad(q_priv[k], CONVERT_KV_ACC4(l_k[j][k]), dot_acc0); + dot_acc1 = mad(q_priv[k], CONVERT_KV_ACC4(l_k[j+1][k]), dot_acc1); + } + ACC_TYPE score0 = (dot_acc0.s0 + dot_acc0.s1 + dot_acc0.s2 + dot_acc0.s3) * scale; + ACC_TYPE score1 = (dot_acc1.s0 + dot_acc1.s1 + dot_acc1.s2 + dot_acc1.s3) * scale; + + if (is_causal) { + if (k_row0 > (n_kv - n_q + my_query_row)) score0 = -INFINITY; + if (k_row1 > (n_kv - n_q + my_query_row)) score1 = -INFINITY; + } + + if (k_row0 >= n_kv) score0 = -INFINITY; + if (k_row1 >= n_kv) score1 = -INFINITY; + + if (mask_base != NULL) { + const global MASK_DATA_TYPE* mask_ptr = (const global MASK_DATA_TYPE*)(mask_base + my_query_row * mask_nb1); + if (k_row0 < n_kv) score0 += slope * (ACC_TYPE)mask_ptr[k_row0]; + if (k_row1 < n_kv) score1 += slope * (ACC_TYPE)mask_ptr[k_row1]; + } + + if (logit_softcap > 0.0f) { + score0 = logit_softcap * tanh(score0 / logit_softcap); + score1 = logit_softcap * tanh(score1 / logit_softcap); + } + + const ACC_TYPE m_new = max(m_i, max(score0, score1)); + const ACC_TYPE p0 = exp(score0 - m_new); + const ACC_TYPE p1 = exp(score1 - m_new); + const ACC_TYPE scale_prev = exp(m_i - m_new); + + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_acc[i] = o_acc[i] * scale_prev + p0 * CONVERT_KV_ACC4(l_v[j][i]) + p1 * CONVERT_KV_ACC4(l_v[j+1][i]); + } + l_i = l_i * scale_prev + p0 + p1; + m_i = m_new; + } + } + + if (my_query_row < n_q) { + const ulong o_row_offset = batch_idx * o_nb3 + my_query_row * o_nb2 + head_idx * o_nb1; + global O_DATA_TYPE4 *o_row = (global O_DATA_TYPE4 *)(o_base + o_row_offset); + if (l_i > 0.0f) { + const ACC_TYPE l_inv = 1.0f / l_i; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_row[i] = CONVERT_O_DATA4(o_acc[i] * l_inv); + } + } else { + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) { + o_row[i] = (O_DATA_TYPE4)(0.0f); + } + } + } +} + +__kernel void flash_attn_f32_f16_q1( + const global void * q_void, ulong q_offset, + const global void * k_void, ulong k_offset, + const global void * v_void, ulong v_offset, + global void * o_void, ulong o_offset, + const float scale, + const int n_q, + const int n_kv, + const int is_causal, + const int n_head, + const ulong q_nb1, const ulong q_nb2, const ulong q_nb3, + const ulong k_nb1, const ulong k_nb2, const ulong k_nb3, + const ulong v_nb1, const ulong v_nb2, const ulong v_nb3, + const ulong o_nb1, const ulong o_nb2, const ulong o_nb3, + const float max_bias, + const float m0, + const float m1, + const int n_head_log2, + const float logit_softcap, + const int n_head_kv, + const global void* mask_void, + const ulong mask_offset, + const ulong mask_nb1, + const ulong mask_nb2, + const ulong mask_nb3, + const int mask_ne2, + const int mask_ne3 +) { + const int tid = get_local_id(0); + const int head_batch_idx = get_global_id(1); + + const int batch_idx = head_batch_idx / n_head; + const int head_idx = head_batch_idx % n_head; + + const int gqa_ratio = n_head / n_head_kv; + const int head_kv_idx = head_idx / gqa_ratio; + + const global char* q_base = (const global char*)q_void + q_offset; + const global char* k_base = (const global char*)k_void + k_offset; + const global char* v_base = (const global char*)v_void + v_offset; + global char* o_base = (global char*)o_void + o_offset; + + const global char* mask_base = NULL; + if (mask_void != NULL) { + const int mask_head_idx = head_idx % mask_ne2; + const int mask_batch_idx = batch_idx % mask_ne3; + mask_base = (const global char*)mask_void + mask_offset + mask_batch_idx * mask_nb3 + mask_head_idx * mask_nb2; + } + + ACC_TYPE4 q_priv[DK_VEC]; + const ulong q_row_offset = batch_idx * q_nb3 + head_idx * q_nb2; + const global Q_DATA_TYPE4* q_ptr = (const global Q_DATA_TYPE4*)(q_base + q_row_offset); + #pragma unroll + for (int i = 0; i < DK_VEC; ++i) { + q_priv[i] = CONVERT_Q_ACC4(q_ptr[i]); + } + + float slope = get_alibi_slope(max_bias, head_idx, n_head_log2, m0, m1); + + ACC_TYPE m_i = -INFINITY; + for (int k_idx = tid; k_idx < n_kv; k_idx += Q1_WG_SIZE) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_idx * k_nb1; + const global KV_DATA_TYPE4* k_ptr = (const global KV_DATA_TYPE4*)(k_base + k_row_offset); + ACC_TYPE4 dot_acc = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc = mad(q_priv[k], CONVERT_KV_ACC4(k_ptr[k]), dot_acc); + } + ACC_TYPE score = (dot_acc.s0 + dot_acc.s1 + dot_acc.s2 + dot_acc.s3) * scale; + if (mask_base != NULL) { + const global MASK_DATA_TYPE* mask_ptr = (const global MASK_DATA_TYPE*)(mask_base); + score += slope * (ACC_TYPE)mask_ptr[k_idx]; + } + if (logit_softcap > 0.0f) { + score = logit_softcap * tanh(score / logit_softcap); + } + m_i = max(m_i, score); + } + + __local ACC_TYPE local_m[Q1_WG_SIZE]; + local_m[tid] = m_i; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_m[tid] = max(local_m[tid], local_m[tid + s]); + barrier(CLK_LOCAL_MEM_FENCE); + } + const ACC_TYPE m_final = local_m[0]; + + ACC_TYPE4 o_acc[DV_VEC]; + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) o_acc[i] = (ACC_TYPE4)(0.0f); + ACC_TYPE l_i = 0.0f; + + for (int k_idx = tid; k_idx < n_kv; k_idx += Q1_WG_SIZE) { + const ulong k_row_offset = batch_idx * k_nb3 + head_kv_idx * k_nb2 + k_idx * k_nb1; + const ulong v_row_offset = batch_idx * v_nb3 + head_kv_idx * v_nb2 + k_idx * v_nb1; + const global KV_DATA_TYPE4* k_ptr = (const global KV_DATA_TYPE4*)(k_base + k_row_offset); + const global KV_DATA_TYPE4* v_ptr = (const global KV_DATA_TYPE4*)(v_base + v_row_offset); + ACC_TYPE4 dot_acc = (ACC_TYPE4)(0.0f); + #pragma unroll + for (int k = 0; k < DK_VEC; k++) { + dot_acc = mad(q_priv[k], CONVERT_KV_ACC4(k_ptr[k]), dot_acc); + } + ACC_TYPE score = (dot_acc.s0 + dot_acc.s1 + dot_acc.s2 + dot_acc.s3) * scale; + if (mask_base != NULL) { + const global MASK_DATA_TYPE* mask_ptr = (const global MASK_DATA_TYPE*)(mask_base); + score += slope * (ACC_TYPE)mask_ptr[k_idx]; + } + if (logit_softcap > 0.0f) { + score = logit_softcap * tanh(score / logit_softcap); + } + const ACC_TYPE p = exp(score - m_final); + l_i += p; + #pragma unroll + for (int i = 0; i < DV_VEC; i++) { + o_acc[i] = mad(p, CONVERT_KV_ACC4(v_ptr[i]), o_acc[i]); + } + } + + __local ACC_TYPE local_l[Q1_WG_SIZE]; + __local ACC_TYPE4 local_o_comp[Q1_WG_SIZE]; + local_l[tid] = l_i; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_l[tid] += local_l[tid + s]; + barrier(CLK_LOCAL_MEM_FENCE); + } + + const ulong o_row_offset = batch_idx * o_nb3 + head_idx * o_nb1; + global O_DATA_TYPE4 *o_row = (global O_DATA_TYPE4 *)(o_base + o_row_offset); + const ACC_TYPE l_final = local_l[0]; + + if (l_final > 0.0f) { + const ACC_TYPE l_inv = 1.0f / l_final; + for (int i = 0; i < DV_VEC; i++) { + local_o_comp[tid] = o_acc[i]; + barrier(CLK_LOCAL_MEM_FENCE); + #pragma unroll + for (int s = Q1_WG_SIZE / 2; s > 0; s >>= 1) { + if (tid < s) local_o_comp[tid] += local_o_comp[tid + s]; + barrier(CLK_LOCAL_MEM_FENCE); + } + if (tid == 0) { + o_row[i] = CONVERT_O_DATA4(local_o_comp[0] * l_inv); + } + } + } else if (tid == 0) { + #pragma unroll + for (int i = 0; i < DV_VEC; ++i) o_row[i] = (O_DATA_TYPE4)(0.0f); + } +} From 2e2b22ba6607414a5d619ac6d2f034b5b02214e5 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 16 Aug 2025 03:58:38 -0500 Subject: [PATCH 011/174] vulkan: Add missing bounds checking to scalar/coopmat1 mul_mat_id (#15334) --- ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp | 10 +++++++--- tests/test-backend-ops.cpp | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index 8c5114a79d..a61a464c7b 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -801,7 +801,7 @@ void main() { } #else const uint row_i = ic * BN + loadc_b + l; - if (row_i < _ne1) { + if (row_i < _ne1 && block + loadr_b < end_k) { const u16vec2 row_idx = row_ids[row_i]; buf_b[(loadc_b + l) * SHMEM_STRIDE + loadr_b] = TO_FLOAT_TYPE(data_b[pos_b + row_idx.y * p.batch_stride_b + (row_idx.x % p.ne11) * p.stride_b + loadr_b]); } else { @@ -875,7 +875,9 @@ void main() { const u16vec2 row_idx = row_ids[row_i]; - data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr + cm_row * TM + store_r] = D_TYPE(coopmat_stage[warp_i * TM * TN + (col + store_c) * TM + store_r]); + if (dr + cm_row * TM + store_r < p.M) { + data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr + cm_row * TM + store_r] = D_TYPE(coopmat_stage[warp_i * TM * TN + (col + store_c) * TM + store_r]); + } } } } @@ -925,7 +927,9 @@ void main() { #endif // MUL_MAT_ID [[unroll]] for (uint cr = 0; cr < TM; cr++) { #ifdef MUL_MAT_ID - data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr_warp + cr] = D_TYPE(sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr]); + if (dr_warp + cr < p.M) { + data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr_warp + cr] = D_TYPE(sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr]); + } #else if (dr_warp + cr < p.M && dc_warp + cc < p.N) { data_d[offsets + (dc_warp + cc) * p.stride_d + dr_warp + cr] = D_TYPE(sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr]); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index f4565f9b71..39547f0649 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -5824,6 +5824,8 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, b, 32, 1024, 16)); } + test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 1, 1, false, 8, 16, 1)); + for (ggml_type type_a : base_types) { for (ggml_type type_b : {GGML_TYPE_F32 /*, GGML_TYPE_F16 */}) { for (int n_mats : {4, 8}) { From de2192794f4e8e04f2e8167ef2424905145e88fc Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 16 Aug 2025 04:18:31 -0500 Subject: [PATCH 012/174] vulkan: Support mul_mat_id with f32 accumulators (#15337) * vulkan: Add missing bounds checking to scalar/coopmat1 mul_mat_id * vulkan: Support mul_mat_id with f32 accumulators, but they are not hooked up - There's no explicit way to request f32 precision for mul_mat_id, but there probably should be, and this gets the code in place for that. - A couple fixes to check_results. - Remove casts to fp16 in coopmat1 FA shader (found by inspection). --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 160 ++++++++---------- .../vulkan-shaders/flash_attn_cm1.comp | 8 +- 2 files changed, 79 insertions(+), 89 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 76a0cfa4f0..6315584996 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2387,26 +2387,26 @@ static void ggml_vk_load_shaders(vk_device& device) { CREATE_MM(pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4) } #endif - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f16acc, matmul_id_q4_0_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f16acc, matmul_id_q4_1_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f16acc, matmul_id_q5_0_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f16acc, matmul_id_q5_1_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f16acc, matmul_id_q8_0_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f16acc, matmul_id_q2_k_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f16acc, matmul_id_q3_k_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f16acc, matmul_id_q4_k_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f16acc, matmul_id_q5_k_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f16acc, matmul_id_q6_k_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f16acc, matmul_id_iq1_s_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f16acc, matmul_id_iq1_m_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f16acc, matmul_id_iq2_xxs_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f16acc, matmul_id_iq2_xs_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f16acc, matmul_id_iq2_s_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f16acc, matmul_id_iq3_xxs_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f16acc, matmul_id_iq3_s_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f16acc, matmul_id_iq4_xs_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f16acc, matmul_id_iq4_nl_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f16acc, matmul_id_mxfp4_f16, , mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) #undef CREATE_MM #undef CREATE_MM2 } else @@ -2502,51 +2502,27 @@ static void ggml_vk_load_shaders(vk_device& device) { } #endif - if (device->coopmat_acc_f16_support) { - CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f16acc, matmul_id_q4_0_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f16acc, matmul_id_q4_1_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f16acc, matmul_id_q5_0_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f16acc, matmul_id_q5_1_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f16acc, matmul_id_q8_0_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f16acc, matmul_id_q2_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f16acc, matmul_id_q3_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f16acc, matmul_id_q4_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f16acc, matmul_id_q5_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f16acc, matmul_id_q6_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f16acc, matmul_id_iq1_s_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f16acc, matmul_id_iq1_m_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f16acc, matmul_id_iq2_xxs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f16acc, matmul_id_iq2_xs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f16acc, matmul_id_iq2_s_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f16acc, matmul_id_iq3_xxs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f16acc, matmul_id_iq3_s_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f16acc, matmul_id_iq4_xs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f16acc, matmul_id_iq4_nl_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f16acc, matmul_id_mxfp4_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - } else { - CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f16acc, matmul_id_q4_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f16acc, matmul_id_q4_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f16acc, matmul_id_q5_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f16acc, matmul_id_q5_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f16acc, matmul_id_q8_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - - CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f16acc, matmul_id_q2_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f16acc, matmul_id_q3_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f16acc, matmul_id_q4_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f16acc, matmul_id_q5_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f16acc, matmul_id_q6_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f16acc, matmul_id_iq1_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f16acc, matmul_id_iq1_m_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f16acc, matmul_id_iq2_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f16acc, matmul_id_iq2_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f16acc, matmul_id_iq2_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f16acc, matmul_id_iq3_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f16acc, matmul_id_iq3_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f16acc, matmul_id_iq4_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f16acc, matmul_id_iq4_nl_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f16acc, matmul_id_mxfp4_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - } + CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); #undef CREATE_MM2 #undef CREATE_MM } else @@ -2631,27 +2607,27 @@ static void ggml_vk_load_shaders(vk_device& device) { CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f16acc, matmul_id_q4_0_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f16acc, matmul_id_q4_1_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f16acc, matmul_id_q5_0_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f16acc, matmul_id_q5_1_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f16acc, matmul_id_q8_0_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f16acc, matmul_id_q2_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f16acc, matmul_id_q3_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f16acc, matmul_id_q4_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f16acc, matmul_id_q5_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f16acc, matmul_id_q6_k_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f16acc, matmul_id_iq1_s_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f16acc, matmul_id_iq1_m_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f16acc, matmul_id_iq2_xxs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f16acc, matmul_id_iq2_xs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f16acc, matmul_id_iq2_s_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f16acc, matmul_id_iq3_xxs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f16acc, matmul_id_iq3_s_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f16acc, matmul_id_iq4_xs_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f16acc, matmul_id_iq4_nl_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f16acc, matmul_id_mxfp4_f32, _f16acc, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); #undef CREATE_MM2 #undef CREATE_MMQ #undef CREATE_MM @@ -4470,7 +4446,17 @@ static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_id_pipeline(ggml_backend_vk_co return nullptr; } - return ctx->device->fp16 ? ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type].f16acc : ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type].f32acc; + // XXX TODO 'prec' is not actually allowed in mul_mat_id. + bool prefer_fp16acc = ctx->device->fp16 /*&& prec == GGML_PREC_DEFAULT*/; + bool support_fp16acc = ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type].f16acc != nullptr; + bool support_fp32acc = ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type].f32acc != nullptr; + + if (support_fp16acc && (prefer_fp16acc || !support_fp32acc)) { + return ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type].f16acc; + } else { + GGML_ASSERT(support_fp32acc); + return ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type].f32acc; + } } static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec_id(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type) { @@ -11723,6 +11709,8 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * } else { tensor_clone = ggml_glu_split(ggml_ctx, src_clone[0], src_clone[1], (ggml_glu_op) tensor->op_params[0]); } + ggml_set_op_params_i32(tensor_clone, 2, ggml_get_op_params_i32(tensor, 2)); + ggml_set_op_params_i32(tensor_clone, 3, ggml_get_op_params_i32(tensor, 3)); } else if (tensor->op == GGML_OP_CPY || tensor->op == GGML_OP_DUP) { if (src1 == nullptr) { tensor_clone = ggml_dup(ggml_ctx, src_clone[0]); @@ -11807,6 +11795,8 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * src_clone[0]->flags = src0->flags; tensor_clone = ggml_opt_step_sgd(ggml_ctx, src_clone[0], src_clone[1], src_clone[2]); + } else if (tensor->op == GGML_OP_ADD_ID) { + tensor_clone = ggml_add_id(ggml_ctx, src_clone[0], src_clone[1], src_clone[2]); } else { std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp index 230e815f22..81cc3f81fc 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp @@ -210,7 +210,7 @@ void main() { [[unroll]] for (uint32_t d = 0; d < HSV_per_thread / 4; ++d) { [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { - Of[r][d] = float16_t(eMf[r]) * Of[r][d]; + Of[r][d] = ACC_TYPE(eMf[r]) * Of[r][d]; } } [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { @@ -233,7 +233,7 @@ void main() { vec4 Vf = vec4(data_vv4[v_offset / 4 + (j * Bc + c * cols_per_iter + col_tid) * v_stride / 4 + d * D_split + d_tid]); #endif [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { - Of[r][d] += float16_t(Pf[r]) * ACC_TYPEV4(Vf); + Of[r][d] += ACC_TYPE(Pf[r]) * ACC_TYPEV4(Vf); } } } @@ -288,7 +288,7 @@ void main() { [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { [[unroll]] for (uint32_t d = 0; d < HSV_per_thread / 4; ++d) { - Of[r][d] = float16_t(eMf[r]) * Of[r][d]; + Of[r][d] = ACC_TYPE(eMf[r]) * Of[r][d]; tmpshv4[tid] = Of[r][d]; barrier(); @@ -357,7 +357,7 @@ void main() { [[unroll]] for (uint32_t d = 0; d < HSV_per_thread / 4; ++d) { [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { - Of[r][d] *= float16_t(Lfrcp[r]); + Of[r][d] *= ACC_TYPE(Lfrcp[r]); } } From 1fe00296f587dfca0957e006d146f5875b61e43d Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 16 Aug 2025 11:48:22 -0500 Subject: [PATCH 013/174] vulkan: fuse adds (#15252) * vulkan: fuse adds Fuse adds that have the same shape, which are common in MoE models. It will currently fuse up to 6 adds, because we assume no more than 8 descriptors per dispatch. But this could be changed. * check runtimeDescriptorArray feature * disable multi_add for Intel due to likely driver bug --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 207 +++++++++++++++++- .../vulkan-shaders/generic_binary_head.comp | 19 +- .../ggml-vulkan/vulkan-shaders/multi_add.comp | 68 ++++++ .../src/ggml-vulkan/vulkan-shaders/utils.comp | 25 +++ .../vulkan-shaders/vulkan-shaders-gen.cpp | 2 + tests/test-backend-ops.cpp | 5 +- 6 files changed, 301 insertions(+), 25 deletions(-) create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/utils.comp diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 6315584996..20674bee58 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -103,6 +103,8 @@ static bool is_pow2(uint32_t x) { return x > 1 && (x & (x-1)) == 0; } struct ggml_backend_vk_context; #define MAX_PARAMETER_COUNT 8 +// Max number of adds that can be fused without exceeding MAX_PARAMETER_COUNT. +#define MAX_FUSED_ADDS (MAX_PARAMETER_COUNT - 2) struct vk_pipeline_struct { std::string name; @@ -368,6 +370,7 @@ struct vk_device_struct { bool float_controls_rte_fp16; bool subgroup_add; bool subgroup_shuffle; + bool multi_add; bool integer_dot_product; @@ -449,6 +452,9 @@ struct vk_device_struct { vk_pipeline pipeline_div[2][2][2]; vk_pipeline pipeline_div_norepeat[2][2][2]; + // indexed by num_additional_fused_ops == num_adds - 1 + vk_pipeline pipeline_multi_add[MAX_FUSED_ADDS]; + vk_pipeline pipeline_add_id_f32; vk_pipeline pipeline_concat_f32, pipeline_concat_f16, pipeline_concat_i32; @@ -801,6 +807,14 @@ struct vk_op_binary_push_constants { float param1; float param2; int32_t param3; }; +struct vk_op_multi_add_push_constants { + // shape for dst + uint32_t ne20; uint32_t ne21; uint32_t ne22; uint32_t ne23; + + // strides for srcs+dst + uint32_t nb[8][4]; +}; + struct vk_op_add_id_push_constants { uint32_t ne0; uint32_t ne1; @@ -2994,6 +3008,12 @@ static void ggml_vk_load_shaders(vk_device& device) { CREATE_BINARY(div, _norepeat, {1}) #undef CREATE_BINARY + if (device->multi_add) { + for (uint32_t i = 0; i < MAX_FUSED_ADDS; ++i) { + ggml_vk_create_pipeline(device, device->pipeline_multi_add[i], "multi_add_f32_" + std::to_string(i+1), multi_add_f32_len, multi_add_f32_data, "main", MAX_PARAMETER_COUNT, sizeof(vk_op_multi_add_push_constants), {512, 1, 1}, {i+2}, 1); + } + } + ggml_vk_create_pipeline(device, device->pipeline_add_id_f32, "add_id_f32", add_id_f32_len, add_id_f32_data, "main", 4, sizeof(vk_op_add_id_push_constants), {1, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_acc_f32, "acc_f32", acc_f32_len, acc_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1); @@ -3533,6 +3553,12 @@ static vk_device ggml_vk_get_device(size_t idx) { device->pipeline_robustness = pl_robustness_features.pipelineRobustness; + device->multi_add = vk12_props.shaderRoundingModeRTEFloat16 && + device->properties.limits.maxPushConstantsSize >= sizeof(vk_op_multi_add_push_constants) && + vk12_features.runtimeDescriptorArray && + device->vendor_id != VK_VENDOR_ID_INTEL && + getenv("GGML_VK_DISABLE_MULTI_ADD") == nullptr; + if (device->subgroup_size_control) { device->subgroup_min_size = subgroup_size_control_props.minSubgroupSize; device->subgroup_max_size = subgroup_size_control_props.maxSubgroupSize; @@ -6887,6 +6913,9 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const switch (op) { case GGML_OP_ADD: { + if (ctx->num_additional_fused_ops > 0) { + return ctx->device->pipeline_multi_add[ctx->num_additional_fused_ops]; + } auto pipelines = ggml_are_same_shape(src0, src1) ? ctx->device->pipeline_add_norepeat : ctx->device->pipeline_add; return pipelines[src0->type == GGML_TYPE_F16][src1->type == GGML_TYPE_F16][dst->type == GGML_TYPE_F16]; } @@ -7743,6 +7772,107 @@ static void ggml_vk_acc(ggml_backend_vk_context * ctx, vk_context& subctx, const }, dryrun); } +static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, ggml_cgraph * cgraph, int node_idx, bool dryrun = false) { + const ggml_tensor *first_node = cgraph->nodes[node_idx]; + const ggml_tensor *dst = cgraph->nodes[node_idx + ctx->num_additional_fused_ops]; + + // Make a list of all the tensors used by the op. + // Last element of the list is the dest tensor. + const ggml_tensor *tensors[MAX_PARAMETER_COUNT]; + uint32_t num_srcs = ctx->num_additional_fused_ops + 2; + uint32_t num_tensors = num_srcs + 1; + GGML_ASSERT(num_tensors <= MAX_PARAMETER_COUNT); + + tensors[0] = first_node->src[0]; + tensors[1] = first_node->src[1]; + for (int32_t i = 0; i < ctx->num_additional_fused_ops; ++i) { + // check whether the previous result is src[0] or src[1] + if (cgraph->nodes[node_idx + i] == cgraph->nodes[node_idx + i + 1]->src[0]) { + tensors[i+2] = cgraph->nodes[node_idx + i + 1]->src[1]; + } else { + tensors[i+2] = cgraph->nodes[node_idx + i + 1]->src[0]; + } + } + tensors[num_srcs] = dst; + + vk_op_multi_add_push_constants pc; + pc.ne20 = (uint32_t)dst->ne[0]; + pc.ne21 = (uint32_t)dst->ne[1]; + pc.ne22 = (uint32_t)dst->ne[2]; + pc.ne23 = (uint32_t)dst->ne[3]; + + for (uint32_t i = 0; i < num_tensors; ++i) { + const ggml_tensor *t = tensors[i]; + pc.nb[i][0] = (uint32_t)t->nb[0] / sizeof(float); + pc.nb[i][1] = (uint32_t)t->nb[1] / sizeof(float); + pc.nb[i][2] = (uint32_t)t->nb[2] / sizeof(float); + pc.nb[i][3] = (uint32_t)t->nb[3] / sizeof(float); + } + + vk_pipeline pipeline = ctx->device->pipeline_multi_add[ctx->num_additional_fused_ops]; + + if (pipeline == nullptr) { + std::cerr << "ggml_vulkan: Error: Missing multi_add"; + GGML_ABORT("fatal error"); + } + + if (dryrun) { + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); + return; + } + + ggml_backend_vk_buffer_context * buf_ctx[MAX_PARAMETER_COUNT]; + vk_buffer buf[MAX_PARAMETER_COUNT]; + size_t offset[MAX_PARAMETER_COUNT]; + bool uma[MAX_PARAMETER_COUNT]; + + for (uint32_t i = 0; i < num_tensors; ++i) { + buf_ctx[i] = (ggml_backend_vk_buffer_context *)tensors[i]->buffer->context; + buf[i] = nullptr; + offset[i] = 0; + uma[i] = false; + + if (ctx->device->uma) { + ggml_vk_host_get(ctx->device, tensors[i]->data, buf[i], offset[i]); + uma[i] = buf[i] != nullptr; + } + if (!uma[i]) { + buf[i] = buf_ctx[i]->dev_buffer; + offset[i] = vk_tensor_offset(tensors[i]) + tensors[i]->view_offs; + } + GGML_ASSERT(buf[i] != nullptr); + } + // If any remaining descriptors are unused, just point them at src[0] + for (uint32_t i = num_tensors; i < MAX_PARAMETER_COUNT; ++i) { + buf[i] = buf[0]; + offset[i] = 0; + } + + std::array elements; + + uint32_t ne = ggml_nelements(dst); + if (ne > 262144) { + elements = { 512, 512, CEIL_DIV(ne, 262144) }; + } else if (ne > 512) { + elements = { 512, CEIL_DIV(ne, 512), 1 }; + } else { + elements = { ne, 1, 1 }; + } + + ggml_vk_sync_buffers(subctx); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + { + vk_subbuffer{ buf[0], offset[0], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[1], offset[1], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[2], offset[2], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[3], offset[3], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[4], offset[4], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[5], offset[5], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[6], offset[6], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[7], offset[7], VK_WHOLE_SIZE }, + }, pc, elements); +} + static void ggml_vk_add(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, bool dryrun = false) { const uint32_t src0_type_size = ggml_type_size(src0->type); const uint32_t src1_type_size = ggml_type_size(src1->type); @@ -9703,8 +9833,11 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr break; case GGML_OP_ADD: - ggml_vk_add(ctx, compute_ctx, src0, src1, node, dryrun); - + if (ctx->num_additional_fused_ops) { + ggml_vk_multi_add(ctx, compute_ctx, cgraph, node_idx, dryrun); + } else { + ggml_vk_add(ctx, compute_ctx, src0, src1, node, dryrun); + } break; case GGML_OP_SUB: ggml_vk_sub(ctx, compute_ctx, src0, src1, node, dryrun); @@ -10586,6 +10719,58 @@ static bool ggml_vk_can_fuse(const struct ggml_cgraph * cgraph, int node_idx, st return true; } +static uint32_t ggml_vk_fuse_multi_add(ggml_backend_vk_context * ctx, const struct ggml_cgraph * cgraph, int node_idx) { + + const ggml_tensor *first_node = cgraph->nodes[node_idx]; + if (first_node->op != GGML_OP_ADD) { + return 0; + } + + if (!ctx->device->multi_add) { + return 0; + } + + int32_t num_adds = 1; + while (node_idx + num_adds < cgraph->n_nodes && + cgraph->nodes[node_idx + num_adds]->op == GGML_OP_ADD && + num_adds < MAX_FUSED_ADDS) { + num_adds++; + } + + // The shader currently requires same shapes (but different strides are allowed), + // everything f32, and no misalignment + for (int32_t i = 0; i < num_adds; ++i) { + const ggml_tensor *next_node = cgraph->nodes[node_idx + i]; + if (!ggml_are_same_shape(first_node, next_node->src[0]) || + !ggml_are_same_shape(first_node, next_node->src[1]) || + next_node->type != GGML_TYPE_F32 || + next_node->src[0]->type != GGML_TYPE_F32 || + next_node->src[1]->type != GGML_TYPE_F32 || + get_misalign_bytes(ctx, next_node) || + get_misalign_bytes(ctx, next_node->src[0]) || + get_misalign_bytes(ctx, next_node->src[1])) { + num_adds = i; + } + } + + // Verify we can fuse these + ggml_op adds[MAX_FUSED_ADDS]; + for (int32_t i = 0; i < num_adds; ++i) { + adds[i] = GGML_OP_ADD; + } + + // decrease num_adds if they can't all be fused + while (num_adds > 1 && !ggml_can_fuse(cgraph, node_idx, adds, num_adds)) { + num_adds--; + } + + // a single add is not "fused", so just return zero + if (num_adds == 1) { + return 0; + } + return num_adds; +} + static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) { VK_LOG_DEBUG("ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)"); ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; @@ -10599,8 +10784,13 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg uint64_t total_mat_mul_bytes = 0; for (int i = 0; i < cgraph->n_nodes; i++) { - if (!ctx->device->disable_fusion && ggml_vk_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { - ctx->num_additional_fused_ops = 1; + if (!ctx->device->disable_fusion) { + uint32_t num_adds = ggml_vk_fuse_multi_add(ctx, cgraph, i); + if (num_adds) { + ctx->num_additional_fused_ops = num_adds - 1; + } else if (ggml_vk_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { + ctx->num_additional_fused_ops = 1; + } } ggml_vk_build_graph(ctx, cgraph, i, nullptr, 0, true, false, false, false); if (cgraph->nodes[i]->op == GGML_OP_MUL_MAT || cgraph->nodes[i]->op == GGML_OP_MUL_MAT_ID) { @@ -10675,8 +10865,13 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg mul_mat_bytes += ggml_nbytes(cgraph->nodes[i]->src[0]); } - if (!ctx->device->disable_fusion && ggml_vk_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { - ctx->num_additional_fused_ops = 1; + if (!ctx->device->disable_fusion) { + uint32_t num_adds = ggml_vk_fuse_multi_add(ctx, cgraph, i); + if (num_adds) { + ctx->num_additional_fused_ops = num_adds - 1; + } else if (ggml_vk_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { + ctx->num_additional_fused_ops = 1; + } } // Signal the almost_ready fence when the graph is mostly complete (< 20% remaining) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.comp b/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.comp index 4b4316cf3d..750e785753 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.comp @@ -2,6 +2,7 @@ #extension GL_EXT_control_flow_attributes : require #include "rte.comp" +#include "utils.comp" layout (push_constant) uniform parameter { @@ -28,25 +29,9 @@ uint get_aoffset() { return p.misalign_offsets >> 16; } uint get_boffset() { return (p.misalign_offsets >> 8) & 0xFF; } uint get_doffset() { return p.misalign_offsets & 0xFF; } -// mod and div are expensive and coordinates/dimensions are often power of 2 or equal to 1 -uint fastmod(uint a, uint b) { - if ((b & (b-1)) == 0) { - return a & (b-1); - } - return a % b; -} - -uint fastdiv(uint a, uint b) { - return (a < b) ? 0 : (a / b); -} void get_indices(uint idx, out uint i00, out uint i01, out uint i02, out uint i03) { - i03 = fastdiv(idx, (p.ne02*p.ne01*p.ne00)); - const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00; - i02 = fastdiv((idx - i03_offset), (p.ne01*p.ne00)); - const uint i02_offset = i02*p.ne01*p.ne00; - i01 = (idx - i03_offset - i02_offset) / p.ne00; - i00 = idx - i03_offset - i02_offset - i01*p.ne00; + get_indices(idx, i00, i01, i02, i03, p.ne00, p.ne01, p.ne02, p.ne03); } uint src0_idx(uint i00, uint i01, uint i02, uint i03) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp b/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp new file mode 100644 index 0000000000..0c7acb7060 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp @@ -0,0 +1,68 @@ +#version 450 + +#extension GL_EXT_shader_16bit_storage : require +#extension GL_EXT_nonuniform_qualifier : enable +#extension GL_EXT_control_flow_attributes : require + +#include "rte.comp" +#include "types.comp" +#include "utils.comp" + +layout (push_constant) uniform parameter2 +{ + // shape for dst + uint ne20; uint ne21; uint ne22; uint ne23; + + // strides for srcs+dst + uint nb[8][4]; +} p; + +layout (binding = 0) readonly buffer A {A_TYPE data_a[];} a[]; +layout (binding = 0) writeonly buffer D {D_TYPE data_d[];} d[]; + +layout(constant_id = 0) const uint num_srcs = 2; + +uint src_idx(uint s, uint i00, uint i01, uint i02, uint i03) { + return i03*p.nb[s][3] + i02*p.nb[s][2] + i01*p.nb[s][1] + i00*p.nb[s][0]; +} + +uint dst_idx(uint i00, uint i01, uint i02, uint i03) { + uint nb20 = p.nb[num_srcs][0]; + uint nb21 = p.nb[num_srcs][1]; + uint nb22 = p.nb[num_srcs][2]; + uint nb23 = p.nb[num_srcs][3]; + return i03*nb23 + i02*nb22 + i01*nb21 + i00*nb20; +} + +uint get_idx() { + return gl_GlobalInvocationID.z * 262144 + gl_GlobalInvocationID.y * 512 + gl_GlobalInvocationID.x; +} + +const uint num_threads = 256; + +layout(local_size_x = num_threads, local_size_y = 1, local_size_z = 1) in; + +void main() { + uint idx = get_idx(); + + uint ne = p.ne20 * p.ne21 * p.ne22 * p.ne23; + + // num_threads * num_iter must equal 512, to match the wg_denoms and get_idx calculation + const uint num_iter = 2; + + [[unroll]] for (uint i = 0; i < num_iter; ++i) { + if (idx >= ne) { + continue; + } + uint i00, i01, i02, i03; + get_indices(idx, i00, i01, i02, i03, p.ne20, p.ne21, p.ne22, p.ne23); + + FLOAT_TYPE sum = FLOAT_TYPE(0); + [[unroll]] for (uint s = 0; s < num_srcs; ++s) { + sum += FLOAT_TYPE(a[s].data_a[src_idx(s, i00, i01, i02, i03)]); + } + d[num_srcs].data_d[dst_idx(i00, i01, i02, i03)] = D_TYPE(sum); + + idx += num_threads; + } +} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/utils.comp b/ggml/src/ggml-vulkan/vulkan-shaders/utils.comp new file mode 100644 index 0000000000..dc4a1e6d96 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/utils.comp @@ -0,0 +1,25 @@ +#ifndef UTILS_COMP +#define UTILS_COMP + +// mod and div are expensive and coordinates/dimensions are often power of 2 or equal to 1 +uint fastmod(uint a, uint b) { + if ((b & (b-1)) == 0) { + return a & (b-1); + } + return a % b; +} + +uint fastdiv(uint a, uint b) { + return (a < b) ? 0 : (a / b); +} + +void get_indices(uint idx, out uint i00, out uint i01, out uint i02, out uint i03, uint ne00, uint ne01, uint ne02, uint ne03) { + i03 = fastdiv(idx, (ne02*ne01*ne00)); + const uint i03_offset = i03 * ne02*ne01*ne00; + i02 = fastdiv((idx - i03_offset), (ne01*ne00)); + const uint i02_offset = i02*ne01*ne00; + i01 = (idx - i03_offset - i02_offset) / ne00; + i00 = idx - i03_offset - i02_offset - i01*ne00; +} + +#endif // UTILS_COMP diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 68933d19f2..67a9ee422b 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -677,6 +677,8 @@ void process_shaders() { string_to_spv("add_id_f32", "add_id.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); + string_to_spv("multi_add_f32", "multi_add.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}, {"RTE16", "1"}}); + for (auto &c : compiles) { c.wait(); } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 39547f0649..0df5ebb565 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2491,12 +2491,12 @@ struct test_bin_bcast : public test_case { : op(op), type(type), ne(ne), nr(nr), nf(nf) {} ggml_tensor * build_graph(ggml_context * ctx) override { - GGML_ASSERT(nf <= 8); + GGML_ASSERT(nf <= 16); ggml_tensor * a = ggml_new_tensor_4d(ctx, type, ne[0]*nr[0], ne[1]*nr[1], ne[2]*nr[2], ne[3]*nr[3]); ggml_set_name(a, "a"); - ggml_tensor * b[8]; + ggml_tensor * b[16]; for (int i = 0; i < nf; ++i) { b[i] = ggml_new_tensor(ctx, type, 4, ne.data()); ggml_set_name(b[i], (std::string("b") + std::to_string(i)).c_str()); @@ -5658,6 +5658,7 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_bin_bcast(ggml_add, GGML_TYPE_F32, {10, 5, 4, 3}, {1, 1, 2, 2}, 6)); test_cases.emplace_back(new test_bin_bcast(ggml_add, GGML_TYPE_F32, {10, 5, 4, 3}, {1, 2, 2, 2}, 7)); test_cases.emplace_back(new test_bin_bcast(ggml_add, GGML_TYPE_F32, {16, 5, 4, 3}, {2, 2, 2, 2}, 8)); + test_cases.emplace_back(new test_bin_bcast(ggml_add, GGML_TYPE_F32, {16, 5, 4, 3}, {1, 1, 1, 1}, 16)); test_cases.emplace_back(new test_add1()); test_cases.emplace_back(new test_scale()); From 65349f26f2299e06477ec8e85e46243046801358 Mon Sep 17 00:00:00 2001 From: Tarek Dakhran Date: Sat, 16 Aug 2025 23:33:54 +0200 Subject: [PATCH 014/174] model : support vision LiquidAI LFM2-VL family (#15347) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * wip lfm2 vision model * Fix conv weight * Implement dynamic resolution * Fix cuda * support LFM2-VL-450M * happy CI * Remove extra `ggml_conv` and put others into the right place Co-authored-by: Sigbjørn Skjæret --------- Co-authored-by: Xuan Son Nguyen Co-authored-by: Sigbjørn Skjæret --- convert_hf_to_gguf.py | 45 +++++++++++- gguf-py/gguf/constants.py | 1 + gguf-py/gguf/tensor_mapping.py | 1 + tools/mtmd/clip-impl.h | 3 + tools/mtmd/clip.cpp | 124 ++++++++++++++++++++++++++++++++- 5 files changed, 171 insertions(+), 3 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 444e2cbdfb..bd21e55f4a 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -8251,8 +8251,7 @@ class GptOssModel(TextModel): self.gguf_writer.add_rope_scaling_orig_ctx_len(rope_scaling.get("original_max_position_embeddings", 4096)) -@ModelBase.register("Lfm2ForCausalLM") -@ModelBase.register("LFM2ForCausalLM") +@ModelBase.register("Lfm2ForCausalLM", "LFM2ForCausalLM") class LFM2Model(TextModel): model_arch = gguf.MODEL_ARCH.LFM2 @@ -8287,6 +8286,13 @@ class LFM2Model(TextModel): self._add_feed_forward_length() def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + is_vision_tensor = "vision_tower" in name or "multi_modal_projector" in name + if is_vision_tensor: + # skip vision tensors + return [] + + name = name.replace("language_model.", "") + # conv op requires 2d tensor if 'conv.conv' in name: data_torch = data_torch.squeeze(1) @@ -8294,6 +8300,41 @@ class LFM2Model(TextModel): return [(self.map_tensor_name(name), data_torch)] +@ModelBase.register("Lfm2VlForConditionalGeneration") +class LFM2VLModel(MmprojModel): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + assert self.hparams_vision is not None + # TODO(tarek): for dynamic resolution image_size is not specified, setting here for compatibility + self.hparams_vision["image_size"] = 256 + + def set_gguf_parameters(self): + super().set_gguf_parameters() + self.gguf_writer.add_clip_projector_type(gguf.VisionProjectorType.LFM2) + self.gguf_writer.add_vision_attention_layernorm_eps(self.find_vparam(["layer_norm_eps"])) + self.gguf_writer.add_vision_projector_scale_factor(self.global_config.get("downsample_factor", 2)) + self.gguf_writer.add_vision_use_gelu(True) + # python notation, e.g. for vision_feature_layer == -1, we pick last layer -> vision_feature_layers_to_drop = 0 + vision_feature_layers_to_drop = -(self.global_config.get("vision_feature_layer", -1) + 1) + self.gguf_writer.add_vision_block_count(self.find_vparam(self.n_block_keys) - vision_feature_layers_to_drop) + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + del bid # unused + is_vision_tensor = "vision_tower" in name or "multi_modal_projector" in name + + if is_vision_tensor: + # remove "model." prefix + name = name.replace("model.vision_tower.", "vision_tower.") + name = name.replace("model.multi_modal_projector.", "multi_modal_projector.") + + if "patch_embedding.weight" in name: + data_torch = data_torch.view(data_torch.shape[0], 16, 16, 3).permute(0, 3, 1, 2) + + return [(self.map_tensor_name(name), data_torch)] + + return [] # skip other tensors + + @ModelBase.register("SmallThinkerForCausalLM") class SmallThinkerModel(TextModel): model_arch = gguf.MODEL_ARCH.SMALLTHINKER diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 911eea504a..41804f3a2b 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -2832,6 +2832,7 @@ class VisionProjectorType: QWEN2A = "qwen2a" # audio QWEN25O = "qwen2.5o" # omni VOXTRAL = "voxtral" + LFM2 = "lfm2" # Items here are (block size, type size) diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index c5c2798090..87edaa3232 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -1272,6 +1272,7 @@ class TensorNameMap: MODEL_TENSOR.V_MM_INP_NORM: ( "multi_modal_projector.norm", + "multi_modal_projector.layer_norm", "pre_mm_projector_norm", ), diff --git a/tools/mtmd/clip-impl.h b/tools/mtmd/clip-impl.h index f1eb633369..706ed2e3b5 100644 --- a/tools/mtmd/clip-impl.h +++ b/tools/mtmd/clip-impl.h @@ -82,6 +82,7 @@ #define TN_MVLM_PROJ_PEG "mm.model.peg.%d.%s" #define TN_IMAGE_NEWLINE "model.image_newline" #define TN_MM_INP_NORM "mm.input_norm.weight" +#define TN_MM_INP_NORM_B "mm.input_norm.bias" #define TN_MM_INP_PROJ "mm.input_projection.weight" // gemma3 #define TN_MM_SOFT_EMB_N "mm.soft_emb_norm.weight" // gemma3 #define TN_MM_PROJECTOR "mm.model.fc.weight" // idefics3 @@ -133,6 +134,7 @@ enum projector_type { PROJECTOR_TYPE_QWEN2A, PROJECTOR_TYPE_QWEN25O, // will be replaced by QWEN2A or QWEN25VL depending on clip_ctx PROJECTOR_TYPE_VOXTRAL, + PROJECTOR_TYPE_LFM2, PROJECTOR_TYPE_UNKNOWN, }; @@ -153,6 +155,7 @@ static std::map PROJECTOR_TYPE_NAMES = { { PROJECTOR_TYPE_QWEN2A, "qwen2a"}, { PROJECTOR_TYPE_QWEN25O, "qwen2.5o"}, { PROJECTOR_TYPE_VOXTRAL, "voxtral"}, + { PROJECTOR_TYPE_LFM2, "lfm2"}, }; static projector_type clip_projector_type_from_string(const std::string & str) { diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index fdaf9738e8..c27f8ebbd9 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -265,6 +265,7 @@ struct clip_model { // LLaVA projection ggml_tensor * mm_input_norm_w = nullptr; + ggml_tensor * mm_input_norm_b = nullptr; ggml_tensor * mm_0_w = nullptr; ggml_tensor * mm_0_b = nullptr; ggml_tensor * mm_2_w = nullptr; @@ -488,11 +489,17 @@ struct clip_graph { ggml_cgraph * build_siglip() { ggml_tensor * inp = build_inp(); + + ggml_tensor * learned_pos_embd = model.position_embeddings; + if (ctx->proj_type() == PROJECTOR_TYPE_LFM2) { + learned_pos_embd = resize_position_embeddings(); + } + ggml_tensor * cur = build_vit( inp, n_patches, NORM_TYPE_NORMAL, hparams.ffn_op, - model.position_embeddings, + learned_pos_embd, nullptr); if (ctx->proj_type() == PROJECTOR_TYPE_GEMMA3) { @@ -542,6 +549,45 @@ struct clip_graph { bsz); cur = ggml_mul_mat(ctx0, model.projection, cur); + } else if (ctx->proj_type() == PROJECTOR_TYPE_LFM2) { + // pixel unshuffle block + const int scale_factor = model.hparams.proj_scale_factor; + GGML_ASSERT(scale_factor > 1); + + const int n_embd = cur->ne[0]; + int width = img.nx / patch_size; + int height = img.ny / patch_size; + + // pad width and height to factor + const int64_t pad_width = CLIP_ALIGN(width, scale_factor) - width; + const int64_t pad_height = CLIP_ALIGN(height, scale_factor) - height; + cur = ggml_reshape_3d(ctx0, cur, n_embd, width, height); + if (pad_width || pad_height) { + cur = ggml_pad(ctx0, cur, 0, pad_width, pad_height, 0); + width += pad_width; + height += pad_height; + } + + // unshuffle h + cur = ggml_reshape_3d(ctx0, cur, n_embd * scale_factor, width / scale_factor, height); + cur = ggml_cont(ctx0, ggml_permute(ctx0, cur, 0, 2, 1, 3)); + + // unshuffle w + cur = ggml_reshape_3d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor); + cur = ggml_cont(ctx0, ggml_permute(ctx0, cur, 0, 2, 1, 3)); + + cur = ggml_reshape_2d(ctx0, cur, cur->ne[0], cur->ne[1] * cur->ne[2]); + + // projection + cur = ggml_norm(ctx0, cur, 1e-5); // default nn.LayerNorm + cur = ggml_mul(ctx0, cur, model.mm_input_norm_w); + cur = ggml_add(ctx0, cur, model.mm_input_norm_b); + + cur = ggml_mul_mat(ctx0, model.mm_1_w, cur); + cur = ggml_add(ctx0, cur, model.mm_1_b); + cur = ggml_gelu(ctx0, cur); + cur = ggml_mul_mat(ctx0, model.mm_2_w, cur); + cur = ggml_add(ctx0, cur, model.mm_2_b); } else { GGML_ABORT("SigLIP: Unsupported projector type"); } @@ -1560,6 +1606,27 @@ private: } } + // siglip2 naflex + ggml_tensor * resize_position_embeddings() { + ggml_tensor * pos_embd = model.position_embeddings; + const int height = img.ny / patch_size; + const int width = img.nx / patch_size; + + if (!pos_embd || height * width == pos_embd->ne[1]) { + return pos_embd; + } + + const int n_pos_embd = std::sqrt(pos_embd->ne[1]); + pos_embd = ggml_reshape_3d(ctx0, pos_embd, n_embd, n_pos_embd, n_pos_embd); // -> (n_embd, n_pos_embd, n_pos_embd) + pos_embd = ggml_permute(ctx0, pos_embd, 2, 0, 1, 3); // -> (n_pos_embd, n_pos_embd, n_embd) + pos_embd = ggml_interpolate(ctx0, pos_embd, width, height, n_embd, 1, 1); // -> (width, height, n_embd) + pos_embd = ggml_reshape_2d(ctx0, pos_embd, height * width, n_embd); // -> (height * width, n_embd) + pos_embd = ggml_transpose(ctx0, pos_embd); // -> (n_embd, height * width) + pos_embd = ggml_cont(ctx0, pos_embd); + + return pos_embd; + } + // build vision transformer (ViT) cgraph // this function should cover most of the models // if your model has specific features, you should probably duplicate this function @@ -1966,6 +2033,7 @@ static ggml_cgraph * clip_image_build_graph(clip_ctx * ctx, const clip_image_f32 switch (ctx->proj_type()) { case PROJECTOR_TYPE_GEMMA3: case PROJECTOR_TYPE_IDEFICS3: + case PROJECTOR_TYPE_LFM2: { res = graph.build_siglip(); } break; @@ -2230,6 +2298,7 @@ struct clip_model_loader { } } break; case PROJECTOR_TYPE_IDEFICS3: + case PROJECTOR_TYPE_LFM2: case PROJECTOR_TYPE_INTERNVL: { get_u32(KEY_PROJ_SCALE_FACTOR, hparams.proj_scale_factor, false); @@ -2533,6 +2602,15 @@ struct clip_model_loader { { model.projection = get_tensor(TN_MM_PROJECTOR); } break; + case PROJECTOR_TYPE_LFM2: + { + model.mm_input_norm_w = get_tensor(TN_MM_INP_NORM); + model.mm_input_norm_b = get_tensor(TN_MM_INP_NORM_B); + model.mm_1_w = get_tensor(string_format(TN_LLAVA_PROJ, 1, "weight")); + model.mm_1_b = get_tensor(string_format(TN_LLAVA_PROJ, 1, "bias")); + model.mm_2_w = get_tensor(string_format(TN_LLAVA_PROJ, 2, "weight")); + model.mm_2_b = get_tensor(string_format(TN_LLAVA_PROJ, 2, "bias")); + } break; case PROJECTOR_TYPE_PIXTRAL: { model.mm_1_w = get_tensor(string_format(TN_LLAVA_PROJ, 1, "weight")); @@ -3428,6 +3506,43 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, str res_imgs->grid_y = inst.grid_size.height; return true; + } else if (ctx->proj_type() == PROJECTOR_TYPE_LFM2) { + GGML_ASSERT(params.proj_scale_factor); + + // smart resize + const int width = img->nx; + const int height = img->ny; + const int total_factor = params.patch_size * params.proj_scale_factor; + constexpr int min_image_tokens = 64; + constexpr int max_image_tokens = 256; + const float min_pixels = min_image_tokens * total_factor * total_factor; + const float max_pixels = max_image_tokens * total_factor * total_factor; + + auto round_by_factor = [f = total_factor](float x) { return static_cast(std::nearbyintf(x / static_cast(f))) * f; }; + auto ceil_by_factor = [f = total_factor](float x) { return static_cast(std::ceil(x / static_cast(f))) * f; }; + auto floor_by_factor = [f = total_factor](float x) { return static_cast(std::floor(x / static_cast(f))) * f; }; + + int h_bar = std::max(total_factor, round_by_factor(height)); + int w_bar = std::max(total_factor, round_by_factor(width)); + + if (h_bar * w_bar > max_pixels) { + const auto beta = std::sqrt((height * width) / max_pixels); + h_bar = std::max(total_factor, floor_by_factor(height / beta)); + w_bar = std::max(total_factor, floor_by_factor(width / beta)); + } else if (h_bar * w_bar < min_pixels) { + const auto beta = std::sqrt(min_pixels / (height * width)); + h_bar = ceil_by_factor(height * beta); + w_bar = ceil_by_factor(width * beta); + } + + const std::array pad_color = {122, 116, 104}; + + clip_image_u8 resized_img; + image_manipulation::resize_and_pad_image(*img, resized_img, clip_image_size{w_bar, h_bar}, pad_color); + clip_image_f32_ptr res(clip_image_f32_init()); + normalize_image_u8_to_f32(resized_img, *res, params.image_mean, params.image_std); + res_imgs->entries.push_back(std::move(res)); + return true; } // the logic below is to pad the shorter side to the longer side with a background color: rgb(122, 116, 104) @@ -3630,6 +3745,10 @@ int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * im n_patches_sq /= 2; } } break; + case PROJECTOR_TYPE_LFM2: + { + n_patches_sq = (img->nx / (params.patch_size * params.proj_scale_factor)) * (img->ny / (params.patch_size * params.proj_scale_factor)); + } break; default: GGML_ABORT("unsupported projector type"); } @@ -4034,6 +4153,7 @@ bool clip_image_batch_encode(clip_ctx * ctx, const int n_threads, const clip_ima case PROJECTOR_TYPE_INTERNVL: case PROJECTOR_TYPE_QWEN2A: case PROJECTOR_TYPE_ULTRAVOX: + case PROJECTOR_TYPE_LFM2: case PROJECTOR_TYPE_VOXTRAL: { // do nothing @@ -4135,6 +4255,8 @@ int clip_n_mmproj_embd(const struct clip_ctx * ctx) { return ctx->model.mm_model_proj->ne[1]; case PROJECTOR_TYPE_QWEN2A: return ctx->model.mm_fc_w->ne[1]; + case PROJECTOR_TYPE_LFM2: + return ctx->model.mm_2_w->ne[1]; default: GGML_ABORT("Unknown projector type"); } From de5627910df74298c998e6bb36ee3217375a5719 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 17 Aug 2025 03:41:45 -0500 Subject: [PATCH 015/174] vulkan: Optimize argsort (#15354) - Launch an appropriate number of invocations (next larger power of two). 32 invocations is common and the barrier is much cheaper there. - Specialize for "needs bounds checking" vs not. - Make the code less branchy and [[unroll]] the loops. In the final code, I see no branches inside the main loop (only predicated stores) when needs_bounds_check is false. - Always sort ascending, then apply the ascending vs descending option when doing the final stores to memory. - Copy the values into shared memory, makes them slightly cheaper to access. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 24 +++---- .../ggml-vulkan/vulkan-shaders/argsort.comp | 68 +++++++++++-------- tests/test-backend-ops.cpp | 1 + 3 files changed, 51 insertions(+), 42 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 20674bee58..4ecfb82566 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -345,6 +345,9 @@ enum vk_conv_shapes { CONV_SHAPE_COUNT, }; +static constexpr uint32_t num_argsort_pipelines = 11; +static constexpr uint32_t max_argsort_cols = 1 << (num_argsort_pipelines-1); + struct vk_device_struct { std::recursive_mutex mutex; @@ -505,7 +508,7 @@ struct vk_device_struct { vk_pipeline pipeline_rope_neox_f32, pipeline_rope_neox_f16; vk_pipeline pipeline_rope_multi_f32, pipeline_rope_multi_f16; vk_pipeline pipeline_rope_vision_f32, pipeline_rope_vision_f16; - vk_pipeline pipeline_argsort_f32; + vk_pipeline pipeline_argsort_f32[num_argsort_pipelines]; vk_pipeline pipeline_sum_rows_f32; vk_pipeline pipeline_argmax_f32; vk_pipeline pipeline_count_equal_i32; @@ -870,7 +873,6 @@ struct vk_op_soft_max_push_constants { struct vk_op_argsort_push_constants { uint32_t ncols; - uint32_t ncols_pad; int32_t order; }; @@ -3099,7 +3101,9 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_rope_vision_f16, "rope_vision_f16", rope_vision_f16_len, rope_vision_f16_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1); } - ggml_vk_create_pipeline(device, device->pipeline_argsort_f32, "argsort_f32", argsort_f32_len, argsort_f32_data, "main", 2, sizeof(vk_op_argsort_push_constants), {1024, 1, 1}, {}, 1); + for (uint32_t i = 0; i < num_argsort_pipelines; ++i) { + ggml_vk_create_pipeline(device, device->pipeline_argsort_f32[i], "argsort_f32_"+std::to_string(i), argsort_f32_len, argsort_f32_data, "main", 2, sizeof(vk_op_argsort_push_constants), {1u<pipeline_argmax_f32, "argmax_f32", argmax_f32_len, argmax_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, { device->subgroup_size }, 1); @@ -7160,7 +7164,8 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const } case GGML_OP_ARGSORT: if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_I32) { - return ctx->device->pipeline_argsort_f32; + uint32_t idx = (uint32_t)ceilf(log2f(float(dst->ne[0]))); + return ctx->device->pipeline_argsort_f32[idx]; } return nullptr; case GGML_OP_SUM: @@ -8485,16 +8490,8 @@ static void ggml_vk_argsort(ggml_backend_vk_context * ctx, vk_context& subctx, c uint32_t ncols = src0->ne[0]; - uint32_t ncols_pad = 1; - while (ncols_pad < ncols) { - ncols_pad *= 2; - } - - GGML_ASSERT(ncols_pad <= 1024); - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_ARGSORT, { ncols, - ncols_pad, op_params[0], }, dryrun); } @@ -11367,6 +11364,8 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm case GGML_OP_OPT_STEP_ADAMW: case GGML_OP_OPT_STEP_SGD: return op->src[0]->type == GGML_TYPE_F32; + case GGML_OP_ARGSORT: + return op->ne[0] <= max_argsort_cols; case GGML_OP_UPSCALE: case GGML_OP_ACC: case GGML_OP_CONCAT: @@ -11376,7 +11375,6 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm case GGML_OP_DIAG_MASK_INF: case GGML_OP_SOFT_MAX: case GGML_OP_SOFT_MAX_BACK: - case GGML_OP_ARGSORT: case GGML_OP_SUM: case GGML_OP_SUM_ROWS: case GGML_OP_ARGMAX: diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/argsort.comp b/ggml/src/ggml-vulkan/vulkan-shaders/argsort.comp index d4fa45b1e1..dc53a401e0 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/argsort.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/argsort.comp @@ -1,22 +1,24 @@ #version 450 +#extension GL_EXT_control_flow_attributes : enable #include "types.comp" -#define BLOCK_SIZE 1024 +layout(constant_id = 0) const int BLOCK_SIZE = 1024; +layout(constant_id = 1) const int BLOCK_SIZE_LOG2 = 10; #define ASC 0 -layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; +layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; layout (binding = 1) buffer D {int data_d[];}; layout (push_constant) uniform parameter { uint ncols; - uint ncols_pad; uint order; } p; shared int dst_row[BLOCK_SIZE]; +shared A_TYPE a_sh[BLOCK_SIZE]; void swap(uint idx0, uint idx1) { int tmp = dst_row[idx0]; @@ -24,7 +26,7 @@ void swap(uint idx0, uint idx1) { dst_row[idx1] = tmp; } -void main() { +void argsort(bool needs_bounds_check) { // bitonic sort const int col = int(gl_LocalInvocationID.x); const uint row = gl_WorkGroupID.y; @@ -32,38 +34,46 @@ void main() { const uint row_offset = row * p.ncols; // initialize indices - if (col < p.ncols_pad) { - dst_row[col] = col; - } + dst_row[col] = col; + a_sh[col] = data_a[row_offset + col]; barrier(); - for (uint k = 2; k <= p.ncols_pad; k *= 2) { - for (uint j = k / 2; j > 0; j /= 2) { - const uint ixj = col ^ j; - if (col < p.ncols_pad && ixj > col) { - if ((col & k) == 0) { - if (dst_row[col] >= p.ncols || - (dst_row[ixj] < p.ncols && (p.order == ASC ? - data_a[row_offset + dst_row[col]] > data_a[row_offset + dst_row[ixj]] : - data_a[row_offset + dst_row[col]] < data_a[row_offset + dst_row[ixj]])) - ) { - swap(col, ixj); - } - } else { - if (dst_row[ixj] >= p.ncols || - (dst_row[col] < p.ncols && (p.order == ASC ? - data_a[row_offset + dst_row[col]] < data_a[row_offset + dst_row[ixj]] : - data_a[row_offset + dst_row[col]] > data_a[row_offset + dst_row[ixj]])) - ) { - swap(col, ixj); - } - } + uint num_outer_loop_iters = BLOCK_SIZE_LOG2; + [[unroll]] for (uint k = 2, outer_idx = 0; outer_idx < num_outer_loop_iters; k *= 2, outer_idx++) { + uint num_inner_loop_iters = outer_idx + 1; + [[unroll]] for (uint j = k / 2, inner_idx = 0; inner_idx < num_inner_loop_iters; j /= 2, inner_idx++) { + const int ixj = int(col ^ j); + + int idx_0 = (col & k) == 0 ? col : ixj; + int idx_1 = (col & k) == 0 ? ixj : col; + + int sh_idx_0 = dst_row[idx_0]; + int sh_idx_1 = dst_row[idx_1]; + bool idx_0_oob = needs_bounds_check ? sh_idx_0 >= p.ncols : false; + bool idx_1_oob = needs_bounds_check ? sh_idx_1 >= p.ncols : false; + + if ((idx_0_oob || + (!idx_1_oob && a_sh[sh_idx_0] > a_sh[sh_idx_1])) && (ixj > col)) { + swap(idx_0, idx_1); } + barrier(); } } if (col < p.ncols) { - data_d[row_offset + col] = dst_row[col]; + if (p.order == ASC) { + data_d[row_offset + col] = dst_row[col]; + } else { + data_d[row_offset + p.ncols - col - 1] = dst_row[col]; + } + } +} + +void main() { + if (p.ncols == BLOCK_SIZE) { + argsort(false); + } else { + argsort(true); } } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 0df5ebb565..4623605f66 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6028,6 +6028,7 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {8, 1, 1, 1}, order)); test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {16, 10, 10, 10}, order)); test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {60, 10, 10, 10}, order)); // qwen + test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {1024, 1, 1, 1}, order)); } for (ggml_scale_mode mode : {GGML_SCALE_MODE_NEAREST, GGML_SCALE_MODE_BILINEAR}) { From b143fbc87af0324aa49e16cd91faf3ba8bb22231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Sun, 17 Aug 2025 13:30:23 +0200 Subject: [PATCH 016/174] ci : fix hang in windows-hip build/release (#15365) * fix hang in windows-latest-cmake-hip * apply fix to release as well --- .github/workflows/build.yml | 3 ++- .github/workflows/release.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 83aaea9947..43553ac13b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1070,7 +1070,8 @@ jobs: write-host "Downloading AMD HIP SDK Installer" Invoke-WebRequest -Uri "https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-24.Q3-WinSvr2022-For-HIP.exe" -OutFile "${env:RUNNER_TEMP}\rocm-install.exe" write-host "Installing AMD HIP SDK" - Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -Wait + $proc = Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -PassThru + $proc.WaitForExit(600000) write-host "Completed AMD HIP SDK installation" - name: Verify ROCm diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9ebb0236fa..5367637e42 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -557,7 +557,8 @@ jobs: write-host "Downloading AMD HIP SDK Installer" Invoke-WebRequest -Uri "https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-24.Q3-WinSvr2022-For-HIP.exe" -OutFile "${env:RUNNER_TEMP}\rocm-install.exe" write-host "Installing AMD HIP SDK" - Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -Wait + $proc = Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -PassThru + $proc.WaitForExit(600000) write-host "Completed AMD HIP SDK installation" - name: Verify ROCm From 4d196981d4db79e0105b939eaa7ecd40385b721c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Sun, 17 Aug 2025 14:47:42 +0200 Subject: [PATCH 017/174] convert : force patch_embd weights to F16 or F32 to avoid broken GGUFs (#15367) * force patch_embd weights to f32 * use MmprojModel base tensor_force_quant instead --- convert_hf_to_gguf.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index bd21e55f4a..b45c8f1d7f 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -1334,6 +1334,12 @@ class MmprojModel(ModelBase): return None raise KeyError(f"could not find any of: {keys}") + def tensor_force_quant(self, name, new_name, bid, n_dims): + del bid, name, n_dims # unused + if ".patch_embd.weight" in new_name: + return gguf.GGMLQuantizationType.F16 if self.ftype == gguf.LlamaFileType.MOSTLY_F16 else gguf.GGMLQuantizationType.F32 + return False + @ModelBase.register("GPTNeoXForCausalLM") class GPTNeoXModel(TextModel): @@ -2305,10 +2311,9 @@ class SmolVLMModel(MmprojModel): self.gguf_writer.add_vision_use_gelu(True) def tensor_force_quant(self, name, new_name, bid, n_dims): - del bid, new_name, n_dims # unused if ".embeddings." in name: return gguf.GGMLQuantizationType.F32 - return False + return super().tensor_force_quant(name, new_name, bid, n_dims) def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: del bid # unused @@ -3296,12 +3301,9 @@ class Qwen2VLVisionModel(MmprojModel): self.gguf_writer.add_vision_attention_layernorm_eps(self.global_config.get("rms_norm_eps", 1e-6)) def tensor_force_quant(self, name, new_name, bid, n_dims): - del bid, name, n_dims # unused - if ".patch_embd." in new_name: - return gguf.GGMLQuantizationType.F16 if ".position_embd." in new_name: return gguf.GGMLQuantizationType.F32 - return False + return super().tensor_force_quant(name, new_name, bid, n_dims) def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: del bid # unused @@ -3374,10 +3376,9 @@ class Qwen25OmniModel(Qwen2VLVisionModel): yield ("audio_tower.embed_positions.weight", pos_embd) def tensor_force_quant(self, name, new_name, bid, n_dims): - del bid, new_name, n_dims # unused if ".conv" in name and ".weight" in name: return gguf.GGMLQuantizationType.F16 - return False + return super().tensor_force_quant(name, new_name, bid, n_dims) def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: if name.startswith("thinker."): @@ -3423,12 +3424,9 @@ class InternVisionModel(MmprojModel): self.gguf_writer.add_vision_projector_scale_factor(int(1.0 / downsample_ratio)) def tensor_force_quant(self, name, new_name, bid, n_dims): - del bid, name, n_dims # unused - if ".patch_embd." in new_name: - return gguf.GGMLQuantizationType.F16 if ".position_embd." in new_name: return gguf.GGMLQuantizationType.F32 - return False + return super().tensor_force_quant(name, new_name, bid, n_dims) def _mapping_interns1_name(self, name): names_map = { @@ -5062,13 +5060,12 @@ class Gemma3VisionModel(MmprojModel): self.gguf_writer.add_vision_projector_scale_factor(proj_scale_factor) def tensor_force_quant(self, name, new_name, bid, n_dims): - del bid, new_name, n_dims # unused # related to https://github.com/ggml-org/llama.cpp/issues/13025 if "input_projection" in name: return gguf.GGMLQuantizationType.F16 if ".embeddings." in name: return gguf.GGMLQuantizationType.F32 - return False + return super().tensor_force_quant(name, new_name, bid, n_dims) def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: del bid # unused @@ -7727,10 +7724,9 @@ class WhisperEncoderModel(MmprojModel): self.gguf_writer.add_audio_attention_layernorm_eps(self.hparams.get("layer_norm_eps", 1e-5)) def tensor_force_quant(self, name, new_name, bid, n_dims): - del bid, new_name, n_dims # unused if ".conv" in name and ".weight" in name: return gguf.GGMLQuantizationType.F16 - return False + return super().tensor_force_quant(name, new_name, bid, n_dims) def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: del bid # unused From 19f4decae0ead52debe56095ba8d693b4f14e4df Mon Sep 17 00:00:00 2001 From: Dong Won Kim <63934649+ddwkim@users.noreply.github.com> Date: Sun, 17 Aug 2025 23:03:09 +0900 Subject: [PATCH 018/174] vulkan: support sqrt (#15370) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 23 +++++++++++++++++++ ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp | 17 ++++++++++++++ .../vulkan-shaders/vulkan-shaders-gen.cpp | 2 ++ 3 files changed, 42 insertions(+) create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 4ecfb82566..bc227ffb9f 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -464,6 +464,7 @@ struct vk_device_struct { vk_pipeline pipeline_upscale_nearest_f32, pipeline_upscale_bilinear_f32, pipeline_upscale_bilinear_ac_f32; vk_pipeline pipeline_scale_f32; vk_pipeline pipeline_sqr_f32; + vk_pipeline pipeline_sqrt_f32; vk_pipeline pipeline_sin_f32; vk_pipeline pipeline_cos_f32; vk_pipeline pipeline_clamp_f32; @@ -3031,6 +3032,7 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_sqr_f32, "sqr_f32", sqr_f32_len, sqr_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); + ggml_vk_create_pipeline(device, device->pipeline_sqrt_f32, "sqrt_f32", sqrt_f32_len, sqrt_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_sin_f32, "sin_f32", sin_f32_len, sin_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_cos_f32, "cos_f32", cos_f32_len, cos_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); @@ -6981,6 +6983,11 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const return ctx->device->pipeline_sqr_f32; } return nullptr; + case GGML_OP_SQRT: + if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { + return ctx->device->pipeline_sqrt_f32; + } + return nullptr; case GGML_OP_SIN: if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { return ctx->device->pipeline_sin_f32; @@ -7290,6 +7297,7 @@ static bool ggml_vk_op_supports_incontiguous(ggml_op op) { case GGML_OP_CONCAT: case GGML_OP_UPSCALE: case GGML_OP_SQR: + case GGML_OP_SQRT: case GGML_OP_SIN: case GGML_OP_COS: case GGML_OP_CLAMP: @@ -7595,6 +7603,7 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co case GGML_OP_MUL: case GGML_OP_SCALE: case GGML_OP_SQR: + case GGML_OP_SQRT: case GGML_OP_SIN: case GGML_OP_COS: case GGML_OP_CLAMP: @@ -8242,6 +8251,10 @@ static void ggml_vk_sqr(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SQR, vk_op_unary_push_constants_init(src0, dst), dryrun); } +static void ggml_vk_sqrt(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { + ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SQRT, vk_op_unary_push_constants_init(src0, dst), dryrun); +} + static void ggml_vk_sin(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SIN, vk_op_unary_push_constants_init(src0, dst), dryrun); } @@ -9697,6 +9710,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr case GGML_OP_UPSCALE: case GGML_OP_SCALE: case GGML_OP_SQR: + case GGML_OP_SQRT: case GGML_OP_SIN: case GGML_OP_COS: case GGML_OP_CLAMP: @@ -9766,6 +9780,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr case GGML_OP_UPSCALE: case GGML_OP_SCALE: case GGML_OP_SQR: + case GGML_OP_SQRT: case GGML_OP_SIN: case GGML_OP_COS: case GGML_OP_CLAMP: @@ -9867,6 +9882,10 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr case GGML_OP_SQR: ggml_vk_sqr(ctx, compute_ctx, src0, node, dryrun); + break; + case GGML_OP_SQRT: + ggml_vk_sqrt(ctx, compute_ctx, src0, node, dryrun); + break; case GGML_OP_SIN: ggml_vk_sin(ctx, compute_ctx, src0, node, dryrun); @@ -10118,6 +10137,7 @@ static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_cgraph * case GGML_OP_UPSCALE: case GGML_OP_SCALE: case GGML_OP_SQR: + case GGML_OP_SQRT: case GGML_OP_SIN: case GGML_OP_COS: case GGML_OP_CLAMP: @@ -11357,6 +11377,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm case GGML_OP_SILU_BACK: case GGML_OP_RMS_NORM_BACK: case GGML_OP_SQR: + case GGML_OP_SQRT: case GGML_OP_SIN: case GGML_OP_COS: case GGML_OP_CLAMP: @@ -11801,6 +11822,8 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * tensor_clone = ggml_scale_bias(ggml_ctx, src_clone[0], params[0], params[1]); } else if (tensor->op == GGML_OP_SQR) { tensor_clone = ggml_sqr(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_SQRT) { + tensor_clone = ggml_sqrt(ggml_ctx, src_clone[0]); } else if (tensor->op == GGML_OP_SIN) { tensor_clone = ggml_sin(ggml_ctx, src_clone[0]); } else if (tensor->op == GGML_OP_COS) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp b/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp new file mode 100644 index 0000000000..4bc697b9b9 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/sqrt.comp @@ -0,0 +1,17 @@ +#version 450 + +#include "types.comp" +#include "generic_unary_head.comp" + +layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; + +void main() { + const uint idx = get_idx(); + + if (idx >= p.ne) { + return; + } + + const FLOAT_TYPE val = FLOAT_TYPE(data_a[get_aoffset() + src0_idx(idx)]); + data_d[get_doffset() + dst_idx(idx)] = D_TYPE(sqrt(val)); +} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 67a9ee422b..8c6627dee4 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -566,6 +566,8 @@ void process_shaders() { string_to_spv("sqr_f32", "square.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}}); + string_to_spv("sqrt_f32", "sqrt.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}}); + string_to_spv("sin_f32", "sin.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}}); string_to_spv("cos_f32", "cos.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}}); From 21c17b5befc5f6be5992bc87fc1ba99d388561df Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 17 Aug 2025 11:08:57 -0500 Subject: [PATCH 019/174] vulkan: Use larger workgroups for mul_mat_vec when M is small (#15355) * vulkan: Use larger workgroups for mul_mat_vec when M is small Also use subgroup instructions for (part of) the reduction when supported. Without this, the more expensive reductions would eat into the benefits of the larger workgroups. * update heuristic for amd/intel Co-authored-by: 0cc4m --------- Co-authored-by: 0cc4m --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 134 +++++++++++------- .../vulkan-shaders/mul_mat_vec_base.comp | 38 ++++- .../vulkan-shaders/vulkan-shaders-gen.cpp | 15 ++ 3 files changed, 134 insertions(+), 53 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index bc227ffb9f..7ef938066b 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -345,6 +345,12 @@ enum vk_conv_shapes { CONV_SHAPE_COUNT, }; +enum dmmv_wg_sizes { + DMMV_WG_SIZE_SUBGROUP, + DMMV_WG_SIZE_LARGE, + DMMV_WG_SIZE_COUNT, +}; + static constexpr uint32_t num_argsort_pipelines = 11; static constexpr uint32_t max_argsort_cols = 1 << (num_argsort_pipelines-1); @@ -435,8 +441,8 @@ struct vk_device_struct { vk_pipeline pipeline_quantize_q8_1; vk_pipeline pipeline_dequant[GGML_TYPE_COUNT]; - vk_pipeline pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_COUNT][mul_mat_vec_max_cols]; - vk_pipeline pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_COUNT][mul_mat_vec_max_cols]; + vk_pipeline pipeline_dequant_mul_mat_vec_f32_f32[DMMV_WG_SIZE_COUNT][GGML_TYPE_COUNT][mul_mat_vec_max_cols]; + vk_pipeline pipeline_dequant_mul_mat_vec_f16_f32[DMMV_WG_SIZE_COUNT][GGML_TYPE_COUNT][mul_mat_vec_max_cols]; vk_pipeline pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_COUNT]; vk_pipeline pipeline_mul_mat_vec_p021_f16_f32[p021_max_gqa_ratio]; @@ -2773,54 +2779,61 @@ static void ggml_vk_load_shaders(vk_device& device) { rm_stdq = 2; uint32_t rm_iq = 2 * rm_kq; - for (uint32_t i = 0; i < mul_mat_vec_max_cols; ++i) { - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f32_f32_"+std::to_string(i+1), mul_mat_vec_f32_f32_f32_len, mul_mat_vec_f32_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {device->subgroup_size, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f32_f32_"+std::to_string(i+1), mul_mat_vec_f16_f32_f32_len, mul_mat_vec_f16_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {device->subgroup_size, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f32_f32_"+std::to_string(i+1), mul_mat_vec_bf16_f32_f32_len, mul_mat_vec_bf16_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {device->subgroup_size, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f32_f32_"+std::to_string(i+1), mul_mat_vec_q4_0_f32_f32_len, mul_mat_vec_q4_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f32_f32_"+std::to_string(i+1), mul_mat_vec_q4_1_f32_f32_len, mul_mat_vec_q4_1_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f32_f32_"+std::to_string(i+1), mul_mat_vec_q5_0_f32_f32_len, mul_mat_vec_q5_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f32_f32_"+std::to_string(i+1), mul_mat_vec_q5_1_f32_f32_len, mul_mat_vec_q5_1_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f32_f32_"+std::to_string(i+1), mul_mat_vec_q8_0_f32_f32_len, mul_mat_vec_q8_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {device->subgroup_size, 1*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f32_f32_"+std::to_string(i+1), mul_mat_vec_q2_k_f32_f32_len, mul_mat_vec_q2_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f32_f32_"+std::to_string(i+1), mul_mat_vec_q3_k_f32_f32_len, mul_mat_vec_q3_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f32_f32_"+std::to_string(i+1), mul_mat_vec_q4_k_f32_f32_len, mul_mat_vec_q4_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f32_f32_"+std::to_string(i+1), mul_mat_vec_q5_k_f32_f32_len, mul_mat_vec_q5_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f32_f32_"+std::to_string(i+1), mul_mat_vec_q6_k_f32_f32_len, mul_mat_vec_q6_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq1_s_f32_f32_len, mul_mat_vec_iq1_s_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq1_m_f32_f32_len, mul_mat_vec_iq1_m_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq2_xxs_f32_f32_len, mul_mat_vec_iq2_xxs_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq2_xs_f32_f32_len, mul_mat_vec_iq2_xs_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq2_s_f32_f32_len, mul_mat_vec_iq2_s_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq3_xxs_f32_f32_len, mul_mat_vec_iq3_xxs_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq3_s_f32_f32_len, mul_mat_vec_iq3_s_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq4_xs_f32_f32_len, mul_mat_vec_iq4_xs_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f32_f32_"+std::to_string(i+1), mul_mat_vec_iq4_nl_f32_f32_len, mul_mat_vec_iq4_nl_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f32_f32_"+std::to_string(i+1), mul_mat_vec_mxfp4_f32_f32_len, mul_mat_vec_mxfp4_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); + for (uint32_t w = 0; w < DMMV_WG_SIZE_COUNT; ++w) { + uint32_t wg_size_subgroup16 = (w == DMMV_WG_SIZE_SUBGROUP) ? subgroup_size_16 : (subgroup_size_16 * 4); + uint32_t wg_size_subgroup = (w == DMMV_WG_SIZE_SUBGROUP) ? device->subgroup_size : (device->subgroup_size * 4); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f16_f32_"+std::to_string(i+1), mul_mat_vec_f32_f16_f32_len, mul_mat_vec_f32_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {device->subgroup_size, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f16_f32_"+std::to_string(i+1), mul_mat_vec_f16_f16_f32_len, mul_mat_vec_f16_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {device->subgroup_size, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f16_f32_"+std::to_string(i+1), mul_mat_vec_bf16_f16_f32_len, mul_mat_vec_bf16_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {device->subgroup_size, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f16_f32_"+std::to_string(i+1), mul_mat_vec_q4_0_f16_f32_len, mul_mat_vec_q4_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f16_f32_"+std::to_string(i+1), mul_mat_vec_q4_1_f16_f32_len, mul_mat_vec_q4_1_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f16_f32_"+std::to_string(i+1), mul_mat_vec_q5_0_f16_f32_len, mul_mat_vec_q5_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f16_f32_"+std::to_string(i+1), mul_mat_vec_q5_1_f16_f32_len, mul_mat_vec_q5_1_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {device->subgroup_size, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f16_f32_"+std::to_string(i+1), mul_mat_vec_q8_0_f16_f32_len, mul_mat_vec_q8_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {device->subgroup_size, 1*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f16_f32_"+std::to_string(i+1), mul_mat_vec_q2_k_f16_f32_len, mul_mat_vec_q2_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f16_f32_"+std::to_string(i+1), mul_mat_vec_q3_k_f16_f32_len, mul_mat_vec_q3_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f16_f32_"+std::to_string(i+1), mul_mat_vec_q4_k_f16_f32_len, mul_mat_vec_q4_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f16_f32_"+std::to_string(i+1), mul_mat_vec_q5_k_f16_f32_len, mul_mat_vec_q5_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f16_f32_"+std::to_string(i+1), mul_mat_vec_q6_k_f16_f32_len, mul_mat_vec_q6_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {subgroup_size_16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq1_s_f16_f32_len, mul_mat_vec_iq1_s_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq1_m_f16_f32_len, mul_mat_vec_iq1_m_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq2_xxs_f16_f32_len, mul_mat_vec_iq2_xxs_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq2_xs_f16_f32_len, mul_mat_vec_iq2_xs_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq2_s_f16_f32_len, mul_mat_vec_iq2_s_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq3_xxs_f16_f32_len, mul_mat_vec_iq3_xxs_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq3_s_f16_f32_len, mul_mat_vec_iq3_s_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq4_xs_f16_f32_len, mul_mat_vec_iq4_xs_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f16_f32_"+std::to_string(i+1), mul_mat_vec_iq4_nl_f16_f32_len, mul_mat_vec_iq4_nl_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f16_f32_"+std::to_string(i+1), mul_mat_vec_mxfp4_f16_f32_len, mul_mat_vec_mxfp4_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {subgroup_size_16, rm_iq, i+1}, 1, true); + const bool s = device->subgroup_add && device->architecture != vk_device_architecture::AMD_GCN; + + for (uint32_t i = 0; i < mul_mat_vec_max_cols; ++i) { + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f32_f32_f32_len[s], arr_dmmv_f32_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f16_f32_f32_len[s], arr_dmmv_f16_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_bf16_f32_f32_len[s], arr_dmmv_bf16_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_0_f32_f32_len[s], arr_dmmv_q4_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_1_f32_f32_len[s], arr_dmmv_q4_1_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_0_f32_f32_len[s], arr_dmmv_q5_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_1_f32_f32_len[s], arr_dmmv_q5_1_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q8_0_f32_f32_len[s], arr_dmmv_q8_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {wg_size_subgroup, 1*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q2_k_f32_f32_len[s], arr_dmmv_q2_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q3_k_f32_f32_len[s], arr_dmmv_q3_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_k_f32_f32_len[s], arr_dmmv_q4_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_k_f32_f32_len[s], arr_dmmv_q5_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q6_k_f32_f32_len[s], arr_dmmv_q6_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_s_f32_f32_len[s], arr_dmmv_iq1_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_m_f32_f32_len[s], arr_dmmv_iq1_m_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xxs_f32_f32_len[s], arr_dmmv_iq2_xxs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xs_f32_f32_len[s], arr_dmmv_iq2_xs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_s_f32_f32_len[s], arr_dmmv_iq2_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_xxs_f32_f32_len[s], arr_dmmv_iq3_xxs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_s_f32_f32_len[s], arr_dmmv_iq3_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_xs_f32_f32_len[s], arr_dmmv_iq4_xs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_nl_f32_f32_len[s], arr_dmmv_iq4_nl_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_mxfp4_f32_f32_len[s], arr_dmmv_mxfp4_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f32_f16_f32_len[s], arr_dmmv_f32_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f16_f16_f32_len[s], arr_dmmv_f16_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_bf16_f16_f32_len[s], arr_dmmv_bf16_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_0_f16_f32_len[s], arr_dmmv_q4_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_1_f16_f32_len[s], arr_dmmv_q4_1_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_0_f16_f32_len[s], arr_dmmv_q5_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_1_f16_f32_len[s], arr_dmmv_q5_1_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q8_0_f16_f32_len[s], arr_dmmv_q8_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {wg_size_subgroup, 1*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q2_k_f16_f32_len[s], arr_dmmv_q2_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q3_k_f16_f32_len[s], arr_dmmv_q3_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_k_f16_f32_len[s], arr_dmmv_q4_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_k_f16_f32_len[s], arr_dmmv_q5_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q6_k_f16_f32_len[s], arr_dmmv_q6_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_s_f16_f32_len[s], arr_dmmv_iq1_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_m_f16_f32_len[s], arr_dmmv_iq1_m_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xxs_f16_f32_len[s], arr_dmmv_iq2_xxs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xs_f16_f32_len[s], arr_dmmv_iq2_xs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_s_f16_f32_len[s], arr_dmmv_iq2_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_xxs_f16_f32_len[s], arr_dmmv_iq3_xxs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_s_f16_f32_len[s], arr_dmmv_iq3_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_xs_f16_f32_len[s], arr_dmmv_iq4_xs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_nl_f16_f32_len[s], arr_dmmv_iq4_nl_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_mxfp4_f16_f32_len[s], arr_dmmv_mxfp4_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + } } ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_F32 ], "mul_mat_vec_id_f32_f32", mul_mat_vec_id_f32_f32_len, mul_mat_vec_id_f32_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {2, 1, 1}, {device->subgroup_size, 2}, 1); @@ -4389,7 +4402,7 @@ static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_pipeline(ggml_backend_vk_conte return (ctx->device->fp16 && prec == GGML_PREC_DEFAULT) ? ctx->device->pipeline_dequant_mul_mat_mat[src0_type].f16acc : ctx->device->pipeline_dequant_mul_mat_mat[src0_type].f32acc; } -static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type, uint32_t num_cols) { +static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type, uint32_t num_cols, uint32_t m, uint32_t k) { VK_LOG_DEBUG("ggml_vk_get_dequantize_mul_mat_vec()"); GGML_ASSERT(b_type == GGML_TYPE_F32 || b_type == GGML_TYPE_F16); GGML_ASSERT(num_cols >= 1 && num_cols <= mul_mat_vec_max_cols); @@ -4423,7 +4436,24 @@ static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec(ggml_backend_vk_context * return nullptr; } - return b_type == GGML_TYPE_F32 ? ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[a_type][num_cols-1] : ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[a_type][num_cols-1]; + // heuristic to choose workgroup size + uint32_t dmmv_wg = DMMV_WG_SIZE_SUBGROUP; + if (ctx->device->vendor_id == VK_VENDOR_ID_NVIDIA || ctx->device->vendor_id == VK_VENDOR_ID_INTEL) { + // Prefer larger workgroups when M is small, to spread the work out more + // and keep more SMs busy. + // q6_k seems to prefer small workgroup size even for "medium" values of M. + if (a_type == GGML_TYPE_Q6_K) { + if (m < 4096 && k >= 1024) { + dmmv_wg = DMMV_WG_SIZE_LARGE; + } + } else { + if (m <= 8192 && k >= 1024) { + dmmv_wg = DMMV_WG_SIZE_LARGE; + } + } + } + + return b_type == GGML_TYPE_F32 ? ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[dmmv_wg][a_type][num_cols-1] : ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[dmmv_wg][a_type][num_cols-1]; } static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_id_pipeline(ggml_backend_vk_context * ctx, ggml_type src0_type, ggml_type src1_type, ggml_prec prec) { @@ -5730,7 +5760,7 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& } else { to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type); } - vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec(ctx, src0->type, src1->type, ne11); + vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec(ctx, src0->type, src1->type, ne11, ne20, ne00); GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr); // NOLINT GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr); // NOLINT GGML_ASSERT(dmmv != nullptr); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.comp index 903753c7e2..b93e9948f7 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.comp @@ -1,6 +1,10 @@ #extension GL_EXT_control_flow_attributes : enable #extension GL_EXT_shader_16bit_storage : require #extension GL_EXT_shader_8bit_storage : require +#if USE_SUBGROUP_ADD +#extension GL_KHR_shader_subgroup_basic : require +#extension GL_KHR_shader_subgroup_arithmetic : require +#endif #ifdef MUL_MAT_ID #define EXPERT_COUNT 8 @@ -90,7 +94,38 @@ layout (constant_id = 2) const uint NUM_COLS = 1; shared FLOAT_TYPE tmpsh[NUM_COLS][NUM_ROWS][BLOCK_SIZE]; -void reduce_result(const in FLOAT_TYPE temp[NUM_COLS][NUM_ROWS], const in uint32_t d_offset, const in uint32_t first_row, const in uint32_t num_rows, const in uint32_t tid) { +void reduce_result(FLOAT_TYPE temp[NUM_COLS][NUM_ROWS], const in uint32_t d_offset, const in uint32_t first_row, const in uint32_t num_rows, const in uint32_t tid) { + // subgroupAdd is probably faster on devices that support it, + // particularly when the workgroup has more than one subgroup +#if USE_SUBGROUP_ADD + // sum up partial sums within a subgroup + [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { + [[unroll]] for (uint n = 0; n < num_rows; ++n) { + temp[j][n] = subgroupAdd(temp[j][n]); + } + } + + // Go through shared memory to sum partials across subgroups + if (gl_SubgroupInvocationID == 0) { + [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { + [[unroll]] for (uint n = 0; n < num_rows; ++n) { + tmpsh[j][n][gl_SubgroupID] = temp[j][n]; + } + } + } + barrier(); + if (tid == 0) { + [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { + [[unroll]] for (uint n = 0; n < num_rows; ++n) { + temp[j][n] = FLOAT_TYPE(0); + [[unroll]] for (uint s = 0; s < gl_NumSubgroups; ++s) { + temp[j][n] += tmpsh[j][n][s]; + } + data_d[j*p.batch_stride_d + d_offset + first_row + n] = D_TYPE(temp[j][n]); + } + } + } +#else // sum up partial sums and write back result [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { [[unroll]] for (uint n = 0; n < num_rows; ++n) { @@ -115,4 +150,5 @@ void reduce_result(const in FLOAT_TYPE temp[NUM_COLS][NUM_ROWS], const in uint32 } } } +#endif } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 8c6627dee4..6cc474b90a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -472,6 +472,9 @@ void process_shaders() { string_to_spv("mul_mat_vec_" + tname + "_f32_f32", shader, merge_maps(base_dict, {{data_a_key, "1"}, {"B_TYPE", "float"}, {"B_TYPE_VEC2", "vec2"}, {"B_TYPE_VEC4", "vec4"}, {"D_TYPE", "float"}})); string_to_spv("mul_mat_vec_" + tname + "_f16_f32", shader, merge_maps(base_dict, {{data_a_key, "1"}, {"B_TYPE", "float16_t"}, {"B_TYPE_VEC2", "f16vec2"}, {"B_TYPE_VEC4", "f16vec4"}, {"D_TYPE", "float"}})); + string_to_spv("mul_mat_vec_" + tname + "_f32_f32_subgroup", shader, merge_maps(base_dict, {{data_a_key, "1"}, {"B_TYPE", "float"}, {"B_TYPE_VEC2", "vec2"}, {"B_TYPE_VEC4", "vec4"}, {"D_TYPE", "float"}, {"USE_SUBGROUP_ADD", "1"}})); + string_to_spv("mul_mat_vec_" + tname + "_f16_f32_subgroup", shader, merge_maps(base_dict, {{data_a_key, "1"}, {"B_TYPE", "float16_t"}, {"B_TYPE_VEC2", "f16vec2"}, {"B_TYPE_VEC4", "f16vec4"}, {"D_TYPE", "float"}, {"USE_SUBGROUP_ADD", "1"}})); + string_to_spv("mul_mat_vec_id_" + tname + "_f32", shader, merge_maps(base_dict, {{"MUL_MAT_ID", "1"}, {data_a_key, "1"}, {"B_TYPE", "float"}, {"B_TYPE_VEC2", "vec2"}, {"B_TYPE_VEC4", "vec4"}, {"D_TYPE", "float"}})); // Dequant shaders @@ -789,6 +792,18 @@ void write_output_files() { fputs(data.c_str(), src); fputs(len.c_str(), src); } + + for (const std::string& btype : {"f16", "f32"}) { + for (const auto& tname : type_names) { + fprintf(hdr, "extern unsigned char *arr_dmmv_%s_%s_f32_data[2];\n", tname.c_str(), btype.c_str()); + fprintf(hdr, "extern uint64_t arr_dmmv_%s_%s_f32_len[2];\n", tname.c_str(), btype.c_str()); + std::string data = "unsigned char *arr_dmmv_" + tname + "_" + btype + "_f32_data[2] = {mul_mat_vec_" + tname + "_" + btype + "_f32_data, mul_mat_vec_" + tname + "_" + btype + "_f32_subgroup_data};\n"; + std::string len = "uint64_t arr_dmmv_" + tname + "_" + btype + "_f32_len[2] = {mul_mat_vec_" + tname + "_" + btype + "_f32_len, mul_mat_vec_" + tname + "_" + btype + "_f32_subgroup_len};\n"; + fputs(data.c_str(), src); + fputs(len.c_str(), src); + } + } + fclose(hdr); fclose(src); } From e5155e698645242d4f019267ecc40ea9bad81b09 Mon Sep 17 00:00:00 2001 From: Oleksandr Kuvshynov <661042+okuvshynov@users.noreply.github.com> Date: Sun, 17 Aug 2025 18:28:58 -0400 Subject: [PATCH 020/174] server : export max observed n_past value (#15361) Add tracking for high watermark cache usage and make it available in /metrics endpoint. Use-case: Tracking largest needed cache usage under realistic workload to better understand memory requirements and be able to adjust cache size/quantization for model/cache accordingly. --- tools/server/server.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 0b40f7bfa4..24bfae7891 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -1201,6 +1201,8 @@ struct server_task_result_metrics : server_task_result { uint64_t n_tokens_predicted_total = 0; uint64_t t_tokens_generation_total = 0; + uint64_t n_past_max = 0; + uint64_t n_prompt_tokens_processed = 0; uint64_t t_prompt_processing = 0; @@ -1226,6 +1228,8 @@ struct server_task_result_metrics : server_task_result { { "n_tokens_predicted_total", n_tokens_predicted_total }, { "t_prompt_processing_total", t_prompt_processing_total }, + { "n_past_max", n_past_max }, + { "n_prompt_tokens_processed", n_prompt_tokens_processed }, { "t_prompt_processing", t_prompt_processing }, { "n_tokens_predicted", n_tokens_predicted }, @@ -1587,6 +1591,8 @@ struct server_metrics { uint64_t n_tokens_predicted_total = 0; uint64_t t_tokens_generation_total = 0; + uint64_t n_past_max = 0; + uint64_t n_prompt_tokens_processed = 0; uint64_t t_prompt_processing = 0; @@ -1605,6 +1611,10 @@ struct server_metrics { n_prompt_tokens_processed += slot.n_prompt_tokens_processed; t_prompt_processing += slot.t_prompt_processing; t_prompt_processing_total += slot.t_prompt_processing; + + if (slot.n_past > 0) { + n_past_max = std::max(n_past_max, (uint64_t) slot.n_past); + } } void on_prediction(const server_slot & slot) { @@ -1620,6 +1630,9 @@ struct server_metrics { if (slot.is_processing()) { n_busy_slots_total++; } + if (slot.n_past > 0) { + n_past_max = std::max(n_past_max, (uint64_t) slot.n_past); + } } } @@ -2875,6 +2888,8 @@ struct server_context { res->n_tokens_predicted_total = metrics.n_tokens_predicted_total; res->t_tokens_generation_total = metrics.t_tokens_generation_total; + res->n_past_max = metrics.n_past_max; + res->n_prompt_tokens_processed = metrics.n_prompt_tokens_processed; res->t_prompt_processing = metrics.t_prompt_processing; res->n_tokens_predicted = metrics.n_tokens_predicted; @@ -4077,6 +4092,10 @@ int main(int argc, char ** argv) { {"name", "n_decode_total"}, {"help", "Total number of llama_decode() calls"}, {"value", res_metrics->n_decode_total} + }, { + {"name", "n_past_max"}, + {"help", "Largest observed n_past."}, + {"value", res_metrics->n_past_max} }, { {"name", "n_busy_slots_per_decode"}, {"help", "Average number of busy slots per llama_decode() call"}, From ae532eac2c1df1d8edc3d2719145895b966de1bf Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Mon, 18 Aug 2025 00:56:29 -0500 Subject: [PATCH 021/174] vulkan: disable spirv-opt for bfloat16 shaders (#15352) --- ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 6cc474b90a..75c572d6fc 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -223,7 +223,8 @@ void string_to_spv_func(const std::string& _name, const std::string& in_fname, c std::string target_env = (name.find("_cm2") != std::string::npos) ? "--target-env=vulkan1.3" : "--target-env=vulkan1.2"; // disable spirv-opt for coopmat shaders for https://github.com/ggerganov/llama.cpp/issues/10734 - std::string opt_level = coopmat ? "" : "-O"; + // disable spirv-opt for bf16 shaders for https://github.com/ggml-org/llama.cpp/issues/15344 + std::string opt_level = (coopmat || name.find("bf16") != std::string::npos) ? "" : "-O"; #ifdef _WIN32 std::vector cmd = {GLSLC, "-fshader-stage=compute", target_env, opt_level, "\"" + in_path + "\"", "-o", "\"" + out_fname + "\""}; From f44f7931729022c57319a0124931120a169e0da9 Mon Sep 17 00:00:00 2001 From: compilade Date: Mon, 18 Aug 2025 03:23:56 -0400 Subject: [PATCH 022/174] ggml-quants : fix make_qp_quants NANs and IQ1 assertion errors (#15379) * ggml-quants : fix make_qp_quants NANs and IQ1 assertion errors * ggml-quants : avoid division by zero in make_q3_quants --- ggml/src/ggml-quants.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ggml/src/ggml-quants.c b/ggml/src/ggml-quants.c index 94f6405ca1..727932123e 100644 --- a/ggml/src/ggml-quants.c +++ b/ggml/src/ggml-quants.c @@ -566,7 +566,7 @@ static float make_q3_quants(int n, int nmax, const float * GGML_RESTRICT x, int8 for (int i = 0; i < n; ++i) { L[i] += nmax; } - return sumlx / suml2; + return suml2 > 0.0f ? sumlx / suml2 : 0.0f; } for (int i = 0; i < n; ++i) { int l = nearest_int(iscale * x[i]); @@ -901,7 +901,7 @@ static float make_qp_quants(int n, int nmax, const float * GGML_RESTRICT x, uint for (int i = 0; i < n; ++i) { max = MAX(max, x[i]); } - if (!max) { // all zero + if (max < GROUP_MAX_EPS) { // all zero for (int i = 0; i < n; ++i) { L[i] = 0; } return 0.f; } @@ -966,7 +966,7 @@ static float make_qp_quants(int n, int nmax, const float * GGML_RESTRICT x, uint break; } } - return sumlx/suml2; + return suml2 > 0.0f ? sumlx / suml2 : 0.0f; } static void quantize_row_q2_K_impl(const float * GGML_RESTRICT x, block_q2_K * GGML_RESTRICT y, int k, const float * GGML_RESTRICT quant_weights) { @@ -4266,7 +4266,7 @@ static void quantize_row_iq1_s_impl(const float * GGML_RESTRICT x, void * GGML_R sumw[j+1] = sumw[j] + weight[i]; } } - float best_score = -FLT_MIN, scale = max; + float best_score = -FLT_MAX, scale = max; int besti1 = -1, besti2 = -1, best_shift = 0; for (int i1 = 0; i1 <= block_size; ++i1) { for (int i2 = i1; i2 <= block_size; ++i2) { @@ -4442,7 +4442,7 @@ static void quantize_row_iq1_m_impl(const float * GGML_RESTRICT x, void * GGML_R idx[2*j] = j; } qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper); - float best_score = -FLT_MIN, scale = max; + float best_score = -FLT_MAX, scale = max; int besti1 = -1, besti2 = -1, best_k = -1; // 0: +, + // 1: +, - From 618575c5825d7d4f170e686e772178d2aae148ae Mon Sep 17 00:00:00 2001 From: Dobri Danchev <12420863+danchev@users.noreply.github.com> Date: Mon, 18 Aug 2025 05:50:48 -0500 Subject: [PATCH 023/174] Fix broken build: require updated pip to support --break-system-packages (#15357) * Revert "devops : fix compile bug when the BASE_CUDA_DEV_CONTAINER is based on Ubuntu 24.04 (#15005)" This reverts commit e4e915912cfd2ee15c5a4a0074813232134892f6. * devops: Allow pip to modify externally-managed python environment (system installation) - Updated pip install commands to include the --break-system-packages flag, ensuring compatibility when working with system-managed Python environments (PEP 668). - Note: The --break-system-packages option was introduced in 2023. Ensure pip is updated to a recent version before using this flag. fixes [#15004](https://github.com/danchev/llama.cpp/issues/15004) --- .devops/cuda.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/.devops/cuda.Dockerfile b/.devops/cuda.Dockerfile index f9dc7f3163..4b708ae278 100644 --- a/.devops/cuda.Dockerfile +++ b/.devops/cuda.Dockerfile @@ -60,6 +60,7 @@ RUN apt-get update \ git \ python3 \ python3-pip \ + && pip install --upgrade pip setuptools wheel \ && pip install --break-system-packages -r requirements.txt \ && apt autoremove -y \ && apt clean -y \ From d1d82416006e7ff41780cb0e9b5f28d30a267497 Mon Sep 17 00:00:00 2001 From: davidef Date: Mon, 18 Aug 2025 16:51:42 +0200 Subject: [PATCH 024/174] server : fix incoming tasks not process in order (#15395) --- tools/server/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 24bfae7891..ab88f3d26c 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -1729,7 +1729,7 @@ struct server_queue { void pop_deferred_task() { std::unique_lock lock(mutex_tasks); if (!queue_tasks_deferred.empty()) { - queue_tasks.emplace_back(std::move(queue_tasks_deferred.front())); + queue_tasks.emplace_front(std::move(queue_tasks_deferred.front())); queue_tasks_deferred.pop_front(); } condition_tasks.notify_one(); From 3007baf201e7ffcda17dbdb0335997fa50a6595b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 18 Aug 2025 18:11:44 +0300 Subject: [PATCH 025/174] readme : update hot topics (#15397) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 11d9290786..8446756384 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ LLM inference in C/C++ ## Hot topics +- **[guide : running gpt-oss with llama.cpp](https://github.com/ggml-org/llama.cpp/discussions/15396)** - **[[FEEDBACK] Better packaging for llama.cpp to support downstream consumers 🤗](https://github.com/ggml-org/llama.cpp/discussions/15313)** - Support for the `gpt-oss` model with native MXFP4 format has been added | [PR](https://github.com/ggml-org/llama.cpp/pull/15091) | [Collaboration with NVIDIA](https://blogs.nvidia.com/blog/rtx-ai-garage-openai-oss) | [Comment](https://github.com/ggml-org/llama.cpp/discussions/15095) - Hot PRs: [All](https://github.com/ggml-org/llama.cpp/pulls?q=is%3Apr+label%3Ahot+) | [Open](https://github.com/ggml-org/llama.cpp/pulls?q=is%3Apr+label%3Ahot+is%3Aopen) From baa9255a45105d2d3b4ec432af13b7a6eda3ff35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Mon, 18 Aug 2025 19:30:17 +0200 Subject: [PATCH 026/174] llama : merge conts and reshapes and remove unnecessary cont (#15380) * remove unnecessary conts and merge reshapes * restore necessary conts * merge more conts and reshapes * merge even more conts and reshapes --- src/llama-model.cpp | 143 +++++++++++++++++++++++--------------------- tools/mtmd/clip.cpp | 45 +++++++------- 2 files changed, 96 insertions(+), 92 deletions(-) diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 23a26f0c64..0c149cd478 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -6743,9 +6743,9 @@ struct llm_build_falcon : public llm_graph_context { ggml_tensor * Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); ggml_tensor * Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); // using mode = 2 for neox mode Qcur = ggml_rope_ext( @@ -7023,9 +7023,9 @@ struct llm_build_dbrx : public llm_graph_context { Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, @@ -7145,13 +7145,13 @@ struct llm_build_starcoder : public llm_graph_context { cur = ggml_add(ctx0, cur, model.layers[il].bqkv); cb(cur, "bqkv", il); - ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd)); + ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd)); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Qcur = ggml_cont_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_cont_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); @@ -7367,13 +7367,15 @@ struct llm_build_bert : public llm_graph_context { cb(cur, "bqkv", il); } - Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + Qcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd)); + Kcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd)); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } else { Qcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wq, cur), model.layers[il].bq); Kcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wk, cur), model.layers[il].bk); Vcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wv, cur), model.layers[il].bv); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } if (model.layers[il].attn_q_norm) { @@ -7381,6 +7383,10 @@ struct llm_build_bert : public llm_graph_context { model.layers[il].attn_q_norm, model.layers[il].attn_q_norm_b, LLM_NORM, il); + + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + } else { + Qcur = ggml_cont_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); } if (model.layers[il].attn_k_norm) { @@ -7388,11 +7394,11 @@ struct llm_build_bert : public llm_graph_context { model.layers[il].attn_k_norm, model.layers[il].attn_k_norm_b, LLM_NORM, il); - } - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + } else { + Kcur = ggml_cont_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + } // RoPE if (model.arch == LLM_ARCH_NOMIC_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE) { @@ -7537,9 +7543,9 @@ struct llm_build_neo_bert : public llm_graph_context { Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); // RoPE Qcur = ggml_rope_ext( @@ -7646,13 +7652,13 @@ struct llm_build_bloom : public llm_graph_context { cur = ggml_add(ctx0, cur, model.layers[il].bqkv); cb(cur, "bqkv", il); - ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd)); + ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd)); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Qcur = ggml_cont_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_cont_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); @@ -7770,7 +7776,7 @@ struct llm_build_mpt : public llm_graph_context { ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd)); ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd)); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); @@ -7789,17 +7795,18 @@ struct llm_build_mpt : public llm_graph_context { model.layers[il].attn_k_norm_b, LLM_NORM, il); cb(Kcur, "Kcur", il); + + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); } else { - Qcur = ggml_cont(ctx0, Qcur); + Qcur = ggml_cont_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); cb(Qcur, "Qcur", il); - Kcur = ggml_cont(ctx0, Kcur); + Kcur = ggml_cont_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); cb(Kcur, "Kcur", il); } - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); @@ -8051,9 +8058,9 @@ struct llm_build_qwen : public llm_graph_context { ggml_tensor * Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); ggml_tensor * Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 2*sizeof(float)*(n_embd))); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 2*sizeof(float)*(n_embd)); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); // using mode = 2 for neox mode Qcur = ggml_rope_ext( @@ -9026,21 +9033,21 @@ struct llm_build_phi2 : public llm_graph_context { Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } else { Qcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wq, attn_norm_output), model.layers[il].bq); Kcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wk, attn_norm_output), model.layers[il].bk); Vcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wv, attn_norm_output), model.layers[il].bv); Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); - Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, @@ -9164,21 +9171,21 @@ struct llm_build_phi3 : public llm_graph_context { Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head * sizeof(float), cur->nb[1], 0 * sizeof(float) * (n_embd)); Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head * sizeof(float), cur->nb[1], 1 * sizeof(float) * (n_embd)); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1 * sizeof(float) * (n_embd + n_embd_gqa))); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1 * sizeof(float) * (n_embd + n_embd_gqa)); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } else { Qcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wq, attn_norm_output), model.layers[il].bq); Kcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wk, attn_norm_output), model.layers[il].bk); Vcur = ggml_add(ctx0, build_lora_mm(model.layers[il].wv, attn_norm_output), model.layers[il].bv); Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); - Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, rope_factors, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, @@ -9428,17 +9435,17 @@ struct llm_build_gpt2 : public llm_graph_context { cur = ggml_add(ctx0, cur, model.layers[il].bqkv); cb(cur, "bqkv", il); - ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd)); + ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd)); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Qcur = ggml_cont_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_cont_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, @@ -9534,9 +9541,9 @@ struct llm_build_codeshell : public llm_graph_context { ggml_tensor * Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); ggml_tensor * Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, @@ -10864,8 +10871,8 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { ggml_tensor * all_coefs = build_lora_mm(model.layers[il].altup_correct_coef, modalities); // [n_altup, n_tokens] all_coefs = ggml_scale_bias(ctx0, all_coefs, 1.0f, 1.0f); // + 1.0 cb(all_coefs, "all_coefs", il); - all_coefs = ggml_cont(ctx0, ggml_transpose(ctx0, all_coefs)); // [n_tokens, n_altup] - all_coefs = ggml_reshape_3d(ctx0, all_coefs, 1, n_tokens, n_altup); // [1, n_tokens, n_altup] + all_coefs = ggml_transpose(ctx0, all_coefs); // [n_tokens, n_altup] + all_coefs = ggml_cont_3d(ctx0, all_coefs, 1, n_tokens, n_altup); // [1, n_tokens, n_altup] innovation = ggml_repeat_4d(ctx0, innovation, n_embd, n_tokens, n_altup, 1); ggml_tensor * corrected = ggml_mul(ctx0, innovation, all_coefs); // [n_embd, n_tokens, n_altup] @@ -12278,9 +12285,9 @@ struct llm_build_gptneox : public llm_graph_context { ggml_tensor * Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); ggml_tensor * Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, @@ -13413,17 +13420,17 @@ struct llm_build_jais : public llm_graph_context { cur = ggml_add(ctx0, cur, model.layers[il].bqkv); cb(cur, "bqkv", il); - ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*cur->nb[0]*(n_embd))); - ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*cur->nb[0]*(n_embd))); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*cur->nb[0]*(n_embd + n_embd_gqa))); + ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*cur->nb[0]*(n_embd)); + ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*cur->nb[0]*(n_embd)); + ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*cur->nb[0]*(n_embd + n_embd_gqa)); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + Qcur = ggml_cont_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_cont_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, @@ -13526,6 +13533,7 @@ struct llm_build_chatglm : public llm_graph_context { } Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } else { cur = build_lora_mm(model.layers[il].wqkv, cur); cb(cur, "wqkv", il); @@ -13535,11 +13543,10 @@ struct llm_build_chatglm : public llm_graph_context { } Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); - //printf("freq_base: %f freq_scale: %f ext_factor: %f attn_factor: %f\n", freq_base, freq_scale, ext_factor, attn_factor); Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, @@ -13660,6 +13667,7 @@ struct llm_build_glm4 : public llm_graph_context { } Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } else { cur = build_lora_mm(model.layers[il].wqkv, cur); cb(cur, "wqkv", il); @@ -13669,11 +13677,10 @@ struct llm_build_glm4 : public llm_graph_context { } Qcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 0*sizeof(float)*(n_embd)); Kcur = ggml_view_3d(ctx0, cur, n_embd_head, n_head_kv, n_tokens, n_embd_head*sizeof(float), cur->nb[1], 1*sizeof(float)*(n_embd)); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + Vcur = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa)); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); } - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); - Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, @@ -16840,13 +16847,13 @@ private: ggml_tensor * Qcur = ggml_view_3d(ctx0, qkv, n_embd_head_q, n_head, n_tokens, n_embd_head_q * sizeof(float), qkv->nb[1], q_offset * ggml_element_size(qkv)); ggml_tensor * Kcur = ggml_view_3d(ctx0, qkv, n_embd_head_k, n_head_kv, n_tokens, n_embd_head_k * sizeof(float), qkv->nb[1], k_offset * ggml_element_size(qkv)); - ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, qkv, n_embd_head_v * n_head_kv, n_tokens, qkv->nb[1], v_offset * ggml_element_size(qkv))); + ggml_tensor * Vcur = ggml_view_2d(ctx0, qkv, n_embd_head_v * n_head_kv, n_tokens, qkv->nb[1], v_offset * ggml_element_size(qkv)); cb(Qcur, "Qcur", il); cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head_v, n_head_kv, n_tokens); + Vcur = ggml_cont_3d(ctx0, Vcur, n_embd_head_v, n_head_kv, n_tokens); Qcur = build_norm(Qcur, model.layers[il].attn_q_norm, NULL, LLM_NORM_RMS, il); cb(Qcur, "Qcur_normed", il); @@ -16913,15 +16920,13 @@ private: cb(zx, "mamba_in_proj", il); // {8192, 5, 1, 1} -> {8192, 1, 5, 1} zx = ggml_permute(ctx0, zx, 0, 2, 1, 3); - zx = ggml_cont(ctx0, zx); - zx = ggml_reshape_4d(ctx0, zx, head_dim * 2, n_heads, n_seq_tokens, n_seqs); + zx = ggml_cont_4d(ctx0, zx, head_dim * 2, n_heads, n_seq_tokens, n_seqs); cb(zx, "mamba_in_proj_out", il); // split into z and x // => {head_dim * n_heads, n_seq_tokens, n_seqs} ggml_tensor * x = ggml_view_4d(ctx0, zx, head_dim, n_heads, n_seq_tokens, n_seqs, zx->nb[1], zx->nb[2], zx->nb[3], head_dim*ggml_element_size(zx)); - x = ggml_cont(ctx0, x); - x = ggml_reshape_3d(ctx0, x, head_dim * n_heads, n_seq_tokens, n_seqs); + x = ggml_cont_3d(ctx0, x, head_dim * n_heads, n_seq_tokens, n_seqs); // x = ggml_permute(ctx0, x, 0, 2, 1, 3); cb(x, "mamba_x_split", il); diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index c27f8ebbd9..099e282370 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -508,8 +508,8 @@ struct clip_graph { const int patches_per_image = n_patches_x; const int kernel_size = hparams.proj_scale_factor; - cur = ggml_cont(ctx0, ggml_transpose(ctx0, cur)); - cur = ggml_reshape_4d(ctx0, cur, patches_per_image, patches_per_image, n_embd, batch_size); + cur = ggml_transpose(ctx0, cur); + cur = ggml_cont_4d(ctx0, cur, patches_per_image, patches_per_image, n_embd, batch_size); // doing a pool2d to reduce the number of output tokens cur = ggml_pool_2d(ctx0, cur, GGML_OP_POOL_AVG, kernel_size, kernel_size, kernel_size, kernel_size, 0, 0); @@ -537,13 +537,13 @@ struct clip_graph { GGML_ASSERT(scale_factor != 0); cur = ggml_reshape_4d(ctx0, cur, n_embd * scale_factor, width / scale_factor, height, bsz); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_reshape_4d(ctx0, ggml_cont(ctx0, cur), + cur = ggml_cont_4d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor, bsz); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_reshape_3d(ctx0, ggml_cont(ctx0, cur), + cur = ggml_cont_3d(ctx0, cur, n_embd * scale_factor * scale_factor, seq / (scale_factor * scale_factor), bsz); @@ -570,13 +570,13 @@ struct clip_graph { // unshuffle h cur = ggml_reshape_3d(ctx0, cur, n_embd * scale_factor, width / scale_factor, height); - cur = ggml_cont(ctx0, ggml_permute(ctx0, cur, 0, 2, 1, 3)); + cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); // unshuffle w - cur = ggml_reshape_3d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor); - cur = ggml_cont(ctx0, ggml_permute(ctx0, cur, 0, 2, 1, 3)); + cur = ggml_cont_3d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor); + cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_reshape_2d(ctx0, cur, cur->ne[0], cur->ne[1] * cur->ne[2]); + cur = ggml_cont_2d(ctx0, cur, cur->ne[0], cur->ne[1] * cur->ne[2]); // projection cur = ggml_norm(ctx0, cur, 1e-5); // default nn.LayerNorm @@ -715,15 +715,15 @@ struct clip_graph { auto inp_1 = ggml_conv_2d(ctx0, model.patch_embeddings_1, inp_raw, patch_size, patch_size, 0, 0, 1, 1); inp = ggml_add(ctx0, inp, inp_1); - inp = ggml_cont(ctx0, ggml_permute(ctx0, inp, 1, 2, 0, 3)); // [w, h, c, b] -> [c, w, h, b] - inp = ggml_reshape_4d( + inp = ggml_permute(ctx0, inp, 1, 2, 0, 3); // [w, h, c, b] -> [c, w, h, b] + inp = ggml_cont_4d( ctx0, inp, n_embd * 2, n_patches_x / 2, n_patches_y, batch_size); inp = ggml_reshape_4d( ctx0, inp, n_embd * 2, n_patches_x / 2, 2, batch_size * (n_patches_y / 2)); - inp = ggml_cont(ctx0, ggml_permute(ctx0, inp, 0, 2, 1, 3)); - inp = ggml_reshape_3d( + inp = ggml_permute(ctx0, inp, 0, 2, 1, 3); + inp = ggml_cont_3d( ctx0, inp, n_embd, n_patches_x * n_patches_y, batch_size); } @@ -988,14 +988,14 @@ struct clip_graph { GGML_ASSERT(scale_factor > 0); cur = ggml_reshape_4d(ctx0, cur, n_embd * scale_factor, height / scale_factor, width, bsz); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_reshape_4d(ctx0, ggml_cont(ctx0, cur), + cur = ggml_cont_4d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor, bsz); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); // flatten to 2D - cur = ggml_reshape_2d(ctx0, ggml_cont(ctx0, cur), + cur = ggml_cont_2d(ctx0, cur, n_embd * scale_factor * scale_factor, cur->ne[1] * cur->ne[2]); } @@ -1081,14 +1081,14 @@ struct clip_graph { n_patches_y, bsz); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_reshape_4d(ctx0, ggml_cont(ctx0, cur), + cur = ggml_cont_4d(ctx0, cur, n_embd * scale_factor * scale_factor, n_patches_x / scale_factor, n_patches_y / scale_factor, bsz); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); // flatten to 2D - cur = ggml_reshape_2d(ctx0, ggml_cont(ctx0, cur), + cur = ggml_cont_2d(ctx0, cur, n_embd * scale_factor * scale_factor, n_patches / scale_factor / scale_factor); cb(cur, "pixel_shuffle", -1); @@ -1321,8 +1321,8 @@ struct clip_graph { ggml_tensor * block_1 = nullptr; { // transpose from [1, 576, 2048] --> [1, 2048, 576] --> [1, 2048, 24, 24] - mlp_3 = ggml_cont(ctx0, ggml_permute(ctx0, mlp_3, 1, 0, 2, 3)); - mlp_3 = ggml_reshape_4d(ctx0, mlp_3, n_patch, n_patch, mlp_3->ne[1], mlp_3->ne[2]); + mlp_3 = ggml_permute(ctx0, mlp_3, 1, 0, 2, 3); + mlp_3 = ggml_cont_4d(ctx0, mlp_3, n_patch, n_patch, mlp_3->ne[1], mlp_3->ne[2]); // stride = 1, padding = 1, bias is nullptr block_1 = ggml_conv_2d_dw(ctx0, model.mm_model_block_1_block_0_0_w, mlp_3, 1, 1, 1, 1, 1, 1); @@ -1427,9 +1427,9 @@ struct clip_graph { mlp_2 = ggml_add(ctx0, mlp_2, model.mm_model_mlp_2_b); // mlp_2 ne = [2048, 576, 1, 1] // // AVG Pool Layer 2*2, strides = 2 - mlp_2 = ggml_cont(ctx0, ggml_permute(ctx0, mlp_2, 1, 0, 2, 3)); + mlp_2 = ggml_permute(ctx0, mlp_2, 1, 0, 2, 3); // mlp_2 ne = [576, 2048, 1, 1] - mlp_2 = ggml_reshape_4d(ctx0, mlp_2, n_patch, n_patch, mlp_2->ne[1], mlp_2->ne[2]); + mlp_2 = ggml_cont_4d(ctx0, mlp_2, n_patch, n_patch, mlp_2->ne[1], mlp_2->ne[2]); // mlp_2 ne [24, 24, 2048, 1] mlp_2 = ggml_pool_2d(ctx0, mlp_2, GGML_OP_POOL_AVG, 2, 2, 2, 2, 0, 0); // weight ne = [3, 3, 2048, 1] @@ -1449,8 +1449,8 @@ struct clip_graph { // glm projector else if (ctx->proj_type() == PROJECTOR_TYPE_GLM_EDGE) { size_t gridsz = (size_t)sqrt(embeddings->ne[1]); - embeddings = ggml_cont(ctx0, ggml_permute(ctx0,embeddings,1,0,2,3)); - embeddings = ggml_reshape_3d(ctx0, embeddings, gridsz, gridsz, embeddings->ne[1]); + embeddings = ggml_permute(ctx0,embeddings,1,0,2,3); + embeddings = ggml_cont_3d(ctx0, embeddings, gridsz, gridsz, embeddings->ne[1]); embeddings = ggml_conv_2d(ctx0, model.mm_model_adapter_conv_w, embeddings, 2, 2, 0, 0, 1, 1); embeddings = ggml_reshape_3d(ctx0, embeddings,embeddings->ne[0]*embeddings->ne[1] , embeddings->ne[2], batch_size); embeddings = ggml_cont(ctx0, ggml_permute(ctx0,embeddings, 1, 0, 2, 3)); @@ -2005,7 +2005,6 @@ private: ggml_row_size(cur->type, n_dim), ggml_row_size(cur->type, n_dim*n_head), n_dim/2 * ggml_element_size(cur)); - second = ggml_cont(ctx0, second); // copy, because ggml_rope don't play well with non-contiguous tensors second = ggml_rope_ext( ctx0, second, From f0c541d315e97b297b3421c52ebde53340ee66b3 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 18 Aug 2025 20:35:47 +0300 Subject: [PATCH 027/174] scripts : update sync scripts --- scripts/sync-ggml-am.sh | 47 +++-------------------------------------- scripts/sync-ggml.sh | 16 +------------- 2 files changed, 4 insertions(+), 59 deletions(-) diff --git a/scripts/sync-ggml-am.sh b/scripts/sync-ggml-am.sh index 29d30e0a18..826c560cd8 100755 --- a/scripts/sync-ggml-am.sh +++ b/scripts/sync-ggml-am.sh @@ -74,21 +74,7 @@ while read c; do cmake/common.cmake \ cmake/ggml-config.cmake.in \ src/ggml-cpu/cmake/FindSIMD.cmake \ - src/ggml*.h \ - src/ggml*.c \ - src/ggml*.cpp \ - src/gguf*.cpp \ - src/ggml-blas/* \ - src/ggml-cann/* \ - src/ggml-cpu/* \ - src/ggml-cuda/* \ - src/ggml-hip/* \ - src/ggml-metal/* \ - src/ggml-musa/* \ - src/ggml-opencl/* \ - src/ggml-rpc/* \ - src/ggml-sycl/* \ - src/ggml-vulkan/* \ + src/ggml* \ include/ggml*.h \ include/gguf*.h \ tests/test-opt.cpp \ @@ -131,21 +117,7 @@ if [ -f $SRC_LLAMA/ggml-src.patch ]; then # cmake/ggml-config.cmake.in -> ggml/cmake/ggml-config.cmake.in # src/ggml-cpu/cmake/FindSIMD.cmake -> ggml/src/ggml-cpu/cmake/FindSIMD.cmake # - # src/ggml*.c -> ggml/src/ggml*.c - # src/ggml*.cpp -> ggml/src/ggml*.cpp - # src/ggml*.h -> ggml/src/ggml*.h - # src/gguf*.cpp -> ggml/src/gguf*.cpp - # src/ggml-blas/* -> ggml/src/ggml-blas/* - # src/ggml-cann/* -> ggml/src/ggml-cann/* - # src/ggml-cpu/* -> ggml/src/ggml-cpu/* - # src/ggml-cuda/* -> ggml/src/ggml-cuda/* - # src/ggml-hip/* -> ggml/src/ggml-hip/* - # src/ggml-metal/* -> ggml/src/ggml-metal/* - # src/ggml-musa/* -> ggml/src/ggml-musa/* - # src/ggml-opencl/* -> ggml/src/ggml-opencl/* - # src/ggml-rpc/* -> ggml/src/ggml-rpc/* - # src/ggml-sycl/* -> ggml/src/ggml-sycl/* - # src/ggml-vulkan/* -> ggml/src/ggml-vulkan/* + # src/ggml* -> ggml/src/ggml* # # include/ggml*.h -> ggml/include/ggml*.h # include/gguf*.h -> ggml/include/gguf*.h @@ -163,20 +135,7 @@ if [ -f $SRC_LLAMA/ggml-src.patch ]; then -e 's/([[:space:]]| [ab]\/)cmake\/common.cmake/\1ggml\/cmake\/common.cmake/g' \ -e 's/([[:space:]]| [ab]\/)cmake\/ggml-config.cmake.in/\1ggml\/cmake\/ggml-config.cmake.in/g' \ -e 's/([[:space:]]| [ab]\/)src\/ggml-cpu\/cmake\/FindSIMD.cmake/\1ggml\/src\/ggml-cpu\/cmake\/FindSIMD.cmake/g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml(.*)\.c/\1ggml\/src\/ggml\2.c/g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml(.*)\.cpp/\1ggml\/src\/ggml\2.cpp/g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml(.*)\.h/\1ggml\/src\/ggml\2.h/g' \ - -e 's/([[:space:]]| [ab]\/)src\/gguf(.*)\.cpp/\1ggml\/src\/gguf\2.cpp/g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-blas\//\1ggml\/src\/ggml-blas\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-cann\//\1ggml\/src\/ggml-cann\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-cpu\//\1ggml\/src\/ggml-cpu\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-cuda\//\1ggml\/src\/ggml-cuda\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-hip\//\1ggml\/src\/ggml-hip\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-metal\//\1ggml\/src\/ggml-metal\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-opencl\//\1ggml\/src\/ggml-opencl\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-rpc\//\1ggml\/src\/ggml-rpc\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-sycl\//\1ggml\/src\/ggml-sycl\//g' \ - -e 's/([[:space:]]| [ab]\/)src\/ggml-vulkan\//\1ggml\/src\/ggml-vulkan\//g' \ + -e 's/([[:space:]]| [ab]\/)src\/ggml(.*)/\1ggml\/src\/ggml\2/g' \ -e 's/([[:space:]]| [ab]\/)include\/ggml(.*)\.h/\1ggml\/include\/ggml\2.h/g' \ -e 's/([[:space:]]| [ab]\/)include\/gguf(.*)\.h/\1ggml\/include\/gguf\2.h/g' \ -e 's/([[:space:]]| [ab]\/)tests\/(.*)\.cpp/\1tests\/\2.cpp/g' \ diff --git a/scripts/sync-ggml.sh b/scripts/sync-ggml.sh index 9b98329e09..2da9b57891 100755 --- a/scripts/sync-ggml.sh +++ b/scripts/sync-ggml.sh @@ -6,21 +6,7 @@ cp -rpv ../ggml/src/CMakeLists.txt ./ggml/src/CMakeLists.txt cp -rpv ../ggml/cmake/* ./ggml/cmake/ cp -rpv ../ggml/src/ggml-cpu/cmake/* ./ggml/src/ggml-cpu/cmake/ -cp -rpv ../ggml/src/ggml*.c ./ggml/src/ -cp -rpv ../ggml/src/ggml*.cpp ./ggml/src/ -cp -rpv ../ggml/src/ggml*.h ./ggml/src/ -cp -rpv ../ggml/src/gguf*.cpp ./ggml/src/ -cp -rpv ../ggml/src/ggml-blas/* ./ggml/src/ggml-blas/ -cp -rpv ../ggml/src/ggml-cann/* ./ggml/src/ggml-cann/ -cp -rpv ../ggml/src/ggml-cpu/* ./ggml/src/ggml-cpu/ -cp -rpv ../ggml/src/ggml-cuda/* ./ggml/src/ggml-cuda/ -cp -rpv ../ggml/src/ggml-hip/* ./ggml/src/ggml-hip/ -cp -rpv ../ggml/src/ggml-metal/* ./ggml/src/ggml-metal/ -cp -rpv ../ggml/src/ggml-musa/* ./ggml/src/ggml-musa/ -cp -rpv ../ggml/src/ggml-opencl/* ./ggml/src/ggml-opencl/ -cp -rpv ../ggml/src/ggml-rpc/* ./ggml/src/ggml-rpc/ -cp -rpv ../ggml/src/ggml-sycl/* ./ggml/src/ggml-sycl/ -cp -rpv ../ggml/src/ggml-vulkan/* ./ggml/src/ggml-vulkan/ +cp -rpv ../ggml/src/ggml* ./ggml/src/ cp -rpv ../ggml/include/ggml*.h ./ggml/include/ cp -rpv ../ggml/include/gguf*.h ./ggml/include/ From 60212f1ead2dce9bf1ac69633a7069258ae604d8 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 18 Aug 2025 22:02:11 +0300 Subject: [PATCH 028/174] sync : ggml --- scripts/sync-ggml.last | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync-ggml.last b/scripts/sync-ggml.last index 7e2875f870..22348782d1 100644 --- a/scripts/sync-ggml.last +++ b/scripts/sync-ggml.last @@ -1 +1 @@ -b141fc226b68e4af383101c39da90b54ede98850 +323951f1bdcdfbd5b5ff3a9a7c3770e63b1a560e From 6d7f1117e3e3285d0c5c11b5ebb0439e27920082 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 18 Aug 2025 22:02:50 +0300 Subject: [PATCH 029/174] codeowners : remove mmv.* --- CODEOWNERS | 1 - 1 file changed, 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index b698b1f4cb..18564a08b1 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -5,7 +5,6 @@ /tools/server/ @ngxson /ggml/src/ggml-cuda/fattn* @JohannesGaessler /ggml/src/ggml-cuda/mmq.* @JohannesGaessler -/ggml/src/ggml-cuda/mmv.* @JohannesGaessler /ggml/src/ggml-cuda/mmvq.* @JohannesGaessler /ggml/src/ggml-opt.cpp @JohannesGaessler /ggml/src/gguf.cpp @JohannesGaessler From f08c4c0d8d0cb6caaf8b7ad316039232b9fa059c Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Mon, 18 Aug 2025 22:53:52 +0200 Subject: [PATCH 030/174] mtmd : clean up clip_n_output_tokens (#15391) --- tools/mtmd/clip.cpp | 60 +++++++++++++++++++-------------------------- tools/mtmd/clip.h | 5 ---- tools/mtmd/tests.sh | 1 + 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index 099e282370..a32fe84fa7 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -3648,8 +3648,9 @@ int clip_n_output_tokens_y(const struct clip_ctx * ctx, struct clip_image_f32 * int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * img) { const auto & params = ctx->model.hparams; - // only for models using fixed size square images - int n_patches_sq = (params.image_size / params.patch_size) * (params.image_size / params.patch_size); + // for models with fixed size image, the input image is already pre-processed and resized to square + int patch_size = params.patch_size; + int n_patches = (img->nx / patch_size) * (img->ny / patch_size); projector_type proj = ctx->proj_type(); @@ -3663,27 +3664,27 @@ int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * im case PROJECTOR_TYPE_LDPV2: case PROJECTOR_TYPE_GLM_EDGE: { - n_patches_sq /= 4; + n_patches /= 4; if (ctx->model.mm_glm_tok_boi) { - n_patches_sq += 2; // for BOI and EOI token embeddings + n_patches += 2; // for BOI and EOI token embeddings } } break; case PROJECTOR_TYPE_MINICPMV: { // Use actual config value if available, otherwise fall back to hardcoded values if (params.minicpmv_query_num > 0) { - n_patches_sq = params.minicpmv_query_num; + n_patches = params.minicpmv_query_num; } else { // Fallback to hardcoded values for legacy models if (params.minicpmv_version == 2) { - n_patches_sq = 96; + n_patches = 96; } else if (params.minicpmv_version == 3) { - n_patches_sq = 64; + n_patches = 64; } else if (params.minicpmv_version == 4) { - n_patches_sq = 64; + n_patches = 64; } else if (params.minicpmv_version == 5) { // MiniCPM-V 4.0 - n_patches_sq = 64; + n_patches = 64; } else { GGML_ABORT("Unknown minicpmv version"); } @@ -3692,67 +3693,56 @@ int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * im case PROJECTOR_TYPE_QWEN2VL: case PROJECTOR_TYPE_QWEN25VL: { - // dynamic size + // dynamic size (2 conv, so double patch size) int patch_size = params.patch_size * 2; int x_patch = img->nx / patch_size + (int)(img->nx % patch_size > 0); int y_patch = img->ny / patch_size + (int)(img->ny % patch_size > 0); - n_patches_sq = x_patch * y_patch; + n_patches = x_patch * y_patch; } break; case PROJECTOR_TYPE_GEMMA3: - { - int n_per_side = params.image_size / params.patch_size; - int n_per_side_2d_pool = n_per_side / params.proj_scale_factor; - n_patches_sq = n_per_side_2d_pool * n_per_side_2d_pool; - } break; case PROJECTOR_TYPE_IDEFICS3: case PROJECTOR_TYPE_INTERNVL: + case PROJECTOR_TYPE_LLAMA4: + case PROJECTOR_TYPE_LFM2: { // both W and H are divided by proj_scale_factor - n_patches_sq /= (params.proj_scale_factor * params.proj_scale_factor); + int scale_factor = ctx->model.hparams.proj_scale_factor; + n_patches /= (scale_factor * scale_factor); } break; case PROJECTOR_TYPE_PIXTRAL: { // dynamic size int n_merge = params.spatial_merge_size; - int n_patches_x = img->nx / params.patch_size / (n_merge > 0 ? n_merge : 1); - int n_patches_y = img->ny / params.patch_size / (n_merge > 0 ? n_merge : 1); - n_patches_sq = n_patches_y * n_patches_x + n_patches_y - 1; // + one [IMG_BREAK] per row, except the last row - } break; - case PROJECTOR_TYPE_LLAMA4: - { - int scale_factor = ctx->model.hparams.proj_scale_factor; - n_patches_sq /= (scale_factor * scale_factor); + int n_patches_x = img->nx / patch_size / (n_merge > 0 ? n_merge : 1); + int n_patches_y = img->ny / patch_size / (n_merge > 0 ? n_merge : 1); + n_patches = n_patches_y * n_patches_x + n_patches_y - 1; // + one [IMG_BREAK] per row, except the last row } break; case PROJECTOR_TYPE_VOXTRAL: case PROJECTOR_TYPE_ULTRAVOX: case PROJECTOR_TYPE_QWEN2A: { - n_patches_sq = img->nx; + n_patches = img->nx; const int proj_stack_factor = ctx->model.hparams.proj_stack_factor; if (ctx->model.audio_has_stack_frames()) { GGML_ASSERT(proj_stack_factor > 0); - const int n_len = CLIP_ALIGN(n_patches_sq, proj_stack_factor); - n_patches_sq = n_len / proj_stack_factor; + const int n_len = CLIP_ALIGN(n_patches, proj_stack_factor); + n_patches = n_len / proj_stack_factor; } // whisper downscales input token by half after conv1d - n_patches_sq /= 2; + n_patches /= 2; if (ctx->model.audio_has_avgpool()) { // divide by 2 because of nn.AvgPool1d(2, stride=2) - n_patches_sq /= 2; + n_patches /= 2; } } break; - case PROJECTOR_TYPE_LFM2: - { - n_patches_sq = (img->nx / (params.patch_size * params.proj_scale_factor)) * (img->ny / (params.patch_size * params.proj_scale_factor)); - } break; default: GGML_ABORT("unsupported projector type"); } - return n_patches_sq; + return n_patches; } static std::vector>> get_1d_sincos_pos_embed_from_grid_new(int embed_dim, const std::vector> & pos) { diff --git a/tools/mtmd/clip.h b/tools/mtmd/clip.h index 08f3efb7b1..3387cdbd36 100644 --- a/tools/mtmd/clip.h +++ b/tools/mtmd/clip.h @@ -82,11 +82,6 @@ struct clip_image_f32 * clip_image_f32_get_img(const struct clip_image_f32_batch */ void clip_build_img_from_pixels(const unsigned char * rgb_pixels, int nx, int ny, struct clip_image_u8 * img); -bool clip_image_load_from_file(const char * fname, struct clip_image_u8 * img); - -/** interpret bytes as an image file with length bytes_length, and use the result to populate img */ -bool clip_image_load_from_bytes(const unsigned char * bytes, size_t bytes_length, struct clip_image_u8 * img); - /** preprocess img and store the result in res_imgs, pad_to_square may be overridden to false depending on model configuration */ bool clip_image_preprocess(struct clip_ctx * ctx, const struct clip_image_u8 * img, struct clip_image_f32_batch * res_imgs ); diff --git a/tools/mtmd/tests.sh b/tools/mtmd/tests.sh index e73cf96af2..6f8a5f86ac 100755 --- a/tools/mtmd/tests.sh +++ b/tools/mtmd/tests.sh @@ -68,6 +68,7 @@ add_test_vision "ggml-org/Qwen2.5-VL-3B-Instruct-GGUF:Q4_K_M" add_test_vision "ggml-org/InternVL2_5-1B-GGUF:Q8_0" add_test_vision "ggml-org/InternVL3-1B-Instruct-GGUF:Q8_0" add_test_vision "ggml-org/Qwen2.5-Omni-3B-GGUF:Q4_K_M" +add_test_vision "ggml-org/LFM2-VL-450M-GGUF:Q8_0" add_test_audio "ggml-org/ultravox-v0_5-llama-3_2-1b-GGUF:Q8_0" add_test_audio "ggml-org/Qwen2.5-Omni-3B-GGUF:Q4_K_M" From f0d3c7405c323784a60f14ddddfbac3f7404d417 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 19 Aug 2025 08:45:12 +0300 Subject: [PATCH 031/174] batched-bench : use rand tokens (#15398) --- tools/batched-bench/batched-bench.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/batched-bench/batched-bench.cpp b/tools/batched-bench/batched-bench.cpp index 03628f74b2..c6c601add3 100644 --- a/tools/batched-bench/batched-bench.cpp +++ b/tools/batched-bench/batched-bench.cpp @@ -57,6 +57,13 @@ int main(int argc, char ** argv) { return 1; } + const llama_vocab * vocab = llama_model_get_vocab(model); + const int32_t n_vocab = llama_vocab_n_tokens(vocab); + + const auto get_token_rand = [n_vocab]() -> llama_token { + return std::rand() % n_vocab; + }; + auto * mem = llama_get_memory(ctx); const int32_t n_kv_max = llama_n_ctx(ctx); @@ -93,7 +100,7 @@ int main(int argc, char ** argv) { // warm up { for (int i = 0; i < 16; ++i) { - common_batch_add(batch, 0, i, { 0 }, false); + common_batch_add(batch, get_token_rand(), i, { 0 }, false); } if (!decode_helper(ctx, batch, ctx_params.n_batch)) { @@ -127,7 +134,7 @@ int main(int argc, char ** argv) { for (int j = 0; j < (is_pp_shared ? 1 : pl); ++j) { for (int i = 0; i < pp; ++i) { - common_batch_add(batch, 0, i, { j }, i == pp - 1); + common_batch_add(batch, get_token_rand(), i, { j }, i == pp - 1); } } @@ -154,7 +161,7 @@ int main(int argc, char ** argv) { common_batch_clear(batch); for (int j = 0; j < pl; ++j) { - common_batch_add(batch, 0, pp + i, { j }, true); + common_batch_add(batch, get_token_rand(), pp + i, { j }, true); } if (!decode_helper(ctx, batch, ctx_params.n_batch)) { From 9d262f4bad0d37838100133537aaf0a83835ed12 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 19 Aug 2025 08:45:26 +0300 Subject: [PATCH 032/174] server : remove swa_full warning (#15399) --- src/llama-context.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 7d7abad5d4..1ebfc88ab6 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -145,11 +145,6 @@ llama_context::llama_context( __func__, n_ctx_per_seq, hparams.n_ctx_train); } - if (!params.swa_full && cparams.n_seq_max > 1 && hparams.is_swa_any()) { - LLAMA_LOG_WARN("%s: requested n_seq_max (%u) > 1, but swa_full is not enabled -- performance may be degraded: %s\n", - __func__, cparams.n_seq_max, "https://github.com/ggml-org/llama.cpp/pull/13845#issuecomment-2924800573"); - } - if (!hparams.vocab_only) { // GPU backends for (auto * dev : model.devices) { From e9288e886970884f288533cd597b3798995b4099 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Tue, 19 Aug 2025 10:29:36 +0200 Subject: [PATCH 033/174] chat : clarify the meaning of reasoning_format (#15408) * chat : clarify the meaning of reasoning_format * add link to this PR --- common/chat.cpp | 1 - common/common.h | 7 +++++-- tests/test-chat.cpp | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/chat.cpp b/common/chat.cpp index 23d3828f9c..5fe5643d38 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -632,7 +632,6 @@ const char * common_reasoning_format_name(common_reasoning_format format) { case COMMON_REASONING_FORMAT_AUTO: return "auto"; case COMMON_REASONING_FORMAT_DEEPSEEK: return "deepseek"; case COMMON_REASONING_FORMAT_DEEPSEEK_LEGACY: return "deepseek-legacy"; - case COMMON_REASONING_FORMAT_GRANITE: return "granite"; default: throw std::runtime_error("Unknown reasoning format"); } diff --git a/common/common.h b/common/common.h index 75596e6b32..dfb63461bc 100644 --- a/common/common.h +++ b/common/common.h @@ -239,12 +239,15 @@ struct common_params_diffusion { bool add_gumbel_noise = false; // add gumbel noise to the logits if temp > 0.0 }; +// reasoning API response format (not to be confused as chat template's reasoning format) enum common_reasoning_format { COMMON_REASONING_FORMAT_NONE, - COMMON_REASONING_FORMAT_AUTO, + COMMON_REASONING_FORMAT_AUTO, // Same as deepseek, using `message.reasoning_content` COMMON_REASONING_FORMAT_DEEPSEEK_LEGACY, // Extract thinking tag contents and return as `message.reasoning_content`, or leave inline in tags in stream mode COMMON_REASONING_FORMAT_DEEPSEEK, // Extract thinking tag contents and return as `message.reasoning_content`, including in streaming deltas. - COMMON_REASONING_FORMAT_GRANITE, // Extract thinking tag contents and return as `message.reasoning_content`, including in streaming deltas. + // do not extend this enum unless you absolutely have to + // in most cases, use COMMON_REASONING_FORMAT_AUTO + // see: https://github.com/ggml-org/llama.cpp/pull/15408 }; diff --git a/tests/test-chat.cpp b/tests/test-chat.cpp index ea4060c876..a6daa93a82 100644 --- a/tests/test-chat.cpp +++ b/tests/test-chat.cpp @@ -1408,7 +1408,7 @@ static void test_template_output_parsers() { /* is_partial= */ false, { /* .format = */ COMMON_CHAT_FORMAT_GRANITE, - /* .reasoning_format = */ COMMON_REASONING_FORMAT_GRANITE, + /* .reasoning_format = */ COMMON_REASONING_FORMAT_DEEPSEEK, })); // Test parsing tool calls From 6424594c56f4dbd0573455d89a0d89a0ac093d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Gie=C3=9Fing?= Date: Tue, 19 Aug 2025 10:54:31 +0200 Subject: [PATCH 034/174] ggml-cpu: add mxfp4 VSX intrinsics for Power9+ (ppc64le) hardware (#15385) * Added VSX intrinsics for Power9+ systems Signed-off-by: mgiessing * Manual unrolling for minor perf improvement Signed-off-by: mgiessing * Update ggml/src/ggml-cpu/arch/powerpc/quants.c Co-authored-by: Georgi Gerganov --------- Signed-off-by: mgiessing Co-authored-by: Georgi Gerganov --- ggml/src/ggml-cpu/arch-fallback.h | 1 - ggml/src/ggml-cpu/arch/powerpc/quants.c | 66 +++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cpu/arch-fallback.h b/ggml/src/ggml-cpu/arch-fallback.h index f476127995..0bfb92df17 100644 --- a/ggml/src/ggml-cpu/arch-fallback.h +++ b/ggml/src/ggml-cpu/arch-fallback.h @@ -73,7 +73,6 @@ #define ggml_vec_dot_tq1_0_q8_K_generic ggml_vec_dot_tq1_0_q8_K #define ggml_vec_dot_tq2_0_q8_K_generic ggml_vec_dot_tq2_0_q8_K #define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K -#define ggml_vec_dot_mxfp4_q8_0_generic ggml_vec_dot_mxfp4_q8_0 // repack.cpp #define ggml_quantize_mat_q8_0_4x4_generic ggml_quantize_mat_q8_0_4x4 #define ggml_quantize_mat_q8_0_4x8_generic ggml_quantize_mat_q8_0_4x8 diff --git a/ggml/src/ggml-cpu/arch/powerpc/quants.c b/ggml/src/ggml-cpu/arch/powerpc/quants.c index 49aae7a23b..d3dfd049ea 100644 --- a/ggml/src/ggml-cpu/arch/powerpc/quants.c +++ b/ggml/src/ggml-cpu/arch/powerpc/quants.c @@ -278,6 +278,72 @@ void ggml_vec_dot_q4_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const voi #endif } +void ggml_vec_dot_mxfp4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + assert(n % QK_MXFP4 == 0); + static_assert(QK_MXFP4 == QK8_0, "QK_MXFP4 and QK8_0 must be the same"); + + const block_mxfp4 * GGML_RESTRICT x = vx; + const block_q8_0 * GGML_RESTRICT y = vy; + + const int nb = n / QK_MXFP4; + + int ib = 0; + float sumf = 0; + +#if defined(__POWER9_VECTOR__) + const vector signed char lowMask = vec_splats((signed char)0xF); + const vector unsigned char vshift4 = vec_splats((unsigned char)4); + vector float vsumf0 = vec_splats(0.0f); + + vector signed char kv = vec_xl(0, (const signed char *)kvalues_mxfp4); + +#pragma GCC unroll 8 + for (; ib < nb; ++ib) { + __builtin_prefetch(x[ib].qs, 0, 1); + __builtin_prefetch(y[ib].qs, 0, 1); + + vector float vyd = vec_splats(GGML_CPU_FP16_TO_FP32(y[ib].d) * + GGML_E8M0_TO_FP32_HALF(x[ib].e)); + + vector signed char q8y0 = vec_xl( 0, y[ib].qs); + vector signed char q8y1 = vec_xl(16, y[ib].qs); + + vector signed char qxs = (vector signed char)vec_xl(0, x[ib].qs); + + vector unsigned char lo_nibbles = (vector unsigned char)vec_and(qxs, lowMask); + vector unsigned char hi_nibbles = (vector unsigned char)vec_sr(qxs, vshift4); + + vector signed char q4x0 = vec_perm(kv, kv, lo_nibbles); + vector signed char q4x1 = vec_perm(kv, kv, hi_nibbles); + + vector signed short qv0 = vec_add(vec_mule(q4x0, q8y0), vec_mulo(q4x0, q8y0)); + vector signed short qv1 = vec_add(vec_mule(q4x1, q8y1), vec_mulo(q4x1, q8y1)); + + vector signed int vsumi0 = vec_splats((int32_t)0); + vsumi0 = vec_sum4s(qv0, vsumi0); + vsumi0 = vec_sum4s(qv1, vsumi0); + + vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vyd, vsumf0); + } + + vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4)); + vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8)); + sumf = vec_extract(vsumf0, 0); + *s = sumf; +#else + UNUSED(x); + UNUSED(y); + UNUSED(ib); + UNUSED(sumf); + ggml_vec_dot_mxfp4_q8_0_generic(n, s, bs, vx, bx, vy, by, nrc); +#endif +} + void ggml_vec_dot_q5_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { const int qk = QK8_0; const int nb = n / qk; From 67f09a3a27db443f9870aac87e163dba0d08131e Mon Sep 17 00:00:00 2001 From: R0CKSTAR Date: Tue, 19 Aug 2025 18:33:47 +0800 Subject: [PATCH 035/174] musa: handle __hgt2_mask, available starting from MUSA SDK rc4.3.0 (#15413) Signed-off-by: Xiaodong Ye --- ggml/src/ggml-cuda/common.cuh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index 2b14b30ac9..76ace816ff 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -78,6 +78,8 @@ #define GGML_CUDA_CC_IS_CDNA3(cc) (cc >= GGML_CUDA_CC_CDNA3 && cc < GGML_CUDA_CC_RDNA1) // Moore Threads +#define MUSART_HMASK 40300 // MUSA rc4.3, min. ver. for half2 -> uint mask comparisons + #define GGML_CUDA_CC_QY1 (GGML_CUDA_CC_OFFSET_MTHREADS + 0x210) // MTT S80, MTT S3000 #define GGML_CUDA_CC_QY2 (GGML_CUDA_CC_OFFSET_MTHREADS + 0x220) // MTT S4000 #define GGML_CUDA_CC_NG (GGML_CUDA_CC_OFFSET_MTHREADS + 0x310) // TBD @@ -490,13 +492,14 @@ static __device__ __forceinline__ half2 warp_reduce_max(half2 x) { #endif // !defined(GGML_USE_HIP) && __CUDA_ARCH__ >= GGML_CUDA_CC_PASCAL || defined(GGML_USE_HIP) } -#if CUDART_VERSION < CUDART_HMASK +#if (defined(CUDART_VERSION) && CUDART_VERSION < CUDART_HMASK) || defined(GGML_USE_HIP) || \ + (defined(MUSART_VERSION) && MUSART_VERSION < MUSART_HMASK) static __device__ __forceinline__ uint32_t __hgt2_mask(const half2 a, const half2 b) { const uint32_t mask_low = 0x0000FFFF * (float( __low2half(a)) > float( __low2half(b))); const uint32_t mask_high = 0xFFFF0000 * (float(__high2half(a)) > float(__high2half(b))); return mask_low | mask_high; } -#endif // CUDART_VERSION < CUDART_HMASK +#endif // (defined(CUDART_VERSION) && CUDART_VERSION < CUDART_HMASK) || defined(GGML_USE_HIP) || (defined(MUSART_VERSION) && MUSART_VERSION < MUSART_HMASK) static __device__ __forceinline__ int ggml_cuda_dp4a(const int a, const int b, int c) { #if defined(GGML_USE_HIP) From a6d3cfe7fa6ea1fb0e1ba8243b731db22ddc0b49 Mon Sep 17 00:00:00 2001 From: SHUAI YANG Date: Tue, 19 Aug 2025 21:28:22 +0800 Subject: [PATCH 036/174] CANN: optimize rope operator (#15335) * optimize rope ops * amendment * delete trailing whitespace * change the variable name --- ggml/src/ggml-cann/aclnn_ops.cpp | 166 +++++++++++++++++++------------ ggml/src/ggml-cann/common.h | 13 +++ 2 files changed, 117 insertions(+), 62 deletions(-) diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index 259a2928b1..2a5cb8abfa 100755 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -2154,86 +2154,129 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, GGML_TENSOR_BINARY_OP_LOCALS - // theta_scale arange, [0,1,...,ne00/2 - 1] int64_t theta_scale_length = ne00 / 2; - ggml_cann_pool_alloc theta_scale_allocator(ctx.pool(), - theta_scale_length * sizeof(float_t)); - void* theta_scale_buffer = theta_scale_allocator.get(); int64_t theta_scale_ne[] = {theta_scale_length, 1, 1, 1}; size_t theta_scale_nb[] = {sizeof(float_t), sizeof(float_t), sizeof(float_t), theta_scale_length * sizeof(float_t)}; - aclTensor* acl_theta_scale_tensor = - ggml_cann_create_tensor(theta_scale_buffer, ACL_FLOAT, sizeof(float_t), - theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); - float start = 0; - float step = 1; - float stop = ne00 / 2; - float n_elements = ne00 / 2; - aclnn_arange(ctx, acl_theta_scale_tensor, start, stop, step, n_elements); - - // power - aclScalar* acl_theta_scale = aclCreateScalar(&theta_scale, aclDataType::ACL_FLOAT); - GGML_CANN_CALL_ACLNN_OP(ctx, PowScalarTensor, acl_theta_scale, acl_theta_scale_tensor, - acl_theta_scale_tensor); - - // freq_scale - if (freq_scale != 1) { - aclnn_muls(ctx, acl_theta_scale_tensor, freq_scale, nullptr, true); - } - - // freq_factors - if (src2) { - aclTensor* acl_freq_factors_tensor = ggml_cann_create_tensor( - src2->data, ggml_cann_type_mapping(src2->type), - ggml_type_size(src2->type), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); - aclnn_div(ctx, acl_theta_scale_tensor, acl_freq_factors_tensor); - ggml_cann_release_resources(ctx, acl_freq_factors_tensor); - } - - // position GGML_ASSERT(src1->type == GGML_TYPE_I32); int64_t position_length = src1->ne[0]; int64_t position_ne[] = {1, 1, position_length, 1}; size_t position_nb[] = {sizeof(int32_t), sizeof(int32_t), sizeof(int32_t), sizeof(int32_t) * position_length}; - aclTensor* acl_position_tensor = ggml_cann_create_tensor( - src1->data, ggml_cann_type_mapping(src1->type), - ggml_type_size(src1->type), position_ne, position_nb, GGML_MAX_DIMS); - // power * position - int64_t theta_length = theta_scale_length * position_length; - ggml_cann_pool_alloc theta_allocator(ctx.pool(), - theta_length * sizeof(float_t)); - void* theta_buffer = theta_allocator.get(); int64_t theta_ne[] = {theta_scale_length, 1, position_length, 1}; size_t theta_nb[GGML_MAX_DIMS]; theta_nb[0] = sizeof(float_t); for (int i = 1; i < GGML_MAX_DIMS; i++) { theta_nb[i] = theta_nb[i - 1] * theta_ne[i - 1]; } - aclTensor* acl_theta_tensor = - ggml_cann_create_tensor(theta_buffer, ACL_FLOAT, sizeof(float_t), - theta_ne, theta_nb, GGML_MAX_DIMS); - aclnn_mul(ctx, acl_position_tensor, acl_theta_scale_tensor, - acl_theta_tensor); - // sin/cos - ggml_cann_pool_alloc sin_allocator(ctx.pool(), - theta_length * sizeof(float_t)); - void* sin_buffer = sin_allocator.get(); + bool is_q = (std::strncmp(dst->name, "Qcur-", 5) == 0); + bool is_k = (std::strncmp(dst->name, "Kcur-", 5) == 0); + + // used for accuracy testing + bool is_attention = is_q || is_k; + + if(ctx.init_ptr == nullptr || !is_attention) { + // theta_scale arange, [0,1,...,ne00/2 - 1] + if(ctx.init_ptr != nullptr){ + ACL_CHECK(aclrtFree(ctx.init_ptr)); + } + ACL_CHECK(aclrtMalloc(&ctx.init_ptr, theta_scale_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + + aclTensor* acl_theta_scale_tensor = + ggml_cann_create_tensor(ctx.init_ptr, ACL_FLOAT, sizeof(float_t), + theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + float start = 0; + float step = 1; + float stop = ne00 / 2; + float n_elements = ne00 / 2; + aclnn_arange(ctx, acl_theta_scale_tensor, start, stop, step, n_elements); + + // power + aclScalar* acl_theta_scale = aclCreateScalar(&theta_scale, aclDataType::ACL_FLOAT); + GGML_CANN_CALL_ACLNN_OP(ctx, PowScalarTensor, acl_theta_scale, acl_theta_scale_tensor, + acl_theta_scale_tensor); + + // freq_scale + if (freq_scale != 1) { + aclnn_muls(ctx, acl_theta_scale_tensor, freq_scale, nullptr, true); + } + + // freq_factors + if (src2) { + aclTensor* acl_freq_factors_tensor = ggml_cann_create_tensor( + src2->data, ggml_cann_type_mapping(src2->type), + ggml_type_size(src2->type), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + aclnn_div(ctx, acl_theta_scale_tensor, acl_freq_factors_tensor); + ggml_cann_release_resources(ctx, acl_freq_factors_tensor); + } + // release + ggml_cann_release_resources(ctx, acl_theta_scale_tensor,acl_theta_scale); + } + + if(ctx.sin_ptr == nullptr) { + int64_t theta_length = theta_scale_length * ctx.max_prompt_length; + ACL_CHECK(aclrtMalloc(&ctx.sin_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + ACL_CHECK(aclrtMalloc(&ctx.cos_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + } + if(position_length > ctx.max_prompt_length) { + ctx.max_prompt_length = position_length; + int64_t theta_length = theta_scale_length * ctx.max_prompt_length; + ACL_CHECK(aclrtFree(ctx.sin_ptr)); + ACL_CHECK(aclrtFree(ctx.cos_ptr)); + ACL_CHECK(aclrtMalloc(&ctx.sin_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + ACL_CHECK(aclrtMalloc(&ctx.cos_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + } + + bool is_fisrt_layer = (std::strncmp(dst->name, "Qcur-0", GGML_MAX_NAME) == 0); + + if(is_fisrt_layer || !is_attention) { + + aclTensor* acl_theta_scale_tensor = + ggml_cann_create_tensor(ctx.init_ptr, ACL_FLOAT, sizeof(float_t), + theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + + // position + aclTensor* acl_position_tensor = ggml_cann_create_tensor( + src1->data, ggml_cann_type_mapping(src1->type), + ggml_type_size(src1->type), position_ne, position_nb, GGML_MAX_DIMS); + + // power * position + int64_t theta_length = theta_scale_length * position_length; + ggml_cann_pool_alloc theta_allocator(ctx.pool(), + theta_length * sizeof(float_t)); + void* theta_buffer = theta_allocator.get(); + + aclTensor* acl_theta_tensor = + ggml_cann_create_tensor(theta_buffer, ACL_FLOAT, sizeof(float_t), + theta_ne, theta_nb, GGML_MAX_DIMS); + aclnn_mul(ctx, acl_position_tensor, acl_theta_scale_tensor, + acl_theta_tensor); + + // sin/cos + aclTensor* acl_sin_tensor = ggml_cann_create_tensor( + ctx.sin_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, + GGML_MAX_DIMS, ACL_FORMAT_ND); + aclnn_sin(ctx, acl_theta_tensor, acl_sin_tensor); + + aclTensor* acl_cos_tensor = ggml_cann_create_tensor( + ctx.cos_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, + GGML_MAX_DIMS, ACL_FORMAT_ND); + aclnn_cos(ctx, acl_theta_tensor, acl_cos_tensor); + + // release + ggml_cann_release_resources(ctx, acl_theta_scale_tensor, acl_position_tensor, + acl_theta_tensor, acl_sin_tensor, acl_cos_tensor); + } + aclTensor* acl_sin_tensor = ggml_cann_create_tensor( - sin_buffer, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, - GGML_MAX_DIMS, ACL_FORMAT_ND); - aclnn_sin(ctx, acl_theta_tensor, acl_sin_tensor); - - ggml_cann_pool_alloc cos_allocator(ctx.pool(), - theta_length * sizeof(float_t)); - void* cos_buffer = cos_allocator.get(); + ctx.sin_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, + GGML_MAX_DIMS, ACL_FORMAT_ND); aclTensor* acl_cos_tensor = ggml_cann_create_tensor( - cos_buffer, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, - GGML_MAX_DIMS, ACL_FORMAT_ND); - aclnn_cos(ctx, acl_theta_tensor, acl_cos_tensor); + ctx.cos_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, + GGML_MAX_DIMS, ACL_FORMAT_ND); // attn_factor if (attn_factor != 1) { @@ -2257,8 +2300,7 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, } // release - ggml_cann_release_resources(ctx, acl_theta_scale_tensor, acl_position_tensor, - acl_theta_tensor, acl_sin_tensor, acl_cos_tensor, acl_theta_scale); + ggml_cann_release_resources(ctx, acl_sin_tensor, acl_cos_tensor); } #ifdef __cplusplus diff --git a/ggml/src/ggml-cann/common.h b/ggml/src/ggml-cann/common.h index 9d294f72b6..2c2033bfba 100755 --- a/ggml/src/ggml-cann/common.h +++ b/ggml/src/ggml-cann/common.h @@ -368,6 +368,10 @@ struct ggml_backend_cann_context { std::string name; /**< Name of the device. */ std::string description; /**< Description of the device. */ aclrtEvent copy_event = nullptr; /**< Event for managing copy operations. */ + void* init_ptr = nullptr; + void* sin_ptr = nullptr; + void* cos_ptr = nullptr; + int64_t max_prompt_length = 65536; #ifdef USE_ACL_GRAPH /// Cached CANN ACL graph used for executing the current ggml computation graph. std::unique_ptr cann_graph; @@ -414,6 +418,15 @@ struct ggml_backend_cann_context { ACL_CHECK(aclrtDestroyStream(streams[i])); } } + if(init_ptr != nullptr) { + ACL_CHECK(aclrtFree(init_ptr)); + } + if(sin_ptr != nullptr) { + ACL_CHECK(aclrtFree(sin_ptr)); + } + if(cos_ptr != nullptr) { + ACL_CHECK(aclrtFree(cos_ptr)); + } } /** From d2fcd91cf96b46f4485ce46b4e3a32bf0df37715 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 19 Aug 2025 16:46:37 +0300 Subject: [PATCH 037/174] server : disable context shift by default (#15416) * server : disable context shift by default ggml-ci * server : make scopr of test parameters local --- common/arg.cpp | 7 +++++++ common/common.h | 2 +- tools/server/tests/unit/test_basic.py | 2 +- tools/server/tests/unit/test_completion.py | 4 ++-- tools/server/tests/unit/test_ctx_shift.py | 6 ++---- tools/server/tests/unit/test_embedding.py | 2 +- tools/server/tests/unit/test_infill.py | 2 +- tools/server/tests/unit/test_lora.py | 2 +- tools/server/tests/unit/test_rerank.py | 2 +- tools/server/tests/unit/test_security.py | 2 +- tools/server/tests/unit/test_slot_save.py | 2 +- tools/server/tests/unit/test_speculative.py | 3 ++- tools/server/tests/unit/test_tokenize.py | 2 +- tools/server/tests/unit/test_tool_call.py | 2 ++ tools/server/tests/utils.py | 6 +++--- tools/tts/tts.cpp | 1 - 16 files changed, 27 insertions(+), 20 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 98baac4c14..d3868018ef 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1530,6 +1530,13 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.ctx_shift = false; } ).set_examples({LLAMA_EXAMPLE_MAIN, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_IMATRIX, LLAMA_EXAMPLE_PERPLEXITY}).set_env("LLAMA_ARG_NO_CONTEXT_SHIFT")); + add_opt(common_arg( + {"--context-shift"}, + string_format("enables context shift on infinite text generation (default: %s)", params.ctx_shift ? "disabled" : "enabled"), + [](common_params & params) { + params.ctx_shift = true; + } + ).set_examples({LLAMA_EXAMPLE_MAIN, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_IMATRIX, LLAMA_EXAMPLE_PERPLEXITY}).set_env("LLAMA_ARG_CONTEXT_SHIFT")); add_opt(common_arg( {"--chunks"}, "N", string_format("max number of chunks to process (default: %d, -1 = all)", params.n_chunks), diff --git a/common/common.h b/common/common.h index dfb63461bc..920de7b50a 100644 --- a/common/common.h +++ b/common/common.h @@ -375,7 +375,7 @@ struct common_params { bool cont_batching = true; // insert new sequences for decoding on-the-fly bool flash_attn = false; // flash attention bool no_perf = false; // disable performance metrics - bool ctx_shift = true; // context shift on inifinite text generation + bool ctx_shift = false; // context shift on inifinite text generation bool swa_full = false; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) bool kv_unified = false; // enable unified KV cache diff --git a/tools/server/tests/unit/test_basic.py b/tools/server/tests/unit/test_basic.py index 1485de8ceb..c7b3af0489 100644 --- a/tools/server/tests/unit/test_basic.py +++ b/tools/server/tests/unit/test_basic.py @@ -5,7 +5,7 @@ from utils import * server = ServerPreset.tinyllama2() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama2() diff --git a/tools/server/tests/unit/test_completion.py b/tools/server/tests/unit/test_completion.py index be3a0052c6..adb6f27864 100644 --- a/tools/server/tests/unit/test_completion.py +++ b/tools/server/tests/unit/test_completion.py @@ -7,7 +7,7 @@ from utils import * server = ServerPreset.tinyllama2() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama2() @@ -229,7 +229,7 @@ def test_nocache_long_input_prompt(): "temperature": 1.0, "cache_prompt": False, }) - assert res.status_code == 200 + assert res.status_code == 400 def test_completion_with_tokens_input(): diff --git a/tools/server/tests/unit/test_ctx_shift.py b/tools/server/tests/unit/test_ctx_shift.py index 2431ac7088..8f51bc301a 100644 --- a/tools/server/tests/unit/test_ctx_shift.py +++ b/tools/server/tests/unit/test_ctx_shift.py @@ -11,7 +11,7 @@ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. """.strip() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama2() @@ -25,6 +25,7 @@ def test_ctx_shift_enabled(): # the prompt is truncated to keep the last 109 tokens # 64 tokens are generated thanks to shifting the context when it gets full global server + server.enable_ctx_shift = True server.start() res = server.make_request("POST", "/completion", data={ "n_predict": 64, @@ -42,7 +43,6 @@ def test_ctx_shift_enabled(): ]) def test_ctx_shift_disabled_short_prompt(n_predict: int, n_token_output: int, truncated: bool): global server - server.disable_ctx_shift = True server.n_predict = -1 server.start() res = server.make_request("POST", "/completion", data={ @@ -56,7 +56,6 @@ def test_ctx_shift_disabled_short_prompt(n_predict: int, n_token_output: int, tr def test_ctx_shift_disabled_long_prompt(): global server - server.disable_ctx_shift = True server.start() res = server.make_request("POST", "/completion", data={ "n_predict": 64, @@ -68,7 +67,6 @@ def test_ctx_shift_disabled_long_prompt(): def test_ctx_shift_disabled_stream(): global server - server.disable_ctx_shift = True server.start() res = server.make_stream_request("POST", "/v1/completions", data={ "n_predict": 256, diff --git a/tools/server/tests/unit/test_embedding.py b/tools/server/tests/unit/test_embedding.py index 0feb452ccf..50601b8396 100644 --- a/tools/server/tests/unit/test_embedding.py +++ b/tools/server/tests/unit/test_embedding.py @@ -8,7 +8,7 @@ server = ServerPreset.bert_bge_small() EPSILON = 1e-3 -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.bert_bge_small() diff --git a/tools/server/tests/unit/test_infill.py b/tools/server/tests/unit/test_infill.py index 10554db0f6..73dacdae81 100644 --- a/tools/server/tests/unit/test_infill.py +++ b/tools/server/tests/unit/test_infill.py @@ -3,7 +3,7 @@ from utils import * server = ServerPreset.tinyllama_infill() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama_infill() diff --git a/tools/server/tests/unit/test_lora.py b/tools/server/tests/unit/test_lora.py index c1aa8be70e..00b2f245f6 100644 --- a/tools/server/tests/unit/test_lora.py +++ b/tools/server/tests/unit/test_lora.py @@ -5,7 +5,7 @@ server = ServerPreset.stories15m_moe() LORA_FILE_URL = "https://huggingface.co/ggml-org/stories15M_MOE/resolve/main/moe_shakespeare15M.gguf" -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.stories15m_moe() diff --git a/tools/server/tests/unit/test_rerank.py b/tools/server/tests/unit/test_rerank.py index f4f570ad5e..0b63c7821e 100644 --- a/tools/server/tests/unit/test_rerank.py +++ b/tools/server/tests/unit/test_rerank.py @@ -4,7 +4,7 @@ from utils import * server = ServerPreset.jina_reranker_tiny() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.jina_reranker_tiny() diff --git a/tools/server/tests/unit/test_security.py b/tools/server/tests/unit/test_security.py index 620b25376b..0e11580553 100644 --- a/tools/server/tests/unit/test_security.py +++ b/tools/server/tests/unit/test_security.py @@ -6,7 +6,7 @@ server = ServerPreset.tinyllama2() TEST_API_KEY = "sk-this-is-the-secret-key" -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama2() diff --git a/tools/server/tests/unit/test_slot_save.py b/tools/server/tests/unit/test_slot_save.py index 38704f5ece..1b428cc2a8 100644 --- a/tools/server/tests/unit/test_slot_save.py +++ b/tools/server/tests/unit/test_slot_save.py @@ -3,7 +3,7 @@ from utils import * server = ServerPreset.tinyllama2() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama2() diff --git a/tools/server/tests/unit/test_speculative.py b/tools/server/tests/unit/test_speculative.py index 54db38cf3b..38ca4325ba 100644 --- a/tools/server/tests/unit/test_speculative.py +++ b/tools/server/tests/unit/test_speculative.py @@ -16,7 +16,7 @@ def create_server(): server.draft_max = 8 -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def fixture_create_server(): return create_server() @@ -91,6 +91,7 @@ def test_slot_ctx_not_exceeded(): def test_with_ctx_shift(): global server server.n_ctx = 64 + server.enable_ctx_shift = True server.start() res = server.make_request("POST", "/completion", data={ "prompt": "Hello " * 56, diff --git a/tools/server/tests/unit/test_tokenize.py b/tools/server/tests/unit/test_tokenize.py index 382457c9d6..424cac5f3d 100644 --- a/tools/server/tests/unit/test_tokenize.py +++ b/tools/server/tests/unit/test_tokenize.py @@ -4,7 +4,7 @@ from utils import * server = ServerPreset.tinyllama2() -@pytest.fixture(scope="module", autouse=True) +@pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinyllama2() diff --git a/tools/server/tests/unit/test_tool_call.py b/tools/server/tests/unit/test_tool_call.py index 20f048c6f6..a3c3ccdf58 100755 --- a/tools/server/tests/unit/test_tool_call.py +++ b/tools/server/tests/unit/test_tool_call.py @@ -22,6 +22,8 @@ def create_server(): server.model_alias = "tinyllama-2-tool-call" server.server_port = 8081 server.n_slots = 1 + server.n_ctx = 8192 + server.n_batch = 2048 class CompletionMode(Enum): NORMAL = "normal" diff --git a/tools/server/tests/utils.py b/tools/server/tests/utils.py index bc547ca03b..49277e6000 100644 --- a/tools/server/tests/utils.py +++ b/tools/server/tests/utils.py @@ -79,7 +79,7 @@ class ServerProcess: draft: int | None = None api_key: str | None = None lora_files: List[str] | None = None - disable_ctx_shift: int | None = False + enable_ctx_shift: int | None = False draft_min: int | None = None draft_max: int | None = None no_webui: bool | None = None @@ -178,8 +178,8 @@ class ServerProcess: if self.lora_files: for lora_file in self.lora_files: server_args.extend(["--lora", lora_file]) - if self.disable_ctx_shift: - server_args.extend(["--no-context-shift"]) + if self.enable_ctx_shift: + server_args.append("--context-shift") if self.api_key: server_args.extend(["--api-key", self.api_key]) if self.draft_max: diff --git a/tools/tts/tts.cpp b/tools/tts/tts.cpp index a71e9bf5b5..18f01a9946 100644 --- a/tools/tts/tts.cpp +++ b/tools/tts/tts.cpp @@ -581,7 +581,6 @@ int main(int argc, char ** argv) { params.model = params.vocoder.model; params.embedding = true; - params.ctx_shift = false; // silence warning params.n_ubatch = params.n_batch; common_init_result llama_init_cts = common_init_from_params(params); From 1e19f5d462b6df490a13103ca555d851f47e5fa5 Mon Sep 17 00:00:00 2001 From: Gian-Carlo Pascutto Date: Tue, 19 Aug 2025 18:58:14 +0200 Subject: [PATCH 038/174] common : Add top-nsigma sampler to help globally (#15428) Fixes #15423. --- common/arg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/arg.cpp b/common/arg.cpp index d3868018ef..d9f6ec96d0 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1830,7 +1830,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex [](common_params & params, const std::string & value) { params.sampling.top_n_sigma = std::stof(value); } - ).set_examples({LLAMA_EXAMPLE_MAIN}).set_sparam()); + ).set_sparam()); add_opt(common_arg( {"--xtc-probability"}, "N", string_format("xtc probability (default: %.1f, 0.0 = disabled)", (double)params.sampling.xtc_probability), From 9ef6b0b835450ee10cd7be934ad8aef681dc1f43 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 19 Aug 2025 19:58:28 +0300 Subject: [PATCH 039/174] model : add gpt-oss type strings (#15424) --- src/llama-model.cpp | 7 ++++++- src/llama-model.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 0c149cd478..431102edea 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -86,6 +86,7 @@ const char * llm_type_name(llm_type type) { case LLM_TYPE_40B: return "40B"; case LLM_TYPE_65B: return "65B"; case LLM_TYPE_70B: return "70B"; + case LLM_TYPE_120B: return "120B"; case LLM_TYPE_142B: return "142B"; case LLM_TYPE_236B: return "236B"; case LLM_TYPE_290B: return "290B"; @@ -1834,7 +1835,11 @@ void llama_model::load_hparams(llama_model_loader & ml) { hparams.swa_type = LLAMA_SWA_TYPE_STANDARD; hparams.set_swa_pattern(2); - // TODO: switch (hparams.n_layer) + switch (hparams.n_layer) { + case 24: type = LLM_TYPE_20B; break; + case 36: type = LLM_TYPE_120B; break; + default: type = LLM_TYPE_UNKNOWN; + } } break; case LLM_ARCH_LFM2: { diff --git a/src/llama-model.h b/src/llama-model.h index 46f7d0480f..f639fa1398 100644 --- a/src/llama-model.h +++ b/src/llama-model.h @@ -79,6 +79,7 @@ enum llm_type { LLM_TYPE_40B, LLM_TYPE_65B, LLM_TYPE_70B, + LLM_TYPE_120B, LLM_TYPE_142B, LLM_TYPE_236B, LLM_TYPE_290B, From fb22dd07a639e81c7415e30b146f545f1a2f2caf Mon Sep 17 00:00:00 2001 From: lhez Date: Wed, 20 Aug 2025 02:25:51 +0800 Subject: [PATCH 040/174] opencl: mark `argsort` unsupported if cols exceed workgroup limit (#15375) --- ggml/src/ggml-opencl/ggml-opencl.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index 8a2ac7e377..df27501361 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -333,6 +333,7 @@ struct ggml_backend_opencl_context { cl_int alignment; size_t max_alloc_size; + size_t max_workgroup_size; bool fp16_support; bool has_vector_subgroup_broadcast; bool disable_fusion; @@ -2218,6 +2219,9 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) { clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(size_t), &backend_ctx->max_alloc_size, NULL); GGML_LOG_INFO("ggml_opencl: max mem alloc size: %zu MB\n", backend_ctx->max_alloc_size/1024/1024); + clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), &backend_ctx->max_workgroup_size, NULL); + GGML_LOG_INFO("ggml_opencl: device max workgroup size: %lu\n", backend_ctx->max_workgroup_size); + // Check SVM. cl_device_svm_capabilities svm_caps; CL_CHECK(clGetDeviceInfo(device, CL_DEVICE_SVM_CAPABILITIES, sizeof(cl_device_svm_capabilities), &svm_caps, 0)); @@ -2533,7 +2537,8 @@ static ggml_status ggml_backend_opencl_graph_compute(ggml_backend_t backend, ggm } static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_tensor * op) { - GGML_UNUSED(dev); + ggml_backend_opencl_device_context * dev_ctx = (ggml_backend_opencl_device_context *)dev->context; + ggml_backend_opencl_context * backend_ctx = dev_ctx->backend_ctx; switch (op->op) { case GGML_OP_NONE: @@ -2708,8 +2713,17 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te } case GGML_OP_IM2COL: return true; - case GGML_OP_ARGSORT: - return op->src[0]->type == GGML_TYPE_F32; + case GGML_OP_ARGSORT: { + cl_kernel kernel = backend_ctx->kernel_argsort_f32_i32; + int max_workgroup_size = backend_ctx->get_kernel_workgroup_size(kernel); + + int cols = 1; + while (cols < op->ne[0]) { + cols *= 2; + } + + return cols <= max_workgroup_size && op->src[0]->type == GGML_TYPE_F32; + } case GGML_OP_SUM_ROWS: return op->src[0]->type == GGML_TYPE_F32 && ggml_is_contiguous(op->src[0]); case GGML_OP_FLASH_ATTN_EXT: From a094f381432d92c4bf92d2d6167284316ba73a62 Mon Sep 17 00:00:00 2001 From: R0CKSTAR Date: Wed, 20 Aug 2025 10:17:37 +0800 Subject: [PATCH 041/174] musa: fix build warnings (#15258) * musa: fix build warnings Signed-off-by: Xiaodong Ye * fix warning: comparison of integers of different signs: 'const int' and 'unsigned int' [-Wsign-compare] Signed-off-by: Xiaodong Ye --------- Signed-off-by: Xiaodong Ye --- ggml/src/ggml-cuda/add-id.cu | 6 +++--- ggml/src/ggml-cuda/fattn-mma-f16.cuh | 12 +++++++----- ggml/src/ggml-cuda/fattn-tile-f16.cu | 20 ++++++++++---------- ggml/src/ggml-cuda/fattn-tile-f32.cu | 13 +------------ ggml/src/ggml-cuda/fattn-vec-f16.cuh | 4 ++-- ggml/src/ggml-cuda/fattn-vec-f32.cuh | 15 ++------------- ggml/src/ggml-cuda/fattn-wmma-f16.cu | 6 +++--- ggml/src/ggml-cuda/mmf.cu | 4 ---- ggml/src/ggml-cuda/mmq.cuh | 4 +++- ggml/src/ggml-cuda/reduce_rows.cuh | 2 +- 10 files changed, 32 insertions(+), 54 deletions(-) diff --git a/ggml/src/ggml-cuda/add-id.cu b/ggml/src/ggml-cuda/add-id.cu index 8bed62ac9d..8d9cf692b4 100644 --- a/ggml/src/ggml-cuda/add-id.cu +++ b/ggml/src/ggml-cuda/add-id.cu @@ -11,14 +11,14 @@ static __global__ void add_id_kernel( const int64_t i1 = blockIdx.x; const int64_t i2 = blockIdx.y; - const int i11 = *(int32_t *) ((char *) src2 + i1*sizeof(int32_t) + i2*nb21); + const int i11 = *(const int32_t *) ((const char *) src2 + i1*sizeof(int32_t) + i2*nb21); const size_t nb1 = ne0 * sizeof(float); const size_t nb2 = ne1 * nb1; float * dst_row = (float *)((char *)dst + i1*nb1 + i2*nb2); - const float * src0_row = (const float *)((char *)src0 + i1*nb01 + i2*nb02); - const float * src1_row = (const float *)((char *)src1 + i11*nb11); + const float * src0_row = (const float *)((const char *)src0 + i1*nb01 + i2*nb02); + const float * src1_row = (const float *)((const char *)src1 + i11*nb11); for (int64_t i0 = threadIdx.x; i0 < ne0; i0 += blockDim.x) { dst_row[i0] = src0_row[i0] + src1_row[i0]; diff --git a/ggml/src/ggml-cuda/fattn-mma-f16.cuh b/ggml/src/ggml-cuda/fattn-mma-f16.cuh index 39731baaeb..1d7e0b037e 100644 --- a/ggml/src/ggml-cuda/fattn-mma-f16.cuh +++ b/ggml/src/ggml-cuda/fattn-mma-f16.cuh @@ -1237,10 +1237,12 @@ static __device__ __forceinline__ void flash_attn_ext_f16_process_tile( } #else GGML_UNUSED(Q_f2); GGML_UNUSED(K_h2); GGML_UNUSED(V_h2); - GGML_UNUSED(mask_h2); GGML_UNUSED(dstk); GGML_UNUSED(dstk_fixup); + GGML_UNUSED(mask_h2); GGML_UNUSED(sinks_f); + GGML_UNUSED(dstk); GGML_UNUSED(dstk_fixup); GGML_UNUSED(scale); GGML_UNUSED(slope); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(stride_Q1); - GGML_UNUSED(stride_Q2); GGML_UNUSED(stride_K); GGML_UNUSED(stride_V); GGML_UNUSED(stride_mask); + GGML_UNUSED(ne01); GGML_UNUSED(ne02); + GGML_UNUSED(stride_Q1); GGML_UNUSED(stride_Q2); + GGML_UNUSED(stride_K); GGML_UNUSED(stride_V); GGML_UNUSED(stride_mask); GGML_UNUSED(jt); GGML_UNUSED(kb0_start); GGML_UNUSED(kb0_stop); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE @@ -1395,8 +1397,8 @@ static __global__ void flash_attn_ext_f16( (Q_f2, K_h2, V_h2, mask_h2, sinks_f, dstk, dst_meta, scale, slope, logit_softcap, ne01, ne02, stride_Q1, stride_Q2, stride_K, stride_V, stride_mask, jt, kb0_start_kernel, kb0_stop_kernel); #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); GGML_UNUSED(sinks); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); + GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); + GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); diff --git a/ggml/src/ggml-cuda/fattn-tile-f16.cu b/ggml/src/ggml-cuda/fattn-tile-f16.cu index 1e23f8f79c..4111bcc04f 100644 --- a/ggml/src/ggml-cuda/fattn-tile-f16.cu +++ b/ggml/src/ggml-cuda/fattn-tile-f16.cu @@ -299,17 +299,17 @@ static __global__ void flash_attn_tile_ext_f16( } } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); GGML_UNUSED(sinks); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); - GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); + GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); + GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); + GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); - GGML_UNUSED(ne03); GGML_UNUSED(ne10); GGML_UNUSED(ne11); - GGML_UNUSED(ne12); GGML_UNUSED(ne13); GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); GGML_UNUSED(nb01); GGML_UNUSED(nb02); - GGML_UNUSED(nb03); GGML_UNUSED(nb11); GGML_UNUSED(nb12); - GGML_UNUSED(nb13); GGML_UNUSED(nb21); GGML_UNUSED(nb22); - GGML_UNUSED(nb23); + GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); + GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); + GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); + GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); + GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); + GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); + GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); NO_DEVICE_CODE; #endif // defined(FLASH_ATTN_AVAILABLE) && defined(FP16_AVAILABLE) } diff --git a/ggml/src/ggml-cuda/fattn-tile-f32.cu b/ggml/src/ggml-cuda/fattn-tile-f32.cu index c58194937d..1c1dc725d2 100644 --- a/ggml/src/ggml-cuda/fattn-tile-f32.cu +++ b/ggml/src/ggml-cuda/fattn-tile-f32.cu @@ -38,17 +38,6 @@ static __global__ void flash_attn_tile_ext_f32( return; #endif // FP16_MMA_AVAILABLE if (use_logit_softcap && !(D == 128 || D == 256)) { - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); GGML_UNUSED(sinks); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); NO_DEVICE_CODE; return; } @@ -313,7 +302,7 @@ static __global__ void flash_attn_tile_ext_f32( } #else GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); + GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); diff --git a/ggml/src/ggml-cuda/fattn-vec-f16.cuh b/ggml/src/ggml-cuda/fattn-vec-f16.cuh index b05f682cd3..2131b5feef 100644 --- a/ggml/src/ggml-cuda/fattn-vec-f16.cuh +++ b/ggml/src/ggml-cuda/fattn-vec-f16.cuh @@ -349,8 +349,8 @@ static __global__ void flash_attn_vec_ext_f16( dst_meta[((sequence*ne01 + ic0 + tid)*ne02 + head)*gridDim.y + blockIdx.y] = make_float2(kqmax[tid], kqsum[tid]); } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); GGML_UNUSED(sinks); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); + GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); + GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); diff --git a/ggml/src/ggml-cuda/fattn-vec-f32.cuh b/ggml/src/ggml-cuda/fattn-vec-f32.cuh index d6d0bfb744..a06fba6cde 100644 --- a/ggml/src/ggml-cuda/fattn-vec-f32.cuh +++ b/ggml/src/ggml-cuda/fattn-vec-f32.cuh @@ -37,17 +37,6 @@ static __global__ void flash_attn_vec_ext_f32( // Skip unused kernel variants for faster compilation: if (use_logit_softcap && !(D == 128 || D == 256)) { - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); - GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); - GGML_UNUSED(ne03); GGML_UNUSED(ne10); GGML_UNUSED(ne11); - GGML_UNUSED(ne12); GGML_UNUSED(ne13); GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); GGML_UNUSED(nb01); GGML_UNUSED(nb02); - GGML_UNUSED(nb03); GGML_UNUSED(nb11); GGML_UNUSED(nb12); - GGML_UNUSED(nb13); GGML_UNUSED(nb21); GGML_UNUSED(nb22); - GGML_UNUSED(nb23); NO_DEVICE_CODE; return; } @@ -346,8 +335,8 @@ static __global__ void flash_attn_vec_ext_f32( } #else GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); - GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); + GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); + GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); diff --git a/ggml/src/ggml-cuda/fattn-wmma-f16.cu b/ggml/src/ggml-cuda/fattn-wmma-f16.cu index 6bc7943ccd..2e2de8a093 100644 --- a/ggml/src/ggml-cuda/fattn-wmma-f16.cu +++ b/ggml/src/ggml-cuda/fattn-wmma-f16.cu @@ -471,9 +471,9 @@ static __global__ void flash_attn_ext_f16( dst_meta[j_dst_unrolled] = dst_meta_val; } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); GGML_UNUSED(sinks); - GGML_UNUSED(dst); GGML_UNUSED(dst_meta); GGML_UNUSED(scale); - GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); + GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); + GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); + GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); diff --git a/ggml/src/ggml-cuda/mmf.cu b/ggml/src/ggml-cuda/mmf.cu index 1437367e87..5c66fe5bb1 100644 --- a/ggml/src/ggml-cuda/mmf.cu +++ b/ggml/src/ggml-cuda/mmf.cu @@ -151,7 +151,6 @@ static void mul_mat_f_cuda( cudaStream_t stream) { typedef tile<16, 8, T> tile_A; typedef tile< 8, 8, T> tile_B; - typedef tile<16, 8, float> tile_C; GGML_ASSERT(!ids && "mul_mat_id not implemented"); @@ -352,9 +351,6 @@ void ggml_cuda_mul_mat_f(ggml_backend_cuda_context & ctx, const ggml_tensor * sr GGML_ASSERT(!ids || ids->nb[0] == ggml_type_size(ids->type)); GGML_ASSERT( nb0 == ts_dst); - const int cc = ggml_cuda_info().devices[ggml_cuda_get_device()].cc; - const enum ggml_prec prec = fast_fp16_available(cc) ? ggml_prec(dst->op_params[0]) : GGML_PREC_F32; - const float * src1_d = (const float *) src1->data; const int32_t * ids_d = ids ? (const int32_t *) ids->data : nullptr; float * dst_d = (float *) dst->data; diff --git a/ggml/src/ggml-cuda/mmq.cuh b/ggml/src/ggml-cuda/mmq.cuh index 96129bd831..c22907d404 100644 --- a/ggml/src/ggml-cuda/mmq.cuh +++ b/ggml/src/ggml-cuda/mmq.cuh @@ -2855,12 +2855,14 @@ static __device__ __forceinline__ void mmq_write_back_mma( #else typedef tile<16, 8, int> tile_C; constexpr int rows_per_warp = 2 * granularity; -#endif +#endif // defined(AMD_MFMA_AVAILABLE) constexpr int ntx = rows_per_warp/tile_C::I; // Number of x minitiles per warp. const int i0 = (threadIdx.y / ntx) * (ntx*tile_C::I); #if defined(TURING_MMA_AVAILABLE) || defined(AMD_MFMA_AVAILABLE) static_assert(nwarps*tile_C::I == mmq_y, "nwarps*tile_C::I != mmq_y"); +#else + GGML_UNUSED(nwarps); #endif // defined(AMD_MFMA_AVAILABLE) || defined(TURING_MMA_AVAILABLE) #pragma unroll diff --git a/ggml/src/ggml-cuda/reduce_rows.cuh b/ggml/src/ggml-cuda/reduce_rows.cuh index 6bee204136..6bcae9e52f 100644 --- a/ggml/src/ggml-cuda/reduce_rows.cuh +++ b/ggml/src/ggml-cuda/reduce_rows.cuh @@ -39,7 +39,7 @@ static __global__ void reduce_rows_f32(const float * __restrict__ x, float * __r } __syncthreads(); sum = 0.0f; - if (lane_id < (blockDim.x / WARP_SIZE)) { + if (lane_id < (static_cast(blockDim.x) / WARP_SIZE)) { sum = s_sum[lane_id]; } sum = warp_reduce_sum(sum); From 2f37014073f4c6ddc8f241c927db87337c71aa52 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 20 Aug 2025 13:30:46 +0300 Subject: [PATCH 042/174] lookahead : add sample command to readme (#15447) * lookahead : add sample command to readme * cont : build-agnostic command --- examples/lookahead/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/lookahead/README.md b/examples/lookahead/README.md index aab3cd0ca4..c82de2a5a9 100644 --- a/examples/lookahead/README.md +++ b/examples/lookahead/README.md @@ -5,3 +5,9 @@ Demonstration of lookahead decoding technique: https://lmsys.org/blog/2023-11-21-lookahead-decoding/ More info: https://github.com/ggml-org/llama.cpp/pull/4207 + +Sample command: + +```bash +llama-lookahead -hf ggml-org/Qwen2.5-Coder-3B-Q8_0-GGUF -p "// network server implemented in C\n// author: Peter Hacker\n\n#include" -e -ngl 99 -t 4 -n 512 -c 4096 -kvu +``` From 37f10f955f70e0158d50343d0b9a3f92d194daae Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 20 Aug 2025 12:31:16 +0200 Subject: [PATCH 043/174] make : remove make in favor of CMake (#15449) This commit removes the content from the Makefile and updates the current deprecation message to information that `make` has been replaced by CMake instead. The message when `make` is invoked will now be the following: ```console $ make Makefile:6: *** Build system changed: The Makefile build has been replaced by CMake. For build instructions see: https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md . Stop. ``` The motivation for this is that many, if not all targets fail to build now, after changes to the system, and `make` has also been deprected for some time now. --- Makefile | 1611 +----------------------------------------------------- 1 file changed, 6 insertions(+), 1605 deletions(-) diff --git a/Makefile b/Makefile index ac442aec09..bcbc770205 100644 --- a/Makefile +++ b/Makefile @@ -1,1608 +1,9 @@ -ifndef LLAMA_MAKEFILE -$(error The Makefile build is deprecated. Use the CMake build instead. For more details, see https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md) -endif +define newline -# Define the default target now so that it is always the first target -BUILD_TARGETS = \ - libllava.a \ - llama-batched \ - llama-batched-bench \ - llama-bench \ - llama-cli \ - llama-convert-llama2c-to-ggml \ - llama-embedding \ - llama-eval-callback \ - llama-export-lora \ - llama-gbnf-validator \ - llama-gguf \ - llama-gguf-hash \ - llama-gguf-split \ - llama-gritlm \ - llama-imatrix \ - llama-infill \ - llama-llava-cli \ - llama-minicpmv-cli\ - llama-qwen2vl-cli\ - llama-lookahead \ - llama-lookup \ - llama-lookup-create \ - llama-lookup-merge \ - llama-lookup-stats \ - llama-parallel \ - llama-passkey \ - llama-perplexity \ - llama-q8dot \ - llama-quantize \ - llama-quantize-stats \ - llama-retrieval \ - llama-save-load-state \ - llama-server \ - llama-simple \ - llama-simple-chat \ - llama-run \ - llama-speculative \ - llama-tokenize \ - llama-vdot \ - llama-cvector-generator \ - llama-gen-docs \ - tests/test-c.o -# Binaries only useful for tests -TEST_TARGETS = \ - tests/test-arg-parser \ - tests/test-autorelease \ - tests/test-backend-ops \ - tests/test-chat \ - tests/test-chat-template \ - tests/test-double-float \ - tests/test-grammar-integration \ - tests/test-grammar-parser \ - tests/test-json-schema-to-grammar \ - tests/test-llama-grammar \ - tests/test-log \ - tests/test-model-load-cancel \ - tests/test-quantize-fns \ - tests/test-quantize-perf \ - tests/test-rope \ - tests/test-sampling \ - tests/test-tokenizer-0 \ - tests/test-tokenizer-1-bpe \ - tests/test-tokenizer-1-spm -# tests/test-opt \ +endef -# Legacy build targets that were renamed in #7809, but should still be removed when the project is cleaned -LEGACY_TARGETS_CLEAN = main quantize quantize-stats perplexity imatrix embedding vdot q8dot convert-llama2c-to-ggml \ - simple batched batched-bench save-load-state server gguf gguf-split eval-callback llama-bench libllava.a llava-cli baby-llama \ - retrieval speculative infill tokenize parallel export-lora lookahead lookup passkey gritlm - -# Legacy build targets that were renamed in #7809, but we want to build binaries that for them that output a deprecation warning if people try to use them. -# We don't want to clutter things too much, so we only build replacements for the most commonly used binaries. -LEGACY_TARGETS_BUILD = main quantize perplexity embedding server - -# Deprecation aliases -ifdef LLAMA_CUBLAS -$(error LLAMA_CUBLAS is removed. Use GGML_CUDA instead.) -endif - -ifdef LLAMA_CUDA -GGML_CUDA := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_KOMPUTE -GGML_KOMPUTE := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_METAL -GGML_METAL := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_RPC -GGML_RPC := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_SYCL -GGML_SYCL := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_SYCL_F16 -GGML_SYCL_F16 := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_OPENBLAS -GGML_OPENBLAS := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_OPENBLAS64 -GGML_OPENBLAS64 := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_BLIS -GGML_BLIS := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_NO_LLAMAFILE -GGML_NO_LLAMAFILE := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_NO_ACCELERATE -GGML_NO_ACCELERATE := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_NO_OPENMP -GGML_NO_OPENMP := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_NO_METAL -GGML_NO_METAL := 1 -DEPRECATE_WARNING := 1 -endif - -ifdef LLAMA_DISABLE_LOGS -REMOVE_WARNING := 1 -endif - -ifdef LLAMA_SERVER_VERBOSE -REMOVE_WARNING := 1 -endif - -ifndef UNAME_S -UNAME_S := $(shell uname -s) -endif - -ifndef UNAME_P -UNAME_P := $(shell uname -p) -endif - -ifndef UNAME_M -UNAME_M := $(shell uname -m) -endif - -# In GNU make default CXX is g++ instead of c++. Let's fix that so that users -# of non-gcc compilers don't have to provide g++ alias or wrapper. -DEFCC := cc -DEFCXX := c++ -ifeq ($(origin CC),default) -CC := $(DEFCC) -endif -ifeq ($(origin CXX),default) -CXX := $(DEFCXX) -endif - -# Mac OS + Arm can report x86_64 -# ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789 -ifeq ($(UNAME_S),Darwin) - ifndef GGML_NO_METAL - GGML_METAL := 1 - endif - - GGML_NO_OPENMP := 1 - - ifneq ($(UNAME_P),arm) - SYSCTL_M := $(shell sysctl -n hw.optional.arm64 2>/dev/null) - ifeq ($(SYSCTL_M),1) - # UNAME_P := arm - # UNAME_M := arm64 - warn := $(warning Your arch is announced as x86_64, but it seems to actually be ARM64. Not fixing that can lead to bad performance. For more info see: https://github.com/ggerganov/whisper.cpp/issues/66\#issuecomment-1282546789) - endif - endif -endif - -ifdef GGML_METAL - GGML_METAL_EMBED_LIBRARY := 1 -endif - -ifdef GGML_RPC - BUILD_TARGETS += rpc-server -endif - -ifdef GGML_VULKAN - BUILD_TARGETS += vulkan-shaders-gen -endif - -default: $(BUILD_TARGETS) $(LEGACY_TARGETS_BUILD) - -test: $(TEST_TARGETS) - @failures=0; \ - for test_target in $(TEST_TARGETS); do \ - if [ "$$test_target" = "tests/test-tokenizer-0" ]; then \ - ./$$test_target $(CURDIR)/models/ggml-vocab-llama-spm.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-llama-bpe.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-phi-3.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-falcon.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-bert-bge.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-starcoder.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-gpt-2.gguf; \ - ./$$test_target $(CURDIR)/models/ggml-vocab-refact.gguf; \ - elif [ "$$test_target" = "tests/test-tokenizer-1-spm" ]; then \ - continue; \ - elif [ "$$test_target" = "tests/test-tokenizer-1-bpe" ]; then \ - continue; \ - else \ - echo "Running test $$test_target..."; \ - ./$$test_target; \ - fi; \ - if [ $$? -ne 0 ]; then \ - printf 'Test %s FAILED!\n\n' $$test_target; \ - failures=$$(( failures + 1 )); \ - else \ - printf 'Test %s passed.\n\n' $$test_target; \ - fi; \ - done; \ - if [ $$failures -gt 0 ]; then \ - printf '\n%s tests failed.\n' $$failures; \ - exit 1; \ - fi - @echo 'All tests passed.' - -all: $(BUILD_TARGETS) $(TEST_TARGETS) $(LEGACY_TARGETS_BUILD) - -ifdef RISCV_CROSS_COMPILE -CC := riscv64-unknown-linux-gnu-gcc -CXX := riscv64-unknown-linux-gnu-g++ -endif - -# -# Compile flags -# - -# keep standard at C11 and C++17 -MK_CPPFLAGS = -Iggml/include -Iggml/src -Iinclude -Isrc -Icommon -DGGML_USE_CPU -MK_CFLAGS = -std=c11 -fPIC -MK_CXXFLAGS = -std=c++17 -fPIC -MK_NVCCFLAGS = -std=c++17 - -ifdef LLAMA_NO_CCACHE -GGML_NO_CCACHE := 1 -DEPRECATE_WARNING := 1 -endif - -ifndef GGML_NO_CCACHE -CCACHE := $(shell which ccache) -ifdef CCACHE -export CCACHE_SLOPPINESS = time_macros -$(info I ccache found, compilation results will be cached. Disable with GGML_NO_CCACHE.) -CC := $(CCACHE) $(CC) -CXX := $(CCACHE) $(CXX) -else -$(info I ccache not found. Consider installing it for faster compilation.) -endif # CCACHE -endif # GGML_NO_CCACHE - -# clock_gettime came in POSIX.1b (1993) -# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional -# posix_memalign came in POSIX.1-2001 / SUSv3 -# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985) -MK_CPPFLAGS += -D_XOPEN_SOURCE=600 - -# Somehow in OpenBSD whenever POSIX conformance is specified -# some string functions rely on locale_t availability, -# which was introduced in POSIX.1-2008, forcing us to go higher -ifeq ($(UNAME_S),OpenBSD) - MK_CPPFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700 -endif - -# Data types, macros and functions related to controlling CPU affinity and -# some memory allocation are available on Linux through GNU extensions in libc -ifeq ($(UNAME_S),Linux) - MK_CPPFLAGS += -D_GNU_SOURCE - MK_LDFLAGS += -ldl -endif - -# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1, -# and on macOS its availability depends on enabling Darwin extensions -# similarly on DragonFly, enabling BSD extensions is necessary -ifeq ($(UNAME_S),Darwin) - MK_CPPFLAGS += -D_DARWIN_C_SOURCE -endif -ifeq ($(UNAME_S),DragonFly) - MK_CPPFLAGS += -D__BSD_VISIBLE -endif - -# alloca is a non-standard interface that is not visible on BSDs when -# POSIX conformance is specified, but not all of them provide a clean way -# to enable it in such cases -ifeq ($(UNAME_S),FreeBSD) - MK_CPPFLAGS += -D__BSD_VISIBLE -endif -ifeq ($(UNAME_S),NetBSD) - MK_CPPFLAGS += -D_NETBSD_SOURCE -endif -ifeq ($(UNAME_S),OpenBSD) - MK_CPPFLAGS += -D_BSD_SOURCE -endif - -ifdef GGML_SCHED_MAX_COPIES - MK_CPPFLAGS += -DGGML_SCHED_MAX_COPIES=$(GGML_SCHED_MAX_COPIES) -endif - -ifdef LLAMA_DEBUG - MK_CFLAGS += -O0 -g - MK_CXXFLAGS += -O0 -g - MK_LDFLAGS += -g - MK_NVCCFLAGS += -O0 -g - - ifeq ($(UNAME_S),Linux) - MK_CPPFLAGS += -D_GLIBCXX_ASSERTIONS - endif -else - MK_CPPFLAGS += -DNDEBUG - MK_CFLAGS += -O3 -g - MK_CXXFLAGS += -O3 -g - MK_NVCCFLAGS += -O3 -g -endif - -ifdef LLAMA_SANITIZE_THREAD - MK_CFLAGS += -fsanitize=thread -g - MK_CXXFLAGS += -fsanitize=thread -g - MK_LDFLAGS += -fsanitize=thread -g -endif - -ifdef LLAMA_SANITIZE_ADDRESS - MK_CFLAGS += -fsanitize=address -fno-omit-frame-pointer -g - MK_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer -g - MK_LDFLAGS += -fsanitize=address -fno-omit-frame-pointer -g -endif - -ifdef LLAMA_SANITIZE_UNDEFINED - MK_CFLAGS += -fsanitize=undefined -g - MK_CXXFLAGS += -fsanitize=undefined -g - MK_LDFLAGS += -fsanitize=undefined -g -endif - -ifdef LLAMA_SERVER_SSL - MK_CPPFLAGS += -DCPPHTTPLIB_OPENSSL_SUPPORT - MK_LDFLAGS += -lssl -lcrypto -endif - -ifndef GGML_NO_CPU_AARCH64 - MK_CPPFLAGS += -DGGML_USE_CPU_REPACK -endif - -# warnings -WARN_FLAGS = \ - -Wall \ - -Wextra \ - -Wpedantic \ - -Wcast-qual \ - -Wno-unused-function - -MK_CFLAGS += \ - $(WARN_FLAGS) \ - -Wshadow \ - -Wstrict-prototypes \ - -Wpointer-arith \ - -Wmissing-prototypes \ - -Werror=implicit-int \ - -Werror=implicit-function-declaration - -MK_CXXFLAGS += \ - $(WARN_FLAGS) \ - -Wmissing-declarations \ - -Wmissing-noreturn - -ifeq ($(LLAMA_FATAL_WARNINGS),1) - MK_CFLAGS += -Werror - MK_CXXFLAGS += -Werror -endif - -# this version of Apple ld64 is buggy -ifneq '' '$(findstring dyld-1015.7,$(shell $(CC) $(LDFLAGS) -Wl,-v 2>&1))' - MK_CPPFLAGS += -DHAVE_BUGGY_APPLE_LINKER -endif - -# OS specific -# TODO: support Windows -ifneq '' '$(filter $(UNAME_S),Linux Darwin FreeBSD NetBSD OpenBSD Haiku)' - MK_CFLAGS += -pthread - MK_CXXFLAGS += -pthread -endif - -# detect Windows -ifneq ($(findstring _NT,$(UNAME_S)),) - _WIN32 := 1 -endif - -# library name prefix -ifneq ($(_WIN32),1) - LIB_PRE := lib -endif - -# Dynamic Shared Object extension -ifneq ($(_WIN32),1) - DSO_EXT := .so -else - DSO_EXT := .dll -endif - -# Windows Sockets 2 (Winsock) for network-capable apps -ifeq ($(_WIN32),1) - LWINSOCK2 := -lws2_32 -endif - -ifdef LLAMA_GPROF - MK_CFLAGS += -pg - MK_CXXFLAGS += -pg -endif - -# Architecture specific -# TODO: probably these flags need to be tweaked on some architectures -# feel free to update the Makefile for your architecture and send a pull request or issue - -ifndef RISCV_CROSS_COMPILE - -ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64)) - # Use all CPU extensions that are available: - MK_CFLAGS += -march=native -mtune=native - HOST_CXXFLAGS += -march=native -mtune=native - - # Usage AMX build test - #MK_CFLAGS += -march=graniterapids -mtune=graniterapids - #HOST_CXXFLAGS += -march=graniterapids -mtune=graniterapids - - # Usage AVX-only - #MK_CFLAGS += -mfma -mf16c -mavx - #MK_CXXFLAGS += -mfma -mf16c -mavx - - # Usage SSSE3-only (Not is SSE3!) - #MK_CFLAGS += -mssse3 - #MK_CXXFLAGS += -mssse3 -endif - -ifneq '' '$(findstring mingw,$(shell $(CC) -dumpmachine))' - # The stack is only 16-byte aligned on Windows, so don't let gcc emit aligned moves. - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54412 - # https://github.com/ggml-org/llama.cpp/issues/2922 - MK_CFLAGS += -Xassembler -muse-unaligned-vector-move - MK_CXXFLAGS += -Xassembler -muse-unaligned-vector-move - - # Target Windows 8 for PrefetchVirtualMemory - MK_CPPFLAGS += -D_WIN32_WINNT=0x602 -endif - -ifneq ($(filter aarch64%,$(UNAME_M)),) - # Apple M1, M2, etc. - # Raspberry Pi 3, 4, Zero 2 (64-bit) - # Nvidia Jetson - MK_CFLAGS += -mcpu=native - MK_CXXFLAGS += -mcpu=native - JETSON_RELEASE_INFO = $(shell jetson_release) - ifdef JETSON_RELEASE_INFO - ifneq ($(filter TX2%,$(JETSON_RELEASE_INFO)),) - JETSON_EOL_MODULE_DETECT = 1 - CC = aarch64-unknown-linux-gnu-gcc - cxx = aarch64-unknown-linux-gnu-g++ - endif - endif -endif - -ifneq ($(filter armv6%,$(UNAME_M)),) - # Raspberry Pi 1, Zero - MK_CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access - MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -endif - -ifneq ($(filter armv7%,$(UNAME_M)),) - # Raspberry Pi 2 - MK_CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations - MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations -endif - -ifneq ($(filter armv8%,$(UNAME_M)),) - # Raspberry Pi 3, 4, Zero 2 (32-bit) - MK_CFLAGS += -mfp16-format=ieee -mno-unaligned-access - MK_CXXFLAGS += -mfp16-format=ieee -mno-unaligned-access -endif - -ifneq ($(filter ppc64%,$(UNAME_M)),) - POWER9_M := $(shell grep "POWER9" /proc/cpuinfo) - ifneq (,$(findstring POWER9,$(POWER9_M))) - MK_CFLAGS += -mcpu=power9 - MK_CXXFLAGS += -mcpu=power9 - endif -endif - -ifneq ($(filter ppc64le%,$(UNAME_M)),) - MK_CFLAGS += -mcpu=powerpc64le - MK_CXXFLAGS += -mcpu=powerpc64le - CUDA_POWER_ARCH = 1 -endif - -ifneq ($(filter loongarch64%,$(UNAME_M)),) - MK_CFLAGS += -mlasx - MK_CXXFLAGS += -mlasx -endif - -ifneq ($(filter riscv64%,$(UNAME_M)),) - MK_CFLAGS += -march=rv64gcv -mabi=lp64d - MK_CXXFLAGS += -march=rv64gcv -mabi=lp64d -endif - -else # RISC-V CROSS COMPILATION - MK_CFLAGS += -march=rv64gcv -mabi=lp64d - MK_CXXFLAGS += -march=rv64gcv -mabi=lp64d -endif - -ifndef GGML_NO_ACCELERATE - # Mac OS - include Accelerate framework. - # `-framework Accelerate` works both with Apple Silicon and Mac Intel - ifeq ($(UNAME_S),Darwin) - MK_CPPFLAGS += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS -DGGML_BLAS_USE_ACCELERATE - MK_CPPFLAGS += -DACCELERATE_NEW_LAPACK - MK_CPPFLAGS += -DACCELERATE_LAPACK_ILP64 - MK_LDFLAGS += -framework Accelerate - OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o - endif -endif # GGML_NO_ACCELERATE - -ifndef GGML_NO_OPENMP - MK_CPPFLAGS += -DGGML_USE_OPENMP - MK_CFLAGS += -fopenmp - MK_CXXFLAGS += -fopenmp -endif # GGML_NO_OPENMP - -ifdef GGML_OPENBLAS - MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas) - MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas) - MK_LDFLAGS += $(shell pkg-config --libs openblas) - OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o -endif # GGML_OPENBLAS - -ifdef GGML_OPENBLAS64 - MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas64) - MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas64) - MK_LDFLAGS += $(shell pkg-config --libs openblas64) - OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o -endif # GGML_OPENBLAS64 - -ifdef GGML_BLIS - MK_CPPFLAGS += -DGGML_USE_BLAS -DGGML_BLAS_USE_BLIS -I/usr/local/include/blis -I/usr/include/blis - MK_LDFLAGS += -lblis -L/usr/local/lib - OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o -endif # GGML_BLIS - -ifdef GGML_NVPL - MK_CPPFLAGS += -DGGML_USE_BLAS -DGGML_BLAS_USE_NVPL -DNVPL_ILP64 -I/usr/local/include/nvpl_blas -I/usr/include/nvpl_blas - MK_LDFLAGS += -L/usr/local/lib -lnvpl_blas_core -lnvpl_blas_ilp64_gomp - OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o -endif # GGML_NVPL - -ifndef GGML_NO_LLAMAFILE - MK_CPPFLAGS += -DGGML_USE_LLAMAFILE - OBJ_GGML_EXT += ggml/src/ggml-cpu/llamafile/sgemm.o -endif - -ifndef GGML_NO_AMX - MK_CPPFLAGS += -DGGML_USE_AMX - OBJ_GGML_EXT += ggml/src/ggml-cpu/amx/amx.o ggml/src/ggml-cpu/amx/mmq.o -endif - -# only necessary for the CPU backend files -MK_CPPFLAGS += -Iggml/src/ggml-cpu - -ifdef GGML_RPC - MK_CPPFLAGS += -DGGML_USE_RPC - OBJ_GGML_EXT += ggml/src/ggml-rpc.o -endif # GGML_RPC - -OBJ_CUDA_TMPL = $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-mma*.cu)) -OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/mmq*.cu)) - -ifdef GGML_CUDA_FA_ALL_QUANTS - OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*.cu)) -else - OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu)) - OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu)) - OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*f16-f16.cu)) -endif # GGML_CUDA_FA_ALL_QUANTS - -ifdef GGML_CUDA - ifneq ('', '$(wildcard /opt/cuda)') - CUDA_PATH ?= /opt/cuda - else - CUDA_PATH ?= /usr/local/cuda - endif - - MK_CPPFLAGS += -DGGML_USE_CUDA -DGGML_CUDA_USE_GRAPHS -I$(CUDA_PATH)/include -I$(CUDA_PATH)/targets/$(UNAME_M)-linux/include - MK_LDFLAGS += -lcuda -lcublas -lculibos -lcudart -lcublasLt -lpthread -ldl -lrt -L$(CUDA_PATH)/lib64 -L/usr/lib64 -L$(CUDA_PATH)/targets/$(UNAME_M)-linux/lib -L$(CUDA_PATH)/lib64/stubs -L/usr/lib/wsl/lib - MK_NVCCFLAGS += -use_fast_math - - OBJ_GGML_EXT += ggml/src/ggml-cuda/ggml-cuda.o - OBJ_GGML_EXT += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu)) - OBJ_GGML_EXT += $(OBJ_CUDA_TMPL) - -ifdef LLAMA_FATAL_WARNINGS - MK_NVCCFLAGS += -Werror all-warnings -endif # LLAMA_FATAL_WARNINGS - -ifndef JETSON_EOL_MODULE_DETECT - MK_NVCCFLAGS += --forward-unknown-to-host-compiler -endif # JETSON_EOL_MODULE_DETECT - -ifdef LLAMA_DEBUG - MK_NVCCFLAGS += -lineinfo -endif # LLAMA_DEBUG - -ifdef GGML_CUDA_DEBUG - MK_NVCCFLAGS += --device-debug -endif # GGML_CUDA_DEBUG - -ifdef GGML_CUDA_NVCC - NVCC = $(CCACHE) $(GGML_CUDA_NVCC) -else - NVCC = $(CCACHE) nvcc -endif # GGML_CUDA_NVCC - -ifdef CUDA_DOCKER_ARCH - MK_NVCCFLAGS += -Wno-deprecated-gpu-targets -arch=$(CUDA_DOCKER_ARCH) -else ifndef CUDA_POWER_ARCH - MK_NVCCFLAGS += -arch=native -endif # CUDA_DOCKER_ARCH - -ifdef GGML_CUDA_FORCE_MMQ - MK_NVCCFLAGS += -DGGML_CUDA_FORCE_MMQ -endif # GGML_CUDA_FORCE_MMQ - -ifdef GGML_CUDA_FORCE_CUBLAS - MK_NVCCFLAGS += -DGGML_CUDA_FORCE_CUBLAS -endif # GGML_CUDA_FORCE_CUBLAS - -ifdef GGML_CUDA_F16 - MK_NVCCFLAGS += -DGGML_CUDA_F16 -endif # GGML_CUDA_F16 - -ifdef GGML_CUDA_DMMV_F16 - MK_NVCCFLAGS += -DGGML_CUDA_F16 -endif # GGML_CUDA_DMMV_F16 - -ifdef GGML_CUDA_PEER_MAX_BATCH_SIZE - MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=$(GGML_CUDA_PEER_MAX_BATCH_SIZE) -else - MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=128 -endif # GGML_CUDA_PEER_MAX_BATCH_SIZE - -ifdef GGML_CUDA_NO_PEER_COPY - MK_NVCCFLAGS += -DGGML_CUDA_NO_PEER_COPY -endif # GGML_CUDA_NO_PEER_COPY - -ifdef GGML_CUDA_CCBIN - MK_NVCCFLAGS += -ccbin $(GGML_CUDA_CCBIN) -endif # GGML_CUDA_CCBIN - -ifdef GGML_CUDA_NO_FA - MK_NVCCFLAGS += -DGGML_CUDA_NO_FA -endif # GGML_CUDA_NO_FA - -ifdef GGML_CUDA_FA_ALL_QUANTS - MK_NVCCFLAGS += -DGGML_CUDA_FA_ALL_QUANTS -endif # GGML_CUDA_FA_ALL_QUANTS - -ifdef JETSON_EOL_MODULE_DETECT -define NVCC_COMPILE - $(NVCC) -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_CUDA -I/usr/local/cuda/include -I/opt/cuda/include -I/usr/local/cuda/targets/aarch64-linux/include -std=c++11 -O3 $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@ -endef # NVCC_COMPILE -else -define NVCC_COMPILE - $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@ -endef # NVCC_COMPILE -endif # JETSON_EOL_MODULE_DETECT - -ggml/src/ggml-cuda/%.o: \ - ggml/src/ggml-cuda/%.cu \ - ggml/include/ggml.h \ - ggml/src/ggml-common.h \ - ggml/src/ggml-cuda/common.cuh - $(NVCC_COMPILE) - -ggml/src/ggml-cuda/ggml-cuda.o: \ - ggml/src/ggml-cuda/ggml-cuda.cu \ - ggml/include/ggml-cuda.h \ - ggml/include/ggml.h \ - ggml/include/ggml-backend.h \ - ggml/src/ggml-backend-impl.h \ - ggml/src/ggml-common.h \ - $(wildcard ggml/src/ggml-cuda/*.cuh) - $(NVCC_COMPILE) -endif # GGML_CUDA - -ifdef GGML_VULKAN - MK_CPPFLAGS += -DGGML_USE_VULKAN - MK_LDFLAGS += $(shell pkg-config --libs vulkan) - OBJ_GGML_EXT += ggml/src/ggml-vulkan.o ggml/src/ggml-vulkan-shaders.o - -ifdef GGML_VULKAN_CHECK_RESULTS - MK_CPPFLAGS += -DGGML_VULKAN_CHECK_RESULTS -endif - -ifdef GGML_VULKAN_DEBUG - MK_CPPFLAGS += -DGGML_VULKAN_DEBUG -endif - -ifdef GGML_VULKAN_MEMORY_DEBUG - MK_CPPFLAGS += -DGGML_VULKAN_MEMORY_DEBUG -endif - -ifdef GGML_VULKAN_PERF - MK_CPPFLAGS += -DGGML_VULKAN_PERF -endif - -ifdef GGML_VULKAN_VALIDATE - MK_CPPFLAGS += -DGGML_VULKAN_VALIDATE -endif - -ifdef GGML_VULKAN_RUN_TESTS - MK_CPPFLAGS += -DGGML_VULKAN_RUN_TESTS -endif - -GLSLC_CMD = glslc -_ggml_vk_genshaders_cmd = $(shell pwd)/vulkan-shaders-gen -_ggml_vk_header = ggml/src/ggml-vulkan-shaders.hpp -_ggml_vk_source = ggml/src/ggml-vulkan-shaders.cpp -_ggml_vk_input_dir = ggml/src/ggml-vulkan/vulkan-shaders -_ggml_vk_shader_deps = $(echo $(_ggml_vk_input_dir)/*.comp) - -ggml/src/ggml-vulkan.o: ggml/src/ggml-vulkan/ggml-vulkan.cpp ggml/include/ggml-vulkan.h $(_ggml_vk_header) $(_ggml_vk_source) - $(CXX) $(CXXFLAGS) $(shell pkg-config --cflags vulkan) -c $< -o $@ - -$(_ggml_vk_header): $(_ggml_vk_source) - -$(_ggml_vk_source): $(_ggml_vk_shader_deps) vulkan-shaders-gen - $(_ggml_vk_genshaders_cmd) \ - --glslc $(GLSLC_CMD) \ - --input-dir $(_ggml_vk_input_dir) \ - --target-hpp $(_ggml_vk_header) \ - --target-cpp $(_ggml_vk_source) - -vulkan-shaders-gen: ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp - $(CXX) $(CXXFLAGS) -o $@ $(LDFLAGS) ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp - -endif # GGML_VULKAN - -ifdef GGML_HIP - ifeq ($(wildcard /opt/rocm),) - ROCM_PATH ?= /usr - AMDGPU_TARGETS ?= $(shell $(shell which amdgpu-arch)) - else - ROCM_PATH ?= /opt/rocm - AMDGPU_TARGETS ?= $(shell $(ROCM_PATH)/llvm/bin/amdgpu-arch) - endif - - MK_CPPFLAGS += -DGGML_USE_HIP -DGGML_USE_CUDA - - MK_LDFLAGS += -L$(ROCM_PATH)/lib -Wl,-rpath=$(ROCM_PATH)/lib - MK_LDFLAGS += -L$(ROCM_PATH)/lib64 -Wl,-rpath=$(ROCM_PATH)/lib64 - MK_LDFLAGS += -lhipblas -lamdhip64 -lrocblas - - HIPCC ?= $(CCACHE) $(ROCM_PATH)/bin/hipcc - - HIPFLAGS += $(addprefix --offload-arch=,$(AMDGPU_TARGETS)) - -ifdef GGML_CUDA_FORCE_MMQ - HIPFLAGS += -DGGML_CUDA_FORCE_MMQ -endif # GGML_CUDA_FORCE_MMQ - -ifdef GGML_CUDA_FORCE_CUBLAS - HIPFLAGS += -DGGML_CUDA_FORCE_CUBLAS -endif # GGML_CUDA_FORCE_CUBLAS - -ifdef GGML_CUDA_NO_PEER_COPY - HIPFLAGS += -DGGML_CUDA_NO_PEER_COPY -endif # GGML_CUDA_NO_PEER_COPY - -ifdef GGML_CUDA_NO_FA - HIPFLAGS += -DGGML_CUDA_NO_FA -endif # GGML_CUDA_NO_FA - - OBJ_GGML_EXT += ggml/src/ggml-cuda/ggml-cuda.o - OBJ_GGML_EXT += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu)) - OBJ_GGML_EXT += $(OBJ_CUDA_TMPL) - -ggml/src/ggml-cuda/ggml-cuda.o: \ - ggml/src/ggml-cuda/ggml-cuda.cu \ - ggml/include/ggml-cuda.h \ - ggml/include/ggml.h \ - ggml/include/ggml-backend.h \ - ggml/src/ggml-backend-impl.h \ - ggml/src/ggml-common.h \ - $(wildcard ggml/src/ggml-cuda/*.cuh) - $(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $< - -ggml/src/ggml-cuda/%.o: \ - ggml/src/ggml-cuda/%.cu \ - ggml/include/ggml.h \ - ggml/src/ggml-common.h \ - ggml/src/ggml-cuda/common.cuh - $(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $< -endif # GGML_HIP - -ifdef GGML_MUSA - ifeq ($(wildcard /opt/musa),) - MUSA_PATH ?= /usr/local/musa - else - MUSA_PATH ?= /opt/musa - endif - MUSA_ARCHITECTURES ?= 21;22;31 - - MK_CPPFLAGS += -DGGML_USE_MUSA -DGGML_USE_CUDA - MK_LDFLAGS += -L$(MUSA_PATH)/lib -Wl,-rpath=$(MUSA_PATH)/lib - MK_LDFLAGS += -lmusa -lmusart -lmublas - - ifndef GGML_NO_OPENMP - # For Ubuntu Focal - MK_CPPFLAGS += -I/usr/lib/llvm-10/include/openmp - MK_LDFLAGS += -L/usr/lib/llvm-10/lib - # For Ubuntu Jammy - MK_CPPFLAGS += -I/usr/lib/llvm-14/lib/clang/14.0.0/include - MK_LDFLAGS += -L/usr/lib/llvm-14/lib - endif # GGML_NO_OPENMP - - CC := $(MUSA_PATH)/bin/clang - CXX := $(MUSA_PATH)/bin/clang++ - MCC := $(CCACHE) $(MUSA_PATH)/bin/mcc - - MUSAFLAGS = -fsigned-char -x musa -mtgpu - MUSAFLAGS += $(foreach arch,$(subst ;, ,$(MUSA_ARCHITECTURES)),--cuda-gpu-arch=mp_$(arch)) - -ifdef GGML_CUDA_FORCE_MMQ - MUSAFLAGS += -DGGML_CUDA_FORCE_MMQ -endif # GGML_CUDA_FORCE_MMQ - -ifdef GGML_CUDA_FORCE_CUBLAS - MUSAFLAGS += -DGGML_CUDA_FORCE_CUBLAS -endif # GGML_CUDA_FORCE_CUBLAS - -ifdef GGML_CUDA_F16 - MUSAFLAGS += -DGGML_CUDA_F16 -endif # GGML_CUDA_F16 - -ifdef GGML_CUDA_DMMV_F16 - MUSAFLAGS += -DGGML_CUDA_F16 -endif # GGML_CUDA_DMMV_F16 - -ifdef GGML_CUDA_PEER_MAX_BATCH_SIZE - MUSAFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=$(GGML_CUDA_PEER_MAX_BATCH_SIZE) -else - MUSAFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=128 -endif # GGML_CUDA_PEER_MAX_BATCH_SIZE - -ifdef GGML_CUDA_NO_PEER_COPY - MUSAFLAGS += -DGGML_CUDA_NO_PEER_COPY -endif # GGML_CUDA_NO_PEER_COPY - -ifdef GGML_CUDA_NO_FA - MUSAFLAGS += -DGGML_CUDA_NO_FA -endif # GGML_CUDA_NO_FA - -ifdef GGML_CUDA_FA_ALL_QUANTS - MUSAFLAGS += -DGGML_CUDA_FA_ALL_QUANTS -endif # GGML_CUDA_FA_ALL_QUANTS - - OBJ_GGML_EXT += ggml/src/ggml-cuda/ggml-cuda.o - OBJ_GGML_EXT += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu)) - OBJ_GGML_EXT += $(OBJ_CUDA_TMPL) - -ggml/src/ggml-cuda/ggml-cuda.o: \ - ggml/src/ggml-cuda/ggml-cuda.cu \ - ggml/include/ggml-cuda.h \ - ggml/include/ggml.h \ - ggml/include/ggml-backend.h \ - ggml/src/ggml-backend-impl.h \ - ggml/src/ggml-common.h \ - $(wildcard ggml/src/ggml-cuda/*.cuh) - $(MCC) $(CXXFLAGS) $(MUSAFLAGS) -c -o $@ $< - -ggml/src/ggml-cuda/%.o: \ - ggml/src/ggml-cuda/%.cu \ - ggml/include/ggml.h \ - ggml/src/ggml-common.h \ - ggml/src/ggml-cuda/common.cuh - $(MCC) $(CXXFLAGS) $(MUSAFLAGS) -c -o $@ $< -endif # GGML_MUSA - -ifdef GGML_METAL - MK_CPPFLAGS += -DGGML_USE_METAL - MK_LDFLAGS += -framework Foundation -framework Metal -framework MetalKit - OBJ_GGML_EXT += ggml/src/ggml-metal/ggml-metal.o - -ifdef GGML_METAL_USE_BF16 - MK_CPPFLAGS += -DGGML_METAL_USE_BF16 -endif # GGML_METAL_USE_BF16 -ifdef GGML_METAL_NDEBUG - MK_CPPFLAGS += -DGGML_METAL_NDEBUG -endif -ifdef GGML_METAL_EMBED_LIBRARY - MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY - OBJ_GGML_EXT += ggml/src/ggml-metal-embed.o -endif -endif # GGML_METAL - -ifdef GGML_METAL -ggml/src/ggml-metal/ggml-metal.o: \ - ggml/src/ggml-metal/ggml-metal.m \ - ggml/src/ggml-metal/ggml-metal-impl.h \ - ggml/include/ggml-metal.h \ - ggml/include/ggml.h - $(CC) $(CFLAGS) -c $< -o $@ - -ifdef GGML_METAL_EMBED_LIBRARY -ggml/src/ggml-metal-embed.o: \ - ggml/src/ggml-metal/ggml-metal.metal \ - ggml/src/ggml-metal/ggml-metal-impl.h \ - ggml/src/ggml-common.h - @echo "Embedding Metal library" - @sed -e '/__embed_ggml-common.h__/r ggml/src/ggml-common.h' -e '/__embed_ggml-common.h__/d' < ggml/src/ggml-metal/ggml-metal.metal > ggml/src/ggml-metal/ggml-metal-embed.metal.tmp - @sed -e '/#include "ggml-metal-impl.h"/r ggml/src/ggml-metal/ggml-metal-impl.h' -e '/#include "ggml-metal-impl.h"/d' < ggml/src/ggml-metal/ggml-metal-embed.metal.tmp > ggml/src/ggml-metal/ggml-metal-embed.metal - $(eval TEMP_ASSEMBLY=$(shell mktemp -d)) - @echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)/ggml-metal-embed.s - @echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s - @echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s - @echo ".incbin \"ggml/src/ggml-metal/ggml-metal-embed.metal\"" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s - @echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s - @echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s - $(CC) $(CFLAGS) -c $(TEMP_ASSEMBLY)/ggml-metal-embed.s -o $@ - @rm -f ${TEMP_ASSEMBLY}/ggml-metal-embed.s - @rmdir ${TEMP_ASSEMBLY} -endif -endif # GGML_METAL - -DIR_GGML = ggml -DIR_LLAMA = src -DIR_COMMON = common - -OBJ_GGML = \ - $(DIR_GGML)/src/ggml.o \ - $(DIR_GGML)/src/ggml-alloc.o \ - $(DIR_GGML)/src/ggml-backend.o \ - $(DIR_GGML)/src/ggml-backend-reg.o \ - $(DIR_GGML)/src/ggml-opt.o \ - $(DIR_GGML)/src/ggml-quants.o \ - $(DIR_GGML)/src/ggml-threading.o \ - $(DIR_GGML)/src/ggml-cpu/ggml-cpu.o \ - $(DIR_GGML)/src/ggml-cpu/ggml-cpu_cpp.o \ - $(DIR_GGML)/src/ggml-cpu/repack.o \ - $(DIR_GGML)/src/ggml-cpu/ggml-cpu-hbm.o \ - $(DIR_GGML)/src/ggml-cpu/ggml-cpu-quants.o \ - $(DIR_GGML)/src/ggml-cpu/ggml-cpu-traits.o \ - $(OBJ_GGML_EXT) - -OBJ_LLAMA = \ - $(DIR_LLAMA)/llama.o \ - $(DIR_LLAMA)/llama-vocab.o \ - $(DIR_LLAMA)/llama-grammar.o \ - $(DIR_LLAMA)/llama-sampling.o \ - $(DIR_LLAMA)/unicode.o \ - $(DIR_LLAMA)/unicode-data.o - -OBJ_COMMON = \ - $(DIR_COMMON)/common.o \ - $(DIR_COMMON)/arg.o \ - $(DIR_COMMON)/log.o \ - $(DIR_COMMON)/console.o \ - $(DIR_COMMON)/ngram-cache.o \ - $(DIR_COMMON)/sampling.o \ - $(DIR_COMMON)/speculative.o \ - $(DIR_COMMON)/chat.o \ - $(DIR_COMMON)/build-info.o \ - $(DIR_COMMON)/json-schema-to-grammar.o - -OBJ_ALL = $(OBJ_GGML) $(OBJ_LLAMA) $(OBJ_COMMON) - -LIB_GGML = $(LIB_PRE)ggml$(DSO_EXT) -LIB_GGML_S = $(LIB_PRE)ggml.a - -LIB_LLAMA = $(LIB_PRE)llama$(DSO_EXT) -LIB_LLAMA_S = $(LIB_PRE)llama.a - -LIB_COMMON = $(LIB_PRE)common$(DSO_EXT) -LIB_COMMON_S = $(LIB_PRE)common.a - -LIB_ALL = $(LIB_GGML) $(LIB_LLAMA) $(LIB_COMMON) -LIB_ALL_S = $(LIB_GGML_S) $(LIB_LLAMA_S) $(LIB_COMMON_S) - -GF_CC := $(CC) -include scripts/get-flags.mk - -# combine build flags with cmdline overrides -override CPPFLAGS := $(MK_CPPFLAGS) $(CPPFLAGS) -override CFLAGS := $(CPPFLAGS) $(MK_CFLAGS) $(GF_CFLAGS) $(CFLAGS) -BASE_CXXFLAGS := $(MK_CXXFLAGS) $(CXXFLAGS) -override CXXFLAGS := $(BASE_CXXFLAGS) $(HOST_CXXFLAGS) $(GF_CXXFLAGS) $(CPPFLAGS) -override NVCCFLAGS := $(MK_NVCCFLAGS) $(NVCCFLAGS) -override LDFLAGS := $(MK_LDFLAGS) $(LDFLAGS) - -# identify CUDA host compiler -ifdef GGML_CUDA -GF_CC := $(NVCC) $(NVCCFLAGS) 2>/dev/null .c -Xcompiler -include scripts/get-flags.mk -CUDA_CXXFLAGS := $(BASE_CXXFLAGS) $(GF_CXXFLAGS) -Wno-pedantic -endif - -ifdef LLAMA_CURL -override CXXFLAGS := $(CXXFLAGS) -DLLAMA_USE_CURL -override LDFLAGS := $(LDFLAGS) -lcurl -endif - -# -# Print build information -# - -$(info I llama.cpp build info: ) -$(info I UNAME_S: $(UNAME_S)) -$(info I UNAME_P: $(UNAME_P)) -$(info I UNAME_M: $(UNAME_M)) -$(info I CFLAGS: $(CFLAGS)) -$(info I CXXFLAGS: $(CXXFLAGS)) -$(info I NVCCFLAGS: $(NVCCFLAGS)) -$(info I LDFLAGS: $(LDFLAGS)) -$(info I CC: $(shell $(CC) --version | head -n 1)) -$(info I CXX: $(shell $(CXX) --version | head -n 1)) -ifdef GGML_CUDA -$(info I NVCC: $(shell $(NVCC) --version | tail -n 1)) -CUDA_VERSION := $(shell $(NVCC) --version | grep -oP 'release (\K[0-9]+\.[0-9])') -ifeq ($(shell awk -v "v=$(CUDA_VERSION)" 'BEGIN { print (v < 11.7) }'),1) - -ifndef CUDA_DOCKER_ARCH -ifndef CUDA_POWER_ARCH -$(error I ERROR: For CUDA versions < 11.7 a target CUDA architecture must be explicitly provided via environment variable CUDA_DOCKER_ARCH, e.g. by running "export CUDA_DOCKER_ARCH=compute_XX" on Unix-like systems, where XX is the minimum compute capability that the code needs to run on. A list with compute capabilities can be found here: https://developer.nvidia.com/cuda-gpus ) -endif # CUDA_POWER_ARCH -endif # CUDA_DOCKER_ARCH - -endif # eq ($(shell echo "$(CUDA_VERSION) < 11.7" | bc),1) -endif # GGML_CUDA -$(info ) - -ifdef DEPRECATE_WARNING -$(info !!! DEPRECATION WARNING !!!) -$(info The following LLAMA_ options are deprecated and will be removed in the future. Use the GGML_ prefix instead) -$(info - LLAMA_CUDA) -$(info - LLAMA_METAL) -$(info - LLAMA_METAL_EMBED_LIBRARY) -$(info - LLAMA_OPENMP) -$(info - LLAMA_RPC) -$(info - LLAMA_SYCL) -$(info - LLAMA_SYCL_F16) -$(info - LLAMA_OPENBLAS) -$(info - LLAMA_OPENBLAS64) -$(info - LLAMA_BLIS) -$(info - LLAMA_NO_LLAMAFILE) -$(info - LLAMA_NO_ACCELERATE) -$(info - LLAMA_NO_OPENMP) -$(info - LLAMA_NO_METAL) -$(info - LLAMA_NO_CCACHE) -$(info ) -endif - -ifdef REMOVE_WARNING -$(info !!! REMOVAL WARNING !!!) -$(info The following LLAMA_ options have been removed and are no longer supported) -$(info - LLAMA_DISABLE_LOGS (https://github.com/ggml-org/llama.cpp/pull/9418)) -$(info - LLAMA_SERVER_VERBOSE (https://github.com/ggml-org/llama.cpp/pull/9418)) -$(info ) -endif - -# -# Build libraries -# - -# Libraries -LIB_GGML = libggml.so -LIB_GGML_S = libggml.a - -LIB_LLAMA = libllama.so -LIB_LLAMA_S = libllama.a - -LIB_COMMON = libcommon.so -LIB_COMMON_S = libcommon.a - -# Targets -BUILD_TARGETS += $(LIB_GGML) $(LIB_GGML_S) $(LIB_LLAMA) $(LIB_LLAMA_S) $(LIB_COMMON) $(LIB_COMMON_S) - -# Dependency files -DEP_FILES = $(OBJ_GGML:.o=.d) $(OBJ_LLAMA:.o=.d) $(OBJ_COMMON:.o=.d) - -# Default target -all: $(BUILD_TARGETS) - -# force c++ build for source file that have same name as c file -# Note: need this exception because `ggml-cpu.c` and `ggml-cpu.cpp` both produce the same obj/dep files -$(DIR_GGML)/%_cpp.o: $(DIR_GGML)/%.cpp - $(CXX) $(CXXFLAGS) -MMD -c $< -o $@ - -# Rules for building object files -$(DIR_GGML)/%.o: $(DIR_GGML)/%.c - $(CC) $(CFLAGS) -MMD -c $< -o $@ - -$(DIR_GGML)/%.o: $(DIR_GGML)/%.cpp - $(CXX) $(CXXFLAGS) -MMD -c $< -o $@ - -$(DIR_LLAMA)/%.o: $(DIR_LLAMA)/%.cpp - $(CXX) $(CXXFLAGS) -MMD -c $< -o $@ - -$(DIR_COMMON)/%.o: $(DIR_COMMON)/%.cpp - $(CXX) $(CXXFLAGS) -MMD -c $< -o $@ - -# Rules for building libraries -$(LIB_GGML): $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS) - -$(LIB_GGML_S): $(OBJ_GGML) - ar rcs $(LIB_GGML_S) $^ - -$(LIB_LLAMA): $(OBJ_LLAMA) $(LIB_GGML) - $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS) - -$(LIB_LLAMA_S): $(OBJ_LLAMA) - ar rcs $(LIB_LLAMA_S) $^ - -$(LIB_COMMON): $(OBJ_COMMON) $(LIB_LLAMA) $(LIB_GGML) - $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS) - -$(LIB_COMMON_S): $(OBJ_COMMON) - ar rcs $(LIB_COMMON_S) $^ - -# Include dependency files --include $(DEP_FILES) - -# Clean generated server assets -clean-server-assets: - find tools/server -type f -name "*.js.hpp" -delete - find tools/server -type f -name "*.mjs.hpp" -delete - find tools/server -type f -name "*.css.hpp" -delete - find tools/server -type f -name "*.html.hpp" -delete - -# Clean rule -clean: clean-server-assets - rm -vrf $(BUILD_TARGETS) $(TEST_TARGETS) - rm -rvf *.a *.dll *.so *.dot - find ggml src common tests examples pocs -type f -name "*.o" -delete - find ggml src common tests examples pocs -type f -name "*.d" -delete - -# -# Examples -# - -# $< is the first prerequisite, i.e. the source file. -# Explicitly compile this to an object file so that it can be cached with ccache. -# The source file is then filtered out from $^ (the list of all prerequisites) and the object file is added instead. - -# Helper function that replaces .c, .cpp, and .cu file endings with .o: -GET_OBJ_FILE = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cu,%.o,$(1)))) - -llama-cli: tools/main/main.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - @echo - @echo '==== Run ./llama-cli -h for help. ====' - @echo - -llama-run: tools/run/run.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-simple: examples/simple/simple.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-simple-chat: examples/simple-chat/simple-chat.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-tokenize: tools/tokenize/tokenize.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-batched: examples/batched/batched.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-batched-bench: tools/batched-bench/batched-bench.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-quantize: tools/quantize/quantize.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-quantize-stats: tools/quantize-stats/quantize-stats.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-perplexity: tools/perplexity/perplexity.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-imatrix: tools/imatrix/imatrix.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-embedding: examples/embedding/embedding.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-gritlm: examples/gritlm/gritlm.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-save-load-state: examples/save-load-state/save-load-state.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-gguf: examples/gguf/gguf.cpp \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -examples/gguf-hash/deps/sha1/sha1.o: \ - examples/gguf-hash/deps/sha1/sha1.c - $(CC) $(CFLAGS) -Iexamples/gguf-hash/deps -c $< -o $@ - -examples/gguf-hash/deps/xxhash/xxhash.o: \ - examples/gguf-hash/deps/xxhash/xxhash.c - $(CC) $(CFLAGS) -Iexamples/gguf-hash/deps -c $< -o $@ - -examples/gguf-hash/deps/sha256/sha256.o: \ - examples/gguf-hash/deps/sha256/sha256.c - $(CC) $(CFLAGS) -Iexamples/gguf-hash/deps -c $< -o $@ - -llama-gguf-hash: examples/gguf-hash/gguf-hash.cpp examples/gguf-hash/deps/sha1/sha1.o examples/gguf-hash/deps/xxhash/xxhash.o examples/gguf-hash/deps/sha256/sha256.o\ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -Iexamples/gguf-hash/deps -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-gguf-split: tools/gguf-split/gguf-split.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-eval-callback: examples/eval-callback/eval-callback.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-cvector-generator: tools/cvector-generator/cvector-generator.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-convert-llama2c-to-ggml: examples/convert-llama2c-to-ggml/convert-llama2c-to-ggml.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-bench: tools/llama-bench/llama-bench.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-export-lora: tools/export-lora/export-lora.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-retrieval: examples/retrieval/retrieval.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-speculative: examples/speculative/speculative.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-parallel: examples/parallel/parallel.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-lookahead: examples/lookahead/lookahead.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-lookup: examples/lookup/lookup.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-lookup-create: examples/lookup/lookup-create.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-lookup-merge: examples/lookup/lookup-merge.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-lookup-stats: examples/lookup/lookup-stats.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-passkey: examples/passkey/passkey.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-gbnf-validator: examples/gbnf-validator/gbnf-validator.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -ifdef GGML_RPC -rpc-server: tools/rpc/rpc-server.cpp \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) -endif # GGML_RPC - -llama-server: \ - tools/server/server.cpp \ - tools/server/utils.hpp \ - tools/server/httplib.h \ - tools/server/index.html.hpp \ - tools/server/loading.html.hpp \ - common/chat.cpp \ - common/chat.h \ - common/chat-template.hpp \ - common/json.hpp \ - common/minja.hpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h %.hpp $<,$^) -Itools/server $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LWINSOCK2) - -# Portable equivalent of `cd tools/server/public && xxd -i $(notdir $<) ../$(notdir $<).hpp`: -tools/server/%.hpp: tools/server/public/% FORCE Makefile - @( export NAME=$(subst .,_,$(subst -,_,$(notdir $<))) && \ - echo "unsigned char $${NAME}[] = {" && \ - cat $< | od -v -t x1 -An | sed -E 's/([0-9a-fA-F]+)/0x\1, /g' && \ - echo "};" && \ - echo "unsigned int $${NAME}_len = $(shell cat $< | wc -c );" \ - ) > $@ - -llama-gen-docs: examples/gen-docs/gen-docs.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -libllava.a: tools/mtmd/llava.cpp \ - tools/mtmd/llava.h \ - tools/mtmd/clip.cpp \ - tools/mtmd/clip.h \ - common/stb_image.h \ - common/base64.hpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -static -fPIC -c $< -o $@ -Wno-cast-qual - -llama-llava-cli: tools/mtmd/llava-cli.cpp \ - tools/mtmd/llava.cpp \ - tools/mtmd/llava.h \ - tools/mtmd/clip.cpp \ - tools/mtmd/clip.h \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) $< $(filter-out %.h $<,$^) -o $@ $(LDFLAGS) -Wno-cast-qual - -llama-minicpmv-cli: tools/mtmd/minicpmv-cli.cpp \ - tools/mtmd/llava.cpp \ - tools/mtmd/llava.h \ - tools/mtmd/clip.cpp \ - tools/mtmd/clip.h \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) $< $(filter-out %.h $<,$^) -o $@ $(LDFLAGS) -Wno-cast-qual - -llama-qwen2vl-cli: tools/mtmd/qwen2vl-cli.cpp \ - tools/mtmd/llava.cpp \ - tools/mtmd/llava.h \ - tools/mtmd/clip.cpp \ - tools/mtmd/clip.h \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) $< $(filter-out %.h $<,$^) -o $@ $(LDFLAGS) -Wno-cast-qual - -ifeq ($(UNAME_S),Darwin) -swift: examples/batched.swift - (cd examples/batched.swift; make build) -endif - -common/build-info.cpp: $(wildcard .git/index) scripts/build-info.sh - @sh scripts/build-info.sh "$(CC)" > $@.tmp - @if ! cmp -s $@.tmp $@; then \ - mv $@.tmp $@; \ - else \ - rm $@.tmp; \ - fi - -common/build-info.o: common/build-info.cpp - $(CXX) $(CXXFLAGS) -c $(filter-out %.h,$^) -o $@ - -# -# Tests -# - -tests: $(TEST_TARGETS) - -tests/test-arg-parser: tests/test-arg-parser.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-llama-grammar: tests/test-llama-grammar.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-log: tests/test-log.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-grammar-parser: tests/test-grammar-parser.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-grammar-integration: tests/test-grammar-integration.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-double-float: tests/test-double-float.cpp - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-json-schema-to-grammar: tests/test-json-schema-to-grammar.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -Itools/server -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-chat: tests/test-chat.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -Itools/server -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-opt: tests/test-opt.cpp \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-quantize-fns: tests/test-quantize-fns.cpp \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-quantize-perf: tests/test-quantize-perf.cpp \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-sampling: tests/test-sampling.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-tokenizer-0: tests/test-tokenizer-0.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-tokenizer-1-bpe: tests/test-tokenizer-1-bpe.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-tokenizer-1-spm: tests/test-tokenizer-1-spm.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-rope: tests/test-rope.cpp ggml/src/ggml.o \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-c.o: tests/test-c.c include/llama.h - $(CC) $(CFLAGS) -c $(filter-out %.h,$^) -o $@ - -tests/test-backend-ops: tests/test-backend-ops.cpp \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-model-load-cancel: tests/test-model-load-cancel.cpp tests/get-model.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-autorelease: tests/test-autorelease.cpp tests/get-model.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -tests/test-chat-template: tests/test-chat-template.cpp \ - $(OBJ_ALL) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -# -# PoCs -# - -llama-vdot: pocs/vdot/vdot.cpp ggml/src/ggml.o \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -llama-q8dot: pocs/vdot/q8dot.cpp ggml/src/ggml.o \ - $(OBJ_GGML) - $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<) - $(CXX) $(CXXFLAGS) $(filter-out $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) - -# -# Deprecated binaries that we want to keep around long enough for people to migrate to the new filenames, then these can be removed. -# -# Mark legacy binary targets as .PHONY so that they are always checked. -.PHONY: FORCE main quantize perplexity embedding server - -# Define the object file target -examples/deprecation-warning/deprecation-warning.o: examples/deprecation-warning/deprecation-warning.cpp - $(CXX) $(CXXFLAGS) -c $< -o $@ - -# NOTE: We currently will always build the deprecation-warning `main` and `server` binaries to help users migrate. -# Eventually we will want to remove these target from building all the time. -main: examples/deprecation-warning/deprecation-warning.o - $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) - @echo "NOTICE: The 'main' binary is deprecated. Please use 'llama-cli' instead." - -server: examples/deprecation-warning/deprecation-warning.o - $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) - @echo "NOTICE: The 'server' binary is deprecated. Please use 'llama-server' instead." - -quantize: examples/deprecation-warning/deprecation-warning.o -ifneq (,$(wildcard quantize)) - $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) - @echo "#########" - @echo "WARNING: The 'quantize' binary is deprecated. Please use 'llama-quantize' instead." - @echo " Remove the 'quantize' binary to remove this warning." - @echo "#########" -endif - -perplexity: examples/deprecation-warning/deprecation-warning.o -ifneq (,$(wildcard perplexity)) - $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) - @echo "#########" - @echo "WARNING: The 'perplexity' binary is deprecated. Please use 'llama-perplexity' instead." - @echo " Remove the 'perplexity' binary to remove this warning." - @echo "#########" -endif - -embedding: examples/deprecation-warning/deprecation-warning.o -ifneq (,$(wildcard embedding)) - $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) - @echo "#########" - @echo "WARNING: The 'embedding' binary is deprecated. Please use 'llama-embedding' instead." - @echo " Remove the 'embedding' binary to remove this warning." - @echo "#########" -endif +$(error Build system changed:$(newline)\ +The Makefile build has been replaced by CMake.$(newline)$(newline)\ +For build instructions see:$(newline)\ +https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md$(newline)${newline}) From 1a99c2d948209d9ea5eac8b6dc0a297107244540 Mon Sep 17 00:00:00 2001 From: xiaobing318 <71554036+xiaobing318@users.noreply.github.com> Date: Wed, 20 Aug 2025 18:32:05 +0800 Subject: [PATCH 044/174] cmake : fix target include directories (#15450) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update docker.yml 修改docker.yml文件中的内容使其停止周期性的运行该workflow,如果想要运行该workflow可以手动启动 * feat:Modify the header file include path 1. There's no llava directory in the tools directory. 2. Because the command `target_include_directories(mtmd PUBLIC .)` is used in the `mtmd` CMakeLists.txt file, other targets that link against `mtmd` automatically include the `mtmd` directory as a search path for header files. Therefore, you can remove `target_include_directories(${TARGET} PRIVATE ../llava`` or use `target_include_directories(${TARGET} PRIVATE ../mtmd`` to explicitly require the `llama-server` target to use header files from `mtmd`. * Restore the docker.yml file --- tools/server/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/server/CMakeLists.txt b/tools/server/CMakeLists.txt index c2a56aaa7f..83b608c32a 100644 --- a/tools/server/CMakeLists.txt +++ b/tools/server/CMakeLists.txt @@ -33,7 +33,7 @@ endforeach() add_executable(${TARGET} ${TARGET_SRCS}) install(TARGETS ${TARGET} RUNTIME) -target_include_directories(${TARGET} PRIVATE ../llava) +target_include_directories(${TARGET} PRIVATE ../mtmd) target_include_directories(${TARGET} PRIVATE ${CMAKE_SOURCE_DIR}) target_link_libraries(${TARGET} PRIVATE common mtmd ${CMAKE_THREAD_LIBS_INIT}) From ec5ab1a36c11dd3efcf4ec8d1ac89a13a8117bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jie=20Fu=20=28=E5=82=85=E6=9D=B0=29?= Date: Wed, 20 Aug 2025 18:33:30 +0800 Subject: [PATCH 045/174] common : fix context shift help message (#15448) Signed-off-by: Jie Fu --- common/arg.cpp | 2 +- common/common.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index d9f6ec96d0..eeb6c94af4 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1532,7 +1532,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex ).set_examples({LLAMA_EXAMPLE_MAIN, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_IMATRIX, LLAMA_EXAMPLE_PERPLEXITY}).set_env("LLAMA_ARG_NO_CONTEXT_SHIFT")); add_opt(common_arg( {"--context-shift"}, - string_format("enables context shift on infinite text generation (default: %s)", params.ctx_shift ? "disabled" : "enabled"), + string_format("enables context shift on infinite text generation (default: %s)", params.ctx_shift ? "enabled" : "disabled"), [](common_params & params) { params.ctx_shift = true; } diff --git a/common/common.h b/common/common.h index 920de7b50a..614e41a246 100644 --- a/common/common.h +++ b/common/common.h @@ -375,7 +375,7 @@ struct common_params { bool cont_batching = true; // insert new sequences for decoding on-the-fly bool flash_attn = false; // flash attention bool no_perf = false; // disable performance metrics - bool ctx_shift = false; // context shift on inifinite text generation + bool ctx_shift = false; // context shift on infinite text generation bool swa_full = false; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) bool kv_unified = false; // enable unified KV cache From 657b8a77bd01854f99d37a47318fa24f2e7e298f Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 20 Aug 2025 14:26:01 +0200 Subject: [PATCH 046/174] chat: handle gpt-oss return/end token inconsistency (#15421) This commit addresses an inconsistency during inference by adding a new member to the `templates_params` struct to indicate whether the chat is in inference mode. This allows the gpt-oss specific function `common_chat_params_init_gpt_oss` to check this flag and the `add_generation_prompt` flag to determine if it should replace the `<|return|>` token with the `<|end|>` token in the prompt. The motivation for this change is to ensure that the formatted prompt of past messages in `common_chat_format_single` matches the output of the formatted new message. The issue is that the gpt-oss template returns different end tags: `<|return|>` when `add_generation_prompt` is false, and `<|end|>` when `add_generation_prompt` is true. This causes the substring function to start at an incorrect position, resulting in tokenization starting with 'tart|>' instead of '<|start|>'. Resolves: https://github.com/ggml-org/llama.cpp/issues/15417 --- common/chat.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/chat.cpp b/common/chat.cpp index 5fe5643d38..7f6809a4ed 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -147,6 +147,7 @@ struct templates_params { json extra_context; bool add_bos; bool add_eos; + bool is_inference = true; }; common_chat_tool_choice common_chat_tool_choice_parse_oaicompat(const std::string & tool_choice) { @@ -1336,6 +1337,17 @@ static common_chat_params common_chat_params_init_gpt_oss(const common_chat_temp common_chat_params data; auto prompt = apply(tmpl, inputs); + // Check if we need to replace the return token with end token during + // inference and without generation prompt. For more details see: + // https://github.com/ggml-org/llama.cpp/issues/15417 + if (inputs.is_inference && !inputs.add_generation_prompt) { + static constexpr std::string_view return_token = "<|return|>"; + static constexpr std::string_view end_token = "<|end|>"; + if (size_t pos = prompt.rfind(return_token); pos != std::string::npos) { + prompt.replace(pos, return_token.length(), end_token); + } + } + data.prompt = prompt; data.format = COMMON_CHAT_FORMAT_GPT_OSS; From fec9519802ae1567048abb126cdd5ea160a22d0f Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 20 Aug 2025 09:33:14 -0500 Subject: [PATCH 047/174] vulkan: shorten pipeline name strings (#15431) These detailed strings were causing increased build time on gcc. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 92 ++++++++++++++-------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 7ef938066b..c59a588b97 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2786,53 +2786,53 @@ static void ggml_vk_load_shaders(vk_device& device) { const bool s = device->subgroup_add && device->architecture != vk_device_architecture::AMD_GCN; for (uint32_t i = 0; i < mul_mat_vec_max_cols; ++i) { - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f32_f32_f32_len[s], arr_dmmv_f32_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f16_f32_f32_len[s], arr_dmmv_f16_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_bf16_f32_f32_len[s], arr_dmmv_bf16_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_0_f32_f32_len[s], arr_dmmv_q4_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_1_f32_f32_len[s], arr_dmmv_q4_1_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_0_f32_f32_len[s], arr_dmmv_q5_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_1_f32_f32_len[s], arr_dmmv_q5_1_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q8_0_f32_f32_len[s], arr_dmmv_q8_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {wg_size_subgroup, 1*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q2_k_f32_f32_len[s], arr_dmmv_q2_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q3_k_f32_f32_len[s], arr_dmmv_q3_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_k_f32_f32_len[s], arr_dmmv_q4_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_k_f32_f32_len[s], arr_dmmv_q5_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q6_k_f32_f32_len[s], arr_dmmv_q6_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_s_f32_f32_len[s], arr_dmmv_iq1_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_m_f32_f32_len[s], arr_dmmv_iq1_m_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xxs_f32_f32_len[s], arr_dmmv_iq2_xxs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xs_f32_f32_len[s], arr_dmmv_iq2_xs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_s_f32_f32_len[s], arr_dmmv_iq2_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_xxs_f32_f32_len[s], arr_dmmv_iq3_xxs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_s_f32_f32_len[s], arr_dmmv_iq3_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_xs_f32_f32_len[s], arr_dmmv_iq4_xs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_nl_f32_f32_len[s], arr_dmmv_iq4_nl_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f32_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_mxfp4_f32_f32_len[s], arr_dmmv_mxfp4_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f32_f32", arr_dmmv_f32_f32_f32_len[s], arr_dmmv_f32_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f32_f32", arr_dmmv_f16_f32_f32_len[s], arr_dmmv_f16_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f32_f32", arr_dmmv_bf16_f32_f32_len[s], arr_dmmv_bf16_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f32_f32", arr_dmmv_q4_0_f32_f32_len[s], arr_dmmv_q4_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f32_f32", arr_dmmv_q4_1_f32_f32_len[s], arr_dmmv_q4_1_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f32_f32", arr_dmmv_q5_0_f32_f32_len[s], arr_dmmv_q5_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f32_f32", arr_dmmv_q5_1_f32_f32_len[s], arr_dmmv_q5_1_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f32_f32", arr_dmmv_q8_0_f32_f32_len[s], arr_dmmv_q8_0_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {wg_size_subgroup, 1*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f32_f32", arr_dmmv_q2_k_f32_f32_len[s], arr_dmmv_q2_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f32_f32", arr_dmmv_q3_k_f32_f32_len[s], arr_dmmv_q3_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f32_f32", arr_dmmv_q4_k_f32_f32_len[s], arr_dmmv_q4_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f32_f32", arr_dmmv_q5_k_f32_f32_len[s], arr_dmmv_q5_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f32_f32", arr_dmmv_q6_k_f32_f32_len[s], arr_dmmv_q6_k_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f32_f32", arr_dmmv_iq1_s_f32_f32_len[s], arr_dmmv_iq1_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f32_f32", arr_dmmv_iq1_m_f32_f32_len[s], arr_dmmv_iq1_m_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f32_f32", arr_dmmv_iq2_xxs_f32_f32_len[s], arr_dmmv_iq2_xxs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f32_f32", arr_dmmv_iq2_xs_f32_f32_len[s], arr_dmmv_iq2_xs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f32_f32", arr_dmmv_iq2_s_f32_f32_len[s], arr_dmmv_iq2_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f32_f32", arr_dmmv_iq3_xxs_f32_f32_len[s], arr_dmmv_iq3_xxs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f32_f32", arr_dmmv_iq3_s_f32_f32_len[s], arr_dmmv_iq3_s_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f32_f32", arr_dmmv_iq4_xs_f32_f32_len[s], arr_dmmv_iq4_xs_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f32_f32", arr_dmmv_iq4_nl_f32_f32_len[s], arr_dmmv_iq4_nl_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[w][GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f32_f32", arr_dmmv_mxfp4_f32_f32_len[s], arr_dmmv_mxfp4_f32_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f32_f16_f32_len[s], arr_dmmv_f32_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_f16_f16_f32_len[s], arr_dmmv_f16_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_bf16_f16_f32_len[s], arr_dmmv_bf16_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_0_f16_f32_len[s], arr_dmmv_q4_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_1_f16_f32_len[s], arr_dmmv_q4_1_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_0_f16_f32_len[s], arr_dmmv_q5_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_1_f16_f32_len[s], arr_dmmv_q5_1_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q8_0_f16_f32_len[s], arr_dmmv_q8_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {wg_size_subgroup, 1*rm_stdq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q2_k_f16_f32_len[s], arr_dmmv_q2_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q3_k_f16_f32_len[s], arr_dmmv_q3_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q4_k_f16_f32_len[s], arr_dmmv_q4_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q5_k_f16_f32_len[s], arr_dmmv_q5_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_q6_k_f16_f32_len[s], arr_dmmv_q6_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_s_f16_f32_len[s], arr_dmmv_iq1_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq1_m_f16_f32_len[s], arr_dmmv_iq1_m_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xxs_f16_f32_len[s], arr_dmmv_iq2_xxs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_xs_f16_f32_len[s], arr_dmmv_iq2_xs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq2_s_f16_f32_len[s], arr_dmmv_iq2_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_xxs_f16_f32_len[s], arr_dmmv_iq3_xxs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq3_s_f16_f32_len[s], arr_dmmv_iq3_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_xs_f16_f32_len[s], arr_dmmv_iq4_xs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_iq4_nl_f16_f32_len[s], arr_dmmv_iq4_nl_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); - ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f16_f32_"+std::to_string(w)+"_"+std::to_string(i+1), arr_dmmv_mxfp4_f16_f32_len[s], arr_dmmv_mxfp4_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_F32 ][i], "mul_mat_vec_f32_f16_f32", arr_dmmv_f32_f16_f32_len[s], arr_dmmv_f32_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_F16 ][i], "mul_mat_vec_f16_f16_f32", arr_dmmv_f16_f16_f32_len[s], arr_dmmv_f16_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_BF16][i], "mul_mat_vec_bf16_f16_f32", arr_dmmv_bf16_f16_f32_len[s], arr_dmmv_bf16_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2, 1, 1}, {wg_size_subgroup, 2, i+1}, 1); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_0][i], "mul_mat_vec_q4_0_f16_f32", arr_dmmv_q4_0_f16_f32_len[s], arr_dmmv_q4_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_1][i], "mul_mat_vec_q4_1_f16_f32", arr_dmmv_q4_1_f16_f32_len[s], arr_dmmv_q4_1_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_0][i], "mul_mat_vec_q5_0_f16_f32", arr_dmmv_q5_0_f16_f32_len[s], arr_dmmv_q5_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_1][i], "mul_mat_vec_q5_1_f16_f32", arr_dmmv_q5_1_f16_f32_len[s], arr_dmmv_q5_1_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {2*rm_stdq, 1, 1}, {wg_size_subgroup, 2*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q8_0][i], "mul_mat_vec_q8_0_f16_f32", arr_dmmv_q8_0_f16_f32_len[s], arr_dmmv_q8_0_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {1*rm_stdq, 1, 1}, {wg_size_subgroup, 1*rm_stdq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q2_K][i], "mul_mat_vec_q2_k_f16_f32", arr_dmmv_q2_k_f16_f32_len[s], arr_dmmv_q2_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q3_K][i], "mul_mat_vec_q3_k_f16_f32", arr_dmmv_q3_k_f16_f32_len[s], arr_dmmv_q3_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q4_K][i], "mul_mat_vec_q4_k_f16_f32", arr_dmmv_q4_k_f16_f32_len[s], arr_dmmv_q4_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q5_K][i], "mul_mat_vec_q5_k_f16_f32", arr_dmmv_q5_k_f16_f32_len[s], arr_dmmv_q5_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_Q6_K][i], "mul_mat_vec_q6_k_f16_f32", arr_dmmv_q6_k_f16_f32_len[s], arr_dmmv_q6_k_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_kq, 1, 1}, {wg_size_subgroup16, rm_kq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ1_S][i], "mul_mat_vec_iq1_s_f16_f32", arr_dmmv_iq1_s_f16_f32_len[s], arr_dmmv_iq1_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ1_M][i], "mul_mat_vec_iq1_m_f16_f32", arr_dmmv_iq1_m_f16_f32_len[s], arr_dmmv_iq1_m_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_XXS][i], "mul_mat_vec_iq2_xxs_f16_f32", arr_dmmv_iq2_xxs_f16_f32_len[s], arr_dmmv_iq2_xxs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_XS][i], "mul_mat_vec_iq2_xs_f16_f32", arr_dmmv_iq2_xs_f16_f32_len[s], arr_dmmv_iq2_xs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ2_S][i], "mul_mat_vec_iq2_s_f16_f32", arr_dmmv_iq2_s_f16_f32_len[s], arr_dmmv_iq2_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ3_XXS][i], "mul_mat_vec_iq3_xxs_f16_f32", arr_dmmv_iq3_xxs_f16_f32_len[s], arr_dmmv_iq3_xxs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ3_S][i], "mul_mat_vec_iq3_s_f16_f32", arr_dmmv_iq3_s_f16_f32_len[s], arr_dmmv_iq3_s_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ4_XS][i], "mul_mat_vec_iq4_xs_f16_f32", arr_dmmv_iq4_xs_f16_f32_len[s], arr_dmmv_iq4_xs_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_IQ4_NL][i], "mul_mat_vec_iq4_nl_f16_f32", arr_dmmv_iq4_nl_f16_f32_len[s], arr_dmmv_iq4_nl_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[w][GGML_TYPE_MXFP4][i], "mul_mat_vec_mxfp4_f16_f32", arr_dmmv_mxfp4_f16_f32_len[s], arr_dmmv_mxfp4_f16_f32_data[s], "main", 3, sizeof(vk_mat_vec_push_constants), {rm_iq, 1, 1}, {wg_size_subgroup16, rm_iq, i+1}, 1, true); } } From 7a6e91ad26160dd6dfb33d29ac441617422f28e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Wed, 20 Aug 2025 16:58:49 +0200 Subject: [PATCH 048/174] CUDA: replace GGML_CUDA_F16 with CUDA arch checks (#15433) --- docs/build.md | 13 ++++---- docs/multimodal/MobileVLM.md | 2 +- ggml/CMakeLists.txt | 1 - ggml/src/ggml-cuda/CMakeLists.txt | 10 ------ ggml/src/ggml-cuda/common.cuh | 10 +----- ggml/src/ggml-cuda/convert.cu | 2 +- ggml/src/ggml-cuda/cpy.cu | 4 +-- ggml/src/ggml-cuda/dequantize.cuh | 54 ++++++++----------------------- ggml/src/ggml-cuda/getrows.cu | 2 +- ggml/src/ggml-cuda/ggml-cuda.cu | 4 --- ggml/src/ggml-cuda/vecdotq.cuh | 12 +++---- ggml/src/ggml-musa/CMakeLists.txt | 4 --- 12 files changed, 32 insertions(+), 86 deletions(-) diff --git a/docs/build.md b/docs/build.md index dd486fe293..b35a898ba9 100644 --- a/docs/build.md +++ b/docs/build.md @@ -197,13 +197,12 @@ The environment variable `GGML_CUDA_ENABLE_UNIFIED_MEMORY=1` can be used to enab The following compilation options are also available to tweak performance: -| Option | Legal values | Default | Description | -|-------------------------------|------------------------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| GGML_CUDA_FORCE_MMQ | Boolean | false | Force the use of custom matrix multiplication kernels for quantized models instead of FP16 cuBLAS even if there is no int8 tensor core implementation available (affects V100, CDNA and RDNA3+). MMQ kernels are enabled by default on GPUs with int8 tensor core support. With MMQ force enabled, speed for large batch sizes will be worse but VRAM consumption will be lower. | -| GGML_CUDA_FORCE_CUBLAS | Boolean | false | Force the use of FP16 cuBLAS instead of custom matrix multiplication kernels for quantized models | -| GGML_CUDA_F16 | Boolean | false | If enabled, use half-precision floating point arithmetic for the CUDA dequantization + mul mat vec kernels and for the q4_1 and q5_1 matrix matrix multiplication kernels. Can improve performance on relatively recent GPUs. | -| GGML_CUDA_PEER_MAX_BATCH_SIZE | Positive integer | 128 | Maximum batch size for which to enable peer access between multiple GPUs. Peer access requires either Linux or NVLink. When using NVLink enabling peer access for larger batch sizes is potentially beneficial. | -| GGML_CUDA_FA_ALL_QUANTS | Boolean | false | Compile support for all KV cache quantization type (combinations) for the FlashAttention CUDA kernels. More fine-grained control over KV cache size but compilation takes much longer. | +| Option | Legal values | Default | Description | +|-------------------------------|------------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| GGML_CUDA_FORCE_MMQ | Boolean | false | Force the use of custom matrix multiplication kernels for quantized models instead of FP16 cuBLAS even if there is no int8 tensor core implementation available (affects V100, CDNA and RDNA3+). MMQ kernels are enabled by default on GPUs with int8 tensor core support. With MMQ force enabled, speed for large batch sizes will be worse but VRAM consumption will be lower. | +| GGML_CUDA_FORCE_CUBLAS | Boolean | false | Force the use of FP16 cuBLAS instead of custom matrix multiplication kernels for quantized models. There may be issues with numerical overflows (except for CDNA and RDNA4) and memory use will be higher. Prompt processing may become faster on recent datacenter GPUs (the custom kernels were tuned primarily for RTX 3000/4000). | +| GGML_CUDA_PEER_MAX_BATCH_SIZE | Positive integer | 128 | Maximum batch size for which to enable peer access between multiple GPUs. Peer access requires either Linux or NVLink. When using NVLink enabling peer access for larger batch sizes is potentially beneficial. | +| GGML_CUDA_FA_ALL_QUANTS | Boolean | false | Compile support for all KV cache quantization type (combinations) for the FlashAttention CUDA kernels. More fine-grained control over KV cache size but compilation takes much longer. | ## MUSA diff --git a/docs/multimodal/MobileVLM.md b/docs/multimodal/MobileVLM.md index 4f5eca6190..3bfab9f3d2 100644 --- a/docs/multimodal/MobileVLM.md +++ b/docs/multimodal/MobileVLM.md @@ -194,7 +194,7 @@ llama_print_timings: total time = 44411.01 ms / 377 tokens ## Orin compile and run ### compile ```sh -make GGML_CUDA=1 CUDA_DOCKER_ARCH=sm_87 GGML_CUDA_F16=1 -j 32 +make GGML_CUDA=1 CUDA_DOCKER_ARCH=sm_87 -j 32 ``` ### run on Orin ### case 1 diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 90e274ccdb..2ead001e2c 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -158,7 +158,6 @@ option(GGML_CUDA "ggml: use CUDA" option(GGML_MUSA "ggml: use MUSA" OFF) option(GGML_CUDA_FORCE_MMQ "ggml: use mmq kernels instead of cuBLAS" OFF) option(GGML_CUDA_FORCE_CUBLAS "ggml: always use cuBLAS instead of mmq kernels" OFF) -option(GGML_CUDA_F16 "ggml: use 16 bit floats for some calculations" OFF) set (GGML_CUDA_PEER_MAX_BATCH_SIZE "128" CACHE STRING "ggml: max. batch size for using peer access") option(GGML_CUDA_NO_PEER_COPY "ggml: do not use peer to peer copies" OFF) diff --git a/ggml/src/ggml-cuda/CMakeLists.txt b/ggml/src/ggml-cuda/CMakeLists.txt index bce07ac362..ea824965aa 100644 --- a/ggml/src/ggml-cuda/CMakeLists.txt +++ b/ggml/src/ggml-cuda/CMakeLists.txt @@ -24,12 +24,6 @@ if (CUDAToolkit_FOUND) # for best performance and to also build real architectures for the most commonly used GPUs. if (GGML_NATIVE AND CUDAToolkit_VERSION VERSION_GREATER_EQUAL "11.6" AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.24") set(CMAKE_CUDA_ARCHITECTURES "native") - elseif(GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16) - if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL "11.8") - set(CMAKE_CUDA_ARCHITECTURES "60-virtual;61-virtual;70-virtual;75-virtual;80-virtual;86-real;89-real") - else() - set(CMAKE_CUDA_ARCHITECTURES "60-virtual;61-virtual;70-virtual;75-virtual;80-virtual;86-real") - endif() else() if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL "11.8") set(CMAKE_CUDA_ARCHITECTURES "50-virtual;61-virtual;70-virtual;75-virtual;80-virtual;86-real;89-real") @@ -91,10 +85,6 @@ if (CUDAToolkit_FOUND) add_compile_definitions(GGML_CUDA_NO_FA) endif() - if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16) - add_compile_definitions(GGML_CUDA_F16) - endif() - if (GGML_CUDA_NO_PEER_COPY) add_compile_definitions(GGML_CUDA_NO_PEER_COPY) endif() diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index 76ace816ff..767ad83f60 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -206,14 +206,6 @@ static const char * cu_get_error_str(CUresult err) { #define GGML_CUDA_ASSUME(x) #endif // CUDART_VERSION >= 11010 -#ifdef GGML_CUDA_F16 -typedef half dfloat; // dequantize float -typedef half2 dfloat2; -#else -typedef float dfloat; // dequantize float -typedef float2 dfloat2; -#endif // GGML_CUDA_F16 - #if (!defined(GGML_USE_HIP) && !defined(GGML_CUDA_NO_VMM)) || (defined(GGML_USE_HIP) && !defined(GGML_HIP_NO_VMM)) #define GGML_USE_VMM #endif // (!defined(GGML_USE_HIP) && !defined(GGML_CUDA_NO_VMM)) || (defined(GGML_USE_HIP) && !defined(GGML_HIP_NO_VMM)) @@ -559,7 +551,7 @@ static __device__ __forceinline__ float ggml_cuda_e8m0_to_fp32(uint8_t x) { #endif // CUDART_VERSION >= 12050 } -typedef void (*dequantize_kernel_t)(const void * vx, const int64_t ib, const int iqs, dfloat2 & v); +typedef void (*dequantize_kernel_t)(const void * vx, const int64_t ib, const int iqs, float2 & v); static __device__ __forceinline__ float get_alibi_slope( const float max_bias, const uint32_t h, const uint32_t n_head_log2, const float m0, const float m1 diff --git a/ggml/src/ggml-cuda/convert.cu b/ggml/src/ggml-cuda/convert.cu index 8f0efdcc12..7a8b6fdf5f 100644 --- a/ggml/src/ggml-cuda/convert.cu +++ b/ggml/src/ggml-cuda/convert.cu @@ -27,7 +27,7 @@ static __global__ void dequantize_block(const void * __restrict__ vx, dst_t * __ const int64_t y_offset = qr == 1 ? 1 : qk/2; // dequantize - dfloat2 v; + float2 v; dequantize_kernel(vx, ib, iqs, v); const int64_t iy0 = ((i03*ne02 + i02)*ne01 + i01)*ne00 + iybs + iqs; diff --git a/ggml/src/ggml-cuda/cpy.cu b/ggml/src/ggml-cuda/cpy.cu index f9bb025643..0380784ab4 100644 --- a/ggml/src/ggml-cuda/cpy.cu +++ b/ggml/src/ggml-cuda/cpy.cu @@ -42,7 +42,7 @@ static __device__ void cpy_blck_q8_0_f32(const char * cxi, char * cdsti) { #pragma unroll for (int j = 0; j < QK8_0; j += 2) { - dfloat2 dq; + float2 dq; dequantize_q8_0(cxi, 0, j, dq); *(cdstf + j) = dq.x; *(cdstf + j + 1) = dq.y; @@ -55,7 +55,7 @@ static __device__ void cpy_blck_q_f32(const char * cxi, char * cdsti) { #pragma unroll for (int j = 0; j < qk/2; j++) { - dfloat2 dq; + float2 dq; dequant(cxi, 0, j, dq); *(cdstf + j) = dq.x; *(cdstf + j + qk/2) = dq.y; diff --git a/ggml/src/ggml-cuda/dequantize.cuh b/ggml/src/ggml-cuda/dequantize.cuh index bd3c2d9db9..e060fb29fd 100644 --- a/ggml/src/ggml-cuda/dequantize.cuh +++ b/ggml/src/ggml-cuda/dequantize.cuh @@ -1,48 +1,37 @@ #include "common.cuh" -static __device__ __forceinline__ void dequantize_q4_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ +static __device__ __forceinline__ void dequantize_q4_0(const void * vx, const int64_t ib, const int iqs, float2 & v){ const block_q4_0 * x = (const block_q4_0 *) vx; - const dfloat d = x[ib].d; + const float d = x[ib].d; const int vui = x[ib].qs[iqs]; v.x = vui & 0xF; v.y = vui >> 4; -#ifdef GGML_CUDA_F16 - v = __hsub2(v, {8.0f, 8.0f}); - v = __hmul2(v, {d, d}); -#else v.x = (v.x - 8.0f) * d; v.y = (v.y - 8.0f) * d; -#endif // GGML_CUDA_F16 } -static __device__ __forceinline__ void dequantize_q4_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ +static __device__ __forceinline__ void dequantize_q4_1(const void * vx, const int64_t ib, const int iqs, float2 & v){ const block_q4_1 * x = (const block_q4_1 *) vx; - const dfloat d = __low2half(x[ib].dm); - const dfloat m = __high2half(x[ib].dm); + const float2 dm = __half22float2(x[ib].dm); const int vui = x[ib].qs[iqs]; v.x = vui & 0xF; v.y = vui >> 4; -#ifdef GGML_CUDA_F16 - v = __hmul2(v, {d, d}); - v = __hadd2(v, {m, m}); -#else - v.x = (v.x * d) + m; - v.y = (v.y * d) + m; -#endif // GGML_CUDA_F16 + v.x = (v.x * dm.x) + dm.y; + v.y = (v.y * dm.x) + dm.y; } -static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ +static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const int64_t ib, const int iqs, float2 & v){ const block_q5_0 * x = (const block_q5_0 *) vx; - const dfloat d = x[ib].d; + const float d = x[ib].d; uint32_t qh; memcpy(&qh, x[ib].qh, sizeof(qh)); @@ -53,20 +42,14 @@ static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const in v.x = ((x[ib].qs[iqs] & 0xf) | xh_0); v.y = ((x[ib].qs[iqs] >> 4) | xh_1); -#ifdef GGML_CUDA_F16 - v = __hsub2(v, {16.0f, 16.0f}); - v = __hmul2(v, {d, d}); -#else v.x = (v.x - 16.0f) * d; v.y = (v.y - 16.0f) * d; -#endif // GGML_CUDA_F16 } -static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ +static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const int64_t ib, const int iqs, float2 & v){ const block_q5_1 * x = (const block_q5_1 *) vx; - const dfloat d = __low2half(x[ib].dm); - const dfloat m = __high2half(x[ib].dm); + const float2 dm = __half22float2(x[ib].dm); uint32_t qh; memcpy(&qh, x[ib].qh, sizeof(qh)); @@ -77,27 +60,18 @@ static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const in v.x = ((x[ib].qs[iqs] & 0xf) | xh_0); v.y = ((x[ib].qs[iqs] >> 4) | xh_1); -#ifdef GGML_CUDA_F16 - v = __hmul2(v, {d, d}); - v = __hadd2(v, {m, m}); -#else - v.x = (v.x * d) + m; - v.y = (v.y * d) + m; -#endif // GGML_CUDA_F16 + v.x = (v.x * dm.x) + dm.y; + v.y = (v.y * dm.x) + dm.y; } -static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ +static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const int64_t ib, const int iqs, float2 & v){ const block_q8_0 * x = (const block_q8_0 *) vx; - const dfloat d = x[ib].d; + const float d = x[ib].d; v.x = x[ib].qs[iqs + 0]; v.y = x[ib].qs[iqs + 1]; -#ifdef GGML_CUDA_F16 - v = __hmul2(v, {d, d}); -#else v.x *= d; v.y *= d; -#endif // GGML_CUDA_F16 } diff --git a/ggml/src/ggml-cuda/getrows.cu b/ggml/src/ggml-cuda/getrows.cu index 68d3254fbe..3ec0e957ab 100644 --- a/ggml/src/ggml-cuda/getrows.cu +++ b/ggml/src/ggml-cuda/getrows.cu @@ -32,7 +32,7 @@ static __global__ void k_get_rows( const int y_offset = qr == 1 ? 1 : qk/2; // dequantize - dfloat2 v; + float2 v; dequantize_kernel(src0_row, ib, iqs, v); dst_row[iybs + iqs + 0] = ggml_cuda_cast(v.x); diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index d6402a8daa..8b706752bc 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -3672,10 +3672,6 @@ static ggml_backend_feature * ggml_backend_cuda_get_features(ggml_backend_reg_t features.push_back({ "NO_PEER_COPY", "1" }); #endif - #ifdef GGML_CUDA_F16 - features.push_back({ "F16", "1" }); - #endif - #ifdef GGML_CUDA_USE_GRAPHS features.push_back({ "USE_GRAPHS", "1" }); #endif diff --git a/ggml/src/ggml-cuda/vecdotq.cuh b/ggml/src/ggml-cuda/vecdotq.cuh index d8f9aa5ba6..d60292b83b 100644 --- a/ggml/src/ggml-cuda/vecdotq.cuh +++ b/ggml/src/ggml-cuda/vecdotq.cuh @@ -87,7 +87,7 @@ template static __device__ __forceinline__ float vec_dot_q4_1_q8_1_imp sumi = ggml_cuda_dp4a(vi1, u[2*i+1], sumi); } -#ifdef GGML_CUDA_F16 +#ifdef FAST_FP16_AVAILABLE const float2 tmp = __half22float2(__hmul2(dm4, ds8)); const float d4d8 = tmp.x; const float m4s8 = tmp.y; @@ -96,7 +96,7 @@ template static __device__ __forceinline__ float vec_dot_q4_1_q8_1_imp const float2 ds8f = __half22float2(ds8); const float d4d8 = dm4f.x * ds8f.x; const float m4s8 = dm4f.y * ds8f.y; -#endif // GGML_CUDA_F16 +#endif // FAST_FP16_AVAILABLE // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1)); @@ -158,7 +158,7 @@ template static __device__ __forceinline__ float vec_dot_q5_1_q8_1_imp sumi = ggml_cuda_dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values } -#ifdef GGML_CUDA_F16 +#ifdef FAST_FP16_AVAILABLE const float2 tmp = __half22float2(__hmul2(dm5, ds8)); const float d5d8 = tmp.x; const float m5s8 = tmp.y; @@ -167,7 +167,7 @@ template static __device__ __forceinline__ float vec_dot_q5_1_q8_1_imp const float2 ds8f = __half22float2(ds8); const float d5d8 = dm5f.x * ds8f.x; const float m5s8 = dm5f.y * ds8f.y; -#endif // GGML_CUDA_F16 +#endif // FAST_FP16_AVAILABLE // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it return sumi*d5d8 + m5s8 / (QI5_1 / vdr); @@ -201,7 +201,7 @@ template static __device__ __forceinline__ float vec_dot_q8_1_q8_1_imp sumi = ggml_cuda_dp4a(v[i], u[i], sumi); } -#ifdef GGML_CUDA_F16 +#ifdef FAST_FP16_AVAILABLE const float2 tmp = __half22float2(__hmul2(dm8, ds8)); const float d8d8 = tmp.x; const float m8s8 = tmp.y; @@ -210,7 +210,7 @@ template static __device__ __forceinline__ float vec_dot_q8_1_q8_1_imp const float2 ds8f = __half22float2(ds8); const float d8d8 = dm8f.x * ds8f.x; const float m8s8 = dm8f.y * ds8f.y; -#endif // GGML_CUDA_F16 +#endif // FAST_FP16_AVAILABLE // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it return sumi*d8d8 + m8s8 / (QI8_1 / vdr); diff --git a/ggml/src/ggml-musa/CMakeLists.txt b/ggml/src/ggml-musa/CMakeLists.txt index 02904526ad..cdb3818c78 100644 --- a/ggml/src/ggml-musa/CMakeLists.txt +++ b/ggml/src/ggml-musa/CMakeLists.txt @@ -96,10 +96,6 @@ if (MUSAToolkit_FOUND) add_compile_definitions(GGML_CUDA_NO_FA) endif() - if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16) - add_compile_definitions(GGML_CUDA_F16) - endif() - if (GGML_CUDA_NO_PEER_COPY) add_compile_definitions(GGML_CUDA_NO_PEER_COPY) endif() From 13aeb7aef284daed4ad07dc14b4b3e2a42b5ea97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Wed, 20 Aug 2025 23:14:14 +0200 Subject: [PATCH 049/174] CUDA: refactor FA support/selection code (#15454) --- ggml/src/ggml-cuda/fattn-common.cuh | 22 --- ggml/src/ggml-cuda/fattn.cu | 212 +++++++++++++++++++++------- ggml/src/ggml-cuda/fattn.cuh | 2 + ggml/src/ggml-cuda/ggml-cuda.cu | 40 +----- 4 files changed, 165 insertions(+), 111 deletions(-) diff --git a/ggml/src/ggml-cuda/fattn-common.cuh b/ggml/src/ggml-cuda/fattn-common.cuh index d4ed938391..b69f57d659 100644 --- a/ggml/src/ggml-cuda/fattn-common.cuh +++ b/ggml/src/ggml-cuda/fattn-common.cuh @@ -704,28 +704,6 @@ static __global__ void flash_attn_combine_results( dst[tid] = VKQ_numerator / VKQ_denominator; } -[[noreturn]] -static void on_no_fattn_vec_case(const int D) { - if (D == 64) { - fprintf(stderr, "Unsupported KV type combination for head_size 64.\n"); - fprintf(stderr, "By default only f16 KV cache is supported.\n"); - fprintf(stderr, "Compile with GGML_CUDA_FA_ALL_QUANTS for V cache quantization support.\n"); - GGML_ABORT("fatal error"); - } else if (D == 128) { - fprintf(stderr, "Unsupported KV type combination for head_size 128.\n"); - fprintf(stderr, "Supported combinations:\n"); - fprintf(stderr, " - K == q4_0, V == q4_0, 4.50 BPV\n"); - fprintf(stderr, " - K == q8_0, V == q8_0, 8.50 BPV\n"); - fprintf(stderr, " - K == f16, V == f16, 16.00 BPV\n"); - fprintf(stderr, "Compile with GGML_CUDA_FA_ALL_QUANTS for all combinations of q4_0, q4_1, q5_0, q5_1, q8_0, and f16.\n"); - GGML_ABORT("fatal error"); - } else { - fprintf(stderr, "Unsupported KV type combination for head_size %d.\n", D); - fprintf(stderr, "Only f16 is supported.\n"); - GGML_ABORT("fatal error"); - } -} - template void launch_fattn( ggml_backend_cuda_context & ctx, ggml_tensor * dst, fattn_kernel_t fattn_kernel, const int nwarps, const size_t nbytes_shared, diff --git a/ggml/src/ggml-cuda/fattn.cu b/ggml/src/ggml-cuda/fattn.cu index 22e90d0e7b..4883427266 100644 --- a/ggml/src/ggml-cuda/fattn.cu +++ b/ggml/src/ggml-cuda/fattn.cu @@ -190,7 +190,7 @@ static void ggml_cuda_flash_attn_ext_vec_f16(ggml_backend_cuda_context & ctx, gg FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16) #endif // GGML_CUDA_FA_ALL_QUANTS - on_no_fattn_vec_case(Q->ne[0]); + GGML_ABORT("fatal error"); } #define FATTN_VEC_F32_CASE(D, type_K, type_V) \ @@ -265,74 +265,184 @@ static void ggml_cuda_flash_attn_ext_vec_f32(ggml_backend_cuda_context & ctx, gg FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16) #endif // GGML_CUDA_FA_ALL_QUANTS - on_no_fattn_vec_case(Q->ne[0]); + GGML_ABORT("fatal error"); } -void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { +// Best FlashAttention kernel for a specific GPU: +enum best_fattn_kernel { + BEST_FATTN_KERNEL_NONE = 0, + BEST_FATTN_KERNEL_TILE_F32 = 200, + BEST_FATTN_KERNEL_TILE_F16 = 210, + BEST_FATTN_KERNEL_VEC_F32 = 100, + BEST_FATTN_KERNEL_VEC_F16 = 110, + BEST_FATTN_KERNEL_WMMA_F16 = 300, + BEST_FATTN_KERNEL_MMA_F16 = 400, +}; + +static best_fattn_kernel ggml_cuda_get_best_fattn_kernel(const int device, const ggml_tensor * dst) { +#ifndef FLASH_ATTN_AVAILABLE + GGML_UNUSED(device); GGML_UNUSED(dst); + return BEST_FATTN_KERNEL_NONE; +#endif// FLASH_ATTN_AVAILABLE + const ggml_tensor * KQV = dst; const ggml_tensor * Q = dst->src[0]; const ggml_tensor * K = dst->src[1]; const ggml_tensor * V = dst->src[2]; const ggml_tensor * mask = dst->src[3]; - ggml_cuda_set_device(ctx.device); - const int cc = ggml_cuda_info().devices[ggml_cuda_get_device()].cc; - const int warp_size = ggml_cuda_info().devices[ggml_cuda_get_device()].warp_size; + const int gqa_ratio = Q->ne[2] / K->ne[2]; + GGML_ASSERT(Q->ne[2] % K->ne[2] == 0); + + const int cc = ggml_cuda_info().devices[device].cc; + const int warp_size = ggml_cuda_info().devices[device].warp_size; const enum ggml_prec prec = ggml_flash_attn_ext_get_prec(KQV); -#if defined(GGML_HIP_ROCWMMA_FATTN) - if (GGML_CUDA_CC_IS_AMD(cc) && fp16_mma_available(cc)) { - ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst); - return; - } -#endif // defined(GGML_HIP_ROCWMMA_FATTN) - - if (!fast_fp16_available(cc)) { - if (Q->ne[1] <= 8 || Q->ne[0] == 256) { - ggml_cuda_flash_attn_ext_vec_f32(ctx, dst); - } else { - ggml_cuda_flash_attn_ext_tile_f32(ctx, dst); - } - return; - } - - if (!fp16_mma_available(cc)) { - if (prec == GGML_PREC_DEFAULT) { - if (Q->ne[1] <= 8 || Q->ne[0] == 256) { - ggml_cuda_flash_attn_ext_vec_f16(ctx, dst); - } else { - ggml_cuda_flash_attn_ext_tile_f16(ctx, dst); + switch (K->ne[0]) { + case 64: + case 128: + case 256: + if (V->ne[0] != K->ne[0]) { + return BEST_FATTN_KERNEL_NONE; } - } else { - if (Q->ne[1] <= 8 || Q->ne[0] == 256) { - ggml_cuda_flash_attn_ext_vec_f32(ctx, dst); - } else { - ggml_cuda_flash_attn_ext_tile_f32(ctx, dst); + break; + case 80: + case 96: + case 112: + if (V->ne[0] != K->ne[0]) { + return BEST_FATTN_KERNEL_NONE; } - } - return; + if (!fp16_mma_available(cc) && !turing_mma_available(cc)) { + return BEST_FATTN_KERNEL_NONE; + } + break; + case 576: + if (V->ne[0] != 512) { + return BEST_FATTN_KERNEL_NONE; + } + if (!turing_mma_available(cc) || gqa_ratio % 16 != 0) { + return BEST_FATTN_KERNEL_NONE; + } + break; + default: + return BEST_FATTN_KERNEL_NONE; + } + +#ifndef GGML_CUDA_FA_ALL_QUANTS + if (K->type != V->type) { + return BEST_FATTN_KERNEL_NONE; + } +#endif // GGML_CUDA_FA_ALL_QUANTS + + switch (K->type) { + case GGML_TYPE_F16: + break; + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: +#ifndef GGML_CUDA_FA_ALL_QUANTS + return BEST_FATTN_KERNEL_NONE; +#endif // GGML_CUDA_FA_ALL_QUANTS + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q8_0: +#ifdef GGML_CUDA_FA_ALL_QUANTS + if (K->ne[0] != 128 && K->ne[0] != 64) { + return BEST_FATTN_KERNEL_NONE; + } +#else + if (K->ne[0] != 128) { + return BEST_FATTN_KERNEL_NONE; + } +#endif // GGML_CUDA_FA_ALL_QUANTS + break; + default: + return BEST_FATTN_KERNEL_NONE; + } + + switch (V->type) { + case GGML_TYPE_F16: + break; + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q8_0: + if (K->ne[0] != 128) { + return BEST_FATTN_KERNEL_NONE; + } + break; + default: + return BEST_FATTN_KERNEL_NONE; + } + + if (mask && mask->ne[2] != 1) { + return BEST_FATTN_KERNEL_NONE; } - const bool gqa_opt_applies = ((Q->ne[2] / K->ne[2]) % 2 == 0) && mask; // The mma-based kernels have GQA-specific optimizations - const bool mma_needs_data_conversion = K->type != GGML_TYPE_F16 || V->type != GGML_TYPE_F16; - const bool mma_faster_for_rtx4000 = Q->ne[3] > 1 || (Q->ne[2] > 4*K->ne[2] && K->ne[1] >= 8192); - const bool mma_faster_for_bs1 = turing_mma_available(cc) && gqa_opt_applies && !mma_needs_data_conversion && - (cc < GGML_CUDA_CC_ADA_LOVELACE || mma_faster_for_rtx4000); const bool can_use_vector_kernel = Q->ne[0] <= 256 && Q->ne[0] % (2*warp_size) == 0; - if (Q->ne[1] == 1 && can_use_vector_kernel && !mma_faster_for_bs1) { - if (prec == GGML_PREC_DEFAULT) { - ggml_cuda_flash_attn_ext_vec_f16(ctx, dst); - } else { - ggml_cuda_flash_attn_ext_vec_f32(ctx, dst); + + // If Turing tensor cores available, use them except for some cases with batch size 1: + if (turing_mma_available(cc)) { + const bool gqa_opt_applies = gqa_ratio % 2 == 0 && mask; // The mma-based kernels have GQA-specific optimizations + const bool mma_needs_data_conversion = K->type != GGML_TYPE_F16 || V->type != GGML_TYPE_F16; + const bool mma_faster_for_rtx4000 = Q->ne[3] > 1 || (gqa_ratio > 4 && K->ne[1] >= 8192); + const bool mma_faster_for_bs1 = gqa_opt_applies && !mma_needs_data_conversion && + (cc < GGML_CUDA_CC_ADA_LOVELACE || mma_faster_for_rtx4000); + if (Q->ne[1] == 1 && can_use_vector_kernel && !mma_faster_for_bs1) { + if (prec == GGML_PREC_DEFAULT && fast_fp16_available(cc)) { + return BEST_FATTN_KERNEL_VEC_F16; + } + return BEST_FATTN_KERNEL_VEC_F32; } - return; + return BEST_FATTN_KERNEL_MMA_F16; } - // The MMA implementation needs Turing or newer, use the old WMMA code for Volta: - if (fp16_mma_available(cc) && !turing_mma_available(cc)) { - ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst); - return; + // Use kernels specializes for small batch sizes if possible: + if (Q->ne[1] <= 8 && can_use_vector_kernel) { + if (prec == GGML_PREC_DEFAULT && fast_fp16_available(cc)) { + return BEST_FATTN_KERNEL_VEC_F16; + } + return BEST_FATTN_KERNEL_VEC_F32; } - ggml_cuda_flash_attn_ext_mma_f16(ctx, dst); + // For large batch sizes, use the WMMA kernel if possible: + if (fp16_mma_available(cc)) { + return BEST_FATTN_KERNEL_WMMA_F16; + } + + // If there is no suitable kernel for tensor cores or small batch sizes, use the generic kernel for large batch sizes: + if (prec == GGML_PREC_DEFAULT && fast_fp16_available(cc)) { + return BEST_FATTN_KERNEL_TILE_F16; + } + return BEST_FATTN_KERNEL_TILE_F32; +} + +void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { + ggml_cuda_set_device(ctx.device); + switch (ggml_cuda_get_best_fattn_kernel(ggml_cuda_get_device(), dst)) { + case BEST_FATTN_KERNEL_NONE: + GGML_ABORT("fatal error"); + case BEST_FATTN_KERNEL_TILE_F32: + ggml_cuda_flash_attn_ext_tile_f32(ctx, dst); + break; + case BEST_FATTN_KERNEL_TILE_F16: + ggml_cuda_flash_attn_ext_tile_f16(ctx, dst); + break; + case BEST_FATTN_KERNEL_VEC_F32: + ggml_cuda_flash_attn_ext_vec_f32(ctx, dst); + break; + case BEST_FATTN_KERNEL_VEC_F16: + ggml_cuda_flash_attn_ext_vec_f16(ctx, dst); + break; + case BEST_FATTN_KERNEL_WMMA_F16: + ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst); + break; + case BEST_FATTN_KERNEL_MMA_F16: + ggml_cuda_flash_attn_ext_mma_f16(ctx, dst); + break; + } +} + +bool ggml_cuda_flash_attn_ext_supported(int device, const ggml_tensor * dst) { + return ggml_cuda_get_best_fattn_kernel(device, dst) != BEST_FATTN_KERNEL_NONE; } diff --git a/ggml/src/ggml-cuda/fattn.cuh b/ggml/src/ggml-cuda/fattn.cuh index ad3ca7a8d8..78705d5995 100644 --- a/ggml/src/ggml-cuda/fattn.cuh +++ b/ggml/src/ggml-cuda/fattn.cuh @@ -1,3 +1,5 @@ #include "common.cuh" void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst); + +bool ggml_cuda_flash_attn_ext_supported(int device, const ggml_tensor * dst); diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 8b706752bc..1440f2f2e9 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -3499,44 +3499,8 @@ static bool ggml_backend_cuda_device_supports_op(ggml_backend_dev_t dev, const g case GGML_OP_GATED_LINEAR_ATTN: case GGML_OP_RWKV_WKV7: return true; - case GGML_OP_FLASH_ATTN_EXT: { -#ifndef FLASH_ATTN_AVAILABLE - return false; -#endif // FLASH_ATTN_AVAILABLE - if (op->src[1]->ne[0] != op->src[2]->ne[0]) { - const int cc = ggml_cuda_info().devices[dev_ctx->device].cc; - if (!turing_mma_available(cc)) { - return false; - } - const int gqa_ratio = op->src[0]->ne[2] / op->src[1]->ne[2]; - return op->src[1]->ne[0] == 576 && op->src[2]->ne[0] == 512 && op->src[3] && gqa_ratio % 16 == 0; - } - // TODO: more general-purpose attention sink support [TAG_ATTN_SINKS] - if (op->src[4] && !fp16_mma_available(ggml_cuda_info().devices[dev_ctx->device].cc) - && op->src[0]->ne[0] != 64 && op->src[0]->ne[0] != 128) { - return false; - } - if (op->src[0]->ne[0] == 192) { - return false; - } - if (op->src[1]->type == GGML_TYPE_BF16 || op->src[2]->type == GGML_TYPE_BF16) { - return false; - } - if (op->src[0]->ne[0] == 64 && op->src[1]->type == GGML_TYPE_F16) { - return true; - } - if (op->src[0]->ne[0] == 128) { - return true; - } - if (op->src[0]->ne[0] == 256 && op->src[1]->type == GGML_TYPE_F16 && op->src[2]->type == GGML_TYPE_F16) { - return true; - } - if (op->src[3] && op->src[3]->ne[2] != 1) { - return false; - } - return fp16_mma_available(ggml_cuda_info().devices[dev_ctx->device].cc) && - op->src[1]->type == GGML_TYPE_F16 && op->src[2]->type == GGML_TYPE_F16; - } + case GGML_OP_FLASH_ATTN_EXT: + return ggml_cuda_flash_attn_ext_supported(dev_ctx->device, op); case GGML_OP_CROSS_ENTROPY_LOSS: case GGML_OP_CROSS_ENTROPY_LOSS_BACK: case GGML_OP_OPT_STEP_ADAMW: From 1bc664a26a1d93a48baf2483a7ff95291ca8bcb8 Mon Sep 17 00:00:00 2001 From: teo Date: Thu, 21 Aug 2025 07:10:08 +0900 Subject: [PATCH 050/174] server: fix OpenAI API compatibility for usage statistics in chat streams (#15444) --- tools/server/server.cpp | 11 +++ .../server/tests/unit/test_chat_completion.py | 89 ++++++++++--------- tools/server/tests/utils.py | 87 +++++++++--------- 3 files changed, 105 insertions(+), 82 deletions(-) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index ab88f3d26c..35b060674b 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -911,6 +911,17 @@ struct server_task_result_cmpl_final : server_task_result { {"model", oaicompat_model}, {"system_fingerprint", build_info}, {"object", "chat.completion.chunk"}, + }); + + // OpenAI API spec for chat.completion.chunks specifies an empty `choices` array for the last chunk when including usage + // https://platform.openai.com/docs/api-reference/chat_streaming/streaming#chat_streaming/streaming-choices + deltas.push_back({ + {"choices", json::array()}, + {"created", t}, + {"id", oaicompat_cmpl_id}, + {"model", oaicompat_model}, + {"system_fingerprint", build_info}, + {"object", "chat.completion.chunk"}, {"usage", json { {"completion_tokens", n_decoded}, {"prompt_tokens", n_prompt_tokens}, diff --git a/tools/server/tests/unit/test_chat_completion.py b/tools/server/tests/unit/test_chat_completion.py index 6c6f64f5e2..509c024b75 100644 --- a/tools/server/tests/unit/test_chat_completion.py +++ b/tools/server/tests/unit/test_chat_completion.py @@ -72,27 +72,29 @@ def test_chat_completion_stream(system_prompt, user_prompt, max_tokens, re_conte content = "" last_cmpl_id = None for i, data in enumerate(res): - choice = data["choices"][0] - if i == 0: - # Check first role message for stream=True - assert choice["delta"]["content"] is None - assert choice["delta"]["role"] == "assistant" + if data["choices"]: + choice = data["choices"][0] + if i == 0: + # Check first role message for stream=True + assert choice["delta"]["content"] is None + assert choice["delta"]["role"] == "assistant" + else: + assert "role" not in choice["delta"] + assert data["system_fingerprint"].startswith("b") + assert "gpt-3.5" in data["model"] # DEFAULT_OAICOMPAT_MODEL, maybe changed in the future + if last_cmpl_id is None: + last_cmpl_id = data["id"] + assert last_cmpl_id == data["id"] # make sure the completion id is the same for all events in the stream + if choice["finish_reason"] in ["stop", "length"]: + assert "content" not in choice["delta"] + assert match_regex(re_content, content) + assert choice["finish_reason"] == finish_reason + else: + assert choice["finish_reason"] is None + content += choice["delta"]["content"] or '' else: - assert "role" not in choice["delta"] - assert data["system_fingerprint"].startswith("b") - assert "gpt-3.5" in data["model"] # DEFAULT_OAICOMPAT_MODEL, maybe changed in the future - if last_cmpl_id is None: - last_cmpl_id = data["id"] - assert last_cmpl_id == data["id"] # make sure the completion id is the same for all events in the stream - if choice["finish_reason"] in ["stop", "length"]: assert data["usage"]["prompt_tokens"] == n_prompt assert data["usage"]["completion_tokens"] == n_predicted - assert "content" not in choice["delta"] - assert match_regex(re_content, content) - assert choice["finish_reason"] == finish_reason - else: - assert choice["finish_reason"] is None - content += choice["delta"]["content"] or '' def test_chat_completion_with_openai_library(): @@ -278,12 +280,14 @@ def test_chat_completion_with_timings_per_token(): assert data["choices"][0]["delta"]["role"] == "assistant" assert "timings" not in data, f'First event should not have timings: {data}' else: - assert "role" not in data["choices"][0]["delta"] - assert "timings" in data - assert "prompt_per_second" in data["timings"] - assert "predicted_per_second" in data["timings"] - assert "predicted_n" in data["timings"] - assert data["timings"]["predicted_n"] <= 10 + if data["choices"]: + assert "role" not in data["choices"][0]["delta"] + else: + assert "timings" in data + assert "prompt_per_second" in data["timings"] + assert "predicted_per_second" in data["timings"] + assert "predicted_n" in data["timings"] + assert data["timings"]["predicted_n"] <= 10 def test_logprobs(): @@ -332,24 +336,25 @@ def test_logprobs_stream(): output_text = '' aggregated_text = '' for i, data in enumerate(res): - choice = data.choices[0] - if i == 0: - # Check first role message for stream=True - assert choice.delta.content is None - assert choice.delta.role == "assistant" - else: - assert choice.delta.role is None - if choice.finish_reason is None: - if choice.delta.content: - output_text += choice.delta.content - assert choice.logprobs is not None - assert choice.logprobs.content is not None - for token in choice.logprobs.content: - aggregated_text += token.token - assert token.logprob <= 0.0 - assert token.bytes is not None - assert token.top_logprobs is not None - assert len(token.top_logprobs) > 0 + if data.choices: + choice = data.choices[0] + if i == 0: + # Check first role message for stream=True + assert choice.delta.content is None + assert choice.delta.role == "assistant" + else: + assert choice.delta.role is None + if choice.finish_reason is None: + if choice.delta.content: + output_text += choice.delta.content + assert choice.logprobs is not None + assert choice.logprobs.content is not None + for token in choice.logprobs.content: + aggregated_text += token.token + assert token.logprob <= 0.0 + assert token.bytes is not None + assert token.top_logprobs is not None + assert len(token.top_logprobs) > 0 assert aggregated_text == output_text diff --git a/tools/server/tests/utils.py b/tools/server/tests/utils.py index 49277e6000..5f42bcae61 100644 --- a/tools/server/tests/utils.py +++ b/tools/server/tests/utils.py @@ -318,46 +318,53 @@ class ServerProcess: arguments_parts = 0 for chunk in self.make_stream_request(method, path, data, headers): - assert len(chunk['choices']) == 1, f'Expected 1 choice, got {len(chunk["choices"])}' - choice = chunk['choices'][0] - if choice['delta'].get('content') is not None: - assert len(choice['delta']['content']) > 0, f'Expected non empty content delta!' - content.append(choice['delta']['content']) - content_parts += 1 - if choice['delta'].get('reasoning_content') is not None: - assert len(choice['delta']['reasoning_content']) > 0, f'Expected non empty reasoning_content delta!' - reasoning_content.append(choice['delta']['reasoning_content']) - reasoning_content_parts += 1 - if choice['delta'].get('finish_reason') is not None: - finish_reason = choice['delta']['finish_reason'] - for tc in choice['delta'].get('tool_calls', []): - if 'function' not in tc: - raise ValueError(f"Expected function type, got {tc['type']}") - if tc['index'] >= len(tool_calls): - assert 'id' in tc - assert tc.get('type') == 'function' - assert 'function' in tc and 'name' in tc['function'] and len(tc['function']['name']) > 0, \ - f"Expected function call with name, got {tc.get('function')}" - tool_calls.append(dict( - id="", - type="function", - function=dict( - name="", - arguments="", - ) - )) - tool_call = tool_calls[tc['index']] - if tc.get('id') is not None: - tool_call['id'] = tc['id'] - fct = tc['function'] - assert 'id' not in fct, f"Function call should not have id: {fct}" - if fct.get('name') is not None: - tool_call['function']['name'] = tool_call['function'].get('name', '') + fct['name'] - if fct.get('arguments') is not None: - tool_call['function']['arguments'] += fct['arguments'] - arguments_parts += 1 - tool_call_parts += 1 - + if chunk['choices']: + assert len(chunk['choices']) == 1, f'Expected 1 choice, got {len(chunk["choices"])}' + choice = chunk['choices'][0] + if choice['delta'].get('content') is not None: + assert len(choice['delta']['content']) > 0, f'Expected non empty content delta!' + content.append(choice['delta']['content']) + content_parts += 1 + if choice['delta'].get('reasoning_content') is not None: + assert len(choice['delta']['reasoning_content']) > 0, f'Expected non empty reasoning_content delta!' + reasoning_content.append(choice['delta']['reasoning_content']) + reasoning_content_parts += 1 + if choice['delta'].get('finish_reason') is not None: + finish_reason = choice['delta']['finish_reason'] + for tc in choice['delta'].get('tool_calls', []): + if 'function' not in tc: + raise ValueError(f"Expected function type, got {tc['type']}") + if tc['index'] >= len(tool_calls): + assert 'id' in tc + assert tc.get('type') == 'function' + assert 'function' in tc and 'name' in tc['function'] and len(tc['function']['name']) > 0, \ + f"Expected function call with name, got {tc.get('function')}" + tool_calls.append(dict( + id="", + type="function", + function=dict( + name="", + arguments="", + ) + )) + tool_call = tool_calls[tc['index']] + if tc.get('id') is not None: + tool_call['id'] = tc['id'] + fct = tc['function'] + assert 'id' not in fct, f"Function call should not have id: {fct}" + if fct.get('name') is not None: + tool_call['function']['name'] = tool_call['function'].get('name', '') + fct['name'] + if fct.get('arguments') is not None: + tool_call['function']['arguments'] += fct['arguments'] + arguments_parts += 1 + tool_call_parts += 1 + else: + # When `include_usage` is True (the default), we expect the last chunk of the stream + # immediately preceding the `data: [DONE]` message to contain a `choices` field with an empty array + # and a `usage` field containing the usage statistics (n.b., llama-server also returns `timings` in + # the last chunk) + assert 'usage' in chunk, f"Expected finish_reason in chunk: {chunk}" + assert 'timings' in chunk, f"Expected finish_reason in chunk: {chunk}" print(f'Streamed response had {content_parts} content parts, {reasoning_content_parts} reasoning_content parts, {tool_call_parts} tool call parts incl. {arguments_parts} arguments parts') result = dict( choices=[ From 5682a3745f2b653dcb855d5766d8edc318fb3336 Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Wed, 20 Aug 2025 16:35:28 -0700 Subject: [PATCH 051/174] sched : copy only the used experts when offloading prompt processing (#15346) --- ggml/src/ggml-backend.cpp | 96 +++++++++++++++++++++++++++++++++++---- 1 file changed, 87 insertions(+), 9 deletions(-) diff --git a/ggml/src/ggml-backend.cpp b/ggml/src/ggml-backend.cpp index 1b9d29e911..c1e58fbb64 100644 --- a/ggml/src/ggml-backend.cpp +++ b/ggml/src/ggml-backend.cpp @@ -19,9 +19,8 @@ #include #include #include -#include -#include #include +#include #ifdef __APPLE__ #include @@ -1352,6 +1351,10 @@ static bool ggml_backend_sched_alloc_splits(ggml_backend_sched_t sched) { static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t sched) { struct ggml_backend_sched_split * splits = sched->splits; + ggml_tensor * prev_ids_tensor = nullptr; + std::vector ids; + std::vector used_ids; + for (int i = 0; i < sched->n_splits; i++) { struct ggml_backend_sched_split * split = &splits[i]; int split_backend_id = split->backend_id; @@ -1378,16 +1381,91 @@ static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t s } else { ggml_backend_synchronize(split_backend); } - // try async copy, but if not possible, we can still use a sync copy without synchronizing the dst backend, since we handle the synchronization here with multiple copies and events - // TODO: add public function to facilitate this, since applications do not have direct access to the backend interface - if (!split_backend->iface.cpy_tensor_async || !split_backend->iface.cpy_tensor_async(input_backend, split_backend, input, input_cpy)) { + + // when offloading MoE weights, we can reduce the amount of data copied by copying only the experts that are used + ggml_tensor * node = split->graph.nodes[0]; + if (split->graph.n_nodes > 0 && + ggml_backend_buffer_get_usage(input->buffer) == GGML_BACKEND_BUFFER_USAGE_WEIGHTS && + ggml_backend_buffer_is_host(input->buffer) && ( + (node->src[0] == input_cpy && node->op == GGML_OP_MUL_MAT_ID) + //|| (node->src[1] == input_cpy && node->op == GGML_OP_ADD_ID) /* GGML_OP_ADD_ID weights are small and not worth splitting */ + )) { + + const int64_t n_expert = node->op == GGML_OP_MUL_MAT_ID ? input->ne[2] : input->ne[1]; + const size_t expert_size = node->op == GGML_OP_MUL_MAT_ID ? input->nb[2] : input->nb[1]; + ggml_backend_synchronize(input_backend); - if (sched->events[split_backend_id][sched->cur_copy] != NULL) { - ggml_backend_event_synchronize(sched->events[split_backend_id][sched->cur_copy]); - } else { + + // get the ids + ggml_tensor * ids_tensor = node->src[2]; + if (ids_tensor != prev_ids_tensor) { + ids.resize(ggml_nbytes(ids_tensor) / sizeof(int32_t)); + ggml_backend_tensor_get_async(split_backend, ids_tensor, ids.data(), 0, ggml_nbytes(ids_tensor)); ggml_backend_synchronize(split_backend); + + // find the used experts + used_ids.clear(); + used_ids.resize(ggml_bitset_size(n_expert)); + for (int64_t i1 = 0; i1 < ids_tensor->ne[1]; i1++) { + for (int64_t i0 = 0; i0 < ids_tensor->ne[0]; i0++) { + int32_t id = ids[i1 * ids_tensor->nb[1]/sizeof(int32_t) + i0 * ids_tensor->nb[0]/sizeof(int32_t)]; + ggml_bitset_set(used_ids.data(), id); + } + } + + prev_ids_tensor = ids_tensor; + } + + // group consecutive experts and copy them together + auto copy_experts = [&](int32_t first_id, int32_t last_id) { + const size_t expert_offset = first_id * expert_size; + const size_t expert_size_copy = (last_id - first_id + 1) * expert_size; + const size_t padding = std::min(expert_size, 512); + const size_t padding_end = last_id < n_expert - 1 ? padding : 0; + + ggml_backend_tensor_set_async(split_backend, + input_cpy, + (const uint8_t *)input->data + expert_offset, expert_offset, + // copy a bit extra at the to ensure there are no NaNs in the padding of the last expert + // this is necessary for MMQ in the CUDA backend + expert_size_copy + padding_end); + }; + + int id = 0; + while (!ggml_bitset_get(used_ids.data(), id)) { + id++; + } + int32_t first_id = id; + int32_t last_id = first_id; + + for (++id; id < n_expert; ++id) { + if (!ggml_bitset_get(used_ids.data(), id)) { + continue; + } + + if (id == last_id + 1) { + last_id = id; + continue; + } + + copy_experts(first_id, last_id); + + first_id = id; + last_id = id; + } + copy_experts(first_id, last_id); + } else { + // try async copy, but if not possible, we can still use a sync copy without synchronizing the dst backend, since we handle the synchronization here with multiple copies and events + // TODO: add public function to facilitate this, since applications do not have direct access to the backend interface + if (!split_backend->iface.cpy_tensor_async || !split_backend->iface.cpy_tensor_async(input_backend, split_backend, input, input_cpy)) { + ggml_backend_synchronize(input_backend); + if (sched->events[split_backend_id][sched->cur_copy] != NULL) { + ggml_backend_event_synchronize(sched->events[split_backend_id][sched->cur_copy]); + } else { + ggml_backend_synchronize(split_backend); + } + ggml_backend_tensor_copy(input, input_cpy); } - ggml_backend_tensor_copy(input, input_cpy); } } } From 8ad038c0fdc719ced9fbf921a02cbae9ad79287f Mon Sep 17 00:00:00 2001 From: R0CKSTAR Date: Thu, 21 Aug 2025 11:06:05 +0800 Subject: [PATCH 052/174] musa: add GGML_UNUSED_VARS (#15446) Signed-off-by: Xiaodong Ye --- ggml/include/ggml.h | 7 ++++ ggml/src/ggml-cuda/conv-transpose-1d.cu | 5 +-- ggml/src/ggml-cuda/convert.cu | 4 +-- ggml/src/ggml-cuda/cpy.cu | 3 +- ggml/src/ggml-cuda/fattn-mma-f16.cuh | 45 ++++++++++--------------- ggml/src/ggml-cuda/fattn-tile-f16.cu | 20 +++++------ ggml/src/ggml-cuda/fattn-tile-f32.cu | 29 ++++++++++------ ggml/src/ggml-cuda/fattn-vec-f16.cuh | 20 +++++------ ggml/src/ggml-cuda/fattn-vec-f32.cuh | 29 ++++++++++------ ggml/src/ggml-cuda/fattn-wmma-f16.cu | 19 +++++------ ggml/src/ggml-cuda/ggml-cuda.cu | 4 +-- ggml/src/ggml-cuda/mma.cuh | 44 ++++++------------------ ggml/src/ggml-cuda/mmf.cu | 8 ++--- ggml/src/ggml-cuda/mmq.cu | 5 +-- ggml/src/ggml-cuda/mmq.cuh | 6 ++-- ggml/src/ggml-cuda/mmvf.cu | 7 +--- ggml/src/ggml-cuda/mmvq.cu | 6 +--- 17 files changed, 113 insertions(+), 148 deletions(-) diff --git a/ggml/include/ggml.h b/ggml/include/ggml.h index da8813fd27..b8b82e11c8 100644 --- a/ggml/include/ggml.h +++ b/ggml/include/ggml.h @@ -244,6 +244,13 @@ #define GGML_MROPE_SECTIONS 4 #define GGML_UNUSED(x) (void)(x) +#ifdef __CUDACC__ +template +__host__ __device__ constexpr inline void ggml_unused_vars_impl(Args&&...) noexcept {} +#define GGML_UNUSED_VARS(...) ggml_unused_vars_impl(__VA_ARGS__) +#else +#define GGML_UNUSED_VARS(...) do { (void)sizeof((__VA_ARGS__, 0)); } while(0) +#endif // __CUDACC__ #define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) diff --git a/ggml/src/ggml-cuda/conv-transpose-1d.cu b/ggml/src/ggml-cuda/conv-transpose-1d.cu index fe4caf674d..8418ba6673 100644 --- a/ggml/src/ggml-cuda/conv-transpose-1d.cu +++ b/ggml/src/ggml-cuda/conv-transpose-1d.cu @@ -34,10 +34,7 @@ static __global__ void conv_transpose_1d_kernel( } } dst[global_index] = accumulator; - GGML_UNUSED(p0); GGML_UNUSED(d0); GGML_UNUSED(src0_ne3); - GGML_UNUSED(src1_ne3); GGML_UNUSED(dst_ne3); - GGML_UNUSED(src1_ne1); GGML_UNUSED(dst_ne1); - GGML_UNUSED(src1_ne2); GGML_UNUSED(dst_ne2); + GGML_UNUSED_VARS(p0, d0, src0_ne3, src1_ne3, dst_ne3, src1_ne1, dst_ne1, src1_ne2, dst_ne2); } static void conv_transpose_1d_f32_f32_cuda( diff --git a/ggml/src/ggml-cuda/convert.cu b/ggml/src/ggml-cuda/convert.cu index 7a8b6fdf5f..ba3d4eeb88 100644 --- a/ggml/src/ggml-cuda/convert.cu +++ b/ggml/src/ggml-cuda/convert.cu @@ -71,9 +71,7 @@ static __global__ void dequantize_block_q8_0_f16(const void * __restrict__ vx, h y2[iy/2 + threadIdx.x] = __hmul2(make_half2(qs.x, qs.y), __half2half2(d)); } #else - GGML_UNUSED(vx); - GGML_UNUSED(y); - GGML_UNUSED(k); + GGML_UNUSED_VARS(vx, y, k); NO_DEVICE_CODE; #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_PASCAL } diff --git a/ggml/src/ggml-cuda/cpy.cu b/ggml/src/ggml-cuda/cpy.cu index 0380784ab4..c40db08ced 100644 --- a/ggml/src/ggml-cuda/cpy.cu +++ b/ggml/src/ggml-cuda/cpy.cu @@ -134,8 +134,7 @@ void ggml_cuda_cpy_dest_ptrs_copy(ggml_cuda_graph * cuda_graph, char ** host_des CUDA_CHECK(cudaMemcpyAsync(cuda_graph->dest_ptrs_d, host_dest_ptrs, host_dest_ptrs_size*sizeof(char *), cudaMemcpyHostToDevice, stream)); cuda_graph->graph_cpynode_index = 0; // reset index #else - GGML_UNUSED(cuda_graph); GGML_UNUSED(host_dest_ptrs); - GGML_UNUSED(host_dest_ptrs_size); GGML_UNUSED(stream); + GGML_UNUSED_VARS(cuda_graph, host_dest_ptrs, host_dest_ptrs_size, stream); #endif } diff --git a/ggml/src/ggml-cuda/fattn-mma-f16.cuh b/ggml/src/ggml-cuda/fattn-mma-f16.cuh index 1d7e0b037e..57defb0c62 100644 --- a/ggml/src/ggml-cuda/fattn-mma-f16.cuh +++ b/ggml/src/ggml-cuda/fattn-mma-f16.cuh @@ -767,14 +767,11 @@ static __device__ __forceinline__ void flash_attn_ext_f16_iter( } } #else - GGML_UNUSED(Q_f2); GGML_UNUSED(K_h2); GGML_UNUSED(V_h2); - GGML_UNUSED(mask_h2); GGML_UNUSED(dstk); GGML_UNUSED(dstk_fixup); - GGML_UNUSED(scale); GGML_UNUSED(slope); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(stride_K); GGML_UNUSED(stride_V); - GGML_UNUSED(stride_mask); GGML_UNUSED(tile_K); - GGML_UNUSED(tile_V); GGML_UNUSED(tile_mask); GGML_UNUSED(Q_B); - GGML_UNUSED(VKQ_C); GGML_UNUSED(KQ_max); GGML_UNUSED(KQ_rowsum); - GGML_UNUSED(kb0); GGML_UNUSED(tile_Q); + GGML_UNUSED_VARS(Q_f2, K_h2, V_h2, mask_h2, dstk, dstk_fixup, + scale, slope, logit_softcap, ne01, ne02, + stride_K, stride_V, stride_mask, + tile_Q, tile_K, tile_V, tile_mask, + Q_B, VKQ_C, KQ_max, KQ_rowsum, kb0); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -1236,14 +1233,10 @@ static __device__ __forceinline__ void flash_attn_ext_f16_process_tile( } } #else - GGML_UNUSED(Q_f2); GGML_UNUSED(K_h2); GGML_UNUSED(V_h2); - GGML_UNUSED(mask_h2); GGML_UNUSED(sinks_f); - GGML_UNUSED(dstk); GGML_UNUSED(dstk_fixup); - GGML_UNUSED(scale); GGML_UNUSED(slope); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne01); GGML_UNUSED(ne02); - GGML_UNUSED(stride_Q1); GGML_UNUSED(stride_Q2); - GGML_UNUSED(stride_K); GGML_UNUSED(stride_V); GGML_UNUSED(stride_mask); - GGML_UNUSED(jt); GGML_UNUSED(kb0_start); GGML_UNUSED(kb0_stop); + GGML_UNUSED_VARS(Q_f2, K_h2, V_h2, mask_h2, sinks_f, dstk, dstk_fixup, + scale, slope, logit_softcap, ne01, ne02, + stride_Q1, stride_Q2, stride_K, stride_V, stride_mask, + jt, kb0_start, kb0_stop); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -1397,17 +1390,15 @@ static __global__ void flash_attn_ext_f16( (Q_f2, K_h2, V_h2, mask_h2, sinks_f, dstk, dst_meta, scale, slope, logit_softcap, ne01, ne02, stride_Q1, stride_Q2, stride_K, stride_V, stride_mask, jt, kb0_start_kernel, kb0_stop_kernel); #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; #endif // defined(FLASH_ATTN_AVAILABLE) && defined(TURING_MMA_AVAILABLE) } diff --git a/ggml/src/ggml-cuda/fattn-tile-f16.cu b/ggml/src/ggml-cuda/fattn-tile-f16.cu index 4111bcc04f..6239d184d0 100644 --- a/ggml/src/ggml-cuda/fattn-tile-f16.cu +++ b/ggml/src/ggml-cuda/fattn-tile-f16.cu @@ -299,17 +299,15 @@ static __global__ void flash_attn_tile_ext_f16( } } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; #endif // defined(FLASH_ATTN_AVAILABLE) && defined(FP16_AVAILABLE) } diff --git a/ggml/src/ggml-cuda/fattn-tile-f32.cu b/ggml/src/ggml-cuda/fattn-tile-f32.cu index 1c1dc725d2..b96a9ef971 100644 --- a/ggml/src/ggml-cuda/fattn-tile-f32.cu +++ b/ggml/src/ggml-cuda/fattn-tile-f32.cu @@ -38,6 +38,15 @@ static __global__ void flash_attn_tile_ext_f32( return; #endif // FP16_MMA_AVAILABLE if (use_logit_softcap && !(D == 128 || D == 256)) { + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; return; } @@ -301,17 +310,15 @@ static __global__ void flash_attn_tile_ext_f32( } } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; #endif // FLASH_ATTN_AVAILABLE } diff --git a/ggml/src/ggml-cuda/fattn-vec-f16.cuh b/ggml/src/ggml-cuda/fattn-vec-f16.cuh index 2131b5feef..27a2dd6ae4 100644 --- a/ggml/src/ggml-cuda/fattn-vec-f16.cuh +++ b/ggml/src/ggml-cuda/fattn-vec-f16.cuh @@ -349,17 +349,15 @@ static __global__ void flash_attn_vec_ext_f16( dst_meta[((sequence*ne01 + ic0 + tid)*ne02 + head)*gridDim.y + blockIdx.y] = make_float2(kqmax[tid], kqsum[tid]); } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; #endif // defined(FLASH_ATTN_AVAILABLE) && defined(FP16_AVAILABLE) } diff --git a/ggml/src/ggml-cuda/fattn-vec-f32.cuh b/ggml/src/ggml-cuda/fattn-vec-f32.cuh index a06fba6cde..da195d0334 100644 --- a/ggml/src/ggml-cuda/fattn-vec-f32.cuh +++ b/ggml/src/ggml-cuda/fattn-vec-f32.cuh @@ -37,6 +37,15 @@ static __global__ void flash_attn_vec_ext_f32( // Skip unused kernel variants for faster compilation: if (use_logit_softcap && !(D == 128 || D == 256)) { + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; return; } @@ -334,17 +343,15 @@ static __global__ void flash_attn_vec_ext_f32( dst_meta[((sequence*ne01 + ic0 + tid)*ne02 + head)*gridDim.y + blockIdx.y] = make_float2(kqmax[tid], kqsum[tid]); } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); - GGML_UNUSED(nb31); GGML_UNUSED(nb32); GGML_UNUSED(nb33); - GGML_UNUSED(nb01); GGML_UNUSED(nb02); GGML_UNUSED(nb03); - GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; #endif // FLASH_ATTN_AVAILABLE } diff --git a/ggml/src/ggml-cuda/fattn-wmma-f16.cu b/ggml/src/ggml-cuda/fattn-wmma-f16.cu index 2e2de8a093..2219191fd9 100644 --- a/ggml/src/ggml-cuda/fattn-wmma-f16.cu +++ b/ggml/src/ggml-cuda/fattn-wmma-f16.cu @@ -471,16 +471,15 @@ static __global__ void flash_attn_ext_f16( dst_meta[j_dst_unrolled] = dst_meta_val; } #else - GGML_UNUSED(Q); GGML_UNUSED(K); GGML_UNUSED(V); GGML_UNUSED(mask); - GGML_UNUSED(sinks); GGML_UNUSED(KV_max); GGML_UNUSED(dst); GGML_UNUSED(dst_meta); - GGML_UNUSED(scale); GGML_UNUSED(max_bias); GGML_UNUSED(m0); GGML_UNUSED(m1); - GGML_UNUSED(n_head_log2); GGML_UNUSED(logit_softcap); - GGML_UNUSED(ne00); GGML_UNUSED(ne01); GGML_UNUSED(ne02); GGML_UNUSED(ne03); - GGML_UNUSED(ne10); GGML_UNUSED(ne11); GGML_UNUSED(ne12); GGML_UNUSED(ne13); - GGML_UNUSED(ne31); GGML_UNUSED(ne32); GGML_UNUSED(ne33); GGML_UNUSED(nb31); - GGML_UNUSED(nb32); GGML_UNUSED(nb33); GGML_UNUSED(nb01); GGML_UNUSED(nb02); - GGML_UNUSED(nb03); GGML_UNUSED(nb11); GGML_UNUSED(nb12); GGML_UNUSED(nb13); - GGML_UNUSED(nb21); GGML_UNUSED(nb22); GGML_UNUSED(nb23); + GGML_UNUSED_VARS(Q, K, V, mask, sinks, KV_max, dst, dst_meta, scale, + max_bias, m0, m1, n_head_log2, logit_softcap, + ne00, ne01, ne02, ne03, + nb01, nb02, nb03, + ne10, ne11, ne12, ne13, + nb11, nb12, nb13, + nb21, nb22, nb23, + ne31, ne32, ne33, + nb31, nb32, nb33); NO_DEVICE_CODE; #endif // defined(FLASH_ATTN_AVAILABLE) && (__CUDA_ARCH__ == GGML_CUDA_CC_VOLTA || (defined(GGML_HIP_ROCWMMA_FATTN) && defined(FP16_MMA_AVAILABLE))) } diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 1440f2f2e9..4e17fd211e 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -1328,9 +1328,7 @@ static void ggml_cuda_op_mul_mat_cublas( &beta, dst_dd_i, ldc)); } - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddq_i); - GGML_UNUSED(src1_padded_row_size); + GGML_UNUSED_VARS(dst, src1_ddq_i, src1_padded_row_size); } static void ggml_cuda_set_peer_access(const int n_tokens, int main_device) { diff --git a/ggml/src/ggml-cuda/mma.cuh b/ggml/src/ggml-cuda/mma.cuh index 83ee16b27d..667deb9c65 100644 --- a/ggml/src/ggml-cuda/mma.cuh +++ b/ggml/src/ggml-cuda/mma.cuh @@ -291,9 +291,7 @@ namespace ggml_cuda_mma { : "=r"(xi[0]), "=r"(xi[2]), "=r"(xi[1]), "=r"(xi[3]) : "l"(xs)); #else - GGML_UNUSED(t); - GGML_UNUSED(xs0); - GGML_UNUSED(stride); + GGML_UNUSED_VARS(t, xs0, stride); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -315,9 +313,7 @@ namespace ggml_cuda_mma { : "r"(A.x[1]), "r"(B.x[0])); #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_AMPERE #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -345,9 +341,7 @@ namespace ggml_cuda_mma { : "r"(A.x[3]), "r"(B.x[1])); #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_AMPERE #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -372,9 +366,7 @@ namespace ggml_cuda_mma { : "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[1])); #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_AMPERE #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -408,9 +400,7 @@ namespace ggml_cuda_mma { : "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[3])); #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_AMPERE #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -425,9 +415,7 @@ namespace ggml_cuda_mma { : "+r"(Dxi[0]), "+r"(Dxi[1]), "+r"(Dxi[2]), "+r"(Dxi[3]) : "r"(Axi[0]), "r"(Axi[1]), "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[0]), "r"(Bxi[1])); #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // AMPERE_MMA_AVAILABLE } @@ -452,9 +440,7 @@ namespace ggml_cuda_mma { : "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[1])); #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_AMPERE #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -469,9 +455,7 @@ namespace ggml_cuda_mma { : "+r"(Dxi[0]), "+r"(Dxi[1]), "+r"(Dxi[2]), "+r"(Dxi[3]) : "r"(Axi[0]), "r"(Axi[1]), "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[0]), "r"(Bxi[1])); #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // AMPERE_MMA_AVAILABLE } @@ -505,9 +489,7 @@ namespace ggml_cuda_mma { : "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[3])); #endif // __CUDA_ARCH__ >= GGML_CUDA_CC_AMPERE #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // TURING_MMA_AVAILABLE } @@ -533,9 +515,7 @@ namespace ggml_cuda_mma { 0, 0, 0); #endif // defined(CDNA3) #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // AMD_MFMA_AVAILABLE } @@ -561,9 +541,7 @@ namespace ggml_cuda_mma { 0, 0, 0); #endif // defined(CDNA3) #else - GGML_UNUSED(D); - GGML_UNUSED(A); - GGML_UNUSED(B); + GGML_UNUSED_VARS(D, A, B); NO_DEVICE_CODE; #endif // AMD_MFMA_AVAILABLE } diff --git a/ggml/src/ggml-cuda/mmf.cu b/ggml/src/ggml-cuda/mmf.cu index 5c66fe5bb1..cfa5c5cce2 100644 --- a/ggml/src/ggml-cuda/mmf.cu +++ b/ggml/src/ggml-cuda/mmf.cu @@ -132,11 +132,11 @@ static __global__ void mul_mat_f( dst[j*stride_col_dst + row0 + threadIdx.x] = sum; } #else + GGML_UNUSED_VARS(x, y, ids, dst, + ncols, nchannels_y, stride_row, stride_col_y, stride_col_dst, + channel_ratio, stride_channel_x, stride_channel_y, stride_channel_dst, + sample_ratio, stride_sample_x, stride_sample_y, stride_sample_dst); NO_DEVICE_CODE; - GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(ids); GGML_UNUSED(dst); - GGML_UNUSED(ncols); GGML_UNUSED(nchannels_y); GGML_UNUSED(stride_row); GGML_UNUSED(stride_col_y); GGML_UNUSED(stride_col_dst); - GGML_UNUSED(channel_ratio); GGML_UNUSED(stride_channel_x); GGML_UNUSED(stride_channel_y); GGML_UNUSED(stride_channel_dst); - GGML_UNUSED(sample_ratio); GGML_UNUSED(stride_sample_x); GGML_UNUSED(stride_sample_y); GGML_UNUSED(stride_sample_dst); #endif // !defined(GGML_USE_HIP) && !defined(GGML_USE_MUSA) } diff --git a/ggml/src/ggml-cuda/mmq.cu b/ggml/src/ggml-cuda/mmq.cu index 384ee7615f..576032a0ce 100644 --- a/ggml/src/ggml-cuda/mmq.cu +++ b/ggml/src/ggml-cuda/mmq.cu @@ -266,10 +266,7 @@ void ggml_cuda_op_mul_mat_q( ggml_cuda_mul_mat_q_switch_type(ctx, args, stream); - GGML_UNUSED(src1); - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddf_i); - GGML_UNUSED(src1_padded_row_size); + GGML_UNUSED_VARS(src1, dst, src1_ddf_i, src1_padded_row_size); } bool ggml_cuda_should_use_mmq(enum ggml_type type, int cc, int64_t ne11) { diff --git a/ggml/src/ggml-cuda/mmq.cuh b/ggml/src/ggml-cuda/mmq.cuh index c22907d404..650f708067 100644 --- a/ggml/src/ggml-cuda/mmq.cuh +++ b/ggml/src/ggml-cuda/mmq.cuh @@ -1255,7 +1255,7 @@ static __device__ __forceinline__ void vec_dot_q8_0_16_q8_1_mma( } } #else - GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k00); + GGML_UNUSED_VARS(x, y, sum, k00); NO_DEVICE_CODE; #endif // AMD_MFMA_AVAILABLE } @@ -1572,7 +1572,7 @@ static __device__ __forceinline__ void vec_dot_q2_K_q8_1_mma( } } #else - GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k00); + GGML_UNUSED_VARS(x, y, sum, k00); NO_DEVICE_CODE; #endif // AMD_MFMA_AVAILABLE } @@ -2301,7 +2301,7 @@ static __device__ __forceinline__ void vec_dot_q6_K_q8_1_mma( } } #else - GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k00); + GGML_UNUSED_VARS(x, y, sum, k00); NO_DEVICE_CODE; #endif // AMD_MFMA_AVAILABLE } diff --git a/ggml/src/ggml-cuda/mmvf.cu b/ggml/src/ggml-cuda/mmvf.cu index 16100b6804..5b21ef05b3 100644 --- a/ggml/src/ggml-cuda/mmvf.cu +++ b/ggml/src/ggml-cuda/mmvf.cu @@ -433,12 +433,7 @@ void ggml_cuda_op_mul_mat_vec_f( GGML_ABORT("unsupported type: %s", ggml_type_name(src0->type)); } - GGML_UNUSED(ctx); - GGML_UNUSED(src1); - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddq_i); - GGML_UNUSED(src1_ncols); - GGML_UNUSED(src1_padded_row_size); + GGML_UNUSED_VARS(ctx, src1, dst, src1_ddq_i, src1_ncols, src1_padded_row_size); } bool ggml_cuda_should_use_mmvf(enum ggml_type type, int cc, const int64_t * src0_ne, int64_t ne11) { diff --git a/ggml/src/ggml-cuda/mmvq.cu b/ggml/src/ggml-cuda/mmvq.cu index 5c8e5c4a7e..b7c3079308 100644 --- a/ggml/src/ggml-cuda/mmvq.cu +++ b/ggml/src/ggml-cuda/mmvq.cu @@ -596,9 +596,5 @@ void ggml_cuda_op_mul_mat_vec_q( src0_dd_i, src0->type, src1_ddq_i, nullptr, dst_dd_i, ne00, row_diff, src1_ncols, stride_row_x, stride_col_y, nrows_dst, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, stream); - GGML_UNUSED(src1); - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddf_i); - GGML_UNUSED(src1_ncols); - GGML_UNUSED(src1_padded_row_size); + GGML_UNUSED_VARS(src1, dst, src1_ddf_i, src1_ncols, src1_padded_row_size); } From 29f538ac630d6544406a0702476e36808a6bd1b3 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 21 Aug 2025 06:12:28 +0200 Subject: [PATCH 053/174] examples : remove references to `make` in examples [no ci] (#15457) This commit removes references to `make` in the examples, as the build system has been updated to use CMake directly and using `make` will now generate an error since Commit 37f10f955f70e0158d50343d0b9a3f92d194daae ("make : remove make in favor of CMake (#15449)"). --- examples/batched.swift/README.md | 5 +++-- examples/passkey/README.md | 2 +- examples/retrieval/README.md | 2 +- examples/sycl/win-build-sycl.bat | 2 -- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/examples/batched.swift/README.md b/examples/batched.swift/README.md index 7f2e2fcdcf..f08901506f 100644 --- a/examples/batched.swift/README.md +++ b/examples/batched.swift/README.md @@ -1,4 +1,5 @@ This is a swift clone of `examples/batched`. -$ `make` -$ `./llama-batched-swift MODEL_PATH [PROMPT] [PARALLEL]` +```bash +$ ./llama-batched-swift MODEL_PATH [PROMPT] [PARALLEL] +``` diff --git a/examples/passkey/README.md b/examples/passkey/README.md index 2f19597c48..cbaf28fd82 100644 --- a/examples/passkey/README.md +++ b/examples/passkey/README.md @@ -11,5 +11,5 @@ See the following PRs for more info: ### Usage ```bash -make -j && ./llama-passkey -m ./models/llama-7b-v2/ggml-model-f16.gguf --junk 250 +llama-passkey -m ./models/llama-7b-v2/ggml-model-f16.gguf --junk 250 ``` diff --git a/examples/retrieval/README.md b/examples/retrieval/README.md index 6938a1e96e..51038cc36b 100644 --- a/examples/retrieval/README.md +++ b/examples/retrieval/README.md @@ -15,7 +15,7 @@ https://github.com/ggml-org/llama.cpp/pull/6193 `retrieval` example can be tested as follows: ```bash -make -j && ./llama-retrieval --model ./models/bge-base-en-v1.5-f16.gguf --top-k 3 --context-file README.md --context-file License --chunk-size 100 --chunk-separator . +llama-retrieval --model ./models/bge-base-en-v1.5-f16.gguf --top-k 3 --context-file README.md --context-file License --chunk-size 100 --chunk-separator . ``` This chunks and embeds all given files and starts a loop requesting query inputs: diff --git a/examples/sycl/win-build-sycl.bat b/examples/sycl/win-build-sycl.bat index 6fc897b148..862998e737 100644 --- a/examples/sycl/win-build-sycl.bat +++ b/examples/sycl/win-build-sycl.bat @@ -18,8 +18,6 @@ if %errorlevel% neq 0 goto ERROR :: for FP32 cmake -G "Ninja" .. -DLLAMA_CURL=OFF -DGGML_SYCL=ON -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release if %errorlevel% neq 0 goto ERROR -:: build example/main only -:: make main :: build all binary cmake --build . -j From 1b0db8f6e08951969e2447c2d18bf638effb8f75 Mon Sep 17 00:00:00 2001 From: stduhpf Date: Thu, 21 Aug 2025 07:19:22 +0200 Subject: [PATCH 054/174] server : fix webui (#15462) * Fix webui crash after streaming * build webui --- tools/server/public/index.html.gz | Bin 1914098 -> 1914087 bytes tools/server/webui/src/utils/app.context.tsx | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz index fad36ed3390de112b91127387d323325180e2ea9..0e3e1f9834a7f22c5c3bc4445914f20cc1c6579d 100644 GIT binary patch delta 1830415 zcmV(zK<2;l>2&AmbblX<2mk;800062+~CP1!Xo3#-=g0 z8*Iy%#jtfKKt@ujOC@6r?Dv?fxtr&kN0|SQ$jr(r3EaKcx|rGDXQRsVDKauLPPz7= zR{LA2^x?ceDdAtcH0h7d22ts>k3XGhf6yz%r=|29F-bg1qkmCv3E6j2$vjQtVLR=2 z+k?SX=`0#WNjr^trOuTU(9+{1?naXdOKruaQJj{dUOz@1^V%*)E`Ow{>zQ6y_ZXWtJPloZS6rX z?xt7csC1qV2Y(3bPpPza9<_V?z~?YZ+iWA5L}^(5_+h*DtXz8NCCXQ+G-?l{u>7qb zU5?`R#8=;l>ZJAcO z@gPo+>pU7p<*bcC|Li<1_1eir*2A=)4x$(T=YRe0|9@E;4BEr?Qg=Kq)i|JZ?V%=W z#z{Bnk1^Mnj<7t8d(#1{PU6WVPWos4(Ti{Gr1bG1eAoGk8C~i{r~Og%K8eRsl3uMc z@$yqR2wz;M=Sh57`ha>~CP|!B2Gv_het8g920{+w>u59`0v2VlI&3~j>%`c@&G)_o-5SAxb!%jRX zucwRUa+6ttvpugLOXuwgdU$hl`KeOgY>xc~()}tjtH>zu6A+5VI7HKEF!H<3c|?WrOwUK_Bhzyf_UpmF zcXQ^T-Q_Ozx|^QIG6Ono=_J?uHL5F}RQlEHGl}ja-)(^TL1gthiPC8@DxFKxsCs)_ zU4N~dPDiq5kqlUv04PIjRDj4RUFu>1(&*&?kUvT*0Qu2Hxw@1@gE#$2y4pXjqzele z!F0@BIPt$L2CB!%9JkTmsX`ov$ZsXwMsa&-_50PbrhHd~1Od=Bi#0hFs* z#x^rfxVlmAZQP3{)%H@_K6^_HfHH4(-tLwc7TO#;!}%U9EQ~7c>TPu?)?QTXsDf+P z828g;+DVg$TMH9!=e-nhwM=)z>)TbcNd2WgFwGgj=xSjB-FKnTOQ{BZbP1R^iGPy! z@u1(;y!j{;$Vaf0Ae(oBY&f9lB&uPxd+0Qfq~S8tc?wipCaJ_#Hl|uiDAsOs$?qY4;r2&M~H7 zLKv>-PWW~Z8dP*Ph&$~8PtLXSw12#w1)CZ(jeVlQGu=$I1*zd4S(k(4cb4hko3hS z;gADq87J8~j4OjQ+Yc#F#ArGg+}xOrG$5T2%dRM|Go^|A;TP4_F&}(*x{n<<#iaC_-g%~-c+j{Fq7lxQX|x>!gg%aYfMP$N zOW%*i13>=)&XoBXKz{?wCf)|GETPt(O!{Y|;4?R)n~@(FVX&75ud5)}`V%hhcoHH` zLS`*PWRNgcZ4!Rg@2PY(318pbT;2ZgutdPC-|UbT{4xzlYZs(G_VO zbe=yaCvsrwmtb&GKiQ1*LHyb&5j-6QUm`;DFR1`t0Q!r+BsTXfFcKf>d9jyrmL7!R zx47Rc)j|9qzeZM3>k>NSC!*4Fc~Rq;Uj3*CFxnqP)qjPB2fr6ah-MI7`4SxsqGMFd zAEh>~qOhHu36(cl8bqVB^t`srULqk38`UqkpOE&$oRtYbUX z8Aq9F@IDIbtM4OZz~9Bi>UMhc9&Nft5L#S5UiItUPH$1?07Upe?ueus*z<`uL+DN+ zF+gi(K!4uUn3ya1sTv~m`j=l6F*Nm>*Th&YGST&+Z-)Z#-$cJqNVg2$NIq{Dj|IBbGj<`(VN2bg60dp|O zYH6{n3W<9_s^zfUEQj@SfFFD;mo0T({-wMqU4NAGqVn)4Y#u*63mi@XG@GsfW?moP z>N$0uh7bSoaPi?;2LB%lbMt4qE z{?Y+rGq}c9xixqV0M$lTL$7>uqcNZa2T^-e<~Bg5WdF$qz(#w}Ai%pbzRIY&!usU0 zPk%D~7YwZ12BATUXmnO?N&pN9T)E4DALj3Xvbb241T)~KDeWzjR#O^C1*KGr-V*$W zk)!tr>O>!3BE|w=hhXer4CVFmQh5QxWN(Go11SA^vGM>L7^`)2 zGsNv+DBtL!My`Wv!Ufe3FWU2Zg7pTg1B*SLPR`jvHIQ|{@atG#f6N%_A^;b|Wf_Zh zfD-DfSJ4{As)!2#Ae?I~IH<3y=vdYl$O)w}Y1r(*7^}l*F~l4oBy+IMnXcYi#D9j| zLiky74PlRvP<)gEVVMgLGD9fwWph+%M^paG%hQ-wkvVC&HYL zI1H;$YXHfRE!fItTd-k6#OT=uq62&%GKbI{P+^;#RyiKQwIi3bB3G6s_*6J0SoM)1 zQMCLq=GjC5X3tAlw@K-`yl75N27lS;($}~@s+5Bg*YLKCt%~33QfcS3bQMnlx$O}c zFEJ<~xi*0Z8V|?{;qJw3T8tl*a8D}FeU_!`vTKT+3mp)MknT>gA^ z?7b{I)>n^auRtT4d7ICk%b;utr&)rMcsPObSxEBGz>;y$#Y>NU?kc^UHasHA;e=eRO;q#G^r>Fn`wnflwv+%acxu zorfisD}j@P&5oHA6wr}QAz(=u>VOA(A@OC_4h1{Q|jGF(!;I?5?M- zJa~EXZvW))-N%#G&VQRXC%?Wt+1}ZIxfO1uEQpSWyZq=5(3s&P7w)7*^fYI({L<#m z`2ma~3jw9!6zstcrz|&D0YEVo{5r>(mu!7ZX^=O#q2FsraMxE6(EicOIVhz;A;)?mTGp8r|2s z4g%6=R%q`$+o|4p(B`~5k6-UqWU$G-w+PT$yhY%2GB*f!LBR+rgQYmng-piRkSs|J90W3$_>FI!RLz}qELH9ua1Cj0492h8w_bO!Mj!|+%p zk3n{;SO0!=n$_d(cDVyfavOGJE_*i3*|=gX8L1zRN`DIWCzzdn&yM4SapXVVU(GN$ z8Mm(}muX&`!?#&$1m<9sDLbJoxOrfjA-8jePgbmT>h8Z?U{27C*cfi(C?6A(BlV%p zB>mt{>A7=#h&gpRR&yb;4%6i7dH|B>7I!g<@UQbZY)exLD8U>%ad;Nw;U)@n+TDvg zh6Jj@Vt*w+x5=c{BKn?vQK&$3GJ`F=6?LX(0@yx$WT_&G>J>8F*+4G8-^|O?QyiLq zZkU?4Fvy+WEc_PA?ewq+Hv14L6vD=D(QC*=aC*$1WAp1Mlyli##W-jaR`gd!R47y! z+M70xz4Wit=a(o{ws-diDOAFog~Iz0=t7{TKYuw{Ci~1B-GM!3N|TUqg=SdbcN9|w zvS09O)P4CK{8sF~10c*lz1A}YX9hA4G2BsEmel|uUlh?8^q%oBrs zJ%0eRuL)~*({q>ZbC(`uyOh9K^&+H(_aVy#-vktmR>YehAv6%a z>6PXJlF-}WqM#e_fodheX(4tC;d?X&sP9GFFsE#|UX6el~I z{R9_D3ZiL_CmsXBP-qw1mt&T+aDUf~&kU@tLo(F{uhDZ3bajxfy|%-T!sWl?5L|3j zL4@PZ%fUv+a>0%k8@weW<`*+3FZ$$??^eM9UfY9MixJ@23$NbH5`tO)1TVS(rexD5 zp{UlbNf6z6Tw%XHG;mjKg-JKFw3TM_*`EOe=xnAt0Nn4jEiYiNPn^N}`hPB#WvSm| zj((4VYhg;a3 zP$Ow;($DKK8Ef&a;G`be$5Z|pV&i<#6Js2%;M91~fMNvxeCD4YR@emD{0GnyAU1Of z9a*&AhTquyU5KBOc_sV=Eq~(_z);!Fa0qo~jLm3mWf78h)#MztzxB_kX~JyKY%(?f`TCHY? z{EM4n(S4n#m{h&aGJn~<@C8R`A1aUO)tl&Br07;8ATv#`5!Z5x^Sh9Ar#42WgSQ2| zw)WEI7c4x7M|IR5NPLc11#}Fr>ez{U?C^!J_}a>BExwi|8ITj`EeTj~*^+Q3QLJIn z<7>yKaQlB(_P?TtuUw(uHAR*vXs6-h-~?Y8kaMc7!d9g?{D0cXS{q|=na`OS1Nq$! zMEVZtNU`AR2|(SRZx|<`0bjpY0E`4I+wZM(9U?{?C0<_*nw0L#I6kP#v#!KJZq+|{ zx9sZm0VK9i4zgR%t{v34+h@@xbj(MQ=$LA^zd))^P3By3@EPEyN{Gv==A!{&!BBIB z5DDko{LDO))PK|>OguY)e8wLXC)a)5CG1M>;NLM-!B>z#7;qi61N5^Q2N0NzhZX$c zD~%t5T~L^H+*S#CUi1$59`DU2z|#9E7A?DE$ndh{H}R!Qc;qL%<)JrlX)Au3iaUTr z73RE@k6@boI*7X$NOWZ(=*x0+d6EuhnP{9L9O1dW4S(jVR}hS_{%9J#{2q0u#ryp$ zsBK|pGbD&9^2&-<87>jSXg|lXV59XHhw05tWBKvgVY*J5ANm+e;E3^tnJ;G*@k#&$ zunizXf}S|!BI#umjY@T)$x%-LdOGQ10$^D|LkOA%O-kpW_Uj6bK4 zpfbN4H3;$(XOu|BMs=j2sw2z#v(hw3Va4d5Sfy)3jb*p<@E8Lh3(j!Vw#SnNlEXF1 z>%zEAPUF1g&t*#@s25Js_ie1s-I=DN7W4@mjDLC~lU-;A$8pXbo%}q~pU2Jo5P>IG zydeTXdPCg0cZl{@IB$QTU!bh*SviA=O^*#S-1VtllE|XZRM`!8aep5``Eb|La?EKI zhCslt?Lzf;aTkpEYLk~FVsSeI=3K?8lBpD7Mi909*jF>cgdna_f4cJYQRCUNg#a^U zOn-_V6`%rg! ztv%X$?FkH@dYAcMz03S5FY~8zna{W?yzN)Lh@bI3d-3qU9{XdSouGBrKn&DL7;gAIhA4oh-%4*+W=BO&-cARqI6@XR<_l&-MODG=I8j zK)KirI%ue~R+K5Pb|4B)7Q^xaQYJ^o$Qq4U$H)C0r?*hagv1@k$}8_dvIj%Eo>c^3 z2TK19O)ZvJOW*o97NG=?ES7l$s_iVc611j-XrgX9^{W^Uqox{`TPuShX(<|g>%-1g z^bJ^83QGOdTZiIU55}{Yo%Wz~9)AtSNG?I@Il?gu)pdc?k&t=NR|l8ZHxHOpx8-G`xO171!Tk>}sfyOpdmQe!&_(95YU9v4Vo-t*!E`jZr2&~lW4FtBH zvds2#N!i}oWMFGs0^8eL$N#T(>>stIdhI!z{`D!FkzDnaC(_Ic+gz?csvrOTmxtiF zfNUVI-nYNO?lhaZr@ZwqL4UWp{-EA8!Jz~j&FK>GQi|;BUkFdgP#Nk+@Sx!V-W35a z=maf66&-gm>{ydZ%T0tnaQ>7BxQbq{yC|vtuQ3yDno| z%!9I_zRC?XDH<;&x-I3X4uN6!JDV5nG&5XL#(XW#uH0+m_f5ils9CGH3gl# zZNIG~VEHrpNiiC?gBOXRO)#2F0n~OgI1F}zO=ELXn8lDSF5lenXGMP=smVz@g;E$a zs3I|fZOw^<8go&3AFHfayIv5hO4?9l&lFbPc34uRrX)0k+OGYiwZiJnCME zrlQToOAS;)CZfMEN?!tdlcH%U&UVSKuX;+YxrFozw)#tx@qYlOD`n{OQr1Te#_Udv z{r7|Wi0Gbc!0i-t1G$Uhi+igY936>e_ZVFhZwJt|)o{(YKY;1mQMo&S<{GCC$?`3+ zJV{}lggCTqV$$);Kc@X}h~sw+cMJrMkLUJI&+RTa`l~;V65G)vVBdo7QRBGSSNK54 z%@SI{w49xpZ-3|t4hAyC2#DHtd49vWX<3%m@*8-jVS2LI2OW(WLEX6HiD-R4Qo;sS za2O|)Lu4wt(~0R2myU+m8-wwA`_K2K(0UojGQQkK+yM?hKwNtQ@xD0M*k)t$^&XcM zaSD;dgNX$<{(_L}^`%1~AoSxsbS!bK?~Kfcjo$~rgMR^nnn*{JycoWXMfZuf`tv@F z(xHwP$77HsYFLa9myZ1ftdGLrEQ9F*S`a#D@2FPFnyU^ z(`b0WxW5L`D}QF`a8=}sFA=D6O4Ga&-X=oe51_>mXgArwvyi{cepw zShA6|$$9@2y2tIYE!Z9O$2F*#pX*mbm{dn8^nXo|jN^e|&3SP(+*=Twm^5PvZ9=L7 zNJNXf7p{GN&!Q1G3&P!tGvIv?-6%My#W;m<+tz?|gnX%9O)50sE)ONwORN#NHR0g40ib>TG#3~RTd{1Tn%Ou zv41hePftm5p#$G)-_5srNkFha#O=hJnn9Fe0&6^eCCDz|!;E+cmo!L4Zu>ceJj#3u zB$jZzCbF)|DWs8!jll`ry%>qd5i+RI30_G7#xXoZG{9PvwX6Z5;Ob@URoFJ8F)5St z_So<0B#pZ(d@R5YTWoLbJX8}T~? z;!OB^q!u$TEq~_V(I)Rb(SIz-47`R~lqsf*$B434U{;f^Sqve1&pgU46P=zUU1ruY z00iC>g|Z!PXyBjgKAM5FD<@8OcRZ0A!c@PYbCy)sxgM%0P&u?$&_lVnP=B4H*}A!T zP+4}Y7hJ&-P}96*#<*?T?{~N>COCunO>YYJ`>j~hzQRg(a5ZZ&(9yeMfQk>zt#f^h zj!2RT6J&TZ+OT&pq&K_t_29+8WN)zpe(z!NLbl#LI?Ub1jzd?oj*K@z-nn6g+G*nQ zdzioN1+8L?03eun_w}!Gh<{RIm(dA1GTbrw^9bw%UUloVd1aS_7RviWd3#W4ah>K2 z5#xgZONIG~+o2Mvb#+Ji_IQg$xjD+<)m?2Er+ix-D{N zz~m`-mgz#c1?JDuVG7SO-T97XP>rut38m5xRF9V$_DFJQ~jAA(zj^BbuT|1qkR{$6RPrRsY1AyhBYFi~7_b5kxGzRth@ z?cZs<)|HM?_af^GEPo1wF-&{I?#<0>!-XoBS4Fjh1v;U02w)V^b_M$G-3w@!LuKra zcrzlA&X5sCZ5~gDKW`ZdLF`;Vg%!~qRmL#yUOf)dW5!l~4_m@T%)e0}u+u5vLWF?nf6ktRarGGq9zql0bYP>fjuh6_j z&q{J!SsZ5a5m?zRt{kEQ12anA01m3bPS~1_+ytIAHhGO;BiwO; z)y7)5NzrMz0iog1CXb+PD?5n%G{B)y-NhKs*=R%PZa9M4)kVv%#NgFQ#gX z$sN>RYyhwO`F}+_F%1c~jCa&d8SX$zJhpMh^E0z#?Jj{GLOuqMmW720G$qyP9GnTR zIWKcBMQGdp;GItw}yNi_a8^M_-#qx|L z#Tw|k)aUb3)ytvgsOK~U8mM>1lgl@^o;uU>e0I!BHZi|g z^aT7JUQ zpJZjMA?ZDZtpTbje4dJ$h2CEX3vTx!#;Ya3Nrc5s@--)Bt>9Jy`AG`HeFiw$#y+$n zg4!ww!YmFHfq}HocCgZVu3n+^6HBKju=};U3V&_UD9!Z#09Bx@H4tSdmc$s;S3_W7 zoOlM0!&Jh9%?yHvvbF78h?}oD`+V67b|BIPKh$)??p2&7e|ps#^{mieU$(|G+mEg2 zTtpgCuK@J^hEME9FRW^|+pvO#&R72IdTMh|@7Q||FBK$X`MqdyVR;{V4<^oH&hiIN zLVppRVpXjG&CZ1g+xqFczipdkZ}%=Q+bZ8V0@c*(QVO_W+0J5F+3E${T|@&8ZRgQ| zsmsnqna2u#@oSyg<$RhswNAIgrfzhjOv^9Dgy}a>V2|Xm*OjhM^}{SP&BhwgG+o^r@l` zic=)OD#+->-+7y7IBEC#xaMR{z4vf|G`sGEA59|Tx&o&oV&8k8 zM>#_&q(!5;E?5#=k_X*ceuX0@J8H*ZLu}1obuWb;)@STV4sk_65m1j4tMqvmF#ez0F0$Aqk-q`{h54jd>dM&Ma;U8t6pZGnMM82KVZkcCPF zY&$3&$;F{lw*+bsRNzwosH*UDMYu7zrOvh&Z112C}Tekl5YWK-1ii-KAR;hxL^5rES&4R@$%=wSyt27 zY6t#Muu9TZms>mD!Aj2GUROT-|Lw_z(abVUpZ5*Y% zu6T}7V!2&-xYd+2H5gFOMomc9ZW*N;xlXj$M{~fe3kMbU zSO&tyJ05|`bhX0^rA-s=soe`g&@6U}$S3kq{LRK!IWR7kQ!PAh6fn zTPQ^4vAE5!z9V2`n5I?CX)&V@FT4)>1!QLY47dTiIk%cyML2RE3x7fF4=OEAzL{HaOBm9*Wp#FStfgHRBdc%y$3r(2$L9R) zs++B&N4i;F!O^`pL#TMZM8=#azl!GBImT{(1HPC@~fHCs1N}(sj+nkzNXDV^3<>1H73V6Wt&r_WY0TJI$-|*$< zomjJ2dew|ZHnIrBh#w3(@=hQ^;T%GOr(0nk&)LM7gaD|ti0s`CZ+Q#!JtenvMO%oTG0-$300ui2;+ z>;9^nDh=9;f=$mvE)$ShyVHY>@mQ~g@(JUYsQYm=X`e=KV%)g4P04jvg;5%Yf6V*x z`$nL4UVmIsY;|uD3dQgRh3r0ezEnHqh1213;qG0*%6yiANJR1zOHFf~Pgaj2Yor*ys@z84551>0r zSj^kZz-r=~2G7Sp5t|A{@n}b6r1(%rhB&y|;7xT?*qHWX20Nk@wnMG7 zchi)&`F!L7weSmZE$UTi-1qGPjNP)&S2&x-Cj2geTZHz&ML~6JI?Otv!3jSh$&*U> zi+}8w_WQjtezoC)bFArw4ZV%vXu(TGdvNMQzD3gSZ2)ZS_rBI>K3~EGbQYpkryrzF zoeghF5Az|fv_|+9m>63JwF+CJa>Wpp$TsnkoXiCSuU(SSTa!;ah&X}jm`)E=fexV2 zC{Mcep&%=fKh(~UUvWH?=AbnBE~`njC4apz`60O=b>z0J7G6F|_3*N|J*R4y#m&@Z z!2-^vM&S|P5xfAw4?SV3;qJvh@b_K$c-42Oy+4?*;58o2M(dRmL9gP4l2?u(&v?gq(-6;BzTp!Be?yZd%K`NSN5?Y*JbzH{ z4~n!bNqK31ou1$m^jCBRnlM@$fA>U-9}P|=jV;QljohK>~^x1U!f#9!QXr2qzRoNp~{YmLP}-Ro2NW2Fh=elnxKo=fjUt z2=Wo=cS;p=S>S63Rb_ioWlnwtW`D7z`NLQEWS5*vY=3wrKV-!611pbbEX^*E-OLvn z`3qTXTR_=)H4ES>6PCDyd}+d8M=ZLBTJiVC2y-o@v?Vl^KH@d=e!{sxKsHvM!mdil z&7YN2vOM2jp|&S=t;)jA-8EXKI5pDBCnrJ~5CHBfQSA2C!*xGYAs^gI#i-FiCKM%;X9M;Vj;jgYN;=k%mU4kqqQi#!Z~j>4qv~ zAzY(oVKHu+^k?G4ffB?Dg=kVLCUV$^3J~;TMSt5Ft~H9LWO$K6{4oyHF^`*;3)pyi z#3Lny33#<+LZOe2MtV1Fe**BHzW7`oC&5OnxV4wBI*d`BvI5dQg(ElNFxQA!sI zhE|OAH63gkR1h073e7TX%qeKW_eGI8-JK_ThUrK9JfKS zUA5&Mo;E@{N*NT|k>?&~ZDx_I2D4esP%6pM`{;d^xQm11TBh^UAg777BRopO5Bubl z8iXpYt}?S~RM~iG1W8T{Md}MM9>)Z@vY+Jeu;GA%_PhEvcg^&tUN6(L`W1QtU`fy^ z!^ND*(+OJ?H>LI|7JqBW38E0h-G$i}CS=W(ZRA!w1yW9DZ4I4*|gW_wAS2E4t}3Lmr_%LR-}wJ;@+B89ptIOC^j3g|aiKNS?3fbwE& zh(tC|Jg_$*QhCr)m7`MXa0Vh9M7&nm^NHGjN`oJ!Gv`gAGuM3f-6Hxh(&kJKi)@Z0P&}1S@dED4KlgO`;P( z?anCR{bt{KgMZ&-nMXt@&c2YX_iJA<#@2+Pw+4TF#*>?-KsGPHQY=$vneMG;fc-@b z`e#OvZ(xeY5u|sYJ2_7m?p>(v+)C)Y3r4u}ykrCyN?7p6%+{~{)m*FU4yr)5Jbwn* z*_r^@Ip{hE&H3_hAvkr85d=P1mtcjfERDEEz%_zaaevb_O!q4Jbmm(w=ujtFg|;9I zNkH69#=@)}LY4v-}(W z6lWbXVt-yWMVG2@y3Khe!_;Rn0Q=ij4QL#e_Ev!DhlFL-c(bFR-@dX7O;1~^dc9$W z9V+|#9oeyY*d3YzXmRorO+3yFI;9maShuQR$-0%$MQO$8-dfh1_+)hll}-8``uMt?H?zc|rhkLzUduumOb{>$I~n7MBi-Z<*>K(2 z(C%y~4T~^&nR^^Ntkkwfz*|(^s&UD+HfdL3ilK+~F`Sc$KSi#$8_UIhQ`q!CmmF z>u1S(&I{h-8Nj*z_JW-#*RtorFMuOAb${nryy;A=PDnqyL-q$aZsE8GoS^MK*dNr{ z%c&lTmBE}$6%4-{7$Fn&ql|BSJwzJI&v>omk5ko@lN`)odZ+6Seyl93qdNI)#{J;y zMAHWG8Mux5{pRg**8f;Av4uT&GX`IT_8y^^TpUrE&COl?hAB1#cja3JQzQidv10Cq^IARk32~ zcw#jGm!BEUz{gLFJ2)sW8kJJ0r)paLk;#RV*<^dxcy9AOS$SqMt}H)&Vsbut{CLG= zZLGkVn#sKUWV!LkI-Xm8wEWCuZ-1bP$4^ax<@)odjmNIf-33nF@*{NwQ!?{ty0P-? z*^|1hgPnR)#?aa#K$B!Oi=-QvBjXJWrx$7=8;5lb`1@&4b%ty-&6nC@fBFrj0 zdG=`K@gq!=T@4#yG*efeJbPMy?o>as2&jph)JRwok zg$iH_eiyE7I&^8#T==s@y&ohCAXMsW$tvgpZ0QTyDPlSsYil64Zy;p{{}XvIJ5Fmb z6YAD=u?m(1dH0K%H=jj%9yEK{Ze6=!|G(R&$s&9p{tLG#Op^*5vwyG;3)^n~E<-K( z%>^%t*?JAkdU<4Uao4m8yM`Mp@1@b~EPr3t*GRT1`KU0oQw0$T7}~@|Eu_iQDt^iJ zT!%K(#zF_|gpCEU^<`oRK-wVdt2s&6Xzz#PO&T@5xPg&UfZg~X8{S~v;8K`lBl=xh zsJW?mEOb{L^cj$#n}4r$Z|dqE!>w*yGNQtP(-2=z=1~>nd;}&q z%3yhaJdO@7z$QSk<1TeNV(5tM5EOyHpfQBLwfF8790#oaFK|mWHs02zh#HvcAy&V8dvIP-k6L)flHJJ3Tb=M!^ ze>XeA)`3{d!oYC1FIbLM8c{j`1+(w0o}C0R5(W75Pw)D(&faIKqMRre0^DAI4LP zDPuxXr};*$bfU$I_^b8wz>$M195}gDUm{HPf|?1!Fn_5Czv85fAE-^3k>Z|2o)|#6 zFL%_=SCx2o^3;-6ht)QatrERLUBW}Pl+toTL3tlF%gpV>^Om)*v&zy_boq@F%acQt+o z+8JK?vwt{sYvuEX2XLoeOgJ6PtIgX<6FF}z-)@erIu&3c_K@qJ_qiZ@T=6sCWqdh&(ne^2fHte zdP~VT&>|>4gJQe}ZlM1!Dqn?q1M3Kb`nFcKcYmmoJw^$lC)dVjV;U5%>O=)uf&(9W zH;+P0-w6CTR|GZ(Gw@?_18k7{)!f`3{8+cPlKaEl+&KWUyf3%9_TT~_VVhKT0@QVbf=dhvZvy>nbV#>0$p*aGO8Ma%O;EL!i=0?zkLsf>0$-JShAtnBEi8cIw0ecp(>-b7Kd1a-Kn+Nz%IY467vGXpPnuyP<$0}; z2WRGq`BtTq$^-UmvB0@AI*rv`i)|ZfPFd+Z->Hp>GJGeOCC@veP|uMxvpa#82P;6d zvm0~v{jJM`zOb{PT7d_aau`4t#IaUY#edwT8Zv+fRL8dtGtNXQRfMd$6>xUgMX}{0 zD@01eA!%Sl(Yh2)bp`mqTVI0@&@pemVTA#nzW9BE{{ko9&Q5GVo)T{|om^du8NL1A zC2^@I@+f;z1SLkayu)AP_U2VC@s%W+a{>NJa)}=#(VPRIxuKqCw0@Eyq@&_j#D4~} zj*KBG5Oo=EjG>{s^Kb$J0IO5LybmwQAD$-QeZ;$*QwtvF*Nc4$*-Z|BntY;O7gb2kk51m|b&0Yoa0~F6D z0Zc{?azzxDgumt9Nc0}U4|X7j^(fI{qv#&$?EuvDC4^AfgT1+s5+vkdf~IW*--VWz z3Y=UY35P+xkWYS}|8s3V`p>lK6%px+IYtfzk(q>?Xy}!8vK3s#*!6*sgn!6laXe0X zfU6H(nK@lmZ0TwctU%R%d4@eMaJ;?dIgutEmr*GFphvK# zBz|;~5cQ-}5axBYPCG-Ci+}P==DA?b%}Z`wa#1zOB*R%(9T&&wsMu)Yk8An10x$ z%7x8+BgKBhPCtLg$xWSi$;`*Nin-K!1GEuhQ|G?v_tqHXN0HdCYe4UY8t|^deoQv4 z*|pe2e4~nUzTI3v6=wh*xmb6Rb<3T<2G2%kUGO5OV|qz8@tuek7M;P=UKQJ?m>w^z z8T(JeP=xY@YEbTb;Eo^rj7e{#Cmma{KHejCAM|n5F!E?_@Mqwtu!0%?f-9;+)2l+u0b^ zgI1In9IAsyX#5wBj~+TnY<*_U`AcVsko`DR!b4br;VdxktKuFQ8lze$`2Ogw|1d^X zO?-GZ9XRZ)D=@>iqsk++%BbbYa}YnG_$ci_tW#4VdkYk1OMGNO1-#bMtULHvZ85X! z9%|Qj7RaP)t$#OaEo`e4C;Ss#aH2#%EY;ddUA!{d`8LuvM+08n`ne z5hoz+r|66ZaTGR5T(GjdM!y3R3uRZIr~Nk09uxGUd%TUzUZQ&<^YsYy;*$vw&_*%glL+AkV5hh7#jrf?N0-RigQ-VyVqui z^M6E*V3{y}aKaMI76zu+Ix%zGc zp1Dl<# zK}bLuE*2Cav2cI~+v4GU{W~o7?+{f{5eoSrArxFdZS=gZlZ!nXe}j?y;xONE$b3_< zk1m!o;B)qn!ia~3(x5#C%`VUO0dhdD_uOi*mUF4)V!0Z;>14I=d4x_3-)Gnj?RkUE zWv~OzmoggFxkygKtC%gm;q}&Qk<%a@>PUxnko*PjM7^AJn`QigfBtd+14O)6*G`&{ z^8|0A)3jNJYIS_cKF@OSacqK6pAYuM;84TzT@I+3Z(>AkKiI-Mhwv;%_Fp+@^^y4Q zpbUfC(X?s3(lJmDU`{+KMB!}}5RXlhVLlXp{y2g&J7|{jIkxg`@B<3j&zj|5!G|+W z(4RNUAKD$bAzw!Id>9;`D;TekjsfI`Z=Hsf$7~TkY@l&bejW4Go)wh$W_E=Q+L>KJqyDsi zK0?dhq&`AzATV(F;~N#)`E78F+YNr8C)>;XKsUBm_<=IpkNANC+mHEy4s1W+2b$h~ z$`3TV{ftwE_O_q%13tgE8+Cq3)vSA&bvIZ!)I`c}r$e2O27Bc%)iSgR;9?P=dmEfC zhu4_SCLYcq<}3$hqMK!dUkMWcPEhK9f>5#eT$E2WMm;)mBVoC;R_J2xqT~w03kr$zXL?t&V9k7X$;fF zG=Ht^B@eVSZu2tS>evJ%g@tfdQg>zDz;9FS(gox5xhN9Kd5I9&YK ze}8nee=J3p(z$NYT`f#7VIT&}N?7*`Ve{wDL%7O?rM)RDdX6&;ClC&vIX?kB--l3sc6g~sa;pFLaS-$vs_xDW31$K{YG$-G&ZK3BnoYR5?4$sR-B8s0e>6&h8E4g@ev=7#mY1KqOg_W4$YjmfxXyFpJ#RsN z67vM#y|G+F{C5MKYkGNT(m@FcFlT76mA4UnD{|9W7I=Y+X_`eJjMrLkY;FbwqtSR{ z*}QkaiLYZ7Oc9TR>bdr1_vC>22*tXWrfAWXsv1go92KJh#J7So;e)sbf6VtBX6RqQ zqcLmF6O9}$^1Z+Uv)nM56RMvGz!s*$Fu#4H$if7OgE$z_D>|a3z9K7r8Ehq9=S&7F zr)UOedEX|`LWs{VD|L0#%1AZimkG8B^A2H~#Wyd}-rljGzhTbNqMVkb5ia0F(Rfbe zy3Ah%xt=#d_*#YaJN+7vf1_=GdEw?aK~MrUslBXD6?ku^vjh-g;(bLOP^jO8$%Jn} z@mt=Z5+4enoN-7}^bL|;e!h$U1>4Frk?2cE2k2QLgX@;3i2_kj=3&?W&U@N*R9t3B z3-YYh0J*|Fb_`$Lz8$S6yM$%B6}hRJ1DvVC!aSfsvNGSRL8hajf6wbchvGx0lI5Vw zN&Qgy9>s@HYoQX8@rXrJBsF{v+R{>_q^{Etpzc&pX}58-(j*N$-Xtu?OymvrGk6x=-Y6Q=f&J3=jP`5 z+WfO9o01FA=D$r)#cyO1;!Osl+k&21YQnDLHeRKPL$g3$72A$#&pk$qPAfBgVF8Qu zIX1pgsKdMp2un~I1lr=d0T=8+YAgQ1Hc;7t+Hg`mE*D{4D!?-<`2Wt=34+Q^#RvMIbISO(0Fr>Yb%9I1 zkM7Pb=RyUqq46!Ie5BUlHHb%FjDp0(G4M=SpJ*d7fZWz)tGXzIB;WxIEbdCAS9cgU zfm4xVe^w0X^Te)2H#D?ANPnu>B#<3JoD6O~!F-ACes=J_!q8%QOse$;0cnNx!ebtH z2H%ccM#}|Q;){HldmdwA*)dKlIsl|XNmXA_6&vXf^&yRqT4&1d8MFBQ`TrupU_J9Y zKmFOITwcKNZ|O?XKFPc%lk0?+I9-3l7aak)Q{^iFek@KkFABU)HKD~zz1R{Rl}1}+=hT_Hp=cTB ze|n!eYlK)cb7%^AkLLyntOa$Ei?-C$nI8jqu$~O&V4R(-XLjsRAZzLHGkMES)62$* zpNIcxhU`GM-%8IJf+8IJ2}5!YNEBjPJQnJES#ane z56Kc!&>67+cNWd3MIvTBlxOhNE0n;Be<`r(3P`NWziIMQE-Zf4g`N{&0>p{yepxek zU|M4HfM{;2H!!RjSAO&!nN0SBH2i0Ut zk+Kn~qw2J`siF$#r-mvHET*AVs)eI%_4kzu)8uZZ3;82+3EkjArT@V< z^9!%S^1GYnxCXzsTbWfuKOf1=&1Ak`y7b^sWSPGC|9wd((FKH$D#;DV18Pm{{!eRc3e25<($0a^yCx0T*4KSaS zwUVhQLG2N38Vd~wf0JA)l`p!|(=WJoHXj_7e4#0|B^9OQ64jCA51)`X!l=!hy{pt~ zzNKdK&ARO;Yd7DlKfx>a92r%W&77%$s;Vc$gDVx2<%i7zIQU+TF<-@xm}!^Duly*Q zziOpxx+ULSO8L+^QSD^Yl%DTMrV^{>l73&d<$?T?DzMHqf0FGQ-=}}T_{4A@0^I)s zaV_bz``REtHri`fbxVS5wC%+LhoWUv1s1gqtEFf;gU-WbFK6+*)z=mF`MZ`$S^y!(y_w%U9mJ7zzZBdK% z;>p@#!mre*f7XUZ3>PqX(B@g{`DMf#@lIm1%;>~u@t6QNoSG!uv z|BLEZY?5z4Z43UBEy#&`2EW>RV&P;Gd}@B_j*TajJw6OL-G6*2-gh`Z>QNfzf;t`Z zP`8hBO+!D!wi%i=li(Y9Saj)+H~8gD&T06ft{96SbMV^3O-`{K0`|+3?*blF<&3^g zGl>c1e=Xj{NSQd$axsdtH6gh1T1Y|Vx)Z>|ChXj;cQNYR%+bpBoc>BfbSDq*MUTWM zk!PAY^GcEJ4sVuVAE+s?upb=d59hkZxXnDaEqqac{UaF%Ap6;oEk>U8~2;{>8i=XI>dP+G!k%Uwg;; zGLaTCbyJd!4Oi-_09{_~kowg-^83d)(7VC1ynqcCi@hG=y$jo(vE;PtUl;$^a4H3_ ze>o_N7xrLU01*jOccCnymIdk`m-}T=xKTI{VM*@4NV4(-*AzMCA=}T4>FA+bAB;TO zUB;v9@7ob&py@aFgMM;r(5By-a^(06u$d|F7p%Yp zj8pc7&sNz!p}v{M*;L;D_y6VYTbtTQf0A~;zrSKl_z-ZAXSmxIqa_%88F^v6Hnuey zufvOkz?$LW6~YWQoZo()Co`)mtGWf)JNup!Z-m3Nx~r?}nw8flF-p<4YmNbk8AO=? zw52+~BLqW72oC^mbz2|8onS)mw*Fwww(fU5NKZ3C6lc%6Hvf$~ADHr%qvB%Le=L1b z3SF`r%K9-jTzv04>x?0dZrc@5WPS^67A8B`+nIQzdqs;tZE+^pyhWwAsmZ5Mv_Mt^ z;ZTy((JXtT=>omfs4W_^cH??PnaiW4LN1MpyCI2i(`ZOtYRA~}) zodCn~O9^Pe8%{6if_3c+%R(6We_3khiQ2?IG-&JOyZG*-K_*~eu zNGzRA>xyTGeGRndkv+*15(#sC#4CNeQ01?FgQjp=e8%D>8z^*iR4F9xSu7=Sm(@bo zMQ~OMTj;MC5;Zyl9azjeaDBjVZJcfyPMJsbP7bcjLYUFmolyyqG%-y1+XF!BgPig8 zmy7=Ew~Oj^J@-+*sO^!je+^0>ji&s4sDIx>3p;3i@RReG_s6{VTh@vYNs0$=03eqh zSl}q`|C}wX+8A*2AVcA&C*O+n^z}j3Ul%j$BD2xXiz7883=((Q*gtOFIiNLEte845 zji=+*!C+nXu*B{?AI~vbLE9{jWY5QIs0RB#aFTG(IUhGZkJrw^e_NnZpU15;g_n6h zZheMb!)J}aZv$kWo_-%*0u{we@5g9Dx`UUIf8vZcp`XJ8y?-!Jb@$62pW&U))N2DT z1Q6UZ9ca_pIFPgXA5cCj)IqPvjCBUM0#yp$Spez>UCXrSc%Ibg2goj|$k#m0?t@aQ0jcJuI-fNgF9(t{9fk%3G|Cn7dz;G;$e|WvhZlEeniv-J$8L?P9 zrme%5QH#bolk8zh&{NGTZm_Tmtq<0S&c_t6pNq+;nM1Y#m0uiL<+9F@>>u+-9_{y;dqRf@ zLyz+4%Q=0sf6;!c_o>#aWS`qW>%~T~dQk^{l4yXs3J5Zk*RF3vx zAW$2+jvR0-y9UC5i|r%q?%7#1c}Ge{=aIblVI_*6c&E)+>%!gdwpX zYqH?9wx3pJUXL*YoSK7yh;43#?+4tkP!J=C(P2TR(~T75e7w$?AJ3*8*21hNj}`Z$ zP}_1%xzsTFGx)7=nV8RsB($0(LEag(J}ssk<40(~ER8Tf&*I76Sd$mv@~%4U4_ZG; z@44$-e>2F=7j4NrX56P;f_HaUGrV(G;ahzLD%)WuTKwFhT@u5AEe%gejN6Va(CCr% z1SOxa6p1*!0tyGm8MGT8%aX|ATThfX*BtcO_*mvVNp_Ap!*6ab&8mB4%quFcOjiZ4 zlEeChq}e`L>(7H$!c_ibK;t}UrJ3e4?8wBjf8r^MnK{3LWvSc(jr!0OdG4jew8{C& z$Ono$Km%R?7;87s#x#}iDco6OJ835~>8>{QY?ibC*Lg^P*F+~6$Hy05fJ?7Y!Nx>K zwSMrGm#7n-_(}k8sk~*{*tp(Mz<2*WCmk0#O?O*#z^SKQpLmv?fD4~e3_^|Fh ze=~%vz2G*WCqJAwy(d5JK7!`sh5W90a~(C7PuP~}=|?`p4VNO z`+m|3BWq{i&f!V|ro2dB0<3XCYf0>PH?iIc>I^C;dY?(EH%5C0KD$EPZQ`Yxe^_RtkXn= zVFLcYgIIyq1mhGiN|ojA*l=w?Z!cQrl)FjP%$f8eie-IQlq(&hgd1sO&z%UfLE7G3 zr)CD@M#nx;P3zN5KfwHUV*`WNe}uAVQu#2@u`qqk0?^3SW^xLL_Ia{X&?eTUWU1L{ zegBWqKaSVGKWGeieTLlF^OyfPd-CMTqwf!rD)WT4#@m$<c+K@93%@(;pmKdyw=U`au)QXDhx4Z9Z# zAIEPXJJA`^G()v8-aY+2e|sl?6yRxoTwxyhlqf#MNB+2irF437_-P=Tc9<@pI>K`V zFp!ZL?jRrh8|TnC+z}kWH~?OuX@(t7nzwAR7*z!=Md;>9%w*}rMygo!F zeB??gB(Qp=4wt@Efng;~Lzj)X$7T@^rP(Fqv4dZ+peiRVIe$I~x#F~A;=6t~q@$KL z>DBsF{+{$c3puRDg=`3g5&vC)_zbcB!-yxSWZ;acV3*m6(5jGFKw=yXrBYg^7i^hc zp=H_ymqMn$Hj3kIe~raHoSVC@H1|r+T-067NP#XnoRNh)={OV=tWU#M{A2V^4O|lb_H)z%9vr7gp(U)ZYG~u6q$G zPV+LvEEdVH+QMhxc2CU{2A8jDL=6txbb1=ajOk|Gv70@ye@r^E20RZV6-v88lj!0t z#Zt%z{Jtds!dWwFvnEQyVHa@CYH<*-2k^{3_2J2Cm^QbrMJKL(9F2tJ}=PMy?eyS_4vjk+3Lnt8Uu;ur7FilOy~dF zJ!00`m}T$tf5O}D(YuEJv4ivoegN*IH4At5Xl^c)i|;3&1`DhEZA9PL{b36Y`VA*~ z=ag5}ifqrfe#3H#r?Z8rhqWcyR!v;xwwBCPcVfOqyc+y3GF}Y6;~gA~vcTKaWdWOb z+c0QfA0Odp8SDv(HAo;vVud;qHtwYKbtlTcU{Mqkr9W^cK5qa;|w@ziAw zaM@p0R)&<|zWI*WARC3H(Ls7w{MjG6iGLqGUog)5!!XfU{g~Jynd2&xIbx;k4=EPl zqH`*ft5_<3of)}?!N2Ik`~x77U(l~PzF`V!w(BbSvP)AACkUUVXAKE*W%$%#p;JMZ#aDvUsHk}P_-&9DH z*@}q`1<0V@kMqwKy)wM&e-X2zalVj+os3^`1X09)G~l=*c+#trkk!e>6bnPgS^yTn z*V3csBZWA|4_4(RE3=AFFA&X*V z%|QQQf@t(%xXOBF`JW+m>Tt(qFqgmyz7`-&=N2Hbjgf<3xAB~5;XI!DNXI8~M~Txv zBF*1_Izl(@E?OYZ1%7NHYyG=M8$Q2{r}KLM%?U8#x4=P6rD6WX08-u@z1;#Ce+T}& z5wGtqvQA9u1!#E6Lx&;OWwo{Ywhb5Jcda)k_?}&Fx$CF$adq(TpcD@1trMe|ON&g~ z)S1Ou)j@8i877T_z&eLPSIJxpjArM$T&+ugNP8Bto^|ha|JMo<@q)(lwN2FFnJe&A z9c0hkY;^D8Klb{EA5vwPJ$&f0!+~he^_92NGHv(Bo!@^58dy*|q`8x!!|^5Ku>j-+ zx9$$)9p$gFg6}S_&0-`mu=nn5;ZT(kwnG(zTX$dW6@2;WJZu^BEez_tdu@1V%jnvF z%V=rseRQbqzO0zX1|#vw{=zc>+wZ-4u(=oxndWc|AMDPosLD(J!uXFz%4j7h$5jXHv-Tz@-NKjRCP~gdfrL`10t2Iop~k*B?$rE}Vr2*~*!Jyh4mI z0nc97$7}GCc4WJm3W}JWdjoivS${E`l62zzE;tQ~F|BE$i4=NSh=1ucTp&&z1(>Lu$?Ymy5O`IRr2SiplNT z@7`Pu{8p3pL(bKZQ_mEsDGPmnjiBR%n}sDsaj@5?gMVc2WbXpkcc|FYLTTyBMq?^{ zspAta%i%nI1!HMGrb2v?rPYWaz9}2r&n^8uv@b!Ji}^B&eM5zJ*lQ$zc5x5s>Mj%X zFD<}@gf4VplH6C(kgrp81l^KqHNGgN$`w7)kd;&&xoYW-Q!;^AnfAj~ab-Kz(r)3` z0sQZsuX^a_hVIs`h@#r$`?tHxZEE ziW*eF)~m6k%SWehR<)52;iHg8}C zs^fT7k9Y_QMb06(?;CPXgo=+mq+#DAs;~sNbZ)1&I*W!3^lob1rWIkb;|~nEIsMC* zskt1H=eytF=rc3bKp@H7)D;ZjS(vqumdI3-OI`^9*^^aXBLPj5d0r)d9jEVh!*}De*56~hQKM8vxhd9Ssa#zh zZ7oml!c>jD3I8ahme5&9`p(bMagvWP(Awh9V>mO(#Mm?}O2<%dv%Hzzv25AA?@}Vu zG06c8`3A)FRK8mF*Xev>r{I4T>!A_IbhH>(Q+@)9ecXDpjjnK*$Z+u$yd1bW9nL0y zi*@OVi4IksI?6xJKW)xP^agc|JnpnwFW{pX3k$3o)E{PhQ-4oENN&begdXF=URY_t zizpiBSZT7t?IhQNoxyi^?`k2w0Vg?Z)|~-)NR9&@0AmvFY1Tb$3SCi!dg8c&GtrfbrUXWVLsF%&2FJ90RR~$2!=rUfB z$%9j*m4~AyZ^nruh0=+`6w1WW>$iRwijA$lk2+;NCtAm4|fBf-eT}4G-%47X#|^pWzH6ANJQ52wcD` z&jzeUn$?t_k&)yVw+`WdIn2hO*yr)v7X#pB=pMzBFyVMVG9I}8Ff4dUY&dl(I1q3V<4>1imf z@ryO@h!H3@*0j~tAwmhI#HquX1Ew?><5AaOcx}1{qY$2=C1GWMl?{@BMtn~M1D30{ z26KY-h??Xj-=+`4)FzDdhhZA!_yE&snWFL7ZIKrPOtx$h9sdu*+U|T9`tG0*o^pB< z!;KGAqMv_Co@O%3_zjoPYTu*npjhs<)Rka5ibI;|%$)dlU*}R_@TSacN#y6{q|J^;`aOP`iA+9 zH?esbcu(MJwjLhmTTgF%3+cOQ>pk1aw;q09yY=>u^R0J(BlE?}5GV3Nex$Bx)M7+{5suk6pR>PV!`_ zhH&DgsUvECzWyK30-#>UMTs^jFp0Ku&>8(q7LtqEQh`Q>nZ7V8H50>t!sR3dfwCLf zt)h6Y4AAoVJ)6&@va|WTQ5BF+q1efSqOvlNyqD<(uWr^#Nc}ZqndBZFOqF{g=>Us7 zS?&qPMZwbYkjMq1f(fV!KVL0zirP`-N~ao&^9+rD-Zk?uVf}{jX2~0rf%-~A#&Nb8 zUJSk2KUN3EqZZWLgg7~QC0B5-IKH5tpi1$>3ybbO(!cwqXaA!GT96i6C}3q1asSO_ zbvwQYE>mmpOghH?gs$E0Xi8S+@bWw&>jZ~sA4fyKs(9RqA=Av*G=`r}kHouxHvDw+ zl5XUG>B#Klk1#wF9$IBJuZVR5nAsY4m*Q)j7mImSVp#edw=jg7U5HKz!1WrcCt$P% zt3yNZt&2zecZb><>XHF}gz3tQmRT@9OFE-yHTM?oJhcWOhG za_~1GBci#DIRD|Wq!l)txD|UDO}QxB$HK{fI@$UnJwOgD-)wrt3dz7L=SRZ$z;`K2 zfYMc0s9mU9+YpN;7i^eQEp)JZRW6IESZE~x`Ml!W*L5Oadn}fi`sHKpj_2| zS&faXwqn5+RR%WNsL_&SDz-x;CA8WcWj=yW%ri?vHD54pr1hl-8m-yjN;AC7^^bV0 z5u9p%KLlV$dG8cCmSCR$Vy-%R(+zQWQ9Efm%YUNl-NtxLd=$LuOuIV zYr(`m#Oq4?ZPTSYWoJ0u*>md{?DBGd5nB$BalP_^FQ0AEnCrMiib=jage20>2OdDX z2a?EGPC9cLf}q($ZdCo1wyaBu1G{GKmFl`Kj@xyCe{vt#PTKCLhX9STO@shLou-C$8;3sV;ax0U*(2~Xi?ww8t^#mZ*p{JMZc8ArU01u`mgx)0>LvDn=osmi zErRH)Wf1$;^O@fC^1{RA#pQW%Z?eQe9cJq1a-=I|bTO07*63Zr{BMs*8#w$~UXruS z(Jx=CmBY=SOc)_wmi{If51SU5|F)6|b8;wGYakD^Uo4(#)6#&;DuaJvxYqTi1W6X1 zkcqhPn1DsD(&}Tva=mnG5FVp{fl3qcs@ZO}b*?rgPLh`)U@EjMe`S$Ze>Q{np-xBt{~dAxK9bh7N@>^sw>8D)d;-^+(l`B_?rFIl@%RJ z+K8cTA`=9kAewd)#pP{;ar>qF%<(UHgn(?nbT@dTY&i2=NRY052}R05#ixNKXP>TA zfu_LK1HBE=)H*FBjC27q2Ot;Iu$1-IOHx65CVmX%4A)bN)jAhns}W4M^Ux4N>jbpH~Lo?2$U`gOFkwgKyv zkE4E;)`<(BMnfdpBX6I6ZL!JCfkeD%=;EB{B<2pOm#x)hexVz7x_r*4O}N)sdb{xs zXj95fBBoo(4hFhrW`Rxe?NiG&7*05>Mf^gwSdp(W5^h1^=H?|5<_@VRPHwLAlA6 zhldLi9M!e`1Xe@i|CmLjanP6eKL{<)d*Ny`T)7xPi9IzG2s|l1ai1=LRsX(c7OHJD z3Bg92a7>q|f1~GuzKV;3euLlS00#HjfYI}phl&`ufXr*m8-;lLJkQlESxSTmNaFw3 zFWb%E#tQBV{DJ}j7EC|Aa`8e6J*5La9cNt)W)-D~fK4kH6r&buMYP}S6*LnEvC%$y z`+#1r_7s1fqd)kw=~>GU8a_3TyD>P-fOK*5AO>ere-P8}sd9DA5`l5>{Fnhl#kswR z-1R)xY(h-dB6Y3p9CK>1)RX(7c!{UDZ3x(z9+LTJf-|-G;ODzSxJf5if(uG6)xv~Y zJh4Kq1h-}P^9~Tuqf{TX)$zN4-$`E-=W)oWp9Z^!&qsR$wlx5l%1bG(d?0rlhqSJkJF9ZMU$Tia4Vsz*a*9jwglB^8DjRB zVZ{#jTy$*FOB?>^KRjOWL2{3gM)w`?wN6IAx0$y^0N&pq@EmVjo_Os@d<{Vv;)s1w zIAT8pL~SD(3pdkUfBSo8#!7q*aS%_KKCtl&cyuSq~J3VJ5i6#P^n5ZTt(X8=<|H+{y1LTDt zMi1NUAy!RsNN6835y5WRIny|a%1$9lx?IY$#?Jl^JI&q>)1@Is1>ty4aNM*N@PZbd ze>8@RD?hZ_6@43x$ZbUMaqPo1)HKaC=-2cyJJ9h-ZUa~5=mN|0Zi>9Sdn~7|{np9X z4~8Y6Q(iiTFU`{?UOhHma6#*0en!fIBhxZwv!|}$PCpj>l8v5fJCY0-e@dtIr@)$& zYLW0IG~Xs*`?#1GJnA>`-`UVKlIW}Re~sDI09SP0%NTtOg_C}=0F-LWm1OlXg387y zWuDw7G)D_s;z;=}ijTPW`ic_h5uD2S7ES|8V(N==L<@4AT^dt7N`iG7Tf41toQ^SW z$%W@`zh-~~0rcbiTB1LqH8})IWFiEC7LctwVKq2|1Lp~c(@0wu!gFdzhnq-6fAp7B zSc7AHIoLbv4|rB8?{@cCIJeaAHj~gM={m`q8Bb@yvpRLArc!lABPc?yT&*o4f5m#0 z>CWn-20-4XCMXHC8UV7XJ2A+#L&y4x^ymsVnXMy!Qge$2L0%gMq2WK! zGAKNvM7BZY0EAA!yU#Y=z~C0vvnlG)3`!Kwpv96Ab_y+rIwqG$A)0DOrKnRY+-TsG zqP{TOBg{WxmY(wXVc8^SZQ3tgK#;ofg>0{I8Bu%X#j7Z`K)mWxyyEH-f9Wc9ur2)q zid4y_;hSB9E1hKQ^KZuhc`v64)#1m_5UI?8*{7vI=Z{}g+qWn&m zGG{FFybAD`aNVLX10lMHV*UqS=06fPBtdxwl_`PG%x#sln2uSvr(;Y(sngszvxUgZ^{*fJ7vh?$m34=JaBl)867PwL$(2|L>`|%n@iVsv5Un&mz{3LQ zf0QUgrl*(xibU^CtYtB_=m`C7!DW74%YHHWHIG#khx;CmRgYuUgCftD?YQ-La7)5? zCQVHqB%ioblsQ*JfUY_f}23yF$)3?g~Yiyp9Q6vccDF8 z!-22q^`J5PUAZ`#J(B6BuEF4S|DD!Ke@=wdV6yl@E`>ypJ8c9DlbRocNeWzVx=(}^ zN+LC^0kOO-ze?biHj9#a-otJ^16K-}if%6N66^&w&GcL3%#FsT`HMgp&7I+#>}#5e zZghjQ8z!>ithWNCBV0G0AGGa5>l^-E$3P0_k{xYUaf3%N~Zv#%>p9YFJ8*U$;BC|Ua68OSfyB7dw z&TbKT&@Kbp8h-8DmF^Y2el+NvM;)m5Xt=SDWVOMgRPUt>(BUIzl8a;KOB;s{qHR2@Za&{LCdb07vs*xi0>&y$sN zCJj%_FYH2aOTm01Dv4W@$a5Zla>W^-qnzUGdgT|(io->w{DLk@No8fmI69cGqv3Z$ zIOdOs`@_NL?}%_3{t?DZH#Hzd1wFJ!#7{vAP2i!kIr8TmzTcW^PR$|x$;&DH>cOUm zSjPDu=+rQpYfb%xyV)yf0&X{_0?hkp2jycWqq6uM9>mpEYG=^Z>kfl|-t~vUXW1^b z=OUUNATn0Mwqg2dI|BKw$jqAln%d)UA^V%r=SM2Ac zMh`;{DlJ;oL*KKcY0Jb*frYao-6+a1i%_iz@HotjRwQ>KCW;Hp1{0k9ErkIg*LgvP$*pW!QFHWBlW|con z?jJ-Bhu;lcJA96J`Aw&f#5APj1PQ1+`g`zOW!MT&1!ivNMVNr5Hi#LSDnfm9C=A}F zPWkD$5d-1=0G@t$isYAAx{gFUI8}yhWdPu(v+Kys*{8|2FPme3a4e?>QqmM_FxV`r zRRl{mr7h${7lF9lLdXeauC;b>TBWyoNN_aMP7a9-dTL1|33E#MSP4_Ui(rTN3b}^p z7TWkylMel9?WEJ#0?gp-K%D>_smCw|&|kD{QgQw^<47kLcC zF6**R6y_QzQBwSRP>>)P0ilklA9@7jTmaVZ_I%Uf_EYYE_K7U;4Mx$JE_YoLUvy`i z%#MK&RiGgvAdgADDr|<1ssr&1zfBmi8!9~n2dq)+!v(7H*vldLSzJNjga6$`72U5& zRDs?(Lin4r5z<3f+7K2F$Ij-oGdw&5DIefCH5~06t8`*PSqQ1Z*FW!UJbC>7*7e?0 zUaL>jK^&TYi|=Yk54KV0T@fog-mV7V_!NBt4FDojs4G;^0jLi zM8W39)^fXcEvI6#Y};U?CpC$mhuHCGFv2+Ly(h>ECL%jJMjG-;wH&e9)EUt@&DpWMmpRTS$ zsZ0BhoripPfL9S+fH_l`y8==rT$__5cpxiqbCM8`pj+W<<(q(#-4VC4nn) z6yVWk-i|*EPodm>4REZzy_3>-F%l+_n(}z>FWDn$?#CV5zt;9OlNEU;fBlhZ2vw>= zIEZAC6eRH!U?gTAb7Rf27HGtZr76gdKh0NQf^!O0v3uY}X~2#71|4{ZrMHc-$hF{z zuO0K97;j5~LD-QHYlzUu)hHT*Nu$k}InTgs`yw$d1w70aA7FupA8^~gzZiZ`x9+Vh zKA2yzeTUA=3N5kLU`-GKf9XC!;&rc5Lu-Nv#0^^3pu$sELa}k&W2ovNUAXL8g3mj z+%@h*tQu5qmTMmHe=fKyfD>3BsALJdwb#6WnH47Oj$~|;oCx~u2;&r{C@OW*)bt4| zPrsxa8=WT1M#D{5=5D}_RT>YOmR~7bh$pgB@R=;*PzQtVMnym*Vul>q;}O+IT_9r5 zlycasX?4bMu_(CkW(uAvh=1N3jX({sY3Sc|VJdQ1$WmY!f8U4U9*hQ4nz&C_2z+#B zOWmX(Gl*#$X0<*KmcO5z94hOT{7{0cAc7r#KWh992y%a;zfBBfxdRh=%4-zE2m7rg z`ip8!@ojp{hh*brvn&q)+8?T@n9W=}ap>IC&YGaAyy==~AF+e~&S+q*)N~J>%fHpJ zQ0JK60Pp$Hf2a*v1IQJm*rK99iHxju^(2-7bkT8{Czn#@NZB+~jfJ>5BrDBw(vuT9 z?9r74D8rIT>*4){l|`Rt%r9u$e~^TGg(MtVIts#|WJu_1=R>b@K6L(*=K~Zslg*Mx%b!fAlI1Xw=MG3d)R7J^GFcgHu(0 z5EZT1B5TR5KsqKY!Z3JA9&7gc>T#12&E zktm}~F~XI4ll2z}0q}&l&gG@VTA`QI z(@?tsf6WNfgkOz>@Ip+F!XC3}B0f+VAo-K=K$b=5g)1cmJ_R3n&X1g;b16yb<>e;u z@M;H56+c`uh-IQeyi)IM1F=w>h}eMAndLUn1T+SbMx3wpnH$G(vgW23z&g#%H6`3U-L>@h)>VU9iaVF+ z8=cn1zt<3I>&;;zry+*DR;4A}-o|{AQ*r>c>l;m20rgp9BQ+oG#2zo$7Ho|~gRn|7 z8WiS*K8%S5#n47%U?2^`5H%U&SVx0!TWAmggjA&gd)-7Dv_|xksLT0wA_TGczmo)U zf2$gK@H9x44rvevxuh!f^hbsWcs?by%D!?A^x+9aC?B*$gaCE}B2=vyL+fqO7-95C^BqPU{K9Lrq5Eqf5ph= z>qEtpqjj!nq5ywXgSgG6<9aMX!G+}YW9Iell-l8NG^_6Vdr2Q(+^yV@w9B?mY1Fq% zWY5vp!}-e5S7@gkYTV8BMx7Rv$w3=P0V>i;5c3cO=2V8Uk0MxXXBm!7C{9U^)tVmj z9M3x!h+V9;Xyy4DN#2E`-KZ!ze~$bCg)szrSJrT2Lv+$ufmCsCM0E-!;99tsI}7kt z0G6t#ff^g@(4E2dl7!BM#fPRRu0@Rr+9@jBMRm*k{_uN+A|_%{hTVi@%i=&)i4t|d z(&Akev7Dmvi!0s~+M3?hV4Nf{lX{g0SUq}`G%V?snkt(!z&S{|rape`e+L-6Hgy)J zWfWt%>?pvI@=i0Tni}EdCX$!lfh+0))uK`B0TWKr^vu&I$m`wUwgT|b3u+S^!7~=7 z2j-B6YmMD#C+(n96v7B;08p|8WOp+_U*V+kdBs8$ok_utZ&Tmjr!3&WxEU!M8 zpI^n%6UG9rK6sbJlnxS@MmQ$9X-xSw-INB~v|NTMjT6b>cl`3pf6vCP$VvUg5 zZaRXqnd#lGAwHWf2oDgmNhuz1JhIiCA=>|+szMLzs}s)SqTn~GlCiFp&-J!sZK%MsMDps?Ze^JC%#RH1#UiSp|(0M6|dRk zV>}4<_rxB;H(bqfe{uUq#I}_A-uXiHTzqyV{uHMg4zKF@FZN8?=lSvBQny6&9+jUp z{d49B+vm=)kH(USbZ4goj#LhA)Kjk9$85v(A;vZ=!p9!kQ0)(`DLm}!&XL5~gifV7 zf-TZ^ZAN8itd~K>-nnM*-SR?L!UWjHMPy-R&`v{!u~g}F`Efs`ILzUg1LagZ-|Za$FgdI*gk`o{ zDHA>-Omr$~p0l_WKaVuFZL~m_J$+C{N00zVK)AmQ>=}Yn^lEwjp%r_u@Gz7kY>Hkk zE#6A{25`S8x_{rmS9 z(Kr3}(#p#6@{+x^dVgUaML7~n*-)TW5AM%DL?~~Wa>Qnl1;;wvt7@_#4+OyB>msV;q6y9(zV0h zhV)+KVUg;;JbxIrcHg#l=jPral&BG}5nB|mpUyYloSY&6y!AoYYvQ3RW(G)|XsAJpF$J z)jZ!F?VS>hR^-hXjTnET@JOMh=OxMzA?lF24q^D?pMP!A*zOewG5oD#bw($x27~`k zH)55-8M9K*O}ftyi3y+=tQb+;E-vC`+p&XY1?lQYJ*14mF(NViWFNc?)q&W98`BGy z&I(BA@CaY%6X8TL3jwNF{uE;jx-~*6Jg6WZ&59dY?L#Sh!=093Y=F`tR^-gEL8CtHw;+>mM=(3QV|Hjt6XQJ zm)1y!?R3D(Ci$B}yJc}r$)J<5Q>vlqCDwwe7kOx)9#45^+{_Ve*gB~wOxh}RZ4*?6T78`zK|s3<50@qg$}#CwViO4fWuIIsQ4S`fc%R&b2p z)Su+<)D1~5lYB*ITx%v{AaMx5&qSL#Z*oe}+VKfgRY2OEYK9&u;spP*v%ffa>ZUO{ z!W6nAGY)^rczZAVJLfSATd3TKQk8>sQLUVzqPvtSdA_GS#}zVG0!PL416Y~8AXF*? zQ-3C&N!2FV)An2?jp~w$*CqCIMl&!U5QfO~dvcZp4@_9(IMc3mYdzlcYq`EoS5v-l zCr(r+f|b~26sIlY)s~vj0pfh3YAxeangARJ)$&|ilVJmjDh`z%Jqi5dQ>KPkbj+Hz)t14#wb7LN#1PZ*hiL_E<*G`nYwxU(EXUQ2SOc zb>Y?h@g^L5=xIEEq2Wzk5fIqQC^_{JLr^k4fRSf7=UsvaLq<~yTDBeYWccTPBRwjw z9T@Yakb^P7Tt`o{u(ac_iFSAVrZL)X4Bj*j->i+_Bp+&_N(sd~oa^aqQP@X4qE`qc zZwV7|!tZ{QU4}jdD>#~Mdy}AsA{Y4M*?0=_%@cl0T!`cf+(es*^zQIFg_GHa9DgqB z`jt_^@?E*gzZ*`$7~FDlym>fe&X*c{ZYMmg1iT;|S?<5UsdkFYQ;gIU3l(NdQw?I$ z&&Lce?uxHthd%6Zh2|h5cKm|QOce8L@4h`Bzq9Z{roy3h4cS63pc~OygGQD` z#>VVMS<@z!a6Q2z`$EV5x0~+}dw*kYVd7aewYPf=WT%s})58n6+_#TG!+(0Uy%jvK zrUDZlZ=9Ze{K%{TBF!Pc#@d4ePzryR^-%^0i$ z*%cZiB#))y2tRP8sy^84RjKVp*w!+I6B!mwXJg1XGE%m1aFW!GxA=H$2!D39z62$R z4S!|)S+^1%8~8glBTp|aR$KR^W=_&PLZ@B#7BUf`sQ6sqZ*^YfwoNS`#nGcV!$u7r zf*=ym8rcG1pC&DUbw%-p%L`&cKa7tK!}uY0(E3JkFAN$QDJ>L8vSP~USOCOqelsqr z_2_Sdy%%%g`kR&lS2|Nvh<}W@^u+nImSz1SjO&3lumXXwX6l5QiOB@q|b3!2#g_EX&uf#)`*%W>2=mFX87~$w+nhEmO>Rv&S@Xw zJrfY3_<^Po(lOwlYc%G&AL{cz9YlAVzs6O$r$S|c3yo|K52pwx#GBUck*9lWVG1F29G9Lcy z4*|MF*YarhG(D;2iZ)-M@?oX4G31%SKPU7oNQq4TFILC5$R+>mgWllX^rnd6=t`tN|JvzM* zABWM-=D{1MQ`K-C@lC;HO{CcTcw=I}ASp2hbb_R}gq;J&Fx!+9VKVVewRyUGy;IiL;354lL|_$u%tfvsAHh8@i?{>YeJ zSotR~M1Lr72bQOw7D0sEd+-_&WSY0>Ta68H=8#Fua#LZnE0^KlO;l5y83z4Qhx|cLCvz!9rjUV#b&M0*`6R)Qrt{pC2Yb) zz!+Rjys9*Dc;-qEvzp~bMCTu_cbkxI8GQT5@_!+UbJx^|@%Ur&`|r=s&%Zlg`tD?O z@cqKWhY!F1gFL;aFlYmLhv4@&mR=`k$6+0Q97Aa6)4N`>0$Aq78IY+@Q>4wqAX~Ji ze$euN{oxos61!@eCNBRXx5mFMIN zS$~606*>!V9fE(_Mqb~HmspL$`+cUx6)w8CpuZ*l;9SGuSyU}P7u56_{q76>h5=5` zD5&KH*(fLLaUw!#o$UJaridt$&eN8)WNA9h= zlNwx0@@qa8$-ZcUOeXIO%`2$%~7I+EjPbfPml!XO+X>2 z_%AipNdIm}ONP)i02b^94axNMk5*5h1@c}zZse)y1nAm%vq~TLMa?W^^3QoHkI&M$XGGzI~itSSi|>M2vG^2vw>F~~OivQ#8rW zM{x%vw_-~|W4!yV$EV4E-0P>3B~v)W_$H)3Ja+<8Vc#r<FBAh0; zD|uf-^&XAuZ~Jg&_OJU#S!^&?E}5*fd;>W&f9;fY0cu=1MX(d#o}ciSQnr6r9j!`! zyj&)sd=oHaCT#+31$^nv0XDqk++Y*H5hGI5ddDx=+p5}QIXV{qH~W6C&h1tPgw0C< za$h$NN}P2CPO{7WN-!EjI3%lmrU)bH!|O1 zdK$~PMZ;jdr!fbE1jok-^}GwPEwOcAJ6$fqH;dgy<15Eb)$8aNb%(DHWAXl)wFOGk zD$h|=m$;<$zkyi$iP9$J#B+MJQU|c3i=&8fkQFDY6@TxlbYX-ayYR_>K6j}lhnr|D zn{3bGS)(SszA-7G%|J)K$2<2gB``pf4HZVONoKA}t>i2Fa=_iD{x|?)JetHDUl*(D z166YxQDPug^0qMhJ$c2jcV7I0eVHQBH zK=Byz|6ek+S?GQ$XtTI~*Cbx&midFHRB49%8#1I3?~9^j81^KTLM7|aOo)`*vz(a< zjSCCiAL`-&#l8BtjD1MO>hl7%T%ZLtw@y&2>etCJ0 z2%D4hnB9^94WTxc^}jV?5r`3jE2yp8R2(G8toRo67{~n&CnE{_SDS0N^?ZMyk!2E{ zM?HrWAt1B-(x;LaGD)}~+u_nu^qF6X=|W_HHyPHBNOXeY;D0!^%mWz=c8C2c`cL^>YbTcEO3 zE{u=UMTvxsScRwKtB@v1HVpW-%S$UUFC~yB+ZB)wb{ATh6)b|m9*rEtzYdG-C07`; zmACt(64?8rwXJYWu5oLRT3h5i1Cv4dF7sBIHyJ4f6TmMw#%rR&e)3N7RU^^LR!aXZ z7(ZFg%qW9@5pkr(6Ta{RfqO{i`%Z7aC_Kw24hYOr@aFr+{+^yOPl08iAy^5b6-nVb#x!AB9l-H@|9Ex{)f9OdYTlj|*nBUm3rU-u^3Mkn#!VXO1A})D(J{GmznYQCiCgZM zE8SvGgG_uMR{QgxT7n4x5sD**Rf3grz6KWNax317(sqcmFyi~|*h zV-izF@DogJoCxgu?X)OzMoS%k0iUDlzdDq4Mk9!hn~Wf)`5r!G70&pIH(|AgM>cxb zD4s&QZL7vLit44br9cnZz3~N&TPu>{jv9PMDtv0Qt#3BD*9`Q9A-|;r`QhL#MG&Z1J+@>4 zrcN*{DUK6&8F{W)Y&q zlq@6BM2`mi@Sh^|!=RP{$8R~7qC{f;`Ln08BV=&&c8mO+K-tr{F!E{&n~j%=q%&wa zdHD;8Hi=WY7yki(q{BJ@i8_X-D$)cWifjU&cCTjO>QLa$IAjJY==4M?N^b4LXYq&k zeh^C%=4!>Ez-B3bq-%gZ8*!a;LoP7;6DD%+*WRZc3A-nxQRGBm>9-H7weL(oM4_aR zk_PDQu9w8*yev3fk>V?PRa?Wc)BI$VXpZ5gaf~E3kOu4+H-&U&b|xA_y@JdA22E{Q z(uM7=GmYzZB;jcWtKcQvLe4Ev9ufXS+(m&imR|t&4QW7sqG@Xe>7w|9QdY?ykLHdR zMB*6PcJAXPF!TLRpfKHx>jl$I*#o|)<1a$~LoUiwipO~wwV#iE2Bk6(!I!nhUV zgcj0j)EC!(CROq#=Z8ngy~a)O} zIpM(@QTW4GYYMuE=#ugijmjpr2a4iiL)6|3+{Z`f(!pD1Ug!pAw5zIE8pU;H_=G& z`g{l50s70uFS#XxbV;Ge#R@rv*0E!|t!ho{-(q*)V&RM&Qi>F10xQ(=c@3G9=gFg7 zCfYB4zE|bqK2=)*5q%vpq&1HjE-asGm=^4R&iFnN<0fzDb2LEe+YyZ0yI4y6X=6?M z!$x;lhIhb>y@vMy-$LNDly;8m9nS@`VHwCW?o)R~kB4dS{n9PK^`bI#Qp;$-cRlJx zqog0ey;xN>bMZ?4Tv$miVLXQjV`C|y$|+9h{tjJ#)*)bF9{4akKpGo07)K`O3sD4r zNcA*wjw^8Rq}o(hnnce@l&Tg7kMo-#*hO(cvKyC#He|8h)3Mq>lxku2ZrsVl_eI&S zuWsM^fIDf-rU}>HI7Xi0fBJPuZU7lQ6x}$;3_QFz*R*c2KBie%r&~iosLUQ~};fl8_ zeLo)mGKa2d-8AxfH1LACs=H1;?;uE|I78X>5}5a8-Y)dtk~(_kooW9<74O!#+F*(( zymKOL4k^QEmz1ozy_EgX6vHWh{~S?#)37D~*6%+1MLc-@G*U*2C~D09Ko25p5F%p( zwjE?WK}sQl>q503lh~ace`+KXblJIJC?rO+E@$>cON1i#8_W_4Z;)1HLSh==fN|;M z4_Gm1$Tyna$Lw{;x_!>PO-!4bq7Ijgu)vcCdw5wAi$9V7h%h_NKj+kjFjR5Z=S*v>$XuuT(D(;ZG&Dsn`1^RC{ZD# zT1`0PNwrI{_$NMCe`pkYaDp|9UFV54OQib!0W3CY3=Ww&L>r5(|I9dm)bAY!QRNSz z#*jYNGh4uvNX+XN+irPU#qfInKKdM2%S=jS=x*zz=ZWaGI1b5FqE@Gxk=%bC!-%g= z-{1-8gZS-xpDt@p#bUope0$%93yKOG?i0vdI~jhm;Y*V?f1J(iY~>q`;pZ8o5$t5| zMul|nufX?keAL}(N8e)qY)?c5c%hCw{9Bkm9H&(o7rYexW%w}ij`P}2#>|0OEHpB{gv|;RQU;nO3 z>54t=vBkeLf0)-htG7R*vFkR@aIKJdTRS4tS*c-_ec0C!k;Js zJhidG8pZ@V_!f9&TinDJx7!b=x7)SeR+JFN(>CZ|J@@dVJIj=#+armG@lKr_;AMsf zH7=e(BzB1mLN_2w_>SONTl3Ua@S z@E~(dlh0r?xulPt&CX{3#Hwu~JzMMTn^Q|nA~>PL>`oS(YBwLTstypVUW0?N znR3ilLxV8xxXsuiX**6H=gNNTw|o6IL>D2SGQ>m=rzHwnp^jL_3EAT04cY^b?i?&- zmC&ADJl(1s>?Da8Alcg9Kj(cY&f1g?#tn6CAf)G~4=i(eAq(A2*2ZoA1yh(>dt_7R)q%wX?9=e?d3^ zw(0sOr5k$zgpAXx5nW&F}T`Lp;fTLBpy4rU$w+*WAl3$0K+`+JJ z3__}(=%9hJ<%~1j2^Uwy;n|5Je^7p|+FS20D`I;caK!U6zuS{pGOg=dU?at-(w12| zR=K_okbH#>5LtnAfC!1=2Kd7x^s3#ncDFtF+-mOj`d={TP@oQ^@Te_NH3drY$x~uV zi(>edUG5EV9~GD#Ox+EGx$K_I&dxu13S)P3Dd^`H8w7=Eaig1?ePMwae*|J@HHv|@ zXKR=ypUIF{aF?}!-Fb1*v=iij1KY9s4}B7YnIW9_dY8jDjcybAx1G7l*V)8|LMP){ z+S@y3__Q!XdNR(#`-=060%}tjCRZ1I2ANc3dTwF%#jeqm%lVVJ=`RwYYb~F9@nV^V z6V!<=zob9LKHV;m>*9Z|e~G3To3$%v2)Gymo4NVfm%EGjxAycof8pO668%Ua{?wo; zk>B`Jd(wJ>pZK?itUyv3e^BG+*`Ic{D!T}lMNt~s#ZEA!_K&WTV{z|VrDqcWWHNv9 z1i2td6uK-w0dxx(6_{?ZfQmIPLC7&+iPIE;zBvhTJ>5aPFOX!#e~?p@)06gxayl6f zfRbeaU`z^>87!58Z!oD{REffaim5oN8HU2I)7suZ0_xIgvNNinnOHUld|(`i$x=-{ z;XOu}VJb**3bKUAMOba_AhST0y2R@8`=&f1=!={}pnu&rowUh{rdq?w8jc+>rR7hY zGwVkGD2!uBs#3ILf8jKOnicVJy;ltkYd!W<9w3TO9~^FD!LiSE=fs6k!KoYJ>;lbV zoFhe1X6{*r*mlOCacVYlu@G}Gi(P=Dd9ac3&+dqpxTAD&~GC{XjZFf9~eK(gAw=g8+?^zD36@ zGEXyDSA!8%rr-i1C2R7-UA>wlzZ9<~>Jj0-$8!gA%q14M`}V~2ink{}7@LROH2(A^ z7uTd)wRn}miYj2AxW^PjG%hG z5|G4-2o4-Ke_#}Dv{$}=9nQB##5w^e-gVp=Ox`HX^RB~W&fdzN%$f}vZ+5}4#$U)J z5c4mgvctgXmU|6m^~<^UXooZKm-7f$8K%T_k!+1I6zN{fdU`gwS{%}vmIyC}YX@N8 z*^(HKp2ialc9O4jCuoqI-YEEytLLst*qj$MTexxx-I9 zz3AZVoeF%P%6CPZ4)LchBu|-8I9r1owT;!gQ5SUOPW;E6ij`zoQV_wX6g!+s-X6b! zsxSm)jD78=vIj^UAbAi81THBjdf1;$gSB8A`!Duq-M!Jry&-3JfA+ACc)A!vn{x9` ztAUi{f0093QXVW}siC9UGA)$@Vd;uHL+@MU z9K_X#es{Rgm+kyP7d_}&zdoVR<}HO2CmV_9f4EN~mLy)$1;QrIaTEJa%47r?^sT`d z*QZ}u!l|dsUip>nHdOvb=198AU#IAFj)jnWwvibe6b;1M!%gyn!Be2J=O$hpm@ zWC~L7NbVtubMTw;cMd+m`UBWrT7h8=ss~Z~ChROw5SuQ-NF=tnXX}aJzGy_k8X9s0 ze{bXmBu#}j)hxW&lDhbtY2Mpy#BC9NIhduu^d!zs`+gfQA>)Jzq}bNOn93qpz21i5 zF!C!%+5yzT(taH}+nzB}4rK)gUmAqN^l{-+OANc2SUQaZ^QmQNQ+x%lL-zq_^!mS! z#=?kMz8=ODQg9-yUa+#DFF&-ix`#3(fA|;s^*Hkg8e*HXZX7pE1YK5Q$z%gpc$lmxpP+s|%O>xf+(z3F()Zq=ePsL#>9g8626T@JtH#e=fq5 z1#GhebSX~PuMkoO_)y^Nb-#BmD<2=Ko13e#0}0pVSem~~s=E+i5@KM7FQ(r2#UbDd zp-r*vKQjGeAXd(K$*rf7q9utl5V0mG3fEO+ z&}FQo6Zk|4yxXSwMLzfiy86`E4^+p9ZH=tyZdl_oBOogZ#ny^KG32e3 zn+!=zgHX)fVM3KgOR*c#Oes}8Ph%6ec!{)Z*pBE{^sb69-_Any-46CHeujh77@}t8jtDDK$5|se_o~$D!JP3O z*XON+a1EL!9&w4pJu22H8m4EpzY?^aa6x?gLx_mvQcd%TNJ_la*;?6MfZ)&m5_gI! zpXx0~rV)BYVWpx06-E&8f3A^3JeSH<;%_*REByE>3vm#|XK?~dfyv+`3eC)Z%902n zbr&o0)u(t5oJd-CpA~&H(R34|uR*$%gh$eWdv;3T|4t5=+(yiq7|mH=O=2U5vE-aT z!r2IU7Q)OH^zMJGlG%Lf7K7O&q&+2;k+UW+Zmr=e?|y})F&3S%pk4&Q7v6hAHzf7X@@Ls`=!7JVfkHNxV0Ehg8wz)|(Yr}=2ZD~nIve;u$lB6S)`dSv6rCky2+ z0q@<$;@>ecq!TqgDzLHqqyV8HT475>rs2TaH4eqy-iUN?3MMDtmv8+1@|2oiu($3; zkoZ;%XdRMkgNRMl-;;2}6W)Vfm&I*S*rUm$Co+m=AkfOt!rCHfa*fv={XYkLXG?dI zdQt`p1;zGwrX;Ai@Sz;gq#wMHtgT~7g8fjZAumIM_>}$oO zanjm&e^#a{!I*+I?UjL=F3)nY4@r}WB{ETkE>UEN6}u9TFB7b;exVvUVoP9cw1n1d z5m3VIq~jyZlM^Vl7;#{T;29AX^*Ai*v7d==4=o%gi|Rd#*^Owd1yL5GOZ?Vj$XXvc zg5g6ZhnJX8k?|#*ckMMY@<3tX^18(m;FH4Lf7ka4j>vFk!yAW#eX{@oeKN!>m4wl+ z)gzwqOmkJf2G&jtXrQgIs}Jl&r zN>DX)avZe2OqBb0eh6L2OVLwbY%H4Ir*^O*hEfIKaf3zmqxyM0M<9u)sP%DH{d=jmz^Il0Mha}3P z4Kl0F{)p=Yx{~9E)WbKmWidK+IJo7#E2eGLQyYavE%57-(=g`PVNNvgOwsCq;TD1v(gJq_u*PyWe>fXN zd@+~pI{04TbBHB1_XH7)k%L6ezgDGyGQ?GU`uy2n;Ud%Gu^U3D4+TWC^{pDr(_Lcs zG%Ke=9+Cp_!0G&pX+13;;-JIL!1)&aoqD4*g93DY z&UbJ>mbHiN_xWTr40Vcq_GcbEf6xlSGSbi?@bIKCXsOUx%}9x{=*$Rq@OYk949J6o zH7$N`F2#}0uzR+itw8+=UrYSsee15Df95^}hi}9qu~=Eo*+R5Z3>C;#6Fb88Mp#IU zZOvkD$@FGr%Mq&doAmR~wyVnZ7CpWYB>3r#|G2f0CrOms?5@3LqOO@^e=z(A-jnY` zC3k$$7%|zGgs7%B3etKKU@)LBFr{G&a6`caXdU6G60joCM8f?Q#L4~q@7wp*V3n2o zs~~c6{zp`WQ}9Wza8vsHT<6{#!=0k0J#Kp?_^JYr9$evPRaNS9T3FH2-Ec#x1#%2d!UWvfpg< z5%LfE3%f_GuQ5#p6&Uvi-w$Tu z*68O>nl=68hTfD(k_dNCNzxtK%VIA5{HxFu@j(L0v3cO^IDAt$MLrt*=L9?vQ%11X z-RA%T7-!g8xM~% zPJXXFr@Z%;)CpO+_X_Q!%~+f8j?(ipW&a9ntmCC>e3d zr|C>mz=RqR`9}*t`<{7zMIz!x$`j)sK;T7$;KXwjjy{KJxoHCR>z!bskPN=Ik*qC* zgiXb5K~5J5-XKSa(!+!pUFL&M^{S>T7wck~m**|<`Bkq1yQGtc)7TB#LEx2Y_#n7T zvfUIs1Q{3!f6}tg@NjHOeRUUfRxdtE0;4jBbqj>K9F6>jWKHa3>@OXVp}qH3CJdbJ zwYXy85hpP!L?Lt45MyP|FD)=J&Njr6_R^S6$(yOBD;~G|<(P$QwGRS92qpTmyF4N!9#gG_Tf`^i5L%Pyt%y5AGl31cYCvgB>m&Y&*p0i%i9RgVit7KPkQ$NxbNIPEkZGM} z^7Bh;gp+QwB7dAkuaXGb;MQ1{#N?Kel%$lRnCDFDM8UYVToO#$++xMKlqm6LLo38A z4=bRWS$TGRzC5In&?EVe$%eSpP6Z5Wt7r$J*cxKf@2MjQ()zt&PXKnRG6mC)DdZ6! zsAH%T97dmmNmRpa&(gg~zorY~kZ+ zqfC!Gv)|*dgtu@fzTPrOk{XC=T8>}P z5zm|o$cal$bne}A6sBTHE<7;X5RQKtlAWH6@r%s$in zCBT|D;8tv#y#}SYe7s%w_=$d8{B(Q5rw4^kf0_L0!Guri{?oM))1&JoohUb5Ixi;l zB3UnJcKE@T@EFT8R|t-~%QgEYE&I$eAd#eSPYR!=g0l8x(=UhRN2Cth>1TC7H-_%O?)2xH57|CM2oMUdxH(ne;0Sl5YP&CiF= z;!)JYE}@+Wk6pXKf{@+Z#y#x#u=;WPKcji2D()EAdhs(^o2M>G2Vg$P0$fS$@W^no z5IsHvZ#>L|;YM8bG)k3WSP`YLK}`>Gj(>QcTmkV=!Z&FFWJzJzXa0huu+tMMMi(TV zIm#t5s8W)`X{?NdF+-e~+;Ag|?)foS5&bwevr1Yprp^zH4-wTcW{Rcd!FMxX9!S6j zDNP-?_-Y#3Jbi~bcRzKUbyzazsObDsGW~;0h)ZMV>##UUL8_-q=IHFvl5ue3l7GRs z0ky;SS-aK$4Jf|-&Cy!p_DGP>$79{e?al+V2@oIg}UCtzRxbf)2nPT#!%6LGKq&aU6$W+qn)-c~`OD!DiyhFKA<^9wA8y zZjt7GAZ>lBm@z9yMn;e9Z6^fDfwXWe&ld$S1w{z0)_j^zii_fJ3cTQ5q#2EW{gz!Sep1Ku88F17zG%%ES3e z>K(D4i7p&|R3T1D1j$#?C4cFn3Aq8R=>V2F0Eq5A!+_DMEWyjpoEX;%PC$zmP%)N{ z5VD=OC+I(NFYXnb@8A8zR_9A@oJ8k}Bdu>r{@3;i4{T74Rj#<+z zM&-3&Sb*gN#_b{IY)eidjF^Ia?WK6g!PK z=VEtEkV8T-1hi)7!5Uvb)!QuT|I*?uCj)SWky*7`zD^!M$OSlIlOMSjXt>`y(px%O z-fsf--(TL#E?^bc|M38~W%IJr@|S-h_miEu8ZBZg zAz871qb;#-ib|fl7A#hOUdH*s{WdMIGkwv+zD&FIFOhQ!2bV5U;c+vQYZ%2nR+KOm87D=9dz$Bm+qb>-6NL@^Q7j47;%=93-soXPZmCdI$P?I{*~#br?^k&LlHYt z$rKrvMM4<2j}sHli5InZpN`glh$cp3YqXC=F02uqQw0=ki6ms7j12op7c|qW0Px7a zD>dQPM!vi~=p_hZf+3vR!6o@5HB#*N1GTst?}D^q%>O{EXi+KFXl8kG1IA2DDb)?b zhdW3jH(21c)K@><6{YIMt`Nd3vvG*irHbVts0|(xc%)#tkg$xv1Qc>zo4p&ymX6GX zS*tFCHVz9%I1RxPZcza3VG5P6<|}c9+P0ZGJk#KnPGI=UVjPjubm#U zlf3-s?bhZyz$~Sg?K8yGFF)#6AN}R%P&&7+kN(1OF<^p^v%`1^E=&aiCO9a9ku4LM z_s_+Tj6WPq{W{N}5@gl(3#17=u&N823>}qW5r__wu(4_KnqVuICa>YLsS4j#>ES~p zfjLDI7>KW35`P$k2oVTAg}1;)_BU7vshisJR(^dsAU)q{Gmml?d;1%2ESfW|P;N4) z9iE+Jd*|7&^BM5q*)Ut(IJ(V#MJ{^mc~i{Se;vJnJ^LE(xbA7IwhQq+IPH$$N+kV; zIATElwLJHH=E=-lIa9(8vI|iCkVL%0e$>i(X*PT3Wq&Z{7*^E8uO~C%$v1~m`#G^e zyq-|(t7?qTxRyozr1Yc@`O2GK?~9-;rF+JTUy0T2Z-_p6M}>NefHqzsGXF`6?rKn8 z78^qr3V|XOo%Ma8lXax!M)YaqYb`VE973elTW7U9!>4kq<30X$BpaV_0iG{@zyzYf z3`lssIDcELv^EKFuo-u}y1Ds%YitmM*FBCJ(Xrg3*gPi};%fEFWHpji0$FPl*SV>b z3gR>^VZUP0u3@{4C-vly9S(`uMoMvb4N?{Ay)qdvkMr z>v(m2^Vg;I<2Rd|e>*;YQNFb6yFSYAuPXSXK7Zo%*&dLRM3gf;4lXaqk_}|U;$G6~ zjE>k(71~ z;-2r5u9W72Q3pN1rQ|VtwYedZ*dp<9mw$(Koa)twuJY_|Q6y>1x=z*h#VMC2*vBu1 z_`Z}TV-%aBIHTGGlCSE_@3^rlNWKFDKp!6gF8iPcJ)uveB$k_Zq9sVrWcD3IAlVvq zPm{Sjl^z3uNi`#3C;3-QfyKNZe!&44i;sI5mu1rA7!12+CqePkSw>egYQ#Y-(tn2< zfvwVhcyXxzH35B%fDU$I$LK`ooN^zK<3j*Bbj&3`}p>oJn^v_v3*q z6c6S1^dwFu`n`IG(ET1kUizJS8h`LcOsFH96^M20FpkN<{w$bb3AIHNYI(DkB|!tl zlg`#BKwBKjZvw{(?~{bzawD)|U=Y#E$;`J_4Z<#R&rEDc6|Ickp!7s26H5XzAXOW` z)n(gKn-Ur%jC!BZjG2JMOnTKB-{)_?rFv;-=P zOyl>RAPqaF@D`)`eaB(iFB?=kk`7q-eFt$Ed{wZ<>Z{3{;Cjww@$yj zT3(qN%O(ATA66jMRCiveR8j#lr4%+Z1{Myp%a<_q=vkI#Gg_K|+R|)>r5P=3a!FXT zlXL0ZwtPXHoj^2nqK6ExVt-`ZiJ$ONx_z*fv$yORjL>bi91UVv*Fh}%K^&hfEMpLv zU0cv501|yNx8swne0FWH1IxW7(n}?B}^#S6*GLvfd9=L$mFy>-(OK`+gPo-FBCH5Lyp=Tf&`ZgS=9y<}U?I zhNX*GU~%iV^CEocTGAag4cx_T6?^YDsZqJe5F=1qTorvbLILL&?#jUa?Y)@yevG!< zS9t~b4&(;VV_zF#H-ArQOLuc~z5xEMw2rF>x>K#cg$BhSYxAs9&db@lppz|N4VW4j zFE17Aam58z%--g8skgXStIJm}-$KR15kii-7S-KCTaV^K1TJmyecr@_+f;tgU$)(e`nERdMaW zr>=pxWDC;H@$Gv4_R*XvY1d!u`O~%c`kKFIg@3i_%;2&bRxaFCL%1W|toO!8#}Adr?3dbuQo9Re&~DaB53Vn6Kf3k5 z%J*!Mrr^B52Cu%?Aet$(H)4AVu@{d3oR6-g!Bw{g>jE7!=Z$Ym5<9~|2rIq2JO{rC zW|S8pNE%=7j$!mJG((WoDU8E?%Hga(%F7F-jmEcW6n|hy{+$d3vLRgIIs#w^&f6E> z+ppFc>sO0Izpvz3y0ur*Eo2~{wbQQaREqBHk~PLUWMSxz!W`*Lilr+x9U5qF2T=hG zlKq;$rXy=Byj1BQkOBCe`-WuI$3|u4VPGp-AY*fV414dlmlYjD+AD+oJRDwZb~}u+ zq~E=<0)OyftGKH`m@}8PzT1*Vd4mgWC{{WWsokxGFVi}vD0BvqMwEmX!SHl36k?R? zy|0kuK|YGSHx6P&T-xbb+s%MBn{8 zV8lKghZB2&EzzYO03B>$)5n&>y-1eB6&98wYJWzSWJ&|A$cGdp+eWz-x!EX=XWeOh z8>_aCvbc_9x-C|E$HISMW!yl=R>r;H$~Zg~Wgr7$<LnXTz@$(v;S^r!!V>8*2WNa;hZ` zoT~s`K%&3HI~d~LW(o3fw2O$orH!?1R}60`lw%3`f=#TiEw8-WTA4X-mdMomddIgnVbdZh!}7+0~U zj4SO7$PJgyHE|vu`VBOzl=5T}b%lc#H za?pP_LCV-G2%>Io$_ClxNW%~M$Yxw>e2IQrTZ?iPS zOp$l7RVjalKm`nzwA4gPVNqz}f0;J}$p2@#y3ornm3VB{V5TI58bVe3Gt+y7T8|tW z0T=7B$DsD@pfZS!6uLTv-BWCZTQ4D`Ktz8@sub?u$9}7W@%+(}i;qi(aAh)T zz$l=Nt6KtW5zbWh@!-0kh#P?A568P(uMD$R*3G~#1|zF(1(qms))~Wp3el(eSDAF1 zRfp_sbRjB+iM@C*CD+Onjdn}|sk|s<^RWFe#uP`fi*E&aOlZ z+f)!0m8$1zDu}8aLGwJ)wnSrlyQ5<>D^kE-t)svuW~3c48E-eg)nFYN3`kb_5!g5t zy7;d>n7gHkHoSwj+W5+g((;aoDWKg=4aPtqYFpS4J2aYnEkn0_4L z=%5k?(TPv|(4TnFdu1RC=SYXvXiI;y$k*r&MIg6WUL4l&?<1I7;v9xysIFu&9~g>E00SMO_l#^eipYgE}ix4B=1vGp7FO1dhg_w|2uI;NLcgM{oB=vUFY;RTj(y?V>J?d8|F^h>%n;ri&^QZ-$2 z-Gvt&+{_IKlsh=Rtu9vx0M;D4^2$r@!Y%c{ouPe#+yD=7utQ(Cw6%p6K+P>eo7o4% z0A$_XRbKC82UVbkt4xG(ZL{HKzn6)y9OI>;(iIzbzU&7K#lL;l5SQ*EgEa4XT1@QKNv}$zGik?Ni=>1* z$_c4dQ0in&>MbKW4HZ1O2}%!U??VA&u@$o2h;q6f9&wKkTcp3cNBI!y5opJ{O@n_7 z2AG5%5_U~}SmZsW&AH8uQ^d9x4+nUER686<%Rnj^QP(UdFb*=G=+vPEU2dW6&Knn% zX8wP&DeDCO5Dhhtq7PwV#Fg?Npe6T>a4hMewPx^8!xH)B0dC{+%nZONR><&Sqd+Qi zn*o#v>&#z^_IKLe)INhZoC*6b-FEYrT@P9U$>0!vpb}VK0!E__T~+Py!`Erinw{43 zCt0ta&u9HQ6nIVi13tQrEJ4}(oxFo7az1}QMN$s{r7&)el?Yo6blUPpq`Jr_C?xXy&4xrJWJ^Vya@;2RgD((E`)cc(Za#CZf&h~ zRK2Wkzg}yifjD;u7AxW?aV|WRIQV<`5W_WD0VHPho9&M(m2TEXPmBjOJZwX!*ExT5 z-%igRO%D&<=Xe6q7BVHc5id|C{u9?DKjoWm`iA^biLhhoxN~Sj9aYd z#2($l9c5>GP@3L2 zM=T$+Btdt4uC+5yE%BNdNKGxk72$sVihgSw^-8e{%a3S^s$ z;ZsLkG$PNN0|mfwAq4sMTo($qAIaLlWj8CMvIq+=SN0})#P`Dg2@|l)YN~?zkd8F6MO{7hRh%U${>Y{1|MnXQUjBT&K-Ya zlw=?42|dsOk@d9=!r?^3%(Pi6H6ZgxJay1fu*#N7(LF~~0ci;zp0rLImkc-pQtQLV zpFVs9`GKuCrGQNVoIyKgy5dnvZ|_@RQxyq4XapW&?5A;fD`1 zKRx=#gX`OyO7-x=(Ghp=!-oeC<4PYM*D88vRVyDBtBa^p0ksY)B!7upKEezFro9+U z;eM*3n5>Cwd9iZ%j}IRnqoKuet^C+OQKsW>j%1S;Cv<>vwAX%w8`3~SeqeuP7R!~H zpQ;bgc4e`KrYkd#syFz{vTCihh;J~v$3LM)hgb%@S%*DqE!fFHxD3~$1*k`8| z9FLFNfEF_TF|42VEL2_EJC_s4 z7e=M#rN|f>rIQ9&j22Wi;3-gNNh_}zLq1BF;=7!zPFNb6H9o|5%djEi)jBzkm$G-kbKvS&tIOIfdJd_Yw$j8%|O=%buM$yL9HbP zJboAlDMnWj-*^bcL5_cx@b`@%uh0>ETyAs;lg8};qW(f~{Y!*Tfiwx2-Aj6TmEdD? zN;}^sQ0lNZLr4Q+MFD{Oa7>{CD)eZkO^ zT~2V_xb4-Y>u{!_6iDtbs6-wYsw zzggM6#!o#9W$=FnA{qUGhM-H4hW;~ci03G7MjMt!^yeK-xB-L)^uitJrGq;sj6w=X z>j~o-$}^Dzm{E7Nm$x)(G@Chy_CYWsP*g#s44tyB_eG93;aH35*#)ReJH8857|VTb zpADhQIGBbpYBaEm=pO0i2T&3%4i68GSXvNJ%~UgNO!A(}9au2(Z>WOXmQ6Q>F+S)EyBmfZ<2GP7M^tXqwcZ5GH-XN{ zR;BtB)V8u~(Ca~Nn92*@rw}X?5uK#;OBGSRD#KNJxE{&g48h`Hnj!qL;d) z8oVn;Rv~{$vU{~H@lXQ4;$OR<3wU|bgQmE_bPi?Mq&MJfTGGH8TUYrZbXr^60M_5$ z%fCz8%Wv@a)yn$H_DcC^!O{X(wjk~1C);&=vbuu0II3G$p~7}uD~wL^KTPLhp;*+; zbzy`!gYetyG)APvRF@<)cfTwjzTds$!}mxeGWmZ)(c$RV^{cV35k+m=2VTPJkaevt z)UVRksCx|6w6UG~_)sv-jmAZFVW*yc|GFiPhy(p{eZrSAiS@!~OJ5sp*f2@dj@}*L zoc7Xh-ZlPce-br>et0r}$A>5L>4#2xp`Y!ajxQCK6Ng$o3xz*LC@QiC1Hah1diw|u z6SsdXue8}s#0{D_noVX6EPkU3#BdJQNS}DoJ&XrLYYfDDfQ0#38C0m~YN~S6f<#3D zxFTwejBBz`KqAa8y-@ggNkO-g%fLNE!q+rtF|w?y%ZZRNkox=qD;huUQ((1grPN|3 z)Tpe+ZGJId7%h47fft^6z5sZd^E^?VOTCdP_Ju7kr9$zV_B zO)MPh{=FIM#!Kk6SpUv4X2ssUzEN<>m#e(I4~l5;SvU$BqrqrcRvNUql5672%T`v- z&gczV&4ly#imdOXcX%YMKe81PWE8S|afWW<)(Qavg>)%yonXc`;-|=q^#)oTT1S7e zsm}5~7KtDc19_(a3Hzsk7+zd~?MUs41|&f*MQfUPiS3MXs{bCOf<#J2GD0AN0KLNq zdRvpA*B#;_Xk$W=by@p1C#*o&S)hzT6w=V6p&!F38H}S}2`sxPS{pt}p16c)KNd5q zQfY!Pz!_FK6F5&_JNp7{J*?nd(Efjr)zL05h~nLSSG`6)wI0<)7G;eqbDo2=Y-TcK zp_L(G&f3|f7iIFyagJO`pXSIP%JV?vL_eLNmd6x&pGYW)xK(UgNCXhRPG_s!O|=3Q zk(rsmj4i{rIOG^j=Sb!DU+=mR0s*cn1|h(Udo`no*^}fCAG*d?G>}>4YkhwP4m)H# z`p!WI6m)D&_K7e`KzA@P0m#9*Cem}?Avk4|EW(N`$SjKZ&)fL8K8iq@!X2Pe;I2IZ z?r5kK<2i=m6L=GTBHHve5Gls(_c}X-=$=Jb`4H14RW7^|o+Ns&1@Nwg53W;vXL zfB)7AhZWip!A{U4-*akl#f*QgUN3JPIt@B@2&N3ZMQFF&=1~10&$h(WE}SPtB0E*3 zLyw9v)fx!k)pJN`Ra7qG-`}qwKAt+bxv3ZBrbz)gu#ZIc4mm?|G=Q+D*#PF&)fl`i z!3ssL0b$CcMg8y*HYr0>zLqMg%B%?t)t=xY#?nzu7kkG=k zg&Z~pY4WIZP`o0qC425JAdC;8uKQWs+Sgw9FTg2Wd2r*SbLj6JSB~qMPqNXm{#dy5 zF11iL^O^tn4-+Cp0$FQ+!i*?dC>9$6!USp`S?lpnA5jxhGC_G4dR|6?B^6oJ@3H0} z5Q}L4F}TeN{JQEM3SfVF7<&e7#ViW-Iv;m=3tNZ}E-9ztZg?C37Jc|=o9kb^gm47g z9Ph8LRpzT;zjfVxV{S+)6F+IeR4JG!&@xw?vMBiu@=B>c{0zAHimli40zoB=hg5J9 zSuX$%upfHKgl~C;lB&R(pHoy1(DLuN4}PJj06-U?fZ(8}*5iNv;iDTo<_mex1*Mpy zysq)8M)`%@+^ab(h!Z=Sy?m8BcdmDk+rRUK@f;Jv?TJnJ>b;dr8d>+6nZUHGnc@^I z+h`-FS|{X03_rav2$z~eJYroG@bn%?eq7x^1XoI9ikX=+z_7*l`-$ZX6Tjty(zEhY z44=v+tQQ(Ivq^t6dw4abrL+*8-m`0REiVZFPQ6a!YUHbAA7S#WgKjktPEw8_VCi3) zLbHd-d&83k=zSe94}c$4iiK!;1Nc;A!B1Xn%DrBC{8AylA;N0f^FVYCXg0%Gd@*38 zB$XZFyK?LNVmK-TWRX(ZyUG1tuUsJovdHV|`O8!ni>rU3ZmPgRZR}MuBgCtwHc`w% zV`xr;j%$DwW5F0M!Ybk7357*{Zg|5-LwM(ZqBjvVPU=y0ytkxWc7WN z&@v(oS_FUocjBE}*ks0{p4*Q#7-|JWU16gaI|yYr7yu+{1#$}R#W3}l^ns-H*YQIy z(f@RUF!cyk=l(Cv&OEC^c1h)Tlh;74j1t&Wl`~TJpKx-zh=$w|<{9ims5XD`t@QNb z+r)Yr%-aWQNPO$dGBTVg20jvuE?iHyX*Fj09JKzMh0UmCt)BB3^J>DIUhnX&vTLO%< z48(r}k=+k{E1lbG`IMI!C|VtXVocgx{mU!*dEPD0d&G=@7KRG*r3*$;Rm`dpRwga% z=O=!MaE|T{x8!HJjVMm-Q=S^SQjDG6@&&v$-FNL<=sy&iVRtNIh`@HaFY0xTS(}~J z^Hcb$V=KPFHn=$epW*Sgx={Bo#r+9v8GL_)pkKj9A=6PFumm_JXB*yci7}=tj~_Ex zbrj0qTjV_>2SDBa#600aAbf2f-uH%fCa{Etohww8V$qH9?JRIi1G!_e<*xHuD}-!JA+*99qHm;|9fvrWfFQPzKn z83xaxRD}9kv~_x01I3VG)Q2Ee3*bzY_8FY%@LUcOu+oLU%S1=! z)?W-QW^)--J20L!@;PK7iY#4W{zPRX)C&?J1#Twe6!>@}aSU{|bBA|l4x%Y$-rN|( zX4pj{b&i;fmL?XY@Q!*30hXHsK@<>;ekN^i#x|RYE8;m`!ZAk8F`AEm(N-B<*qB&QlSUbY?<3Fah+G#NayOprcC5glP@3s|QMw+LimxoLh92N*I|b)-;_ zI5PxmMnyQt!6SxYEhf-mkqhvdD@+gcmwE-lEp)mRF;3L(`UBGWeIl; zKJsH>TRwVD%1A2+VZd!F(_~254pK=sPJ%meCbKq$syKX{V+>Y!|3<6Zv{TUU(V0{I z6T%9g6AUxN*KsSi?hP9k*Yi>B0{^boTsNMMKxq*hjnz?d#D8m($CrhY+Irp`!)>p? z)G406RBKp=zMU?w=@ox@dx;(o+9^#khv%VnFZW4GQJhUc$! zo{CA=I)&*GndEOR_(Lgya1aK01qNy2JQJN|I#sA8ZlSS(!p5={c)b65KTug@w{D#b zN=3Zn$wgB|eYx4@z))zb#YAR91j&8;SfVD_8w~t$tNWOdSss6D(ctk#`}7L{cDiAa z6=EZv&ATN2(S-`+JIrL5iMz(~U7x-W0n+dI^z}V@hVOj(R+dXYm1b~Vnjv#*06Y8i zK8y4RXwQ5cfIc!^Y4T1YLk|LVCsGo@p5>sx>R)!-h(}NYHCo1X5gLjH7J0K{kX~lL zhG;FJ7P)JY?stDDY1THGqcz9E`mfEq6_bqHv{J7RjOf`K95;-Zh4VvlyLJy-k+COL zh{5N8qQ-Rp1L)mnpw3$QN&JjA7zr@>Ws0vNc?H>}Qzw!sHOZ?Y=IEodjEW~ZZN>CwcF8{$(UsOAGVbM-9 z?84t-qZ_KU&iOmmq2(7Yt0fcHzog_?U{{3yxSbpfLsA^n1Xw_?{V*I34R@q3 zpr%BEnsk3g-dXKyzj2{#xbKT+z%>N6JW8^P74W)X4O zk|`GLV`4>MH222DSva78$`V?^2DE}OyKtt5QAmFxCUBzhp~XfBGCu@)2~xjHZ?}8S zUkYajy2_OOUF2T+M^bQ97_GThz`nUj7d;ofElsjIE_Ph?-CN(TW9@TH#0Z{_QxzgF z19b-*bKe<`6J+2jzyJU2ooRa$NA~F7&!-T2xE|@!7FxW@QGCPV1cD90;4nB`BU^2( zNS1#*TEOdfzrRyUZ&fV|XOcr%s){%ql56h`w*&{#9FSQYNI-28e5e zm^Hmfa4I_RDgP;}N$eONX~Q!irndcnWIgIdgf`mX7U{w-bcG8cOVK9!flU+@No*K|W=nq?upU1qbqORn={Ta2nIJP-Z|XQa5k-=X zW3}$m{lLVjDKYXhY0|ikr`xdu#>>L^KWG=xeaUMQbd~r*RyUowI@Z34KZLj)RMDO9l|D8I>Q zrzZUTl6;J6Ms&HRLOLi$l)BiuCkV`O{YPI{U#5_#{oU8q*7xef)ejQY@7;q3J0$@3 zM@iGvmpcN@FJ!E~`KdhB`JEue|IUUE>nUor8#zc(F-q45TuDQcGB{1usamdMt@?G;OgSJGJ(c00bk;5TUA4NHW1XCN(o-3I z#bJ7X4kQVR`l1|8)`#kw^4|{B{W}j~l)8f=r+h3|5+8cE1ftaH zf*4kRt2Wm4wZd?T0gmo{A`{jre%peM_Eq;3!;@#^A%FFzeFP*ViL%oAxBt{9T*rZd ze6=vUz8>a5Q<#fZM*!NH0Z?fy25Ppk+rh131rs2rNVbvLD?%0~JVj+=YN1&%#?wIY zDW`^~L;b4s@ygxFtc8hvnTjQSdQv_mBhb^FMZYJ-x01-lxr70+C zRUlr18mLr~c&b}fa$pl$4FbJh=-g72S@Ihx`Jo%g;FM~692^ci7dRm%G$<&5?wr?9 zDIf@mvl$2tC6KmY%am`GwXRHXLPgK4GL~uPT7T;sxNuq$aBxVdT=cPHhc1uUMS5`) zS0CN?l(PPP)cys+X~l*M-5P{Wye#wsVSWL^i7lrbZ7L$2q?;qdp2@alZjIK`O=R(! z@evVV_pB|~nAj$wgk8E{Rz={4AamMfjg%0HiZ+p34+zF|-bhXNYM4nSkC%BCSz5&+ zVSgx>R#U-2f?vC%BhDdz@R0hBwJMQ;Gs@AZ+x67aokwg+X4$)H*+u80Es1(z%_KST z`?9(?FzIR%WvV42n@D9JbB47;D1(>HUTQQ_J<{96h=HdpftKS<^B2ec{SRi}@FR9H z9`@kxj`3qAm4c0?9Q2}}3`49a3XaOvfPahj;qfGdF9Tg2s-07QQvw^iD8GsSqJla~ z3Huv2b)h1ra!-MjwE9`)-Bbxj6Pa7Zs3U=&`_m7bCJzYkk<2u_iJnn}qeL-fl_K;s z()UX_t8}1V9AqbsqhxG~+fiAB(#p-#w0p3G_v!Y;p=_U5a;26u89hga1{D~C6MsfH z8RK>z1+wZf!fNrCGe`X`>*O(t_i>7<>AY9R;VH>i46ekmP`GmM6oFD1;D^#hZCUHE*St5ooN>^<* zlN6P$6(>wG)ZOkw9@WkW&4w05xml!Gp|2NdkjgOy2_S`yCd!e5WdLbXH>^m~1?-^4 zTo=8Tq)+4)FdI6tePkSVP@-e8TzJ2n7(2@HMCw&IqNMe@kF%|uK{||9O@Bpn9buV! zJ3kOTF^GdE5?4wjxn9fqCofczG2q`ML{+D4G0GxM`!eo)jE`vII7gFk^|Jox^KrkE zC>WdZLUe><@-Gg05=F*)l!M8zh*4suo{;Pqi_AxjOme_)65l*Rr;7wL%45%RZC15i_$H1vwa2$rFh;t4_{fByGtC)5!a#S&0VtoZ*`rXl7B>*n zIu<<5gkqwDI}N`KM?F(8p_O=v+0-|Ur}2egUo{P*cj{OzuorfxsYvaT?U$4)Xh!vG zoxT-QSU{4ew)668IM_m19}`nK96ahzN0`HhgYBWj97uC!}zDj}Q+01Q5%P2y^0MJM9d!@Q!(s!nw4d!bacs3WWu|w40UmC8?YgEIx(t>e1>8URLmuQB3S6~(e_QtWDI@R z;(UJ7Jq=kj6Z0oCydfnx*krONs|%1g97eX_JKeSzAf%BC?K^+b)iuA5o>(SYBVlPo z&^A>@9f@2AF(fhI8F`>2HK6>kEBfz4~Qr>dUbg@)nyWE%*#_tfH)q86>CNT&%N(sBhSF`!Fb;jzkfA=C>+!bMJKtAQ{vg< z0GEC762!_Cw=&DsbJCE@tCEFvzDnnl#tOQcyNbeEcUU^{6h z7Pi<>mP^AE@0#EcBQ}kRjfvTRloDB%<(jXrRhRloZ{6`G6OhZwgnvo&BnUz5joc`g%{>ZHQrt^qNnKdb zB_(IGFVf7S=-MUkoDA0T8KZo>Y&DOXW-AUF@#N`n`+S#`eN>Wec{ucCWTW_?RfNJ=X8)MG-fNLHT3o(1(D74 z5!{8cSdSlvU$QDfGOKHYV`K@BlhmsO7iqU5(&&Pdjroq*5_R zLE6_D;)#9UCzp_7M$+i>3O_3noTFbML){F0}BUt<0=2m$q+V`)`Y*138%5n0&C&nBnSB>S|o)PQtwk~z9UhYibS_ONicnZD)?=D-@;IUln zXOy&D#ApS^tPrSf9taNbXicTBll*nIO55D5c{J=ln8KKt*No(6yz)AwgE%P`7b_kZ zxsqdniu(7$!q3J&yg6{sPo0~l|x%e|%j+>~f@hQSjf@-Z1k%L0P9#sRNeG-TnOhb&ySjQa(Vvc1xKSUqv1 zM{kUGdp0sR`-0+eFm9Z1nLACm`_?|ZZgC&ug>@TM_sS%nB9gJ`eH(wbuLBj}SLHU8 zv?=R#>-8o%$5VF;DvWs1dXY&H8h}bd%3ceFc^$ly%og?%)90-hHdoAxOxn;FaoSM( zQ=PAGTXJ=-@YJN7Po-3N0VH>ATG8kBRZ7OVxSU#`zwFH(^=0hZ`cv7x9mpa3)`MpS4gO6f~68NUit|SUwqpJ!P`w` zF8<6mR51K?vnZxeWeHL*E@hV{I?}H{SRVV4Rv23zx?r5L4(#zGmZiAwv2+|I(8_M# z=a-7wOcAG28<3qI@3S@%E5t_pBxQ>o__r9*q;Zm=xc`pyFIRsfZ0z)$q-!y0_&Gxw zN>>pBfETW10F0*ut}1b!CP_G!Ir}9TLX&sxxhiDA7-`#L^^L9~8VFavg`>b6k)_126SD11 zMlPF`!M8q&_15b*&Mp<{mQ4OCkXrJ>p$1Y%D)$qmGhGqbkP>MkY3Nj=JPv86Xbj6& zBoOmqHkQ0NY$TNHy~u>#YVjAHz)*LkC-eU9lR^Fs_LIT!8Gqn_OTYBpeh(hJ>y>W~ z4nD>hBE%vSuEMfOXo|*94x&U(IuBbx1dZG@>jjyPOF?^L;!>m^vjbv682P6RWB-(n z_D`AOZ7=*Xw_gJJZWNKC{8RL5o=O~Sw9~Jz|HXVZYy^w?z;bavppg?{THzBt;I@mI zc`Dn#@YOL1{u*o zYkf0#i3wXJy-UXa@Z_6P7DKz0^b0Y1SdDMI$vL5Na?Hg!JUtkf2~n5WHgSSi>D+|= z3C|>!rX;0{tW;_u))uDk^+4N=723qN>7Y=qppjrIp?}Iy2QoZW6e*9Bfl8(mp&#n< zP8&ro+DLW5CMlWK4|`*p7I=3PdP{DJ(M5z1X_q1Os>86jII`{qx{~){g7m_ z*wo|*H08K}%kX0FTi?Q>Tb&wDL+jXP%HrOp=@S{_;(K7_jxICi)6I{Y68a&obT+=2 zoct!+v42YJ9J%M1OJ<_F_6HZRnY`JFAfHX_xSP6)q=VN#CEhK*$tAW1Cw^wKs;1I4 zs*8dXck(K$Lqy>-cE#5uHkK$w<6vHt3})$^z)DN@(R(&>yKsDW_9EBle*EXSpl=cx zSp)4y&P>u$s62GsaL6lE4U(%~yDT`x_3dP-mVZCWJ*_FsCxN0N#GbJNzOIv^HX$%7 zXA2f8Ehxl3G1_c{U=(Rpt)v%=a|3v*8K2v_x;UNW)%AX}Ck0pXB$A=GjZxwHI{kiZ zGvBJq+G!68hFm%_g51+fQng6zd-IA+IOHH&9J7nb?cPKw&1)3t5mBih5FiZWo=E;FGV%D zcmGt9{n)}w(rBf=RH(16R;u-er>xV#dP8;4kV^H+>e^be5{BlX&L?Dxub3`sg~swy zrBU@4cY9ekPsvB56NfL_L`5vW96IPNuLsgSxH+oYqz_oWbsFJD~I}0&we@_o~Nsbp)lQATt|KLHFh{0iG)dm_*3X)wftRjL$8s()}n%=Fn5YuMM*ob{#3vIg7gdZAWj*QJopB|n&# zZY!T8MeKoF%V$@`rGi;nw7LX#Dq2xpFR)>Jgv)8Rwp3YL(z_E1lda`aqqRn*q3Bm_ zjeW_`S5rgJr$@CFwx-%j)du^{shK57waS_*U9YVc8ntR=DYfr%h!V4Dtbb~?0pJ*fsX#;NAenAOUXKCY{^20##!Gk+JA;gncfGxMqY zDyHbn3fNK8ga*=AUsA)nmDB*U<+@&3I7Lq_hZ~ZetjV~r6w51><@FRr%OgOL=BnnF ztF<*>#VkF7pw1LshNoVdK7o@f8V8m*mDVdOt1d6)(*G(H z-ykV?ov8H{%6|~1-;roZR&^ZozMf=N;Tkk%vX-le3@OBPNLOtQG&AfxEU~{r zl7_)8)D6YSui$K$24{`gFf~u5ELnpyU#aVJbd7^_2}V6FCgqVe&jIZcvh~WU5gi(G zN<#_jX*naGkTn>H-YU>QPt`21RE_2VnPn~<pp-<~6ZER?m)3ke zaYSjk$Wt*xPk+`$E2Vl_;fMzV*H`Az2nms2)(5X>lH7U@X9OA0+edhhRj6?a({qUl za_)*bec|(*dTF)@sA{2D*vVxmOKRqMOi|6s#B|_P%90i#oVpJ*O0{LcFqe*q1Il)@ z4Ec5HWvLBXhN=Qr9kmY|LM4X3ogHGat41XDR7;Z{A%Bu;MD=xeNEqlPmv!=iYuy~X z%dBIf*8G$x`~G*OM6R-EK+(HUqGeE5Yx+3W>Vj)&1%gYL&>*hsgAm%j0;Nx@e_d74 zdS%_5(W2ml%U?~eiI-%d2VF8M$U33}%UWAYZN)4FTVAJv?gpJ@9Yr&&$6PcFJ&lqe z8K3MGr+=cCGg{H=lj<_uGt_7$eQ?g^j5JqR1AJ~xN3UI3S~2<^z`%xETJcDPei1_N z8Md0IUY3%fghk%ejFBjkfcJcwq+6FaP0ZHW%Np3sr=hgn4jbhI+L{$Wy|rA8H!6Cg zz!tSJbZ2Egina`2XJ+HA=rB+s;_4$qtG}!3zJKyQ(pg&D8%tD@0 zOOs2~IKlJ|5;-@nH9t}N}SDifr+JB^>O%)d7MGdXYYFc*BBRNJFh58=zC5OXoOPiGeVN8W;q}kJ4 zTieW98B(LRLv0;>0&3m5TQbkumZ{+qnXIh#XR@_*x~E@HVvu*%mJN>rvngk$hqFm3 zz}Lif6seP4uEte`W6)YMHP{Xuuh?;K*MB2{NSf2GHbesF(JRoU)f?I>h7k=-M`bxZ zm0a!#6|})%L?BPa91&1s8Ay-%8QZ~E2!WbhYsGb@W|nypY*bs4xnWB~SX-Toc@i1I zXq8rc^&Bw}EsB-{Ma``Y0P`u8Zd;}l?P86pTB@xf2i2=ASsHo#yb}v#jyRD~-G5q+ zEJz8X6B2Q21vPh?Ce4rr>&8|hsNhy~h#5Vt7^JHgFiB$kn3H#ceA|xPdTD|Nke7^6 z1szud4eN4B8<)d9t-#kAMm=5YYq%#rUHik-Q+Pm)hIf$)QCJ$`3m+eB1eHgTGN+~$ z5Wu?VLvFG28Sx4yg4!~}S)WsprS&CB%?*#xNV~IS?R$E+b7-&PbCljpIkamQj2xNI z7&dDKNb*W!E>6qHI+!Q1e>GMdy>`r^8eO&61eWyGDCoPU;)zSq%K ziDy;Xewjz0W_6IIO=fewo^9#Y{q$%_*MQGxtU;f1 znJf=8^`{c%{ylBqfzi?&rr0-Ea6C#gr5+|rP)p1`T@iYJ$#`>D14UY5`Xb9WY_9O^TTPnzFJwS-sX9L>|^ZBh)#_v_PfkcpYLmF zSWK}XJ11mTxh`IK+PVe1Bc4Rd9$maojk~gD7!gk`*Xdx!n&(m{y-WO+(&PzNQnN*H zM~bgbt12Giph$88dcXC1>w!+;+%{Wi$7!o*NwCs z=4#9Ho#u0ClTmx?MZo>wzon#_~b2yE}@n-$o@Y5%V*fJUYR&=dn$VLRH%=%-5JL!*eS6S&abF4-eq{#d1_{;mAItq!NKws z2-BESfx?`6s->Eq4P2b3qC?M^uThSo4nekt zL7vM`3e^KRZ54^0iW${AfHUC_Ldi3p|2aGsl6xHekbkK37ouy2+z!|e4?_==^&bkZ za~;H8Un+t8Ji&FhJ5y;XM?C7#gsnGHSez^F%{c!&q-h3wGeh;{)ggE(k~_&f8sve$ zLwC%%P(Z-;lc?OtxrVrUt)^8ezl~QiPMqSlf!1+#CW-m02hM%9mdURH{R_!!XKj)I zatq?`6@R1)_hB$oh%LurV>Vj^vph$QJJ1-Tgd%vg0oO!q%Unc8AD3cvgC|+f9G9+~ zrnd@;F2c|l|9n(Nt7b)W3V)K(r)4!sM(X7h7E|avS|siHP?G=*G(0P59xh9Gj0?J` zgP^KQX)+OxQYAIt? z%^^OfgJm&F2zvM^N`mdQuB-5l^AR5n(Hh4TN61oI^_eld%`m|DiH~t=5x{d!SgpXH z#237ND;GnKMrK0<-CYcB=7d~AG665vXA5UD1LHmZmzq)_EsIBw$Gy{!L|~{WbG-2+ z^M8f*=gMLpTI3|9?(N0*vMbhhI4J^eX$~Q6yRpHl8Th*;xPB26M4b6T#LmSaTouSJ>$K{d6&APO=u^SfazE(N`%l7B;s zEG(!MMx2GFcpObgV+~ggF>-iIuD{<+t%Go74A&yDu8Wp?HeF(?nLr;Ktgw7LKLn1h8NU}f z%sH{v(xQ_SivqIg_{U|5D1n=uD}NFNZIR9Wu`Kh+)^jNo?BBA<;{g$<#KI7w-tE9HUE-)8vEr)uMzs0cYq7VXOGk>Y0a+TCL zdzwIHkpSI_4*f#cY+dk{3&e9S&8MOkjf4q=Uw5lHrZ;0mk^QC|?&tCXSTX*WVth)} z`U|P32mah|b7UE?@%)6Fi%-hxvg;U`ibjzPJ|;JZ1myW^q{32IL6en;V9=uq;+KiNF~E z^HC=6nJ<}~Il0i%`ip0L!3~bflK9JeEUT-=WJY#Hx01t=S!qeEa#(TG2{~qj2Co`B zzGMr@R`b~95TlKTRDbNfM32s!`H78gEc0~aRLp9wAjT%t4AF*w_;gOHJgTMiM4ChJ z)bgZCF$~Bm3<%mZpR&uFC&fCGda7juTC5#j5@kvF)Lh{#Cgp@^;hajoXqKoCJfjFS z082o$znD9gCF;hl=L=&txPCb`uLD!Z{&^zu*P)JF(I;Rwgq-*jSh*Hh1nvD{M|1*FlFkiN> zH^ZG*S~bh5lp#(%M~r{O8_Hx1fJ4KbjZ_tLN|6o2LE?PishIXYz@y5j>?Qq_IJMud z0fW}BS$qESkFYQzYrZ8PX}_l!qBFy1|xSm!p%%EaMZ-OA_R`al4sKQK~ zkmP@vKdUd>&j_fJ_~h1{zI8n;Y+U#eqj5|d5%L8_%(OP1!&A=@7~>#uXJPV4mv;B@ z*GcnT!fa}?CAxnv{6`>?^Kf1;rjhQ;t>sB7Ws+&B+=L*)e1=5TkwJNwDYv302g|Y% zG>OIpTyL>EdMc0w&M00?)=o0I%}IPb?Pq_jgJMf?^Zfk=cg*=MfxgzV z{Eud7YcNaoD!`qG`&q9VZH-$cOGAj%&^uJzD3p`fd@kPN(`}TZo@ySp#~d9T0nEwk zwCQDgOiDuZPENH9+k+sinR&TE!lz~TL2A{cIRLnEoj-GC6;FcRHh0vFFMc=jk&|{j zrC@S5yx)KA5-H#6szp|2=XsfxgsU$b-+J&i5U#zkz`k$_s|+UFrc=!&FeJ`4+AB!{ zhdDCsQ$E8T3MG$KVEJk~QFBJ+!{r7N-|ypvd}wMlKAuV*P55jW&r*f!$RCv(-L3d{ z0^a{d0^a|+$M@0c#a(=#<|8iiMC4oF4rbypD-tpL_#Sc3Wnsn#F zbj_R01gpQ%rHd=iUoxACP@p@|CGnw;d?um&9)IqX23njfBU25s%j}C%IJ8Wv6y<-m zC&?4%$s6!>lA2b&)`hKte&PH*mp^8lcTf^V)SgbJryh1` zp1TY1jK5uq6Lvrmi`&#hP`3FvCCTfc!qaZKbWU#W(ArB0(ZHR1-Ye&#lZK6+t>z&- zs5cDqb38+S*H-4eRYlysqlCI{%`AWU5yXtdA$2jyocVNZ<~L}mTg?gEg?g?SVFM-r zLYG#MfP z*}#>|t>{R0(t`;FPi;tM-LX;+uQ`FmVRzaJOV>w zobW_BEtgE;b@Lx19LRE3%`WO8M1}u|y60AK=CUofWtI8cvh_c}vgMMJPi>0cNidQS z7^6&90tDfMvn3=hJ20k}{0d1DBhC)it6WJoz6zc=opo!$Rh8130w;g92;!L5sNik| z`plO{Z9cAqq+&}Zo3UtX#EWrGi3wqH#d=qZ-OQ<)jhn@R*vKR*DUUd3|A!bA;iN5l z#SUAC%bQPIGaEbprZ)d0sm)P))IJUS{r2QeLXLH4$Bz>0XIduC%Oye}spLgSU*(sV zOT>G(*Nj{u{xpYKB9nh>l)tMhpe0%oG=+OmCfaC*qfY)Lvmq2htZn8Zr;EHh*JiZu z&zk1X@s-cRb7gAqT_0_st1OCO|GuS#yOX(jg0`2Of!jE9*s*L>G11X z{;-&Y>G^czaVvkm^;!;)MDujoU@2D4TkP2?!?>-X@(QL2ze`roDcoMeiQf@V4|BCa zqaarp&x{ZCZK>SrIp*SBurz54LRId2MeCBuA38%S65WTfmTQGgrfQZBN#=TUalB*` zlKTnfVPl}f4U?_LTg@XPnIu2rO(OZBe8t_}&id(~HMxJ(S2&6wP~ zWX^efxZvzXbe`kt3^}N9aI4ODZ>vFdiOQ9`XEF{Jd1>waNtS2ao?#-r2-)K3o+GXO z3}uenxN+>Gaaf$$*R~ptM(&7_E1}bD!*BM{vv4O(`?dmcA8Mu0cZ!H`mQ$bNcB0 zDU#YdoXX9{=k}=Z{C)8DeK0-=-d2OB?}M%HH;(%4@wo7;R|wCUZD(9~GindU$HUR- z?qn3UPp<&Ocru#Gs7hh^YCJs)N2Mz;Q!sX>qg6!BVs4?3;7xx z_ow5N<{-b+$6rSO_!tbzH|32dwn+4oK^KeB6XU;Ei=LQD;)z*>t#8Bf#;2%kDQvX{ z(|&*R^RU|~RGVQ%g>^iBUEbWJW?)Lvj$4vTx2L1Q)6=ub#S3l&7^kbynOo(weFlGg zwx$Ehp4f8b^3Bcj_pL$rrSNmu?rpcv7+LCZe3JfJO+7x13-5*#K-W5+4vr?>;h+=( zv@6zuk(lnDzb`)sH#W+8;R@YWSm_Qr;rYws(#L;%EN^s=OLk!I%eK@wQL6aM2xwDm ze6Q77tSv0a->|}!2%jb=@?7e+ z$Iqmja(Tm!Vti7*zHXNn76z4Y@b76j4NL7Z%V_J3AF#f%7rTRLcyq(Jx@uhIt9~d0 z?{0+q4CDi2l94mq#YHJU&xjcO+~eq`#&O8r=-n7h071j@jp_8V*Lr#QE4zQV@+q9W z8Vx7I$;DX+T>Wnes2&^@?0Ww1Qu*qpTsgA^%4*kc9R;7?2a`@PI10`VgU^@2kC(xl z%MAg*mtL#%=CY->acZwl7}J&67iWjj7TG$AetwR(7;PuE(SR~$YIHq`FrGm$&jFNz zVd~jVTBUgNtFa{@UEa_;s9=BUGkgPVda&DrpOwi;IAFk&a+8+Ji9$EJfzrhG7iRkV zG1(st*dAx}6EcZrSYl5yyVO4WoZgg^PU>-xE_`;F+LWI!Tj`|)MDbRebjoEtva8OJ zdqwV5<&u$U*wlpMMlI!JV=}t9nzY(q+TDqr0qX@FYIhj#QG3EM#HxQzPDaBo383mm zqGgiB-`s7B4OuD0crV^+b zuXv*OqxRq^WU;gB>`qbxF$|ne?c{T7x;5BqYU?wa&;M%eUYs5d`=#=Rop0gQC5vrg zN~8Oq|Mj7wx59QAGN$<_8a4;30H*WBg=~Mi;`)L|Ie;IWr_P1{P z)#Xi~oB#T{KV04IYY6qwq5<*JHKH%}MKC?WP4ij4*$pFVyojy8#xY91PS3 z{L*7bL!-KxX`S~XBx0y6E%o0r|qhz3zCYy`z7=l~)@X^1aJ66!O#d;jnX2)>~D^`Ba$7Qt@>-K4TDJ zK|U9{<3cFx1qXkwrKh@L<*a)azM=B;(@9CHzhQ-*Aki>&&6sgYWQsgv#;^hfh597} zv%>ILfIBId85L*Qq&=F9f9_6BO6b=o?PgKt5_05q%-j7ZFL$1PD3;3?!fzIy@4nor zoV7>eP-?4_aG6sx>@x+YMa4MNq+PK=%Ts-Y>RGT1DyM(Q3++$g^>y*>pf?zP85A_X z4w=?%z3$0M2y6%K&)rXL&bZ1^zk7B##JOr=f%^$M!!MQYcsD$nj>5;nyq{0Xp0X7| z#!%oX3n&wb&a%$%2rM309C}KkU7kusX{yaDmT6K^_}l6S6Q+LA4=ZQGaaR_(I2|J%TwmXl#^Bj4C6>=kT}t+<$T>WkUzU>z zTl*gbp$sYw1eHuXo16O|1fd2M;ZlV4QgtC=WdMHyvyX(pho*uY;1KdMh}w_QC$29= zwz~arMgt$^d$Vx=YETgpck>Um$c+3S|B!dK^^e~6(KmbweI2L|2h&l%7(_ptSMtxG zBASqurMIKL&?>jh_O#O-dfObFO(zHHGp)uC%`3I%Y{O4@2t$kPS~VRtN=MME)z&OuLkRA7&q+JvT@^&xf- zzxm}MXXK#w?e#amT(hNqx&HQHxze7L5EOqZ6SPewc)rwxw!4W5nWKY#M%{4Chstrc z&wVGQ(ms6j2UyOqtmYLxPs){FhuuM`SYT7?iTrfg;t-qgQHdrY=ZBe4sZyy74r9hJAI-lo+VDQ;BQ~QC>cuEAHokZk;(}ci1L3% zzXBpXZ3}})9ib-e(b35(aRnQ*P7DYNjC?H@xkz;w3aH`*48<9K8{zIm&djSDByC91 zWXKtVegzKiCiu0d`8zu|VN&hNX)fzH6vp)9{j2`XLqwOe@yFomM4i%O^q*#zE($_} z$_U6D18V3Ge;p48#Q<{@rNTeyKLy@)s0}koU37F*mF7FT!(J9NB-fwO}$lJLol+s_MsC6Mxmri-Xf?f6@gLxzk9$ki}|>9aBB&+#j6-t@UWu)k}ZVf*rwPEjVqT zA57G`$kWl3J#{MUb$0O#q-QwLkf#ITd}Y0Eg2%mhnUNYH$;hCnvAf(jLxCo|Y@Z^nr6Lw5$8=_2w_N1VtgmD3UDV)MX_6tCG z3VU}Lp0q!QG?jxI#g~7Bf_#z|`+P0P*%1`jMqj%9KGkL0FqnzneeD8tGprQ;#YB+R z_C=-eBs_m^g9gHd7cG`I3#|0w zw+e6ha{<=sC;lkRUHld#lsqcc1O^kY4}u<$7yNKt_opcF{7 z$%)RHWMGll5Hev%#^F@0zNybq0Y3q-1?wt>A225|`4-E{Y;|`5ONCTpUmin`#$iV& zQ+mr5zw03DMrePPn1zL5r6BNacRCDLFA|Gv<^^ssBx&-rdz7pkn007(eq}?jp3#gr zTV=v>%)-s88R=;xh87Wzc}BN;Ivny5;0j1G&>Mv*_{j$E6!;4IPS6=1mjU_=zh(bWx9{R(C_v_ zrfPwZrOL&3ZysBSGaH7dfE|HlBeQGmrq>(b=tP8h>5r-!$@S!zJw&#`<~G}UT%aS< ze|!e~w%&g=Xp$3GYeWS(7VzCrREuWq+8I2EPMzZJ5b3tSwgODKYt!kng-3Goum%&! z8O09#gq1VyS6VQ5PY3CvtoTB(K$g(rlU+u&!s^)RUJC4_-b6{8Q5*JH%g~*uV6@Ai zxauSX(9lAc6mbS*kIy`O{BojEoPU@Z77vuvrcHlCo*4FEIANyl`J30MoK3@HSjGHi zg-)c;?&6cz|I+B8!PA+_{1UULeumPR!9E5!6o8kIPrG&ED4#J!v0 zD9+)(Fc9fiQ)M%d4Ab(*49RqAPj*4rWWQ!;8P@6dADVPvI*pDH={(wI3@pLDDc*@^ zMPh$ZWggN_v~f6hVg!tsyqk@T)c9*B5*v}*o}wSzuYD+MxluHW`_&It&9~KS?MI#< z%Fp$K$iPS>)=UK3H!eNJx)Hb77dcv2T3ApIswV0*F%rGsXsdc zesg`D{wg{u8ADId=DcirjErcNllJ)K7m<&Yj$GS|&VwGB&(hw0??daHe`HoNa4vrc zjAs%}V_>Htx`$7L!~k~U?zaPh<9Vw+`lRH)v9XzM?0s{-vG?FXIW^AhxZM8UhxrD* ztp~j$gWi@wTgi3@qoHuR7uu*1wTx9VTK2BYFW8I63kX`(V5_xl$JzU4Yoo_F@0~9! z=rMvErSsPL^|e}+#ORbN*AA-6u*!e#m@G!$QXL(GjAq=DFQTpPb87ZwPk&RK7B}O^ zrYV4;^jLk8ANHkIYpB=yXY=!J(6-AayD1p9^f0<(^*4r0CyBC3e@27b_gclFs*V1% z%`hVcON@Nws~y&kY43eNv$Atzsg9kdL5v)wdL6;zAJ zr{i)S48EtEy+DA#CQ@s8VJDQfPQ`Op*iN zyy8Vuy%yyezxX$6Z$e?DtxSJ=vn)|Jbf19MJK4)d0eQ^wG^07jV8)hV*C%6c+D;hl z1Ev>02BI6cX8B^UgSu7w+BDB9hoEXnJV=5>1$2Km3XGQtyhz}{lW=@A>YmYB@B$UR z-b^uUckMnmV}22#1~233zE0uKHj|IPJr_`jwr$5%wS6~6{h&%|r5k_h&-i4KdSh9U zXQ!t~UjT+p8b9#4nb3Id1l2_4U-f`QYaAo2$Zze!46TX@-uXAZjRy}vLgi)AQX|+uhlK5Et@)O9Kq%~~1$ji($W5lAy<{F4 zZxs1{zs0~RQWnEKeuJ}a?0!}lcGK@{IFA_1!%#Z zK<-A_(-b&^N5TCpyzVPtZIt>O8wA<<(3F2#d(EFp_gnY)Pag5{xhJT!MLqd?b<@1hK=;b! z=B=H9esO2psm`{gvu!#{EF)$Kc7tUMt~iMS^JjcM(P>}-92 z##{R!CQ+0yCq92@&EAzt&#*N<>VA65RqZQF>Wm9`Wa#$Eyc?qCZVv*jjt;Owg~99a z)6?^_;1P#yAi6*G&kNKi>c_6qGs>?YkYmkP{qhMyv=Fun^F?*>Xe#oswA|k7hF=01 z(c0ra{C?QcV^E6bN8Jg$vHq=WVd7UK&NPol7mzm&ouYrS@4zMF{Gr*2gVO$5P+JKa z^evxTYOM2$dR)5%@z+kfn3`^<18Yye(gy3kjqYBv>)d(bm>{;9imseDI)GKG#%`Q3zkB_qJF- zf1U_eQreRhu?JhZeBRpA)^tTF+51x&igfWv@#QUOpgqu{vu=|Om_A6M28kiEGleU7 zBzxt2{}H?vgLx!_vD3Q&k`}q z+w5mHbIf`~!zX7LF56;Sonm#0zP-DRdLDgHlg8j0_-l;?vvIU^7V3UhB22gFcz%RNlCUjL|a= zQ)T6owox`G@VR!kNKi*P6!l@6ZdP|I@HB%ivs1JrpB#YhRQ8+N??7u~8;8+yM2O>_ z6uow&IcRxK?O2{mwj!YI`w+@QFF*y2Wfm28-?Tp|$JXz}0E<_#=7BxX5 z%EIR^{!tuq6Ab4MA7TQyz_|wKoIbp$Pp6;9y+c%KvD>4OS)nJ&%cr#ysNcq%2@Q*i z_K_zNG>{{_qJ@-kvrv4H)T1G|rhiW8SU3`?HDQ@Yjgme26;X`J_aZX8Cp_vo6_gu@ zxYoxbd#^^O!0VvVirRXMfSqA7FAV zK1lX~t4Hvz^d65J)#eZKbRT~k^Q5>PL5wke6rwmza9&At5R$z8K>KkZcHabek_H!H z>xW=#l3Q6zicz%~FV9OogoXsf_k!N0A?m&OsM}O0VFayW(UO5)#J_HBe*8z_aAtCI3WkUJF%gsejcwwS2F_*15#j z%v?UZ2p?KoGS+Ab`?oCpeth02pCb-9b%1 zq)zPk{Z?iInn}67=0|HV*xZgcL1NpLc7!ueNR21yRuUU$$FJc8vs7CL~O+<-aTvK&{+hDbofq&H&@Qw9L300F(2<|mI zz!&{&4AEz|K{Tc!{`rBr_n>h(@J{sf{Pvz^(+9*a@Ger>OPEzsXP+=RDL_FT9I0w6 zAypB_&=aX@OKeIpx#`7Hm5$`fhr~H&HJY5+@VU9U=vTA=qE3L;`;fz>@+3U(>Z1x) zf#-;`YTch`OMmOYN^{l+SLC^cg@^yQBwX&bVs*>SU-0fMNr^trL6d6|vHVi0s{hx@ z#?w3F!yEIDZ8>7-N9!|w>LRfRVb~%~K!B3ZH8bIkpIxmTYh&W5#INl2bmE+>gvtT7=#_GfRW27{#vvvDvoozi`M`**Y-+3!pOYtvnw$3K2rYI@`Uf}Kr~|)>fg77 z6%B&RL4WJ2i+H82kHtX$6$270g~#Z0fV76bvopqg9SjH2bMs{woP9b|PPl{5SmFaL zVB)?L^5q7TRqJvPd{I4p>WfAlDHyGUUHPHdND?*>LD_`HFSf=+JXQ%wRIT$E&lFq> zj1!mwmw4@U+frU4SA-xP^wH^xV}*39X%w#x#eY>@FSCC2YWGQN947Dug;jDtixLL% z@>AD8B6J7h3L2G95$pp@{S#crqkRnu=np!wCjJ0Q2zk_$)>P9p?Rad$2IG2gQOR=g zVPKk7FCIMDW;+~5&I^S-y2z~xZek0TX`<3wshx$dO`Tz2y+lO&Ml1y8FQq9vWLHRU@Z~VYswz@i<|V6!WNdk_RAwTv62<4S8d7IBU0*LDnHY z1k|C5YsZ*vAgy^k)x@LLy`75QSi*^ePhun&bJu?kk=OTIjOyM|7m{(L73A!VsGH6t zI0FdBh*OI6T(nD*Dn0Co)d|6;%DHWRtD=lok_)8p&^Y|RfiloPGIH{b*$9a@GLFa` zn6Lx?)D8AzV<&*X7XDs?sVK{U^eM-1Tt#-y=2^R$1zjXmsOHYvq6X&}OQ=Vfr_n4Z zwAFt+#@4it)&k;VPX^Jw#>lhNOmarALm?$`*_2xVhkjhvAg|R%j8sLduQ(fbTD?Sg z&^RGK2j?3Xh8PRkPj4eJdcjD*=w!SRF^MZMRmZ#{n?Lm4-c4>kr)GeB&f*a9kUJr5r2l|e!= zf#UvPm{;mUKsOc_dqQlkuX`w!^clcxq57?s$Wad-eCl(GCApZzMfu9d9f?m5h_OpX zU>T*4&|U*6wu+`qmOaz2H@A~W(Ud2<>WWpf1kE@%C90Vvr;1)}e4;FQWvci%j5~jd ze%i4gg~9$F8;t{3TZfXMvltLh0fF6^wuRtYAEa&5#l}5;sgW!!fIk|_07{+9!au(s zh?OL{CmC|`u`-(axWXOK1tKVakehTD*VlAm^#MKMl_jG^@&vG}{-^~mnI(U;A$Ik% z!T#dnqYp9SL3=fjOoxK5+Vt`W)60L2AopIxh9NdZL{;7joW;{X;Yj}?jRe8sBD6+B z9c7LB86#7IhyPKO6hF61a2E*x$o?|4J+Tb(){yB(p{0p%Lc$WU^%5dTR8UrJqeFNV zK-s8%1FvNuqMX`xT3;+vBUory`t4SAWBZ#uL7YhT6Vu2!+@Imd^)VxEk~e?E44_*~ zG+o{>L#oCD5|EgYpA9xN+qUC6C82hO7O)4w{D?Et=04q{SuajFQS?~DJ6j?q!;4GK%;>UA_^6ea9Q3E3K^)OTHE zV#$k;C&NXEgt>1!iA2=wNlJeYk?Qr)esfkD5)2x7C2@EV-*eUu6x)zEyJWb~8l4eB zAFT>#+Q14T;I;;FQeCHxygb8U^3YXWiEc?#OGq!EPBMehA?-V#GL0lx+)%UgBww_> zxz{`i%d+RttKME0X+vvwTdibO!^HP5QuB4@4}U#^CNLH#aHPOhXKB{%2iKPMQXk6iS4r{XC#E3 zemY#w-229|r{1$*-T=fh2hBOo>v;tNGZ| zJxUDeSA&sv|Bt-$QEuZp(*3K5EM6^Pe?k;xZ*A>@L|8%`I!X-2yRw;VXf2B*AejM4 zP$VQ#5%p~QNcR=)@9RE)X9kq)O}6gdTXu=SVCKyE+owl z2`}dg!)UDfCB18I$%ulvY0O90c-V$Uo7u*pZFW@dr5qhcNe>xf?`({`&Ydo9f7VJg zJ!h<3Xt8E?iAWgi=?Ip8mIdh}<`LH-^M)$!sWt7D?A5Mg@hK{D6PPqmxOz!Jy;r%$ z2$UMZ9;>VFwAGo5m~6l->wf`ecYY4c3#%72Ba%P;)qI5jr@z&lUoJ)po$9tQlj3{% zuSu2YQ86H-wBk1e!n};2kb`qWcCgY^)Y0mAF`)UxdgO-fSCy4n7tr#Fu; z3Hk`a>FFy1*vHLb}Fbuh}bW zg)?xi)B^ZnCdAvCi~Y{35qD8`qO4314CzJJ7*e%YR+om&dqTtBoD-HVf7r?mrp>9# zzpXy@PcZT`St&V|@Nxf`fBtlWZlBH7cKCO=gP(x0{_HgX@|lilPlP~>(2%LB zbB(}f70*IId%Si}U_1by9gfZtx#f#(zFf_(c#ad)zD`j2DZ7$wT-qep$Ghqn zZ^7N&*Ebs*G=hpVNmst+%A-eLt7Uctt5m}uG2X2#S{obt$GHa|KD2K3FDpYh$<)ow z-qk1XdevN8B`;FtIsVbNNO_usoxLyLD!-# zErYHtNUX`eTmd(PPr~PRGtyxLjk-9-mtxt6r`~IV^$(_2Lkj)Oh$XFBR#R>|FYTiZ=-4uKPxfU`5Ju z*cF+yzPh@xj~bC8SPr465TAlr_+ZG37^3e_ho`U)hG4$mo)6QOKtRKA^?(28e=_sW zhY^1IK#VRNVc!zqKiL%ZOZME!<45np;$nZH86gt6|3EPsLSLG~vE#o!xQl_xclP_Q z6r6l9T=k`yHVp`exjC1?=rv z17o>6&bZ|wDz0-RGo-ya#Do2TW6`H59>z@eRo^H}V9|NJBZaPfrGK!#gDEZe(tX^n@(aA5V| zCU&1Z7jM)r?jHu!Ps)*KR-ds&Amxpf=p zTPt9Ir&)ht2D)Ky_EPml!-g@kGznSf^xrS~bMK-nYt94@vp%}VZxi+Gl3)#sWw4>= zL*UQFU(9VZfv_aC^<;lB)P*pnxy$G$y+yxGPCOjNJLn{xb1^cfH-7hTPrmw>e?Ed& z{`Y8`*8IA778D3s`jG@RU) z*WaRlkz3t45#kUJPgJ%)(Ld2kT9zbrpvZ@bwJX(@UKoiulNDq_XilVhOp-G{=j(BQ zF;KljoQv>yOPaqgG)7M$Xx+0aigNlSEXX=sr+92~qHgzi31_yitG9ohN7JVr8fxr;vL1^5dLOZZpF8f30^(`x5{F4>VI|I1o(@dSo;FIE zgseUVn5V@o%lKj0l{uI8@kdd#oOI&ZU@ZZbDyc87h)+7c+ExZX#<_11YO8B`cCoEo zqcD!K8-&pP+|j1hC3QaPwOVT?bu9|F2QQC%9DOTVFO+}n4xff%X|MgsB>gxiV6qJv7HVLM#Y_LL~#|ENca;Ktt(@n0TS zoZ~_7y?ymCZ-#+5cLRB}Dx&e=2Nvd4Wk$Dq%XjQUGnQju6H>9`b9A0VeNAR^kEAlO z?5DP=WI%u3Si?`sKE<)C9qWb3l?tp$Zd_>_)d>dPsq6QhbCrnNHN{nZcf9zi^gu9I zle)-!M-5)=BrL(k2B;cqWqcx)ad?VeXot$s?8G08^)iKd60S@TUr}d614f#ORG(nc z^2o2^%EulZ76IFF_huuZKTt-;$I)bPke-XlQeuA-Y80Ih3RdkfB73#huBh9-+DG4f zToKg^8dkk)iGYif`Sts(HW_)mPf9S_Qc71v6xX3G@x!~oXL^bG2})w*84%Rf-UjR| zKA7mHbohfj5yzbqF{p=e7ENwP@Ar8_LAzdeIeNW)mw_RXgfyd*L{Srt0-O(~hJWTv zzz2W8uL!MM^$o%mfD9iZZhEq~yW>gyLFe1$EN(*h;X|}FW1-83S?N8|*|31fWNt6) z&-KH@hcNNg@Hw{C?8--``!<_T!9{WQdn`~+;44P4f0!U4AhY&{BQ$G{ zTD55u1>U!p82G5_cG3TiI;;8%if7H}JiL6r;`rOFfzp;h64TMXuD%L)%ePaNg5ZDr zeojpYLuwI6fRTy{R}fHIP^D1HcB_C2U21-FS5wg7f}FFwWfOln%1^3Pd7!_Mo1l>F z2&Phlm|)E)3C8r@ai*Pcd3#sNI_KoVs~aH@o02)V!s@7_D;&C6T{C7;3gz&cdCr6h zu-24%9qJ+gRjVbUt3Y2PfrCm{dnkXoaUc!7ytBX>ss3QjKVlEU5z^~-yE|qj@fT;V z{t_$)knu8Q4&>nt3NsK6WbLjgkkhBDskwHaMq;f0j`eVV;S`#&tUDc z&<1zIuWc`OvC-{q!UL@fWo+!4-Juf-f1?iXVNzzZXgGmOmNTpK1TtPdA(ek3S zsZ7BRqajA~J<#1s;nh5(1haos2SOp7QZC+jwg^9{&_$M8gxap^%yKh80@?BsEtcsC zwz`Rw8lnHS4m7#=wM|xp*gr%ou$#OnXvmRkK)U~6ZBs<9U>Hz=x=K@+j?ExZlkG8B zjmfjt>gYFDaBXxmn3fKOLg->ru)5f3Gv=btMziBA=pD|_) zqfcwd*o((F`qw|$=pZY6=vvLl)}q_`key9JKsP(XC&DZG{1lrQ%^>%`Hhv;sfk|x7Az(Ey zXTN2Kuw*XiUV%J41cqWWN;pGn^23K~5Kn5zk)TqK21&NwcCC+5Ye$|%A&FA$K`7K)eKiajaN4GpwD9Zd0AXRvFD0q1fkkDk(UaGu6qnRX8U)It?mES*-ktE zf1K^63;a)FM%vc?RReY9E26pLPVFm$jV(#$r4j{I9t^7`g5z{GUYy9{WYTn;p z4A&0dV|Z0;t-{K~Y5D@|egE5Zh&2v1dVKq0vGXm{!7ch13n=qlkSvDZE)FlSGfdI!tH;P#SUKf(43PrSU8s%+5N@g3FE~O z?H%qL#%cZA1+?9_7_UOKI+I|&IQ*8o0^M`?#vcZFh+7-tiOyAywwYIX9Gh~XV_9!3 zbPW963*Ei0-An!J`;HPtMDAxV&8%s5o+M^^H>gG! z;=6xBkS-IURp)vS)SWwP_ASW;I=glhdbKcXohtA-gPi_g=&FL2S;P|NDy%$xEm9+7 zQVtV2UEtV*6ae#BZ?eG81Khj_e9eBJ2VyujHgq#rmBB5tW$p`q5Udg)#hPAQJ#2m` z;~d8XJemAPNwtlcZ?9l;f6_t2lvv&O3Yvd65#q<`kh^G4onT(AqB;dtP0(-%09(7e zdv+Nm%ZJo1XgU$wI-(#ukT`dDQ0Jsyv&mG#0jq5BTymZAQv~5Q?l76g&w{k*6~i^% zp-+N0G2Dec@V-|G22_^Y^cZVr34QZk_HOZYq<1!+4NgJlWcgSQHW@_t2czaO3eSJA z%MM#eNaoJeHeAyProqy%%eI6`I_POg zVtW(hNX6m45WcP1k1Wo!U)$!%Labgca*LVIw{3YS%WiJAU*Mr1N?^)Gq`&vjh9n*J ze|8K6R+7YMsSGA!v?SAf5TKG<0C;~h!AkYW3KnZ0a)mk^pT8nQ?c%2keF3*4`fgNJ zWjVB*W&`+aEVb)<`0;tBfJsgbMz3(Q;Hwm{I()9EUC#sFKC|VOC8FPyUx&9HXlzQp zRY;7uPB4`e^&8@NUnv5GzCA4%Mb2)%3$TbJ`h$kSwScb}OHnhn-;u6Lf6;%Fy5Jb5 zgL-~BLT;Ueigqvlop3kK9g$tREmMhz<@<4op8YYgCBK;@RNHy02EQ1iUQQqh!O3VxA!WGfB&GBu8 z00~{r>$H$kO2tL?L|rOkrs^BCGujQf3fFb8ArJ!bDXlP13FYWmJq$xwzmj8;33e(!|+us20&vB*V;Cg#3U@+ebEW0WEMC>Et9LCNPF7A8cH zy7Upo&73H!)|#AsY%gg*3>e_uW{7n$4GI^X+yQ5oZ{%FwCRkwwQjjjA`e?XTN1Ey- z%nBS^BO+OvzuAO{zcGJyGXNb{Ko9Tp*QHBqK%-p8y)f>b;u)2BU0RWUuQhJ zUD6r+aBpXbT=M#u#W2ZTA`-e34TBXe;`b}I$Yd6qj!RizJQV$uTQXvs0O zs&4+sil^I+`>KB^7X696$}-AMp7lP-tBtJNzwKh*f>S zLRx*spQ=x|k@_@lEf1Uf{Z;5sXO=*$Q6pCM(-VB;g$xvIwX z@w;V^18YFBb!A%2Mj0)@*pfNm7c`7rol-X2YPt`(? zb2ExqNzic1CB1Cwj!8nBP1 z6n9h>S$THey+dNb=%_;Vq7{-^gnV6eyS+}-8(lB5=$fUy;;7~)8CKjGp1lQ(Wr>)S zb$My&Nj8QUpVreIaPlg9+mfy*_(o$l(0C%n^RAASg<)o^HEkt)(ExXJ5gyc~O$ds9 zd!==P;O~Pw7k@eqJGbGho9e~=;O4X$w6+Gbq3pUC#ZzP!6~AeI$t{kDcF#~iY_@+W z>c}sh{luB(bXnyJsC7%-!G`g9T5mK14B@AZLuR)ba=xZj+h_Zbf6-YZTkrhAtVqo_ zx4P4fO~Y0H8+t9&xjpFmLAE=$%lv)XlID( zT&n`JpbCgGCs-fvLyWm9kh|z_H712c@RtmYPx02seBP2UA8&{FMylVp#?tm;&;OFW z<-XDz+kZ>vk|p{YGaYWPPMl;og~ptoGFJFpX$GZX7_~b*7xq43V!$*M7*5+#YS2>u+V>)*H4!kjmvY6MGcZ31Y_5PiwzBUz%QL$2tc6}r7aQ3q)D@r7Sp8PTf;_jw?!@z_HHIb}K0cu3Wn9w}%;v=lC#)AGDPu4V;@Lx}3rYJ7^wGbY4 ztZ)GOJv}d50M>tnO4$qe6CbgZ?OT7l>%R|Um98^yA3hv~tGOg1BihCHAtb1u&c@$n zHlwW_ZjLzuINo+5R15(dcGCr}i$>=wbwcd?`MFS3=jS=ECG`sovnd7q9Qs5+94vtJ z^1f0gE~VzCn)Ha@d3SePr$>%ZiRJar@TyTV3H+W&T*=7mv*Q8St_-b;i6eh2Vm3C9 zK8V)Itwsu~%!x+>X3Co~?EE~9VZ>NQHRM|p>v;28}Ppc~2&@rr?MRR^p zT~h@|l=d;IT+9ySmrYJ6dalT6W-D za!}4hYbfO`$`0PQ)vg`8_tq8;Qm%!yC6TOWr+na2T*Ph&Hw8gn$d@5Y0YeREzKwm{ z0VvEA$W>|gmvKu0Ie)!J1?$Qqncz~kgAnG${L};}ws7J?0JvE;yLq?0XB@VIM&kMX zMy^1odeb5p!&vqtyT<=oC&&~tT=$LtmcaNa|6s)<_RZ9I!uHDmZrB?4l_N+egOKVG zMlk^T$*I`0j6(S>-xx<^VGyayYg_8M$(ROWjD5*q`|nM+zkjq-L&Jq^Qz%u@-0rxT zCXGlzz!1a=noM#}vY*7PEUMe-MXh}4;TZtqY=5uxnk)ep^B-iH{xzgPm_Rblt$EkC zB3ul2p+kRG$>lT4OD^Bfswhj|za0G4bH1X#fiEs+c`oLI^Fr?FQs9D|>9f{+O@v~A z-fW5H`=&k1Re%2=C(Rm&-({~-jqMGrDMcmRd!vMy@#zHaXq|D|pbSIDZG2>WW5990WQ(;3W8`!%I>A zQ*{X}iZTeh&PzKZm1yo3tUXr@R6k%@^g_@b`K zuYXV9Ly|kT~j z-7=4M@3PZHO1I+SpHm?la_Q97>yA$VX8j%BX3Y*itM(YyN_<6~u1QX7}O z<=LxCPB7A>mb4VWtslV(TpMaKs%qW5Qq#^Pbi#-@g<0Pit&f{E@x^q1E$)98rRy#J z0^{(ir}5?cKfLTJznSIbYZQf?dOYbmMK+-%WbUm{IH=S3v8R6oxzJIs+?`MV`+sX# zv$mCCS+VX0fHbNCWMpg9tW&#>`JC`O>zgg}7gr|mLDfsohM0G$;H_C3Q|wl3W#HBO zc}q_|7_zFya?yvSzrz-Mk2b7~nnR^%jz z72Rrc0CN`sU&dlbI?My1o5o^ewwEDL0WAsal6h;!jrGGrmsd~$9X6L3qq-(o_e!u> zhW0dBHZPo68CaVJ%I9Pn&3h(eOz7L>U@TKu8~~~f_~JvrZW$Vr#Wd~E*j6xZCjkY&r@j)pNqKD4-a zL~WU1>tK$=a9Mnx$%(_lw(C7$NtLO?sbcr!HmzuNi(c%dTp7n4;RFscR`YlBM@}JU zmu?;$`qAGM@D~q^1c|t5zWC!IJ(osN0T6$&?48vRx_Zp4JLXmHs7^m?pxE_yIMR7D)yN+pe$xKxqCyK#fIVP$jQ~#_+umYMr!KZQs3$}08LWSO z{VJU3-X$x`h1_{SP`f79){dqQ9eOzT=*Gh6RNXdg-Y54UuC(sE_lld<{mTk%-iP%> zJmuIU-b-!1ap;7@He}XCEupk=cL6Vn^1|T98@&O_8 z^(?Tw`0F8fQPT@s^7rNi$O+EMl-2~Yb+qZFvZ;|OQ|P5@j1wW!!z?UCs(Q=FqY#_< zm8=}cWGv*mN8MDHEVY|#Pju?n)0fA1Pjpv(1>3Pk;`mY>Iln%BHFZZ0zTLB};p*+9 z`s$-6f5`EhAwm1@JHPDpZ?=Z(-^<~YqCpgU(t#TM-TDeX=8)5jOnDLGb^1mR1o&e7 ziufmIe7c{xt)vqC0JY}ydJnIJjcx$P)bD?D*{lHztA2aP5tv@54OvU`z8AWt5{)w_ z9$~Y`OJYH$R<`3EcHCf8`aEl-f7>7ufAe5P!3UUeHq5Xl&KP zhmAJSs~yF8fXp(4zx0ym@Jd-268I@`=Xz3*s4q!dYb9e)Q4E7G$dE^Z=}j08!ObBl zQc4pZk|WiL7p$07mUIya-ADrgh{_%upWWQBFrR++tm~otD*#LgT5p)*!e3!M)T*d& ze^vwJZnV;MAoC_DZOPkd9hF_=GkJFDH$-XnyNC?SsW7~Yf>{DB>jAqu?kjAP1VIr&K89^)WT>_p`&5JVM%Gc=zK`c0In6IxCO~BTW zHbR(TkyiH;FOgas=_XHPgVL80CRq~YTf^2V#+ zf4#}62D4P|tT}nE=V*3IB(|rfe{~yUNKBbb7G6gx1=DDO4&t_?5C!iu+ z&Xwbh4a&Q@IwSE9@RXv;R(L#)^_thicFMe|swWx|%lsmPgQVQeo6}RofBkR|M_R~A zq42%pk!2~Z!@^h=64tDcEg1yWUJ<;zCd^$o5pVayqvpdBiLDu44+!eJWn(R`+5X~K zrD`U*{4RjCYD<0zNB#E%EacP6#yoAL8Thu{R|9ucu@n7%0b`2=>WGxa7h3| zOwB@A zoLDsbxF=~yuEWI>n_|N8rE9kaE@I&eGZg`qQN#-aQvLLge}!;}$uyi9l9ywQz`QA& zgl7`Qdiw0^5p&n^jfu-Ep`$RlMck7tW%0Vs6Ebqe-}F7o6|?>XstrSQh0lf%8Tm`StQ`I7ajazXRYZ^h(?@-n6&|U9hLHUD=~W@?4`S^7^aV?>%>7sFg2O z9(74NfLqbkf8{(sMC}=9Jpp%lvPIOBFQ4)e!5StZa98e;<4?0?>@>(kV;@*D?EUq6Q|) zqlH%vZ}n6Kfq+;h`b+{`5CA_ozIpJggROo9;gb7Y z8Pbj47o{$vaTAGqUeB+|2Xm=3`?Iq?2S7gCq6bbT!XWz>(Abu{LDc(I-x^VCu?Uw` zO=ZW=e{*uZ-(R;};8(lE9+*x=moBcxqN9gWFxw`q!5`B#hbEczxL`UVX%A z;^^}5^=0_tAKRx0TimRNQf1fh_!@(VVp7GM^efPZU-VzF`zAYQh z)63y089Ut^83+#)#?hn@e0tp9he#=+|Bn4=pJ-m^=ZE_^KjL*Az&>+m%ek_ORazrf znQxzxRWH9b24a@;;q(%?`@3K>L-tLZxV_j4OQXQ72T=6ajYD_7h?2zJoi{Pg+r zRX64r`i{>=CIz3Z`@>Y_V&Q>k!T!=rQOV=gUZ!&8w>!4D6z7KCt0y zWmNOwR`QDXfAsYBVpgQIuy%y_A^>TLa#DopM zL}Hv6VEt2CiewX|1F4UF^M8J;TU$iu#oKhP*(njd#>7MqvDS&4BktqUFZp7Y^*+=9#CvrY~9>|NwI-U-_Rbk*IW=wsnI$fN|D>p)?*Lk$_vy(CRU3HJukVU zq5hOoie$!ru9*>0xkJhr=y}dL;*Zg}jeB~Gyw*5*Qb|OIGDz&m%7?K`8KYn?9efD^hlr2b;_~RxVVb@Pz2?NQqkJo=~ z-uWLN-~DFtia))3@5j6vOragWGvL}t!h3&wy#C|li{9g24~xXkKW+V^)-7ID;nr-~ z31P{X)MzbQIah7{1%F~g;Vd)7jWRGa&;P~3gxVx5oEI!L-u8hF>vTpa_=(&gunT2( z3b^s&n=2q9Y_o8xs&JXxSgj&namZqE02GG1mXDmSF)e4c*(FA<=-cl++qP4e?MHk zx<2L@u?nu@!TTxabzGL9KjfEqV15({)!F7lXQK*Z;Qm}zLoQHx zZeLb;J;905C5~yBTnfjfMiJa|?;Bgim}s=7pe4s)m2^QT3!Ne(sZ5W}`6LC0^~O+Z zoZ%{Jqg9*ZTM9^Ntc~4#U%NYExiNWUSzX__8x6Gv6`NR7<`=PJ#(@!D zpokF6Dy48rdmMlQ#r2hSf9~f!&n@pI8DepI4I4-~Te%p4jEq9U$cLSf4W-;7g@B&IEOl*tv#nOk*O~~;?7$mzijlDfqD*#3J$i-B<3JI2Ga{?<#^K+JjU#Feru}v< z{Q^9-c{RU!bFLTxgJ6TmEGiS=zvv&OQuyyDK`BJ>%wx?JfZus4fBml~TPuoe0!#kM zIjOsZ(6gswSo=i{0YyRL&Sd$yy$@PSeB9tUJ6i-`0V$dr#ct9r@0sI&e zuo;1wwHlxBDtyD;yS+{|e-`pPv}7_pdGl(0_3P>FnZi$PgZ1VN9{gHum!5%XRbd{X zUaeLMAeXX0ZvvB~rsx5lMUv$OYc27ZnYxMa_e3n2Am`Syf8toqSmw+joX9^Qodi*# zRr=#SC!eUzfdd_m_Iu;Q1K40Wmb0syj3tFx`Z*NFS%$laIo8caycDyQxl!%_Irvgp zEW+3;2zu$ed0d(2oRGN4naqK970L$vMpomF-{2@s*Ja8?Oy(PPp_gZ$JQm~?_sMC^ zf=w^MYSuX2eWVB97n(Ydz?WNS>kzo;pgzNBI`bl8_B`O}EN) zH|tgRXK=w2R{4a*N<>V`n%%N(s$iaey>&^yIix$AKi_kq!^*- z!-M`_&X-rDjYQ72&aa)~iF@L(>?#wqSxM8ShLM?MfBJm?IQYT6G24BPLrc z06HBMnBHIj5J7aO4Zy_Zaw&Wu3(K-q-La0H=-1Ar7wQ5`NC$a4vM+HrstgrWKBNfs zo^+)>q&YUScI&kd!E_DI((U1e0ekFb@v>Cpd=&tcZKThYW~I^UKJf=##;Ujz>|s?b zU5*KlVj%YTqplY(l_(vqy{n9NGsBARB0 z<(AwDag*8DC{|Fo0YQ*&6fdS(1z1b5+qji_a>2S26WPiNUqTn!=fb04LH$c=2>tJx zFAy2oWWST;W#(BO#m|wuKCp}xRwlZyW3I8ee{OBhlw2q_u(A)*#dWXm$wqpV%;Ce* z?w>a8HOgFL;dk|4PMlxW@YcC&L|+ylZ7zP8_y-+GT>RL`t6l5_E9%Y z>Qlj4k2)qTo5b^Gf0h2^s&V^1!Vs!Uj4PleWYvG4ALC~8kHk?=ufMT~+vlg?DY#f# ze?&X)_^-G>jAXYMUd64aNrh>zz@$eMeIF&Eju_7?9=JWx+K3;3I5ElL`s4M(hhMz7 z`*GvPjo#x|qCH{~KK_p%4?|}_)ke&zSCgyjn_u*Pe6jXeRgCXsqz8$+pS494$laZt zh#&v>FcgE*`}oH%$}hYye??r2Z%Bx&f55){{mF3s-DwriDDG{W_ctQBZjjY373zv{ zMAQb7z}Oe+J+7*;w<)?=T1w0>p`f^sLZLI0aqy=~XMAw#pnG^k>;WerQM%&pJxV!U zUHRxNSuvHRN~+?m>|-X^L|Excggzh$t>;i_q-&JBoh92wQb4eeSvP>N$uCqie}R`x zFRm8v16P2EZ&`f@CfrC?r>rk>JXT|4r_=&g7N%T?j+&g1y5E9{Id=N3&*yKhfiZMn z-krqYW#v# zIg^27+=rd&2y2R4z!3H0`>Y+Ge|>w*JxR^ng(c$_3&n$+3rm4r_1Md5T*67?o`fnb zv)}M{DeqY8H%rW)a#X!LEfDqZu%HzYVF%&p8xs=JVOGiMISVrwI1C+tVM|2%mrsnhwfI0qP3_UP z-Z}>JY)(R$KI}c&QdflTl+P`5S+JFT&nkTL>L&@4eM^FzN*EWHmTCbcfArv^FQQCT z5)C*XCh(H#eRL?XcTaX&cZ?w_9dMg`Yk7p9+etC+CM18*Hn+@(e{ zs}Y|0^I@~B{<%Y6uI&#6K5;N4mCtow+1$DM@ZnEV<5}%c zPY@(&-z1T<`#*X)ku#iE@`|K+QCr>3ahIWehLR-e+X}~JW&(E)@PI5BjG+MP6_--+@C(Ev?^M$FtD}Onum#_;X9{vR6Hc zulf?&T}%4nFYwL|9UDw$T<>dW#9-%7f9X$OZeHtreKY)uT5$XFP1n2$8(Ty?f-L2s zuLe?8-&}<*{@_KDS+khvwge-S0Ml)KUE!p>CJ{%AXtd4)&H>*tx8BHY{WTDc5inyxHT(#On31SDokooQ+avFQ%tE708&p}Tl&!Dt-h5Nt z-A-T3oaz{*T&mUsbf&RTI<#2>FB55He>#N=H@d~eZ0rk@C4gmY;+AriLnISe$AH7< zoWtA7Pb`>)fN9IN^l#?Ush^$b-;)bYvRSeCvn^yM#K{Gkp>Ej{Q0V)!iz#5$ zQp2*x`+q&r{VV(t7z7Ejg-^Z3QPF5VY zSrEr-qSYc>^Wm2WgVFGt`Qa+h4IV#EzJR^{>f`JNSnJ7vqN;>i^gec+e5wrEwHC^w z$$*=;WVCM5m$MUxUJxArjBeOBN63jN$iAS3-TWuU3^+Op1sZfv(lD6IlsGbs+&GR>>KcxZ^d0zH>(xIyl zCiCeHRxW%jH#jooDZ%$o{TjXK3>EY9$w9y=*(|)mpZ{h5pT6voX{!2JlIUWw^CWt{ zJy_5}jrSftG|xpnR{g#qG%ptT&V?rs_UEJi^%3ccL+O2B2#l%2Lv4t#5k4*j0f(2naREMm>~$j( z+@0@l{`&0Y%R%^Tq6wV}l5GsOB3?y>K_!qo&pm^n5CAc=l>q{{L9Pkikf9nNWgd9h z@6OK8A5g#KQxwe;24F0XZ{PnWA`k8n0ecX3{zaC{7LC4m|Ahs)W2<@}xRr^Nhd zWsf(%`?n`w{mVa#aQ)l){3>tl_4P-Ogn(~Oy8#ZMG`fPTx-;uR`62;ce6wWa8CNIk zcE-^l2g?f0l4%Vsh})yb-+)=hkY<^%_NUaqFY z+kPwV=vVmbN=#XAu+rgwC)3uDyn51`@Ad0hPpnVx&fZ*@l6}w3X|808ujLqQ1v+Y= zb0k55jO!@D5`H`Hospd{fVmSQ26&J2glLVPY#|XGT4sJZYZFL1r7;POIxoFT5v;G7L|CHRH!xR_Y0#= zzCvte)hY_tXoI#?AysX}fPEC@HOjk3jxKLSQqH%Ok-01W+fP|J#EiBgxMZ?g8e1iW zIiYMLVx@hX5)g8KWRlFYLR)9opi7qrSc+|33uO@S=uQqJ!-SX)W;%#lko`ZuXvOyZ zyk`bzw|I&=>mWkbn{~*CRB;kHF+Wju`c&y?&FTV1$qf=SH=56u zq^{Lz!a%3_1T`z}s1Eyn1mDwVJA>DDoi($a697Y)Rq}X$1%}!RmmXPbWgQ@HmeO{k z_z`eisF3`-lGw1w;s!!vn0}cZFtI6SGmDwW!7W%`ZL+M8jKVYp#``_UwK7`9IkEf-7sy`(?~A$K^L*n}|4{-D;!JvS;NAiTf@B3|%4jHZ~Cn z*x!#IA!Ozw6PN~2Z?Y)-(X3{HaQhKY31)r%E=4PU(uB8I7ZK-Jo`M!qx;53``Ebmd z9&5r1haV}D3iW`<{qfPGKdchqgk_dmk&K*V2b#ND??pFlpe-_JVP@K44QSlYOTn-e zJv^V#5Xf3&J{9ZmHB?06FeEH~;Q_+61{k`3h4y0n6~b7ui+SN-k?}!C9J@HWCG+Io z$~HAc%uEg>4}s}rILKsth-Cyn=Tw@NQN-GezMj3~NM^zqU|<6UDi%a#HE7y@ z93#S}&EYT8x)7c5uf9{`+Sxn~0;>Q46zZ<<2PHScYu5m4GFXNn;0jsER}ef;5;FyX zac~HQc$`PQUNa~NOWruA0q39%IVd8vU_ho|NfEp0vel)95NJ#(KhLt`kJJKDTqJ(w zGAFIJX$W41q(dChaU_-rJu!Nd^4n_MIv(0t+AxRKhry1 zP+Hr+7EVgOK-pMOj5q)CI)jUV!J`=8oEd?2-8XLCMikj-MX1&$fzmHFY}`e3ZSfS zMUCc^HX%luZTAR$t^Sej()CYf&`AJ_bl^JAcz78r^msVj8;$coi~k2aP_{r5PEbLV ztFXJtm^pfJo3%$Qc5at;o4JR7jfcY1nO(BATEEOB`Q(s$HosPa*af2xMlncP1d=OR zhRj>w%^6#+lP>f~9xy2sMDEo-z7Zgh!YY8LcX^4hc&kO5a_Qe)QCJMB3saQ;lfoUx z_TN)OTHUzMM{m8clMWI_UA zKT*q(_|#bSSaI38HGdbnmjS${i%yVx@ipSTT4XU{W83kHlCXWApkU$Y%h<%@K))PX z8m63scjjvUSi}sVw%P zyX!mIflQr>uQW{-x}`CH2pgFwM1gdQF(8(SA|grCPW<>Wd!hYPVp_xez+J?5Oc04n z$ksZueaW=?b%r4##MU_v3=PryEqAq46(ccL^rNl zc;qnTYB2-11?^{{_4hTFplvXAQe3`3)AFoopsiJuBK(Ko@cpiU zrwW6uL_j>4Hfb(mi+%j~te8G4<}_V^V1cB@qi#-TnpsMR!bf3~DvhG-)Fqh{A;K@0 zp4<3H8#a#nET>F=@_`RHEy(J7G#dN?{%Jn**9vjTPe~4it5Dos)26aDRGR8aBu*}w zkse4Nkx*3)0heDHfzXf&J3SEzsWIlkxZ?s`xagpTiMZa3*T;|S$c-nyQeg0SGJIlV zqlNwIYvyw{l!wcA9ASQcfg&2IOhNNdYex8MW+*3r zEbWZ`?O+KpCMYf6)5qDW9MrGqTJh{i#*GTKc6j4S?CUqd-o-;>h`w1US1p-H&|_G} zQq+Y)Y9(ZNF8%{xxc^XiIJHDvZF)nSX+Gym+5a5&oEkfSR?FA?T<8vYT^|PajWcmBHP7%<%iI& zz-hBgjE6MFt=3Gp7#~3^H2^GIGUlb$j8B@O@XN#`;kl41#PYBkw)MMq+4{wh+AcXi zY@)`0dlzB?)+Vj#XlNC>YNF2QIl*-*iW1V@yt=mSGL*sp6?3mBN4CbHIdM7^12nU> zD4G8hk@ECptaKiyNydT$H26f*!sE+aZlH!!`q@X3KQb>RB6UPL2DQ4S8Q};Eo6y`K z#9IguY%qQHVR#ok@TGIHOmVOB> z9m5$o0PgYr5Y~&|xDABFEng%#b*_*@oaa0sBbh62WTGl-1X?EtOZWmk1tpUh1C=I! zK`V!Pc&tVpX=8QhEdOicNGr^rzKWjN#~?NcC))CSdjp>SzHS?1b5a^C!S%%4L<@N> ze#9ZT4AWfJsiA=xflJb9p%)oqe6V6Rka2+|8PtAkscbKb(+qQ)aGY@#z=8>@+z95! zkC=s23KHXLUNdIw!IcHB5N!x7VOpnulbJq~mMH#!psYm)3>%^p4rYjFXza)!NF_;J zEP18y6E|gpFU_)%x^Nt4QR`cKI05!*uU}lx4J=Hh^OBoT@te#SXh0PGX96b+{Iig{ z4KTdN4ddE1y1)(c4N+1Q(nZ2s-oV7^ja**dfGd3*tB?;07&9O`Ng|rq19TlDVp4t<2>UE1))pVg z#Jyi2_a{fA;o$CGAKsP4_eXDIICxDY76RdmS<{>m$p z6bt5C#6}7g4w;e#K{B!q0Ohj5jiBVbuY})1mD&ggI=L;tNO^T`W@~MKGhdw|B8mu6 zUYcuJ^0jPf0@^HTLRn^B9A_K%V=J5rEBP2#JSllGf`NQ1r|X!|BfEr*hfF_&@+%VD zj!X|Gn`?Nq`-vl)SQZgb3$6wUg#%TP42UZ{pNsGqu3&u6;niF-Pl;$~oQEwanNt3# z(^lIY3U%L3TYpHWtxi>ctRoDKz@Oq_Y5Fbo&fw)u6sQBrrZdE`lB|dQ>3piRSS4LE zj4EC8O-J+%^dpL>mrezz6B2kJ`zmELj!)3sToH_ijY1qYabBOyDpCz{IB*$g;9%5h z*C0s>%C1Q_8+B@qP?GS8WzXFzjna@?Q;J&cMXBNj!?XTXorj>BHPZK z_`w;M1H2e7&g)9%0*eGetPFQTsvQM)Db_ZJx?>8ZMrVA#4*$*J*}6ufa1JbvPICfFoR1{1oV=L2{%LFRmNlu*-etWUFl}YdBf$eWWfU8KbYuHDh}9idhggMl9;5@{*hanVHQwKJ_Hv>Hm_Zg#v=IIy3@YNx`bKZYQ_(Ki`qd`oTHyXZzt<(zkLyN;646(xk+9){kO_e$IS< zwxc${ouY$e#E?6`C7SZ_Q(PwTQb1*I9tS1!4HE=69^$o}7ZHLAQ%d>$2z>XTy+V2{ zRM$(K^ARRb%=W8%*JX;b)LSy~lIs6<@iRjH2NE!Tsc`>G#rL)Xa=ePN?A$*m&0EyK zxB-m8SYWqik!>}m50KU$fg8;xq_;bNIA)+9oaB0+jgjNO1^3!Y1%+@3)+vA#B-iaxMK4O4Z~3)(`lmfAVM#!8uy3s~ieuRP?6M zN$FBbV6;pIl-Mm8H2INMz!s>x0yBW0ZVD^R51}taeQb!4DtiGW2>WQcqeH=e%IWdl z6quYJ2VT7>&Jr45I}~3eBv+d}r1u#b9=Nce$~K?42Ij zHInx%YJ;#OX_iaS%A?6(YW~H4_Si{i(&W(8{^;S+@B@+wKI&E_9RpVq|D};X>ir?u zcSL;FKAVkD%D+BC2rd{&ugr`|^dK1oPr>j_(IBFxImWEj6eqMBPNA{o+ij89;C^{A{3L^rAO zgI)m33wQDOEG>NrDUFU*tZq7+ia^OG5W!s?X^T`!|zBt?76Z#fTRcmz-tu6{<(>#=KTe3~7x=o6SkLI8~tfUT) zg-Fqoi_KorTPLN$S)o+0YeEr>3R`rUnE*85HjqM`c%~{-DU5A@Qoc}=qOgERy2jq_^7N0^DPmzE$ha^=A(*Q_gO4}w5i;n&ix zashbQRPay2f{xp|KwuM~bOnM9vN*QMl_9ge6kkO3S7i*yiD613mZtp0oE@XsOb_CL zL@a`RU?3)Jae2^xWqTZDfbmOLkoyD;j{lYt2?bX;YK{Gf3CwmAD`%WP^!VDkZZXL> zB)_qC%55bRrWq3(wcoXxSAme|vJ!)+M@pI8E+?}?RAizovU!?*I01&ruc;ozCfr!V zhaerbFHw!b?KFJN<$I|I_ESQEBrI>kK?wHU++(mN_(X$$>NTrhvRbdBowu;b#eDkf ztd(^<3`4ujOrU5oWQYswm$WmCBrS6RMzBgst^efsec@O%Yy__G$7{L(w~l*Tu|vez zcTIi8BIW`63P=bK;D5o$^RSdo7rBo2EGR_K$~_DZO<7(Sd#pnD$~x7cs$pTNIHBl> z>yfgH*eq3lwmfmJ&VZvAW~r5B7_4S3`jzV2pzldFwxDvnEu7KDO+hmO&d|K%jkQ9u zBcfO_@HAt14c>Vef;bkab}XTkrWr5Rj29{Q5D4SX{NWF1Y@9T4jJQOg5zxOWRh3<- zMAju12L|r*%s|VWF`)*{=#?22y613j_%L~6Ry&7(XmvBq#LQJ&~#~1xBY;|Ats93E?{6%9IeU zS>6tRNW2CiUAsHCP`1W)HgI8N6~T6q_rxf*|cDh z3{uBnh`_Qm#B4)!D+5GK24V-`!Kwq;C$``{Gc*+;MARPXNU7dRc2uT>>{+~%d^AH^ zFCftckY2q_<~FN&2r$W2!E&5Ww8pWy08c=$ztv_de>FhG2>fR?#{1#PWU$W{W!oCT zw*%&69Ek#IN{Ef9G#jP4d!s%Z%0_AW#sM#jk(Mw&s~`uxQ25Xcb34w7fI!-SZ`-!Z zq2Nq_W;)Obg(co4f|XTZ=u)N}OwT=L(x>t|aBK5?WK6CXPh{=0ODYpUpQHE`phOp0 z1IA$hf7P|qu#9xL@8?Gq7BLB}LQa|)I&kC86 ze-jF7c?{I>&y0fE3u_F#Eg3B8q+XJm|9EH`+`_cw_)v13tnBcr;h?FvKFYikSz+77b(~z7Rs%&XsD&vxHm@`EJ@cJ%*xEFS~-1nNobS}SUiDkpNvf9Q{ zqtscz*0a`JLK$L!h=35}A+oIXqPJxX&xr*zW2}eq68u8~iwv(pOe?pOEEQbPYQ?(H zR0h)343|;;wH&l}jgWNXBN}0R$I;T0f6sXOz`<5POtYi&alZs6)D%P|sM6K2R>OI# zaDWxm)+!*T$Lq3N`Xxw_2}ccPiV#<^NC#Fk@&k)2NofMKbA0{^pq)j2x65+?w1YJh zI8V^!C?ZojH<06rbyk}adZq$#X9%RUq69xGgxm^F>URfRxBA_CVT2V}#$Etff5sU7 z;7cY=K)^N(%~7ZtFjMj+r0@t6PBEkpjQkjN+Jry@tVq0&O9IUs0jXr_k8DkUDo2pl zR5GFfzu#kd+jjXRNz5007MQ~i67ja>tydebNHVu_C8by`W3^0farcZ0`|_GR3m9de zF0f$IE}{!1ks133pjfc6xg3=kf9^)jVZv%-vHr(T9Re|1Jqhr$8k#DPm!A@GKx)qO zApf|m4G*^aJ10fZ|8k!*{oVK+m11EPp$f;sEJ(h5ckweT{l#!NwavGbTYdy7CZ4GU zkB&On^Mg@@rO@8W^urCFUl-Nk+*c?Uakv>CLU%V-8*j7`PwD$)Q@;`~fBYuvaGrdO z*~=4_Ldq0zTrA^WA!diU!){@d6{{~=!10)`U8zalPcV#V*a{We@Y;W0yaN~;69rS}jv3znIptewu;I>8jh1!j=X3E}y&Y1Dl$ zc&*BRu8=hC=sijR9)7H#Ltjcxb00BjE${)G;Q)F_38KodjiwU`j)E@<5ej&Uinq(g z)ym!TWHSpgmF}Qah>ux^$oHGGd3{2yo%-q9d*8hJ>AM%-TJ?TMe+7Zo#w_<=8(GR9 z)}H>#koeNLU>)5bS89b>wMCZ2wvJ1O&$hz8s0ThXwVCemOwF$EL9#Av+zHJ@+8*1c zBajxLncSPx$9IA(3`_dLxlwCrays2B;4n-MTh$LBs1TypbQ6$9J%pf&1wy9mo0K#~ zv@WDw8Jg!rxW){pe*yA{$P;llGCHI?Z~Ur|4~o~IZwWye(U2SOCv}*?@*+KRe1nLQ zp~5lrH&hClz6X7owAAt0_1fC8Bnal%W`UTLYf1C3I@An5WXg!Pt)(!=r4Z)vpxp1p z9r0Xw4KdTt?>h3``Ma~TmzCSDPXx+c12SEE{HP~R6GKek2*@ zxtym06Pc}FfBCA7gCm5lvr2rc$vuE!3Y+>z97a1N=y8KUy3el82n+gW-l3FY`i4`$ z;SSE`5ajlzc8`w_k;88Gkx`#rU)<|%?X7wQdsgsea|Yz!7*I#nK#84&Po8$8ftv>v zxah|v#e!@w0Ry(&a|(^n1j2ER2nEyGMA|v5qZIK&f9CFFte|TL?=yJ!1Fh19TEM@oK3+8 zuHg&y4J<~1-Z03+j2WjnCSDOFXC^Y85B>{ujjNUL*blZ4riXmta@#Togb;F&l>TH< zsUvt{e-VW+;yvm*md7JJEnUk3M2tZRh}Flp!K>5-ujQaeRvdW36N_8TixapS!2RB= zP)-EnkNr)eUqMtv{yyRIr*~<1Q^rEx5|SJYk(v7N1|vc7cUpV!V#HTW_YViCDP85n ztB)Zk2OyhFN?^g>OG26^ktNHQK+jc(K$M~+f5Y(v#q~w=R6Y-yOT{F5-~%&uT`{%t zC&frQ(~DG5kc9J{EQmiNO0q-2vS-pH;ZNnVahO{FX@?$>81)Q~{sY)GA_O(=1t$X% z!X$^AIZtI2{YF5>Z?Ms6Wpl&ev$;XU(gJjM(uB2s^6fkRrJx!aPGvP}3R{DfQ9Z33 ze@W_Pl&B~&MmEzHSR`9BxYUmEJ2E;H@ik~H4lfI?QCUMFKuHxhJVy2@<(K)l-eK4H zk`IERDi|>UD-EYQjR9J>I0_-x-f}tADvE1UCSvW06l9t z<741SG4Ad$5pvyD3ueL**OFJQyEw`j4rfq*Cy=4sXe-0Um5;0^5~ntn%A{5i%FO_? zbceF--ajHHE6hkO;sgsTa1hy5mjGUvL+`=2@uTH1xBk%6OfbOZJN9=p|Ec~uY+OR&D~@1B z;J%k@m(kSg;slC44+9YgY0IKkWR3YoLLLKk5y(S4q5LLN98x)@EQ}PRabvKE3_bOm zAbTYQCAXK(it3W$^LEtRIuV)0^ub>QqWh2`$d1oIx$@)EIlKJL`wl8(e<)OpoK<=Y zsteJ@v-hLJKGYHmfmC(Da*mxX9(6~zuhbMHEvXrhiKG>{oO4aQxWx5}i*#UcEE+`z zwTBzL1k29zMV@U!K{f|oiqO2}o@Nsu4>5mA+%Vs9zjhDpFvq1I$w(fS*?@@C>J2LC z7BH}J<-XXQymE^@dbNnBf89C{N2ytgWWm6lpu{-fvfglcr`vJl!LTco}m+SYz~>gif!`{mEd+-D_6aj|?v}?sGOfmGdCp(zeI)IO)feZQAqSKLbhjdpF$Bxqo$i*Ua@OW{*`(|31%ZXI#%^4>OLU@ zDcHz*!GV^B@k(hFe+})k_^BZ-!mU+?*rlyOBQ&8a9^5b1IyO*Y2TmGqMWaqALzD{oGhah&POy@e=lQ&fM<9Vx`p6gNH0nP z`*Jat2K}ND((kwd35)M6nh5B}x0n;9A8YxS_58IpfU)G z2LD6@Pw(BDINIZsFo&ZB<~+;H{Td_}lO=Wx6PX*Vr8*01$6S3e?6)ZhS|}UCtm;us zh%2Q5E!Pcse>UUqkZFA3)!GvElnj?KnA){PtddT&)a4*2XC`uwQe-625t~`AIWt(W4|8lK+B1B)J(tw-`G- zg|eG;f37sXiYk#}2sSKjQDpZNmg=G39y&X{;FnOkj9VnmixugRFqL&>5)ZP4usvz< z=VZn@K9O(wW(WjGtO^E9I~zYiq%(*_Mg7DIv%|-9GVVpNas@ro+I}&;=J96n zwCr!GTlXiqjq2)N3W^aN1zrwtyVFV{+<`O(e=dtVZmlC?u!xz3sro};j8agrt^PFN zI~U>S`3{5g9YtY#&V}vVM-cX_5k0x0n?&%P5MLRmAaY-$%n183X}_A!;vsx6 z_mBp2D*=HO?_*#lTs}OPz$Z&{#~Y~fdH~7}6ghTx;X)c=W=ZS@rCB5{!%^3i z8{vDcW{7>ebsI1FFZA1e%*^UHNO|2Y&IL!0-;t?+_IJcP4 z2twu{M(y!leqZH6+MdL+~@r{rN^`bat>cser6KF|_ikbf0UJ z`K2N(Wnwab&#G!eSDTr98;~epe`*EC!gvYV>!L9_?7YwWRlt(F#wu$FbE9~1MGJ^f z8Cn3=bhQOU04rL69k{okn0Hzre~QM|$&rLH`6yokWEMx)~Z_tPAT0 zjClTqWw5SDMf9f2X@>&p7e%yV+cvxMBElmF4;?NrM}0&+KQ+uTdW0+%^;YxY2uX9m zYi^!yhKwadYI!B??u%>`fyRDU6N;bDB%YlRhRg;tuCOc^;4@n!0gI$rbE~z0Z?^GT zl)&u;Rtp-&ic+qZF_$RWL1@>kmpI%Gdd)scyFC3QA+Q0 z6s^sLB`i=O=rI=PqPs{N9?1jLUyK<)=0o z{zfK0$HO;o{Mzm#OtR9U1L7j*OmlP)X|(LMSBKsHHpbs}oFDaFi@Jp=H+jyDrrbzso@Jd@;jwdMqPDW0=tOC_l~2; zjhegju1FsJz}Yb1`1xs(k%K_SoC>Zd{XwJ_r z*ylI+i`ny7jI6gW-XpW;3`Hq~6>7B2nPL@Ml~V&qr5mbBHa}veO|jyeQ&-PZ1s79n zDPE*nF5ZUzoEHn>*|XB1-G5dYw0qBr0e)p1-hEpG1HHEi zJh*>Bf6p6F9@$PY!tw$(xp%z6?QQD8s!%t5*dMO82Cc8ppF9#($xgBA!G{X>Ktp6L z(BUDCO*{$}LiF8tG(fsGqQkjT^vznm_H@wM?`$0&zJd_-G4354M32_`0`MupCp9m7 z)T~|WcN8{Y$|-TOA%oCbCf`iG&m(O|mIwg4dj zZE<7BktrBC^~it3!BI99QFWtPiRTqeq|S1I>sdE!e0uQg5gip(pQ0XD|r+0Q~qk1V}5G!u0f4t+o$ICI*oGQ zh~vh_F45Uvu>G5Q8+O4jfVA1?)Wl%6_sg-;H-1sflg9U1xrhJ8a(`}VlCE4iv3I}w zNP1O`b*oMLhDg<`$A68-(z5=nK9~KHsHwaF%`o~?ds{_RT^wr<+-Rum!V#iHZ;Oe- zR3Z$rRXD+^c_LZR#L^qqdgE6IF|FVNs=42*&%cuL%1?R7uu9V+{jtbog?VyRFnJ26s|EOaVr^Fiwa1?J!p*aG1fM?&4199+)HxhC$;>E0~ne~ zWv?X<%wMp%F#n%04nY%ZJ~#5Gi6%J}AE9ct3$vfv+p9AyuUGimJ2fut#jYYhGqFGQ z{*V<2kTV#C_P84aSD{|(JW*?GkC5H;I{U_~3hcxJ?Hn5O%KOpq00#MuII0d@o}c3Y zH2@n5lc6Ss=YIwb1FOV>80mfXv!P&&`u)aZBJj2Rrbr<0ii6PEv6o^y-t1Z7da$2| z@#mpnnf#|cXet%|F{Fq;0FB&I4>tosl|EKpSrXQnP+M@F2?^2*0Yh+tzLEFXn*)6= zy@;Q2A z{dji>qksG356@q47~*JUO8;88yvzzJ2Xi;sat8pA>%X(`jbWu)KW*FRAPVggsN;i+ zD&F2lH^qr~^*klHc&p0~NU1~O&{TY2*O7Vzw9#K99w?V#=-XBE4aNEn(I$e#=+Sr9 z3mxRUS|cFT3h~2%?6^g`5|48hF*Pa{i%g4edVjgr{(P_pCB*&14d#M7B_{39_h^qf z96AI-a0)#$uTT&@4MIBBFy5Y3wP#}etDmYrBBc;3@UaTm+8ttcB4@BlDUW5;f!9f( ziH#q7ttasZ#nx6H;_Xz2urqT{66O4{H}g;cqMSA`uNd!N~<+& z8xH!^#0g*_R3-FZ_j&*UZ}}$YBE^3r!+u(+hv*30=+)mkIk|ei3wlW0Ch$0!?Hr8D zPsb~z0TEmAE5}u0Abu)y76rfICp|ng7w@=Q87ER5b)ck|Fcvo6&k-21Q!~_6?|=92 z&Ms-7h4UJM$|n@p20G0tY^X>}FQD3Qd|YT*fpj1S^^sjABB%Z%#Q3y+^#dUri4ey@ z(qJUP8pfV<^hgj59((9#EUEP5GjMR zT}X28pc_6THlcSN0t}8!rud5iGZeo+gfP*~Gx)T3TK)R*2E@zZd+@JR{HXaC5KYfQy9 zvZ7!b-`P~ayYA*0e#JO+Kz}C3G>kPH0GF z^#>~<`yY?{qiF!Q}VtZ2BMkXMg(tvgv2C<`FZsGQV{axzZ z*5a@~zCu_wx968;m*#G*fL!17jeh{x&xJ+%0nmrYfyjsb&Zh6@%JhAoPv5uynZCbl`tE4H*lF`O z-YuiYzR@Yu_l4QHo6C1FcUZo&@RW&#fM;2@W=SVq+0yLX@;ndAvwWMIXWQ~G1myN& zXYt0|()6yPYlGZFO+@`Mio40trxv+5W#%;QJXDa-YDqLLHnq8c`bqi8CyF7Q}4#T>* zv^;xzZh^mZH-B&6qL5n@HMe+YiG=q5TX(!-H26^!)Z6J#b|_RWu#ee)#WH;@0b zZ~i)#Q-5?@oMqqw7ZwNH6lVEM5`zB=dhS)1e>zy0By!n6Zo$Gp&$Fk?Y&s7+$ z49kusuzWs5@sOBsh&dVvV7!QI3oN69mn8uPynpX(p1GvCh57xfkMAqlkUeW>&z>hw zg4JE!Zy&3xtE;Q4))o#Ro+8rFV3;MbI`uk<9aNwouh-^R>lCmIm$L%*#`$b{b(wSE z(zVraOzy*{Nid>#q$i) zMJ=Qs%WLB9ETiu))h%f2w2jS};+1)IV1I@EY<{u1%>Kyni9ey28p&0CwLsac;;dJx zd`*1fBF$S~>yRnV59Kl4i^{gl)KRic;gNQ1<{vPvQ+;(1fjPDe!T?u_8tO_}o)>Gt zR=rRs#7tX#HRhT&F3r6PZ(bxq0CV52a3(%oP&LUc!?x_?50 zCypv}woDGqyG;-+(hSY7sXn-g1%{bvCqS>(>NIu@7Tx{z)2@bz$CxAQ0!(&Ye^!q|tunTZij*VQFOvhr16U$ksf0hXS>zvSk z_ZOl6^H?bK*%z6nODR1VcL}AhFLG$M&snIVdaH|K`>#PAA*^J*RwuR!5v(uT$yaCm z`rK*@^m5FtuXQ6@@YwSVx#=CL}b zH8Q6iWL~?>GD!#smUPyq-4sd#R{5>7uAzP+f@?Yo=toVNTYIm5JJEs;E^D?Mv6}qQ zP&3_D_o-PO7jaO>7esQ`<~jU`Qdq?bP{-;L`9qsJzTvC%ZJvH1z2L~B1G|=R=p235 z7)&I8i;O&DL?)3VO0%6p!+${2R15>5mCngV)f)9ygZKbUHc<;311+V9FpGXSpqr)L zzzxQwyFq=CX81x@L>uR|8LaY$VX?}{NL$=^2*iNsGuKLu&8q8-?~DcoLZ&g%;Hb;O z9qaOnHp7+0NyL`z$3{=3s5lXO%^=&b2qr_Lnp~YWLpHk-Kxr59jei6`tTSZLhHpcn z1tN%BAnH0;;zx!(0u*;60($zP6OLII*Ni35z%Ur95Zdgj2@N2i&BP5!Xr7_BTD7n` zX=95$^}{g%PYjW4&@>V@ur?C#V6=q+2`hw{je;;%gJ4UAi4uM=1~wS~iCe~StGH!+ zmv0%Zt-rR6Kl#)R?td)37h}I93b{OQ7-N)?wU%MwQBBg`iS#Sxe6|9UNICFf^P)_) zc0zU+zO4%alewD6HR84%4!U+h$X2$peB_#>f^4@^0p*50gQOuclIRD%NzA`QKRo)^ zk(AKt%5teDQ9N5ji?`W^DBoIYV9G1Em|kC$PHCOBwz75B`)i&3dFxDaExWUL&w&A?_y%ma zF@gMpjGSS=5gAOR%x7FREFFQuU6ax*ATAcG=&p5cbC_WHT)qU1K6uKI)?fbj$SV1k zmD*fG3hUasR)1T|H-&ZyS$jFM4*o*cKMz?&xFA>(hJ>30M>QkF$xnd1RBoI6KagDt zBHxxhLyu+&Jq9^?9Q=hIev$=H>NR;_0F5@-ELtQo7a|?5uq=;`&pe&b<$s4F-E=AOqR^NE^qlu zt*jXTH?Z5%d5~U1>gzM^tdRq(FcTuu~z)vK z5v9|Wvc@wd7}Gjm=Oi_zEG-VgsYB~5Hh-3AGxz9UX}>ievUOKe__p^wjX-lYI$iv$AwjQ z{L%Jiw`|KOv7te~++hn_T7-97n0R$8mJEG5?x8QsCUo@WJ+m6~ovl?OBPTgRoPYg= z5PzoRuU=miN-Q9V_OdUVVz`z0RXw#>WP!6kKw65NxpLVxENnBhMq5aSEodJ8X$Ae# zTv{R(0J!+~Y(^B5Cz*BtNgeyj{@jMrNXcUr23`m_y-x3_x7@|a}1zA7>Mc&qZ7C#G5a83)qws(;aFMs>Iw zPc64OabMEu@rLP8EYbetW@`#uwnGeHE=pGf1rk~^kH*yU zyjqJ44uvY3ZwyUpq6s)v057@hZxC?CQnV80ctN^WUxs~<9;?E%N`HDov~5kzoU1oc zid^H3iT{Zgnn;rl>?@viNZ%5c#MN#=`}DoacJ-(!@WpD2eq1S*lC75~rS(Yp25rCh^R)xGds*E}J62iPi0< zS^Sg7FlUd!<;H*QP=7{#FZ3!TqZaLr=r~=5c=Yv+AqGG8F))hROAWetd&M#@uB5(} z)eI%q1{lWD7t=T~yZLFiQ?^Uf-mMfe?#Z5tY=p`)u(DUpZUhEYo!QM~57KO*n(^hD zthboGYi}oX>STzb*2zA9u(f*d?hI>uC$%}ul-B2__TScI%YTXB9Hua$u?uIOqGHHH zJx9ZC=NAk;V}11P+fJ)?h;L!DossI_A0oLL_G)jB`qD{xyYA6673#`-TCgBoIjSv9 zeW*#wfu5SLb*yg~>i#e#TM@PSj~y(sVQXn06IxSUWGq<)l}@MG#i-B8iIm33SspDVetjbt6;?wTfhhJ)`d*iV8l0OX%s4;#!yQ&uY=($ zukm09IDI+XDtyD(O)-WxewU2kw>00@28}OPIB5hAG46qtbLb73uDHewSh-< zA?EzlNo{`0S#>w;JF2bDP2o%I^bID?YG*ZDofB40TSNBsNx#>g{v6lNpld(-o&LeQ zY%v9!>}J;1a6(_yum^4aHRVy+5eWt%$GqOOrybc6@%hO4%R94x3vIlt$?e|B2-7*v zqg_STln zBHk8?faufbN+jh>7R3Nfp8;4ab zZR3VaXLt_(jA_F+GP@qC&&RV_q##;pr}6`U9X%}cSx@oZJ?^(Oc-Mx4}!3jZJ4joC7izc0&0p2*ipWv5sTTY%S zD|?T|eANS{Og@5xQGcvcW0tbtp*d!|87sx+(BTh%RkpSKO<(mJ+n<6jYiFPAuyG68 zh_yj%RLPI-^m94xOr_1m(r(4Vo*R~r8h_Kbs?SAPv#&qNa@pjsy;<;QM!%lN!aiAH z-AT=8eoHf6>PzEMpKtJ$EQ4Bdw72$Lw##wek5f&I&wa}<;i9})Xz!vzdnz>R@1=#F zIbR7X_14DpEqscWOTFbv9mufsHCcruGeGAj%K7+ZKz%3jt zlvvcr;u_c6(e@CjUa+-z8IS8K6Ng}oRk^+kxX-jB7g^YsG9#Wb5txZPU~5kN=4ItM zGmz!-a+X*IR5e)?81`y8?EWt@AAh~_e3Y3cZ+tM7X36->;V*^CmjD*hKh)lU;8R`B zIPA7L;pkzkG)3)j-)A^66uSlAwXS7*>lzLO#0HuN1RPqO;7HfAM7Aj8xAxD%mJ`n0 z|4v--t^$kYdGg`c{mC?R1jo>h<0+k=Z-w4w4cHm&ciY1pxA5fqUj(-X4zx#q0+aH!K$Hi;ZQV@8N@teOobc^O!m((?h)Yv2NmAU zL*_7`X@VFJpX9l~>zsKbr+;SFv|zOUMyHe4F+g@>lmQj|% zk=FUq^gEg#=Bbmj8h?L2))?^8$o)ZiW;p!pw}u}yq1}B7X5$<$7;4LII+@xcJd9H> zTki4%S>#F5BF(1YUm+5`6c36g#!2YrTJq@Dg`zNMcbv4Z$($w#U^GedNzOFrzme2Q zcE$5;nfrk2h?a_dxexizy?cz$$Z+j~W>?2QRzGlEgp|r0DSvrkLc|s~Qu5+>lGoG4 z+B(-6n_&mMgmJOZ$AM5+LKcgLqx6&$QrV_V7W*~)4zfdoqyZBeg7}iPMX)A0Fn(bkWefd;N?+fhVT8?cigdHE=bseCJ)RNDi2IT2#7 zPY;TW6D-joynj^V#QC7w!H>+r&~abGWW8LevR_V)E%P+9p6zlxJe^hstam5(KX89? zqT>D16#Ty677`l&Hg4pR2RL`zWq-PI11Z~Ce>63~`-cdVF9!Yr|7}@Wo0S<^*>7W$ z{Q!IaAV|J?{bx9Fsj_#TvfJTn&sxeYkZ{;_2wqwaVSinxFYk@d`mO!({sI~$R}Lr6 zpW!^F!OdsQPo4h$^zPYSI5&*>kzlHyH=aJ;_JSIB3rT#M6Zxk`yn-rS+BIp&r)%0Z z8u*O578>99J#YPMKe^^20&!B|I?GvD|5 zSFeIK&I?HRi$*&no}cQnN9xjU^}_wgyc5YRyLr}^<168<;w3%_Prr;JIFOP3bcn(iPM2NN0V5p!B}S~`z&h1ETo2K?DI4e7k$M-Q zcK2I2apSO;oYMg<0!N{j%hLfwJ#)z>-yJw%48iH4PQ$;j)L!5KNr!uL>BeLqg@|Q? zoc7X3(CD7jD_kUHs;vaKJnceeSb_2o zkZ!c!v_Vc>P-Ri`h~#}Cb>#}Fmyy%~H3qmu+wRMWm(0`wAQW+Ewb9(YwfE)Aw0;^A z%qS2l#Y2|W0X714^Ko(*#BeU3h(V@f{UM&^Ck@5=L%Efg{nr5*0jHN2*a0#E^PZPW z*a1|3T5`L)i_$X}ny#LoMWe4BH3ttq^upw&FYoW?+b*=lHZR+2jj%v}w9fs~ZMOz9 z48zY`P6H!{Lo7o%?M9x!-4Oe)$jPrSL~Gc*n!SO%`tp4w0fR4JMA+DM$zemvj$d9M zSFetN*qhDs@PKP5x{e^Tyrj??7}AEupxWAhg?ja7_8L7G%qWn6VPE%@PY4j25-d%v zH5jkY23xOuL>CREv#dL5?{kUkm05f~8n3a$23Vk#a^UGlX#Mj?bm`vRI2exPW6xHT zgPa~bmV_ihZkw8ZjFwWR%AQ4^7zdWcB_cGH7|At?ed%)IzMv;vl}V2}{aTG<=; z335u7ZYq&rgb`RjT`PBtY@sK;!E=pg9LtfbapL%~s-OoFbX7JHiI_|y4d>#e!>P<* z1sc0sTmV3&aR2QZVJT=1whu&MEruL_>1XG9*blj&KaB=wAxF3h4beWA$|DMd+WNRV z=chO`)=N=S%pE{=UEC>Cq^i_Jh8Ti<7V>PhhPd+g<7R-Ma_HNzMQ7bbc=*Kh0D^DI z_}$Hqw1mANeD@1NwkQ4Y&8^esKJ|vg+s(nl{>kVheSX`-aUuN<{wh1%JjY~zv|?B} zr^AEMFl+0!1W%J+gUt zjwL~~_d;!~Wn7qS!c%9191iOoT!ob4&T4*NI5*m}=h_&1NPo2X4foSrW~a`Xq^{2ZtZcX^A6H=wb!LZ0uB6FRrZRje}6xJ%(FF843Z0> zykV`^)Y#<}80;b$^2nWf7L=4_$CMewp&965^Gr7}LIBQY5lqWjf#^3mNSLRvG;{-F zDIz#HA0M)qm{^yX6CpK-_%B@eAh2)|Q25L^MBS506NgM_mYe5(D?t+>Z1xdHvG@R? zbI1{8i~3d+39R7Pu+Qax@bc$8a`TXe`o-qo7+9l1c)QIASb-?lsmL#kHkuNH0n73& zsAz>rOFM>I5{dX2Uc03X5Mn0qQt<>?tO_9OcZuy&YrKyH6>P%c;siz)#elbOLv!)E zA9rpdi0YZ{+sN!4#GKGSJZ=~@1mP8gBe|O=b>_>nM5;+xx5?2s(AoMv4=%%eDB7q>I%=fk>QsME< z#ZM0+Qb0(d9n@q>L{M7a6J27wO=Hjw-w*EbazWX-{o%c)0}|Hiw2BF%=pBMP2du!5 z-^PgqP}P5F*AXFq82Y5pC~jCCp^^(Roe?WKyh~8IT9%AYm-EpZEjvp@;UxyP?VMnF zY!y0qHb*GR#6XtW6BgBBltlrfWR@3Q11%Fdfi;EM}ym7=42J;0SaJQ1`Yc z#PW8UzD$fbJ;ZHp2uq-Q+!vKVkC`JH8r%4D|0FeI#MO17&QUCJYrj)y!4^w858n(J z6`~Av0r0V%$|COGW@LZ|x{k}@Cc8@jkS&Bqy6`R!&rP)YxGIQIW3NI)Ojw9G`W+*u zU32yAzXd83n+DG&(MxO``$Q5IlJEM$esMw3o*o z(nk2&LOh-S6d!~gQxOV|k!&F;94Qph{)wr)#`tM}|7|`)kEPI1n2^UUiB-U^+c4mRN!;mbKrjB!n36+l#HG zbK>Dsw9mpxsiyUvVgsqLgs3+Ar>4;nAq9H&v`0-EfjA;5C8u%E(6sE92JtuaPO@J7 zcGQZ0luvJ4M3`Bu-BDL`o|k!`oiF{w^H3(#&W{EF&Nvtt#_;_~|HQ8EU7CyJn|cA1 zGYlsX$@m@b>tat(7;*;-N)PYs+?0j%jv96vP8XI<7ePLZ`iXkOZ#Xs#7(edi_0_;O zVJpXi_Q{~t>~@5V7WT&rh3)qKai7WNX3@BRrUF#A&TpBwLF7bJT4Eo7#VY+lMZX^P zWh%jkLTgVr4%(4gJlf#&z$c#`Z1qz(@jXN$3uBrfR>-jBSNmXi7H}zExRb%ZaCGn_ z&au-5>mo!WJEzb+P9JVZrmG@B@ITHrgULl{?FW0JN%0>}L)r(H9JsVIdi$0Q&#vl! z{Mmsk0w0Vr4-R46`a{^n;(rXB)_(Kgom54_n%RGAZ%c!8SZ`KTrwbL5^ak=CJ#{BO zw*Ah-=3(NT1d#A30XQV25M(kt83Y#Z0HJZn6en4sB$HAsal&RqAq2Zr=NWiP<#0j} z?2SBkkYrWgoJJ1IfOv;$^);BT5+kq#4lhZWrCd9ZIU5oz}O)%xBCRAFlBDQsd`0%l$! zghjM9AHw~i7Or3RgAp?QQy&rk8{oly*daeIoql z8i1pbugaY~Awr?60_?=y*dMeWwvn-(w(j(Nz@5x2=`os!!N&z>L?}ok?iM5x_HMf@kmwElOq)Cc#WZ)aBBMq_hjd}B5%Wp} znO2i~56y+he)~YonIwz~*K}-utFR_rmYt*a8%ht++CXun9nF(aF~L}Ct|R7zAZTx% zJmg8Z06bfEufr95taF3|3Rk43z%sfc&gdlU+}=KkX_*D!q>R6`JH&YMJ|TY%yj7zA z4#va~*=O~5?Gw?hVhsvAeKL6B0A$FH^c9P6ZYIKm5m-h;N_&efLJACj32P5&SsMKS z$p#-yE~fjZMExobLY4q>uks%_-8m#lM0g-(F_+|q(co?vQ6uahIwHxl2Exu7j88}< zSyC#BGs`c{Zkuh{y;^u<5tm@{HwPB!NWdG1(v!@RYE6Uq976=zY$iV0#X^!ct&l+2 zfuBi6C;dN5;3b}7F6lRak8PIn!K2&T&e_S4x7wm$%~azYI1`HAW~M&z9gSOfGE1|5&R2s)5gXkTHMN{!8tHv6ho@8H>;0p+Xj*1vY0tV4di+Cylec0eh z3ZfLncylU@E($w;NZhw*mTF{1a3e8MssZT0y>ZQC8xAPOJ%a`jM@rP2Ng$TTog$QG zp`^AckOB@O*@r<07(_A*0r<6elw$}uYGtKyS~ZyUC(1Mc9qxBx4JO+VjNcG91au(7 zzg)}_;burFlXrv!!U67%)II^84(m0!0K_Ng@Dku2nO#DERJt~ahynXx%$QU}DISt~ zA7msXwp`Glu4leiPH^JlKHVe-f&^7scklr6Mu7;qW4K{3haCo$fFOYTZrn2|3n^UX zAEh=rc?)3wrZNd#3}!(=gX{$;IuLF-XCfE}X31%{526?c)C%*G7XYS4T$H|eXzNfL zXG)85n3#@#5Yr$bPn;MsP(!A2L}?NQ#)1No7J>#Gxdg2}yd3 z5>xybLck!N-~?(D=m! z9~L|l50N4zorI^4TPHj*GPs2t%vdgz9DRLlVQlh*FSa`Y`r9gsND8PIl1oVCI zA|V4RWH3K!VZ?%1NFWz5BLSJH$bc3UG?N&SfcyrmP|VVt>_~9` znmNjefQ{lRe=A6fNO^DZG^#;zM3Npa`98nw_c;jkd!P6vE>$XNZuJM`5I-IuJpFK> zlf6hrUZzrBjQZTSc3P%>&5+Vn! zr*`kSYq32xjaUJk4O;=8ja@N+Hh|7X))plE#_6fnpaawnfiwllvp^$kfn<506}D88 z2`=tnV-8Ih2e~}?u36~H(xq`6GTh^m>vX$q2<@{F*0dXDJ5V-KmLnglWbex-nrJC| zpHm@Zf9lh~VDWCSyV?V2JvD&?BH|LZxIuN>uTRvKssp$T*)&^vHp}tuJ)G+zz;oTs zs=x!Dz&jPa3I}y>ODs)s1ZC43VcFECeA%>)dRS3Kw$wgsD~CmD`@~|>W4DAu8ZFcc zCORBEWRb95EnGv)P}5U51R*C!TsCqzS+BgWe>G!_BxLRMijjC<6D6=gz_dgQO58l5 zQA%Kw2vHJ|2O_;;IPDblzD6*{Nro==PrV{e#l>nZiz@MS$O(vpj6!w*V(t}==O0T* z$DfoIK1zq5573KvvQZ?RYrF{3M6wkhsbQ&vVfq-P6d$9ELfe!M*nt@Ns3%9Fwwfc) ze}RXnaZh z@hZxNDKC#^Se1#-QaqIG6q|?c~z2 z2=FqosD1;N?C%r8FWj69`DuIOe;f3+E}gKq^Y%9i(L!Xh=*)e1k$^0vN+rg{WWbe- zCUZ}kMFE@*y1M`kmmhwQk}8lcqx_@bLUzD;JR64#wTGfSPUYr8xMKW;;!&k2+ZhEe z%HO>55Y)WcdDb4Z_uEkEphV=CT)Q`)l#D=Nu1zTDo&BlX-+BAHV1F0we=iu{>ag#g za)-c%;^OMASJ|=hI9@*#U+jl~=nk6%JVlJ_6cJ;moai&1BOkKzax^Ro5WP}TE;RHY zm^=gZS~q$+j_7VmPdDQgloupsQ3(*UXr@Tv0DeQrAlVE%fMXavVBjx!6dFenK?~80 ziz(?%<*HHyr6P$CPwmfDfAd_LR|)hfp>QPy9aW1Y{l3ZCSCL?5T2@|Wnnz49nFE|e zGC&H+CJ+q~6NQFI@uQ$5k|dugn&%vKA8;G>K44IPAKlKRaN>>^LA9%(`4wcL7ixk{ zRP&0P;(xII*8i_6Sbta>%SjRQXr^EEAE=!5?^MIORPX9PMaL==f6@Jy(z-HX+8@@n z`UARCS*QL(wWj`{Zj_0(ylPa&&FKW!q+LFibTHgiUmni2$uc%R*ltO&G+|`{T6mvW z5Db`VR+Nr8tpP6-^O3OYDU|efy*}6Y=I0Yie3ysj`M3}WDjh)`tQ|Sf;yKytbmfA% z1S*7Y42`D>5o4%Af8?b_B(!BSF*!w45OW}K;9v;aw)-K$c#Zey`=(|?ADhz4Drs22 zEBSVc!wkf3vWnT8=P~pmshz0=c24^#$`E}PEgtunB?CaCL)0BkZt7vEG*bqyC$VXa=&Tf8m3zuntSIPp`NZwb?pJ zfv(p)L2hUU9D)iPN-JnJk{nYJHx>ZDD!V{@#$Jg@nwb=1VRM;ML_vgMza#Dsg=aI%a~ zcnbx=2>4b2l|I&t1TAZgLs9RLld(Os@>5h$M6|Gx2NyKrkcoGr@>eF+jj$5VnkIgB zA}UJmCMrIP7#4@9r~rweSKaZnC&~JX(OiZz@-%wne~)?N;$b>CK^SaM6X=HTk{CD# zIN@)A1c`4@h4Vw4OMI17kl6~5OKIH~K@hCeT>fjhbFI1{!*vN!a$AVHRPQmweMThL z5=O#QI38zGM+^Fn!uz&Q!{!v>$r)0;9gvkxUUs~tuJ@en4`R~pq ze)q}$f50)^=p8=vufwE~_f$qt#GCHcUVXT>zBl{bbp8tWeu|w&|Mr*^_i=sZJTvK(3SD$&yNBDZH3M3s&Nt0PgRAW3R`orV;ZQ5o zam8B5)BL7>XR)g@3@vG%pSK&ozR2I*x3LhAn;Utb*@DsMWs4&*g%O0 zfBF~V4>5@ll!cv!Z${Y|i5_chbOOwsA9H+!?!-_FRETP*N)5$(*HlT0)P3r%uEaNLz$ji>jj zo$b_;M>15;YU*qU67lrjMrXTG-_R$W#`Ra%Uwyy(kMH-sfA#(B^zJ{df4>)Ee>2~| zx(X-D|8i~S`^~?9saULHvC5ZM)IYQL{pPEgFT4LZ-`Ja( zow<%RJM2bnyc+CLNZ*<;`-Oksf6*fB#QwM6u@sM;Ts+oPzOUeY2B$114Vg>VEm;NA zZLO+SIeE9vF1@dU>yl2VJ#f4>|;#I|P} zFNdCB;}SrgZ!DLr?-}!il`zcj?KJ-F`EXNkXZq{;aD8VsMictn1qoEh6HKp|m|#&f^lJ&!Y89950;=SP@|OrYj4tIiDPFr`n1U%r5D)c+d7e=_rO$X<8_%XGBH zY|PP)Q1z3n0e%?rPLHn8s<@|q`O?ke^%*u|Rp~oBzwt6lr4sNq&ky9wm%PB2 z!&%DMn3Sw_@7_TnC{1vm@PFwu3-o%2In-fn>#AF zJj}GGY6(w<*ig}qe{f=^p>zs;jtSmucoA zh51J3+B9llB-8hm9rDmwFWl&Fwx>tcZuM|xo$#at6JM`kqm-cpbf35Lye{GtVDKcsQ@P$R3#%(ri05i*r z2|k3@d9Dd_b2_Gk-6s#@YuL8cv~~9!0gvX;gbISlOlZvFDSIK4gZ((?C&%qn?%S|k zg-qcVE0*Wt#qu2N$69?eguP8zjH@L}kp=U^4_^?2x!Tv5SfA)?Xpa-(NgV>Sby*SH znRUb~fAE#TdL`%82Xsc9y{5=#)8xfmB$|S-PjiFe zl5gCy^THGPhqQFi74afM{tnpG6OQz6P_ZQ?_YV*y0V^35>+iuBBe zr=OF}&U)Qji@e>A7Wj;Fm}G?0nca&9_JmP>fAu;uuS}DhPInq_i`&FXvrH~yIZh>sL(>2XiQFxep)3-o}44=?nIf)aQG01jL~xK ze>&^@&@AI_hGH5$TzUj%3Jcj@@_^a-l*2<0#UPxEhGNB2eY|=V<9VU$g-EJB1MX(w zWDa+Op3nj-P!utsy+5V*DZy8krp1Hkg#9{X#Fn$gHk?_}P*dK5FJHV7Xv^Zp)c=-} z969Q5;xEoonmqLlk^#J#88tGFpM!fP*jLn5q_*TP>RqE>~Ogkf~ zHX8o7*fh^C=au;cH(Mc4{K`*o2$T|sTn#mvn!$jD4xfD7XGkbpfXmgU8*<4Kkd4{V z;-fBqT8F_@E*9J^G&)80cDtROCNy*`)r|ts2B!@4Juid9h?n86(PgNgS=aqyf0E7B zq=bY^lTsZTO-jk}q?qF7cT$R<#Ysti4tfQ#z4 zcYm$-_|QtG8}G zWA~1H-`CpVzQ|jF;~89m{GQdZF2^9P-)Ua2(LKh*a;V75T}v(agVkHzf1u7GTd3LB zjDt}sckl-b9$Z{C; z?d!`Mxq7sux_oj`5`>knrNoX3Ye&+~Q&r%69R&!2z7k}5CXnlZG&pNP!5e)iuQTIR zI`RKI2E>YdojZCn$*10gf1sV^EaARxL0p1@_JP?}XaaSHuSIVWTyFmQ+xih!k5z71 z;aRUI!s#;VzxDv5)A||18D>x63FeVqizmXZaU3)nXKNV6=bpziQ{iZoc7=3q+8nI6 z{lKwy+mpOK#!dG;l$dx#YVsC~Z3Tw2lAp{4!SYl!K6x0MO;IU)5#^7dHay( z(3O($=Ha7wGJ`cYJn~F%Z$s1lR+v$|H3|5olTk!C6QskBaU=7a>>gW5xc(rVST_?x z(3NmA^qV)s>uRaWf8%qrape1}R`eS`agI_f90!iIWvP?y8wscS_~vyQ+=WAQ(E|X? zYec;(xCr2oEOEe0^}gEBta9NyQ+@Pex>@a)+T53O;n*Wtp!R6XWjh}h#CT~RVpm`f zmp=&oUZXJfGCS)8GLZ(pkjEUGWm3hS%_p_S4`V1{=yXqff0K{QoWJ87$+#wtIJVFu z(>Jy-UQCSFZAxa%t}n%ZJ+pCf%@N%%!#CsJ{$=PD%QLrwok(NWJ>Hp9Fd6u6Hul}P zAgw7O+`ke%;yR5(5FLF?QFgED>sEQOkkoAK$>*i{6&>;1Nr6(jwLG|?@F(9yf00H& zwo~Dn_^_wQe=7x?_n~>DND^_^IEOmHUrV~pj<7m*s!c3zw&aljJ8~|I@~JTPdp{Hb z%@a4*V-wNPMMp)WhTWFpLfd|)bv^6~o!Mkl3Paf698J6L)-90N2cMJ=R;wiIQ+=Vf zeyKKHc>CJ8nnJFFz&MO~XsP^N>U415IUqRPJoLwfe_B1~1?+u=H0OJ*EN6DWOFLaA z^7T#6oWmIJS#6u#w=J%U6<4sZ-`2HxXf|_w`-QW(pXWounJ)fcsuE6~x#9gbPMPJj zz~|bfpP0eNto}qM;Of<;7OFjEqehQ${an`4D--Wc4$A8-yc9J0+~p%LP7Ts2%=jS` z94th?e`huZs6R~PTU7M{FDWHolLie888WbCU#K_W}*H_Ycpm^MD`yFFvfjmzbG zNdH>61Vvb5{=3T5Ja^Rv!8QVF$T$$9^c)4se`K>3Pp)^|xEL^wPKsSNMtv$9%Na+? zcXt3e`$`A%P4eO%+LZXVyS?Me90Fq}WpA-A8c~p*;gTob5tq20ak@SD{>U6#c!qw{ zpR?D$+X^0ddOt`r$F142w-0S*Aq{U7R9Z9CTNB553+o_&731y3Rw ztLZgxNv4s<+vwOyHeqfX{z}+>yB!_uGO{eQ->qA}bNd}AXEhUuXIvIfh4mBye{E=! zaY@W>`A3Zw7J&&+O10EKfGmeR|(S zJ!YKz%9Uy43Xbw?OhfUo@FrG5=M|a6djGuFXgX5gQ-h_=a0SgH)6)!Ee~}kcrNs68`7sl~1iowv3u9?T;)?FUX&;G+Sd!(>1%6 zDjHxh#F|}mt&XFF%r27_e?iM~FI9%&tYVPcsoT!P`C(D%__KQ-fh1m?q-LAg{p@gM zC8`+I2a>MrarNGD${v^ff-QT$>d{}72OnF}7BeIWIMkYddV zTVj!s>db5^tK}#t5=3a^<2;vqktfQYxNUWwUnk;>Vlk&Ie_P20$;Kt9Ph62|!MOX+ zcssn^IOM&nSg0VscMR2ZrJd`vyp|qEBpsEjthw3BMrEVF&E#RC@Ai{>+l^toC<3fA zr+7@Q9&0jDD0yV$1E+aF$H23Fdx^30oTk8H}ON7k*{tuNpjLj!Vi(# ztl?v9YJZs9e;hVy!ynt5bL;I{1ThVT+tM{@pf>|MItK^qKK-HITAXQmX@{&tNL>kb z2)kyOesOLJ<-yK~7+MJM>$Z^^*)&ZKmt@m2_#vHHVD~)f<8{=mYAF$)M<0th9m&0+(uL84BN6Bp408ie|#3+GBu_0Zjd2hD?`8+$CANa zunUlA4J>UZk%Y7x)2G{MW5Fw3YtJ8_I4FVCtv!h~IJpi9rbFGp96vTy7R+TR0zO(_ zwZ#qM&pMv|2LLvna8%&8T3m?zna%!se{;9L$32-`LB^(&KQ%oaQEfrSVF)t4jTv^t z*4{O&e-@dHN3Z#%goFQMCv&y&u{oLJzg%kgy!7bBAH$5t=2c}u*4p}E%`Jd>o!=kp z3mgi6SeUo){IVkTljd2wyUAj?a0bE}dXU0q&UT3FH&v%omW zzN^>ki~QTH{O|wuKP&6*lxAx|i`7hP6!diOe;-Wr27G-p=PL<;+ce><3QXsj5GQ2$r1UVYfMJvn8QuGJ*)JTi|q z+TGzSIQXGHzdFN={_VS~wT;GR?d5CGi%Gq>Z#>zOLw*19Wh^Zf9aiYTtUX@5-{V zb7F2Z{nY9(1xzW!85?xRSw}LK)*rpbmmA_)V`;fDu%*V<6r0-*TSS46OMp&i-1mfJ*JQ%H!Nj1;SZx+6Qmi~Qu5+of)Zx6rmkc5F z8tx#&iEPaBVh4sNSti}9xn6(F@#O9CdG!#!D*|?M#Ccml9CKKmNywpuk_X3&yv)1r z^kesu;D^9Ahf?k~S`viEei4^VOyq4W%e zhv670obFabwX?I_4it;N_Sy`gOK#4^>cxpc%@Y!`6LswGB589LY;*qoY2$A7*zE*Q zYqbsClZ0%$PxolL$?|2@T-Ws}p}rRndp2dN78%rWti)$R5qV>ue?!i@^KFTWROO?_ zU02~FxV&PEX5!b6!q=vS%mhE0oed)nw-@qNpF%J7?!lMiNa9_HX{qSOqpFQ_nCHTn zE5*i~?xe|kLU?`@jrF>YLk$5VDP+gmoyKX@|qB)AZpsPcdE^ilu{` zx)>hZ7+O>{AyxG&yX?qvNzu!wYNz?>Y*)APAK)BCzPQkYDG39`b`=uc1BI$Oo3T=b zGAFe=huN0ovycoHBLv0^>Idu2OPnk7aFNpv5}v`W|^-v zQy%$RyCJlX3xxLZOm$*u;ytvA5`KCL;+|X{G&d)Q`<)qsO@q7v`84OabVvpOv>F_ZR*Fz@zC*rg?$G3lAw;BzUZ!`|v z|B4!LWQ#kQXX*ZVtMS>nFW11rE=lB{id}zve~e)q&)~hw8NA0Od6JlYuNwuYRqakX z=W48w9EDY9PB%DP3zRLl*pMA(fx4CDaTw#CFLQ9)==nw6fi)~HW`lgSRF~(q+-7S1 zJ5q|ZA@fo0O0DnB<*M?pZ)e?XJ$O7+~UpGHx~b+q$1x|0~&(!>p|f7(#Tv^$vK7|9O(bB_hs8n zUEP}3RZjsr86H-7JHZB%cpIS#CN_JtFTaLO|Qi9ynsH=L1dW3qd^Cb0s zb9Hm=MzRT~>ZUSAu=d((uXe6xcHdNAe_m}(_m&&UD%d0Z7}3eBWwqUH6ekEKh(772 z5+T(3gthCAeUc5D*$|)0Y?W8A`}~^H^6ix3N3?~{l_&gED9f;jx*RnGp^>`qE9{-Q zVpWm4IM@_~1~CD~PtsFWkBqa=7}X`O%qKwNfRDvB$pGX#twC--O`1)+qTQ#-f8+?3 zEG9NnNIJr~mHPsQh?3Vl!N4bc=^o50nB}4bR{(ZTe>G7%Iux8x_%TeZZ0b}#7?};u zQHnm|7Dz2DH`FrJ4Tv7tP}F}-!iU-dFa-tUBU$6|aY-1Tw2y0{2-hJ)N;<29mAl|w z!9NdHrcRgCUtPD?4Y_HEL_gkaf3LHx`mIMY8JMMDu%wI&GPXe_N2#v@u{#0Wj9aFF z3ft`V3JRLW$!WRL@d63h7_t$6*U$IB2*fg?Fxsi1!{eai)KW0J4NWP)kqdcIseLvP zxf`|HeSl}6v~@6?&>w^Y7H>zj+em|(Ki?vsdK*lJr)Hlg>q!ajz4dw{e{Im%3ywS^ zQldQ3^^q(QS zu?IaOor=mnoa~SF$^O{iysWUsbp`gvL2@?BOU``3ia&E{h9V*f)hx)L3UXz>hgNSg zM2{(;(h|AQj42;9+lBI5f7O&$d-w0v`3NiVStMl(A2ZjzyO)>p7rG<)d;jthQgs$O z0P4>Wzp_OzO&788Q>FoA@Zfo}Jhyz@0l;KKNt5}QY#<9@osq06uJpcq7Z0Qwu5U0E z(F-I^%&?j}FMmx* zOjd(6$C;QE&Gh|(X+n*QN7HVU?!_6iu%AOxlTF~(xh|$uG^b;Yvw&R zkw&mQRgKv7MvW}qZVvC(0a$=@3%6NXviN=BRPPI?b6q&7xAr=SakVb&S~r%wBR%cn zA1#3o-*NXdBn1fye@Y-?ASM#oZ7bhz0)|hCbYZLK8oCWxCC4z`feDZ7a$@-O${0TR zZ2P)D`#Bq9o>PUJ9ehQ|_zQVx6ZM#%_2TUBx#Lsc@907|=Hi3@$^g`u?2s9#wHiKf zV^{R9fXrZA;i#z~Uoc}wM!k)qgJJesO6Qbo$-5IU`C?_ff4JVlFN!l6lJ_gG=ry%< z>LA>{(ey>V6WScd(gCo@|5P-9qEilK@xTVr#rsWZH*OI@T$?j_y2Y#f=_%KCps!4&f+1X1 zLuuZ^*M_9@e+Kefeh3k^ro*uCdKBO4QG8oWW=2MHr&Np8m@~Yg&Pb4*eOoZvje^eR z^SAX~AvA;lZFe_{hCWjSwAK)8e7b4P;WM1l^J;PPHm=>J+WloW>7)GUb`ZDvCm8tf z@7g*n!4@|EN#_gVNqj=s9&`PHDJ|5qQ26#GbSt-E!f5UBf`AIF2JU2laa%loUqNx@S!5BqQ>TUE&^KII z#`*$=Ixu|v>lSJsdgY?~$X__-Pw>tu`uNf=Xza;5tPlpmKKn0vA^%dikSSp)s_Ct< z5)?yAfBZjmgWL`UwwF%>^MT)*e(}cXCg7=U1pV%Z0yOeBpI1vuuQao+PNw>+<~qa* z@pLjXl~J}V7-YCXe-u$x7wVv3-0IkHtwga-Y1`jR4xvqB zC3nm<`qqyOGT-fivJ3t(B_(!v=z z_3a@BE%M~20NjzJIK4@p<5frh%b}_9ynMQPLcf9yQ049!o5% z8+E>lN>p6gUthyy@**Z)W^NKV<^f296` zYgo7;d0Gh~-)umncBs z_Dil%e3QRJF}J!yJ*?fULr=qtsBQ+6{4LK-Y@7K&R#WbjZp(ju3T0KBotU#%4)Hn? zAm>XLfkZF-K6SPg=_6%W@j}|FUnmQscw;kCzJT|qfvIv%C@PU+tZ0Lai?oL=LFz>rrS_b>q*_Td z+)HTaT+0MgrnG02_=)6(tG{uLy-igX<)BV5SCLsiQ1{IhhM6P6e{|IRC3%GQL}O@+ zl=0Ii2HK?$IT1h2nYhuk7kr2_HB+^8jBevDPepsRc`DeFEaa z7~YuBpx^ozeD_x>e}ZL-5HYf_Zy60c;i4Ekm065E;`};MN|4q~9%R3$`vmNeY53eM zcU{uz#FVZ+#sEvN?KGOo5F*hWG+>q#YmyR19HyQd4e;%1;$aQOA&IdswLTG$d z{iPc;+M1MhCVDVqYWf?Y@vAyoV&TKUZ-N2uBcwcnjn+1GZqvwSGeFA01u6`$Fo7f z6>Mo=c9q30UqD|8OaYAQG7toNWmo~ReY0JbU`%m>fBeb&TCjKS2V-s16oClXs$vA` z^e-MyeL+v7Qz{HNihT{hw3a}2YLeCIfzp*9E`N&FU!5Vn1sN&25Nog~0RddC7mqYfzzWmTdczTJ?W&t(! zKkwP@e=^Vo+*-xIWe{1A12Y7lDuFQyjFAv0$#RbqU0pNCKDW;cV9Nc=gl(A zyaAHZ-_p0n*3P_TXAVl~Rw*l0^2UsDwUse{U#82kDYY9WI{%%jP*;aG!sprb#OHAw zkTahUW@?L7NoSogu&&pd1rO0hvr4+OmK}N^e-9iLcw;#mn5EKbddS5Z90UmmQMTUs zv4KazG~Ax56`nCJ?Ma&^Y!kR8|FrHLBM@55pNhB)w&33qNMEq-L@d$t;pa#bM*=G< zj!lHmvmglh9$K7?nOoPUWpK}6OEKPf0Sr&s zRBC`zJc}9yLtv+pHI7=a#F~i{7R*bvs}@W{TiP9K=30&N$`^-V&KVcR@gLkEO4ksP zS&W}f{~MKQ`B)mu&M;BBarC18Q#NqN}Ny9 zEV#zG6x#)}qdQU|q0H)-j%yTAO;M-7M2`@i(Dr@A9mLZ39stbES~y3m6a2FR-x0)> zwD8hf2yP?(mInxQw-;{s3PRy%9y(?d8;~Y?yj`WxF6N*Ppqun zm74vzYTx2ZCy9TwvaHE|4R=8!uj=gwdDUPa)^>PTBs1>rD_K@=Ur93LXib!yV}Q2- zO{d66slYwoA3xa2W8I-8&8+g!eE{tt{r!u*|DC6Ooj(3#?%^u$bYPu*;(=HBB6f_| zcwK@Gkd?XWR%zDQrA+c(|2dP*te1W$&msuiXb>Ve0z!X8Ng1%!Qo|y%azj~gd6&OR z^jjeJ&5C@jJ*F3!d#6ybZS+`4izUMFn)^z98+M{^B}`@|)<6NaJNfp|ff=kLA`C`G zgHJu=d$^nih+a6+&IKTWn~9s&h6?Jpycd?N*mMUm7p?&Ar$F(WpJJisrgYCwDUwIk zltq|H;xB)StoZjH0DWL6zDJ{^JtYfM6&Tu(pJol*z)au}g+|5~nJy^_VR_^2FVj)} zLgTEB>esbu7PpFz1+6N#SwMyCNp?(WbdLp~#!_{M88+AJyQ#J%-_1?2Ey>OfK8Qtf+hp>7V2TBPUEB6Z6X_zljEbVw%=fA)rzsGTIr zR$$(}AYPdLVpoab!_7@#uf<**o9L7LrJpG_5BYr$zp>3#KAd#h*!Xr3hlVlQ4yGeU zawUISB*5si`;~G3FlBiXFiUE2)5B5&RT~eG`KO3-t%!1DY%;I0Lg^?n$8V%)sATQU z;PgFQS>d3TQ9MUK=Me+Opk2ESiwC^J#Z$-$jvHCG57h);vGuqyII z8|Q$3BylEb@Q7k$qyg$y*JEu0+#WzRBfds3A0V|jz5E#biqXppcWvV72DarBSejM| zOEc6g&8On)v4|$TJ#WaaJrsT4RSRg%QRb9*zG+}L5Mu}zyAJW2-FJJfkAmf#NwEgm zxpYSqrOu1p8jvn?M&olX&jNN}c-Vingt6Xb`!fEIxn9n9hbzb@`-E<*_Ibq30;ht| z9uU29Zk_tnl>0FRe|kV31MILnFyXaJ(mnY5+}8zztunoC0dc7KRpD&t(>d4_we}&C z0;p7(H=`UKW;u*9rg9jV0uRF6X%^1d%w&k!v_094K*~xbutXCbkKu>>uWz1*g zF@NB$W&XOtRg=jrX3OQ+0&<)l$T!`I#2?M16wHRC`@zm3`Gp}wb7TlxnIS~m3V``C zA_Eyhl)&4p>52m-_B#%&G1`wPfXz8523uw zS~ta6JFpuH=nMh*;L8)!Yz=)NuyX{K?X2FjC9kfRl`Vl{V8XMq#;*Wp0*LDlzk*?r zjTjMX(MTT=W`4PgpjdpxGTBK5** zhR8x{*Of6Xu1uY4g{8Emlu$DkS#iy>zL*#L4syu8GtBHe5#y4fD_-pIxjq_;+Nwsx z+8Qkw0eyhR1)2_-qUV1MscoGZ&bS4%H8mT_$Nd`OIkXW@03nYU_hHigB)d7_Y})*5 zLrU<^XV5r*>IfD#<}@}cdwzeibj=9;=HKJ9;dI1vfT1GVaO>#ySXCQ$njynQw7YUj zbpPVNa>lb31cB+bp~IJ-$Dw>YOwU*|qgzWw5?=#P(_}XQO*Zp}qN)kN0iQVZ{3m zkv66b?D26AlMH`Ba}<-q1aOkQ%0~NW;84js@^M5Ao})cp-VD=U)dBMk7xhueMSU0V zW+m@l=!5B3(M!ZOwnn=Llt6-PiIHj+rYts)^$o2;@8>LL3@X+nbC5)0VQ+?OaF;@E zv(w`l%Ah&#z3~OkQ9yj_{rcS;-o%NA3*}5t!h*+deJOtpZ^Es^cRa{HU7EEw46FYM zgev;#8p?aZ4JDFZATOA3rr-N9lRhT<2hkc|-p_v2rD?SG@JpYADH!8bCSx&VI9{Cd z0MH#DWf}@VjclFkl#24*W+Z}?cN+Z)z21Hzu@~_es5?1k(Mgk zkAHsibF+WqV^g6-=r$Bo9fU^NR`Pm_Ox6G|uJ2@$qHl4PhpNf{Z0yfj64X0vra5~I zNtnNsQR57H;$xYigXVqG=s>d{gFUty@EFz?5a&^ij zzs}b8EVqU%A;DTYTTjtoqMo-=fqaUFEW7UEBw5t5w`K-IL8qC50+CY@V~P&ME^WMT z2tt4MOo(LVuZWseJ?+|)|kS-L`AJ&auzb3Fl759b_xj+l3hs&OwHTNicI4!MhyU!^5+vcV=W{sTWQ_ zz97jP(jJ188J!u{r zJ;h!J11R;0$i`~R%KY1~s@2Bj4*|9478cwCMT}F+-_7l0C>RXAaYz9Hu z1og49$R)Jk0#hP-=2#Vpo)49S@8P`Zmxd|MEz>h|5U3qAPXYOfMSKyv-r%srO!%4cP*eQQ-eP9X}o4_b0Z|Yxo1;BV;^U`8LPPp zhvxaB#q1VB*+R<~*_$`pWd!`9h=5VIitU%7%BU2P51GNXVDC;5T z(sI1f^9)o|DDQcWH$qpHtH`LnJ=uK7R$8od!xT)Lt3>4PDOwGj8-AC z#ESLB?O_WvQx<=L4F+3yXbwxve6q_=>_&@Vk{LdX-}M;g-Sc5IaLLmDPW0&LLzgS}eGp$8&m`BTnH_iavZ5eaI(u1elJzavj0V zG*<*T25EA1fxlku+)2!i&S=exX2`Qv62=Qo88EG)8z|tW;cuuA-r(Bk6TTqfH=S^dggu>bpf8e7m1e>FDM{oz>n%6Q2Xldw zlTiuKx6OvyVhV+DUWLG3NVIV{m}Qdps3yv#vdbzSWl>4>d+C4rmVINu{~3}Q&H$MJ z%qs2}yb_I@mygBFpwa5SP^j`Z!B33}!VE;mg@%%d`?QLOfr5mJQc4r{N+tNdGWgpE z7}KE2zdF{ntst;W@u#T5e@llb6HS!v1SXhIz8u{sJq<hLBl0syFRU6O!Md=M#$2G6b>#G=ibdQXu!RGLDH<8Y8!_Kx!i4mi z-Y&x_BhoZ^gOf)stNa$4&1e)M@h^vQT-uwt}YneZnqt?atG@_bh<7&NpagN7;1 z7ND&_jE$j>^Z~#-IEx}~2J~b0RrtPdVtCl}8^#b}srP@9*6LjoM?@7aMieX?Dm?Z= z{(!FCD`}|z!j;!z^xj-C>>~2YQX7Y*Mss;((>sS}^?onzQ}VDT4w_wf!MIO>-Q+i# z@;sj0GnqW?S1-oF{YKtdVxMnzJg$$!0tJR7_&O|soGF?=Mv4p7mFz|A5RuhN^4^UGX$P62KZkJ{;3j5zDk=3@@$ zaz!?6p(25OLoErMaybq-F3R#37iAfcJ9V+OoYL0PHO^UD zM$fsv#a5QNHfi`G)%<=z)+`E<@$LC%^pbtyuF%Aq4#A4AFJTS#pV~T`7aLUJq2$AF zHC%r-WuZap&9=Im*l24b)k2$AW4;;~mzx@-h9QVndO5tf0{72nE3sdtM9jJs{lf}! zZ}K4nUV9O;Z19NlaW*lhqh=@me6K<=s(^`_Gx+0ch%7#r06jp$zf8s1(@Ihcx~^lQ z=krBTlwzx9Bj;UkAZAN1J`i1t1tf8vB{lub=J=Rt6>yc{0{LI(V0dB?3Jw+P7Ao#1qkRYmi~P#BlRD-tCmU`$f<6v%*yix#K(x02AZ^xH#Ri z@C)6S?`!jO-dG26FK0)w>c;GjaTI=Hb+EimlGj$(a%i(jT6cInU~ z!T3uWS(ski^&8x7F0K_&^7HKrF&X{F5TRKaH!?pO8y1y=^3=7Ah_=7@S3PgnYzH!z+!+Z;$9*aM8GaLVP} zZebLaqCrrsvkTv$HT#eBj`B#hZ-)#ltR*)VWqJxpuzxIxkWU=9r{<`~PLw%+f9HII z%qrhLfD__l8nRtS^GXyWGFniyi>z#-#yi2N{U9j&bFvzTJX z#=DC~CnL%I2W?v1oCPhh6a90*wxn3_coW*e{u+Ii20BW!P1Yv&pMs!R@p7j z0q{0zU2KxFy9>rCW2HI(>d}Kn)}&@uYXH<#qyzz;6|AZM?Q}QTQf-REe~*Oh!v0v( zIOLq$pgE0Zk%<0A>kjN-d%FNE@B?o&vsERv+i*1<9I;DF{5Lx2IZSfIcNuJhk_2V} zI)%!}w`nmZU>{sce?A0J9AAe(8*#WA(yfypm>!gJ0U3p}@j)uMHP<$Ce~SkWfN;YH>ju@zf1Y;=J?70BunhDq z?}Ld$!khaSIE%Jm=3p?9^^28O0&@!H@NeaD1%@T42B{7*8K@$?X@6i-%){z18GinZ zv(u)Uht*-YP)a&(kn&e(LMZZ!o(;2>qXK8sq*jLb^MDilQ)}4xC^}(D@8t3`U)}sS}2?wZQ4ZI z&-+JL$tRz3ZykA&GW02UINPq-8T)+J>3|ouPex1q@@zQjoK0rS7au;1&W4lWhYzXs zAmwe>gL{qBe^1*Ey~bXI($02b`O5|jnDsvnd+=*B%Jw&{YWAl~YYu_L?wA*}VVDgXPe|%txH2Hx0uJZCRr2h^V8=j&AdqzBP zW9!dUgxqR@^E9vZ*@_q8aAhIyCfM#xJ{$zPCk$%?ZdE5Crj4%@=fpd}BV@kuA!W9z zd&_uGr*)hY3tP@$=F;M~JsFFBtJC`mRu19G%nrG8z*=afYGx_Se~wV`v&* zDA>Yj2uGkp6TfzpZRYXK1nwS}mxz2}$@mS{D6eD4g`Wm{288SviI>KhBN?POr8TQb zhJOZ9v|khl)l&>|Nmv706=siDg~HP1e~1Ttv+xsD;#=2zENl5CZp4wxl+A!w*iaBZ zj`6INV^qAb->54*TvxDu4kvU#l4bCE0@nw6HavGt{`u^zHT%9hmcPhdt;2~Ie_(`Q zH#S;XG$u@LHgG{n;X91?Dip$G`8&0*C@!5^C(jA)OlmXU^SO;7RM(_AL$sQgf1Nnd zm?Y17HHO5Co3?|d?M%`ggv;A8!SZrhUc#CCB?A9;>dluOX7M6%G=A2Dj+Gv?+FMyQ z{Pm>v9Y+T@ZnPtWq=MgD`UDx9@6mZBq+8Hw?-T>S8Db5vaFlCx{m?t(TAtoiEHKJ+CYrZ`rZbXyc$2mfe(~;}QJqB7P}i3f-)O}Ah_Tgkv}egvB6hf0lNa&%tn53uGQ6o-OMxf598!%(~03_920VGJMc z?((1eRe!@!#>3j2Hxge4Z8mr^5GCW9tJU#Qx+c?qTfzwi=sm~(kM?RmG=IPI`{eh* z?`KCp94jtj+um|}xYWTLAF-xIFJ5TZDXwa66d5K=XlhD_e+rnb%!CB7%nMsDQX07;GCI6uwBH?f>oO|i84TaxxGU{)cuY1A2*kl8n`1m z%Yf=unbx5h6vkpk9?*VFOGb5;|WxpCk}V4Y4$)I3@577YQqhvRje2DG(O8?C~=pJsGeOHfK**nIalHtwRPo)@pl`^{9SqhFIKs-HStXjp!@ zSN$*d5?Av&M2LWm?IR+gO@R@CDq$^Du?mo1&`M^Ne-21ANWN+?yqI@p;(m|#hoOI1 z@Ae5Nr~M_8Z3@mEv2NFX`2F|g=IzxV($)XkT>aO@>VH3~UM?;F+j2eqy?wEk{CIWw zrTKfiwfgx8Pxr5?m-2MZr@L!c)vX_n72VEceR$=`S!dLPa(#KUo&373c8FiSyn|b$ zvzeP1fA`ZY?cLo_@oM#3sH`D~B^9j0&6+=c`pK=O!%fE9Gooj*OUPPZyPvMX-O?G- zy@&b(qGCG|2b&Oze1Fm!@Bck;vZT|n9k{R;|H6aS9efs_h!4*aJsylVeM2v9(qe-6e3eHEd|r`CYstsp@8W!OVX1%ev1 zx=Zv`z_1>(3XAe8l3Jz9B?#)-5Q#@td~?y7PKI>XgtyXDm_oZp^nWtM)d4^NKJ6EP zz?uXPxQnk&@Ri`>z9K#@5^%SNz$gm-&X0W3Yv<`8shGzdKD6;AF8(S({(U<5JWN~J zPSh8G)U~P3WJErPZIUE%vqQpuM<>ujn^jWM@2kcUB1Vkz!W%l^+X1>Y2RR?L7sfY; z(v@2h(%mef@EsJM!8~V`=zdPn?$RwZ6USGVLp1^-35?{~8vY{3vjLZGH3BVvBkc=V zBqO4PNYj&Tn^LQ%YfO4m){4o`tT>LHICYUyp{H>WThRHtTafZ-AZH8*>%&Iok8LgRv%le*P43{>x?O3mGLRN zt{@yJUs%rz7gkRgR!L3)m>93JHssh?Wo4E!>8tpiboSJ(N;WWFlSqMos_ykBMB|PH z=(llc{3YT8oRL|Fk#UP$|DIa*?3CxDn4z5sLineXZV%Y*11gMc881)>I98}Iny1j> ziO>a_2R`F89S#7no-)1x4@3mH;bt*S4Bu)tA}T!khIBjd5)mv7*8NC$L(2+2>O6QF z1jM+*CwwbuU3K z3DIiWnr&wIcGC299c>+0$5MPBw-SP#*FBfhrXlb(^Twj9i;Q;0ev&h1y-Hr-zTgW4 zqxpIH1?*7$9Jw%+cT`)W49%kKGy_HJQ6elZ_Nu0ZFFJ`e!NHpgJCqS(TuveC8;)g{ zqBjCCe=>PiB1$V)3FA^Krv|WD$ z#Yg%GcCl!OW8ea3lr#9s6@V-F2t3g3bN=&)e~{a6$@9G(U~NEI=NZ0ip)P)xZ*y>O ziPNl4N}O2ubW+ZY1m7EOL|9WZt;nGG0mCeU0C+EwRREZ z7d8WAT&FN@o0`ZMG;*QAinf8~xk1{su{Gk{ zsm8j78XX{BWiArkNg4|CGE9D+y&Tl(Pfo0cMm&jT&Y~P`bf2JzV zpLvjtm?BIKxFg~671!$1)R}2CpHhVr4Prns<^?AsI+>p(ZH38;nLmV-xAp|*Z}s9S z#t8+7apLh0{fB1j&3)M(Y z7=Yn#bZv;=Th;#LpqD4q4f54dC#8OZ=T~{j0KKt6Hi2>(+8*Wv}4? zfk??do)#X&=U}B$O`%)+_y6&~#5w}qRHn*mwj=4!#!t34L|aR2c!UFTCbPrRVaqtx}Ie=SExH5(sX zbf`}u95cCNpC=M61b2pT7q&k~lryjNdukhIF7=?EMJ>fW5-r6ka}44su&?>r68m7M zqY@9J>7j0eGR~)BW(Fm+yfQqAa8$(^1xzk7srg5Z6nix;8Yjj5;lC~aepdf|aQXXL z^)meY?uX+9`k(S<*%?uWe=y&?Wx3X9`x?@4OqssEXiF)s56e*4c-)$i{d;r>mlH(m zI%CAr5^}A^i1ykD<{x%lf?h?W^X#7%IX&Y=PFuR<2W(CWyi=i+c4ss>$?ep+k#Ss% z`vN?MTB@hfGKd5V2fgXph>{0$t&6s)S2t_1ue+>`lv=%nT65yne_w0$wRAl)gt&G? zv(yhGgwWc>^yd$CkvZVFd(k1!s~Fwe+t?z&{5u1E<1B(x4w*Y70}%`qF}eApoD?qi z0i2!r+XHVk%JiUQ(Cq>2*6B*wFoQf7A8;^axhXYK5wd0&}x( zv;jw$$ltt7pdEknGQ|idF7vw7)E#)qdX^yNy_du?DC*^9WqbncqfgUGWy{?LYZYHY zg%|AT3!X3S4i4Lo`zi%zt zv~j=nmj)=r!NBA%4oED!BLHgp`jg@p!cDF;WfMum0?Jc00J3We4ij>2?l3|&_Zwm& zGZ{#0Aqjefn9i)- z*WE2?zZC3Gy}w;E8rHYQ$p8CrPNnVCW|$GdIX^;b*D*oS&{ z%w+x3dKeYBHyNgtm4!9F1Q9xKWh3^|F_pF8ON~Y^fBOw@maikv%iq@NbXH*nMDJXiC{MWG>gk_<-&R1LQgnOpfM(EtD z&k;Mr_^b=D6S*paN&-M zUdQN#CavRN1%*nVnecF?g=)7mrs2EaeIf` zXuBi{N;q)s=0E{g(hM5k6x9mkr?}drVE2Nv!_`q}&u=+@6vyJd=F=X-tZ$7P)3WbTqsI%q?IXlmR0MdvP!zMjuu)1LH_IQ2>r19 zSGV@=BWN;?;11jM-uIs^Qnp-Se~dH4J^;WBeZm1mW!WB1=?-?>fxmHei;(5kiDH@P zBiW*iwLhcrX5W}o817MkVS(Y%3Vcy=m0(B29tpp;IO)Qo z)=S`vZ2~a`JyD}5+O-ajJ7@4hd;&%w*Tyr(2{Geo_u6aL9IF1qUIxS79myYr$OpB` zQN?)$DiKP300Ck1s3HJ0e@0Njjh%@VI6WDm$mM0U>{d_|v9}y^AY4ljGFm^AB8sWp zMya@p^(HHWD+h!jo3lAc;b%gxLjWYg)WDW*K(@wK$joNh-)Z;z>A?6N7FE>*_J;>i z>^2>ePzD(^Q%%c>9R?^}8<6Ot2RL5Tu78{%zH97Mz&{BXx95_1&dx=#K#!v>7z&yhGdH?b7Y<4gc;7r7F_LVCci0)+zrrQU1 zq?Sr|!SzFs+BBtV)QyAeGPV5?Ne5P(bi}vcJ^9ufxu+xx`9-}A&nmy^t$pQs>rJN? z_m-Xj^Li_B4Rmk8e@6u#t$0(?lw?UG+myH7>?YUjpX_~ZW` zY0Hro(e{53MaM^}qUSj~|6Hp6oSkRal|a`20i+stLlNqnZp@wQ$KLnOpW#u!Z5nh%JR{|LO{Im%Y-oi!9QHabFp#z=K(TULf9E;W*y;nH!0)=QUy^3J zCcvnbdZX4)mm6~~>GRkkI8eKz0m$=7BddL;qq<6*cZ}S^F`^5|o5xoH)${(2BveU(!q$m^`9ogLUOEVIC2-aPc%UN+u3fC%ftUaU^bl zqypQ;-F^pzO7Mp?V``$s?SiHv?Pg6~d?D?1qbVDQNod{lGK!VrL&M${1WO|?a&lBG ziwS`jMA8Yk`Vc*qp#91UW#FfkpaLr^g9iao$X^%*NJ;H9PH z^1}xZe~CtjUat&$0Fao*Vt{BD7ZKB-M7A{dK-#`8H&nidek~WYQ(Se%Yb+x_yKybg zuG>K;-v7qEe4DA?AC$n1cW5X$G|l-4iD(AOJ>O2~3R+OC%ojIeu^VdetqcZMcaG?e zY*`jCiRgCfWgQ4F%8`xa^@VAeE ze*{A36c&vqTh-Q#el4c<8iFga=-tu*9_yhU#hg$B1?>jY6te&%KBpPrMzYJeP__P_@7kgNV29u*J(O?Lcm~1*ieWX153hkd@QVczeu=-4 zSu$&xzY0bHPp;RGb*c`SNk14nw2wFG`}^u0*1&m#U{vpF>&bWTYj=~$M(tkG*{E$K zy^Y%agc-m}<(;I9Ji>)w>acu6>^ur)x|TU=0txE~I&)mWW5BdquilAz9lc3? z*t`}>-jdYwhSRtYYn^3iYVm@r&oXtl(34ix!iNr)+aZ3%(BLpl-s$f_$NKwb8vvoE zgeE^estth9m?`1A_n}=>e~yE|CEluQ;RJ|p2Bz17FARZd);b1q#Z|54qiM*euRF)T zd>J7^KTOcOSRnko<35)LGS`dNsH~MnrGu6xY-qNny(+_ws-A*PAejaQdtV&ak zFv=b5!UO~Ff><Y? z@-Dn0iTfAdy$>%80f%ok!Yhn`Pw%L7kf2ZRsq`>ep>2>L`+y;VV>Vr=)=iF7zY;?g zzB=9HD|P~9B>S`4aud7P5wogrGxeuwCwgRtjy zYuJf~;TbX{$3Ni0?3>C(DQmh-Joc8^4m+|Pf~tKsZigT|oOMm)#%9>yqn$5;1lrxu zhL>u&S8Y3$AG^n(;7U5I?QbS{uiycVfWQo_@1n6Lsx^xD>Zl4%x5~_u?3?Z zoC((O6UIDHf3rfc2Z6FKdx|@qKsowl*;%B@kmyb-2}IrW}EHY2~Ju|SuxR}##4bYvP}c>o+62>jw3ruM^;*$?{`G!RgQ zerITe14P=NnT^bLCROVxk%~-CE3P*4VO(YHgAL-JeVco&!MivxEI# z2@l2s=Bq%g!^W~dTP6)6!VQ4yC|fl?k! zVJ0+$QO3O}K$$dtYl|gH1zk?ZGq91gkVTHm%kQ>DtX`By5ZG`4?g;Cg&0*hGoH-B7 zmncjE4Hr`!Rg%pjabiM%73PKAum~ETtquph8JA2<0vmrCAZgqxH5g&j&tWrOXmej zAf##aqNB2d+IbLuhM%g)gQcZ|jIGasv-KgCxB6)A%qH24xXeJ9DUNyee32AOY=~`p zO^xFP4ESWWI8}L3XFnGGPZNMZTCRFet{_9(St@^c?fs*C6DFz${cUvpnjFTo57bla zW_Mg@6gXdWOdIgdJK@jTK;nsQ3>R$wU2OYh*2^wE-#=WZ7f6nWMwL-&7i|gi#d^)1 z7d$L@MUTQ3-Wu;H69~Ku2eixa=pEt9<4l%ybXnrn(W};bJetx0|IK{q!0p`yMY7~z za=?EAqWn(#mTOJIs{}qwZVk_Fnc8o)#0eQMu`V7J z{yv57Qj!}WBr*A2C#VhOjFq1Xdk6;JNGFY>oEK6dE@TMO7)p(r*;94Hawc|0aD1ZC zsGFdTV|ugnSTExSV!^O_SD|AY327C8D5QVFP>l}wBH=w952>_0+E+`6pe(2)dTU?Z zzP;SqL2-;29lQoRiQ0&*f*l*N)gHk_!unZilhE;wcSq8Y1SnnMh6jVB9BGoDK_c&w z4!L`KlLzOg9eOW+w@Wy~olOuVqKQ@1d~bLr-Gs_?=Nyd#{Mzs}!hl0xX`z3>y$OGc zG{m{^3Jy>hq?oV`s3XF{+SU*i*scS>6r8n!@PZr;svfTpgRarmL!%@oNChn9m0DG} zEy#R@fRQe;XvpA>9DfY@GxS!5QQ@`B8u9JDgu-yl1uT&15$@OwQRw1fziV!wic)U<1kE z&M~VEL37B2z^%#500e#qRh_M5#)4qGWcE)I1cnt+Bb^HpNp8(pjSKT^99FnD_!w0$C{#JQV3-6kTa$$eitqqqC z*m2NAvg^BHd$GH9=;m{mVaLNl;$wQa((*FJnRW`p(1Zn(->2R5bLF@Ko1b=)-cf1~ ziu(3uim<-QxegmBk+<_scx`%YhAQToixL-&xywb&4X&*bnpj4T@Id@9$j9Z>{M+xGU2J+ zgc$ps!Y0b-MaFtFb-S587-e@XY){`)>@sT3;LIokw<{w6lMJL0fy!f;io-DRNaGD> z7c;OM^DttCVH_jg?75%V#^-+N?#q|~)3(D}Fy)|~?jbhcTs?n>p&t7a7mjQ-IQ9Yy zl-dWdM}BjKxGjve-5J2sSaTpM0fKGNpO3M}Y7j=3U+$z5#RPX3Ses)X&_>GwNpZr{ zS;QyiaohIq|FHL^U2P@Fwx9360JWbBl>`_(A}s4-7hovi0ZiG2pg=~lk&TAZU<{V} zx4*q3r^urtfn9&@x9(c+c9%Iid2${iBO@brh^WK_1)+yx2h?Gg3}VpT@x6v1%MY|P zGB_MP>4_344ABsI@?Cyw(pd$2(s=nWjY*m`L+0i)fb>ut4aJoar?q}#rbltZ`0(sj zDRz{NFF&HAGgS}%eWIE66y%k0(Y{#7Ij(I?Ro!q-LXTgQ0RG#p(=_PwdT}b}c91w- zn}xD1hBVhHAm0%|r1Iv&qYJ4NC)Ems(ANDqyqKoM^gU-TFg4i7AJ$ynb(7uaMTbb_ z%a%(Q>j8frYOwOgFbLAsLtCQ)z>+6B9B_wUT8UjNwGl}H4iG(s91)3*XRr=3-GMBW z^HQ~U**f*-X5;hUogvZWdj8vo2H`chG4(Oj)r)Eap2ilC0ky5Nqe7h4mXS2746 zUY0RacYx=kFV*hMtDXE-S+V&%*3n}@+3m!yc2{e} z5X0!Fo>DNNHXH&{m6x#`?ZE#c2H3Y5EN1MvDH`(V0wbOba0+h$_y$y>%v7wDLcShB zOw@}C5os~a5^WM*$h#z_x-e1nCwg`cMakADHC4FHbqMdK!TkanIfT%EntBagF%m5suuX+bUtE%b= z9(U>R(;h#I8Sj-HqGo=U5BYC(oKEUp(TSpDPuy_~{JU8xh+8)w;R~V%OP)Xpr@Es1K_)c>zWNWT6o4j%~ zu7%(j2fc?$g$qJA;~rzi!Av48dWYWho#(ev{?(4qsLPEa>5>)LJl`q)J(#=P(1N&k zmbSUma_BouZOj=ZQT5g^o>YPCs8xSOd8g&2c#}3nZViC(0L| z2;#cT$OhFnSb=n_SiI(ga;`^OZ0ZUJ&G2|r{Dw^cM@C!(Vhi&NSqmf+!ccFW9Kh6V z7geLFl&TdnCgi0=myRK4+#Jgb%y}k<%kj3jB;?MM6bc|n$py|Ukj+|4J=TBFD2CwN z?|NO_xnMdUJaz`vtJ%3h<$&TAGZ^;8?*4Qg%zy^|pn*k9>C)Q`oI~4L_6Ep))mIHh zR7%DRsh^rN;8btiAt%j74JxY_)o%TScf#-MfW!%+aMLO1hrkz-cc5Q0RX!@IK#R>P>xXn1Q1@o|O=vLX#N62q7Cg5X>~X@^f>8SU>Xf-9~?&8smjOH{epD zQ^+i4l&EOOcDdECa|e@gACRfz{|oS+`WZj@XPN_4Nrv8}`UQeT$ZX8rY#od-IeMj= zo;SxpKXu7n1i$Cu?TJfZ9n?arT<$OudgUZD_Z~`Pphyc>Q90*e)a-Vx$2@cO#4{~F z`ss)drA&rkQr0uG(RP1l#T=2$WDIZ#8_>o%%t`VLXa9p0s)h=IBB4V0w#Z@A@&Vta zg4*-**-~4Q^XOOrQVJ^8DngCP>)??*ln_)f?dCb%_9BjAs-;0rDw0=JRt61`!dSRo zSTNntXK6gUI4cIz4fFGGt2EXPb=3`E&-*~Hibe&qp6*NnABKO?h;tC6@_P?Un7aj3 zp}>JbH%*F!SgwIsOBzy38W^S|4K-~G#ATGRoWPGBe!zJ$+tgQnfk<+6kvOiAYJ}!t zi2?-8kFry(7}aG2svKw>;$@(j=s~H0w&Lcc(6d&Xz2XwCV$3Aqeic**A7ecr8)I5w zABaWYu<(OzezbpbP&NpSZ$x$ue{PU``cogdegsX$9K&%fgNl@rMV@-U2; zH;VvdVvt(2p9q9 z`rXbGqdMBgPthR=lV^60V_2PEvV)tI>rzY%1c9wY(6YpHjefj59JcTo56F@9f(vcO z=X(z(eqT1SP&P)L7)2w|@Hbw_=C6?uLQ}$R*Cr1DVBQhRLoT!3u^+-!dVdzHyi zqZO9i3~zkkO_)>UDdXWwNl~jfH%iO96vh}AL|h6|(V%aTU_0KNLDvwH#j_ON zgKP_8+CHT6MHST3GGhFSqEyeG{E|BdR3jt@W?;-VTggx4?K+&wvFyYibeb-DivaMUn{7vLT13A40{YFXZ_0=9{j7_i$)7*zubF+HRtXrv7k6YtWk->v#K4Q5S%lwrT&&evnbVHo;D}}l6)FR#XA0EN04&NxRDCZ%3LS2J?wa;pz`c=!N>RC-G%=M7sw$y z4CC4kZb`ya$mX9W140?dS*(K1n3x$tKqqp)tfmdRX)Rs!^h)}#*>6{{Q5Js(Uba$U zdZyOSR7oc=)w8qvrqy%N)2rvd3SBgv=9Uk1No|d7J@qGh3{EhnhC>?D_dBuaP7LJ` zOobU(!<@~WEO0lGoPtpnxDoJkQ*r^2v)~FFq!VO%-fwh3plac>}yDaQ6vG|ZB(UnW8(-4d}cH(4I&FI9l;x(|T=r@6Mih|&bje)D_52M|FzY6Z=2 zz{mVelDbo!P3sg3M{%@h>w4ZuB=+qSOg6cV@Ig7Sz&R5Ld=Ii3;TwMuKWvp@AFTPJ1|vt0A>t{g{S8!O#|`^0FIZqw*SYxcy>~84082p!GO+0>~$M zOuwcusE}u+Eh^E$_e)ARYS{uoxoWb<8z+l|6*rj(0~m_LlyXJF(DVlR3%{gu0F{}R z1MEKu%gqW%PF=X1Z(x5ToH=1VodA`yyx(r?e6d?c{QCsP{rx43Ok_=4HeEtq3ZlJ) zIQHY?Mx<=*87tZOQ!m^w7ol6HuLk}6XjmC51g!4HC1?WJn*mfn-wgDq7XU4@Ju0vz zZcZ(K)3{HH4y>9UY8$aS*>A9H!c4;5Vh6o%rZRaf%=WHZQWAgo%Als}plTn!KhD6@ zdFJFaE#-%9y?zC6k2tkb2w=n7R}lN^Xk2IF9oh3j7N}iE@_73!l~)-UgidhbX^sw! z`)S;ARO1wH1JQS?z5oXi8fpUF@4?CpeEajAIZ!HBOj%!y5k-QIsq7ug~4Wk6yCg-M2G3wvNAow{|1fi+{d5}n9VibDT}1wl2_loAJz z%xIeXe4ShoI4_`*7bhP}OoizKQmIpT--0o7JS@pv3{;g-n+3Fsx5IKlBDCdi=iA-w z29V|$e-OqsgS)OtD6%G}oXm)zWu&JvuN;!I-MX)R^>Tl2>&@05>p13YY`xfe^QXid z$@J#lpwjvK$a?V^ZdxcqQA+{R{IC=qRXE0I%4ZxLiQi!N9B8g!4*=0Q#l~bNq@L>0 z2I$JpOI{|4og66z!>D~Mnp^lbqN5;e9D+$^L%r0vMdA`qOAQ;_>yBGu}L4eI@M>~6bR z=-5M4aWjv^aN-?D>@-FmByrPCtoNXJFF-NYm_n?a7&yeH~ymG+A&SsJu zcDRZq^%A zJ#!U1#2pJGL7eXN^dZJJwuyrSm`0E|5m**TfNYS|`Y;CMJabv|fBwx?&HGl>`r6vU zIGsLo<{UjX+H0-7_uA`wRn@9`>#X&j;10`xnZ%(}G*r%8Je;#p_~riKp7>>5*gv!p zcYkN8{H}F*0cSt3@3GMGT>Cf^Sr(4^5P~w`aV8dLtqgu4TF2Q%qu;@N&7i{u(G0cC zvL5hC&l_2NTd(b7KG!~$$4$cw4LW7*N^3xsG&0B z1pE?Y^R)hC$Zm0H(x&Eg3wEsDu3m`_4Rc5J6l|T#`kvC(gN~qt@t@ED+A0l zxJrG#0yds!u?=D48R{N0B-}85>#ctXSAWjmVHX13`VqfC{?^68O!9Qd#UXC^aMTi6 z0@rr(|Lvh>h(MQYxAUtb+b1ue0(fPGdF|F47Y)f1LEBU%eA#ZDF(bN6W)a9c=zphV zTSD0e!}0yET^y}pPazCnIWA1usD_Cw!y>p1NrK0X(V55}oZFu!Ytg*Kp_J6$eS^b~ z7c6zWd>|BoWQ-sT7bHNJ&XiI#^jVBgDH6y&{`T7{cQ^rdD%}CG?c21=;L8fPP5DE& z3I7=kj7(bwvIvNA8@7 z-1PeG_bT-vpsUC_86F*?Zj=?Zj?b(mvHgQi6QN4KCAy-Zd*UwW!_ox)huEXO4+l66 zkr9StK*)^h=x`7mAs*h=O`icF5*fI}5ft2OAPbf$7EnQWC>MIsszdZ7ZGSAnTVDGO zzjS{`_V68%>9vP25_D4$e5&Ny6kF4}?D<;Q$;7&T=m_q6NaZKFHffyXrc2!>Qb3o3)Td@&i{0g|U#=h>meMVg6ObdF4PW_7V&T-H%VsieEYMc1f5 zz@bgueI}%!EXdNO4~{T{Wq|VwTC@Q=8fm^cEbgAsn9o3?xm-0-J6$l{b^5V$-nV6O z$<;M|-!~|yj_b7H2!EqO=LqWQieoYT)CfW>ao=a18^uE>cAyMN-V={ylOD5U{ zb{M3cQ*a<%w6^VnW`bs1wnn=uHG>?Nq88BmTKAaX$ zX@p$AA1-E8G0Y8V#}h9z+|lb1Y^tnzl=z~r09}3qp;wXPJj-psE)f~J=szEN13pwc z*p{HkmNZOBHTxl$`({W9{hFFCoArA-Xe=hb%g$WJtS^Dw)U;LZ*~%!&CauhACHrNI z#Fc1^KN+PpGQuGt>7TcW==tz*F#`aFEQE%%gS-v8gs2@4*57Fjq&@nG-!@U;Ku|kY z4z(@omj2?~`+yLDic} zTeafT>y;%U5cH$8sc;0e^xF{b4{nhGfS^tOhAhu?3ctrID9SKK3w$P3f_{WmEUd}pZ3 z8gS0vNR;0OYuBsvwV;tzYEf>vt4Ksexa-0TQ}+OnH7Yn73`2a=zE4ma4%T~w-+@TM zqOzyNh%xpxLie&j7pFiSihX>%^num5HiDeZ4N*25W9Cngqu9y?*{tr=5fnNRhrWf# z;ND13x(%h2tzUe_e1Wp*2i!WLI?A&|<-N9*wmuI?fQn)D68K)O+k5klyT9Wv=7$vQ zAvghgt+I=sg^O}ossgclA=jrE4NWN}!(pdD_ieIS8XpOew- z_LvF|b*B0(J!3PgT$%g@J9TM-ZBD=`{b8`M%sgi=wxj;IsJBz->h+& ziKs&`jaz`Q_4ThgPp9Y<@z2V-&l{&$DbsI^JNnm5B0Hse;PR$!fBh9X21p{MSwx zw(8G0Jgc-jNkR*=i{Z3!lZ*$T;r$T0(My$>piNDLx1+AG<~5T(oteA&kKs=9dPBd& zE-VDyz0+w&+f`mh4j)cxLh|gGyZe83YTv_`UKUiH%5$0CjyH{V3=R6B(W~EsmT&9N zd_Y0cq6%3=3#_Zg#5ohQf9oAUdufv|rX4Y+2e{wxJS6c3ARW8i-1B;XRBFDjnu=aiHAH^eTbzkbUa=v(q3+rTs+$yMmwj_6^lSM{NoLDyb4J2eYM z$yKqwc}QvG#u~6Lb(0?(E!FIMAf)oycr8l&R|(s~x_0PbKs>i zjv$D=xb}grZIK4XjjxF%vlyt)rsH+REz6Kx7Z@SRy}bTB#rkXcEDFa2NiQ*96JFPB zxQSHU!x;dn-lHi>>%$qPzWV4=N@K%>_KR1@`j#9Yi1Jkr`9ucVN?oEM*VkHmuZlV@ zYcMNTHN!40Y?mJPdxNXiBkEy?s*k7%&Qo=UsU_lhufBl1xBZh9j>>y9^RFrtP3JV^ z2-1J625euZ1feKqpId#Je zlkGAUv-p5iP+_9;_J|2)q2M+pKjyCE(e$bl#l$_|eT0ISVdX(qb?UTVh*;V(89u$0 zeH33oZaWNdR&tHs>Gyjm|9Wq(dUy)=G|$}W*V%yVJy3jR+SgVj@k7404Z5hLbcP9< zjNqEH)WrNfuP}odFXN)Lt5aNLjFBJo_h+*^Qn%va7-4_8M|V3vJmHcR-@RNJjjW?P zKR=%!1A=I6)PXu9z%=A?usBTDxKMmXw?Lc_1a@8Vcy=4 zbsx48GGEN6i>wqP^<3`G0MS2n3Ju_@7JrRfgYDke-XET}mgC-!b=$h%{o*b+-e-@` zuWfp}f3@^I<$i9hoR3YNETHq-ZZLa#Ts+%I&qMPfw70)_Tx_8D-Z(dEt)c)rJ7|09 zn_C7OgC#qkkBo8n)&1(8t6ZeigJy@{tNF_XmvxSpve>^YZ~jVv!wPgi!$In8?WJ53 zWi4q5z1m%UEcYUA16>_4rk(rBM2+8{&;ff#bFPU?t(p>)iIROWiaZAx7BeL(amIn? z2Y96Jf`~Q7AW||9YyL53CqdLUd=q&OW)(jVV=6I9VRqtfiP+~NxwD15_4Z_B^yQCz}fWF{#V-q!Y% zeQU+H_rLzz#0!WgFS6qiDoEUuia_$TNtEX9_wyssvSMUPt73qydVvI5agYmZpMG4; z4hlTF1$Dq=Od|2HF38~#x||?9Mg3?iP}U(R)X7CsR|XB+PC=hZGfa4aPHpq=^14A9 zv2*e1_4`81&CL9olw#F%o_X9AJwh!FE0dx}nc5R1u^fa#ZoSE zwJGG?s^y&mU(LY-X+8nCx|8ku6>ir*>h(fW-fF$S2 z-*4C6twzy4G*{$*)m``G&M#ETkjZ9c;^fck|NU1?Rz@Q#s-#x*7X#&Z6XIF=J>NeMVrT)?2xkoeSAa$rL zsuYu&f4M29({f&H@}tf}{as&&@f6F%On~O560e8`wfL_^!O?lG4N9S67|DLE7GE56 znQTg1yyDu=`AStT$RX+^-QNKh7+nKgbgofXxD-LOOQ!&8vkFen1S;gzHsR9`9}XOu z2%b0$eR+S00h7{CT^l0d5-2xcXs(bl>}qt*!FH-K$*#SdWZY0KIVV{#o(!7lN?9qWsOaoacw<2+ZKS)vxGt2# zLBI)m7;}Nc)2go~1aZxI+T<=)>%)!}bkL%sB3(-t!{7vPSw?+A!?JIJIyLQEYA>mB?XcqN-tFfR9`$GIy9k&x2pJV|3y(P zR+{m~6|$cBtXKvMsyB1TEy7Pb;u6A4pp3|4seS{|_BACJ(UN8NXEkP>U}Ha0iU>`? z4`n;0aul>OHwa?1dPz6VWFsNHMX*%I%Z+%K)@$}q8N`di14Aa%rVVj5s7=FTu9J}j z_%sxV1x{-9<&*P7-zxhJFD| zcptwqZwYRpArdb$)n}aHel!Ryd0-L_2WM0!7yW^SOKWx@IfDeAMTj8b4$wwY$lXPT zM9`rNA1#b`=@apys$gW_{>Bad*FOTt+bqUb%$xpRs*m`INFwO+b#iYcTufit#@bT# zE^c4#=bO@QH{G8LN5-f@aZmLi=81|+LJD`b=Z}vG5_u-Ym zCD|h}nJ_kPrcD@EfN}Wgel<+5*lE^E7#CU@=*%5oGx?us>PYBol5cB9v4slY_)(~- z!{S;A38sB_pj$bq6f$Qb+4+b1IVYK&iD`Hx`{#ruk&51xa5o}ai}UK=Zb=y}`o191 z)S9y-T(qOhaMKS$$5wJ*n_0GToxMsl&UWVsy@#LNv+Gn%wkG&delCl_KjNnSL8=@7 zDjy`sOr;r1?#oNUAxNChQ?iQ#42ZJFPZ~N>xIWv#!EsO>#!MzhRcb|~?WI*WW%C?s89cDr~#_!k3lF6Y{zU3)IXH{lix9U{>S5WyRM_5ts1E+Sv zTAiKzpZ9+Uv3%!qx>6_{1+YzLWMWR;6a6Z1=VUCY^7$#BLxNGiVNd+M0lDDpHV95L ze-YPa>Y}M8 zK5^lYq@)ToKk%Ff$f|`qdQQi4Fpr{@PseFApS^~@z>Z&PR1f-z>Mm{`^e`^ZiOBA> zi#tJKoYnS`RgM2s(OwxG@FP=Ui8VbF{JUM+O{zJmeS})TSppLB2abw93&+Xakdg3C zRFWNOz^RCHL|Ht5y=_^lakKSv+ z!hE1`7CYg@v@wY*a16F-y)eS7$BaPksQ;MME?BUV-0UzHoia(>oh^apCnVbtnc|l(CQj-0YvhGoudNeA%BVwP09rx4V ziXzqMcPfob%bO{n>r|?)(VF5nb_=P0SAVk8{xgE;pt;rcgI9bJVFSxxjJ9{=Om1-k zQ9PDDe&n+gjyIClJvr>wRP;K53Y;MyreCy04Ot`&q5I3C@v8fcF=5|Ds^{Yk;nI98 zb1nm-9gI2yqa6$l0DKx#mL%}5vv`MjSouKt!RG!bq>Gr%WhTMPS45$}@$$noxm7IH z@Xilj+ZDLv7F4)MJs0e!y$VV5G|t|?gRb(hY-Dk#{ z{v-Qk4Xa?@?NqAFpSVsThGRm0a2+|yW^6{Nav>=m^d6tlnHf1MBS(Qfjq0j}6BkBC z8#O^k6-wC%#F$3J#CNn5u|yq$1SE@)uoG+JOd#S%D4KdrB+oYv2;(TQSChl0lopg| z2|E6kCiJIGca1Pt6?-J|UBhTvMhG#m)D@?)X#u6bCrPO@flM3fY|3|wbjG0~PZ5IY zC6i={A0&1+CKH{b(th}Hr;kd{-jLYewbo- zL|_?n=fHKDwTGY~aXHO8u>uLI4mj>x=kpQxIa=efii{GjDvzuRq$xI;hLr!{oT;#R zQq_j>QkDn3hz$W*Q?L!h$B)c+_nDIgpMk4!ZnOzhbBqogIypJudz0eH%)6R^bI(pz z{|gLY{qbT(b{+7Y%P@0zeQ*ll96Z*;&+VC!I@h3Ll$X&UnDiT6vlFauGM}}5_7UGE zWE?UoT$E|*KNd!Wl33ky+_jp{-5(p-A_ib;Bz+@8?H^ z!Q5OIYJuHp`LJXV7?~g;U#GpLl+W$>!Z4nE`OEKu6O5{r8&i4_2xrQl5#-!j3{k=W zkarf-&;$IvwsdTkcU1wU5PPj8CK)Qewx3i*Wn`dyF9h%&OFd3{YQb~(Lryd+H)=Z z;VotHS?>r0991A@uloGf54qz*yfyK-8DWTmfl3_=>Nf+++>c^grpwbaO*;JTos9;X zJ|98VFMIMIHH8eniy;$R=_fAVKdB2kmj!ha%8+qcqx?TNRz=`(t zlWf#hQ{q_TfsMveQcZPomoZEd-9VsjY;=)W@x4m?ie2g$9w+}y(gQ}SkseuY^&%$} zLuYH4s}2=t4y737ZjzW_3eFX z{LMN0d1l;OAp#V6{q3W-uHx4Pz}x{6s=8&k<^K*oKqNNh8|i|=4!{KL{}KZoZpPK6#)4hRFwL`xf--^J}@doMAxzTRG?Y&1S4xAJM7g7 zxikBM((LIhAx)tR4{rN9U9!Bsyuxd04YsP=$6#9| zg(Mz1;Fpt*A;s+@KXra7|IYWp^7szjD+?H^YfN#AGDZ}WdND{7<|`Oxkz71iP8sFA zE-a!p-2QSht`@`qLr6!Ql;xz6956-Ug;Hcb8jve<6ThJ0t$2tB5K+w^q7WoV*&bo^ zue_i9^vnrtc0-y(Li32Ak*vsqFdJ>?jmy;VP<|Pt@AanAp7!Mu%d!)IyDR40;20-0 zdhOU5>y?gVJJ%W!O1DBtsFQXuU{X6S9*n4j_Z<1t`&{XKyy8Gjfc>aOLoY{7yp-P5 zaHu|qWJP&;?0O;qU_8K4YCtTP9C>iM&5Tu_4JtPxbfM$je}u01c>CFzH9`7ykc%)s zrZ8V;OP9CtpA(C1$)LhYGjhGpvCbhHW)_XuDi;Ic_Bc{uvWcrlT3Y|4pAEc%TpbnSi_PaH{{Rt^jg%s zso%6=UjH!mwJ_S5V}UzP9JL~w)HNZ2*qydVrJ!4I#A+2CxsNv{Ylf4()>TBhGy6y@ z(}_oPJb$=K(@Qj4_M6ZYNep6x*7Qw^C_s8^UngBf9#p?%$GGFk=ieEEQa;h>8_6#8 za(6ZUh>aEj6yZs{^Re_0-H8O^Y>&u=5LlF=0$ip=pdXe?LZ0HSU6EF+ysAx>u`RI{ z%O5V>Z=J>%lJky#to?jVhG9)gKhpOQV+a_~o(m;*hAK}BAzNMw$~v0-OvB275INP`p{>Fy2oRHe)0no8)T1(BLM!FwcKFUX)t!d+1YtAeZ}Y>}cP zhfFA=XbI8#5p#1WrWQZXXmuV*@?IrFTDMcw6*z9LW zIyEc>9ypU3^uJ(winOz(7;D}B5YqG5qBf$*?$H|}Bsc{UKY|$r{le6@sLDo>ZN4#v z)Q}K@5_3eM0Av5%R@JXsC$^_AfuPUA$8F)ZDBLF6v|h-E5wXHXb%pI3{n<$@jpB(P zRj86TQ`p<7r5Re1(7_try@YkA*Pt-o!o-FF(0V4&yPu4((b7D*=Bc3^$_f9@koch^ zRU}UuSMu$`QOqhR{U6Lr16)FM?P0VSgf5DuDW=+iom-=t_M0Eh&b&Q)!L<`X2?nTG zzLx_9y<4{Qqhtq0ggWZbhEx$o*5*`36Il(f($7V6ZYoz=%reaTs$lYr(iA7>fAZ~S zAc9Pv)N0H`n2J%bE21lCR5!dxk~glN#Xgq{W)$BHGy=vOEw=_1&M-N?47Pv8MupFF zM?X3)nPw6dR0WNTISeXpvACW|x-PQFMbt-^P@bq&vHmgqzq2tCO_(s$l-|Xiv?Vg) zTYPH*#I_i8#3A+!jwhYR9xx__O{W|~z-2ftWpZSn`Lu4x@wATCh}KK!FU1NXZ>`)u zdfB|X136CmOuL=SnV^n)#nyC&gqrJ*LGC#`S<~>;P7FK6?<3*jtGS;OJ9i}<(VC4L zG^4qt;jCB{(cm9Z665C-RbA^|XpB)OHRe^5R`AwK1+yJiZWWCLZ>ZQ6if^)eK&ITa z!iVYtewSq&NtEfEsv&_^{>Wxds$M}NZc6R2JKDuj{+NRyWd^!myGhSGIZ}gbS zwc2mpFzG%&dAeNN9u?bab(f z9&T!bOs8X$#&^n@eH3 zlbD}90Udz`MVv-)Qp0@KZF2^Z#`|*%`>`Socz<>Sh*q#evFwdy9X23 zlFGR%lsQ3ZW_hGSZ_gU6w&&(dzzl++nxiA;apU=ir~HV>D-`)jvzRu;d-5x6iz}s}GAKHm1S@yI0mYo> zSXBO1EIQ$8Rw-{eyCTA(dnv9(&EBb#ESmm_ECo|;#=11axl>fdXv-O;i7*V*mf~MF z9SYJTK1k|?mSWQVP#|{Tqf9@aN`Liwu|UB-}poBwxdh|3QCz z5Gm@(G}4Gj3$^8CstuZmnMTM(XcJv{QcbcG!YjI&Z{Vq15flw4Cr-eDs!mZF!#Mf} z9ec_$Ok;B-Eoj9>JjpVYr$=S2+tsUtwBM%Fizbt@6UoJS)hX$Q4nV`SVSQ?p{X^fc zEuU`!ykV5k`Rg+b8%WqhL?*`}RQ2;H?^MLSupH7VDnzIBXJC*5Oa6id_0=Z|YQY_e zf926SASo4G<)W0_FAC&fB79}Um|8Z`PLuyhwkq*knd)ndl~%zF-8OD7y4vT0^o z)*I8v%Ir%N1RA<*Q?boR@i{1u)_qd3M~Bb=iWB?=#VY3xC7Wpv8UEMW$g-$S#HHbw zq_5paTG+qTlFi=hsvLwPFgghW?q4JVH3oiP6#F&Uig|Xb$sTHC4Z?gQVAiS862(LN zB+HvF$5Jh2uURQ0UxD<}ZAq$b{9AX2SL4 z;*d&x*)q@w7syE}jRo_-^w&7@(p-^A**P-*b{K7{(E2p`PBo|x8$nDNMM^Z_S@cFq2^`Z0^0cA(a7= z0hx>R;mgGO?dDxFus)?kMB)loEJp4@KX55vCy6xJsA&!!R>0_m)swGn<;iLWM1y$Jb&%eF5psEmA3dTa<-i#l8nx6T=2TvAMz; zUm|<|&ua7^LW7v%jEX;EB(}+AAr*bORAfO~fXFj>H*6744&q00X+4|9oDv#F7im$A z%h_8s&f39nJOd(ZU%Z2jPaag(xBk7jyg)6`BfGUrkM?$L57N&wOuHfe)VHyb-MCy~)V*EBdQ2DS5#tyV; zwOo(FbESh}DkpNG5aTVCr;QT>M@{B#dkOU$!yS}tdQHTPNsSKLv~dSS7n;VWip09G z>7*&7NhoX%((!mMMe*AREcUY}9#pgpE~`^~Xm-3)ZnV@ul#yqSO4#9RQkirkZq^(7 zZwytKyZDWYP$5JSt4a|I)wElFHiiW$s+G%%g`|~@J3UD`+TB8_6txKPFhhJ+=@@8^ zgu#QAhs!f8ZO~bq$maspPPwwS)|E-ajL737ADRdrztr_`ceeV$HEu^%q%izC>}3MW zAUHsSMik6LU>QOuD|)wi8S_k8LRU~v@c81aJxS)_( z#TvGvCf_fk``q3tp8BVUQwqF+d~)SxT-Mhc!Ec!ViMtA{o-R5S4H9Ta>Af-icr-NgW&~ zVh9dTx1<|)wMJ_EHk~X?(RR9gm>-zj>!ZOdfB#-;?3Q<~Zg#<7?9-s2KrZ(3gTTJ) z53Ugitl2~wV0tELxTgTWrvYcGfq8?(hLj3H=Ld#tAVk_mI_L~TSfmSoMoyrKR;p~N zjX)irF8Sq;XBGrgOFio-2C9=V6V!=ii}(-k%~V!S`;Jh1<(rsRQgsbp9T(-~mk1A= zIt8QCb4Z#e3uZzs{rzQMKpnIlb9oM5$=p%X&+2=|-JGy9Yk*rR99Aza5R!JDP>gds zbq1iy2lnN3w(aEhuLh)2d)?z6-)qwhUg(^KJEHXZ-Sa;r2;G%k%T3A*4mTC18u$ zO0T!Sryp!28eAkM_C=UTf2SZ_3Pj@>hQ{IZGq;0*d0K>)lK$FEtl;R>{BLOs*EFa> zyQ-h;beM&)YB~CJ!YbZtEHqBj5#=3Q69)1|9PMzsRatD*zKrw~nx#OY&u;gfaZ&sZ z-|4{w&vp*3>$xYH7Ujc^JC=b5Js|Y!#`O1iQwD0B*#ON|X=#xe)l>%{^;t7V2*G_3 zMA_K_7z9%XdIwJwdKIP?>)W$LYzsm35lOh4#a}hWUb21;$MYLB;X|*e4I+7ztR{i| ze7ZK^K~NbdMWDPsBhSQ7P#Kv|jSz@cG4}A^Ze|?9l}q~arg4FeHy_*s0ge_#M3+pq zM(8rkKBeg8AR@BxR}I1cb(c}dX0_6OfP6 zG8Ki*@XOfOuBC=3ZCn+*GPgOGROj64$Q#a7CqS z{hK@>7f{>&^(^PxtMT}e_`L5ifYjKlzf7OOr+rdrF z+{nx%zL7l!Q-PdU>{}W~G!9JIY41O0?875-g=bppKKn#)q7?%>Fgzi>E*pI_QHdYj zFmH8iKg#{#cV#C|gaDR%tMPBMCjESBI~FCgV}tiD^mvuX8@?6o4u_p9Q)7@8VrG`L zJTmFxbWD`gv9+)$b0NO{sclx|JB)s_hys5p{$hS4G#~x-aiNCw*|q-nyCCiFL;rNp zQeFrLUA@yuqOC0`ur`GLA6sCdF1&01*K^M6-W`c@Hr1_?>k%bHhT`uX7%l@6IhSp6 zGM-70%F3~KP>2-yQmpld?Ag2!A5lT9D^p|)TyQp@V|2Pm*+rfmVkqC!&2XBieIB#4 zrJVSVARW`b=&?8wBuT5Nu^+y~ctKT&mo4LA>XDLjza@Lxf!za|W^>Sdb1TA|a0-`8 zlfDsx+H&Yrw|HHr#9(x3l}q(8eH3^z)tLn=$!6NB<4oHS70QGyG?gIHoN|#WUJ~_T zEd?AM5k49gUT1o0eFth9mH{|hOws<)|9ptrH7U$#>v!rB({j{|oyvm-DD}nSl>!#L z5@bUaPOb{EftJac#$|y&MtC9Bv{208R$SjDRk!dSe4t58R%tPik@Mwnn}qFIwz?aQ z$XL>#13!|Fid`vvWAI>J<;nPx^Bw&C2FA!#%b zOy`zjd0&FOz@Lh!l4<2h`N2)=-S-Bg^g5uao*CHGfiI`|3Eob1F5T_kqnAKkka}o! z$_(P>f`{uGBs_0OZmnbL`J^;YaageBk1H3DdJCOPcDZQr=eOl3pFpROzXTY1tbzWh z$(nKav7I;=oejKx=8hL@>xxfjQ+aLO(8v_1R$g*4aeY~jqqs_arh8AqZPKw0{8+%| z>o7|jkhnZCY-8_e48Dr%56vTEI3Eaul}OLJgDvR04C&5q)14H)rRHgbi7z>R+1%uH zR=XjvWYFSN!NH*)p;x-qN(V3j}e0fjh`9ouUzWXX>>J27C?{ckNF z0qO4F#>F`|+Z{GE|7)2K3Bd%dym{{m_hu>wT}=hXNk4#kq5pgI$KCUezE{HiImP`W zLZ^J)&&S)Ze#xXn`U0d59Qc>k*u9j!CIWHhhZaBCNlQeQZV`TKEFWsEoy!W3g;xHx=GOT>#pf9oJFRdj+Xkt zkbA0r$Su@KT|qR`c6dZIjlXEN|DBeP0K@hr5a?p_x!3=!^{)EW{3L|c+E-8#Nob1- zWPB@?0n2tp>dt>cbYQCph;H`|K_j7llt;QEArhquPrNS)2bD+JY~%gxB8TLSVr4Wh zI<36Nn85U2HKk#H}TU%+iJkcU9Ge}wdNrgt4XVHv^G6EQc@n-?i z@>rMpD@3a-FKzAJ>*&p+L9_+aBAa^>7{!6wl?+mWqEoXoQVqp_kiFZ)jXbi!m|ss$ z3=JL7zZ%ba{G!ar8Hj(yrC4Yp13zM_%Q%O07A9{omY3*K=fXRS(yG6_ZVf&6uEjg;nK zI55o3zW)&WpLPDBznmW9F{p)nJ~p4xFAO5kb2~0~og!YLp>Vw?I2mzA>Pd)l%}zZQ z**^$FPGZ)VMY&%7es*lGbLCeuXb(^=Hyg@SVOS8QKt0|4_#uYf^Ei;9IvBH& z)j)UB`;aSqcO3NyQPY9#;m}T_RoaP1SK@ijReLl)EVGpNF5RgT3;Z0!b_?iXPFFHzaBb@aHT{W86g6aEYOrxI40O4(6K*(qQicobiA zI?`44D{6{LVZaQMnw^JByX*PJot?R!CEOjYEp?3F)AY-?&QyFFQrWjUu_|;rDrA?C zHY&cBC3@V)1uk0((0G3g;nm=(VU3=+W(qhCH$5*FD6bd5|622;LuQtaj)eXQ4of`9 zbb%X)g?`?3gXvx_Xn1XkFT0QFVxv)S(1lz>|~-mA;v2`B;~vTK3|&_D}U- zmrntq@gpdk-L5vOiC}Npg=Kp>!=9c6N!4<#z91VpkfqX$o=xN5Q+Gm~^3jS=5Tt(@ zU%vL>5|ZTFR?ECk@32FkUrsn#3gF|<3=2heX=GcC1qVj1B+`<;E5Q3$GqcP|kAeqy z#i&cjfH*WI5NmGr2yJfhlu|l!7XW1kv1YRZP0HjxELU52C3;s{VLQ-lVlqjzjwHr6%r@H$Y z@XuSUez4WdptK;BN}I8rRcY$0Qm>l*OcwBUG00VDGA9ycuOsFvosCi|jfFT_97vm^ zpRQm3&AF->7Lifu;J<$>A@PX2`BoWAP!idXu~R|7BS5ghlU2|i`PKJB#gm$av`fWv z$uO_;SN5aXYL|&{$VE-1FZLVr>Ttg)5Pa_Ma?Ha>M}Q~rlmeLzceoWG(Q>G?opC--qM2v80@AbmN2R2ws7=3;=6U|D$^5>YyxTQ%03t3~ z>Rqns!IM-ab^54^GDnqJ+*m2%>3oaw-()fwJ#@7rF5!K?Bv?5IHPkiVp1i6vW5{k2eCqu7Bu?!je_>FeC>LuwMW4N4e)VP?Bv+lKD&ON&8FMqWn zVMWT4uYxO_w2oQg-UtNX|GhT=kbxIv2Ptc0m}ikanrCvmrBMCm>C7%yEcfASq|l&< zKzN1XshV%(6`DDW#GGA`Jkg&X)zWLpIXjPECLlGh3k92%*kWrqY0f(PndzXiQvT6~ z&^ASoYa(fjqU~K+e;W^aIZlb(@=0WtXj$fG*T*pb^xD~+VUpS?4A=b4MJlRWe!P%(@5@Jyl$4swEGuja;XMMr4YS^Mg2Q6H zAoHgw^Q$TIqm*U0?lck&K;n?Z_cFc^+aP*hGTFYuWJPy@JU;!Ta_V-piq^`SN zE<^aF3Ve5%e`hFk)C>h8kL7`wFk?>rq1*R8>bt z56ow5b(c2>jj%IxAD}46HNa3bJ(4SJ1;G8uj-&0JL#>puK?_EUy;RdPdDDoh98`R7 z9!cI#HWXsIzt8GcgX-2oV|s2Z+guZbj((QUH5T%v>ivy(OrsJa(K0|BO(y3?*UfAY zq?S-;6wt&0;5}xL5b4>t?*`BDez_}r9QTJ9BfSH2KOHzN9XS7rbYwgJyZG@3m9{5w;39P|H|{`V{J zKX3fs3)rsv>FsEL^cEHZ?(NPBgdEJYjfCH4b#BFFoq)WFj-8h%M`0XpZ*)HGJ{&M`x}&GxzXntH1vurds_)h; zMJ>TA_n89evMF);X22!QhlDG{Yo!TAn(ek7oSOxg#QpQbn|6hK8FWx@mDic(UHxZ)0PCL2VRvnS91${#FxZf935sbMlEk>TG;Hj`U zUni#ZGMwC0N8^HG$7JU@@Mwrln3cXa%X`nFs6-zUzqB9tM>;v z27)yrcLT^_g2OZIvXDehCXz+sCoKfoeVK05Rb?!~>8J?C_0QY8#m~k^inB?UnKZ%c zkcoq5D_tx@>K|!$-tc^jjpZaxS59`+T8+MR8W>hJY=0-b`v_x;E}5LT{w0O@kH1M` zSZX`1Hu=(RGJ%ik+SA4_D3Ae<3h)^wl zp-$x1gWC1`LyyWJ|7LYRv8dknGp3BLZdQq0nj_%e9TDw%jE3F37qgk)Gr1+j#<^pxv*DeS|9I}rV+r|hCSNrjt1}L?QXH{yrLmqZnPY#C z6xJFWXn-hoWcDvK>~uMVC7{QUbB_%TtldUx>Ku65Wx&Bc_4EXZYP6p6Z|oqFZaLh; zK9#rM-(D|Wt!VgpFrt3QElE1kIV_CEUTGte5fOxhUCE3`#jLm3t7g zg5;rp`Y+keTC5IjU5te3RlE~^lVk$&YYycb>=d&YqyfW>I1^J~-|3pvsdIa>@E%wY zQuB+&Au0YAsA;hON?iuT-sa162qz1jox_&Euqg;*;rpD%a2S4vK1q2+hUK>+2lE6B z+)SbdkQ@&(i(tJzM&1mZ%RdY{B4-jz$a7gkNaneIwto*Y;7IkIe?d!D<8Vj~r%3)y zWFb^g5&JCxo9jh3-gt7znOcE}>i__O?N%H|Qu&qxa8)2DI?(zw{|{e4pufOB_-Ie+ zBvR9?-?)IrJz5a~!j<4c#1d1(2cicHLl6`BFs|XlFv}C8MFi|qlvJV7sSK8V(60~% zg+mkdg8B;>j27~SDOoEM9}F2awMT=DJP069(1Ex=>hRz+6K4#p>!=4^ehe2)Kp9Sd zfxMPB0wR)_6c7;|A;f0^VjN24DuU+$PSR!E<&GqM8UbqgqfVE;#oOIX^x;rYj9>t| zz<+Lbe1YbcAk)X~2hG)@!5L27pKDoZ_{A3p4=Q7yu?nJk0gr|*vwG8oZbYxLja$Wnzs{4dlEGII&64?{KI*Fqyd&m=ZZ}y z)i1OQh4?zMnUDNXX9Ra);Uq~EWlI2BhunR68NlNTu%4&~DH9&Mp(Psg1=+uDZuvG(>GC1I8!jyGl2)k~QAro|}Hy{ShOjAbSiQm9X$F;%`B- zGY1?eM3L+J*Ee*#01nrGmKPo!JX#@5o8lhDPzXRlUfllS<<>6_%LAAV1vC)g2Nw4) zVqwsnzD9`Z95hnSGw5r;`wb2jqWq&e<&j!9;iz48l>=#Zu6ix@OFt^b1>^vV%BPl= zB(_?|*vc*1K4!FiEUE2d&@Bk#SLw43_5m!KB1_4rg)0Ha5>(K zg2bo1I+IfE0Pt^6Zp4_0+tXYSJJgQ-rAHpCKwA^;MGAm7bJ&M|z|<;0Z@lk< zH*XerlVx#t;V#pE?jkgC_s!x0Bxcb!AFaGDW!HcCi0=*OlNHZbJ>0j90an;6634z60p>z+ulq(3=y<1ur(Q_iN%eU}66N zlVU2*cLSVS0^@Nbf=kK_tAVWp?+K7ClQ=Ev4cR%>iI6dW78VJOL2Rx9&(byY4BUp- zAc|(m3cV({hf1Xq1+!y%SX7(sF%TlohTZw)G2p>Yhr{0Zc-WgC04fX)Ddw4H!idA& z;v}}W%X|sYGN>V5)c0agZoP5H6cGXzG;5T=2%{rihIC=__&SWYzCyOtS*!@){s?NJ`RwSHvnUh}p~U=MRt)k!4aQ)L`np z`Hn(@QoWD)D_k+UVU2rh(cW5~2n3dqAodPp{RF|yy3x+_+|GXwbLf2C(#(0T=!5b` zU014204do_3KGV17$~|2vk)@YAY@E$g6V2AfW3vJ`);nGeS#MM+U13b+|S6pztt5n znvunS57mm9Ad`6Uz~zL2(JAHQ)Yti$Ct)fISGZ2cc7CG!?P{egY!W1ADH!0nJDDXu z`tFFkN0%0`ye8&eHd9?myZ46{v(SNw?F)P_I>96h;oMJ2*2jj#j=F zF?j({Ip(fAnDLTW(~DqL&{CF!pqG?vsa2u!wTu2euXPsRy5yP2asxwI#)1ZIkV zslSE2Go|A+R_9_aYsFlZh<5HBA>dSXi8v6U&Tx7bry5q)`5qN;b9#3y>Prj?0rmz(A7F-QC@N_0=~2`64)%mO5r^oq;d@OTx2|Hkr?hgNVvMwdo4+UfF^>db0r zOu9Y1wta`!Shxt{Me|a8BcR`NSE<#1>^ilY^IwAw5b974Wz?|npv6GCjbtF@Ui7To zi%MR~z0Rp(Q9aQX9pCAqBSl>d6swEjPR%Z0ZLNJIq)6P977a64c9=Gw=?JZ3F~Zuw zJq<-`F_4chdaBb!!(>_%h~R+u-=ufs`>1Vo+Qy?=+rrkmwWOh1r9-OWI^ry^xUWg}_1m@G-T%p#db6eE zq4_a)IG6CX#MSG^P241U7W6%<4L4R9CUbR>A_+)zAELAPIJ#SN_1oI1t*-5Cyxdya zU0bbfY;EjrENyOlSbMAc_O_OP{#@GFr0rD;-mbmb+jzSMz02NfcMu+P?=7|)TU$`h zyx!i}0{MjQ+SsBEMANw|t*)VcR(M;@uR*z^sqNQnt{u(nyxUmc9jyn*J@#I$)wZ^` zw)QqRYs+gdH%J#cx@T?6t`8~@RAsfc4*Qi{G`{}U(kr{L<+pc#f4lvE&T0zg(5;u6 z{(Wg{b<;f^uASunT-w|N-3VL53br>^Eq?=l{rb}84)4DEc8?n|QcV8Onl!*RfAAbB zH9dnN`K8t%4xs;Aps1959yW)$BBK}fdB-=LTqO|bD?z>s)HFJMbT15-3K!!OMxJj3 z`^KS)c*c7QfNnKW0sWBK zZ&al@s=q8ybKVZ;da(d{Iwx!uDjajjwuvrkii}*!wGV{xQFWAm*X=mWczC~wISs$2 z-w{QRSG}nsPLSWbV97nN=k!0S*D0n@!n5R-u(1OBR+`|Pf;y)`eU61B5m@aplSceu z7W71kqdhpV_B3X#<;Hog?0*I6VIIAd9-Ua=eKSV$1yHC%L3;u; z6uFz=1W^|!QYcJ+`AaJgzk1B3x^d7!XX=9(xY*IQ5(R&%sA~Wp5`aTEFAI7kwziQK z4TLlORlF`YB8aWbZS6vsFbyFv$b&Fy@way^b#5GOqHtY*Yi~*V=jmP!-Ba={#8=e338|L%m*}IBqeGE{@XHJ)4|!w|esgnfprp10 zLi@_&NaVCQzDfsjUa&e5w}8LSS8Fi^_~-@5RgoOb)&Gny?Ci+l5Gqf0gx<#`lSJgw zug22#q8gog4Znl?c`sPq1b)&~iH1;<08cSMv}B>EZ-%h#fjj*3ty zT~T2J@iY>CDD~k+FRQ_L;z)(4RS5;N;5fHL=(a>)g-u(dvs^Tm+e(O6;Q0eccb`r0 zSwxJ_9+6h(v&qj~?tEq|)1Yn3K-*}In2MH-)|5W*EfQMz7Zrew8sLC!j~)_ z4epzy1=@XTdH&NzQ*b%-M&7WcUP_@txj9?)Fbzy-r=dPS35Gk@9Qq(;>VS zWLU>iR)7hc@>%eTdYUBYP$C)CQ*iCC*ujv0t7Ypt0lg0-;zwVsb!>;z*B=Z8Ll{;W z{l%oOsJ`}w``2u9srPl?`YBSb;@9w<(Km68c9ht!>%M!I0St+@(U&xkIRn2jA~7}+ z!=h0Um}4z)fgkbEf5bxz7#D#_wl--Zp*2Mc>G*A!)TlVZIjkWuiUn>XM{@qI6$PvWA&WH-X zfEUc#;^D&ntf)ZwQxn-fqO?1_Sa5tPFlOF`U-WyS+r>rUaSj?C<G-uSsKr0JHm?GIm;7o2%aBp4cElh5v9fCO;;dsiVHWr_{FlVv<1b{qd{&Kw34m|K>AqFdp=a10l6 z%F4{^XvbvsMMgv$FhVrDg$%QDj&qzfw@`DIQ(<_VU;b!!j{B#qM{)K@r|iP39V9au zW;D;J4pjILI2*`+0HTuK9tPUzc=b<{{yT0z`mFTVar@Cn)$KnSvS{AEP2K0F&$G|H z5^dzgZ}M8k1UU%Q8aBv(&CP|{-~jHu@!4_8e9pl?IrK1{!ydhyVC zUD8;;MEXX$m4@^FkU@mgGUsIke&hqb#&AC+u8W)n$0=UI-L2F`nEay~k>VzNVfesA zc~kiPeXP}1mv)zGHJDW8o+yAOS@Mam5CGIVv~YEZ+F4*yU0j@h#mD8Xv$2!VxnL9W z4YI?cOm(C7Zi6#kVVw zz@*m9+Wytkt;v95Gf!|ZgOv?F1RAhq6&s@3@T&`Amo9dT`F(6zyb zr_Mcp{=7P|KY)7?o5M0RgO5TgiECnPDV!6)tYcxc3P24L+*S$koF!d=1$_2<-+GD zns9Y1K?n{F9)dQn5(lG>>1q}5QI-8Ng)JMOqs2tP=cPDoQAyTcUqE= zHAoxo@a1}A-2{*oyx6rXTAHj>b%{racfjt1XLWaz zy4!186#(Q;FRturix?iA_VV?IX0PMUTJ4ZiEv~^D`+Ibr9GM&trBSJ-Y8j(5Mr!&J z{WZ#NAdm@wr_H2D2x{DWh;QMJijLkC<3W7TCZUVsBVfomiVt{&PrZc?BsylRfAdz9 z+fflbrM8ck2~6FOPnP1hL=ef9CQrF-usiWFs;`I+LP6iZvXM)^MO;{~4~tB`r}-VD z{Uh2nrla^Hin@j0IsUYp%8K^ArEp!eV;9U)NqO!#s)Wyz2HAlkn|(SuYNvZ9WaZbJ zP%$?fn>s?FlzkChivyzN{HG~-e+*pGteXG5DaIqDUe&LnOsgF-dj1aXtM(l!5|e^e z$Toe%j3%?(B<8S7=4qLTsnc?e}lZ+@;)Gy zowdH$II|<;wPkiWRJ$~M)u1x590}#^?(Z;%za=4?QT8#fl!3l;s$<&kuWK9d!sDa{ zKeQE_*@d@F>}jXn8j+G}9u3|cBfWzs0!;O+gPA`n-tA-4`#3>J_L|i917PO3W$1^2 z_j=ypArOP$ zO4DCT!D(ve+sqzh^U4d<0H)1p)anH;0HqT#A`zL8L3YF{X>zgzR?#GSLf3rNIZVrQ zP^CDZ?3qdUXoNhK_>(hx(>o=zX+WBV9|tu+hg8|NfQg|b#`6(if5wf7-8#$`Se(uPsFcAUbNq zKW<7Mc^Mkvmy`!bI5!S{iM$w9s@DY?UPggOn~NI5rT^ijY@mjk_mpwHvh`sQBN{4w z|1h6gsxK;A=Q%kFGcsS?`*zvhH`$ve=inuohXjFf0oqISmiyQlh1R&*0t88LXiVd_ z=nSL?hhS)qe=`u)YNv2zfeW|D>%INyeMDrak^4z`Lo$q#9I;fU+R$H z5?2r?MyJ4}NfUN{I?h2KoL3!&LBpG%?=nI|tetgyn(VfI@Rj~7y!goU-avV8+8&yo(q{AZ9s?6_ zn}E3D{%Icty6JZYNi|rwj-lgzUR4$zR5cE+Y38cL-0@1+oOJ=7tfmSeLI@Yz;k;*h zVxqJ1z*f2E8{h1v@tBA-6=UCmH&ukwJ=m(61c&;5 z8p3l{fhUQ*LK!ULQ?b9unxn&^^>Yr1M9kIi!feBbkwbTW=j35zYxX;Duj7xbN2v;5 za_)j0zkk3CaH~u5n+tEDR`3?ia2DPJ9SMVVf6Azj2lxdZr*bqeAyA17$VW1sgo}P2 zW1qq-I)P>K+7+y}&`fu~zTbdyp3}p(8k~(Z50-XOZ+_!sHKbf4Wa3_>s#r>r(5Q;K zxm5*?s`(_F`ZQLTN^qP|@zYU0(vQj-G}T(Fwlb%qbjnF}iWB!aBX~YPY^WEfs`?N( ze($mss@9V-o;e>OE_ zNE8VE<(TiKC@(Zl6&-Jgw`B2_s(-p3T5rb!y-dG&@gjp&e+&Og6ObfwA^5RBWD53L5SRqtHi@YZ7GRu^7{y?7 zy~)F?$it|}N2NO4JIH7`%&NV&n$iS*m?+y1c%*g1 zO}>9@xXCTrHB|n_=f7o(-V*aluXZ~GF&x+hJUBgArfUnbEkPE55gyj*Ltun<;Xnq< z^QP7B;ZAVC=f92qVomoB>en&pF=yn-4*SM>!>e>_$8@BuOpVPdbIZH~E^a}l=F@1hqQ?F|FF_@fi1Iw#_%YQS4AgX3qhWpD#Jun$EFf1616GZC;&D%B4- z0pq0;$FDJWCtxFjUvP3wv7^=1y$3VK!XQ?tT#ft`H4VV5Y=5DYRj@`1^<)Kap*?}E z=}5LRc4l3|+&7nH>(%&-K1T+034yIT>rgLCKFI;~e?BGyT>s8~!+ai1tvsi` zQDLZipaB(@yI<|THg~4RgBIfzMvmwGql4fdyV*M6k#v?4Unx9V<31gwu+8~Mh2!Z^ zIajURdH&+rK_!C)EX#iWIeYf(*+TZboIS^184_t3LTUCQtCkU0VEp}8t>+Sxy=;wfCM?jJ~YA3rm5E`Y*D6o4lb;01>Gf3L_i zC}xFh7LZ{BVwO;I0yf)n)k8lMIbmXJX@bZK69Tg^0VDRrR(%VlSd)sQP7P~fX6Y~E z(w@E67wF=V*%;q>69^yBE&&^sweADv7QiU8^+UKbe@jXLDuJ!LJFzavxB|P&A7D`u zvbcTCKhzM;834tIsxxsy~!PgBO&EYu~d;s)3sbe>`OrMMXaYEd|crPLYYJ zZE@?F(6djDW(5gY*V#OC<6L#E3=V}S`28Xv z$lz-ew*b)Upn(wSfjC{*=Gk_L_UPEll5QZuxI~jiJG>=$bC+QuM9+rS!bOOPUI9qS zpMn1akP%4{h8bHnD1U%IPmsY6Mh5m}>B{&)=MxNS>Q5R#fVDL{!JNVGH6T1R`=C0) z3C^|jeEi@{UkSVhZ3YR_1agITbvV+vBlh}D^)#Ef8XN=oAO#ln;Z{=&IKv$FT`Skz zV)LrbzK6*@p73JPHH@|U?T=IU6iRl{O-Bzf)o=%a7!IlRZU!0aFCUi%IUPd$U$kuG4P+ygaF6dFgA;X5O!Jc8esmN~frXM=&M*45 zdX1Yrw7J%toGv5GF-YRfVx7xM+~&lfwfVsl1EA=wPrO%9RV?3cdtzGEA2>0ss+>3) z-c}qM6B#jbaerxv-$K;?g4|0rr8-x^OT|{yP=Prok9O#F-#vQnr|QR_4(|U%+iP-G z!g^nDVm~>d=*rcPUOt?y9b_Nn7STBn+I`jhS+WX%q(Aq(Y(jtZ356#a(?oeIzkj;; zLrk7*)JLTMop8he$}^jnqnl&oXyD0P=#PNKSMMxT4u23%Tz>H1gGI=m86?lje>3=i zK^Uz-{Cxi607=-!@E?cGJ^1P4&-efPR|Y8*VkU@77GNEYrEKaqWR$SjAB>G`!=hpf z`bh$e+K{F#Y#Tce3shil7e#awClGo6uWhYtuTqCp!-}UEpwT(i89-xj?{HvuYG%@4 z6*w9i#(&uu!%~D;Bas9npfuE!3m6*A6zZd>HYLLxp@~5FJ7U-lZzl367ZI$*kyx=f zYpc7tvm7a8Kml%nViM#a1=OZQR~15!xwr>4XN&y-GQOsqk9)BTyt81bQ~N=Jmqytm zwu(`@tr4`S56gth({)}f5Rwz51F;H8yONbfZGRSacY+3LCvfdn^9%pjP+=HvKKukt zAkfY6(l;=0ktiZo|(Y>tU1Inja> zv8ozzj)C)53fr67D5i>y6!m{%dzd*dvOW}PrHi!Be_0uX5nuLG_4Av{cUM>tM|!oQ z-G335chT+yZDM5ibK8s9y@GQQv8(6K7463SBYQDYkM6`wAUjEtH+o?}9q5I#I1F$Z z?g>B(Xdv+M@wfP4ZO;`t-a2#)28a8o=$PUDSB6$bhdueW|81e*$X5u1T`6O9X5t9j zBPJz}pA{6oDwnGJSC1YdAoFQ6Ze3mhet$nl*~-mFEbQ+Tfp8#_uKeGFg?r-57yBG? zG^gX?JHlwRfhN(WX2g<2!iTPH9vVW3&2eWOFZIY3oo-Ci-|5Bb@gOFJyz-q!g;7HT zV*GyCRNyt_52YE32O z$`z6PH<0)cQUP2!ZjnX^SgV!%`6bWvzq*B0voI6Z@`1=82@I?fkyBynnRy60(9sU86hl zW|;rod#aT@pMy_*iaE#5#+smdQ}i&6a5S2!r>h%wk`*nF2|H4>wc^l=0xpq=%LPL= zgI8et0JCu~lLcMYI?lNC1Xm1(U%>oBN7wQ@cGn$!hpRY<-g^@D+YeZ-21`VH#`3Va;n-=#+e(IEcmtjkN zN+o`~uYVoWcbq>l5#>0N-wrvpMbj4patj%fgB*GX_?cY+w)4@qY={l0?)I?xjS7|# zl(d^cdZ4|22p~)#B0Y$NX71@=50N$tc3n~BZ7Q3h1IUy|Y#sskjLE4Eb4?TL@YUkMzAI*LeS<$*DUK4HIn0F+5iPi2PLB-qjv6xT`)LX)sNbGmvuD zO@9v)hjRNx7az$tN~h;r#a+JD#)^6THN)cV*T_vRx+Xv1A86{Z7IzoG^NGZeQRK-~ zn!q9puOs6COMy--$^Y;Mx#e;ZMTAN;VYsnDDc2biyOe|1qXN7S8Z zjaRR?-|jAL?fTfxq$l0c*b~(yB=LW!ZGT}z;O}eiSGG5|-}>vhFVpF_r}@Qsrm)8| zztA-|DT4}C%M}`TgxUYuP2^!lnQD>J-)5F}F-9)$aj;z5TwB=%kqztVtLMm<${Kx9 z#6{^x^muuP595}O&?|t+iU>=_G|bto9V2RwpR(pTbWRyCj=*1?U0h}tr`ZLZNq_KD zNAY=fex4x*e#!1p*1gI=Jq`fTdL!eXfQv#Y*3W+blKqW8ps(W(XEnOrE3OTak%$%i zbLs5{iGq^0O`4=!_B5>lpRh*W%x{=sS{GbxNQBa%n1jGmpcX8Om`5TF!)Zz+_xiBW zqBu#xUAVc7qz;q1pp3(V3f%Q#tbYRtkA^F`86MPS8kQtiY8cmq{NlYxFi%4k9EeNe zuj~@a2THEO^q}!JU@i|=MaCKTP!mJA;t8ko{GkkT`j|hILr#C?4+R&l&E)9Q6FA*S zVA6mwj*|??Y8^x4BVkDA6huOtk}we*vgU}Ok-DRMsqB2l6A6DL8zGy3(0?|h39Qb? z2@yy<4Pv3YuS$rN2?g{YU%xz#2k;kYe4*d)+=USqKF9+M7G7Y@Jckc~JzF?Ne_|=Bo3-}jDcV?xC&zCpOB?svE zE{HkkPFn?WKGt@dt&>x%e|cM$0f$#ynA!uyhdFMpW96zhepw&F$*bO8J`*B_ zBJ>=?*{SDJonH48H9V2n#OC(#vGv8~4iqLsAh{)X+|@-S62l%Sdw(rdimQft?Xg`UB;CY4!BG1F$|qy|gQ8rHrCMc%7-RIlDg5-h-5 zGqAowBsjQ|dElTU+)55Pn5pB2#!j19iz0X{nxqkV$37J?INOtzvj^(yzl0 zRxe!cADyC)CB^ie6Mc*;f@8sul|Jvd&px+9*!={W=t$iR`hT4>#OUdFk6~3dq$k$C zHtb^csUfS{Mwn@Qdtt%}X_Whx;SS3j%raVWx&&>T#5YctW;*h=#i7(*wJ|Up!kt5u zOs7qPKruD!8HiE@ffzh9EY4KIm8C!x9{~o@?Qkp*vMmFa%xHa>>l~L&v2%vq?pM*5Nx{?XCJ!=X_g(Ib*s=zg*dYZsv+Mg?F85EgHE*lEc{ozh53OV8-`jaIS z?F%uSi2URZ_k0M9mVU~C5+faE$1(`-gr|g_BISUx*ncQHT8xP1627C-vy7rj1SOew zFoMcxB#H1gh_{6=%C)KA;_az_iz?&_dS_31=dpf(#Hh1Qb=c&HCVkR=@lBmLDS;hH zz1Bn4_@6M@W9ljkH(NZ7;Umnoh@X1xb3E(df)d!<;vGTqay<}R2VSgO6U5%EC9g>|^r&!=$@oi_93j0~4h z^iU$mX(PuCWrR)(p+!4$Lvbh-&5GR=E>Ow7d>zX&nmekRQ0)3-uB5E8LcUZCBS|?0 z7uQB{A>UAdf0?WUT@A)PLy}ErBG<9_l%cB;(SJlo7@=vkQi^iwy5=)nlR!+vUbs-s**8~Wy(B7fLO@i6$xHp5qO#~!7nGL8Tu@M+J`O$}2Aia1rrUFU5F>>0 z@W@>0_hP-PEhY&+k;d8ZbaA1+-+a;7WAWy%Wuzb3;U>LghwCS!g~fN!U4{41U1RQ2 zaDROMNQ@hzk5BR=wa`*dBj}cmmP~T#J{fh#?abFiOLJAhJV;!hKO;ej@=O|D0`H#)}@^=7Yb~N5#(7* zr2><*y9`lS$eDcP${cs3%UjON^R7oS9f|ur^=d!j*CC7M_{%Y!f%rdgU6+c`vJx#H zL3$UCSy_)_e83CSMU&szqy#T@2gET`Gz)GX+F z8s%6Dk-6GsT|7rQa_5j8Tv&2}8ybqGT?DCOiR7}*H0;vldgGIrbgk$di$`Va^||O` zP;N42Gi3F9)66y2z)fr8q<sWwnzBvE*Qm!L*?o~(67W8W273r9G za(3N?vLUF9Nh8>V>51bP;LGAE(UnBHMJ$=!vXnvG&`Sq>Nm}4#mvmww zbgr36AOYC>)r?yKMt?bL@VLaaxt4iRKF%g*<%H}O9>zT}yDS`OBHfBBaoQD^H~mT& z=A70}A2o=gcxKV>`w>@e?&LMe_;(oPP(5MyWoWq{R6@otmZGBQi;YTcc7=9I*ZZ3A zO&e#em69UYO0Lk!qL%lqo#fLC<=Wdyt-UPg76O)4ncHQ0Eq}YCGZQfp?!nBtj1ZQI z?)0}}{fS+P8$5t18KRu)zj2XYcgBT&*%=qQRcBJ>7M*cn(5|D*BwI~K#wjUqFIO^g z<-FELa?uNyd|EyGyd>>ALBG@PT_=Miv|OiHNp!7h$T;PUW~}Q`^Ph;4ktskk=~taM zA*AOfHif8*gn!-PT;4a*eZeeRHXdvyon44&>rza*{=~E_W&rFdXVYI#wAf<4g7_X_ z9^>}xI76K#%Bn04dB{W#bJ9v|dE#>UOJNi@b!CvXTvw!x5XKwTt=soxDL-nse5jZe zxEJK|uHl^dDYis~rxP8Gm^?WK?Wq3g#DRj39lV)-S+U zQe2u;C%-SLLVl;ad%m2v?~$B=0+1L83th9NrP@ucEPQNfL4Uppiax!PcJS3vk)QgkjL(gQaaut1&`^RU4<;e5d_r0NzP=IQ>*OR5aeIQ& z;u_CtUNHVeh75j%BQq4xzV1uhcqTc>c!+OmLKty9M~Z_AceKPeSH9eOM!uLxm}833 z#ral7cA4yuFNgZ%=x->7`TArZmZETjkbjPsRRok@(1%pPv*Ed;|R>maB5*`A0Fa$ETfG8VdX~x=+*lG{{Fk z=nRie%k+}bi^f%QX^d_ZXhPmkx}nJ5h9$m=J`>MPQK>WB$3?+LAC*RU=27XWEq`2g znv%o7Ov{I@2GvjEs)6Rww<4C#HXuX!bj8F2#ucN+n zFsqLGq5RtiTMm<8%QkZewd`FW%Cd8TFiOC(z)=|f*oZu>5SnKKkc9AC0@fWHEk$%G zjJ{@2tOll(;|LY_9W$v&|?tea*&AE4{ zu{O@RoC*mSoRN4>qhZDew!5=q27U%~%-(p3!R#2H_u`AkAUcd{L8!__fZZ-?cj9s^`2ZOAOAo0#Ak@1nS9X9pA34aB2ee>;zr&DobR>FdABDO@MxX6$8U^2 zej4{9AEkVg8N+C^OX@%|zkg)rHJJJFi}OIp(c>9@VqMIq*^r!!?3kK@Lg2jKwsidr z6C~nFY}UzwGv^?~w2{%C!JnhQGr57zX57Jq%EH;;u-rS#RCG~4bv5N$kvh6tQQtp- z1jaJ51uo>+Fm5*Me;(rA85E9$98QI^> zCRYq+nMp%g3+55L5M4fVAh)FNSjbDm$mEA#xs@$wWC4YYL=a-DuDO{%S7(_huRTsI zR#B-Lh@ujG%3#3BPSI4&c1Et2j8w1)OzE%*k4booKzAh`$$xx9D_kr#^n=W(Ow;c& zN?PTj0#&WYCG42u!N9^J{)k^NLSw|I7~3PPY0fgP9#D*~+J}tT>VXnVCsrn0oz!_A z@i%qsXWT3{bxiK0nr&vPQjs@cN*KH)`|z+i#Sc9_Ws_;cQw;L<&J1xMoy*LbkTa@a zv-;U({ko407Jq^I9U*$3rWK3;d=mR|X=Y9br8zKh8VlVw($K~D1M%pXOkWsI2eU3% zt6&-{3NbARc^b_62r{HcLbXDq;N;>owNZ$X6RYu26JQhtLAR}dU=46pz}znS6QW4D z$wdoptbYAB=5C$yJ#->VtyRdd{;WH-F+!fM;S9ps^K$>;(LK58|np zM#LEiN#jGq1jEVe)(txTrO13%(8dA$;#}mhR0hI#cs8-4u*-4WGo`kUDzJD63gw7f zLCpscl&=o~i&mZc@BSsDVGpKDixADKFMhf^bpXT>#DONL^u#40`vmYT03M&>(c^14 z6>`|{IDe;Ousou$>2ldvGTWX|c6_XIaTv0N9D|}pCjYA~t26!A**WjS!6^p}Q9!fB3Oa_-HQrvrll1f&tVKhhc6DMI;Za0_^~m689^? zMp2Jh38F(Vd{do*G&(*u`X1>q7T|$FP=B2Rh<}ZWkxPg%X({x!rFu%}1to@DA2&ASAphQQ5U9FX$CrAQ(326B3MuH)K~t>RJ~lNZIo#ZU%H|N^_=8PTo4( zK*V^AGGehGrgRbhE(Oyt&NRTQ2XA+X2f%_*_jijvGOuuPWEZutQ##4ERzDFO3Q5D9 zReytvnmEYmV$r}=+zLa39mP8wVQTntv}L4ui5D*$qNz(XBw=zuVD9|MCCtqMPs+CD zLJ2j;kOJ?T-5gwMB+D&&2d5@M$}k2v+h`0<@;ne|jvzDY4n<7Wb|rwlZOkt&^f;o7 z0|!0d|2!)|v>TB>4u!P^->9gcVx#x#K!3U3mqoC?b(gX@Gv~KKz8X>J;R9{BRzVut zKr1Bzj<$^ZhBZmKTvCFu0(F;qrXdumkC;KzTWhZ&KELxQlPx-Ft*cRXlD6PVIHOrb zDO`wK*`a!uoi}R~Rgz#QOQ9=4tmw$yti(Q6pH&H_=Jh=_=auP>aPE+nh4c`guYaGS z%ZU#o-6~vxeVB39eW16yey(0MBx}x(&kmu&Cvmg8*4RWhEU9lDMh^dB`jN_pr*zE1 z2x@GQNxYbb10(uM5|Dyxs2aN(q%k9oWZav)6c?n0*CHPxrAFUx__E+!C`lQ=L);m_ zkD&A68N^VL_)6!3=n#>7WSSBqHh=sF%yj(uieJ34Bq9n*$p{@123QoE@*R6(OLrtT zvTQ{P)s%CH*k%w+M!o28pFA9sb9?iig&Z+!7}$00iW~wh06K(s3RNSXzdnQu_R49CFeIBgD1Ve&(gF+HMdG{eFtcu)ZDN9T!<(YZqM z{tZda&-hU;Iv9&sdEt_A!PX&DgS7x-oj!~dyO#$HB#S0gx+fJdY&MLJa&(NC4Xog=QPL;)QjO)d1&A}g77Sd4% zloaMJf)cUhdP+_^)IzB}uC(%V;#a>1hZqJeb4$;6;M~G2BQRp9sA`5|;f2nS#S)It zfVTPK6Q>casE@$(ZA`ds+3H8Zjewp7@d&Wh%|Vz8J4ZT10#@5MxqrZp1>X)0!PHq! zok-O4L1QUB4QcE{qF`xg6z5yvT`=S$3*H!lOUZ%ILKVFs-iO^QQUE_dz`q)`Rc6`O zlp9zri>D^IcXR+tIHYPxOJTsFNKOs?QPMv?xKv$SG(1SqDDX@l0;K1x*j_s8ee~H1?lE`GtVOY zmm7>+7?dO>CRr$=xKS%*v`Xk}I6XZ~@DYo#*pkjD{#k1F8P4o%X>-N+eC7f`k-V%s zKTHzZC<36{IwU}-s4h%|vy21C7#>E01i{&T!hwqUwC}S0A%b$7(!-3HHxm2%*Kps| zLMEKNWjSjtkFCKit73mSF{^=RCvXH5tfSmQv1YTS&-;;4rY;J?Cbq|xI-mBB<4T-W zPaO$K?V}T>Ibm|+r$3LO2sywkfL@Xb5Q4zqwDHhFN^at=MD2jZqXi#;YADh zoM?Uk4h1xcs42kQrk|Rwi^u@TNy3Dx2`IY50?=}_+?!-8dNY3sDCxjo7^zy^(hjV1 zG7dnQ8+q&m;y|5Tsd6D1AFnN8C?}Azn?5Vs38&%Hoaul0#8=(#qA>;?!14#6hByZm z1W|~F1R-i1fOC-bp5CjxxN{CTO~GUBPw#=d0^A29oNY0~8WHzx3&ckt%Yip}giXp$ zAnoT|*2_J`Cb$ zE1pv_B*C}78FHL+JJa11YduutkLkUcuU>uw;`j_F-e+&VRlWlIPp{h=RNgog@=ujd zSynxm(W=!4l^68^DIbqcQMC++=Xd8yS@tQs(E5L%v``;B15_$gf8G6BAAHLm{`CyG zZ>e?U&F0MxBErg=fpj?{Y%d{V@$v0eK$uvb|Yd={*N`j0cSED{NyY z06Bh0%ubGk8ddnloQwd&>V@2J_Iw*@8k`Pn=aM z&SrnIa0VbkjaO0Z*uY5kAv$&YY3j=~P~py(d*!kU#AxO1~qGBaCz z#$jsWf%lCz7?@Gq+qY^CP)(C0e*RgyuOe`Edf+=#0I~%j<03p24pm6F>&(oTW(K8a zU!!(7>L=ACeZsU<1k|Qo#zihnPClCi>qLJEvf(R%lOC733jUB0C= zd>)r~=Vsv}0;FC*p`wu7JNQ^X5WnX&{LDLw!nDgbd?0t|{aTv&eUtFX&}KOZ^RTPS zGnd3VAsC?GU%UOmy!8aJ3dVx!gAk>NiW@jVk;fs!>3 zHjj^0wT)OinkNMwkpcY1Hnu;F*@Z4b0@WP|(7ee=Rh;M)K~)J?7l{otpnB*lOxb97 zcx0!A)B-Hp)fyx^4hTyN^cf}PB(VQi|=@6h{3DmZ1I zk8GuLPr>wH34<(~GVBZ4ZjgWTP*TygnKk^!sYu;FrPq;wf#_(=hwfl=+nsVgf0CA2 zW|QU~yNpxY8~|xJtep*>%*HoW;A;Y>twW)qT0a4!f6cHUWRa z;+9Mux#@s5`FX7QB{*oBhc<+ARMgOlOO0%}L@Z`)*oH$msTg*c{gW%AcM#rWF0loc z!QlViaGL4o+ShpY^{(lXz|rVUwQ zaQfNV^%^xnI)HtF#_xY%X7{p!NqDY0SJ^K=xO4xf=P!QFKK^$>Xz=%k4<9bgmu2%b zl>AG6mqWpd{I2m z9zFbpwR`mN*T=r(*I%{7A2a_iIqUKIx-0qhp_Dv*`l~B>`mcXqSh5_BS<_?Ip1P99 z4(f43=S?0zl?Q$D6q)%azp(-5e|v~Z z;CEe`VA(f{KJff{)F=;^rBQeS`oWTR2UG}MfM?_Nqod(n|H9uV+Je57A3ch`TE)~zxX%*3t!Lr+B%+n zeO<4zzP`$C(0<3azKO23->^3j`diY~l3q5_ojx70JK;L*ciNr)bIpP|A-V&IzLma{ zxl_OpWsHBOza$++WKiYtDtdCPrEfT@remc86{I+d%g|rEq=tToc^uI^VTj3_D;TUy zrC}wn#P+xeDkc$%M5S$TGO&URSH8=3zKHns@;@7J*QSb7FSN0YQBWs^jpbFim!1ef zkYw{mZX<46#GsAko#x4~>CY4=UOUVH!XXY|IYfUMX=`Vx%Te8uarHUcM@BnE=-Zfeq9%@MN$fu!3!gmPajC z%UIQ_9g@UF&aT0>(&XO8Xmue?csSt5I3O;(oa;7RBqxOgOo4Qkppmy>jKr8yUa^z3 zwh@2u!Qbc>GPT)a0TQ(wA=~lCtWa`*-Yw0IIsTFhCAq4l#vC`ekb}4xbA)!niP9)>iTpm3Ok0SM3!+>=_z3SuPp>&E-x8L}9|Xkv_f3!&N30g0zl?Y` zz>TIS%0k$m+Ik6vQBv7@rS;M&;@Vg^+xmYVNw0_S)NbGk2gmCH;H1Z$bZ7LW?nTKj zoIwR0`GFQV@|uE0E8DThq+{o>67)Qr;`R^0x`)ATikp&G_tf28w=RN)=glT~=qsT6 z?9Vi)hAwQG<;{G{bdz|fKy4A7P0CMqHW^oh<^rmrYtpE856FCLy`&6w!sP1Ea7KSu zza<5J|D~q}1w-yEnQpSXU;n)PR(kLkTj@)s`f}#|0o0b@rK66tb|0#dnH|d-r-v3o zRd{<=UVl%r@@{%oUZirYyi#I}yx}C!_uT!u<4;41r*&W7a2gud_<*FoLOv4h5)vW5 z2aoZGSL9PN!$p{T_ImGybyIU;@7RQo>O2OjQ_wO>~am@wG(@?Ww>^GjHN6 z`onqTBs`||P@c~mE)bJO|AE8sbn^R&zkFEefyZ7jzFhIe{AHjtE}}jPFX?{`@U`EN z6<#-f%LMeu@*{g?8xlyNFMt`efF{)kti^OP#o-x+JWDh0P-}M$I?wm%JYW3?&Q*|a z&w2h>D5w3EYTsr~5sHZ+(&mlVXB4UARn4Kn4%;GO@f$}-hBv!_7yHGBW=*TaAIx6)r)ng2`Mn`X6NgB9VfB@M-B9Q=N#9MC~HGvvHjiW~KMpD23K24km3ETIsdMnc?;>78jeRjX^ z>TKL(8}!^43K3=VxjqgvM_2u1+JjKN0kiob-gW9Kf#`**eAG$VEG~cJh^U5ey$4gA z+x2hf147)rd)@v01|XKL4S<~ks;1OV_D6otR{uHt32qSayP6k}@Tvftg_5u%*f)%r zjTFrkqwwI>MR9V!!qsmwXieJFe9}tSljh-{0rdaQO#?sPE+yJ9d;qb`P4*%dcTt=Q zWk2ncqr+JL7|>Am0*rqt4wc$Mch18=20t4whp*R%>!h#07`|H_{{CXP`Gm<4o)160Xds%l@#3mv zff@vDi+3b?8T*ZhxcoQ%qn&{M)TE1Y{h|8es&o~z37^NK_t1Z@BNu91#`EGTc7-^c z=uc-rQ0Z4J=)x-#Qdpju)ARmu^?A+55$?2-{cUJ?|9(BkDTvW5tf$!X50n|VvBnAj z)86@LsGXL2*X3Zwu3qVn+kbjmv%mCTz0dCEpl96pJ>RP0*z={iunJCMhuNsiabc*o zfny4bkbLsj308k?-`|L(W5Oohb@%p|*xN44r+qE%)h)9*b_P%U)P;G=r_3gcrP(Qk zxX-1By5Wgo7Ec;cT5>KE32j26cXeee=Z%|w5th-m+K^!2*~hL!=wLJz>=xqN1S zo@LN)QV`HS_)Q^y{(J-g*&ZF7_Y$ zQxlkrOt0!A9Cj+uhv*3ev?I{b;6vR`4w;b#9#mHm@UC`e4BbVVoFlxog}0rV(9g!X zhu`2(+Bf5Y=#GlS(DBL#KJ^{f1s+CQUZDa-9R+{K%DVmPc{bo^vt`*itUITUQ{!8F z5#e=^W_l#8R7WW|=?`5Jf_ovJWc&BVgx~#lIR~78_yR9t_0nWtK>}*}TP8GeBG@2C zGr_ELrs90pp>=dx)hAB^I} zM5uoq!+=M-BFCU}p}mt(>0U~1aww-ITMo7!Wtvg2>@8@(j@`SRNYf&ATCY3VSIu0> zywq!8$w5Sjk@dRy+Cp#hE?MGEcByhPD%-Ps3Li&n!1WM7kHB{t^iwC&eI3*SAGeQ) z<(&poUTYmKn}X<)*UuyVU32j3FNN2?J_vuWl>U2oe#eO_zC7umkk&d#GSB}tdC6;4 z?);P9@^7w>d6T>=L!RIi3|zdv-`ODUT~98}@;yGs^N{f?(M$7PifKz`sHrt!f|~DT zSDH=yYyFKT9951J1b|}tqBk6b?(sR9_9g9wiE~EVzp2=-W1>t>7<__^C$TLF%5#tBVFX2s+!tnfVZPh*QWJhWXA-q-X zOrCh#Ko;oKnk@`N^3mS&&z?CPx3ih0dCRH(Gwn;$HRO`k%z=~j6+Y1v1MJ1^HTfMo zXwj?mIYx0b1&};Ld@f|jmCpU+PPTt;@aOCZajtVYiO#mu)pv~T+!Q{lcOMY<%}ZoW zhjN|ubUG7WSu;MyZ6{l!y`8`pJi6pGvXY70q|ICG+N+Re*XE?M{&a8y!^7u! z(NHw;sXqo=b9iGi{igXqx>x=fa6b}Ul)rdwdUIHP0eM%u(`Zc3gU2-5zvq7j?Gq0l zdB+J4XDuFZWAei+s)fS!n>hh6nklj#Mn63oTJd&&gJ1?%Z%|4Bd~7t2 z>KYzhONQk}!zwA<$`2=ocwW&HYG>C^$zpnJI3#k?Yw#!nay7>b49{6#Ik|e0XpLi0_*FS zH*mryj6qx7wZP;%H7@4!hB0;TULS~mbJCcY8*a@P@(kyUA$ou7@2G#jDv46?vwtM? z`bT)LV&0y>h2`g*1)wqXUfoMAW#ZDl=f(Q6v8Wzg0iFsK6bhJUrjg#)x+CtJ=C;0U z+DJTW)o1o^wfkK$h08_u9;?W_&pdxyw%!|M`GLcEF+0MCVuW$$ip zU&pZSHwjAEOVBw{xAA|#&nzk=@kd`M=T_M($!?!5^LA(co7_mr77FeDx?WTB$SK+R7}F1Z7m zZr|UA_P%4h-5|lcg$oj#0$8B6i#)%&okj_OP#*urAvPv+8hHeZob0KLwQ@8 z);7s=;VpXLxz$@-*~MR%Sm%ha#Bi9d4e!$ZA|It#k-v?M1r7(iw%sps_e41%gB!03 zJyzh!`mBj_|0AK?vnv>To7vZ#!RUF-A9fZ_bAoRz-20K_gVJ?(8@6C=s33MV%hb$CMy*hV5EBLB#2OYkC}^i&v5-qc9VRb(&s|{a^{g5 zt;qdS5oBh`kxyqTw|CezCIMJ1f4^KxQXz4g7Y<^WghGfs1_BL>{-RQ7G(VSkjk>>e zZ(@gn6|tt|Yp~frsVR-)v^#c}1l&2Ridvamk}qn0{=$~zOtr*azvXMN#7 zg#>Qn42P&piw6}F$sNysaMlILyB=X6^T*&uV0e4G`Vj_vmlKAu=jWzeM@m#;#zted zO3s`q3M-=Upm)+KHviC7h+uJqwP%AwSConsC_xkDb+WM0> zYs>D4+{_UnzM z)z|Cwci9v0t99n$+49=*>nF>YcmZm|fs{CU>+bFnpsm1O?aZt{Uw*vwdZikG7B27h zEcm)J5r>K~mFaxL{Ka$z#(C)b7HY6QiX4A%5k&F1JOTz5c6TaW1tSX$d)Q`lC36xyqr<54%|c!Y(yDWb?WNdmq-$FyP@DvtL#9!p$jaBIse%bRaU z9R}wo-SujHQ1-j%u|u~($D^JBuNa{f$L{xA@knt%!)?Nm13Jl>AigB%MuI2)|AK$D zm`lJ=WpGy~Dg4$r<~#-n3`<8;kd215KX?d)c~k0Y}mZBgLv{S`}l6vQe-U zYK_IhT#X`yZn!9Xl%xm7qOY_MD~?CbF4AAI?~4@p;+?QhYPSNh{|+d++X*71wClcg zSF@cxPKQ0<#_Gn)WxuaI_3@4S>_&fDJ>OI%KxM>#7iEsO>#pUC~`x&qFEi&ZlWEKHD?>-q)Wl` z9oA97Nr#MyyfY|o9+}ws^^rOC%^Q}yVcx<@44BwKuEAPlDuxVgP|jP}izj2ICwl9h z>T+HhRb7!UbN=soW3woST@`;vw7S-Kv=&9NUyb{^&eQaK&D~uG`Bs3OSgS~vj} zt|*K_Wzeg5t94|zN%h_=cs-k^2R92&G&bYx@v5yT;?2&%I^!lNp&w3*=Ohs4rwv2j z6EX5;&wPITiCM|$^SFd~x*NlOgz1JqGd0>9e0I&^>SaBwf^bqZ=|RFVo$!v$GGN*U0?EfBT?sY zlSC6KM*;9qdM6csb@OXVC;Wd3cF_Dmn~&bzY~`S58kH62 z4YnfP7W)I{&5H2v{G`H3R;q5miUm;wt7+?xt~egN8jY~?%Aq1>9q>aBB8-IlQE{^B z$`K5difPkT-1PK?22&yUhmco30bTLhj@pgmWaXwAw|sHDvmw-JnoXEF?Dp z*%_79>}|uo@MT{#4S%m#s(rbgs_e_{7k~Fi=1f*_^2uTCFvNX`9bCh>y!freC)R#n z>9o%&wtVN75xmP3w#xg|Gm3m&IC0$vZ~_Ra!qOe$>xxa zidwVm=axS-7_f6w39GnCVh->?cm&vsL9J$I;SOE%?*`RQ+&m1Au$A2ti%<}IcuC@r zNDOx?DYc9SVRn$6XD9HiKu~W%=DjV^Pfp7+L|GxK3ydfSsA$q9(Ma$}?VLRf`3Qf^ z6>~tG>7a=?23k81>MJinL6;<8Sg2fZ%T;cBy+A-ChfRs(_l6^S+|VPk!WDBlY;}Pf zb3w+j3uPsK$0!N-Z)$isyP#6IqLO{3NNn#~CYT`a8I6qtKdBS)8|+~dSNxox=xT;d zByV!w>$rS0rfzUd^D*cR1|K#C(`SEDuiG=utBR>G`48?nO&^#$Z@%v4uDa!;*t>d; ziAAqCxhH5BpBGDs0pSfgG)m83eMPr?e=5Bkt2kI=7Agib47WkM4(+$w z?DDOCYh$i5Bif*N!o;QWynQ0RD3JBYDK61D*>bg6Mbxn-L3xl&h~7Z%#@`lA5O1C=MMJ=UkOKb0>ZF8 ztI7}B7aElcFte>czw*ZzRiO@bLe5u*N3A5|(I9#0q+f*9@XG&xAI^XOb@=NqwfH41 zgRdI`n{|gcJSOlNSO&fCwvHBuw1jWXeeMcH{BixH5BP#K#dyvoihqY~t%V;OIE~dx zytlzt=WJ)#KPC{|@tI3BhXF}%7Kti%h6s*J$s7iUKG969l1z%{#^{+L?(&*0jgo*V z)s`I}_i6jG;G7RWRC<5oMP{m2i74786A<|H z{jsJJ5TU&!(-^7T7={gn4hn@v*JXSufP$FB@~Sk(qzh}f@9S7ONna2%j8$WDg4yp^ z71&Qj&8Si8du*_(b|SnQ8~rNHpsQ`-UgP1TkGhGREU0+io^QN*nN>Dl;WRTR)TLpl z@Ui~)%j^X&hoowVwvD)(}<6s7#~>ytav)4-EyIc7+7M&{?(a#7Rz z&i2-mr%M}4NuRcNN<#tDAA_H}+>7KL-5U?L7oo9kosfTnWD}6pMi+eE+D<6y1*Xg* zi#%-%9$eavu@m(h#|5ZPf$ur;qBJxdY$wZPV~q-&a|QV(u8VDRNz5rNq}zLCyyG9} zmg6yhuV0qy+a3FaszdZo=tz5F>i779HE+|oZfq^|sj?dQ9)=*y%C3+=4sSL?pnA=4wOc#dOQ*tFbos$@2 zIOErePAXcdd80q4%Bn89;kc_PU5XzJtr+|!h(9tDY;;N%_mDo{Y3y6KUc#|o7ts2) zYPRmZ6s6!c_|bTg;UlS~0eq`dx?HpC8)9TSkSezNI9e@Nrcmf}L14r~)oFWjRt+Wv z;$wexYhzHsjf_jSKa16Rnh|l(qB1IExY=&FSN0F3pwd1J@l<|m@kPt+>=&>oF!i3y z;UPuT=ob0A6oita94!Tk8qxX0V#XagSlioW$~IU3-`?Jes_2Et?cc5dPes__-X^2| z_w@9%R7~y`h5DtKZTA4z3rLv=Vr*hRo%J%jz z?rn-ci>NE-iZc&?-uk%#9UOw%{><~w=uj0@d(O@kxAEH=Otk83M;B_<@rt(qu&cNK6$Hx(A`q2g<^7U_M-*&fb`-l`J&SXI|VsQTcb1cT%doU zU@uToJQ*aoL*T*=xYdiC(&8aboU}W=r*a^DDGh=#%6pc%f{8BAU(P^&<8z2#@f?wb zUgc8!mqAMY$C427amaIyoL>q1$j`{vV6gr5qH&EAMEK0T`q^@(;JfvML~Ml?hWwaS3g9966rvFncwqf{bCtr%V!LkJFWT)J)eC>=z%Mu<;*e38PR_IIm!&k zYU;o7dwg1dybK+2d`f(MciTQ14uDJJF?ceiaJ2e!>GIJLX5W_w|(vWA*zn{c(|9>~&j%`o=|eiQ;8Go?uxtLJhPqq9cQnw`3}kK~0;QQ0=B(tQ(_fj3ucG zhL&n9H}b98C8#RZUJF_s@{swpr7?vR*vfA%yO=zi%uHvdug^1xDwpBORu54|_oy4{ zA>F~&A-+0Zz!q^5o&DBAmA5<)z;NhZBdZn5$~(R-td7kkXO&pvlaqfP{mAv<;Km6U z2d*8jmUqa!A2MKg?$js6xXK)J5|Ri@k;!J*z4=s^((aqh=Bk-*9yIRE-xMr4nXxgM z<`R6>CMaL@Jm|*c>`^u`iIw~Ut_@@ALrd)p3W<*_@u-+MVTpg9_ln8)EcvG|zx<8l zyc=D*A^Q%^L|g$sl`el^jLH77Vva60UP!7%muvg2trx8wtrtH5hA~TVS;Gc;(PElo z`S%@_Cyny&J3EaR_QO=~w}M*<89pNx?CLh8e!{lg(Uuo33A(5*Upqhb^+RVc%>h#e zqg#ZfRAX37G_1qHOJ+IwoJY`{M!w@JiV;O7W+;2YD z{}{MYt=)Xol=3c13r3&4@6bu|y=akdVs}FQU~a4LJ5%%IuI(g|=v}R$Qa0|#n+3Ob zd!@b0g!zrOXKoAdmghF7Wq)fE)Sws1YsT_iHanlI%2&JL00- z*KlL(J2P{quP1*$on92itTc6C+~R~~DR%=E5KGdc+L5$?&#`W+mxEX6L%VikfuA@{ zQI$P@zOkA{`u*{t(w$~TW5VWe;?c)&`yFWO=u}5=1LV2hN92v@8d*@}dsT`GYD~4D z8I}2!I4`V(@55QIH_(V02VCK9w74$*+}J97-MNt-1~PyA(y%PA%W98#Kol#W;-wOy zMy+B#6VyBtM&!_lk(G=KcTn{v3OYq@fm9dkll0$JQd~3J4I_PhG#^e{T3RD@MVC4q zmF`nq(7-jARJu@GxEb_hAD53*Z`33NynT4(+6)8FOe^U@?Z$SrMwT|8tkBG^&*6p@ z%GYkZUPXWWtOHdHKf^5LVRG2!;lz-$uA}8=+FcrPmNkRP*9Z~0wjNm*VvB%5ZLDM( zC~I3S^v&X+pZ49-`Cc6ka{srJlPX^5M{L((NmFBVoSP1(rtyTV4es2$TnN~+!_F8T zh3dOLpUHb>cWjMQW`_e+C8us(Iwp3|Ws4S$hZBEq^to6IfJlP_lo9PGY)I{3gYBk0 zp6~T^SKrX0`|Lj^8|!9wmul8g$ncOptaZ51bhm3)EbO)8_pcZwWzn;I!+v zy2QG%SH&35_p0!to^8>>_-go~GB9>yDq4udO9#1hII;qs@S%t&gy>Dcv3y@bkLzX{ z7r=jsAVzudO&`CB`?DCp>1rew_oC&(zBbRca%;B5G~1@URTi-uU4+^;xUU=^5bCQ{ z9f2}91*L9_2}On^D3rG7*r-tcw&uD|>QY=Nwo4%})XQRrEijaIXf!aCABzq${v-3T zgwRk))U|X5*cr}^lDabJIp0cEick(k?$&?4W+V17uVqcRP61|jLE5Rq%J3n~j5aP1 zCps7LH{QQc72cB29UcTMD08H7f1BUx_97ALFuxHO!*hxBbv7qU@W>0ErQr#qvOD5h zDt^-74$UUh!3mjystGtAh=+MuS?x4zqO#YpUMCEVTv!cZx*p9fgrOa`Fm1O{t%84T z3fVa3fWD^A)y{%>`MPm0iI0}K?AQ;vmeEe(Tlg|{+{&HJ;BZ!N{4erhdz;-u!u-yn zs@D6IUm52Pi%R%dn*x2SSCz#|yE;@smGX>wDj;o@*R31pgIp8x5q~8he6^2$j|fP) zv3_Dz_6QAzY5ar_p|JyZ2J1b{$3uV0u1~_|T0DepG{MEu(=W#jd+CYl^r9SHd*3Eb zPr_t3L!~AKq_`1^Iw#uj|8PX2nqZ1x%{CW6uV>n4j z!{KCuYA{gWzOM)D%D1N)!)!P`oNf$f`F~g+E({+&pXwg!pFQaLe@@7;@EF`}_TN9~O4`8MX-1ffPZOj)0Bo|158iZj4 zFi7pAnQul8=W%;`9cJc;#j=0zPKon)&$9~oEpj|_X6Og`V3ix>u{GSAxMwx!_nS4y z&^Ri>SDWa&U})MJ!uuVr-a8qhp?ME2z@GctvbRfnBb?jt6WkS)Kziq$0~AT5?>Qt8 z_-W?~n$Q*{7o13+|^J{`)(huezwNy>_MbJG2w7#rP$Pt?K z1f4@OIY>M=GZ{UZcQt>fwP!&@^eUCH;IwOJYU|!k^QNNFMR+g9|;9)7qcs@6@}SEx&%cyT0^ld3R}j_wn+|>TA>g^dKb< zc3R*72op*HzoQ=<;1^SHX4k$LyoZ2#`Y~?wo#kL1o8{c-x{fE{F+v+{!z4M$e*(so zcmG-FTtFAhS3fiJ>M$eH`?&IB4^f3Uk|jja}+c332f9H*P7T zs^ZtAuH#sjqsG7XxiV?C0J49qk}(Ku1*xZFE@K8ORvir5xD26* zWIF6Up#i(;PW%4Uz_yKkrF}uih8CmRt(I-Zz${G})Z@k!3t(H;)sXfu(dmZ)xpL9` zAZO9%#>IfHVBXAjD9TriJc~mYx86h|`5prFL{sPlX(l=8Stb(ReG|?cMpJZzlwViH z9)f=>_fL|Z>*h2Wj0pIyNbs=3WpXwWi1xWho;TPTs>iU zxU`UeubYcvjB%3o+#kT-P=z8CngF;b4YA9bF*`|Bb(4L;!)_FEC0RPXqw2@sm)3t? z*DFrW;GFe5zVfH*1Hsf55|Fiu21fPKA!N^(PYv%!98Cm1`h2z#k zaWoyzgEu%7uUlLEN?iB8!;=b!1n7T^7w|ULSrd}v<`lrG2G}=jQ$5Y>woYJ8u-@Sv z+krt_63y82Cr+X%QFr-%@Gv7t>9A;Y;60&sEFtmn;$dV9QJwN<@Rak+nKzrX7rOw= z2zStyjhF$<#MemW8WMxq76^`~)^*7;z)6o{<-!MGza9C!C;2xsVik<`MXi4Uw|1cp zw}MF->6l00D&|_q7g=l*WJ!+CZ303{3S~W-)v& z&0$C$ox$+s+w&)1MQ-*&em{4-x|y>ax6Rv{Q>X}-9fE||Veh3QXC8+%P(pPz!QI>l zqS!gd9PB+oW=5ZCa7?BndzSpq zOyyhS@CJNjBcbcYgm65(j0441I@`l z7P3xFB{lixoV?Z7z0*LXm^SV`t&j@9^s*nHSKyLqo0{hmIyps)DGGsoQ3rd)i4S6J z@wOXPZWM<{M6P$Cn67DV+(+&DcO zRVS%GEW>#xig>8V3vDn4!Fg2?{b4OWccP^6#n}CX*R*uw=%TWnnI!J_Fn^E|f6S*==L^9|L5#2NdiVac5OII8Dzn01cbG=zBg+1WMOZIc_|&c zWGL>`SURVMjtZEGRCml1FW0ptn3~GBX>t1{(_U)3wm_A)Zerm;Zab#i)>m=+OrSr; z)J{&GOEuhy(29Q*M=hYRf0GW*)fPS@(YmEeQ}gWO1{p$!g0M*Kl?OM~pa&6Rd0>~! zyYH4wUYy8ep|E1>q$ckj0r6bIrtJr*5T#X#6DPmx1bo2v!|F1R9!b&K)&(G)^8;H- zg#Mx)P>W?=Wey1%A&FWnUjCSw0)t)af?Is{%z<(#pB#Vk`&X4YPP{&?YIt^i#m)1& zrS(<~eT4_%d>n+MdC*$eB0>_Ol1{tX+s;lLGfVpDbEwMj41cuFVwC25f=ZcbsmPr% zUg(yK%GABRkwOo_qr=8Es9K~k$r=gu1anD}XM*Lck$ZXW5hg+MQ9DJ1;Yb|;(;4^8 z3Sl)ooV9Jb`Oc&f~!(!WUM7*Rs}r7$_&Le@RjahgxUVvaEQ9ymf?Kc^EPPaPd9ZWuTz z!p-niZ-U+C{sJ+1UDt21%~9@wD&TB>?&xZ8=iKp%CMWI4`Zt{fO|VBbpiCL3QWQyL z>?ve;W7BP*_QiF{@cP)lT$|H5@fhX5Ew8QB&2^LVS3WA+N9i{gd5groguf)+y=iz> zEf;@jt`c;FW-4e@IS$V1jtsP@^BsSRlVO1J=ot=`8WZ#LGx~qR>uz46d+qhp zZ1u+})jBmby6!Gu*Osy%DsQ< zn|m2Pb`B~C+2t(EsiWecsCh8!PfD_@y#p^4PQ+*Ou6dU5k#@ixv2S)@&MM`t>@dvf zRH{sXMy=;cT{{WQJ0G6wK(nbxEp`@1QoFt9?W1EnG8_-qS~$3?c6-x{$04b9cNT{W zzK2h(Bg(aH`h93SDY>>djWfDSJP&_JbD-^fIXGqH`owYPQ-7L%_WSGRVy1T{|MBwS zChw`CX19g2U1NSJnAAz)tslL@xB1oweiyn7H17|TAwPrX9V=iuQLVVbMoyKmPccUwPukl|ptbTuK!7k1f z{iCX?5Zm9&zNFY7b>z?GqLvu7mTvDu;7A2Nm;pG&7MgOv0ph7OfijSkFsL z1mt%$@RVH`Yv)9iK0@p8!{th6`Ay~zi(i z%o2^c-M8xQ%)UyI7^V*Gu2p}y+w*fXf14oy^F-`!RXH--7FmTWlVEcF8ZPq~YYUfY z2a)p&poeRmSMl*J#x&R-%NuZBo2w_Ng_d*f2%isP6Z<%p0LI@d+Q~hzf%1fw;{B)YJu{2?CeG+8?LLNS;As3P@Y3CDY z=%;?d@odL6W>8`4GRUzODRF0z(#lp+E>=W6w^k5##hjm{doDJ{S%L^(zwSo0?yqqG zH`-!dr|LL@rlvdt18{#Ut;V=)b`+^I+sKt4S6b*iZgASars|3|0I$pFr+$e#+oO!P z71L)dh(hX?mK{Q7wyI~XY{?z|!!Uze&2H94W%00M#8E!n4R(!njg7Rm1ka%Aeuu+3 zcw0X4VdJ#Pep>5dk^x@c>=x{7cEP7K8tcM>9F_T1d)Bw^m#}{ux3Sx4atW{hPDSTzzxCZ^q0oXlP;J`L5XOxn1$qFx`nDvh^FlD6*XEO|yxCZlXN?Thf^{;k_T* z)`nJ&T{NYV=F!z-cO0^D+q&CQ5w^B_;FM@9^R#f-S!923oIs9aU3-kjd;DRO6 zgxL2Sn3cpB!8{?62rv`T7-D?)Tp8=2mtbh|a-oB;{`4Ia6~qdQRr;=7HNMVrc2|8l zH4L?0`eqzU+O_3MzG(Emh@zvEfxoQGoE8DJ26FxS8K}21CUOoxiA=8B11vnM^q#<1 zs!lXu(nNn~Ewl@qsupV=S6SqtZ8M-zo`G$sh2&q!x|4Cx$Q|@Te9gAGT$5hw0jdyAhTN1C zH$xzun0u9gtTrYldbbT;WZ1aC26O7C@V~$I>!x@OipBU%KfTL4m zoK5kou;OE>m@xj8rZgIEGBmbCm?c`17;{nMSZUSiMM08Go$d?H!+=BC9lj^xVkq8m z1(YA!tWRy63!Tce5IPDGZX{+S`?pM#klWIqy%Ba zqm6&CZE`Ys3Fp$rW|ycye(@`6C$|^3Q|HTb@{(^Fc&*OPE=(`)QARw(A7MevT%78{ z$9!5BaBr>Kz;y;tm6&E_LdDb`>r%Wi{C$*OQU(o3@TbOn6*BL;}zpv3-m(jJpebus1a~Iq7gDLs)c@wd0(eJ?tc{#hfxc!5*|Ee4#@j zNdRqfk~~4=5ironNmVKM>(C<1ZWxA1s6v*Atzy8O-N8V{chSQJ$5;C}Cr{ErAy0pP zdRt#ASjD`>l<1?Rn_|PUGy#Rs?IL=Hq`jue0vhzr!<;}lVrj2|(OLDOIJ__efG`0J zGA3Dq5P_YRlf{Mp-t+V!p3J}C2)#0KZ;IRb-h`33M(dJdIGdIf2Jpjk3>i*Z2ajOk zVpEX}Nx9i6>Hs%D$iKJYXT`2)=93-(NPKsHm$b2Z5hhUjwlRbi3XED7>Er+Sn9Zw} zKbnu`TYs6HQ?7PA39fWf%4cCG_+c1Bv`HV4xfcqh}I&yM=&C}cMF2K1rW?Xn&=>Gwim4dLFlnL1QZ}?Cu2zUxI zL(G7q6>G-ilMw7+Ga@qhRpSsl-0Za|lAs>C1{vzDj^Ob{w%Y4%CPK#WIE$=c*Q!H= za23+G%OHPF`1$_4Mi&obI&g$GBp^SwTQI80c76KetNOLCURbJs#KR3!QfK0SLD9{urw6%^Yd`L?#KLd2D^k#R>UI!s_iA#*L}x-{afBz3P1P{}~VITW3E z4~sJuxk;q=5$RNwcVDhKwAp&?9MJ#>?+Z``ydxOdCTY`Yeyu9+VKCToNFTt{#i|@= zn0&8sxDYVlMCZ*RP&~~XE;-dmq4ZO+P+FZUgx#<&E!U!3pIeZbJB@ySH{0vM7YYlt z*TZ!XGjZ@34t3*GpRbAK_FlqcjeO%(vn}3Q74_KaECkl|OLVKv7T(zDP_iQ*qW%2z z-RpJ-UD!m=*KJA94Nr85SZ~KE*9?Fg(UU}nejK}U*##{jWIEAc=zcs@Eks1>luT}z zwwYK0(xRXRJmITQoR5otcJI7Te2XOWOl6~&zY{_R*+zzF2m8J5iY$VY#zHFXhA@ZhcF-~L}X$)z{ZdX_q2My_pFJ4i3IxU_& z|2He~qGw#hG0_P5-9N_zBEd=8eVF#6=1g#v~VNFF{S7)k}Vm;c3#Xg#<*x~(&-4Ur4Trr&lBxCq8S5vYg022Qj(i%1<{ zndg97jOl_X!Au$IfHwHmIvTNlPM&l8aLX2KOyHPwB6CNMYRMiCw2HV}MDeyGyFO>Q zv;TRG@FxM>X)=y~JYk{5)6QO_-sJQb>dw>CW|C@?40#K+ag6=)iS$APK#^UdfPw@P zZ0s8(Kt%YtFKsdj&AgdQ+w>)`mqgEa>B?VCKqF)|O54nnLMn@?RNkdx7sINMTV1lt z({S73`hLIaH{F-=s{g|c2%`NdhhTY2Y9!aWeJejcN)kwa2-*V7X!GD|9jyUF>m`hJ zOyxfzvWbF(b38%RWkul;cx|!CsuNG&yz;wMeN@~?ck^ZHK=9FU6WjRn9B(i|;Hge? z$`TQ1u6p;dW$wM zXNuIb=H=7a2c2<@{|{U|GigYZ!+TAfoP6FU~k_w#U{Ow?CfJ1zzhHreQ$BgA04OC02bavB-8UV-8 z*^rihlZuxBVX=F+K*`X%+dk)=8(;em^evIIoY-8tDMf|EY3mjg6;?{?C2tm@gWd>( z(X9z~JUwq-F1)5T2qS#&9E*&2enjcGXURUIC}t3&!wzB&+^?vgw7>7&?GQH0SSh{D z1Gojz`3#^a%$kDc4T$0c#)DeQ#r!W6DT?TS(O4N3(Fa7(0rSjZsW+px;IRPua9Ms4 zuz5iRk_5bpF17P_Uw!=px^IQv*Wd383p#8c;cckCu`l1Mg=?t3-yTVGS5y7C#|7(v zXcX|>CG-dZk4mY(Hwh)yAB1<@+sq9+B-jbC2m;aPgDv^^Jf0pZyvVBeZ@0@RL-Dx zNOMkk8htaaG%ljF8KlQp-^`-p`TA+*yy4ehW+8G)eFaI}m9sf~bGXrlu&-Y^YdLSe zE0?G^H>d@;XMi%*v*n~%T7+05yMfYwaxj`5_8V7C)NEtULsZ9Fm#g08sv$EjL)Khr z9QG+N6W8-!>psOtiqu<^(ZfMlyCTPV(MUOBC2ubor8O6%AxMC z$&W?gaD2WfsEM6MpDR~H=*iW1&NHvfme2q>)pow7B*a&N^pv+!X;VQ@LHxsk#tAvbLNgczo zYWbQ~&$VdcLF_45(h&UBIH;#w1-OZa6XvApQ&Xo8KLpFuP<*rTfna=NR&o=p$cxwg zh`!=_bW?$oY71X&Ad{2sx4@hUN>1fZkL2~~s!>kH3H{f|!CXPX)>##QXu?ne%-w%x zDyF!yekolu2^Dm8lW^6Xl7rLKpD7%Z)B{D|&10@Wa**hZ7&I%uXv^)`$(r61o7EG+ zsDqjZJgA@HO__`*n5~Sd;UqiQI@w7LBAY+f2M_Z@rt{=Lp4a86oFFMhj8Qvrd|zp6 zw7dCsQV%(Wx3v5r1qIfB@`rNEC$jiVG)@2telhNhK#O25_W7cq>zjL#bZ#gU@1TwU zdWYb;alG%>o#^Azne>8RC%Q%Wv zC3LZyM?PKyE`TR8AELLdNYT0S>=x8kzMySbH|1*CZFnAz!;P4*TO3v(^#NVfg;)6U z01|qO&8fuGbFaqS`<<3LMxGLy#Av@WAIOFOo6#!nUFzK!EuO+yQNJuZ`i1mQ{rrx2 z@=bi0mK~s?&lQw^qzE&RU;s~xVegkwR$k6S=@w{PB}wj{bFk z@Bq%6b7$StYS@)zw-HP=<3$I%)CPzUazZgBu^O!)eqduH1~1&NzHHHhz$x<=_Dka72tLaA zFJ@me{!`wVOrmbd6QnQ)0de`-IKE_hu2JDYQ(gg}O#vSRKU>F_#$S5b*jzkM@UG45 zYjiNqv8gA2--N7IldlS*!lnQZ4a}+au+(dfb(_1%$=Nc}IP28**Mj_y3+qF824!=O zc@jYYra}`_n;@APlJfukzy7ZgOf$RIrJyjF*g~vir;2$eY;H|qD;P7=WpE2%Dh6fQXQa_vTc8{wr#o7`_Ale%SXTzKQ$2mVy4 zpu&-i6ItXb55~Wm)a4iAg z?QFDl{}oIRKw4c|p5&{CS$l_jvmFomUuwpMWd^3r-9jUL`U@<{V%C4etZw=W+5eFX z&buCeH2(RLAe}$W?93kJ@bL}vlqDAp5E8WnLXkP^8EGa!47%aB9|m0u2LI>FL`5KI z2=p2xn__^B=|C7l^t8bS3CB`8Cuf z8@g)frw`O)V=x^G`S2Y(nRz3GXHMMGGtBdFhT4g@Ap2*Y|yf#VU!k+1cVI_qG!xcqIVAC}%HAKsj;k11$b^7tz?z}MZE zK+ASGAXiL486?)!xnN7JB6)7JmbSR3i~qV%>;7g!OKilG6Q|ctZ7(R9a{T%axqXZG z+rdbmnp=HNVvoO#gPUffCuw4Tu@ey}vr9_%Y68*o4m4SfOH+l6E6+*M+W= z-70L50L%<9ExH==gF#p~>m(A8L=u_WkbgO)QUniOv+~p5KE{67Aln#!vdR&-A^73| zd@+rDz{2`VD(__3t_b0#P1WS2q-BM(d(_~*qMPne)^3V z)a~LFNr%I=50v4VUnVt&B0&j1?=t&3!Rx#cG9Cz-28#{Vi5HH5g_u;%Crm3t#hxG{CH*6U;^b|W>&tvjw$Zk1J?VAK&7^;Q)w953@qOd0+3nLQmDumJPq9f;&4;bW zbkCetx*D)=IBS3L?r&lfP$nz&L58PYt?DUv%9}&co*Ebew-yYwx+)3xwIXvf`=2>A_>nJYe zSvJu2cMs=hgm`R!L0LIxpe?xZ?t13^NK3b73yIw_5$#sa(4}zRK=st@BnfC8wGYC| z3hpeShv6S>1$VNGiw0=q@jo&{ND-OZ`-|UcX(C%j3bRjyQ+WWusvMmuRHiO3FJ~@) zox!qxcK#p#_{Xe|kWS3=aan$uo12?eJoJQL^48M>f!QE`G#07R?TqULB3tH!mU!;! z3P(U@WHTm5jyrZV#g1*39C%;JHE|I|O9PHr;0^jhJCdPFo7t-0^{rXzuOaoZjN=m7zViAP^&?S-j zWi+T%$d%rIS#EaT>sfSMQqaa+EEt0ne6OsZ*_=i+eHX)o-mR^QF)U5el^M3u;){#= z#RY6MpQQb_2$nmJ>YzoR4wEg(4~bjA;3@C%_c{_`T8G8HM0D&n0UwMbFN;Pg-FrS< z4x$edY^Jx>gn$4j7m8PvX#RAfA)KhyjO7vOl-vh@e!-GSu(hoMzYkj+PZ>c<4>$2lUUV3m4zvhM{k2x7`K97SzHwJA(PX21o; zi{?gavjSlQlr%{(*wqxCA;dTm*Td#i2qBz77}}cWhw!{L$@17E^xv(7^RmCt=H0DE z-(>@wpmZMW$uZ2EkUu0jVHbs~GPGC^>0vx{qKb(GzU}#HeLbL(z>p#|T8vM+^>0{z zVnp?r{D1!+Zdn*GkLLffc;1-!-~a3Xo|uY7rsw~Xwc-56O6GXAdQTSmQ}cg`jElvS zm<4Yie4z`fs-C37a>3soS^_7gX7M4h1cO-ftNg)x|1l8Yz5aZ_2*Ss{X#6Hw1djse ze25DPvF7L?xH{pX8YJV5{&XAdqI5Zb2ib?4o3yf|4Qn?4V&fe=$W><2UFoAEAjfFc zOi>Hp*tcbk?m`wN_RBgC8nabJdm%QpaLNrti*|wGMBx_JhVXVZI6V zZ9!}^!in>&D7D$dLp>^rZH7S?k1kAYMnofCTyR>Hmg&dVmXODYd>iZAGaUS#-2_D5x-VuBJ z>;Y2_ijRIO`|L`(YITph1x6K(x)|ZokDFKnCbob_tg5L(xN>Gbie=?-8$(!tr3@-@ zu2srpe4|RW->YnILmpv&Eq}lhZc8oF1>_OBJElk7`oh`jfTUZNeeeP_1d>}yX#z(w{^Alpp3mshQ9zcQ~i;l5( ze$OdJ@JT|==i&(s%D9$X!N57qc1I@4+WNtF5@ znd>;membpWn9NS=a4@ZqWbMN?=K*Y&YlrF&mFqvR{;&g%NDKJarxH7NZ=5%{F?BiG z1nn?4%z=i9Ov*|TH+|Y}YMX?oW7@T^{Yq8*Ddx-oQ{{+#j}_MyHQD!ROODQ@+yqm- ze0DV}`K=|V?=7o;pG`;&kk4`=iz25o@@{twL$U{>iNkd-Y_of3XGceSJmdSV@>9**GdUFs%nAy- z%+)H!nVT|*J0_6TW}ftY8vdpgbUO}75mH%90PCo*BlntrLQ(ppxqsF}dBP3Za|rza zPc%TwP<=yWQK1@j{tdgg8aGcy$j7ebpA_PQ7_ zIw7(bqaeY5%1-3f&6PyH%?>%?SA9Daz_eRc3y@Vl0;2vr8+?>!%$RoF6npmOV+EEY zq=Ss=V{W9c-4;S~Jsvds$?Lh+Eq^tBrF#>c({%1}Eeh5#yJR@r>wR%qdBEn*<>ljk&{tIsY+E+ndD>nljQebt9$S6{Q^kZPEwY@ zbI#qXpQ~4|clVZ-#UA7WM<4XZk=g4Ao=!noek(tmL+Nd1)3n}-Y69M|Y>N2h2!@gJ zXf2=q%!hmW^{3>u{`&X#hSgLI8lQsR0`tLtNpCA`#)Q)H*$J3uVuzKie?MHpdKmInDP?rla!nh*ruPIM4oJ?r?gB``l#4`WGMZ-M(@Qclj^q#WjDTK00ue+FeTIZN~ z{}~z2wlH2)JHuJ-#9yJ9=T>6ImzO<%3!r1Z+BpGt;qD7>LN{Q58L+Q|y%c`W;eVv2 z=`&M5648cVa+OpN5(hyJ5-qSOkvLzAE*8Mi6{@chMn$`xE)M6dA3-q_8e#cgpMP`z z{E6J#STrkMq;A**=>?`{PFZj%V0yYeB|dON6EB+?w@)7|BX2)?g)Q_>`c9aCbr>Ba zi?!&+n&3SSPUC58!FQ{8yB>$?;i)b=)zd%}(fv!LTu+0T4o`WdcW}J?zS+$5O?3Fo ztK!<|!uNs-nLROmF?SLr%3tnXn^dUmv5WHj(LzLLz@>m$`1Hi&7Tzp4&7w!!?8|4q z-?FC(?M%-f;MohWmNIKl6#e{vr;6)7$4Q*!+$jENCgT?mp8r%4H#N#P*$_`<`2{xv z9@a?E>2J^4dPkq{K$c{Y;ei#4|Cuc!^NbEobunej3XssA(kv!kj|L%bn})@nq8m& z<_jq8v(umO`q;Pe?EuO9|N3hLm^=^HSAQw(=h^JGe&bdBQ@fRCT31i)K}32&c;Ij=zE1d4yzG=JN#!_4xQ6}=bxs}H(wJC;_GKGP1AY$Sv;9=iw;AYLGVSw zg(e3UIe)o(#0z_db#@7vZcv&E<34xZ5OXkQZj~(VkLJgW}mOCYS8*`U1}hw=bm6s1rjUDjp&qu_V!t-;?=1x&5DifBZR4Mz6<_YBG&8 z;9UxosYE_TR^Z99z>m4PJ}vO8w1ABw1OF}sOQp}Ce@vk)tz}NX^eu2T3@I14DmDfS?1QH=cZca{dXv$sfP> z!C$}s7r%UmmHDjYa>$?j;^+E(fA`7xgNJ|f-e22aKjwIo|202*@68&eply0u$qtZd}*$w{!$B7eLLtU z$MVlzuNo~in&!5mw2F7$vZ{BT!Aq~L57j*LthzQfw1H3SqdJ$x&C9Zu*aq4WY(Ro>h`e*4v* zamhg6B49a0@k;0l*s#%1n+6RX?>6$D7GFMo`}!%eNnq)-` zS-n<7$bkT~tYuh{bV163Dp=Kk9^q|;b z^qCDt1|{#H(bOvKBARANRT~N)&b@C9QC44GFB+r`R723hR(!IEnwc+Y$-v5ju~)5{ z4!^FK-nS%NR1a;3F&g^T25hSD$aUrHS625P8XA2jcAPAAuzs9>&9`+8YHpgn6IzF}3Af{cw<83O82TQ4fEy&~-dt}nE z7*wh1ahPS4t%hw)cBzo1rSUJ$ zq{(-A4&OH{AruNNhi`u$vM*EJi2~88G=+Y=mYt2Ow;j%7=a;>@mx{*kAxJQ!ZZ&VQ z!yR_BV3*Bp$4m!xfuuERfgN>lTF8f8Cfe!^48Vk9If%bO6%q*p)WZa9G-vU%=8TlM z3}Kh~g4!PW>a-@H$2XCJra@&C^vhief*3?WJ)9*{P>rC{BJ_Ww37x=5d#-y$*4VG= zWY|JBLwGYovX#{gy*}ba7%Mk;k`M;^LD(pwYfw>Ww_`t*O+**egmP@iLh3c9Bn_fs zenW0=gey^n?FVBW5HZ350!0#_Picw9K>8BRm(KrUORG9doK<%fsXN!=c&c5w4yVt? z1P|?Z4U|k7HL8EFr2x5c!bWU`Zzt?F5H_lvsSDELgn_D%Fm2CW(Ogju>8P+h$>R=P zLBE>wO;>bZy%AFhXctBNd@J1rg&}CjP=-}j79H)qTb$l^=Sgw8@7hz-p58C{py^ka zftTe_WTv(cb84GiTwkEuUI;QyorsjwhA8i?(84raBv*gmR8Y;cw;$hMnp30yu9w>m zO!TKqb%Gdp1ebXUV?x*9!BE$1*;Wr(wDwd=2|txL+#*ojLqDi1tX`)!P*g6X{i3ZA zE=Sd>DNrJMN|x2>(lzzzGElvT6fTW87iC~weD>BvNrAGy=RbY*JZRgKeRbEaJ7LkO z@TsiFQv-jEQRSv8$5Yppr~9fL^y4c-!eb#f?vrG}K!7m%{u-ma)#YjZuRIwJ58zud zyr8sPiz5({eneW(TR8bXYDm+3`1zmyAl#1~;c||bD)8u_K&1jdJt$DCz%LF8G%E1R zodQ26wkP<94wqYVI_`LWZ^^e7ll+Ij|8G;I;R@V{?~VC1ApbC8Zxvo788s|RN4WMC>=2H-{+p2*2=bM zkFhL|Xk-TvNB{T#V{W5{K26BYMR}xwYy+k?5)5Djsc79K2=8jG#5Q1R<9{dP7#bUL z(ae9{4UNXJ4Tx?0=l_z|w!ueVZys|(JVG5$}oH~TT zrSDHe2cxS`aH`92YUQ1%_0^pU$uMa%mjQnP#|P5nhNmcL;+3c`@Hu{%+&dUGn9OAGu|wHN5y*f2nef3#&WO4zaS?EX^I zcEu;Hzbtu9as5Vn7x;w!O&vP6I;U=c0c%th`u3^mDK49(J&la_giTCysNE-o_i%rL zq0>mk*clPyp%idxFngZsgFouK?pjtC&0|1<@WJjXE{s-KynqgdDjYVQq{PtQTpY1* zdLjL;9>=~OzC^=%7dC#yYsjjG|63UxLNY~!YWz3-r2%nekA{I{qP6PO$yNflm-bYv zAWMY0SYsP$j0Hs-E%0Dn4VAk3>gIoQy7{sR-52)k^8zW;EFL~SJK4OD_dC*!kNH%O z)%}g;3+-SA(ECNiBdIkYu_}fjj4>_|kG>!t7NTZdps!O^@S#D{0Vj4N0{zmIP!~ijq8_RU#YR0)4)~#Uq;lDuL_AoGr(w9k090q9mXgtE!AyUc+xnbX z71mf17`b1{?{=|2z__g+b(Ttq)o2xvw0 z0}W{W8aWlTc|<-`rMdd}Od?+!P9V=9ecpz^O!M=YO9EcBuowy7eie;=y zeKJq+q)KaGD;hbDwg{`rV&1skW=u)=6CK!2(K^8ig!V?Gz+c3E2OED_xeTHB09-*- ztg>zLs*y7gBrq!Wmai1t2&`y~qFHAK;MXWqkFn2KPI`k(A;tECa_mk`qk-TmxPg$1 ztCoNP!<_gYUzQBp7C{xRHW&UA2L_CPLOctQ7#b6k=hmU1jlQ6M$e7WHe(>u`w1Fz| z2E&+fB`8v}7fQuYWIcbvRY0~e4oCjY>7H#+YcYqBCC3)f!iDu6(JJTlC8EKFI*%Vg zn$2)eyWN-gY3|{0C5{j}1JCl?fH9kSjmW539NVEn6V!NfL7Bls#E?=4ZQparY$5Fc zO<9wNoiHgz2^+7}D29u~0(Hc!p@^D>`bMjJ10{E-(YR7=Y*~MV!zVkSe78%7Z5fh` zovp!uySuW7lizlT9MSV_Z4yt_P8bW~Q*>_>p{8$6nwI2><^>ZN_-%3n@1;?lBu3j> zdw2qErnl19cqXx-J&S@DrY( zSy$C~i-lCO0&x5Gc7*7lCfkPkKnsFuptnm62@DSzJEnU=6kR1H#b9N9q#pZ?%nE4&K`QHFL8FFsED|T|^z#hI6c9zJI zSo`MK0Tob^9tO+WwJ4#`vx_%+HazAY7KVGu0@UW-H7ti=CS%HiHRP6>Z~u|p+aydp9}5AF~fUR3+qMnU`F zMmVtNa&zdhp}&^K>aGfdnkFOH13#!xmXo9yi{9}xf=<|Va6p{&@O_*A8Z&{&q?Mp@ z1?)(sCYTX}pRi(NSR$YtBYXG|HeB}?CMGT`c4jwg3THEYQkiDtd`xPLoghQeZ5;P;cL6VK}y62kujO*W{_I0?}{1d?*V7Q?)t z$V0*gNE%r=62VeK*cp7`z_y8_QJGpOPG;&iz9^Y6+5}*tU{I!6NG0OAHV0Z~ZK|Sn zEA>pOvuRCP73Of(^Osr`ht$$YJew3njEjE@-<*j1Nt-p@q8+7M7`X@uu5U=U4Ct^^ z4o`n$*SrfWhLH~&))*h+hhrleJADX#XJXTyeB+Yd3)hZv(j@JmLD&7TZz!rN(UX=p zy<5f`{rPicbr}OKn?AA!=)_i^XcgM8Fjoq*r%@lJRP(OCtE#J6m=pv3rZZs&8J~YL zyW4eTY(8nB78AQjsl*;6ip%mqo2-=+SL-agz2^xgv8lRnI><#mdU4w>Z|J%BDK&caC6i5E!%APLPx48l%Y;-!C-bhULu z_L(&Riljoa&t%z1GPct9G%bA^N9;wCR3%Mo#h@>Mng=|sNZTVYFN5(50QSNFXQaHPcjbfeKDgadi$4O{}wFrSiqp(gdOm~!T zTLdfiE-oxI0)lv}fI!oQwZ?z7;_<>A6F0ArK2L^S`4~Ya>>Z2TdXXt)9vd_8#qfnc z?0=P&eTGUd5%ID8Ge`@Y= z@JLbxx-496(ic#fw9 zUZ;V{JjcWjK>dN)AsT-{c*(6`yN~s=-v$Rl^t=&WvG-{%z-no7EkQ6EB_zj+nz%*m zQw(HRSfaZT-&n%-ynE@DD9IDAE^~{SC-l%^7GqnA9>~@M zl?=)}l1>ldcS;W`8|fi}MGqM66FvCvj2@^PXaF_9s5sC=iy(iO>ms2CKCmZ^1_YIB zO}`uP$pCq#B@#XOuRsqsq6cwAbbX_N2sIBdMyMv|?TH>@%M(2$1VK^Bix zTNYe}dhX5f8-!&3)>MleMp+WtX(s!jx!&w3^?_P$l1CGiq!2@uA)r{1_KlDvAtF=D z-Ano{U!>ehLUZuV3NiA=VRNf0ZnlfiZ+`dan>A~St>J&(D2Xw1t6G>qE2~yeP2?Se z?aT1OVa#~t&6U)HDZM0n2PVvlP!|0~UM*Zxhz3)OD1`Eh4Aw6u?HZ>hjhc(5sZPBX zn^MdkbB`4cja!NdeAz@k_|Ri&nIdI^Ma!ujMSTz#{D8Lb<2WJ4Ooof{q@?+2yJ`;n zL>##_Y?_0p(p5ltp@^Q#?d&lUJWJG9CEF1;$05+LdBQ0oG`-ttJ)DR1%BU>fWZJBJ*^T%b{G@mni8YNEOX4c$ zA*STOLpF%zU!8n2FE|aG$IF_z; zZ$y7#s$U7`MFc}Nga_CS<|~t$#$M6~e2dLMyTMsTA{EMF3)5{yUn8s*x+_Q1XXhSg zhb7Ljjea51(67Q0>Q}C^*snVo5y^5IyRVFH>{u*g|()`0#H z1H{h_gD~+f<(QdhKL)kaLKx5rg`@_Xqs};`xM2$h2o}Lz_{T0d*p@3N*c(kfow*!* z-*M{c%pv#hHuZewliwF$0lBB8F}V_KL17CWDpnZ6W){paPmo6!Ejves5=`7;%qE#E9w*ulaYK@) zjA42V3BEQ>iCsYG(!3dDvN8dd6*SSB;|~p7){0X6C}48R`xUcLq#EY8?dMseDG*dZ zRbRA+sFD~-arGTh1*&IUeMeLwq*8xeeM3|QM{0s92vYg<3s>ra-u1i8)nO&{t$`93QJ+o?!yR@A57zuN8Mr?#@8e$R6-g?^pt-o*;i(z zge=x4?s6cwBFvKxt$NW*Xq0e{T&yP%V&YC~NB2n?(sF;Au-{oN^N@jL_n0Zy6JME} zkM6z2_44LrLsygkD=0QNwpbw{S6&veMsqCb4_scL6lKSpUW)gcsF%OmlvelonukRW zNJ%r(2`rLI5`_F2IK5cmgi=9KBX}TenL3OekM~7dsh4)vYH1m2)Jzg} zI(Mz6?BuN-wG)=~1EjEzbj;eq?fkN{Yh*gD-56RHQv2Py}N5%Ds&va0cU^qTL z56Wof+YQRMxebb+-*Qlqiq0Z}X;31hZ#k%b9#sDg2la$2nxAkN=tgdKr!DF^zxSL) z^91cvlA(W%ERu%`DQa25=w%^Eo4*wW(IM^PWa+l>TamM3B^J7oJg{u-lk$?Lgl)S9 z!&0_SF=v|&L(aCx;MKvDwM{8FkfqC;rzs|GbG|NQZWHYw2*j?FIJE;N%DwjFZT`0G zZN8Ph%~+S|+t*e4_DyW!r4$y^k>ymfzI49wAb)?`LiK3^HwTUPGPn;CxS6CyQH4l_ z6Ja;{=jd>x%hP13+&o}$ESX#A_Jtx>jW%L7_l-F%SnH+xchiM=*mu>XxIB&il(SC#Bc62XS;vh>2@^#Tb$s5Q`b7yaD9h+PbJ8B$ z09gaW8WBAeN1{~1?zGVleIO5U$><&&DsTx7f71uO_hx}BKe3IRJyuQX2yAHPdL*E^7iWbJ>daQJr*Lb!+NT-@^*w;c`OX6?Ncfy~-& z^@+dORxMdjimQP_PWTbC3rVq-(I(fa{xAp*cFRi)PTVyh4=BtF5%%9%{#k~_RUA~p zOx6877P3lygo|73_65ID$8PJ924P3-{nm+a&kFxxnJSEhG%{qOhv-fPFEx%xCxU-j z;2>VlBe|u`1U7YSU1#h4*t;!+-MA6&PLae?n|eH)?dFuTuKk&i&JjGf@p*eeW%URKcaYJ9^aSisxgjidPBf#TxMDQdvXNv#l zrT2{7Z@wkH?~%LZbMMkSNzRepMecurwDikqYx)K1Q)*9Az_k(l7|}NZ1^lnb-YK4| z52zI>KJ3D26UHC^A}Bt?pk_YPyg-{v^7!lXSFbq~f3H-H-zKNR<(cnsa(#$Mf0x^A zP9Lg2tjiDWG4~B{gUIPi`{Pb$v%f@|>QX2j*`90XmF&iXSZO|g{bJF%nwx*B6L-=O zbP9ZX~m?*PQSWlKR<$x0rzE#=O*@{-(<65+)J^x^AhZ0mXA;6$NFB> zQ&~}3cJUT#;qluSYr_7L`fH{9iZ}mhccSUrFEetY5l8?Uw&VYDn6`H2Ka4EQMZfQw z=@`79-TnV|LSbZ@5Uc2x^a_9ae|6ltOF`q-;EopJ{@2`wK3%%)S0ixkiczFpgP=cV z5~j&J5vmh0S0mg!+NmyR+Ag>b)hfA`m?&$xW!n=%Tusja7@6^G0r z7L3!&yL&U%Fn5-gztf}-JGq8?yYoL``aT*t5_QXu&NQIFV2*BX#%{-MjR8r`X+nmEG^RW>8PuPf{`Nm|SA z6NU^MVFeThF2;HrSr5mm%)Ma3}wPdeJX4{2mgARwwQ&uHY0R?B+~ewsn?OYS)>81mu5@Gev)gUL^hHO3^t7Es&Hm zF0rCyJ6=s)2>5k{!e{x_<3O_uGUD1M5s9kVrGjVx*LjT zqL~|!V0&c%S`zyt;gX9XaZ}52r|a5UrGH)-DnKqE1;tzmtLP3ZsmrfAa(KigjiT(L zF7Qy9R>}|IgMoiQcj_2AlU~wB0vr8;I39(INd2-r(WCB91HZcI3Y|udBij#6D>sa0 zL4LFlrqTFqYSVDEHGH_fw1f+plHch#%}MSKwd`7*Mki;FUC;+cpaG*Yt`^j`G@psx zGiU8Wt@?Cw#fYxzyJY1DodCmYlV(@q;vk>xM~Bmqo2lFSSdpY2mq zaE%eo7bp6FuYQY}eYi?%`sW3I;B-~Y>aBPG_KV+sp%_|(#|c;PR-{(#r+r?ZIH5kFw%+GO4<&1+}A`0Sxzp~q0n-_-71 zCT}5p_56{&FfJR%TW`I#qqqI-0eS1OskC{$OoPU~;inJ&T(3j+XH%)H6AoH}!0>W< z(U59BdBGbl|KiaHm%n++Wz?Udu>4)Oaijwl3V&ZdzyIt|$CLZY+tky@Nv5Z;C&@E& zeoS7r35s)4Dyw-uqP-E*R-}-d$72DAb>fbj8j~?5B{PbWd1UH1s*ExkLrV>&5cKNG z;>L4d>})_GwrMIe{!z0b=B_!+wsR? z-hYe7K`UH64l2a*aUk&Jjbj{|F6J`Q_s`8ZJS@^Mi15^OnAT-gf|z7^EG zD#c(FgJ(P(S&JzH?ooY;eh<_Qt)ih};`2^s~g%Vyr`5R_H;$fH`HngH< zqAffDa9e0{lQ$u0AGDw8&u)ZxgSX>ZXSaQ=+b-#kDlATphTHktC3d97^x zrcv&68kNZOIBAqKBn~iYlnW*s^vM-7ovN*H zl8rIylQTrVJ<|u#AZ{mpa$^{&ESOhi8b*qcWP>^9G~II1Zm8&L z<@S;ItPv(2lmJc+<9e0!*Jjep~xQXM~B1Wb&5(ytyE;;8&T*KXK)AVu5QcemARTC?*wo;}~@%AB3wey*gE&F6a>G%wrUp_zE-XVuo) zPHp8;L6B8zf&MLJW~Ex-vfoj_ECRgUd$f8s z>a6v=SZ7bs!vIZr^+JXMO*ixeg$nW6n9pl6ZI`Q;n6_(B#O=y*0~EcD8=!wIZDz?K zfp43A6Fit$mYo*{qh)%7;-=JUaL5#m!P0)#nW0Vdt+WLqJG;LvT23`U5E8|FdXVz^8I1`O%s#n*@>Ol zZdx%rdbBRkNkuy@kfma76wrU}IUGI55nfk9M*nL{Y}(^E?y?TlV$Hp@C1 zhw6vs5fk6#&B!Bfdh?I%$_bwG0r7QDu@&1=2PrGiVv|s44iAH-fjBHXj=2U?%z|Ob z?!&z0t>7te3dupQA%m}#A`l~UR1jJD*Hk-}B?S&ZK zx>`ay^JLzD;pjqH<4Nc>BYiN3kZKp^Y(py8*$le;7($7wjG}yO> zrZK-YG-gWQ$VQlNCh$NEnFm4p$9#@)2w6xEH(|w5;H2(GT+ab{sAn`6 zx22vcZ!CX{^pH{=+VrH4EWk%qoo5$R(Y!^JPopKu;wfwvB}*M++HM}%z<9A6mr`p? zIl`9y10y0ZvIzR&){UdWxwr`aLEU6h`)>5$TkW)b+k!-y*obG?GHsgcq`Wc?MTZyAy26YuBM-)zd z^VxB+iPg;!HLZ^gJBu48b0X&`O&E5l0+R{7<-x-UMVRBBF|B@c`C{dqrbf?CjnFKD zI4>ZfG=(M8Fe3eW?2%&?+B<2`P>A-86@mH2>Tn|@+in#=95Gx{cp4%CN{&(r&1I5e zzXpHRvBO0$QLh*C)awAvBZ}f3p|UrfhZQC7vbx!!Vf#X*aO>5Sfput+U6Qr1;5Yfi z=J+D1Zz8YS?&*l^ZV_bkGTa}N6-ib4kQ1NwpP_D=JzAQ@in5U7JiMR_7J zJ|^oDCby13Zj^Z~2D4aXGC|JhDH|{gNQQsILzWpALWpTpk{QSnF>T6%q}x;%l&M8@ za)sJFIyr%RoxNB_C*ci#<_f1r2wtv3lyTym^U~U60m@){Sn^qDAP+CDB;8h&F((Ec z*hnj^UEw;&stEf=WH2BhiwsWk%d8e*VI%&RFklzD76e>st(@QVwNRR19t@0|G{}F~ zjewt)(r(v?Q_JIi^Gb(Jln4KkS@2#`B^u@tz(xNXK|m!0J24oY<#E6jZ_LAiI@7_6 zol1qwyK?H7)7PjE3d+h3yHf5I0m>9l!y$j0*)&RSVSE+;92NVg3DJru-8TWacRp& zWBH8@WnNq1vXfDmfP^7XU>YSVG2Rkh4ej+2RlS{TY+d4ets z=$4_pD6%k=7tn>FynyCcpmKlqEWvkXCvTRB2cwe9-)8a-q_8lPiRdT&FRkQ|Iu)zt zM|LfmZeE=Hv@Y6n>(vUPkIRF)Sd}iQkWg73Y&c`ddmKW}>+*0enpHUV%@uJvdz77b zWY(@maZ#jMmXSe+1C#FN(fI^3Ewhujq+z*^73Py4!kv6T2z3*I*_nS)RD~dT#hdbj zxARg==`0io)aeH;Wpm~d_*henh@JvXv&Y3Gxg zOyrh4Qw`6Ky3DPo7IG-Uq3u-IE=^>5NM^9D1mgvA>pI6<99w@-0Vex+xgJjTlYJb( zaY5qDGW&S1%C00?dajwp(fD9WNm5u!vB zLY%?OB{1S_oP~cNL?WdmibRTzv)OW-*im-da`t^sm6=!ds`5&T{(^ph>-~iHou&Ks zb_bN6;-n;EX8QDcy8HAw-DlyW!k3Q2VGH@S^0BD`HdXG>O8FRJxcPDguhTAStL0-* zMeg$|TzEJIQmSI$dXw@o2X{<%eO?y+nv!e2mjQ?h?Cc7$v}odzo%2Rl^Bt1lm` z?+X|Qx$@~z>sEjX5M z6%xv~<^{)qmHg{uBXE<;LZvifWwNb&YYO_yDwJ=1#;O!=17=0e|5CgypY?^*l;Umj zbS}l)lBIuut`Jpe#alfDabP*d9kJa zu0^H&!`-rz$~IU5S65|lR+a*;54SJsv4HCfX|aGC!b1VqECf-G2<6*A1g(x&U_{@? z@x)*OYMAMXrbVbxHP;7sqsojc9G}Y--q@rfh0~5{Cg$FGK zQl|60Dpd%!rgiraG&Z!Zfo5DH(wV$V{4JCXF!z zG1DD>EMmG)F~v;#+)Rj`9$37Kri(^vnw4BqW|*c#EQq>qwPh;S4OvwB&WsY_d`f`u zA)bHWDO432d+x(*3Bb|H(Nm(T#8}XiG;Lo!2~&NP$T8wlPUDDygZ#u}4np}jLM62j z4VoR22hwEOp=iWm0G|*QvFw-(;8Oy`%G8q>lL36fS@PsW+u^|R5+TWge6LFiBKjYD zTq^4e99G#-JDx!3I&_RIFLj&5mX`^;OOt;$MYbbp&??RblAtXR+x-YmJ@LpT6#rh6Q%bKpLaLYlD4+AP3jCYXXT>D7xPN6Z8FkpRG)1LYfD>Y zgcIZ9)067F4tgAi!FocD^9x1z@OtP8aO&Q|f7)~*G6SC2=AN6r#O8Oyzf-g`V!D6f zv-ox&$=>tjHLw3EQ7x?86V<%66x&*+EG^BP#Y+CMpl8z`$I23MGRR*B@Li!}D82Lq zL)(Bc!7N8*e89$%qS$PTs&xeqgLju?Cyd|NgpjG-^W;q9pO~r?>&(g)6B4KgPFQD# z;-*WW#WJ(HwOA0fyry}djd%@TGF5+#SUCxOsnqjM={?Ch+egSn$}Te$Q_EB%ox1%^ zS!AYV(X=&YD1N#lPDq}@DY#;%ttMfH8A_QYFOU*1H7J`WUV4s}Q<5bwJ72Q&oG*Jq zr5%DVOnTm)Jvq{A-V-7HGBKZL%2Y9Wk<93vsFA#=u=pv|iw=;my|kd%_A-Bd_jHoe zHkT%@T$RnGh3mQjNi~|^?4%-Li>dMQj3p+?qjWQ1e2g9tOE0#=w6XL8`vT*l(}W%K zjWKm!T36b~aBY;f$g~V#Y>{c=HyDe|R1B|5TTI6iGhMF22Gg;?OqWYYkCm2}Q*17$ zSX)l9v*Z|iY_!8JXN{!-Co_M6_L9l-9D^j}Ukaq=n#u5JYN(lnsflJ9mX;IU2ye6| z_`caBPw7U5ou*kG#!fR`Hf>*E%c_NDIyzj)` zxNgyXjboh|Qg>sW8OYr>+?a3)RZzCftUT4#GIJU{!L+69G99Z-Q51gzrQzE~3ly77 zLWGh%7bq5)X`n=A0zLw?7;DUkgD9;ry||B`$_~?y9~TWZw!*X+kF79EP-KN!f+9n? z5|psQG`FpWI6p?vxwN5<9Vgv=Ob;o?@fmUbN(;qCN_o6!a&*lwwQ^#Qx%)&m>>8AC zXa|&4E6wW2R$`@D4HthaO@9M%)FH9XOaR0xvm$Pd+GJKi#Uis3n%c}IbZS%wV~sf_ z##iMcQ)|rXqGF9X1s+*r+Nxt~%n~%6`iM2=H272rNv$!b!KcbRDQip{k}9^wEJ0N_ z>?vzZFZdXFgLN+KC5DokX(oxIG182HW&A6R2AU$u@G!>)&?tX;oS(A9jt=G^a^jFE zYQ1Ai#2yLKN(MY2G%lwK{Xqti4x@oU2`y;|YPjCm5Y$2A|id~Y@u}9j9zSSLWH@HI}5Taw@TQ-_o8db6It?rgE9C2WS z`{B?)(GGu=s9w@lsqw1nTik)n8~0o6hCMJ)R51LyfW$@?iUxsDNAz?reH1}(Vp*@s zg{e5M_wfWZDM3C8hmK4!HF|>s@q}Go`*^ZbgIJscQE+2atgAn3V0T0aPYDgP11J4VK&+ZHz0SGp9AOXoLcY zF(l2nLXtZs<^)cQE|NS)TJvNzsUjhdYj9EJHgKGc6zSBpxk6HyNH zmvT)h8?wT=EJDrE87m@jh&gTHq;7wCW!=IKAlwlzH5<>TL=DIbE0UzeOHh7>CS8?+ z#S)E@v>$)LI?mR3^+~h@lBlDZK8Em`96gd_Rwt@mWw(V!bU0XS@KiTUdtRau8T`aZ z%fVIQtAJD}eoRs3tH@rZ(U;C1g;dnoZ=r4+i189d*ENw4p~xJ^Q^ex{+f9E-7P8i@ zil-$rYkWU{*M$o zBHJ!63;cJG)6QflMS~KFE*5`Sc?CFSK_;cHXKR6Lf!Ndw{JXOP@X$&^i;q}udSN1! zu=#Sk0`g6_41wX7j@e*N2IQ?*4kat}KV|)8JS1p{XW#luC*MY=6hEjQN}cK%4`Coh zcPF5K%r3<0Rx5mC6U!s3D>z#sRXnqfR*$W4?5IE}u`5xcX@*L9wlsgZzcQ{?U@gLP zqxB$Ql!zG#9X*7;r3GdD%R%x=E9)U}sH?1pS90Sx3utE{$+O8KFs%>~FA=7kBL0Q4 z3bE39a>iC!F!_S9p~3tLT?VH0_fF!aC#k;&!Gq#0h5CCIeJQcU=Fv5aK5`Y+n3IeY zGL(Da8D{xJ5_n=91{!~U<#e)R)KJaOw4f@&p{}24gHWAN`17aNjM&%uLwLP1vMJU( zOKXAZU)c=yLxujIwxy#9BpnmH`4~7sX8{vaGfmt{ku;I)LbWEd*ps?VX~G$5IoUY6 zDOD#jfWnoNt%8`v$dV>`9tGw!!Lf*#$DYp!Z^TlM624F?s*HaCs}`t%VT~=1xRs(i z6$DN8_yDXQM?});0`piBXO4=Q6qQH|zT7iHmV9~1n4nsVcN{MXc?p3p%hjPSJ_2^l z?l|0MRY^`1Znn&bm)}r&O0QTB8y$*K-ojbccsyQ6@^T9!R5^>|Mxt^K2%(<|iHatd z%eZnuuW6a31S62Z7ZqthmVK&%`V3=8*nOkDyw%wm5JG5^?eYC;$*^KkfSE0P6z zjo@?m)bfS0^emO4S-22jxaWyy!J34zFdaCdj25(V3<`%FesI0f8?6_^_Ki;ygHQ-t z!n%#(y;p}J6y27jg zP-0_FJNK?)))r5rFFQM%TJ_|sMs7n+hX5lTM@SR`E7PAS77t&G#j$Esf2V5VZM5ld z_%_dB}UI#dz1K%bp*YRyk95YbUle<-n z*Vump3hgJl)m4Viv0f{;8hg!2JmQI{V}#~1Klz$tK{h5qDjgY7*=fUg6bbCtj88~0 zO!Q@AE?rKDI0cCZY}$=B^-DD+s$4YCc3KOS_cynrjm9TNrvnCO5uENgAy&Z^-4SOdLF@t~h zI>6!V)JitCcQYi>$p2A)t<)bK8&=j&K;meR+Jl(EwPj-GGp0<;8<>O3+wMLIF3p{M zAT(Zv_bFBx#ofD%Se!lNe*pBUr`1&{0S5tk=&_d(B3VTf|NuMl^46;Tmz zqo%P$Q$8?Aep6J%jv!I9I7Uo)!(e|r3fWP~#6N?f$IfLFelgfxzPQeconw$Cx_HEm zJYVUwsoC^Yamj{A5gew^=P+BQl3ArFzhTU1k4 zgT8vA37K*jFM=XFc6-O{ILZ@5wH4X9JR9P^f>7Gkj-Tc5+k}V0MOE1PF?J{gEWssjSp%# ztRmzEJAjQG?<)fgqwpB#7FO!P-~|inbu|o=jspt!dcwg8!xEh$>f3);1`;?RhpbZR z#e?1WsS7oAfarUIR#Wy0e;zp7Wzv)WJdCG$sJ15kdEm^j%DURPE(^GKX3y-%-AF5ZB60>12e1poKvD5u`#iT1k`26R}qCkjy?HHGalaF-w;bNTOkjlA;zG zo90#{3>sjNr|T;1_uu5vLn-i#SQ3iJ=|2a1=7Vp5lf=FlI%xlhK?6&JW%G`J$S0xXUt6$ZO&AZFrsq{wbncIA3U^KxaaV zLnjsKL)aJJ%CjT%SYbvAsUYRHqI`DqOZyyFR5~DddPqlJEX=kk51GiVzrqp@{X#KTTPgwlX6vGk;Orm^7UHlBFcNr+3HbE0VEDItH!^%C@W@{#Iqg`$zyr}$YX zArN_?%mZ1-D-;bqB>|=U5;`Rka*qOHk;nQ(OUgVJni6_EgZJP`#}%UzFFI8o3S$|^ zORx4u=!iB6Z-lN+cP!QDBTOvN9ORKOCB{tiNJyUtNH7O^Buoh}f}%>fMZhVM#ecDi zA9PZJihF;No3O!3iYIB0go#2GR;)>Z#9}Hbkmw1Q5Jp^YrU~1tvUh0U`iLs`qz|7+eG3i!aDGU*l7rWCErBm955-Yg%Y-64N1LA_$hNn$t>9T4m=smZsW2 zL3@9?G+w7Nr&7oZ|6giIL`q45`0Fk<|@B`=(^}`~ftP|om8Pb=C zfQLB^z6gtv(q^5i6W|_C4W4TmDX+`e>g)%wM4frffI2Nf%9Vd`9Cpca1fC{iV`ZiYf=dXw#l=D_m1A58 zcn>x~vEyHX0e}r`S~_{=9*FV>ysELmpGCk5v=!xr5F02#`Dtah-zb)+Eo>GMj~&Nz zDxpNFy@-`8C02ll+6N$nU}F-HDrKIvt4q;wpDrc-cf(@la21X(35yOwa|$s@@)&<- zL+29^v+)uTU2YKs(?LFZPMv36NKI6>Z9Fq|CwBtccZR{H`3Bh{+ z^UjPM!#6)s<^mwgRQbB_KT0X7;Jq8%9>h& z`akau+LPkv$;fZWLdwh(SHCg?jd*`r2G+ly+6de=#fUN9_~4gm8c;kyRR9x{VSu8g z9WHX)3J^RAxhf3Ts9^!s8Bw~d@kdkz1&vEAAJ#V)u*h_kU~#Qo z39gzFfQp1%4sUhrq@VZTb%)Pq{CWlopLPrRLXFV&~hA=Y=gs7@=gr$FqazYbB zpqV@-idDdBs%UqzrG{mSp@L3|Qa@+^GrfUR2;iQmg>jE&ooo_vr+^7h5!kpr6QUCg zid$ve!`v3^!!m@q(m$L-T4+%qOLYe7`Lqm7H>NfsbR+7&u3M!XQ^3^4Dc~e(4Or+$ zv^F({gbS&*<*QBVj*)E(9y zC2Em`97rn6?hFZrO%KRMneG#hV3&sjv@1LsoN#)&!YiS?!mFW4d@FwssVh8*9$nrE zn691GgVqkHpBA?6UL~#uEuLy1v4SDc5>i?|aZzKphh9u6N_=TmQC>kYlpOHT{UxoU zYG~z3g0n{B@K2nv=}L;ybtT2=vXa7dSxNCw%~FcHYA)n?ElmMaN2Y<3=vOd|&-iFw zCG|NXhz3n;33xF=%WTY%)!9vL$wbS=kah z!A!Tr53S^I3W5o45`B?N$x!wF5>iwNhZ-_H)spaqV3~y4paFl%z^-GfGvFmjV>g(a z07;eo7pBTC4pZg2#YqLBe0gtB><-)GVpv5j+3v<%Q>sgFo2++~VX|JuhRKejWX}zs zeR!{c>Ah-Lon9yh$;=g0)Wlpt6-+%ylV>J3Sv-={W0jcP*pr=r;uV~=aOfG)fyjJT z6jOUkzr+*_n0J5paHwevn78;aS#Mv%WW8e#lhZS9-sHpN^o*N#`7l{;j>F{G0TU;S z*KkI12$RSQ#`S^o($7G7w#Pj!m4v#rxhGSr8E{Jyi2% zA10@VYToO^@&mMu@^Od8Z|HZLH0ysK}}E3t~}q1bEZV0^my&deU#2OTvAyKOi#9bvyaj% zMxKZuDCvI{Bj@+}suA*QeI+pVFCyttKs8M_@f+ZS!b?xjxbH;BO|KYvDo&s^v#c6K z93D{9r>t|~b}NBSREHRtUi8f4rqVqDOOh(+qQ36ywYS5}#PRL)1m!F5G+N9HKD_7{ zAL^QJLehyQY?)p`+RfW}bZ%6TYx80s5&f$4igSOd0!j8QKT5C2Z{C}u^fcMGZ}?Gq z1^F`X_fdL9{S|z%eYua)D~=HR{2l|UN+=r}4^4a;iPxDGT7V^Ve?PyxSHC;zG)$AkW| z3QY!aXFP1IdzZY{14w^L+MV#=rqv*o^HLBB8HT1Zr6tA#*3tAf%&A+9T6)eR6AP|% zOTt3XGcje9!cPzT1FDr$;QopHFiCj@(2E$H2%;Y9Z>LQIS;4qTq{KgR*~H0wjl{R6 z%di0gI?-g~PJ3k0@6KSWxY3w&##bht;^m!o^JcFYjX0(!sZ4*6c0Rcc+-h&XIH0*` z_qKJNu!$o7@xiP(M!uxXA0NyJLd%Q?7r<8!yfFEX4`f|!#UK6vDYu3dU8aAV`Cxpx z7(UYlA|NKy{}^b0vehZ5(0W1Gw7qByhmAc-f3@8jWAShk z=YHO~Sik$|7i)jnxh#M5E4A!teEfDT>*M1OYgq#ye_qR4`1n^&{7+;-&j0+?TJ{t^ zeoa1py_P+TkFN{t8@22ie7sl7zKD-+*0N*x_>EfjC478KK7LbRza_uEUCS=v<2$wN zIeeh?7xD4Fz<#HeUB<`n*0S^X_`O>8GCqF4mhIu=4e^kq^;^VuuYzH6T zt7Wg^zD~rwLRH&%e>)9BjH9LIx#ogK7915E} zCr=_%dk!RgGVI-L6$5OBHtNiGgl@Dquq)eaT#xTW#%>n7_=YX9%R8sNfo-r){U2Va z-*ta5w7WXnnY&AXG4;OlME&^Laeb+VFURm@xi+q^jRsPm8d-R5ZYOcz`E z(xi5IZ;{RkBp+Qqh01|dM%4_EaCvVI;GM?k#ogXz5X)jX-jl%<7<&Ek9{y70`!YE6 z55KslcUJ2gbn?*U^9D`>{=_96f3D_8!RLQ*{XCHag3psVAox6$BL$zQ^OHH~91)vS zInJI95HWl|y@_M!VjYiIbi+$JK~UQQwWd3LepVsE4M!m>QHW+~^CX1~)PdMQ+smq3ezo=LpK!46n}e%DK*V2aiWXM|3LJ8QaLAD^Y4(gQ`j!MC8feR0-D z>v(S8)O>!}=njgOG~n0oHEkPQY*LBYIomZ<81;wT;dFExUG13-QiF8_qhdY{k-EZOAFZO*v#eXvC%X_wLE6^-cjWfwua& zx%ima-!8_o&ismX$((=9a2?RYeZ#QmjWdV*@9#UEte@b`+`m@8I~doN^KQ2WoxGDr zSKzrfZ$lp7ndNl<)gSugXY=bj;U=w-(IcXE$(2c=LLT)_`ExzWuKqlbr`&I zsCa1Y-}QB*s7?_?j%E9VFe|l&PBKnZR!JR6xua< znfKk?*)|Hh$B2K)A%thH26$dJhasZ5cF>$&B_+C7bW{0Ba*)iWWcJc{HoMrn4SA+D zL#1moM`)kX*ZJ%SB(XL&4e0%B?+d8U$4i7LD_T$#89MXPC0s#m6~iy|^1`qPbNhL_ zNK8MP9rvGY-zi$Nt8?=-hW-56R&t#z-e`C596wvspD2Ik7GLk9rEDfc#m~CyDlhUL z%cHVSge=hEx1kJPV+_=6O~y#QyDv#1=GB!sX8F(jK=+yQ(SheN&%Jy1P#kM6nr1x; zwduvdWVADzb;kr$A(z%cx#!m)oq8MvbK>neTs}VU?-)6)Tm9yw3sL~qqiBqaXF3J_ z0(=c+snLHgHM&LpS@4@qH|7G~%Qgpr-L{( zXcJ59OSl-o7Bh@Zv7fK6){kzyHp-4XakT#0ouz-Jh1c#Z-`G5wUrpgWJA)0f=FO|L zP8gc6ADQ9QdUj;~^4|dxM>#hv`S+ zd{#3D7*9@nb3R+cQtO${$%^$l*VEou{H7++?4s&<#HeVmt*?THjmGpdO=WBiGd(O$ zA~%9EsJ?sw012tXf0f73~x@rv)jdhI?o*CYp5r( zyfAkP=U(;i6o|6mmPl?EOpTsc?T{Al&OwQgo2DekO%l4}rtsxbcm-g|Q7q7F%CozR z%|@rgIK=fFby_=OIt`f^ERDDQ`1}m9j*F-QZ2E|QxhsbjW1fJTaiiTssxw3qrOaM4 zd7pQClYx!tfo7MJV6t6JW!smTcxLy%dnP_T-isLPI5Ny385TEiMFDR4zhOoi zk1-vTN9W?oYCIR_wr$w-C!yn`^}iPTwn@FQq254Tb{pQvy8U4*Gjky4_-Do@%c@nU zan|mCZiBo*c%g1+f56;P2Tf1$vplb*YnHHqw|mS(p`b%Suktnu@02deE0nQ2$I|m7 zXVAwP>R(KGk;?RTe)h-=bvZ$sJ7YOQa`e6I_owA9g2N2QQgE2{^e{8Dng&~OrWM*D zz_TMqLCVK+Cw~*-$Rj+_{QF=0pP$Do6kch6@a;an;q?aJeh%O8oP%#~;&DS(`K4xx z;^d>ek@s`lMcA8=PrsPu9l>A6cux3?gg>>X;%&h_)y<%t#1Y_i5yZ*wVB02e_aNGO zoom?NrVD+Cym1d&%p%8ZG_ydH`j=EJrq20~H*;%~6cas}&%Sa4L}{zhyqV4AM>igS z{pq7Wd-Nxd{&@4KuphQM-V%1;H}Ps60P-0 zS|O($geBQ1-NtYmSEoEpZLL}AF}DXk5303eMh|SDT0Z#f0>Wc8TqQ)9ZG9GkhR4FA z&>XJ7BC2(0nF!7quDF6BM<(1nxLi4Z{hGp59ba{cP7)aFyt#TrBRZF0?cXx63*kXUUeRKsT3P(q`ad%g>m%g-)9%hs!wVoZ(=Ebc8*NY~X zd*cHv0jHO!;{!5(?QJ>qW#zs!saUxKTvRa)3^>PPNZZeU_BC1c@GNuDTzp>Zm0BrT z9KWHn!Ga@28b8NeEs>?rw@otuC^&elC*9VOGn9X(mFD-fIZWfxCyvz8dE<5^yP1^H z#pFYM1>JCxK{-BG8qsO@ivM0BQN5|NGu*rXFUU^DXVBoxHgtos`E`B+K&7k`R5o;jHEF_z z&b|6r4dGZj^W3=GdAi@F=ANi-kI?-z`G7(fbQF03uz>zs2>U07jV8?)cK@FR)`o6d0DAWirOIMB z0FiKi03ZCBZL7Ey75m`NZEFeWgI_T1C4l#TpMl*r&=;2bfI%G~D}?-jA=|)Q2>B(3 zG_c2@8yL2wqiYO7BQOUZ@F65)0Jr+P<2I%^DEd|D<_HhXG4S1A72qvs?t%a&M)~fq z*&Ks(jt9TOIa>V`@T zOR#w1X^ZI0$l~xTujU{mJYN_?xq2x5lZU^^kfsM2qN<3X#oOamH z=q8$spS<-qvI08Az#A3=@4qRC?9&Q}pl|&$LwB}d^ct0vMO;9udJH-dLf?@&Xl!+V zpgtM^zx5~5Xs3bwA2#{xQf;C)-}+On6Lh|j0Lu(DJ6Lm*cB1CrVEC@L4Wy*(bia{nzSLj5_+Z2(^5Z%X5>2FXu;2N=LWAi^VN|Q^`3!A-jdXZVDy3`Ar!j%n6!*?V)%4 zNuA#kFz%`fZ<#UFnICsn8TLS^$F4^m81lV;lYVv^9hp`G5fXK-*YXdW_k~Dx`n~N= zabpaFgg$i912X%L90@N}W_bVaCBxKO-j@|mP4N{@MO$(}@#R}ZJ^x@En^Mo)GBMPh zDY@SNJ8$^Y`X%)d4yM&7oRC3(#I*kXku2fHV3ar#-xtn^`c;wRZCQ{#P`G6E-xmVd z@87JRk++4fp-j_yD)f6))sl7jW_j~?M5bVi<Gm^VIffW~ z%L9G#ft=)>p38=rCckH45%5QEO2?n<+=dv+IlQtDW#Qqz%4NGvqYo5_d$D037Apb# zU75$8&+40+B>ZMeqNC6!rLf zGpaupSipfAsBlfa+fS!|pbupa^|03)wCQQ71PIsK-5d$@y!)<-F2uPfCjCcm{-z8N z5@ealtKtX34qIrV4xt)e9YG}z&YPOTBS!fl( z5dEbj)htZcc6vn#O1CRlvsq4_aB6Cn^Ou3C)hwMRXu55GISCkEwVGwc_HZBP z$d6{+vi)^A2a=*$)3TL&78(su=kk^G(iP#=E=(qM0eW@qds$LzQ_cwVR>jI-n%*@l zlc34P{aen$G@1OxEo99?6LrY(;nflLLuvIZ$({azFhfj%5)FLvfp9Q9r^yb;i9%Qq z@w;qYn8m*q_OsW2*(s@$K&0hKZ|Feel#*SK10p)bO%6d_FLi`#mUmBOgTQ>y$s)!ec$Q7 zfp?6c-d`6&L<~8K8evU$F?1~YKs)4rF`$8)0BD(v- z6*|`4=?Ce5$?4Cwd(Q2L!hTW6*9F}2N3b_#LD5V7V2Jy!0E1F1?g*MU)98OsxH>OK zjOh2|#OGWiC^`>=TD~h3hT+NC_zk&_frJDp(Fi#PU2*|1!mBJ)sT(+Ml1LRKH2d9w zye@<}9*HEEOzQ(8f5I7%TBlFT6^FkR<%V#NE^TeEt3bBGZ;J>Eal3gFujMzRvT+W7 zwF!aSa*$QRM8<33J}U(kL24UI%{zt&_>tWHwc6W_Zr8b$QmD)i2*FL9lTdV17+(W? zU3u9_r`aF!HFsH2$tj{WQP#Aij9y}BvAio<+J6XoJv#!u04bET?XHAZ~aWQDz2kg zf))Jap`1$uE^ehVd>}`@WJudSS#;Dn3c_?f8gXQ7e)u5JwZ zv1esd;5}S6tzTL=I0h=x{0%E8EhUj?^g?&mIYYckWjmV}vbgg?Pe=%;+_3Mv8#XCj zK9GA_e}W~Kg&ej7uG+8>|C|utRICW4H$RUEvT2D(A4My!RD=;LuT%?MWPwIJ4pK6dCqOY6wQ=X_ zSMZ)PMQ$?*T;ErY8zgo@PxIke?MX|!sbU|4e|-32q4EZixG0k!35yS)UM;el?9p&U~b6}g<7=4sjFh-0dfM#n=r<~YagB7rX1PAbBN8(y-=$)H*2xhrZ! zpU@#{;bqV{lcc;{d$kD&nJq3Yt3l?K9@N8W!X&0CbHfOiIe6Xp-z**M0%a* zi5!^|SmkqH)8i8D2olee*^E|+jH-{Z_hI=JLWO&3cN^Q#af^>$Ih?y>fsNO>f4HM^ zX=-tcD*=eU>2)T=g|kgvLUMIvAET;Jq{;xYj;3sax8+_LE%VCw<+GDT%Dk(eIESeYcvQV&G5tCEP@l z@hhD66+h#YL~0Ly=8EA6_bNu1Gg?ZrPJ7ywPK)*;hLuk#{e1mf8`h;J952^ z2mc5rjP_OKPD7~NPhH-L>lA7H@+gJ~)BgZTK(@bPx7dzagZszq!(a9A2TzOHhri|} z!8>I3;Wxab>y-4Kmjqvs*@xfsk}guxx4a~{k<32)O)m+)B(o2{?IppJWcJ~Ayd-#z z%szbIOM<3V_Tle(N$@tAefS4n5`UaUW*>gn*VNKy+QQT2bRZr0PV|@DyYi+y?)$og zMtOBB%zs~4r=mL;?~!QfUt|jqvJTqWA!S@s_9~d44}~f=I-qK9{}`sX`N1M(kX}B7 z3!h;k7{PCAT<#+gW{f-(mXy=;jZ}kj7^EO_YC;Z6z~t$_-A{movyi*t5Pv2|N+;Ta z43s+r_>2hwBEa`zfDqw3-fm%la2`-9YYt;5;J za!#bQ{2s}MfQ%VJekem7c#=97k;}6{$T3X`S<9Kp=FVTd~Hy-X?5teN}OCB>2)uqhLoDGbg4I(;mw|b>O%9h zLJUmWwa=(wa;&lcwp?ez+fk_^PXL$^@daw10f@%a~0n*i@Z(Rg>H2(3_*QlGU2}~PGr~mDL}8! zo*hd#^ZZeDerhVsZ6kz4jc6yxrr&|5K)8hL@A^F}A_1xe)t)MD2xK%FcrLJ#PD^7gAWxoxUi^L_HQ-t9N-Pjr8=%66|^&qRAsN^Ob&fqEps@E5k`^Snl40o><@+4Q5%l{ri7u?3o%;t zLQfJm{-#sHO@F5D>gCY5%kaCt)H)@RMA@w&mZR4e9R&Lf-}ehmNwhUpb*jVAL>t2Z zfD#*J30KoY+DidVjhkhSalsVOv^Xo3vM0>2(m5&T!EB{M_Gt9(W1u z7a#LqRh6zAxQz0lbR2(GZZn55l*`Hy(P9@rFW{>c;J3|Pzh30ULe>BjOC!IekaRK%vdhDJT`~0wMpQ%4AJAAn*Y~Vz-Bl+dklj!ah?+ymTc( zmiE|+gy0ex^pb^@0rM8r{~zY|0vd}RKq%A>Y+2pZPkuods@u?#@~ROAE$rog2#-V) z$gYpw`-C68B{+T(uRQD@!~xxZ7qR}y*F6xS_ur`y{1bH!rJd)|dg{%W` z78JP}byHa1kSf|jKO3aVG7?$4OqFiHPqddRb59{|oYWtG%J^lOlzC-A z$l@$hWf9&EYQWMzf}<23I^4YS6!e^**BFBmEm4kKoe|&Oh4+eug^V0^<5R!<%+JW@ zkt6iE?;GgSoFZd52?9`h)#La508Vcm)I?lTUO~8IH&s#|pyG0Za4L6e0tFJwAv;+J z`$rN*Wmas_k|lQX(A)!m6>(uzAv1-+1Erd#sQ?D!;xb2Wai1gSdw)4oS_PQWc>DO! z6o_Bkyu!9-VG{=wh^eH%4uq)62q+=F*0|-UbO@rB!{ViqxX5ET@!(^|_Ph#6E3|pB zeq;%r=~of+@zm*~PcAy%tXdb~KdN=%O!K1g8r8Z0w^8g!r+=}3j%4yI2(N;z3(h$E z7xBM1Lm7INAA0f&vvUh|cw4KTJ-V2e?M$eh$%QjR+s?$c)4EtkvbHnfb__;Z7xBL| z)PV1kb5EUr`k7}hJa_T=FTQZ;OD|r2>B{=cS6_Mc+Ly04wwj1nvAxrN{br}z>kn=X zN8`!u-8*}4lx~23y3~j6g)@y;O&_|p56|t@k*s~_+OguWcy15>&*f#GBw@dt5=2FV z2K~?bQ{g6>jP#uL$y>kVXLJ)yMtUpzL7d{`<&K)(aFcd_uM}1t^fO-Z+zSMgQDGsn<2p5lSfm`7F=J#7F=ICvrK=@-a9v} zuP?!Spt}4zXz!gw5Yzc}gc7vvo*M>z)Pw`-Ikx;c)q}nFxzuy)@#>ND@mf85^ec~k z`_aFa1a5~8q8%KD*9?K%u?Nvhdvzo$f!lEpqL=o6@W0!NBycNF?I9Q;`w!cK!W+8) z<1d%slx*RteutcPKOVf-AA)<(JmfwHdB!^n7uiwkr^p4*bS-gE2cY-Ew)vTJGkev< zJsdYL-`1PM_F%klrP!X3jud4>D*a#mmFl@M#A}08q+g%K2V5n2ReidgTL>8{IHoV> zF0FrmmK+$e)1vdUvei#rVr13=e_2P6q;;_IH$HPdo;bU{%#Sj^zYsr7=C(8~t1ZYF zER4s@TD>C1w4A9pe|Z_MA))FBZaf<9!5KI638Hu&yzzn_{FmVSaeDjWYAPTUMYRlK z!+I&pi1}8Z?JXQXzH<7++!vOYKxb#$3(S0f&CN@At45sz$ntf|*`?Yt1$aUv|5Hn+ z&eY*;adZaZ`&Un`s^C%QSV;UFFgrV1kc@LjS56pTnj25;ZS*%Ol&pMdY;NwGh)$^K z{wvJz?jxDR85!TB&=Maj^);qbl(c*gLi>a3!XO1uc?&a}&_w4r*>OYe@v}8Je zgfA$_L*zVX%m}G9%`X$~INhXhFIVZAdjNYJINc-!H{gDA$Ps=in$fLSqc~0Kyc7N@ zIZW;0!{*zfdb4DQ*J0vZ4s>)T6lqQa3)c{eSgJ%jgJ#fM@7+VtCJD7=mIY1`a;`e5V}Z5mgpo^4G}Tv! z`}o3+_VWq8kw<-euqS zOd-4wQ-@r|vSV;cC@29+H8Z4LKnXpLy5n__Bh2%EkVY_W#8qi|{`$iRU^xqrlY6mgQ;!)F@)p3sykInjjMJ)#hj>X|D+##}WSn|J&u;^hn0&xHYga$8BwqNtg zSll?d6)zN*EbOi96{4%O(m+lnC@{#Tjk(gV)9eWa#rAQ+aZ5x!tjRu{U9(eL`Oqk} z6Uf$imjrAgVm>KHEzH$oIc!Yw?q>bP)!7k{KbKEza0KHa81pg0?rWoezYQ}7T{u@q zt%&GB{lA_M_*bx+1h`j!mg}bC81UNl`X2X^FqRMM8}f@$rL??%cJ_Mxxn0mNai`FVbA?=T}$jI5}Z?t)1BYCqz*BoW~}O%%dN^t)&k;GgzIRW) zJ1g|iGUC8G4&%{(Cl2tzZB&LxQ4n|->AeYlV!P} zu0FF`?*PN55yZJ%8=vVYDi)RzkU>RvAOi3>7I z`2@LI$F;8MG`Pxg9X>(9J=?@-I%{(ufzLGx6JmgA{3U$zxGsdz9VIv+iR?lcs01weim-H5PRWW?3KSqG#S2>^*A|08gD4UB5IN-;SQhZ^Fjc0bNv2i&S(vu2( zd4*ZWgtu67`CK91JL=CGDS#)%P4wK{Q#<-DR$G*Lu*tgfsfCuiry}r5D zU8oNhsk2l$clYdoMVZ>b8?gT3F78k2U3*-|U4%&$)@wF5sW14wD?>l;xxJ7hWsiG7 zEIc)oIU!Qzusrf?8?Sv3?NDl_3y0M+2of!S^5BdVS;P~6vO_$%+@C#X6sgXo2Xup4 zrU?8J4kf53j2o?Iy9w&*Rz@r$#AQiLAWgg!?l)ZnsRdMj4pHOizGevv zpJKmy@m_V|Q=C^8;qCMb;`I`x&qKtjwiIoYdm=A>DIwb5AI;ZSG+-U=_YB^Uhm$dX z-AaK8pO^z$C?rUj6KJ_h?DBQ&&;kDK;UC?aUno0lugtHZ!xy;2*ZlQ5w>MwE#!I$b zUvD6Vx}U#*FT3QnrxO%+D?yqXH7m&dW2GcZFzNnaeTIH_U$29_(M& z`9YlT>p30{2IYJW@S91=^D-&7J8)@;IqA-=Js(ZUKyD$f5`wRvSrVMT&INfE^OyWe zHeScfz7$ona9x9UkDcrbBPyVGDbVY9n9ZT^)%u2$h3`9`&k=ln4oAA5{LB^B>{yH;=e2*oODz|`zcL)>H^Y@0}7RLy%ZYV@Y)$+78gc*^BlX8mEPpliaZ1`NIgKZ9% zqyq#Ze}UYPr@zJ3lgs(y$>mkt;E{4OosY`^mOqf^^zoC(c>1)HXT{C4lI6>&XeD1f zaa=O_HI-E@FCJT3E$i|tb89<&N-6`PNj&;&@crp#{iR)E&l}9_zceAr1nvOepKr~A zN67E;4SbD6kGWikBmE$$fe2eI6L>Z+Ic~R$e_eP{tz}CyOJI1Gi(_BFPS$Uu9R3Y4 zJGYB-Bf9yx(m;=D*_})6-k0$&1C!jUe{mONwGaD@PGgVgYTuQ#4A+5hoaTPqWh`u> z1mKk};llitv4jG<)ELyB+r`}9EY|tr5;xGYi1xa*^Q!_tB(&Q0NWS0R=AU1bGB1Dw zf8^h{CF{9f6PI(fFUl{h>1}dvTf4lQ6MIqq7WgYK;GC(wBtLMyQ+r;%UZ7{1r&fVa zpreT7D@o?{apRQX9Qd1b!o>|?`ul4G8dz0=Ko{o;?lOAY91~Yna zF-tam)lFaT+w|jZ`d1K_jc#vh_&cawf9vJcPVLH4-lf28>-`+81;ur{hKOmDLo!o7 z&7R0cHAp_H2l?a!JSu&Wj8|~!!eu2R)qsrhfsAF1>wRt*Y2eYi5^U~q`YQ3~D!a=y zQi9Y--~JzU-`3pLm8JKdUqLY*84wRaf}}1638Ce-&88{Y7AaXY*=!9+KoVpEf1nA# z5+$-K^N`FXsh&LLB}q+HCaFv+m&v^4N90%ZFUj|g5KxbST}xxpA5L+2P~j{>d9KDWFW3+3^$pJLJD1 zM&41E(E;7PL2js!G=a*E5Ezf(e|;m|AznZe27kOpFMEMlfS*t38*tX(W*EN+&+W_R z38;jxWYWKP_8i4)_A3LkL(0h{_cIgE&u(XHfE*HXvT^MiUguLoKE{ns^Drg6=V8eP z;%Be?YF%5-zhghYJ>^)mPeOm=6vpcYs7>#+G%LR_GQB=-Y(IA;%|C^af4T(Cf_-fe zFDxu{s-M4taH4Z~*c`5t(T8%la{L5zwh0>5#=}q^+7J%=`5E*%KhfO8GtkY=zyLF_ zju}no5j?0)B=@>}BDR@z6p=Fvx76Ji!wK%w12}Y?VSUUo9%i@0OX)irH@l};Ssg?` z{(^?}t-+xXsT|U*&UqwTmp}&u2o*cHVog@8fzi9nHqV;hQzED|JNsmpT?Ygke>Mt< zVYw@1*(`ix$l2X)zU}lNT5X>{=FYG7$u$`eYy82Q;zQ`6;KJfPy+3s&;t7cp$FD4r3vnvj4=4l8ewpKcI07R|AO4NdnE$GyvA5u zwfRpJrFq1Qx=ItqCDMdP2%}17m-hz*Sr6L>$j_ftMvE%6xp`JO=$Bsz1Q&m2LwGxR z>FO4wES1e{&)qR8$Ox(zh%+{0O^m9_xJ0gBPond0XZNeExTI-l8uzD^_+%}6Lk&e- zz0>MkW^V^jB{%kAG(r(WNhdpdmAxu@hrgRuNLSumzka{9NtKL9U4p4Y>!-DYH-`uJ z4;xS253V!L;;x%p+tFl-D!YH#q|iQYg#9hQis!KKf++wL36QXH9YMnFmhSXbD@(T1 zy!Q&r&Q#ndFuU;LH`Xhg0TL^Y6>wR)DxGa!gUw3#JO_k;Iwo!jb}JMIv+HWk!Se*H z@Aw`dxzAe36IARCEaM3R$v{+zr;MGfUQUpW6*Pwp93XLvpy4Wwl!|{P4_8~X3ZdRl z+Gs+Ze)kkp21S@^hxVZzTFy?TvCC?ujh!dMH$;$S+!#`QK)HDT;vz}-5*o)O;ocM0 z7`ojZkWh&eUu!H=f0+%obCc;T(l9L$qfmYAq#}brKxl+xGb&mH*}di;ear?{!iY0)Kp7o)9++kJX2VmK4k$>!j2 zg8niYaym&eLA4)M^fq^=biWr&@#=_YZg0?9X@f z1)_t8jtV(+if4bGXi#HQq2&&!F+zcgid9qF&$AQ#Nv=pI0czHs=rQ$hfueBT$4C}ZAw;2I>P-Wo4;`Cw1YucF7$I!}M^u7|9lJnP*S7!#)TU{x@t z-yqGnjOKura54{FtrJ-1fu`FNjzm3~Waa+|43F1~ZN@A+@$@MhM*K{!pzB0Knd3`d&e|7x%mA_viqJi(S|lolM2U$x)_;0sRxQBY6aqI zU>9(3c$ti|oCUeMcscA|!XPxt77m_5-plcjG5ddU#Z&8*&Jai-xJ%cL1*_#t4ZHNs zZe<=K&(p@z(yLdmYOhvn!?Wj0_0K-Lv&8GM{PW;G!p^&I41|DYF8Ow=-yXe$3=dc0 z;dsdGIUAfBZJbQ)(0EObU4~I zP}+Z$yo0Gx#I}rv=wtdCbS23UXcUwqxtgFWq@bcwT}a<7EJW|@`=&OqUhOU9YR;9f zQGq$={F1LL+zz85_Bb-=Qg9a2Nw$)%T5fj&j=AkfnU1k6?wpn>#DILUvYB>`Kd zCZ)vPg-@IFpJsT%{iHhr{t8xpadj}mr*wbnpSnu$eoiR^>RSkv6_(5b>tTI>IJ)Zc zLGF@~bi?L{5_N7YMPs)>6eSL@PGPd2eKUY72TyqyT#aR`)?NZ;r7};hRKI96Olh5? zbI6|3DJHNzBMwf6o>B+4A{l%c7+-}oV1;ti;X7CUHLS(;wzpl{Tb0nK^w;e6lT?4r z2Woq_SzEq||6y-#=+9fNTsdf$|7yO$ob_9`;Hk-s_;tG^-(PCJ75q>0;m2x8zJF=? zZr{Fb`EK97QY%dy2c@F%e~HnwXieQbc-sjb(SP)_kf zIeLvrJ98u17!5NBHjlgV(A&;H|uV9SVp5Zhk9vNcft-cxFX(*TM4g^mD zikCbO1cm{~m%|SPGy?fRm-!C_HGfDSy28eh<3=&JQUE81xKddPYQ- z;4&ep+$EF~Lyfh0Z#f$^Go028laou}{HV(?Zdjl5N<(=mFXlS2(~?=1Vbxj8ahA&w zxq1{oC~5!z#&5y4}ag>1lrPG zI#iJSriZ_MZl+&C`}wkOwbvrB^e!qY;WF`-*AY;>WlAgQp_-sjLy+%UJ57)e?S$@{ z_g=e@(#g#Sw~4J&nUwad_tm%XJ94YVE7E*Yq^xj@E$R|=KT&@mqkHe#uyZ;%xj(X& zT%S-W)Zw8-^8giuIf-e|KX+Ye{g(@dO@-ijb>538D5(Cd_TWKq0+P+`hWiq`xOnw zFdds-`iPly62A1)_w!BcOB3;>TT`0$!n;dW7ubn~B$;>uZUkUJu74}0L#b%TN&cYd zd)%4E*uJ<~*@320(!khlr^=6<>Z6<^R8@6O8!~8y6xD{fI(}b@i6fEsr_MR}loKk2 z+fatX=l{!gPg%R3eA87L#i_= z>8x-PbO@#=LDK5${t2VuUF8Ca8wK}jTHcH~h(>cV6y#F##BZr|9IT&8$<_MBtLY<~ zlgdFK3jGOm0y2?7l^NYo_(|UmD{s|Y5=Q0P>;rsWE7*~E6Mque?$bB{8SNLXI1&#r zzRD%RASY|bt^3PO)LPIu>Swv{hZiGO-A@DTX(Qdxg5nXQ20olW!wY%Di*amuQyI|1 z%Zu!xGd)iG5)9i%+f;vzgvYE6C*#wJ2Zz82yA6vy!cskYIfniVN@A{{C@`E)B2;N( z`nHXd&e`YE@_&MkSKdox*qqi3h*Rg?l?^j2O83p}ZSbBz*2so1>48w73((sJ@o)KC zfN>jwP|8OE+-(qjcM^Vz!K({m(a^XS5}Pfb_&T4!k|8Dq69EA$MGL8~%kv3tJre#J z;I*vHKO;mMpM}Kn8OW1Tz$YL!f$Ml$HLyy3?+b6_6MqV+-{!yL&)H+~n21wcdlnLq zg%K7)snaQI^~1&B{0iRlL+(9dg# zauI2ePr&|7S|!#wD+K&@+;dC*R|wgl*`s#=m-yYEBMfaAy!ZvcdSB;bld>kvpi58t zhpBvxxK>aINdiC127}_@)=MZf)&_9&(7wiSOp;NkchWmL>rEuP>s2mU0fdj^AeXl4 zBsqj^v4yOuu1`p9!eZ?#rK!O$H9aK&kz6>chBU{p8)RkaH^2V%mwXfiBY&9H?%cVP z-CSA8V9MTpEvD>HnI}6MMZyQCCCvC8ctp8Pd!=S_MB*y##AG1f27C~10RS)8NMRoH z#a0VNB081pQ__U*RDMn53i$?nfgHU+ewDM74B0K9G{;?wh)Q{}dhO=Qtzx-AB7Cv* z!=h5YpLv31A7+nJ=O`s;?|)xNXh~X30>4ZtTA-C~hRd4_W0E7LA5zS9HJ>)Ma3Ea# zKu<9&JFpu|R#u=ZxiYJT0!2!SB8AA$Q(7w_x1n@#ZCddH)kup+;jPL^f)><++wyBP z8e9%~9rsg;>H}9R*6P|Fqaekik{p$H&!G}c$=CEjz0b1*vr5%#w|{S1soW7=vMaOl z?adl)LGV;^%og{IMuke2rzBZLx9hj!513L>NhQASq@t9;C>sdokTT0|^m6=%Ynk~9 zgXap#N`uMLsH>VJD-RYhPgt*n~)TPb~TJ7vu^SuBvO%_t=<>ew+W zr%%PZs8n7RYR*-9nN3QsyVIREOtjIc!-6}1R}Ee;W_B`c zu61wX8U_JV`=|>@8xtE9)eUyrLcjf8%YJKQlWbnES?GMni+}ZiirAcNLtICr&?@k_ zU|TMNw7WN}f^Ft%g>cM0YSjcRTU%L%$arP-)*9^iYilbo_U|mrugwc+*=l`7Ual?k zCCK|J9AW)k?GBp<1RuMFGHluZa|mPvfGFVQ%Ias? z>hf~73Kj%?lz$gM4PMS_D{vTH)&IW**U=Su#a?fs&rR$?j^EckV6i{g9Upil3UPesw;9v?< z|C}%BQ2a4x}30CgJ6uEBE!=`y@C z!HDQ=L+X?r>||eOj}M!>*~{kRB{;DH3Sq}qGVlt348UdcFi2;gHg^wJA(S0M&I04f z?xMu)hmrvaPXmG}ORQ8iSNr6dP=rM>K8HZdC#cD~77k2C%rJNXI4fM$3gvKimFdGV z2(M5`eSe%@Z?7|@iM;dJpZ;=qc82kv6M@K9zx}*BqQ~kSa5fR|3yFZ~1fu4P?imUX z=M44qpUsv0?@t#VVs5>_8~eoRXPyv>>&bZIA^ven8EB7fE$tjUA!5WMP2hrh0as?X zqSltF@QIex%PC9hap{t3k6Al12NCx~qU!U_u1 zLa*8o*@=YTy>hjw*ELjbFwe+~{31kI&_f5T0jaoH_yX##$I)7PhRBu|f^mAmSddH5 z5>||W*9S^XrASWr7B1*raioG*m}2yx5|3R2BO6vn!{-Q6wIiCI7+Fi+G~s|2w*CZL ze|_mU2S=|Dk12FN`Na2!@?*8trm5vtL+CExlz!HHt1dq3CI4bu z97iAA7YDAhZ928fi~e?`5IH+h2ME!`6SB~dpvDCdsQE7)ULq@`&PDN`2NU#O0Om!TqU!R~{z zAxsfeImbLTCvydNopd)$l+|?hRT<0sdb9%8>a4Ay>Y{$W`^U zxp!8x)emh6^MAMvC#VpWw=pgl5K|J&vCM;f9T>8lV0C5uw*fV2G4WIYC<5#iutCuJ zA^}?{WQf798pFHGEk_$*F?3uZftXvwD#gZLxiN(L7J*{}j1_4HlP?=;rhAF2037uK zx?8qMhodl}#7JpX&iTO};sU5kL{7m#Y)ZPKUBDsa7=O-5SVxlEa55_Jkp}&MX*9Jn z;%{yBqhZCn7f)5Nq?lUpjpq&$a~ZXt8-zH0F!vYm=sdIh4A|MCOBQx`9f2J=hnUzH z*Z5=N;Bf1EsPi<3CS}z;!|p?u_Hh~+PMXyA27my2a4dSW*xX!NK_`rql361meM7g+ zDa}b^0e_8bzP2LfE`NZP6ag15!tb_Zed(mj{<)tUM|EX)6aXW6N@Oh0XSBdXM0N#D zKm`}jGw-`C7NcDjT$2ePejn%>isKn@xlW>;*TTLFXAnr6j4fO;OEn1JwOtO-G_E%2 z3g9YOk{MzP}W zsGK1TXNbG$B5k_Jnl6-P5DSxM9>MqCWEDLcxsll!gS0JUavIUUl zD$2r!0!EBGp>eC=+HZ7$I}^i&oZiggh5Ymi9OkU$h47COYE(muYA8_+9jc*1H8iLO z^3;H!8UR#-cxu?seB{pJWaN=$0FRkK$$v1x;no1e(jmRfgVdGJqL?lM3OXJ;PXauU zzc6l=17rb4aL-3nOX4#8jrhg%j$ul~tly8=v3oK+loj7^KkDv%I-1h~6SmRK2(G2C zhG##H=7xilbMeGNNeN*=@?v2F5Cf!Sss}Tt_ZonN-TY!eK4O9&t4ub`a;mA+sees1 zo*}JdlLpamlr6VSy`=9-8}Y5q3h-^*NC>VDW8Vbp*RpStal|b+?3ICz6wrH;m&rrIsnRyD(Aw2NNf)1@CaP*ADMVvp4L`s~%y z`WUp_`dqT7atbs}OB7HcDWAB#=iNlLWb z5{mCnO0RHq6Glr;Fg!zNNZj<4dd0XDCaJ{kbN6aPMXEt|z^i+Y^eIL?6!C!QeIReZ zb`(Tv+r{2Cctso#Fq-hTp?|&QF`a1A3)KiXuqq74#xonuHXt&j*Ai8r*rOvACY1Mx z<$RZ5Nj;-6XCj-Y)E#1*r)uH3{|mL7H+)1ZK|!CEb1}*Z=g)e59d{#*mrz?l z1hV8fC@eUMq_v2+QHDS-vW!SJvOlwvPMjC_c0u~kpLx>c!TD#NFEx+=GZPTZOHPfU zy#zdG@nzdy?%PFER1kmso+am6Kfbq?{|5RlmD(~{`fZ)#Qnrswx20ezmjPGQh5X(8fc8phTlaK2W;~%sm5sayBO;i74 zOF0Nr$9F~6FQTFmyqag;U0g$E#VLY@)#B&5RKo&|Zvw^X{RL`b(ZYPJ%$R}#dpKjj z$8{4>xuG6YF8}V)mTZ5}JjddIV)vm2IR4QsL(*NGVBu2FhxhuhlC=d>DmW;UI_;XTmuKA-_*Fq%Fov1yd!*u`SMBrBucRBhlhfVF5mV6%Fqc~+ zmr~DE8z{eE^Z?U>5e4wVl{E65iPkcKgsl&zkkfvQv>zg10Be5&(>D<=MWfZCt`C}h zlqtRg&apT?Uv=u++9evlymPv#Jio%`3TxrCkFN>~fsa=Z)VtmAQ~I-$PrC zhZ-IR!#RC-neA^iD-Zy=#p2L-Z9yV-4X4#y0xkN0b7F&e&gmA(cc9xL7%bAv8}=8l zoY;2yqSy!D&P!*1;3>Go5wz0d!1sN#9o@yjRi17`803Fqw!qs>f~yq9u@NOlt`6QC zh45HkIU^c6)k%Ca{HY&;C$++EXkBGta3z=p`1V{yQG?)btxjSOI%*>yYKqlljNOSu zLInrIl8Qg?VR|UdV}-*hEvvPeeTU@qgwCI>NxM4Vh}#CQP)E4(!((+T^%W0M)_fU{ za4`9wSw(-eb~W0O8);djI;a!ZVYjGsxco|vdOxGXI$9I$sf(_YP_JC|b7{?&;ok5B z3((oBz-Ec|a=>^1q3^=jwhLALCWjSQ9iQ57AD<0JBoyolkU~@#1wBglq)kFlT7G>U zcwKs#H7y48l|0h;NjTx84)UYEG{EKxZ6`H4E$x3ZY8)Vya3~_O>8`t&qFOI*uMqM9 z@+flkx7TO~CSPOtczKN9;5-duHG?wNSVm>u+un+YP0?(TqoRLVH+qi%t+4g}5%2{e zrYVg>36f3*L!)HI!7&5q^q9M1*xcX3IB0+Xhwi!FQ3S$kr(2aaJ)5gTWh-TrB}J_% z%;|p?##NmKL@?BK2qPuQqCrH}z6)Z$_IYJRQ9P+2zryZe{gZ#ed^a8OqOXACL_qvoof@Rd+ryXYFU}^%_fc- zgze6t`q=aAVR|sa-g?%_2x}bqIAFBvdb}L{$qM%f;Kgl$K{%|~#N;=)z|9V^dO3e{ zTZc3=ZV8K#Xxa{-yY{RH*hhERh%^i=9{xb!3$@i*_c_AyK;lUa*4TarQ*JB9T1yru z4hg<7!%*^$ozB-o(e7f*H=(0wNI-+b3`U`&#vA_GRS+F7IsD}pu!m%9pV8-CEYj`{ zxTWYz>@ybX_8}zR(d8Ql2*qqMTN{6l+vEhCp_Y8tr6wH=-(<|^j-cn~JSxZ9&{d{epSac5ETA%q*G{pcC(nw;@11BBApsdi`4 zhcR{`j~Rv7;_l(s3?_LBtcB_TwU2^T;X~FvJLHc`)6&CmXd}P>FWd*IJ{ri#fdq&gW2kF zoKw1NE%m*Y>a_LgT8LLEaLd$JZ1%z|U3so-y7a(i<(D3DrA@9bF5D%HXeKm_t)i$s zZuxi&J)aiIWOycgz-`t=WQu=A6I%~vv?9I;2QzhSu%+d-5OESgK_#w*qfT*L3zY3K zv_&wD1apG$D}u_ZX0y`R76uj;^b%{h2Snv>aG%eed-hp~wmX8c^I#EQ1y{;r9C8}1 z3CE#=hj%uX;j#okrFwl0|4pd|_oElER?*nF;vRAe12n6};fiiFZvlUa@+P9SsC_i% zVc4hGfmoI3Vx!Volq|QPUMtH|>D;|rU#>3Pyt(q(t*p|yUSD2W#pA8j72>7mr!Zcg z!geFzu3d?{t2x`kNGbrS?D&Ox7m!QEUxcWEgIa0@;a4z1nrA2Z>Y|%|Np&B1`4>?x zDtq!Xzmp3Q3)aJ3%55t<9U;Mesfs7x9Y;3X28a=di5& zxku*?>^Sm*TZ1n`AuRE&!JOFRWzluff<6EWxl8g$Ey;5l<5_cNkC&SWHw$KuVa-u` zD+X5AuakVkv4?*;+$z8;5eRAKIT`DelVHR_eQ0fn)+s$Keb@@&ao%W_IAZZ5jeE_g z#*%@`R?$Aa4`-GGZ%#XupJdJ{ z`!OM=rb>dc?NLH$4hV3xI{pyb=t4@@rMz}2@*_#X+D?D#H(iLX_xxK;g*0xknkuVI zh_dvXN~>}3>tDaU{N(yS|IO3Gi!Z|Ca~shI@5JL~C*DG*}TJk2Ci`UnRgtRq3L zUq>)I?tgz-S%YEsH8uvrxqy(o6(S3I1=qnqqb88?Fb@Ir8rOWyy%C1Sl3m>pF_#I` z;H5z1uZT8+qk+XFS6HBs`88KqVkPu*2DMBm4^pqsQ8NcruuAx*ZO-)(-AU130{DX(XZu9(0TmoyKmEA7GFd+k9S;{mD`9{>r? z!NK7nrnu}>q;B!;JVJ*M!MUuLHg(AM&mlV%P~K^$>svy)hDzM~Y)D*YJv@*lNao5L zyas<~+WO*WhwkgO1Gypi)U5}9tI$xza{$`c0urQyL+kG?RuR5<1i?&NoeL#fR?Qr+ z11WS94`9>@sckmY?{T4>I4)tJFn9CQXG~WumRk=om5G=M2SYzV)<5i_OQ<>jVNqHVPX__J*V(5+pO+Xi%+>f+zuVAhLs&1DPh}`5y)Qi z0V4SYPc_sbUhH`~h@OA+aD>A>9uzy=|LEhwdsoTkCB*yGgWiS*;d|2Iv2Tdh9QS{M z7KX5)Bo$UX?;K6e&v6<+F@TEx1Z6y!O^b8kemm$tdQ|_Q1fInO!izm%$+rg zBX(sjv?8F&fhr*Z`Q_!zxQaP9{TqMcr*GjE`4fJXUolPtN)>9O^Zsac%ILZ;bRzktHVbIm=v>5e0Zk z-0s@!;qrxXD9wkBU|2LDUhkL*?j59^wagn6M=x zs1Hbsy~JqF`2zsx0Z8BZfT*a!64fkKdst#ckGbmaAyO9r=RP@is>^@awY+|#zjvAa zzzFOYdNZQnUVS_LFZpqpJz}n3|Jw4I`4IB?U-AQ5zM1txiW?o)n#%9sz$NfXh+ zvDJJmne+VmUl%qo*xf)b-AC-Kzy7xfoTYCbr*Hnnzw>W`ZBC0#C8fT|zl+KNKq(IY7p z3HX^74WO&--`k}82kYa1oR`Bd1StW|m+dbE7=LcH{ST|{e_o}w6IJ`US^1m)74_}v zeKL<}U(4S|eR_|+^oJ9gEWaSYfY$We|DEs8?3y6u(+-tX^$&8HO}aJnpZ^o5~sjWDu_>`ucwJjeGsZUhndCUtjMucirn&5}L=+7NL%!}>UJBfPKz?q=O(Jb&H9 zT0CJui6{ca0}PX9Ui`Ycv{F*yfs{y^i+ZEWu>5sY{BlZh-8%~6^DC^W{58*C7*4#N zsnqdO4SI6;15YC4ffo?u|H^Zh@3_?Tv8t)TI>Ei>SLvMwSMAN_o#pJCO>mWWvM2eA zK!iBhyiYcqf_d<}wrl~`$=PzN4BSO{*pCXk@C zSq8vf_I;NlG6XSyjguT0N?NjlE-!;dFK7D!JJJKmAv_}-Y%2XGcA#8S+6(8K*?6Pg z8a3+;{H?7?gumKtPDQ1@&|dgvv$`}wrF`J8Ve`o*teDU`Z|XQX!LYY^2Y1&F4?YP? zsyjD{oPYzqc4u{UX@q$9zArc_p7R9mqh@sGe6xDv)&7Bhl1`YHHY?#t8%BTPB`LVkx7kL-LKB+G_{_fp>bIn6+s6Lg4VlrP&-~wn|C9XI*J>7DGl#3VW&-XqN;+eb zix<_V075{$zbu-8o2+wrknsDwrn=0>%#4i=B7YDH`J zSW(UpTj-t1Y;aWV{&HvQyGQ!3M;0j0H1#!)JO5INn956Ff?1LZ$HGM5jAsBhK$;V%cw^SWZw82$&Aw?+JU%8 zxPKBw3)u7-_d3vHs73?o3)p;eEi3+P9Gg(^xuMShoPSYr7JN2F#ykKm5P!A62amiPIM@~*6Y|j6&I*62C>3yuo4hsesTjIhGeLhDM3+nRYikq4p~Kp zRWeJ*0QY>OiFkhr2ShD(=Wf?Wg+y)#Zht(0DTDVSg4lAJ5b+O5@ze`>y+Gt39elH$ zNZo`SBDu5L7&c#RTYN?Eh3xB)cOhp=n`g{6sb1(fEFb%-M#yG7lh9LSBctPU3Ed3O zm)Y~#ikIov*c9{gBpQx_`O6 ze4~@$3bi;1h%M~$KHPVGpU(kNO~yv>>Koq!k{TW9e8IiZ*wUv*Lm=O4M;ov9vtyjL z!#;PLW$UlvLiB7b=vtccd>a*SiIv$=?>TJD-g?*q#aD2&NL>J@WdK>y8m8s|iP9>j z<^Z|UI?mz@2JDb_V``4jkEvNgM}MYf@jU_1OvoWF?`c1#ybryYk|FeAN(SG9WUP2? zN;^>gI<#N@J~Utcehr-RE_u&?>YQ>3%Sd9DFpeZxDYN*G!Q+-OusQx)AAQR)*B|rs zDaW63`NjJ{{9Hpk4DW>7t;cq+9x@(=sxi6V-6lkim_0d{6+5oGt-M8?=YKePNNXt` z(rO|n=XO8<1!}4x8JE}K&U*D|xBQXgS|WD|rYSF4{~Nd`cYk zVvk@W3I3f!&;3#G=Sm8~V0BDKXnKfg0eV5Wj_0;r;X_Ndo^2w(an;#f9ai$@b-upT z+z@`6A2?#6*$CWueSZNqq`s*y%F7vb8PW{2@DY&0P==I~jEnNzP< zu%NbzVhig0SWO$s)TP86qxsedQ6{;7B&54tp2XJ-NiwQaaEoQpdkf?|C{9LnUj-1e zjW3AiG`1&TF{CT%qsZ_E-bb;^OImM)KvNicNQJL0Gipd+?tl5(z%#K2VUwA>Q7s#k z8ta1_1SL(c5xruX-KqpaP=YKd)g3lp@)qho0Q7d)1Sv@wdn+Orn?P}W5fBe&sf)|V z$b%kqpf~JiXIv|oq`g9tNh-=8*r{R(&N~QwnrGt?Z z5X33)&${S}P)K1C^&E40l3B4FIDI~p1Aq`_9ZS)C!u=o&Yup;P`}EdyY(jIm=FVy^ z9`Nhe^O+Mb&S+-POBq`j6WUI6mm^gR{{vADSsbL62*Mh6YG@16%Gk)RJ?v^ zb`Ju1-0kpmFajN%SabcJek9D`tF*7WN+J%c+O_@Q_Cc2myM(u@N1NQxHwMkO+OErE z+pqzoZi1odE^ZF|x}Obc9`(!aEM%X2+Qobe>qxFNir?QTa%knyrHU9Z%^^6q?((lA z81iM}!haTXD4u1K!x?3NlM6020|r_VmwBY7Aw9+VJV(hPt-%=rDqVn_Gww@-gCg0& z%9^j{?N1|)Q8Ezj$|=P1sK^Gyl<2yapl@yxpLt4eK>`CJVw?+Qo$3E+Y6p2 z4FpD>z%c}K+tr))y8BvR!xphb>3<8Sw%$^|>|oocl30bNT{DU9EKCRq zEaF)LT%ZPmypvbnhmAqUu-@`Y$o(5I;yiCYT4R9DO|K+(#;y8=*?Dz_(p-%}rYO!& zuc|l?Gg+=P2iOgv#0xr3oHYa}^Mjyf7E2mq&v_p~Y6>TsJYa-mQN(YBPo&s`mzZ2+ zCx4`Bru-X39}M8+dsw({@ZWv#K1+BL+OFIW+)RF5F@hnLu`q4VYvyU*RF-|zJzdcC zC+7r1Ahwnp_ZeSxFZqyJ?UpV6DScRjb<&&IhyXA>uo|#kKbz74Xy>wGj$Zhv+)PNN9-xzQosfN(8&=c7=(}q& z)CR)gXS6m*O2DBxDwL~ESe>}eXidG5ICsZCQi3(;*r^>VPv3yZ~>mRb@%rNh7Q+r!6to+o%z za_j@qKv1$6Li@DSYdede7CmKV)xjJ?uQ5vs%Q-)* zEC4=xZzzutz)G5! z&dEW6Cl_5cM^lqoc>MvFJ3Ry+0)8NuTs;INIp5?1jy)kh;LNcJi>@#@t5+JFKj0wA zYao=DzDB6*gO!gNL*jS)_3lQL&R8EiqNRhGC}Un|mXDXYJp?0vBS0EUqZ-WkAOo<< z2aWrHxshY&L+0kaVEty#jr1WmHxjOYwfQy<_dTQ@#ev>Q#gHe;mvrp|23`u)O9p0? z8y7^dKf!+SmDpzwYWC~mqTo1RjIOmD8Y2KdfqK2@b^+Jr7pn&p&>kXi?+BdY@e}xD zH*p^VQbT1Z53nl|;ddUT-}$8u=+P>G!JAQ3?ojdBz z0lA9^x*Gj52Hc`rElk4$m)$-D7fU_u#5DiK=*Qlv!o=Pibna0vkM(Mxvpofwh43oI zq-~dA&cYCTG9Er^KL_{*frU>5bas+;`={gcU7rBEr}pb_CVkNI5v;XOx|csc1RVol z$$OVyKLi(lS0_Wj8Nk=%TKnRny|J8|PiLr*)=Kv6Jc1i8Ack)emw2y9`Oh2vyw87j zoAAzJKUxQe7LGhj{Z6I&wnO;-($V+@#&Sf9jylwE%TYw8uTgAQwpXdfwDas2<2Dqc zEnFH679C+XOa+758X31W?c5d~V!63dr4~ z#@zLP6yzOaFg-vo+y8RFIK!;&8LGyvp7aN!Im$D8&w3z7jKd54|65tupj48Hd|#&3zc<2!q^~uqXUEiZ4rg&m9L2 ziTq7gethJ?$M2V(7$6p-#;!jE0>#>tGtPgL3$9rg5`oZf9tvJTZ|CJyo(#*J&S)rq z3&}&Ys(7iZ)=zj2Gy;>U2gxK1#}-V(kABG3Snzw2a%k<00Y!%bTLVy9IW@jU zzypm!zq~#`B#UU;Y474r5PiXr7cZOlvxm*y_2I^2Z|x7iZTDa}TI%7eDXv2__-~bIh;o}2<#6TtdaHDMiKSD#?1AKz`LPb`1^OA4$2|C0v3L`-#=qb8v zdyc(^WAyU+Qr=fbVO62kka{W017=!C-+g(c~&LZtg$_HysoygM+rLE!U%+SC==nBQ@wMd^5>kORNDiUD6I#*N&gpc3YV2kiz7Iwb9F((w>#c=|M@NSA_i7LwgRf%A?}sr&*y< zNb^8BK<(`F;7ebHr#4uB4{KLV0WL1`X$_-fP=*z=w@g0*vsWwF16KsEf1Pp})X6xToD z9`o5;Q+bO+J~u22@BvZ75>x2`k9xCc&MuDyJO&gJr?G_PHUfQmEPUv z5K(6&kaE{;38Vtq9*eSga#M4JjIdFF7WHIYK~oycB*XOf>HQ@9*oUm0K6XjGKy<{; zyDrvKVUvGloBX?O^DB}` z`3f<6iW3FFf>YeChnDSH_+kJnM7zC&msEQNfyhl5UrH&E{GAgbaqVBZDU5b@j~E2Zrlew`t(o>+;4JM8DV@m##I zqRrQsfosrzK7O4oKF1|WY@B9h?4K<9gPfKPw9QSKKJn6YO+yo*j32<^I_w63AJ!)u zLzj7i%pF6zEpHX-=OM%0(HfHAt1;t(S_xq5O)d#|=qww-e90}R637p8XGP5UbZ7Gi}!OJIF?lHW~)|j)ati?;ARuQTC6XC>r!^GRa^e7fzaMC z$4X7)hOek36&Z(EBRM-OAk6{5$Xt0zQ|z{apw9_3k6kK8xFDd&8(L4pf(X|ECk!44G4ZCBP}~+2+Fe8`Z{@wyyuZG)vAe#5>D@fo z2^FY+MMtZ0zR=v+K9Eb!Kia+MjCsd|K-I2|Id>u3Bk2zN_Ap(85 z@wJ<#ml(IlxD@=!N{a!&`6-OIIzQzL{HlR}oX0w&{LPH+w8fLSJi~J=b_R%lM{5?F zeCEaZ-F3)Cc~(Wd5x=_@u_!9T zceQ-LNMZ+6bZA9Wol;Y1?tYb)RaHO}J zP~upCg0t+cNaeiJhU$OQ#f)0Y^f#b?HS+b~#+oW+P@pKDgO5hg)Qnmyrj0OZoohSD zmn9u8#7;C9z?I5{>xzZ#19FO^7S2k~Kc=B`l{NQ?NZYb8>dGlIly{#3a)i2?Kt8u!?Sw;1(%P@9EZx>bAdA7_?Lf4 z1UnH8tHXmuFsiL$fH*x5pij?2m&-{6CITK0m-9&kK|{|NX9eN%-LE76>vR9>XaDPa z|4V<|2xa-x3iGFx=1(impH}`xNpORF_ySl7yw%(q%FCKTuL-44MGe*(QV5@Lh?jRt z1a=Zah1xOyA)2iNq=`2Pt=4Wl?>LvBO9U7z5AJP$Gtn3<4XiBAxBM<4T}EdQ7J#De6pL@j9F^z zuYOF^D&~-;Oyc2wypxwPOav4Gn3qOO1R+TLyz;)_enoSOmFwC!LjZ~%zlgg=R)?{w6lJCP zU`v-@O$0(qQ?%+YDA2)B!c|1rN!E-QHrF`Zj4PS@{0BX-zhbGJ_MM_4Ak}r|j?UHA z5b0WpeAuaHiS|ueQ??M}4`)$)HUEeKA{|6*F`wp_>`eq2M!&+rca()U72opnqa)!u z#Cz>X{c46MYDO$+8i4iL83H)FG1OHKqVBe`o1E~cJ|rUY_xOAzxnxwpJ2st#7XYM25vCl9Jo>RNP~mzqulO$+-3 zZhqHN$ixQwTbJ@q1VVGL>9Wmik4QPC3yMxu_9iS@I6dX-$4u6C08TMEzw*FjBQyRKDSI>gyufE#!>iNS!a* zq%T%>7l3lKU)|WmZuo!9eQS4})phRYlV2eO4U)Ab>*|Yy5XLq_*kIxdaU`4YN_$J* zwzRjRt?iqv4y@1w0&On6<$uzIv`v9DZJM+=0n#>O5Ex{nJw3lc`hG_L!g-!K*Y$nZ zyCvE5jDUysde?o;b)Rd_XF{@Ly1%CwNb64oLz?aHX^vyYdVXE(-)MqCf`A_te##+&e_!6}vC2%+&%uuKw zrsN^ZY)n(KdhS9#3D;eUHr_^VR~4e>3zz9p1hooYYUR@>s|8aQdzYwE1T_ennULim zFZX|!0G4TUslmm%%M1#Y|Y!{yg{}aQ( zQq1yOFV4V#i|c6f@?p6P)?q#`SH3WpTvP-c33l0StXE-d97>mgR0KHzVVAp91S|y- zR&B0Lm+VvoH-8sr=8WL%wALJQO>(4_SBYCeWUw%NWRx$F_prF>de$)O8F6TWl|NYA zR@`buG#R_fWr;N(00aA4<_k+*Hjfo%mzOl@Fbt*Qs@CC2&CF7AMq|o^)7#J`oZh-p zu~teyX{M7T(y?QPhb}7|P`Lw5DB<9NtjAL)74$MZUNYq}1C=!@)1QN%` zlyE2E$X|}>N5u)O6DG=hBFel*;RB4kcVSC1NTE;4<^|5A2F1SSzK4wQ(8@FsZnx!T zm@A-&D1QPC8L+r=#l}7ZcD-IU>#Z}`hiOT_6BB8%zSdf2*2)d-2 z;02jNhLZA;U@+KbNCB{<8>%ufOW+9wT!(-sL~l?Pz<+46NewabGO@7k`` z-rGfYX}j?7X(8PcIKQs%@GVCvm@bFll_=H2wtqNz`!>d>*16Rr5xhOqP)ApZ0J|pp z?wYFYnqj;p8F=}IQ5Nr1JLu`|wRY7AkvXNqyE}b1E7wltmJCcXt}f4>ZUm6Y-Y!A` zQn{oA3!E$y8)q_Tb_Cl%uny!-_Wl4b`RL~Z07}M-cUW!;Oi~*&e(*)Dj6 z*33+M2k|IgH~S< z0wEhvLIdS|VLI+jKBjA$){C6)LbtLI&LsucSr11QMRINUeYMg9w1`13I+KA)K;#D@d6Y|`FEZ>4psp;5b=!B zJW3XLGa*7FQaM9OtW88Re9PmA%6~KBYepr1=#+Dv`{Gu)%WAlm5n%GZSHtw3C&ZU# z0XX~%(78q54knUf7mC+kTYcHj|}S7WNLO!y?>far=5kQ za*0T$HvOqEl&L(Vi^rV;Ynv~nlxr6~H1H4xCsrP_&?-=qHR}nu3{a1@F~O(i`ZjB# z;bCbwuU$oUme_=(X{>9tTm5ng6|3z*J@AYHUKCsa#+enRUs2`0JUPqLxqd)HH{VD} zTgmK30KrVt(9OLu)|f|upMRF#ft!A-m1z|&17QW+nt(@^vJICqhkM>>v8zCKTy)^6 zJWNz&U!D#=0`SZF4gIiUs3D)}vxApfeFu&FLOnYBH)PZHa=4Vw3v=sjQMOkl*a+Yn zlv9wdEtq_xaX+7c(tdUo1TuBT2cM3Zw3wO)U!3djyFAr(pyyJxujkUhrRss+sXP4b z>wUzWqMhw#i|yFAZonPqS0Tl!^*z`l8TFc+rpDvE;60c1-@d#tyxDsYQp>dkA|1%t zr$h)`E>L3jnMR<+q7pbmi)uixzFt}$Fl^mzD!dcrs}+p8d{E**lE-9^jwrf`CeNEW$y0z!#DmoE z%`9zzuAq3FD?nU=Mx8aob~NTBjNeC=`8rX!~PJi5<#J2N*8wF0I1|DHG zT;c6T8|(mP%gtb%9k>0}a2rz_FyLT4I}N*TVTdvOGTtf%twa4|*@i>6HV7|n8Q~bh z)+IxTb?Y#IaB5Z9i1G_wlV@=r#bK2dq;I-c{ev$K9GJUw>EPvqeA|~G@bHxEQ2vFk zZ`N9$vHEW)On<#oq~O-t0y0FB zvg=A=T6bC(Md-z_%*3K1ftZ5=9rG6iG$JxVD3bIWXf(pHE-R#6m*(vf6K9?BClFZ(NjaJuJ1XrrHN-7!Yorg;F@&0 z5^}pFn0p7&ph<703x$1M)VJX^$_bUbHNJR@W%} zz!5$@$nW<8UuGUi3XLvG4o1N0aRAIasmv3bJ?4UDQtD$lGM)l&Fb~ii+T*1S^W58p zHGj}e1#~R^1eaJ=@AQJPO5#UVbE89&CQ{|))pBxoUT7A48M%nLfWo$PV3^vLxip zLq@5Ue$Dl{4Ckrt{vo_%^aE9|C}(O7`F~-O>!wkZB{(D=Q2UiyoLzY3)>jC-d6UP7V6}jC(3GH;7oinSUq$ zuAJ2JxRa+hB2aQaU@U4{<)Vmgu?-KT{Cy0Slgh>E5YxoBcaEr}&G7Om3-*;J4M^t} zc;j23_UP_b@5>n-VR7-^Cq(kR4tWl+oQ{e%N56SF4;!hzBfIcJ&ci5*9{9l-0VApt zQ-u7pPHT|K%O(e_M4qE8lSE}Pz<=!$iy#2ALBbpWGS)f(92?DV*x)Ftc0wWrD%yg4 zYf#lGFad?*Sk24|YCuO0=!ZswhewNX2kXR(Q>gbbUtc=2%B>!`fPK&*bfka9Ecb%X zZ4?J)SrIg@P!SOaK}EpRmWs^oqawo{D>B+YYjxK2{<})Tv_Jbao7+ z04roSJo9C&oe!{*nDzRZLE>!RZ~nKJrC$U+Y&QyvKyO6e>EBQC#tm&-pvngtNw9j< zK}O{FpiAvWqAHVd@A{T$fH@1Xm%mHCWopD0ai|A@>b_ zsq$KplzHlju30BR?%c`w(NoMkm&RZOP9$^JmwHzEq}^Z|Ah%(ngrhdtk?+?`LPrx2 ziK(?}0-J!eKVp|SVFWV)*_Ui#1R;NX%!~%Za=%C{dwu_toB;N5YsGZ++(n3n=n0Oz z&U9JREKApmLE`e8b5jo$4}w+{hG&N%`w%7u_$$1Sh|nm>D=5G)ieUB`BZ${~aJau* znH$xyy@B~X_3TJbRnBct_OG0-+=g@}@%GI-IPHAMXu?erHb8j*hQ^Z#!?u6L73?;S zK+uJ&oF9&t9=(m4$s7nBQ6=yBj9Qb?+&jn|*m?CE^10A-9^VuXprG>W^_LYHr@n*>-x6g^ zc3!`0y{^~PW6OFh2%~D}^)EXQf_8N8yyJ3dR-4r7*m=ig(p+6`lhL>Hj?1RG4mO(l zy<+{^F4|YDSL;j6KD=+SuR<&IrcFU*qoza|2Mq|S&Ib^y1?6&6+QffVjoK16HK?kj zwL2(D{dLm=N_Hi;Qdr5Vv{V8r(UeX~86`$1B*Q(i{v4=}1q9WF5RVCqr@%CFj0RF6 zlJ1lfg2-e=gObAeIu}KsO|8$zx5w%E+!gRVUY<+)kx^x>D=ss`C*OZhbc;9r{|{!vH=q9)?En1!seCu>=RcWG`~5TfO^@g8W)L)oYmLHQ0zctkWhRX&S$f2f53Wo`4nW#3v_~SWI zf9pDrz~j=l9HV=Tv$OmzYqVvp=5kX%Z3S$j@T=LH`q*aS*LZ(uI_kCTip`o*S1j;Z z+@LY4dV3o*G81yo4*Q%5)tZueX+akvDA_1!3?ab?&|gEE=ar7w&HtyH-f0o|RGO}X z-c1%iP22?WQ^QRP&XS*)nWhs=rPMK5evgHYQJ;g3Y_)(z%ZTW0p>+ zeC~0DxtLQ^dXRq$SxpQJ2)twQY8D3SB~5QrIo(5Vtt)^%pEb3E=tyjk9~HzwbybW> zQ)Z&u$~eUG%(Lb^Oa|ua=J+fy(5pPr!w9j53X}^HK+<679cDe%I9N3_4rX|MRhR&q zScwnHys;^8z5aLsk4x?0;h|xOcl1LfB=$WFU%=z{Zf1YUGkVqD2XLKDh2w7E8J==b z&dfpCUVaBF=mCftT=jY-mb|se;M|#@0lBioVG|Ri?%q+iRKUZ8G0ON*52XejDZ(eq z-d=WaF4Vpf^%}Ols@NKt9~^fTBmmIc#sPU-;}C9z`H-{icp&71v+uZ(euoUCSBIML zU(saCa@Bvb;2Tq!cBB66ryIvXFarYNL{aIbT_`R>m0ExjGFnz~&3_yNrpeO5sU5hA zMX3jZKoc;GnMVa_Ld&)cMFh75h`{7wLD-i_QO{&eGtiP21T76klDIv%cZ%F4qC_|y zh63BTOCSUhPBa%pb2~I6h|u`d5iAU${!!rngsy+ife#0)<2CIMzi|(b*m0dw(*Jl! z%a(5d;pS;6$*jW$hqk1mo!0NXR%u?7=_)mu1k5P~3OWkd{=S5b_rI2Eh8mSj2 z%g#L@P>8%yYPfuGX7U8O0#|M8# zrs06Y>#Vp?9d?f0asW1+5GU#?~KRxPJN>ijzEIT}zCqi?zoN#C4CaD>6agJvGs z%hxdyyg|PwMI=kk9MY*GM;b1^ohE<2ynW@~xgqeqhXr6?yLX8gps){cvsbBb%6ZWE zW!>HC3v%bp#YOmtnd_Y79@sTFjt~t$=wv(ur3{I6>d2U5lR)CJ#RUAAoM_w{4rx&} z_?;MM3FV;OEQut>X802WT+t+LQD;cBdIC*b11*)Q521IAEP6aXrA?8DpuB&v)<64M z+T_TMa8(+Cs)T%5Ws!2Z>C_@-*Bd3CusH1Kw)z4TXpI#dT4YDDVp9?zPGW`lZP2_3 z&Lj8Qn#eYM-YR);P({J#o2xDm_dFj+;SeJdQ8P*+RFbgryRaN$_x64|!B!d|Pjp8n^a5;bQX_ZI~y1X-P zgOgBjR?igTm_75@;FK769KfOiZ5>QekpURUR#%sA^@OR(0*sK6(J|v;gt@Fw^-Azw zUt8~&dEBRUCnvfPGm2+~Y+>9N(JVlBT|W&5cReR46bf>(u`dvb5U(rs2Cr*;j=2fp zQC-yVrLv^WRnLOT( z!_z{3229zFMfSYzVIo-?ijQjtnYI6gnfo=MQ81PfAtsph+(0G(y`v}r?kbzBm@MFR zvw-vB{=$qKUX9*9^D^1Woi)##>Uhda(F%){zXz5a>PIMse+5Rm!i`rw_NJEGv0uvcZ}~dHKd@aQCd-}DY+%!yfY9z%M`c@DL!YQVX6%YP z`&LF6vkiu`KrL2mCpfbUqh!zbVh@)dP_jm_O^L@dhG=ohfas3d^ zGkR|-ZH@lg4X90f#v8j_2Y4=(C=ivfi0czpAEsV?%xbvQAruVLTV;hC(ODd14~}Bx zv6aPkZ^Wnj>Xi)~6Ja~J!UMXTk^!cjRj>0QO+QyQY5RdRomt72@NA{FZk!BYdt&zS zV$On6)suhq&Gy?cIIOUs1+;Z}xHuWIv*&Y;Ve|lns(DCXF=lZ-waHguuiz=goTzve zbJ&WQmqqS)zw7S4RWISa8~S0}OmbP9WCU7q{SxCM*3Q#K9gdPj-vq2hZg$b89%aaZNhC3wIRBO!K*Om0PlUg<|a;6KM338`OrE zjBErZ0#3u1v}^<@2wt@Ic0o>iz?bA~1RxcsXP~1ik)i5Purd^gKX^D8f85_imla^`qTtou zjoHbo{XV!CnyMNs8Gmka;E1n57;oZpg0r*IH~G2BZ2#ovjK!|?$qqVBvqni!nAPK_ zLzTgQbE(5*(^}KB+Jz?J=H-cJ?o$J+zU~YP8okjXQHP*yV@MRX-rOZhS{SxvpS4Y$ zPG^0Uv$)F5-n|W${g(+ccRCT%V13jqInztE3h&JV7`4`Enjko~^%sh~sgVf37#nJc6FN+`Ee~4h68qQbBSB z2=*jV`gn+Z97qP&5on_7ek7J*D3%<13pkYKY?qE;adE3gdgu0OVnI5msM(r~5YGvq ziFQ-nQ*`DeOzbB}HBj$-5Uej)bT8fXa7Hb_st0;q$c!f&NoqNITKoi5;=#-d7fv95 z=b58UYIVPJCzm2HUT?@x4k1x0F++mCN$Gc$mJ9@A(ey* z!+U5#*bnH05`ifo?aA%ZAJoK-P-h5#DpdwmToG$fQ?z~sNJY#K;m*2WDLm1L46<}^ zKHi`a%xXC(pZPI89*RgTt(W)fc5X4k%EXkdQhS*1Dz6kUex1Lp)G+(m8%{6}e9pXm zCaxrTlS>Jm%|LX}Ds4IqNQ*c#GP$u*$9}2psH`-`txR=A=vf#jtv5Qfb%1By2|1mW0#ImX030UQ?b}<)0|bP z4oyomB5H!Ac-`}+8O_;LpGrMBDQXez2#g<`8|*)N*`VNRNxjK5;KxY>Pwu487}?-l>OwuaMsI&?VQ8X=nlRty8!y*nq4{RPM;Ju>rvc%)T>O z7xW@F8P7QW5I^#=D=Zq9lSDBp78>7#Sie-7=mx3C6p7J*RpR1w9xvLE-gf)NY49fK zW1gK^5PDl+6LLN5Oy!o1E-%F!nZn`gWGBv|ff553XRdr1)kBlL;7^x-HmhS1)2^{r zi6_Fodh|l$TBCVGwVS$dGm>Oo-H&4VW~#nNyC0>1Z`m9o&B_U$T0PACC^9iZhAG@Ve!U4m<3YY%^Fa*xx-;2 z<1nOtJQY=LdXzWq3~c7$r|6NKL-O_vS5{|^l8jsqUovx_l3m|_#9)dW<#9hR_dpXv za@PgF1~FB~wNw7pxht8T1x>}L;+!P7$F`ss9Ga3)B#j?Byi#K#$y29Tv+zA2kHlvT zU%LJcx;5y{TqoMkxVNk`?iNwGCO!6Nfh98D`2d)?#dq7H9hyKpOH9&qP}#W|V$V6b z9^M~2y*ru4LF%u6(;3F(9bnNpiJ17gTkbJ=g(mO0AA$2d*s=*qD-f+{O{q6Q;gq;HRj}t3s+z&RH_iIQ%nzpXlr{herAm4#87GAtg<_Atg)&d zzRjHd>jIoC=C%QBrZ7v_$>5{eEeIO5kgXGrGm^+9?-9w?*KQqeu7Gt?SpV!3u%uDBVEtaa)IM=!aIhagPd)Y2p2dntX}Tdp>iA+5WG~eV>`?Ro8)+DpxK}c7M-*rpz2{%R+cm5(j}P4dGT`Zz=5etmqwj8{0=BJOwbsS z_J2{Wlc##saY5SOJ0Ta?u5&Z6?m@8o_5yCW`mhcVZ;FVow$~@k(O!HkMtPNhQrXv<|gtwu3>yIcWX6ngc%2OF2CN&YOiZadrS^wLt@OgW6XbsBGcVuL&?0NV(0xt0rFBZ|ya{P(^cW9;-T< z8BaW(!4}W0L(wLlq$a(ot4nHTXpm~|^5%RE=dEcSZ5%tgf@lsT zWw0>b=d)$L)mOXZKp{LEj7XsjEo9)icO4hR^{(}1*J^XMYiYTO6h87q7k@w`2$rrx z37rgMj2J6f*L<7mEy2VOtKCFJorOA{FS^!yc{Yd`Q3BM;iKg>*3MY=*I^SA72@$Bn z#((2d$y>E02u_7^7y-8`MH3jG2T2g(3Al-B5DeVj+=J}%H6-^s>cV1#O{i+^Ik%~( zE$gOjHgkAz#pQ6N)o-(;xqkslG#W7n9!s{T+b!blAwhi%tVSrQlwRzUT!M7e{vqar zCDuRXVTkWF=>#72fIeCv5rv(ZZH`hXq{Aq&l=R=&nM7XWbEhWfM-+sm(Zt$M1Cqj~ z5OFty2fPjz6^5+HLt@-IW@NpEtr987I>cdC*rxInX|v)RIZuPNY=8Y&>nv4R`I?Q( zDRaW<9hOBr)R+Z>(WKd;T#xoz6-{&oGa2%iyOr>Sh)6dV*Kgp)nks>dBN#kP)&mI} zdvnt~Mb|WuDZu!ejq3g93Vqc?uJuK1$+&Xx(7s!yBZNgY9s*c}$#2Xa(%J-ygZ#eZ z$k8}mh#o}`F<7ThLw|ZL0rXh1e&gPMxTM}ZNLw%;+lH?prR7PQfVr+b@a%lWeSn zcc&lQT;vSKwoWZJ@zHL)bsVYWW`PyiaPj!oP@5b&v}?rfm!O7)@3>?QCbqLMjJtcu zXb|WyR{S`~eQX_Iz3vUgXUDT?Zj05{zSIT8C9$0gUW)Ke3EGs%7VtnIleY=#=$;Ceh9912%hNTA(z+$J|WJrq7cUd@_iG>v_;&wQfpY-#mE?b zV%iL+?e(r(wRM=e25-t16&7Tau4R;zkQYEH;R@$y!l62cM^|qn6uOKQZqjY!IYhBj zMs*fx)qm--NGjPcj`WG%YM)hVOs6I(s(g0^DB!^tFSQQHOMM?4kHC0wdgv;G1g{CU zr(5G7OqCMB!cUxmP=8fb9k( zEPKgTku#?~#)C87_s>*$)&7ziNj6Sdo+*9dOPn{LcikIyJB6WA^)Val9~#~AKmx+V zTz~!&g0K^q4(1m&8vV*(n4F$nG;S_F$Br4FW7db&0mAq#72&kD_l*^6Z1@shUt55E z`i+InP58)`@Zpc$)*q+#2LYSd1~V-^3jQu9c`3w|5e!=_SG!auRLbu<8`SKlCcm9m zh?c9k+ladHr1Sq-c6;_UE4VB0^W!Ne2w0T17;m*pPZjp=^QvVt{LwSf2nxZKzOH$xQ?gLN+UlE z+1FO0^Il}kkss-3VkI%O`IwF-O&4o~jBDWlcR+~0r#584=?uOzsdi~M`iE*O zDAOWAZ43^K!eir+aJ~Tn1G``2k#r?q`?i0p#B1M4l!(j4!Zl4mxQ$Df#E`+}MhQ)W z+`hY)++ZQ0G_UXaymZo)<`p)Ux1rK3zvr|3{$8r5fW{j*jUm61JiqVr{J}o*Tq)1- z2R_F)ch7OEG@mzJK5x=~0}czdHM4f?y!@}hREJ#a#zV%!F>GZXS!qAyMy4)b7@2>K zy77ABuXJWFFF=-=&vNRk1Z}UyzDkniTwHC|auoN&9~&fpyF;ljk<$yijRgJod$eVd z4hyPRTwtECVU}u5E_Jf9437+9ho|-Pvl|4l6in}MO35Xms>^= z=R|FJJr_s3!Z_!z)beq}D~xkGTbZxsBB@^(>msCM!x$IqVd(R@(C4GjbM>WsYs4#z zb78erUv3)v-!_)w6@{N!sV(K|B3>?z*!36mEgnJ1so#HqS4KRi zO&s+e9>OscS3T$F&wIA|<~(XPrQwyfmL=lx8)n~9L!KN+vJ#A7=ZZi0|2QKvk3-Bu z@$&51xOvkY1sAy+VH*k+e!2BO;%Zi3RI#xWXU?B{^3tUVbZ@hKYgrz_J@2 zXOPMLvTwpvz6Di$rOe8D|v*|jP+A#v|)?f`MvP}kDX*REwW(60H$@%Po`-ih^ z(H9Fw&KEwsEySL9#3*{+EUm-MGD>j}&p1C_g{{>??<3}1a*T>6mmiagu&4(PfoU0KoF~}8#e3FdvJ{O=xG?FXge=ua$o$Sh5)md^;aGF`5rd zT$d1T|M6rH0Jr&gM0_SRU_gJc8bXlG_fN@7Q^e4A4?ZOD3u6?-Sk_~fuIBRL_(*1L z-*2vXJ|b7NBKA8wWKTXpa#ZbJ=_e$u%~rpnYMZSfJRQ=lV&esG9s9Um6hhQ+lxu_u z(HUzN27k8D-6((QeX;1hZq;S-TrQqv9v*slL=HAQ#o%L@SLiS```_i!w;@NLfuTc( z4&!p|N`P>pFT>UTab4(`^TsIBS^x1kO9pKW4CB8b%avNy=QwVCC*qW2n)2}BTxAvv ztC5l2vF4#LZGXBUjT-p&VOt&wLZT|Ue3G@-e8OtD_^yA>L3D7(T|{=uz*udCGD|iP z1k|mEE(YfM=u7R)a28;oIg%48Bv}&PwUNcAk;u9=B|1x1PHuwM|!De#O`WjdeHd(|;b8Klm&iWg@JI7lF zRLU*A61aceuFXU13dN=h*Mj|IXX&wOD(1BdQ7^M@<2f`1RgX0dzTQC$WRRLzY$$gl;fHpnEr(4W`I&~GMb zczeJcz~$j23NtZ=F)1!?ZXiE*cQ`#l_>=jyx$b{wv7j>Q--n1)9Vdj^xls(lIE z`1>q!Xn?cI^D@JN#zuWX1SH?JAWMM#6*F?!zAywFJkziTY?t@%_ndfN_DJR`F*ICg z>jO1)my&~4$7O@WyNw~dLzI=d%g7lU^96sMe4v7C^HW5vCP!***WyBw-FFj5j)qPA zbc*cISax3d#02{28cl^f;273yI*;GcBf0Urhq8Ac!=)uh<2Ni@GKBTH2W~X-=-lFw z;LSi{fl_`@ZVknz3h|l>W>x^2{P?eE-};jpF|JUGaZ) z3$A@nhFm@_#PRMF65a1tagAKDzzegso#U*1@*q;ad=2u2#I=sXeI&QYge5`8z!*=r zi+rITK8jt7?SYa3VI`vMeP~#P5>nX-lAADvcrvWQF=k%}>MN-u0=)OMc;&O%cV2E) za>6XqfK)yjvaf0dncYv0h05t$X7PVr75?~BPd?SZ;g5^ZMkMM|@U9R7I~~|SI4%Q- z5~i?Lvpb|f6#qEVxN7ZdCsQCCDGp(HO8CBWGy`rG-=0Hg|Z*{ zw7a#>r1k9HLJqsO*A{R2!f_6GuvlByLu6qbJmCU2H+Ek0vQx{Q(zrmTdB=Z`wWX5y z62Q1WkK(qVB$JZtlK2vsOS4>-KLZ%|XHnep{B2+^4Fv4g)>rB&0k0=qAkw`0qg)!o zYb`Gm3b-txjltA!1*!4W3B`(%X1P$L`r4~us@0CEOej;m7LFs$FD*p$L>SJLUrVOk zH7V2n(i-J6V6i8DR+NODy6>RmlVcIrICQmjgS1Gx>^=h0yZ~(`%6D3mW9nv zi$_UeCBmp}Kta~LA#+Kd3(hqNv`g%pZv_Ht`gl;9t4gd~jl=F1($TwCt@{T+4sn`m(mn;5@6} zE848U&m2qi?BA>5QJJT9(^CV>@ zfNVZ(tX4rTZCmn%*#Ccmji2*>&Xat8<2g4P&W7Grmh{r4+0fg|g=W~y3=gwLXd&+l zu(4vmv1Q0+`oq%71{q>T!ZZ}XL5LN%1s@q28T$GSho1|_0|6JrzZeLOVwKYqG+k{X z6PXZ5zH5kSh!u(D`IRQY^}t&QJdrIe8Rl8Fs&3oe^$aKjRn33Yegq{_gF*#9#6>%7 z_WGTZ<3SUwBryVGT37*HD#$^mO!K45y^9hr4Pq1*gP*pk)4^A2*_sGy zS!d8dEY-#a*^E2;;|ylxQsF}LjrUA5Zj}{yMl`%koA{pfy1E+0KIIqqu&wb#3Y!^) zz5mUQj&0NC-)Hw<|Yf}}2@Jykz@vL8{;1xB*FB@k&1YPlqKHBlTzw@cY zlD^J5PaqSB=Q-yC^cW+3rOsef3iiK|QS(y{U&eBXIkA8FfK?lyhcfptl0_YHK6u^4 za%Gn|9C75^2HvOvl3s5xH=JPnY;JuE*3h*j>@MZk28835geXx8FzR1U1HyN=A#|s_6FF&&Hw5xY9JR9JeNC zMI&vNFs%k$#F&Cu_4>inPDSnxv4&Pd)umh1-!^|5W>%N%)>IvKG6IcS-ws>BDhxT& z$f2ub978IJIMfPLnDI0vVeQYz8%cd283ZZCRt10B{1adTx%@q>fzy3k@v2-=t?jsc zLI&o{h}7BpiuqLfI^8vlNIQm2GLGP2c=9ZX7g*dx0XroyIS8th`$l8c4g7OK87jJ| zWx#(i&QuT|jq{qw`M%(N$6X=*=r0Y6@@EC*Y|ksSsjiRD+Hs{Kj|f6Tph}_8xf0*$qtWYgKN$z zsx?Q47Y-$&78_KnjxA=XsKqudWFsSo!T2adEjH_DZE$21TUucSEH(@J28VMCmPRc$ zYvIuR(Z#p|8nxK0EIX3Uwb-n~N5)38ctzK!#b%9-j?5oE5>o&o(uuwrTReYSD@H6f zsa9PauEzCb#6&+0*2Wg%wsVt76n$v%@Z#Y@#Ka&OTpU`AhaMv)iXN$r)#4$-h($_P z4^@vqw<#YnG3qm*o)wD*R9$|>JaVLZ6mqV)h||U0Z1~XFq1+0Ch))+Hj?9nLM)NCc zc1wkIqYYqacyu@>__gfG)S-W6WN37BEUx6WY&v;*I6U;^$e`;S!6=7OjqVpkVEcG%(S`+4aP;X@J)b)Ti__|5!&wH*=lL1{;mzcrjn#k3GlO$8ph8rU z-pv+J#22nSD}ak8fn>R!fQd`or9zmvFirq|7UHI*qQHOCUX>zHGigqMG>1zLy@^n# zwx>fy_AH%#4wO$*LI|@ua0@-6T*H#78n}}dN z-Ss)bLxSXZzLOM$$(Xbcs_ejU0Tc|@1MkQVq7OhWDViIs&3J!Mkl`>01_KQ9H`!SR zb1uXm(eB2a1Wu%>C=_M-`Z5O)>P>X+x78V()p(f@PO3~Ue7VyLn z&@g})BUl#@6j39kc)s@)7L|o+U&ocfrihy2s^Uhz)FeMAfP{7BJ927nfa^DS^f`Jg%WzAoBAWeWVyvbvP{a z;uP0gMSc7tSd6~S#ssa!P{Z7*1Ax+iE&|9=NdjMufvM$z;D{O~7{(4x3|R8{>8%)H z01$@$-db}Rjrmf$h6WJC%FmkIx(uKr0O*^pjQW2FICBQkEMTa{U5*udz;N=wWAr0k zTWW)PH(D5zs(k1NcoTkhzD_hB$MEX!Zz`p$lP#9WC6*bO zk=|!?NC^gR?rdO^1~6%MKaJ+1Neh~Q4;${Z;a=+4y&=Y^K#&SOz4{%LLUT4sO*Nin zr{n=@&6!Vua21p`<~v&yY}(S-BeTiQpRRwx%{+g&lhK!_u9(cqMSQ%GqzZV@0bR@q zAfyZCN=y*U0*A>ugh>)(vH~~P90~x_A0hR|bJ6ZMG{_W??^uhvjJX9WCa+TmrbRvi zs5K@ZhcWO7Ky5Q#sN(E`*Aip1Th}LNxmyoj9`4WCY4^wO0GVC(DGT&S8+Jn@CMSP2 zV?0S)6PU9orQ0g2!dj#BMDMs3rZKQi(w2!V*Je*tNJ0l<&N+<|aCGupS>2l*c=%!1 z9iWkZScmp0h_HzF2T3=9vso)xvCQqLp1U1YsvK_ZNto*7{UU%aG+>3=#qHi8PSqbk zWSL!=w8xODdmL$P+TL5SgQLFbw}5|6bLY;TGccuG1dTRI+$BMR37QDHJ(9qejzNe! zj2SynwAZJC4mRC~%`nmFckVn?i#EvdRFkkX0;ms`{%B4ShnMRHUwLt663h0^*4K8n zUfo0ecot>?3?QDH_``+K~Y<+KM>#w%&{b>8%-|cMu z>Gr+1w(q^Yeea#^dq3X3_xG0%R@R@JJTre4XXk-Ma4l}*>eP)&Kz|FCD&Tq@u6}X7 z0T=bQQ8T!D#PuiC^Agv~a1DQo>n>bF;@X01SX^I*YeZbHz%?qaKZ0vaTwj6fkhs1I z*I{wJ3fB>Fy$07&aead(9>w)dxX6n^+u@?9A4mWfWqd#hxUNd*U%pTd>}fU|L3kae@rJ;7SIWFew7*A{lJp_?yoG_@3JvM_PhUP$$t0W zE!pq>%#i)V_YKuQ{AWY-5C6r|{O-G!=6CN|n&16}rTN`oTAJT|&(i!Zb0f{S-~9); z$YNoVo3HSsGby+wZb8^47NBWogfdi=~|s z7fU-WE|&JJxJUp>nr*+!W}guk8~ePtehn7|&bIGyw4E0hN81JIb&}@=@#DDrytp{- zIAXT%ab!`-WBV8ELt@fw-{TnLYvA@hjxmm>?O*&5F3PBF-{XHMheX})ex?I#=PnzI z0rtCp*3q?n@9R3c{^PH8Xl>u)0L9SSx%+D!SljpPz}mjYp@@O?yMK{U^&fwuLu&gT z2c`}w4on?V9B>#?zx(BQH^4#v<8NhH{qDW-Zay_`|AK?#wnY5CA7?-C z1TaspYXp!|BS2@U`%xD`;Di{Cj&K5Z2p0?*xnS-| z5&^4|ivZHu2te2Xh6f{HP`C&$`UqDttsusS3m)*nw*G%u5M3~BahYI|&f$*0I9MuO zoTtSHbKm(az+i0U1fY?AgW-~a?9`8wtv<7~f&uqwm0-}@$A2>i{DF&%|O@6bUKp^`O{X#0bIql<+3Q#w$? z?f3ptTw0AkS2xmpBu*0Sz3296ESOb3&vmY};>< z?25z&&96w^-b1V_N*t7YMTql{ScZf+|3C+cgYi%o;=HFW=>){DOWi@by3|S%vR2=q zgEW8mDIF;16D)F9rDQbbs+Np_b&VN)f{d<77?z`J(sv(V!ILunoel>5D;?4p5OYPS z@jgho!m5A#3RXkO>3up_VdULl-9CPm4vvENLF|Ua{t6vzCsxX)v=a+%QUP`>}t-;D~u2V+Ssci%~~63iw!(kwV|1gA{s~ z4$|XS63vVfNp407h6df7KA?V6MhV&nhm?gX z7sC)~jdb`JBetdKFf8DbPz6DLAT3e})l>{!S40@+66#p|iNO1{7BR&Q-+gx})1~uDCLd^Z^lJ5stfNtnghGBL? z7cvZ?8C}HcynFD_5_Di1e84{djJ{-hpu+W^+{RDFk_Fa7pC)Zvj@CECzl5C zH$WLIx*=MCh)Q+Hs)cNg)j8=}FxK zFc9I=YG5qU%{@SzvIk($o-}`Z07mLbAq-Dv$Dcq zC_g7T;S~FvR2Y-uIoSg+9G=tl2*iF)Vq?5LC+);Sdq&!cjy@yF&zJYkx>HL!69WzGFiZo)$>{+k~}YMh1XeGFR((LRXT`^VTg2A_5h67bD9pr z0xk)~Fgm9RFnZt;PYkkix(7%wy)dNCNiIlxUK4%4zZ8YNs1N@F3rAe2T< z7i2}k&H;z?9`+(Sx$=YPbaLgFB)alrpj^(=LD!vhtyQD^f0X(P_1ilh zC(e;DfW?CCr&(fMC{nHpDeD|27R$`UTdW+-PdMAgOpwy%*>4M8??c8-&YL8 zLHWkaBDBRDop!qW#^8H>lBv{hGJh=kH>Oq=#~Xzk%m05s$HwwMFj$^hKG5#75e_8N zpA7NO|6AMn{}>66(%JvSamJ&7<3E{Hfbb{h;Gh4G$x5?4lJ!sE@aKOti42TKN#t1k z^Zzx8^ovIl|BaFHMEC!s7xJVT{>d8E7issOtY==N-G7=)wEJ%W=g)td+88&FQXAOi z-~NM1WWs-Vlti#EPtpXvmM7B$3rJtI3CIp!v zxS`&_XH{Y$r#?xLD&@tGs>NtfSz>?(EeR9$>2rTo)baV8N=8O;Cexy?R_+PmK9$OKtpRadm%U)tL}^rg9jiHE3x~=; znOJ|Is?W8dk__=s7dypG}lb`q$oJVzLP`bDwiwds-am!tY zPL0{EhpLg8)S$TTlSCuo@JMuTlJx<%UblZ|dPR>_k}-=|g+FBh)%I!9jF-L`g$^Tn z!7r@{$X!f4m6yZlHz`NqGsRC^--@a;+-8f@ab%}KExtq)ri}gYC@iGNY^BQwtOJIXC{9w z6|cNh7G*CJIy2Pw5Q!Ix9YMb-Z=~UfR7MqpdfoO#4#zaA`0y>~Y|L`}&DqFAraqZ= z@DUN#SUr+rC1bB!h?#xuqT*x3Yf-G`Q_hPpNVnl%B?j@L$hMN8Up)=_Wjl>mI@9)2 zzb+qY#B?@M<^2~Ek>7*a1m*8tBcgu~Yi*3LHLlBtT70)!8`s9%$wx9bY8J3)k8y88 z^qrIZ61Gq#RC2rh%sI{NMu&ZXM=YqAK>3KEZ_H%AM~Ao}&_(4IkzE73!?Rt?Ak{fx z21nSf;+0FrqKY4EHC^@wRT+8hz1B^~mqI9~0YByRB9b1b6`RG&8f9t6gI9mzE<=Ls zqQu`(v177mRm_f_T(V@lELkhlwsRq)&=~eQ6=v^5%EuiXc8{#j=$4x~^LgB?HLo%C zv$^a+kjbX0=G|j-4I`!pi>ZZ$?!~HogYgteWVCz|DCXHcNFfX`N3lR62lt2)l}(2y z$4!*QPXSI$^!B{Q^3_$C=oNpL&9)a=zTX2FxoXd2tN4|wW)aN+eX7T38pQ3d#9sI% zSc1?zUVAW8ZDN{A?8`AlRk6-iKBncd8Zevk%_%7LO(4b7o_JtY9YoQXv+b&iVTMo| zRdf8q0Hm8);j6tN^5UFW7N46uhbNXJF8gQfzSRbC6m!`6U0BwbC1yz)XXjd^Y=@du}(Epazk z3!=Lt&h`)+Y#kb)p-*beR!=vKYL-=f#9$R#MMl{%eQ|0-Nx_lfSgqoN)aEo8Sdb`1 z4+yF68afavWoU_x4r+f2Mzb_&=U}u6)k`?DIzx^??4T~PTEyqovSMW~2KreTqX;P)u){NKipfxGU4wA7kN#v+axkDa-BH!58;v5+ zvyf$~<8!Z{(m&5AuZuD+*hW-j6uWB3ZS}<5Y;1Tf_{=_7=aPTrv_s^)YH?oWxRiV( zWN8wz69t~;QeHyA6NR>hdJpCt<1u%-QMrF)8eEA*K~@5wjx;NQ<0&BCo)L79X~7c4 zK?CA&-YAd#l~xof`c?qG_!sEcAjQrGHjZdW?m8%-qm-!Mj?ySCq2(YqxyYr`)%qop zvi3;1ls;{72GoBBk+xut*GP#+G^KT!ZFltwArM4o2_jK7as(tj$Uut&&fR+O2?dTM z8B|tDGJ%85$PsZaafI!yGZ|#CAW^_IT2qtyv`y?>{3ha)#n|aw_h^Kodu$_O#3#>(5PN@(di;2_VbMHyYDqxCss1LX zZ2uqUvJS1@d|wrQRk@DCwO7yk!q&jalA8%}vVAH&fJAZHq^LDprUc#xoU$vLs#XEb ztF#V{GFGvb{*svras)O3sMw0OG`9q3L0wd`%i`SeP!y&^*tR@q(V`#etu?VS`~*>` zKcQMn(ba!a8n9AQNjF1@u~syz1WFo{bC=|F#^E{PLq_twIyV=5pH25_O&=98j23ZA z&XyA*S+jq{+c-)IS@JuZ-BOC4u(q0T4kP28T$CORN^S*b9=H^n1bmlUvX~=4SVG$L zc}!@Vlr4b5KsD+t;VM~VgE?w9-K>5MNpho&S2KSnWY|=)3~S@)ljWSxkf=3d%p`%N ziIUAy&>dmduvH=-xu&oObVdI7t|D07vZXvnEip2X&h}vV346v&sGdIN$uRnEom*5h zo2M~>7eI7r{rb;ce23YN2nfga##@b~ZI;FoOF77^42du@iPi%YfPV*@MC+aHdhqR8a}!B-Wrv@rZ?S$Ih$;cuC+Xq)6Wbj zKs{q_hpDY*@1tWiq;)0?Ag2E){B#(XP9=XB`DOL`>Zc|DHh+D^^Y^34;{E9sjJoCt zr-vD~kW<-B=LTi2yfP@0+uh;KtcwYW9Ut1Tv_osslr*8RZOKW)>Ok)q zf%PL&0}Jixg7%Fr6zCKkG(B300HwI6XSU*}J8iVd>rt6AU}Vn2*#Z3oSx+ zOtuayaGi#jJJni;Rmd8tc;zc>%o~3y*Q`=`pF2#;SMD4Qne$2ElUWB8A2w^4{q&#W zbLTU*pk_t*!_`R=>=YYA0Jt(M#ulKE|9d_{_dmtg9?gVuW4U4md*l4cDIcaVN52w8T?J4gGGJ== z!#rgDg;3<{4f3YjS>*z~UhID@ryE7fJdgU#4(=VrIIcE2?5itlL6xwgg1-AZAxtDp zK!Uw@(K+t5wO>~H*h(2Hjv9-!iix?W=gTTS+U}}J*k3Ybgx)AFIzna~gPQe`p{hK) zH!Z74ak3qf7cq=-w3~~Qm`ys`9!@m_HiQSQGuo0+D2H9_T|Gf3Ndch-(&j;H1mYa^|SQ7JR8R4R$8d9zfn6l-CfmA_giW{SQ}Tcvo5GgQ>i z!h)8E_hQAJ9w^t}f1if?lYQ5&qbTg^N}2fE4K0)87;@8psModQ!#_AumrDmn);P1t zS{t*Q1#KHi)to^L;%a|*c~DS$KH}aghLFkQlgTHLaCX;^E7+YUMW9ezE~Ibi#rxiL zi@O255@lkX##pa6a;4JWa%29NzEpojf8LtqpTw|)uv3<6HaG0|37wjBF`{_~ducTd zc*OzG+8DJ9!M3`Q-IrovE(TQpXd5>eQuydlQW3CbwyRtYPaJ>QHctBMbDE)SsrCp( zIG?*MIa-B1WVm30#R-S9d?K+O7~?CG!En?B$}v|yI6gm5N?#^_&I@;}k>ZB^Ec9Bl zzDj6Q=`OU9pEY}cJ%4UVERcn2caTMbW((nf^b%WYkvi)^k4#nQ&HVq5Ns7LHQm+B^ z{D1k6FsRLGAPava11Gr8cZbpWz87;hiV%TU`S*b2ccrvF8t*)u9T6cf^w^U3d2 z;5(E-ug+$d4PGsEcXsN%#i2W!jF2pIE}h1mR{NsXQ5?`PTORv7J#Jjd-nhfe=Ut5J z!$d%(TX2O;x(%Py%aw=L%|~_$3fo_^*{wbCzt7tJ7omTjkxhkjk=1H*IakTgpvd|A@*EjI-``)xXAYBWJ#0uizh1*hfEe(4QIYDd$2}O9iX;>Pk}*5zR%G zFJ-FIinxF1cp5=w#p-HFMSL{;bz1UJGTrzwp#_}UINxg5F1Q78Bau_;q9#_}{auj; z@jPSXDzUfh=V?>{rhW*Cscyv`iD_RF-_blh$R8;rmY>&s6kn&vcF!3_b2R*qqrc*@&wOzUEY;1vwL6 z$o9@GBaOY9``SDI+&9o+`Pke!i7X`(A>wW%2X2c=B-xRZ7}6*Hz$M3v{+u&|pf~ti zI!b>`y%+7IHhL#|=X;DjBjQ#2#vbgP#RKWFuuN8Vcgx~O9|JtFnkgu|wAXH$a`t8F zYkZE?|7(7Q+nX~}@4UgtFf|_duqES_K}_Xd;BFW3^LaCO(HoxUzBZ5h;!lNR0q(ze z{ub+O>7_I~W!J~M>@qcr=DuofiiemN@%evey)`-favl96T}Gq?a>q^G6)+1gq!#vX zpf@vP1G~0!PK#TDk(UQ7_hT$H3;987ApT_` zHhX5*h|Xj-lk(-+mWClFJjF!QgxuHB{qX>h_J^}VmN>P=R()B3l5iqVo(r8!0vvyB zp?s0X*)RWiUO@IHU#_E17(cSuadon1yIFhp9Q|E6O>%>U`sH=hTu?c<6Q{KoB<#1% zP!}IG3$97uQw4f=j=y=fn5?rPXt)XnP5HQv1N-;_k2Lxh-8~{O34PFNvJFLtSfqx< zrSa*t<^p0u@w-5j2+@Sgi{s`Y(F}h|dM?XNIs7V#CA;bPI2`@h>S~1D;v!oe%A}zu z0^-Me4gL)+e?&hXa26%5XO5z?x_VgSY8QWyz6o(4=PX->^0@3i@ZvfL5lu^SgBjIf zcl{trRbDwl5kZuS?;W@f7~oyhKYlHoMVC0X;?g2qQ7qV~1YIcU;kqu3_4bmlZ0Od_cQ;v^_3zPceRE2bd05n&2&B(fIGEUc-Kh>}9l#@q z?hV@wWa$G=d}-B?E-GNRv3M_K%k?22keR9naO6{ZPpNH2$_+z$b=Ctpuvj9Abi2{0 z?M8i&hK%sM`4KplbU(^a|Jr{b4T*$-<%ez$P-O-!0k?I~)acN#U%z&$;ADak@=>xN zYnRE2%pwXacXQjD`);zoudecVk)GjyLR|^AsM)@MFJ4C{xGQTgrkXzw^bjx{(+dzh zp@}SlUQdo|7SMYAA72XVMMyYP0YXNdzWw@vPxH5kGmkEUkM>HwAC-T_A<=poS7GcQS7UPa@C2V=DumW{?fM(W=yd8Xy>U9z7$r*MkfU&#;FB9poIu2B zEt*mt8H7;2cKQ%oHKc#Hmmf_RWYx=lEQ>2%}REmPDFzc0fdT_5Jakt?CAHM=&<^89G; z&39X$_84P%28+t9DbwT8Wfb2yJ^#IM=P3>E9|1J!P|pL5UY)i+7`U0LMB7Lgp&yXT zL*t`a0@T$~;zfUs$3eXS?Q(ftoFZ}&0UK6PAdSxjk;rU#VRd2~qh~OkZ#F+8t-j|%yJpSbN6Ibg)wRKrRX>2(Coxt2 z?BjVXBN;9G!)D^aQ&GN>OXj#1wV~^y$m&qB_|(frlS+Tx!WHRLf^(aYmZB9FtfszM z2^@D|LR?pgzr;avPs8G!%ThV0)1Y7h(hE|hxMnQ8d{h`B1jAKmIjTT9pHbB89X|+5 zs9mt7JE+{FPigd^1)aI}*GG%#*o%u7ldfEEO6JlQ1SUFknW5t*YzdBAe0j<~WWU|# zQ0GwWxJ!Q`dx*ZRC*pymRw@7qvviWA;iM!Ih{dNIFffVC65?KkpjoB37!05{te1_} z?bX$Aa&l2F0SL8W0Tl9uKduh{xPMf{Rgp}YgXR$CO+h|f-G_%`JrAM+A;k@RIwA1U z;F>=CBlq_FZP&5F8zS3BUOtjIZIir1L*zT~(-D8C-%paHa6@!dCL3@_?0g-FQ#4g* znVdX$+!MW5!0*^SZsKIV%@@b0U@d6qW;#YLgl#M9_cd~QYwcA|UeCCq{ z(WxA?;GcPwvyV6!d=uJou+?g(xqNu*Iz>0qnkMzNmCN=#t*wzo+lSQ zYEB?5Z?2tP22q_~DzrVfaTh-3ll4KmxDqTzo%1|^G3 z(|$Jjur$6AD&NtHYT6Z?^!f@<#^PzuRZJk+Lc7Da>z1gfd<5%Irg5#?aC_W?BH8e% z9Ox(pHqKiM zuC*aLBscfA0SwlqN|V1Ly|cOPnr5&;cU{li$1_EG`>bVOF12dL7EUSUpoXMu$e`id zMS8IEnjP%bmFc+sJFlC|_9q2HTcyHJS`7MikwWgbmnXCYAUx;61+?u5uUYg5sxC-J zp^YRxOMzL)UR`BB+Bstwk zc`EGH%j$fszi@42@$#amniXkpe%z13fD5`iyBTi%yx%dyOU!wLx^qLQH=f+0_3$=EMJaf?N zVqN;g)OfL=0vM25s%Mc{*1(U_ZZ~20B^-2lvw!#bg?iz#D-4%*DnBtY!pbOMg8;*1 zG^_v_HjF?CD)ft4ss#?qwmm~FdD`~kCGPa$hoNvb&j(Yz(^JH>#ib=Qyr`ga=L$N4 zA;RKu2L9+fdi61pg9g0s_wU~y{sBK_@@>~JypwNya!l|;U=a1$7QIZ(#_rh8YN3Dy za(}9+)?}GGx`t^nZNU|i#)`C7%#7jyWJB-sa2ljJ8YAog%BWC<7aPn3WSJnJu3QKZ zjKVz=sP)C;M8@>j9G@?(2-3V&L78(512I%x+Q}8 zwe+FiJEaF7V~|LxkM^0{Q!%wMI#bOStNG??eCb@LUBb_IPz9bTuA^^N)^oB~lZx1= z%$%;=LuBShW=?kp@JBz=ic_;?jB7n@puK&doPISz1X~<2Hs+7ftC$t61{)?cx8Ka?SI|V&Fz)v z@9tkF3ij7ep1?}CV-z1Up4Lh=_xAqV`>s8CzQRGzp-*`G_DB*6Q~F$#K5&AG#kJB4 z+WzM9-r7D*Cy~KS(^0CSxA&FL4nh@FZ3hBByg!jxaZMJNcz4|KR&l9Y`xl#9s=sZh zk&rO^GoM{GVm?-U@+9d^^M6op^`LOt2CHXE1#liIIv6Rsu9QT(zHj~pm#x(F+xgyo z+jsK~sNWZL778w%qv-8X(anWS1}|?JpPy3S&p{;0Me1Atw6?@$&DtZszkmP!W$XI> z{r5FzqD<0d|C)ppou?g6_-3}^WyFQ~`zZW1FOj11U>^M;?7p83{eO3P4C?&=J;vtj z^udLYQV4f8cmrvj2+Be)rk9r!*SF+AqP~Q{O70 zs)?skP=^{&pCV!*M1MkpAtVya8KL_SSXs(%T&EC;v{0-Ohl97|bqs>dxTh-r{Fc>=P3M0w{)WU$<1++r9IV9R*+ka3U9XVYfZ)S66rI{R{ z2LO%IDf6C&(Lex{>A-L6nWL&oWmS7rMK_F5iLUhOaIJQ*5A`IBuHljzRiL~@-{_wq z!4P@&0m+%j#Q646mQ~Fb>@>)8kL8{86?<#vY_5Zb!ZQJjS+_qr^2scMkN)`y6^P#R z{4Ca>QH&}5dw&?zUs?z~wLbOdk*tIe;9pB+0WCj0jiOUJk*)^ARZy7*`{O%f$;Z)^ zlGLrROhM}to~T-<7xs1hR$8@+w>i}CSwdr=6%QM&UI?wNEEV>U>3*nI10@NST$)3L z%#Ekex?Ap>7mA_Gzx8p*0R1z%_$71FYk@v@1rtcrQh#1ry->dVfEYk*cIPQ>h}%6C zZ6yt&Ak4PV-x7p~L}?j?oS%J=x}Wp(bd5tjrdIK=ahKdWr*0aLn}e^!jLz(c;}lTb zI!Qsr^luDQ9LPNa8G|K0eC%;@8XVyO;V{ffyN61>vc&;}1LbYlVU7hrfT0kpwB)?8 zvm|k3Z-3gT!EQur==R;{W`@<6)S6w;0A7=@NaK822!+qa{OF>`E>Zbj7_Od%&Pw|^?}t@QOgJ~KYNN~q*F`UVN;B{x~B zc6GYNa8qaOK0;}y!DV6WYNEId$2c5zWYL?2!eyub0ivkiIu;K#+)7Wyap^{*4{>A@ zSJ0-}XnYgJA|gUlxj1W3Mh_eg)hrfwK;5-QYvA7d(gpOAKHxt>>p&N@)qe>CMxJ|) z(0{s=H7YG&6p2NcGN7t%D(^n0t8l5N7UN+Dj-JZ_aejfJF|JgP zqIG!?wGMwx-$z}pH-zU>`wp=7KDN4_1%Fzb*I90o2m;*F@KPD5W#}yRw}ugq*iLxQ zl?fxjFDQF8+o?}KhLha={N(EK+bek2-EOn}_UcKDdz}kvA<-(2lQ=DyAwwuki0O5Y0}0%M#Dn63|5oX_77QD}M!| zPd2kuJ43Z$31k7Tv9O#p6uCycn+6AjS02otLNNb^3a0X2MVqOSa<^b$wJSF=KrC1Q zML@d0lj%6m-^NLEM7!>q+sOF$cI)JX+YaI~ZQbb@72=Vp8yGr}hm!LAp!s&~yBM0) zc2gWU5jk`I35!l2d_;6dhkt-MXRk~qN9upBBsK^J9o@u2)P|3T$6`1nylasISW-3k za{Qr0)m_k{DC|j>Q@!knA+~Z7??Mj>2BjWkMVE~h`jHkfr->)Yptx2ZpgqnpOyKfF zN93d_m1kxQCe}B*W+Z-e>1(O-t<7nDi2CYD;nB<&D7R*(cm%;&f$A`7vK^23YCC`R zCkKTcxIpI^q!~rQfUrA;1VvhpGTsFj-`hyr$ z`ib}|>~4?iQ_>PnL?y|ivj-1sHR}BRW%GPj&z_J*&tMrj@?~@7+(St(f5|J?WINY4 z;gVqZ22Z&q6Eu^#V4gCNk~km1j2RyWhIYXdTzt|RT$JVsv6(cM-$gOIfoFe@=qxxR zlY#>seWAQ=#4dioes_j@_dCCA(s{YMSM1GMMt|$QAkTb30EGL- zZqa-xXJ*5Vz|aokvO$-oGIjb4r~^}GG;azf8A@doAUC0n)Ck;yV&?8J3Qxh@GLVF( zx!YLoGQXKR3~}oJGs;mZH1vPNqh|E7FRV4NGKY`juasQqmi zKjP}aos78e{PERP8ZD>$k?e~GQVzidI?&=K_NmkAhh^{WDqgUS38)Y|s zk2_TFN5f!QD$^_}H`w6*^Y1Xmi_91=WQ-TtF-l04TgSJ2^Ot(T1TF!Vm#M)7CjmE? z(ZK{Ne-9{Y!k|#X0uECT6WzY^P>?2GGBmg-c%F%`@DENlFLe6|(olayLI)VWU;V7s5fli3Q=BDygxo2rxnt;HFZtV;$%B8$2anAQ7UBpoTkBhyAk_*V*%c zK(zF;G5oz`L!;Y(Bj+|2$1qV^4a}%e76J>nAsGxldkZeT``Z6Kd6{*xmv#v|@goLu3IrWI%{BT3EKKcnuvTq$uMXc@R<;{Om@kDf&M^m_AB(E4kYKV3*g%1WPH5XZ??z z3|E)YTTvbrR|T#{X#D{1AMtLpbDEvQu|LtO*3&OmrKV4Mt@=}y8MWFE)Ce* z%Lk~v;jy?qnEvpgdHx~p_P$JW^XuUI^*R^Xz&S*=ltwq?)o;4u(gqMUq! zyXAAy?vyYTgDH&L%!_l?WeZ_XrVtFYfF#jfYJKJS`xkcDDVkwYp^O3EIG4o4u!D1U zkyuVpL87sGy4^K$F}!>kHzXD)S64W~5YIPQ=SCQOKp)rx41W~}(7beYO)gWLFx-Tr zg(ah7-LdPWIh)aFu-=?k4zEbgsUJ>Xcj|NVLgvL@r?taC6)i)WgtOb2Er&r$nbTco-e?TD}8M>aAc7y&s1j5z7@%|RsZd~ z*lVemPZuUZg@5?A5w)v%fm9+cd|j|+Hch-7vg(8nH1)A5yIT|&Tnf_OUtFRiJ{{z2 zrAm5t;F>iXyHWT`VC}35z$Z7qRlQYkzqWje#+qXah0H%u*q??xoNm zN^h6umRP$(KPoYb8rt~JGVesLLl?s#3hmemn@4Wvdfkw`u2Xw@&YIQYv^@;2OZKQY zz6u7D!B)20*1F1}Bq9zwIP?NI!0*O2kr^iui$(^5Vz3TG5r^rAFD%wt_R%4hYmoA( z8rXaMp?^wM8^W2D7;A|tJ1l17kdQqtfAPRL5VuDx2ON8Pn%LYe*NiS3$J-Zl1udUI zc={i@h0AZ9HsU}%wK%lCe*HT2wK~;1{{ZiAW@cJTh=SJB-nUwQCO4C-%<>=BGc71u zkq65F)LWwCSbv0tiiRlXlA6He1-qB}?H-C9d4Ho)YepIHx1l4BFY;V{1T`=f*?wD3 zt#XkgPut$BN3!7*7Y}Qf(zPADQi7*ID!m4zC^+jyxjZ$ykgM<$Pc6*xAA_06m2>5( znfcsIdtquW$G_woUrPE-e%ht^sY*qEey@~M6_AOi-)E;DmQAjl{EXJ4KhjKze+ME~ zZ-1SoyUC^AaZeXm?Py8i#J3?k^TR^0!*~AYnAMAy=K6pL-NnrYdu+1Ab&k zGo|WO`C)|>0Es#EXqHoj-?%E1r#~`-Gr75`>ddVER++>3M^$E#-!V(cEEoOCf|5LQ z(w6?1)vz!%TbVV#ZE3Cg$TXd4v}~F)O@D7bnwnt*jN@T-u3eg%nRzJxu+8$Bq+|<0R!iUn0hv}89T{pinfQM!JpUy(2shK%oM3#q}2B`B>4`;J5 zbx^%!nSahK^PO;+pZ?Ef{+E~etVLqgT-8o#wN(B1D16UVzXb2xkgFew7Z)Uys()Wf zk8YW`)y%}5F2D{VSdXCztQbndi|af<8Q7%Be4f-plkD;xiK(T1p0WaVRJOm8S{O-I zJE!wr*H@`rm-L(HzgiV<@foyVKV(0YqZ$719*&~D^?G@#I)`K9`sMQ0n_4+q-PnD( zx%{S9iC*r&ys6Db%UfI9d&_$p+kacT@1AY%yx6Uk=TnKhd)qt9>ua@YC6!D~%TG7g zYG|)-?7mxD-PqgMTCWktBHDhrxv{%ftIW;gIsCkS>2l6QYg_tIwhy+wihK1f;Sn4% z_^fgIssB#7YG~=cgRsRG>Rmp%k6Eg#6PF!Z+gnoivz;~AQ2TqeYV^y-`hPE*{M)NN zigx#wU%af9tI@{R^ICZ>+TB>+THbrLLoa5^*U{^C{c>k*cjG{MwX(B@%_9AAb-gnm z%1Oe?_U85uqfAn^UoNj~>;YSC!e*$H^=0pujg{wHYrBlGq6sc@CFrCrQY{Bbt834e zUv2tNmEcoSXEm%u`ctdU27f8LzihvLx4gMoV*#x0EWZZ4YcFfF40;=X8*chvY_D!S zdqYET^0xMNYY(H9?U#&Z-hBz?Tsrb>V{_B6{gzkuHh%YWI5)2a<@Me2$_oA4c)GDE zW1Rz9%e%X4FLdg;&X}e5PI~(8w^z%WsWLPB@H$!{dbl*ebnfo$Y=1wONzn%Fn*j0m z4Qi&QYWU^di{;(tBrUJ5zT4Y=_i}mfmv_%Lm)C2v*U^iu`sMo0@|)e2W!6~v=}VSF zw6p&7U1e6DEAqVju3C{7R^D^O0=kaM(Wb1KWU8s3lr@01OSf4;bJ5Di&Wh}T=;ik2 zoAvFj+JZi5wuh;8_TV~n5 z+gsS@q&EWg~6Jk{tmYu={MMti?dV3p~NcGgyz;aY`F{C}lWzuev4+@O_cb$Ry} z$q+qV`+aSbCt3Ep)HE9magJL>xqi8}v$MUk%VfS@-q`{>fLh4>Ye9@x37 z2`3f?$ATn2Yk$XsE~t}9;cZ=SicCshToW)KT=GFJJmLUIl(Z$bnoNgW+V^@gAL718 zo@OJCN|Oj$HIEgU7yDe5895OHDSUu_lvyF_4O&I$waCnHi$pb1W=8WM+tJsuIfj{+ zrkE)4RMiys9oI~n?%ruyiib(`K$3`G7$h#>G8SpBz<=|ho^`d#BdUV62v7;=A_4T& zfjP*BoaRwM4}bSuVw{TT3Oqv!(!7RG(K+~K7cNgz(2GnDtTz3mlkg0lQmv|>mrDJd zr~~|}PJ*V3;H3JxEC%#bMpIowvT#X7O>vn=FaiEWHyoV$Dduc-G*o zW;C;NK7XgE^P9B!B&|8HV@keiuVwsZCC+MZ{X2rar=rKxugx-@6jx9y;iS#h=5z=$ z3t^&;Ajn&rQ!oc9TeUfbvoBejQz-j)GAN`?nRSG)HIS~&VP3WC<~vBu)}sBFJV{d6 z^A~TPo7DNF<4GF*Ml=I_bXm?<%$nIyzsnn9a(`Ewui7+uQ|TTQ0rQ>8Gl#cK4)T3N zv)1P4ahQ*nA5pQc%`YS`;$XaAn}2Ak6t7CeLA0F8`A1_?O@W0OX)&FBp=`37Kr*!j z_EwjV<^{Va>CZFvx$VU zo+&?ZOXCj{21ZT}q#2~a`=SgIIiK~{!0}344jgEfrHZ)xL|V{8E(ud4QuX&6-P4{p z4QOA#4`V9e8P*qb9m|yT@r|;DpK0MF#FL4D754TwoWdaBxP&K9=FoTPD;=^4MSnXg z<>jU^=pjsj$tr>9^-^h~&|A@ueK}3iJH&<@^xWHkSYmk_p#I*Bk3(-0$^o12b5*)% zR9@lN3wt)j;r7AWBoL{&d(mCTkJY?QVZ^VRCO`<R7yIl(jhIK>r zc53=VaZzIGrUg2N%S&WFb;MVHZ+|b=b`G>vG>*VFqFuQrp4lZPnFNAq*MCtbYbJ<` zb8?64x+PJCF#)q=R%*ek_eR9Lbj2l0+J5y^fdqU|2k;(R#})4`;g61JRv+O>^S}+A zXyFeYD3Bd*p!qG9FuEeL!dtHKB*?A%C!$3cB?KRA`N7irpZLYK1sr1iNq>CLi7#V~ zXr-O8?OJAp33ltlD@sPopl*T`aXD}<0@d2Rt~G%j+V`30>$!=&rSWf~rUhE7lLVf^ zO=J>@L}NRdV0Km$$3}h-VOPEDoSv&MqCrn>!2J$ESmsey?;Jo4u0>BsgpIkC4Z_25 zeqg5D>KI6yY$om%Hq_t+e1G%4B(qpEuYEgd8Vyw+1A@341co%#{l0#;>TJkB?cPY0 z4IE;(+Wn-~gZ&$84eGRU(O<4U3u<&#bYB0UV**=W&5l(yAL$mmYcQl&<_#Sf@wE%+ zZ3}A)cj=@YwDCa4opf$ZV)WfwbQuZoAT>0 zLHgiIA66cbi*c19z6FjiuxxkHotzp_;6#-j`mp?{qOm0(`w;vlySkSYI#NPfPQ_#=*?mX;7_g2FkgTDZq<;SIGlS@&L<`$mfm@gRObC73m?{n)?5VK7qE|3S{@3;|TeLmDQxA>qkH|O0pC*AxKdQloP;zIk$lgg|Vj(951yQhcdL4JclKli$8 zoG_Wb;!NCW3X0Ynfwk@TYQUoQ9<8mr}Ky4Sx>il=e}{MNbO_1#?^^ zC#2a6JFQFEXsweRl0S5vH(LXEsNzYMh=6|VAZ7KFnonoQM>3}3b*hFnCU4gT5FJ}Z zDhDQPqjhZKToR^jvul+4eq7y6nNj&S3oMgCVmxNrGnWf&?6^k$xUsQ0eM{ljk!CP5 z8OY6_dS(Bb5`Wfwt*6-?1yb;-X=LJ)r(9j2l|XcS$HHPiwT!Kg$ZZos$EX~-iV+j| zY~s<-m-eC5986pZ;k);_zMj)utr@t_w`t;7n$^=Ce#6aP@>Nsx+l%-l^@Vp$f32DV z_|XWyk*43CwID$dIfU)mG=T4M(2qN-acE7?^ievZ4}Y#@eQ`}`0KL@eA)e@t+}XpG zqcPc|<_NUL2Qds?f=sJrgu1Z(i;c}y|=lJTkUK8i#tXA+daaij4g~pOuP9) zF5uYI3HhR!dr^E(EEVMUu_z|tM_Zg&$PZ7%jg%ieV{6I;zCiS2#XSxVt4TSWgvbw1 zRe7q~a%IhIlgy(!+726XMZ3_YNwYykv{b%hOMm*&w8Z0pitaWtn`9nM@+8l*rY(7# zGdX-})uuWSd+wtFu$h`e0n~)nCKdCfy`rx+jjq}>%}4zEjc*2;qWQh0L|>*koexM*8GLN!q-UnI!5>;0@@FogsXCAuoyYTw9UQ>BTJTX! zcRCV0RUd4}NvR)9v?k9c;z>fd+b<;bN$O1wuTy=6A`%8q!Sxj>b09)gqlN z>3Wl1>mI5Xx+YoRqM)*KL%vy4qBu>+Tz^@%g_7h2cow=gM_KaDnRP*4-^FkE=u+dq zreR)!JdguB1n?K3DWUizrvOf4&g#M!cRy9UtV*~mW|nAE5z(!p?>wLJY{ItoCJrWt z(N29A2Rprq3!Y!qf7NJdh%;xdu44J)I`paDpXlHWr$2EfesAK5gNQ&U@x;aAx_@}Q zi8l53`(!;HMEm-?J6ZoE?r=UuzfRVFi+1?AmcWV$)hurW;`tu!N1N!02`GbajE0^O zq2`r*V{iK~aPk(G178H+fRHQaK;9Zz5Q$G+-F^bClI}MFpFM`y>D8m@W~3j?--`T| z68r(lvLs|f@_`9gL}=3Wjp>(p?NhJ5<=_8ksp`ze z2KS;9HZf6Q!A(?H4_)>_Ya(Vz^d&Wx)K0y?#wbo#SQ-kQ{y#XEI(#Y>dK1G^gC`Cs z#h=0V$%CsaOdS**2gxN(c0(XgZbw6X?TE@=2uv3O%@gP{1YE^djwG;)w14FhvyP72 zD=m?sYBJEOKU;L%!hP_wh?EJ}4zw5o$xppsJN76Otnbt8VL_TGAo^rqc%%$zK^fT= z-6yRv{+Zk@Fx>&g|E!0w1NI=3a06pIkSU`b@MRo4`%hwH+kvVgk=vr!uPb$tG6tcH z*>hY~$Luz=M8@nh%{#KgP=AuO&5A^Aq*Zmsd)ZI5EN>cOJnE;~mN&}a*twr-UEW;& zuzh*c{H_PbdLE7KgNZvC4U3nYR5(9Tz*WdZcd}oUkAL{hp^?8}q5kCYM9+%|OHGC|`!0<`EoQ^Vn zP%oE;95usu1^rLPHk@b{`ExeWElyrcv^aX)*S>zGqw=*UUmJ^^)Xc~m zad)ClYF^}xKxd?evwtFQCT}<=@+Lvi0Nf9U7#$FkNQS8;Pzak;(O0(t{-;DbihBZPtgVc)=Q*JG)la4)7mfbjW@nb47rm^VHIV-($g1f&AE9k z(iXJ2R$F3{oC@IR7Ve0+#b!s`bH>aVjZ5Eow9Y;tu8`VEv?I{OectW&H$0ZrCs&($ zLgCVEG25)ZB)bjVe-!QvzxPbEW4A;6HiQor?383j_GL%nJSKI1Zd8Ij9}L;@r??V3 zG?3c579|XVPA1(-dJ;5l%-2QhXs_p%vMNuenN(^R>)^d(h5rdZ(jp1J3gEenRx8Xl z)m;ubZYqvYCfd>BXuTE_CG{q{4a$d;dHhS=I8aeCLmk1*-S z!N6hjxgY4q=mC`I$5`EFT2E9Z5f)Lhnw%>_dv5l=HqTc;k*0(Oo(OcfzRv|z*{D+8 zg9m8Eapk!`f88=c!a|k8cLCvw8+p+`QT?&$!=ILprcr(n18(0VMiuu_NyV?<_GuwM zoi7shKB?>#C>GulGE5$p3O`Npdw&|?lw?}^sZRV%8Oqz^!qUB|3Hw}}CIV)?$#Q6( z2z{tt{IImv_m&{%t1JHo3pjX#AFE;#PM&^U*_!=8p#FE{zN&fXYa7Ep=@&&U#VI8^ z-Y!9Zf9;C@btARRiU8(4U!KOBf z9NJj-THFixeiW^nGG%&uy(yz66_&DHY-y+ZnL2FPLbNy~fPOhw*p@vw(R>K$I ze3UA*wE@!Vn75uGSgDLLvaCmSvc~v6#txx(n zd=w=QH#tc!%)aLWqqoj6QloC&2T#<)e-y_ox++^?ItR3*x9TmJ(6}gmTrXFaTBUMr z#$u}=FFbF_3qI1k{m1ocd8uD38%_H#C!%A?8P{V13*vwJalKMqifx^}FelPw$=R#- zG-vN|eeTf`b^yjfVVHB?hFeUdgQT#>jWi6s(s zZOBS1C>D9Ow<1w39dlgnmCp~nyaeVd9P+PoGP4Pz@xGjvp1>`KbS?gktb&-)GU`T# zDzCM!IiceLD;OVCU^?}!f@t?pe=LRlNVyb*p*6iWd4{g-Cqyh(9wUTn=pg!=k{BAm zCsf1#Dbc|nB!DK563Gw`=rlQDcwz9MJikyb&p(_Y3@A2sB+SoM^zC6Z5bez)caWu9 zIsb56FskiZ?QBG3D5vHg5l&O0MGkQC<=W?3k0NlUhB&NZ?haKrNpw`@f66Au&=!YJ zoHJKU^-LwF59-bY5D+thJZF$j1J|^`BIIRA6?(!b>j6NVc)^*ozH%fa?{SOHU4TZ7 z-9B3G=9{*>iz^_B(A&csRt`;&kGOzJI9d486B1dN8dfRSA{e>+wyp9Rr)^lH=NWWw zbQL6?p(LyEdj)mMq7YX9f57@f3NiT`#pGrQ;~+9R<{osyG8X4+5@zd^IM%FW+DPbk zzfuB8(@|hqqQ}QytP-+HE*8WZJ-w~|r$cX)A;u6~3WRQjA`v(8C#r7hw2Xq=Z7aOh z_ODT3uyq?Y#yBk}Spda9u`<4#yU~2#XFW zx_Gb2@#=5ke}_qA*e0>%D|DjRF%>|jJ{kQVm)t2{;~hbl)w08F_z4sb71$wlY1z~* zyTCm=M%|n9454dhe~7>x?H$P}?n&RAFB-zm^V<4oI4Ori#}+6b+k8kf$_&e7l^2uw zqSI;8!IP2v4B2MBZi^kW(S3GeW20Qzua~DKe82qmF&flyCh>C8z(}e-jZ&5O# z)eI0+4Cdhh^)JUAi6Ca4KLqKY&YDSy zuryMFN!+0L_pi<4q=s)Lby{+y3bJgZwV7xqj@pgrCF|;A^vgl?=5@4EjdoknvugBf zHR>Hiud31hf0l*dYR^g^R(n~KlvP88?Y4@G_L2IHqcQtVW2yI@*gw*P)F--=dZ%yZ z-BOu!8oAWR!fKB`EAgpM?s9etml6T%rTkSFz(#giGTt)?1|x{K7oRP&PVGf;C{`kktfFGx6!DKzrbyoa$T+X3``38^VkA{ zm30dsR`AZ|Tx{Y^MnTIBp7sqb@ZX6060SCqCF{S^&G_{QD7Na*Ypk@;JUV4OuFc4qEF(v0KF40&`)VgS^ZDQv z9+1jUBbh7XrJd+p7O`Nz9Ma$iYE=OQqHk%498*qCf3~HHvdqFo0CE2yC`-zD%Ap)2 zvqe)+8WJP4bGCf+m2KYeFBIQ;^>H@;6vd(=6de=m(FMB`3P?~q3grx_xy`pccq2Pb zUrIr|+IUF+m;=TaS3vwaBnrP3&s0I4>T>?sJ3D*P?G7J~hG=v?wZu@zY0r><2J3vF zgJ)+Af4#84iag2ou~~@Iw!TOAnGjwX>^ki~ANTqoqPIX5;REuP#D4k~UIZT%Y-WAbBhWmFy0PSpjtU zgpG_(ILd_ZOEeKewEa=3K@i6hTXC#vEJ5l@e;s_W0u2RST;k$#CHO5sPtwLx5AfOJ zm%oNC@a%RjfHZh(VGuhv2k>$nX^hbjN1D`Vl$>lwA+&9``EXJSyF5s5Rt85G}Tg(5ttLKpV0SLe^`-%UX`AcU>1d*76o!Ruvf5MQQDp-cuj-)nyy_SJZ`c ze~szOZYf6CoOK|~~vm5XkLXPFB|=oTUXX`soeSfDFe zF`2{OI65g3Qe4n#K&x;Iu0V+?zXxq&3Kg@TfQs?%M!&h^yXTNM3wN3YfFA}4P0#|0 zO_vGirH4yrJgf2RSD5tyKB-UH=LDRV=i!W`=Q4dI$E?JX!qOk-u>JIBrI!?GfBKmf z*9=y7xt!4?nqFE(a?MDs)#ucN9iiTUpbsD)jdI>TaV|ty#Dc?UDcEW-WZ4hn?cJy- zvdOV(0P$=?8LyL>SSc^X<9=>w38oQHqI7|IL2^uedXtKErn^A*B?HH z(OVb0C-9uawL(J*(d(X`HRg76f1)iJ%BMoIlZC6yvFYE+%MC9_pFa!iycl{Hk$nlg zkt7PIHVbe`JkxaeGJ(w>y~;LXD~CCwXK+`-CU?Sum+kfv�x#mAThy6iQfMO zVj7l9mb_%T&|PVa7k*Ye{3WQ+f&jZPUTJjk$P=}Lazsns)~AiNc#2-BXEivM4yFk7q;%DQ5JkXy|MYHbX3B zi!ea=s1Z%oWjS4d!<18EylX7x+LUILJCI1QMw-N-1(=w^27y0lBqxl5z$?$=jd^3o z#PNKR2CYdBKoWqj=NxLvf2XUcwdhUeADDX;A5f(ybw5q$dj(^}g^^L#hgK6G--;Ij zR9Gckml!f(FC`AS&OReGH$WdNx<#6&;=ujef85b{OEAfklS6elH&^?hprj~szam8s zYf$iHs9`6pV6RM(km3hx2nh|(pj?ug*Yebe1htVUD+ha}Ck!iVf7!At%qTGP=}JUL zp_=m#pP=NKC=~Z|;wp0|DPkAU(R9&lj2D>`NKZUv*&dAZcQ_4d11@1k{r?25DoiGc#u-`v^PBiuNkDqOJ`o$!v~|7x&;- zFTd`u>95Oh@A5wMogpxE3p`cOXom)?qXY9R83m$-;Y)(x1PkRWw@tcE< zK2*$~#!W!P8bBH?fYx}NKZPN?)A)IQ`j6kTKCXx1F|^I;G15S|cuZ8;&{pF(5F5s@UiKQ6#gI4!Tvf9f0UY8Ga(j==7eRegRg)2gjQ zTLwGv!x=Li03f0&?8NDwFOYd^0Y;q>{c6)M8I^^~&KIH`fv&3wZjn(2<;W67Y@4py zxautdj^o5tw53bQ%)guxgrFsXSQ9b^Ta&?1oFtE`$M-l)e7&e%7rfq;V5Npa z)Ia`O4fA42Ma?>AS9F{MwmLvf9%>DMT5+O~e@RzofzH(K0uVF{W1OB5q!x)a*x7WfK zSY~%ur#n_W0P~syqQW1MBC;{}51<&~^AO)o(t7fk)&%fejndfPn5}ifV2{Q6^n<+? ze+2Sp@mqpzm@Duj;whtqLKC;3*)Y2ijE^W5=N?5 z78La6!dmyg=2!41{9L4(T&>dvFPT1g!Xx(nO`i zkrgAUm-=T^d?6X#>KZx#1yu!Mk*~rzH;`!RDKn{d%03A)X3SmUJUH&cSD!Rfa#Hjy z$^%aX)?~@?Jvu|YjRV5my%bBn(=_ZQp`mrZ6>wU;@+Fn0{sGaMNbYza6$NL%eIW)3f7?%S;3>(c zF|9xdocvJ~Sgc|k#lvLhstq`y^^Zy(j*0R47geWZAELK+0=0w=Mm2Z5`I2Ja0=s&* zoym}Z4B}X@pSSY7A6Jt$iBtxx7m)n%!L`l`#&MVW9 z7eh?bNz){>cqJz#*s$35f2;JkF8GjAQ;w&ueIwN?l&kF%V(NT@7!BwlYF~#Rp`(}onpw_NEg!lk% ztZ#)F$KA&jQCW`f-(8yXGpDUP9f7eviaz_a!Mh=zt zEAJvelhf+h8p^7Tu1O+2L;>)^AU&6M`mNCXRx4$R9h{@maZI2p^#iyo+;{NdDoga& ziHX9KHK44NMc;|6$Pn#uz@Gd-E7lXBPyh$t2Fl_L8+QzTz=|a5qwT>Xv5h@~hLg-{ z$zheeKG5(8sWbxWr$fNuS?aD(RVee9NHbGzCVB$kFV2Cbe+Ge|fk!cu`*eClDjejx z)kl&Whxaye2us|e4z7!nHq;La+I$Q7E(yN z1qzKpx7&e1e6uSwX^v;Z#3%|dS7A}pW$ooa^)epMVl}2KQGX%^htO|^0Lb^+@c+3Fp<#RvC-A}j)ewTlFV?AeGUZNU zqdij7(V9=zCevyR+k!;OXrCHPC5Rh13;FlNph&6JH5=x`2@qAE)z0bSg^dp?o%EphDGRFM8aD!L6E+ACDs6VNwSyi*3D_aoa{nFiUfB%k^GCn8^{EgTGZ7(Z^58Z)!wCpNw zXD)fWa&nh!EfQ)#j~^kXQlSp)M8vQLGe=<+r<=%!JIX_4I@01$C?PNcPYJxCES{ZM zZY`vp7;yPY)@x_W<-5A3I~gd@iG|MLW;w+Qj-K;=KW(CvupT=NQKwenwV383JD zfT_^0dp)L7<#1i7PJXYqG}_4F%Hal|YDwK44#f6|#w0Mi6gZBGx?e161o5;`RLp4V zSoaW9-wLHd+DY?h^jsZg!Jn9#v%R?Z@dkqq?#Q?3y9xDO92IYpvug~sK+Z$af5o=& ziB(*4$|6z%Op)3qA8z;i5M3aPC1ius3ZI1pKmvI+us)-*7gf=7C-7Xp!ah81W0@iW zZQO>dW=0E!l_@cUYmx4W1X;C-k&0Ztne?eba%=l}CNAh~JWaQXaEkV*(30v+$}>7# ztPcuw^P2yF^-A{9-{_!)QzAkogp|x0Wc%e#=5PtB_XehZY(-i`<8^-f3l(_ai|o0 zb^^?H=S$-cGzv^s$Yvh*zSJa;Sex>$^k~{wv~^4YVMiAu zcsUwzcZ75Wv}-kt)Ff((MfNPwGocME0C!xeA+ZNNHc93dJ6Xdm$&1OvuM&b2 z^ofB}!c`@bKA@Ojo-L>=Wtx;~5SeW<-<}#JG-lXR%73f6C9%Q6wM%hBxEFo@IEqldfi z9_}H~k*y5fjsKNOA#ja|njHUAv}B~_!irVv)OHo6I1YRkzl&mk7L334QAD>m_jvmq zm|}cIqcBm?8B_<;NVPPhX{k zM6I;sNm_C*&HFHA!0e}qM`_}%^hKNL_a3Al_-lIkI1R4YPD?&b-}^NUQ~4#0#JKIE zK`{PQaQwG}=`S(})xgy~Y;#pO;1mm9kKqTJFR9{JAFx8ylm%N!)arM$rEyuIzceO? z+>$aMuE$7Rf55j=8z8#Kwhu}cUT9cRyijcu-mslGT?O3M5{%CotkneIDphO^I8P*5 zbCtVs!Bp;&7F_rUDRzxMq+JZ+;$-ABHWXMXW-~ljYpZxQ(gWuRi)xCTRhMDGe4xlwvlg4_D`s+1=alAp#a`_yDju8$LD|v*8bH1ULFs2OsiPV7Z2PI}&TJx8$p~ z)7>Gfe~QitFtdD!G*5xv$y`vNnW~EJSVlDzLaG55<4+b+%~#TWYM4Wv>*LEMG+n9o zBla|8xX5U@8tKgf@f>2Q*T2G1oPoKkf*NsV?z$mFnf_OG$9X~#5*;LQ)*j{Orr#~z zm)21`wwkt*X)83ZuIUpJHAQ zb+uRWk#c;d zJ^dJYK7wmsJ2>>s0+j^R^%RX#*iX$U@v6Wf83wnF>#iTtgJdK_9S}>g{W!2d*;1p^ ze?(W8OV}~o#L$r~jk7TlT7Ocf!~T?$R{f`+5GJ+>bi1hvg9r1~N#Db`{!CU8j@_IA zBM6*dUYp9gD73Xl_aoh(rD4nt(XY12T=uoS;Sk z(`oFDvo`=T-T%;nm11FUyx4+c*TS1|f7XJJm|Wkb>yH5P)RkHWh63gjOTN^SFSX=L zE%{PQX3YmE&cKF;b#@Pb0?0)K&mab^BgHBR^kUiMAOJ4Cc!Pg@be={|a$5H}_uvm- z&WwBI>>^N=UydJz0#=K;y?nNgPb(Gh2CpoaLF{?16ff6RR)hK{EdwT}QUSHie^AV> zZBs6xwin7J6!JTPv)m5)$>oj=?GRW74;wr!pEtkq4<0*jo5RNP^73PIe@p0Dml!FN9iI_ zXXA@}Ly58v@5kBW@kd+c24F}1e?afK=8(BJUP8t<^WY9-}rMd zo?k%~)rfCe=E{-v>&nE z#ZJo?dU(F?Z*>;hfSqdZe{Eo8+y}B>Gq=Xge=kwrXNTkFYy84#^ZVS&-JXnB`AvCW zFE5&{uq_|zFWYtp3&_-4Kn-uW@v<=hwEoFSHi4!7&9Y>zdrmx0Trapm^9j^+Np(R} zZPZ-;=R$)J?2Btl%l~A784CyW#x!7y|4%A1XUXRm3gXwwGs@5MIlFR!yUZ7+0% z-Q_jdzM@xnY1h?w^cMzQy)@vew3I?ub=Q5C?6Ms!VE%dn;iEjCMwlf-{0GI)GyFKj z5B@pnDfA*SrV~AD!as^Z} zZ(P~^#XVjSpSyc4+{1#Hy+x+4$h3n@#@Y8qCXtTn=RA@8RQQ_Agq?KIcNV^8lZBmI z4*5>SkiTwh+G*gLLq)Ba53qVUux>TJ-ofdAWQY+{&f%JY;4n}K(muhQNqtgF+-$m+ zDFF7BHL_%^rzXeOe+t~vTZYB&5z3IgIcWL~NU-uq$Kv_j%-pr-cWf%{gvz~qJRV`e zYEE$CgN7vq?HN;Sh$zkw-jYcO>XfAFfBjYGPXI?aNcT2=Qda;d)?+L%FuIaCoKUuh z;q_p4wVUsK9SL{JgN7W0^fpLs!)-A!+)PD5?EtbH7|zjFf3c#8AH)A+?@Qa-NV+Wl z3Z<^`D?nn$i?Cq8U;za-Yk|c>V}WENtnEdT+01{RbMB2bl>(}|dU`%g)nk+y5gGe( z<1Xh~E|94oAf!#D0JY(2LdcCiH-rwDLDoY!eNO|c7$ijq#C!t4=x3;lX5M6R1St5j zec6UbC3~=-f5)H)<$J0;I8MYgi9Hr~1*;mY*B7%_o=O>U_1Ka91W3QBc2$5xLZhKR zGyr$5;o$804pD7%5X!<|*39mXRh^^$8jId^R=apc{;oVsga_tgyIC`P5nG_@Zu;Hl z*#c4GM`&!PbFiTqYmuF(i4ilisTn)mYk=iW4_)AafAX#84GmGDt7BYrSJ$^;F8rU% z2SVjABfJiE<=>1qL^;1w@mMEnxQjchBWOFOpo@o^RJ0yV;9w0{e0tA7)M54<-%t-L z){%lpCob3w5^$`2;Y&b1q+_JL`1tYTO_3+s!bh;c2}exr_@m*09kIQ*EOF zdibfhe+si@NT$Rs5uPHqL{XSgqf165;9D|MoQ(`|NfknO8ymEZRd6@!+gyT@+6aiO z&FblP)&M=Tps?rloe^+hiHCsTBmz3D4#l#3I6ibb{AdhFOmI4<(;jK`3|diGmC(bD z;_S@Z`Pnyb=4YmI`<3F{%)7aFQ`2t%yZr5MX0jBlJ8!> znRz!~INUJg*UVsy(R6Z(14bhc+b2ai5M3jGDo>0)sBrWU`_^00Dux1w>W>nKuw~RT zg-cVM!X@3tE*!tVUpR)sr@3fuQEq-&xhA+QK*f$n7q;FPXXfXZY9}qIY!AOpPz74osZi^}tS$YRHE}4U#BH z8X@6U>E)b(NM%GDKLVo>9w=4SrgnlnPykjyslP~zi!($R%Gbx{K=#-Unw`-eqI8Be zBw~%uK3_Gg^Ru{V%)Op|J2(Gs>J8mPy!v)Q z{}A{II~zS*mmWTTHNBK=7b_>nry#J}W93)-m0#_#JAQ`u_wT3Yf3?x6({CiYqtPWs z_x}@Y?|!k5G_$|@O!JPfWAo#)Z(n1=%uK&~4ZmryE@S4^VpTJ*YUX&C%&VF?qb2jI zW`ExNPw>v0#inH5)Xec3XKvYf?4hoaCC?Vx|5>b^pmWD(PVx0?BMSDx(+GZRgxW6j zFSovqj$;oLP}8Uxfu-d+<)x+^fV)JzOaeEdi?nH=or@L)b#6F{d80U zb5Y)Nb93+B&dp8DYSzg4-8-B0?CjL^+qW~buV1HSJv%)!H8=a_?K^&&%sR_dQ?v=+ zm)W1i7dY4;!U0X1eVc<5`_b_%(>{~PZfQS`lX%F@N~a*kCa@j4#L<=$<8dsMf*_ux z5Lxm3z3AuK{oF=9cXO2Mz(t+xdi$|wI_It8=E#?+Hw7IuLt+9YA)#v}k}81;{_FYq zUdMj}a&BttIU{I96^q*7rCPys5id*Mfhz%ih?sv?ZcL6zm-;sa9eZmw=eol_GjD!X;?p}N^!U|4L7>0zs#?nv|Dq0#sNG4^Z?w)8VdiceiX+|TZ zKO*Zwg@hMWkn|a$5r3kaYAiMf(=b9+-2$6E>v>9GWvqKbbNh~35wD4~CPXPLxJ(DT zM4lgcUdt@nWmn2D&OMRKRJc&Yl?>ynJe@H?lo2f z>?)eNcCJ;6?RYeoXenZ;Iq)*-qlNZ@m@>-bfaNna5e+p3aDR=;W8wFQ&Hc}xAVlU4 zS^svI1q&RASactbYWxOkmwFFdA$o{h&VYays~>pru&bzIQc{<`(+Ap=4e$^g(npI^ zOR~3u{m+fH28NqEw)`I3dMx}n4xAHU&lYQEJ=eTL5`*E7-c73bq^)$hC}&|k8ZGuw zYCF_heItJ+$$tdLs!643(LSvw(yI0@u-58Oi{ZQ`GgDA{z%fmCp#UV4V6mXdR5MPS z3f>Y98^kG7aq+uj!Oss`x)1IioF>Fm6gPklzGsMQuwvkMn&WO10indoty^qV(1C*+rR+;&P1w92MG^uOyrcxY)?(?TIm}E z2uTu2+rfW1(04-e{i#IZ0RpCNw9CMP@D=@5$cBap_Vh zR8+xGsAu*&tI*RDkJcZt>3pmJCP3=O8Y^=l$U7iffv-r2y1g3A0lGanY%&rWh94k= zxqpGNF-3H}Pf`AkwU8)Q6f~VVgj4qXhIkuiXww(w=Ly!-EM4>?HWc`#*z2oLiGfyg zLm%jgM3zZk^-O9pynL#JBapzKcX#FPpz@s>{;&a`2!4+lkinG)5(4M@gJL(frET#5ahXBn<{ip&c>n_M;_{)_$bN?+>ksZ|RKF+@R+`0g;>Z`yn?9naweM*2fysZ0+Ui!DTCMc6Fsr0tB2?2sWbN&@yG0(_v~ zM4}Vzlg?%t`d!>H9g*p%g`xQePKkzfLkjURJTYJ@a8V3Y3OL*9*DzYUg*AR^FJWC+ zYH@_r5YGv2esvsUE$o22Ht+y2BtUkQhOyipfBX*Ey8-i@JDq-m39^9cr=E4eGJHSOmielzlOvK*XX|r2NGP=1C0!TSaX7HUo(D9K%fS z12hv+ko}N$30ymZvOmve4yN}G4{nyXmN%A{mv5GDcBjgvjn(yD`THCKK7YZV9SW{ z|GxT~FUa&re#*%65+7~y>*eJ=DXMhdfBe`h|9RD{uCx9niRvD&{JfYwn7sVHe9ug4 z4E%t9^5q)JF7JKp?tNRmzn?~GQ_kw=mCpxT^0+zhcA+%V))zt!&_`qB?kzV;oz(L271-nSF)c!}Q8 zuIL?8O5XY1uD0hp>tWxKE_z3K(K~*lcVrg5qrB)H<>CEkc}3>3{3k<+_~qpbS1*q5 zjrIrT_nOQP+j!RZ!<)%T85;afe@-3*{k5{faZHZIU-~cT`~Ux6;y)QD4$$QHo8`OI zdGFTXE;@2;WqEfKV~yYa^|{rX)w$Bm`r7i(?-$FH-;Y-|Znl@d^tZ-a_w&8o;~%T@ zSF;~hwpweu81db;m5o0yzZ`vh**_^0b-~o(w`*&Yz1h|F&)46U*YWRQfBf4{=k0jw zW_`8Y-Tv^iIn95o%lEIpVb2Wq4K%U2d48{R;Qsr;757u!e|9_J+*tLCNxzeM?xW4V zga5!189bGvgFsH=VUz+$7cP7K-ycbI!j=q0CGe=dgHs}l^)$1jo`u% zn{*Am)#7}I?^c01Qbo+^T-$14T0K8-y46xk%+j)%8C+!z8xt~pTmPo^70AEw@&4lM z6o^nz_3T-IU?3NvJX^3`ycSBdRwWT}7{LY;`Up3{%b|f>tf0;u7Okf2OB{PwM zkbDNbu&SUH?o3p!G4~E`_2{_iwnHwy`Ibc{&3!FSF+%V zjV^qJ1sW>H?IF;#q;j?oAP`pbE@-2eyN$I&~FeHKqX8Gafts5ikX zISIJ~x$>!9i-*rKhdLF=I~NWiy13Pa!g;)2&*TnGk?g;Z(tX8E)XA`c4h_Dd&-lDu zy|b}TyMe1r z&+`iHQZ=LIO36LYH?*^_!Cm{|CNNkCvXs#|QUeBUe_9w>2h*c|vD|{{HP#$%GaS(3 z*Y(YVuQT^wxf zz;2{O-B`-6oU8Jbb$?Q$euGhn2(=Ffl6e@ecv!|WX8>HfJj;x$V6!e|5v ze?c5L_qx^1Vw=W@HA1oI8km?-K>0Wk@L?kn&^$^6{8_T2+_1`YaT!#3MAxaXu>nH5 zEe8W6iw%Rg{OcEZwg0-gt^n$>(go<)$l5JuCOAU?;$TRIyhhQD%;GpE{MFqETmVBo zd{hgV_}6HzA>Lh#U9RYvuiakMIwHn2e>g0vgjvltU<}jkg4zQ~!PG_}6MW|MPs+yw zpTM1M_XaA&=^uR9@E@RJ7u3zx@1UpB!33$Lf7d*Uz9W)cAFy?n(QNWKZ2bUD*^-v0 z=ksSN%Ew@nInb$;Bu=LeBrG@e+|g}r`!;v;$tHPv zcaR~{;}QO`wK6cmmtzQDth*NYFo^Zk1}h@`{u5Y;CRLEX9$eP0p&|jAu7OHc??x)E z5&e{7U>UPKVIDK^&BIJUjdexLX#9itK_ZRZ+t#)~u;xAnS7{>up7W!uQT`n!1A;dQ zF&xPONQSV{vpAx@TE2Y(6F)IA#>b%)ZIXhr?_FZ4wHvq_LjG>f=#(Kn0hdNc1tkID zmuyD`EPq)4Ms^0tMMgCz@sFhMg+3&c$e1DoSe13KJmgU>(O@22)Pi@o9H6gv00K|L z{Br2Pzy-M<3V1%Too{;v(opSsn96q{(12aheXYu~1|JknH8_&AqaNCh5$ zL%GJmusy`7l_a-&Oe6w!`wnDX!}mX2yj2l$;EXV0e5mtrz~xNf*SNT}pi#=NlpHqn zeR}4!Wi>Gbz4x58Xp{8Frm`TYYtmAOFz0g z3*8jkqgt()=)?rGM&Gqpp!}HZ6+?V~nbUHFh#Vsz1b^_BLHz~|Hysp?LgJtfc4*#h zf>*Pto9)@IJ)-8)ccFBb0*Sj>CWpwdWdjPzFPplTaGJ3Q&!=e8$jlWSsQ+>~GKfP9 z@{5%he2-QhEClwRUkXPqz?>BoCw4nV30XKD2rzQ)3x<5MXe3bYnjz@$0AJp0o#ecmax?+Nkj88PwJ|4Hi zu;GSdNYXJvO9AXxi2_Sm*-BCgA|xxs@3DPj(bYTo=5e8#oG*4Crwm1B)j$$6r3S8P ziZm*%`J(qOUQk;VO&P0Tk}JY=8Y)+xSOT!i$>t zUtS19OG&PS#Q0f;r>f0=Rqni{(U%mdal# zJ;{;|7pcF=Mawh_9$ct@y>zpVO_b3U2=j~xVlEUt#kf@dp<^R|(GCA?%jJo3k_!eq z$H1l{y$$<6h>c=$BfOO*_I~Zwp`KEMo0FYua&N-5`Q}qmm7xa_q}AJxs@dAX!9e3G z+(V7BCzLq(vmyas0_{pe9?+$Z+x8Qwppa@);rI(?T_T<1n*lOxup8pzQEiwyR=8b? zfh|DClM}Xnv!ZVdP$e0$mvxL5 zE1A>mFs4YM2EfJ}jDCa}W#F9AdkH0)+yepL$;bP6O^w%94}wAqCDfrB1~spZVKJGh zB1UD0BICi@Y8}WYCMSUMLa|y>*BxviM23H%nYJLKc){y`tO+o>7cIw|v3?W(M%5Cf zP~Sc-#fKP6CD}vKg=!Kt*#GLwl^RmG=#4-`ec7&#e2vn5H9T`M8|cJ_TROomJoZa+ zuD!%~%g;yRp<_O(U0pCwdD}@^ZlyIQo@~!*aXB?;?am$~8KxgGfgtXb#vLbGMDhLM zHPDf?hv_(f7RDUd9f=M{kQ#FfH0i7uC`<==gV}Lvq*os(-LsrDy?L3B2j|9Gs|#a6 zEd7ewc6`0SFd*euh&eEDeA@x>+Q+i6IWbXEZv2|1J)tY8j+VKIAaM z3VFZ2b^>~&7QqDZWg`tz>=Z0Gem^aD1Z0G5LvNeNAn^M0Dv2GOT26g1(^&J@5{sx#mO9?EY+Gyd= z8T#UXG4=X_%2cbc=D}3(NC%k~1kD*5D6W6lwvk*%$>`-q=dv>V>#aU;H>pep%juyd zU|lu1wxXicpI#!h+bG4e*P{q+ulu<#m$}_`Zl#?&gs`cf>m#I=`&iFimUBDJ-0i2_ zdNX%$oBMX0+im8~%eitnw|boGl+7m9_L~$=dLvrW*eHZHi8rfO+Ggc;Cnpa6f?%D2W=oR4)LEp$?7DF8)=ZTf|&b%4dZmC;@>O1MhE;|gds=zGBODASaDWp8`3!fH z8Jc$Z6y*?djuRL}Kd>A7@k$aRL@b*fSOYq*_LvucDFc`t8SbAtW|g21FOfU@P~m9l zr#7SmEA*pGtVF2xWGhSAYzgQH(ECM+PQFv}+K-YP4h$+2P)IB4EWwL@pgN8P6!Cym zpx}|FVA5y`<&6b>$I2;W1b`iLgkt>-mm$+bQixNf_Wjj~`in5$#l4z%C|$4Jejp$n z!KAT&HtdWT_9;E{al)m1jq8H1_?lpR5s*mY4edXsp`3j|FH-^I|F7&B~&Df^=4}d|R z;9G=GXn_ny?uuDB37|%;)rxMTWo#leo~!n8FX*IuX!W~J+C(R9zAxS{Y@&;SU<3(|g#a04P;SkUYw;hyK+KbNFU| zNzOYK_16juz|hr)?~c%ZdFk$08Jq`Nz_6_`Tz7FVKopr)7`E!cV2Fd#R%1NFkm0~^ ztw!?*2Q`k6R1)E-zK7Cc!=+bJH5dueoW!-9_q3(#ONPW}rsFbNz~&p20M7J3JxD>3 z|BsH;K_qG<+LD9fdSVqC|Kj5g$~8Rh04xo40y`_D z5VJ8rCVE;FU?H4Loosx7d963K1S%_Pz2d-6%uLU`9_zyrczoi`^!yASr|~#{^=5{T zGnm1h!Q@S!yy=rSCAp$e3sBoLb?Lk>L#}rsAolVNyimdt27vZYo~34h;Y?&tEQ8$X z0G-C@u!IAUY$snHojlCJJZn$R3fN?2H}iX=lSnZ?c4&ZP1Gv*8a4{B+z-T(eUw^XV zQXcd|dHkq1wkxhFV9AB&O3!6~04Ee@3uR;g=R{@ZaCK6Kj^9CV;S53J(*gu#N;+dn zsHzrqbwYn0S0`uml4u6`Dma}0!cQoIpEXVi&273RnBk(v&-#)n# z|KRZBE1UzA_{Y4$sY{7}@QQqNDGb|c?o9%B=~8#fj`<1GIBNR)V+@ynmB14@xnIOz z0*BMYG*bo1jVW=w?>SrU&mnPLJDS z1cNWPEV2t@^r*#Dy4thsp6HOc<`D=^lZNCvo5l)BshoSVnqETwpuK@R%4)Cx(I zpMlSm0m%YbhBPM&ookxspi{$qLhCf|7uhF<)3U(Do8IWd>$V+#p+0bUvD%x%?jjxR zm>t>1I@raUC!Nz`AAjT~VvRPNejl@bUBM!O(VlT(Agdjk&<1un*u-_-2LbA+IHex6 zaP3Py`lv_c1U_I|_#^v%n{RddR^?mQyxICxg8NT9c&_^A(?{%I$u2V;3hs*ofOWWh z;2V+um;gNG;2iFMZ7mStG#oGTGxs*I-?gVfaW26M=U@M!lYtyxHNUBih@aF#CXXD5 zaXkWdkU(97D`zxly0F?P_!@kh1+E*afjvi?D%N4{96`k&|AS}9=+{S(Wl{4|DxNkw zzt!X-j1%&@ev9^EXO3pPpeh2J&BSAo#qkO+h!j&JPyRoDF^hlm@9<}On(yK++{|#W zr*Mk>&(>b3Bh-$R5q?M&nTr4A2>Bn4Og3>ho_{ZGqEG~(%pq=q&{lbIV$o@<&yc)+ z!*+G|N-HVtu0tvY9$ieUxvD~h0XAq**;u{)=?a6>A|8bXM*-H4NRN%1igbw-WWEc` zFe;7x(e)dDy&9C0RS{TnbANil1Zl#!2qEHBg{*N_&}0vvCZ4`IkEkVR8+@yMM7ev? zRnI0XiOb_>ldZ6Q@YE1a_t1djZ?y+@H122_R)e~&!7|$eRsOJ72WW{w>K#|)`Rsrr z*(kkS$Bc2{oq|T|^uz}CXqf4LJ}DF%5P`+wF3f9xi1z-z$cqAyDjbi{zLP>D5r0L} zF3L_{AnOufG+UdeG< zQlez@-};{%`Jx!j3nF=ARtzb{9&3sLKwnQ_y7Ui%9|o zp;7yPUb(pYI&$8xLxBr$2Xd>s>Wc%y~uu<=bd(H~7 z1L`xtcxi#3A-!#tUR1A}XoSdNc#X9~t|LjG39Lps3Msk+Cez{d0kAE8Q78SDuxn6p z%mRfGwlv~{ju+|CZ03KrDxG@%x;tqV4a^sRL1}jE`o2~v@?y&%pC<^V`J(B+NLk%! zUtIbxQszhE3mKbRAjo~(faYliJ>JN`8hh{aA8UmSjOW@vKm+Wr1HtT52?3XaK$i*3 zv#(%K48Fs zLrklpe6Gn>?qpgz0jDvhRwiXU$asy-DG1j>^`r*xPK#Bz|C&CzQ-C{x*V58dAzR9C z!<9IGAb^0B{Odd-?2M{z~59ynHhcDb23D?e&U>`RrjHuE6ms(^|I6 zW(@@{?k}N$=>okb%i~l5f3kn~TGD-fAF2$!;&DEE42i!f=_;SS%EODeDQY*L-G!@i zQ&hc|&*C5alCvsQ1XgHfT(K156_lo5)bbSLJ$lSP~6B>WDg(eh<%lyH( zpvvW59>&m<{KeO~_4iZKs`bTbEFUxr`_ako7{gOIGDnYzEBdkZU)Y09FnrY0PyHWp zD16pu@vo6cOuR(Dm6UgMD~ar=bpxSxx^5uq(g!jhXGtagkra3aJA4ml#+ib{N}PZt z9)r3&wd=k1jXlM_HIRQVkiV3XJ=q@3^B8M`pKq}H0LxbeTp#ADbXBoC*7njnM3>+9 z7s^0RH+4Zz%=jF7g zj^qHf8Bv;=J%b#%dCpnQ5Jz$vqSXe^=~JLRx=bY|_U(K|nYHh9))(OUJ;4$q{W1q5>LVPMrcOt7lRHPV4pY3m!|9 zH4)=a&(Ja+_Y*RH3psCP^_xN}xP`Zi zsg85&%FgxO_x0YwE-^K)PIe&}BF%;;%xgSja`SnH&pdzs@I0$Kj;GJBJbiAa-Y7Pq zO@Ow-NvYHQ0vFQPax*uRgZEQw4T2^q31&O3ou3)IbNyDuTgi5v>$uY6piW zB)w)%2?bUA2qunmMhb8J!F54z#G{~iiDuPrRIY_{x>_TU8jR&;s{5>7RxSnLe0x-g zfQEf|_Va%rH8b%}wSe^V?8gb(8X4rc497swalwrht4g!}jf}kiuYkA>_5>a>VMi@- z?=TC)Z!yH`jIKH!t`~wj|F!iJ=STI~n*&a=VK)ala`0D}iX|1HGHA&{y0wso!!THh zNAn<2@wGt=2b0$ZyQAMlJ9@;LFlyYF?Oq2aZJB@I7_U+LivKkkgvG%51!t+ficOcv$vBZJ{&73*@JToViJlz!pI@wQ|0z`bm1?4C8>Ebik0%3D0p4vQsR%wP=yjV7LK za8zk_DRa+~6TUhI+~Bhypg*=b%3GQbDKUw?tx3o+(kxVZi^Zef(qXY$KoL{9vqgVg z#g=dtEU>UCQy4CFQgtkL8pAKQOnVO9Y>W9TC<+&*)K9JkK2aV_4i(0=ik5%R@`(=A zvn9$<-7Q|gj-8btFJSG6TW#kat{rmT?Sbcoy}GjnXmSX5f)@jVQR|Us%sLCRSlBNI zZEMJhODt>=SZc^MVx`!^v1TsMiphU7l(tcr-?eQb;UU>ne39I`up+nAFj>VbSa2+@ z2^|+`H%eadip5EcFm$HG)oyDSkcWN_7AQsNjA>O@uPZkKAjy(I#~=X<+XZ{jNmy_N zWj{)%E$rfi!n}Zn5FLAAO4yl-yXjw@4S)Rg$$)$Asu^eS2ma8f^_NVLJn?^?DsmWS zkPSXZZnfgNn;^Ik?=A&Idug&dTA0e=4qWer;m4DGgooGRspvLrBkmY+hlt;M_(23D z)m3!2(1ckqJQ_VR2DW=+cfj&wg=GA-Y6;_E)KZULLlUwNWRe)l5FH_}mYQrjO0sO7 zHrcG)P};oQ>@#_}37DE$aIsaveWJgqy~gK8cNz*)jEh8IW>8fNkb)^(ORtLKTC*v-RRv`ie~@iG+| zi#cq;A|hCZemC%ELuU4g$?8;?+PY})W0>H$GHq8hghCoVV9_WinI3-yp4t$Sz?aNh znX#I=An=FmfUutJMD0L|2Q}hbSdaE_R>B+7YG4Yew=0OoL0UMHP2|ik zyB0+fvsgS*1cG0Z4)1@)Onz8*JxPWSrjID`#62R7q%zAxl@dJ%9yClFN7plSJd-FT zKRxMadH49m8&V9X>YXIO839BW5v-%?D|Pv!_;`IPVkB~tnEr`X>R7t+v#^xQ*WmVRLeZ6=Af5ZS%UFE`?P?I zC00DNP8SzvK@_%Ly#Y1j4X{P+$(tsFx(J9ad-UT}SB|Mkj*B46U`FRe(eX%#* zTmY|nAyD++D)xWgca|D}v&cyH2ujBW`=ZUYA zAM=$sePwZ!o^ZQ;Z0m@`QcK&=do=X^eR<&??J;>BznXsk{!RW~GBl@*9b*|`KHXW- z`|bw4pRC~T)KqSJr#L;ITjon{zsrc5QatZ-*Q&0Ypv8Z4|5jb$DEMT062dq9%iBNL zi`)b(34d6T)FEmW4gKvpFM&ko9)tdVU&_)dV{-7PjQC2T;xVR_74tij35?{;W zxd75Im=4iL{)UzK&P){j)Q@_sf*al}MRzEXiJKP^E7g{nmCQxygtQzC6V!a|=T=g^ zS>=EA;T<-NNUhgEDyd&MUxOMbebLltFYB!SM) zZE~$sk;@LoI04g^4w^e^_R>*gHtom<>@kr7wNFkic&o} zT+z}_880mKLA81gmbu#TeQ>0LNbPI8FGPPM?t%vg+wB=T&VJj7G6+?Q2HNGK9MV$4 z372IM3*~LOuSPl}oQyPY6uiE~f=KnW6FKbR#~?7BJD(*Yw1qJt|JRhP^B;O$%oJ9{ z?u#&usfnK_Hp8Mg*>w)%A7XrQO_S=7p3cNvq5xJk{LuP<2y5c(Ib*muS5_cksDFP- zY8mBl4=`n&7!Dfjf&poP>p$cNmMnhtsw32~snve5GS(a~K^7UQv4AVv9=jVqhPq4; z4mQexa>^@1Q~TyF?wj^lC$(=XW99U| zk@oVN7xazvBlG#2eG_&D7_a^XdR|k{^-ZM*H=IxR4U?Qcre|U2o4H%vYXdItI&G-v z5xZk63?Vbu8Vuf#RdZWoeJ&jCA7>j$G1KS+F5>FaR8TWEy3kmr6%%m|T@-( zLFizpoc0;G%=A&b`50q0H7rhxO8Jgi+V9RG1a}cw_o7D~RRD>?SHM(+uRM|9!!jB4 zB@UvWu>DTuVjy!mcuI|61J;MMc@J#88i_sdkr4gC=*1=yL0v!5la`+a>oJSK6GR6L zuJi+D!G4-9Q3#yT3Sj3d+$h1hQnau-~X)bZ&$iM1_#^NZo$@? zR(gUYVIA_24GRI~;4Pdh22&IIEygb(nWx2nHz&GqkVo29+<-v z=%tbgJ1+0D`0YB+VUPU|6k=+mCO^XJL}?Q@3aF%5XLiLpA?R%##+1GUH`5@r0w4BM z?S}DSgEN2W>OeDm6uf`gwPvSxC#0-1$_V-#ZJ@2lp=YRmALO2!;90LE{ zM5s_n>5A)vQ^4x#{N*0t4h-tf5gPx7?>NI_;#6=zhE4$p#9FKnB+{Ni=O$LxMI}ZR zl+}y1|Fut@<7_QoADzS_#2q|rtkjPksPH1$l3Onkelpf7$=AytQ^Vy|T08QNW;0e+L5#^=!N~z$q;oPAMgs zLCVENuLxFQb7SK0tp}#B_#OoyG#3B;=G}~x{ zFD-yc>2<>H^HqOoE|kISdV@;X;@(oLa5eTe|AzDhWSaT67Pf_wa^>?vVGJNFP#AkV zim>JhTy~x2woZTqa0)TGux~dDhd~JVw{ZX%xN!hDxN$%-i)0Q18SvfKPSn}PN6(Zx z%lb;56;U~m8Sb+)$>wZvv8Z4%05#ZO7&Y-z;Acj2w2gmJ?2KV5J*xUtVv4|Yd--g3 zMy3ZdL%&0fqJn4TnonvL#!g|d(q}Vsth3G>tS4q)G8GPHRcEmXD?ucwYYM8HaB>|l+~xBN zqh;+h)6;)1c;oaP+QF$_k-nb8va-(9BW!^BD&iA`UT*LCJ=l8yg46>t5_g+`AT^=? z*LEC-FlhFhrrmF1Rp<&;q3sIo6w77}FNnN|vV-bl(Mpfte$Irc?5LTP9d#12BcK(h z&Wp0nXYbm-ti5OZ9r~rSehS&-zEO`dzyLs9Kz6Svw>NsAu z>iBWrik&<#V~l17y@4tntpyQN;WTLzRvT@=T*O`OsVzuP+zg~J0;_{Oo7GD9GD;Ih zKn8;I%)N<@AS=qZ&mv7Utau*~%(X5q)SO(QV7CzneI1dDuD87ox;}euJka zElGcR&b^`UfFIiLp&vAWU0Bo}WRUMl3Xg1#gS`p79>Md^gAFDhvTxN<{74rxS{_d7 z>)#kLq}!s1>a%T-gg0HIgTHVl!M)JaO$J92JlvEfOf#S^P}iCZI8 z4#>|{Q2HQr?K7`+)X+2DyDV_M=ybxNa`=wHZMIvu4|T1ErY1FER>`KMC~UjOA*#iCceSoJfK`VE8$!O|o9C*^vunP)@fG7y{g`s~<2L zVT)xH|0LuV_6TSh8hwf65ECEKmYF&+V2tM(fKCNWM*4WijC9z6A^(zh1m3eXIRVYo zRUDlt$}XbWAp%~nB)<4k*XF_PvqwE?w9;fhiS11o>k>qaGX1daPFMz~W+t~LXqgqe0Y$$sg}sbwvM3H=#I zSzRWl*=7Cm4%I*O&BbmifThk2y&PCv7Pbhpiu@Ov32+yUl8)Qf5MuNeUG*YGQM^ZH z0n~0w77GeF`7zFS8-$#!YrKKn?4B6Sdj&QanEDJJR;xf^$|Q-G7Y=_xk%XsgWUfJ| z>0_FX>!8==3Aps>$~BeqXX0B+o{iEK_&b(vtro#%QB@%NOC?0B1x9T<(zcp!FD?U6 z%`73HZfER~o}sz=5-85v1S|})qvP8Pj-@)3A+%xs z$R=2an&?x6_FugkA1|XvrMbTE7Ml(pnZDQ-(1Q^0gqq9N$Ebf$8UdhGw9UJPY4I~t zjsP1M5Z#y<4u~PKy-p}J8wlt?s8y5nKFUmv^@Hs#t$_i{dY|coD2!ZQ45T64g!Q@O zfF{LJj#g9G?qI!a3w^hIjJoCVOxBc>RfJ}meW{Exw5W=?&1t4|Kc=Y zQ2A6{oW|NvkjOSx5A1GD0c%&=T{ve=#^*t*FW zIUvK79I7cfR7b(1txOiHlOQd?V|(&A=&Q~?Q7fI|c>;gWLK8#+B?eQJta3X&f`o+!t&!2c@#eM-LVfdD4Lj%gdG5 z#AHxGBnV7xv(ca7sAdk30-`NvuU`EIUa&@4Q=Ei>ewz!YO?~R|HjKc$fzCiW=v}wD zc#v-1!N6EW|1+n+e+06~Xz*Y59v_>m6E-99MQLoWsVMiy||mrQa69e;vTXqZ5Mu9z2unIzm_+m3q{ zB@CEqQlzlF1|84Q7Db?1)A(gk1Z}|qE)lcKpvi_GCu`r3OFZi#wltWuE#TAH_Y!XZ zs!`!m~z@{N5WybUS!!?H!pOzIGQD1X}tEAZln1nNABdf{L%sGecW zMg@oZ4;mA(+la(we1zC>5Yspi^im|XNW9^ZB7uf{u*ZSgIcdDQ&GXq9Zoy!OU}NlQ zmk8G-D7T;mrhbEKg+!tz!57N739D{dCPC<+sYLvhffyXQxdfP{vz>sJpKuCC05a*l zrkZvR@PBnYS()JL@HApJC9)=$dztYBqmq}DCl7M4QfYuV$dYs$Tax31OSXlaOF*Cv zWWsU+{a|c;<-tT$SA{K#Vd8`_mc#5ey^|BJAn@D+2?ikLc<)UNk`DEgqZED=j}e`) zCdbG1e^Lz|S4!I|$Eiwbgz(%4nx4)HhO|Ls8h_4l?2u_|vC4W&f}R;c>nL{#+gu#V zYbPNVLR(YuAw!sjC=m2Bc$r1jUiu4Sfz#MyXiBvyQcboyWd3O?%uEZ)z>W%7Wl4r! zGzUHXY&Bt|hS5#(Z%8@Rc-9&tMD-kCsMQ7R5I?+!;0LgeaMFPXqCCQA5fbBHzsNqr zkAF^_?=`rgtY7F+V6r8Cw^GwBx#NQ8*FPuYL<}x3epG?ijmKa|7R}0g?EEa6f2& zCzrp=;bN8Bf1+n8sfR|qK>mX-3z_(Sa3#1mZ!y9DRDRJ&byzdoZ!p7D_`WA*z|es; z3t5$!3|Q}$+8IzaN~&c{G=N9-)KnU5uu@32!TKf*4s!PE?Gck-t6xi09}z?6Wq+4^ zA5}#F|7)ohQ8WW|OXw!BO@DFt*!!>(l-s8>7;tz8-!RU4H0Z)(?Ltm=X($#tyAVp# zwsFsOAyp?r&;(Ug<2nj5^}VNEXB;E@6A|8=UUqJozE6-S##%oi1BPOWUUDMovKW?7 z#g+crwN{Rj3chuIaG*p#Slbl(%zrBF#Dyhm1W@3#UEFwLPV11tGg<{dsRZ;>GVdp^ zyf2bsK6nFO_0rzWwc-w(u z`fNSq@0+y#^i1U9bfYQ|05w3$zoz3fwGybx`}Tsp?$&|4I&MI+MjD@t@mB#-b2WeU z(s+O~O0p2m0g2Vn3yF=z*OQ4c$4u6-Jy-P6Q$GV4TB|B#85mzBQ6Cz_dcd~P{@#Lt zLUn{|pK8`%6JHwJYv^`C4-Tckl^yip%}A-hAn~jNKEh~$cGz6DyrKW`Uw~W zLRFc!W)Z0W<}6`6lf>OdqD!_M-Qs`pbNGEaxQ?gkNsMwgQK1qv@-h$>VvFUT4FREg zuB!)ZwqUkVul5Oyj3q%|32t;o#-HxNQTuQMM4v;-5q!b8NY zvShK?rii?{Uu%5BOA~XV4%wu;yOc(~# z4GJjre_&Ds`V>!13E}ZVEaLpW1rwtG_a+4WmI8A65e=I%dTUnubq^Kj<*TKA`Guo7C2cy?on_s*6kjT^A z=1i_KM-mgr)Q#&PnovF@D$*91$Ypr3E}>4}ly6f~X+D3W42!emxYTjoaW3%VIEm5G z(Za>tWPoJ(a|g{fwkQLUwR>fR9T30CW@IsZB(cnp!i8T>x;R04z#vmyEl>2<9CuSGVk_=Ka)S^J)-*B3Cze3q4GF z7`8@)P{`)t41h*q%)`@{S)=x2lJ$-sY5P-PoO-av35abP^CiPd0mAf2}*EcPY=Xd@CBHFX?FYfK=E zdC5?C^CDTHdTi4TOuCX?Vz)PR=zyI7Zt(x2zps{YyhY!Q;@3%$d`0!yPTt_<*RS*A zTokRwSl}i^f#8_&uA(lJHgM%`U}{N03U4Ll$vgP6*x`Ww4p)CEfMnBLR^d!Y6r(8q zDkQ@aYelrQt=?-8#<>RF*cOf~qI=G=ALGdl9nJ~*qN-It!3h?W`$8@6N-+!JE6y## zi8lH1M(bPKIM%f;xuH|h?LsX4HAAo7nH>5M-35**`B2Q%IQec=hZ#E$ZTWgAe z&Z^?dg2CuFczigpr3YF|&Vv)#4}jEl8+r|m&^K<~)X<|C(Vir(UWuLG><^=lqJ6`y zEDhn%(SI?G1Ac2;#+`l$28T~fZ|sbj^p6TKR4(>k8B^yorDo5zm-qhwYwfq+ppl2D z<<(W14gi1YZT;-y)-w2g@IfDvmXJbKaf9m8Sbk#0z0`={52i*Sw9ZkJ(O1m=~07H;8-j)y$G7po&nF66V^U+co;Hr@3o=OmlWLA8^k#=lJY* zGaq|6@`*QDgw-M@13JpeF8ty7>Xor)2vq)EB>gN08}r01Ptb8w6HpbfxLt(Nso$$X zKKeIcS#T0zYZCV#VO`)87R5aw z^vzWR_KR1t%6MTXmT=|cMZAl66f@OrV!Orz zKR7ueOT#1tf<|xb7>MoRD1>5rFON|${;AxRRN@MixdKG$`1qBtY47CfRIcR8wM7SJ zTK(oZ{nI`iju-F7cE{?I)3twDj-mjuN~Q@=e^j&H<-Sl`surf8?+eTRU0K2;7l~A` z3&n#A-VpgU^koj9SI$svFv^EbxWQ{;@K3l1#by91iNN@9Q)WY!_DR?R1bl2_est`Z z{>Kn9b2@fRziRuvr957zn1E`@d%ejDox5cZ$Km#CvZ7;+h(isZ(v5!=nj~GIvChKDrf#d4E-?vIjL-u-`A6ioGP3~hirajkD`*@sB3z(8{%13bjVD>+DAXL7~7Y_@v zJPw~+8+z&n$K{~KfaP|WQy4aXdWGQ)-ky=-oGd>6C>66uoF0E~yi|urDA>x;5y~5X za9|SoWPtxc{R?x3!UM{%Q*h(cpBwudD_d)7oArO#`x3Ucu4LQ4g7tD8VGh{1Z~FEX zQTRNEgkS=8Ou)p*NPuiK1W7i7_21uGRkf!x2%Na{`rg;wUyRNz6d(2K_u^j9)ekh#Rv(rAy=K1tZA#nXX#g5D~0 z^$_F=Mz6E3}5sj7-GKUXW-|^II zLh99qD?WVdFmK4ke;5bt?d>EcBcfvICwND8+2N@d)}Z7c;4u>J2UXj+MZ=NtByO z{N|@mi9r@=xyy31z&qtTcKnBLoZDo4^mpNsB|-8fA@WtQ0@Z=#Wq1P>LFzb`8EpJ> zpJq*rbv%X$&3Bo4;~WH%8A=i-_zcdNQ57e3wDW&fh&W|}leu#9f*@DeNsy*Kr#DQ5 zRhrB!e?|F=LZ*g4_8PP7gzo|Fj=HXyYejIniKN@gZ_WF^*e!%v zqc^AV+tL8`^M`(&%G#FxgJPB&h$kH+7MLBVBj%K z$+3SP!ap?NfO@})RB&#gIj{nncT4Ih{2P25Xh{W^v-D};ZheRzqDpmk)ZkN`I#J|v z_dCm3#8XncO!DnCOoee3gLN*f3FkU=CrX~^H3srTlm$*xqrsCS7d+XTN>+4>?EH*q zI1qdI-oS=t(QxKtx{u5%MQj6k$V{S(lh}VzA}O=D+=22&|Gn@2Nx%y%b=eK9?Rh?{ zX4bVn4}9v{H-9DQiYJ4~XJp4*Wulcr zek@^BAf}iXVBw))Cj=~qJZwTWk^x}_nJcqus>`4dO1+tE6_^+R7dA#$|2Yw$Fo=IZ z=<~FubntRVg!Hp3hm>xNHqR36af6*)n5x9vQ9F}*RHlQL#2E<^YLPZThLyNVgaJ#U z!RL>kH|DlAEfH28yjAV_oJ6HCKM1s?$T4~N9(WjPJN?nFtcWaFpV^2BMI6=9Kxjd9 za|woWa;GZVTN0zcfs5s-gUh^uFv-zPXs$%|C|dNcZ>?bFeTij0N zG^|Y@9O6Pl`~x2=5=DymhtYpMXl!`AmihOj2bxAMP;qdZLLiytZXX}lB(H%xsY`%V z2kEFoB$VLFrJPSi6UdO?|qA~XwYB6zKPb|G4_AjF3IPK=6Krhb1@UK@2?_>>rE zJtg}LIqMpF7iFd3J45V(m+I1htqLs~Au5FfKJZ9nu~Pu%q7wBcg>Whxj7pitc_x+& zR+)_Bqr+j_V(^zBzQC%*_%8y#h_|V=S%RoWvmP9B479rssEb9-(%T1`1%F~c2n3Xs z5Qll*rKbf$`w#?1*Q9^J^)TCsh~;q;uM)5+qK(Rs#>x3x3c4NRT-`zP(>Ou@pityj z6wy_g|LPfuH3;!w-EssnP)4)j=9?>jiGv}51;8dbUqV(u68u`ASl4bKHR21*hgkB7 zP;*CZ`pFX1u&m;u^m1kJj|x1eZCPF%giw?}#tW!zY>_Vn?U;Y#rX@EK6Mzm!o6+Rn z{K&?LX<=(uK{4ebW-F&D@qhedrR)eKw1{-rMEK7+B`f64O33r;noy8m4yG1?BU_c% zdKsb+)c(*0>w=D>4JsKhOwpdK0z%L%C|)*kaijP27MiwwXiTUH*zoq6GQG z#rVcuco3QMMGuBc$g%eW9&_RW)XrR{+^n_N!-m}JEl^BBC&FY*9FH6F#Y4Vs%9G~j z%*0J4nQM$nQCvhWU?O%|2&UtaT8>RA!%2h`s=Aqh)6IVX0o1$cARqncTClGKK?z~M z3GUYl(9GinVTgcXEw#YuR|vU8iE{TwFg++1#bapvhSN>$=5$kvy3@BRJ_uL48OJL` zZXGd6#4*L$U4Z<9;}_tD;BOd-IR;qgg-!+@@hk|%F#g-2kys)b_k(S zVAQ)KI!b>lGQ~wFB)ioPX*Ytp$#n*9q=g>F6oWzWH|nhk0EON%vDxSJ)`?w?yCL

a4lG->1#jAG4i&UK&-^@971jF7aK8v%5q!k}LbS!)=?LG|n zHWXEh{&OS)U4=xDv{mS6ZkbZufu)b8&F)G(+45V08T0doOyZW?x6&zY|3 zzk`k>9!Dfp#2|7l(slR}BLn*^j5vWC$YaF8Xdr-dLa}vkEAFRVC>|sUIgv`dIm!|5 zylQ_Yac~;<>z7r8IHqY1*1jTJ^Y-Rq0kr43|PL8!Kt1Z5WJiu z(Lo?oaNkJWv17<%6iOMWNLX;(7%g4kzmND2J_MeFMpA8Rhp|!L9>7~pgdQ(d%~sGC z0I%gWY18vln!5#MSfJVb6`VJQ;%tDMqO15RHjDdEk)pBOn9m38O9NJ7Q}-tgM9qIQ zoUQi!5x~iB)L^wmA3A&+0rGT%Fuzd;OF`?+Db1?7mgT6Jj>U|jh(H@|*0_um#Xv|O z7h0aq3oB1_(-;Nlcoe2oS9cuAACfJ-N1j&Yr#`GvTRBQ zi4{VI}rqm6n6D4FcRW#Z9p&W#>>v=oR99kkcIojyU(WV8NFoDj6G! z(KD6k=EbH8vwx*orjUP;BNCu|+EcldL{cs^iakMW1kcW8$kMXWYt>3CjH3kXTKy zrYQmm!)Kc}o|8>vTUMz@_bf6#v%mHL)b!fQ@m&G%1$ zeJ~ggc<$UgO%k{zk0!716sS;X@p;Llbur8~pk3@E7k~F~j=_NNcz@qH+k_!2 zBv@6ir0ilytRg9iwHKGP!?5ly#RNQ9CbBvj&~NS$U6(6G5xuC9NIH^bicMGr^>03T2X_WeRz ztO9~@)@9C;>GTBx5TY@7l?;iou!p^-HjA;|c=2Rw$M%dMm+s@vKmH=+wVW7|+lV95vnvSmUmgwr26M=QI(PKTV z?%Rj0rN@73+nehTe#JJmXKcluZEm6e?nuFYx%_L|Ip^shJ#?AZTsHwZ#+7WGOv$PZ z>CVvSzp*>NV8XfK!ewB6D%1?Im=Uonsj?g{fxg%gD69L^aGv-Y33NqAGAD_T$vnyI z^QTX14J-eQv9#qecxcuImWN%FbsdOfZjiZe*m2=iBW!rll2@T#!d#< zWKop^0~n_Bn+-N531X;SV2-e+r$43J>{)ublV1LktVda7!*=%WG+RH()=sithuKTy z7L=uSnO|z1W;Fk9N&SiqXFt)9`uo{6TD1fp{ubVn6u~R?+A&cu+ZepvEg)G;kyJqg z9vpwJ^^T*Zsuz%=WBHR7w%q72V%hlND8~^ctd~6Xb?gs#AqX=Tx3+YQR&tB+_Xk>ri@WX zP4Ux27&Sy_S=m|>I(M)XRZTtf_JHVp;`)x!pI^;=l-zU@aHGzcqZuzglEiqD`?t%? zzcO~Y_y6=5GL_uxoHNr85qw>b%=h0<2U)bBYvGVRNyY4DL zaiO~yT;w18*Xi#KhW9V*@8=9}^p=->_+5Vlm;R6imjcf>mzR+RdIG%fmlKi&S}J#% zT&}0br?vF**C5+cwe>RAPefXgDF0~Z+xtOa@%9{OS|b=80K0yRmzR8S+ z@To)?J1;15MG;M?sGv4|gXdT>o}ah5&f!$V;6wcyC#_t5gSRM_1u+2uXO~)+1xy0{ z`j@De1z&$}pH}8yzaHJGE%X+?=8q=-sqg((TfvY0z2D@|olh)_o3HV|{ZIV2wmQFn z|Gq}k;Z!-!lq3tOUSGX+@Ad08#=5;QU&o!*dCn`mdSoxG)Q8OronpMkw8bl$na_cn47vVx zn&N+Q0~>sOhmhmh4t=k5%z+u3jKu>mt2Jc}dekj`Oc=i6P|K(}ve zYrx9f(Ra&>*#xkn2TThJ%-8yQSm(GSZ2!ua}{u$LVWa$NGOn0pIr_`abl1N1r|R?*+O%-1p}?HoJ0x zL0u#yGau=5lio9|BG*cDxPZuzP~@yLMBWo5synUUef_$=G=KLvt9`YMFX;ihMm~$J zyDyDa2RDE8DXuTIuQB7q`&EZ;SI-B>x{pTCGNDV|V zZ}<62$igZ}!YWpHbAFzWn;0ao%RyK#)0xU-i)r=u8uC`~$IsrG;92uo{Ic2`Y>hcM zAmr}fZ33HQ@xNP(M-LXC?qA)XayEbbi?B=lP6yKk$6Y!C7b0-zBhm`LZ!WXtzr!8^ zZ$=q1p+L`onmu@1#{e2BNk`R9aIF>wc$R1p;{YMQZ zL9E?QQ@P>Gtu+ao?=ut&nj2fm1nT}Ka!=@Z(@-+)AMfjOj>LrCD|&wkz@=e)^FQzXCkEc)gc4#z9@)T$ zgpQoc5Lq`^=l(qa`|FRthhoRF{U{BYAggYAjoPy(FKP%!b_;g|d?QE@gwElQtcQ_m z)DGddUCZEgCiB-i9W{T($XBI9i-c7paP39iAGHjH1e?22I~s6;Yq9*8bhcbizk2F) z@JRuA_D~+Io~m~gRzq|bDs1psH~I|6Wdbr_kdtT8{p|#QMyrjxU1fg~utuM`Xfzw{CTL<* zhZbo3F(Tp=DK{}7MNfJB{O2p=^D14N(d#t3PdnIRpQ+KU9tKM0svoT^^o7;2?<>`@ zB@^+N>sXVQm#JEv7Gx`@1*y=0@R*%0H>U*6D^jC@qL+eh2s?E0DEuf84ra4S??jr} z)P(9X0Hr$8N3DNhOMPFePTNlV5;0n|6<TplL4O{5~h_SZcSLGz$cuZD>qN& zpMhLe6#*nuu?jG6Ws+RWOLC4#=LEX4<&nyG#YN#2GKI+-lx_rI z%a+{EZ$ijQh%U5+S+<0np)UVc7uv04LgHoG08e)Hi4kkPr@0r>J&JO%R8I!wcAKoc z+Vh4MfT({tryIMmIbfzTK2^fs#Cq_Dtp=smf<%K!7SLa5eQb3h-p>AfhfNska1jj> z*VS!<;b+@Ecfe}C4rHfF3rz;=d2ZVBmT_T#-hLgmaF<+MrlX{zsNIN9w8$qMNBAs0F#w-%ZeU;y17Qsk?o6MRJohN( zG=?Hp1$-g7{&Z!h4<4kLg=IWo4&uWTIauWzn1BAhmztjiUIDb1`JV-!0ic(e zpaq%%cb7Dw1wsP!>6dt+1vmlgm$9J*AOqJwS(ntI1xyHCl|n4h?7r!jD53>852S|o zxn%%zgYR5cWM)23mv5p4907TkjG_fNe-l;7Gqu-$ou0W|iQqa})EB3TXY)Z|*LXET znF64vwhC6}c2;5>sBnQSkv>wusdSma-z-_2%5ftmWXE;)xI`5lWMkO+Lt?ECo046b zsDH5l6cNf@_rWJ|o?}ij@{izRviIBT?KygE(Z|I6Z{RX=_PW2na2Lo>Kw|Tne-9+# zBTzaJ@2p_00q+eXKFrW({y)6C5B9qUT*fjbHf;4dB{tFomMO6jDQHUUWO%-)Lfd1X zm8>woG}9f@x~W>*WudFmT>CG|$qLt-3%CSD>M;;0{}F%KM;-}`F=z!(`FL}g-=~&z zAVc0;7V>nlhW7+7A}o9A&8}Okawlb$zVi1n<=+>rW}9QXPJcHTbG)IX1z|#LpGAJqU6mX$Egs8>&7n% zzKy`NWI7`uBTAbkF)4pef7%GaDkTwlK6a@XMDj(WeH{vCn@AN zPq~m_%Euz(gwN_9lOIeJ_+!CMpT!8HFZ5V~{|<=y(%dglwi|H1P&l_yOr`vE6K1)+ z*5c(p|AD{$>&1no{RNolg1PYrF*joPpKhw%4!b0BJO&wMxRo1oe~jHB84A|i!wFE2 zkwIh7o&cAthV2z1AY4t!eRlFoTOBl#>Y-2v7o}=T?t81%(fU?NwbOc-wA8GSCfFS5QsDoMWW7{B zp6;5QXBKg)gol;-pUvJ#+7ivnIae+tUH@c9(OjsG_nRv9`3mp}>2Ns0ENR(}mPNp5l`o)p%v$s*vI@TQd1dlV zo8qS-0il1ne+~eXq5TPma%;sol&jlq&Y>Ls zpJbQA?D!;mJIOu{v-4rLeUj}?vSVazX=hs}*^9Gm>pXjZo;}&gPTvFo!hs6xrFPi@R-mzMl5L@!rD|ZmxL)yvCb~nU9(8*r6_jateWyf9z1@49GovHNhx594mM(c;%L*qXgMa z1313k7|hiQ%cwR77e^chfVDlxiR>PAVR!)yiS+`j!hT`knOV!FYXUyH=GMFO>)Fzf zc_p`){@xeByg;!Hd6RlHe;4x(80QZP{0AO`r1@i@cv8PN!~fNY=ZE{E`bJICHqHEkmaAc1cTyfY{ES z16;S$<)%D3H}q}j4IcvYh|bS0dl#~V7-K|MGX&|MUMQmONgZ{!0Mf4hkER<6->lxu zu4}f`e2j`T0X`9B<2u3|Jp~Uxy}){Nf4(_aU0@OP+k=m=VZpKFDT4iv2ImYF+3GIA z9cIj^d&f9;je7wLAZiL>3Yt!*zPAVPfc|I^U`1sBU>kcXm$!ju)^Z< zni_yUavmF9AH#(C5c7RT=yTmAe@Si&CVMa0j||-K+fW?TVVED@f|etd^mj4G?;OdlZ`?kqBXIvp4>8_;u?BJl?R;$58q?#VF@8 zXV|m1c-G>uS&RPThAxQ)v+s95Ai_6H@RI~#zeUEcGFsl`>W)wZ`&w^Ze}G7ik(`oR zW0cmgTxwFoN-k5LrrX>Nj$>@a6-CL8M1aKlarXn5bT0n^zS$QrYQDxL3La4?dl|C# z9iDbteI$plOoLW{%aQsr@o}`ju(2gv&xCwWKD2;hYS)gd^)_9 zkap$)^35<|CrrhfNcA}snz=2BtFR^A*7oZk>k_eJVc|tvR?^_;e+kGb;lKNFQ}XWA z){gt|7=U^LR8c^MkfXw_eIm)sVQUMZ48hOADMn~9N@zzx)#EMERN7)L-GCG?4p2Tf zS4Cob;3CZ`<1?fVJbgigN|2G-gG0>~p`zxK(+;nodKtC=k>vL{Dq%l>2@#NAm_RMb z#*2??A#sygkZ<3Pf2!fI_FxPT*tZj~1;9B82WDYLs0~~^aj0PNCE=s;N${bt4*ic_ zq}gg|Fq8RJa6ahbX;hMtjXCA}gj14`;#OhtAswJCl-c8i#d8I24PzvNV1(GH^mh+y za6}ReV<0*}JS!k4wMI{#uj7vX$SCKCA1$;IVLfWUqXhU{e;v(mASr*H95D2W4|rR1 zl8-E%H>COd^)ADIx@3I-dt)Ts#gIXa-d|}gF)wWwg96?^e~`7}U99Mw+3t#jfUOcva_>L)k@vj2_s#y|1nLvLvoN_MFG9EzFwFdO zy?Hp0bTl3vu!eUX)-m_>#YIs%FN$okcqAE&=jQ-edI2+;h+b~Cu=qlzBuE^q^$Spn zqj3`py}o?!-ksiEmktT!3;v%^A?38|_vfeoagbf$e|qRk?z)oeg_8K5(Cl#f)m1Nk zK0Kd~+T!Eg{A1vI>a5YyXN9nkFwC#o^LN0+i_L`zgcQ;bwc%Hv+t-MNCXA}&<-*}! z5!O&D;`EgB#%H((urK_^ziu{VNrAi)feX$0McFJavvtv8@gd!&TtNV`VsA+n!XYVQ*mz3EV)qfwgM1^)e*T zPixF)>*bG7cjXf8t>3=w6S4ydbY43Q6{uW&x4iTXzKQ)4&{{+%(g+v`3Ot&HFdoeg$hB=)R=YOmcVZ~+)vOe=wr|e z89EGP?LMRx#L)~-TEx}-*j4YFr{bX1A7erVHaYqP?lVcC;SSP%?_Kez0)gO2R{~TG z5y&VeyE46e)RJX>q*SD?0$6SGTN~xj2}vY%?|_D5rux$ZMoNow2YzV5W*;+je-w#3 zaV|Y9?KGF3KT}rC0QMK{MamQbrqDX1g#)T_yK@RvuWG=WFrL{>&r52{!*k#+*lh>T z2@Ha_(35};@L9}7YCE;^`HK>sGc_O0TFf^D`TWso7lq-TOov#dl9Zd=p>GNy^g@h7ts&U3L}rvnZpnWe*l`JYgFknaK`LXd(!M*I$|5|dQG7RRX&xj0irD4 z=h!9Lz<8wl)Q5xf2ctuLZD!&XIZvU;V}MHwZMddu_k<=+noIw1s-nT_q&c`-A1t&X zk3`x#I6j(M4_p&RqbH(Bhc34>chDX{R6&P-B7*7RDBl^UbUy%cLpML-Ev5P7}}B5&ye zAMHw3Q>ZzjRUSKj!;>G!e+yCNfsLusuTh4P61+dVOz`D(`?p4JCo6}G+|CA=a=O&8 z*no$v|HDqyke(4KMyVe0a?zt*xRehjr)}Db+p_*30zmm($llj-9DL+0EA4m(ud?w_ zD1L<6@>bzK_S>ui0T-g>PnjSWJS1WK&Jf55#{(orJp@>88_Ocfe^)!<5k7j-g%u*e zPlFWnouVoKg&u7HA$A-cb`_`077pEV-R&c+%Ux)WV0SfwLY+ntXPVpGZ2tY5Z~pf8 z?0eYg?!g_|0|R|iKW#$2c4Zb7IKMgsAb|2FfVW%gt0+pupHmBk;ei*w`ReKtz&QjOd%*odeic?&@nM%>pL1J@>AO z_{jV%ghu3VH8wXbwF7zx^Z^i(=(XJwRM6Yrj{;3>8 z$>|59)yZb#!x|C>Xe-^rLuq7PFZns`)>)gTPCDw!vu!knK;+~>(qwP5@gtht(l$P} zMm?$b1M0oPe??OEWV3;jRrV6kV2d6;7>l`%2Qkd?yRx~$DQB$*%a@<2_{MjO%NU~g zP6HOOpV4}E^aPZ^`-JGYba9?^GteC&mG}s>&`Es3`vp3&0ge$+(xCC`a*bO9Xn~R@ zr5lzfqq4oyLTn71t&}^$_cpRaAHvkh)9ahE(Nb3Ye^cxH0VvK|{~=LexQfc|bEsZL z-8YXP&N1c;0%P3m+`|Sw9lZWj`0|r;$njJx+Cfkz^97$Om)<#Q>AhXvLw57d*<%yN zK7ES5%t>h34$CDz!BTxYx^2E1a(^qj|6l@*1i=IK(XV`jq;C%=$9m&2Z|FoO3$wl1 zINY4ie}2SML@2;OoIE|-Yz*-9GPRHQRaNiAcA+>(2JFb)EE2BIqVM6s9yB*;cQg;W@ znMO-5U{hvvgvSL4kVp}+~i9qEOk8ENzJX2^O69+Ax zf8Bwxk4;=nS9;A&o@>s=tKAbxn8Dli%?_9+n(v1j;NldVAWifxx33uEGxP5MSH(p@kD0nf0 zxn|xTHLen}{La0|QxGg?Sf^p)RTj{Ae~B4MXm;ag+^HnKU3vwSlhPKvh05sN8_}EO zs8!cfp?p~(0unFH<4;O&5^!?<7<*3eH#S9A4P6;)ev07dadDz?&ieu z6GME(!P2`5Mc{;b64Rs4XdeH9e+>3vN)FCVf?WGuZ9Mv&NJJ!;>QHG=-I6^Nj_6Li^o&%B$b)lz=(zgSC z#`8||^iqvx`1x{E#|b~>dsa^`8}Bw(Y^m9B2KCh&pFq6% zw4e3iC8j{f3}7*oROTsn_`HOMC<60_#3ejD$zsZ%;hgSBqin<;Q8@WYMXX9!)SuR( zd_$Nk`cxre7(Jq|nkKYyfBwhPIvjCxgSKX1f6O6+l^|J98t~f0M8PLV-cC$Fyk}AU z`sjP_bEF95UPmgLKK+9Ey!}V>WN3Yd9!Nh+52D{<$3Wzd$3hqO5VVmYX38AnH-8GI~sXoOCooV=PoRS8f`ZMM@8a+SF1bJ;sb&wbNq>OVe zsIQBs-S-HPuAF+AhSIrb-(%`|8la4m_)v})F={P8(Ou~J{csn+yWOX#{q=$?4)lPuN;9R0{fNp+QHr~Y}SAOLC6Q(Ydzk-B#eT`$N zmskUTQ6qb>S@m+gSMo|)Gs8;D-fT7>{+9xMh|1u{9W<(byT`ALDr~M0UjyBvYNA>Mj+3~CSf2B7I3&evDg*=%S7j1tZ zfea?a7TOIl4vq%Xfz0HhLfl^!qLBCA*H~_<__MBtxcENN3e0R@KEPYQ)GIL&^^O7Y zajyCl0nr-o50yHbk%(6bPYIAGelQEDCcayiON?q;*#a)YBi{$Ovq&FexYCNAWFw2h z2y9JO5PYMOf2ISxa6ZJr4kY5Usl!MC2Kzrh?EVcjk!S%3vB$3xSFgvqDCp--!E1A; zxs3&^V5;XgNYZYA3l5&V4>M8glrM9rCAsv@F8OkG>U|%~Dk2U&n>vu`Bj_C0;*3Xl z83lydCD@&k5`v3-eN504?p7jfxhA4$m!#tk41*Qif2JwcDST8}wcKYFYv;eaqLKK^ zOB+ds#y0}=8<*K%5eTZI_}SC!b0gMV{MRFk)vzh!Eh#6&2z# z7NfZd%QAEjp@xse@Xx@wEf6qt_RYz-clva2e}>1(ongPm@9%N9`U|5!=lof&BBs`xvI0@nHF@NU2na`p?u~$<6@!O1uWn7#y z2L*Z|z?Vh51#JNfm$SSDLK>c*VV|tEXTP?z{B+9m-kU)-oMacfcHH=?mk+%KcmgkR zmx;XvECIEbw!H;U0WX&Zz6Cb{>X$yg1yq0iA$z$}|G~ym2%Xm_{jfBKt*Tyo4lM=_ z1l}+M&#CK|Fz9iH&>jZw=C;5E?7`rMKXxu)=x+{PD4UY$Y(O86vKN$#PZt&#vSU?Z znkw$T&*oQl(Bw{8PP!60EPkZVvK{zN>@bc51~E(hA|bUeFd&fBp+c0{QoF3rC^~<$ z9o3H6uwFLd8FF#^u(h0)_li-lALwp2ACyAd8vdP5u> z{QK*Ojk2#^Z@z;>E;a`#it#&f_E4k7J1A7<8@V^7`9WoLA{1*}$p}4B zi==G{KSH?ze#>R`pJUh)b~8BT{_GsDF+RC6KFlAsMkhMNuY$fBzJ&aupW%Op(cp(#8O~FkKycqO&Tp{*|gEMj6L1S6_H`v z?T4-A_7VgAodDoAG}riE)wX~4m|25;hh(w$F8g_(xFn`7=UXe z)6S6N!wYysl``YT&+seTP8OmjYy@P8cO(E&K(4=7hr6w5PzrPT=1J)eo_rQ-Zb9^^SS?P|qVf#mD_pP(R=XJSlQ4g*ee~3vi#CX& zfDPzQdby)pemzyVsu>g&J=LPuBgC(oJ5=;c+=VOp#%I&)>I4x~uQ0}cXRO;m$VbK~ zJcN$9PInca#|)dmzakZghXu2VPxJtVu}WT9-f` zF}FHHp0L3j;L*TFPRxaWNQ~BYKu6U0pogB$NRl>(VuZL8i=x7Is1BpTP64HqEwRG( zWLmItpe%X;=hc~q;;2~RMEoWw2aA3O&b@1IzdTPtLbyC`jb9qq2&Nq;n8r?4+|G&X z97E{va=7zKR4XvI%eHY8S0y%5CQk6=2}nAM;Z9*~NU{$KM3(oeg8WZmdUZV%vL5W@WMb5M5kO06%S!*-?n-}Q z0a-2*7H_=5WtX#mOXNnE{MvCz&q`cbe}knpg?fqTz#h2Y`6g2yL~w}YMjp67U1!L* zS|(J%i!%~is@BA`$hHb<2D+V_ngQh3~o1A4J&6#C0O*Z zVnHW~WQJUrlVo8ID;8$uT9lVp?EI<+PBDR?9Oo0y4wn$?^4t0Pdhpt%2(p5aoL

  • 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

    ((KOA0+t)Lby!eaaLJVOk12PIAhy?qT>u;`aI_W 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 z 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%0AUacTm*j$*gZ&}Wg_ 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⩔~cuwibK; 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�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

    a^`vKvx1lWS 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

    !{njr3yD&rdwJm(&nI&IAb4a^IF@W4nk_7 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

    $ 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ൿZX~BHs=qz^8m;` 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

    NASyb63#H< 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%0Ds@OWWtUxckKNR$hkf8tjQg2 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

    S&v&%-o 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

    J0=HcAx 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ΜQCH}-8P}De+%7LanbHP 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∓8Hc=+EK8IakC2XtYe&Ru#OIXK7Ycpmv5~5@qRLp z+y?>c;t5rrOy6ToJfX@z-^1!`LY05M_rIv}&-cOi_;mU{{2u@LKKdU2`9A(0|M?#4 zvJcw)i(>yln|~4OztH9%#5&ezAGG=RxF59n_qbnZ^Ur^ASf_o^=3iv{58C{D9MI;7 zvUt-P4gt%ly}sY0p)kFEzsK4K@&51kc#d$q|G}c;Il=MY@3H>D@!#*!e{uZxd)(_O zZu3R4LxnJ*<9|@>Uv&HrvK{wrDsA{4_xN7_4~qSJ{XZynSk6z^|3$XHzSsYA+y_(M z|A|cRe`9~yKUnh#RsKP;e=z7N?kS$HAB_74g+BhqvVV@BaOEE)`{(%M_nH2|xPOkH zf068eqSHTpdqS;$aOkH`zn)O*6AoRN)&gII`-DT+KFIRFj{P9we;>R0jd1@QJ6Y`m z$^OSPlYJ2J6Kef~lqY{<**`dR+{-V*{ewf#r!{~52h09Jr;ER_?4M(CPrnHF&#}el zoL7Ieqp1AGvQO8jPvg@E%l>JX;?wREmVIgyOc}qh?4M)NU%y!P&#~nP5C8jE?3bq* zY1(&UZBV@40uK%X_WGE23*gK}Jp1|%2sQ&^l|R;wPkxG3Sp{MqQ|StewZ!i^ugAG* zh$(*|YWRa?cX{&%*N&e*cy_%0G1*=J{2p8$9R9xJU-UcKAK)4@q1Jo%7lIx8&dIBM z!nMB;|0~U1%v;TLn?Ef8VJ^5GE`d_aj z1(oo_U#|nTo=jrSe?YCng!m8C`air5)H;81gMa<}L9NgK{|dEU!HF3^=MQ50%4@j(3Du43`x}Hd z(9F&B{y?DrKg9a~L#+S1{xLl-|AHj{tG|BRze7Z3>JLDVfBMhoebHXf(<2!9=@);~ zeVIQ0^Di0~BkJe=d_MR6`T2uz{~*kR>3M~C3+Mf5{}1~7pFbB<cau>G$s@ zT?+2Y{|FlW)8D4|`8@yK^gcNL9}s`|K;D1O`-6hV`~4a}@OjR3-_ef09nnZgH9uzY z|J8rrWG&Wsm>+OT)Bhn~OJH7}3dBzs*^w)sIO@>8AyNrVitwp-bfIr_#XWR}aOV=C zS#0s}fXfaY0#b(#B4el#LhYkxq3%|WP`@HTHQlh+P3GJ)$v?k;Tar8%<_fAFIr_Nejbv-Q5A?CZ*GsIwzu&1w zi`T4QuO;x;oL>JT-}N_CN#D=IuG8v&-uJA}e!pJ97U1V~Bv*f4$139Ib$9&r_l9J- zKd-|n{;$`6{XIM}e*OK(vp;{YkCrU|ejR4l-`6R(|9PGEg8b+8qq6yVe_-l=UN;1^ z!T0q_MrQK&>(pPbf6CQyKQ)pB?f!ocX+Qs;M%tr_=@%-(n}op7js7P{`|wYsebYDS zL_bLTlQ0w2Nx_?tuc|6d!P5~)v1@;LAm#-@H@0&*fCLjf)an!`Z zigvDE?+ESjiFuCT0t|nJx)`qjdBw)~K7V5{fLPR6K=m44NbaI6_a^Zu?ngbW#N+~s z;gW;r1PNQ#&^n$kGKA*WzTGDdyjR(0Kz3{^MX6=O+U**1@iIC2Cy3YY(e=3s&JYy8 zJ)^b?8=g)_<*lSQi+yjLhiA?QB3qEN-Q_tO!W-1|2|Q;blURQaC`QYP`~VS6FCB85 zTBAO!@~I@7JoNJj{Hlh}21j}xNny2bj!Fg@$K?ilvygz2uLo>pl;iUOaX0nm`xzXjLa+xN@=Czqeq0&ukbhZ+7I_ER0Hr1P#J8-XHdi z?F?D~R~)!sFPeX3coDWG(;N<7_Ortw&_E}+kYl%kADYvV8GV`&Fjz8=j78cr8n*4T zG3H%olu%8DN;dII>20|Hs%@zUws`hixLADQ%3FYhPOU%xds{Np- zbB0+R!<$4_C~7@4G3J-kbg91p?~&-xmO-_ADrgp<^&W@ zhLavCDQdl0a&S}4y`uO$Uy^cUn)R?gIcgJ!06~DOOI;&39o6D|mj{vY0tG=9VwioAYdLYi728 z*^ht4AQp)-(>SwUOJ^+x6G`5#ouGj7rv>JnmhBWe5S~5;;blvp>U92cExig3skaGt z`-pkW@|mc=K&#VV=jIi@-|w0Q50$*0VLduejJIN(@0xS-=g6#`#Hkp-U2iFOEZ3<4 zqOEXdXGKu!PtPgpoQzJ&`t*e1K;$P*dB%U$E$TuZFpQ$Y@NmY^S%n~e_o}z|j&foG zZ}ofui>7+~Wu^%zEIkobanwmZKMrf+{@km^)~FEdrmyYEcNV!D#-0Qi@9h;{sl6iS z$BI6m^HMe|+3RHSh7JaI`8+i6^}rWwovYcc-?XEvKj9g#jhqe`b7OLA78Kla1q*-e z41U9}4zjQgL}hEp%K|_NIf~{luukBL=MH;SbNht~NR%(z5D1|nVo+82-M2aQw&zPj ztB59jRn309?=HUYJhtm4{82%4ebvjY!0$vJ)|%k1zq+Lc=bgTnS$XmFv%7-rQK7!5wt`#%G?cH(uW2JY1G}_>PY74<+2^ z+ue8<6l035_7*hZ-YnCeb&9vCyR(fH2%g2lTOMTv{F<$aS$vSn1LthQmH}u~q}M6T z-Rr|+nC!v!Jav3{L*!z+IK!Q-@~1J`O- z4@)+#^A+oPugzP+NWp3G!mp#9JHMO^II+pX<8?!-(kpyJgw@6JdRmGwn4(xoeB<#D z0A60$V68jQRw=}mcCyUAh2wu!KlX)@mGP=nL6Pq(cl}BL|Q<@#Zt${VGSxxd>O>BP{I35GXIp5Hc z^nj1;0yb2@caqt=I?O^zz3+5lbC?I$>(P27_vbbA9!5xEv3pn+-fg!|?Pa)N*?tDX1TOhgoTY|{kjgWsKb!g z)KO@Vqn}fj4r0Ub29rdM4s~-`Y8qzb^L?9MS56x&eNQ|$#b$rg0Rr88UM*4N?FnwBXZuWtqLnS}(F(Ub3`?$_ zA&IZ<>#&j$hr54xCbg{jIGKcxfLW_;j7szFr2tZD!)J5SEe3UyOAQKTN>M6hCTiuw zYwlM2<-WKhT-Q7I`3IZeFWn`~cj0>(-wN@vYCGfD-lH6A!s0c;H&1(<)~WKO+(N3h z8$UmbBwU*Wfi4RA*-{cv@JQ{v*E;lT$cpe6J=}HR`vQNn-klHHVcVGROPnzfAMHzf z5hpr-R}I8vCGF7H02|EjdwCT`0wCsjDJiHNC(Y)TXdp#K^&uT*mrScVJZy(8*c9W_ zyQ+#URryR|5i$_cyCG;D^akQgbVI6f6>z0)vzH`F+so0&cC*v{eca2(2(I|~lWD?M zqTJU!TN{6-@TQ~HwYtMWowU~-emsw;(Al2b0YfJ$H!D zoHLZIGTeE2w^|w-HrpRyi}@m#`%(v7=sXvwbo+mLQKyF~aLfG?)W7Otw0HK{&mMyz zZ!M@87Z?Q%`o4iFPX=OOpAqDFRz|rtkuw2V_t)gOALvtp;cY+8eV;k_^xn7w7;A8} zbGY9%Wj@;HPMI$lMPZw6N)ky96~!Y%E>-72jD0}Phbyt6RB=4P-Fjv!>3cti2}fp# zm6?B~!=CPYdhOX10>+u~yslaJQD;k42X^F$!n@*5JZ8^#pFKM9EyIydCh{ZEjlvj5 z263zE^{_j=$)1TDn!Bp&S5GeXLE(hQ`>f2^#(Xr}B#=UG*`MYhXKk6<;KJ135RSHf zUpMAUk67uRyt!;w&8zvP<6AB6n&6%h;|TvaD4fj*Wjj ztIo4@_oB_TD=sDdCO_tJ>rfH_u-OA&)7x`QitQu23-wEV(bF<^wxi>{uZC$Z<(!TM zc`1?dh!VPmL(3ZLkjs7xGyEGk(aD=4mMV=0I73GtY&i&NY8CFoVHZKoUKcamo$Ca|Q#|`smLMZBIz2A)vkY z=~xJ@&*9Fpp)}u87|6Ew9iFMBt8XzG+%1|I8dxmVUzHkmev_oF9; zdKeHA(H`5|2`*f-t154HM`Ts@+=(L-=aq9y-dey$xnMgnk?xj4@5xBdOoxAhTQ=R% zZ=ETk+uenO>~7T?9G^Ib6KWjE+RN?XNS;vCcx?|?k<6f9$_LE?6kFY&+T_u&jI`F~ zSQyD}VjWkUvj}7idWUu4TwVuqId1LiK&HYB<%nSex5wrH7x7AeFF0Zs6gj=+lPg`k zz(`=mW4f|8jajknOi{azn)QDjkqxk=9piqYOqD<)f?2i>An_4;GP<4Kd0^+Kthh10 zpM>-|*EU+r#zV3aZ+owQ1qq*Vy9-JnkJ74b=Hv2;(zyYpY-jgOABipUQA(Rh=f!RX zJ)d$@-{5PX7g~@ythjUZgS5Y@gs2VXRKv0v$4=v1BM-uzT=;9DSrC8RmUzXN;(-1f z2Qgr9P3&K;CFwrM0YG_a4Wmo2-_ecW`_*3yN__P2Uo=9-VJA-$o}>-Git+)Zb;{iCi|j4Y8DW3CS^PJ?ChG4M_rV z&t+ZgW7^(2n-!?1XD5i{Sr9M1{C;9$3u_7@yDpAUt>sDwYtVnTVRy!}#;CWtjSENz zDX!M)Qk`AgqsVS97%xvO(7|&-dfPF#q!mX|A%@aH@u<^!yU)+y4W7dG9j#8Gws3&D z)DRQczPp`c+;`dWcBMh=SF|}iMh9}^Y_NrS+-D*Pxh69w_oU436EZISM+BhnZa14< z4$j^7wvD<{4w7@7O3Rkah1tk%9C_sU&M{S(9A6?IgfC{^KqoR z=P8NqhJCs^Ikq>9Z7>b|Ibo;Vzvxhu^;dZd-V2&2x+r*_&RW0i$$Z%kEmkr!q`DXG z(=*mD8k|S^ajg~!y;8!Rwogh-{!3}$4C5O+ft|8U(z$`rmT-f()wNjKJsKHs?`GWVCLi*~r&dbI9a zqRUMQH12iv+%jBW$0Hv# zWrw2cl{)zB>9tr^os|dD3RgZSQ`ufHWyFxG>aETX_Wm9hbGH!YFu+}|%=!DePp=`B zy_bL7on>s%Gzh#cx!p3iz=??Q)IIB^QVcr<7<=}CAhQuahGD0+6;nUyFnb)?u%Kg2gb1*Ewf&8+zQUQsM+`&lwS$TG1SsoosbM;Xos?*XQXlBF~R1{5BJE8jiR7 zgz-4Q#b!|^28Y|ta-Z&gC#kAlWY%`QeUE=ndf43nT0o`0=E0V1cF&@{Z3};4+Qie_ zws2S^RH|mIh^($#x!}aX7Nl+Kxk!9B; z9PqFAA!Uc8YsX==G3~oq-JCUZm~P!c6=5=b0f4*hsN^1rMmL)+N7I2n$FNimttq`9 zoWDPRJ*#YSFf;17sM=KNPlmMG_=dNoZ|Ugk5fcL8MBbvXGY+@IkQ-*7#~3)*i|SJC zIKy_HbP#v_!oPB}wNDcF>GZC6`yaHn+vn-C8Qx<DCTd>8%#FLS88Cysjd(e0 zEY<1lpeT*|>x?++9==l2}4_;?{_^5Oo~QJuZpV{5hK~&ZPVQZ z$#>_RlzZwKd#~-WNrj3kLs{JTGBZa+qIr0;5~}iZR_OA6T_X#SQFp;?V@OV!G}xsa zXC0}R;wj-HV1_%<%ExT!t=?NE=7&pvIA3sjet=I{xTJ|x<^rJ$L3SGDRtCmmd$hav z@!ZfevAu~KuH7s^2=Aft-@)*_t&Yf6UEF!J+i3ND7Q#3qg(XN;)D}%~<>S_zY-sh^ ze06{C)YEfwN(kI~(15QXG!-{c`BchYRcC-mUqndT?rHg8m&&7?Ys%%#i92h5G}c_5 zU&5IbbjxZJrN;fTKQCl1lFio>S`vG0VrXCXhtD>!%?Oqs@a7qs|gEn|&Z^_dtt zzSW_c=WIrBKUVJ+*14FCshpZhr(rd{Tf7K@yK)}tfS-L7(ya~0{;IeJ%rc8^6zg4g zz7j9Ip1K!X?s1&C_kw|3G@y=ud9&m9Z1;K`W_}UxBh(YCV~gQ5rJi19aU5VH7U6HU z1`CYOhJp7m$;W*mPv&hB*V;GW0+UkT;%mc{pu70GDEoSVFSGLX1HM#va4<95d)Iq! z_1qp_>*H0gd&cI-Y_+SnFuHLzP$0!MkL*TafMXKoST}iTIGa<$>Ox_EBSG$~y*I4x z=>o))fsmPN<}FjoL5O46Vcjq7<>y*)s1}PYPg2eVa=*r`Z8&yD!7uM=PATd77xGN-)+Itmp{A>FMP zsx2m7$p7zS*Qa`3_nmU!oq^^;L<~PH!IU+FwUqKIqJF z@n$bzMqeuyI026cv9i9Lu7O3)?K;r9FK(TGdjzy!Aou`tM~b)IrR#3jY$?8#yEK4v zo)$%_hu%z8vCG(hxvK|uyJa%I9p!Yk90fiAhr@R6VK~~CH!<{uQH^K^K*>T8o82AO zF>C!)>1Nr~3DRUUc~+!Q#LYL*5UvOwarsBOZ7(9>yd0C=EmkUWYU_QVMlFlr#o@8Z zE-qxn4k%}QSw&AHJSid-2w}9fD!p6;vv!8j(iCg+Y@T?3zX%SnsDW&O*eMk)lO1!H zkMndzrpt)q#>1X}8x@6lO;_f@Q3V)+%}IT&EBft~-@==Mn3B@&?dU0yYE?g;5NUYXsf=zxa{(}ea=jE!!rzNvBK@*9Sp18Kome->f`%$ zQ}hLKQyl1jdIqz2^}3vC2$+!bC;zrqW3YsQt-gYhr261zAXJ#yv#MzEs8!-&37+L{ zQ8?O;?RQK0Ru2Zyi3qx5dtImcIDagtnZBms=jE9!afi2Jz}Bx=25!h4wRI)>%0VCK ziU}^(Y`%qp_%IqbziImZE_Uw-`BkBOIc|BqA6PGct~V&?hC`Y2I9+cmy=l2qZRok? z6_k-A>&=QZDwg0;_Gf6W^StbbqfH)f_6-qlXfSS;HOk>?j+OY`5xFf#bE=?8_YD)7 zwV~vxEUW`U&X5aRqV%b^T@;g)W0obz)RRq2zD@_KK;4|6E>!7(eJOeJP7nQY1gM8P z+wJv#HS6oOTX3OStR3FGMW>={zT;k~qVpOeZfe}2yaa=)Fx7fkF(-rpWedUHNCk#H*1!{jHU zvLqe6xGW2keJsBpVmV`;x0_Clf(C~Ug2+mL9c!^G;>&QZpgZ`CFk>L=a}MqyhmLaV zEboFy&nXHKNoPj1>!-S3+GW{evhzmi-6Sa=cD%<>cE1|3rmO%RQhjqtjeLF5^S&?@ z*o|zd;2FxSQm}UTwyDD@#R_E0h19v+id&(9U4L3L*A-XOVeKO2{+vO7Q17Vp>DCuyBR%IJJ@QYeX*|x#1&rfYV8gz%!uR2ue^a+VFfOPvp4L{QuYX8L(zcg z5$F$aw4N==5d9;FMWr4yva?&T)rjL`=h3I0;4GSvLBs6#;l8+`>}7xVFDPdPfp3w& zZ|B<-0SOnH4eQuS;i598vZZsTqbO*9jNS5d1$t)wI09q3(@w9;`VnoO6gOtVL1h30 zZG*eJ*jsOZxMoeStnc-BMG?2~t8CXrXH+@4B?pt)8Rts8`<{rJdYYIGf5!cMSM*f^DATVQpm*sx% zcisMR=$8AeH=X#PkCK=0&`QgIZLPaZ9sX2W}4$`ztLQ8Bkm8UO;Lx!K&>7R30dz| z1*;9ytSAv~Fr*Z5-#w+d))a$$AqFGA3P_3`7RcDoD5l%)%gi%5 zbs$P-;C2kCrsl=X!iRYZ*KhWDJI=-s_VnI-zInfA*QW1w79=Tdv9?~Re2;FmAq20S zddltTrXv1U-w8sGwt7Ju3#QGZ>%6Gyrrkt&T_)|}ajR$XlM2g9u98fD)499v*=H?3 zim1P&4I` z#uRy77Ll_z@VdsbS%Z3i>t8dvmS4`LG9R%OKU3Ddjn<+#B&?M-#qN!y<>pXIC4E4& z1{sGUC>c2{dse3EES!0_lW&gxTYIcE(5IHZvD6ovUF9tzBU6W$|IWeZPV2c;1#!=E zU2~!0yY2#BisDrT;Fl&o`)m@LNN_l}yjh}q_0gMjwNxxEE% z{;bZ|{d-YRp6ijT02Jf--9!ScH}_QAz4{(4xXh5Fzf8U}Bm-BvS};r09&8pyp%i$K zYtA}}HWT_6cGW(iwn^^ITic`qhxgk=s-ZH$vzdp+Yl~{UM0_m z=-Ll2cA1t%eL30KTj{pCS~;wJh^moNkvwkhXwr_H^)~NupeUi_QdrOmBvk+!2dk&q z7~JK)+`MPEdlg90mVag#8ZL+WY0~ww8|V7v;@h0fm{0QZqP2}zE{1NNEndNOTh#JA z7TkLNY|9{je|f>O3ZBZAU9J;Cq9dL%tSEIXOIs5!ePGjLdMbVA)CLtpLLinFZwC$q z?#Xe|^NVH}?a{;!O&WyZ#lDWDZEN%uR)@|I5aseDcaea)`{&Gf?w0iPrrq-E+B%v0 zx?j~pF3w9Pj_eB*D19-K*rEH z@%%JMh+JMD3VT~7m26#DA@svh6K|TZKjycUYZpU28~F%4BXtO44i5feObbJFh%15e zvfe{*7iLfEWPLiayyVPd2b&_do!_0d-SzM-UCFPpej5X*`o$&Emycjm$l1D-!eiB6 z`ZFSb%p)p5ig`2gUN{?L$-}*ofZ2+}^3T1NEzcU`%wQ$=d?$%$Ip7Q46$^-{ zxk`ew{fvk?y*!+bB(vX*l&fs=8TBqX!DHeRamGX%8a}9t*JV5J&RHeF&0>T}pzLhB zEmKODjLb9hc}`>hUal=PjLaMsQgfkycX!`dR4@B>I*_7GEXT_+4E$FlHm;@}`^`MM zoE2HVUN!lCQ614hvE8+rLD$#E3-@43t4N-2R%|kJ?28!Ev?fU7_OT?k@q9S#eIJp% z?reyURXVIGAk8gn(W~rrI3T10%}3;`49B88m8|tFaa4{;vEZ@KoZ^-Ql`QOk=Vk$< zZN7zwao8`l5xcCy_U z-d16b6-dd97kTj_+p+iE(YZQs5Z+9G#Bdf9&=g#xewQ#`PILx*iB4O)czfIIJShoqcp%V!yhn58F zu^A~nL}ZZl)sdSGv(;uVMFhp3n7lQ{v*;oFW5Ao}I8yU)`wKe`JIRTE=l8GJ@e``7 zCLq{9W5)hd3-^M4zz=O>q4e(XFO|3tK7c}hgLo1`%ZZ2 z+PXgy0>;m4etKdJsV(|Ef#-su@O3AiSMc%u2NST+2U+XCH31WxRg<4q!uM?dFaet| z-3~Lvs4jr(U6+FZA;AcL^L>_-QiylYUEQkUs)u!@Z?wYRMaIh=FFHT?Jvo--oP#Fn*|0Eb{1f|b6KlZVl84PSWZw;sIcVx$WTGwyC?JS`_kXb7`fGO^;ctb? zV>?iuI+#s+S#trkgu`_OAw9x3lqGFeifS)bMJ7wsWe6rGK4l#wwXh}PQIK0Vf$|5U zeJ9WW37$cIgmNKiH{=Wy++VCY&Ixp`B!`5=Kda)th-LU7?D7z$a~oZ(j0RwV_aND! z_3V2SK*E8B*G?pV7;$xR;OeR*1U~Itii8oXVAp z)P>tP@7+uG;e>-LKB2+!9XWBruMhH>A<4GlZV#wJ9*c!agXyLpF7_#U_|G)VW2Trq zM#-vrNj=X0j>(UH90Hy>-XE9k#q(>B@b$$QYvt290$ZOxu__&*HL$i<0fD1#S#^!8)@T*&wWrQ5hoE>lM9ReYj}vVMf={C zidlc0ch=&6FmrNi<16ReJ(*+texJ5)P9F9GeQKlgLETgPWiiihTX(tJ+m_v2Q0lv~ zHs@G^&b2kI@etb~!D0ZIT_{cF?mWqLVvjiQhI7=?+3mGk0tT$Ha*k)VrpV3i1#x&i z_x8oARfK!)^s{RU^4zrH$zdL)&Y$-oR=3!Q9pQ#ci3x|`EhyUe zQgqK$8ECV`dzBK4*d&i;B`Jcwh~>x4DEIjl8jWp7rFM-`nvhpqrgH~<#fdFeG$OOun^?c|^0Hxr6Upi)Zb7yjd2t%WA+NFv&F88iMCTB~) zW!S*?m)9id_OQZEE5GH>uj>{=)$=YxTJdO)^Jab}cQ^Mb-wgg_=HBiyxJ~L73?F#L z3-*%_8=7PhnMmpV)XFDN4DAtHHZ7k#A~WOY?O(pF)TQ{IR>w z;qJSKx`+e!X$UPihui*@VJ!X6x z_#fEVA*XA7Yn+g9fb1R^|G>FH@S>BKYoBND`BfaqwKM%JZItso68j63<~kLB-O!4; z5mU1#>sI!)sCPq1w4LnHDG2R%-ngKQ$h&TQbjt1NR$63LcSCw<-lvVxuaL$(s?7<7 zA(d&Y>L+N<>1q^GGI-xs4=URZ6#r*qr(OSZtCDmd)CsT_Rmyd`+Wk6%;ufs`pmNBuz*kk*YT-4{}@noFlwqO?Q zF@4;(MX`h(WBgKu?6MUkX0IQ^Ikigq;2vI%cPQ(wW@?<@n+rs&&^eBIOG7d*ElL=` zoxyuwvh};!t!?ipP7ybbUNwt-Vui7MsIGoPJY>)xgy(8eDalfm)_wi(mOWX zZm#=7j#!>M?pYXA^7eYnK+mAxGd6?%P#C;>Y^~>4E_%tUa+_IAb)@=v(l!HoSPr3M zI}4Is-t=;yOuj5ui@sh6<^lB3j;AB)@LcVVDt*iXyH)Rz6k6Q&P7z!o%K{OR z7H9-t@qKt_0AaO%Lv}pK?b_spYV>lmysI*l<`kay8=h`r?e5@lTra?cpmx`K5%%k& zxl?A)7{N?NkJbG#k;5V};yPY};lk-uVo>T~En@sy?j!wjD@iQ*E)mo=a`2R&*ZJKV zm&eUc>RfQ0p?$Um^%Wm3)xlOy>7?&dALnXOc2;1USx}FE!riFp&G7{TvPB-AuPAZM z5_Y|CYDn4A&Eqa>HYZA0*&Hfjd$h9kO1nN#oH-+B()G+>YFP0-ce2&F8C_52+i~cH zbX{`ND6!NC(Ha~;NjE2mCR8uk^HKZv)+8NzwdBmBp)s4=>~>4z;6Xp>hFOuX_oJf( zZcwoEgwJi9zZ9*xVlgS%gMq9W zQdo?$_KK}~h69@9GDq1L2>4N`k|zKZkV;tlwYp*~n(+pz;}M3&))_@8TACLYYFOr0 zC)}2?w4#@Hu*^}{hxgk(lMt)Pt$N!+*SFU7Ks;Om zXm(XV(mc{f`m}ChEv4g>ZJB$kgI~J880qH4igU=#x5v06awto35D;RgRD&}{DRq~O z+$}mwF^PcLKp|bfGdJ#X9O0nHg7X8mcKp57K5v*oQ$T!wzfCagV_4xqHo<_pQ6fSGYl;Q_bfk=qYr2}f7O|zv#POlUB(YGF<5%79~{m}wuDm$IP<8Sx$yI{ zM(FX^kCeJL-C|#DBWdl=O$?5U1H0HOkz;Rv*pW;89X%Gr;(i$On>vfBrgLZHBHGW+ zhsUMeUbUH~aM#=1v76ZNuLeFeJZRI_Krm@+ouZrJN{mxQ(>gjii=`{W5LHW0^NZM#Hp! zeZHI@7KB#Rs#$BI8tPUAP!p`n*4+_gUi_6Vkw~Pvncr*M)du_rh!WQc!q#dFp|!LkeQmgdG8# zvK9{@-TSEvT<)pekMtRwUsH$4nUy|&Mo}%Er&Yfjq3ThU-G0T46lfs%)#)}0P!i|O zNHTAqBUa3bgusv_4@D5Y?{#p&EKy~%=zd8NKwJ+DwwO0+CI<5D)-v_QEEI&}gXnru zu0tL$@02t59D|apP<}*>XJU-aH)<|jKa}Fnem5gYo?rbRqrIczl1*reAc^!eiHgZ7RtN`%64*qwY-1mO?bd&>GxDg-pqA82oz zm@JA6aBqL3y*07EB09l~-A77)V0^OvztP_HM`iH8hxVq(Z7KpFNkB0%-LX(WH~WPc z_yhB;@vyr``8u`@QyTIm zL9b5pM{JYrqZRgYJ-k!T911CPa>ibNFDnVfhVj8JrJ)&@v)V*}p%x zr#7&}2Tmb~bs&pihNuguCA&Pjf_^}Wet<{|-l@PGzz$vGU_5%$C$);pGt>31kXYc6 ztA%apbe$jk<8+-90w^dD-2ycWI2A6%Ofnr0qg~YWzz)4gOv2A6OLPIfh&%S0CTPqT z!9Af>fN!;iZO$(Jsa-XH0re)^ak7l!=YM_f2SFZwQ7Ay11A_)c3Q&D(SmwhBfkcqo zMUJlTf#Wf4GFbru02kprTm#c2A&fk|pNse7xqf=T4}$!IfC28*lQ-G*$$M*yJhN86 zhYAJO5L0`X7TO!u43ovr)V?3IXVURMxGUrQ!H)oYuo7(vZ9jg0G3*~S<_G)zMN>&V zf^ie33OJW9dSb$Hd{7fWM*c>D0|Bm|Vc~B}Yb*PrtYHTIHg32Uc+6M8R)j!@z{+Ts6fsqQn_UZhr($os3dX_{>N=F9A$@!OV=&Le2KEp_EbBYW_^NY76}h|E zIPV86DIw+TC&U)|hbz$2ebc9Qp3v!nHR0%gBamQo`PcOV+42i3_ZJ#{LUv5p2S)rs zDEUAC(l(4De(u4y{U^Vl#5eTI-+^nbJ? z8ifjZ;FMh5T9@r@jg4GdQi1rvfdK`6fh7YP5*~7QAi;p1T_GTYx;OVI1FMOP4uOXY zfd})1IL~e?VQ1LG3K^wj10P;sD)ns`026(zELc5cT4BNaTG2ES_QdV-EsQoWR66iv zlXyxaiC&+7@dPl^)4+w+(sTE7{V-dv>>h3PL2V^9N}~m`$bpq>#TojB?rMOf00)(B z7yRR{=)J8){R{Tx*4eIp)Md3LvHgVX_~0KV6!;g9@*7+DL2YAIHlenE_3z(Uwhsd3 zgLR&c&1Kj&7mD#7Qn0`=^YI)EN?=&4YoTE@V@z`Y+K{-!2_wm5_g4}q1 z+HS%BhN{N}77mDT7>4$tZYU=$@K=K-MJFKl|D_E>WD)rnwU+qR-?T;h1RgBVfqc?D zU@krw+uT4;Xn@)Oj?-sGMlfssLF2-H7lO2ZNDsmf_WgqunXc)Jc*gxtz3+2`{xV^c zr+Y5yDBF1uGJoUL+#z7l{KwB0@NN|%SdDyk?+Ak~jVMUw0bj{aa$b@9C<1;DEDi6h z3CvnTyM2Q2|8QQ@RQ}KB^+7(J^)W0k7obf)IOorNiqia>sq5I8-~}<4ryTfnhih?+D{@)f)m_4S-E^aBd;F54aoeGyimc zG|o?f!!{@zcqV}qMp6b?Iej}}`oH%Y=LW-RNUdOEZsmWWGl6pM|3EoUeWmBG(1`+1 zE?;d4t`e6m={6;BZG4~mVzqq~W8tZR=|4x12 z{Y9PwR!`6+@}&F1fHg%PVl}?PGJOX-Sj{!%JYWL}&yMG>fO^L+Kh@=e z!F)1u-3{|V_ksmE&S$KOf7%;bc*x8@*lGO!J1$Ompr85R zH~tFei|6UDxdiuN`kVa~C`4I*9vWLZTQg03?hCxn`fO#ow;B;6Z3SFQ?!gd|p*SGlkV6g2;!hQ4Fy)Q^8KY+p3t_dPLw{l?0oFMQC8@ofx6m_O|iCBUrKKjH@S z%bOXsx13oxR}B>ax&%5a)?m`0D@YZBewClp7%c*O>@{Yxb+8gY$AL5Yf9w5G#c5q+ zg;+X_Fot1p70BUxei6xku`26>ChDJKfSSdbfN~!__ixrbkjIWAuN;6r4e3dIiZl44 zg-u=Se)>5OGt=Z8{7>H-Fvli*S&TixcdUY;3)&FhNHLYrOA?fy zrSMQna17Qsxd?oj5u;2HA^~nr(nJQ;>gLSB(x5NCefIy_e*GQ4VWoL+L8Segem$)@ z|G@D9?UqjK`%fQ#{SW#&Y^wf11?MSTgueau&%O`aThYdT?FRuEe%8DnJY522>Mz7F zzQ)fw80YoReX&(g!ekph^U~EB`rjosOKLPm^hN2v?n}V*bAapS)wGYQXu}2dj)s2 zUIl1B(5(~E&)29kbPvEPYXV;>3h>}6?<`n1olFrYq%Gm(ZpJT@$&C>^pD!wSa(Mkg z8UJ8Me{j6-gvS>Rja&xyns9bg;nK?v*4YyPhuHLgx(x)g!*>jawU$%}R;K3XC8~Gj z3$O37$3ql6!{=KG*2&8MkG(%>R~5_JHqakr0~D+pry-?)AhkkIQ3?T3Q9yqEc_yy4 z_KwKNc;hX;bDc)+ydt-5QK|{dIp!GmEm_r{wgYHeGHyY?`!fz6{&NRCB6RCmw=JR% z`I~Bg{i9C&{_Jz@@H`jL;3Bt931tSxsu%-A3Pe;GM`=^dR_$^ID+sEzxH?;}$oN1E zAny{M$U^bm^Lb~FT?*k4lq1+gEr{86FgF)ke)105#%}p$%260 z4rDAj^ph9j8p&P*dJ_HQuV)F-8k7C`(X!%yJ-OCCpJB%BcWwMIZpU>Ez$flEHAW?1 zdw;fHv&+e!w|}G3FZaMi^?H0bZOfHE>^BSTJK277DpEQ4RNvd5$P}2GpY31mN86ZX z`7wx$blzjy+chWm_1f3TX(!F%J03+1@hI#g;!$J_VzUUd%}ro?+Nd8n1Iv6R;{D2h zS&)7*vGlqaGucW<;(M5Z73+Rv=JI$LPY4O(9~?ErnSN6UpI80oH{=~x7bOKEn;LC_q3ornAVnmWNMv6&qI7{P36lBa+L{{Gb6xgH;8SZu!5X) zppj$jcZ}*9a_wNh@%&~C8`EHrXkxiG1YvK*)yU1QaUX*{1>jSlHjX=} zH{<20TWNUTu8ugjupFT5OA~<|rSceuc|LNQDe$DEXiHyhO_t&gEZQ#aCj#t$8N>DS ziTnMgc>Ub_Nt^l}gWaz<7)3sAh7~~)xeK>2`yNIvx zXxe)fV57bI78^W^@oe-s;Q|bQ*Uc#qpPrpr9jHMs=%)wowg=MUin3SWnIuMi+(4ha zvSUD=;CfD=0iT8UBZJ~S8%dRM95U&l#gnNB$$n3|irpkG6(;=qH|pNf=~*sSvI3=lUo2 zsw>C7w(UzeJiDipg{wkk6v#9$H8sDvA~~)*jQWu7_rT03;&vj)b?}AC1UrjJ6DRDu zOA^no)QcI-an0j>o*r8M(#)Tj?~xDVaY@n^V8#7M$CW~80+1zDGv{p6Ax>n0Mv6H1 zgy@(NAB|7NW=}m)69=t-eWEBUh6$aCWv?=iqfR-;XKiyU(ckGvEZX~H`$QMsB=&Wb zpMEK>zhj)Ae#(ym*Fx+XeeNNi27Sz@k3!lgi7z33fX@@84LYBD=69@AhcXw>1~Lvu z-)7M4PH@i1*c|s#WrgLw;(A}7C0ex3*g4M{cSc5zDsm#OQIbc0Jm#@pg+82*5J{44 z4ME4QSXr#S9QE=v;0=}bPY0!~qc^(yCf@`Hq;h40Vg9p?3rKoz^l zhYurfi=3}>x9Xujm2j_lhs*o-@fT!-@??FqD>R>uHn(}|k@)c##TIsOSZolwx1zl{ znI?#Dn1a=#t)DM{HYyTXk&mqo%V<2+(72%)O*EYu;O4~F?R5lsH?NW@4x$3iY48bA z8%mzL?dSQA86Bw4iR%1ooPs$SazFU!ig6ykRQ+F{;U4xgmiiTEP5@L#tn0Ik=YQ$T zhjUB%H8_u-SpS#8+;BhrwAdHT!;Kw*ptx}%tiXkdtc=e(TU$-^hiR5%XSQArUi zBJt<z#i?eA`6d1pNW&2A%SH z-O@)gCvuc?0h~>;Pk2VUBg?wmV>nKpYg7dv7vNW;50HXJ6|+<7l5BSQ+jLxA62J~Q zRME-9RLUxUibsf)liwh}$6*_6{Qi2iyY0{(4lNNw)g9JUebxNIw956ARV0Qzj07WjWuEnSG8q7Y-U`^eyD>UqAbq zg(Y0@4gKF#B?IZbLZYvlubwUV@-B;PXt`OPM1E}ny;;?KN1*fLg^)wK#A%iEYQq_K zU&w3{H5|jPFUk4L&FFPw#SfnJ=-b@m(fG~wKGZ;es>ZQ>lC5yH9SePrZpT6Z$NaAt z;R}&}#FgePi7S0};%BxOU%@7R9KGb3JNyLiV-UP5fOaS8#RB2dBR}I^uMDCd=2k>? z%n;S_sU4OFs)m|>XJaEy50_yZa3)a+xX5-%B=~EYkNOx&ImGHQnZ|JN9iuK}cn@M9 zL)67aOVq`m_ZZ8gbEpv61rMDt8QWuzRiM;=k&WDPC>$lK<2}&&i8KZA@ALg%s$%?d=!Julv03}p zH|i+Aud+(ik|RNh4{HDl0N<s3>6Zrdig1 zlou~Sr7)Oea~eIFJL6wZ(kYpaGjpdrgW)XwPyXPhQ4=YQ?}HBOtP%&4F+w42px1JD z1qzxul;TT85<=Aph5;d~NYrUi!f=8@JHP8$IVhfx#U4Nlt3Wvk z%^Y-Rt9J|KEymKAH?g3#6KNgGK&@qeDIQX8I@N+^cm=)any5}&sIdU5h0YGDEbF`> z@;4Q#POVjTUIf)Hl*K@*rXFXdP@iI1qVz)_26ukUsC;X7kBCcH3(XLexiuOp z)R<5u15XCE@z1hQ+7tCIe4a#!d#E$`Er>>!h87H3U93}3{Q^8{_|)IxF+&J{3#0Kt z6>JgB;%3EuRKsbwb8yS~QV;`xh~r4~z+YNk8ai2`pT+kEJtJnGh~AYP=Z_lfhMM#h z`Mob)?QKvL8z05+BtXtLQQds0>U5|Tp&C=6jplIf@Ll|_AnHdbiqFIMVM7Xz3HnLf zL1FwtKMHA4Ayl(CcjDuB{Vghgy>g;zR_H;?DQ$R;D3lQxlZZZdZH=KcTMY_56k2^$ zpkInx`JSi2A=t?mN#=azESsALKq+mGvQ3CUS&$=0Rzs{=XZWx3uwQN zk=k$t4;oOEO_BY?b<+!f7H(LykL?hT%3BHt_2~-AGR$MyM^wpp7SyxYL9CxB8U=b# z5Mz0wfQ5n>5gUuX5ABesW53!D@`HcrW|a-mh;BccU*sh!==Ne+8|~S9BKM(xZ9D&!#+3Bch{_t;IGi)&RAHNNd`SBRfegi5$k_7jpym`P z4LLkbSaMAnABNIS(r5 zjp*^9R%LG}&xtaZA2fC!6*1ANeN@92qM7}ugo(CJ|EP$eeM7I__&5 zsNXi^{w0WiL4l4Jg}h+`GCF>{8(ggjH$8W#!zq*FWedpg^E5r4nD0gkpa-%OqwA`F$q(sX-T*Ef@4gHa! z|M-{J57`$SQz*M}oEA!tYZl{48~2QV;kU_i2U^ab{Tno<)$jUPqB31!_5$OFZxysc zRPz6#dv*pjtoN;VC;e=qaChec8Lp?l`JAj9+abP>ymzr_@(kCx>)H;yOIU9yGvzAC>Rt z^+)CVdHqrOeqMj8d%qXc^&ZNwe)$71BG>dUT5U>*S~+3SIFz|v;61vXZg?T&+?zwA64>~dN}#0 zl0WKU^n-{h`Abp!Q6+yZhi4dn+5eAvxc=<_mwNcK|6ht?DBa2af0k=L3gX`t!GoHY zXoUyuZ$#9*gMxU_{=Prg=$E#5Q2!2k-k;@9q)$93h==9JU(0{A#l!N0o_G1XD)={aUD}EHjza2*f?ewD|9*#>o z=#Yt8m>d^={i7@<#{`dzFAedqY&PhSf0o7A`Ab zZSkNbMh%OQ-H~`U!uZWGNS_du4~SdB@Q8uizx%@z^(Xlq3;88~Bq%wAe81mg9GCD| z>Gyji9VGBu{=7%o3Bvfl-dm_J#&hH6J>qbQ_}lLzAL9?7(|nj9==t-Wg~HWDHH=Oa znow&JW%5TYJg7W}cqdT^=cFX+P4X4+%_&jnek)+{{(q{d)&5)S1^My!^`e+(Py>If zW8p$X8U|FzM72tPRLH=l|E)SW;haGg+j3(RQY%;JCHq-(dtN z?{WM-@$KIq@BjOD@)z5MvOF3&M zM2U=0WI|NH`A6wX+W(;B9TdAbf5Ukk6u?8f`c_7RMvUKmekp+ezI~AE1ydOKd^o>Q z;Qm>0jO7=9h{zCiZuDtCpWppf7^5BHHb~A3)(@pF{vN)E_Qrmc%V_U-KPaLHB`~fR zT(A0|9wx_sP>lb}dZFz7)9-%H``;?HhyD4ZV)LrL_r*2E*ZlH3;7m_h)7(^2^MM+tpy@u$ST8>C+1baMDhUD6Zao=E~iW@VD|8Sv=p$-(2s1l)%Eb z@)yeB@9+0WU;9x8f3F|tnXmO5wD+YHCd%Kh?Iud#U&`PwB{BK@Yy0py4%z=w4b1!> ztAST6s{1}T^ED8EnAe5A`X8u)?cdbE)ws%kE?;WkF}uNU6 zPuDH2fsj0wTCI)^Zxv546J&Hqq)F~davz(EWfL8hsI0A{eXE&=vFDj;a>P<{;QhFEVV(%G}u6V+gU zbtQ67Tbf-OynpH}s$CinCxA6ka|P|T(PAU#Wg!~d?Iqk;QOPuSbpqt#K0YwWiCy=A zN8Dye{GPl8mYOls$@O$KXb^`t^BP225d90i2AUK#_j)^6pZ85nV3_+I z3aXD&KiP0IE+bT}tcxy_oeZV$;z{a%ZeF%LdM?MbteF!5^8jmF;FgjO1VVLG!$p!w z3bRWVd~!MY@e`#0(p>7y)r^Dz~! zW)O73?F4sWD4%5Lik{|m=0$qGTv49)Sej{NAYg5@V_@0_nx z!7kUAkueigdUX=UT#5tCJyzOU-qe-$iC!#*?=V4^vCh^|ko!iTn?2?xOr*56w>e?U92Oc%^z9GJA z8-`envc?E7ddK5aZx{d@pVT-Sk1tQgnjVijPzb15gKT&q7A>QP>2_Ujix$EOOJ|Ce z%}muyvW|ywV{hfLTmqddGL=Ex8;OfKb&)2Nh>>Ez^w=OjN~7wwHY~&7PUv(ZN`TvU!RbvuPnFQNh>Z7FrjR(Q&zo zPxG;sTfSR5Gj5T`4y(st4ZoZD7Jd=>=#CwpyF3>R3#xw1GQEERr}wU2lE>vNU%3uo z%0sZyq?dm@^FV4Um(^WA&fXhCIr6V&kJRu9HOePVZrt*%o!Zl-G3N8W+KNVVJp%@R z3Cfq-72x0;WKp$$sBCxd*i+fw0N{VLZsy7^lrFuo3hp`8gV%G~!R_jlYHr=smboEy zdOyQJ{5i!`q<+7Z=E_R*RGYz7)vvwlT%?n=NarS+hn80b>P)e>Vd>-ANp5j`daGK( zXE3w(zG#XR5YYIrlhArG^35FvAkIQCEn6Gr`^1;pu@6N+3|(q zmbgQ=rF~Gj1$)hm(t7l_<=H7LUI5somxYs`F<|sSn2TF88!tW1xQ&?Jh53{{91oyY zj$~BM9QH*mpCm>K`Y;mUA-KLl_ zZn=ea!KXUADh$oJ-@PuHZJg&;bV~_9v@pCqi|~Alv~1Ns&+@_);Xbo&$E|KedTq0| zJpptp(j>8QO0+~Nx*i_)*4wa!kgm(CpSQ2E($?uQe6 zTtlX!c2RKZf5Y{T0!-(RR=&aI1xzI;cH`_uA)M}Fg9{wYgZI$=t zDJ9HuuoCZ#lflJ}Zs>(x`LAU+>6qe1b-VtM9=hywf9@s!d5VtH7bN6waxQ}m!E*ZC zHT;R)M@t?8G%$jXG~F*Jtze$c@N(qGCRBFD?1G$Iw=@-=3RutN%LQsbTq(STMs*$E zH4GHSiA4pr>Mm|pmehrgv|`l%$O~65_F0nM%T>5%A-BG07rT&e8HUubQS`^#*E5 z?lIvm`${M&OE&P(d+I)?ZQF#(=8M9e!*982gtCP!_E6#4^^RPbUe3YW35{JN=W&Sn z21jrXLN#{$8!jS5;d5!h0oQc6;W1EwB)Z#2wt@s8Jh4e&AINRrrNQ~Z{g;wmsjSKAZCP_L8CZLRENg`Q~lf5!>sx1lj!Qx3e$lXE*+Pj>NRb_e-BX3~2r zG%MwnTRtiXxutntp21XU%yV>p%~R&oY^SqKHDen7(dfQ{;BUMT?NNrQlq7p?^X4*P zk4HcfmY0dQ#trwbJV&*k#MOysgCyNJ`o#&4YudM|*+~~3fqK@~S)sY-@;Pf}e|gh4 zSBA15r`_{G%auXF0PmdP?lgmqcRSy@WzP+ zTnz8vD40APioecG3`UW}EXhbJe>SaXRf(; zc161l=i{!7*XwO_r>D$ak|^CS9Oh!u;^uXF#FOpWSO{zMwZrJVIWI7q)a-g{j;`N} zJ!xhPr7R!Z>Ftf*qj=D?Fp zpG}9SJd-X8kVLVgK~e^(l87rNj`f)X8(w{(FkK5-|Zy7(GEtpM#6eo@8A4Je-Wqe7tRYqsV8_z zxeYbdXLWjcr`@_+au;sArAMr>*lyZq93r-8J{xcEB>?C1 z>w=yy%{>C#^XNU_Y9efS$J_Zi9xvjqJ-dha_M9y{3dlq6F87A@oFC4`En?ZzbsF7a zewdG8^|?`DOpOk7e;;N2)`M=7LIu9F&u;YXR^*2#AEniL8li|pUnp}5-LBR7ve;#j zxfy%56fQYIJr`apwr(!py)N6urR&o5k z%eA-Epg(uv_IUe={mER3}gOU`ol+3NDLv_mr{%Sr828 z+O4~IZO6vmI_zSldPZq!<|}DhVluAC#1a%y*-v zWrwHI&St!#-1+Tp4K1CPp6^?uLDO;o4pxwO6;;#YfAx|rN{Z??a})89v0qG;nJ3QZ zWjspq$4n13|E)#y9u<^eTyN@A@m@{ila<@f;fnQNuN(0#JNW^)ceP4Dwn>`vZHM+n zkH&AUxQ>sy|Ky8HZ0v;BS=-dR_8=ZPCw5F%EPcE7q9D+(DB1%-j}LopuPwzT7jXNH zcG)^Ne^0PSSJ7u&$?;Cs0oB;g<-+QcecREpH4+i?(zwYzG;<{P$#+Ruc%}p`_kmyQ z6Bhm@N6w<980ZJ!GW%_d-t3eX^arM^@ApmaLS0y(QtX-Wt8VHr9P*rTUpjBD+mwyR2zAMUfc ze*q`&J)9IbcY%tf3IB#r@HF#ZDAwL#J`9qp3$v?Id9;D>cAr_caMqc9urIt#!=7$a zUkdpDx!O-c;Oi?EMyh51nc8nX1WUiwe#g?Sf7E`b;l~iP2Bglq`xwf8tNnye`1P;U zerr;Z@z-iUL~{RD?dK96o;-f~-AN*#f4)KOCj&A4qxRdsRerMjR{KRmMEFbXhup>W z`&;eDJ;?7Nm`x~umoubu({Ht(JV5_GMJI0wp^D?~TkS`3gz`D_i%wxXCGg90hytCj8ws@?K}Ts zYusa6-Ne^^(_Je3^J|8{eXl0R{=OV(=|r47LBMuZe?oh>K+flq z`s!?@ZrsZEwS~`v#{6>ZLhF-@l$hJ4hnlr06t2b^X5YpdN&4evct~wx#afuca?-zE z{k$lOqp?j%b7IrpaxI^Box}WS+fU)NnwtCl^)z1@way@l|7s?nc|&pMMvwh12Tpvw zwE_mJlxeSGqyoX!{w<6)e;o37&uRNws$Jb&l<4B++)N2NbY3sv7Hl%!o*uegJZ{5c zwpA*QJ#@$EsduKM@%kwm+s)E4SoM6ooWnN_e{&}_J?yF1h3W5wXGEb-~5 z?c%7@XT+%{ljm%jMW?(pNS~ zr}e>GfvwuIm@vK2(do6OEd4o}z}ve+S=J;uI!kLCT%HCy0Z4XdPMGVOy0qM*q~%Z% z0OmCj_&JUzY6p_UPXJC2@&vEg5oo!vPlMCLH=znHdY!Z1LO zOIj-BO9MWf#zj4UfBOmZh)?@uWG>YLV{>*sN60F(VvIw>`_;)TBU2@1j2I5*2yg11 zNH#`3kFLF3{XRwH*sf7mYnX0kgBZxY9yt8( zWkMZ917Pfte-l*5cDvuDm%7Q(CX6S5T$`7#-Byp_xkNBAoW6TS+fw60voEP0><{K@ z8)s349ADW?C{$m~Wgg%S>R!pwdbYdI+B+PC`ZHar-f^No<@pJ^rgeTU(n~Y##-q3U zJW-LoC`Qu>wB6H**-^}T_87INDMM{EW?{`Iix~C4e^V;1--o-e!qHiT7mYi-Ur65% ztH(6nOtsg=Oe2nijV+Cgh0Uzym-8~q1x-?=uw2lmVk{dcW*n&8?XaZW1k;(GapseW z?L75M+L_L|*~BjNIitqFO-np?*YbFH76lcdkMAy*tUAw3nz2y>%x>a9=+FJ0VxMAw z%hEIFf6UTenBg3zKWe&^qdsM7b9+Gc?mL~rZ|J(oBzEIa>khC{jFH|CncPk(rDIdg zr?mGPVLoCJTsxsVyf^Ir{1DEtOQvF9Jsw!`D>!k>e%+46ONctdl<&}cMGbGL^0N~dd7|AP4e%Wav4s5z#svS-vP_SFePgmP$ zHL@h&(*tgr06dgiD2hZx@EP%dJu(2t2olt3tI6<4{q#@p9KEh6N0Jt%38#$EnwY!$ ze~UlnEuh3oy0yFe*Q5B;WgyQ|sAopHpOCD@%Z3H*bu|ILP)Mui>Y-a%TMAoM7uvO# zq6DjW-L8@DdSC=e8{zeGsr51_1QGdKU`wp^7_(7w{0^B^?!f+?WbFuQh%NZ&6&DTr z{!!i7Ngy%fj;+(|x>q0Ug*uM2JxSC`f81nsZz_32R4+tT(>%njB69@}=skGe1b}F* zb|i*Z7zfAEky_ z-*hBu%uxc3e$YqNlOR1Q3p3>Agqj|xcd0^>A<_Y{2A_o-4sNh3E$<-bN{hQ}PzUXL zx1F_%cdcrB{SnXK6tloaqBe+_yYh0!JC{ur&$Ca}B^8hM)RLM$@Cy2ySG+jI%g0iU znR#=@bX`m*CVGYz?@b&Xc_RN&-TX&&^OrpS8ybKA7pj}le^fXBbJa~p-Mc4LHyCeZ zE5)RGtCIyIBWd7006m?~tontpf|fn$CW6jFCf=#S>aCx;wt0>k7Bn?fI$+P!Y`R%w$ zcnW`DMl|GMJjnr?k8$Mx=YOrK*-dj&BEPx}grbk8W;H~-N$hr5o%%;jjr;*2{ZUhc zM)nt)n$w_p`O?&k_Yw_f$VXGNI_?HdjkL(DCkYl~Q1?qyGeoor2xu5Xe`#tAoKK|9 zuXqB0TyY;wjqP^ggao7GA>yomX=+FWn*@KfF z*FS1%_5)J#f264qY)Y*8#==ORK#V?`8iF&!j|`Y*2S_s@=YT&PP^bWNaXRqs0lpK& z90x2|T{XB1Hdt=DM(CGI8aP_HXu4{^jt7p8OO`9&<4uX1oB$dCFu^y$FB}v$`eT3D zG}AFvn-s{b-ke}Ph{mSrFrsFO=?59>s{(1=1i{!37(wo{El`;d)ZGUseZlr(KJ1hv zTcNeiTT7g5+GxF@=GxX~MWJ1+H$8w9W(|C^EMOR~PiBI_fq*99QN2R^iy;)oL> z%EY-+_x+q%yTiExUXW~GOO_||8NYD44q^{bh7g1{K?8!G2aK*FFsO19+DLz-p5r4` zi*W(&FLcfr&H`%SF5)8YN(6zio%#k|cn^iSI=JD$Dd!?(?mJ5B9O_Ei&1!>fLG1vE z0DUw$XcpGFyLPm^iz9wZ%CUHuV`~18VEJK^Nn8)wgby~4AVR+s3Irqm zr5s6h=YxraDybt_@gMaIbT)qo;S2~|f@mgcoDV7&sHP82@f)j{f{F%}mr!yupuq=q ziy*@tohT}xFCs7cnJ_4HL`g;9cMZ2RpIL`JvW>~I1e+In3jv&A*hwV+h@vR+@2Cm& z_Fa|p$!6hMfvl~^NCgAL#e&5opK&T#Pm-XWp{!ZqETUyV-P}S73m<>mZK8z(8xH@s z&w5*P-cZeIA$dNlq3sZa9WrvE2=NwFBeu?hwpXosc5Dk2Wx&mcyB06}I-cbCD>!a7 z|AjE!iJksOea<)L6d;aoWeY(PngHJz1aU}Elj#>0@|Qw~oEMyvGvH4xP}j@z897+P zaY?00wLxVBMVE7{yVZXZMFoyas!sRGVv9l+p!0MjssIO=h=##MNHapV%cdr(2}Fnk zw5gqpt|5?tq)?j%0@f1N&Qe7nXVg&h*0fLB`3>7cks(5KtBGvaYI+qmb;GW7(0@7ynKcM!x0x4XckKQkvl=Bh!btyeD( zB`--KC&?OxM?ilCqHv`5fG8E$YFa6zKn}_r8JJWQ;;*<-k??pf0zD6dz@Wpi7~oEU zb&WC<*+Y#Jm1LPe?t6=V1t4L6x$o=QK2Z^Uq@n0Rt=5kQ8%p?BgSYNUGMX`AdV?0PoCfVc+&2sAXT~>NQZx|!y>&j@Kd8~$@8@k(+K5KKj`?6w&dcKz_`+% z`v}=i^aw2I%iHw=k9qK)TOeI=ALww55&VRQ1t@HSpB(EWv#X%wQ4T9lR$6n#XGLr_M+C1>?o00f{$RNK z9Ul!ik~jLgpQ->JlIQk>T>sl40{;sOEyckI2<7275gQ^3J#12g_Y#<(pY`KDguZ|{ zMw!%zdNkFJ z+q3PZnsG`Xw43_^cvL4*HEy-Ah2*kq%*lvrCL`)dt3oQ8+)5>v4Y!i!*e6Ob3CV?vF;gQfNKHAUrIo7 zJRX0S&vd(}mAx5j0 zC0ti#&H)ErVrB&(G*yH?i?5Q+e)Wp@B^gk5k$^oR*WfP+4Vk7YP@Z=mESf7L#kdKCcC*_=^%yj|A3O6S+ zXegwV37d6Au$OIpoei?h;TKVJxmW>S^T*{fvRs06RZPu{Oo}n7JvHkwOEbbCutyY$ ze#5D8S}tjALMq<>HuL9aM{pDgDw2QmccLHS?gB>}Qd2zOO$y@x1OW}CVzt|GCD3%h z$pQDWlc(5yWhEPkauD1h!SVn%AnF%;^E>(v=nsO%0a66ICEzY~f|?S5Pt0qmK5)0- zflP9(H)gR!APG`i0FD6CI}D0)!#fjn7w$fI4O9|}#U+ldiM|Z@B4A+B&~AT$SOE@m zu52ariPl(tmFol-<*saeM^t_gj&%yeGx;921zckkj=sR5HGo|Mh72lH>fr&hS861|0tV3x&v+1O9UI!D)tx zJOR?j2Wnx!Aa%fYq2U2hx)NW*ck#Ozhd(z!T@K%0=g;(oD+$XHJSNLo03`WE9uSnG z^ZX61i0uY0Q6k5ZAm3JAt%$&L5}e`=Xhsz45L^y7;F*B3958eEjRAk37<|yCIL{i6 zV{M(#1H!%l@dIQH(ivV~2+-~DH;#FN*T6JY1U02tz+_?n39bxfvIEYk^!yaP>SyW| zMWBpxpr?4CMGd5BiNN;_n9-kehxP^Z2J+P2FN{&qmHFT%fzny21fTOkJF2AJd?WL~ zl0o(x!D2cskVIrZ{|0}7_JfH8W+utEXd050RVl&O{NOc#Rr=R!0YLK)PIEwT!ETCn z=wp35pdZBnu?oQ^IcF#!+OIN^MEeV^ zCjhheL9potZd8KpV>@hMq5OQn>InpelBiNGqht)ri{$zNY7BqtH9vSuERWX&Z;5#Y z!NF6>BN$i?ze(B;D51YlhI%p}>evAxX5-sjj4YDfWaU*Q5E^F*}k4+?ZZU77=?626m@vp%F$20)1bZESqYaSr zigw2(&kk`TP&Wuoz``))b6g?eA-{k86UGs{jN>(6DkXn%em@vXV3kDvgRvx79{q#4 z1lorCU@U=C5~a`Q1jQ44FqZ`L*bScpqa-Sy&k1@bA3oRKe?(c56u2LhC1xtVP?q(d zP?oztpe*fglqK5y@Ayo>SboE2zQ6IAsNeh}a`E3{Ldmi5zEGif9sv_tqbgjR^C)rn z;20Hx>-m3REHi@Y`Cuvu7D@SFE(uoXgRv~|IZDaN=j8Z$pU(*>Xkf!{_Aq zV(?Cm4?&xKFq$udVf@0`Hh50rc%->O~a zJ(k6N1J}wwTb{;#kH7YNOxE+gJf01Iy&nV@IRBgd{CtiP=T|34v_=FcXCN(R!1xMy zP6;iLpZ^7h7WWPuFDxI`n>1Qr``CYu%EYnK#*Kn+#D`;jInpBhR2eedial z5cfH9@A$!GqK|=8A<~Zl(JZK241^tEl3T0f>|1E%!*f#`p3V6FfODk7ze7#_pWyQd z_KrONu`YsL#Wipf2HYSj^Q^D!KqL)_LEL{Y{|cE&?k8kB=76-2donO$z(L~KPx=*q zvE6g@_Xb2K`Z)ulQ^(&xbbjHV|FAt0?nOvK_`!-2oZ$v2&FlwBcrgXiZaxUT&obx- zk$X46RR4wnM4JM(>>DqMX9_`pX8z|~p+A6oFA4owG;H~39gbLB6;=) z?}+uwcvfhnKl0me{O_(|+;{%{wK8DSldQT8$XE0`2=Y}Ts)3=e4}35BrFc)&1_a6a zSJyr6cQ~fQ^9Ajdppwx)1-26RJ0RKd?Geb0GEp_VW!{H@3sYeVx45vHWyEUk)hE5Gj=8K7Anl z=&$vY?E_koAZs6-LE5AH!9L35wfDh3eqMjDkDu2c?BnP4XZbaG?SGd4y#6fzdHq@b z^ZE-D`N36wVjL=MXVOFm#CKUm8zOyp;|Z%pK{9Ps2g zMk49Mamnx+_!PWO@tRCSkk{z@;PvO1v;6QH{U5UY@EXW(vi$J+`oVC1 zVJ$xx&M&Mb`auN4`N3b_KN!xhSfZ8P3$^k98`oVu;4rob&ZXXbr!?MYM+Wc7-_r@?LS%P>UaG0NEab4i5rkz8vi%2b$>qRcRv!#z0?u0+d@sAhxKM2e6y^*; zd|Y#|waErh``<`R;4ZN*SocFiOtF9aMIW}KBDeoD{2_k&zp-Al zS4<-RS}*X819tKYOGt2cm_;NQN?`ne7km;t;@@B?dys#9$-iG$m<>X619lO}(jOcl zj`KJ6Zoumij3sc91AwmjFYtuG=lvDF^6&7Q?dthg+v5+|M9d@&7(G~3$$oxtfjA!M zy?kN#fH}nS9@%bee?oru3rC3K2;AZaGnkO?0n3;FFVFXI9x+zJEZVSL(Pz7`KREt) zPq2stcM5+!?SOS0@SCW17;v2x(QXb{Nnja)1qAL<{9p@ZT#l$>`4^nz{}0;9Uu+ko zKEUk`c-DVi{x_WAh#XJsCn{-x;Ut(vd=JNGIR68-5zCzh{ON#)9NN`4j?^7+n)C-R z`SC1xRnFmk!&y7KJtIN-*`;4Lws*IFIYctjcA|bd!)T3 zADkzI=XgJ0C{&>98ukFG-A+jZg@8Jebu$uUMz`|nt@gC(1xULC~7sm(R2SybbOLBZa z+X;W1>#z0)tffgXns`M2pI|e8=C90=@H0R6*MEkLB0LWWB$QloNX}Bo^+1tHsC|Mv zI}poAEDDh~ft}_HVL_ z^6ZD_)n8=n{de$@?Ef)7k|Xo7pOSeE<8Oc5r!nFE5Ac!hZ}`YNMrRB_Tm&Df=y1GOHZ}7_Wbq z9j}L@Aet!Ka5kG?quGLL*D^moF%7l6IaI{&00Ua6PCU!zxPJ4=O&DWL8r(GVy7QOT z>yY}->{9jaZ4*5QdMIT_=a4lAenq2l8uqZd)pGklu zd9CDbHW6<+^LgnAjD0E_?fE|E9=Lvr60lvhoHX~EI&)ou3|L)Tqo^#ru~L7%KD9@) zvL}%X;TCO=M5>-M6!u8JqM)qOG$$VGrqlYa(e?9dd^;nh8==+|$SW%DpaeUPv{ zy^-1OJE!BdH72J-dv6r!dfl$BBROn2wz&-AqplChq$8BYHJKEQ)Qcx1kTC@ry<2?s+b3 z&z?RS8DiHjO!{`=I3CsY-dRIJ#`+nI3wM_qM#>+T2s1x-qTy&qe+w9=|CCd~&v*UX zJDjxH?T!*RF%WduKfPedufpRl7YzNGKZR;CmBZ$_>V<x(=^RdaK^2O}qS5>M`pBc-OR=g}{gB;@MSiI7eKZ=xTJgGhUn)N{-EH3-)X7cu8 zadRE_j=#Hm+jTRM=24dN?E%8U`vOwJpf>5Z+$H)I4T@f#U0LRzs15A4iHyQo>v|;_ z1uK5tbl|o6a)pUgv6X+;W3yy;SKl+ZZJ+J^&ZVvS{9(_x4|~ecwz)_&*NWTuO{(2l zJ05FEklYrC`^eA!a(#r}jepY5ySq!6DfA;5laE7Ya!iw|-j4YVCU&*w-k10H(_--o zf_!ezALor>-cSQmGN;r9%X7Z4AHp~g0i)AW3is3UT=|o$b!?~v=e>TvKU?ee3^uP>9Avi$$yVXLI_Bd@ zxrD8wi|LyanXScKwE8x2($1ge6U*N%d2`H}8&%P6cT~wUHU@718yN3#SqpyeW{r&t z#W?P6Wy#$prMiDh?`EJ|YBM>fh@;%J=WUYos|r~YTl#*Rm(z_Iu%H)BVJz9@5{QrM z6W~}+i+R7N{d!MR-uSRBeL-D7Fg}_aY#~;RhpJ8baFea+bFyD2+TBrZC*~o|5309A zp_kQlo2h!Vq=4H@qRydb9i9!D)=Tc2anC@{c>&3UofLm&*&ni*HnzpL|8N|+DJ}WR z@TXg+I_nGwrE$^Sb!%3J_0?AVTE`lm8+T(LQfU%Qlv%BBRjquE6-j2?-~leodSkkb zNkF###Q=%Z0Atn=^{BHDl<>N)o9;whi+BXg-X(x=x2&D1`@*>|3Z{RQZ||ys5yudpMc&l!-vQ4yEHYx-IX~u|K`f&J|O*l6_Ba%2m>s=kj=I zws6f`*Aop%{DA^=LGQM``FIO{dz$y2BAhlG@BDx23$x2j>K$)(t7BO?-P>xaQMeZ8 zNt_-Ehw_~=N@r6}9Xasj`F5t{73fnaPpgVFy0>oyd6gU48%HRx(1jKnob1o>9rSnxAC8E{&JOeyP)rk?cr%mXYZTFY3Y7C3vJ+q zW3+#R*+g;I!Kjwr^Um)9RlBaky{Fzz6GNXKwHaqy(~WRLlEmh40K#MygXz-TE=Id6 zGjW^Ilk58)NvS`^bC#C(>Dogl^x$f`N8hTk66TVqx@(t9*tTT#Yan<_>n6JUn|w1i zCHuMoYf-Leks;paeOm6c3%cX4i**~HoXvkK)GucwB$@jV&`+<8?Mn@6bD%~A{CtV7}U`SPaG zc)YebSFu_w3(4zy^*N2(&EY$t*WFshpr6I{}f#szT?cnl}$fiD~D}CwnuNscb1XHfCC_QNI-LWwAwd z^_dC17o9ne{xB1)CzBoMBe%GC({j};sqrjDs-Syp(7tpHb2)F*eUftN8)7H7n?Ea} z9m?Z@TT5@qN&(JwdN=yQJ)SG8Pq%+Yd3Wgcxm!)d#Y9CMy}bphGF~efReP5ez@h8Y zC^;q@OHZql=WqE$4%cHzL7j9kt(sh2r2*@p`uD=!UV`(|?3F{qls-qQkg@i9Pqx=q zw{uT(NifVPA1|FinXQeSB2gK3TIuK`=i2ttf?Bt;i)SYs`3%qT%GJi`$Ebf2>b8q} z7Umlp*ihQ7UcT!n?V(R!3!{Bm4KGcYH!>EH(Ysa)ap?inV8-HXbvUewif7!ZyOn0_ z{+gagn>!c3a%*mfhsjJI9r3g{FWO+vltBRdu{`o~kjGqa3QE^DL2W4NH>qBa>m~L# z%Z>tPZ?1EPi!j{L7wG+`y2^iR>-IdZ&NQ-Bo3z`Jd|*aVfi@~>$p`en8a=89)A8}H za{KjSX}#G4uKz+`T#M|o3vQ;nMO#8wC#~kL7bvc(mh+R-&kwr!wC%Ypq*Nm@VZP=c zz^A^sC;-`w4%}z7Q0to{iq%c>yn>m&*4d_+?4}WrSS5=`#k5xCCC7hyB8Wki28e`Q zTv8(!#}-KrRF>*fRSPueEI8ZTQO%{^qL>{M+u5nSWsb%?+{E*kM^fqe)GRSQ8lm+Z z!gY5v^o6@MZtoq+mJ-un##sAFMJ)Hr5mMkPD4v*4-fyj)rkVjhrEd zSADZTKIYb?j|J5#M^V_e*V}aL&JT@V7+xG4QEGZ@wH#FL`p|!z)V4O-5z0o{y6u-v zq_A~9k=&J9&jkNg_KCXPUUN0xM~l*o^c&{!Zrptd(&p8&_9!`ywgNlB<&sS~`9{fE zQ9Wt*HaBcFnlF%VRU27!y!j}Qy%650Nw1IPxUH5NJEBe!$deQHO<$8cB^}IH(JjX( ziE{R~NwuXI;-Y_0d;4h`{nTAO_CB2hFbEx|Xnb8MmYToF&DSs)}3lmMYtR zCz-oV9R`>9yLIx%YUVAcx=VG2y1Bhp;b>V;rQqx~tL~`Zd~oD1cueg0Q{+4vVSS#K zRVl60N#1{jm8AC*4TLM}kW#h^nn>_i-=iv?ru7W}$Io)=DkuJzM?Y};>_{9h}e5XwXrQ;n?-|B0Y%9?V@~oJp5m~0)34*Q%j#PrnFkb4 z0cwb0;2ET7&VFS_lwaxPLpvOARLpEQ;bkf3*{+V35q;Dyn|keo^X~7ad=9$&Y{~SV zWmkVxy?7j=H`hE%J~c`#k8Jua9q=4gY9o(JS2aQ5+ZXv@7`eMXw<>t9~gZDjqpgJ|70r8jEopV_3 zm1&5Y?|20u=ExO;{&r})v0I$AV=!wO0HJ?<^L3oC-7!VwKDR>+J+P^v`DjKpI#Q@f zxtpUVmYU|`Zu?0=SH0!OQ3Kb$)^@-!6g5L7v9`~a6ZJyLR=LZ#e99dF*wm;kh3fI@ zdfr`67d8&}jN;kMWU^7fz&Opl{IvqoC?Ho@&b~aX`LC&41W~;NW^7TeXuJOD0G^f;~!nzQ~Sy|7l#*Oo)sIX@YR0-Dr zvSfazKeRBO8lzjkwn1zo|ICl9*+zd3%-~>{&qKecP|a4HYvWOzRfE}1Z({^v=!buO zN>@6XsSrk-4e#+DvGa3cu5p9kKDL)zJb8>b8Vyiaqg4um(@{G<_>qrmgHEzZ_25wG z+f(e_%%HO1d}J#yx+A(rqrI_-?(UfU09dO-oU-02!LrSNZ;$Gb3|XTJuHg zt(T!RJvJ{Mq*;1g?u6J}$QD2KfG!G7;kN27>Xnh~5QDpCdrnj1xaib)ygRoT@4uEy zSy7^Ce!1-Q-IiL))ux-tNBj5yV0!L^^5QO!cJuT~16YF0#YH#g=*WND-dKQcX1JA6 zad|u6S-bcQ)y)fo3vt%c?7V%^{o?X?)sMg}FhD!LZ?49*3OwoBU`cV17{oj+4{qjlXb=CeG~gKF-_@pj6_DRX(5 z@pW?QE?a5tEW1Q_Y;NvyBu_`T&3bZW&GVdDG(AVV3`dm(IH70e6m99gE*_kJ%;)?J zhjDZ{vE}ySHPahR_fLQd7nwf6wGuoQ_2lS-tUr+s%qbj4$OC`RMlMymH?MJyvq`tH zZ*D9q`^Wtd3!EQxFK*ljtL7SvUP3X_tdZt}I;~W)+`i3d5iQ@_1jv?s?{_e9jM}X% z#pqTlQLmpA^VTS#sm1U!p|mkpGf@AJyZxH8pD3>uFgQ9dwp;$XLGJmDqYko-Sr=JO z+A{IW#x%uWZu2O`{F-utWYm8nwG~UshcO^saMM6R-PcQW?#jJk4pM-nb3#jz^N+(N2 zxG^gyedhFB8T(Awi>9@vkHm-u^oPrw| z0>AV)8;C1_A)3+xnZ|U3Vs>dHrStq|yZ!Ef2bs-w9W@qlL=d*~dnG zBWGys9J3fgB1H4cY`kj|#teCVb8xQv8~77;LGQxqh@w$Lpi6qXY`oe^!*_mIFDQS* zBtVr4e0|=I^T6g^eW~&0=Fo{nuB`#=d>^jP^tpe6MnkHz7u~q`@$K@Wc5j_7;@wQU z1AM$$hr)g0UwBuv+Oy=1;n)FN`E`rWFDF`!-=}S^wOfVb50TIt55MhHAV-REE$~44 z_)c%85GIA!z`^LCxuKz#$v*c@z_7a)vw5!pRo<8}xC}e#XlLxs-^faNy=s^B8q)`! z>T-WOEnsKj)pg8cB+gHJH@6Ym9VxA$3FBFhaZSJSmw|K<#P=03NpEXkbnwkR6C;Nn zC8T_PvlGj&R4a_x?3rbee!B77^OAS0Bi&^|oyCN6Z?NX_J5U0{xtEmwF1i;-xMG1BP0qE&y1n#tD57 zgM-=c7&?o?Jljt5ES|!lBzc*O{|diqu6OGGNbZ|e3B!|oV7mQsaVv_+kpR|@QRXrs zQ=MRe(7oy7rjIe~1mJDV5Lhz)C+TjldID)g1RuJs7T(RXeNGSe7~o zIEU-Y;ua{+7jz8QSXV~Nqtl9!6H4>*dY^~==qd&J6gcMh7QEXw3^~dM?W=ku!Jn`W z{~Z+a302Eq^E!kN{LfIxI-wo>ppakTHZH$W$n=0JOv!}Y#(EvcZupHtmM}~BZ&1hv zDHr`~6!K{RP5gTlazzUKOy>TQtayLmn045dY3mgH`*--NKjY4kQY5I*qMmhBFDCB+o2)|LtyJ9fM zl1-8CR;=gjHwqaHoWDRJFa2a^$^F&!F=BY1^$_XH^4_5ikO)kf<7*W~rW${^*>u0< z%*&;qU0t5Bg4pZd|6@b|Be2yKK2{7+O}=tG>LC?;RMT-XpA?i5uM6Vs5!`|IMR$FgLJa zAnL6jDI(;XCAH+L7uXVo@_3jd&WK;GBZ=%}$&2}X<++LDRzhAfVy1u0ea6^GS8`Rx z{PikQkgzj)7OL6Kdq|O%8k1diK>~ssrMKH{0;i;MrQp!-0Qd}=fIU3#@6%GWMAQZ$ zQ1^!5>Cn-pT>EUw!#=&BPQ80uvdf5y*UIs^&b0gJ{jTafc;74Ww#l=Md4^Atdyn!X zG6N^7MYka*qrx^$X_8-+ApXpEJV9e;b2~4Mems+1n1~&co%zA zE%^{lT08aA@ZP10piGO0S8Lhq`Lbv94BZ4@+coq<($9PU{H}72^uOMzw!Sm#10roT5r+X{;~k z!rTwx{k39kd1=ow%R8BmWCCSN#jNNVhJ%beddQny5BF>N7P)b~zs$zXbIa*lV-LPQ zWMq>klql2iV)(|UWlxx`*)Sfa37@$eUFbtFy@naZFfW9TdVwoX(UYz2achCVq?C)t zv@YabwOFvDczu8OZl-XS_mgQ1fr~9U)6*FWpbb^elCqr3fHsEtD}d-&vt#doWDGYs z>DDO6CG8dL{NXAy>ETVM!9IFi?knT6J8RVb<}WVNZGwcGXUHaT2m6oZ2>aJb7VB`H zu3wvjez@Ic^NRWs9$vKP)!TN*Ts2uFChyq#c7LyNQwC^@7!V1P|aaWVu4Jg;FHo5 zS#vz5u7k$br+U(&cSG&d{<2&PAotrnQXwQh5=Nag8k-zalh5bEaTgrl6r0yJuy)#0 zqa(*Vh|_=RV+;iZw?cGV5*pR@l&oL6IZTQR4& z_&uNYtT8%J)O8abM<&>`b3}bRYI|M29dNDZp}T*5Od~`ujJ>%<{O6J0OQFp7TkBo~ zHaei^#zZPPSF3zFdK?QqFviz8h{)AJ@4~W2%(zz$Zw|^G(Ckvb9;I@w7=pGk``7ly zFGlOxW$z#8bbrHuPiglH_jaBrtF8yaW@%od-Ryib(pe527mR0#9O%mpTsjYqYG1en z#l(L^`YK-vV-%Hw?z~|3V3sS(alb8(6}M=%He~GM$gB>V(3^W&V%(;zs|mWd4qnYW zyYrxv9$YgplF^b{JDyT+Cv)H-41whk8V2@S(3IEw>YvP_m^nwmf@+Zx=A*eKn@>l{ z9!T`{-|A?(@{~Z-i|KQ#X3xiDtlUd`R~&z(ImTmiiIuc=wov8kA?P^ec$`rp5xuS| z{fM0u89eK*FXMb-1?jAD2piXaaL!ZEtnZVhp_Tj4nb7c0o?q+9G1MO8*wr_V^xE1h zZ+C9mjXKilk2^77#Nq8Cg#!Do2`m&u5h0A@g$zjl-B*%xU2GzABI?H=_h zx`X3?+&NfaX_u2XTy0|N=9<9@$1^VPM?dQCVfhXiOP!6T!TcC+^~=lpXPdO77R?Sh_Wksf*St+;%TmNO_N(~$P=ef&(K zclmsY{Mc7lhH62~Ah|d^@6oGyq96i);g^{;Ex;7Xue%$p4!fkhtYV~X>1g-fa-=VH z2H`8_c&o!Ly3)KD#`Wpmj9CoSni(BYvcql1s^C=eV}F+!W&(YrJ6^ig&Asgvr^#*Z zHd|xqNDL^x}4lpBsx9m&G-R7-mKxf$>?69eZ|Q*)5kl!WM_)WmCprd@dqw&Flx5!ZeS6-rXnnanPlnADBgUMf zd`6V_K`;vSgOi8tytr-_LX6U5Xylei)~6=+Js!0S`8c|anI{0zeBG;mOm2(M?XkK~ z*m1V4Dj{BZvD#|sb)HW%J&n_PXEN8gwo}2nOx9(3)pS;~wW^aB8mH^~{YV?lrqlfu z`x@;$RznDUw!6q3Rm}Ov((!=wv_tk33a?G{R%;tkjClRfCRZ;2p~zC^@`(we>!YYP zmo)DqW2`}_DfE*v05CUyd7SU{L+i`?eR7!jiDv>m%Fz#+r^@+FJkIRd&DCyOZOShT z;x2M;?~LWoVPDVM7MB`2d-+LvGky~E+gs%;;1Eu|$BfM?vsUk~u*8&z57DB)mM%Mw z*_|XRtX)J8){?HXvsla#=eXpGJ=*%&;zAX-U1vT9tSNZ(7oeH zrG1T+GU4qvV+>*;st#h~foh)#^3)tvoQn4|O)2*TT@o$0UTx;8PA)AQHX@hJF2)8a z=k)ThJ>N6x0f<-}B4+XiV)H2@m9eyvWm?!g@)XWmQ^ZN^#OES!A7hJ$eYEw4bN4`ObN*j@*$WE6n*ZKB?yg z2fLU@H&L$DPm$#&g(EVtc>qb-lX#))eWtcxoxVKKmW<_pn4`saS!A2(`oN5~w^f59 zlq;Yy9-aCmM98~(ogE4y7i&4zf1&Qt$K>S@*-jWV8u>bc@gEpP=Yt_)(8+xCZI0|8s1JaMU;z{FR7`k{+C&sYgPWp|BPwTs(R<>+FJ zdxhODRsHxzUyobX$hY(!w}S`MDYbN#8*u|}6#C1%Q5}8EAdY z;yK|l?byh0N|WzWm$Zb`O$MA!=-QUTIR8t9Afvb!w;L&u9bm5x=}zQwDNKR0eeV=L zS1WyFy*t71^k>^@WdL(rsh0jtb*9BBx*x}XCkh+Y1rcNfE!6aqcd(?r?P&KP(JHo( zBf&q8+16aOECJ)N6qJ|+5f`8X%}^t1ex=rX>VQe;_Zm!{( zOAwli*B#>@#3O2$TxS!y-L4P!sXz6+Tg8X(Z9Puehs#*a`Y9a2ux*sb!GbAw&S*7% zwTkV+n(bpG(Y~zw+Dyx_*Cr@~--6R*-NE-d&cT4^klJ&x=k6((G?T|=vDB}tIe+Pd zW;D$nHr$Z*aaldj4tMbL3P79#ruPw-cdKogRH?~dl0GjsyL?(ou|?h9jj!w;K%u9C zLFfKbdU^Hofll_)Wd$KmgV~`(H+`&sUyB7sMZ1J#(FK#Pe9ACTR+>-4d3$k%g9=;$ zCBTiE^z>=NU-ZfNf@#QDD4*ep>&yedz{j@Uc>BI_y9%oJ6dWmo;$wlqgYjwhB{(#b z=`-Kmjb<%x5oJIj;I(vZ-^gc(Zcn>n^zNqgJs*kOv*Uyek(D#D-UDOts-(w%cqWE$ zjU=eeW{=#fI$b&sJ;;!4CR60lbhGFDI8$PFwvpDCk;Vc+LR`6-AkC&BQg^%#H?+x~09VSxOW!fc8 z)9iiQ>(Z+c=}izrNNKw-0lE8snC54~WqrGf&TQdvRP706Hdh!mEUD*B8`JOxSjXTz zPn52DYKc1!(>C&S!M~(hom>(m;;;8DOmJ;Ap(pv;$88qrZ^+%zOiuQ-D>up6?P3QE zW3HZ)6fOqn?iTq@y+mRgIb&s^RZn+wcuShThx}G}7a9_?BnzWvF1DwCp>)a32>CEb zOsX95?7^Xnp~QT0<=VX}K32;7HfBKII;6r@pUu~&yK$o?2XA9*ja}wxI)F{`+Apn^B2}#lgSln;BBa^M`md=1jgQR6M71wz5vT zW=D*NxQG10K$WjR8P9ir%$#3x(%E2V9H!*Vox0)AW!=|fU5S0wu*B@(uSf1vJ0FoC z2hZVJgK*Z-q+kY$an2m7dmca?IEpVfB;#Q^{>E0RC>|>-ek`XnN)D^6i^daA)=I0d z?yhshTsy-Hb^`JvG8JTOH zzS_vDA03fB8mkXGn(a*;N@99(kG17`yolykTi+s2V7|+i)gHtBqsD-6zY9J2TyNN9 zdnlHUY2~M0KqT~HKQ}@>Jx$rWe7vpa=EherYi=ccpuLZOapBuYWAF``Kw zOtJ-Q_T_SZ!_C+Spp4^AK+i<2)1q-h=tFrrG-1kmR5d^8?wUR+t$L=H`Dp=~IFh~d z(KE>dbcje8}?RC-`;C}acXp;^?PW~&D_|j+Rh2@=R9GT0I2R}$SFU? z8sjXFVm3Q0CvOJB^yLg;$J1dPD<&gst=DXP7RTy;LEw=ao(iLJQ{vu(R9H?4tBE#0 z3p4Hf+P?OCZC0?sc?@LRBTe>GAK80yw)TyuiMhmCq3#c5B82ZNA1si|AWn;3jM$Aq z>s$0(Q#kzJn=8=l^<8#)Z;$Zy#xYNnwk=CRl2Uo9(s%RTZMwihY~hCMJ9&;TQ)fi) z=GJq6a`xfCn3OE%+nzpo#a`SB4s157{b}($?`H;OMc$#f@XH$ooUN%K^I22ZC*8nM zP(SZR3t#BnQ8PNv9Hl<-iBiQ|6e}c7*{_mEYm86wJeK$NliAZf%EAj5H5~KfoOPG& zx&S#2P7}QYO|%tLFHa;{N(31;8IKjhEJ411EgkUHJxv9a&**pku*<3@gOF|)K)50H z5ROb=h0ZfhX`hZ^<);oWrR8;pnX?`5-wGsGB_=!_{D~{yE$&}0^s?1M(2UDt=m*bx zD$eaqxV)ps1XaE@M`~|$RVl%;9|fYTGW3sE9ZEL)&Q7=0qZfMzlJL4cWFg4zM?lPf z&XuH07ncWH!y?dYVp>RU>2TOf`D{5q z&9RBcjw z25o_`>Lcd>3lqx0gf|`dT{T~2Ao#6q5l-;O#!hIIPekh#kdzOebIx~t=E%t&Rs=y| zpMuRONWoP^Wn*7KFV;M;sq7|R?hprZW? zo968DifqW8P96N99XD^)k51gCDVkKIb;AL*&?BS+Kp)1y3#Yy z$ivfrY8%>!N5$?LOlH%gH0_pl7l*UcrT6^;{QNrFOu4=4`LF5e`i_ITpRLPgeZ+Ls zZIqwZ*m}9SF-t^Gr|R zFbe($g;FmReaKpJ?Ab=Uegs>!gpb>1$r^CL8vOoBu1+ME8a) zsYZ+t6T6Gjcz;d|r=llF)Z-Tv#Gc|9OuWabPM*8#=9y0B%U6qkN7qHE?d`R{z47|0 zAwJ2>pWS@1y{L6}ZkR_uUl{odHIW!>Ihni?1mpA+VHahZBz_6a_7YQjY0-Dcp?*xE z+j2YV(C+lP*)2;Z$XLvW90MvF2S`2YT2pG2Sz4iKr>&Ae@E6v#?rle>QF)zQ0V-f& z4c*K9VwcLYJ2=Kw6EYzFV3vHC@g_6eKQiARRl;fX#HK5M`M|gSs1n3ACed+R_#-(g z+#T}j-&6_dpnCY9sS=)}Zow~;BdWQFO(Uv=0q>3Kd27%l5Jf>sF!eeQW`qmuG?ou6 z5vl@}ni{L49zq0aixwJ;EcMYuW=C+hqs&*>BuVu$su2E=|Uwuu4Q z-*t5~N3Jtq;DNJOJn@j8U{yQaITWH;K(_yXX?wG6Rkdzg^MSY!Q{Yl0lROaw?+^hI zkW>(#J}Qnm=URVycAVI;N||fufT7UoN$V}C-$bE*pfWoy?#CC_ab^GZ?Y$kLRvSeU zd5)imR@n37oe=~bq7tsS{HiL?lHicohD5Yr1wS&|Ut|LQA(r__E4bQtme_3|rw?s> zP$00bi&F}u;#|jX0a`dh*L)Tm1R~(DM$!T#S?6|#-wa&^Nh5nmV%zS6KWX0HB3T`Q z5FA&3d-6%H$ZrYr2JiXzd_Jn{=l1y}DGdaI^}RN<4P@WR@0?+YFiXM{P^Ylk+SZYSoJR*vR{&D}W_` zWkSA=xIK8B7v7TYZ#_L!5X7CaD3QUYX_N9~1b8Z&TcXZ!e2sMOi)eMYZeRo0KGZn| ziq2c45Rh^z_E`ws>J zb%|O833s@^zI`13GzbIywAmkI$Sg&F|ARZQ|JKI8F%%`*7C-0L(90gNY$53p$lq zcD3P75JLQ}0jc%VE}tOR-T@EGPGaxqKhu%x#w+cmsH6uiWKX%!rh-H;P#M5cK*v|x z5AP9O#Dr&g1E~TMXa~&4^J-ClTC-RQk}k2!DXs^s6d*wMDjnh3a_dowp&6@lDcX83ZJwi?!&1PObU#}TtoHcI z^Z$il$XsIo(biuih4t-!^Zd^|{JU>!+3YOlQY3B9^Wek%_I=sJI`^)Q&N(Iiv=vhA z{-v!B|3fd{(N5(bvRt9vERRE&4Sjjjy$nz^C?&eE4`T zfR=}~a7I6T+&gT43!BBcj`g!X99CbH&%b^yqF`9(AW@#PN96e*sD#Y(@A@WS9%Q5M zdiY&~zvu_J=qhMMxWo!dt;4+T;QJkui7Z`Z(RHA*@`Eawu{hu7q={cN%R{M|#G6gC$NKS;X?`)gkAI7tT`NjrjVn$5BZb1L_c!aE;77yWi zQWM8q#yG=R!@zpGuwC4F-h^-A4ZkoC+XSg4!Gox)dA{Kv3m?vo(b0eGGk(T>eAhvN zjU3owUu@KWx6l9Jt+3VxAZE)va>V)l9i`z4=CM0}g5-*{sO=b&8z?<9W`x&{=E+%< z4<;Kd19&80a8h}Hg=fojS%U+fVt(H20_`nJb9+Nw2G83<4&;0d5wIV?6U}S)&-{it z!Fpn@`p$C_3gS7;uk0vvK8!2e=K)fH^ZaTf)NTWRGRCn|1fk|sULez5OAC=8Q*)acTxD@5@s%br4g;!Zbb<~f$PQhW4?f$$V=W{1}uAycEY|f(T*O3 zHX#7}XZ)Wa0kk|3b+WeD*2In-UxMX(u?P+ykj{{hGXJgrgJ%2MI$!h-Fj(%-@BYkx z``^95_Zf`Pew?2Rxty_TU(6MMs7TBQGpb1|PBPCSm*{641iT*JAVs8M(RG0k_93)8 z_YI!oZd89jWLll@oN@ige(4~4!bAV=yDt5O2Kt2qN`Kp>-*JdJTay$()4yvH`UG%g z^UtRVogDo$V_@dB9=7lZ=^U*1zphVz4S4p+rrE(h&4{V_`coOv8kA;W3IbY+M+cq9 z>-h{@0LSmMlqUM_ipb@s&meajamu3($jP(rxY?$~z36R&`AdS11J)32R)fWwe3UJE zyWor#pv$>mpxq@B?T$?HFNW_I!tCeze~+iXw-PSa1$fYD_iHW$;hU?*b_1;JOuTfexqBSt>< zQrKf`Fu&&|R`FD(t|*EB-nUBr?Y^B^Y3tkm=MnAi9Dmu9zvlPvb@)H?dlUiJBz@6a z7!UuhpZ&9)Kd(Rg0P`)%P_fqqrtPqq*D_8hD(sVfwHE^T(CPgixBAq75+m_&lm&gZ z|1D?kXIPV06${=_;Vll_Z`<3o-=-z{=-<2Om`7?n1YQ6z;r>wn4Rsf#j!hVQv-gExyXVy zfK8j*6K<3rY!>VW;F|ckZ%o3dLZT9T1GGQ9)BGZjBoAu==YkIbP$~KrGW#BMIolA} zOL?fx(%&dd0WPcDeu!nVJ1@@Nflk$lv*5zA4jPQh!!XYFAHJV|i)40W zRPvF}g;U8uT%vkP{UW(83jjoF*kw@X{)2!#1$%wIe^iM5Gp;JT@3FcHf?G($Yk5RU z4FuFPg(ERX3-9p^hG7Ar$&p zzOZV1`-8pj=@3n;9IO%dxM8)FM_VnJ=Xd>5h{Xb4`@IZT-Oo7DCmu@L5!OWD=thOW z!)LvbHi3YYMA+*m*v0G{sd!Om%<$m_@mMG$^zT4vnk!a+*eRO#g}>Vz_xm%>W?SY5 zpZ4`hJopsS6Gx=tTAG7B`@BvZU;)avYqf<>2m6r4y!SB>7$RU(h~NcX#P2*5V4c&C z@SUMg%%0He{Qcql{j=RVx3l(h?-&b__Z^8SEus3yKXo_Qb$kN}sz2 zKmQH_f~?7ZZlZmDm+#i*f&GbS9D0zjvCr7&m`A0>7s&-3K~TtM7bgeg>F>Sj7wh-; zd;T?dJjH+WJs4l6x1=FBJ70$|BU44gsegah@B7UKi@BXXZgE-t(BMLZX~#|_V*+1C3tX^Cv$IX zB2uiA_aMYN3EQ=gl}A3e^`GxA)A`F`PaI~Hr>pD{MwzRVer0e$vJ#T0e=@Ru{XG8Q zXy?V@_kX`L&-fHHQb@BtN6bKawBK1mhRic|J=@v^eYo#2zTOt3GqmNNbUDv5#64<< z)(|3pX1R(FN1JAkIbT{%#i}m+c_)VT&_(v=7aJc%6rKXBO^cuOO0jPqbNnrYObM!Z zlLt%8^Tsdq+TIl6vi?7z*EWFt$MA>D`>+2AdW}Q0pvOK3T%;2q<|)u=yv~{%IOAt@ zn#;*4Qt~iIK$LerUkZ}N#IAmn3*jfgWo5~KFZ9|1e#}EM+kHG`!!VWTay!3-8&@p~Td>uRGYY@T;F_yvGOQJv+b0^~JNBXPxhxRNrFe`Zw{-OS+q{{aQ}Xi+sG z6PRgH_BuywzMbU&Dc%tjO^DhjfW7X!;IM|z{dlh)hl6oFQqgl~ATH{0NP`0vj`=K> z3j(?xcr!5F!c7=$AoX>U+zyCPttB;o0Jfr&`u`~^?r;A=t5uzm0fHCUUJmRG_<#GY z?Ert^F6*Gtu&8wo=Kuo-ToI3OCve9z9>-eR8(;}EpbOxCA_Q&( zC<9l@u%9>{W|R^~+@cTWzZEwq zhE)Mdol$Q5jKMho7x%?~p$a*FPyZm|Q1OX&obheHuxa{?`vM+pM!^029U!v7ac<`y zbb|s^SUUgy7fww1BILNs7XhaOAqV8c1#;zIln95oJ5Ue~uzq_yJN)g8w|jFUi3rgT zLN0a?KSCq|=go+@Q~+e;az5KYIRLS<{2QJO*Nyf*&uuwllUU%0X2czToYMChZ^n{3 zkP{Hl1>$7J!F^Fp_>37r2AR;GHr)e-Av$jsB40BOZa$aIy+EXXVf4N~(dHtH*GNXr zW?ajiJ05}T!i=R*sNVS^Q7-lw-fVFtIAoK0~LCHkK250Qpw|@ai@vmb6RlC2CbYG0k9(|mb;lZ#2;M1HLQ@Brmo*7Ud@Is<} zQ{=Sn@htu`?(Gle?%#iA2j!)?KYTyuPa9$8pWH{_+7O)nVw#M9@A#iFM)08_0xQhd zAx;|bTVFJlIitjo^EX~ZfyaBOBhKGHBXpP_M4SLb+@1y^4yz2WE8l*I&*br$bN>P5 z?k^nJbeJ(uj~@&hazYLVWk#0pKqVc45a2TudjT`Wig55a&d8nJM?9nIrnd@wpo-`I za|{@<`8dD&IWEk9m;zSjJTHUy1@p=t)?vH1mF0}H#J$hBIE$W9Z*SOLK*%BD{Ou1K zvXEx%z!wF_H0zbzc?aBht^5^~Bf9GfVgQ5Guc+I~@{|7=Zp6_3pk#hgq zcjoW~-i1wNLFY9*u`FQRDL$HT`;^HxdgoZJXDQLEoben#C^%qKc<$#okRq1#gNmC`dp{^RAX9kp=lI;d(GMyP z?Tf(8d>p70V4Ax0u` zs7!Nz#^(KZlq2SjxxH}yG`@t-i0e!L=eRjMD{H0ASg`GP4rK#ipEjwD@%_bvWuA<+ z{uc%ch*;QC^E!%S6L_R7{896B1y<%Sq!@enJ0^?=(FJQTuv3?ydd*lf^H|N_NB!&H zxPM{40I$IB|3c2;UQiA)+cA4!Pd>BSIgq7)_!$UdQ5=5O&3ay&=fD3V(d_cS;oAN; z5L7cdYPLB7eAkRFG=MJCzsRmHKJI%Rh{WMuW_$79qtL$Bfxd8==k^&RD9rQqY*+ld z>z?hsFOCc7)fsaKI}h-}KM2)-xSn|~GG~11FErom1O|={Xt3W{FO8o2jrqk;{W=GK zHr+gT{}W0JeQL&0{X(?0KNvmP{drcnM$DBP^i|lJGdA*X$G(_4*t36~8=!66!kN$c zJKA~r)wli=f)V5VFXZ67?&G@uh8_Gt2L8d}&8SUO1EG!o9UApd9|U)Op5y<|csBN5 z&-=H?w|NioA3twiC%#BQ7uQVcfqU z%4Y0nHQOV9`;7l@V;J+!e;zAe^e{}>FE$Za$1gU~1FrjPLt+f`C=0^-84o^xV-5e^ zxc~M|AQjP0=&u;FJnU19ml@%SYc>whjrenaU(6H`et%)9oG;$1Yq5X$gX)`6pZ|*E z18NL3#XtDX+0F)HlgDvAt8g4xs{eX?wqtM|tbuubeh-OlE}!vnC|JO}nY$S4n5Qe) z(WhVEKV#y6@0_uZ9S=m<74qtTUvye9zlKdbqtm{x?H_d7_qFqbPW!$FyI?*)nqRv= z=YL;&Kj(j6pMTE(zJ^`)t!Mi|!~H_7{UG0dqt?F2H`r%i)Y{K^zffyG=lw>leb0lP z_C>AzAmo0b)_%?dY7PDrd$!?3*c525pVw$8EU!PWVf!E+_469z22Oah`YrfOxzdGhG+SMl>6e@(%Gi}V&c9i zx5FPy-1poWgZxFxeb2prubKW^J065Tn7H{Kk6-NcjDGvJ%l+Gb?lUHCZWAmSzcF#& zb7w^I7ZdkAH~Zr1{+x^b^1LF=`%c&f_t%6x1|Z~M)6aW6uQ*`rA1^arR=@`1FWa#P z9v>{BJA5AKGr<B`AWavBRm<* zuIJzH!OsiW84v&Ky?|&DVnTo3&vm|kKd$e~0Qn++-Wx!FY;i02R=$X%J-hvdQUWS% zMlJpLH<6+ZzbINKoe^Si&00X5{Xuli59$97AqE82|BLVCaq)lu-Y+T&E9Wn?7tTYN z8Q+7r-Hf~fhX#nT|AKb2K*5~Pix5sh(h$xA;^{A>7uxwZI_it4!uJBX_C@4DRPMhb zzP{J_ZxC>Q{{>+Ogc$knuIK!N^7@6M8h`Hd2LXrt>p3p}gR&~W=(R6Gi=L5RX!l=8 zFSO%rM$DnT;fBWF&4{)CZ_oSZIezcsdtE@deXk4mgZ9V!FKSJj?+XYntS!IZqy4_0 zZ|;B4Y_}QJh3ABJ{Gz|YFZymq+x;Vw?f?IN^6##HtDD;qsk1;F{_FXFA;GxKjI4u+ zQq8C~JkJ@qHuwMU^Z%mHaNg<KJp38||A4^z*Xx^6a_HAzwBC$jn|~hXpWplXhxW#K z-|Iq}0}_3H{%*fV{H>bX>x))ICf06_?;u`-=c3K+gTMdYFTQ{C>pD@1{a61R=KBVU zPW#_M&;1gWoGWHF+T36N^M4qpKk?Tu0u)1k4(^K-xk(*08*^@l zf_$+#uLAitScs74QL*sAAs>olkqcqYTucEAcFF3QeXG3Bp&dqnOL zAMfYT>z=>EGl}>k9=_xLLe8;hgfBX71X^x7_;!62?IKt~as3xk4!{46l>2C0{ugq8 z&iZ{EX-~h78}1)u-PRg^A20a7j{o{z9JhaeJ_&E=ujAI~H_}eWdiUq}=da_|pX2)P z?YTv)uofD40dI_A@=5Zq*`*efA`>0M2Vwmjlm>Y_|&!5Vd!< z?Aa{Mx;QCN~iYkae}A3+M=6ks0I1@eZ(U47BaT{Dmp zv9ec>E@wXX@YF8Wu?L>o{q}h&x;MS$_f48(FD{e80-y6ZC;%8(>~V?nm>qy&`<4fWDSb5Kog-B5naESh~N$fs_lJReET zU~;1SgLprtqQ@ycoZw=%pw)29oKx}^PT>M@KCz|O1hK6B*S$&wCy;IVhN9yyM-bUt z;Zb$m%i6KS)oZ#eZmA+P*3y5*zFErjl5{R@3~g5NQ1Psi?XRm>xHz4E5#BA5mWtMK zHIW5;j>!{MUCU_KPl0o@nASR+L9j8V!{Sya_38XHi&J^976A)IPqQWv zbZ`gdV!pRYzT8bpxTehQ(hCv4L~I#4Iq5iYSHU%_;v8<8={%^Ez1yyp!}+yJBr5f; z+^Oq1=Gm8L5EicWeNxwdM+uw85{l>Ia$`Zw;l#QE;rcauds4}{ytXLkqc4Ygue=P- zz;;TpSNG!C)R)m<_UEH7+M7%0=5co%l-KEnS`+2dIk8sVZg+u^Is*EHluv22#XKRI zU6Wl-bJ>TG5Y(xyshsZTHqKhg8KpEFuqy*kdY2)w_i0MpunvxY4~#!-+2TZftcm4` zPSRa^(O=qHjlwV#<6id_id&&NW1pNmb1$!v1LR7z7of;OyMMayv@^1EQQXrPRMp)z zY*64RX|~uPYXi!*>IKpVB5GEj$||BR@7t3jZpG7;Q4aB3KniVlT0NN)Z9=?$!Afgw zrMAtL-pa`4r_V!w0Qt6%*%ur^=!lGgG@m z41MoH1HS`Q62%PI5E`7rKtmOwpyp;kS?QIOp}o4TedbE=Nh!XMktO-n;U+2kg^N(m zwcD+i`&~M|IYM!x!DGe)e+#Dj!z2_$y24cIIN%}ceP^V9x8u=6d!6^i%;4Bi&dZR< z_8k&?=2+PcGY(J%d~)W#e`0J%Psq#{kE0%$;qt*(RYJsiXIyTvW5omf{lbM3UykYO z2?wf+TpT}zl-qfCmMeflDWr4juPtKy)#*{}ShP|rav|^_75fQ5vOLONGG@WmS8f*V zFWILn9=1<^+OBi+E?dj`1khR*I;V@`onzl7tqHnPyY1zIMAQ0N%W}3a7} zS$yXZke@SCj!b`6Es$5*rMFe=&mBIOjV*k7|NThiO1RfacGx0^P8&}5vGCzpM0xUV zU^{KcJ!rPWrdqy61h( z<_c}=IR(!%qQ-_uqckeGeL{|qfcqP|HB7?IYJ8~M^+RJ@4RSit4eM-o9Z;?|)T+L+ zk5>sIk_v=I3~m+*7p@PINI{p7cZ+g$vg!Q8(@$%(y!#}tC6MWy406O2UmUOT9`e9f z>k)H*+G<=GnovSLE!1Ah(-yfY=-EDQPRF%p{J>!D?aK2pB)~+5ACc6YxdpxsEiKx?3ALE;^T4hZ@He`ryZSg+3~$V z62K=uWRRKJWbcbDPk?+hxn9Jsc_sG%6!8LoRMKgaZPpG)hoC21zy@}P)A1OxI&TA3 za~a0ML=}z52BBrO+~){pSK3~lL1$cQ2&B92C5}#`=L_V3s@jO-+A;!$ zaX1X;qZu1oy#V?3OgvJp{j9MNtoLN-GwWI&c@rV!;K~q63zRG{T)vWj zUH%@|vTfHgOF7OxgKkf%(@~W(drV){@mlir{l2rf^O3CfZj zl^#UbPi3r3{ko@BijQ~j02`|h&(*JSTwURvbt$;NZ;y^Q-YZ4gP^>B=BpC)T2SB-8 zB&u=xH1<98kNHDg`)A#g`6#bP5UuQg%Br2+^X%^y!nBaM{q@*3fY92`XD~XoFPyD} z4t-omo`X?OUsTys{3p}L&oB}}L_u_tKdY}hLqerfeM+Bp3E*mDzc-1Z0J#r6)F{=tX$oQok9F=>r2(^c8LUqY6p_~<8zg>fdVd{khw%B2Ji7WwQR`n!IX5<%Kul+xaaG*Dr|a<6iLb%E7&)x+mrhODKz z&Cc4c^XY+YA%mOqZ)1HDI{H$cqDkqaN3vHzaAV{N680tVU6c>u?(?}>cCKxD1(M)WtjM(1&dKsi?OICZ`Qtt|*g;)$ zQ>3EDBwdc1&z9UgcDo$U2lA2YGvLst{PEV+%0Q}Ey;AaSJPDeA#avK8s4TLirkm-w zdQf(xkDq6~zdojPCt&eopEVV!`QfA^FL+6A%qsImp!muAGq~NK=i9S`TMS$^cKb}N z4{E!C++f~EX}hX;0sm|Y8^{p?&bEKackcDB56N7-zV@pNM z$0&^DX7QGL^{qoR*`d&zveZG&H>$;`J6{KjhMe*@@A@i#^0&ELYmtQuWf49-i5CI& z9LZz{^(MHs+R-H)ew9P$I^B@$bmeo9O&!0Op!jwZ*svtl5H@ys2m>k0vl(9bl76#Q zpS}G&t{nHYvtUcO7jcj;PI%0pInr*=PT5n5PhfhsY6GP$niB-a(g_L6Z7eY#@3{R? zC}6G+CZwW&ZppooS>;?eq>^1O6YFLMfH*H!V3d%0z|t%T=cesWIX>q9aPSTT8 zZgiL#Pu(U+>#jJup_QWY8liaIfDM79BTZRsy$wu%kB3I}7oJUU$Ih8sa{;-Z$coA# z33`KinhLb*_0@K4R%?C$iDGlvJl^MY!|h^skIGw$bPj{f90?ckP?V%N$Wp(M=tK?4Vlc2h=p8T%>T9H_1aJDtAkq3o|s&)-aVh#o=j=%COIv$sS)G))5~RZBG&}; zoDn>4h49iFK|(#w%Jilm?sqvT+r=%C2XLw`o_A;TwB3 zY{00X+1<8FWd}vjm&o>|slBg_!*LL!E3a3O(RwdcbV=N(^4{EOYWKW9qTMZ0y_Zp; zn)6l_1+QdUPbru6L4yG6d!<_Yx57MBKMj$^_-Tse0=bQJ+@9TlKW}qCm#tiXa)TAM zvL5M(@`#0GnN;iT?n@cFRibb0J2l)Xl@l6}QTCyEX+Lpt9h4@dWQVGB^0Et& zRJ`x2o#`KdmXEdD#tARiB2_UdhPrJUI$gXKfGd~_jQ&)=Z|Hor*do|yyw;~KOe7?~ z@H_14a;S-nkLpC<7Ksa)P2+WcgK!nikn*zL9YtkxSyAl7w@pK-+amLyqfp8#x_)(Q zZ4{tR^$G9S?##`?6CEE1W;PzopreLC8`%B~6Oi$tGala&k6#=g-Ww9H%2MLmPB>|_ z*C)xaJ!sLzI918D%464Es8t1X%YX9_SY^p|8hbDO{sv}`UApdu`UGWvE$6Rsz%IX} z_D^p8CgDHK+m-z8e27|J4k!h9#6g!gC26za?na%J!9`3jzoMcv9k$Tqp8QO)N}c=| z(E>@c4!G=M(>#k8Yi%X;Qws?~Aq?gnAPhGOptW)<7_URu-1mt~JeoUHk`I(1lS*fQ zD!U!4hBWlhI%G=aD)AtH6hvlOY8IFk;a))ZKbh;AU>JX#7SSDC)L>|Dmcs**z-?Cq z1;;yyBGXltCY^t3A>&<5pL%#2$BFDP7`s{A3R=*zFx*jZE*iqSYR|)gINd(Bqp}GB z$kEz#w+g_Ad98K8D(bq=7FQ0b8jZ(Gy%o?)a6TZDJnU|t-Hu{^^D3%oBak09S>8wp z1b^`N52$aV+|-4NX8A!Xe(v`Y+&j{FRJu5f1fzD1!{g#_SD~%EeJ5Lm-kr0dU7TKR zkJ+xs0I2+vFbKA{zi*W-7|fdSuu{iDoli^@@}8_;jGV3-_sM5Bm$G%o+3pAi^|-2S zKR3|j<%|>g?ysaC-JU|EG5S-jLCrWg%qsYE3>=h z-j&Hsh`NrK?5=h>77Y3p1KjXT9*P=9K-o2?4b9D!D+kecflzZ0(90jckCBU3R?VT%VuZgM7S@ z=(fRowKRw&Kn3Q!?Y~rf;?YC9I_<6}&ht?j@igIB+`euU6l`UVpv4ho0hcX(aVSys z&Zwn*LotMZevmtOu(Sm$2JiJJ23#XlmUQ4qt$Ozqu|38|brlTMMBiTe^g7;FA;0vO zH|(&q_iMBZQ8gDsNv2AJMBdpjc+FqVa((-uUGf};}pAkuVW((?a}*Yy`@LUK-JnyD+x%=t)S6P zH*q)iPj~f9f5PjQc6XF_9nVO#2C{pmkg6|*7`7xNdTNR9M&a1Qru3j6HHGwC%e0(?xl>K=(L$e?eK$MQK5k)1M|&d4C6}(s(lK zAl=&Mn#C^#HDc{aTpS={eml3LS#9%p;yvFxXvSb!$TnpxXsIWstt=F~KDsr1BY{Do zWzQBu*Vm8+qQ7|*ox1w8vXhgpu)RI}g16bK^&i_lBQF#vd}St+EV7bbmn09*;p@=5 z1SP&*fA;Z!L_q z=MFq7*Qht?mz~o=ax-;z^>f@EKcYjy@PS%DBIeEc=J!0zzq2N$iV=W_+ndr9RduCE z{xWa&CkVi9`v;?l0ibH&$O|7fTujmK>|9sr31v#H#HloM25eO?qN8@Yya8p*M_cZn ze`NyQH8_qJe#sN(l%|eZwa8Jr93B#*SuEYn*!#P8lp9v1^*)dNnwgI(vs%JC0W(qC z2q!U1qL18_amM&aQ$K!^6Co)te@$N-l*rdRc;t_V0lqxpF7)~B_>R|~;I)>{BrBTP za^RPhR)i#1D!Ps5Lu;WZKyHa*U(M$he=n|&tq%DmbT4}#Cn576*Bdn4dx&tlfoDc9 z!CdkM>r#wRhbf6-o{DnC5TzcaY;LKiwR%C!Jj0^a5iPu1vXH^c->)ZiudbZoZtRfd zpM@(rpdq#5BX_T|w=3xU_XFZ9!jda@#;biSPn-{-{mTWQEigc9A^N z6UAeHgX&D%#7D{LO!eGyvXnk0>neNa!*G6T%YaPV@CE{%_u^#kc|TDr4g?-h-@83U z=PFUJSB1Xlnp=Uvx1?WJ`5NlPaMpB`n~Sld-xVTI0>X*O;dR!f1IaUV5ihLC zr(Vc{zjAsfZ{pA90$^|oRI{X-jd3UQq1{~4?9mS!`C@xUdUYEHo}Yw!IN906B z118ffh`3WU1$Odo-E7J*c1|%^NU{8?YxR|YV5YA0CS>+ZPS~O|OIT_yf4vq;gPEd4 zq{q>F_<2PZLQ7Qd)3(|oo_aE-NG{J+-8u@FjU}^!1>TUahYXVb+i6^_pb80}EnVf8 z^^6ZnO&oX4;E@t6LEVQm0&U)`^y)n{h%h?~OpB}5T^@p^hgA9|4@II-t?OYG?swx* zte#WzUh^)+Qwa7r;d-a}e`_q+;Zr+9sy%p$p=qxwJ+`PVt1cT#etOTV989$s2(QP; zX%kDnl5OY@+govYUF*TFCsygNM%j8QwcObP&CI!IybtC2_4V1CP)5=Z(`HlL%50&C zz6i{bU6YhoB0ZjpT7DTR&Y^g)TF9R={;KT;2vMmf0D;g&mqCbQfA6=@t~PAs4SOB( zM!Q#keyH}9KHglVyf($kWS6~5p@moboDpx2=UqoMX6%VFd;qI7bs)XpLAXW@=Q`ZS zUi7}!bljY7*Uh@oxpQem`u!D&s7R`Ttld1T<>fY_KM}QU?U#$j9D}wgO@#fA^5zXo zUD{`0V{CMntrncNf9{3!Oq%nORng*(!p=o%orx^HPp-h*n>8(>v|H`2#+i585+1}P z`z~%f`)OpZe%(Yokmh9o-p05Um!cU8d>y-55E-`uLIIN^%b;cm+BPw4`5{)y$MkmH zp|x$ehxpeO!52(^*~;1Z?6VM7pE&fTs~87{kFbLiZwP4_f9l7zsO;8$pjv){kD#?w zKKS8VTt1w2e5w}gxm`a2Ct5)^>TnZfV^;&@8zU-nB0)|LnyGY9X!;q(5~! zlZf1qsL#*lR*;!}H0>n<2rKi01dPv$c<9C_tR}BcMkgVkdorHdWlrU9tY<5u+hHHv z7R%}NU~1`If2JA@%K{zdG;W19%;>AXQNtJxTQO@t)$%!oVZIWgRlncLF=z~%TRrvI zr-E2=0g@m`VUk5jz}|Ha5`lB;$tZV^QlavwD^ohNNmj&X+`Jm&?Oc*9mVnS%-v-SA zM0T4X2R|S~f-mn2o~U04S2Bqx=0GM6jlCyEu4dYdP!^pzT0vSCwIftcQ0;%d{D#c zp=<4ZO7>iH#6CTIyRK`kX*j@+>@KrkUag)M&kF}UdiK=bsV#N!DKC3H-pc8c+%|q~ zPS=m>f7S_znH*3k)p`ltko(P*7d=90B>t=!gR1pz@G2U|wqn|KHQtlbg*73nYSkLs zkS3N8**?pKcWGZx>8#rPQuxi|%!O;K`D7oY{fp--W5i<_E;=7fyXid?;<($|@xZBf zO*^Scu}pz32jap$tUfuF?0w=Qn+v94kFN!If5aTg9ZTEif@jhq4WPbtg`eg=B(EHMS4E)5|&2sha5r!6m~4VG11TGsQK^v@5qGz2YO>~E%4 zfAa~ft{Rwpa;rNspkrJ2vY>T-_qcj#m8@>Da!IZAa}^>Z!K(>h*}~?PHmhf-RV@(Y z^1CqK@daM$2YsU!DZJQ=(^T#Vx_J=hCsKQHox(R~6;C<&6#f&kB;)knVYPeYx7tus zs?e|Gf=Zsd4R%Vm&H7Tafo_$N>_O3xf7&XF)4Gdmvwti;J-K>~A7%7I1iXkP$(!LY zy@?WdexhBU3H@D`?D<(dgGz5NVo%%N`*yu2;L%fFs~;3dmLV9jNBD1Z@5QA=AM7VH zIIHL|WYY3EstX7<9O0-YG7%dF9c5%&%NF<9<9fMeU|ag{*M(X;eUnsbKUGKGP1LBvX=1~afCz}yZmxUKh@|IZCk~$S zR&ZjMsKh%4A7TAmvZ0GL;9{FQe-Hlj9*>3MYpQX*XN0v<+^^QuQz6_p)13A9=8i0* zp~)yIJl&yMdjqjxDU7RICyOiYx}+KNWL58Qb=hwegeyTsN{q3ssc^6zcOfI+#u*}i zw-)c%0v=Kn;WK{GWEY0&yo`bhnWP+yzOohVL=}C3W815HNEre@pa`I6N@B?)+@lne;jxx60zE>C2OM@{uvH zlRDHwLnx>^*Gp@SqKETz(HO&zZ=DsEYyj3tSxg` z5RBCyydo>_!2ki;v%7DJe}Z3djSZ#^0^=V&W_+uF)=>yJms{wX7g+hwsI0tPd&UB2 znzIiu{@x5FNQ8&ai`U)k>+4MpJ0O)^go&u`aliKKLr4K*@nk8#tR7FxN$&Y2x1|O~ z`93KJ>(Yze%UC{Z`gz`fnoiU84l!;|{k)iqDVmjJKSID8=nua}f1!9Vwx4~G*U^yV z!K-`Om)Bv_M4P-nQDBtsBKJtYj*I##19Au2;$e4i{B~FmW&H63{w1uVuDsa}BQ+ln z^$?HaX+s1zJ|lAu;+hIVWNi|jgSQFRet*abh1*56$w_2iAP%EA4~T}dFmx>H5nuQ_oU48~tn%dWl#e$r zJjlo31g^MR%RdA5e5Yyj5z= zl?{C06Gf?4f2KV7W+TOs=QJX=CFT_=f;}aQpz%v^e(wCOg!<>_d6Au-QsPod$WW^8 z7~5eLthQPriDTFyGv-9c-aGPD`3AFqGC?Eo!V1Pl`SLfH#~Cz#*YBWE)D@;) zB%ZnuRQ7czm&>ksm*M@*YV{rJGTmE#+A23Om#y`Pq;-dfSSGu}@~&Og&xk}4^$N^n z4dFkf5$@O6D|L8>SClR=TqiI?-0ukR&h}%!jNkRKi7ts>ZXaIocCF}`E?mBpsRnY7 z;f}noe?j^re38!D>q6VV1+Dd{!>1!y!Z^NefPA68YJi~uE9A`8q!MJXRC~iJ&aHK& zFf3^*U+j5t__Q{ms^P~Vxeqm*28!BmwyXHEl-6u?t<7P%0u6dOT#%3V%wvLnPDF3) z3v#Vx#$C;u)RpbCN85;>b=d*YG&Z_`Tn(R9wV4v>GRob?i3$KK zfB8c%y~YXd!VgsKyZ0Ei7rl;~LTq-?^^RzA+;amzWeLi`GZSv?W4EqW#MNCcOoclq zYuzZC5xZqU75Wd9-eAnC#a&Pd$K86iHwxN_5Ye!{oRgt$x*d_MDWQ99&(>h9pRW0| zVWg%#%g{A4yQuB0Ynz=Zb^NqaGyQXFe~;1H&Uankkh=xhIO(D{RA#tFRiB%r&pkIa zGDfcVJXfq|C@EIGxhuD&=ZSaGD~H>SyN?S?0IhgzdOF2E^Rp=VB`I}FXSIEu)XxWw zo~j~}#fN5UT{zQ+S`Dz#js4<8oSt_t^H2u7+uXNVbE70L zjRkppS1Q4-zJZw@2>673fB3vD4S)vLb=?Td>pl9=&kOUihenUrZ+CrjeSy491ENq^ zS~BH%scO^cJ7}T|&#Oj_!L-ik9b%yS14Yt_u+&K`=4+uRW!Q0_58$y%?8yUdFV7EX zBr>T`e!y@o`w40r+b%1H&*n}a(=BgA6}WgC(JUZlpS?c+oFy9glD;Sf3 z&&X;yoC3r~?H2BYbk*&)47mvG0U}8e-wZ~x&+>k{oEMb&1Zti2kW)b^dIg{q6U+C* zx+6TD^p@9iDAAvffA?N*U7Jmi^SVnA2!PsO`+|0(_%@)U!}ju7(hdQH;@p5N8>#S* z_ig+*qVBWl4I=ZlT*1{&D-eV!NekV!3mxnOeRzU5re2LLl<9|cC!6)~8si%So*{V& z4}FLJ&%2y?PLFGVc%~RT6ly8?&>S$)W0BKu#6TgH087Tke|54@1$5f1hee~oYFUSO zxbq8Wc{$DV6w5qCZ|IGg%Aeq&FZ#D6Tqc-o8@kvsZ+?)a{@~Q_UT&^|Sjd;IE#K_+BP)ln&#VPf9<>^tU31^Ox=+|rLU^m;dfFCu zzZ^h--(Mage^Sli;olw9dJu+i6(Sp_PbsCg&ntFmS1*vT8sLf42}wk1opAzKQ}Qyi zYV}bBk;?Kez__zGrh2Lc5~zL`UcAr7yLYSb$>c~7!%FxnutRK=q7L2(XXtN^-BF12 z3Xg3vB_GXcR)kl)4mGm6-+j4lbwUY>6aB;?6p*5zf3gT4y0^LQ;{cIRgcrrLB{=AQ zn{-(-EN~I*$1iui@vh6AdC7w9*_#HWi23jvFLQlSk|c}ubSRS~9UiE*Z;;l%-9%$| z7pT+eq-R^|7W!tQ7O2Btd$qQ?M-H)NhIM1TB1AM)&>kPAwBlC>qZQ69C9WC6fnFi+ zF|7Dlf9!$oiRJr##j=; z=Lw;skHr{M|7I2+wmDs!wk3%;p%FE;36a6(_qv#T< z$lG ze=0vBGDoq4<%Q|j*G&K+{KYdCUlS(}uUcca5r>eLGx6dz)h8kpl%;YL!%di8&eHTb zCM%T;w}l}ts%P0EF_mWWHcHB3l@ySPh?G@w>`%92Ww*Sa(8<# zm++^c+}Of({T$CG+f(glv(~5haaI>=gYT4gRfR3&jLuNgWVT*#Uk#z8uUd6Sb|8gX zt4Rgqjmtd1UN7rr30BHbezfSl>hDF3vVbto_@lJe^SGt2Sx5&<(9eVCi+K)={GTAjy7sziWEA6mhkWPUU2Fw4X2MwIi3j@FL`W_b7BI z&1_}jG(6dNiW-69E!}qDJqX!iG=`Oo^o|&6;Fo97S?|aZw^|e|C=dI>KHn$_vFP*@ zvrC}IR<#|fi5VQ|DO8zw<%5U77C8z%CX z{k5qEb@|HZj4UBu?JCdb0yzsVtHey!J=r>pI%5DFMNeR2+_eO^3lu051f$eJGUqCYy8 zfCE=ED}$^$dW{voFYT_Jmdgj1ug;(p%H7r}Hr^KL+CZG$&ev`Fe=cgozcf=|K6P`= zwy7fyn8!BRwwFMSlec3`l=7!})Na3AC3GW+a`D-Gi1n@KgihTK#N}m>8ze^$)d#Ys zk#Y$T=x;WKlRQflB;8jx7-;K{afWZKY%*6^9ye32*JLHE%{OItg51B3m&9E9P-85y#bewO@#m+?4wq-v0CL#cZAD82kralv;$_^g+ibgMGBO4Bw(&Ty<#43?C>`aO;EbFUhE+8fAH48mC)P4dN5mSu{rt8O%vS#8NFN0cc2fe zhlQG1+tOxYf5TSoP}dO`JA3!sbPi58ytY=aAXnWxJ;{Q(8Vg=-54*QFUiSBE=2p$} zgH0PLq@}Yh`GL z$BQf%cT0m$bb@vCI6i{5&6%V)F9vAX$zgGRK;n{-f0XO`0(ou!?mwJrB`9MT6Y-s# zBC2&a!K-x%Fw|Q1abK?wFHDP#Lz+ zOG;I?oLa5=CYXQ)+pRl>OU8qhgat*d;rXj`qiGs`WgFhchT;r8Oj24*o8@*wk<|q5 zw7N_{e}3}M3y>=)=E@_$ zo^PU68M6ry9tvcC<&(y?W|e?{-Pf7piqf=B56K-eM2K*|N>5$-J0UcBY$!wM;>DMS zcqrMb?T~=BaN^S8OZYf#@npt|cJ7YrCCg7%f7XP1E$;4@2SdMa6>8dI_Igu0nH+c8 zyQ0lz{d}d}MkkWWzs~tzzFAeMO5_ zh;o$u=rFvPnB@DE6)VoG48?s6f>E-`aDGpRJ5s@z^J#&^T>WWappfJ$NaA|^+Ho>r zf086K$WvzT1{(m@T{}p}$hCKi5A#NBL}mj}eV-`Y!&17Yj3YGnhTu(PYeazqq)-d@ zR~3!putBgR=;fh7_X9YI z8s21*wY*&Nw|j=Yzl#=Ad`)6gqMtN{e~lO` z$Of^Ar$a%wzV-w7j!c4*Pl}+*Qn)%FL5@$s&B>Q<&+8@m7)hrds&_{Kdmqhzs_1WNt6x)S#ph zs06mtoz-&Dt6LB;84wW4W%e9^e=As4&)s#0J~~Y?zoV<&l3xr*opQ=!wOh!A$!3`B zUcm95>i9x3{R-Ej64znMy|euC8qz-oGBh~v(kX#3%_0CC)I~+lc9v$Ab3%j!`SrX$ zEtQi()e?|LJ8M73cw+E84)<+uOI{{J>OhtGITwJ_ERby}bp{AMD~aOftA zx$11QdGas)-7SQ7yIW-%f2PaD29?AM{`}b1OlMp-pM`4WpRtR$ZBi?I`-WasQ677D zq1_Q!yKbuJ7NqYLjVz~|Z{(&_hpWT7;x_27)<^cOV??0vmiJcmC#2G984~`jQg$BI zbdWH9BTvEXV<*mCY;wx?hkDAZeU(7*`Gi2AnAs3zGcM~Bia9ree@Dgn(=gs4;_XWh zQ{+mZZ;2zp=Yq=5(q6_LkQODqy7iWEFw$f>-cT44Zvt0mwos5(B@}lYoJtJO8Y@+Y zIPnzZzJ0WGEvgeKT|7c}(?@w^+dE%vLI|F*o3K7RKJ}25? zKD5bB8JwX+qWUYG^7e*60kh6>MQC52&0sfnrxtzDllm=oFOj0Ms2n$6d}9FbaJ(1$ z3&f%i8wK?PeVb4r<(M~eDP`Hlit1Y$B3sF=CO|6g>+vjcWmIf;s6^Z|w?l?l zkn6azG8L+{S?XW2kG^y&bCak$nq`N&&Ipb)nr_*`qK>*__UwJ#NlAS~fjM(6LR$25HxY?$jRNi(Ev> z_u^_qcdMvsgMAhL=?DkmgFS77SG*0eA8Kf7Q8#-}@aVG2Oo(}VD%kt`QFkSzN&(}{ z)YL#sx*3_kPP~SfTft6P+=TNjKhZPnW`Bl2e+GkneWBkENZ8z!TJ6y-_kL>!mrfRcsg#xRsx}ww3~MAZ!U?F?1TD2*%ZKxlho$R zJp?~)HxT%b+NNaarq@wmn(cSSyHEKpx*CT%y5?-Kc{iK2f(5J6^v$z@Y$;vmw~Bu( z?^fuKqEz*dy;tTycKP1TJFOb&bS_g&f5=(6FWd=&99Ri$nru|<#&`g*4eVzro!-K7 z2d)wSZnaI7r3L*a`2`Q35{@*fu&%;#iG)`qNMBVs=j%SaI7Gpo0^&@b3ThQ7i{(B( zm4#Wo8~T)30D;P4L)QaT8mE0@v-zVBUz@Bzoemraldir3g6Sq*oNl%UUGffve>XR` zwBFqFpu5avGlfq&4L2_RP*2C* zU8z?eM*FDZKEw$*Cr%|ixJPq}e?Ac_7OKCgUb1(@Xlgu^QB>}64q1%+Qs5VacZ*sU z71x^+cPfYNdL^$a*I)FH$GF&Z3Djypw*&L%E<48Y2q^~n(HWLo2q#xpoor{M7YJMj zXV+1Ar#BXeB|q!;B56CfxhZ+Vtd|#ZI$ybB+WN>UAx_!$B^54x7+fT_f9@SmDI7Sg zoh(PnL!+Ntuerskd(lhPYlPnNN)Di1N-)-Wmn;&15Fzw;C@3A61h6i&`mfaJhAFt=b~JC&-M{*$qXK?j=FxJ+E9qdSryx5$!Jeo=tARp z*~n1jP0Z)1s74}2IE)BUe~Q?+?PeOJyRy@bW;-l{fglB98)whvvraSM+TA0P--J7s z_#u}TpXRl0$9f}^fc9ikv05-z;q}`lxqiyyi;LbAF*&(O1dQFQ!F_Z3?9ZpH1+~}c zgy6JZQMda-@BM%_+-gKdGj}kAShI)dA~V@_-!<3p)4$Bk^>mk*e`=~pmCPrzLR4{* z7^DeS=n>E_k2kZ@(m(OkSN{T3pMU#zT^sw4uFVc&Q9rsiAuPlHPU2uqccN#aIP&~w zk;|{rXKK4IeLQ~&?D#xrM$J&%`Txi*x3NnP))$oTKuzkaRX8hEK{hy*b78$LBk?wi zU6bbgNncXRMhh|ue@ThIi0s_%OYZ%Vllp$Nby>Z)m-!{+ul9$Wej>iBI5e2+E$nfWA)76d+X2%zre070a=9%%QU5 ziX|KG-^%x!zZ64JU+|9&QtW49J5;{DvWDOPK`UFgcGlFDGLPy}tf$4^OYcrn;rvdhT85l=MtBDNo9 z(SCCy4%{(@sHFZ=!H-UUwU6HBh#w44(ffqkco~X&6itGgm(=-_qsXKa_3w+ICtbk z0T@#TAGQeh@JLeYgu2osf>BKDiIHHNj z)T}isT1lU}@8e6yEH=vK>JlH+TZhU@*{sjIWmzrXMcjH<#s}ms!Nwd3ZTpsiT}BAc zn+};Af9yR1ju+O3dstR4b_%mK{A+fL{Q=0zft;@2$$Fb^0!#3{V86O$$9rk-&V}q^ zt*_ksxkBh{8F63&V@JX}jgK0R1obq>MgdAtEbGmo3HlFi+sJ$*kN3gL z9?Ef3frVfrI;&M?yOK6l)(f9|P$Qk?w3vYqc3owKOVE9reSH`|T3 zpx8lt+~KuOH6mrkwjEhRj4I^kERQ)yP`Bc(BZEd=J^Ztekce%I!b>HOJJ0F8CSR@) ztU(_-a-4E(&42=1j84ieL(2pl>VbJqUvW&zyifvZ+;)F_yzixw25la6$gz!u2;1 z*Z2>Al8`Jy(v=lZa5Pa$V~RCuV|^u4L2pn@4*c=U88W8eKk&g!8}cXE^kf#}p0L{v;uf9Ii% zYTX@>PIb;eRVI(b$Q#_{SGddIxDJXq#D4fmJ=J>DPRFrecxeF6n~9Gx^|>sfh8IpN zL>#*DIe|o!?L}PIr-rBV)DwF`I6di!V!MM)OgY)Se)>Lr4 zxEZ3w3sjc)N_NQh_toXy^0%m%F80k?>f1&+)fTlA&TBBnc%xO9XCKvr*8L%8jI@-I zfqmH%Po>yT@aMxYss(3okD}R1pO@Ia+LQM@th{G|>srCgiO8aV)@v3U6mX(Ge;tUA0ZtkfP)xMTy-Xk$*)h&TZQmjb%u|u6BAxEL_M=$K zDXh}TFKS>x9>VTj3Z<~vUT&|1IU`R{BkZD-8@;Lh#o=VHugQx<;f}7q0+hAA<=r_T znU5?U9-n%_>2ax>>;ie*pGbb1Ph*^luqr|%V#v(xd3)Yhn`{uFe|eWD*0@m1x}NzM zF;mslty?tL<{`h=*x5)FvE$dYaeDE=;?O$m^@ViS`oO$nNp))Ktt~eC!`@(Ry3|2+ zCz{(7j=OtQ6(}b)7Xi2RQerLcmSRqmG6HYi609AH?u^xWy+JWfXYEWU6vD6#X%F=O zeJDaOqbhHm;(Rove|v&Dk)5~Fa)o^t!mVe?qdey`KK!0mr_1j0i5jB{@(h)DL~i$0 zv(M`wYjzYFI8y-XRgH{)z3jFLl8n-=7b>cRE%F4x3|=G-X6__;dGR81xN_2&E1`Xb z2nQJiflSbvSna?wkhmI}U1?;bHcIjz9ZE$|+8P&b6`4n-e@S;HclV6unG4g2_XqL3 zqk%@>DC*mAQ06RNP!1iX`s%?GyXZE&yH8NP<9fWd&U;xnfRz9^t(aA?#&$!YU#D`j z-Bxw|L5Wc~mJ!kc%yc{_=@z+VuWu5(tv-(1Y@uHa*;KE|h|H}r?C85@MFrhI>-Mb^BNL9pf+kzM$tPiim zrD9V+Os89Bjj~-nZreLh02NXlAX55xB%(S@w~?v(2fe-sH@C4I%~w!gsZva=*Mme74&?otOe#`oSE$9H#ECN2#uYwW1v zx=G2Le>u8$6cI00ZvHM!fO8MXK4BO6X}QRxFou=^eL;b{fn0L_JoKMYg_7Gk?IEOd zLZZyGJ{_rMG(CiAiBVoo;$WEm=bb-Z5BKOCUx|=eq~ypuqd-yPYPc-9^Sz$)+d9fO zbmrz^M_+m&Io-zaux)b{*ScS!K82a+~Y ze^^-3^GBP?ag@9%UqjgqlJ1k$-S@UxoaP*qEs~?7I7@c=oNhemod@rz-Dqvc(|xRfjF=(?~jofGct@nI$}J@vx*`FESG;(~e6oxN*A+{UP3l;PGKhEXV6{ zcUY*%%0xY|osm0@j*I10RPwResT+&-f1b;ZW+`baI1`j@)%3zQ+$`@FmMhw+?JJ}> z4!}l5TGuAlZg?Z9W;CJwz#QBax7(pg^Ql3M@x?eFozn(L1Zpe;9e}1k?`rvNqui82 z!o%?)5{zbs7eXMeuXV9HtBG xoL2p+q}_(&lj79>WM}sDgOR_nVUubFX$|f3?2r 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
    Fw+QNDOaD6o=`Gr^;c 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 z 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 z zKS`_oaE32?x)>zO6_s_%;q6FvkCJ3ca?bNuY342FmvLhYP7eX}yG2b4*)e0Le0B!2 z5`C49`IAtw*BySy?T`%wp^;YjEJuMIxr*a)+t*<|x0t=@PX`~HpUb~yX^PjYaoID> zKvyHq$7VW!Zi~kie+EMvg7$BR5ZAA;zUdZ2yc)~88=cLxf|FwtFmazMYQo`${cL8_ zNB`*CNfLQlNk~5YmK@Gsfv$R+f9;zZxas}wyLrbfX|iAQpb`LivN-km$!=MV^r*C( zx+W=#_-DpI)loNh;l1ATsST}^`86f^e@Cf$o&D8>kaJOu1rW%H@e?eN5epAuEQeCq86FWYH*Cxj_s&J)-{3@4j6|`u2h8BT& zkRK1e=Z&;UF9IxyDIO)ew_!3or*`>O{vfY+oT4}sD?Cq?V90!^zAKV14)%E;CfOR! zKh{^K(fRXcQ49rEVX49Db-B8=%(;$1S~W?dWKarRaohV8B^Uk<$^ZW$D%saYXE#&1 zR(BS#oqXrl%h0+_d0jKzLg}8xob=)m{(V|;N##PqTq0ZU@zXTh_1B5vc>Zp|g^p4)nS0&})cZQ6 zW1WnlA=GM=xWV9=>dwj)-(NxhRpdgr`YN%Tl*;YrMtO@-LMf4cnXLh5z>>iUJmx@A z2XBQgUiCk;Wh3b_JOkW|OICU&QGqnZZ~~Acs{7F*BC!4T=kb*1{rP8jPpD29lrl}J zE%W_lXH&iLx>-P6t-i0I@@9=)hTe11m&-F)i)w32-3wigW`*2J0eSs&M@XfQ{x)Q^ zz7j7rW#7*Yq+Q@FJbodjRSAV{R(fCs_dzjTg`;z7|X#^W}3&I;4~YdfNQC5 zr4rWVHeL-x_P=YpE@}`y>y}G8^USu@p3$IOy{{_AQrBCH&3nmtHq6 zHC4@%zU>Ijlb#K4es>@lXJ|TPuH`fuKc|9&Vg@?tLUs& zl6@gw;L@G>{<~l0Ph-pu(zi>G0YvYX7dQT=0Z(4Pco|J&WW4HL;K8}lx1(QOIR=xC z$NF{M-!YD@55#<>cD#vb@@@zLXV4fwIL!WK>o3qIdCTx4XqYYGBu)*N4|`@#V$Qx? zXU_fIJ@=kwT3tQtB&hjj-WrOw`q* z@+H`(J~_+mbL)8(2mQ+shjhAK+H6yVvhiO4oy#t`^U&P>X8mlBhuvVSI7OWG$H|C&ZThcTjS7>7?`r zAb;+?dpskE3p2yeZ-<<BD)QDSr0DqZ zTE_}k+W#bW*pDqsGh)f<>?wpfC*06k?KaxjN?L0p(JTRBpm^HHGQH%qC}R5W#AW#D zy#66}&qB*^70J&NkJdF&wqJ3t_9oUa6O7#-T^XA%vTv5IWD?DcQW`RDm%0Ash3J9~ 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�Md6vb4x@vuptW6YT) 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 #tc6Y2@%Vd$5?CS?svc*Zgt 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 z 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

    f0^`85-tAY0x}D9xZ%x-#9arMf}~iMA!}-vnK$< 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�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

    To#*i0$b)v$gq- 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 D(Cd$Y diff --git a/tools/server/webui/src/utils/app.context.tsx b/tools/server/webui/src/utils/app.context.tsx index 0b95e88f89..1860ecc721 100644 --- a/tools/server/webui/src/utils/app.context.tsx +++ b/tools/server/webui/src/utils/app.context.tsx @@ -255,7 +255,7 @@ export const AppContextProvider = ({ if (chunk.error) { throw new Error(chunk.error?.message || 'Unknown error'); } - const addedContent = chunk.choices[0].delta.content; + const addedContent = chunk.choices[0]?.delta.content; const lastContent = pendingMsg.content || ''; if (addedContent) { pendingMsg = { From 945e1f12a6b586ebf82fa4fd7f347225e58174c5 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Thu, 21 Aug 2025 07:32:26 +0200 Subject: [PATCH 055/174] ggml : fix condition of im2col on Metal backend (#15460) --- ggml/src/ggml-metal/ggml-metal.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index cb8eff4a77..7c70d352df 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -1846,7 +1846,7 @@ static bool ggml_metal_supports_op(const struct ggml_backend_metal_device_contex case GGML_OP_ROPE: return true; case GGML_OP_IM2COL: - return op->src[0]->type == GGML_TYPE_F16; + return op->src[1]->type == GGML_TYPE_F32 && (op->type == GGML_TYPE_F16 || op->type == GGML_TYPE_F32); case GGML_OP_POOL_1D: return false; case GGML_OP_UPSCALE: @@ -4703,7 +4703,6 @@ static int ggml_metal_encode_node( { GGML_ASSERT(ggml_is_contiguous(src0)); GGML_ASSERT(ggml_is_contiguous(src1)); - GGML_ASSERT(src0->type == GGML_TYPE_F16); GGML_ASSERT(src1->type == GGML_TYPE_F32); GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32); From 2f3dbffb17ef782edfd50e5a130cec6e8a7e47f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jie=20Fu=20=28=E5=82=85=E6=9D=B0=29?= Date: Thu, 21 Aug 2025 16:54:34 +0800 Subject: [PATCH 056/174] common : fix incorrect print of non-ascii characters in the logging (#15466) Signed-off-by: Jie Fu --- common/common.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index 67dd5404ff..decabcc2ed 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -558,13 +558,6 @@ std::string string_from(const struct llama_context * ctx, const std::vector Date: Thu, 21 Aug 2025 11:19:50 +0200 Subject: [PATCH 057/174] convert : make Mistral community chat templates optional via parameter (#15420) * Make Mistral community chat templates optional * Change the flag arg to disable instead of enable community chat templates * Improve error message * Improve help message * Tone down the logger messages --- convert_hf_to_gguf.py | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index b45c8f1d7f..42bf10d216 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -89,13 +89,16 @@ class ModelBase: block_count: int tensor_map: gguf.TensorNameMap + # Mistral format specifics is_mistral_format: bool = False + disable_mistral_community_chat_template: bool = False def __init__(self, dir_model: Path, ftype: gguf.LlamaFileType, fname_out: Path, *, is_big_endian: bool = False, use_temp_file: bool = False, eager: bool = False, metadata_override: Path | None = None, model_name: str | None = None, split_max_tensors: int = 0, split_max_size: int = 0, dry_run: bool = False, - small_first_shard: bool = False, hparams: dict[str, Any] | None = None, remote_hf_model_id: str | None = None): + small_first_shard: bool = False, hparams: dict[str, Any] | None = None, remote_hf_model_id: str | None = None, + disable_mistral_community_chat_template: bool = False): if type(self) is ModelBase or \ type(self) is TextModel or \ type(self) is MmprojModel: @@ -147,6 +150,9 @@ class ModelBase: self.gguf_writer = gguf.GGUFWriter(path=None, arch=gguf.MODEL_ARCH_NAMES[self.model_arch], endianess=self.endianess, use_temp_file=self.use_temp_file, split_max_tensors=split_max_tensors, split_max_size=split_max_size, dry_run=dry_run, small_first_shard=small_first_shard) + # Mistral specific + self.disable_mistral_community_chat_template = disable_mistral_community_chat_template + @classmethod def add_prefix_to_filename(cls, path: Path, prefix: str) -> Path: stem, suffix = path.stem, path.suffix @@ -2011,8 +2017,17 @@ class LlamaModel(TextModel): template_dir = Path(__file__).parent / "models/templates/" - template = MistralModel.get_community_chat_template(vocab, template_dir) - self.gguf_writer.add_chat_template(template) + if not self.is_mistral_format or not self.disable_mistral_community_chat_template: + # Log only for Mistral format that the official tokenization and detokenization is via `mistral-common`. + if self.is_mistral_format: + logger.info( + "Using a Mistral community chat template. These templates can be subject to errors in early days or weeks after a release. " + "Mistral recommends to use `mistral-common` to perform tokenization and detokenization." + ) + template = MistralModel.get_community_chat_template(vocab, template_dir, self.is_mistral_format) + self.gguf_writer.add_chat_template(template) + else: + logger.info("Not using a Mistral community chat template. Ensure to perform the tokenization and detokenization via `mistral-common`.") def set_vocab(self): if self.is_mistral_format: @@ -8422,7 +8437,7 @@ class MistralModel(LlamaModel): undo_permute = False @staticmethod - def get_community_chat_template(vocab: MistralVocab, templates_dir: Path): + def get_community_chat_template(vocab: MistralVocab, templates_dir: Path, is_mistral_format: bool): assert TokenizerVersion is not None, "mistral_common is not installed" assert isinstance(vocab.tokenizer, (Tekkenizer, SentencePieceTokenizer)), ( f"Expected Tekkenizer or SentencePieceTokenizer, got {type(vocab.tokenizer)}" @@ -8443,7 +8458,13 @@ class MistralModel(LlamaModel): elif vocab.tokenizer.version == TokenizerVersion.v13: template_file = "unsloth-mistral-Devstral-Small-2507.jinja" else: - raise ValueError(f"Unknown tokenizer type: {vocab.tokenizer_type} and version {vocab.tokenizer.version}") + err_message = f"Unknown tokenizer type: {vocab.tokenizer_type} and version {vocab.tokenizer.version}" + if is_mistral_format: + err_message += ( + " . Please pass --disable-mistral-community-chat-template argument to the CLI " + "if you want to skip this error and use the Mistral official `mistral-common` pre-processing library." + ) + raise ValueError(err_message) template_path = templates_dir / template_file if not template_path.exists(): @@ -8638,6 +8659,13 @@ def parse_args() -> argparse.Namespace: "--mistral-format", action="store_true", help="Whether the model is stored following the Mistral format.", ) + parser.add_argument( + "--disable-mistral-community-chat-template", action="store_true", + help=( + "Whether to disable usage of Mistral community chat templates. If set, use the Mistral official `mistral-common` library for tokenization and detokenization of Mistral models. " + "Using `mistral-common` ensure correctness and zero-day support of tokenization for models converted from the Mistral format but requires to manually setup the tokenization server." + ) + ) args = parser.parse_args() if not args.print_supported_models and args.model is None: @@ -8744,6 +8772,7 @@ def main() -> None: fname_out = ModelBase.add_prefix_to_filename(fname_out, "mmproj-") is_mistral_format = args.mistral_format + disable_mistral_community_chat_template = args.disable_mistral_community_chat_template with torch.inference_mode(): output_type = ftype_map[args.outtype] @@ -8770,7 +8799,7 @@ def main() -> None: split_max_tensors=args.split_max_tensors, split_max_size=split_str_to_n_bytes(args.split_max_size), dry_run=args.dry_run, small_first_shard=args.no_tensor_first_split, - remote_hf_model_id=hf_repo_id, + remote_hf_model_id=hf_repo_id, disable_mistral_community_chat_template=disable_mistral_community_chat_template ) if args.vocab_only: From 245be739df942861ddc52331b095b40f18e2a3f1 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 Aug 2025 11:47:52 +0200 Subject: [PATCH 058/174] ci : add copilot-instructions.md (#15286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial plan * Initialize copilot instructions exploration * Add comprehensive .github/copilot-instructions.md file * Update Python environment and tools directory documentation - Add instructions for using .venv Python environment - Include flake8 and pyright linting tools from virtual environment - Add tools/ as core directory in project layout - Reference existing configuration files (.flake8, pyrightconfig.json) * add more python dependencies to .venv * Update copilot instructions: add backend hardware note and server testing * Apply suggestions from code review * Apply suggestions from code review * Replace clang-format with git clang-format to format only changed code * Minor formatting improvements: remove extra blank line and add trailing newline * try installing git-clang-format * try just clang-format * Remove --binary flag from git clang-format and add git-clang-format installation to CI * download 18.x release * typo-- * remove --binary flag --------- Co-authored-by: Sigbjørn Skjæret --- .github/copilot-instructions.md | 262 ++++++++++++++++++++++ .github/workflows/copilot-setup-steps.yml | 6 +- .gitignore | 1 + 3 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000000..3250e3279e --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,262 @@ +# Copilot Instructions for llama.cpp + +## Repository Overview + +llama.cpp is a large-scale C/C++ project for efficient LLM (Large Language Model) inference with minimal setup and dependencies. The project enables running language models on diverse hardware with state-of-the-art performance. + +**Key Facts:** +- **Primary language**: C/C++ with Python utility scripts +- **Size**: ~200k+ lines of code across 1000+ files +- **Architecture**: Modular design with main library (`libllama`) and 40+ executable tools/examples +- **Core dependency**: ggml tensor library (vendored in `ggml/` directory) +- **Backends supported**: CPU (AVX/NEON optimized), CUDA, Metal, Vulkan, SYCL, ROCm, MUSA +- **License**: MIT + +## Build Instructions + +### Prerequisites +- CMake 3.14+ (primary build system) +- C++17 compatible compiler (GCC 13.3+, Clang, MSVC) +- Optional: ccache for faster compilation + +### Basic Build (CPU-only) +**ALWAYS run these commands in sequence:** +```bash +cmake -B build +cmake --build build --config Release -j $(nproc) +``` + +**Build time**: ~10 minutes on 4-core system with ccache enabled, ~25 minutes without ccache. + +**Important Notes:** +- The Makefile is deprecated - always use CMake +- ccache is automatically detected and used if available +- Built binaries are placed in `build/bin/` +- Parallel builds (`-j`) significantly reduce build time + +### Backend-Specific Builds +For CUDA support: +```bash +cmake -B build -DGGML_CUDA=ON +cmake --build build --config Release -j $(nproc) +``` + +For Metal (macOS): +```bash +cmake -B build -DGGML_METAL=ON +cmake --build build --config Release -j $(nproc) +``` + +**Important Note**: While all backends can be built as long as the correct requirements for that backend are installed, you will not be able to run them without the correct hardware. The only backend that can be run for testing and validation is the CPU backend. + +### Debug Builds +Single-config generators: +```bash +cmake -B build -DCMAKE_BUILD_TYPE=Debug +cmake --build build +``` + +Multi-config generators: +```bash +cmake -B build -G "Xcode" +cmake --build build --config Debug +``` + +### Common Build Issues +- **Issue**: Network tests fail in isolated environments + **Solution**: Expected behavior - core functionality tests will still pass + +## Testing + +### Running Tests +```bash +ctest --test-dir build --output-on-failure -j $(nproc) +``` + +**Test suite**: 38 tests covering tokenizers, grammar parsing, sampling, backends, and integration +**Expected failures**: 2-3 tests may fail if network access is unavailable (they download models) +**Test time**: ~30 seconds for passing tests + +### Server Unit Tests +Run server-specific unit tests after building the server: +```bash +# Build the server first +cmake --build build --target llama-server + +# Navigate to server tests and run +cd tools/server/tests +source ../../../.venv/bin/activate +./tests.sh +``` +**Server test dependencies**: The `.venv` environment includes the required dependencies for server unit tests (pytest, aiohttp, etc.). Tests can be run individually or with various options as documented in `tools/server/tests/README.md`. + +### Test Categories +- Tokenizer tests: Various model tokenizers (BERT, GPT-2, LLaMA, etc.) +- Grammar tests: GBNF parsing and validation +- Backend tests: Core ggml operations across different backends +- Integration tests: End-to-end workflows + +### Manual Testing Commands +```bash +# Test basic inference +./build/bin/llama-cli --version + +# Test model loading (requires model file) +./build/bin/llama-cli -m path/to/model.gguf -p "Hello" -n 10 +``` + +## Code Quality and Linting + +### C++ Code Formatting +**ALWAYS format C++ code before committing:** +```bash +git clang-format +``` + +Configuration is in `.clang-format` with these key rules: +- 4-space indentation +- 120 column limit +- Braces on same line for functions +- Pointer alignment: `void * ptr` (middle) +- Reference alignment: `int & ref` (middle) + +### Python Code +**ALWAYS activate the Python environment in `.venv` and use tools from that environment:** +```bash +# Activate virtual environment +source .venv/bin/activate +``` + +Configuration files: +- `.flake8`: flake8 settings (max-line-length=125, excludes examples/tools) +- `pyrightconfig.json`: pyright type checking configuration + +### Pre-commit Hooks +Run before committing: +```bash +pre-commit run --all-files +``` + +## Continuous Integration + +### GitHub Actions Workflows +Key workflows that run on every PR: +- `.github/workflows/build.yml`: Multi-platform builds +- `.github/workflows/server.yml`: Server functionality tests +- `.github/workflows/python-lint.yml`: Python code quality +- `.github/workflows/python-type-check.yml`: Python type checking + +### Local CI Validation +**Run full CI locally before submitting PRs:** +```bash +mkdir tmp + +# CPU-only build +bash ./ci/run.sh ./tmp/results ./tmp/mnt +``` + +**CI Runtime**: 30-60 minutes depending on backend configuration + +### Triggering CI +Add `ggml-ci` to commit message to trigger heavy CI workloads on the custom CI infrastructure. + +## Project Layout and Architecture + +### Core Directories +- **`src/`**: Main llama library implementation (`llama.cpp`, `llama-*.cpp`) +- **`include/`**: Public API headers, primarily `include/llama.h` +- **`ggml/`**: Core tensor library (submodule with custom GGML framework) +- **`examples/`**: 30+ example applications and tools +- **`tools/`**: Additional development and utility tools (server benchmarks, tests) +- **`tests/`**: Comprehensive test suite with CTest integration +- **`docs/`**: Detailed documentation (build guides, API docs, etc.) +- **`scripts/`**: Utility scripts for CI, data processing, and automation +- **`common/`**: Shared utility code used across examples + +### Key Files +- **`CMakeLists.txt`**: Primary build configuration +- **`include/llama.h`**: Main C API header (~2000 lines) +- **`src/llama.cpp`**: Core library implementation (~8000 lines) +- **`CONTRIBUTING.md`**: Coding guidelines and PR requirements +- **`.clang-format`**: C++ formatting rules +- **`.pre-commit-config.yaml`**: Git hook configuration + +### Built Executables (in `build/bin/`) +Primary tools: +- **`llama-cli`**: Main inference tool +- **`llama-server`**: OpenAI-compatible HTTP server +- **`llama-quantize`**: Model quantization utility +- **`llama-perplexity`**: Model evaluation tool +- **`llama-bench`**: Performance benchmarking +- **`llama-convert-llama2c-to-ggml`**: Model conversion utilities + +### Configuration Files +- **CMake**: `CMakeLists.txt`, `cmake/` directory +- **Linting**: `.clang-format`, `.clang-tidy`, `.flake8` +- **CI**: `.github/workflows/`, `ci/run.sh` +- **Git**: `.gitignore` (includes build artifacts, models, cache) + +### Dependencies +- **System**: OpenMP, libcurl (for model downloading) +- **Optional**: CUDA SDK, Metal framework, Vulkan SDK, Intel oneAPI +- **Bundled**: httplib, json (header-only libraries in vendored form) + +## Common Validation Steps + +### After Making Changes +1. **Format code**: `git clang-format` +2. **Build**: `cmake --build build --config Release` +3. **Test**: `ctest --test-dir build --output-on-failure` +4. **Server tests** (if modifying server): `cd tools/server/tests && source ../../../.venv/bin/activate && ./tests.sh` +5. **Manual validation**: Test relevant tools in `build/bin/` + +### Performance Validation +```bash +# Benchmark inference performance +./build/bin/llama-bench -m model.gguf + +# Evaluate model perplexity +./build/bin/llama-perplexity -m model.gguf -f dataset.txt +``` + +### Backend Validation +```bash +# Test backend operations +./build/bin/test-backend-ops +``` + +## Environment Setup + +### Required Tools +- CMake 3.14+ (install via system package manager) +- Modern C++ compiler with C++17 support +- Git (for submodule management) +- Python 3.9+ with virtual environment (`.venv` is provided) + +### Optional but Recommended +- ccache: `apt install ccache` or `brew install ccache` +- clang-format 15+: Usually included with LLVM/Clang installation +- pre-commit: `pip install pre-commit` + +### Backend-Specific Requirements +- **CUDA**: NVIDIA CUDA Toolkit 11.2+ +- **Metal**: Xcode command line tools (macOS only) +- **Vulkan**: Vulkan SDK +- **SYCL**: Intel oneAPI toolkit + +## Important Guidelines + +### Code Changes +- **Minimal dependencies**: Avoid adding new external dependencies +- **Cross-platform compatibility**: Test on Linux, macOS, Windows when possible +- **Performance focus**: This is a performance-critical inference library +- **API stability**: Changes to `include/llama.h` require careful consideration + +### Git Workflow +- Always create feature branches from `master` +- **Never** commit build artifacts (`build/`, `.ccache/`, `*.o`, `*.gguf`) +- Use descriptive commit messages following project conventions + +### Trust These Instructions +Only search for additional information if these instructions are incomplete or found to be incorrect. This document contains validated build and test procedures that work reliably across different environments. + diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 2d61ce3035..3645e30378 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -39,6 +39,10 @@ jobs: run: | sudo apt-get update sudo apt-get install build-essential libcurl4-openssl-dev + # Install git-clang-format script for formatting only changed code + wget -O /tmp/git-clang-format https://raw.githubusercontent.com/llvm/llvm-project/release/18.x/clang/tools/clang-format/git-clang-format + sudo cp /tmp/git-clang-format /usr/local/bin/git-clang-format + sudo chmod +x /usr/local/bin/git-clang-format - name: Set up Python uses: actions/setup-python@v5 @@ -50,4 +54,4 @@ jobs: python3 -m venv .venv .venv/bin/activate pip install -r requirements/requirements-all.txt -r tools/server/tests/requirements.txt - pip install flake8 pyright + pip install flake8 pyright pre-commit diff --git a/.gitignore b/.gitignore index f48ce4cacd..595831accb 100644 --- a/.gitignore +++ b/.gitignore @@ -147,3 +147,4 @@ poetry.toml # Local scripts /run-vim.sh /run-chat.sh +.ccache/ From b108e429043ee5c9fc8fa4957a0a52c3e490d5c9 Mon Sep 17 00:00:00 2001 From: Michael Giba Date: Thu, 21 Aug 2025 05:06:46 -0500 Subject: [PATCH 059/174] ci : fix -Werror=return-type in clip.cpp so ci/run.sh can run without issue (#15221) * Fix -Werror=return-type so ci/run.sh can run * Update tools/mtmd/clip.cpp Co-authored-by: Diego Devesa * Remove false now that we have abort --------- Co-authored-by: Diego Devesa --- tools/mtmd/clip.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index a32fe84fa7..1676c32836 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -3581,10 +3581,10 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, str } return true; - + } else { + GGML_ABORT("Unknown image preprocessing type"); } - GGML_ASSERT(false && "Unknown image preprocessing type"); } ggml_tensor * clip_get_newline_tensor(const struct clip_ctx * ctx) { From 2758fa10dab0556e6c3f130e664750fd6773dc7c Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 21 Aug 2025 12:16:54 +0200 Subject: [PATCH 060/174] examples : add model conversion tool/example (#15455) * examples : add model conversion tool/example This commit adds an "example/tool" that is intended to help in the process of converting models to GGUF. Currently it supports normal causal models and embedding models. The readme contains instructions and command to guide through the process. The motivation for this to have a structured and repeatable process for model conversions and hopefully with time improve upon it to make the process easier and more reliable. We have started to use this for new model conversions internally and will continue doing so and improve it as we go along. Perhaps with time this should be placed in a different directory than the examples directory, but for now it seems like a good place to keep it while we are still developing it. * squash! examples : add model conversion tool/example Remove dependency on scikit-learn in model conversion example. * squash! examples : add model conversion tool/example Update transformer dep to use non-dev version. And also import `AutoModelForCausalLM` instead of `AutoModel` to ensure compatibility with the latest version. * squash! examples : add model conversion tool/example Remove the logits requirements file from the all requirements file. --- examples/CMakeLists.txt | 1 + examples/model-conversion/.gitignore | 3 + examples/model-conversion/CMakeLists.txt | 5 + examples/model-conversion/Makefile | 163 +++++++++ examples/model-conversion/README.md | 335 ++++++++++++++++++ examples/model-conversion/logits.cpp | 209 +++++++++++ examples/model-conversion/requirements.txt | 4 + .../causal/compare-embeddings-logits.sh | 43 +++ .../scripts/causal/compare-logits.py | 88 +++++ .../scripts/causal/convert-model.sh | 22 ++ .../causal/run-casual-gen-embeddings-org.sh | 113 ++++++ .../run-converted-model-embeddings-logits.sh | 18 + .../scripts/causal/run-converted-model.sh | 20 ++ .../scripts/causal/run-org-model.py | 100 ++++++ .../embedding/compare-embeddings-logits.sh | 42 +++ .../scripts/embedding/convert-model.sh | 22 ++ .../scripts/embedding/run-converted-model.sh | 20 ++ .../scripts/embedding/run-original-model.py | 116 ++++++ .../scripts/readme.md.template | 13 + .../scripts/utils/check-nmse.py | 174 +++++++++ .../utils/create-collection-add-model.sh | 6 + .../utils/hf-add-model-to-collection.py | 80 +++++ .../scripts/utils/hf-create-collection.py | 106 ++++++ .../scripts/utils/hf-create-model.py | 63 ++++ .../scripts/utils/hf-upload-gguf-model.py | 58 +++ .../scripts/utils/inspect-converted-model.sh | 14 + .../scripts/utils/inspect-org-model.py | 67 ++++ .../scripts/utils/perplexity-gen.sh | 35 ++ .../scripts/utils/perplexity-run-simple.sh | 27 ++ .../scripts/utils/perplexity-run.sh | 28 ++ .../scripts/utils/quantize.sh | 34 ++ .../scripts/utils/run-embedding-server.sh | 22 ++ .../scripts/utils/semantic_check.py | 179 ++++++++++ 33 files changed, 2230 insertions(+) create mode 100644 examples/model-conversion/.gitignore create mode 100644 examples/model-conversion/CMakeLists.txt create mode 100644 examples/model-conversion/Makefile create mode 100644 examples/model-conversion/README.md create mode 100644 examples/model-conversion/logits.cpp create mode 100644 examples/model-conversion/requirements.txt create mode 100755 examples/model-conversion/scripts/causal/compare-embeddings-logits.sh create mode 100755 examples/model-conversion/scripts/causal/compare-logits.py create mode 100755 examples/model-conversion/scripts/causal/convert-model.sh create mode 100755 examples/model-conversion/scripts/causal/run-casual-gen-embeddings-org.sh create mode 100755 examples/model-conversion/scripts/causal/run-converted-model-embeddings-logits.sh create mode 100755 examples/model-conversion/scripts/causal/run-converted-model.sh create mode 100755 examples/model-conversion/scripts/causal/run-org-model.py create mode 100755 examples/model-conversion/scripts/embedding/compare-embeddings-logits.sh create mode 100755 examples/model-conversion/scripts/embedding/convert-model.sh create mode 100755 examples/model-conversion/scripts/embedding/run-converted-model.sh create mode 100755 examples/model-conversion/scripts/embedding/run-original-model.py create mode 100644 examples/model-conversion/scripts/readme.md.template create mode 100755 examples/model-conversion/scripts/utils/check-nmse.py create mode 100644 examples/model-conversion/scripts/utils/create-collection-add-model.sh create mode 100755 examples/model-conversion/scripts/utils/hf-add-model-to-collection.py create mode 100755 examples/model-conversion/scripts/utils/hf-create-collection.py create mode 100755 examples/model-conversion/scripts/utils/hf-create-model.py create mode 100755 examples/model-conversion/scripts/utils/hf-upload-gguf-model.py create mode 100755 examples/model-conversion/scripts/utils/inspect-converted-model.sh create mode 100755 examples/model-conversion/scripts/utils/inspect-org-model.py create mode 100755 examples/model-conversion/scripts/utils/perplexity-gen.sh create mode 100755 examples/model-conversion/scripts/utils/perplexity-run-simple.sh create mode 100755 examples/model-conversion/scripts/utils/perplexity-run.sh create mode 100755 examples/model-conversion/scripts/utils/quantize.sh create mode 100755 examples/model-conversion/scripts/utils/run-embedding-server.sh create mode 100644 examples/model-conversion/scripts/utils/semantic_check.py diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 11ff38762b..abc4fa1c89 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -34,6 +34,7 @@ else() add_subdirectory(gen-docs) add_subdirectory(training) add_subdirectory(diffusion) + add_subdirectory(model-conversion) if (NOT GGML_BACKEND_DL) add_subdirectory(convert-llama2c-to-ggml) # these examples use the backends directly and cannot be built with dynamic loading diff --git a/examples/model-conversion/.gitignore b/examples/model-conversion/.gitignore new file mode 100644 index 0000000000..451227547f --- /dev/null +++ b/examples/model-conversion/.gitignore @@ -0,0 +1,3 @@ +.model_name +data +ppl diff --git a/examples/model-conversion/CMakeLists.txt b/examples/model-conversion/CMakeLists.txt new file mode 100644 index 0000000000..fc1746ce45 --- /dev/null +++ b/examples/model-conversion/CMakeLists.txt @@ -0,0 +1,5 @@ +set(TARGET llama-logits) +add_executable(${TARGET} logits.cpp) +install(TARGETS ${TARGET} RUNTIME) +target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) +target_compile_features(${TARGET} PRIVATE cxx_std_17) diff --git a/examples/model-conversion/Makefile b/examples/model-conversion/Makefile new file mode 100644 index 0000000000..27d95b4f2b --- /dev/null +++ b/examples/model-conversion/Makefile @@ -0,0 +1,163 @@ +# Validation functions +define validate_model_path + @if [ -z "$(MODEL_PATH)" ]; then \ + echo "Error: MODEL_PATH must be provided either as:"; \ + echo " 1. Environment variable: export MODEL_PATH=/path/to/model"; \ + echo " 2. Command line argument: make $(1) MODEL_PATH=/path/to/model"; \ + exit 1; \ + fi +endef + +define validate_embedding_model_path + @if [ -z "$(EMBEDDING_MODEL_PATH)" ]; then \ + echo "Error: EMBEDDING_MODEL_PATH must be provided either as:"; \ + echo " 1. Environment variable: export EMBEDDING_MODEL_PATH=/path/to/model"; \ + echo " 2. Command line argument: make $(1) EMBEDDING_MODEL_PATH=/path/to/model"; \ + exit 1; \ + fi +endef + +### +### Casual Model targets/recipes +### +causal-convert-model-bf16: OUTTYPE=bf16 +causal-convert-model-bf16: causal-convert-model + +causal-convert-model: + $(call validate_model_path,causal-convert-model) + @MODEL_NAME="$(MODEL_NAME)" OUTTYPE="$(OUTTYPE)" MODEL_PATH="$(MODEL_PATH)" \ + METADATA_OVERRIDE="$(METADATA_OVERRIDE)" \ + ./scripts/causal/convert-model.sh + +causal-run-original-model: + $(call validate_model_path,causal-run-original-model) + @MODEL_PATH="$(MODEL_PATH)" ./scripts/causal/run-org-model.py + +causal-run-converted-model: + @CONVERTED_MODEL="$(CONVERTED_MODEL)" ./scripts/causal/run-converted-model.sh + +causal-verify-logits: causal-run-original-model causal-run-converted-model + @./scripts/causal/compare-logits.py + @MODEL_PATH="$(MODEL_PATH)" ./scripts/utils/check-nmse.py -m ${MODEL_PATH} + +causal-run-original-embeddings: + @./scripts/causal/run-casual-gen-embeddings-org.sh + +causal-run-converted-embeddings: + @./scripts/causal/run-converted-model-embeddings-logits.sh + +causal-verify-embeddings: causal-run-original-embeddings causal-run-converted-embeddings + @./scripts/causal/compare-embeddings-logits.sh + +causal-inspect-original-model: + @./scripts/utils/inspect-org-model.py + +causal-inspect-converted-model: + @./scripts/utils/inspect-converted-model.sh + +causal-start-embedding-server: + @./scripts/utils/run-embedding-server.sh ${CONVERTED_MODEL} + +causal-curl-embedding-endpoint: causal-run-original-embeddings + @./scripts/utils/curl-embedding-server.sh | ./scripts/causal/compare-embeddings-logits.sh + +causal-quantize-Q8_0: QUANTIZED_TYPE = Q8_0 +causal-quantize-Q8_0: causal-quantize-model + +causal-quantize-Q4_0: QUANTIZED_TYPE = Q4_0 +causal-quantize-Q4_0: causal-quantize-model + +causal-quantize-model: + @CONVERTED_MODEL="$(CONVERTED_MODEL)" QUANTIZED_TYPE="$(QUANTIZED_TYPE)" ./scripts/utils/quantize.sh ${CONVERTED_MODEL} ${QUANTIZED_TYPE} + @echo "Export the quantized model path to QUANTIZED_MODEL variable in your environment" + +causal-run-quantized-model: + @QUANTIZED_MODEL="$(QUANTIZED_MODEL)" ./scripts/causal/run-converted-model.sh ${QUANTIZED_MODEL} + + +### +### Embedding Model targets/recipes +### + +embedding-convert-model-bf16: OUTTYPE=bf16 +embedding-convert-model-bf16: embedding-convert-model + +embedding-convert-model: + $(call validate_embedding_model_path,embedding-convert-model) + @MODEL_NAME="$(MODEL_NAME)" OUTTYPE="$(OUTTYPE)" MODEL_PATH="$(EMBEDDING_MODEL_PATH)" \ + METADATA_OVERRIDE="$(METADATA_OVERRIDE)" \ + ./scripts/embedding/convert-model.sh + +embedding-run-original-model: + $(call validate_embedding_model_path,embedding-run-original-model) + @EMBEDDING_MODEL_PATH="$(EMBEDDING_MODEL_PATH)" ./scripts/embedding/run-original-model.py + +embedding-run-converted-model: + @CONVERTED_EMBEDDING_MODEL="$(CONVERTED_EMBEDDING_MODEL)" ./scripts/embedding/run-converted-model.sh ${CONVERTED_EMBEDDING_MODEL} + +embedding-verify-logits: embedding-run-original-model embedding-run-converted-model + @./scripts/embedding/compare-embeddings-logits.sh + +embedding-inspect-original-model: + $(call validate_embedding_model_path,embedding-inspect-original-model) + @EMBEDDING_MODEL_PATH="$(EMBEDDING_MODEL_PATH)" ./scripts/utils/inspect-org-model.py -m ${EMBEDDING_MODEL_PATH} + +embedding-inspect-converted-model: + @CONVERTED_EMBEDDING_MODEL="$(CONVERTED_EMBEDDING_MODEL)" ./scripts/utils/inspect-converted-model.sh ${CONVERTED_EMBEDDING_MODEL} + +embedding-start-embedding-server: + @./scripts/utils/run-embedding-server.sh ${CONVERTED_EMBEDDING_MODEL} + +embedding-curl-embedding-endpoint: + @./scripts/utils/curl-embedding-server.sh | ./scripts/embedding/compare-embeddings-logits.sh + +embedding-quantize-Q8_0: QUANTIZED_TYPE = Q8_0 +embedding-quantize-Q8_0: embedding-quantize-model + +embedding-quantize-Q4_0: QUANTIZED_TYPE = Q4_0 +embedding-quantize-Q4_0: embedding-quantize-model + +embedding-quantize-model: + @./scripts/utils/quantize.sh ${CONVERTED_EMBEDDING_MODEL} ${QUANTIZED_TYPE} + @echo "Export the quantized model path to QUANTIZED_EMBEDDING_MODEL variable in your environment" + +embedding-run-quantized-model: + @./scripts/embedding/run-converted-model.sh ${QUANTIZED_EMBEDDING_MODEL} + +### +### Perplexity targets/recipes +### +perplexity-data-gen: + CONVERTED_MODEL="$(CONVERTED_MODEL)" ./scripts/utils/perplexity-gen.sh + +perplexity-run-full: + QUANTIZED_MODEL="$(QUANTIZED_MODEL)" LOOGITS_FILE="$(LOGITS_FILE)" \ + ./scripts/utils/perplexity-run.sh + +perplexity-run: + QUANTIZED_MODEL="$(QUANTIZED_MODEL)" ./scripts/utils/perplexity-run-simple.sh + +### +### HuggingFace targets/recipes +### + +hf-create-model: + @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" + +hf-create-model-private: + @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" -p + +hf-upload-gguf-to-model: + @./scripts/utils/hf-upload-gguf-model.py -m "${MODEL_PATH}" -r "${REPO_ID}" -o "${NAME_IN_REPO}" + +hf-create-collection: + @./scripts/utils/hf-create-collection.py -n "${NAME}" -d "${DESCRIPTION}" -ns "${NAMESPACE}" + +hf-add-model-to-collection: + @./scripts/utils/hf-add-model-to-collection.py -c "${COLLECTION}" -m "${MODEL}" + + +.PHONY: clean +clean: + @${RM} -rf data .converted_embedding_model.txt .converted_model.txt .embedding_model_name.txt .model_name.txt + diff --git a/examples/model-conversion/README.md b/examples/model-conversion/README.md new file mode 100644 index 0000000000..c3c5001ead --- /dev/null +++ b/examples/model-conversion/README.md @@ -0,0 +1,335 @@ +# Model Conversion Example +This directory contains scripts and code to help in the process of converting +HuggingFace PyTorch models to GGUF format. + +The motivation for having this is that the conversion process can often be an +iterative process, where the original model is inspected, converted, updates +made to llama.cpp, converted again, etc. Once the model has been converted it +needs to be verified against the original model, and then optionally quantified, +and is some cases perplexity checked of the quantized model. And finally the +model/models need to the ggml-org on Hugging Face. This tool/example tries to +help with this process. + +### Overview +The idea is that the makefile targets and scripts here can be used in the +development/conversion process assisting with things like: + +* inspect/run the original model to figure out how it works +* convert the original model to GGUF format +* inspect/run the converted model +* verify the logits produced by the original model and the converted model +* quantize the model to GGUF format +* run perplexity evaluation to verify that the quantized model is performing + as expected +* upload the model to HuggingFace to make it available for others + +## Setup +Create virtual python environment +```console +$ python3.11 -m venv venv +$ source venv/bin/activate +(venv) $ pip install -r requirements.txt +``` + +## Causal Language Model Conversion +This section describes the steps to convert a causal language model to GGUF and +to verify that the conversion was successful. + +### Download the original model +First, clone the original model to some local directory: +```console +$ mkdir models && cd models +$ git clone https://huggingface.co/user/model_name +$ cd model_name +$ git lfs install +$ git lfs pull +``` + +### Set the MODEL_PATH +The path to the downloaded model can be provided in two ways: + +**Option 1: Environment variable (recommended for iterative development)** +```console +export MODEL_PATH=~/work/ai/models/some_model +``` + +**Option 2: Command line argument (for one-off tasks)** +```console +make causal-convert-model MODEL_PATH=~/work/ai/models/some_model +``` + +Command line arguments take precedence over environment variables when both are provided. + +In cases where the transformer implementation for the model has not been released +yet it is possible to set the environment variable `UNRELEASED_MODEL_NAME` which +will the cause the transformer implementation to be loaded explicitely and not +use AutoModelForCausalLM: +``` +export UNRELEASED_MODEL_NAME=SomeNewModel +``` + +### Inspecting the original tensors +```console +# Using environment variable +(venv) $ make causal-inspect-original-model + +# Or using command line argument +(venv) $ make causal-inspect-original-model MODEL_PATH=~/work/ai/models/some_model +``` + +### Running the original model +This is mainly to verify that the original model works, and to compare the output +from the converted model. +```console +# Using environment variable +(venv) $ make causal-run-original-model + +# Or using command line argument +(venv) $ make causal-run-original-model MODEL_PATH=~/work/ai/models/some_model +``` +This command will save two file to the `data` directory, one is a binary file +containing logits which will be used for comparison with the converted model +later, and the other is a text file which allows for manual visual inspection. + +### Model conversion +After updates have been made to [gguf-py](../../gguf-py) to add support for the +new model, the model can be converted to GGUF format using the following command: +```console +# Using environment variable +(venv) $ make causal-convert-model + +# Or using command line argument +(venv) $ make causal-convert-model MODEL_PATH=~/work/ai/models/some_model +``` + +### Inspecting the converted model +The converted model can be inspected using the following command: +```console +(venv) $ make inspect-converted-model +``` + +### Running the converted model +```console +(venv) $ make run-converted-model +``` + +### Model logits verfication +The following target will run the original model and the converted model and +compare the logits: +```console +(venv) $ make causal-verify-logits +``` + +### Quantizing the model +The causal model can be quantized to GGUF format using the following command: +```console +(venv) $ make causal-quantize-Q8_0 +Quantized model saved to: /path/to/quantized/model-Q8_0.gguf +Export the quantized model path to QUANTIZED_MODEL variable in your environment +``` +This will show the path to the quantized model in the terminal, which can then +be used set the `QUANTIZED_MODEL` environment variable: +```console +export QUANTIZED_MODEL=/path/to/quantized/model-Q8_0.gguf +``` +The the quantized model can be run using the following command: +```console +(venv) $ make causal-run-quantized-model +``` + + +## Embedding Language Model Conversion + +### Download the original model +```console +$ mkdir models && cd models +$ git clone https://huggingface.co/user/model_name +$ cd model_name +$ git lfs install +$ git lfs pull +``` + +The path to the embedding model can be provided in two ways: + +**Option 1: Environment variable (recommended for iterative development)** +```console +export EMBEDDING_MODEL_PATH=~/path/to/embedding_model +``` + +**Option 2: Command line argument (for one-off tasks)** +```console +make embedding-convert-model EMBEDDING_MODEL_PATH=~/path/to/embedding_model +``` + +Command line arguments take precedence over environment variables when both are provided. + +### Running the original model +This is mainly to verify that the original model works and to compare the output +with the output from the converted model. +```console +# Using environment variable +(venv) $ make embedding-run-original-model + +# Or using command line argument +(venv) $ make embedding-run-original-model EMBEDDING_MODEL_PATH=~/path/to/embedding_model +``` +This command will save two files to the `data` directory, one is a binary +file containing logits which will be used for comparison with the converted +model, and the other is a text file which allows for manual visual inspection. + +### Model conversion +After updates have been made to [gguf-py](../../gguf-py) to add support for the +new model the model can be converted to GGUF format using the following command: +```console +(venv) $ make embedding-convert-model +``` + +### Run the converted model +```console +(venv) $ make embedding-run-converted-model +``` + +### Model logits verfication +The following target will run the original model and the converted model (which +was done manually in the previous steps) and compare the logits: +```console +(venv) $ make embedding-verify-logits +``` + +### llama-server verification +To verify that the converted model works with llama-server, the following +command can be used: +```console +(venv) $ make embedding-start-embedding-server +``` +Then open another terminal and set the `EMBEDDINGS_MODEL_PATH` environment +variable as this will not be inherited by the new terminal: +```console +(venv) $ make embedding-curl-embedding-endpoint +``` +This will call the `embedding` endpoing and the output will be piped into +the same verification script as used by the target `embedding-verify-logits`. + +The causal model can also be used to produce embeddings and this can be verified +using the following commands: +```console +(venv) $ make causal-start-embedding-server +``` +Then open another terminal and set the `MODEL_PATH` environment +variable as this will not be inherited by the new terminal: +```console +(venv) $ make casual-curl-embedding-endpoint +``` + +### Quantizing the model +The embedding model can be quantized to GGUF format using the following command: +```console +(venv) $ make embedding-quantize-Q8_0 +Quantized model saved to: /path/to/quantized/model-Q8_0.gguf +Export the quantized model path to QUANTIZED_EMBEDDING_MODEL variable in your environment +``` +This will show the path to the quantized model in the terminal, which can then +be used set the `QUANTIZED_EMBEDDING_MODEL` environment variable: +```console +export QUANTIZED_EMBEDDING_MODEL=/path/to/quantized/model-Q8_0.gguf +``` +The the quantized model can be run using the following command: +```console +(venv) $ make embedding-run-quantized-model +``` + +## Perplexity Evaluation + +### Simple perplexity evaluation +This allows to run the perplexity evaluation without having to generate a +token/logits file: +```console +(venv) $ make perplexity-run QUANTIZED_MODEL=~/path/to/quantized/model.gguf +``` +This will use the wikitext dataset to run the perplexity evaluation and and +output the perplexity score to the terminal. This value can then be compared +with the perplexity score of the unquantized model. + +### Full perplexity evaluation +First use the converted, non-quantized, model to generate the perplexity evaluation +dataset using the following command: +```console +$ make perplexity-data-gen CONVERTED_MODEL=~/path/to/converted/model.gguf +``` +This will generate a file in the `data` directory named after the model and with +a `.kld` suffix which contains the tokens and the logits for the wikitext dataset. + +After the dataset has been generated, the perplexity evaluation can be run using +the quantized model: +```console +$ make perplexity-run-full QUANTIZED_MODEL=~/path/to/quantized/model-Qxx.gguf LOGITS_FILE=data/model.gguf.ppl +``` + +> 📝 **Note:** The `LOGITS_FILE` is the file generated by the previous command +> can be very large, so make sure you have enough disk space available. + +## HuggingFace utilities +The following targets are useful for creating collections and model repositories +on Hugging Face in the the ggml-org. These can be used when preparing a relase +to script the process for new model releases. + +For the following targets a `HF_TOKEN` environment variable is required. + +> 📝 **Note:** Don't forget to logout from Hugging Face after running these +> commands, otherwise you might have issues pulling/cloning repositories as +> the token will still be in use: +> $ huggingface-cli logout +> $ unset HF_TOKEN + +### Create a new Hugging Face Model (model repository) +This will create a new model repsository on Hugging Face with the specified +model name. +```console +(venv) $ make hf-create-model MODEL_NAME='TestModel' NAMESPACE="danbev" +Repository ID: danbev/TestModel-GGUF +Repository created: https://huggingface.co/danbev/TestModel-GGUF +``` +Note that we append a `-GGUF` suffix to the model name to ensure a consistent +naming convention for GGUF models. + +### Upload a GGUF model to model repository +The following target uploads a model to an existing Hugging Face model repository. +```console +(venv) $ make hf-upload-gguf-to-model MODEL_PATH=dummy-model1.gguf REPO_ID=danbev/TestModel-GGUF +📤 Uploading dummy-model1.gguf to danbev/TestModel-GGUF/dummy-model1.gguf +✅ Upload successful! +🔗 File available at: https://huggingface.co/danbev/TestModel-GGUF/blob/main/dummy-model1.gguf +``` +This command can also be used to update an existing model file in a repository. + +### Create a new Collection +```console +(venv) $ make hf-new-collection NAME=TestCollection DESCRIPTION="Collection for testing scripts" NAMESPACE=danbev +🚀 Creating Hugging Face Collection +Title: TestCollection +Description: Collection for testing scripts +Namespace: danbev +Private: False +✅ Authenticated as: danbev +📚 Creating collection: 'TestCollection'... +✅ Collection created successfully! +📋 Collection slug: danbev/testcollection-68930fcf73eb3fc200b9956d +🔗 Collection URL: https://huggingface.co/collections/danbev/testcollection-68930fcf73eb3fc200b9956d + +🎉 Collection created successfully! +Use this slug to add models: danbev/testcollection-68930fcf73eb3fc200b9956d +``` + +### Add model to a Collection +```console +(venv) $ make hf-add-model-to-collection COLLECTION=danbev/testcollection-68930fcf73eb3fc200b9956d MODEL=danbev/TestModel-GGUF +✅ Authenticated as: danbev +🔍 Checking if model exists: danbev/TestModel-GGUF +✅ Model found: danbev/TestModel-GGUF +📚 Adding model to collection... +✅ Model added to collection successfully! +🔗 Collection URL: https://huggingface.co/collections/danbev/testcollection-68930fcf73eb3fc200b9956d + +🎉 Model added successfully! + +``` diff --git a/examples/model-conversion/logits.cpp b/examples/model-conversion/logits.cpp new file mode 100644 index 0000000000..2cac6a3b3e --- /dev/null +++ b/examples/model-conversion/logits.cpp @@ -0,0 +1,209 @@ +#include "llama.h" +#include +#include +#include +#include +#include +#include + +static void print_usage(int, char ** argv) { + printf("\nexample usage:\n"); + printf("\n %s -m model.gguf [-ngl n_gpu_layers] -embd-mode [prompt]\n", argv[0]); + printf("\n"); +} + +int main(int argc, char ** argv) { + std::string model_path; + std::string prompt = "Hello, my name is"; + int ngl = 0; + bool embedding_mode = false; + + { + int i = 1; + for (; i < argc; i++) { + if (strcmp(argv[i], "-m") == 0) { + if (i + 1 < argc) { + model_path = argv[++i]; + } else { + print_usage(argc, argv); + return 1; + } + } else if (strcmp(argv[i], "-ngl") == 0) { + if (i + 1 < argc) { + try { + ngl = std::stoi(argv[++i]); + } catch (...) { + print_usage(argc, argv); + return 1; + } + } else { + print_usage(argc, argv); + return 1; + } + } else if (strcmp(argv[i], "-embd-mode") == 0) { + if (i + 1 < argc) { + try { + embedding_mode = true; + } catch (...) { + print_usage(argc, argv); + return 1; + } + } else { + print_usage(argc, argv); + return 1; + } + } else { + // prompt starts here + break; + } + } + + if (model_path.empty()) { + print_usage(argc, argv); + return 1; + } + + if (i < argc) { + prompt = argv[i++]; + for (; i < argc; i++) { + prompt += " "; + prompt += argv[i]; + } + } + } + + ggml_backend_load_all(); + llama_model_params model_params = llama_model_default_params(); + model_params.n_gpu_layers = ngl; + + llama_model * model = llama_model_load_from_file(model_path.c_str(), model_params); + + if (model == NULL) { + fprintf(stderr , "%s: error: unable to load model\n" , __func__); + return 1; + } + + // Extract basename from model_path + const char * basename = strrchr(model_path.c_str(), '/'); + basename = (basename == NULL) ? model_path.c_str() : basename + 1; + + char model_name[256]; + strncpy(model_name, basename, 255); + model_name[255] = '\0'; + + char * dot = strrchr(model_name, '.'); + if (dot != NULL && strcmp(dot, ".gguf") == 0) { + *dot = '\0'; + } + printf("Model name: %s\n", model_name); + + const llama_vocab * vocab = llama_model_get_vocab(model); + const int n_prompt = -llama_tokenize(vocab, prompt.c_str(), prompt.size(), NULL, 0, true, true); + + std::vector prompt_tokens(n_prompt); + if (llama_tokenize(vocab, prompt.c_str(), prompt.size(), prompt_tokens.data(), prompt_tokens.size(), true, true) < 0) { + fprintf(stderr, "%s: error: failed to tokenize the prompt\n", __func__); + return 1; + } + + llama_context_params ctx_params = llama_context_default_params(); + ctx_params.n_ctx = n_prompt; + ctx_params.n_batch = n_prompt; + ctx_params.no_perf = false; + if (embedding_mode) { + ctx_params.embeddings = true; + ctx_params.n_ubatch = ctx_params.n_batch; + } + + llama_context * ctx = llama_init_from_model(model, ctx_params); + if (ctx == NULL) { + fprintf(stderr , "%s: error: failed to create the llama_context\n" , __func__); + return 1; + } + + printf("Input prompt: \"%s\"\n", prompt.c_str()); + printf("Tokenized prompt (%d tokens): ", n_prompt); + for (auto id : prompt_tokens) { + char buf[128]; + int n = llama_token_to_piece(vocab, id, buf, sizeof(buf), 0, true); + if (n < 0) { + fprintf(stderr, "%s: error: failed to convert token to piece\n", __func__); + return 1; + } + std::string s(buf, n); + printf("%s", s.c_str()); + } + printf("\n"); + + llama_batch batch = llama_batch_get_one(prompt_tokens.data(), prompt_tokens.size()); + + if (llama_decode(ctx, batch)) { + fprintf(stderr, "%s : failed to eval\n", __func__); + return 1; + } + + float * logits; + int n_logits; + const char * type; + + if (embedding_mode) { + logits = llama_get_embeddings(ctx); + n_logits = llama_model_n_embd(model) * batch.n_tokens; + type = "-embeddings"; + printf("Embeddings size: %d\n", n_logits); + } else { + logits = llama_get_logits_ith(ctx, batch.n_tokens - 1); + n_logits = llama_vocab_n_tokens(vocab); + type = ""; + printf("Vocab size: %d\n", n_logits); + } + + std::filesystem::create_directory("data"); + + // Save logits to binary file + char bin_filename[512]; + snprintf(bin_filename, sizeof(bin_filename), "data/llamacpp-%s%s.bin", model_name, type); + printf("Saving logits to %s\n", bin_filename); + + FILE * f = fopen(bin_filename, "wb"); + if (f == NULL) { + fprintf(stderr, "%s: error: failed to open binary output file\n", __func__); + return 1; + } + fwrite(logits, sizeof(float), n_logits, f); + fclose(f); + + // Also save as text for debugging + char txt_filename[512]; + snprintf(txt_filename, sizeof(txt_filename), "data/llamacpp-%s%s.txt", model_name, type); + f = fopen(txt_filename, "w"); + if (f == NULL) { + fprintf(stderr, "%s: error: failed to open text output file\n", __func__); + return 1; + } + for (int i = 0; i < n_logits; i++) { + fprintf(f, "%d: %.6f\n", i, logits[i]); // Added index and changed format + } + fclose(f); + + // Print first and last 10 logits for quick verification + printf("First 10 logits: "); + for (int i = 0; i < 10 && i < n_logits; i++) { + printf("%.6f ", logits[i]); + } + printf("\n"); + + printf("Last 10 logits: "); + for (int i = n_logits - 10; i < n_logits; i++) { + if (i >= 0) printf("%.6f ", logits[i]); + } + printf("\n\n"); + + printf("Logits saved to %s\n", bin_filename); + printf("Logits saved to %s\n", txt_filename); + + llama_free(ctx); + llama_model_free(model); + + return 0; +} diff --git a/examples/model-conversion/requirements.txt b/examples/model-conversion/requirements.txt new file mode 100644 index 0000000000..e1aa259e94 --- /dev/null +++ b/examples/model-conversion/requirements.txt @@ -0,0 +1,4 @@ +torch~=2.6.0 +torchvision~=0.21.0 +transformers~=4.55.0 +huggingface-hub~=0.34.0 diff --git a/examples/model-conversion/scripts/causal/compare-embeddings-logits.sh b/examples/model-conversion/scripts/causal/compare-embeddings-logits.sh new file mode 100755 index 0000000000..287158f638 --- /dev/null +++ b/examples/model-conversion/scripts/causal/compare-embeddings-logits.sh @@ -0,0 +1,43 @@ +#/bin/bash + +set -e + +MODEL_PATH="${1:-"$MODEL_PATH"}" +MODEL_NAME="${2:-$(basename "$MODEL_PATH")}" + +if [ -t 0 ]; then + CPP_EMBEDDINGS="data/llamacpp-${MODEL_NAME}-embeddings.bin" +else + # Process piped JSON data and convert to binary (matching logits.cpp format) + TEMP_FILE=$(mktemp /tmp/tmp.XXXXXX.binn) + python3 -c " +import json +import sys +import struct + +data = json.load(sys.stdin) + +# Flatten all embeddings completely +flattened = [] +for item in data: + embedding = item['embedding'] + for token_embedding in embedding: + flattened.extend(token_embedding) + +print(f'Total embedding values: {len(flattened)}', file=sys.stderr) + +# Write as binary floats - matches logitc.cpp fwrite format +with open('$TEMP_FILE', 'wb') as f: + for value in flattened: + f.write(struct.pack('f', value)) +" + CPP_EMBEDDINGS="$TEMP_FILE" + trap "rm -f $TEMP_FILE" EXIT +fi + +python scripts/utils/semantic_check.py --model-path $MODEL_PATH \ + --python-embeddings data/pytorch-${MODEL_NAME}-embeddings.bin \ + --cpp-embeddings $CPP_EMBEDDINGS \ + --prompt "Hello world today" \ + --causal + diff --git a/examples/model-conversion/scripts/causal/compare-logits.py b/examples/model-conversion/scripts/causal/compare-logits.py new file mode 100755 index 0000000000..fb959f0d56 --- /dev/null +++ b/examples/model-conversion/scripts/causal/compare-logits.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 + +import numpy as np +import sys +import os +from pathlib import Path + +def quick_logits_check(pytorch_file, llamacpp_file): + """Lightweight sanity check before NMSE""" + + try: + pytorch_logits = np.fromfile(pytorch_file, dtype=np.float32) + llamacpp_logits = np.fromfile(llamacpp_file, dtype=np.float32) + except Exception as e: + print(f"❌ NOK: Failed to load files - {e}") + return False + + # Check shapes match + if pytorch_logits.shape != llamacpp_logits.shape: + print(f"❌ NOK: Shape mismatch - PyTorch: {pytorch_logits.shape}, llama.cpp: {llamacpp_logits.shape}") + return False + + # Calculate key metrics + diff = pytorch_logits - llamacpp_logits + abs_diff = np.abs(diff) + max_diff = np.max(abs_diff) + + # Get top 10 predictions from both models + pytorch_top10 = np.argsort(pytorch_logits)[-10:][::-1] + llamacpp_top10 = np.argsort(llamacpp_logits)[-10:][::-1] + print(f"Top 10 PyTorch logits: {pytorch_logits[pytorch_top10]}") + print(f"Top 10 llama.cpp logits: {llamacpp_logits[llamacpp_top10]}") + print(f"Max absolute difference: {max_diff:.4f}") + + if max_diff > 1.0: + print(f"❌ NOK: Large differences detected - max diff: {max_diff:.4f}") + return False + + return True + +def main(): + model_path = os.getenv('MODEL_PATH') + if not model_path: + print("Error: MODEL_PATH environment variable not set") + sys.exit(1) + + if not os.path.exists(model_path): + print(f"Error: Model file not found: {model_path}") + sys.exit(1) + + model_name = os.path.splitext(os.path.basename(model_path))[0] + data_dir = Path("data") + + pytorch_file = data_dir / f"pytorch-{model_name}.bin" + llamacpp_file = data_dir / f"llamacpp-{model_name}.bin" + + if not pytorch_file.exists(): + print(f"Error: PyTorch logits file not found: {pytorch_file}") + print("Please run scripts/run-org-model.sh first to generate this file.") + sys.exit(1) + + if not llamacpp_file.exists(): + print(f"Error: llama.cpp logits file not found: {llamacpp_file}") + print("Please run scripts/run-converted-model.sh first to generate this file.") + sys.exit(1) + + print("Checked all required files were found. Proceeding...\n") + + + print("🔍 GGML Model Validation for model ", model_name) + print("=" * 40) + print(f"PyTorch logits : {pytorch_file}") + print(f"llama.cpp logits: {llamacpp_file}") + print() + + success = quick_logits_check(pytorch_file, llamacpp_file) + + # Exit with appropriate code + if success: + print("✅ OK: Lightweight model check successful!") + print(" Ok to proceed with NMSE check...") + sys.exit(0) + else: + print(f"❌ NOK: Top 10 predictions don't match - generation will differ") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/examples/model-conversion/scripts/causal/convert-model.sh b/examples/model-conversion/scripts/causal/convert-model.sh new file mode 100755 index 0000000000..56b21f9baa --- /dev/null +++ b/examples/model-conversion/scripts/causal/convert-model.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +MODEL_NAME="${MODEL_NAME:-$(basename "$MODEL_PATH")}" +OUTPUT_DIR="${OUTPUT_DIR:-../../models}" +TYPE="${OUTTYPE:-f16}" +METADATA_OVERRIDE="${METADATA_OVERRIDE:-}" +CONVERTED_MODEL="${OUTPUT_DIR}/${MODEL_NAME}.gguf" + +echo "Model path: ${MODEL_PATH}" +echo "Model name: ${MODEL_NAME}" +echo "Data type: ${TYPE}" +echo "Converted model path:: ${CONVERTED_MODEL}" +echo "Metadata override: ${METADATA_OVERRIDE}" +python ../../convert_hf_to_gguf.py --verbose \ + ${MODEL_PATH} \ + --outfile ${CONVERTED_MODEL} \ + --outtype ${TYPE} \ + --metadata "${METADATA_OVERRIDE}" + +echo "" +echo "The environment variable CONVERTED_MODEL can be set to this path using:" +echo "export CONVERTED_MODEL=$(realpath ${CONVERTED_MODEL})" diff --git a/examples/model-conversion/scripts/causal/run-casual-gen-embeddings-org.sh b/examples/model-conversion/scripts/causal/run-casual-gen-embeddings-org.sh new file mode 100755 index 0000000000..2fb54ab990 --- /dev/null +++ b/examples/model-conversion/scripts/causal/run-casual-gen-embeddings-org.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 + +import argparse +import os +import importlib +import sys +import torch +import numpy as np + +from transformers import AutoTokenizer, AutoConfig, AutoModel, AutoModelForCausalLM +from pathlib import Path + +unreleased_model_name = os.getenv('UNRELEASED_MODEL_NAME') + +parser = argparse.ArgumentParser(description='Process model with specified path') +parser.add_argument('--model-path', '-m', help='Path to the model') +args = parser.parse_args() + +model_path = os.environ.get('MODEL_PATH', args.model_path) +if model_path is None: + parser.error("Model path must be specified either via --model-path argument or MODEL_PATH environment variable") + +config = AutoConfig.from_pretrained(model_path) + +print("Model type: ", config.model_type) +print("Vocab size: ", config.vocab_size) +print("Hidden size: ", config.hidden_size) +print("Number of layers: ", config.num_hidden_layers) +print("BOS token id: ", config.bos_token_id) +print("EOS token id: ", config.eos_token_id) + +print("Loading model and tokenizer using AutoTokenizer:", model_path) +tokenizer = AutoTokenizer.from_pretrained(model_path) + +if unreleased_model_name: + model_name_lower = unreleased_model_name.lower() + unreleased_module_path = f"transformers.models.{model_name_lower}.modular_{model_name_lower}" + class_name = f"{unreleased_model_name}ForCausalLM" + print(f"Importing unreleased model module: {unreleased_module_path}") + + try: + model_class = getattr(importlib.import_module(unreleased_module_path), class_name) + model = model_class.from_pretrained(model_path) + except (ImportError, AttributeError) as e: + print(f"Failed to import or load model: {e}") +else: + model = AutoModelForCausalLM.from_pretrained(model_path) +print(f"Model class: {type(model)}") +#print(f"Model file: {type(model).__module__}") + +model_name = os.path.basename(model_path) +print(f"Model name: {model_name}") + +prompt = "Hello world today" +input_ids = tokenizer(prompt, return_tensors="pt").input_ids +print(f"Input tokens: {input_ids}") +print(f"Input text: {repr(prompt)}") +print(f"Tokenized: {tokenizer.convert_ids_to_tokens(input_ids[0])}") + +with torch.no_grad(): + outputs = model(input_ids, output_hidden_states=True) + + # Extract hidden states from the last layer + # outputs.hidden_states is a tuple of (num_layers + 1) tensors + # Index -1 gets the last layer, shape: [batch_size, seq_len, hidden_size] + last_hidden_states = outputs.hidden_states[-1] + + # Get embeddings for all tokens + token_embeddings = last_hidden_states[0].cpu().numpy() # Remove batch dimension + + print(f"Hidden states shape: {last_hidden_states.shape}") + print(f"Token embeddings shape: {token_embeddings.shape}") + print(f"Hidden dimension: {token_embeddings.shape[-1]}") + print(f"Number of tokens: {token_embeddings.shape[0]}") + + # Save raw token embeddings + data_dir = Path("data") + data_dir.mkdir(exist_ok=True) + bin_filename = data_dir / f"pytorch-{model_name}-embeddings.bin" + txt_filename = data_dir / f"pytorch-{model_name}-embeddings.txt" + + # Save all token embeddings as binary + print(token_embeddings) + token_embeddings.astype(np.float32).tofile(bin_filename) + + # Save as text for inspection + with open(txt_filename, "w") as f: + for i, embedding in enumerate(token_embeddings): + for j, val in enumerate(embedding): + f.write(f"{i} {j} {val:.6f}\n") + + # Print embeddings per token in the requested format + print("\nToken embeddings:") + tokens = tokenizer.convert_ids_to_tokens(input_ids[0]) + for i, embedding in enumerate(token_embeddings): + # Format: show first few values, ..., then last few values + if len(embedding) > 10: + # Show first 3 and last 3 values with ... in between + first_vals = " ".join(f"{val:8.6f}" for val in embedding[:3]) + last_vals = " ".join(f"{val:8.6f}" for val in embedding[-3:]) + print(f"embedding {i}: {first_vals} ... {last_vals}") + else: + # If embedding is short, show all values + vals = " ".join(f"{val:8.6f}" for val in embedding) + print(f"embedding {i}: {vals}") + + # Also show token info for reference + print(f"\nToken reference:") + for i, token in enumerate(tokens): + print(f" Token {i}: {repr(token)}") + + print(f"Saved bin logits to: {bin_filename}") + print(f"Saved txt logist to: {txt_filename}") diff --git a/examples/model-conversion/scripts/causal/run-converted-model-embeddings-logits.sh b/examples/model-conversion/scripts/causal/run-converted-model-embeddings-logits.sh new file mode 100755 index 0000000000..64709f1798 --- /dev/null +++ b/examples/model-conversion/scripts/causal/run-converted-model-embeddings-logits.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -e + +# First try command line argument, then environment variable, then file +CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_MODEL environment variable" >&2 + exit 1 +fi + +cmake --build ../../build --target llama-logits -j8 + +../../build/bin/llama-logits -m $CONVERTED_MODEL -embd-mode "Hello world today" diff --git a/examples/model-conversion/scripts/causal/run-converted-model.sh b/examples/model-conversion/scripts/causal/run-converted-model.sh new file mode 100755 index 0000000000..e2762729e7 --- /dev/null +++ b/examples/model-conversion/scripts/causal/run-converted-model.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -e + +# First try command line argument, then environment variable, then file +CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_MODEL environment variable" >&2 + exit 1 +fi + +echo $CONVERTED_MODEL + +cmake --build ../../build --target llama-logits -j8 + +../../build/bin/llama-logits -m "$CONVERTED_MODEL" "Hello, my name is" diff --git a/examples/model-conversion/scripts/causal/run-org-model.py b/examples/model-conversion/scripts/causal/run-org-model.py new file mode 100755 index 0000000000..f6188ea6f3 --- /dev/null +++ b/examples/model-conversion/scripts/causal/run-org-model.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 + +import argparse +import os +import importlib +from pathlib import Path + +from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig +import torch +import numpy as np + +unreleased_model_name = os.getenv('UNRELEASED_MODEL_NAME') + +parser = argparse.ArgumentParser(description='Process model with specified path') +parser.add_argument('--model-path', '-m', help='Path to the model') +args = parser.parse_args() + +model_path = os.environ.get('MODEL_PATH', args.model_path) +if model_path is None: + parser.error("Model path must be specified either via --model-path argument or MODEL_PATH environment variable") + +config = AutoConfig.from_pretrained(model_path) + +print("Model type: ", config.model_type) +print("Vocab size: ", config.vocab_size) +print("Hidden size: ", config.hidden_size) +print("Number of layers: ", config.num_hidden_layers) +print("BOS token id: ", config.bos_token_id) +print("EOS token id: ", config.eos_token_id) + +print("Loading model and tokenizer using AutoTokenizer:", model_path) +tokenizer = AutoTokenizer.from_pretrained(model_path) +config = AutoConfig.from_pretrained(model_path) + +if unreleased_model_name: + model_name_lower = unreleased_model_name.lower() + unreleased_module_path = f"transformers.models.{model_name_lower}.modular_{model_name_lower}" + class_name = f"{unreleased_model_name}ForCausalLM" + print(f"Importing unreleased model module: {unreleased_module_path}") + + try: + model_class = getattr(importlib.import_module(unreleased_module_path), class_name) + model = model_class.from_pretrained(model_path) # Note: from_pretrained, not fromPretrained + except (ImportError, AttributeError) as e: + print(f"Failed to import or load model: {e}") + exit(1) +else: + model = AutoModelForCausalLM.from_pretrained(model_path) + +model_name = os.path.basename(model_path) +# Printing the Model class to allow for easier debugging. This can be useful +# when working with models that have not been publicly released yet and this +# migth require that the concrete class is imported and used directly instead +# of using AutoModelForCausalLM. +print(f"Model class: {model.__class__.__name__}") + +prompt = "Hello, my name is" +input_ids = tokenizer(prompt, return_tensors="pt").input_ids + +print(f"Input tokens: {input_ids}") +print(f"Input text: {repr(prompt)}") +print(f"Tokenized: {tokenizer.convert_ids_to_tokens(input_ids[0])}") + +with torch.no_grad(): + outputs = model(input_ids) + logits = outputs.logits + + # Extract logits for the last token (next token prediction) + last_logits = logits[0, -1, :].cpu().numpy() + + print(f"Logits shape: {logits.shape}") + print(f"Last token logits shape: {last_logits.shape}") + print(f"Vocab size: {len(last_logits)}") + + data_dir = Path("data") + data_dir.mkdir(exist_ok=True) + bin_filename = data_dir / f"pytorch-{model_name}.bin" + txt_filename = data_dir / f"pytorch-{model_name}.txt" + + # Save to file for comparison + last_logits.astype(np.float32).tofile(bin_filename) + + # Also save as text file for easy inspection + with open(txt_filename, "w") as f: + for i, logit in enumerate(last_logits): + f.write(f"{i}: {logit:.6f}\n") + + # Print some sample logits for quick verification + print(f"First 10 logits: {last_logits[:10]}") + print(f"Last 10 logits: {last_logits[-10:]}") + + # Show top 5 predicted tokens + top_indices = np.argsort(last_logits)[-5:][::-1] + print("Top 5 predictions:") + for idx in top_indices: + token = tokenizer.decode([idx]) + print(f" Token {idx} ({repr(token)}): {last_logits[idx]:.6f}") + + print(f"Saved bin logits to: {bin_filename}") + print(f"Saved txt logist to: {txt_filename}") diff --git a/examples/model-conversion/scripts/embedding/compare-embeddings-logits.sh b/examples/model-conversion/scripts/embedding/compare-embeddings-logits.sh new file mode 100755 index 0000000000..35b5d71984 --- /dev/null +++ b/examples/model-conversion/scripts/embedding/compare-embeddings-logits.sh @@ -0,0 +1,42 @@ +#/bin/bash + +set -e + +MODEL_PATH="${1:-"$EMBEDDING_MODEL_PATH"}" +MODEL_NAME="${2:-$(basename "$MODEL_PATH")}" + +if [ -t 0 ]; then + CPP_EMBEDDINGS="data/llamacpp-${MODEL_NAME}-embeddings.bin" +else + # Process piped JSON data and convert to binary (matching logits.cpp format) + TEMP_FILE=$(mktemp /tmp/tmp.XXXXXX.binn) + python3 -c " +import json +import sys +import struct + +data = json.load(sys.stdin) + +# Flatten all embeddings completely +flattened = [] +for item in data: + embedding = item['embedding'] + for token_embedding in embedding: + flattened.extend(token_embedding) + +print(f'Total embedding values: {len(flattened)}', file=sys.stderr) + +# Write as binary floats - matches logitc.cpp fwrite format +with open('$TEMP_FILE', 'wb') as f: + for value in flattened: + f.write(struct.pack('f', value)) +" + CPP_EMBEDDINGS="$TEMP_FILE" + trap "rm -f $TEMP_FILE" EXIT +fi + +python scripts/utils/semantic_check.py --model-path $MODEL_PATH \ + --python-embeddings data/pytorch-${MODEL_NAME}-embeddings.bin \ + --cpp-embeddings $CPP_EMBEDDINGS \ + --prompt "Hello world today" + diff --git a/examples/model-conversion/scripts/embedding/convert-model.sh b/examples/model-conversion/scripts/embedding/convert-model.sh new file mode 100755 index 0000000000..0609e35357 --- /dev/null +++ b/examples/model-conversion/scripts/embedding/convert-model.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e + +MODEL_NAME="${MODEL_NAME:-$(basename "$EMBEDDING_MODEL_PATH")}" +OUTPUT_DIR="${OUTPUT_DIR:-../../models}" +TYPE="${OUTTYPE:-f16}" +METADATA_OVERRIDE="${METADATA_OVERRIDE:-}" +CONVERTED_MODEL="${OUTPUT_DIR}/${MODEL_NAME}.gguf" + +echo "Model path: ${EMBEDDING_MODEL_PATH}" +echo "Model name: ${MODEL_NAME}" +echo "Data type: ${TYPE}" +echo "Converted model path:: ${CONVERTED_MODEL}" +python ../../convert_hf_to_gguf.py --verbose \ + ${EMBEDDING_MODEL_PATH} \ + --outfile ${CONVERTED_MODEL} \ + --outtype ${TYPE} + +echo "" +echo "The environment variable CONVERTED_EMBEDDING MODEL can be set to this path using:" +echo "export CONVERTED_EMBEDDING_MODEL=$(realpath ${CONVERTED_MODEL})" diff --git a/examples/model-conversion/scripts/embedding/run-converted-model.sh b/examples/model-conversion/scripts/embedding/run-converted-model.sh new file mode 100755 index 0000000000..5896090411 --- /dev/null +++ b/examples/model-conversion/scripts/embedding/run-converted-model.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -e + +# First try command line argument, then environment variable, then file +CONVERTED_MODEL="${1:-"$CONVERTED_EMBEDDING_MODEL"}" + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_EMBEDDING_MODEL environment variable" >&2 + exit 1 +fi + +echo $CONVERTED_MODEL + +cmake --build ../../build --target llama-logits -j8 + +../../build/bin/llama-logits -m "$CONVERTED_MODEL" -embd-mode "Hello world today" diff --git a/examples/model-conversion/scripts/embedding/run-original-model.py b/examples/model-conversion/scripts/embedding/run-original-model.py new file mode 100755 index 0000000000..b9db0b893f --- /dev/null +++ b/examples/model-conversion/scripts/embedding/run-original-model.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 + +import argparse +import os +import numpy as np +import importlib +from pathlib import Path + +from transformers import AutoTokenizer, AutoConfig, AutoModel +import torch + +unreleased_model_name = os.getenv('UNRELEASED_MODEL_NAME') + +parser = argparse.ArgumentParser(description='Process model with specified path') +parser.add_argument('--model-path', '-m', help='Path to the model') +args = parser.parse_args() + +model_path = os.environ.get('EMBEDDING_MODEL_PATH', args.model_path) +if model_path is None: + parser.error("Model path must be specified either via --model-path argument or EMBEDDING_MODEL_PATH environment variable") + +tokenizer = AutoTokenizer.from_pretrained(model_path) + +if unreleased_model_name: + model_name_lower = unreleased_model_name.lower() + unreleased_module_path = f"transformers.models.{model_name_lower}.modular_{model_name_lower}" + class_name = f"{unreleased_model_name}Model" + print(f"Importing unreleased model module: {unreleased_module_path}") + + try: + model_class = getattr(importlib.import_module(unreleased_module_path), class_name) + model = model_class.from_pretrained(model_path) # Note: from_pretrained, not fromPretrained + except (ImportError, AttributeError) as e: + print(f"Failed to import or load model: {e}") + exit(1) +else: + model = AutoModel.from_pretrained(model_path) +print(f"Model class: {type(model)}") +#print(f"Model file: {type(model).__module__}") +config = AutoConfig.from_pretrained(model_path) + +model_name = os.path.basename(model_path) + +texts = [ "Hello world today" ] + +encoded = tokenizer( + texts, + padding=True, + truncation=True, + return_tensors="pt" +) + +tokens = encoded['input_ids'][0] +token_strings = tokenizer.convert_ids_to_tokens(tokens) +for i, (token_id, token_str) in enumerate(zip(tokens, token_strings)): + print(f"{token_id:6d} -> '{token_str}'") + +with torch.no_grad(): + outputs = model(**encoded) + hidden_states = outputs.last_hidden_state # Shape: [batch_size, seq_len, hidden_size] + + # Extract embeddings for each token (matching LLAMA_POOLING_TYPE_NONE behavior) + all_embeddings = hidden_states[0].cpu().numpy() # Shape: [seq_len, hidden_size] + + print(f"Hidden states shape: {hidden_states.shape}") + print(f"All embeddings shape: {all_embeddings.shape}") + print(f"Embedding dimension: {all_embeddings.shape[1]}") + + # Print embeddings exactly like embedding.cpp does for LLAMA_POOLING_TYPE_NONE + n_embd = all_embeddings.shape[1] + n_embd_count = all_embeddings.shape[0] + + print() # Empty line to match C++ output + + for j in range(n_embd_count): + embedding = all_embeddings[j] + print(f"embedding {j}: ", end="") + + # Print first 3 values + for i in range(min(3, n_embd)): + print(f"{embedding[i]:9.6f} ", end="") + + print(" ... ", end="") + + # Print last 3 values + for i in range(n_embd - 3, n_embd): + print(f"{embedding[i]:9.6f} ", end="") + + print() # New line + + print() # Final empty line to match C++ output + + data_dir = Path("data") + data_dir.mkdir(exist_ok=True) + bin_filename = data_dir / f"pytorch-{model_name}-embeddings.bin" + txt_filename = data_dir / f"pytorch-{model_name}-embeddings.txt" + + # Save all embeddings flattened (matching what embedding.cpp would save if it did) + flattened_embeddings = all_embeddings.flatten() + flattened_embeddings.astype(np.float32).tofile(bin_filename) + + with open(txt_filename, "w") as f: + f.write(f"# Model class: {model_name}\n") + f.write(f"# Tokens: {token_strings}\n") + f.write(f"# Shape: {all_embeddings.shape}\n") + f.write(f"# n_embd_count: {n_embd_count}, n_embd: {n_embd}\n\n") + + for j in range(n_embd_count): + f.write(f"# Token {j} ({token_strings[j]}):\n") + for i, value in enumerate(all_embeddings[j]): + f.write(f"{j}_{i}: {value:.6f}\n") + f.write("\n") + print(f"Total values: {len(flattened_embeddings)} ({n_embd_count} tokens × {n_embd} dimensions)") + print("") + print(f"Saved bin embeddings to: {bin_filename}") + print(f"Saved txt embeddings to: {txt_filename}") diff --git a/examples/model-conversion/scripts/readme.md.template b/examples/model-conversion/scripts/readme.md.template new file mode 100644 index 0000000000..87800a1b93 --- /dev/null +++ b/examples/model-conversion/scripts/readme.md.template @@ -0,0 +1,13 @@ +--- +base_model: +- {base_model} +--- +# {model_name} GGUF + +Recommended way to run this model: + +```sh +llama-server -hf {namespace}/{model_name}-GGUF -c 0 -fa +``` + +Then, access http://localhost:8080 diff --git a/examples/model-conversion/scripts/utils/check-nmse.py b/examples/model-conversion/scripts/utils/check-nmse.py new file mode 100755 index 0000000000..196a6210f0 --- /dev/null +++ b/examples/model-conversion/scripts/utils/check-nmse.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 + +import numpy as np +import sys +import os +import argparse +from pathlib import Path + +def calculate_nmse(reference, test): + mse = np.mean((test - reference) ** 2) + ref_var = np.var(reference) + if ref_var == 0: + nmse = float('inf') if mse > 0 else 0.0 + return mse, mse, ref_var + + nmse = mse / ref_var + + return nmse, mse, ref_var + +def load_logits(file_path): + if not os.path.exists(file_path): + raise FileNotFoundError(f"File not found: {file_path}") + + if file_path.suffix == '.npy': + return np.load(file_path) + elif file_path.suffix == '.bin': + return np.fromfile(file_path, dtype=np.float32) + else: + # Try to load as text file + try: + # If it has index format "0: value", extract just values + data = [] + with open(file_path, 'r') as f: + for line in f: + if ':' in line: + # Format: "index: value" + value = float(line.split(':')[1].strip()) + else: + # Just the value + value = float(line.strip()) + data.append(value) + return np.array(data, dtype=np.float32) + except: + return np.loadtxt(file_path, dtype=np.float32) + +def interpret_nmse(nmse): + """Provide interpretation of NMSE value""" + if nmse == 0: + return "Perfect match", "🎉" + elif nmse < 1e-6: + return "Essentially identical", "✅" + elif nmse < 1e-4: + return "Excellent match", "✅" + elif nmse < 1e-3: + return "Very good match", "👍" + elif nmse < 1e-2: + return "Good match", "👍" + elif nmse < 0.1: + return "Acceptable match", "⚠️" + elif nmse < 1.0: + return "Poor match", "❌" + else: + return "Very poor match (worse than noise)", "❌" + +def main(): + parser = argparse.ArgumentParser(description='Validate model logits') + parser.add_argument('-m', '--model-path', required=True, help='Path to the model directory') + args = parser.parse_args() + + model_name = os.path.splitext(os.path.basename(args.model_path))[0] + data_dir = Path("data") + + pytorch_file = data_dir / f"pytorch-{model_name}.bin" + llamacpp_file = data_dir / f"llamacpp-{model_name}.bin" + + print(f"Model name: {model_name}") + print(f"PyTorch logits file: {pytorch_file}") + print(f"llama.cpp logits file: {llamacpp_file}") + + reference_file = pytorch_file + test_file = llamacpp_file + + print("📊 NMSE Check for Model Comparison") + print("=" * 50) + print(f"Reference (ground truth): {reference_file}") + print(f"Test (to evaluate): {test_file}") + print() + + try: + print("Loading reference logits...") + reference = load_logits(reference_file) + print(f" Shape: {reference.shape}, Type: {reference.dtype}") + + print("Loading test logits...") + test = load_logits(test_file) + print(f" Shape: {test.shape}, Type: {test.dtype}") + + # Check shapes match + if reference.shape != test.shape: + print(f"\n❌ Error: Shape mismatch!") + print(f" Reference: {reference.shape}") + print(f" Test: {test.shape}") + sys.exit(1) + + print(f"\n✅ Shapes match: {reference.shape}") + + nmse, mse, ref_var = calculate_nmse(reference, test) + + # Additional metrics + max_abs_error = np.max(np.abs(test - reference)) + mean_abs_error = np.mean(np.abs(test - reference)) + + # Results + print(f"\n📈 METRICS") + print("=" * 30) + print(f"MSE (Mean Squared Error): {mse:.6e}") + print(f"Reference Variance: {ref_var:.6e}") + print(f"NMSE: {nmse:.6e}") + print(f"Max Absolute Error: {max_abs_error:.6f}") + print(f"Mean Absolute Error: {mean_abs_error:.6f}") + + # NMSE in dB (common in signal processing) + if nmse > 0: + nmse_db = 10 * np.log10(nmse) + print(f"NMSE (dB): {nmse_db:.2f} dB") + + # Interpretation + interpretation, emoji = interpret_nmse(nmse) + print(f"\n🎯 INTERPRETATION") + print("=" * 30) + print(f"{emoji} {interpretation}") + + # Detailed guidance + print(f"\n📋 GUIDANCE") + print("=" * 30) + if nmse < 1e-3: + print("✅ EXCELLENT: Your GGML conversion is working very well!") + print(" The differences are negligible for practical use.") + elif nmse < 1e-2: + print("👍 GOOD: Your GGML conversion is working well.") + print(" Small differences are likely due to precision/quantization.") + elif nmse < 0.1: + print("⚠️ ACCEPTABLE: Conversion is working but with some differences.") + print(" Check if you're using quantization (Q4, Q8, etc.)") + print(" Test generation quality to see if it's acceptable.") + else: + print("❌ PROBLEMATIC: Large differences detected.") + print(" Check your conversion process for potential issues.") + print(" Verify you're using the same model weights.") + + # NMSE benchmarks + print(f"\n📚 NMSE BENCHMARKS") + print("=" * 30) + print("< 1e-6: Essentially identical") + print("< 1e-4: Excellent (typical for good conversions)") + print("< 1e-3: Very good") + print("< 1e-2: Good (acceptable for most use cases)") + print("< 0.1: Acceptable (may need verification)") + print("> 1.0: Poor (worse than random)") + + # Exit code based on NMSE + if nmse < 1e-2: + print(f"\n✅ RESULT: PASS (NMSE = {nmse:.2e})") + sys.exit(0) + else: + print(f"\n❌ RESULT: NEEDS REVIEW (NMSE = {nmse:.2e})") + sys.exit(1) + + except Exception as e: + print(f"❌ Error: {e}") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/examples/model-conversion/scripts/utils/create-collection-add-model.sh b/examples/model-conversion/scripts/utils/create-collection-add-model.sh new file mode 100644 index 0000000000..4809da6cb6 --- /dev/null +++ b/examples/model-conversion/scripts/utils/create-collection-add-model.sh @@ -0,0 +1,6 @@ + +COLLECTION_SLUG=$(python ./create_collection.py --return-slug) +echo "Created collection: $COLLECTION_SLUG" + +# Use it in the next command +python add_model_to_collection.py "$COLLECTION_SLUG" "username/my-model" diff --git a/examples/model-conversion/scripts/utils/hf-add-model-to-collection.py b/examples/model-conversion/scripts/utils/hf-add-model-to-collection.py new file mode 100755 index 0000000000..7e38af3c13 --- /dev/null +++ b/examples/model-conversion/scripts/utils/hf-add-model-to-collection.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 + +from huggingface_hub import HfApi +import argparse +import sys + +def add_model_to_collection(collection_slug, model_id, note=""): + """ + Add a model to an existing collection + + Args: + collection_slug: The slug of the collection (e.g., "username/collection-name-12345") + model_id: The model repository ID (e.g., "username/model-name") + note: Optional note about the model + + Returns: + True if successful, False if failed + """ + + # Initialize API + api = HfApi() + + try: + user_info = api.whoami() + print(f"✅ Authenticated as: {user_info['name']}") + + # Verify the model exists + print(f"🔍 Checking if model exists: {model_id}") + try: + model_info = api.model_info(model_id) + except Exception as e: + print(f"❌ Model not found or not accessible: {model_id}") + print(f"Error: {e}") + return False + + print(f"📚 Adding model to collection...") + api.add_collection_item( + collection_slug=collection_slug, + item_id=model_id, + item_type="model", + note=note + ) + + print(f"✅ Model added to collection successfully!") + print(f"🔗 Collection URL: https://huggingface.co/collections/{collection_slug}") + + return True + + except Exception as e: + print(f"❌ Error adding model to collection: {e}") + return False + +def main(): + # This script requires that the environment variable HF_TOKEN is set with your + # Hugging Face API token. + api = HfApi() + + parser = argparse.ArgumentParser(description='Add model to a Huggingface Collection') + parser.add_argument('--collection', '-c', help='The collection slug username/collection-hash', required=True) + parser.add_argument('--model', '-m', help='The model to add to the Collection', required=True) + parser.add_argument('--note', '-n', help='An optional note/description', required=False) + args = parser.parse_args() + + collection = args.collection + model = args.model + note = args.note + + success = add_model_to_collection( + collection_slug=collection, + model_id=model, + note=note + ) + + if success: + print("\n🎉 Model added successfully!") + else: + print("\n❌ Failed to add model to collection") + sys.exit(1) +if __name__ == "__main__": + main() diff --git a/examples/model-conversion/scripts/utils/hf-create-collection.py b/examples/model-conversion/scripts/utils/hf-create-collection.py new file mode 100755 index 0000000000..e0fa60af1a --- /dev/null +++ b/examples/model-conversion/scripts/utils/hf-create-collection.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 + +from huggingface_hub import HfApi +import argparse +import os +import sys + + +def create_collection(title, description, private=False, namespace=None, return_slug=False): + """ + Create a new collection on Hugging Face + + Args: + title: Collection title + description: Collection description + private: Whether the collection should be private (default: False) + namespace: Optional namespace (defaults to your username) + + Returns: + Collection object if successful, None if failed + """ + + # Check if HF_TOKEN is available + token = os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACE_HUB_TOKEN") + if not token: + print("❌ No HF_TOKEN or HUGGINGFACE_HUB_TOKEN found in environment variables") + print("Please set your Hugging Face token as an environment variable") + return None + + # Initialize API + api = HfApi() + + try: + # Test authentication first + user_info = api.whoami() + if not return_slug: + print(f"✅ Authenticated as: {user_info['name']}") + + # Create the collection + if not return_slug: + print(f"📚 Creating collection: '{title}'...") + collection = api.create_collection( + title=title, + description=description, + private=private, + namespace=namespace + ) + + if not return_slug: + print(f"✅ Collection created successfully!") + print(f"📋 Collection slug: {collection.slug}") + print(f"🔗 Collection URL: https://huggingface.co/collections/{collection.slug}") + + return collection + + except Exception as e: + print(f"❌ Error creating collection: {e}") + return None + +def main(): + # This script requires that the environment variable HF_TOKEN is set with your + # Hugging Face API token. + api = HfApi() + + parser = argparse.ArgumentParser(description='Create a Huggingface Collection') + parser.add_argument('--name', '-n', help='The name/title of the Collection', required=True) + parser.add_argument('--description', '-d', help='The description for the Collection', required=True) + parser.add_argument('--namespace', '-ns', help='The namespace to add the Collection to', required=True) + parser.add_argument('--private', '-p', help='Create a private Collection', action='store_true') # Fixed + parser.add_argument('--return-slug', '-s', help='Only output the collection slug', action='store_true') # Fixed + + args = parser.parse_args() + + name = args.name + description = args.description + private = args.private + namespace = args.namespace + return_slug = args.return_slug + + if not return_slug: + print("🚀 Creating Hugging Face Collection") + print(f"Title: {name}") + print(f"Description: {description}") + print(f"Namespace: {namespace}") + print(f"Private: {private}") + + collection = create_collection( + title=name, + description=description, + private=private, + namespace=namespace, + return_slug=return_slug + ) + + if collection: + if return_slug: + print(collection.slug) + else: + print("\n🎉 Collection created successfully!") + print(f"Use this slug to add models: {collection.slug}") + else: + print("\n❌ Failed to create collection") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/examples/model-conversion/scripts/utils/hf-create-model.py b/examples/model-conversion/scripts/utils/hf-create-model.py new file mode 100755 index 0000000000..09bb8511ef --- /dev/null +++ b/examples/model-conversion/scripts/utils/hf-create-model.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +from huggingface_hub import HfApi +import argparse + +# This script requires that the environment variable HF_TOKEN is set with your +# Hugging Face API token. +api = HfApi() + +def load_template_and_substitute(template_path, **kwargs): + try: + with open(template_path, 'r', encoding='utf-8') as f: + template_content = f.read() + + return template_content.format(**kwargs) + except FileNotFoundError: + print(f"Template file '{template_path}' not found!") + return None + except KeyError as e: + print(f"Missing template variable: {e}") + return None + +parser = argparse.ArgumentParser(description='Create a new Hugging Face model repository') +parser.add_argument('--model-name', '-m', help='Name for the model', required=True) +parser.add_argument('--namespace', '-ns', help='Namespace to add the model to', required=True) +parser.add_argument('--org-base-model', '-b', help='Original Base model name', default="") +parser.add_argument('--no-card', action='store_true', help='Skip creating model card') +parser.add_argument('--private', '-p', action='store_true', help='Create private model') + +args = parser.parse_args() + +repo_id = f"{args.namespace}/{args.model_name}-GGUF" +print("Repository ID: ", repo_id) + +repo_url = api.create_repo( + repo_id=repo_id, + repo_type="model", + private=args.private, + exist_ok=False +) + +if not args.no_card: + template_path = "scripts/readme.md.template" + model_card_content = load_template_and_substitute( + template_path, + model_name=args.model_name, + namespace=args.namespace, + base_model=args.org_base_model, + ) + + if model_card_content: + api.upload_file( + path_or_fileobj=model_card_content.encode('utf-8'), + path_in_repo="README.md", + repo_id=repo_id + ) + print("Model card created successfully.") + else: + print("Failed to create model card.") + +print(f"Repository created: {repo_url}") + + diff --git a/examples/model-conversion/scripts/utils/hf-upload-gguf-model.py b/examples/model-conversion/scripts/utils/hf-upload-gguf-model.py new file mode 100755 index 0000000000..15ccb1150e --- /dev/null +++ b/examples/model-conversion/scripts/utils/hf-upload-gguf-model.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + +from huggingface_hub import HfApi +import argparse +import os + +def upload_gguf_file(local_file_path, repo_id, filename_in_repo=None): + """ + Upload a GGUF file to a Hugging Face model repository + + Args: + local_file_path: Path to your local GGUF file + repo_id: Your repository ID (e.g., "username/model-name") + filename_in_repo: Optional custom name for the file in the repo + """ + + if not os.path.exists(local_file_path): + print(f"❌ File not found: {local_file_path}") + return False + + if filename_in_repo is None: + filename_in_repo = os.path.basename(local_file_path) + + if filename_in_repo is None or filename_in_repo == "": + filename_in_repo = os.path.basename(local_file_path) + + print(f"📤 Uploading {local_file_path} to {repo_id}/{filename_in_repo}") + + api = HfApi() + + try: + api.upload_file( + path_or_fileobj=local_file_path, + path_in_repo=filename_in_repo, + repo_id=repo_id, + repo_type="model", + commit_message=f"Upload {filename_in_repo}" + ) + + print("✅ Upload successful!") + print(f"🔗 File available at: https://huggingface.co/{repo_id}/blob/main/{filename_in_repo}") + return True + + except Exception as e: + print(f"❌ Upload failed: {e}") + return False + +# This script requires that the environment variable HF_TOKEN is set with your +# Hugging Face API token. +api = HfApi() + +parser = argparse.ArgumentParser(description='Upload a GGUF model to a Huggingface model repository') +parser.add_argument('--gguf-model-path', '-m', help='The GGUF model file to upload', required=True) +parser.add_argument('--repo-id', '-r', help='The repository to upload to', required=True) +parser.add_argument('--name', '-o', help='The name in the model repository', required=False) +args = parser.parse_args() + +upload_gguf_file(args.gguf_model_path, args.repo_id, args.name) diff --git a/examples/model-conversion/scripts/utils/inspect-converted-model.sh b/examples/model-conversion/scripts/utils/inspect-converted-model.sh new file mode 100755 index 0000000000..e5b9324542 --- /dev/null +++ b/examples/model-conversion/scripts/utils/inspect-converted-model.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# First try command line argument, then environment variable, then file +CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_MODEL environment variable" >&2 + exit 1 +fi + +../../gguf-py/gguf/scripts/gguf_dump.py $CONVERTED_MODEL diff --git a/examples/model-conversion/scripts/utils/inspect-org-model.py b/examples/model-conversion/scripts/utils/inspect-org-model.py new file mode 100755 index 0000000000..bc6f45a5fb --- /dev/null +++ b/examples/model-conversion/scripts/utils/inspect-org-model.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +import argparse +import os +import json +from safetensors import safe_open +from collections import defaultdict + +parser = argparse.ArgumentParser(description='Process model with specified path') +parser.add_argument('--model-path', '-m', help='Path to the model') +args = parser.parse_args() + +model_path = os.environ.get('MODEL_PATH', args.model_path) +if model_path is None: + parser.error("Model path must be specified either via --model-path argument or MODEL_PATH environment variable") + +# Check if there's an index file (multi-file model) +index_path = os.path.join(model_path, "model.safetensors.index.json") +single_file_path = os.path.join(model_path, "model.safetensors") + +if os.path.exists(index_path): + # Multi-file model + print("Multi-file model detected") + + with open(index_path, 'r') as f: + index_data = json.load(f) + + # Get the weight map (tensor_name -> file_name) + weight_map = index_data.get("weight_map", {}) + + # Group tensors by file for efficient processing + file_tensors = defaultdict(list) + for tensor_name, file_name in weight_map.items(): + file_tensors[file_name].append(tensor_name) + + print("Tensors in model:") + + # Process each shard file + for file_name, tensor_names in file_tensors.items(): + file_path = os.path.join(model_path, file_name) + print(f"\n--- From {file_name} ---") + + with safe_open(file_path, framework="pt") as f: + for tensor_name in sorted(tensor_names): + tensor = f.get_tensor(tensor_name) + print(f"- {tensor_name} : shape = {tensor.shape}, dtype = {tensor.dtype}") + +elif os.path.exists(single_file_path): + # Single file model (original behavior) + print("Single-file model detected") + + with safe_open(single_file_path, framework="pt") as f: + keys = f.keys() + print("Tensors in model:") + for key in sorted(keys): + tensor = f.get_tensor(key) + print(f"- {key} : shape = {tensor.shape}, dtype = {tensor.dtype}") + +else: + print(f"Error: Neither 'model.safetensors.index.json' nor 'model.safetensors' found in {model_path}") + print("Available files:") + if os.path.exists(model_path): + for item in sorted(os.listdir(model_path)): + print(f" {item}") + else: + print(f" Directory {model_path} does not exist") + exit(1) diff --git a/examples/model-conversion/scripts/utils/perplexity-gen.sh b/examples/model-conversion/scripts/utils/perplexity-gen.sh new file mode 100755 index 0000000000..3db0b3fd27 --- /dev/null +++ b/examples/model-conversion/scripts/utils/perplexity-gen.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_MODEL environment variable" >&2 + exit 1 +fi + +# Check if data/wikitext-2-raw directory exists +if [ ! -d "ppl/wikitext-2-raw" ]; then + echo "ppl/wikitext-2-raw directory does not exist. Downloading..." >&2 + mkdir -p ppl + pushd ppl + ./../../../scripts/get-wikitext-2.sh + popd +fi + +mkdir -p ppl +OUTPUTFILE="ppl/$(basename $CONVERTED_MODEL).kld" +echo "Model: $CONVERTED_MODEL" + +cmake --build ../../build --target llama-perplexity -j8 + +../.././build/bin/llama-perplexity -m $CONVERTED_MODEL \ + -f ppl/wikitext-2-raw/wiki.test.raw \ + --kl-divergence-base $OUTPUTFILE + +echo "Generated logits in $OUTPUTFILE" + diff --git a/examples/model-conversion/scripts/utils/perplexity-run-simple.sh b/examples/model-conversion/scripts/utils/perplexity-run-simple.sh new file mode 100755 index 0000000000..69b3438f59 --- /dev/null +++ b/examples/model-conversion/scripts/utils/perplexity-run-simple.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +QUANTIZED_MODEL="${1:-"$QUANTIZED_MODEL"}" + +if [ -z "$QUANTIZED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. QUANTIZED_MODEL environment variable" >&2 + exit 1 +fi + +# Check if data/wikitext-2-raw directory exists +if [ ! -d "ppl/wikitext-2-raw" ]; then + echo "ppl/wikitext-2-raw directory does not exist. Downloading..." >&2 + mkdir -p ppl + pushd ppl + ./../../../scripts/get-wikitext-2.sh + popd +fi + +cmake --build ../../build --target llama-perplexity -j8 + +../.././build/bin/llama-perplexity -m $QUANTIZED_MODEL -f ppl/wikitext-2-raw/wiki.test.raw + + diff --git a/examples/model-conversion/scripts/utils/perplexity-run.sh b/examples/model-conversion/scripts/utils/perplexity-run.sh new file mode 100755 index 0000000000..3bce7c8472 --- /dev/null +++ b/examples/model-conversion/scripts/utils/perplexity-run.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -e + +QUANTIZED_MODEL="${1:-"$QUANTIZED_MODEL"}" +LOGITS_FILE="${1:-"$LOGITS_FILE"}" + +if [ -z "$QUANTIZED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. QUANTIZED_MODEL environment variable" >&2 + exit 1 +fi + +if [ ! -f ${LOGITS_FILE} ]; then + echo "Error: logits file '${LOGITS_FILE} was not found" + echo "Did you run the perplexity-gen.sh script?" + exit 1 +fi + +echo "Model: $QUANTIZED_MODEL" +echo "Data file: $LOGITS_FILE" + +cmake --build ../../build --target llama-perplexity -j8 + +../.././build/bin/llama-perplexity -m $QUANTIZED_MODEL \ + --kl-divergence-base $LOGITS_FILE \ + --kl-divergence diff --git a/examples/model-conversion/scripts/utils/quantize.sh b/examples/model-conversion/scripts/utils/quantize.sh new file mode 100755 index 0000000000..bcb8775754 --- /dev/null +++ b/examples/model-conversion/scripts/utils/quantize.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" +QUANTIZED_TYPE="${2:-"$QUANTIZED_TYPE"}" +QUANTIZED_MODEL=$CONVERTED_MODEL + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_MODEL environment variable" >&2 + exit 1 +fi + +echo $CONVERTED_MODEL + +# Process the quantized model filename +if [[ "$QUANTIZED_MODEL" == *.gguf ]]; then + # Remove .gguf suffix, add quantized type, then add .gguf back + BASE_NAME="${QUANTIZED_MODEL%.gguf}" + QUANTIZED_MODEL="${BASE_NAME}-${QUANTIZED_TYPE}.gguf" +else + echo "Error: QUANTIZED_MODEL must end with .gguf extension" >&2 + exit 1 +fi + + +cmake --build ../../build --target llama-quantize -j8 + +../../build/bin/llama-quantize $CONVERTED_MODEL $QUANTIZED_MODEL $QUANTIZED_TYPE + +echo "Quantized model saved to: $QUANTIZED_MODEL" diff --git a/examples/model-conversion/scripts/utils/run-embedding-server.sh b/examples/model-conversion/scripts/utils/run-embedding-server.sh new file mode 100755 index 0000000000..828fc47069 --- /dev/null +++ b/examples/model-conversion/scripts/utils/run-embedding-server.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e +# +# First try command line argument, then environment variable, then file +CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" + +# Final check if we have a model path +if [ -z "$CONVERTED_MODEL" ]; then + echo "Error: Model path must be provided either as:" >&2 + echo " 1. Command line argument" >&2 + echo " 2. CONVERTED_MODEL environment variable" >&2 + exit 1 +fi + +echo $CONVERTED_MODEL + +cmake --build ../../build --target llama-server + +../../build/bin/llama-server -m $CONVERTED_MODEL \ + --embedding \ + --pooling none diff --git a/examples/model-conversion/scripts/utils/semantic_check.py b/examples/model-conversion/scripts/utils/semantic_check.py new file mode 100644 index 0000000000..d211048097 --- /dev/null +++ b/examples/model-conversion/scripts/utils/semantic_check.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import os +import importlib + +from transformers import AutoTokenizer, AutoConfig, AutoModelForCausalLM, AutoModel + +unreleased_model_name = os.getenv('UNRELEASED_MODEL_NAME') + +def cosine_similarity(a, b=None): + a = np.asarray(a) + if b is None: + b = a + else: + b = np.asarray(b) + + if a.ndim == 1: + a = a.reshape(1, -1) + if b.ndim == 1: + b = b.reshape(1, -1) + + a_norms = np.linalg.norm(a, axis=1, keepdims=True) + b_norms = np.linalg.norm(b, axis=1, keepdims=True) + + a_norms = np.where(a_norms == 0, 1e-8, a_norms) + b_norms = np.where(b_norms == 0, 1e-8, b_norms) + + a_normalized = a / a_norms + b_normalized = b / b_norms + + # Compute cosine similarity + return np.dot(a_normalized, b_normalized.T) + +def load_embeddings_from_file(filename, n_tokens, n_embd): + embeddings = np.fromfile(filename, dtype=np.float32) + return embeddings.reshape(n_tokens, n_embd) + +def test_single_prompt_similarity(python_emb, cpp_emb, tokens, prompt): + np.set_printoptions(suppress=True, precision=6) + print("pytorch embeddings:"); + print(python_emb) + print("llama.cpp embeddings:"); + print(cpp_emb) + print(f"\n=== Prompt: '{prompt}' ===") + print(f"Tokens: {tokens}") + print(f"Embeddings shape: Python {python_emb.shape}, llama.cpp {cpp_emb.shape}") + + n_tokens = len(tokens) + + # 1. Direct embedding comparison + print(f"\n1. Raw Embedding Magnitude Comparison:") + # Check if the distance of each token embedding from the origin and compare + # if the vectors are on the same "sphere". This does not tell us about + # direction (meaning of the token embedding), just magnitude. + for i in range(n_tokens): + py_mag = np.linalg.norm(python_emb[i]) # calculate standard euclidean norm for Python embeddings + cpp_mag = np.linalg.norm(cpp_emb[i]) # calculate standard euclidean norm for llama.cpp embeddings + ratio = py_mag / cpp_mag if cpp_mag > 0 else float('inf') + print(f" Token {i} ({tokens[i]}): Python={py_mag:.3f}, llama.cpp={cpp_mag:.3f}, ratio={ratio:.3f}") + + # 2. Cosine similarity between tokens within each model + # Here we check the direction of token embeddings to see if the have the + # same meaning (similarity). This is done by calculating cosine similarity + # of a pair of token embeddings within each model. + print(f"\n2. Within-Model Token Similarities:") + print(" Python model:") + for i in range(n_tokens): + for j in range(i+1, n_tokens): + sim = cosine_similarity([python_emb[i]], [python_emb[j]])[0][0] + print(f" {tokens[i]} ↔ {tokens[j]}: {sim:.4f}") + + print(" llama.cpp model:") + for i in range(n_tokens): + for j in range(i+1, n_tokens): + sim = cosine_similarity([cpp_emb[i]], [cpp_emb[j]])[0][0] + print(f" {tokens[i]} ↔ {tokens[j]}: {sim:.4f}") + + # 3. Cross-model similarity (same token position) + print(f"\n3. Cross-Model Same-Token Similarities:") + for i in range(n_tokens): + sim = cosine_similarity([python_emb[i]], [cpp_emb[i]])[0][0] + print(f" Token {i} ({tokens[i]}): {sim:.4f}") + + # 4. Similarity matrix comparison + print(f"\n4. Similarity Matrix Differences:") + py_sim_matrix = cosine_similarity(python_emb) + cpp_sim_matrix = cosine_similarity(cpp_emb) + diff_matrix = np.abs(py_sim_matrix - cpp_sim_matrix) + + print(f" Max difference: {np.max(diff_matrix):.4f}") + print(f" Mean difference: {np.mean(diff_matrix):.4f}") + print(f" RMS difference: {np.sqrt(np.mean(diff_matrix**2)):.4f}") + + return { + 'cross_model_similarities': [cosine_similarity([python_emb[i]], [cpp_emb[i]])[0][0] for i in range(n_tokens)], + 'similarity_matrix_diff': diff_matrix, + 'max_diff': np.max(diff_matrix), + 'mean_diff': np.mean(diff_matrix), + 'rms_diff': np.sqrt(np.mean(diff_matrix**2)) + } + +def main(): + parser = argparse.ArgumentParser(description='Test semantic similarity between Python and llama.cpp embeddings') + parser.add_argument('--model-path', '-m', required=True, help='Path to the original Python model') + parser.add_argument('--python-embeddings', '-pe', help='Path to pytorch embeddings "logits" binary file') + parser.add_argument('--cpp-embeddings', '-ce', help='Path to llama.cpp embeddings "logits" binary file') + parser.add_argument('--causal', '-c', default=False, help='if the model is causal (default: false)', action='store_true') + parser.add_argument('--prompt', '-p', default='Hello world today', help='Test prompt') + + args = parser.parse_args() + + print("Semantic Similarity Test Between Python and llama.cpp Embedding Models") + print("=" * 70) + + # Single prompt detailed comparison + print(f"\nTesting with prompt: '{args.prompt}'") + + # Load the python model to get configuration information and also to load the tokenizer. + print("Loading model and tokenizer using AutoTokenizer:", args.model_path) + tokenizer = AutoTokenizer.from_pretrained(args.model_path) + config = AutoConfig.from_pretrained(args.model_path) + + if unreleased_model_name: + model_name_lower = unreleased_model_name.lower() + unreleased_module_path = f"transformers.models.{model_name_lower}.modular_{model_name_lower}" + if args.causal: + class_name = f"{unreleased_model_name}ForCausalLM" + else: + class_name = f"{unreleased_model_name}Model" + print(f"Model class: {class_name}") + print(f"Importing unreleased model module: {unreleased_module_path}") + + try: + model_class = getattr(importlib.import_module(unreleased_module_path), class_name) + model = model_class.from_pretrained(args.model_path) + except (ImportError, AttributeError) as e: + print(f"Failed to import or load model: {e}") + exit(1) + else: + if args.causal: + model = AutoModelForCausalLM.from_pretrained(args.model_path) + else: + model = AutoModel.from_pretrained(args.model_path) + + encoded = tokenizer(args.prompt, return_tensors="pt") + tokens = tokenizer.convert_ids_to_tokens(encoded['input_ids'][0]) + n_tokens = len(tokens) + print(f"n_tokens: {n_tokens}"); + print(f"hidden_size: {model.config.hidden_size}") + + # Load binary embeddings from data directory. + llamacpp_embeddings = load_embeddings_from_file(args.cpp_embeddings, n_tokens, model.config.hidden_size) + python_embeddings = load_embeddings_from_file(args.python_embeddings, n_tokens, model.config.hidden_size) + + # Run comparison + results = test_single_prompt_similarity(python_embeddings, llamacpp_embeddings, tokens, args.prompt) + + # Summary + print(f"\n=== SUMMARY ===") + avg_cross_sim = np.mean(results['cross_model_similarities']) + print(f"Average cross-model similarity: {avg_cross_sim:.4f}") + print(f"Similarity matrix RMS difference: {results['rms_diff']:.4f}") + + # Quality assessment + if avg_cross_sim > 0.95: + print("✅ EXCELLENT: Models are highly similar") + elif avg_cross_sim > 0.90: + print("✅ VERY GOOD: Models are very similar") + elif avg_cross_sim > 0.80: + print("⚠️ GOOD: Models are reasonably similar") + elif avg_cross_sim > 0.70: + print("⚠️ FAIR: Models have some differences") + else: + print("❌ POOR: Models are significantly different") + +if __name__ == "__main__": + main() From 30649cab657d87ac46692332a76e1b75d5d22e00 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 21 Aug 2025 13:42:55 +0300 Subject: [PATCH 061/174] ci : continue file download with wget (#15471) ggml-ci --- ci/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/run.sh b/ci/run.sh index 4d3abf9232..d51ba44385 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -106,7 +106,7 @@ function gg_wget { cd $out # should not re-download if file is the same - wget -nv -N $url + wget -nv -c -N $url cd $cwd } From 029bb39eb1e7ae0e5df817ce97931abcd5fa52a9 Mon Sep 17 00:00:00 2001 From: Ali Tariq Date: Thu, 21 Aug 2025 17:52:16 +0500 Subject: [PATCH 062/174] ci : enable RVV1.0 native build (#15386) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Changed the CI file to hw * Changed the CI file to hw * Added to sudoers for apt * Removed the clone command and used checkout * Added libcurl * Added gcc-14 * Checking gcc --version * added gcc-14 symlink * added CC and C++ variables * Added the gguf weight * Changed the weights path * Added system specification * Removed white spaces * ci: Replace Jenkins riscv native build Cloud-V pipeline with GitHub Actions workflow Removed the legacy .devops/cloud-v-pipeline Jenkins CI configuration and introduced .github/workflows/build-riscv-native.yml for native RISC-V builds using GitHub Actions. * removed trailing whitespaces * Added the trigger at PR creation * Corrected OS name * Added ccache as setup package * Added ccache for self-hosted runner * Added directory for ccache size storage Co-authored-by: Sigbjørn Skjæret * Changed the build command and added ccache debug log * Added the base dir for the ccache * Re-trigger CI * Cleanup and refactored ccache steps * Cleanup and refactored ccache steps --------- Co-authored-by: Akif Ejaz Co-authored-by: Sigbjørn Skjæret --- .github/workflows/build-riscv-native.yml | 49 ++++++++++++++++-------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-riscv-native.yml b/.github/workflows/build-riscv-native.yml index a968f6d519..86dc0ff76e 100644 --- a/.github/workflows/build-riscv-native.yml +++ b/.github/workflows/build-riscv-native.yml @@ -1,10 +1,11 @@ name: Build on RISCV Linux Machine by Cloud-V on: + pull_request: workflow_dispatch: workflow_call: jobs: - bianbu-riscv64-native: # Bianbu 2.2 + debian-13-riscv64-native: # Bianbu 2.2 runs-on: self-hosted steps: @@ -20,24 +21,40 @@ jobs: build-essential \ gcc-14-riscv64-linux-gnu \ g++-14-riscv64-linux-gnu \ + ccache \ cmake + - name: Setup ccache + run: | + mkdir -p $HOME/.ccache + ccache -M 5G -d $HOME/.ccache + export CCACHE_LOGFILE=/home/runneruser/ccache_debug/ccache.log + export CCACHE_DEBUGDIR="/home/runneruser/ccache_debug" + echo "$GITHUB_WORKSPACE" + echo "CCACHE_LOGFILE=$CCACHE_LOGFILE" >> $GITHUB_ENV + echo "CCACHE_DEBUGDIR=$CCACHE_DEBUGDIR" >> $GITHUB_ENV + echo "CCACHE_BASEDIR=$GITHUB_WORKSPACE" >> $GITHUB_ENV + echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV + - name: Build run: | - cmake -B build -DLLAMA_CURL=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DGGML_OPENMP=OFF \ - -DLLAMA_BUILD_EXAMPLES=ON \ - -DLLAMA_BUILD_TOOLS=ON \ - -DLLAMA_BUILD_TESTS=OFF \ - -DCMAKE_SYSTEM_NAME=Linux \ - -DCMAKE_SYSTEM_PROCESSOR=riscv64 \ - -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \ - -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 \ - -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ - -DCMAKE_FIND_ROOT_PATH=/usr/lib/riscv64-linux-gnu \ - -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \ - -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ - -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH + cmake -B build \ + -DLLAMA_CURL=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DGGML_OPENMP=OFF \ + -DLLAMA_BUILD_EXAMPLES=ON \ + -DLLAMA_BUILD_TOOLS=ON \ + -DLLAMA_BUILD_TESTS=OFF \ + -DCMAKE_SYSTEM_NAME=Linux \ + -DCMAKE_SYSTEM_PROCESSOR=riscv64 \ + -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \ + -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_FIND_ROOT_PATH=/usr/lib/riscv64-linux-gnu \ + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH cmake --build build --config Release -j $(nproc) From ad294df03ff2dccd227c3fee653166f3d78b23a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jie=20Fu=20=28=E5=82=85=E6=9D=B0=29?= Date: Thu, 21 Aug 2025 21:42:34 +0800 Subject: [PATCH 063/174] examples : install torch-cpu for model conversion tool/example (#15475) Signed-off-by: Jie Fu --- examples/model-conversion/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/model-conversion/requirements.txt b/examples/model-conversion/requirements.txt index e1aa259e94..b8148b269a 100644 --- a/examples/model-conversion/requirements.txt +++ b/examples/model-conversion/requirements.txt @@ -1,3 +1,4 @@ +--extra-index-url https://download.pytorch.org/whl/cpu torch~=2.6.0 torchvision~=0.21.0 transformers~=4.55.0 From 715a6db02ccb16284837885f2c6fab05d8f7a6ee Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 21 Aug 2025 17:00:33 +0300 Subject: [PATCH 064/174] kv-cache : drop the "unified" prefix (#15467) * kv-cache : drop the "unified" prefix ggml-ci * cont : fix comment [no ci] --- include/llama.h | 4 - src/CMakeLists.txt | 4 +- src/llama-context.cpp | 5 - src/llama-graph.cpp | 54 ++--- src/llama-graph.h | 50 ++--- ...ified-iswa.cpp => llama-kv-cache-iswa.cpp} | 94 ++++----- ...e-unified-iswa.h => llama-kv-cache-iswa.h} | 52 ++--- ...v-cache-unified.cpp => llama-kv-cache.cpp} | 170 ++++++++-------- ...ma-kv-cache-unified.h => llama-kv-cache.h} | 40 ++-- src/llama-kv-cells.h | 14 +- src/llama-memory-hybrid.cpp | 10 +- src/llama-memory-hybrid.h | 12 +- src/llama-memory-recurrent.h | 2 +- src/llama-memory.h | 9 +- src/llama-model.cpp | 186 +++++++++--------- 15 files changed, 346 insertions(+), 360 deletions(-) rename src/{llama-kv-cache-unified-iswa.cpp => llama-kv-cache-iswa.cpp} (62%) rename src/{llama-kv-cache-unified-iswa.h => llama-kv-cache-iswa.h} (68%) rename src/{llama-kv-cache-unified.cpp => llama-kv-cache.cpp} (90%) rename src/{llama-kv-cache-unified.h => llama-kv-cache.h} (92%) diff --git a/include/llama.h b/include/llama.h index 135eaf1b65..c465ced4ff 100644 --- a/include/llama.h +++ b/include/llama.h @@ -64,8 +64,6 @@ extern "C" { typedef struct llama_memory_i * llama_memory_t; - struct llama_kv_cache; // DEPRECATED (use llama_memory instead) - typedef int32_t llama_pos; typedef int32_t llama_token; typedef int32_t llama_seq_id; @@ -469,8 +467,6 @@ extern "C" { LLAMA_API llama_memory_t llama_get_memory (const struct llama_context * ctx); LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); // TODO: rename to llama_get_pooling_type - DEPRECATED(LLAMA_API struct llama_kv_cache * llama_get_kv_self(struct llama_context * ctx), "use llama_get_memory instead"); - LLAMA_API const struct llama_vocab * llama_model_get_vocab(const struct llama_model * model); LLAMA_API enum llama_rope_type llama_model_rope_type(const struct llama_model * model); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8f9cd65244..18cfc76564 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,8 +20,8 @@ add_library(llama llama-hparams.cpp llama-impl.cpp llama-io.cpp - llama-kv-cache-unified.cpp - llama-kv-cache-unified-iswa.cpp + llama-kv-cache.cpp + llama-kv-cache-iswa.cpp llama-memory.cpp llama-memory-hybrid.cpp llama-memory-recurrent.cpp diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 1ebfc88ab6..fb6fbe982c 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -2338,11 +2338,6 @@ const llama_model * llama_get_model(const llama_context * ctx) { return &ctx->get_model(); } -// deprecated -llama_kv_cache * llama_get_kv_self(llama_context * ctx) { - return dynamic_cast(ctx->get_memory()); -} - // deprecated void llama_kv_self_update(llama_context * ctx) { ctx->kv_self_update(false); diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 053c72d6dc..04baf03ea0 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -4,8 +4,8 @@ #include "llama-batch.h" #include "llama-cparams.h" -#include "llama-kv-cache-unified.h" -#include "llama-kv-cache-unified-iswa.h" +#include "llama-kv-cache.h" +#include "llama-kv-cache-iswa.h" #include "llama-memory-hybrid.h" #include "llama-memory-recurrent.h" @@ -277,7 +277,7 @@ void llm_graph_input_attn_no_cache::set_input(const llama_ubatch * ubatch) { for (int s = 0; s < ubatch->n_seq_id[i0]; ++s) { const llama_seq_id s0 = ubatch->seq_id[i0][0]; - // TODO: reimplement this like in llama_kv_cache_unified + // TODO: reimplement this like in llama_kv_cache if (s0 == s1 && (!cparams.causal_attn || ubatch->pos[i0] <= ubatch->pos[i1])) { if (hparams.use_alibi) { f = -std::abs(ubatch->pos[i0] - ubatch->pos[i1]); @@ -294,15 +294,15 @@ void llm_graph_input_attn_no_cache::set_input(const llama_ubatch * ubatch) { } } -void llm_graph_input_attn_kv_unified::set_input(const llama_ubatch * ubatch) { +void llm_graph_input_attn_kv::set_input(const llama_ubatch * ubatch) { mctx->set_input_k_idxs(self_k_idxs, ubatch); mctx->set_input_v_idxs(self_v_idxs, ubatch); mctx->set_input_kq_mask(self_kq_mask, ubatch, cparams.causal_attn); } -bool llm_graph_input_attn_kv_unified::can_reuse(const llm_graph_params & params) { - const auto * mctx = static_cast(params.mctx); +bool llm_graph_input_attn_kv::can_reuse(const llm_graph_params & params) { + const auto * mctx = static_cast(params.mctx); this->mctx = mctx; @@ -319,7 +319,7 @@ bool llm_graph_input_attn_kv_unified::can_reuse(const llm_graph_params & params) return res; } -void llm_graph_input_attn_kv_unified_iswa::set_input(const llama_ubatch * ubatch) { +void llm_graph_input_attn_kv_iswa::set_input(const llama_ubatch * ubatch) { mctx->get_base()->set_input_k_idxs(self_k_idxs, ubatch); mctx->get_base()->set_input_v_idxs(self_v_idxs, ubatch); @@ -331,8 +331,8 @@ void llm_graph_input_attn_kv_unified_iswa::set_input(const llama_ubatch * ubatch mctx->get_swa()->set_input_kq_mask(self_kq_mask_swa, ubatch, cparams.causal_attn); } -bool llm_graph_input_attn_kv_unified_iswa::can_reuse(const llm_graph_params & params) { - const auto * mctx = static_cast(params.mctx); +bool llm_graph_input_attn_kv_iswa::can_reuse(const llm_graph_params & params) { + const auto * mctx = static_cast(params.mctx); this->mctx = mctx; @@ -1186,7 +1186,7 @@ ggml_tensor * llm_graph_context::build_inp_pos_bucket_enc() const { } ggml_tensor * llm_graph_context::build_inp_pos_bucket_dec() const { - const auto * mctx_cur = static_cast(mctx); + const auto * mctx_cur = static_cast(mctx); auto inp = std::make_unique(hparams, mctx_cur); @@ -1399,17 +1399,17 @@ ggml_tensor * llm_graph_context::build_attn( return cur; } -static std::unique_ptr build_attn_inp_kv_unified_impl( +static std::unique_ptr build_attn_inp_kv_impl( ggml_context * ctx0, const llama_ubatch & ubatch, const llama_hparams & hparams, const llama_cparams & cparams, - const llama_kv_cache_unified_context * mctx_cur) { + const llama_kv_cache_context * mctx_cur) { - auto inp = std::make_unique(hparams, cparams, mctx_cur); + auto inp = std::make_unique(hparams, cparams, mctx_cur); { - GGML_ASSERT(hparams.swa_type == LLAMA_SWA_TYPE_NONE && "Use llama_kv_cache_unified_iswa for SWA"); + GGML_ASSERT(hparams.swa_type == LLAMA_SWA_TYPE_NONE && "Use llama_kv_cache_iswa for SWA"); const auto n_kv = mctx_cur->get_n_kv(); const auto n_tokens = ubatch.n_tokens; @@ -1427,16 +1427,16 @@ static std::unique_ptr build_attn_inp_kv_unifie return inp; } -llm_graph_input_attn_kv_unified * llm_graph_context::build_attn_inp_kv_unified() const { - const auto * mctx_cur = static_cast(mctx); +llm_graph_input_attn_kv * llm_graph_context::build_attn_inp_kv() const { + const auto * mctx_cur = static_cast(mctx); - auto inp = build_attn_inp_kv_unified_impl(ctx0, ubatch, hparams, cparams, mctx_cur); + auto inp = build_attn_inp_kv_impl(ctx0, ubatch, hparams, cparams, mctx_cur); - return (llm_graph_input_attn_kv_unified *) res->add_input(std::move(inp)); + return (llm_graph_input_attn_kv *) res->add_input(std::move(inp)); } ggml_tensor * llm_graph_context::build_attn( - llm_graph_input_attn_kv_unified * inp, + llm_graph_input_attn_kv * inp, ggml_tensor * wo, ggml_tensor * wo_b, ggml_tensor * q_cur, @@ -1488,7 +1488,7 @@ ggml_tensor * llm_graph_context::build_attn( } ggml_tensor * llm_graph_context::build_attn( - llm_graph_input_attn_kv_unified_iswa * inp, + llm_graph_input_attn_kv_iswa * inp, ggml_tensor * wo, ggml_tensor * wo_b, ggml_tensor * q_cur, @@ -1513,7 +1513,7 @@ ggml_tensor * llm_graph_context::build_attn( } ggml_tensor * llm_graph_context::build_attn_with_sinks( - llm_graph_input_attn_kv_unified_iswa * inp, + llm_graph_input_attn_kv_iswa * inp, ggml_tensor * wo, ggml_tensor * wo_b, ggml_tensor * q_cur, @@ -1636,10 +1636,10 @@ ggml_tensor * llm_graph_context::build_attn( // TODO: maybe separate the inner implementation into a separate function // like with the non-sliding window equivalent // once sliding-window hybrid caches are a thing. -llm_graph_input_attn_kv_unified_iswa * llm_graph_context::build_attn_inp_kv_unified_iswa() const { - const auto * mctx_cur = static_cast(mctx); +llm_graph_input_attn_kv_iswa * llm_graph_context::build_attn_inp_kv_iswa() const { + const auto * mctx_cur = static_cast(mctx); - auto inp = std::make_unique(hparams, cparams, mctx_cur); + auto inp = std::make_unique(hparams, cparams, mctx_cur); const auto n_stream = cparams.kv_unified ? 1 : ubatch.n_seqs_unq; @@ -1656,7 +1656,7 @@ llm_graph_input_attn_kv_unified_iswa * llm_graph_context::build_attn_inp_kv_unif } { - GGML_ASSERT(hparams.swa_type != LLAMA_SWA_TYPE_NONE && "Use llama_kv_cache_unified for non-SWA"); + GGML_ASSERT(hparams.swa_type != LLAMA_SWA_TYPE_NONE && "Use llama_kv_cache for non-SWA"); const auto n_kv = mctx_cur->get_swa()->get_n_kv(); @@ -1669,7 +1669,7 @@ llm_graph_input_attn_kv_unified_iswa * llm_graph_context::build_attn_inp_kv_unif inp->self_kq_mask_swa_cnv = cparams.flash_attn ? ggml_cast(ctx0, inp->self_kq_mask_swa, GGML_TYPE_F16) : inp->self_kq_mask_swa; } - return (llm_graph_input_attn_kv_unified_iswa *) res->add_input(std::move(inp)); + return (llm_graph_input_attn_kv_iswa *) res->add_input(std::move(inp)); } ggml_tensor * llm_graph_context::build_rs( @@ -1792,7 +1792,7 @@ llm_graph_input_mem_hybrid * llm_graph_context::build_inp_mem_hybrid() const { const auto * mctx_cur = static_cast(mctx); auto inp_rs = build_rs_inp_impl(ctx0, ubatch, mctx_cur->get_recr()); - auto inp_attn = build_attn_inp_kv_unified_impl(ctx0, ubatch, hparams, cparams, mctx_cur->get_attn()); + auto inp_attn = build_attn_inp_kv_impl(ctx0, ubatch, hparams, cparams, mctx_cur->get_attn()); auto inp = std::make_unique(std::move(inp_attn), std::move(inp_rs), mctx_cur); diff --git a/src/llama-graph.h b/src/llama-graph.h index 6ff49de3a1..6636fa256f 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -19,8 +19,8 @@ struct llama_cparams; struct llama_memory_context_i; -class llama_kv_cache_unified_context; -class llama_kv_cache_unified_iswa_context; +class llama_kv_cache_context; +class llama_kv_cache_iswa_context; class llama_memory_recurrent_context; class llama_memory_hybrid_context; @@ -152,7 +152,7 @@ class llm_graph_input_pos_bucket_kv : public llm_graph_input_i { public: llm_graph_input_pos_bucket_kv( const llama_hparams & hparams, - const llama_kv_cache_unified_context * mctx) : hparams(hparams), mctx(mctx) {} + const llama_kv_cache_context * mctx) : hparams(hparams), mctx(mctx) {} virtual ~llm_graph_input_pos_bucket_kv() = default; void set_input(const llama_ubatch * ubatch) override; @@ -161,7 +161,7 @@ public: const llama_hparams hparams; - const llama_kv_cache_unified_context * mctx; + const llama_kv_cache_context * mctx; }; class llm_graph_input_out_ids : public llm_graph_input_i { @@ -257,17 +257,17 @@ public: const llama_cparams cparams; }; -class llm_graph_input_attn_kv_unified : public llm_graph_input_i { +class llm_graph_input_attn_kv : public llm_graph_input_i { public: - llm_graph_input_attn_kv_unified( + llm_graph_input_attn_kv( const llama_hparams & hparams, const llama_cparams & cparams, - const llama_kv_cache_unified_context * mctx) : + const llama_kv_cache_context * mctx) : hparams(hparams), cparams(cparams), mctx(mctx) { } - ~llm_graph_input_attn_kv_unified() = default; + ~llm_graph_input_attn_kv() = default; void set_input(const llama_ubatch * ubatch) override; @@ -290,20 +290,20 @@ public: const llama_hparams hparams; const llama_cparams cparams; - const llama_kv_cache_unified_context * mctx; + const llama_kv_cache_context * mctx; }; -class llm_graph_input_attn_kv_unified_iswa : public llm_graph_input_i { +class llm_graph_input_attn_kv_iswa : public llm_graph_input_i { public: - llm_graph_input_attn_kv_unified_iswa( + llm_graph_input_attn_kv_iswa( const llama_hparams & hparams, const llama_cparams & cparams, - const llama_kv_cache_unified_iswa_context * mctx) : + const llama_kv_cache_iswa_context * mctx) : hparams(hparams), cparams(cparams), mctx(mctx) { } - ~llm_graph_input_attn_kv_unified_iswa() = default; + ~llm_graph_input_attn_kv_iswa() = default; void set_input(const llama_ubatch * ubatch) override; @@ -330,7 +330,7 @@ public: const llama_hparams hparams; const llama_cparams cparams; - const llama_kv_cache_unified_iswa_context * mctx; + const llama_kv_cache_iswa_context * mctx; }; class llm_graph_input_attn_cross : public llm_graph_input_i { @@ -351,7 +351,7 @@ public: class llm_graph_input_mem_hybrid : public llm_graph_input_i { public: llm_graph_input_mem_hybrid( - std::unique_ptr inp_attn, + std::unique_ptr inp_attn, std::unique_ptr inp_rs, const llama_memory_hybrid_context * mctx) : inp_attn(std::move(inp_attn)), @@ -361,11 +361,11 @@ public: void set_input(const llama_ubatch * ubatch) override; - std::unique_ptr inp_attn; - std::unique_ptr inp_rs; + std::unique_ptr inp_attn; + std::unique_ptr inp_rs; - llm_graph_input_attn_kv_unified * get_attn() const { return inp_attn.get(); } - llm_graph_input_rs * get_recr() const { return inp_rs.get(); } + llm_graph_input_attn_kv * get_attn() const { return inp_attn.get(); } + llm_graph_input_rs * get_recr() const { return inp_rs.get(); } const llama_memory_hybrid_context * mctx; }; @@ -703,10 +703,10 @@ struct llm_graph_context { float kq_scale, int il) const; - llm_graph_input_attn_kv_unified * build_attn_inp_kv_unified() const; + llm_graph_input_attn_kv * build_attn_inp_kv() const; ggml_tensor * build_attn( - llm_graph_input_attn_kv_unified * inp, + llm_graph_input_attn_kv * inp, ggml_tensor * wo, ggml_tensor * wo_b, ggml_tensor * q_cur, // [n_embd_head_q, n_head_q, n_tokens] @@ -717,11 +717,11 @@ struct llm_graph_context { float kq_scale, int il) const; - llm_graph_input_attn_kv_unified_iswa * build_attn_inp_kv_unified_iswa() const; + llm_graph_input_attn_kv_iswa * build_attn_inp_kv_iswa() const; // note: if k_cur or v_cur are not provided, they will not be stored in the memory ggml_tensor * build_attn( - llm_graph_input_attn_kv_unified_iswa * inp, + llm_graph_input_attn_kv_iswa * inp, ggml_tensor * wo, ggml_tensor * wo_b, ggml_tensor * q_cur, // [n_embd_head_q, n_head_q, n_tokens] @@ -734,7 +734,7 @@ struct llm_graph_context { // TODO: temporary to keep the diff small. after the code is public will refactor to simplify this ggml_tensor * build_attn_with_sinks( - llm_graph_input_attn_kv_unified_iswa * inp, + llm_graph_input_attn_kv_iswa * inp, ggml_tensor * wo, ggml_tensor * wo_b, ggml_tensor * q_cur, // [n_embd_head_q, n_head_q, n_tokens] @@ -765,7 +765,7 @@ struct llm_graph_context { // // TODO: move this implementation to llama_memory_recurrent. - // this is analogous to llama_kv_cache_unified::cpy_k / cpy_v + // this is analogous to llama_kv_cache::cpy_k / cpy_v // when moving, avoid passing `ggml_cgraph` - only pass `ggml_context`. would likely need to split the // implementation in 2 separate methods. the goal is to avoid calling `ggml_build_forward_expand` in // `llama_memory_recurrent` diff --git a/src/llama-kv-cache-unified-iswa.cpp b/src/llama-kv-cache-iswa.cpp similarity index 62% rename from src/llama-kv-cache-unified-iswa.cpp rename to src/llama-kv-cache-iswa.cpp index 1e363fff2a..a11ee5a5b1 100644 --- a/src/llama-kv-cache-unified-iswa.cpp +++ b/src/llama-kv-cache-iswa.cpp @@ -1,4 +1,4 @@ -#include "llama-kv-cache-unified-iswa.h" +#include "llama-kv-cache-iswa.h" #include "llama-impl.h" #include "llama-batch.h" @@ -8,10 +8,10 @@ #include // -// llama_kv_cache_unified_iswa +// llama_kv_cache_iswa // -llama_kv_cache_unified_iswa::llama_kv_cache_unified_iswa( +llama_kv_cache_iswa::llama_kv_cache_iswa( const llama_model & model, ggml_type type_k, ggml_type type_v, @@ -23,8 +23,8 @@ llama_kv_cache_unified_iswa::llama_kv_cache_unified_iswa( uint32_t n_seq_max, uint32_t n_ubatch, uint32_t n_pad) : hparams(model.hparams), unified(unified) { - llama_kv_cache_unified::layer_filter_cb filter_base = [&](int32_t il) { return !model.hparams.is_swa(il); }; - llama_kv_cache_unified::layer_filter_cb filter_swa = [&](int32_t il) { return model.hparams.is_swa(il); }; + llama_kv_cache::layer_filter_cb filter_base = [&](int32_t il) { return !model.hparams.is_swa(il); }; + llama_kv_cache::layer_filter_cb filter_swa = [&](int32_t il) { return model.hparams.is_swa(il); }; const uint32_t size_base = kv_size; @@ -40,25 +40,25 @@ llama_kv_cache_unified_iswa::llama_kv_cache_unified_iswa( LLAMA_LOG_INFO("%s: creating non-SWA KV cache, size = %u cells\n", __func__, size_base); - kv_base = std::make_unique( + kv_base = std::make_unique( model, std::move(filter_base), type_k, type_v, v_trans, offload, unified, size_base, n_seq_max, n_pad, 0, LLAMA_SWA_TYPE_NONE); LLAMA_LOG_INFO("%s: creating SWA KV cache, size = %u cells\n", __func__, size_swa); - kv_swa = std::make_unique( + kv_swa = std::make_unique( model, std::move(filter_swa), type_k, type_v, v_trans, offload, unified, size_swa, n_seq_max, n_pad, hparams.n_swa, hparams.swa_type); } -void llama_kv_cache_unified_iswa::clear(bool data) { +void llama_kv_cache_iswa::clear(bool data) { kv_base->clear(data); kv_swa ->clear(data); } -bool llama_kv_cache_unified_iswa::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { +bool llama_kv_cache_iswa::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { bool res = true; res = res & kv_base->seq_rm(seq_id, p0, p1); @@ -67,36 +67,36 @@ bool llama_kv_cache_unified_iswa::seq_rm(llama_seq_id seq_id, llama_pos p0, llam return res; } -void llama_kv_cache_unified_iswa::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { +void llama_kv_cache_iswa::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { kv_base->seq_cp(seq_id_src, seq_id_dst, p0, p1); kv_swa ->seq_cp(seq_id_src, seq_id_dst, p0, p1); } -void llama_kv_cache_unified_iswa::seq_keep(llama_seq_id seq_id) { +void llama_kv_cache_iswa::seq_keep(llama_seq_id seq_id) { kv_base->seq_keep(seq_id); kv_swa ->seq_keep(seq_id); } -void llama_kv_cache_unified_iswa::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { +void llama_kv_cache_iswa::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { kv_base->seq_add(seq_id, p0, p1, shift); kv_swa ->seq_add(seq_id, p0, p1, shift); } -void llama_kv_cache_unified_iswa::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { +void llama_kv_cache_iswa::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { kv_base->seq_div(seq_id, p0, p1, d); kv_swa ->seq_div(seq_id, p0, p1, d); } -llama_pos llama_kv_cache_unified_iswa::seq_pos_min(llama_seq_id seq_id) const { +llama_pos llama_kv_cache_iswa::seq_pos_min(llama_seq_id seq_id) const { // the base cache is a superset of the SWA cache, so we can just check the SWA cache return kv_swa->seq_pos_min(seq_id); } -llama_pos llama_kv_cache_unified_iswa::seq_pos_max(llama_seq_id seq_id) const { +llama_pos llama_kv_cache_iswa::seq_pos_max(llama_seq_id seq_id) const { return kv_swa->seq_pos_max(seq_id); } -llama_memory_context_ptr llama_kv_cache_unified_iswa::init_batch(llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { +llama_memory_context_ptr llama_kv_cache_iswa::init_batch(llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { GGML_UNUSED(embd_all); // first try simple split @@ -136,7 +136,7 @@ llama_memory_context_ptr llama_kv_cache_unified_iswa::init_batch(llama_batch_all assert(sinfos_base.size() == sinfos_swa.size()); - return std::make_unique( + return std::make_unique( this, std::move(sinfos_base), std::move(sinfos_swa), std::move(ubatches)); } while (false); @@ -172,29 +172,29 @@ llama_memory_context_ptr llama_kv_cache_unified_iswa::init_batch(llama_batch_all assert(sinfos_base.size() == sinfos_swa.size()); - return std::make_unique( + return std::make_unique( this, std::move(sinfos_base), std::move(sinfos_swa), std::move(ubatches)); } while (false); // TODO: if we fail again, we should attempt different splitting strategies // but to do that properly, we first have to refactor the batches to be more flexible - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } -llama_memory_context_ptr llama_kv_cache_unified_iswa::init_full() { - return std::make_unique(this); +llama_memory_context_ptr llama_kv_cache_iswa::init_full() { + return std::make_unique(this); } -llama_memory_context_ptr llama_kv_cache_unified_iswa::init_update(llama_context * lctx, bool optimize) { - return std::make_unique(this, lctx, optimize); +llama_memory_context_ptr llama_kv_cache_iswa::init_update(llama_context * lctx, bool optimize) { + return std::make_unique(this, lctx, optimize); } -bool llama_kv_cache_unified_iswa::get_can_shift() const { +bool llama_kv_cache_iswa::get_can_shift() const { return kv_base->get_size() == kv_swa->get_size(); } -void llama_kv_cache_unified_iswa::state_write(llama_io_write_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) const { +void llama_kv_cache_iswa::state_write(llama_io_write_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) const { if ((flags & LLAMA_STATE_SEQ_FLAGS_SWA_ONLY) == 0) { kv_base->state_write(io, seq_id, flags); } @@ -202,7 +202,7 @@ void llama_kv_cache_unified_iswa::state_write(llama_io_write_i & io, llama_seq_i kv_swa->state_write(io, seq_id, flags); } -void llama_kv_cache_unified_iswa::state_read(llama_io_read_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) { +void llama_kv_cache_iswa::state_read(llama_io_read_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) { if ((flags & LLAMA_STATE_SEQ_FLAGS_SWA_ONLY) == 0) { kv_base->state_read(io, seq_id, flags); } @@ -210,29 +210,29 @@ void llama_kv_cache_unified_iswa::state_read(llama_io_read_i & io, llama_seq_id kv_swa->state_read(io, seq_id, flags); } -llama_kv_cache_unified * llama_kv_cache_unified_iswa::get_base() const { +llama_kv_cache * llama_kv_cache_iswa::get_base() const { return kv_base.get(); } -llama_kv_cache_unified * llama_kv_cache_unified_iswa::get_swa() const { +llama_kv_cache * llama_kv_cache_iswa::get_swa() const { return kv_swa.get(); } // -// llama_kv_cache_unified_iswa_context +// llama_kv_cache_iswa_context // -llama_kv_cache_unified_iswa_context::llama_kv_cache_unified_iswa_context(llama_memory_status status) : status(status) {} +llama_kv_cache_iswa_context::llama_kv_cache_iswa_context(llama_memory_status status) : status(status) {} -llama_kv_cache_unified_iswa_context::llama_kv_cache_unified_iswa_context( - llama_kv_cache_unified_iswa * kv) : +llama_kv_cache_iswa_context::llama_kv_cache_iswa_context( + llama_kv_cache_iswa * kv) : ctx_base(kv->get_base()->init_full()), ctx_swa (kv->get_swa ()->init_full()), status(llama_memory_status_combine(ctx_base->get_status(), ctx_swa->get_status())) { } -llama_kv_cache_unified_iswa_context::llama_kv_cache_unified_iswa_context( - llama_kv_cache_unified_iswa * kv, +llama_kv_cache_iswa_context::llama_kv_cache_iswa_context( + llama_kv_cache_iswa * kv, llama_context * lctx, bool optimize) : ctx_base(kv->get_base()->init_update(lctx, optimize)), @@ -240,21 +240,21 @@ llama_kv_cache_unified_iswa_context::llama_kv_cache_unified_iswa_context( status(llama_memory_status_combine(ctx_base->get_status(), ctx_swa->get_status())) { } -llama_kv_cache_unified_iswa_context::llama_kv_cache_unified_iswa_context( - llama_kv_cache_unified_iswa * kv, +llama_kv_cache_iswa_context::llama_kv_cache_iswa_context( + llama_kv_cache_iswa * kv, slot_info_vec_t sinfos_base, slot_info_vec_t sinfos_swa, std::vector ubatches) : ubatches(std::move(ubatches)), // note: here we copy the ubatches. not sure if this is ideal - ctx_base(new llama_kv_cache_unified_context(kv->get_base(), std::move(sinfos_base), this->ubatches)), - ctx_swa (new llama_kv_cache_unified_context(kv->get_swa (), std::move(sinfos_swa), this->ubatches)), + ctx_base(new llama_kv_cache_context(kv->get_base(), std::move(sinfos_base), this->ubatches)), + ctx_swa (new llama_kv_cache_context(kv->get_swa (), std::move(sinfos_swa), this->ubatches)), status(llama_memory_status_combine(ctx_base->get_status(), ctx_swa->get_status())) { } -llama_kv_cache_unified_iswa_context:: ~llama_kv_cache_unified_iswa_context() = default; +llama_kv_cache_iswa_context:: ~llama_kv_cache_iswa_context() = default; -bool llama_kv_cache_unified_iswa_context::next() { +bool llama_kv_cache_iswa_context::next() { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); ctx_base->next(); @@ -267,7 +267,7 @@ bool llama_kv_cache_unified_iswa_context::next() { return true; } -bool llama_kv_cache_unified_iswa_context::apply() { +bool llama_kv_cache_iswa_context::apply() { assert(!llama_memory_status_is_fail(status)); bool res = true; @@ -278,24 +278,24 @@ bool llama_kv_cache_unified_iswa_context::apply() { return res; } -llama_memory_status llama_kv_cache_unified_iswa_context::get_status() const { +llama_memory_status llama_kv_cache_iswa_context::get_status() const { return status; } -const llama_ubatch & llama_kv_cache_unified_iswa_context::get_ubatch() const { +const llama_ubatch & llama_kv_cache_iswa_context::get_ubatch() const { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); return ubatches[i_next]; } -const llama_kv_cache_unified_context * llama_kv_cache_unified_iswa_context::get_base() const { +const llama_kv_cache_context * llama_kv_cache_iswa_context::get_base() const { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - return static_cast(ctx_base.get()); + return static_cast(ctx_base.get()); } -const llama_kv_cache_unified_context * llama_kv_cache_unified_iswa_context::get_swa() const { +const llama_kv_cache_context * llama_kv_cache_iswa_context::get_swa() const { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - return static_cast(ctx_swa.get()); + return static_cast(ctx_swa.get()); } diff --git a/src/llama-kv-cache-unified-iswa.h b/src/llama-kv-cache-iswa.h similarity index 68% rename from src/llama-kv-cache-unified-iswa.h rename to src/llama-kv-cache-iswa.h index 7bc4df718d..dd673f18e7 100644 --- a/src/llama-kv-cache-unified-iswa.h +++ b/src/llama-kv-cache-iswa.h @@ -1,32 +1,32 @@ #pragma once -#include "llama-kv-cache-unified.h" +#include "llama-kv-cache.h" #include // -// llama_kv_cache_unified_iswa +// llama_kv_cache_iswa // -// utilizes two instances of llama_kv_cache_unified +// utilizes two instances of llama_kv_cache // the first instance is for the non-SWA layers of the model and the second instance is for the SWA layers -class llama_kv_cache_unified_iswa : public llama_memory_i { +class llama_kv_cache_iswa : public llama_memory_i { public: - llama_kv_cache_unified_iswa( + llama_kv_cache_iswa( const llama_model & model, ggml_type type_k, ggml_type type_v, bool v_trans, bool offload, bool swa_full, - bool unified, + bool , uint32_t kv_size, uint32_t n_seq_max, uint32_t n_ubatch, uint32_t n_pad); - ~llama_kv_cache_unified_iswa() = default; + ~llama_kv_cache_iswa() = default; // // llama_memory_i @@ -60,46 +60,46 @@ public: void state_read (llama_io_read_i & io, llama_seq_id seq_id = -1, llama_state_seq_flags flags = 0) override; // - // llama_kv_cache_unified_iswa specific API + // llama_kv_cache_iswa specific API // - llama_kv_cache_unified * get_base() const; - llama_kv_cache_unified * get_swa () const; + llama_kv_cache * get_base() const; + llama_kv_cache * get_swa () const; private: const llama_hparams & hparams; const bool unified; - std::unique_ptr kv_base; - std::unique_ptr kv_swa; + std::unique_ptr kv_base; + std::unique_ptr kv_swa; }; -class llama_kv_cache_unified_iswa_context : public llama_memory_context_i { +class llama_kv_cache_iswa_context : public llama_memory_context_i { public: - using slot_info_vec_t = llama_kv_cache_unified::slot_info_vec_t; + using slot_info_vec_t = llama_kv_cache::slot_info_vec_t; // used for errors - llama_kv_cache_unified_iswa_context(llama_memory_status status); + llama_kv_cache_iswa_context(llama_memory_status status); // used to create a full-cache context - llama_kv_cache_unified_iswa_context( - llama_kv_cache_unified_iswa * kv); + llama_kv_cache_iswa_context( + llama_kv_cache_iswa * kv); // used to create an update context - llama_kv_cache_unified_iswa_context( - llama_kv_cache_unified_iswa * kv, + llama_kv_cache_iswa_context( + llama_kv_cache_iswa * kv, llama_context * lctx, bool optimize); // used to create a batch processing context from a batch - llama_kv_cache_unified_iswa_context( - llama_kv_cache_unified_iswa * kv, + llama_kv_cache_iswa_context( + llama_kv_cache_iswa * kv, slot_info_vec_t sinfos_base, slot_info_vec_t sinfos_swa, std::vector ubatches); - virtual ~llama_kv_cache_unified_iswa_context(); + virtual ~llama_kv_cache_iswa_context(); // // llama_memory_context_i @@ -112,14 +112,14 @@ public: const llama_ubatch & get_ubatch() const override; // - // llama_kv_cache_unified_iswa_context specific API + // llama_kv_cache_iswa_context specific API // - const llama_kv_cache_unified_context * get_base() const; - const llama_kv_cache_unified_context * get_swa() const; + const llama_kv_cache_context * get_base() const; + const llama_kv_cache_context * get_swa() const; private: - //llama_kv_cache_unified_iswa * kv; + //llama_kv_cache_iswa * kv; // the index of the next ubatch to process size_t i_next = 0; diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache.cpp similarity index 90% rename from src/llama-kv-cache-unified.cpp rename to src/llama-kv-cache.cpp index 478ebffac0..bb490cf9e8 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache.cpp @@ -1,4 +1,4 @@ -#include "llama-kv-cache-unified.h" +#include "llama-kv-cache.h" #include "llama-impl.h" #include "llama-io.h" @@ -13,10 +13,10 @@ #include // -// llama_kv_cache_unified +// llama_kv_cache // -llama_kv_cache_unified::llama_kv_cache_unified( +llama_kv_cache::llama_kv_cache( const llama_model & model, layer_filter_cb && filter, ggml_type type_k, @@ -209,7 +209,7 @@ llama_kv_cache_unified::llama_kv_cache_unified( } } -void llama_kv_cache_unified::clear(bool data) { +void llama_kv_cache::clear(bool data) { for (uint32_t s = 0; s < n_stream; ++s) { v_cells[s].reset(); v_heads[s] = 0; @@ -222,7 +222,7 @@ void llama_kv_cache_unified::clear(bool data) { } } -bool llama_kv_cache_unified::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { +bool llama_kv_cache::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { GGML_ASSERT(seq_id == -1 || (seq_id >= 0 && (size_t) seq_id < seq_to_stream.size())); if (p0 < 0) { @@ -285,7 +285,7 @@ bool llama_kv_cache_unified::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos return true; } -void llama_kv_cache_unified::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { +void llama_kv_cache::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { GGML_ASSERT(seq_id_src >= 0 && (size_t) seq_id_src < seq_to_stream.size()); GGML_ASSERT(seq_id_dst >= 0 && (size_t) seq_id_dst < seq_to_stream.size()); @@ -368,7 +368,7 @@ void llama_kv_cache_unified::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id //} } -void llama_kv_cache_unified::seq_keep(llama_seq_id seq_id) { +void llama_kv_cache::seq_keep(llama_seq_id seq_id) { GGML_ASSERT(seq_id >= 0 && (size_t) seq_id < seq_to_stream.size()); auto & cells = v_cells[seq_to_stream[seq_id]]; @@ -390,7 +390,7 @@ void llama_kv_cache_unified::seq_keep(llama_seq_id seq_id) { } } -void llama_kv_cache_unified::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { +void llama_kv_cache::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { GGML_ASSERT(seq_id >= 0 && (size_t) seq_id < seq_to_stream.size()); auto & cells = v_cells[seq_to_stream[seq_id]]; @@ -434,7 +434,7 @@ void llama_kv_cache_unified::seq_add(llama_seq_id seq_id, llama_pos p0, llama_po head = new_head != cells.size() ? new_head : 0; } -void llama_kv_cache_unified::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { +void llama_kv_cache::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { GGML_ASSERT(seq_id >= 0 && (size_t) seq_id < seq_to_stream.size()); auto & cells = v_cells[seq_to_stream[seq_id]]; @@ -467,7 +467,7 @@ void llama_kv_cache_unified::seq_div(llama_seq_id seq_id, llama_pos p0, llama_po } } -llama_pos llama_kv_cache_unified::seq_pos_min(llama_seq_id seq_id) const { +llama_pos llama_kv_cache::seq_pos_min(llama_seq_id seq_id) const { GGML_ASSERT(seq_id >= 0 && (size_t) seq_id < seq_to_stream.size()); const auto & cells = v_cells[seq_to_stream[seq_id]]; @@ -475,7 +475,7 @@ llama_pos llama_kv_cache_unified::seq_pos_min(llama_seq_id seq_id) const { return cells.seq_pos_min(seq_id); } -llama_pos llama_kv_cache_unified::seq_pos_max(llama_seq_id seq_id) const { +llama_pos llama_kv_cache::seq_pos_max(llama_seq_id seq_id) const { GGML_ASSERT(seq_id >= 0 && (size_t) seq_id < seq_to_stream.size()); const auto & cells = v_cells[seq_to_stream[seq_id]]; @@ -483,7 +483,7 @@ llama_pos llama_kv_cache_unified::seq_pos_max(llama_seq_id seq_id) const { return cells.seq_pos_max(seq_id); } -llama_memory_context_ptr llama_kv_cache_unified::init_batch( +llama_memory_context_ptr llama_kv_cache::init_batch( llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { @@ -513,18 +513,18 @@ llama_memory_context_ptr llama_kv_cache_unified::init_batch( break; } - return std::make_unique( + return std::make_unique( this, std::move(sinfos), std::move(ubatches)); } while (false); - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } -llama_memory_context_ptr llama_kv_cache_unified::init_full() { - return std::make_unique(this); +llama_memory_context_ptr llama_kv_cache::init_full() { + return std::make_unique(this); } -llama_memory_context_ptr llama_kv_cache_unified::init_update(llama_context * lctx, bool optimize) { +llama_memory_context_ptr llama_kv_cache::init_update(llama_context * lctx, bool optimize) { bool do_shift = get_has_shift(); defrag_info dinfo; @@ -557,18 +557,18 @@ llama_memory_context_ptr llama_kv_cache_unified::init_update(llama_context * lct } } - return std::make_unique(this, lctx, do_shift, std::move(dinfo), std::move(sc_info)); + return std::make_unique(this, lctx, do_shift, std::move(dinfo), std::move(sc_info)); } -llama_kv_cache_unified::slot_info_vec_t llama_kv_cache_unified::prepare(const std::vector & ubatches) { - llama_kv_cache_unified::slot_info_vec_t res; +llama_kv_cache::slot_info_vec_t llama_kv_cache::prepare(const std::vector & ubatches) { + llama_kv_cache::slot_info_vec_t res; struct state_t { slot_info sinfo; // slot info for the ubatch std::vector v_heads_old; // old positions of the heads, before placing the ubatch - std::vector v_cells; // copy of the old cells, before placing the ubatch + std::vector v_cells; // copy of the old cells, before placing the ubatch }; // remember the old state of the cells so we can restore it in the end @@ -629,7 +629,7 @@ llama_kv_cache_unified::slot_info_vec_t llama_kv_cache_unified::prepare(const st return res; } -bool llama_kv_cache_unified::update(llama_context * lctx, bool do_shift, const defrag_info & dinfo, const stream_copy_info & sc_info) { +bool llama_kv_cache::update(llama_context * lctx, bool do_shift, const defrag_info & dinfo, const stream_copy_info & sc_info) { bool updated = false; auto * sched = lctx->get_sched(); @@ -749,7 +749,7 @@ bool llama_kv_cache_unified::update(llama_context * lctx, bool do_shift, const d return updated; } -llama_kv_cache_unified::slot_info llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch, bool cont) const { +llama_kv_cache::slot_info llama_kv_cache::find_slot(const llama_ubatch & ubatch, bool cont) const { if (debug > 0) { for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) { @@ -948,7 +948,7 @@ llama_kv_cache_unified::slot_info llama_kv_cache_unified::find_slot(const llama_ return res; } -void llama_kv_cache_unified::apply_ubatch(const slot_info & sinfo, const llama_ubatch & ubatch) { +void llama_kv_cache::apply_ubatch(const slot_info & sinfo, const llama_ubatch & ubatch) { // keep track of the max sequence position that we would overwrite with this ubatch // for non-SWA cache, this would be always empty llama_seq_id seq_pos_max_rm[LLAMA_MAX_SEQ]; @@ -1013,21 +1013,21 @@ void llama_kv_cache_unified::apply_ubatch(const slot_info & sinfo, const llama_u } } -bool llama_kv_cache_unified::get_can_shift() const { +bool llama_kv_cache::get_can_shift() const { return true; } -uint32_t llama_kv_cache_unified::get_size() const { +uint32_t llama_kv_cache::get_size() const { const auto & cells = v_cells[seq_to_stream[0]]; return cells.size(); } -uint32_t llama_kv_cache_unified::get_n_stream() const { +uint32_t llama_kv_cache::get_n_stream() const { return n_stream; } -bool llama_kv_cache_unified::get_has_shift() const { +bool llama_kv_cache::get_has_shift() const { bool result = false; for (uint32_t s = 0; s < n_stream; ++s) { @@ -1037,7 +1037,7 @@ bool llama_kv_cache_unified::get_has_shift() const { return result; } -uint32_t llama_kv_cache_unified::get_n_kv() const { +uint32_t llama_kv_cache::get_n_kv() const { uint32_t result = 0; for (uint32_t s = 0; s < n_stream; ++s) { @@ -1049,11 +1049,11 @@ uint32_t llama_kv_cache_unified::get_n_kv() const { return result; } -bool llama_kv_cache_unified::get_supports_set_rows() const { +bool llama_kv_cache::get_supports_set_rows() const { return supports_set_rows; } -ggml_tensor * llama_kv_cache_unified::get_k(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const { +ggml_tensor * llama_kv_cache::get_k(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const { const int32_t ikv = map_layer_ids.at(il); auto * k = layers[ikv].k; @@ -1073,7 +1073,7 @@ ggml_tensor * llama_kv_cache_unified::get_k(ggml_context * ctx, int32_t il, uint ggml_row_size(k->type, n_embd_k_gqa*kv_size)*sinfo.s0); } -ggml_tensor * llama_kv_cache_unified::get_v(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const { +ggml_tensor * llama_kv_cache::get_v(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const { const int32_t ikv = map_layer_ids.at(il); auto * v = layers[ikv].v; @@ -1105,7 +1105,7 @@ ggml_tensor * llama_kv_cache_unified::get_v(ggml_context * ctx, int32_t il, uint ggml_row_size(v->type, kv_size*n_embd_v_gqa)*sinfo.s0); } -ggml_tensor * llama_kv_cache_unified::cpy_k(ggml_context * ctx, ggml_tensor * k_cur, ggml_tensor * k_idxs, int32_t il, const slot_info & sinfo) const { +ggml_tensor * llama_kv_cache::cpy_k(ggml_context * ctx, ggml_tensor * k_cur, ggml_tensor * k_idxs, int32_t il, const slot_info & sinfo) const { const int32_t ikv = map_layer_ids.at(il); auto * k = layers[ikv].k; @@ -1135,7 +1135,7 @@ ggml_tensor * llama_kv_cache_unified::cpy_k(ggml_context * ctx, ggml_tensor * k_ return ggml_cpy(ctx, k_cur, k_view); } -ggml_tensor * llama_kv_cache_unified::cpy_v(ggml_context * ctx, ggml_tensor * v_cur, ggml_tensor * v_idxs, int32_t il, const slot_info & sinfo) const { +ggml_tensor * llama_kv_cache::cpy_v(ggml_context * ctx, ggml_tensor * v_cur, ggml_tensor * v_idxs, int32_t il, const slot_info & sinfo) const { const int32_t ikv = map_layer_ids.at(il); auto * v = layers[ikv].v; @@ -1189,7 +1189,7 @@ ggml_tensor * llama_kv_cache_unified::cpy_v(ggml_context * ctx, ggml_tensor * v_ return ggml_cpy(ctx, v_cur, v_view); } -ggml_tensor * llama_kv_cache_unified::build_input_k_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { +ggml_tensor * llama_kv_cache::build_input_k_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { const uint32_t n_tokens = ubatch.n_tokens; ggml_tensor * k_idxs = ggml_new_tensor_1d(ctx, GGML_TYPE_I64, n_tokens); @@ -1199,7 +1199,7 @@ ggml_tensor * llama_kv_cache_unified::build_input_k_idxs(ggml_context * ctx, con return k_idxs; } -ggml_tensor * llama_kv_cache_unified::build_input_v_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { +ggml_tensor * llama_kv_cache::build_input_v_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { const uint32_t n_tokens = ubatch.n_tokens; ggml_tensor * v_idxs; @@ -1215,7 +1215,7 @@ ggml_tensor * llama_kv_cache_unified::build_input_v_idxs(ggml_context * ctx, con return v_idxs; } -void llama_kv_cache_unified::set_input_k_idxs(ggml_tensor * dst, const llama_ubatch * ubatch, const slot_info & sinfo) const { +void llama_kv_cache::set_input_k_idxs(ggml_tensor * dst, const llama_ubatch * ubatch, const slot_info & sinfo) const { if (!supports_set_rows) { return; } @@ -1235,7 +1235,7 @@ void llama_kv_cache_unified::set_input_k_idxs(ggml_tensor * dst, const llama_uba } } -void llama_kv_cache_unified::set_input_v_idxs(ggml_tensor * dst, const llama_ubatch * ubatch, const slot_info & sinfo) const { +void llama_kv_cache::set_input_v_idxs(ggml_tensor * dst, const llama_ubatch * ubatch, const slot_info & sinfo) const { if (!supports_set_rows) { return; } @@ -1272,7 +1272,7 @@ void llama_kv_cache_unified::set_input_v_idxs(ggml_tensor * dst, const llama_uba } } -void llama_kv_cache_unified::set_input_k_shift(ggml_tensor * dst) const { +void llama_kv_cache::set_input_k_shift(ggml_tensor * dst) const { GGML_ASSERT(ggml_backend_buffer_is_host(dst->buffer)); int32_t * data = (int32_t *) dst->data; @@ -1286,7 +1286,7 @@ void llama_kv_cache_unified::set_input_k_shift(ggml_tensor * dst) const { } } -void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ubatch * ubatch, bool causal_attn) const { +void llama_kv_cache::set_input_kq_mask(ggml_tensor * dst, const llama_ubatch * ubatch, bool causal_attn) const { const uint32_t n_tokens = ubatch->n_tokens; GGML_ASSERT(ggml_backend_buffer_is_host(dst->buffer)); @@ -1358,7 +1358,7 @@ void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ub } } -void llama_kv_cache_unified::set_input_pos_bucket(ggml_tensor * dst, const llama_ubatch * ubatch) const { +void llama_kv_cache::set_input_pos_bucket(ggml_tensor * dst, const llama_ubatch * ubatch) const { const int64_t n_tokens = ubatch->n_tokens; GGML_ASSERT(n_stream == 1 && "TODO: support multiple streams"); @@ -1383,7 +1383,7 @@ void llama_kv_cache_unified::set_input_pos_bucket(ggml_tensor * dst, const llama } } -size_t llama_kv_cache_unified::total_size() const { +size_t llama_kv_cache::total_size() const { size_t size = 0; for (const auto & buf : bufs) { @@ -1393,7 +1393,7 @@ size_t llama_kv_cache_unified::total_size() const { return size; } -size_t llama_kv_cache_unified::size_k_bytes() const { +size_t llama_kv_cache::size_k_bytes() const { size_t size_k_bytes = 0; for (const auto & layer : layers) { @@ -1403,7 +1403,7 @@ size_t llama_kv_cache_unified::size_k_bytes() const { return size_k_bytes; } -size_t llama_kv_cache_unified::size_v_bytes() const { +size_t llama_kv_cache::size_v_bytes() const { size_t size_v_bytes = 0; for (const auto & layer : layers) { @@ -1413,7 +1413,7 @@ size_t llama_kv_cache_unified::size_v_bytes() const { return size_v_bytes; } -ggml_tensor * llama_kv_cache_unified::build_rope_shift( +ggml_tensor * llama_kv_cache::build_rope_shift( const llama_cparams & cparams, ggml_context * ctx, ggml_tensor * cur, @@ -1465,14 +1465,14 @@ ggml_tensor * llama_kv_cache_unified::build_rope_shift( class llm_graph_input_k_shift : public llm_graph_input_i { public: - llm_graph_input_k_shift(const llama_kv_cache_unified * kv_self) : kv_self(kv_self) {} + llm_graph_input_k_shift(const llama_kv_cache * kv_self) : kv_self(kv_self) {} virtual ~llm_graph_input_k_shift() = default; void set_input(const llama_ubatch * ubatch) override; ggml_tensor * k_shift; // I32 [kv_size*n_stream] - const llama_kv_cache_unified * kv_self; + const llama_kv_cache * kv_self; }; void llm_graph_input_k_shift::set_input(const llama_ubatch * ubatch) { @@ -1483,7 +1483,7 @@ void llm_graph_input_k_shift::set_input(const llama_ubatch * ubatch) { } } -ggml_cgraph * llama_kv_cache_unified::build_graph_shift(llm_graph_result * res, llama_context * lctx) const { +ggml_cgraph * llama_kv_cache::build_graph_shift(llm_graph_result * res, llama_context * lctx) const { auto * ctx = res->get_ctx(); auto * gf = res->get_gf(); @@ -1525,7 +1525,7 @@ ggml_cgraph * llama_kv_cache_unified::build_graph_shift(llm_graph_result * res, return gf; } -ggml_cgraph * llama_kv_cache_unified::build_graph_defrag( +ggml_cgraph * llama_kv_cache::build_graph_defrag( llm_graph_result * res, llama_context * lctx, const defrag_info & dinfo) const { @@ -1679,7 +1679,7 @@ ggml_cgraph * llama_kv_cache_unified::build_graph_defrag( return gf; } -llama_kv_cache_unified::defrag_info llama_kv_cache_unified::defrag_prepare(int32_t n_max_nodes) const { +llama_kv_cache::defrag_info llama_kv_cache::defrag_prepare(int32_t n_max_nodes) const { GGML_ASSERT(n_stream == 1 && "n_stream > 1 does not support defrag"); const auto & cells = v_cells[0]; @@ -1802,7 +1802,7 @@ llama_kv_cache_unified::defrag_info llama_kv_cache_unified::defrag_prepare(int32 return res; } -bool llama_kv_cache_unified::is_masked_swa(llama_pos p0, llama_pos p1) const { +bool llama_kv_cache::is_masked_swa(llama_pos p0, llama_pos p1) const { assert(p0 >= 0 && p1 >= 0); switch (swa_type) { @@ -1828,7 +1828,7 @@ bool llama_kv_cache_unified::is_masked_swa(llama_pos p0, llama_pos p1) const { return false; } -void llama_kv_cache_unified::state_write(llama_io_write_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) const { +void llama_kv_cache::state_write(llama_io_write_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) const { GGML_UNUSED(flags); io.write(&n_stream, sizeof(n_stream)); @@ -1881,7 +1881,7 @@ void llama_kv_cache_unified::state_write(llama_io_write_i & io, llama_seq_id seq } } -void llama_kv_cache_unified::state_read(llama_io_read_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) { +void llama_kv_cache::state_read(llama_io_read_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) { GGML_UNUSED(flags); GGML_ASSERT(seq_id == -1 || (seq_id >= 0 && (size_t) seq_id < seq_to_stream.size())); @@ -1917,7 +1917,7 @@ void llama_kv_cache_unified::state_read(llama_io_read_i & io, llama_seq_id seq_i } } -void llama_kv_cache_unified::state_write_meta(llama_io_write_i & io, const cell_ranges_t & cr, llama_seq_id seq_id) const { +void llama_kv_cache::state_write_meta(llama_io_write_i & io, const cell_ranges_t & cr, llama_seq_id seq_id) const { const auto & cells = v_cells[cr.strm]; for (const auto & range : cr.data) { @@ -1945,7 +1945,7 @@ void llama_kv_cache_unified::state_write_meta(llama_io_write_i & io, const cell_ } } -void llama_kv_cache_unified::state_write_data(llama_io_write_i & io, const cell_ranges_t & cr) const { +void llama_kv_cache::state_write_data(llama_io_write_i & io, const cell_ranges_t & cr) const { const auto & cells = v_cells[cr.strm]; const uint32_t v_trans = this->v_trans ? 1 : 0; @@ -2040,7 +2040,7 @@ void llama_kv_cache_unified::state_write_data(llama_io_write_i & io, const cell_ } } -bool llama_kv_cache_unified::state_read_meta(llama_io_read_i & io, uint32_t strm, uint32_t cell_count, llama_seq_id dest_seq_id) { +bool llama_kv_cache::state_read_meta(llama_io_read_i & io, uint32_t strm, uint32_t cell_count, llama_seq_id dest_seq_id) { auto & cells = v_cells[strm]; auto & head = v_heads[strm]; @@ -2137,7 +2137,7 @@ bool llama_kv_cache_unified::state_read_meta(llama_io_read_i & io, uint32_t strm return true; } -bool llama_kv_cache_unified::state_read_data(llama_io_read_i & io, uint32_t strm, uint32_t cell_count) { +bool llama_kv_cache::state_read_data(llama_io_read_i & io, uint32_t strm, uint32_t cell_count) { auto & cells = v_cells[strm]; auto & head = v_heads[strm]; @@ -2274,13 +2274,13 @@ bool llama_kv_cache_unified::state_read_data(llama_io_read_i & io, uint32_t strm } // -// llama_kv_cache_unified_context +// llama_kv_cache_context // -llama_kv_cache_unified_context::llama_kv_cache_unified_context(llama_memory_status status) : status(status) {} +llama_kv_cache_context::llama_kv_cache_context(llama_memory_status status) : status(status) {} -llama_kv_cache_unified_context::llama_kv_cache_unified_context( - llama_kv_cache_unified * kv) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv) { +llama_kv_cache_context::llama_kv_cache_context( + llama_kv_cache * kv) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv) { n_kv = kv->get_size(); const uint32_t n_stream = kv->get_n_stream(); @@ -2296,8 +2296,8 @@ llama_kv_cache_unified_context::llama_kv_cache_unified_context( } } -llama_kv_cache_unified_context::llama_kv_cache_unified_context( - llama_kv_cache_unified * kv, +llama_kv_cache_context::llama_kv_cache_context( + llama_kv_cache * kv, llama_context * lctx, bool do_shift, defrag_info dinfo, @@ -2307,15 +2307,15 @@ llama_kv_cache_unified_context::llama_kv_cache_unified_context( } } -llama_kv_cache_unified_context::llama_kv_cache_unified_context( - llama_kv_cache_unified * kv, - llama_kv_cache_unified::slot_info_vec_t sinfos, +llama_kv_cache_context::llama_kv_cache_context( + llama_kv_cache * kv, + llama_kv_cache::slot_info_vec_t sinfos, std::vector ubatches) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv), sinfos(std::move(sinfos)), ubatches(std::move(ubatches)) { } -llama_kv_cache_unified_context::~llama_kv_cache_unified_context() = default; +llama_kv_cache_context::~llama_kv_cache_context() = default; -bool llama_kv_cache_unified_context::next() { +bool llama_kv_cache_context::next() { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); if (++i_cur >= ubatches.size()) { @@ -2325,7 +2325,7 @@ bool llama_kv_cache_unified_context::next() { return true; } -bool llama_kv_cache_unified_context::apply() { +bool llama_kv_cache_context::apply() { assert(!llama_memory_status_is_fail(status)); // no ubatches -> this is a KV cache update @@ -2342,69 +2342,69 @@ bool llama_kv_cache_unified_context::apply() { return true; } -llama_memory_status llama_kv_cache_unified_context::get_status() const { +llama_memory_status llama_kv_cache_context::get_status() const { return status; } -const llama_ubatch & llama_kv_cache_unified_context::get_ubatch() const { +const llama_ubatch & llama_kv_cache_context::get_ubatch() const { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); return ubatches[i_cur]; } -uint32_t llama_kv_cache_unified_context::get_n_kv() const { +uint32_t llama_kv_cache_context::get_n_kv() const { return n_kv; } -bool llama_kv_cache_unified_context::get_supports_set_rows() const { +bool llama_kv_cache_context::get_supports_set_rows() const { return kv->get_supports_set_rows(); } -ggml_tensor * llama_kv_cache_unified_context::get_k(ggml_context * ctx, int32_t il) const { +ggml_tensor * llama_kv_cache_context::get_k(ggml_context * ctx, int32_t il) const { return kv->get_k(ctx, il, n_kv, sinfos[i_cur]); } -ggml_tensor * llama_kv_cache_unified_context::get_v(ggml_context * ctx, int32_t il) const { +ggml_tensor * llama_kv_cache_context::get_v(ggml_context * ctx, int32_t il) const { return kv->get_v(ctx, il, n_kv, sinfos[i_cur]); } -ggml_tensor * llama_kv_cache_unified_context::cpy_k(ggml_context * ctx, ggml_tensor * k_cur, ggml_tensor * k_idxs, int32_t il) const { +ggml_tensor * llama_kv_cache_context::cpy_k(ggml_context * ctx, ggml_tensor * k_cur, ggml_tensor * k_idxs, int32_t il) const { return kv->cpy_k(ctx, k_cur, k_idxs, il, sinfos[i_cur]); } -ggml_tensor * llama_kv_cache_unified_context::cpy_v(ggml_context * ctx, ggml_tensor * v_cur, ggml_tensor * v_idxs, int32_t il) const { +ggml_tensor * llama_kv_cache_context::cpy_v(ggml_context * ctx, ggml_tensor * v_cur, ggml_tensor * v_idxs, int32_t il) const { return kv->cpy_v(ctx, v_cur, v_idxs, il, sinfos[i_cur]); } -ggml_tensor * llama_kv_cache_unified_context::build_input_k_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { +ggml_tensor * llama_kv_cache_context::build_input_k_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { return kv->build_input_k_idxs(ctx, ubatch); } -ggml_tensor * llama_kv_cache_unified_context::build_input_v_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { +ggml_tensor * llama_kv_cache_context::build_input_v_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { return kv->build_input_v_idxs(ctx, ubatch); } -void llama_kv_cache_unified_context::set_input_k_shift(ggml_tensor * dst) const { +void llama_kv_cache_context::set_input_k_shift(ggml_tensor * dst) const { kv->set_input_k_shift(dst); } -void llama_kv_cache_unified_context::set_input_k_idxs(ggml_tensor * dst, const llama_ubatch * ubatch) const { +void llama_kv_cache_context::set_input_k_idxs(ggml_tensor * dst, const llama_ubatch * ubatch) const { kv->set_input_k_idxs(dst, ubatch, sinfos[i_cur]); } -void llama_kv_cache_unified_context::set_input_v_idxs(ggml_tensor * dst, const llama_ubatch * ubatch) const { +void llama_kv_cache_context::set_input_v_idxs(ggml_tensor * dst, const llama_ubatch * ubatch) const { kv->set_input_v_idxs(dst, ubatch, sinfos[i_cur]); } -void llama_kv_cache_unified_context::set_input_kq_mask(ggml_tensor * dst, const llama_ubatch * ubatch, bool causal_attn) const { +void llama_kv_cache_context::set_input_kq_mask(ggml_tensor * dst, const llama_ubatch * ubatch, bool causal_attn) const { kv->set_input_kq_mask(dst, ubatch, causal_attn); } -void llama_kv_cache_unified_context::set_input_pos_bucket(ggml_tensor * dst, const llama_ubatch * ubatch) const { +void llama_kv_cache_context::set_input_pos_bucket(ggml_tensor * dst, const llama_ubatch * ubatch) const { kv->set_input_pos_bucket(dst, ubatch); } -uint32_t llama_kv_cache_unified::get_padding(const llama_cparams & cparams) { +uint32_t llama_kv_cache::get_padding(const llama_cparams & cparams) { // the FA kernels require padding to avoid extra runtime boundary checks return cparams.flash_attn ? 256u : 32u; } diff --git a/src/llama-kv-cache-unified.h b/src/llama-kv-cache.h similarity index 92% rename from src/llama-kv-cache-unified.h rename to src/llama-kv-cache.h index 07a7c9e4e4..5ca618e1b8 100644 --- a/src/llama-kv-cache-unified.h +++ b/src/llama-kv-cache.h @@ -14,10 +14,10 @@ struct llama_model; struct llama_context; // -// llama_kv_cache_unified +// llama_kv_cache // -class llama_kv_cache_unified : public llama_memory_i { +class llama_kv_cache : public llama_memory_i { public: static uint32_t get_padding(const llama_cparams & cparams); @@ -92,7 +92,7 @@ public: using slot_info_vec_t = std::vector; - llama_kv_cache_unified( + llama_kv_cache( const llama_model & model, layer_filter_cb && filter, ggml_type type_k, @@ -106,7 +106,7 @@ public: uint32_t n_swa, llama_swa_type swa_type); - ~llama_kv_cache_unified() = default; + ~llama_kv_cache() = default; // // llama_memory_i @@ -140,7 +140,7 @@ public: void state_read (llama_io_read_i & io, llama_seq_id seq_id = -1, llama_state_seq_flags flags = 0) override; // - // llama_kv_cache_unified specific API + // llama_kv_cache specific API // uint32_t get_size() const; @@ -241,7 +241,7 @@ private: // note: this is not part of the KV state and it's only used to speed-up the find_slot() method std::vector v_heads; - std::vector v_cells; + std::vector v_cells; // maps from a sequence id to a stream id std::vector seq_to_stream; @@ -295,35 +295,35 @@ private: bool state_read_data(llama_io_read_i & io, uint32_t strm, uint32_t cell_count); }; -class llama_kv_cache_unified_context : public llama_memory_context_i { +class llama_kv_cache_context : public llama_memory_context_i { public: // some shorthands - using slot_info_vec_t = llama_kv_cache_unified::slot_info_vec_t; - using defrag_info = llama_kv_cache_unified::defrag_info; - using stream_copy_info = llama_kv_cache_unified::stream_copy_info; + using slot_info_vec_t = llama_kv_cache::slot_info_vec_t; + using defrag_info = llama_kv_cache::defrag_info; + using stream_copy_info = llama_kv_cache::stream_copy_info; // used for errors - llama_kv_cache_unified_context(llama_memory_status status); + llama_kv_cache_context(llama_memory_status status); // used to create a full-cache context - llama_kv_cache_unified_context( - llama_kv_cache_unified * kv); + llama_kv_cache_context( + llama_kv_cache * kv); // used to create an update context - llama_kv_cache_unified_context( - llama_kv_cache_unified * kv, + llama_kv_cache_context( + llama_kv_cache * kv, llama_context * lctx, bool do_shift, defrag_info dinfo, stream_copy_info sc_info); // used to create a batch procesing context from a batch - llama_kv_cache_unified_context( - llama_kv_cache_unified * kv, + llama_kv_cache_context( + llama_kv_cache * kv, slot_info_vec_t sinfos, std::vector ubatches); - virtual ~llama_kv_cache_unified_context(); + virtual ~llama_kv_cache_context(); // // llama_memory_context_i @@ -336,7 +336,7 @@ public: const llama_ubatch & get_ubatch() const override; // - // llama_kv_cache_unified_context specific API + // llama_kv_cache_context specific API // uint32_t get_n_kv() const; @@ -365,7 +365,7 @@ public: private: llama_memory_status status; - llama_kv_cache_unified * kv; + llama_kv_cache * kv; llama_context * lctx; // diff --git a/src/llama-kv-cells.h b/src/llama-kv-cells.h index 0d0dd316fd..2651e30331 100644 --- a/src/llama-kv-cells.h +++ b/src/llama-kv-cells.h @@ -11,7 +11,7 @@ // meta information about KV cells that can be part of multiple sequences at the same time // TODO: add unit tests -class llama_kv_cells_unified { +class llama_kv_cells { public: void reset() { for (uint32_t i = 0; i < pos.size(); ++i) { @@ -97,10 +97,10 @@ public: } // copy the state of cells [i, i + n) (used for save/restore the state of the cells) - llama_kv_cells_unified cp(uint32_t i, uint32_t n) const { + llama_kv_cells cp(uint32_t i, uint32_t n) const { assert(i + n <= pos.size()); - llama_kv_cells_unified res; + llama_kv_cells res; res.resize(n); @@ -117,8 +117,8 @@ public: } // copy the state of cells [idxs[0], idxs[1], ..., idxs[idxs.size() - 1]) - llama_kv_cells_unified cp(const std::vector & idxs) const { - llama_kv_cells_unified res; + llama_kv_cells cp(const std::vector & idxs) const { + llama_kv_cells res; res.resize(idxs.size()); @@ -135,7 +135,7 @@ public: } // set the state of cells [i, i + other.pos.size()) (used for save/restore the state of the cells) - void set(uint32_t i, const llama_kv_cells_unified & other) { + void set(uint32_t i, const llama_kv_cells & other) { assert(i + other.pos.size() <= pos.size()); for (uint32_t j = 0; j < other.pos.size(); ++j) { @@ -165,7 +165,7 @@ public: } // set the state of cells [idxs[0], idxs[1], ..., idxs[idxs.size() - 1]) - void set(const std::vector & idxs, const llama_kv_cells_unified & other) { + void set(const std::vector & idxs, const llama_kv_cells & other) { assert(idxs.size() == other.pos.size()); for (uint32_t j = 0; j < other.pos.size(); ++j) { diff --git a/src/llama-memory-hybrid.cpp b/src/llama-memory-hybrid.cpp index cbeeb21344..f8303dacbf 100644 --- a/src/llama-memory-hybrid.cpp +++ b/src/llama-memory-hybrid.cpp @@ -30,7 +30,7 @@ llama_memory_hybrid::llama_memory_hybrid( layer_filter_cb && filter_attn, layer_filter_cb && filter_recr) : hparams(model.hparams), - mem_attn(new llama_kv_cache_unified( + mem_attn(new llama_kv_cache( model, filter_attn == nullptr ? [&](int32_t il) { return !hparams.is_recurrent(il); } @@ -179,7 +179,7 @@ void llama_memory_hybrid::state_read(llama_io_read_i & io, llama_seq_id seq_id, mem_recr->state_read(io, seq_id); } -llama_kv_cache_unified * llama_memory_hybrid::get_mem_attn() const { +llama_kv_cache * llama_memory_hybrid::get_mem_attn() const { return mem_attn.get(); } @@ -210,7 +210,7 @@ llama_memory_hybrid_context::llama_memory_hybrid_context( std::vector ubatches) : ubatches(std::move(ubatches)), // note: here we copy the ubatches. not sure if this is ideal - ctx_attn(new llama_kv_cache_unified_context(mem->get_mem_attn(), std::move(sinfos_attn), this->ubatches)), + ctx_attn(new llama_kv_cache_context(mem->get_mem_attn(), std::move(sinfos_attn), this->ubatches)), ctx_recr(new llama_memory_recurrent_context(mem->get_mem_recr(), this->ubatches)), status(llama_memory_status_combine(ctx_attn->get_status(), ctx_recr->get_status())) { } @@ -248,8 +248,8 @@ const llama_ubatch & llama_memory_hybrid_context::get_ubatch() const { return ubatches[i_next]; } -const llama_kv_cache_unified_context * llama_memory_hybrid_context::get_attn() const { - return static_cast(ctx_attn.get()); +const llama_kv_cache_context * llama_memory_hybrid_context::get_attn() const { + return static_cast(ctx_attn.get()); } const llama_memory_recurrent_context * llama_memory_hybrid_context::get_recr() const { diff --git a/src/llama-memory-hybrid.h b/src/llama-memory-hybrid.h index acdbc26bfb..e9c64ee40a 100644 --- a/src/llama-memory-hybrid.h +++ b/src/llama-memory-hybrid.h @@ -2,7 +2,7 @@ #include "llama-batch.h" #include "llama-graph.h" -#include "llama-kv-cache-unified.h" +#include "llama-kv-cache.h" #include "llama-memory.h" #include "llama-memory-recurrent.h" @@ -13,7 +13,7 @@ // llama_memory_hybrid // -// utilizes instances of llama_memory_recurrent and llama_kv_cache_unified to +// utilizes instances of llama_memory_recurrent and llama_kv_cache to // support models where each layer may be either attention-based or recurrent class llama_memory_hybrid : public llama_memory_i { @@ -81,19 +81,19 @@ public: // llama_memory_hybrid specific API // - llama_kv_cache_unified * get_mem_attn() const; + llama_kv_cache * get_mem_attn() const; llama_memory_recurrent * get_mem_recr() const; private: const llama_hparams & hparams; - const std::unique_ptr mem_attn; + const std::unique_ptr mem_attn; const std::unique_ptr mem_recr; }; class llama_memory_hybrid_context : public llama_memory_context_i { public: - using slot_info_vec_t = llama_kv_cache_unified::slot_info_vec_t; + using slot_info_vec_t = llama_kv_cache::slot_info_vec_t; // init failure explicit llama_memory_hybrid_context(llama_memory_status status); @@ -125,7 +125,7 @@ public: // llama_memory_hybrid_context // - const llama_kv_cache_unified_context * get_attn() const; + const llama_kv_cache_context * get_attn() const; const llama_memory_recurrent_context * get_recr() const; private: diff --git a/src/llama-memory-recurrent.h b/src/llama-memory-recurrent.h index 95c617b2c9..c8e8623602 100644 --- a/src/llama-memory-recurrent.h +++ b/src/llama-memory-recurrent.h @@ -12,7 +12,7 @@ // // TODO: extract the cache state used for graph computation into llama_memory_recurrent_context_i -// see the implementation of llama_kv_cache_unified_context_i for an example how to do it +// see the implementation of llama_kv_cache_context_i for an example how to do it class llama_memory_recurrent : public llama_memory_i { public: diff --git a/src/llama-memory.h b/src/llama-memory.h index 171d312cc9..42a7145c2f 100644 --- a/src/llama-memory.h +++ b/src/llama-memory.h @@ -36,8 +36,8 @@ bool llama_memory_status_is_fail(llama_memory_status status); // the interface for managing the memory context during batch processing // this interface is implemented per memory type. see: -// - llama_kv_cache_unified_context -// - llama_kv_cache_unified_iswa_context +// - llama_kv_cache_context +// - llama_kv_cache_iswa_context // ... // // the only method that should mutate the memory and the memory context is llama_memory_i::apply() @@ -109,8 +109,3 @@ struct llama_memory_i { }; using llama_memory_ptr = std::unique_ptr; - -// TODO: temporary until the llama_kv_cache is removed from the public API -struct llama_kv_cache : public llama_memory_i { - virtual ~llama_kv_cache() = default; -}; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 431102edea..cbb7bc8758 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -6,8 +6,8 @@ #include "llama-cparams.h" #include "llama-model-loader.h" -#include "llama-kv-cache-unified.h" -#include "llama-kv-cache-unified-iswa.h" +#include "llama-kv-cache.h" +#include "llama-kv-cache-iswa.h" #include "llama-memory-hybrid.h" #include "llama-memory-recurrent.h" @@ -5986,7 +5986,7 @@ struct llm_build_llama : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; @@ -6146,7 +6146,7 @@ struct llm_build_llama_iswa : public llm_graph_context { ggml_tensor * inp_attn_scale = nullptr; inp_attn_scale = build_inp_attn_scale(); - auto * inp_attn = build_attn_inp_kv_unified_iswa(); + auto * inp_attn = build_attn_inp_kv_iswa(); const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; @@ -6325,7 +6325,7 @@ struct llm_build_deci : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; @@ -6481,7 +6481,7 @@ struct llm_build_baichuan : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = model.type == LLM_TYPE_7B ? build_inp_pos() : nullptr; - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -6603,7 +6603,7 @@ struct llm_build_xverse : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -6717,7 +6717,7 @@ struct llm_build_falcon : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -6841,7 +6841,7 @@ struct llm_build_grok : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -7001,7 +7001,7 @@ struct llm_build_dbrx : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -7125,7 +7125,7 @@ struct llm_build_starcoder : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); cb(pos, "pos_embd", -1); @@ -7230,7 +7230,7 @@ struct llm_build_refact : public llm_graph_context { inpL = build_inp_embd(model.tok_embd); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -7632,7 +7632,7 @@ struct llm_build_bloom : public llm_graph_context { inpL = build_inp_embd(model.tok_embd); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); inpL = build_norm(inpL, model.tok_norm, @@ -7739,7 +7739,7 @@ struct llm_build_mpt : public llm_graph_context { inpL = build_inp_embd(model.tok_embd); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); if (model.pos_embd) { // inp_pos - contains the positions @@ -7889,7 +7889,7 @@ struct llm_build_stablelm : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -8041,7 +8041,7 @@ struct llm_build_qwen : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -8156,7 +8156,7 @@ struct llm_build_qwen2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -8481,7 +8481,7 @@ struct llm_build_qwen2vl : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); int sections[4]; std::copy(std::begin(hparams.rope_sections), std::begin(hparams.rope_sections) + 4, sections); @@ -8602,7 +8602,7 @@ struct llm_build_qwen2moe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -8761,7 +8761,7 @@ struct llm_build_qwen3 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -8882,7 +8882,7 @@ struct llm_build_qwen3moe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9012,7 +9012,7 @@ struct llm_build_phi2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9141,13 +9141,13 @@ struct llm_build_phi3 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - using inp_attn_type = std::conditional_t; + using inp_attn_type = std::conditional_t; inp_attn_type * inp_attn = nullptr; if constexpr (iswa) { - inp_attn = build_attn_inp_kv_unified_iswa(); + inp_attn = build_attn_inp_kv_iswa(); } else { - inp_attn = build_attn_inp_kv_unified(); + inp_attn = build_attn_inp_kv(); } ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9299,7 +9299,7 @@ struct llm_build_plamo : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9415,7 +9415,7 @@ struct llm_build_gpt2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); cb(pos, "pos_embd", -1); @@ -9525,7 +9525,7 @@ struct llm_build_codeshell : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9638,7 +9638,7 @@ struct llm_build_orion : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9765,7 +9765,7 @@ struct llm_build_internlm2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -9901,7 +9901,7 @@ struct llm_build_minicpm3 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -10096,7 +10096,7 @@ struct llm_build_gemma : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -10212,7 +10212,7 @@ struct llm_build_gemma2_iswa : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified_iswa(); + auto * inp_attn = build_attn_inp_kv_iswa(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -10346,7 +10346,7 @@ struct llm_build_gemma3_iswa : public llm_graph_context { ggml_tensor * inp_pos = build_inp_pos(); // TODO: is causal == true correct? might need some changes - auto * inp_attn = build_attn_inp_kv_unified_iswa(); + auto * inp_attn = build_attn_inp_kv_iswa(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -10497,7 +10497,7 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { ggml_tensor * inp_pos = build_inp_pos(); // TODO: is causal == true correct? might need some changes - auto * inp_attn = build_attn_inp_kv_unified_iswa(); + auto * inp_attn = build_attn_inp_kv_iswa(); // inp_per_layer shape: [n_embd_altup, n_tokens, n_layer] ggml_tensor * inp_per_layer = project_per_layer_inputs(inpL, get_per_layer_inputs()); @@ -10904,7 +10904,7 @@ struct llm_build_starcoder2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -11473,7 +11473,7 @@ struct llm_build_command_r : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -11620,7 +11620,7 @@ struct llm_build_cohere2_iswa : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified_iswa(); + auto * inp_attn = build_attn_inp_kv_iswa(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -11755,7 +11755,7 @@ struct llm_build_olmo : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -11883,7 +11883,7 @@ struct llm_build_olmo2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -12012,7 +12012,7 @@ struct llm_build_olmoe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -12138,7 +12138,7 @@ struct llm_build_openelm : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -12269,7 +12269,7 @@ struct llm_build_gptneox : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -12415,7 +12415,7 @@ struct llm_build_arctic : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -12553,7 +12553,7 @@ struct llm_build_deepseek : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; @@ -12730,7 +12730,7 @@ struct llm_build_deepseek2 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -12977,7 +12977,7 @@ struct llm_build_bitnet : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -13241,7 +13241,7 @@ struct llm_build_t5_dec : public llm_graph_context { const int64_t n_outputs_enc = embd_enc->ne[1]; - auto * inp_attn_self = build_attn_inp_kv_unified(); + auto * inp_attn_self = build_attn_inp_kv(); auto * inp_attn_cross = build_attn_inp_cross(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -13406,7 +13406,7 @@ struct llm_build_jais : public llm_graph_context { inpL = build_inp_embd(model.tok_embd); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -13504,7 +13504,7 @@ struct llm_build_chatglm : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -13637,7 +13637,7 @@ struct llm_build_glm4 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -13787,7 +13787,7 @@ struct llm_build_glm4_moe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -13947,7 +13947,7 @@ struct llm_build_nemotron : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -14076,7 +14076,7 @@ struct llm_build_exaone : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -14208,13 +14208,13 @@ struct llm_build_exaone4 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - using inp_attn_type = std::conditional_t; + using inp_attn_type = std::conditional_t; inp_attn_type * inp_attn = nullptr; if constexpr (iswa) { - inp_attn = build_attn_inp_kv_unified_iswa(); + inp_attn = build_attn_inp_kv_iswa(); } else { - inp_attn = build_attn_inp_kv_unified(); + inp_attn = build_attn_inp_kv(); } ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -15097,7 +15097,7 @@ struct llm_build_granite : public llm_graph_context { inp_pos = build_inp_pos(); } - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -15148,12 +15148,12 @@ struct llm_build_granite : public llm_graph_context { } ggml_tensor * build_attention_layer( - ggml_tensor * cur, - ggml_tensor * inp_pos, - llm_graph_input_attn_kv_unified * inp_attn, - const llama_model & model, - const int64_t n_embd_head, - const int il) { + ggml_tensor * cur, + ggml_tensor * inp_pos, + llm_graph_input_attn_kv * inp_attn, + const llama_model & model, + const int64_t n_embd_head, + const int il) { // compute Q and K and (optionally) RoPE them ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); @@ -15367,12 +15367,12 @@ struct llm_build_granite_hybrid : public llm_graph_context_mamba { } ggml_tensor * build_attention_layer( - ggml_tensor * cur, - ggml_tensor * inp_pos, - llm_graph_input_attn_kv_unified * inp_attn, - const llama_model & model, - const int64_t n_embd_head, - const int il) { + ggml_tensor * cur, + ggml_tensor * inp_pos, + llm_graph_input_attn_kv * inp_attn, + const llama_model & model, + const int64_t n_embd_head, + const int il) { // compute Q and K and (optionally) RoPE them ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); @@ -15529,7 +15529,7 @@ struct llm_build_chameleon : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -15860,7 +15860,7 @@ struct llm_build_plm : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -16025,7 +16025,7 @@ struct llm_build_bailingmoe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -16174,7 +16174,7 @@ struct llm_build_dots1 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -16324,7 +16324,7 @@ struct llm_build_ernie4_5 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -16454,7 +16454,7 @@ struct llm_build_ernie4_5_moe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -16828,7 +16828,7 @@ struct llm_build_plamo2 : public llm_graph_context_mamba { private: ggml_tensor * build_plamo2_attn_layer( - llm_graph_input_attn_kv_unified * inp, + llm_graph_input_attn_kv * inp, ggml_tensor * inp_pos, ggml_tensor * cur, const llama_model & model, @@ -17061,7 +17061,7 @@ struct llm_build_arcee : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; @@ -17196,7 +17196,7 @@ struct llm_build_hunyuan_moe : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = 1.0f / sqrtf(float(n_embd_head)); @@ -17357,7 +17357,7 @@ struct llm_build_hunyuan_dense : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = 1.0f / sqrtf(float(n_embd_head)); @@ -17495,7 +17495,7 @@ struct llm_build_smollm3 : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified(); + auto * inp_attn = build_attn_inp_kv(); const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; @@ -17627,7 +17627,7 @@ struct llm_build_openai_moe_iswa : public llm_graph_context { // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - auto * inp_attn = build_attn_inp_kv_unified_iswa(); + auto * inp_attn = build_attn_inp_kv_iswa(); for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -17809,10 +17809,10 @@ struct llm_build_lfm2 : public llm_graph_context { return cur; } - ggml_tensor * build_attn_block(ggml_tensor * cur, - ggml_tensor * inp_pos, - llm_graph_input_attn_kv_unified * inp_attn, - int il) const { + ggml_tensor * build_attn_block(ggml_tensor * cur, + ggml_tensor * inp_pos, + llm_graph_input_attn_kv * inp_attn, + int il) const { GGML_ASSERT(hparams.n_embd_v_gqa(il) == hparams.n_embd_k_gqa(il)); auto const n_embd_head = hparams.n_embd_head_v; auto const n_head_kv = hparams.n_head_kv(il); @@ -17940,13 +17940,13 @@ struct llm_build_smallthinker : public llm_graph_context{ // inp_pos - contains the positions ggml_tensor * inp_pos = build_inp_pos(); - using inp_attn_type = std::conditional_t; + using inp_attn_type = std::conditional_t; inp_attn_type * inp_attn = nullptr; if constexpr (iswa) { - inp_attn = build_attn_inp_kv_unified_iswa(); + inp_attn = build_attn_inp_kv_iswa(); } else { - inp_attn = build_attn_inp_kv_unified(); + inp_attn = build_attn_inp_kv(); } ggml_tensor * inp_out_ids = build_inp_out_ids(); @@ -18076,7 +18076,7 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, std::max((uint32_t) 1, cparams.n_seq_max), cparams.n_seq_max); } else if (llm_arch_is_hybrid(arch)) { - const auto padding = llama_kv_cache_unified::get_padding(cparams); + const auto padding = llama_kv_cache::get_padding(cparams); cparams.n_ctx = GGML_PAD(cparams.n_ctx, padding); @@ -18098,7 +18098,7 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, /* filter_attn */ (arch == LLM_ARCH_FALCON_H1) ? [&](int32_t) { return true; } : (llama_memory_hybrid::layer_filter_cb)nullptr, /* filter_recr */ (arch == LLM_ARCH_FALCON_H1) ? [&](int32_t) { return true; } : (llama_memory_hybrid::layer_filter_cb)nullptr); } else { - const auto padding = llama_kv_cache_unified::get_padding(cparams); + const auto padding = llama_kv_cache::get_padding(cparams); uint32_t n_ctx_per_stream = cparams.n_ctx; @@ -18118,7 +18118,7 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, if (hparams.swa_type != LLAMA_SWA_TYPE_NONE) { GGML_ASSERT(hparams.is_swa_any()); - res = new llama_kv_cache_unified_iswa( + res = new llama_kv_cache_iswa( *this, params.type_k, params.type_v, @@ -18133,7 +18133,7 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, } else { GGML_ASSERT(!hparams.is_swa_any()); - res = new llama_kv_cache_unified( + res = new llama_kv_cache( *this, nullptr, params.type_k, From 9ad5e60dba38a6718366b7ac43e7d8e8abdc36c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jie=20Fu=20=28=E5=82=85=E6=9D=B0=29?= Date: Thu, 21 Aug 2025 22:53:13 +0800 Subject: [PATCH 065/174] examples : fix some typos in examples/model-conversion/README.md (#15477) Signed-off-by: Jie Fu --- examples/model-conversion/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/model-conversion/README.md b/examples/model-conversion/README.md index c3c5001ead..c924a6be3c 100644 --- a/examples/model-conversion/README.md +++ b/examples/model-conversion/README.md @@ -6,7 +6,7 @@ The motivation for having this is that the conversion process can often be an iterative process, where the original model is inspected, converted, updates made to llama.cpp, converted again, etc. Once the model has been converted it needs to be verified against the original model, and then optionally quantified, -and is some cases perplexity checked of the quantized model. And finally the +and in some cases perplexity checked of the quantized model. And finally the model/models need to the ggml-org on Hugging Face. This tool/example tries to help with this process. @@ -62,7 +62,7 @@ Command line arguments take precedence over environment variables when both are In cases where the transformer implementation for the model has not been released yet it is possible to set the environment variable `UNRELEASED_MODEL_NAME` which -will the cause the transformer implementation to be loaded explicitely and not +will then cause the transformer implementation to be loaded explicitely and not use AutoModelForCausalLM: ``` export UNRELEASED_MODEL_NAME=SomeNewModel @@ -87,7 +87,7 @@ from the converted model. # Or using command line argument (venv) $ make causal-run-original-model MODEL_PATH=~/work/ai/models/some_model ``` -This command will save two file to the `data` directory, one is a binary file +This command will save two files to the `data` directory, one is a binary file containing logits which will be used for comparison with the converted model later, and the other is a text file which allows for manual visual inspection. @@ -128,11 +128,11 @@ Quantized model saved to: /path/to/quantized/model-Q8_0.gguf Export the quantized model path to QUANTIZED_MODEL variable in your environment ``` This will show the path to the quantized model in the terminal, which can then -be used set the `QUANTIZED_MODEL` environment variable: +be used to set the `QUANTIZED_MODEL` environment variable: ```console export QUANTIZED_MODEL=/path/to/quantized/model-Q8_0.gguf ``` -The the quantized model can be run using the following command: +Then the quantized model can be run using the following command: ```console (venv) $ make causal-run-quantized-model ``` @@ -229,11 +229,11 @@ Quantized model saved to: /path/to/quantized/model-Q8_0.gguf Export the quantized model path to QUANTIZED_EMBEDDING_MODEL variable in your environment ``` This will show the path to the quantized model in the terminal, which can then -be used set the `QUANTIZED_EMBEDDING_MODEL` environment variable: +be used to set the `QUANTIZED_EMBEDDING_MODEL` environment variable: ```console export QUANTIZED_EMBEDDING_MODEL=/path/to/quantized/model-Q8_0.gguf ``` -The the quantized model can be run using the following command: +Then the quantized model can be run using the following command: ```console (venv) $ make embedding-run-quantized-model ``` @@ -246,7 +246,7 @@ token/logits file: ```console (venv) $ make perplexity-run QUANTIZED_MODEL=~/path/to/quantized/model.gguf ``` -This will use the wikitext dataset to run the perplexity evaluation and and +This will use the wikitext dataset to run the perplexity evaluation and output the perplexity score to the terminal. This value can then be compared with the perplexity score of the unquantized model. From 96452a3fa426de83494fb0268a636aa1bfe557fe Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Thu, 21 Aug 2025 09:55:00 -0500 Subject: [PATCH 066/174] vulkan: Reuse conversion results in prealloc_y (#15410) * vulkan: Reuse conversion results in prealloc_y Cache the pipeline and tensor that were most recently used to fill prealloc_y, and skip the conversion if the current pipeline/tensor match. * don't use shared pointer for prealloc_y_last_pipeline_used --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 75 +++++++++++++++++++++------- tests/test-backend-ops.cpp | 42 +++++++++++++--- 2 files changed, 94 insertions(+), 23 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index c59a588b97..a5bb1820b3 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -1193,6 +1193,10 @@ struct ggml_backend_vk_context { vk::Fence fence, almost_ready_fence; bool almost_ready_fence_pending {}; + // Cache most recent tensor that was converted into prealloc_y, and what pipeline it used to convert. + vk_pipeline_struct * prealloc_y_last_pipeline_used {}; + const ggml_tensor * prealloc_y_last_tensor_used {}; + vk_buffer buffer_pool[MAX_VK_BUFFERS]; vk_context_ref compute_ctx; @@ -5651,10 +5655,20 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, vk_subbuffer{ d_X, 0, x_sz * ne02 * ne03 } }, pc, { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); } if (y_non_contig) { - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || + ctx->prealloc_y_last_tensor_used != src1) { + ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); + ctx->prealloc_y_last_tensor_used = src1; + } } if (quantize_y) { - ggml_vk_quantize_q8_1(ctx, subctx, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }, y_ne * ne12 * ne13); + if (ctx->prealloc_y_last_pipeline_used != to_q8_1.get() || + ctx->prealloc_y_last_tensor_used != src1) { + ggml_vk_quantize_q8_1(ctx, subctx, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }, y_ne * ne12 * ne13); + ctx->prealloc_y_last_pipeline_used = to_q8_1.get(); + ctx->prealloc_y_last_tensor_used = src1; + } } uint32_t stride_batch_x = ne00*ne01; @@ -5829,7 +5843,12 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& } if (y_non_contig) { GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne); - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || + ctx->prealloc_y_last_tensor_used != src1) { + ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); + ctx->prealloc_y_last_tensor_used = src1; + } } // For batch_n, the A matrix is the same for each batch, and B/D use the row stride as the batch stride @@ -6259,7 +6278,12 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, vk_subbuffer{ d_X, 0, x_sz * ne02 * ne03 } }, pc, { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); } if (y_non_contig) { - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || + ctx->prealloc_y_last_tensor_used != src1) { + ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); + ctx->prealloc_y_last_tensor_used = src1; + } } uint32_t stride_batch_x = ne00*ne01; @@ -6447,7 +6471,12 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte } if (y_non_contig) { GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne); - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || + ctx->prealloc_y_last_tensor_used != src1) { + ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); + ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); + ctx->prealloc_y_last_tensor_used = src1; + } } uint32_t stride_batch_y = ne10*ne11; @@ -6491,22 +6520,29 @@ static void ggml_vk_mul_mat_id(ggml_backend_vk_context * ctx, vk_context& subctx GGML_ASSERT(nei0 <= 4096); const uint32_t split_size = std::min(nei1, 4096u / nei0); - ggml_tensor src1_copy = *src1; - ggml_tensor src2_copy = *src2; - ggml_tensor dst_copy = *dst; + if (split_size == nei1) { + ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, src1, src2, dst, dryrun); + } else { + ggml_tensor src1_copy = *src1; + ggml_tensor src2_copy = *src2; + ggml_tensor dst_copy = *dst; - for (uint32_t token_start = 0; token_start < nei1; token_start += split_size) { - const uint32_t n_tokens = std::min(split_size, nei1 - token_start); + for (uint32_t token_start = 0; token_start < nei1; token_start += split_size) { + const uint32_t n_tokens = std::min(split_size, nei1 - token_start); - src1_copy.view_offs = src1->view_offs + token_start * src1_copy.nb[2]; - src2_copy.view_offs = src2->view_offs + token_start * src2_copy.nb[1]; - dst_copy.view_offs = dst->view_offs + token_start * dst_copy.nb[2]; + src1_copy.view_offs = src1->view_offs + token_start * src1_copy.nb[2]; + src2_copy.view_offs = src2->view_offs + token_start * src2_copy.nb[1]; + dst_copy.view_offs = dst->view_offs + token_start * dst_copy.nb[2]; - src1_copy.ne[2] = n_tokens; - src2_copy.ne[1] = n_tokens; - dst_copy.ne[2] = n_tokens; + src1_copy.ne[2] = n_tokens; + src2_copy.ne[1] = n_tokens; + dst_copy.ne[2] = n_tokens; - ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, &src1_copy, &src2_copy, &dst_copy, dryrun); + ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, &src1_copy, &src2_copy, &dst_copy, dryrun); + // invalidate cached prealloc_y, can't cache based on the copy of the ggml_tensor + ctx->prealloc_y_last_pipeline_used = {}; + ctx->prealloc_y_last_tensor_used = nullptr; + } } } } @@ -10311,6 +10347,7 @@ static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) { ggml_vk_pool_free(ctx, buffer); } ctx->gc.temp_buffers.clear(); + ctx->prealloc_y_last_pipeline_used = {}; ggml_vk_command_pool_cleanup(ctx->device, ctx->compute_cmd_pool); ggml_vk_command_pool_cleanup(ctx->device, ctx->transfer_cmd_pool); @@ -10346,6 +10383,7 @@ static void ggml_vk_cleanup(ggml_backend_vk_context * ctx) { ggml_vk_destroy_buffer(ctx->prealloc_x); ggml_vk_destroy_buffer(ctx->prealloc_y); ggml_vk_destroy_buffer(ctx->prealloc_split_k); + ctx->prealloc_y_last_pipeline_used = nullptr; for (auto& buffer : ctx->buffer_pool) { ggml_vk_destroy_buffer(buffer); @@ -10894,6 +10932,9 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg compute_ctx->s->buffer.writeTimestamp(vk::PipelineStageFlagBits::eAllCommands, ctx->device->query_pool, 0); } + ctx->prealloc_y_last_pipeline_used = nullptr; + ctx->prealloc_y_last_tensor_used = nullptr; + // Submit after enough work has accumulated, to overlap CPU cmdbuffer generation with GPU execution. // Estimate the amount of matmul work by looking at the weight matrix size, and submit every 100MB // (and scaled down based on model size, so smaller models submit earlier). diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 4623605f66..e21e904278 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -3098,9 +3098,10 @@ struct test_mul_mat : public test_case { const std::array nr; // repeat in dims 3 and 4 const std::array per; // permutation of dimensions const bool v; // whether a and b are non-contiguous views + const uint32_t o; // number of outputs std::string vars() override { - return VARS_TO_STR9(type_a, type_b, m, n, k, bs, nr, per, v); + return VARS_TO_STR10(type_a, type_b, m, n, k, bs, nr, per, v, o); } double max_nmse_err() override { @@ -3121,8 +3122,8 @@ struct test_mul_mat : public test_case { std::array bs = {10, 10}, std::array nr = {2, 2}, std::array per = {0, 1, 2, 3}, - bool v = false) - : type_a(type_a), type_b(type_b), m(m), n(n), k(k), bs(bs), nr(nr), per(per), v(v) {} + bool v = false, uint32_t o = 1) + : type_a(type_a), type_b(type_b), m(m), n(n), k(k), bs(bs), nr(nr), per(per), v(v), o(o) {} ggml_tensor * build_graph(ggml_context * ctx) override { // C^T = A * B^T: (k, m) * (k, n) => (m, n) @@ -3186,9 +3187,21 @@ struct test_mul_mat : public test_case { ggml_tensor * out = ggml_mul_mat(ctx, a, b); ggml_set_name(out, "out"); + for (uint32_t i = 1; i < o; ++i) { + ggml_tensor * out2 = ggml_mul_mat(ctx, a, b); + ggml_set_name(out2, "out2"); + out = ggml_add(ctx, out, out2); + } return out; } + + bool run_whole_graph() override { return o > 1; } + + std::string op_desc(ggml_tensor * t) override { + GGML_UNUSED(t); + return ggml_op_name(GGML_OP_MUL_MAT); + } }; // GGML_OP_MUL_MAT_ID @@ -3201,9 +3214,10 @@ struct test_mul_mat_id : public test_case { const int64_t m; const int64_t n; const int64_t k; + const uint32_t o; // number of outputs std::string vars() override { - return VARS_TO_STR8(type_a, type_b, n_mats, n_used, b, m, n, k); + return VARS_TO_STR9(type_a, type_b, n_mats, n_used, b, m, n, k, o); } double max_nmse_err() override { @@ -3217,9 +3231,9 @@ struct test_mul_mat_id : public test_case { test_mul_mat_id(ggml_type type_a = GGML_TYPE_F32, ggml_type type_b = GGML_TYPE_F32, int n_mats = 8, int n_used = 2, bool b = false, - int64_t m = 32, int64_t n = 32, int64_t k = 32) + int64_t m = 32, int64_t n = 32, int64_t k = 32, uint32_t o = 1) : type_a(type_a), type_b(type_b), n_mats(n_mats), n_used(n_used), b(b), - m(m), n(n), k(k) { + m(m), n(n), k(k), o(o) { GGML_ASSERT(n_used <= n_mats); } @@ -3241,6 +3255,13 @@ struct test_mul_mat_id : public test_case { ggml_tensor * out = ggml_mul_mat_id(ctx, as, b, ids); ggml_set_name(out, "out"); + for (uint32_t i = 1; i < o; ++i) { + ggml_tensor * a2 = ggml_new_tensor_3d(ctx, type_a, k, m, n_mats); + ggml_tensor * out2 = ggml_mul_mat_id(ctx, a2, b, ids); + ggml_set_name(out2, "out2"); + out = ggml_add(ctx, out, out2); + } + return out; } @@ -3264,6 +3285,13 @@ struct test_mul_mat_id : public test_case { } } } + + bool run_whole_graph() override { return o > 1; } + + std::string op_desc(ggml_tensor * t) override { + GGML_UNUSED(t); + return ggml_op_name(GGML_OP_MUL_MAT_ID); + } }; // GGML_OP_OUT_PROD @@ -5798,6 +5826,7 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 128, 45, 64, { 8, 1}, {4, 1})); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 1056, 1, 193, {1, 1}, {4, 1}, {0, 2, 1, 3})); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 1056, 1, 67, {1, 1}, {4, 1}, {0, 2, 1, 3})); + test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F32, GGML_TYPE_F32, 16, 32, 32, { 1, 1}, {1, 1}, {0, 1, 2, 3}, true, 3)); for (auto bs2 : {1,3}) { for (auto bs : {1,2,4,8}) { @@ -5826,6 +5855,7 @@ static std::vector> make_test_cases_eval() { } test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 1, 1, false, 8, 16, 1)); + test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, false, 32, 32, 32, 3)); for (ggml_type type_a : base_types) { for (ggml_type type_b : {GGML_TYPE_F32 /*, GGML_TYPE_F16 */}) { From 20c2dac8c6e05f2ad5295ddef1aebaf2d266090e Mon Sep 17 00:00:00 2001 From: Dong Won Kim <63934649+ddwkim@users.noreply.github.com> Date: Fri, 22 Aug 2025 00:00:16 +0900 Subject: [PATCH 067/174] vulkan: add exp operation (#15456) Co-authored-by: aeseulgi --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 11 ++++++++++ ggml/src/ggml-vulkan/vulkan-shaders/exp.comp | 20 +++++++++++++++++++ .../vulkan-shaders/vulkan-shaders-gen.cpp | 2 ++ 3 files changed, 33 insertions(+) create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/exp.comp diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index a5bb1820b3..2d5254dfd2 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -490,6 +490,7 @@ struct vk_device_struct { vk_pipeline pipeline_l2_norm_f32; // [src/dst 0=fp32,1=fp16] + vk_pipeline pipeline_exp[2]; vk_pipeline pipeline_gelu[2]; vk_pipeline pipeline_gelu_erf[2]; vk_pipeline pipeline_gelu_quick[2]; @@ -3066,6 +3067,7 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_ ## name [0], #name "_f32", name ## _f32_len, name ## _f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1); \ ggml_vk_create_pipeline(device, device->pipeline_ ## name [1], #name "_f16", name ## _f16_len, name ## _f16_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1); + CREATE_UNARY(exp) CREATE_UNARY(gelu) CREATE_UNARY(gelu_erf) CREATE_UNARY(gelu_quick) @@ -7133,6 +7135,8 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const } switch (ggml_get_unary_op(dst)) { + case GGML_UNARY_OP_EXP: + return ctx->device->pipeline_exp[dst->type == GGML_TYPE_F16]; case GGML_UNARY_OP_SILU: return ctx->device->pipeline_silu[dst->type == GGML_TYPE_F16]; case GGML_UNARY_OP_GELU: @@ -9738,6 +9742,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr return false; case GGML_OP_UNARY: switch (ggml_get_unary_op(node)) { + case GGML_UNARY_OP_EXP: case GGML_UNARY_OP_SILU: case GGML_UNARY_OP_GELU: case GGML_UNARY_OP_GELU_ERF: @@ -10015,6 +10020,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr break; case GGML_OP_UNARY: switch (ggml_get_unary_op(node)) { + case GGML_UNARY_OP_EXP: case GGML_UNARY_OP_SILU: case GGML_UNARY_OP_GELU: case GGML_UNARY_OP_GELU_ERF: @@ -10251,6 +10257,7 @@ static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_cgraph * break; case GGML_OP_UNARY: switch (ggml_get_unary_op(tensor)) { + case GGML_UNARY_OP_EXP: case GGML_UNARY_OP_SILU: case GGML_UNARY_OP_GELU: case GGML_UNARY_OP_GELU_ERF: @@ -11166,6 +11173,7 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm switch (op->op) { case GGML_OP_UNARY: switch (ggml_get_unary_op(op)) { + case GGML_UNARY_OP_EXP: case GGML_UNARY_OP_GELU: case GGML_UNARY_OP_GELU_ERF: case GGML_UNARY_OP_GELU_QUICK: @@ -11965,6 +11973,9 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * } } else if (tensor->op == GGML_OP_UNARY) { switch (ggml_get_unary_op(tensor)) { + case GGML_UNARY_OP_EXP: + tensor_clone = ggml_exp(ggml_ctx, src_clone[0]); + break; case GGML_UNARY_OP_SILU: tensor_clone = ggml_silu(ggml_ctx, src_clone[0]); break; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp b/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp new file mode 100644 index 0000000000..abecd2d3dc --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/exp.comp @@ -0,0 +1,20 @@ +#version 450 + +#include "generic_head.comp" +#include "types.comp" + +#extension GL_EXT_control_flow_attributes : enable + +layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; + +layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; +layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; + +void main() { + const uint i = gl_GlobalInvocationID.z * 262144 + gl_GlobalInvocationID.y * 512 + gl_GlobalInvocationID.x; + + if (i >= p.KX) { + return; + } + data_d[i] = D_TYPE(exp(float(data_a[i]))); +} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 75c572d6fc..4e0bffe6da 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -586,6 +586,8 @@ void process_shaders() { string_to_spv("upscale_f32", "upscale.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}}); + string_to_spv("exp_f16", "exp.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); + string_to_spv("exp_f32", "exp.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}}); string_to_spv("gelu_f16", "gelu.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); string_to_spv("gelu_f32", "gelu.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}}); string_to_spv("gelu_erf_f16", "gelu_erf.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); From 97ae5961a4d9ff9c60f51bac304b97de18e75eaf Mon Sep 17 00:00:00 2001 From: Acly Date: Thu, 21 Aug 2025 17:01:51 +0200 Subject: [PATCH 068/174] vulkan : support conv_2d_dw with f16 weights (#15392) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 12 ++++++++++-- .../vulkan-shaders/vulkan-shaders-gen.cpp | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 2d5254dfd2..fb18a55cda 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -530,8 +530,8 @@ struct vk_device_struct { vk_pipeline pipeline_opt_step_sgd_f32; vk_pipeline pipeline_conv2d_f32[CONV_SHAPE_COUNT]; vk_pipeline pipeline_conv2d_f16_f32[CONV_SHAPE_COUNT]; - vk_pipeline pipeline_conv2d_dw_whcn_f32; - vk_pipeline pipeline_conv2d_dw_cwhn_f32; + vk_pipeline pipeline_conv2d_dw_whcn_f32, pipeline_conv2d_dw_whcn_f16_f32; + vk_pipeline pipeline_conv2d_dw_cwhn_f32, pipeline_conv2d_dw_cwhn_f16_f32; // [2][2][2] is for {f16acc,f32acc}x{large,small_rows}x{unaligned, aligned} vk_pipeline pipeline_flash_attn_f32_f16_cm2[GGML_TYPE_COUNT][FA_HEAD_SIZE_COUNT][2][2][2]; @@ -3257,6 +3257,8 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_whcn_f32, "conv2d_dw_whcn_f32", conv2d_dw_whcn_f32_len, conv2d_dw_whcn_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_cwhn_f32, "conv2d_dw_cwhn_f32", conv2d_dw_cwhn_f32_len, conv2d_dw_cwhn_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1); + ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_whcn_f16_f32, "conv2d_dw_whcn_f16_f32", conv2d_dw_whcn_f16_f32_len, conv2d_dw_whcn_f16_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1); + ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_cwhn_f16_f32, "conv2d_dw_cwhn_f16_f32", conv2d_dw_cwhn_f16_f32_len, conv2d_dw_cwhn_f16_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1); for (auto &c : compiles) { c.wait(); @@ -7346,6 +7348,12 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const } else if (ggml_is_contiguous_channels(src1)) { return ctx->device->pipeline_conv2d_dw_cwhn_f32; } + } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { + if (ggml_is_contiguous(src1)) { + return ctx->device->pipeline_conv2d_dw_whcn_f16_f32; + } else if (ggml_is_contiguous_channels(src1)) { + return ctx->device->pipeline_conv2d_dw_cwhn_f16_f32; + } } return nullptr; default: diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 4e0bffe6da..123ae04491 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -680,6 +680,8 @@ void process_shaders() { string_to_spv("conv2d_dw_whcn_f32", "conv2d_dw.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"WHCN", "1"}})); string_to_spv("conv2d_dw_cwhn_f32", "conv2d_dw.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"CWHN", "1"}})); + string_to_spv("conv2d_dw_whcn_f16_f32", "conv2d_dw.comp", merge_maps(base_dict, {{"A_TYPE", "float16_t"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"WHCN", "1"}})); + string_to_spv("conv2d_dw_cwhn_f16_f32", "conv2d_dw.comp", merge_maps(base_dict, {{"A_TYPE", "float16_t"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"CWHN", "1"}})); string_to_spv("roll_f32", "roll.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"D_TYPE", "float"}})); From 3f196be84b1376945737163e35a91e29e3e24d2f Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 21 Aug 2025 18:44:45 +0300 Subject: [PATCH 069/174] graph : remove build_attn_with_sinks overload (#15469) ggml-ci --- src/llama-graph.cpp | 40 +++-------- src/llama-graph.h | 34 ++++----- src/llama-model.cpp | 166 +++++++++++++++++++++++--------------------- 3 files changed, 107 insertions(+), 133 deletions(-) diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 04baf03ea0..6419d739bd 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -1223,8 +1223,8 @@ ggml_tensor * llm_graph_context::build_attn_mha( ggml_tensor * v, ggml_tensor * kq_b, ggml_tensor * kq_mask, - ggml_tensor * v_mla, ggml_tensor * sinks, + ggml_tensor * v_mla, float kq_scale) const { const bool v_trans = v->nb[1] > v->nb[2]; @@ -1360,6 +1360,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k_cur, ggml_tensor * v_cur, ggml_tensor * kq_b, + ggml_tensor * sinks, ggml_tensor * v_mla, float kq_scale, int il) const { @@ -1381,7 +1382,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = k_cur; ggml_tensor * v = v_cur; - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, v_mla, nullptr, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); cb(cur, "kqv_out", il); if (wo) { @@ -1443,6 +1444,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k_cur, ggml_tensor * v_cur, ggml_tensor * kq_b, + ggml_tensor * sinks, ggml_tensor * v_mla, float kq_scale, int il) const { @@ -1469,7 +1471,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = mctx_cur->get_k(ctx0, il); ggml_tensor * v = mctx_cur->get_v(ctx0, il); - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, v_mla, nullptr, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); cb(cur, "kqv_out", il); if (wo) { @@ -1495,33 +1497,8 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k_cur, ggml_tensor * v_cur, ggml_tensor * kq_b, - ggml_tensor * v_mla, - float kq_scale, - int il) const { - return build_attn_with_sinks( - inp, - wo, - wo_b, - q_cur, - k_cur, - v_cur, - kq_b, - v_mla, - nullptr, - kq_scale, - il); -} - -ggml_tensor * llm_graph_context::build_attn_with_sinks( - llm_graph_input_attn_kv_iswa * inp, - ggml_tensor * wo, - ggml_tensor * wo_b, - ggml_tensor * q_cur, - ggml_tensor * k_cur, - ggml_tensor * v_cur, - ggml_tensor * kq_b, - ggml_tensor * v_mla, ggml_tensor * sinks, + ggml_tensor * v_mla, float kq_scale, int il) const { // these nodes are added to the graph together so that they are not reordered @@ -1561,7 +1538,7 @@ ggml_tensor * llm_graph_context::build_attn_with_sinks( ggml_tensor * k = mctx_cur->get_k(ctx0, il); ggml_tensor * v = mctx_cur->get_v(ctx0, il); - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, v_mla, sinks, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); cb(cur, "kqv_out", il); if (wo) { @@ -1600,6 +1577,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k_cur, ggml_tensor * v_cur, ggml_tensor * kq_b, + ggml_tensor * sinks, ggml_tensor * v_mla, float kq_scale, int il) const { @@ -1615,7 +1593,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = k_cur; ggml_tensor * v = v_cur; - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, v_mla, nullptr, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); cb(cur, "kqv_out", il); if (wo) { diff --git a/src/llama-graph.h b/src/llama-graph.h index 6636fa256f..e11d91d529 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -680,14 +680,14 @@ struct llm_graph_context { // ggml_tensor * build_attn_mha( - ggml_tensor * q, // [n_embd_head_q, n_head_q, n_tokens] - ggml_tensor * k, // [n_embd_head_k, n_head_k, n_tokens] - ggml_tensor * v, // [n_embd_head_v, n_head_v, n_tokens] (v_trans == false) - ggml_tensor * kq_b, - ggml_tensor * kq_mask, - ggml_tensor * sinks, - ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] - float kq_scale) const; + ggml_tensor * q, // [n_embd_head_q, n_head_q, n_tokens] + ggml_tensor * k, // [n_embd_head_k, n_head_k, n_tokens] + ggml_tensor * v, // [n_embd_head_v, n_head_v, n_tokens] (v_trans == false) + ggml_tensor * kq_b, + ggml_tensor * kq_mask, + ggml_tensor * sinks, // [n_head_q] + ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] + float kq_scale) const; llm_graph_input_attn_no_cache * build_attn_inp_no_cache() const; @@ -699,6 +699,7 @@ struct llm_graph_context { ggml_tensor * k_cur, // [n_embd_head_k, n_head_k, n_tokens] ggml_tensor * v_cur, // [n_embd_head_v, n_head_v, n_tokens] ggml_tensor * kq_b, + ggml_tensor * sinks, // [n_head_q] ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] float kq_scale, int il) const; @@ -713,6 +714,7 @@ struct llm_graph_context { ggml_tensor * k_cur, // [n_embd_head_k, n_head_k, n_tokens] ggml_tensor * v_cur, // [n_embd_head_v, n_head_v, n_tokens] ggml_tensor * kq_b, + ggml_tensor * sinks, // [n_head_q] ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] float kq_scale, int il) const; @@ -728,21 +730,8 @@ struct llm_graph_context { ggml_tensor * k_cur, // [n_embd_head_k, n_head_k, n_tokens] optional ggml_tensor * v_cur, // [n_embd_head_v, n_head_v, n_tokens] optional ggml_tensor * kq_b, - ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] - float kq_scale, - int il) const; - - // TODO: temporary to keep the diff small. after the code is public will refactor to simplify this - ggml_tensor * build_attn_with_sinks( - llm_graph_input_attn_kv_iswa * inp, - ggml_tensor * wo, - ggml_tensor * wo_b, - ggml_tensor * q_cur, // [n_embd_head_q, n_head_q, n_tokens] - ggml_tensor * k_cur, // [n_embd_head_k, n_head_k, n_tokens] optional - ggml_tensor * v_cur, // [n_embd_head_v, n_head_v, n_tokens] optional - ggml_tensor * kq_b, - ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] ggml_tensor * sinks, // [n_head_q] + ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] float kq_scale, int il) const; @@ -756,6 +745,7 @@ struct llm_graph_context { ggml_tensor * k_cur, // [n_embd_head_k, n_head_k, n_tokens] ggml_tensor * v_cur, // [n_embd_head_v, n_head_v, n_tokens] ggml_tensor * kq_b, + ggml_tensor * sinks, // [n_head_q] ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] float kq_scale, int il) const; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index cbb7bc8758..c4f0b12f24 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -6050,7 +6050,7 @@ struct llm_build_llama : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); } @@ -6224,7 +6224,7 @@ struct llm_build_llama_iswa : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); } @@ -6401,7 +6401,7 @@ struct llm_build_deci : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -6533,7 +6533,7 @@ struct llm_build_baichuan : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -6648,7 +6648,7 @@ struct llm_build_xverse : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -6771,7 +6771,7 @@ struct llm_build_falcon : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -6901,7 +6901,7 @@ struct llm_build_grok : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -7050,7 +7050,7 @@ struct llm_build_dbrx : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -7164,7 +7164,7 @@ struct llm_build_starcoder : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -7263,7 +7263,7 @@ struct llm_build_refact : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -7426,7 +7426,7 @@ struct llm_build_bert : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); cb(cur, "kqv_out", il); } @@ -7571,7 +7571,7 @@ struct llm_build_neo_bert : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, nullptr, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); cb(cur, "kqv_out", il); } @@ -7671,7 +7671,7 @@ struct llm_build_bloom : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -7819,7 +7819,7 @@ struct llm_build_mpt : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -7965,7 +7965,7 @@ struct llm_build_stablelm : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8086,7 +8086,7 @@ struct llm_build_qwen : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8206,7 +8206,7 @@ struct llm_build_qwen2 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8320,8 +8320,9 @@ struct llm_build_dream : public llm_graph_context { cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, Qcur, Kcur, Vcur, nullptr, - nullptr, 1.0f / sqrtf(float(n_embd_head)), il); + cur = build_attn(inp_attn, + model.layers[il].wo, model.layers[il].bo, + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f / sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8420,8 +8421,9 @@ struct llm_build_llada : public llm_graph_context { cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - cur = build_attn(inp_attn, model.layers[il].wo, NULL, Qcur, Kcur, Vcur, nullptr, nullptr, - 1.0f / sqrtf(float(n_embd_head)), il); + cur = build_attn(inp_attn, + model.layers[il].wo, NULL, + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f / sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8534,7 +8536,7 @@ struct llm_build_qwen2vl : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8661,7 +8663,7 @@ struct llm_build_qwen2moe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8814,7 +8816,7 @@ struct llm_build_qwen3 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -8935,7 +8937,7 @@ struct llm_build_qwen3moe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9075,7 +9077,7 @@ struct llm_build_phi2 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9212,7 +9214,7 @@ struct llm_build_phi3 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9346,7 +9348,7 @@ struct llm_build_plamo : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9454,7 +9456,7 @@ struct llm_build_gpt2 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9568,7 +9570,7 @@ struct llm_build_codeshell : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9697,7 +9699,7 @@ struct llm_build_orion : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -9824,7 +9826,7 @@ struct llm_build_internlm2 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -10012,7 +10014,7 @@ struct llm_build_minicpm3 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - q_states, k_states, v_states, nullptr, nullptr, kq_scale, il); + q_states, k_states, v_states, nullptr, nullptr, nullptr, kq_scale, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -10142,7 +10144,7 @@ struct llm_build_gemma : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -10257,7 +10259,7 @@ struct llm_build_gemma2_iswa : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -10399,7 +10401,7 @@ struct llm_build_gemma3_iswa : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -10580,7 +10582,7 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, hparams.f_attention_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, hparams.f_attention_scale, il); } else { // no KV layers ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); @@ -10598,7 +10600,7 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, nullptr, nullptr, nullptr, nullptr, hparams.f_attention_scale, il); + Qcur, nullptr, nullptr, nullptr, nullptr, nullptr, hparams.f_attention_scale, il); } cur = build_norm(cur, @@ -10963,7 +10965,7 @@ struct llm_build_starcoder2 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -11390,7 +11392,9 @@ struct llm_build_jamba : public llm_graph_context_mamba { cb(Vcur, "Vcur", il); // No RoPE :) - cur = build_attn(inp_hybrid->get_attn(), model.layers[il].wo, NULL, Qcur, Kcur, Vcur, NULL, NULL, 1.0f/sqrtf(float(n_embd_head)), il); + cur = build_attn(inp_hybrid->get_attn(), + model.layers[il].wo, NULL, + Qcur, Kcur, Vcur, NULL, NULL, NULL, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -11548,7 +11552,7 @@ struct llm_build_command_r : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -11683,7 +11687,7 @@ struct llm_build_cohere2_iswa : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -11814,7 +11818,7 @@ struct llm_build_olmo : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, nullptr, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -11934,7 +11938,7 @@ struct llm_build_olmo2 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -12067,7 +12071,7 @@ struct llm_build_olmoe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -12200,7 +12204,7 @@ struct llm_build_openelm : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -12312,7 +12316,7 @@ struct llm_build_gptneox : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -12462,7 +12466,7 @@ struct llm_build_arctic : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -12617,7 +12621,7 @@ struct llm_build_deepseek : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -12845,7 +12849,7 @@ struct llm_build_deepseek2 : public llm_graph_context { // note: MLA with the absorption optimzation converts into MQA (ie: GQA with 1 group) cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, model.layers[il].wv_b, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, model.layers[il].wv_b, kq_scale, il); } else { ggml_tensor * kv = ggml_mul_mat(ctx0, model.layers[il].wkv_b, kv_cmpr); cb(kv, "kv", il); @@ -12879,7 +12883,7 @@ struct llm_build_deepseek2 : public llm_graph_context { // note: MLA without the absorption optimization converts into MHA (ie: GQA with full n_head groups) cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); } } @@ -13046,7 +13050,7 @@ struct llm_build_bitnet : public llm_graph_context { cur = build_attn(inp_attn, NULL, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); cur = build_norm(cur, model.layers[il].attn_sub_norm, NULL, @@ -13169,7 +13173,7 @@ struct llm_build_t5_enc : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo_enc, nullptr, - Qcur, Kcur, Vcur, kq_b, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, kq_b, nullptr, nullptr, 1.0f, il); cb(cur, "kqv_out", il); } @@ -13275,7 +13279,7 @@ struct llm_build_t5_dec : public llm_graph_context { cur = build_attn(inp_attn_self, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, kq_b, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, kq_b, nullptr, nullptr, 1.0f, il); cb(cur, "kqv_out", il); } @@ -13307,7 +13311,7 @@ struct llm_build_t5_dec : public llm_graph_context { cur = build_attn(inp_attn_cross, model.layers[il].wo_cross, nullptr, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f, il); cb(cur, "kqv_out", il); //ggml_tensor * q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); @@ -13439,7 +13443,7 @@ struct llm_build_jais : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/float(n_embd_head), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/float(n_embd_head), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -13571,7 +13575,7 @@ struct llm_build_chatglm : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -13704,7 +13708,7 @@ struct llm_build_glm4 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -13853,7 +13857,7 @@ struct llm_build_glm4_moe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_transformer_layers - 1 && inp_out_ids) { @@ -14007,7 +14011,7 @@ struct llm_build_nemotron : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -14138,7 +14142,7 @@ struct llm_build_exaone : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -14269,7 +14273,7 @@ struct llm_build_exaone4 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); cb(cur, "attn_out", il); } @@ -15204,7 +15208,7 @@ struct llm_build_granite : public llm_graph_context { const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); return cur; } @@ -15423,7 +15427,7 @@ struct llm_build_granite_hybrid : public llm_graph_context_mamba { const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); return cur; } @@ -15608,7 +15612,7 @@ struct llm_build_chameleon : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, nullptr, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -15964,7 +15968,7 @@ struct llm_build_plm : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - q_states, k_states, v_states, nullptr, nullptr, kq_scale, il); + q_states, k_states, v_states, nullptr, nullptr, nullptr, kq_scale, il); } if (il == n_layer - 1 && inp_out_ids) { @@ -16087,7 +16091,7 @@ struct llm_build_bailingmoe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_rot)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_rot)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -16227,7 +16231,7 @@ struct llm_build_dots1 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { @@ -16382,7 +16386,7 @@ struct llm_build_ernie4_5 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1) { @@ -16515,7 +16519,7 @@ struct llm_build_ernie4_5_moe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); cb(cur, "attn_out", il); } @@ -16668,7 +16672,7 @@ struct llm_build_falcon_h1 : public llm_graph_context_mamba { ggml_tensor * attn_out = build_attn(inp->get_attn(), model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(attn_out, "attn_out", il); cur = build_norm(inpL, @@ -16878,7 +16882,9 @@ private: ext_factor, attn_factor, beta_fast, beta_slow ); - cur = build_attn(inp, model.layers[il].wo, NULL, Qcur, Kcur, Vcur, NULL, NULL, 1.0f/sqrtf(float(n_embd_head_v)), il); + cur = build_attn(inp, + model.layers[il].wo, NULL, + Qcur, Kcur, Vcur, NULL, NULL, NULL, 1.0f/sqrtf(float(n_embd_head_v)), il); } cb(cur, "attn_out", il); @@ -17125,7 +17131,7 @@ struct llm_build_arcee : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); } @@ -17270,7 +17276,7 @@ struct llm_build_hunyuan_moe : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); } @@ -17430,7 +17436,7 @@ struct llm_build_hunyuan_dense : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); } @@ -17560,7 +17566,7 @@ struct llm_build_smollm3 : public llm_graph_context { cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); cb(cur, "attn_out", il); } @@ -17682,9 +17688,9 @@ struct llm_build_openai_moe_iswa : public llm_graph_context { cb(Kcur, "Kcur", il); cb(Vcur, "Vcur", il); - cur = build_attn_with_sinks(inp_attn, + cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, model.layers[il].attn_sinks, 1.0f/sqrtf(float(n_rot)), il); + Qcur, Kcur, Vcur, nullptr, model.layers[il].attn_sinks, nullptr, 1.0f/sqrtf(float(n_rot)), il); cb(cur, "attn_out", il); } @@ -17847,7 +17853,7 @@ struct llm_build_lfm2 : public llm_graph_context { ); cur = build_attn(inp_attn, model.layers[il].wo, NULL, - q, k, v, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + q, k, v, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); cb(cur, "model.layers.{}.self_attn.out_proj", il); @@ -17991,7 +17997,7 @@ struct llm_build_smallthinker : public llm_graph_context{ cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f / sqrtf(float(n_embd_head)), il); + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f / sqrtf(float(n_embd_head)), il); } if (il == n_layer - 1 && inp_out_ids) { From cd36b5e5c7fed2a3ac671dd542d579ca40b48b54 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 21 Aug 2025 19:13:45 +0300 Subject: [PATCH 070/174] llama : remove deprecated llama_kv_self API (#15472) ggml-ci --- include/llama.h | 105 ----------------------- src/llama-context.cpp | 189 +----------------------------------------- src/llama-context.h | 9 +- 3 files changed, 6 insertions(+), 297 deletions(-) diff --git a/include/llama.h b/include/llama.h index c465ced4ff..662e0971df 100644 --- a/include/llama.h +++ b/include/llama.h @@ -663,111 +663,6 @@ extern "C" { // Check if the memory supports shifting LLAMA_API bool llama_memory_can_shift(llama_memory_t mem); - // - // KV cache for self-attention (TODO: deprecate in favor of llama_memory) - // - - // Returns the number of tokens in the KV cache (slow, use only for debug) - // If a KV cell has multiple sequences assigned to it, it will be counted multiple times - DEPRECATED(LLAMA_API int32_t llama_kv_self_n_tokens(const struct llama_context * ctx), - "Use llama_kv_self_seq_pos_max() and llama_kv_self_seq_pos_min() instead (https://github.com/ggml-org/llama.cpp/issues/13793)"); - - // Returns the number of used KV cells (i.e. have at least one sequence assigned to them) - DEPRECATED(LLAMA_API int32_t llama_kv_self_used_cells(const struct llama_context * ctx), - "Use llama_kv_self_seq_pos_max() and llama_kv_self_seq_pos_min() instead (https://github.com/ggml-org/llama.cpp/issues/13793)"); - - // Clear the KV cache - both cell info is erased and KV data is zeroed - DEPRECATED(LLAMA_API void llama_kv_self_clear( - struct llama_context * ctx), - "Use llama_memory_clear() instead"); - - // Removes all tokens that belong to the specified sequence and have positions in [p0, p1) - // Returns false if a partial sequence cannot be removed. Removing a whole sequence never fails - // seq_id < 0 : match any sequence - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - DEPRECATED(LLAMA_API bool llama_kv_self_seq_rm( - struct llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1), - "Use llama_memory_seq_rm() instead"); - - // Copy all tokens that belong to the specified sequence to another sequence - // Note that this does not allocate extra KV cache memory - it simply assigns the tokens to the new sequence - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - DEPRECATED(LLAMA_API void llama_kv_self_seq_cp( - struct llama_context * ctx, - llama_seq_id seq_id_src, - llama_seq_id seq_id_dst, - llama_pos p0, - llama_pos p1), - "Use llama_memory_seq_cp() instead"); - - // Removes all tokens that do not belong to the specified sequence - DEPRECATED(LLAMA_API void llama_kv_self_seq_keep( - struct llama_context * ctx, - llama_seq_id seq_id), - "Use llama_memory_seq_keep() instead"); - - // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) - // If the KV cache is RoPEd, the KV data is updated accordingly: - // - lazily on next llama_decode() - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - DEPRECATED(LLAMA_API void llama_kv_self_seq_add( - struct llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - llama_pos delta), - "Use llama_memory_seq_add() instead"); - - // Integer division of the positions by factor of `d > 1` - // If the KV cache is RoPEd, the KV data is updated accordingly: - // - lazily on next llama_decode() - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - DEPRECATED(LLAMA_API void llama_kv_self_seq_div( - struct llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - int d), - "Use llama_memory_seq_div() instead"); - - // Returns the smallest position present in the KV cache for the specified sequence - // This is typically non-zero only for SWA caches - // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the KV cache - // Return -1 if the sequence is empty - DEPRECATED(LLAMA_API llama_pos llama_kv_self_seq_pos_min( - struct llama_context * ctx, - llama_seq_id seq_id), - "Use llama_memory_seq_pos_min() instead"); - - // Returns the largest position present in the KV cache for the specified sequence - // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the KV cache - // Return -1 if the sequence is empty - DEPRECATED(LLAMA_API llama_pos llama_kv_self_seq_pos_max( - struct llama_context * ctx, - llama_seq_id seq_id), - "Use llama_memory_seq_pos_max() instead"); - - // Defragment the KV cache - // This will be applied: - // - lazily on next llama_decode() - DEPRECATED(LLAMA_API void llama_kv_self_defrag(struct llama_context * ctx), - "simply remove this call, the context will automatically decide when to do a defragmentation based on 'defrag_thold'"); - - // Check if the context supports KV cache shifting - DEPRECATED(LLAMA_API bool llama_kv_self_can_shift(const struct llama_context * ctx), - "use llama_memory_can_shift() instead"); - - // Apply the KV cache updates (such as K-shifts, defragmentation, etc.) - DEPRECATED(LLAMA_API void llama_kv_self_update(struct llama_context * ctx), - "simply remove this call, updates are applied lazily on the next llama_decode()"); - // // State / sessions // diff --git a/src/llama-context.cpp b/src/llama-context.cpp index fb6fbe982c..e8e8b3450a 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -93,7 +93,7 @@ llama_context::llama_context( // the batch has to be at least GGML_KQ_MASK_PAD because we will be padding the KQ_mask // this is required by GPU kernels in order to avoid out-of-bounds accesses (e.g. ggml_flash_attn_ext) // ref: https://github.com/ggerganov/llama.cpp/pull/5021 - // TODO: this padding is not needed for the cache-less context so we should probably move it to llama_context_kv_self + // TODO: this padding is not needed for the cache-less context so we should probably move it to llama_memory if (cparams.n_batch < GGML_KQ_MASK_PAD) { LLAMA_LOG_WARN("%s: n_batch is less than GGML_KQ_MASK_PAD - increasing to %d\n", __func__, GGML_KQ_MASK_PAD); cparams.n_batch = GGML_KQ_MASK_PAD; @@ -439,26 +439,12 @@ llama_memory_t llama_context::get_memory() const { return memory.get(); } -// deprecated -void llama_context::kv_self_defrag_sched() { - if (!memory) { - return; - } - - memory_force_optimize = true; -} - -// deprecated -bool llama_context::kv_self_update(bool optimize) { +bool llama_context::memory_update(bool optimize) { if (!memory) { return false; } { - // TODO: remove in the future - optimize |= memory_force_optimize; - memory_force_optimize = false; - const auto mctx = memory->init_update(this, optimize); switch (mctx->get_status()) { case LLAMA_MEMORY_STATUS_SUCCESS: @@ -993,7 +979,7 @@ int llama_context::decode(const llama_batch & batch_inp) { bool did_optimize = false; // handle any pending defrags/shifts - kv_self_update(false); + memory_update(false); llama_memory_context_ptr mctx; @@ -1018,7 +1004,7 @@ int llama_context::decode(const llama_batch & batch_inp) { if (!did_optimize) { did_optimize = true; - if (kv_self_update(true)) { + if (memory_update(true)) { LLAMA_LOG_DEBUG("%s: retrying batch size %d after cache optimization\n", __func__, balloc->get_n_tokens()); continue; @@ -2338,11 +2324,6 @@ const llama_model * llama_get_model(const llama_context * ctx) { return &ctx->get_model(); } -// deprecated -void llama_kv_self_update(llama_context * ctx) { - ctx->kv_self_update(false); -} - enum llama_pooling_type llama_pooling_type(const llama_context * ctx) { return ctx->pooling_type(); } @@ -2560,168 +2541,6 @@ bool llama_memory_can_shift(llama_memory_t mem) { return mem->get_can_shift(); } -// -// kv cache -// - -// deprecated -int32_t llama_kv_self_n_tokens(const llama_context * ctx) { - const auto * kv = llama_get_memory(ctx); - if (!kv) { - return 0; - } - - int32_t res = 0; - - for (uint32_t s = 0; s < ctx->get_cparams().n_seq_max; s++) { - const llama_pos p0 = kv->seq_pos_min(s); - const llama_pos p1 = kv->seq_pos_max(s); - - if (p0 >= 0) { - res += (p1 - p0) + 1; - } - } - - return res; -} - -// deprecated -// note: this is the same as above - will be removed anyway, so it's ok -int32_t llama_kv_self_used_cells(const llama_context * ctx) { - const auto * kv = llama_get_memory(ctx); - if (!kv) { - return 0; - } - - int32_t res = 0; - - for (uint32_t s = 0; s < ctx->get_cparams().n_seq_max; s++) { - const llama_pos p0 = kv->seq_pos_min(s); - const llama_pos p1 = kv->seq_pos_max(s); - - if (p0 >= 0) { - res += (p1 - p0) + 1; - } - } - - return res; -} - -// deprecated -void llama_kv_self_clear(llama_context * ctx) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return; - } - - llama_memory_clear(kv, true); -} - -// deprecated -bool llama_kv_self_seq_rm( - llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return true; - } - - return llama_memory_seq_rm(kv, seq_id, p0, p1); -} - -// deprecated -void llama_kv_self_seq_cp( - llama_context * ctx, - llama_seq_id seq_id_src, - llama_seq_id seq_id_dst, - llama_pos p0, - llama_pos p1) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return; - } - - llama_memory_seq_cp(kv, seq_id_src, seq_id_dst, p0, p1); -} - -// deprecated -void llama_kv_self_seq_keep(llama_context * ctx, llama_seq_id seq_id) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return; - } - - llama_memory_seq_keep(kv, seq_id); -} - -// deprecated -void llama_kv_self_seq_add( - llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - llama_pos delta) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return; - } - - llama_memory_seq_add(kv, seq_id, p0, p1, delta); -} - -// deprecated -void llama_kv_self_seq_div( - llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - int d) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return; - } - - llama_memory_seq_div(kv, seq_id, p0, p1, d); -} - -// deprecated -llama_pos llama_kv_self_seq_pos_min(llama_context * ctx, llama_seq_id seq_id) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return -1; - } - - return llama_memory_seq_pos_min(kv, seq_id); -} - -// deprecated -llama_pos llama_kv_self_seq_pos_max(llama_context * ctx, llama_seq_id seq_id) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return -1; - } - - return llama_memory_seq_pos_max(kv, seq_id); -} - -// deprecated -void llama_kv_self_defrag(llama_context * ctx) { - // force defrag - ctx->kv_self_defrag_sched(); -} - -// deprecated -bool llama_kv_self_can_shift(const llama_context * ctx) { - auto * kv = llama_get_memory(ctx); - if (!kv) { - return false; - } - - return llama_memory_can_shift(kv); -} - // llama state API // deprecated diff --git a/src/llama-context.h b/src/llama-context.h index 230ef8962b..3dd9205446 100644 --- a/src/llama-context.h +++ b/src/llama-context.h @@ -46,10 +46,8 @@ struct llama_context { llama_memory_t get_memory() const; - // return true of the KV cache was updated - // TODO: remove - bool kv_self_update(bool optimize); - void kv_self_defrag_sched(); + // return true if the memory was updated + bool memory_update(bool optimize); enum llama_pooling_type pooling_type() const; @@ -230,9 +228,6 @@ private: std::unique_ptr memory; - // TODO: temporary, until the llama_kv_self_defrag() API is removed - bool memory_force_optimize = false; - // decode output (2-dimensional array: [n_outputs][n_vocab]) size_t logits_size = 0; // capacity (of floats) for logits float * logits = nullptr; From 54a241f505d515d625767b993bfd573ecee306b9 Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Thu, 21 Aug 2025 14:09:32 -0700 Subject: [PATCH 071/174] sched : fix possible use of wrong ids tensor when offloading moe prompt processing (#15488) --- common/arg.cpp | 2 +- ggml/src/ggml-backend.cpp | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index eeb6c94af4..1227aeb2a3 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1755,7 +1755,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex [](common_params & params) { params.warmup = false; } - ).set_examples({LLAMA_EXAMPLE_MAIN, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_EMBEDDING, LLAMA_EXAMPLE_RETRIEVAL})); + ).set_examples({LLAMA_EXAMPLE_MAIN, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_EMBEDDING, LLAMA_EXAMPLE_RETRIEVAL, LLAMA_EXAMPLE_PERPLEXITY})); add_opt(common_arg( {"--spm-infill"}, string_format( diff --git a/ggml/src/ggml-backend.cpp b/ggml/src/ggml-backend.cpp index c1e58fbb64..e34feccc98 100644 --- a/ggml/src/ggml-backend.cpp +++ b/ggml/src/ggml-backend.cpp @@ -1355,15 +1355,15 @@ static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t s std::vector ids; std::vector used_ids; - for (int i = 0; i < sched->n_splits; i++) { - struct ggml_backend_sched_split * split = &splits[i]; + for (int split_id = 0; split_id < sched->n_splits; split_id++) { + struct ggml_backend_sched_split * split = &splits[split_id]; int split_backend_id = split->backend_id; ggml_backend_t split_backend = sched->backends[split_backend_id]; // copy the input tensors to the split backend - for (int j = 0; j < split->n_inputs; j++) { - ggml_backend_t input_backend = ggml_backend_sched_get_tensor_backend(sched, split->inputs[j]); - struct ggml_tensor * input = split->inputs[j]; + for (int input_id = 0; input_id < split->n_inputs; input_id++) { + ggml_backend_t input_backend = ggml_backend_sched_get_tensor_backend(sched, split->inputs[input_id]); + struct ggml_tensor * input = split->inputs[input_id]; struct ggml_tensor * input_cpy = tensor_copy(input, split_backend_id, sched->cur_copy); if (input->flags & GGML_TENSOR_FLAG_INPUT) { @@ -1398,10 +1398,22 @@ static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t s // get the ids ggml_tensor * ids_tensor = node->src[2]; + ggml_backend_t ids_backend = split_backend; + + // if the ids tensor is also an input of the split, it may not have been copied yet to the split backend + // in that case, we use the original ids tensor + for (int i = input_id + 1; i < split->n_inputs; i++) { + if (ids_tensor == tensor_copy(split->inputs[i], split_backend_id, sched->cur_copy)) { + ids_tensor = split->inputs[i]; + ids_backend = ggml_backend_sched_get_tensor_backend(sched, split->inputs[i]); + break; + } + } + if (ids_tensor != prev_ids_tensor) { ids.resize(ggml_nbytes(ids_tensor) / sizeof(int32_t)); - ggml_backend_tensor_get_async(split_backend, ids_tensor, ids.data(), 0, ggml_nbytes(ids_tensor)); - ggml_backend_synchronize(split_backend); + ggml_backend_tensor_get_async(ids_backend, ids_tensor, ids.data(), 0, ggml_nbytes(ids_tensor)); + ggml_backend_synchronize(ids_backend); // find the used experts used_ids.clear(); @@ -1409,6 +1421,7 @@ static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t s for (int64_t i1 = 0; i1 < ids_tensor->ne[1]; i1++) { for (int64_t i0 = 0; i0 < ids_tensor->ne[0]; i0++) { int32_t id = ids[i1 * ids_tensor->nb[1]/sizeof(int32_t) + i0 * ids_tensor->nb[0]/sizeof(int32_t)]; + GGML_ASSERT(id >= 0 && id < n_expert); ggml_bitset_set(used_ids.data(), id); } } From a0f98dd604d34826eb5ea2560d1e23fe726921df Mon Sep 17 00:00:00 2001 From: Chenguang Li <757486878@qq.com> Date: Fri, 22 Aug 2025 14:12:07 +0800 Subject: [PATCH 072/174] CANN: Optimize RMS_NORM using cache (#15419) * [CANN] Optimize RMS_NORM using cache Signed-off-by: noemotiovon <757486878@qq.com> * fix typo Signed-off-by: noemotiovon <757486878@qq.com> * fix review comment Signed-off-by: noemotiovon <757486878@qq.com> * codestyle adjustment Signed-off-by: noemotiovon <757486878@qq.com> --------- Signed-off-by: noemotiovon <757486878@qq.com> --- ggml/src/ggml-cann/aclnn_ops.cpp | 153 +++++++++++++++++++++++-------- ggml/src/ggml-cann/common.h | 4 + 2 files changed, 121 insertions(+), 36 deletions(-) diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index 2a5cb8abfa..8f65904b8f 100755 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -867,6 +867,86 @@ static aclTensor* aclnn_values(ggml_backend_cann_context& ctx, void* buffer, return acl_tensor; } +/** + * @brief Fills a tensor with a scalar value. + * + * This function fills the destination tensor `acl_dst` with the scalar value + * `scalar`. + * + * @param ctx The context for the CANN backend operations. + * @param scalar The scalar value used to fill the tensor. + * @param acl_dst The destination tensor to be filled with the scalar value. + */ +static void aclnn_fill_scalar(ggml_backend_cann_context& ctx, float scalar, + aclTensor* acl_dst) { + auto acl_scalar = aclCreateScalar(&scalar, aclDataType::ACL_FLOAT); + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceFillScalar, acl_dst, acl_scalar); + ggml_cann_release_resources(ctx, acl_scalar); +} + +/** + * @brief Get or expand a cached float32 tensor filled with a scalar value. + * + * This function manages cached device memory for float32 tensors. If the current + * cache size is insufficient for the requested tensor shape, the old memory will + * be released and new memory will be allocated. The allocated buffer is then + * initialized either with zeros (when @p value == 0.0f) or with the given scalar + * value using CANN operations. Finally, an aclTensor object is created from the + * cached memory and returned. + * + * @param ctx The CANN backend context that manages device memory. + * @param buffer A pointer to the cached device buffer (will be allocated + * or reallocated if necessary). + * @param cache_element The current number of cached elements. This will be + * updated when the cache is expanded. + * @param ne The tensor shape array (number of elements in each dimension). + * @param nb The stride size for each dimension. + * @param dims The number of tensor dimensions. + * @param value The scalar value used to fill the tensor (supports zero + * initialization via memset or arbitrary values via fill_scalar). + * @return An aclTensor pointer created from the cached buffer. + */ +static aclTensor* get_f32_cache_acl_tensor( + ggml_backend_cann_context& ctx, + void** buffer, + int64_t &cache_element, + int64_t* ne, + size_t* nb, + int64_t dims, + float value) { + // Calculate total number of elements + int64_t n_element = 1; + for (int i = 0; i < dims; i++) { + n_element *= ne[i]; + } + size_t size = n_element * sizeof(float); + + // Allocate or expand cache if needed + if (cache_element < n_element) { + if (*buffer != nullptr) { + aclrtFree(*buffer); + *buffer = nullptr; + } + + ACL_CHECK(aclrtMalloc(buffer, size, ACL_MEM_MALLOC_HUGE_FIRST)); + cache_element = n_element; + + // Initialize cache + if (value == 0.0f) { + ACL_CHECK(aclrtMemsetAsync(*buffer, size, 0, size, ctx.stream())); + } else { + int64_t pool_ne[1] = { n_element }; + size_t pool_nb[1] = { sizeof(float) }; + aclTensor* acl_value = ggml_cann_create_tensor( + *buffer, ACL_FLOAT, sizeof(float), pool_ne, pool_nb, 1); + aclnn_fill_scalar(ctx, 1, acl_value); + ggml_cann_release_resources(ctx, acl_value); + } + } + + return ggml_cann_create_tensor(*buffer, ACL_FLOAT, sizeof(float), ne, nb, dims); +} + void ggml_cann_rms_norm(ggml_backend_cann_context& ctx, ggml_tensor* dst) { ggml_tensor* src = dst->src[0]; @@ -875,20 +955,39 @@ void ggml_cann_rms_norm(ggml_backend_cann_context& ctx, ggml_tensor* dst) { float eps; memcpy(&eps, dst->op_params, sizeof(float)); - size_t one_tensor_n_bytes = src->ne[0] * ggml_element_size(src); - ggml_cann_pool_alloc one_tensor_allocator(ctx.pool(), one_tensor_n_bytes); - aclTensor* acl_gamma = aclnn_values( - ctx, one_tensor_allocator.get(), one_tensor_n_bytes, src->ne, 1, - ggml_cann_type_mapping(src->type), ggml_element_size(src)); + // build gamma, one... + size_t acl_gamma_nb[GGML_MAX_DIMS]; + acl_gamma_nb[0] = sizeof(float); + for (int i = 1; i < GGML_MAX_DIMS; i++) { + acl_gamma_nb[i] = acl_gamma_nb[i - 1] * src->ne[i - 1]; + } + aclTensor* acl_gamma = get_f32_cache_acl_tensor( + ctx, + &ctx.f32_one_cache, + ctx.f32_one_cache_element, + src->ne, + acl_gamma_nb, + 1, // dims + 1.0f // value + ); + + // build rstd, zero... + size_t acl_rstd_nb[GGML_MAX_DIMS]; + acl_rstd_nb[0] = sizeof(float); + for (int i = 1; i < GGML_MAX_DIMS; i++) { + acl_rstd_nb[i] = acl_rstd_nb[i - 1] * src->ne[i - 1]; + } + aclTensor* acl_rstd = get_f32_cache_acl_tensor( + ctx, + &ctx.f32_zero_cache, + ctx.f32_zero_cache_element, + src->ne, + acl_rstd_nb, + GGML_MAX_DIMS, + 0.0f // value + ); - size_t zero_tensor_n_bytes = - src->ne[1] * src->ne[2] * src->ne[3] * ggml_element_size(src); - ggml_cann_pool_alloc zero_tensor_allocator(ctx.pool(), zero_tensor_n_bytes); - aclTensor* acl_rstd = - aclnn_zero(ctx, zero_tensor_allocator.get(), zero_tensor_n_bytes, - src->ne, GGML_MAX_DIMS, ggml_cann_type_mapping(src->type), - ggml_element_size(src)); GGML_CANN_CALL_ACLNN_OP(ctx, RmsNorm, acl_src, acl_gamma, eps, acl_dst, acl_rstd); ggml_cann_release_resources(ctx, acl_src, acl_dst, acl_gamma, acl_rstd); } @@ -903,14 +1002,13 @@ void ggml_cann_diag_mask(ggml_backend_cann_context& ctx, ggml_tensor* dst, const int n_past = ((int32_t*)dst->op_params)[0]; - size_t one_tensor_n_bytes = src->ne[0] * src->ne[1] * src->ne[2] * - src->ne[3] * ggml_element_size(src); - ggml_cann_pool_alloc one_tensor_allocator(ctx.pool(), one_tensor_n_bytes); + ggml_cann_pool_alloc one_tensor_allocator(ctx.pool(), ggml_nbytes(src)); + void* buffer = one_tensor_allocator.get(); - aclTensor* mask_tensor = - aclnn_values(ctx, one_tensor_allocator.get(), one_tensor_n_bytes, - src->ne, GGML_MAX_DIMS, ggml_cann_type_mapping(src->type), - ggml_element_size(src), value); + aclTensor* mask_tensor = ggml_cann_create_tensor(buffer, ggml_cann_type_mapping(src->type), + ggml_type_size(src->type), src->ne, src->nb, GGML_MAX_DIMS); + + aclnn_fill_scalar(ctx, value, mask_tensor); aclScalar* alpha = nullptr; float alphaValue = 1.0f; @@ -1277,23 +1375,6 @@ void ggml_cann_timestep_embedding(ggml_backend_cann_context& ctx, tmp_permute_tensor, tmp_mul_tensor, acl_dst); } -/** - * @brief Fills a tensor with a scalar value. - * - * This function fills the destination tensor `acl_dst` with the scalar value - * `scalar`. - * - * @param ctx The context for the CANN backend operations. - * @param scalar The scalar value used to fill the tensor. - * @param acl_dst The destination tensor to be filled with the scalar value. - */ -static void aclnn_fill_scalar(ggml_backend_cann_context& ctx, float scalar, - aclTensor* acl_dst) { - auto acl_scalar = aclCreateScalar(&scalar, aclDataType::ACL_FLOAT); - GGML_CANN_CALL_ACLNN_OP(ctx, InplaceFillScalar, acl_dst, acl_scalar); - ggml_cann_release_resources(ctx, acl_scalar); -} - /** * @brief Raises each element of a tensor to the power of the corresponding * element in another tensor. diff --git a/ggml/src/ggml-cann/common.h b/ggml/src/ggml-cann/common.h index 2c2033bfba..5858bd3f6a 100755 --- a/ggml/src/ggml-cann/common.h +++ b/ggml/src/ggml-cann/common.h @@ -379,6 +379,10 @@ struct ggml_backend_cann_context { cann_task_queue task_queue; bool async_mode; bool support_set_rows; + void* f32_zero_cache = nullptr; + void* f32_one_cache = nullptr; + int64_t f32_zero_cache_element = 0; + int64_t f32_one_cache_element = 0; aclrtStream streams[GGML_CANN_MAX_STREAMS] = {nullptr}; /**< Array of streams for the device. */ From e288693669cf9d0a71e2f2b8bd57305f06340257 Mon Sep 17 00:00:00 2001 From: Tarek Dakhran Date: Fri, 22 Aug 2025 09:29:08 +0200 Subject: [PATCH 073/174] readme : model : mtdm : lfm2 improvements (#15476) * Support untied embeddings * Increase number of image tokens to 1024 * Add LFM2-VL to readme * Actually use untied embeddings --- README.md | 1 + gguf-py/gguf/constants.py | 1 + src/llama-arch.cpp | 1 + src/llama-model.cpp | 10 +++++++--- tools/mtmd/clip.cpp | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8446756384..a01ef6d503 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ Instructions for adding support for new models: [HOWTO-add-model.md](docs/develo - [x] [Bunny](https://github.com/BAAI-DCAI/Bunny) - [x] [GLM-EDGE](https://huggingface.co/models?search=glm-edge) - [x] [Qwen2-VL](https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d) +- [x] [LFM2-VL](https://huggingface.co/collections/LiquidAI/lfm2-vl-68963bbc84a610f7638d5ffa) diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 41804f3a2b..61ebe6e5e7 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -2590,6 +2590,7 @@ MODEL_TENSORS: dict[MODEL_ARCH, list[MODEL_TENSOR]] = { MODEL_TENSOR.ATTN_K, MODEL_TENSOR.ATTN_V, MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.OUTPUT, ], MODEL_ARCH.SMALLTHINKER: [ MODEL_TENSOR.TOKEN_EMBD, diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index 18dcc6ddfe..c759a9c6d9 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -2010,6 +2010,7 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_SHORTCONV_OUTPROJ, "blk.%d.shortconv.out_proj" }, { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, { LLM_TENSOR_TOKEN_EMBD_NORM, "token_embd_norm" }, + { LLM_TENSOR_OUTPUT, "output" }, } }, { diff --git a/src/llama-model.cpp b/src/llama-model.cpp index c4f0b12f24..3c8440a8f6 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -5474,8 +5474,13 @@ bool llama_model::load_tensors(llama_model_loader & ml) { } break; case LLM_ARCH_LFM2: { - tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); + tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); tok_norm = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, 0); + output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED); + + if (output == NULL) { + output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); + } for (int i = 0; i < n_layer; ++i) { auto & layer = layers[i]; @@ -17787,8 +17792,7 @@ struct llm_build_lfm2 : public llm_graph_context { cb(cur, "model.embedding_norm", -1); res->t_embd = cur; - // lm_head is tied with embeddings - cur = build_lora_mm(model.tok_embd, cur); + cur = build_lora_mm(model.output, cur); cb(cur, "lm_head", -1); res->t_logits = cur; diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index 1676c32836..b3628db64f 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -3513,7 +3513,7 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, str const int height = img->ny; const int total_factor = params.patch_size * params.proj_scale_factor; constexpr int min_image_tokens = 64; - constexpr int max_image_tokens = 256; + constexpr int max_image_tokens = 1024; const float min_pixels = min_image_tokens * total_factor * total_factor; const float max_pixels = max_image_tokens * total_factor * total_factor; From 4afb0a746f22abaa545b3ebdb76a400d7da3a713 Mon Sep 17 00:00:00 2001 From: 65a <10104049+65a@users.noreply.github.com> Date: Fri, 22 Aug 2025 08:10:14 +0000 Subject: [PATCH 074/174] server : Support multimodal completion and embeddings prompts in JSON format (#15108) - Use server_tokens in more places in server and util.cpp - Convert most functions that used llama_tokens to server_tokens - Modify input tokenizer to handle JSON objects as subprompts - Break out MTMD prompt parsing into utility function - Support JSON objects with multimodal_data arrays for MTMD prompts along with other existing types - Add capability to model endpoint to indicate if client can send multimodal data - Add tests. --- tools/server/README.md | 17 +- tools/server/server.cpp | 77 ++----- tools/server/tests/unit/test_completion.py | 38 ++++ tools/server/tests/unit/test_vision_api.py | 93 +++++++- tools/server/utils.hpp | 236 ++++++++++++++------- 5 files changed, 323 insertions(+), 138 deletions(-) diff --git a/tools/server/README.md b/tools/server/README.md index af9264ddd3..86844225ff 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -226,6 +226,10 @@ services: ### Multimodal support Multimodal support was added in [#12898](https://github.com/ggml-org/llama.cpp/pull/12898) and is currently an experimental feature. +It is currently available in the following endpoints: +- The OAI-compatible chat endpoint. +- The non-OAI-compatible completions endpoint. +- The non-OAI-compatible embeddings endpoint. For more details, please refer to [multimodal documentation](../../docs/multimodal.md) @@ -400,12 +404,15 @@ These input shapes and data type are allowed for `prompt`: - Single string: `"string"` - Single sequence of tokens: `[12, 34, 56]` - Mixed tokens and strings: `[12, 34, "string", 56, 78]` + - A JSON object which optionally contains multimodal data: `{ "prompt_string": "string", "multimodal_data": ["base64"] }` Multiple prompts are also supported. In this case, the completion result will be an array. - Only strings: `["string1", "string2"]` - - Strings and sequences of tokens: `["string1", [12, 34, 56]]` - - Mixed types: `[[12, 34, "string", 56, 78], [12, 34, 56], "string"]` + - Strings, JSON objects, and sequences of tokens: `["string1", [12, 34, 56], { "prompt_string": "string", "multimodal_data": ["base64"]}]` + - Mixed types: `[[12, 34, "string", 56, 78], [12, 34, 56], "string", { "prompt_string": "string" }]` + +Note for `multimodal_data` in JSON object prompts. This should be an array of strings, containing base64 encoded multimodal data such as images and audio. There must be an identical number of MTMD media markers in the string prompt element which act as placeholders for the data provided to this parameter. The multimodal data files will be substituted in order. The marker string (e.g. `<__media__>`) can be found by calling `mtmd_default_marker()` defined in [the MTMD C API](https://github.com/ggml-org/llama.cpp/blob/5fd160bbd9d70b94b5b11b0001fd7f477005e4a0/tools/mtmd/mtmd.h#L87). A client *must not* specify this field unless the server has the multimodal capability. Clients should check `/models` or `/v1/models` for the `multimodal` capability before a multimodal request. `temperature`: Adjust the randomness of the generated text. Default: `0.8` @@ -477,8 +484,6 @@ These words will not be included in the completion, so make sure to add them to `t_max_predict_ms`: Set a time limit in milliseconds for the prediction (a.k.a. text-generation) phase. The timeout will trigger if the generation takes more than the specified time (measured since the first token was generated) and if a new-line character has already been generated. Useful for FIM applications. Default: `0`, which is disabled. -`image_data`: An array of objects to hold base64-encoded image `data` and its `id`s to be reference in `prompt`. You can determine the place of the image in the prompt as in the following: `USER:[img-12]Describe the image in detail.\nASSISTANT:`. In this case, `[img-12]` will be replaced by the embeddings of the image with id `12` in the following `image_data` array: `{..., "image_data": [{"data": "", "id": 12}]}`. Use `image_data` only with multimodal models, e.g., LLaVA. - `id_slot`: Assign the completion task to an specific slot. If is -1 the task will be assigned to a Idle slot. Default: `-1` `cache_prompt`: Re-use KV cache from a previous request if possible. This way the common prefix does not have to be re-processed, only the suffix that differs between the requests. Because (depending on the backend) the logits are **not** guaranteed to be bit-for-bit identical for different batch sizes (prompt processing vs. token generation) enabling this option can cause nondeterministic results. Default: `true` @@ -638,12 +643,12 @@ Returns a JSON object with a field `prompt` containing a string of the input mes The same as [the embedding example](../embedding) does. +This endpoint also supports multimodal embeddings. See the documentation for the `/completions` endpoint for details on how to send a multimodal prompt. + *Options:* `content`: Set the text to process. -`image_data`: An array of objects to hold base64-encoded image `data` and its `id`s to be reference in `content`. You can determine the place of the image in the content as in the following: `Image: [img-21].\nCaption: This is a picture of a house`. In this case, `[img-21]` will be replaced by the embeddings of the image with id `21` in the following `image_data` array: `{..., "image_data": [{"data": "", "id": 21}]}`. Use `image_data` only with multimodal models, e.g., LLaVA. - `embd_normalize`: Normalization for pooled embeddings. Can be one of the following values: ``` -1: No normalization diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 35b060674b..6eb5aeb582 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -4309,6 +4309,7 @@ int main(int argc, char ** argv) { }; const auto handle_api_show = [&ctx_server, &res_ok](const httplib::Request &, httplib::Response & res) { + bool has_mtmd = ctx_server.mctx != nullptr; json data = { { "template", common_chat_templates_source(ctx_server.chat_templates.get()), @@ -4330,7 +4331,7 @@ int main(int argc, char ** argv) { {"quantization_level", ""} }}, {"model_info", ""}, - {"capabilities", {"completion"}} + {"capabilities", has_mtmd ? json({"completion","multimodal"}) : json({"completion"})} }; res_ok(res, data); @@ -4356,56 +4357,15 @@ int main(int argc, char ** argv) { // TODO: this log can become very long, put it behind a flag or think about a more compact format //SRV_DBG("Prompt: %s\n", prompt.is_string() ? prompt.get().c_str() : prompt.dump(2).c_str()); - // process files - mtmd::bitmaps bitmaps; - const bool has_mtmd = ctx_server.mctx != nullptr; - { - if (!has_mtmd && !files.empty()) { - throw std::runtime_error("This server does not support multimodal"); - } - for (auto & file : files) { - mtmd::bitmap bmp(mtmd_helper_bitmap_init_from_buf(ctx_server.mctx, file.data(), file.size())); - if (!bmp.ptr) { - throw std::runtime_error("Failed to load image or audio file"); - } - // calculate bitmap hash (for KV caching) - std::string hash = fnv_hash(bmp.data(), bmp.n_bytes()); - bmp.set_id(hash.c_str()); - bitmaps.entries.push_back(std::move(bmp)); - } - } - // process prompt std::vector inputs; - if (oaicompat && has_mtmd) { - // multimodal - std::string prompt_str = prompt.get(); - mtmd_input_text inp_txt = { - prompt_str.c_str(), - /* add_special */ true, - /* parse_special */ true, - }; - mtmd::input_chunks chunks(mtmd_input_chunks_init()); - auto bitmaps_c_ptr = bitmaps.c_ptr(); - int32_t tokenized = mtmd_tokenize(ctx_server.mctx, - chunks.ptr.get(), - &inp_txt, - bitmaps_c_ptr.data(), - bitmaps_c_ptr.size()); - if (tokenized != 0) { - throw std::runtime_error("Failed to tokenize prompt"); - } - - server_tokens tmp(chunks, true); - inputs.push_back(std::move(tmp)); + if (oaicompat && ctx_server.mctx != nullptr) { + // This is the case used by OAI compatible chat path with MTMD. TODO It can be moved to the path below. + inputs.push_back(process_mtmd_prompt(ctx_server.mctx, prompt.get(), files)); } else { - // non-multimodal version - auto tokenized_prompts = tokenize_input_prompts(ctx_server.vocab, prompt, true, true); - for (auto & p : tokenized_prompts) { - auto tmp = server_tokens(p, ctx_server.mctx != nullptr); - inputs.push_back(std::move(tmp)); - } + // Everything else, including multimodal completions. + inputs = tokenize_input_prompts(ctx_server.vocab, ctx_server.mctx, prompt, true, true); } tasks.reserve(inputs.size()); @@ -4574,7 +4534,7 @@ int main(int argc, char ** argv) { data["input_extra"] = input_extra; // default to empty array if it's not exist std::string prompt = json_value(data, "prompt", std::string()); - std::vector tokenized_prompts = tokenize_input_prompts(ctx_server.vocab, prompt, false, true); + std::vector tokenized_prompts = tokenize_input_prompts(ctx_server.vocab, ctx_server.mctx, prompt, false, true); SRV_DBG("creating infill tasks, n_prompts = %d\n", (int) tokenized_prompts.size()); data["prompt"] = format_infill( ctx_server.vocab, @@ -4585,7 +4545,7 @@ int main(int argc, char ** argv) { ctx_server.params_base.n_predict, ctx_server.slots[0].n_ctx, // TODO: there should be a better way ctx_server.params_base.spm_infill, - tokenized_prompts[0] + tokenized_prompts[0].get_text_tokens() // TODO: this could maybe be multimodal. ); std::vector files; // dummy @@ -4634,7 +4594,7 @@ int main(int argc, char ** argv) { if (current_state == SERVER_STATE_READY) { model_meta = ctx_server.model_meta(); } - + bool has_mtmd = ctx_server.mctx != nullptr; json models = { {"models", { { @@ -4646,7 +4606,7 @@ int main(int argc, char ** argv) { {"type", "model"}, {"description", ""}, {"tags", {""}}, - {"capabilities", {"completion"}}, + {"capabilities", has_mtmd ? json({"completion","multimodal"}) : json({"completion"})}, {"parameters", ""}, {"details", { {"parent_model", ""}, @@ -4763,7 +4723,7 @@ int main(int argc, char ** argv) { } } - auto tokenized_prompts = tokenize_input_prompts(ctx_server.vocab, prompt, true, true); + auto tokenized_prompts = tokenize_input_prompts(ctx_server.vocab, ctx_server.mctx, prompt, true, true); for (const auto & tokens : tokenized_prompts) { // this check is necessary for models that do not add BOS token to the input if (tokens.empty()) { @@ -4791,7 +4751,7 @@ int main(int argc, char ** argv) { task.id = ctx_server.queue_tasks.get_new_id(); task.index = i; - task.prompt_tokens = server_tokens(tokenized_prompts[i], ctx_server.mctx != nullptr); + task.prompt_tokens = std::move(tokenized_prompts[i]); // OAI-compat task.params.oaicompat = oaicompat; @@ -4878,7 +4838,10 @@ int main(int argc, char ** argv) { return; } - llama_tokens tokenized_query = tokenize_input_prompts(ctx_server.vocab, query, /* add_special */ false, true)[0]; + std::vector tokenized_queries = tokenize_input_prompts(ctx_server.vocab, ctx_server.mctx, query, /* add_special */ false, true); + if (tokenized_queries.size() != 1) { + res_error(res, format_error_response("\"query\" must contain only a single prompt", ERROR_TYPE_INVALID_REQUEST)); + } // create and queue the task json responses = json::array(); @@ -4886,14 +4849,14 @@ int main(int argc, char ** argv) { std::unordered_set task_ids; { std::vector tasks; - auto tokenized_docs = tokenize_input_prompts(ctx_server.vocab, documents, /* add_special */ false, true); + auto tokenized_docs = tokenize_input_prompts(ctx_server.vocab, ctx_server.mctx, documents, /* add_special */ false, true); tasks.reserve(tokenized_docs.size()); for (size_t i = 0; i < tokenized_docs.size(); i++) { - auto tmp = format_rerank(ctx_server.vocab, tokenized_query, tokenized_docs[i]); + auto tmp = format_rerank(ctx_server.vocab, tokenized_queries[0], tokenized_docs[i]); server_task task = server_task(SERVER_TASK_TYPE_RERANK); task.id = ctx_server.queue_tasks.get_new_id(); task.index = i; - task.prompt_tokens = server_tokens(tmp, ctx_server.mctx != nullptr); + task.prompt_tokens = std::move(tmp); tasks.push_back(std::move(task)); } diff --git a/tools/server/tests/unit/test_completion.py b/tools/server/tests/unit/test_completion.py index adb6f27864..11483e679a 100644 --- a/tools/server/tests/unit/test_completion.py +++ b/tools/server/tests/unit/test_completion.py @@ -6,6 +6,8 @@ from utils import * server = ServerPreset.tinyllama2() +JSON_MULTIMODAL_KEY = "multimodal_data" +JSON_PROMPT_STRING_KEY = "prompt_string" @pytest.fixture(autouse=True) def create_server(): @@ -231,6 +233,28 @@ def test_nocache_long_input_prompt(): }) assert res.status_code == 400 +def test_json_prompt_no_mtmd(): + global server + server.start() + res = server.make_request("POST", "/completion", data={ + "prompt": { JSON_PROMPT_STRING_KEY: "I believe the meaning of life is" }, + "seed": 42, + "temperature": 1.0, + "cache_prompt": False, + }) + assert res.status_code == 200 + +def test_json_prompt_mtm_error_when_not_supported(): + global server + server.start() + res = server.make_request("POST", "/completion", data={ + "prompt": { JSON_PROMPT_STRING_KEY: "I believe the meaning of life is <__media__>", JSON_MULTIMODAL_KEY: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=" }, + "seed": 42, + "temperature": 1.0, + "cache_prompt": False, + }) + # MTMD is disabled on this model, so this should fail. + assert res.status_code != 200 def test_completion_with_tokens_input(): global server @@ -269,6 +293,20 @@ def test_completion_with_tokens_input(): assert len(res.body) == 2 assert res.body[0]["content"] == res.body[1]["content"] + # mixed JSON and tokens + res = server.make_request("POST", "/completion", data={ + "prompt": [ + tokens, + { + JSON_PROMPT_STRING_KEY: "I believe the meaning of life is", + }, + ], + }) + assert res.status_code == 200 + assert type(res.body) == list + assert len(res.body) == 2 + assert res.body[0]["content"] == res.body[1]["content"] + # mixed string and tokens in one sequence res = server.make_request("POST", "/completion", data={ "prompt": [1, 2, 3, 4, 5, 6, prompt_str, 7, 8, 9, 10, prompt_str], diff --git a/tools/server/tests/unit/test_vision_api.py b/tools/server/tests/unit/test_vision_api.py index fc63caa134..36d14b3885 100644 --- a/tools/server/tests/unit/test_vision_api.py +++ b/tools/server/tests/unit/test_vision_api.py @@ -10,21 +10,48 @@ IMG_URL_1 = "https://huggingface.co/ggml-org/tinygemma3-GGUF/resolve/main/test/9 response = requests.get(IMG_URL_0) response.raise_for_status() # Raise an exception for bad status codes -IMG_BASE64_0 = "data:image/png;base64," + base64.b64encode(response.content).decode("utf-8") +IMG_BASE64_URI_0 = "data:image/png;base64," + base64.b64encode(response.content).decode("utf-8") +IMG_BASE64_0 = base64.b64encode(response.content).decode("utf-8") +response = requests.get(IMG_URL_1) +response.raise_for_status() # Raise an exception for bad status codes +IMG_BASE64_URI_1 = "data:image/png;base64," + base64.b64encode(response.content).decode("utf-8") +IMG_BASE64_1 = base64.b64encode(response.content).decode("utf-8") + +JSON_MULTIMODAL_KEY = "multimodal_data" +JSON_PROMPT_STRING_KEY = "prompt_string" @pytest.fixture(autouse=True) def create_server(): global server server = ServerPreset.tinygemma3() +def test_models_supports_multimodal_capability(): + global server + server.start() # vision model may take longer to load due to download size + res = server.make_request("GET", "/models", data={}) + assert res.status_code == 200 + model_info = res.body["models"][0] + print(model_info) + assert "completion" in model_info["capabilities"] + assert "multimodal" in model_info["capabilities"] + +def test_v1_models_supports_multimodal_capability(): + global server + server.start() # vision model may take longer to load due to download size + res = server.make_request("GET", "/v1/models", data={}) + assert res.status_code == 200 + model_info = res.body["models"][0] + print(model_info) + assert "completion" in model_info["capabilities"] + assert "multimodal" in model_info["capabilities"] @pytest.mark.parametrize( "prompt, image_url, success, re_content", [ # test model is trained on CIFAR-10, but it's quite dumb due to small size ("What is this:\n", IMG_URL_0, True, "(cat)+"), - ("What is this:\n", "IMG_BASE64_0", True, "(cat)+"), # exceptional, so that we don't cog up the log + ("What is this:\n", "IMG_BASE64_URI_0", True, "(cat)+"), # exceptional, so that we don't cog up the log ("What is this:\n", IMG_URL_1, True, "(frog)+"), ("Test test\n", IMG_URL_1, True, "(frog)+"), # test invalidate cache ("What is this:\n", "malformed", False, None), @@ -36,8 +63,8 @@ def create_server(): def test_vision_chat_completion(prompt, image_url, success, re_content): global server server.start(timeout_seconds=60) # vision model may take longer to load due to download size - if image_url == "IMG_BASE64_0": - image_url = IMG_BASE64_0 + if image_url == "IMG_BASE64_URI_0": + image_url = IMG_BASE64_URI_0 res = server.make_request("POST", "/chat/completions", data={ "temperature": 0.0, "top_k": 1, @@ -58,3 +85,61 @@ def test_vision_chat_completion(prompt, image_url, success, re_content): else: assert res.status_code != 200 + +@pytest.mark.parametrize( + "prompt, image_data, success, re_content", + [ + # test model is trained on CIFAR-10, but it's quite dumb due to small size + ("What is this: <__media__>\n", IMG_BASE64_0, True, "(cat)+"), + ("What is this: <__media__>\n", IMG_BASE64_1, True, "(frog)+"), + ("What is this: <__media__>\n", "malformed", False, None), # non-image data + ("What is this:\n", "", False, None), # empty string + ] +) +def test_vision_completion(prompt, image_data, success, re_content): + global server + server.start() # vision model may take longer to load due to download size + res = server.make_request("POST", "/completions", data={ + "temperature": 0.0, + "top_k": 1, + "prompt": { JSON_PROMPT_STRING_KEY: prompt, JSON_MULTIMODAL_KEY: [ image_data ] }, + }) + if success: + assert res.status_code == 200 + content = res.body["content"] + assert match_regex(re_content, content) + else: + assert res.status_code != 200 + + +@pytest.mark.parametrize( + "prompt, image_data, success", + [ + # test model is trained on CIFAR-10, but it's quite dumb due to small size + ("What is this: <__media__>\n", IMG_BASE64_0, True), # exceptional, so that we don't cog up the log + ("What is this: <__media__>\n", IMG_BASE64_1, True), + ("What is this: <__media__>\n", "malformed", False), # non-image data + ("What is this:\n", "base64", False), # non-image data + ] +) +def test_vision_embeddings(prompt, image_data, success): + global server + server.server_embeddings=True + server.n_batch=512 + server.start() # vision model may take longer to load due to download size + res = server.make_request("POST", "/embeddings", data={ + "content": [ + { JSON_PROMPT_STRING_KEY: prompt, JSON_MULTIMODAL_KEY: [ image_data ] }, + { JSON_PROMPT_STRING_KEY: prompt, JSON_MULTIMODAL_KEY: [ image_data ] }, + { JSON_PROMPT_STRING_KEY: prompt, }, + ], + }) + if success: + assert res.status_code == 200 + content = res.body + # Ensure embeddings are stable when multimodal. + assert content[0]['embedding'] == content[1]['embedding'] + # Ensure embeddings without multimodal but same prompt do not match multimodal embeddings. + assert content[0]['embedding'] != content[2]['embedding'] + else: + assert res.status_code != 200 diff --git a/tools/server/utils.hpp b/tools/server/utils.hpp index f3dfc8225d..036060bb3e 100644 --- a/tools/server/utils.hpp +++ b/tools/server/utils.hpp @@ -123,6 +123,19 @@ static bool json_is_array_of_mixed_numbers_strings(const json & data) { return false; } +// does array have any individual integers/tokens? +static bool json_is_array_and_contains_numbers(const json & data) { + if (data.is_array()) { + for (const auto & e : data) { + if (e.is_number_integer()) { + return true; + } + } + return false; + } + return false; +} + // get value by path(key1 / key2) static json json_get_nested_values(const std::vector & paths, const json & js) { json result = json::object(); @@ -186,48 +199,6 @@ static llama_tokens tokenize_mixed(const llama_vocab * vocab, const json & json_ return prompt_tokens; } -/** - * break the input "prompt" object into multiple prompt if needed, then tokenize them - * this supports these cases: - * - "prompt": "string" - * - "prompt": [12, 34, 56] - * - "prompt": [12, 34, "string", 56, 78] - * and multiple prompts (multi-tasks): - * - "prompt": ["string1", "string2"] - * - "prompt": ["string1", [12, 34, 56]] - * - "prompt": [[12, 34, 56], [78, 90, 12]] - * - "prompt": [[12, 34, "string", 56, 78], [12, 34, 56]] - */ -static std::vector tokenize_input_prompts(const llama_vocab * vocab, const json & json_prompt, bool add_special, bool parse_special) { - std::vector result; - if (json_prompt.is_string() || json_is_array_of_mixed_numbers_strings(json_prompt)) { - // string or mixed - result.push_back(tokenize_mixed(vocab, json_prompt, add_special, parse_special)); - } else if (json_is_array_of_numbers(json_prompt)) { - // array of tokens - result.push_back(json_prompt.get()); - } else if (json_prompt.is_array()) { - // array of prompts - result.reserve(json_prompt.size()); - for (const auto & p : json_prompt) { - if (p.is_string() || json_is_array_of_mixed_numbers_strings(p)) { - result.push_back(tokenize_mixed(vocab, p, add_special, parse_special)); - } else if (json_is_array_of_numbers(p)) { - // array of tokens - result.push_back(p.get()); - } else { - throw std::runtime_error("element of \"prompt\" must be a string, an list of tokens, or a list of mixed strings & tokens"); - } - } - } else { - throw std::runtime_error("\"prompt\" must be a string, an list of tokens, a list of mixed strings & tokens, or a list of prompts"); - } - if (result.empty()) { - throw std::runtime_error("\"prompt\" must not be empty"); - } - return result; -} - // return the last index of character that can form a valid string // if the last character is potentially cut in half, return the index before the cut // if validate_utf8(text) == text.size(), then the whole text is valid utf8 @@ -262,35 +233,6 @@ static size_t validate_utf8(const std::string& text) { // template utils // -// format rerank task: [BOS]query[EOS][SEP]doc[EOS] -static llama_tokens format_rerank(const struct llama_vocab * vocab, const llama_tokens & query, const llama_tokens & doc) { - llama_tokens result; - - // Get EOS token - use SEP token as fallback if EOS is not available - llama_token eos_token = llama_vocab_eos(vocab); - if (eos_token == LLAMA_TOKEN_NULL) { - eos_token = llama_vocab_sep(vocab); - } - - result.reserve(doc.size() + query.size() + 4); - if (llama_vocab_get_add_bos(vocab)) { - result.push_back(llama_vocab_bos(vocab)); - } - result.insert(result.end(), query.begin(), query.end()); - if (llama_vocab_get_add_eos(vocab)) { - result.push_back(eos_token); - } - if (llama_vocab_get_add_sep(vocab)) { - result.push_back(llama_vocab_sep(vocab)); - } - result.insert(result.end(), doc.begin(), doc.end()); - if (llama_vocab_get_add_eos(vocab)) { - result.push_back(eos_token); - } - - return result; -} - // format infill task static llama_tokens format_infill( const llama_vocab * vocab, @@ -1186,6 +1128,24 @@ public: } } + // appends server tokens, updates the media map. copies media chunks. + void push_back(server_tokens & tokens) { + size_t start_pos = size(); + for (size_t i = 0; i < tokens.size(); i++) { + push_back(tokens[i]); + } + if (tokens.has_mtmd) { + // Assert if we are copying MTMD chunks to a server_tokens that does not have mtmd. + // We could also just check, but this will prevent silently dropping MTMD data. + GGML_ASSERT(has_mtmd); + for (auto it = tokens.map_pos_to_media.begin(); it != tokens.map_pos_to_media.end(); ) { + auto chunk = tokens.map_pos_to_media[it->first].get(); + mtmd::input_chunk_ptr new_chunk(mtmd_input_chunk_copy(chunk)); + map_pos_to_media[start_pos+it->first] = std::move(new_chunk); + } + } + } + // for compatibility with context shift and prompt truncation void insert(const llama_tokens & inp_tokens) { GGML_ASSERT(!has_mtmd); // only allow this if mtmd is disabled @@ -1356,3 +1316,137 @@ static std::string fnv_hash(const uint8_t * data, size_t len) { } return std::to_string(hash); } + + +// format rerank task: [BOS]query[EOS][SEP]doc[EOS]. +static server_tokens format_rerank(const struct llama_vocab * vocab, server_tokens & query, server_tokens & doc) { + server_tokens result = {}; + + // Get EOS token - use SEP token as fallback if EOS is not available + llama_token eos_token = llama_vocab_eos(vocab); + if (eos_token == LLAMA_TOKEN_NULL) { + eos_token = llama_vocab_sep(vocab); + } + if (llama_vocab_get_add_bos(vocab)) { + result.push_back(llama_vocab_bos(vocab)); + } + result.push_back(query); + if (llama_vocab_get_add_eos(vocab)) { + result.push_back(eos_token); + } + if (llama_vocab_get_add_sep(vocab)) { + result.push_back(llama_vocab_sep(vocab)); + } + result.push_back(doc); + if (llama_vocab_get_add_eos(vocab)) { + result.push_back(eos_token); + } + return result; +} + + +static server_tokens process_mtmd_prompt(mtmd_context * mctx, std::string prompt, std::vector files) { + mtmd::bitmaps bitmaps; + for (auto & file : files) { + mtmd::bitmap bmp(mtmd_helper_bitmap_init_from_buf(mctx, file.data(), file.size())); + if (!bmp.ptr) { + throw std::runtime_error("Failed to load image or audio file"); + } + // calculate bitmap hash (for KV caching) + std::string hash = fnv_hash(bmp.data(), bmp.n_bytes()); + bmp.set_id(hash.c_str()); + bitmaps.entries.push_back(std::move(bmp)); + } + // process prompt + std::vector inputs; + // multimodal + mtmd_input_text inp_txt = { + prompt.c_str(), + /* add_special */ true, + /* parse_special */ true, + }; + mtmd::input_chunks chunks(mtmd_input_chunks_init()); + auto bitmaps_c_ptr = bitmaps.c_ptr(); + int32_t tokenized = mtmd_tokenize(mctx, + chunks.ptr.get(), + &inp_txt, + bitmaps_c_ptr.data(), + bitmaps_c_ptr.size()); + if (tokenized != 0) { + throw std::runtime_error("Failed to tokenize prompt"); + } + auto result = server_tokens(chunks, true); + return result; +} + +/** + * break the input "prompt" object into multiple prompt if needed, then tokenize them + * use tokenize_input_prompts() if the input could be an array. + * this supports these cases: + * - "prompt": "string" + * - "prompt": [12, 34, 56] + * - "prompt": [12, 34, "string", 56, 78] + * - "prompt": { "prompt_string": "string", "multimodal_data": [ "base64" ] } + */ +static server_tokens tokenize_input_subprompt(const llama_vocab * vocab, mtmd_context * mctx, const json & json_prompt, bool add_special, bool parse_special) { + constexpr char JSON_STRING_PROMPT_KEY[] = "prompt_string"; + constexpr char JSON_MTMD_DATA_KEY[] = "multimodal_data"; + const bool has_mtmd = mctx != nullptr; + if (json_prompt.is_string() || json_is_array_of_mixed_numbers_strings(json_prompt)) { + // string or mixed + llama_tokens tmp = tokenize_mixed(vocab, json_prompt, add_special, parse_special); + return server_tokens(tmp, false); + } else if (json_is_array_of_numbers(json_prompt)) { + // array of tokens + llama_tokens tmp = json_prompt.get(); + return server_tokens(tmp, false); + } else if (json_prompt.contains(JSON_STRING_PROMPT_KEY)) { + // JSON object with prompt key. + if (json_prompt.contains(JSON_MTMD_DATA_KEY)) { + if (!has_mtmd) + throw std::runtime_error("Multimodal data provided, but model does not support multimodal requests."); + + // JSON object with prompt and multimodal key. + std::vector files; + for (const auto & entry : json_prompt.at(JSON_MTMD_DATA_KEY)) { + files.push_back(base64_decode(entry)); + } + return process_mtmd_prompt(mctx, json_prompt.at(JSON_STRING_PROMPT_KEY), files); + } else { + // Not multimodal, but contains a subobject. + llama_tokens tmp = tokenize_mixed(vocab, json_prompt.at(JSON_STRING_PROMPT_KEY), add_special, parse_special); + return server_tokens(tmp, false); + } + } else { + throw std::runtime_error("\"prompt\" elements must be a string, a list of tokens, a JSON object containing a prompt string, or a list of mixed strings & tokens."); + } +} + +/** + * break the input "prompt" object into multiple prompt if needed, then tokenize them + * this supports these cases: + * - "prompt": "string" + * - "prompt": [12, 34, 56] + * - "prompt": [12, 34, "string", 56, 78] + * - "prompt": { "prompt_string": "string", "multimodal_data": [ "base64" ] } + * and multiple prompts (multi-tasks): + * - "prompt": ["string1", "string2"] + * - "prompt": ["string1", [12, 34, 56]] + * - "prompt": [[12, 34, 56], [78, 90, 12]] + * - "prompt": [[12, 34, "string", 56, 78], [12, 34, 56], { "prompt_string": "string", "multimodal_data": [ "base64" ]}] + */ +static std::vector tokenize_input_prompts(const llama_vocab * vocab, mtmd_context * mctx, const json & json_prompt, bool add_special, bool parse_special) { + std::vector result; + if (json_prompt.is_array() && !json_is_array_and_contains_numbers(json_prompt)) { + result.reserve(json_prompt.size()); + for (const auto & p : json_prompt) { + result.push_back(tokenize_input_subprompt(vocab, mctx, p,add_special, parse_special)); + } + } else { + result.push_back(tokenize_input_subprompt(vocab, mctx, json_prompt, add_special, parse_special)); + } + if (result.empty()) { + throw std::runtime_error("\"prompt\" must not be empty"); + } + return result; +} From ad5c975c2d0297124fad210776ef8eed6b90d578 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Fri, 22 Aug 2025 16:11:04 +0800 Subject: [PATCH 075/174] ggml-cpu: Support Q5_0 and Q5_1 on s390x (#15486) * ggml-cpu: initial q5_0 impl for s390x Signed-off-by: Aaron Teo * ggml-cpu: updated q5_0 code for better performance Signed-off-by: Aaron Teo * ggml-cpu: use optimised hsum for better performance Signed-off-by: Aaron Teo * ggml-cpu: introduce q5_1 simd + refactor q5_0 Signed-off-by: Aaron Teo * ggml-cpu: fix incorrect return type vec_hsum Signed-off-by: Aaron Teo * ggml-cpu: q5_0 incomplete refactor + table_b2b_0 activation Signed-off-by: Aaron Teo * ggml-cpu: refactor q5_1 Signed-off-by: Aaron Teo * ggml-cpu: q5_1 update loop unroll to 4 Signed-off-by: Aaron Teo * ggml-cpu: update q5_0 unroll to 4 Signed-off-by: Aaron Teo * ggml-cpu: update build-s390x docs Signed-off-by: Aaron Teo * ggml-cpu: update unused variables q5_0 Signed-off-by: Aaron Teo * docs: update the last update date Signed-off-by: Aaron Teo --------- Signed-off-by: Aaron Teo --- docs/build-s390x.md | 7 +- ggml/src/ggml-cpu/arch-fallback.h | 2 - ggml/src/ggml-cpu/arch/s390/quants.c | 316 +++++++++++++++++++++++++++ ggml/src/ggml-cpu/ggml-cpu-impl.h | 8 + 4 files changed, 328 insertions(+), 5 deletions(-) diff --git a/docs/build-s390x.md b/docs/build-s390x.md index b36a199814..f3cdd63be3 100644 --- a/docs/build-s390x.md +++ b/docs/build-s390x.md @@ -265,8 +265,9 @@ IBM VXE/VXE2 SIMD acceleration depends on the BLAS implementation. It is strongl | BF16 | 🚫 | 🚫 | ❓ | ❓ | | Q4_0 | ✅ | ✅ | ❓ | ❓ | | Q4_1 | ✅ | ✅ | ❓ | ❓ | -| Q5_0 | 🚫 | 🚫 | ❓ | ❓ | -| Q5_1 | 🚫 | 🚫 | ❓ | ❓ | +| MXFP4 | 🚫 | 🚫 | ❓ | ❓ | +| Q5_0 | ✅ | ✅ | ❓ | ❓ | +| Q5_1 | ✅ | ✅ | ❓ | ❓ | | Q8_0 | ✅ | ✅ | ❓ | ❓ | | Q2_K | 🚫 | 🚫 | ❓ | ❓ | | Q3_K | ✅ | ✅ | ❓ | ❓ | @@ -291,4 +292,4 @@ IBM VXE/VXE2 SIMD acceleration depends on the BLAS implementation. It is strongl - 🚫 - acceleration unavailable, will still run using scalar implementation - ❓ - acceleration unknown, please contribute if you can test it yourself -Last Updated by **Aaron Teo (aaron.teo1@ibm.com)** on July 31, 2025. +Last Updated by **Aaron Teo (aaron.teo1@ibm.com)** on Aug 22, 2025. diff --git a/ggml/src/ggml-cpu/arch-fallback.h b/ggml/src/ggml-cpu/arch-fallback.h index 0bfb92df17..373408a9c0 100644 --- a/ggml/src/ggml-cpu/arch-fallback.h +++ b/ggml/src/ggml-cpu/arch-fallback.h @@ -150,8 +150,6 @@ #elif defined(__s390x__) // quants.c #define quantize_row_q8_K_generic quantize_row_q8_K -#define ggml_vec_dot_q5_0_q8_0_generic ggml_vec_dot_q5_0_q8_0 -#define ggml_vec_dot_q5_1_q8_1_generic ggml_vec_dot_q5_1_q8_1 #define ggml_vec_dot_tq1_0_q8_K_generic ggml_vec_dot_tq1_0_q8_K #define ggml_vec_dot_tq2_0_q8_K_generic ggml_vec_dot_tq2_0_q8_K #define ggml_vec_dot_q2_K_q8_K_generic ggml_vec_dot_q2_K_q8_K diff --git a/ggml/src/ggml-cpu/arch/s390/quants.c b/ggml/src/ggml-cpu/arch/s390/quants.c index 7e4229d0e4..1c8176fb4d 100644 --- a/ggml/src/ggml-cpu/arch/s390/quants.c +++ b/ggml/src/ggml-cpu/arch/s390/quants.c @@ -23,6 +23,27 @@ #define UNUSED GGML_UNUSED +#if defined(__VXE__) || defined(__VXE2__) +#define B1(c,s,n) 0x ## n ## c , 0x ## n ## s +#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s) +#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s) +#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s) +#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s) +#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s) +#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s) +#define B8(c,s ) B7(c,s, c), B7(c,s, s) + +// precomputed tables for expanding 8bits to 8 bytes: +static const __attribute__((aligned(16))) uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b ) << 4 +static const __attribute__((aligned(16))) uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4 + +// permute mask for byteswapping +static const uint8x16_t v_kperm = (const uint8x16_t){ + 7, 6, 5, 4, 3, 2, 1, 0, + 15, 14, 13, 12, 11, 10, 9, 8 +}; +#endif + void quantize_row_q8_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k) { assert(QK8_0 == 32); assert(k % QK8_0 == 0); @@ -241,6 +262,301 @@ void ggml_vec_dot_q4_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const voi #endif } +void ggml_vec_dot_q5_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + const int qk = QK8_0; + const int nb = n / qk; + + assert(n % qk == 0); + assert(qk == QK5_0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q5_0 * GGML_RESTRICT x = vx; + const block_q8_0 * GGML_RESTRICT y = vy; + + int ib = 0; + float sumf = 0.0f; + +#if defined(__VXE__) || defined(__VXE2__) + float32x4_t v_sum0 = vec_splats(0.0f); + float32x4_t v_sum1 = vec_splats(0.0f); + + uint32_t qh0, qh1; + uint64_t tmp0[4], tmp1[4]; + + const uint8x16_t v_m = vec_splats((uint8_t)0x0F); + + #pragma GCC unroll 4 + for (; ib + 1 < nb; ib += 2) { + const block_q5_0 * GGML_RESTRICT x0 = &x[ib + 0]; + const block_q5_0 * GGML_RESTRICT x1 = &x[ib + 1]; + const block_q8_0 * GGML_RESTRICT y0 = &y[ib + 0]; + const block_q8_0 * GGML_RESTRICT y1 = &y[ib + 1]; + + memcpy(&qh0, x0->qh, sizeof(qh0)); + memcpy(&qh1, x1->qh, sizeof(qh1)); + + tmp0[0] = table_b2b_1[(qh0 >> 0) & 0xFF]; + tmp0[1] = table_b2b_1[(qh0 >> 8) & 0xFF]; + tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF]; + tmp0[3] = table_b2b_1[(qh0 >> 24) ]; + + tmp1[0] = table_b2b_1[(qh1 >> 0) & 0xFF]; + tmp1[1] = table_b2b_1[(qh1 >> 8) & 0xFF]; + tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF]; + tmp1[3] = table_b2b_1[(qh1 >> 24) ]; + + int8x16_t v_qh0l = vec_xl(0, (const int8_t *)(tmp0 + 0)); + int8x16_t v_qh0h = vec_xl(0, (const int8_t *)(tmp0 + 2)); + int8x16_t v_qh1l = vec_xl(0, (const int8_t *)(tmp1 + 0)); + int8x16_t v_qh1h = vec_xl(0, (const int8_t *)(tmp1 + 2)); + + // required for fixing the byteorder + v_qh0l = vec_perm(v_qh0l, v_qh0l, v_kperm); + v_qh0h = vec_perm(v_qh0h, v_qh0h, v_kperm); + v_qh1l = vec_perm(v_qh1l, v_qh1l, v_kperm); + v_qh1h = vec_perm(v_qh1h, v_qh1h, v_kperm); + + const uint8x16_t v_x0 = vec_xl(0, (const uint8_t *)x0->qs); + const uint8x16_t v_x1 = vec_xl(0, (const uint8_t *)x1->qs); + + int8x16_t v_x0l = (int8x16_t)vec_and(v_x0, v_m); + int8x16_t v_x0h = (int8x16_t)vec_sr(v_x0, 4); + int8x16_t v_x1l = (int8x16_t)vec_and(v_x1, v_m); + int8x16_t v_x1h = (int8x16_t)vec_sr(v_x1, 4); + + const int8x16_t v_x0lf = vec_sub(v_x0l, v_qh0l); + const int8x16_t v_x0hf = vec_sub(v_x0h, v_qh0h); + const int8x16_t v_x1lf = vec_sub(v_x1l, v_qh1l); + const int8x16_t v_x1hf = vec_sub(v_x1h, v_qh1h); + + const int8x16_t v_y0l = vec_xl(0, (const int8_t *)y0->qs); + const int8x16_t v_y0h = vec_xl(QK8_0/2, (const int8_t *)y0->qs); + const int8x16_t v_y1l = vec_xl(0, (const int8_t *)y1->qs); + const int8x16_t v_y1h = vec_xl(QK8_0/2, (const int8_t *)y1->qs); + + const int32x4_t v_xy0 = ggml_vec_dot(ggml_vec_dot(vec_splats(0), v_x0lf, v_y0l), v_x0hf, v_y0h); + const int32x4_t v_xy1 = ggml_vec_dot(ggml_vec_dot(vec_splats(0), v_x1lf, v_y1l), v_x1hf, v_y1h); + + const float32x4_t v_xy0f = vec_float(v_xy0); + const float32x4_t v_xy1f = vec_float(v_xy1); + + const float32x4_t v_d0 = vec_splats(GGML_CPU_FP16_TO_FP32(x0->d) * GGML_CPU_FP16_TO_FP32(y0->d)); + const float32x4_t v_d1 = vec_splats(GGML_CPU_FP16_TO_FP32(x1->d) * GGML_CPU_FP16_TO_FP32(y1->d)); + + v_sum0 = vec_madd(v_xy0f, v_d0, v_sum0); + v_sum1 = vec_madd(v_xy1f, v_d1, v_sum1); + } + + sumf += vec_hsum(v_sum0) + vec_hsum(v_sum1); + + #pragma GCC unroll 4 + for (; ib < nb; ++ib) { + const block_q5_0 * GGML_RESTRICT x0 = &x[ib]; + const block_q8_0 * GGML_RESTRICT y0 = &y[ib]; + + uint32_t qh; + memcpy(&qh, x0->qh, sizeof(qh)); + + uint64_t tmp[4]; + tmp[0] = table_b2b_1[(qh >> 0) & 0xFF]; + tmp[1] = table_b2b_1[(qh >> 8) & 0xFF]; + tmp[2] = table_b2b_1[(qh >> 16) & 0xFF]; + tmp[3] = table_b2b_1[(qh >> 24) ]; + + int8x16_t v_qhl = vec_xl(0, (const int8_t *)(tmp + 0)); + int8x16_t v_qhh = vec_xl(0, (const int8_t *)(tmp + 2)); + + // required for fixing the byteorder + v_qhl = vec_perm(v_qhl, v_qhl, v_kperm); + v_qhh = vec_perm(v_qhh, v_qhh, v_kperm); + + const uint8x16_t v_x = vec_xl(0, (const uint8_t *)x0->qs); + int8x16_t v_xl = (int8x16_t)vec_and(v_x, v_m); + int8x16_t v_xh = (int8x16_t)vec_sr(v_x, 4); + + const int8x16_t v_xlf = vec_sub(v_xl, v_qhl); + const int8x16_t v_xhf = vec_sub(v_xh, v_qhh); + + const int8x16_t v_yl = vec_xl(0, (const int8_t *)y0->qs); + const int8x16_t v_yh = vec_xl(QK8_0/2, (const int8_t *)y0->qs); + + const int32x4_t v_xy = ggml_vec_dot(ggml_vec_dot(vec_splats(0), v_xlf, v_yl), v_xhf, v_yh); + const float32x4_t v_xyf = vec_float(v_xy); + + const float32x4_t v_d = vec_splats(GGML_CPU_FP16_TO_FP32(x0->d) * GGML_CPU_FP16_TO_FP32(y0->d)); + const float32x4_t v_acc = vec_madd(v_xyf, v_d, vec_splats(0.0f)); + + sumf += vec_hsum(v_acc); + } + + *s = sumf; +#else + UNUSED(nb); + UNUSED(x); + UNUSED(y); + UNUSED(ib); + UNUSED(sumf); + ggml_vec_dot_q5_0_q8_0_generic(n, s, bs, vx, bx, vy, by, nrc); +#endif +} + +void ggml_vec_dot_q5_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + const int qk = QK8_1; + const int nb = n / qk; + + assert(n % qk == 0); + assert(qk == QK5_1); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q5_1 * GGML_RESTRICT x = vx; + const block_q8_1 * GGML_RESTRICT y = vy; + + int ib = 0; + float sumf = 0.0f; + +#if defined(__VXE__) || defined(__VXE2__) + float32x4_t v_sum0 = vec_splats(0.0f); + float32x4_t v_sum1 = vec_splats(0.0f); + + float summs0 = 0.0f; + float summs1 = 0.0f; + + uint32_t qh0; + uint32_t qh1; + + uint64_t tmp0[4]; + uint64_t tmp1[4]; + + const uint8x16_t v_m = vec_splats((uint8_t)0x0F); + + #pragma GCC unroll 4 + for (; ib + 1 < nb; ib += 2) { + const block_q5_1 * GGML_RESTRICT x0 = &x[ib + 0]; + const block_q5_1 * GGML_RESTRICT x1 = &x[ib + 1]; + const block_q8_1 * GGML_RESTRICT y0 = &y[ib + 0]; + const block_q8_1 * GGML_RESTRICT y1 = &y[ib + 1]; + + summs0 += GGML_CPU_FP16_TO_FP32(x0->m) * GGML_CPU_FP16_TO_FP32(y0->s); + summs1 += GGML_CPU_FP16_TO_FP32(x1->m) * GGML_CPU_FP16_TO_FP32(y1->s); + + memcpy(&qh0, x0->qh, sizeof(qh0)); + memcpy(&qh1, x1->qh, sizeof(qh1)); + + tmp0[0] = table_b2b_0[(qh0 >> 0) & 0xFF]; + tmp0[1] = table_b2b_0[(qh0 >> 8) & 0xFF]; + tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF]; + tmp0[3] = table_b2b_0[(qh0 >> 24) ]; + + tmp1[0] = table_b2b_0[(qh1 >> 0) & 0xFF]; + tmp1[1] = table_b2b_0[(qh1 >> 8) & 0xFF]; + tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF]; + tmp1[3] = table_b2b_0[(qh1 >> 24) ]; + + int8x16_t v_qh0l = vec_xl(0, (const int8_t *)(tmp0 + 0)); + int8x16_t v_qh0h = vec_xl(0, (const int8_t *)(tmp0 + 2)); + int8x16_t v_qh1l = vec_xl(0, (const int8_t *)(tmp1 + 0)); + int8x16_t v_qh1h = vec_xl(0, (const int8_t *)(tmp1 + 2)); + + // required for fixing the byteorder + v_qh0l = vec_perm(v_qh0l, v_qh0l, v_kperm); + v_qh0h = vec_perm(v_qh0h, v_qh0h, v_kperm); + v_qh1l = vec_perm(v_qh1l, v_qh1l, v_kperm); + v_qh1h = vec_perm(v_qh1h, v_qh1h, v_kperm); + + const uint8x16_t v_x0 = vec_xl(0, x0->qs); + const uint8x16_t v_x1 = vec_xl(0, x1->qs); + + const int8x16_t v_x0l = (int8x16_t)vec_and(v_x0, v_m); + const int8x16_t v_x0h = (int8x16_t)vec_sr(v_x0, 4); + const int8x16_t v_x1l = (int8x16_t)vec_and(v_x1, v_m); + const int8x16_t v_x1h = (int8x16_t)vec_sr(v_x1, 4); + + const int8x16_t v_x0lf = vec_or(v_x0l, v_qh0l); + const int8x16_t v_x0hf = vec_or(v_x0h, v_qh0h); + const int8x16_t v_x1lf = vec_or(v_x1l, v_qh1l); + const int8x16_t v_x1hf = vec_or(v_x1h, v_qh1h); + + const int8x16_t v_y0l = vec_xl(0 , y0->qs); + const int8x16_t v_y0h = vec_xl(QK8_1/2, y0->qs); + const int8x16_t v_y1l = vec_xl(0 , y1->qs); + const int8x16_t v_y1h = vec_xl(QK8_1/2, y1->qs); + + const int32x4_t v_xy0 = ggml_vec_dot(ggml_vec_dot(vec_splats(0), v_x0lf, v_y0l), v_x0hf, v_y0h); + const int32x4_t v_xy1 = ggml_vec_dot(ggml_vec_dot(vec_splats(0), v_x1lf, v_y1l), v_x1hf, v_y1h); + + const float32x4_t v_xy0f = vec_float(v_xy0); + const float32x4_t v_xy1f = vec_float(v_xy1); + + const float32x4_t v_d0 = vec_splats(GGML_CPU_FP16_TO_FP32(x0->d) * GGML_CPU_FP16_TO_FP32(y0->d)); + const float32x4_t v_d1 = vec_splats(GGML_CPU_FP16_TO_FP32(x1->d) * GGML_CPU_FP16_TO_FP32(y1->d)); + + v_sum0 = vec_madd(v_xy0f, v_d0, v_sum0); + v_sum1 = vec_madd(v_xy1f, v_d1, v_sum1); + } + + sumf += vec_hsum(v_sum0) + vec_hsum(v_sum1) + summs0 + summs1; + + #pragma GCC unroll 4 + for (; ib < nb; ++ib) { + const block_q5_1 * GGML_RESTRICT x0 = &x[ib]; + const block_q8_1 * GGML_RESTRICT y0 = &y[ib]; + + float summs = GGML_CPU_FP16_TO_FP32(x0->m) * GGML_CPU_FP16_TO_FP32(y0->s); + + uint32_t qh; + memcpy(&qh, x0->qh, sizeof(qh)); + + uint64_t tmp[4]; + tmp[0] = table_b2b_0[(qh >> 0) & 0xFF]; + tmp[1] = table_b2b_0[(qh >> 8) & 0xFF]; + tmp[2] = table_b2b_0[(qh >> 16) & 0xFF]; + tmp[3] = table_b2b_0[(qh >> 24) ]; + + int8x16_t v_qhl = vec_xl(0, (const int8_t *)(tmp + 0)); + int8x16_t v_qhh = vec_xl(0, (const int8_t *)(tmp + 2)); + + // required for fixing the byteorder + v_qhl = vec_perm(v_qhl, v_qhl, v_kperm); + v_qhh = vec_perm(v_qhh, v_qhh, v_kperm); + + const uint8x16_t v_x = vec_xl(0, x0->qs); + const int8x16_t v_xl = (int8x16_t)vec_and(v_x, v_m); + const int8x16_t v_xh = (int8x16_t)vec_sr(v_x, 4); + + const int8x16_t v_xlf = vec_or(v_xl, v_qhl); + const int8x16_t v_xhf = vec_or(v_xh, v_qhh); + + const int8x16_t v_yl = vec_xl(0 , y0->qs); + const int8x16_t v_yh = vec_xl(QK8_1/2, y0->qs); + + const int32x4_t v_xy = ggml_vec_dot(ggml_vec_dot(vec_splats(0), v_xlf, v_yl), v_xhf, v_yh); + const float32x4_t v_xyf = vec_float(v_xy); + + const float32x4_t v_d = vec_splats(GGML_CPU_FP16_TO_FP32(x0->d) * GGML_CPU_FP16_TO_FP32(y0->d)); + const float32x4_t v_acc = vec_madd(v_xyf, v_d, v_acc); + + sumf += vec_hsum(v_acc) + summs; + } + + *s = sumf; +#else + UNUSED(nb); + UNUSED(x); + UNUSED(y); + UNUSED(ib); + UNUSED(sumf); + ggml_vec_dot_q5_1_q8_1_generic(n, s, bs, vx, bx, vy, by, nrc); +#endif +} + void ggml_vec_dot_q8_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { const int qk = QK8_0; const int nb = n / qk; diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index d839cf5c55..1f6844e16c 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -486,6 +486,14 @@ inline static int16x8_t vec_padd_s16(int16x8_t a, int16x8_t b) { return v_abo + v_abe; } +/** + * @see https://github.com/ggml-org/llama.cpp/pull/14037 + */ +inline float vec_hsum(float32x4_t v) { + float32x4_t v_temp = v + vec_reve(v); + return v_temp[0] + v_temp[1]; +} + inline static int32x4_t ggml_vec_dot(int32x4_t acc, int8x16_t a, int8x16_t b) { const int16x8_t p = vec_mule(a, b) + vec_mulo(a, b); return acc + (vec_unpackh(p) + vec_unpackl(p)); From 9ebebef62fd0adf8685874f154e227ea87b7c6f4 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 22 Aug 2025 12:22:13 +0300 Subject: [PATCH 076/174] llama : remove KV cache defragmentation logic (#15473) ggml-ci --- common/arg.cpp | 6 +- common/common.cpp | 1 - common/common.h | 1 - examples/llama.vim | 2 +- include/llama.h | 2 +- scripts/compare-llama-bench.py | 1 - src/llama-context.cpp | 3 +- src/llama-cparams.h | 1 - src/llama-kv-cache.cpp | 367 +----------------------------- src/llama-kv-cache.h | 25 +- src/llama-kv-cells.h | 28 +-- src/llama-memory.h | 2 +- tools/llama-bench/README.md | 1 - tools/llama-bench/llama-bench.cpp | 29 +-- tools/server/README.md | 2 +- tools/server/bench/bench.py | 1 - 16 files changed, 32 insertions(+), 440 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 1227aeb2a3..81c4005c5e 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2254,9 +2254,11 @@ common_params_context common_params_parser_init(common_params & params, llama_ex ).set_examples({LLAMA_EXAMPLE_PERPLEXITY})); add_opt(common_arg( {"-dt", "--defrag-thold"}, "N", - string_format("KV cache defragmentation threshold (default: %.1f, < 0 - disabled)", (double)params.defrag_thold), + string_format("KV cache defragmentation threshold (DEPRECATED)"), [](common_params & params, const std::string & value) { - params.defrag_thold = std::stof(value); + GGML_UNUSED(params); + GGML_UNUSED(value); + LOG_WRN("DEPRECATED: --defrag-thold is deprecated and no longer necessary to specify\n"); } ).set_env("LLAMA_ARG_DEFRAG_THOLD")); add_opt(common_arg( diff --git a/common/common.cpp b/common/common.cpp index decabcc2ed..fdce1dcdec 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -1152,7 +1152,6 @@ struct llama_context_params common_context_params_to_llama(const common_params & cparams.yarn_orig_ctx = params.yarn_orig_ctx; cparams.pooling_type = params.pooling_type; cparams.attention_type = params.attention_type; - cparams.defrag_thold = params.defrag_thold; cparams.cb_eval = params.cb_eval; cparams.cb_eval_user_data = params.cb_eval_user_data; cparams.offload_kqv = !params.no_kv_offload; diff --git a/common/common.h b/common/common.h index 614e41a246..390dda5e53 100644 --- a/common/common.h +++ b/common/common.h @@ -288,7 +288,6 @@ struct common_params { float yarn_beta_fast = 32.0f; // YaRN low correction dim float yarn_beta_slow = 1.0f; // YaRN high correction dim int32_t yarn_orig_ctx = 0; // YaRN original context length - float defrag_thold = 0.1f; // KV cache defragmentation threshold // offload params std::vector devices; // devices to use for offloading diff --git a/examples/llama.vim b/examples/llama.vim index af3fd3935d..736802d365 100644 --- a/examples/llama.vim +++ b/examples/llama.vim @@ -17,7 +17,7 @@ " " start the llama.cpp server with a FIM-compatible model. for example: " -" $ llama-server -m {model.gguf} --port 8012 -ngl 99 -fa -dt 0.1 --ubatch-size 512 --batch-size 1024 --cache-reuse 256 +" $ llama-server -m {model.gguf} --port 8012 -ngl 99 -fa --ubatch-size 512 --batch-size 1024 --cache-reuse 256 " " --batch-size [512, model max context] " diff --git a/include/llama.h b/include/llama.h index 662e0971df..c5622cc16b 100644 --- a/include/llama.h +++ b/include/llama.h @@ -312,7 +312,7 @@ extern "C" { float yarn_beta_fast; // YaRN low correction dim float yarn_beta_slow; // YaRN high correction dim uint32_t yarn_orig_ctx; // YaRN original context size - float defrag_thold; // defragment the KV cache if holes/size > thold, <= 0 disabled (default) + float defrag_thold; // [DEPRECATED] defragment the KV cache if holes/size > thold, <= 0 disabled (default) ggml_backend_sched_eval_callback cb_eval; void * cb_eval_user_data; diff --git a/scripts/compare-llama-bench.py b/scripts/compare-llama-bench.py index 8366f89a08..0141e0a350 100755 --- a/scripts/compare-llama-bench.py +++ b/scripts/compare-llama-bench.py @@ -28,7 +28,6 @@ LLAMA_BENCH_DB_FIELDS = [ "model_type", "model_size", "model_n_params", "n_batch", "n_ubatch", "n_threads", "cpu_mask", "cpu_strict", "poll", "type_k", "type_v", "n_gpu_layers", "split_mode", "main_gpu", "no_kv_offload", "flash_attn", "tensor_split", "tensor_buft_overrides", - "defrag_thold", "use_mmap", "embeddings", "no_op_offload", "n_prompt", "n_gen", "n_depth", "test_time", "avg_ns", "stddev_ns", "avg_ts", "stddev_ts", ] diff --git a/src/llama-context.cpp b/src/llama-context.cpp index e8e8b3450a..18cf25079d 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -39,7 +39,6 @@ llama_context::llama_context( cparams.yarn_attn_factor = params.yarn_attn_factor; cparams.yarn_beta_fast = params.yarn_beta_fast; cparams.yarn_beta_slow = params.yarn_beta_slow; - cparams.defrag_thold = params.defrag_thold; cparams.embeddings = params.embeddings; cparams.offload_kqv = params.offload_kqv; cparams.flash_attn = params.flash_attn; @@ -978,7 +977,7 @@ int llama_context::decode(const llama_batch & batch_inp) { bool did_optimize = false; - // handle any pending defrags/shifts + // handle any pending shifts/copies memory_update(false); llama_memory_context_ptr mctx; diff --git a/src/llama-cparams.h b/src/llama-cparams.h index 38750affc5..dbbaba9f62 100644 --- a/src/llama-cparams.h +++ b/src/llama-cparams.h @@ -24,7 +24,6 @@ struct llama_cparams { float yarn_attn_factor; float yarn_beta_fast; float yarn_beta_slow; - float defrag_thold; bool embeddings; bool causal_attn; diff --git a/src/llama-kv-cache.cpp b/src/llama-kv-cache.cpp index bb490cf9e8..70ddd5f4b9 100644 --- a/src/llama-kv-cache.cpp +++ b/src/llama-kv-cache.cpp @@ -525,39 +525,11 @@ llama_memory_context_ptr llama_kv_cache::init_full() { } llama_memory_context_ptr llama_kv_cache::init_update(llama_context * lctx, bool optimize) { + GGML_UNUSED(optimize); + bool do_shift = get_has_shift(); - defrag_info dinfo; - - // see if we need to defrag - if (n_stream == 1) { - // note : for now do not consider defrag for n_stream > 1 - const auto & cells = v_cells[seq_to_stream[0]]; - - bool do_defrag = optimize; - - const auto thold = lctx->get_cparams().defrag_thold; - - if (!do_defrag && thold > 0.0f) { - const auto n_kv = cells.used_max_p1(); - - // - do not defrag small contexts (i.e. < 2048 tokens) - // - count the padding towards the number of used tokens - const float fragmentation = n_kv >= 2048 ? std::max(0.0f, 1.0f - (float(cells.get_used() + n_pad)/n_kv)) : 0.0f; - - if (fragmentation > thold) { - LLAMA_LOG_DEBUG("%s: fragmentation: %.2f - requesting defrag\n", __func__, fragmentation); - - do_defrag = true; - } - } - - if (do_defrag) { - dinfo = defrag_prepare(lctx->graph_max_nodes()); - } - } - - return std::make_unique(this, lctx, do_shift, std::move(dinfo), std::move(sc_info)); + return std::make_unique(this, lctx, do_shift, std::move(sc_info)); } llama_kv_cache::slot_info_vec_t llama_kv_cache::prepare(const std::vector & ubatches) { @@ -629,7 +601,7 @@ llama_kv_cache::slot_info_vec_t llama_kv_cache::prepare(const std::vectorget_sched(); @@ -699,53 +671,6 @@ bool llama_kv_cache::update(llama_context * lctx, bool do_shift, const defrag_in } } - if (!dinfo.empty()) { - LLAMA_LOG_DEBUG("%s: defragmenting KV cache\n", __func__); - - // note: for now do not consider defrag for n_stream > 1 - auto & cells = v_cells[seq_to_stream[0]]; - auto & head = v_heads[seq_to_stream[0]]; - - // apply moves: - { - const auto n_kv = dinfo.ids.size(); - - for (uint32_t i = 0; i < n_kv; ++i) { - assert(dinfo.ids[i] <= n_kv); - - if (dinfo.ids[i] == n_kv || dinfo.ids[i] == i) { - continue; - } - - cells.mv(i, dinfo.ids[i]); - } - - // reset the head so we can find the first free slot during the next ubatch - head = 0; - } - - ggml_backend_sched_reset(sched); - - auto * res = lctx->get_gf_res_reserve(); - - res->reset(); - - auto * gf = build_graph_defrag(res, lctx, dinfo); - if (!ggml_backend_sched_alloc_graph(sched, gf)) { - LLAMA_LOG_ERROR("%s: failed to allocate compute graph for defrag\n", __func__); - return updated; - } - - res->set_inputs(nullptr); - - if (lctx->graph_compute(gf, false) != GGML_STATUS_SUCCESS) { - LLAMA_LOG_ERROR("%s: failed to compute defrag\n", __func__); - return updated; - } - - updated = true; - } - return updated; } @@ -1525,283 +1450,6 @@ ggml_cgraph * llama_kv_cache::build_graph_shift(llm_graph_result * res, llama_co return gf; } -ggml_cgraph * llama_kv_cache::build_graph_defrag( - llm_graph_result * res, - llama_context * lctx, - const defrag_info & dinfo) const { - auto * ctx = res->get_ctx(); - auto * gf = res->get_gf(); - - GGML_ASSERT(n_stream == 1 && "n_stream > 1 does not support defrag"); - - const auto & cells = v_cells[0]; - - const auto & ids = dinfo.ids; - - const auto & cparams = lctx->get_cparams(); - -#if 0 - // CPU defrag - // - // TODO: optimizations are possible: - // - multiple threads - // - avoid copying to the host memory when already there - // - // likely not worth the effort, as we have ggml_graph based defrag - // - - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(); - - const uint32_t kv_size = size; - - std::vector buf_k; - std::vector buf_v; - - for (uint32_t il = 0; il < n_layer; ++il) { - const size_t k_size_row = ggml_row_size(k_l[il]->type, n_embd_k_gqa); - const size_t k_size = ggml_row_size(k_l[il]->type, n_embd_k_gqa*kv_size); - - const size_t v_size_el = ggml_type_size(v_l[il]->type); - const size_t v_size = ggml_row_size (v_l[il]->type, n_embd_v_gqa*kv_size); - - buf_k.resize(k_size); - buf_v.resize(v_size); - - ggml_backend_tensor_get(k_l[il], buf_k.data(), 0, buf_k.size()); - ggml_backend_tensor_get(v_l[il], buf_v.data(), 0, buf_v.size()); - - // batch move [i, i+nm) to [id, id+nm) - // note: cells can move only to a lower index - for (uint32_t i = 0; i < n_kv; ++i) { - const uint32_t id = ids[i]; - - if (i == id || id == n_kv) { - continue; - } - - uint32_t nm = 1; - - while (i + nm < n_kv && ids[i + nm] == id + nm) { - nm++; - } - - // move keys - { - const int64_t os = i*k_size_row; - const int64_t od = id*k_size_row; - - memcpy(buf_k.data() + od, buf_k.data() + os, nm*k_size_row); - } - - // move values (note: they are transposed) - { - const int64_t os = i; - const int64_t od = id; - - for (uint32_t j = 0; j < n_embd_v_gqa; ++j) { - memcpy(buf_v.data() + (od + j*kv_size)*v_size_el, buf_v.data() + (os + j*kv_size)*v_size_el, nm*v_size_el); - } - } - - i += nm - 1; - } - - ggml_backend_tensor_set(k_l[il], buf_k.data(), 0, buf_k.size()); - ggml_backend_tensor_set(v_l[il], buf_v.data(), 0, buf_v.size()); - } -#else - for (uint32_t i = 0; i < ids.size(); ++i) { - const uint32_t id = ids[i]; - - if (i == id || id == ids.size()) { - continue; - } - - uint32_t nm = 1; - - while (i + nm < ids.size() && ids[i + nm] == id + nm) { - nm++; - } - - for (const auto & layer : layers) { - const uint32_t il = layer.il; - - const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(il); - const int64_t n_embd_v_gqa = hparams.n_embd_v_gqa(il); - - ggml_tensor * view_k_src = ggml_view_2d(ctx, layer.k, - n_embd_k_gqa, nm, - ggml_row_size(layer.k->type, n_embd_k_gqa), - ggml_row_size(layer.k->type, n_embd_k_gqa*i)); - - ggml_tensor * view_k_dst = ggml_view_2d(ctx, layer.k, - n_embd_k_gqa, nm, - ggml_row_size(layer.k->type, n_embd_k_gqa), - ggml_row_size(layer.k->type, n_embd_k_gqa*id)); - - ggml_tensor * view_v_src; - ggml_tensor * view_v_dst; - - if (cparams.flash_attn) { - // NOTE: the V cache is not transposed when using flash attention - view_v_src = ggml_view_2d(ctx, layer.v, - n_embd_v_gqa, nm, - ggml_row_size(layer.v->type, n_embd_v_gqa), - ggml_row_size(layer.v->type, n_embd_v_gqa*i)); - - view_v_dst = ggml_view_2d(ctx, layer.v, - n_embd_v_gqa, nm, - ggml_row_size(layer.v->type, n_embd_v_gqa), - ggml_row_size(layer.v->type, n_embd_v_gqa*id)); - } else { - view_v_src = ggml_view_2d(ctx, layer.v, - nm, n_embd_v_gqa, - ggml_row_size(layer.v->type, cells.size()), - ggml_row_size(layer.v->type, i)); - - view_v_dst = ggml_view_2d(ctx, layer.v, - nm, n_embd_v_gqa, - ggml_row_size(layer.v->type, cells.size()), - ggml_row_size(layer.v->type, id)); - } - - ggml_build_forward_expand(gf, ggml_cpy(ctx, view_k_src, view_k_dst)); - ggml_build_forward_expand(gf, ggml_cpy(ctx, view_v_src, view_v_dst)); - } - - i += nm - 1; - } - - //LLAMA_LOG_INFO("gf->n_nodes = %d\n", gf->n_nodes); -#endif - - return gf; -} - -llama_kv_cache::defrag_info llama_kv_cache::defrag_prepare(int32_t n_max_nodes) const { - GGML_ASSERT(n_stream == 1 && "n_stream > 1 does not support defrag"); - - const auto & cells = v_cells[0]; - - const uint32_t n_layer = layers.size(); - - const uint32_t n_kv = cells.used_max_p1(); - const uint32_t n_used = cells.get_used(); - - assert(n_used <= n_kv); - - //const int64_t t_start = ggml_time_us(); - - // number of cells moved - uint32_t n_moves = 0; - - // each move requires 6*n_layer tensors (see graph_build_kv_self_defrag) - // - source view, destination view, copy operation - // - x2 for keys and values - //const uint32_t max_moves = max_nodes()/(6*n_layer); - // TODO: tmp fix https://github.com/ggerganov/llama.cpp/issues/6685#issuecomment-2057579516 - const uint32_t max_moves = (n_max_nodes - 2*n_layer)/(6*n_layer); - - // determine which KV cells to move where - defrag_info res; - auto & ids = res.ids; - - ids.resize(n_kv, n_kv); - - for (uint32_t i0 = 0; i0 < n_used; ++i0) { - if (!cells.is_empty(i0)) { - ids[i0] = i0; - - continue; - } - - // found a hole - fill it with data from the end of the cache - - uint32_t nh = 1; - - // determine the size of the hole - while (i0 + nh < n_used && cells.is_empty(i0 + nh)) { - nh++; - } - - uint32_t nf = 0; - uint32_t is = n_kv - 1; - - // starting from the end, find nh non-empty cells - for (; is > i0; --is) { - if (cells.is_empty(is) || ids[is] != n_kv) { - continue; - } - - // non-empty cell which is not yet moved - nf++; - - if (nf == nh) { - break; - } - } - - // this can only happen if `n_used` is not accurate, which would be a bug - GGML_ASSERT(nf == nh && "KV defrag bug: nf != nh"); - - nf = 0; - - uint32_t i1 = is; - - // are we moving a continuous block of memory? - bool cont = false; - - // should we stop searching for the next move? - bool stop = false; - - // go back and move the nf cells to the hole - for (; i1 < n_kv; ++i1) { - if (cells.is_empty(i1) || ids[i1] != n_kv) { - if (n_moves == max_moves) { - stop = true; - break; - } - - cont = false; - continue; - } - - // this cell goes to (i0 + nf) - ids[i1] = i0 + nf; - - if (!cont) { - n_moves++; - cont = true; - } - - nf++; - - if (nf == nh) { - break; - } - } - - if (stop || n_moves == max_moves) { - break; - } - - //LLAMA_LOG_INFO("(tmp log) KV defrag: move [%u, %u) to [%u, %u)\n", is, i1 + 1, i0, i0 + nh); - - i0 += nh - 1; - } - - if (n_moves == 0) { - return {}; - } - - LLAMA_LOG_DEBUG("%s: (tmp log) KV defrag cell moves: %u\n", __func__, n_moves); - - LLAMA_LOG_DEBUG("%s: expected gf nodes: %u\n", __func__, 6*n_moves*n_layer); - - return res; -} - bool llama_kv_cache::is_masked_swa(llama_pos p0, llama_pos p1) const { assert(p0 >= 0 && p1 >= 0); @@ -2300,9 +1948,8 @@ llama_kv_cache_context::llama_kv_cache_context( llama_kv_cache * kv, llama_context * lctx, bool do_shift, - defrag_info dinfo, - stream_copy_info sc_info) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv), lctx(lctx), do_shift(do_shift), dinfo(std::move(dinfo)), sc_info(std::move(sc_info)) { - if (!do_shift && this->dinfo.empty() && this->sc_info.empty()) { + stream_copy_info sc_info) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv), lctx(lctx), do_shift(do_shift), sc_info(std::move(sc_info)) { + if (!do_shift && this->sc_info.empty()) { status = LLAMA_MEMORY_STATUS_NO_UPDATE; } } @@ -2330,7 +1977,7 @@ bool llama_kv_cache_context::apply() { // no ubatches -> this is a KV cache update if (ubatches.empty()) { - kv->update(lctx, do_shift, dinfo, sc_info); + kv->update(lctx, do_shift, sc_info); return true; } diff --git a/src/llama-kv-cache.h b/src/llama-kv-cache.h index 5ca618e1b8..297a0973dd 100644 --- a/src/llama-kv-cache.h +++ b/src/llama-kv-cache.h @@ -24,17 +24,6 @@ public: // this callback is used to filter out layers that should not be included in the cache using layer_filter_cb = std::function; - struct defrag_info { - bool empty() const { - return ids.empty(); - } - - // contains information about which cell moves where: - // - cell i moves to ids[i] - // - if ids[i] == i || ids[i] == ids.size(), then cell i is not moved - std::vector ids; - }; - struct stream_copy_info { bool empty() const { assert(ssrc.size() == sdst.size()); @@ -173,7 +162,7 @@ public: // return empty vector on failure slot_info_vec_t prepare(const std::vector & ubatches); - bool update(llama_context * lctx, bool do_shift, const defrag_info & dinfo, const stream_copy_info & sc_info); + bool update(llama_context * lctx, bool do_shift, const stream_copy_info & sc_info); // find a slot of kv cells that can hold the ubatch // if cont == true, then the slot must be continuous @@ -254,9 +243,6 @@ private: // model layer id -> KV cache layer id std::unordered_map map_layer_ids; - // return non-empty vector if cells have been moved - defrag_info defrag_prepare(int32_t n_max_nodes) const; - size_t total_size() const; size_t size_k_bytes() const; @@ -277,11 +263,6 @@ private: llm_graph_result * res, llama_context * lctx) const; - ggml_cgraph * build_graph_defrag( - llm_graph_result * res, - llama_context * lctx, - const defrag_info & dinfo) const; - struct cell_ranges_t { uint32_t strm; @@ -299,7 +280,6 @@ class llama_kv_cache_context : public llama_memory_context_i { public: // some shorthands using slot_info_vec_t = llama_kv_cache::slot_info_vec_t; - using defrag_info = llama_kv_cache::defrag_info; using stream_copy_info = llama_kv_cache::stream_copy_info; // used for errors @@ -314,7 +294,6 @@ public: llama_kv_cache * kv, llama_context * lctx, bool do_shift, - defrag_info dinfo, stream_copy_info sc_info); // used to create a batch procesing context from a batch @@ -374,8 +353,6 @@ private: bool do_shift = false; - defrag_info dinfo; - stream_copy_info sc_info; // diff --git a/src/llama-kv-cells.h b/src/llama-kv-cells.h index 2651e30331..8f6bf01456 100644 --- a/src/llama-kv-cells.h +++ b/src/llama-kv-cells.h @@ -77,24 +77,24 @@ public: } // move cell isrc to idst (used during defrag) - void mv(uint32_t isrc, uint32_t idst) { - assert(isrc < pos.size()); - assert(idst < pos.size()); + //void mv(uint32_t isrc, uint32_t idst) { + // assert(isrc < pos.size()); + // assert(idst < pos.size()); - assert(pos[idst] == -1); - assert(pos[isrc] != -1); + // assert(pos[idst] == -1); + // assert(pos[isrc] != -1); - pos [idst] = pos [isrc]; - shift[idst] = shift[isrc]; - seq [idst] = seq [isrc]; + // pos [idst] = pos [isrc]; + // shift[idst] = shift[isrc]; + // seq [idst] = seq [isrc]; - pos [isrc] = -1; - shift[isrc] = 0; - seq [isrc].reset(); + // pos [isrc] = -1; + // shift[isrc] = 0; + // seq [isrc].reset(); - used.erase (isrc); - used.insert(idst); - } + // used.erase (isrc); + // used.insert(idst); + //} // copy the state of cells [i, i + n) (used for save/restore the state of the cells) llama_kv_cells cp(uint32_t i, uint32_t n) const { diff --git a/src/llama-memory.h b/src/llama-memory.h index 42a7145c2f..94d858bccc 100644 --- a/src/llama-memory.h +++ b/src/llama-memory.h @@ -77,7 +77,7 @@ struct llama_memory_i { // simulate full cache, used for allocating worst-case compute buffers virtual llama_memory_context_ptr init_full() = 0; - // prepare for any pending memory updates, such as shifts, defrags, etc. + // prepare for any pending memory updates, such as shifts, copies, etc. // status == LLAMA_MEMORY_STATUS_NO_UPDATE if there is nothing to update virtual llama_memory_context_ptr init_update(llama_context * lctx, bool optimize) = 0; diff --git a/tools/llama-bench/README.md b/tools/llama-bench/README.md index 31a2730874..bf7fd29c8c 100644 --- a/tools/llama-bench/README.md +++ b/tools/llama-bench/README.md @@ -43,7 +43,6 @@ test parameters: -ub, --ubatch-size (default: 512) -ctk, --cache-type-k (default: f16) -ctv, --cache-type-v (default: f16) - -dt, --defrag-thold (default: -1) -t, --threads (default: system dependent) -C, --cpu-mask (default: 0x0) --cpu-strict <0|1> (default: 0) diff --git a/tools/llama-bench/llama-bench.cpp b/tools/llama-bench/llama-bench.cpp index 10b48c5568..9378706a12 100644 --- a/tools/llama-bench/llama-bench.cpp +++ b/tools/llama-bench/llama-bench.cpp @@ -245,7 +245,6 @@ struct cmd_params { std::vector n_ubatch; std::vector type_k; std::vector type_v; - std::vector defrag_thold; std::vector n_threads; std::vector cpu_mask; std::vector cpu_strict; @@ -282,7 +281,6 @@ static const cmd_params cmd_params_defaults = { /* n_ubatch */ { 512 }, /* type_k */ { GGML_TYPE_F16 }, /* type_v */ { GGML_TYPE_F16 }, - /* defrag_thold */ { -1.0f }, /* n_threads */ { cpu_get_num_math() }, /* cpu_mask */ { "0x0" }, /* cpu_strict */ { false }, @@ -346,8 +344,6 @@ static void print_usage(int /* argc */, char ** argv) { join(transform_to_str(cmd_params_defaults.type_k, ggml_type_name), ",").c_str()); printf(" -ctv, --cache-type-v (default: %s)\n", join(transform_to_str(cmd_params_defaults.type_v, ggml_type_name), ",").c_str()); - printf(" -dt, --defrag-thold (default: %s)\n", - join(cmd_params_defaults.defrag_thold, ",").c_str()); printf(" -t, --threads (default: %s)\n", join(cmd_params_defaults.n_threads, ",").c_str()); printf(" -C, --cpu-mask (default: %s)\n", @@ -533,13 +529,6 @@ static cmd_params parse_cmd_params(int argc, char ** argv) { break; } params.type_v.insert(params.type_v.end(), types.begin(), types.end()); - } else if (arg == "-dt" || arg == "--defrag-thold") { - if (++i >= argc) { - invalid_param = true; - break; - } - auto p = string_split(argv[i], split_delim); - params.defrag_thold.insert(params.defrag_thold.end(), p.begin(), p.end()); } else if (arg == "-t" || arg == "--threads") { if (++i >= argc) { invalid_param = true; @@ -849,9 +838,6 @@ static cmd_params parse_cmd_params(int argc, char ** argv) { if (params.type_v.empty()) { params.type_v = cmd_params_defaults.type_v; } - if (params.defrag_thold.empty()) { - params.defrag_thold = cmd_params_defaults.defrag_thold; - } if (params.n_gpu_layers.empty()) { params.n_gpu_layers = cmd_params_defaults.n_gpu_layers; } @@ -910,7 +896,6 @@ struct cmd_params_instance { int n_ubatch; ggml_type type_k; ggml_type type_v; - float defrag_thold; int n_threads; std::string cpu_mask; bool cpu_strict; @@ -1007,7 +992,6 @@ struct cmd_params_instance { cparams.n_ubatch = n_ubatch; cparams.type_k = type_k; cparams.type_v = type_v; - cparams.defrag_thold = defrag_thold; cparams.offload_kqv = !no_kv_offload; cparams.flash_attn = flash_attn; cparams.embeddings = embeddings; @@ -1037,7 +1021,6 @@ static std::vector get_cmd_params_instances(const cmd_param for (const auto & nub : params.n_ubatch) for (const auto & tk : params.type_k) for (const auto & tv : params.type_v) - for (const auto & defrag_thold : params.defrag_thold) for (const auto & nkvo : params.no_kv_offload) for (const auto & fa : params.flash_attn) for (const auto & nt : params.n_threads) @@ -1058,7 +1041,6 @@ static std::vector get_cmd_params_instances(const cmd_param /* .n_ubatch = */ nub, /* .type_k = */ tk, /* .type_v = */ tv, - /* .defrag_thold = */ defrag_thold, /* .n_threads = */ nt, /* .cpu_mask = */ cm, /* .cpu_strict = */ cs, @@ -1091,7 +1073,6 @@ static std::vector get_cmd_params_instances(const cmd_param /* .n_ubatch = */ nub, /* .type_k = */ tk, /* .type_v = */ tv, - /* .defrag_thold = */ defrag_thold, /* .n_threads = */ nt, /* .cpu_mask = */ cm, /* .cpu_strict = */ cs, @@ -1124,7 +1105,6 @@ static std::vector get_cmd_params_instances(const cmd_param /* .n_ubatch = */ nub, /* .type_k = */ tk, /* .type_v = */ tv, - /* .defrag_thold = */ defrag_thold, /* .n_threads = */ nt, /* .cpu_mask = */ cm, /* .cpu_strict = */ cs, @@ -1166,7 +1146,6 @@ struct test { int poll; ggml_type type_k; ggml_type type_v; - float defrag_thold; int n_gpu_layers; llama_split_mode split_mode; int main_gpu; @@ -1201,7 +1180,6 @@ struct test { poll = inst.poll; type_k = inst.type_k; type_v = inst.type_v; - defrag_thold = inst.defrag_thold; n_gpu_layers = inst.n_gpu_layers; split_mode = inst.split_mode; main_gpu = inst.main_gpu; @@ -1257,7 +1235,6 @@ struct test { "model_type", "model_size", "model_n_params", "n_batch", "n_ubatch", "n_threads", "cpu_mask", "cpu_strict", "poll", "type_k", "type_v", "n_gpu_layers", "split_mode", "main_gpu", "no_kv_offload", "flash_attn", "tensor_split", "tensor_buft_overrides", - "defrag_thold", "use_mmap", "embeddings", "no_op_offload", "n_prompt", "n_gen", "n_depth", "test_time", "avg_ns", "stddev_ns", "avg_ts", "stddev_ts", }; @@ -1277,7 +1254,7 @@ struct test { field == "use_mmap" || field == "embeddings") { return BOOL; } - if (field == "avg_ts" || field == "stddev_ts" || field == "defrag_thold") { + if (field == "avg_ts" || field == "stddev_ts") { return FLOAT; } return STRING; @@ -1344,7 +1321,6 @@ struct test { std::to_string(flash_attn), tensor_split_str, tensor_buft_overrides_str, - std::to_string(defrag_thold), std::to_string(use_mmap), std::to_string(embeddings), std::to_string(no_op_offload), @@ -1611,9 +1587,6 @@ struct markdown_printer : public printer { if (params.type_v.size() > 1 || params.type_v != cmd_params_defaults.type_v) { fields.emplace_back("type_v"); } - if (params.defrag_thold.size() > 1 || params.defrag_thold != cmd_params_defaults.defrag_thold) { - fields.emplace_back("defrag_thold"); - } if (params.main_gpu.size() > 1 || params.main_gpu != cmd_params_defaults.main_gpu) { fields.emplace_back("main_gpu"); } diff --git a/tools/server/README.md b/tools/server/README.md index 86844225ff..baf3730add 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -66,7 +66,7 @@ The project is under active development, and we are [looking for feedback and co | `-nkvo, --no-kv-offload` | disable KV offload
    (env: LLAMA_ARG_NO_KV_OFFLOAD) | | `-ctk, --cache-type-k TYPE` | KV cache data type for K
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_K) | | `-ctv, --cache-type-v TYPE` | KV cache data type for V
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_V) | -| `-dt, --defrag-thold N` | KV cache defragmentation threshold (default: 0.1, < 0 - disabled)
    (env: LLAMA_ARG_DEFRAG_THOLD) | +| `-dt, --defrag-thold N` | KV cache defragmentation threshold (DEPRECATED)
    (env: LLAMA_ARG_DEFRAG_THOLD) | | `-np, --parallel N` | number of parallel sequences to decode (default: 1)
    (env: LLAMA_ARG_N_PARALLEL) | | `--mlock` | force system to keep model in RAM rather than swapping or compressing
    (env: LLAMA_ARG_MLOCK) | | `--no-mmap` | do not memory-map model (slower load but may reduce pageouts if not using mlock)
    (env: LLAMA_ARG_NO_MMAP) | diff --git a/tools/server/bench/bench.py b/tools/server/bench/bench.py index 5cc6f92ab6..0c57a2df04 100644 --- a/tools/server/bench/bench.py +++ b/tools/server/bench/bench.py @@ -274,7 +274,6 @@ def start_server_background(args): server_args.extend(['--batch-size', args.batch_size]) server_args.extend(['--ubatch-size', args.ubatch_size]) server_args.extend(['--n-predict', args.max_tokens * 2]) - server_args.extend(['--defrag-thold', "0.1"]) server_args.append('--cont-batching') server_args.append('--metrics') server_args.append('--flash-attn') From b1ab91821f980f8993423c3f2a82a0a0f60c09d2 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 22 Aug 2025 14:06:29 +0300 Subject: [PATCH 077/174] cuda : add Pad Reflect 1D support (#14659) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Pad Reflect 1D CUDA support * Update ggml/src/ggml-cuda/pad_reflect_1d.cu Co-authored-by: Johannes Gäßler --------- Co-authored-by: Johannes Gäßler --- ggml/src/ggml-cuda/ggml-cuda.cu | 5 ++ ggml/src/ggml-cuda/pad_reflect_1d.cu | 82 +++++++++++++++++++++++++++ ggml/src/ggml-cuda/pad_reflect_1d.cuh | 5 ++ 3 files changed, 92 insertions(+) create mode 100644 ggml/src/ggml-cuda/pad_reflect_1d.cu create mode 100644 ggml/src/ggml-cuda/pad_reflect_1d.cuh diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 4e17fd211e..d29a0b573f 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -49,6 +49,7 @@ #include "ggml-cuda/wkv.cuh" #include "ggml-cuda/gla.cuh" #include "ggml-cuda/set-rows.cuh" +#include "ggml-cuda/pad_reflect_1d.cuh" #include "ggml.h" #include @@ -2352,6 +2353,9 @@ static bool ggml_cuda_compute_forward(ggml_backend_cuda_context & ctx, struct gg case GGML_OP_PAD: ggml_cuda_op_pad(ctx, dst); break; + case GGML_OP_PAD_REFLECT_1D: + ggml_cuda_op_pad_reflect_1d(ctx, dst); + break; case GGML_OP_ARANGE: ggml_cuda_op_arange(ctx, dst); break; @@ -3490,6 +3494,7 @@ static bool ggml_backend_cuda_device_supports_op(ggml_backend_dev_t dev, const g return ggml_is_contiguous(op->src[0]); case GGML_OP_UPSCALE: case GGML_OP_PAD: + case GGML_OP_PAD_REFLECT_1D: case GGML_OP_ARANGE: case GGML_OP_TIMESTEP_EMBEDDING: case GGML_OP_LEAKY_RELU: diff --git a/ggml/src/ggml-cuda/pad_reflect_1d.cu b/ggml/src/ggml-cuda/pad_reflect_1d.cu new file mode 100644 index 0000000000..4ed34aec3d --- /dev/null +++ b/ggml/src/ggml-cuda/pad_reflect_1d.cu @@ -0,0 +1,82 @@ +#include "pad_reflect_1d.cuh" + +static __global__ void pad_reflect_1d_kernel_f32( + const void * __restrict__ src0, + void * __restrict__ dst, + const int64_t ne0, + const int64_t ne00, + const int64_t ne01, + const int64_t ne02, + const int64_t ne03, + const int64_t nb00, + const int64_t nb01, + const int64_t nb02, + const int64_t nb03, + const int64_t nb0, + const int64_t nb1, + const int64_t nb2, + const int64_t nb3, + const int p0, + const int p1) { + + const int64_t i3 = blockIdx.z; + const int64_t i2 = blockIdx.y; + const int64_t i1 = blockIdx.x; + + if (i1 >= ne01 || i2 >= ne02 || i3 >= ne03) { + return; + } + + const char * src0_ptr = (const char *)src0 + i3*nb03 + i2*nb02 + i1*nb01; + char * dst_ptr = (char *)dst + i3*nb3 + i2*nb2 + i1*nb1; + + for (int64_t i0 = threadIdx.x; i0 < ne0; i0 += blockDim.x) { + float value; + + if (i0 < p0) { + // Left padding - reflect + value = *(const float *)(src0_ptr + (p0 - i0) * nb00); + } else if (i0 < ne0 - p1) { + // Middle - copy + value = *(const float *)(src0_ptr + (i0 - p0) * nb00); + } else { + // Right padding - reflect + int64_t src_idx = (ne0 - p1 - p0) - (p1 + 1 - (ne0 - i0)) - 1; + value = *(const float *)(src0_ptr + src_idx * nb00); + } + + *(float *)(dst_ptr + i0 * nb0) = value; + } +} + +void ggml_cuda_op_pad_reflect_1d(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { + const ggml_tensor * src0 = dst->src[0]; + cudaStream_t stream = ctx.stream(); + + GGML_ASSERT(src0->type == GGML_TYPE_F32); + GGML_ASSERT(dst->type == GGML_TYPE_F32); + + const int32_t * opts = (const int32_t *) dst->op_params; + const int p0 = opts[0]; + const int p1 = opts[1]; + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne0 = dst->ne[0]; + + GGML_ASSERT(ne0 == ne00 + p0 + p1); + + const dim3 block_dims(CUDA_PAD_REFLECT_1D_BLOCK_SIZE, 1, 1); + const dim3 grid_dims(ne01, ne02, ne03); + + pad_reflect_1d_kernel_f32<<>>( + src0->data, dst->data, + ne0, ne00, ne01, ne02, ne03, + src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], + dst->nb[0], dst->nb[1], dst->nb[2], dst->nb[3], + p0, p1 + ); +} diff --git a/ggml/src/ggml-cuda/pad_reflect_1d.cuh b/ggml/src/ggml-cuda/pad_reflect_1d.cuh new file mode 100644 index 0000000000..15f2ed1737 --- /dev/null +++ b/ggml/src/ggml-cuda/pad_reflect_1d.cuh @@ -0,0 +1,5 @@ +#include "common.cuh" + +#define CUDA_PAD_REFLECT_1D_BLOCK_SIZE 256 + +void ggml_cuda_op_pad_reflect_1d(ggml_backend_cuda_context & ctx, ggml_tensor * dst); From 92f7f0a53cf6484e16a8084ed90807c35a164809 Mon Sep 17 00:00:00 2001 From: rmatif Date: Fri, 22 Aug 2025 15:33:15 +0200 Subject: [PATCH 078/174] ggml: add `conv3d` op (#15182) * add conv3d * bump GGML_OP_COUNT --- ggml/include/ggml.h | 18 +++++ ggml/src/ggml-cpu/ggml-cpu.c | 6 ++ ggml/src/ggml-cpu/ops.cpp | 142 +++++++++++++++++++++++++++++++++++ ggml/src/ggml-cpu/ops.h | 1 + ggml/src/ggml.c | 56 +++++++++++++- tests/test-backend-ops.cpp | 124 ++++++++++++++++++++++++++++++ 6 files changed, 345 insertions(+), 2 deletions(-) diff --git a/ggml/include/ggml.h b/ggml/include/ggml.h index b8b82e11c8..7e9c3c8c7a 100644 --- a/ggml/include/ggml.h +++ b/ggml/include/ggml.h @@ -512,6 +512,7 @@ extern "C" { GGML_OP_IM2COL, GGML_OP_IM2COL_BACK, GGML_OP_CONV_2D, + GGML_OP_CONV_3D, GGML_OP_CONV_2D_DW, GGML_OP_CONV_TRANSPOSE_2D, GGML_OP_POOL_1D, @@ -1940,6 +1941,23 @@ extern "C" { int d0, // dilation dimension 0 int d1); // dilation dimension 1 + GGML_API struct ggml_tensor * ggml_conv_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, // kernel [KW, KH, KD, IC * OC] + struct ggml_tensor * b, // input [W, H, D, C * N] + int s0, // stride + int s1, + int s2, + int p0, // padding + int p1, + int p2, + int d0, // dilation + int d1, + int d2, + int n_channels, + int n_batch, + int n_channels_out); + enum ggml_op_pool { GGML_OP_POOL_MAX, GGML_OP_POOL_AVG, diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index f6bea3df34..0d5d3a3440 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -1880,6 +1880,10 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm { ggml_compute_forward_conv_2d(params, tensor); } break; + case GGML_OP_CONV_3D: + { + ggml_compute_forward_conv_3d(params, tensor); + } break; case GGML_OP_CONV_2D_DW: { ggml_compute_forward_conv_2d_dw(params, tensor); @@ -2252,6 +2256,7 @@ static int ggml_get_n_tasks(struct ggml_tensor * node, int n_threads) { case GGML_OP_IM2COL: case GGML_OP_IM2COL_BACK: case GGML_OP_CONV_2D: + case GGML_OP_CONV_3D: case GGML_OP_CONV_2D_DW: case GGML_OP_CONV_TRANSPOSE_1D: case GGML_OP_CONV_TRANSPOSE_2D: @@ -2773,6 +2778,7 @@ struct ggml_cplan ggml_graph_plan( } } break; case GGML_OP_CONV_2D: + case GGML_OP_CONV_3D: { cur = GGML_IM2COL_WORK_SIZE; } break; diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index b72a2556a5..460367cca0 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -7207,6 +7207,148 @@ void ggml_compute_forward_conv_2d( ggml_compute_forward_conv_2d_impl(params, src0, src1, dst, src0->type); } +// ggml_compute_forward_conv_3d + +static void ggml_compute_forward_conv_3d_impl(const ggml_compute_params * params, + const ggml_tensor * kernel, + const ggml_tensor * src, + ggml_tensor * dst, + ggml_type kernel_type) { + + GGML_ASSERT(ggml_is_contiguous(kernel)); + GGML_ASSERT(kernel_type == GGML_TYPE_F16 || kernel_type == GGML_TYPE_F32); + GGML_ASSERT(kernel->type == kernel_type); + + const ggml_type_traits * traits = ggml_get_type_traits(kernel_type); + + const int32_t s0 = dst->op_params[0]; + const int32_t s1 = dst->op_params[1]; + const int32_t s2 = dst->op_params[2]; + const int32_t p0 = dst->op_params[3]; + const int32_t p1 = dst->op_params[4]; + const int32_t p2 = dst->op_params[5]; + const int32_t d0 = dst->op_params[6]; + const int32_t d1 = dst->op_params[7]; + const int32_t d2 = dst->op_params[8]; + const int32_t c = dst->op_params[9]; + const int32_t n = dst->op_params[10]; + const int32_t oc = dst->op_params[11]; + + const int64_t src_w = src->ne[0]; + const int64_t src_h = src->ne[1]; + const int64_t src_d = src->ne[2]; + const int64_t knl_w = kernel->ne[0]; + const int64_t knl_h = kernel->ne[1]; + const int64_t knl_d = kernel->ne[2]; + const int64_t dst_w = dst->ne[0]; + const int64_t dst_h = dst->ne[1]; + const int64_t dst_d = dst->ne[2]; + + const float * src_data = (float *) src->data; + void * knl_data = kernel->data; + float * dst_data = (float *) dst->data; + + const int64_t knl_n_per_channel = knl_w * knl_h * knl_d; + const int64_t knl_n_total = knl_n_per_channel * c; + const int64_t patch_total = n * dst_w * dst_h * dst_d; + + const int64_t space_per_patch = knl_n_total * traits->type_size + oc * sizeof(float); + const int64_t batch_size = params->wsize / space_per_patch; + const int64_t patches_per_batch = batch_size > 8 ? (batch_size / 8) * 8 : batch_size; + const int64_t batch_n = (patch_total + patches_per_batch - 1) / patches_per_batch; + + GGML_ASSERT(patches_per_batch > 0 && batch_size >= 1); + + void * tmp = params->wdata; + + for (int64_t batch_i = 0; batch_i < batch_n; ++batch_i) { + const int64_t patch_start_batch = batch_i * patches_per_batch; + const int64_t patch_end_batch = std::min(patch_start_batch + patches_per_batch, patch_total); + const int64_t patch_n_in_batch = patch_end_batch - patch_start_batch; + + const int64_t patch_per_thread = (patch_n_in_batch + params->nth - 1) / params->nth; + const int64_t patch_start = patch_start_batch + params->ith * patch_per_thread; + const int64_t patch_end = std::min(patch_start + patch_per_thread, patch_end_batch); + + for (int64_t p = patch_start; p < patch_end; ++p) { + const int64_t p_in_batch = p % (dst_w * dst_h * dst_d); + const int64_t p_in_depth = p_in_batch % (dst_w * dst_h); + const int64_t batch_idx = p / (dst_w * dst_h * dst_d); + const int64_t dst_z = p_in_batch / (dst_w * dst_h); + const int64_t dst_y = p_in_depth / dst_w; + const int64_t dst_x = p_in_depth % dst_w; + + char * dst_row = (char *) tmp + (p % patches_per_batch) * knl_n_total * traits->type_size; + + for (int64_t ic = 0; ic < c; ++ic) { + for (int64_t kz = 0; kz < knl_d; ++kz) { + for (int64_t ky = 0; ky < knl_h; ++ky) { + for (int64_t kx = 0; kx < knl_w; ++kx) { + const int64_t sz = dst_z * s2 + kz * d2 - p2; + const int64_t sy = dst_y * s1 + ky * d1 - p1; + const int64_t sx = dst_x * s0 + kx * d0 - p0; + + int64_t dst_idx = ic * knl_n_per_channel + kz * (knl_h * knl_w) + ky * knl_w + kx; + + float src_val; + if (sz < 0 || sz >= src_d || sy < 0 || sy >= src_h || sx < 0 || sx >= src_w) { + src_val = 0.0f; + } else { + const int64_t cn_idx = batch_idx * c + ic; + const float * src_ptr = (const float *)((const char *)src_data + sx*src->nb[0] + sy*src->nb[1] + sz*src->nb[2] + cn_idx*src->nb[3]); + src_val = *src_ptr; + } + + char * element_ptr = dst_row + dst_idx * traits->type_size; + if (kernel_type == GGML_TYPE_F32) { + *(float *)element_ptr = src_val; + } else if (kernel_type == GGML_TYPE_F16) { + *(ggml_fp16_t *)element_ptr = GGML_CPU_FP32_TO_FP16(src_val); + } + } + } + } + } + } + + ggml_barrier(params->threadpool); + + float * gemm_output = (float *) ((char *) tmp + patches_per_batch * knl_n_total * traits->type_size); + ggml_call_mul_mat(kernel_type, params, patch_n_in_batch, oc, knl_n_total, tmp, knl_data, gemm_output); + + ggml_barrier(params->threadpool); + + const int64_t permute_per_thread = (patch_n_in_batch + params->nth - 1) / params->nth; + const int64_t permute_start = params->ith * permute_per_thread; + const int64_t permute_end = std::min(permute_start + permute_per_thread, patch_n_in_batch); + + for (int64_t i = permute_start; i < permute_end; ++i) { + const int64_t p = patch_start_batch + i; + const int64_t p_in_batch = p % (dst_w * dst_h * dst_d); + const int64_t p_in_depth = p_in_batch % (dst_w * dst_h); + const int64_t batch_idx = p / (dst_w * dst_h * dst_d); + const int64_t dst_z = p_in_batch / (dst_w * dst_h); + const int64_t dst_y = p_in_depth / dst_w; + const int64_t dst_x = p_in_depth % dst_w; + + for (int64_t ioc = 0; ioc < oc; ++ioc) { + const float value = gemm_output[i * oc + ioc]; + const int64_t ocn_idx = batch_idx * oc + ioc; + float * dst_ptr = (float *)((char *)dst_data + dst_x*dst->nb[0] + dst_y*dst->nb[1] + dst_z*dst->nb[2] + ocn_idx*dst->nb[3]); + *dst_ptr = value; + } + } + } +} + +void ggml_compute_forward_conv_3d( + const ggml_compute_params * params, + ggml_tensor * dst) { + const ggml_tensor * src0 = dst->src[0]; + const ggml_tensor * src1 = dst->src[1]; + ggml_compute_forward_conv_3d_impl(params, src0, src1, dst, src0->type); +} + // ggml_compute_forward_conv_transpose_2d void ggml_compute_forward_conv_transpose_2d( diff --git a/ggml/src/ggml-cpu/ops.h b/ggml/src/ggml-cpu/ops.h index 82ea79eaa5..d0ea83843b 100644 --- a/ggml/src/ggml-cpu/ops.h +++ b/ggml/src/ggml-cpu/ops.h @@ -70,6 +70,7 @@ void ggml_compute_forward_conv_transpose_1d(const struct ggml_compute_params * p void ggml_compute_forward_im2col(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_im2col_back_f32(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_conv_2d(const struct ggml_compute_params * params, struct ggml_tensor * dst); +void ggml_compute_forward_conv_3d(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_conv_transpose_2d(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_conv_2d_dw(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_pool_1d(const struct ggml_compute_params * params, struct ggml_tensor * dst); diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c index a4417f1a17..d76ea58f78 100644 --- a/ggml/src/ggml.c +++ b/ggml/src/ggml.c @@ -975,6 +975,7 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "IM2COL", "IM2COL_BACK", "CONV_2D", + "CONV_3D", "CONV_2D_DW", "CONV_TRANSPOSE_2D", "POOL_1D", @@ -1017,7 +1018,7 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "GLU", }; -static_assert(GGML_OP_COUNT == 88, "GGML_OP_COUNT != 88"); +static_assert(GGML_OP_COUNT == 89, "GGML_OP_COUNT != 89"); static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "none", @@ -1077,6 +1078,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "im2col(x)", "im2col_back(x)", "conv_2d(x)", + "conv_3d(x)", "conv_2d_dw(x)", "conv_transpose_2d(x)", "pool_1d(x)", @@ -1119,7 +1121,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "glu(x)", }; -static_assert(GGML_OP_COUNT == 88, "GGML_OP_COUNT != 88"); +static_assert(GGML_OP_COUNT == 89, "GGML_OP_COUNT != 89"); static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2"); @@ -4480,6 +4482,56 @@ struct ggml_tensor * ggml_conv_2d_direct( return result; } +// ggml_conv_3d + +struct ggml_tensor * ggml_conv_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int s0, + int s1, + int s2, + int p0, + int p1, + int p2, + int d0, + int d1, + int d2, + int c, + int n, + int oc) { + + GGML_ASSERT(a->ne[3] == (int64_t) c * oc); + GGML_ASSERT(b->ne[3] == (int64_t) c * n); + + int64_t ne[4]; + ne[0] = ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0); + ne[1] = ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1); + ne[2] = ggml_calc_conv_output_size(b->ne[2], a->ne[2], s2, p2, d2); + ne[3] = (int64_t) oc * n; + + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); + + ggml_set_op_params_i32(result, 0, s0); + ggml_set_op_params_i32(result, 1, s1); + ggml_set_op_params_i32(result, 2, s2); + ggml_set_op_params_i32(result, 3, p0); + ggml_set_op_params_i32(result, 4, p1); + ggml_set_op_params_i32(result, 5, p2); + ggml_set_op_params_i32(result, 6, d0); + ggml_set_op_params_i32(result, 7, d1); + ggml_set_op_params_i32(result, 8, d2); + ggml_set_op_params_i32(result, 9, c); + ggml_set_op_params_i32(result, 10, n); + ggml_set_op_params_i32(result, 11, oc); + + result->op = GGML_OP_CONV_3D; + result->src[0] = a; + result->src[1] = b; + + return result; +} + // ggml_conv_transpose_2d_p0 static int64_t ggml_calc_conv_transpose_output_size(int64_t ins, int64_t ks, int s, int p) { diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index e21e904278..a51527ca55 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -4091,6 +4091,75 @@ struct test_conv_2d_dw : public test_case { } }; +// GGML_OP_CONV_3D +struct test_conv_3d : public test_case { + // Logical 5D dimensions + const int64_t N, IC, ID, IH, IW; + const int64_t OC, KD, KH, KW; + // Conv params + const int s0, s1, s2; + const int p0, p1, p2; + const int d0, d1, d2; + // Types + const ggml_type type_kernel; + + std::string op_desc(ggml_tensor * t) override { + GGML_UNUSED(t); + return "CONV_3D"; + } + + std::string vars() override { + return VARS_TO_STR11(N, IC, ID, IH, IW, OC, KD, KH, KW, s0, s1) + "," + + VARS_TO_STR8(s2, p0, p1, p2, d0, d1, d2, type_kernel); + } + + double max_nmse_err() override { + return 5e-4; + } + + uint64_t op_flops(ggml_tensor * t) override { + GGML_UNUSED(t); + auto calc_conv_output_size = [](int64_t ins, int64_t ks, int s, int p, int d) -> int64_t { + return (ins + 2 * p - d * (ks - 1) - 1) / s + 1; + }; + const int64_t OD = calc_conv_output_size(ID, KD, s2, p2, d2); + const int64_t OH = calc_conv_output_size(IH, KH, s1, p1, d1); + const int64_t OW = calc_conv_output_size(IW, KW, s0, p0, d0); + + return (uint64_t)N * OC * OD * OH * OW * (2 * IC * KD * KH * KW - 1); + } + + test_conv_3d( + int64_t N, int64_t IC, int64_t ID, int64_t IH, int64_t IW, + int64_t OC, int64_t KD, int64_t KH, int64_t KW, + int s0, int s1, int s2, + int p0, int p1, int p2, + int d0, int d1, int d2, + ggml_type type_kernel + ) : N(N), IC(IC), ID(ID), IH(IH), IW(IW), + OC(OC), KD(KD), KH(KH), KW(KW), + s0(s0), s1(s1), s2(s2), + p0(p0), p1(p1), p2(p2), + d0(d0), d1(d1), d2(d2), + type_kernel(type_kernel) {} + + ggml_tensor * build_graph(ggml_context * ctx) override { + // GGML input tensor is packed as [W, H, D, C*N] + const int64_t ne_input[] = {IW, IH, ID, IC * N}; + ggml_tensor * input = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne_input); + ggml_set_name(input, "input"); + + // GGML kernel tensor is packed as [KW, KH, KD, IC*OC] + const int64_t ne_kernel[] = {KW, KH, KD, IC * OC}; + ggml_tensor * kernel = ggml_new_tensor(ctx, type_kernel, 4, ne_kernel); + ggml_set_name(kernel, "kernel"); + + ggml_tensor * out = ggml_conv_3d(ctx, kernel, input, s0, s1, s2, p0, p1, p2, d0, d1, d2, (int)IC, (int)N, (int)OC); + ggml_set_name(out, "out"); + return out; + } +}; + // GGML_OP_CONCAT struct test_concat : public test_case { const ggml_type type; @@ -5528,6 +5597,61 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_conv_2d_dw({32, 8, 64, 1}, {3, 3, 1, 64}, 2, 1, 1, false)); test_cases.emplace_back(new test_conv_2d_dw({32, 8, 64, 1}, {3, 3, 1, 64}, 2, 1, 1, true)); + // CONV_3D + auto calc_conv_output_size_3d = [](int64_t ins, int64_t ks, int s, int p, int d) -> int64_t { + return (ins + 2 * p - d * (ks - 1) - 1) / s + 1; + }; + + for (ggml_type kernel_type : {GGML_TYPE_F32, GGML_TYPE_F16}) { + for (int N : {1, 2}) { + for (int IC : {1, 3}) { + for (int OC : {1, 4}) { + for (int s0 : {1, 2}) { + for (int p1 : {0, 1}) { + for (int d2 : {1, 2}) { + int64_t IW = 20, IH = 22, ID = 18; + int64_t KW = 3, KH = 3, KD = 3; + int s1 = s0, s2 = s0; + int p0 = p1, p2 = p1; + int d0 = d2, d1 = d2; + + if (calc_conv_output_size_3d(IW, KW, s0, p0, d0) <= 0 || + calc_conv_output_size_3d(IH, KH, s1, p1, d1) <= 0 || + calc_conv_output_size_3d(ID, KD, s2, p2, d2) <= 0) { + continue; + } + test_cases.emplace_back(new test_conv_3d( + N, IC, ID, IH, IW, + OC, KD, KH, KW, + s0, s1, s2, p0, p1, p2, d0, d1, d2, + kernel_type)); + + // Asymmetric kernel and params + int64_t asym_KW = 5, asym_KH = 1, asym_KD = 3; + int asym_s0 = 2, asym_s1 = 1, asym_s2 = 1; + int asym_p0 = 2, asym_p1 = 0, asym_p2 = 1; + int asym_d0 = 1, asym_d1 = 1, asym_d2 = 2; + + if (calc_conv_output_size_3d(IW, asym_KW, asym_s0, asym_p0, asym_d0) <= 0 || + calc_conv_output_size_3d(IH, asym_KH, asym_s1, asym_p1, asym_d1) <= 0 || + calc_conv_output_size_3d(ID, asym_KD, asym_s2, asym_p2, asym_d2) <= 0) { + continue; + } + test_cases.emplace_back(new test_conv_3d( + N, IC, ID, IH, IW, + OC, asym_KD, asym_KH, asym_KW, + asym_s0, asym_s1, asym_s2, asym_p0, asym_p1, asym_p2, asym_d0, asym_d1, asym_d2, + kernel_type)); + } + } + } + } + } + } + // Case with kernel size 1 + test_cases.emplace_back(new test_conv_3d(1, 4, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, kernel_type)); + } + for(uint32_t Cout : {1, 9}){ for(uint32_t Cin : {1, 7}){ for(uint32_t K : {1, 3, 1337}){ From 32732f2459a598606055f0403f0e4ec148d06d68 Mon Sep 17 00:00:00 2001 From: Aldehir Rojas Date: Fri, 22 Aug 2025 11:04:08 -0500 Subject: [PATCH 079/174] model : gpt-oss add response_format support (#15494) --- common/chat.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/common/chat.cpp b/common/chat.cpp index 7f6809a4ed..111b4a21b3 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -1361,6 +1361,26 @@ static common_chat_params common_chat_params_init_gpt_oss(const common_chat_temp "<|end|>", }; + if (!inputs.json_schema.is_null()) { + data.grammar_lazy = false; + data.grammar = build_grammar([&](const common_grammar_builder & builder) { + auto schema = inputs.json_schema; + builder.resolve_refs(schema); + + auto not_end = builder.add_rule("not-end", + "[^<] | \"<\" [^|] | \"<|\" [^e] | \"<|e\" [^n] | \"<|en\" [^d] | \"<|end\" [^|] | \"<|end|\" [^>]"); + auto analysis = builder.add_rule("analysis", + "\"<|channel|>analysis<|message|>\" ( " + not_end + " )* \"<|end|>\""); + auto constraint = builder.add_rule("constraint", "\"<|constrain|>\"? [a-zA-Z0-9_-]+"); + auto final = builder.add_rule("final", + "\"<|channel|>final\" ( \" \" " + constraint + " )? \"<|message|>\" " + + builder.add_schema("response", schema) + ); + + builder.add_rule("root", "( " + analysis + " \"<|start|>assistant\" )? " + final); + }); + } + if (inputs.tools.is_array() && !inputs.tools.empty()) { data.grammar_lazy = inputs.tool_choice != COMMON_CHAT_TOOL_CHOICE_REQUIRED; data.grammar = build_grammar([&](const common_grammar_builder & builder) { @@ -2121,7 +2141,7 @@ static common_chat_params common_chat_templates_apply_jinja( } // GPT-OSS - if (src.find("<|channel|>") != std::string::npos && params.json_schema.is_null()) { + if (src.find("<|channel|>") != std::string::npos) { return common_chat_params_init_gpt_oss(tmpl, params); } From 45363632cbd593537d541e81b600242e0b3d47fc Mon Sep 17 00:00:00 2001 From: Reese Levine Date: Fri, 22 Aug 2025 11:28:03 -0700 Subject: [PATCH 080/174] ggml WebGPU: add support for quantization types (#15440) * Begin work on set_rows * Work on set rows * Add error buffers for reporting unsupported SET_ROWS indices * Remove extra comments * Work on templating for different types in shaders * Work on shader type generation * Working q4_0 mul_mat and some templating for different types * Add q4_0_f16 matmul and fix device init * Add matmul support for basic quantization types * Add q2_k and q3_k quantization * Add rest of k-quants * Get firt i-quant working * Closer to supporting all i-quants * Support rest of i-quants * Cleanup code * Fix python formatting * debug * Bugfix for memset * Add padding to end of buffers on creation * Simplify bit-shifting * Update usage of StringView --- ggml/src/ggml-webgpu/CMakeLists.txt | 4 +- ggml/src/ggml-webgpu/ggml-webgpu.cpp | 426 ++-- .../ggml-webgpu/wgsl-shaders/embed_wgsl.py | 90 +- ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl | 16 +- .../wgsl-shaders/mul_mat.tmpl.wgsl | 1794 +++++++++++++++++ .../src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl | 56 - 6 files changed, 2143 insertions(+), 243 deletions(-) create mode 100644 ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl delete mode 100644 ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl diff --git a/ggml/src/ggml-webgpu/CMakeLists.txt b/ggml/src/ggml-webgpu/CMakeLists.txt index 79ef68b85a..78a985a4d1 100644 --- a/ggml/src/ggml-webgpu/CMakeLists.txt +++ b/ggml/src/ggml-webgpu/CMakeLists.txt @@ -20,8 +20,8 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADER_OUTPUT_DIR} COMMAND ${CMAKE_COMMAND} -E env PYTHONIOENCODING=utf-8 ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py - --input "${SHADER_DIR}" - --output "${SHADER_HEADER}" + --input_dir "${SHADER_DIR}" + --output_file "${SHADER_HEADER}" DEPENDS ${WGSL_SHADER_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py VERBATIM ) diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index ba1addc8d9..32f1e304e1 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -118,13 +118,11 @@ struct webgpu_context_struct { std::recursive_mutex mutex; - bool device_init = false; - webgpu_buf_pool param_buf_pool; webgpu_buf_pool set_rows_error_buf_pool; wgpu::ComputePipeline memset_pipeline; - wgpu::ComputePipeline mul_mat_pipeline; + wgpu::ComputePipeline mul_mat_pipeline[30][2]; wgpu::ComputePipeline set_rows_pipeline; wgpu::ComputePipeline cpy_pipeline; @@ -238,7 +236,7 @@ static void ggml_backend_webgpu_wait_on_submission(webgpu_context & ctx) { wgpu::CallbackMode::AllowSpontaneous, [](wgpu::QueueWorkDoneStatus status, wgpu::StringView message) { if (status != wgpu::QueueWorkDoneStatus::Success) { - GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", message.data); + GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", std::string(message).c_str()); } }), UINT64_MAX); @@ -278,7 +276,7 @@ static void ggml_backend_webgpu_submit_queue(webgpu_context & ctx) { wgpu::CallbackMode::AllowSpontaneous, [ctx, staged_param_bufs](wgpu::QueueWorkDoneStatus status, wgpu::StringView message) { if (status != wgpu::QueueWorkDoneStatus::Success) { - GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", message.data); + GGML_LOG_ERROR("ggml_webgpu: Failed to submit commands: %s\n", std::string(message).c_str()); } // Free the staged buffers ctx->param_buf_pool.free_bufs(staged_param_bufs); @@ -294,7 +292,7 @@ static void ggml_backend_webgpu_submit_queue(webgpu_context & ctx) { wgpu::CallbackMode::AllowSpontaneous, [ctx, error_bufs](wgpu::MapAsyncStatus status, wgpu::StringView message) { if (status != wgpu::MapAsyncStatus::Success) { - GGML_LOG_ERROR("ggml_webgpu: Failed to map error buffer: %s\n", message.data); + GGML_LOG_ERROR("ggml_webgpu: Failed to map error buffer: %s\n", std::string(message).c_str()); } else { const uint32_t * error_data = (const uint32_t *) error_bufs.host_buf.GetConstMappedRange(); if (*error_data) { @@ -331,6 +329,7 @@ static void ggml_backend_webgpu_map_buffer(webgpu_context & ctx, // To use, add a bind group entry to the setup for the shader you are debugging, add the buffer and // debug statements in the shader, and then call this function after encoding the commands and submitting them. static void ggml_backend_webgpu_debug(webgpu_context & ctx) { + ggml_backend_webgpu_submit_queue(ctx); wgpu::CommandEncoder encoder = ctx->device.CreateCommandEncoder(); encoder.CopyBufferToBuffer(ctx->debug_dev_buf, 0, ctx->debug_host_buf, 0, ctx->debug_host_buf.GetSize()); wgpu::CommandBuffer commands = encoder.Finish(); @@ -421,15 +420,6 @@ static void ggml_backend_webgpu_buffer_memset(webgpu_context & ctx, ggml_backend_webgpu_build_and_enqueue(ctx, ctx->memset_pipeline, params, entries, wg_x, true); } -static size_t ggml_backend_webgpu_tensor_offset(const ggml_tensor * tensor) { - return webgpu_tensor_offset(tensor) + tensor->view_offs; -} - -static wgpu::Buffer ggml_backend_webgpu_tensor_buf(const ggml_tensor * tensor) { - ggml_backend_webgpu_buffer_context * ctx = (ggml_backend_webgpu_buffer_context *) tensor->buffer->context; - return ctx->buffer; -} - /** End WebGPU Actions */ /** GGML Backend Interface */ @@ -447,19 +437,36 @@ static void ggml_backend_webgpu_free(ggml_backend_t backend) { GGML_UNUSED(ctx); } +static size_t ggml_webgpu_tensor_offset(const ggml_tensor * tensor) { + return webgpu_tensor_offset(tensor) + tensor->view_offs; +} + +static wgpu::Buffer ggml_webgpu_tensor_buf(const ggml_tensor * tensor) { + ggml_backend_webgpu_buffer_context * ctx = (ggml_backend_webgpu_buffer_context *) tensor->buffer->context; + return ctx->buffer; +} + +static size_t ggml_webgpu_tensor_misalignment(webgpu_context & ctx, ggml_tensor * t) { + size_t offset = ggml_webgpu_tensor_offset(t); + return offset & (ctx->limits.minStorageBufferOffsetAlignment - 1); +} + +static size_t ggml_webgpu_tensor_align_offset(webgpu_context & ctx, ggml_tensor * t) { + size_t offset = ggml_webgpu_tensor_offset(t); + return offset & ~(ctx->limits.minStorageBufferOffsetAlignment - 1); +} + +static size_t ggml_webgpu_tensor_binding_size(webgpu_context & ctx, ggml_tensor * t) { + return (ggml_nbytes(t) + ggml_webgpu_tensor_misalignment(ctx, t) + WEBGPU_STORAGE_BUF_BINDING_MULT - 1) & + ~(WEBGPU_STORAGE_BUF_BINDING_MULT - 1); +} + static void ggml_webgpu_cpy(webgpu_context & ctx, ggml_tensor * src, ggml_tensor * dst) { - size_t src_offset = ggml_backend_webgpu_tensor_offset(src); - // assumes power of 2 offset alignment - size_t src_misalignment = src_offset & (ctx->limits.minStorageBufferOffsetAlignment - 1); - // align to minimum offset alignment - src_offset &= ~(ctx->limits.minStorageBufferOffsetAlignment - 1); - size_t dst_offset = ggml_backend_webgpu_tensor_offset(dst); - size_t dst_misalignment = dst_offset & (ctx->limits.minStorageBufferOffsetAlignment - 1); - dst_offset &= ~(ctx->limits.minStorageBufferOffsetAlignment - 1); - uint32_t ne = (uint32_t) ggml_nelements(dst); + uint32_t ne = (uint32_t) ggml_nelements(dst); + std::vector params = { ne, - (uint32_t) (src_misalignment / ggml_type_size(src->type)), - (uint32_t) (dst_misalignment / ggml_type_size(dst->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src) / ggml_type_size(src->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), // Convert byte-strides to element-strides (uint32_t) (src->nb[0] / ggml_type_size(src->type)), (uint32_t) (src->nb[1] / ggml_type_size(src->type)), @@ -477,15 +484,13 @@ static void ggml_webgpu_cpy(webgpu_context & ctx, ggml_tensor * src, ggml_tensor std::vector entries = { { .binding = 0, - .buffer = ggml_backend_webgpu_tensor_buf(src), - .offset = src_offset, - .size = (ggml_nbytes(src) + src_misalignment + WEBGPU_STORAGE_BUF_BINDING_MULT - 1) & - ~(WEBGPU_STORAGE_BUF_BINDING_MULT - 1) }, + .buffer = ggml_webgpu_tensor_buf(src), + .offset = ggml_webgpu_tensor_align_offset(ctx, src), + .size = ggml_webgpu_tensor_binding_size(ctx, src) }, { .binding = 1, - .buffer = ggml_backend_webgpu_tensor_buf(dst), - .offset = dst_offset, - .size = (ggml_nbytes(dst) + dst_misalignment + WEBGPU_STORAGE_BUF_BINDING_MULT - 1) & - ~(WEBGPU_STORAGE_BUF_BINDING_MULT - 1) } + .buffer = ggml_webgpu_tensor_buf(dst), + .offset = ggml_webgpu_tensor_align_offset(ctx, dst), + .size = ggml_webgpu_tensor_binding_size(ctx, dst) } }; size_t max_wg_size = ctx->limits.maxComputeWorkgroupSizeX; @@ -504,21 +509,9 @@ static void ggml_webgpu_set_rows(webgpu_context & ctx, ggml_tensor * src, ggml_t error_bufs.host_buf.Unmap(); } - size_t src_offset = ggml_backend_webgpu_tensor_offset(src); - // assumes power of 2 offset alignment - size_t src_misalignment = src_offset & (ctx->limits.minStorageBufferOffsetAlignment - 1); - // align to minimum offset alignment - src_offset &= ~(ctx->limits.minStorageBufferOffsetAlignment - 1); - size_t idx_offset = ggml_backend_webgpu_tensor_offset(idx); - size_t idx_misalignment = idx_offset & (ctx->limits.minStorageBufferOffsetAlignment - 1); - idx_offset &= ~(ctx->limits.minStorageBufferOffsetAlignment - 1); - size_t dst_offset = ggml_backend_webgpu_tensor_offset(dst); - size_t dst_misalignment = dst_offset & (ctx->limits.minStorageBufferOffsetAlignment - 1); - dst_offset &= ~(ctx->limits.minStorageBufferOffsetAlignment - 1); - - std::vector params = { (uint32_t) (src_misalignment / ggml_type_size(src->type)), - (uint32_t) (idx_misalignment / ggml_type_size(idx->type)), - (uint32_t) (dst_misalignment / ggml_type_size(dst->type)), + std::vector params = { (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src) / ggml_type_size(src->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, idx) / ggml_type_size(idx->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), // Convert byte-strides to element-strides (uint32_t) (src->nb[1] / ggml_type_size(src->type)), (uint32_t) (src->nb[2] / ggml_type_size(src->type)), @@ -540,18 +533,18 @@ static void ggml_webgpu_set_rows(webgpu_context & ctx, ggml_tensor * src, ggml_t std::vector entries = { { .binding = 0, - .buffer = ggml_backend_webgpu_tensor_buf(src), - .offset = ggml_backend_webgpu_tensor_offset(src), - .size = ggml_nbytes(src) }, + .buffer = ggml_webgpu_tensor_buf(src), + .offset = ggml_webgpu_tensor_align_offset(ctx, src), + .size = ggml_webgpu_tensor_binding_size(ctx, src) }, { .binding = 1, - .buffer = ggml_backend_webgpu_tensor_buf(idx), - .offset = ggml_backend_webgpu_tensor_offset(idx), - .size = ggml_nbytes(idx) }, + .buffer = ggml_webgpu_tensor_buf(idx), + .offset = ggml_webgpu_tensor_align_offset(ctx, idx), + .size = ggml_webgpu_tensor_binding_size(ctx, idx) }, { .binding = 2, - .buffer = ggml_backend_webgpu_tensor_buf(dst), - .offset = ggml_backend_webgpu_tensor_offset(dst), - .size = ggml_nbytes(dst) }, - { .binding = 3, .buffer = error_bufs.dev_buf, .offset = 0, .size = error_bufs.dev_buf.GetSize() } + .buffer = ggml_webgpu_tensor_buf(dst), + .offset = ggml_webgpu_tensor_align_offset(ctx, dst), + .size = ggml_webgpu_tensor_binding_size(ctx, dst) }, + { .binding = 3, .buffer = error_bufs.dev_buf, .offset = 0, .size = error_bufs.dev_buf.GetSize() } }; size_t max_wg_size = ctx->limits.maxComputeWorkgroupSizeX; @@ -565,15 +558,18 @@ static void ggml_webgpu_set_rows(webgpu_context & ctx, ggml_tensor * src, ggml_t static void ggml_webgpu_mul_mat(webgpu_context & ctx, ggml_tensor * src0, ggml_tensor * src1, ggml_tensor * dst) { std::vector params = { + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), (uint32_t) dst->ne[1], // number of rows in result (M) (uint32_t) dst->ne[0], // number of columns in result (N) (uint32_t) src0->ne[0], // number of columns in src0/src1 (K) - (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), // stride (elements) of src0 in dimension 1 - (uint32_t) (src1->nb[1] / ggml_type_size(src1->type)), // stride (elements) of src1 in dimension 1 - (uint32_t) (src0->nb[2] / ggml_type_size(src0->type)), // stride (elements) of src0 in dimension 2 - (uint32_t) (src1->nb[2] / ggml_type_size(src1->type)), // stride (elements) of src1 in dimension 2 - (uint32_t) (src0->nb[3] / ggml_type_size(src0->type)), // stride (elements) of src0 in dimension 3 - (uint32_t) (src1->nb[3] / ggml_type_size(src1->type)), // stride (elements) of src1 in dimension 3 + (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), // stride (elements/blocks) of src0 in dimension 1 + (uint32_t) (src1->nb[1] / ggml_type_size(src1->type)), // stride (elements/blocks) of src1 in dimension 1 + (uint32_t) (src0->nb[2] / ggml_type_size(src0->type)), // stride (elements/blocks) of src0 in dimension 2 + (uint32_t) (src1->nb[2] / ggml_type_size(src1->type)), // stride (elements/blocks) of src1 in dimension 2 + (uint32_t) (src0->nb[3] / ggml_type_size(src0->type)), // stride (elements/blocks) of src0 in dimension 3 + (uint32_t) (src1->nb[3] / ggml_type_size(src1->type)), // stride (elements/blocks) of src1 in dimension 3 (uint32_t) src0->ne[2], // batch size in dimension 2 (uint32_t) src0->ne[3], // batch size in dimension 3 (uint32_t) (src1->ne[2] / src0->ne[2]), // broadcast in dimension 2 @@ -582,22 +578,22 @@ static void ggml_webgpu_mul_mat(webgpu_context & ctx, ggml_tensor * src0, ggml_t std::vector entries = { { .binding = 0, - .buffer = ggml_backend_webgpu_tensor_buf(src0), - .offset = ggml_backend_webgpu_tensor_offset(src0), - .size = ggml_nbytes(src0) }, + .buffer = ggml_webgpu_tensor_buf(src0), + .offset = ggml_webgpu_tensor_align_offset(ctx, src0), + .size = ggml_webgpu_tensor_binding_size(ctx, src0) }, { .binding = 1, - .buffer = ggml_backend_webgpu_tensor_buf(src1), - .offset = ggml_backend_webgpu_tensor_offset(src1), - .size = ggml_nbytes(src1) }, + .buffer = ggml_webgpu_tensor_buf(src1), + .offset = ggml_webgpu_tensor_align_offset(ctx, src1), + .size = ggml_webgpu_tensor_binding_size(ctx, src1) }, { .binding = 2, - .buffer = ggml_backend_webgpu_tensor_buf(dst), - .offset = ggml_backend_webgpu_tensor_offset(dst), - .size = ggml_nbytes(dst) } + .buffer = ggml_webgpu_tensor_buf(dst), + .offset = ggml_webgpu_tensor_align_offset(ctx, dst), + .size = ggml_webgpu_tensor_binding_size(ctx, dst) }, }; uint32_t wg_x = (dst->ne[0] * dst->ne[1] * dst->ne[2] * dst->ne[3] + WEBGPU_MUL_MAT_WG_SIZE - 1) / WEBGPU_MUL_MAT_WG_SIZE; - ggml_backend_webgpu_build_and_enqueue(ctx, ctx->mul_mat_pipeline, params, entries, wg_x); + ggml_backend_webgpu_build_and_enqueue(ctx, ctx->mul_mat_pipeline[src0->type][src1->type], params, entries, wg_x); } // Returns true if node has enqueued work into the queue, false otherwise @@ -827,7 +823,7 @@ static ggml_backend_buffer_t ggml_backend_webgpu_buffer_type_alloc_buffer(ggml_b wgpu::Buffer buf; ggml_webgpu_create_buffer(ctx->webgpu_ctx->device, buf, - size, + (size + WEBGPU_STORAGE_BUF_BINDING_MULT - 1) & ~(WEBGPU_STORAGE_BUF_BINDING_MULT - 1), wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::CopyDst, "allocated_buffer"); @@ -907,7 +903,94 @@ static void ggml_webgpu_init_memset_pipeline(webgpu_context & webgpu_ctx) { } static void ggml_webgpu_init_mul_mat_pipeline(webgpu_context & webgpu_ctx) { - ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline, wgsl_mul_mat, "mul_mat"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_F32][GGML_TYPE_F32], + wgsl_mul_mat_f32_f32, + "mul_mat_f32_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_F16][GGML_TYPE_F16], + wgsl_mul_mat_f16_f16, + "mul_mat_f16_f16"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_F16][GGML_TYPE_F32], + wgsl_mul_mat_f16_f32, + "mul_mat_f16_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q4_0][GGML_TYPE_F32], + wgsl_mul_mat_q4_0_f32, + "mul_mat_q4_0_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q4_1][GGML_TYPE_F32], + wgsl_mul_mat_q4_1_f32, + "mul_mat_q4_1_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q5_0][GGML_TYPE_F32], + wgsl_mul_mat_q5_0_f32, + "mul_mat_q5_0_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q5_1][GGML_TYPE_F32], + wgsl_mul_mat_q5_1_f32, + "mul_mat_q5_1_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q8_0][GGML_TYPE_F32], + wgsl_mul_mat_q8_0_f32, + "mul_mat_q8_0_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q2_K][GGML_TYPE_F32], + wgsl_mul_mat_q2_k_f32, + "mul_mat_q2_k_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q3_K][GGML_TYPE_F32], + wgsl_mul_mat_q3_k_f32, + "mul_mat_q3_k_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q4_K][GGML_TYPE_F32], + wgsl_mul_mat_q4_k_f32, + "mul_mat_q4_k_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q5_K][GGML_TYPE_F32], + wgsl_mul_mat_q5_k_f32, + "mul_mat_q5_k_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q6_K][GGML_TYPE_F32], + wgsl_mul_mat_q6_k_f32, + "mul_mat_q6_k_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ2_XXS][GGML_TYPE_F32], + wgsl_mul_mat_iq2_xxs_f32, + "mul_mat_iq2_xxs_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ2_XS][GGML_TYPE_F32], + wgsl_mul_mat_iq2_xs_f32, + "mul_mat_iq2_xs_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ2_S][GGML_TYPE_F32], + wgsl_mul_mat_iq2_s_f32, + "mul_mat_iq2_s_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ3_XXS][GGML_TYPE_F32], + wgsl_mul_mat_iq3_xxs_f32, + "mul_mat_iq3_xxs_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ3_S][GGML_TYPE_F32], + wgsl_mul_mat_iq3_s_f32, + "mul_mat_iq3_s_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ1_S][GGML_TYPE_F32], + wgsl_mul_mat_iq1_s_f32, + "mul_mat_iq1_s_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ1_M][GGML_TYPE_F32], + wgsl_mul_mat_iq1_m_f32, + "mul_mat_iq1_m_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ4_NL][GGML_TYPE_F32], + wgsl_mul_mat_iq4_nl_f32, + "mul_mat_iq4_nl_f32"); + ggml_webgpu_create_pipeline(webgpu_ctx->device, + webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ4_XS][GGML_TYPE_F32], + wgsl_mul_mat_iq4_xs_f32, + "mul_mat_iq4_xs_f32"); } static void ggml_webgpu_init_set_rows_pipeline(webgpu_context & webgpu_ctx) { @@ -933,79 +1016,6 @@ static ggml_backend_t ggml_backend_webgpu_device_init(ggml_backend_dev_t dev, co ggml_backend_webgpu_device_context * dev_ctx = static_cast(dev->context); webgpu_context webgpu_ctx = dev_ctx->webgpu_ctx; - // Multiple threads may try to initialize the device - std::lock_guard lock(webgpu_ctx->mutex); - if (!webgpu_ctx->device_init) { - // Initialize device - std::vector required_features = { wgpu::FeatureName::ShaderF16, - wgpu::FeatureName::ImplicitDeviceSynchronization }; - wgpu::DeviceDescriptor dev_desc; - dev_desc.requiredLimits = &webgpu_ctx->limits; - dev_desc.requiredFeatures = required_features.data(); - dev_desc.requiredFeatureCount = required_features.size(); - dev_desc.SetDeviceLostCallback( - wgpu::CallbackMode::AllowSpontaneous, - [](const wgpu::Device & device, wgpu::DeviceLostReason reason, wgpu::StringView message) { - GGML_UNUSED(device); - GGML_LOG_ERROR( - "ggml_webgpu: Device lost! Reason: %d, Message: %s\n", static_cast(reason), message.data); - }); - dev_desc.SetUncapturedErrorCallback( - [](const wgpu::Device & device, wgpu::ErrorType reason, wgpu::StringView message) { - GGML_UNUSED(device); - GGML_LOG_ERROR( - "ggml_webgpu: Device error! Reason: %d, Message: %s\n", static_cast(reason), message.data); - }); - webgpu_ctx->instance.WaitAny( - webgpu_ctx->adapter.RequestDevice( - &dev_desc, - wgpu::CallbackMode::AllowSpontaneous, - [webgpu_ctx](wgpu::RequestDeviceStatus status, wgpu::Device device, wgpu::StringView message) { - if (status != wgpu::RequestDeviceStatus::Success) { - GGML_LOG_ERROR("ggml_webgpu: Failed to get a device: %s\n", message.data); - return; - } - webgpu_ctx->device = std::move(device); - }), - UINT64_MAX); - GGML_ASSERT(webgpu_ctx->device != nullptr); - - // Initialize (compute) queue - webgpu_ctx->queue = webgpu_ctx->device.GetQueue(); - - // Create buffer pool for shader parameters - webgpu_ctx->param_buf_pool.init(webgpu_ctx->device, - WEBGPU_NUM_PARAM_BUFS, - WEBGPU_PARAMS_BUF_SIZE_BYTES, - wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::Uniform, - wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::MapWrite); - webgpu_ctx->set_rows_error_buf_pool.init(webgpu_ctx->device, - WEBGPU_NUM_SET_ROWS_ERROR_BUFS, - WEBGPU_SET_ROWS_ERROR_BUF_SIZE_BYTES, - wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::Storage, - wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead); - - ggml_webgpu_init_memset_pipeline(webgpu_ctx); - ggml_webgpu_init_mul_mat_pipeline(webgpu_ctx); - ggml_webgpu_init_set_rows_pipeline(webgpu_ctx); - ggml_webgpu_init_cpy_pipeline(webgpu_ctx); - -#ifdef GGML_WEBGPU_DEBUG - // Initialize debug buffers - ggml_webgpu_create_buffer(webgpu_ctx->device, - webgpu_ctx->debug_host_buf, - WEBGPU_DEBUG_BUF_ELEMS * sizeof(uint32_t), - wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead, - "debug_host_buf"); - ggml_webgpu_create_buffer(webgpu_ctx->device, - webgpu_ctx->debug_dev_buf, - WEBGPU_DEBUG_BUF_ELEMS * sizeof(uint32_t), - wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc, - "debug_dev_buf"); -#endif - webgpu_ctx->device_init = true; - } - static ggml_backend_webgpu_context backend_ctx; backend_ctx.name = GGML_WEBGPU_NAME + std::string(": ") + dev_ctx->device_name; backend_ctx.webgpu_ctx = webgpu_ctx; @@ -1053,10 +1063,45 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const case GGML_OP_VIEW: case GGML_OP_PERMUTE: return true; - case GGML_OP_CPY | GGML_OP_SET_ROWS: + case GGML_OP_CPY: + case GGML_OP_SET_ROWS: return op->type == GGML_TYPE_F16 && op->src[0]->type == GGML_TYPE_F32; case GGML_OP_MUL_MAT: - return op->src[0]->type == GGML_TYPE_F32 && op->src[1]->type == GGML_TYPE_F32; + { + switch (op->src[1]->type) { + case GGML_TYPE_F16: + return op->src[0]->type == GGML_TYPE_F16; + case GGML_TYPE_F32: + switch (op->src[0]->type) { + case GGML_TYPE_F32: + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q2_K: + case GGML_TYPE_Q3_K: + case GGML_TYPE_Q4_K: + case GGML_TYPE_Q5_K: + case GGML_TYPE_Q6_K: + case GGML_TYPE_IQ2_XXS: + case GGML_TYPE_IQ2_XS: + case GGML_TYPE_IQ2_S: + case GGML_TYPE_IQ3_XXS: + case GGML_TYPE_IQ3_S: + case GGML_TYPE_IQ1_S: + case GGML_TYPE_IQ1_M: + case GGML_TYPE_IQ4_NL: + case GGML_TYPE_IQ4_XS: + return true; + default: + return false; + } + default: + return false; + } + } default: return false; } @@ -1123,20 +1168,87 @@ static ggml_backend_dev_t ggml_backend_webgpu_reg_get_device(ggml_backend_reg_t wgpu::AdapterInfo info{}; ctx->adapter.GetInfo(&info); + // Initialize device + std::vector required_features = { wgpu::FeatureName::ShaderF16, + wgpu::FeatureName::ImplicitDeviceSynchronization }; + wgpu::DeviceDescriptor dev_desc; + dev_desc.requiredLimits = &ctx->limits; + dev_desc.requiredFeatures = required_features.data(); + dev_desc.requiredFeatureCount = required_features.size(); + dev_desc.SetDeviceLostCallback( + wgpu::CallbackMode::AllowSpontaneous, + [](const wgpu::Device & device, wgpu::DeviceLostReason reason, wgpu::StringView message) { + GGML_UNUSED(device); + GGML_LOG_ERROR( + "ggml_webgpu: Device lost! Reason: %d, Message: %s\n", static_cast(reason), std::string(message).c_str()); + }); + dev_desc.SetUncapturedErrorCallback( + [](const wgpu::Device & device, wgpu::ErrorType reason, wgpu::StringView message) { + GGML_UNUSED(device); + GGML_LOG_ERROR( + "ggml_webgpu: Device error! Reason: %d, Message: %s\n", static_cast(reason), std::string(message).c_str()); + }); + ctx->instance.WaitAny(ctx->adapter.RequestDevice( + &dev_desc, + wgpu::CallbackMode::AllowSpontaneous, + [ctx](wgpu::RequestDeviceStatus status, wgpu::Device device, wgpu::StringView message) { + if (status != wgpu::RequestDeviceStatus::Success) { + GGML_LOG_ERROR("ggml_webgpu: Failed to get a device: %s\n", std::string(message).c_str()); + return; + } + ctx->device = std::move(device); + }), + UINT64_MAX); + GGML_ASSERT(ctx->device != nullptr); + + // Initialize (compute) queue + ctx->queue = ctx->device.GetQueue(); + + // Create buffer pool for shader parameters + ctx->param_buf_pool.init(ctx->device, + WEBGPU_NUM_PARAM_BUFS, + WEBGPU_PARAMS_BUF_SIZE_BYTES, + wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::Uniform, + wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::MapWrite); + ctx->set_rows_error_buf_pool.init(ctx->device, + WEBGPU_NUM_SET_ROWS_ERROR_BUFS, + WEBGPU_SET_ROWS_ERROR_BUF_SIZE_BYTES, + wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::Storage, + wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead); + + ggml_webgpu_init_memset_pipeline(ctx); + ggml_webgpu_init_mul_mat_pipeline(ctx); + ggml_webgpu_init_set_rows_pipeline(ctx); + ggml_webgpu_init_cpy_pipeline(ctx); + +#ifdef GGML_WEBGPU_DEBUG + // Initialize debug buffers + ggml_webgpu_create_buffer(ctx->device, + ctx->debug_host_buf, + WEBGPU_DEBUG_BUF_ELEMS * sizeof(uint32_t), + wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead, + "debug_host_buf"); + ggml_webgpu_create_buffer(ctx->device, + ctx->debug_dev_buf, + WEBGPU_DEBUG_BUF_ELEMS * sizeof(uint32_t), + wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc, + "debug_dev_buf"); +#endif + static ggml_backend_webgpu_device_context device_ctx; device_ctx.webgpu_ctx = ctx; device_ctx.device_name = GGML_WEBGPU_NAME; - device_ctx.device_desc = std::string(info.description.data); + device_ctx.device_desc = info.description; GGML_LOG_INFO( "ggml_webgpu: adapter_info: vendor_id: %u | vendor: %s | architecture: %s | device_id: %u | name: %s | " "device_desc: %s\n", info.vendorID, - info.vendor.data, - info.architecture.data, + std::string(info.vendor).c_str(), + std::string(info.architecture).c_str(), info.deviceID, - info.device.data, - info.description.data); + std::string(info.device).c_str(), + std::string(info.description).c_str()); // See GGML Backend Device Interface section static ggml_backend_device device = { diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py b/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py index 962dcd6b17..cc8def7f13 100755 --- a/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py +++ b/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py @@ -1,35 +1,85 @@ import os +import re +import ast import argparse -def escape_triple_quotes(wgsl): - # Simple defense in case of embedded """ - return wgsl.replace('"""', '\\"""') +def extract_block(text, name): + pattern = rf'#define\({name}\)\s*(.*?)#end\({name}\)' + match = re.search(pattern, text, re.DOTALL) + if not match: + raise ValueError(f"Missing block: {name}") + return match.group(1).strip() -def to_cpp_string_literal(varname, content): - return f'const char* wgsl_{varname} = R"({content})";\n' +def parse_decls(decls_text): + decls = {} + for name, code in re.findall(r'#decl\((.*?)\)\s*(.*?)#enddecl\(\1\)', decls_text, re.DOTALL): + decls[name.strip()] = code.strip() + return decls + + +def replace_placeholders(shader_text, replacements): + for key, val in replacements.items(): + # Match {{KEY}} literally, where KEY is escaped + pattern = r'{{\s*' + re.escape(key) + r'\s*}}' + shader_text = re.sub(pattern, str(val), shader_text) + return shader_text + + +def write_shader(shader_name, shader_code, output_dir, outfile): + if output_dir: + wgsl_filename = os.path.join(output_dir, f"{shader_name}.wgsl") + with open(wgsl_filename, "w", encoding="utf-8") as f_out: + f_out.write(shader_code) + outfile.write(f'const char* wgsl_{shader_name} = R"({shader_code})";\n\n') + + +def generate_variants(shader_path, output_dir, outfile): + shader_base_name = shader_path.split("/")[-1].split(".")[0] + + with open(shader_path, "r", encoding="utf-8") as f: + text = f.read() + + try: + variants = ast.literal_eval(extract_block(text, "VARIANTS")) + except ValueError: + write_shader(shader_base_name, text, output_dir, outfile) + else: + decls_map = parse_decls(extract_block(text, "DECLS")) + shader_template = extract_block(text, "SHADER") + + for variant in variants: + decls = variant["DECLS"] + decls_code = "" + for key in decls: + if key not in decls_map: + raise ValueError(f"DECLS key '{key}' not found.") + decls_code += decls_map[key] + "\n\n" + + shader_variant = replace_placeholders(shader_template, variant["REPLS"]) + final_shader = re.sub(r'\bDECLS\b', decls_code, shader_variant) + + output_name = f"{shader_base_name}_" + "_".join([variant["REPLS"]["SRC0_TYPE"], variant["REPLS"]["SRC1_TYPE"]]) + write_shader(output_name, final_shader, output_dir, outfile) def main(): parser = argparse.ArgumentParser() - parser.add_argument('--input', required=True) - parser.add_argument('--output', required=True) + parser.add_argument("--input_dir", required=True) + parser.add_argument("--output_file", required=True) + parser.add_argument("--output_dir") args = parser.parse_args() - with open(args.output, 'w', encoding='utf-8') as out: - out.write("// Auto-generated shader embedding \n\n") - for fname in sorted(os.listdir(args.input)): - if not fname.endswith('.wgsl'): - continue - shader_path = os.path.join(args.input, fname) - varname = os.path.splitext(fname)[0] - with open(shader_path, 'r', encoding='utf-8') as f: - content = f.read() - content = escape_triple_quotes(content) - out.write(to_cpp_string_literal(varname, content)) - out.write('\n') + if args.output_dir: + os.makedirs(args.output_dir, exist_ok=True) + + with open(args.output_file, "w", encoding="utf-8") as out: + out.write("// Auto-generated shader embedding\n\n") + for fname in sorted(os.listdir(args.input_dir)): + if fname.endswith(".wgsl"): + generate_variants(os.path.join(args.input_dir, fname), args.output_dir, out) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl index cb7c8c3e09..194d2d6f58 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/memset.wgsl @@ -19,20 +19,20 @@ fn main(@builtin(global_invocation_id) gid: vec3) { let start = params.offset; let end = params.offset + params.size; - for (var j: u32 = 0u; j < bytes_per_thread; j = j + 1u) { + for (var j: u32 = 0u; j < bytes_per_thread; j += 4) { let byte_index = start + i + j; - if (byte_index + 4u <= end) { - output_buffer[(byte_index >> 2u)] = params.value; + if (byte_index + 4 <= end) { + output_buffer[byte_index >> 2] = params.value; } else { // Handle tail (unaligned) - for (var k: u32 = 0u; k < 4u; k = k + 1u) { + for (var k: u32 = 0; k < 4; k++) { let idx = byte_index + k; if (idx < end) { - let word_idx = idx >> 2u; - let byte_offset = (idx & 3u) * 8u; - let mask = ~(0xffu << byte_offset); + let word_idx = idx >> 2; + let bit_offset = (idx & 3) * 8u; + let mask = ~(0xffu << bit_offset); let existing = output_buffer[word_idx]; - output_buffer[word_idx] = (existing & mask) | ((params.value & 0xffu) << byte_offset); + output_buffer[word_idx] = (existing & mask) | (params.value & (0xffu << bit_offset)); } } } diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl new file mode 100644 index 0000000000..79465c298d --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl @@ -0,0 +1,1794 @@ +#define(VARIANTS) + +[ + { + "REPLS": { + "SRC0_TYPE" : "f32", + "SRC1_TYPE" : "f32", + "BLOCK_SIZE" : 1 + }, + "DECLS" : ["FLOAT"] + }, + { + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f16", + "BLOCK_SIZE" : 1 + }, + "DECLS" : ["FLOAT"] + }, + { + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "BLOCK_SIZE" : 1 + }, + "DECLS" : ["FLOAT"] + }, + { + "REPLS": { + "SRC0_TYPE": "q4_0", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 32 + }, + "DECLS": ["BYTE_HELPERS", "Q4_0"] + }, + { + "REPLS": { + "SRC0_TYPE": "q4_1", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 32 + }, + "DECLS": ["BYTE_HELPERS", "Q4_1"] + }, + { + "REPLS": { + "SRC0_TYPE": "q5_0", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 32 + }, + "DECLS": ["BYTE_HELPERS", "Q5_0"] + }, + { + "REPLS": { + "SRC0_TYPE": "q5_1", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 32 + }, + "DECLS": ["BYTE_HELPERS", "Q5_1"] + }, + { + "REPLS": { + "SRC0_TYPE": "q8_0", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 32 + }, + "DECLS": ["BYTE_HELPERS", "Q8_0"] + }, + { + "REPLS": { + "SRC0_TYPE": "q2_k", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "Q2_K"] + }, + { + "REPLS": { + "SRC0_TYPE": "q3_k", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "Q3_K"] + }, + { + "REPLS": { + "SRC0_TYPE": "q4_k", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["Q45_K_SCALE_MIN", "BYTE_HELPERS", "Q4_K"] + }, + { + "REPLS": { + "SRC0_TYPE": "q5_k", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["Q45_K_SCALE_MIN", "BYTE_HELPERS", "Q5_K"] + }, + { + "REPLS": { + "SRC0_TYPE": "q6_k", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "Q6_K"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq2_xxs", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ23_TABLES", "IQ2_XXS"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq2_xs", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ23_TABLES", "IQ2_XS"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq2_s", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ23_TABLES", "IQ2_S"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq3_xxs", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ23_TABLES", "IQ3_XSS"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq3_s", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ23_TABLES", "IQ3_S"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq1_s", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ1_TABLE","IQ1_S"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq1_m", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256 + }, + "DECLS": ["BYTE_HELPERS", "IQ1_TABLE","IQ1_M"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq4_nl", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 32, + }, + "DECLS": ["BYTE_HELPERS", "IQ4_TABLE", "IQ4_NL"] + }, + { + "REPLS": { + "SRC0_TYPE": "iq4_xs", + "SRC1_TYPE": "f32", + "BLOCK_SIZE": 256, + }, + "DECLS": ["BYTE_HELPERS", "IQ4_TABLE", "IQ4_XS"] + } +] + +#end(VARIANTS) + +#define(DECLS) + +#decl(BYTE_HELPERS) + +fn get_byte(value: u32, index: u32) -> u32 { + return (value >> (index * 8)) & 0xFF; +} + +fn get_byte_i32(value: u32, index: u32) -> i32 { + return bitcast(((value >> (index * 8)) & 0xFF) << 24) >> 24; +} + +#enddecl(BYTE_HELPERS) + +#decl(FLOAT) +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + return f32(src0[src0_idx_base + offset]) * f32(src1[src1_idx_base + offset]); +} +#enddecl(FLOAT) + +#decl(Q4_0) +struct q4_0 { + d: f16, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block_q4_0 = src0[src0_idx_base + offset]; + let d = f32(block_q4_0.d); + var sum: f32 = 0.0; + for (var j: u32 = 0; j < 4; j++) { + let q_packed = bitcast(vec2(block_q4_0.qs[2 * j], block_q4_0.qs[2 * j + 1])); + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte(q_packed, k); + let q_hi = (f32((q_byte >> 4) & 0xF) - 8.0f) * d; + let q_lo = (f32(q_byte & 0xF) - 8.0f) * d; + let src1_offset = src1_idx_base + offset * 32 + j * 4 + k; + sum += q_lo * f32(src1[src1_offset]); + sum += q_hi * f32(src1[src1_offset + 16]); + } + } + return sum; +} +#enddecl(Q4_0) + +#decl(Q4_1) +struct q4_1 { + d: f16, + m: f16, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block_q4_1 = src0[src0_idx_base + offset]; + let d = f32(block_q4_1.d); + let m = f32(block_q4_1.m); + var sum: f32 = 0.0; + for (var j: u32 = 0; j < 4; j++) { + let q_packed = block_q4_1.qs[j]; + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte(q_packed, k); + let q_hi = f32((q_byte >> 4) & 0xF) * d + m; + let q_lo = f32(q_byte & 0xF) * d + m; + let src1_offset = src1_idx_base + offset * 32 + j * 4 + k; + sum += q_lo * f32(src1[src1_offset]); + sum += q_hi * f32(src1[src1_offset + 16]); + } + } + return sum; +} +#enddecl(Q4_1) + +#decl(Q5_0) +struct q5_0 { + d: f16, + qh: array, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block_q5_0 = src0[src0_idx_base + offset]; + let d = f32(block_q5_0.d); + var sum: f32 = 0.0; + let qh_packed = bitcast(vec2(block_q5_0.qh[0], block_q5_0.qh[1])); + for (var j: u32 = 0; j < 4; j++) { + let q_packed = bitcast(vec2(block_q5_0.qs[2 * j], block_q5_0.qs[2 * j + 1])); + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte(q_packed, k); + let qh_hi = (qh_packed >> (j * 4 + k + 12)) & 0x10; + let q_hi = (f32(((q_byte >> 4) & 0xF) | qh_hi) - 16.0) * d; + let qh_lo = ((qh_packed >> (j * 4 + k)) << 4) & 0x10; + let q_lo = (f32((q_byte & 0xF) | qh_lo) - 16.0) * d; + let src1_offset = src1_idx_base + offset * 32 + j * 4 + k; + sum += q_lo * f32(src1[src1_offset]); + sum += q_hi * f32(src1[src1_offset + 16]); + } + } + return sum; +} +#enddecl(Q5_0) + +#decl(Q5_1) +struct q5_1 { + d: f16, + m: f16, + qh: u32, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block_q5_1 = src0[src0_idx_base + offset]; + let d = f32(block_q5_1.d); + let m = f32(block_q5_1.m); + var sum: f32 = 0.0; + for (var j: u32 = 0; j < 4; j++) { + let q_packed = block_q5_1.qs[j]; + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte(q_packed, k); + let qh_hi = (block_q5_1.qh >> (j * 4 + k + 12)) & 0x10; + let q_hi = f32(((q_byte >> 4) & 0xF) | qh_hi) * d + m; + let qh_lo = ((block_q5_1.qh >> (j * 4 + k)) << 4) & 0x10; + let q_lo = f32((q_byte & 0xF) | qh_lo) * d + m; + let src1_offset = src1_idx_base + offset * 32 + j * 4 + k; + sum += q_lo * f32(src1[src1_offset]); + sum += q_hi * f32(src1[src1_offset + 16]); + } + } + return sum; +} +#enddecl(Q5_1) + +#decl(Q8_0) +struct q8_0 { + d: f16, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block_q8_0 = src0[src0_idx_base + offset]; + let d = f32(block_q8_0.d); + var sum: f32 = 0.0; + for (var j: u32 = 0; j < 8; j++) { + let q_packed = bitcast(vec2(block_q8_0.qs[2 * j], block_q8_0.qs[2 * j + 1])); + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte_i32(q_packed, k); + let q_val = f32(q_byte) * d; + let src1_offset = src1_idx_base + offset * 32 + j * 4 + k; + sum += q_val * f32(src1[src1_offset]); + } + } + return sum; +} +#enddecl(Q8_0) + +#decl(Q8_1) +struct q8_1 { + d: f16, + m: f16, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block_q8_1 = src0[src0_idx_base + offset]; + let d = f32(block_q8_1.d); + let m = f32(block_q8_1.m); + var sum: f32 = 0.0; + for (var j: u32 = 0; j < 8; j++) { + let q_packed = block_q8_1.qs[j]; + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte_i32(q_packed, k); + let q_val = f32(q_byte) * d + m; + let src1_offset = src1_idx_base + offset * 32 + j * 4 + k; + sum += q_val * f32(src1[src1_offset]); + } + } + return sum; +} +#enddecl(Q8_1) + +#decl(Q2_K) +// 16 blocks of 16 elements each +struct q2_k { + scales: array, + qs: array, + d: f16, + dmin: f16 +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + let m = f32(block.dmin); + var sum = 0.0; + var src1_i = src1_idx_base + offset * 256; + var is: u32 = 0; + // 2 halves of the block (128 elements each) + for (var q_b_idx: u32 = 0; q_b_idx < 64; q_b_idx += 32) { + // 4 groups (each group has 2 blocks of 16 elements) + for (var shift: u32 = 0; shift < 8; shift += 2) { + // 2 blocks + for (var k: u32 = 0; k < 32; k += 16) { + let sc = get_byte(block.scales[is / 4], is % 4); + is++; + let dl = d * f32(sc & 0xF); + let ml = m * f32(sc >> 4); + for (var l: u32 = 0u; l < 16; l++) { + let q_idx = q_b_idx + k + l; + let q_byte = get_byte(block.qs[q_idx / 4], q_idx % 4); + let qs_val = (q_byte >> shift) & 3; + sum += (f32(qs_val) * dl - ml) * src1[src1_i]; + src1_i++; + } + } + } + } + return sum; +} + +#enddecl(Q2_K) + +#decl(Q3_K) +// 16 blocks of 16 elements each +struct q3_k { + hmask: array, + qs: array, + scales: array, // 6-bit quantized values + d: f16 +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + + // extract 6-bit scales, which consist of 4-bits from first 8 bytes of scale, + // and 2-bits from the last 4 bytes + let kmask1: u32 = 0x03030303; + let kmask2: u32 = 0x0f0f0f0f; + var scale_vals: array; + for (var i: u32 = 0; i < 4; i++) { + scale_vals[i] = bitcast(vec2(block.scales[2 * i], block.scales[2 * i + 1])); + } + var tmp: u32 = scale_vals[2]; + scale_vals[2] = ((scale_vals[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4); + scale_vals[3] = ((scale_vals[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4); + scale_vals[0] = (scale_vals[0] & kmask2) | ((tmp & kmask1) << 4); + scale_vals[1] = (scale_vals[1] & kmask2) | (((tmp >> 2) & kmask1) << 4); + + // convert arrays of f16 -> u32 + var hmask_vals: array; + for (var i: u32 = 0; i < 8; i++) { + hmask_vals[i] = bitcast(vec2(block.hmask[2 * i], block.hmask[2 * i + 1])); + } + var qs_vals: array; + for (var i: u32 = 0; i < 16; i++) { + qs_vals[i] = bitcast(vec2(block.qs[2 * i], block.qs[2 * i + 1])); + } + + var sum = 0.0; + var src1_i = src1_idx_base + offset * 256; + var is: u32 = 0; + var m: u32 = 1; + // 2 halves of the block (128 elements each) + for (var q_b_idx: u32 = 0; q_b_idx < 64; q_b_idx += 32) { + // 4 groups (each group has 2 blocks of 16 elements) + for (var shift: u32 = 0; shift < 8; shift += 2) { + // 2 blocks + for (var k: u32 = 0; k < 32; k += 16) { + let sc = get_byte(scale_vals[is / 4], is % 4); + is++; + let dl = d * (f32(sc) - 32.0); + for (var l: u32 = 0u; l < 16u; l++) { + let q_idx = q_b_idx + k + l; + let hm_idx = k + l; + let q_byte = get_byte(qs_vals[q_idx / 4], q_idx % 4); + let hmask_byte = get_byte(hmask_vals[hm_idx / 4], hm_idx % 4); + let hm = select(4.0, 0.0, (hmask_byte & m) != 0); + let qs_val = (q_byte >> shift) & 3; + sum += ((f32(qs_val) - hm) * dl) * src1[src1_i]; + src1_i++; + } + } + m <<= 1; + } + } + return sum; +} + +#enddecl(Q3_K) + +#decl(Q45_K_SCALE_MIN) + +fn get_scale_min(is: u32, scales: array) -> vec2 { + if (is < 4) { + let sc_byte = get_byte(scales[is / 4], is % 4); + let min_byte = get_byte(scales[(is + 4) / 4], is % 4); + return vec2(f32(sc_byte & 63), f32(min_byte & 63)); + } else { + let sc_min_lo = get_byte(scales[(is + 4) / 4], (is + 4) % 4); + let sc_hi = get_byte(scales[(is - 4) / 4], (is - 4) % 4); + let min_hi = get_byte(scales[is / 4], is % 4); + let sc = (sc_min_lo & 0xF) | ((sc_hi >> 6) << 4); + let m = (sc_min_lo >> 4) | ((min_hi >> 6) << 4); + return vec2(f32(sc), f32(m)); + } +} + +#enddecl(Q45_K_SCALE_MIN) + +#decl(Q4_K) +// 8 blocks of 32 elements each +struct q4_k { + d: f16, + dmin: f16, + scales: array, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + let m = f32(block.dmin); + var sum = 0.0; + var src1_i = src1_idx_base + offset * 256; + var is: u32 = 0; + // 2 blocks each iteration + for (var q_b_idx: u32 = 0; q_b_idx < 128; q_b_idx += 32) { + for (var shift: u32 = 0; shift < 8; shift += 4) { + let scale_min = get_scale_min(is, block.scales); + is++; + let dl = d * scale_min.x; + let ml = m * scale_min.y; + for (var l: u32 = 0; l < 32; l++) { + let q_idx = q_b_idx + l; + let q_byte = get_byte(block.qs[q_idx / 4], q_idx % 4); + let qs_val = (q_byte >> shift) & 0xF; + sum += (f32(qs_val) * dl - ml) * src1[src1_i]; + src1_i++; + } + } + } + return sum; +} + +#enddecl(Q4_K) + +#decl(Q5_K) +// 8 blocks of 32 elements each +struct q5_k { + d: f16, + dmin: f16, + scales: array, + qh: array, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + let m = f32(block.dmin); + var sum = 0.0; + var src1_i = src1_idx_base + offset * 256; + var is: u32 = 0; + var u: u32 = 1; + // 2 blocks each iteration + for (var q_b_idx: u32 = 0; q_b_idx < 128; q_b_idx += 32) { + for (var shift: u32 = 0; shift < 8; shift += 4) { + let scale_min = get_scale_min(is, block.scales); + is++; + let dl = d * scale_min.x; + let ml = m * scale_min.y; + for (var l: u32 = 0; l < 32; l++) { + let q_idx = q_b_idx + l; + let q_byte = get_byte(block.qs[q_idx / 4], q_idx % 4); + let qh_byte = get_byte(block.qh[l / 4], l % 4); + let qs_val = (q_byte >> shift) & 0xF; + let qh_val = select(0.0, 16.0, (qh_byte & u) != 0); + sum += ((f32(qs_val) + qh_val) * dl - ml) * src1[src1_i]; + src1_i++; + } + u <<= 1; + } + } + return sum; +} + +#enddecl(Q5_K) + +#decl(Q6_K) +// 16 blocks of 16 elements each +struct q6_k { + ql: array, + qh: array, + scales: array, + d: f16 +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + + // convert arrays of f16 -> u32 + var ql_vals: array; + for (var i: u32 = 0; i < 32; i++) { + ql_vals[i] = bitcast(vec2(block.ql[2 * i], block.ql[2 * i + 1])); + } + var qh_vals: array; + for (var i: u32 = 0; i < 16; i++) { + qh_vals[i] = bitcast(vec2(block.qh[2 * i], block.qh[2 * i + 1])); + } + var scale_vals: array; + for (var i: u32 = 0; i < 4; i++) { + scale_vals[i] = bitcast(vec2(block.scales[2 * i], block.scales[2 * i + 1])); + } + + var sum = 0.0; + var src1_i = src1_idx_base + offset * 256; + var qh_b_idx: u32 = 0; + var sc_b_idx: u32 = 0; + for (var ql_b_idx: u32 = 0; ql_b_idx < 128; ql_b_idx += 64) { + for (var l: u32 = 0; l < 32; l++) { + let ql13_b = get_byte(ql_vals[(ql_b_idx + l) / 4], (ql_b_idx + l) % 4); + let ql24_b = get_byte(ql_vals[(ql_b_idx + l + 32) / 4], (ql_b_idx + l + 32) % 4); + let qh_b = get_byte(qh_vals[(qh_b_idx + l) / 4], (qh_b_idx + l) % 4); + + let q1 = f32((ql13_b & 0xF) | ((qh_b & 3) << 4)) - 32.0; + let q2 = f32((ql24_b & 0xF) | (((qh_b >> 2) & 3) << 4)) - 32.0; + let q3 = f32((ql13_b >> 4) | (((qh_b >> 4) & 3) << 4)) - 32.0; + let q4 = f32((ql24_b >> 4) | (((qh_b >> 6) & 3) << 4)) - 32.0; + + let is = l/16; + let is1 = sc_b_idx + is; + let sc1 = get_byte_i32(scale_vals[is1 / 4], is1 % 4); + let is2 = sc_b_idx + is + 2; + let sc2 = get_byte_i32(scale_vals[is2 / 4], is2 % 4); + let is3 = sc_b_idx + is + 4; + let sc3 = get_byte_i32(scale_vals[is3 / 4], is3 % 4); + let is4 = sc_b_idx + is + 6; + let sc4 = get_byte_i32(scale_vals[is4 / 4], is4 % 4); + + sum += d * f32(sc1) * q1 * src1[src1_i + l]; + sum += d * f32(sc2) * q2 * src1[src1_i + l + 32]; + sum += d * f32(sc3) * q3 * src1[src1_i + l + 64]; + sum += d * f32(sc4) * q4 * src1[src1_i + l + 96]; + } + src1_i += 128; + qh_b_idx += 32; + sc_b_idx += 8; + } + return sum; +} + +#enddecl(Q6_K) + +#decl(IQ23_TABLES) +const kmask_iq2xs : array = array( + 0x08040201u, // 1, 2, 4, 8 + 0x80402010u // 16, 32, 64, 128 +); + +const ksigns_iq2xs: array = array( + 0x03828100,0x87060584,0x8b0a0988,0x0f8e8d0c, + 0x93121190,0x17969514,0x1b9a9918,0x9f1e1d9c, + 0xa32221a0,0x27a6a524,0x2baaa928,0xaf2e2dac, + 0x33b2b130,0xb73635b4,0xbb3a39b8,0x3fbebd3c, + 0xc34241c0,0x47c6c544,0x4bcac948,0xcf4e4dcc, + 0x53d2d150,0xd75655d4,0xdb5a59d8,0x5fdedd5c, + 0x63e2e160,0xe76665e4,0xeb6a69e8,0x6feeed6c, + 0xf37271f0,0x77f6f574,0x7bfaf978,0xff7e7dfc +); +#enddecl(IQ23_TABLES) + +#decl(IQ2_XXS) + +const iq2xxs_grid = array( + 0x08080808, 0x08080808, 0x0808082b, 0x08080808, 0x08081919, 0x08080808, 0x08082b08, 0x08080808, + 0x08082b2b, 0x08080808, 0x08190819, 0x08080808, 0x08191908, 0x08080808, 0x082b0808, 0x08080808, + 0x082b082b, 0x08080808, 0x082b2b08, 0x08080808, 0x082b2b2b, 0x08080808, 0x19080819, 0x08080808, + 0x19081908, 0x08080808, 0x19190808, 0x08080808, 0x19192b08, 0x08080808, 0x192b0819, 0x08080808, + 0x192b1908, 0x08080808, 0x2b080808, 0x08080808, 0x2b08082b, 0x08080808, 0x2b082b2b, 0x08080808, + 0x2b2b082b, 0x08080808, 0x08080819, 0x08080819, 0x08081908, 0x08080819, 0x08190808, 0x08080819, + 0x08191919, 0x08080819, 0x19080808, 0x08080819, 0x2b081908, 0x08080819, 0x2b192b08, 0x08080819, + 0x08080808, 0x0808082b, 0x0808082b, 0x0808082b, 0x082b082b, 0x0808082b, 0x2b08082b, 0x0808082b, + 0x08080819, 0x08081908, 0x08081908, 0x08081908, 0x08190808, 0x08081908, 0x082b0819, 0x08081908, + 0x082b1908, 0x08081908, 0x19080808, 0x08081908, 0x1908082b, 0x08081908, 0x19082b08, 0x08081908, + 0x192b0808, 0x08081908, 0x2b080819, 0x08081908, 0x2b081908, 0x08081908, 0x2b190808, 0x08081908, + 0x2b2b1908, 0x08081908, 0x08080808, 0x08081919, 0x0808082b, 0x08081919, 0x08082b08, 0x08081919, + 0x082b0808, 0x08081919, 0x1908192b, 0x08081919, 0x192b2b19, 0x08081919, 0x2b080808, 0x08081919, + 0x2b190819, 0x08081919, 0x08082b19, 0x0808192b, 0x08190808, 0x0808192b, 0x19080808, 0x0808192b, + 0x2b081908, 0x0808192b, 0x2b2b1908, 0x0808192b, 0x08080808, 0x08082b08, 0x08081919, 0x08082b08, + 0x08082b08, 0x08082b08, 0x08191908, 0x08082b08, 0x082b2b08, 0x08082b08, 0x19080819, 0x08082b08, + 0x19081908, 0x08082b08, 0x19190808, 0x08082b08, 0x1919082b, 0x08082b08, 0x2b082b08, 0x08082b08, + 0x08081908, 0x08082b19, 0x19080808, 0x08082b19, 0x0808082b, 0x08082b2b, 0x08191908, 0x08082b2b, + 0x08080819, 0x08190808, 0x08081908, 0x08190808, 0x08190808, 0x08190808, 0x082b0819, 0x08190808, + 0x19080808, 0x08190808, 0x192b0808, 0x08190808, 0x2b081908, 0x08190808, 0x2b190808, 0x08190808, + 0x2b191919, 0x08190808, 0x08080808, 0x08190819, 0x08082b08, 0x08190819, 0x082b0808, 0x08190819, + 0x19190808, 0x08190819, 0x19192b2b, 0x08190819, 0x2b080808, 0x08190819, 0x082b1908, 0x0819082b, + 0x19081919, 0x0819082b, 0x08080808, 0x08191908, 0x08082b08, 0x08191908, 0x082b0808, 0x08191908, + 0x082b1919, 0x08191908, 0x19082b19, 0x08191908, 0x2b080808, 0x08191908, 0x08192b08, 0x08191919, + 0x192b082b, 0x08191919, 0x08080808, 0x0819192b, 0x0819192b, 0x0819192b, 0x08080819, 0x08192b08, + 0x08081908, 0x08192b08, 0x08190808, 0x08192b08, 0x19080808, 0x08192b08, 0x2b080819, 0x08192b08, + 0x08080808, 0x08192b19, 0x08081919, 0x08192b19, 0x2b2b0808, 0x08192b19, 0x19190819, 0x08192b2b, + 0x08080808, 0x082b0808, 0x0808082b, 0x082b0808, 0x08082b2b, 0x082b0808, 0x19081908, 0x082b0808, + 0x192b0819, 0x082b0808, 0x2b080808, 0x082b0808, 0x2b08082b, 0x082b0808, 0x082b2b19, 0x082b0819, + 0x19082b08, 0x082b0819, 0x08080808, 0x082b082b, 0x0808082b, 0x082b082b, 0x08080819, 0x082b1908, + 0x08081908, 0x082b1908, 0x08190808, 0x082b1908, 0x19080808, 0x082b1908, 0x1919192b, 0x082b1908, + 0x08080808, 0x082b1919, 0x19080819, 0x082b1919, 0x192b1908, 0x082b1919, 0x2b190808, 0x082b192b, + 0x08082b08, 0x082b2b08, 0x082b0808, 0x082b2b08, 0x2b191908, 0x082b2b08, 0x19081908, 0x082b2b2b, + 0x08080819, 0x19080808, 0x08081908, 0x19080808, 0x08190808, 0x19080808, 0x08192b08, 0x19080808, + 0x082b0819, 0x19080808, 0x082b1908, 0x19080808, 0x19080808, 0x19080808, 0x19082b08, 0x19080808, + 0x1919192b, 0x19080808, 0x192b0808, 0x19080808, 0x2b080819, 0x19080808, 0x2b081908, 0x19080808, + 0x2b190808, 0x19080808, 0x08080808, 0x19080819, 0x082b0808, 0x19080819, 0x192b0819, 0x19080819, + 0x2b080808, 0x19080819, 0x2b081919, 0x19080819, 0x08080819, 0x1908082b, 0x08190808, 0x1908082b, + 0x19082b08, 0x1908082b, 0x1919192b, 0x1908082b, 0x192b2b08, 0x1908082b, 0x08080808, 0x19081908, + 0x08082b08, 0x19081908, 0x082b0808, 0x19081908, 0x2b080808, 0x19081908, 0x2b192b19, 0x19081908, + 0x0819082b, 0x19081919, 0x082b1908, 0x19081919, 0x08080808, 0x1908192b, 0x08080819, 0x19082b08, + 0x08081908, 0x19082b08, 0x08190808, 0x19082b08, 0x19080808, 0x19082b08, 0x19081919, 0x19082b08, + 0x08080808, 0x19082b19, 0x19192b08, 0x19082b19, 0x192b0819, 0x19082b19, 0x2b08082b, 0x19082b19, + 0x19081919, 0x19082b2b, 0x2b190808, 0x19082b2b, 0x08080808, 0x19190808, 0x08082b08, 0x19190808, + 0x08190819, 0x19190808, 0x08192b19, 0x19190808, 0x082b0808, 0x19190808, 0x2b080808, 0x19190808, + 0x2b082b08, 0x19190808, 0x08081908, 0x19190819, 0x1908082b, 0x19190819, 0x2b2b1908, 0x19190819, + 0x2b190819, 0x1919082b, 0x2b190808, 0x19191908, 0x2b19082b, 0x19191908, 0x08082b2b, 0x19191919, + 0x08080819, 0x1919192b, 0x19191908, 0x1919192b, 0x08080808, 0x19192b08, 0x08190819, 0x19192b08, + 0x08192b19, 0x19192b08, 0x192b1908, 0x19192b08, 0x19080808, 0x19192b19, 0x08082b08, 0x19192b2b, + 0x08081908, 0x192b0808, 0x08190808, 0x192b0808, 0x19080808, 0x192b0808, 0x192b2b08, 0x192b0808, + 0x08080808, 0x192b0819, 0x19191919, 0x192b0819, 0x08192b08, 0x192b082b, 0x192b0808, 0x192b082b, + 0x08080808, 0x192b1908, 0x08081919, 0x192b1908, 0x08190808, 0x192b1919, 0x0819082b, 0x192b1919, + 0x2b081908, 0x192b1919, 0x1908082b, 0x192b2b08, 0x08080808, 0x2b080808, 0x0808082b, 0x2b080808, + 0x08082b2b, 0x2b080808, 0x19080819, 0x2b080808, 0x2b08082b, 0x2b080808, 0x08081908, 0x2b080819, + 0x08192b08, 0x2b080819, 0x19080808, 0x2b080819, 0x08190819, 0x2b08082b, 0x08080819, 0x2b081908, + 0x08081908, 0x2b081908, 0x08190808, 0x2b081908, 0x08191919, 0x2b081908, 0x19080808, 0x2b081908, + 0x192b0808, 0x2b081908, 0x08080808, 0x2b081919, 0x1908192b, 0x2b081919, 0x2b191908, 0x2b081919, + 0x08082b19, 0x2b08192b, 0x19080808, 0x2b08192b, 0x192b0808, 0x2b08192b, 0x0808082b, 0x2b082b08, + 0x08081908, 0x2b082b19, 0x08190819, 0x2b082b2b, 0x08081908, 0x2b190808, 0x08190808, 0x2b190808, + 0x082b1908, 0x2b190808, 0x19080808, 0x2b190808, 0x2b2b0819, 0x2b190808, 0x0819192b, 0x2b190819, + 0x2b080808, 0x2b190819, 0x19081919, 0x2b19082b, 0x08080808, 0x2b191908, 0x082b082b, 0x2b191908, + 0x19081908, 0x2b191908, 0x19190819, 0x2b191919, 0x2b080819, 0x2b192b08, 0x082b0808, 0x2b192b19, + 0x0808082b, 0x2b2b0808, 0x19190808, 0x2b2b0808, 0x2b081919, 0x2b2b0808, 0x08082b19, 0x2b2b0819, + 0x08080808, 0x2b2b082b, 0x08192b08, 0x2b2b1908, 0x19190808, 0x2b2b2b08, 0x08081908, 0x2b2b2b19 +); + +struct iq2_xxs { + d: f16, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 256; + var sum = 0.0; + for (var ib: u32 = 0; ib < 32; ib += 4) { + let aux0 = bitcast(vec2(block.qs[ib], block.qs[ib + 1])); + let aux1 = bitcast(vec2(block.qs[ib + 2], block.qs[ib + 3])); + let db = d * (0.5 + f32(aux1 >> 28)) * 0.25; + for (var l: u32 = 0; l < 4; l++) { + let ig = get_byte(aux0, l) * 8; + let is = (aux1 >> (7 * l)) & 127; + let signs = get_byte(ksigns_iq2xs[is / 4], is % 4); + for (var j: u32 = 0; j < 8; j++) { + let g = get_byte(iq2xxs_grid[(ig + j) / 4], (ig + j) % 4); + let m = select(1.0, -1.0, (get_byte(kmask_iq2xs[j / 4], j % 4) & signs) != 0); + sum += db * f32(g) * m * src1[src1_i]; + src1_i++; + } + } + } + return sum; +} + +#enddecl(IQ2_XXS) + +#decl(IQ2_XS) +const iq2xs_grid = array( + 0x08080808, 0x08080808, 0x0808082b, 0x08080808, 0x08081919, 0x08080808, 0x08082b08, 0x08080808, + 0x08082b2b, 0x08080808, 0x08190819, 0x08080808, 0x08191908, 0x08080808, 0x0819192b, 0x08080808, + 0x08192b19, 0x08080808, 0x082b0808, 0x08080808, 0x082b082b, 0x08080808, 0x082b1919, 0x08080808, + 0x082b2b08, 0x08080808, 0x19080819, 0x08080808, 0x19081908, 0x08080808, 0x1908192b, 0x08080808, + 0x19082b19, 0x08080808, 0x19190808, 0x08080808, 0x1919082b, 0x08080808, 0x19191919, 0x08080808, + 0x19192b08, 0x08080808, 0x192b0819, 0x08080808, 0x192b1908, 0x08080808, 0x2b080808, 0x08080808, + 0x2b08082b, 0x08080808, 0x2b081919, 0x08080808, 0x2b082b08, 0x08080808, 0x2b190819, 0x08080808, + 0x2b191908, 0x08080808, 0x2b192b19, 0x08080808, 0x2b2b0808, 0x08080808, 0x08080819, 0x08080819, + 0x08081908, 0x08080819, 0x0808192b, 0x08080819, 0x08082b19, 0x08080819, 0x08190808, 0x08080819, + 0x0819082b, 0x08080819, 0x08191919, 0x08080819, 0x08192b08, 0x08080819, 0x08192b2b, 0x08080819, + 0x082b0819, 0x08080819, 0x082b1908, 0x08080819, 0x19080808, 0x08080819, 0x1908082b, 0x08080819, + 0x19081919, 0x08080819, 0x19082b08, 0x08080819, 0x19190819, 0x08080819, 0x19191908, 0x08080819, + 0x192b0808, 0x08080819, 0x192b2b08, 0x08080819, 0x2b080819, 0x08080819, 0x2b081908, 0x08080819, + 0x2b190808, 0x08080819, 0x08080808, 0x0808082b, 0x0808082b, 0x0808082b, 0x08081919, 0x0808082b, + 0x08082b08, 0x0808082b, 0x08190819, 0x0808082b, 0x08191908, 0x0808082b, 0x082b0808, 0x0808082b, + 0x19080819, 0x0808082b, 0x19081908, 0x0808082b, 0x19190808, 0x0808082b, 0x19191919, 0x0808082b, + 0x2b080808, 0x0808082b, 0x2b082b2b, 0x0808082b, 0x08080819, 0x08081908, 0x08081908, 0x08081908, + 0x0808192b, 0x08081908, 0x08082b19, 0x08081908, 0x08190808, 0x08081908, 0x0819082b, 0x08081908, + 0x08191919, 0x08081908, 0x08192b08, 0x08081908, 0x082b0819, 0x08081908, 0x082b1908, 0x08081908, + 0x19080808, 0x08081908, 0x1908082b, 0x08081908, 0x19081919, 0x08081908, 0x19082b08, 0x08081908, + 0x19190819, 0x08081908, 0x19191908, 0x08081908, 0x1919192b, 0x08081908, 0x192b0808, 0x08081908, + 0x2b080819, 0x08081908, 0x2b081908, 0x08081908, 0x2b190808, 0x08081908, 0x08080808, 0x08081919, + 0x0808082b, 0x08081919, 0x08081919, 0x08081919, 0x08082b08, 0x08081919, 0x08190819, 0x08081919, + 0x08191908, 0x08081919, 0x082b0808, 0x08081919, 0x19080819, 0x08081919, 0x19081908, 0x08081919, + 0x19190808, 0x08081919, 0x192b0819, 0x08081919, 0x2b080808, 0x08081919, 0x08080819, 0x0808192b, + 0x08081908, 0x0808192b, 0x08190808, 0x0808192b, 0x082b192b, 0x0808192b, 0x19080808, 0x0808192b, + 0x1908082b, 0x0808192b, 0x2b081908, 0x0808192b, 0x08080808, 0x08082b08, 0x0808082b, 0x08082b08, + 0x08081919, 0x08082b08, 0x08082b08, 0x08082b08, 0x08082b2b, 0x08082b08, 0x08190819, 0x08082b08, + 0x08191908, 0x08082b08, 0x082b0808, 0x08082b08, 0x082b1919, 0x08082b08, 0x19080819, 0x08082b08, + 0x19081908, 0x08082b08, 0x19190808, 0x08082b08, 0x19192b08, 0x08082b08, 0x2b080808, 0x08082b08, + 0x2b2b0808, 0x08082b08, 0x2b2b2b2b, 0x08082b08, 0x08080819, 0x08082b19, 0x08081908, 0x08082b19, + 0x08190808, 0x08082b19, 0x19080808, 0x08082b19, 0x2b080819, 0x08082b19, 0x2b082b19, 0x08082b19, + 0x08080808, 0x08082b2b, 0x082b0808, 0x08082b2b, 0x082b2b08, 0x08082b2b, 0x2b19192b, 0x08082b2b, + 0x2b2b0808, 0x08082b2b, 0x08080819, 0x08190808, 0x08081908, 0x08190808, 0x0808192b, 0x08190808, + 0x08082b19, 0x08190808, 0x08190808, 0x08190808, 0x0819082b, 0x08190808, 0x08191919, 0x08190808, + 0x08192b08, 0x08190808, 0x082b0819, 0x08190808, 0x082b1908, 0x08190808, 0x19080808, 0x08190808, + 0x1908082b, 0x08190808, 0x19081919, 0x08190808, 0x19082b08, 0x08190808, 0x19190819, 0x08190808, + 0x19191908, 0x08190808, 0x192b0808, 0x08190808, 0x192b2b2b, 0x08190808, 0x2b080819, 0x08190808, + 0x2b081908, 0x08190808, 0x2b190808, 0x08190808, 0x08080808, 0x08190819, 0x0808082b, 0x08190819, + 0x08081919, 0x08190819, 0x08082b08, 0x08190819, 0x08190819, 0x08190819, 0x08191908, 0x08190819, + 0x082b0808, 0x08190819, 0x19080819, 0x08190819, 0x19081908, 0x08190819, 0x19190808, 0x08190819, + 0x2b080808, 0x08190819, 0x2b191908, 0x08190819, 0x2b19192b, 0x08190819, 0x08080819, 0x0819082b, + 0x08081908, 0x0819082b, 0x0808192b, 0x0819082b, 0x08190808, 0x0819082b, 0x19080808, 0x0819082b, + 0x192b0808, 0x0819082b, 0x08080808, 0x08191908, 0x0808082b, 0x08191908, 0x08081919, 0x08191908, + 0x08082b08, 0x08191908, 0x08190819, 0x08191908, 0x08191908, 0x08191908, 0x082b0808, 0x08191908, + 0x19080819, 0x08191908, 0x19081908, 0x08191908, 0x19082b19, 0x08191908, 0x19190808, 0x08191908, + 0x192b1908, 0x08191908, 0x2b080808, 0x08191908, 0x08080819, 0x08191919, 0x08081908, 0x08191919, + 0x08190808, 0x08191919, 0x19080808, 0x08191919, 0x08080808, 0x0819192b, 0x08191908, 0x0819192b, + 0x19082b19, 0x0819192b, 0x08080819, 0x08192b08, 0x08081908, 0x08192b08, 0x08190808, 0x08192b08, + 0x0819082b, 0x08192b08, 0x19080808, 0x08192b08, 0x19191908, 0x08192b08, 0x2b08192b, 0x08192b08, + 0x08080808, 0x08192b19, 0x08081919, 0x08192b19, 0x192b192b, 0x08192b19, 0x19190819, 0x08192b2b, + 0x2b2b2b19, 0x08192b2b, 0x08080808, 0x082b0808, 0x0808082b, 0x082b0808, 0x08081919, 0x082b0808, + 0x08082b08, 0x082b0808, 0x08082b2b, 0x082b0808, 0x08190819, 0x082b0808, 0x08191908, 0x082b0808, + 0x082b0808, 0x082b0808, 0x19080819, 0x082b0808, 0x19081908, 0x082b0808, 0x19190808, 0x082b0808, + 0x2b080808, 0x082b0808, 0x2b2b0808, 0x082b0808, 0x08080819, 0x082b0819, 0x08081908, 0x082b0819, + 0x08190808, 0x082b0819, 0x19080808, 0x082b0819, 0x19082b08, 0x082b0819, 0x192b1919, 0x082b0819, + 0x08080808, 0x082b082b, 0x082b082b, 0x082b082b, 0x2b080808, 0x082b082b, 0x2b2b2b08, 0x082b082b, + 0x08080819, 0x082b1908, 0x08081908, 0x082b1908, 0x08190808, 0x082b1908, 0x082b2b19, 0x082b1908, + 0x19080808, 0x082b1908, 0x08080808, 0x082b1919, 0x19080819, 0x082b1919, 0x1919082b, 0x082b1919, + 0x2b192b19, 0x082b1919, 0x08080819, 0x082b192b, 0x08192b2b, 0x082b192b, 0x2b2b192b, 0x082b192b, + 0x08080808, 0x082b2b08, 0x08082b08, 0x082b2b08, 0x08082b2b, 0x082b2b08, 0x082b0808, 0x082b2b08, + 0x19191919, 0x082b2b08, 0x2b082b08, 0x082b2b08, 0x2b2b082b, 0x082b2b08, 0x192b2b08, 0x082b2b19, + 0x2b190808, 0x082b2b19, 0x08082b08, 0x082b2b2b, 0x082b0808, 0x082b2b2b, 0x2b08082b, 0x082b2b2b, + 0x2b082b08, 0x082b2b2b, 0x2b082b2b, 0x082b2b2b, 0x08080819, 0x19080808, 0x08081908, 0x19080808, + 0x0808192b, 0x19080808, 0x08082b19, 0x19080808, 0x08190808, 0x19080808, 0x0819082b, 0x19080808, + 0x08191919, 0x19080808, 0x08192b08, 0x19080808, 0x082b0819, 0x19080808, 0x082b1908, 0x19080808, + 0x19080808, 0x19080808, 0x1908082b, 0x19080808, 0x19081919, 0x19080808, 0x19082b08, 0x19080808, + 0x19082b2b, 0x19080808, 0x19190819, 0x19080808, 0x19191908, 0x19080808, 0x192b0808, 0x19080808, + 0x192b1919, 0x19080808, 0x2b080819, 0x19080808, 0x2b081908, 0x19080808, 0x2b190808, 0x19080808, + 0x08080808, 0x19080819, 0x0808082b, 0x19080819, 0x08081919, 0x19080819, 0x08082b08, 0x19080819, + 0x08190819, 0x19080819, 0x08191908, 0x19080819, 0x082b0808, 0x19080819, 0x19080819, 0x19080819, + 0x19081908, 0x19080819, 0x19190808, 0x19080819, 0x2b080808, 0x19080819, 0x2b081919, 0x19080819, + 0x2b2b082b, 0x19080819, 0x08080819, 0x1908082b, 0x08081908, 0x1908082b, 0x08190808, 0x1908082b, + 0x0819082b, 0x1908082b, 0x082b2b19, 0x1908082b, 0x19080808, 0x1908082b, 0x08080808, 0x19081908, + 0x0808082b, 0x19081908, 0x08081919, 0x19081908, 0x08082b08, 0x19081908, 0x08190819, 0x19081908, + 0x08191908, 0x19081908, 0x08192b19, 0x19081908, 0x082b0808, 0x19081908, 0x19080819, 0x19081908, + 0x19081908, 0x19081908, 0x19190808, 0x19081908, 0x2b080808, 0x19081908, 0x2b191908, 0x19081908, + 0x08080819, 0x19081919, 0x08081908, 0x19081919, 0x08190808, 0x19081919, 0x082b1908, 0x19081919, + 0x19080808, 0x19081919, 0x2b192b2b, 0x19081919, 0x08080808, 0x1908192b, 0x08082b2b, 0x1908192b, + 0x19081908, 0x1908192b, 0x19190808, 0x1908192b, 0x08080819, 0x19082b08, 0x08081908, 0x19082b08, + 0x08190808, 0x19082b08, 0x19080808, 0x19082b08, 0x19081919, 0x19082b08, 0x19191908, 0x19082b08, + 0x192b082b, 0x19082b08, 0x08080808, 0x19082b19, 0x08190819, 0x19082b19, 0x19081908, 0x19082b19, + 0x19190808, 0x19082b19, 0x192b2b19, 0x19082b19, 0x08081908, 0x19082b2b, 0x08080808, 0x19190808, + 0x0808082b, 0x19190808, 0x08081919, 0x19190808, 0x08082b08, 0x19190808, 0x08190819, 0x19190808, + 0x08191908, 0x19190808, 0x082b0808, 0x19190808, 0x082b2b08, 0x19190808, 0x19080819, 0x19190808, + 0x19081908, 0x19190808, 0x19190808, 0x19190808, 0x2b080808, 0x19190808, 0x08080819, 0x19190819, + 0x08081908, 0x19190819, 0x08190808, 0x19190819, 0x08191919, 0x19190819, 0x19080808, 0x19190819, + 0x1908082b, 0x19190819, 0x08080808, 0x1919082b, 0x19081908, 0x1919082b, 0x2b2b2b2b, 0x1919082b, + 0x08080819, 0x19191908, 0x08081908, 0x19191908, 0x08190808, 0x19191908, 0x082b0819, 0x19191908, + 0x19080808, 0x19191908, 0x192b0808, 0x19191908, 0x2b080819, 0x19191908, 0x2b2b0819, 0x19191908, + 0x08080808, 0x19191919, 0x08082b08, 0x19191919, 0x2b080808, 0x19191919, 0x2b082b08, 0x19191919, + 0x082b0819, 0x1919192b, 0x192b2b08, 0x1919192b, 0x2b2b0819, 0x1919192b, 0x08080808, 0x19192b08, + 0x08191908, 0x19192b08, 0x19080819, 0x19192b08, 0x19190808, 0x19192b08, 0x2b192b19, 0x19192b08, + 0x08192b2b, 0x19192b19, 0x19080808, 0x19192b19, 0x1908082b, 0x19192b19, 0x2b081919, 0x19192b2b, + 0x08080819, 0x192b0808, 0x08081908, 0x192b0808, 0x08190808, 0x192b0808, 0x19080808, 0x192b0808, + 0x19191908, 0x192b0808, 0x192b082b, 0x192b0808, 0x2b08192b, 0x192b0808, 0x2b2b2b19, 0x192b0808, + 0x08080808, 0x192b0819, 0x082b1908, 0x192b082b, 0x19082b2b, 0x192b082b, 0x2b19082b, 0x192b082b, + 0x08080808, 0x192b1908, 0x0819192b, 0x192b1908, 0x08190808, 0x192b1919, 0x19080808, 0x192b1919, + 0x19081919, 0x192b1919, 0x2b2b1908, 0x192b1919, 0x08080819, 0x192b2b08, 0x192b2b2b, 0x192b2b08, + 0x082b1919, 0x192b2b19, 0x0808192b, 0x192b2b2b, 0x19191908, 0x192b2b2b, 0x192b082b, 0x192b2b2b, + 0x08080808, 0x2b080808, 0x0808082b, 0x2b080808, 0x08081919, 0x2b080808, 0x08082b08, 0x2b080808, + 0x08190819, 0x2b080808, 0x08191908, 0x2b080808, 0x082b0808, 0x2b080808, 0x082b2b2b, 0x2b080808, + 0x19080819, 0x2b080808, 0x19081908, 0x2b080808, 0x19190808, 0x2b080808, 0x2b080808, 0x2b080808, + 0x2b08082b, 0x2b080808, 0x2b2b2b08, 0x2b080808, 0x2b2b2b2b, 0x2b080808, 0x08080819, 0x2b080819, + 0x08081908, 0x2b080819, 0x0808192b, 0x2b080819, 0x08190808, 0x2b080819, 0x19080808, 0x2b080819, + 0x19190819, 0x2b080819, 0x19192b19, 0x2b080819, 0x08080808, 0x2b08082b, 0x082b0808, 0x2b08082b, + 0x2b080808, 0x2b08082b, 0x2b08082b, 0x2b08082b, 0x2b2b0808, 0x2b08082b, 0x2b2b2b08, 0x2b08082b, + 0x08080819, 0x2b081908, 0x08081908, 0x2b081908, 0x08190808, 0x2b081908, 0x0819082b, 0x2b081908, + 0x08191919, 0x2b081908, 0x19080808, 0x2b081908, 0x192b0808, 0x2b081908, 0x2b082b19, 0x2b081908, + 0x08080808, 0x2b081919, 0x19081908, 0x2b081919, 0x2b2b1919, 0x2b081919, 0x08192b08, 0x2b08192b, + 0x192b2b2b, 0x2b08192b, 0x08080808, 0x2b082b08, 0x08082b08, 0x2b082b08, 0x082b1919, 0x2b082b08, + 0x19192b2b, 0x2b082b08, 0x2b080808, 0x2b082b08, 0x2b08082b, 0x2b082b08, 0x2b2b2b08, 0x2b082b08, + 0x0808192b, 0x2b082b19, 0x082b082b, 0x2b082b2b, 0x2b080808, 0x2b082b2b, 0x2b082b08, 0x2b082b2b, + 0x2b19192b, 0x2b082b2b, 0x2b2b2b08, 0x2b082b2b, 0x08080819, 0x2b190808, 0x08081908, 0x2b190808, + 0x08190808, 0x2b190808, 0x19080808, 0x2b190808, 0x1919192b, 0x2b190808, 0x2b081908, 0x2b190808, + 0x08080808, 0x2b190819, 0x082b082b, 0x2b190819, 0x192b1908, 0x2b190819, 0x1919192b, 0x2b19082b, + 0x2b082b19, 0x2b19082b, 0x08080808, 0x2b191908, 0x08081919, 0x2b191908, 0x19081908, 0x2b191908, + 0x19190808, 0x2b191908, 0x19192b08, 0x2b191908, 0x082b2b19, 0x2b191919, 0x2b190808, 0x2b191919, + 0x2b19082b, 0x2b191919, 0x19080819, 0x2b19192b, 0x19190819, 0x2b192b08, 0x2b2b192b, 0x2b192b08, + 0x19082b19, 0x2b192b19, 0x08191919, 0x2b192b2b, 0x192b0808, 0x2b192b2b, 0x08080808, 0x2b2b0808, + 0x0808082b, 0x2b2b0808, 0x08082b08, 0x2b2b0808, 0x08082b2b, 0x2b2b0808, 0x082b0808, 0x2b2b0808, + 0x082b2b2b, 0x2b2b0808, 0x2b2b0808, 0x2b2b0808, 0x19190819, 0x2b2b0819, 0x19192b19, 0x2b2b0819, + 0x2b2b192b, 0x2b2b0819, 0x08080808, 0x2b2b082b, 0x0808082b, 0x2b2b082b, 0x08082b08, 0x2b2b082b, + 0x082b2b2b, 0x2b2b082b, 0x2b080808, 0x2b2b082b, 0x2b2b0808, 0x2b2b082b, 0x19080808, 0x2b2b1908, + 0x2b191919, 0x2b2b1908, 0x192b1919, 0x2b2b192b, 0x2b192b08, 0x2b2b192b, 0x08082b2b, 0x2b2b2b08, + 0x082b0808, 0x2b2b2b08, 0x082b082b, 0x2b2b2b08, 0x082b2b08, 0x2b2b2b08, 0x2b2b0808, 0x2b2b2b08, + 0x2b2b2b08, 0x2b2b2b08, 0x08081908, 0x2b2b2b19, 0x2b081908, 0x2b2b2b19, 0x2b08192b, 0x2b2b2b19, + 0x082b2b08, 0x2b2b2b2b, 0x082b2b2b, 0x2b2b2b2b, 0x2b190819, 0x2b2b2b2b, 0x2b2b2b2b, 0x2b2b2b2b +); + +struct iq2_xs { + d: f16, + qs: array, + scales: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 256; + var scale_vals = array( + bitcast(vec2(block.scales[0], block.scales[1])), + bitcast(vec2(block.scales[2], block.scales[3])) + ); + var sum = 0.0; + for (var ib: u32 = 0; ib < 32; ib += 4) { + let s = get_byte(scale_vals[ib / 16], (ib % 16) / 4); + let db = array( + d * (0.5 + f32(s & 0xF)) * 0.25, + d * (0.5 + f32(s >> 4)) * 0.25 + ); + for (var l: u32 = 0; l < 4; l++) { + let qs_val = bitcast(vec2(block.qs[ib + l], 0.0)); + let ig = (qs_val & 511) * 8; + let is = qs_val >> 9; + let signs = get_byte(ksigns_iq2xs[is / 4], is % 4); + let dl = db[l/2]; + for (var j: u32 = 0; j < 8; j++) { + let g = get_byte(iq2xs_grid[(ig + j) / 4], (ig + j) % 4); + let m = select(1.0, -1.0, (get_byte(kmask_iq2xs[j / 4], j % 4) & signs) != 0); + sum += dl * f32(g) * m * src1[src1_i]; + src1_i++; + } + } + } + return sum; +} + +#enddecl(IQ2_XS) + +#decl(IQ2_S) + +const iq2s_grid = array( + 0x08080808, 0x08080808, 0x0808082b, 0x08080808, 0x08081919, 0x08080808, 0x08082b08, 0x08080808, + 0x08082b2b, 0x08080808, 0x08190819, 0x08080808, 0x08191908, 0x08080808, 0x0819192b, 0x08080808, + 0x08192b19, 0x08080808, 0x082b0808, 0x08080808, 0x082b082b, 0x08080808, 0x082b1919, 0x08080808, + 0x082b2b08, 0x08080808, 0x19080819, 0x08080808, 0x19081908, 0x08080808, 0x1908192b, 0x08080808, + 0x19082b19, 0x08080808, 0x19190808, 0x08080808, 0x1919082b, 0x08080808, 0x19191919, 0x08080808, + 0x19192b08, 0x08080808, 0x192b0819, 0x08080808, 0x192b1908, 0x08080808, 0x192b192b, 0x08080808, + 0x192b2b19, 0x08080808, 0x2b080808, 0x08080808, 0x2b08082b, 0x08080808, 0x2b081919, 0x08080808, + 0x2b082b08, 0x08080808, 0x2b190819, 0x08080808, 0x2b191908, 0x08080808, 0x2b2b0808, 0x08080808, + 0x2b2b1919, 0x08080808, 0x2b2b2b2b, 0x08080808, 0x08080819, 0x08080819, 0x08081908, 0x08080819, + 0x0808192b, 0x08080819, 0x08082b19, 0x08080819, 0x08190808, 0x08080819, 0x0819082b, 0x08080819, + 0x08191919, 0x08080819, 0x08192b08, 0x08080819, 0x082b0819, 0x08080819, 0x082b1908, 0x08080819, + 0x19080808, 0x08080819, 0x1908082b, 0x08080819, 0x19081919, 0x08080819, 0x19082b08, 0x08080819, + 0x19190819, 0x08080819, 0x19191908, 0x08080819, 0x1919192b, 0x08080819, 0x19192b19, 0x08080819, + 0x192b0808, 0x08080819, 0x192b1919, 0x08080819, 0x192b2b08, 0x08080819, 0x2b080819, 0x08080819, + 0x2b081908, 0x08080819, 0x2b190808, 0x08080819, 0x2b19082b, 0x08080819, 0x2b191919, 0x08080819, + 0x2b2b0819, 0x08080819, 0x2b2b1908, 0x08080819, 0x08080808, 0x0808082b, 0x0808082b, 0x0808082b, + 0x08081919, 0x0808082b, 0x08082b08, 0x0808082b, 0x08190819, 0x0808082b, 0x08191908, 0x0808082b, + 0x082b0808, 0x0808082b, 0x082b2b2b, 0x0808082b, 0x19080819, 0x0808082b, 0x19081908, 0x0808082b, + 0x1908192b, 0x0808082b, 0x19082b19, 0x0808082b, 0x19190808, 0x0808082b, 0x19191919, 0x0808082b, + 0x2b080808, 0x0808082b, 0x2b081919, 0x0808082b, 0x2b082b2b, 0x0808082b, 0x2b191908, 0x0808082b, + 0x2b2b082b, 0x0808082b, 0x08080819, 0x08081908, 0x08081908, 0x08081908, 0x0808192b, 0x08081908, + 0x08082b19, 0x08081908, 0x08190808, 0x08081908, 0x0819082b, 0x08081908, 0x08191919, 0x08081908, + 0x08192b08, 0x08081908, 0x082b0819, 0x08081908, 0x082b1908, 0x08081908, 0x082b192b, 0x08081908, + 0x082b2b19, 0x08081908, 0x19080808, 0x08081908, 0x1908082b, 0x08081908, 0x19081919, 0x08081908, + 0x19082b08, 0x08081908, 0x19082b2b, 0x08081908, 0x19190819, 0x08081908, 0x19191908, 0x08081908, + 0x1919192b, 0x08081908, 0x19192b19, 0x08081908, 0x192b0808, 0x08081908, 0x192b082b, 0x08081908, + 0x192b1919, 0x08081908, 0x2b080819, 0x08081908, 0x2b081908, 0x08081908, 0x2b08192b, 0x08081908, + 0x2b082b19, 0x08081908, 0x2b190808, 0x08081908, 0x2b191919, 0x08081908, 0x2b192b08, 0x08081908, + 0x2b2b0819, 0x08081908, 0x2b2b1908, 0x08081908, 0x08080808, 0x08081919, 0x0808082b, 0x08081919, + 0x08081919, 0x08081919, 0x08082b08, 0x08081919, 0x08082b2b, 0x08081919, 0x08190819, 0x08081919, + 0x08191908, 0x08081919, 0x0819192b, 0x08081919, 0x08192b19, 0x08081919, 0x082b0808, 0x08081919, + 0x082b1919, 0x08081919, 0x082b2b08, 0x08081919, 0x19080819, 0x08081919, 0x19081908, 0x08081919, + 0x1908192b, 0x08081919, 0x19082b19, 0x08081919, 0x19190808, 0x08081919, 0x1919082b, 0x08081919, + 0x19191919, 0x08081919, 0x19192b08, 0x08081919, 0x192b0819, 0x08081919, 0x192b1908, 0x08081919, + 0x2b080808, 0x08081919, 0x2b08082b, 0x08081919, 0x2b081919, 0x08081919, 0x2b082b08, 0x08081919, + 0x2b190819, 0x08081919, 0x2b191908, 0x08081919, 0x2b2b0808, 0x08081919, 0x08080819, 0x0808192b, + 0x08081908, 0x0808192b, 0x0808192b, 0x0808192b, 0x08082b19, 0x0808192b, 0x08190808, 0x0808192b, + 0x08191919, 0x0808192b, 0x19080808, 0x0808192b, 0x19081919, 0x0808192b, 0x19082b08, 0x0808192b, + 0x19190819, 0x0808192b, 0x19191908, 0x0808192b, 0x192b0808, 0x0808192b, 0x2b080819, 0x0808192b, + 0x2b081908, 0x0808192b, 0x2b190808, 0x0808192b, 0x08080808, 0x08082b08, 0x0808082b, 0x08082b08, + 0x08081919, 0x08082b08, 0x08082b08, 0x08082b08, 0x08190819, 0x08082b08, 0x08191908, 0x08082b08, + 0x0819192b, 0x08082b08, 0x08192b19, 0x08082b08, 0x082b0808, 0x08082b08, 0x082b1919, 0x08082b08, + 0x082b2b2b, 0x08082b08, 0x19080819, 0x08082b08, 0x19081908, 0x08082b08, 0x1908192b, 0x08082b08, + 0x19082b19, 0x08082b08, 0x19190808, 0x08082b08, 0x1919082b, 0x08082b08, 0x19191919, 0x08082b08, + 0x19192b08, 0x08082b08, 0x192b0819, 0x08082b08, 0x192b1908, 0x08082b08, 0x2b080808, 0x08082b08, + 0x2b081919, 0x08082b08, 0x2b191908, 0x08082b08, 0x2b2b2b2b, 0x08082b08, 0x08080819, 0x08082b19, + 0x08081908, 0x08082b19, 0x08190808, 0x08082b19, 0x0819082b, 0x08082b19, 0x08191919, 0x08082b19, + 0x08192b08, 0x08082b19, 0x082b0819, 0x08082b19, 0x19080808, 0x08082b19, 0x19081919, 0x08082b19, + 0x19082b08, 0x08082b19, 0x19190819, 0x08082b19, 0x19191908, 0x08082b19, 0x192b0808, 0x08082b19, + 0x2b080819, 0x08082b19, 0x2b190808, 0x08082b19, 0x08080808, 0x08082b2b, 0x08190819, 0x08082b2b, + 0x08191908, 0x08082b2b, 0x082b082b, 0x08082b2b, 0x082b2b08, 0x08082b2b, 0x082b2b2b, 0x08082b2b, + 0x19190808, 0x08082b2b, 0x2b192b19, 0x08082b2b, 0x08080819, 0x08190808, 0x08081908, 0x08190808, + 0x0808192b, 0x08190808, 0x08082b19, 0x08190808, 0x08190808, 0x08190808, 0x0819082b, 0x08190808, + 0x08191919, 0x08190808, 0x08192b08, 0x08190808, 0x082b0819, 0x08190808, 0x082b1908, 0x08190808, + 0x082b192b, 0x08190808, 0x19080808, 0x08190808, 0x1908082b, 0x08190808, 0x19081919, 0x08190808, + 0x19082b08, 0x08190808, 0x19190819, 0x08190808, 0x19191908, 0x08190808, 0x1919192b, 0x08190808, + 0x19192b19, 0x08190808, 0x192b0808, 0x08190808, 0x192b082b, 0x08190808, 0x192b1919, 0x08190808, + 0x192b2b08, 0x08190808, 0x2b080819, 0x08190808, 0x2b081908, 0x08190808, 0x2b08192b, 0x08190808, + 0x2b190808, 0x08190808, 0x2b191919, 0x08190808, 0x2b192b08, 0x08190808, 0x2b2b0819, 0x08190808, + 0x2b2b1908, 0x08190808, 0x08080808, 0x08190819, 0x0808082b, 0x08190819, 0x08081919, 0x08190819, + 0x08082b08, 0x08190819, 0x08082b2b, 0x08190819, 0x08190819, 0x08190819, 0x08191908, 0x08190819, + 0x0819192b, 0x08190819, 0x08192b19, 0x08190819, 0x082b0808, 0x08190819, 0x082b082b, 0x08190819, + 0x082b1919, 0x08190819, 0x082b2b08, 0x08190819, 0x19080819, 0x08190819, 0x19081908, 0x08190819, + 0x1908192b, 0x08190819, 0x19082b19, 0x08190819, 0x19190808, 0x08190819, 0x1919082b, 0x08190819, + 0x19191919, 0x08190819, 0x19192b08, 0x08190819, 0x192b0819, 0x08190819, 0x192b1908, 0x08190819, + 0x2b080808, 0x08190819, 0x2b08082b, 0x08190819, 0x2b081919, 0x08190819, 0x2b082b08, 0x08190819, + 0x2b190819, 0x08190819, 0x2b191908, 0x08190819, 0x08080819, 0x0819082b, 0x08081908, 0x0819082b, + 0x08082b19, 0x0819082b, 0x08190808, 0x0819082b, 0x08191919, 0x0819082b, 0x082b0819, 0x0819082b, + 0x082b1908, 0x0819082b, 0x19080808, 0x0819082b, 0x19081919, 0x0819082b, 0x19190819, 0x0819082b, + 0x19191908, 0x0819082b, 0x2b080819, 0x0819082b, 0x2b081908, 0x0819082b, 0x2b190808, 0x0819082b, + 0x08080808, 0x08191908, 0x0808082b, 0x08191908, 0x08081919, 0x08191908, 0x08082b08, 0x08191908, + 0x08190819, 0x08191908, 0x08191908, 0x08191908, 0x0819192b, 0x08191908, 0x08192b19, 0x08191908, + 0x082b0808, 0x08191908, 0x082b1919, 0x08191908, 0x082b2b08, 0x08191908, 0x19080819, 0x08191908, + 0x19081908, 0x08191908, 0x1908192b, 0x08191908, 0x19082b19, 0x08191908, 0x19190808, 0x08191908, + 0x1919082b, 0x08191908, 0x19191919, 0x08191908, 0x19192b08, 0x08191908, 0x192b0819, 0x08191908, + 0x192b1908, 0x08191908, 0x2b080808, 0x08191908, 0x2b08082b, 0x08191908, 0x2b081919, 0x08191908, + 0x2b082b08, 0x08191908, 0x2b190819, 0x08191908, 0x2b191908, 0x08191908, 0x2b2b0808, 0x08191908, + 0x08080819, 0x08191919, 0x08081908, 0x08191919, 0x0808192b, 0x08191919, 0x08082b19, 0x08191919, + 0x08190808, 0x08191919, 0x0819082b, 0x08191919, 0x08191919, 0x08191919, 0x08192b08, 0x08191919, + 0x082b0819, 0x08191919, 0x082b1908, 0x08191919, 0x19080808, 0x08191919, 0x1908082b, 0x08191919, + 0x19081919, 0x08191919, 0x19082b08, 0x08191919, 0x19190819, 0x08191919, 0x19191908, 0x08191919, + 0x192b0808, 0x08191919, 0x2b080819, 0x08191919, 0x2b081908, 0x08191919, 0x2b190808, 0x08191919, + 0x08080808, 0x0819192b, 0x08081919, 0x0819192b, 0x08082b08, 0x0819192b, 0x08190819, 0x0819192b, + 0x08191908, 0x0819192b, 0x082b0808, 0x0819192b, 0x19080819, 0x0819192b, 0x19081908, 0x0819192b, + 0x19190808, 0x0819192b, 0x2b080808, 0x0819192b, 0x2b2b2b2b, 0x0819192b, 0x08080819, 0x08192b08, + 0x08081908, 0x08192b08, 0x0808192b, 0x08192b08, 0x08082b19, 0x08192b08, 0x08190808, 0x08192b08, + 0x08191919, 0x08192b08, 0x08192b08, 0x08192b08, 0x082b0819, 0x08192b08, 0x19080808, 0x08192b08, + 0x1908082b, 0x08192b08, 0x19081919, 0x08192b08, 0x19082b08, 0x08192b08, 0x19190819, 0x08192b08, + 0x19191908, 0x08192b08, 0x192b0808, 0x08192b08, 0x2b080819, 0x08192b08, 0x2b081908, 0x08192b08, + 0x08080808, 0x08192b19, 0x0808082b, 0x08192b19, 0x08081919, 0x08192b19, 0x08082b08, 0x08192b19, + 0x08190819, 0x08192b19, 0x08191908, 0x08192b19, 0x082b0808, 0x08192b19, 0x19080819, 0x08192b19, + 0x19081908, 0x08192b19, 0x19190808, 0x08192b19, 0x192b2b19, 0x08192b19, 0x2b2b082b, 0x08192b19, + 0x08081908, 0x08192b2b, 0x08190808, 0x08192b2b, 0x19080808, 0x08192b2b, 0x1919192b, 0x08192b2b, + 0x08080808, 0x082b0808, 0x0808082b, 0x082b0808, 0x08081919, 0x082b0808, 0x08082b08, 0x082b0808, + 0x08190819, 0x082b0808, 0x08191908, 0x082b0808, 0x0819192b, 0x082b0808, 0x08192b19, 0x082b0808, + 0x082b0808, 0x082b0808, 0x082b1919, 0x082b0808, 0x082b2b2b, 0x082b0808, 0x19080819, 0x082b0808, + 0x19081908, 0x082b0808, 0x19190808, 0x082b0808, 0x1919082b, 0x082b0808, 0x19191919, 0x082b0808, + 0x192b1908, 0x082b0808, 0x2b080808, 0x082b0808, 0x2b082b2b, 0x082b0808, 0x2b191908, 0x082b0808, + 0x2b2b2b2b, 0x082b0808, 0x08080819, 0x082b0819, 0x08081908, 0x082b0819, 0x08190808, 0x082b0819, + 0x0819082b, 0x082b0819, 0x08191919, 0x082b0819, 0x082b0819, 0x082b0819, 0x19080808, 0x082b0819, + 0x1908082b, 0x082b0819, 0x19081919, 0x082b0819, 0x19190819, 0x082b0819, 0x19191908, 0x082b0819, + 0x192b0808, 0x082b0819, 0x2b080819, 0x082b0819, 0x2b081908, 0x082b0819, 0x2b190808, 0x082b0819, + 0x08080808, 0x082b082b, 0x08082b2b, 0x082b082b, 0x082b082b, 0x082b082b, 0x082b2b08, 0x082b082b, + 0x082b2b2b, 0x082b082b, 0x19081908, 0x082b082b, 0x19190808, 0x082b082b, 0x2b082b08, 0x082b082b, + 0x2b082b2b, 0x082b082b, 0x2b2b2b08, 0x082b082b, 0x08080819, 0x082b1908, 0x08081908, 0x082b1908, + 0x0808192b, 0x082b1908, 0x08082b19, 0x082b1908, 0x08190808, 0x082b1908, 0x08191919, 0x082b1908, + 0x08192b08, 0x082b1908, 0x082b0819, 0x082b1908, 0x082b1908, 0x082b1908, 0x19080808, 0x082b1908, + 0x1908082b, 0x082b1908, 0x19081919, 0x082b1908, 0x19082b08, 0x082b1908, 0x19190819, 0x082b1908, + 0x19191908, 0x082b1908, 0x192b0808, 0x082b1908, 0x2b080819, 0x082b1908, 0x2b081908, 0x082b1908, + 0x2b190808, 0x082b1908, 0x08080808, 0x082b1919, 0x08081919, 0x082b1919, 0x08082b08, 0x082b1919, + 0x08190819, 0x082b1919, 0x08191908, 0x082b1919, 0x082b0808, 0x082b1919, 0x19080819, 0x082b1919, + 0x19081908, 0x082b1919, 0x19190808, 0x082b1919, 0x192b192b, 0x082b1919, 0x2b080808, 0x082b1919, + 0x08080819, 0x082b192b, 0x08081908, 0x082b192b, 0x08190808, 0x082b192b, 0x19080808, 0x082b192b, + 0x19192b19, 0x082b192b, 0x08080808, 0x082b2b08, 0x08081919, 0x082b2b08, 0x08190819, 0x082b2b08, + 0x08191908, 0x082b2b08, 0x19080819, 0x082b2b08, 0x19081908, 0x082b2b08, 0x19190808, 0x082b2b08, + 0x2b082b2b, 0x082b2b08, 0x2b2b2b2b, 0x082b2b08, 0x08080819, 0x082b2b19, 0x08081908, 0x082b2b19, + 0x08190808, 0x082b2b19, 0x2b191919, 0x082b2b19, 0x08082b2b, 0x082b2b2b, 0x082b082b, 0x082b2b2b, + 0x192b1908, 0x082b2b2b, 0x2b082b08, 0x082b2b2b, 0x2b082b2b, 0x082b2b2b, 0x08080819, 0x19080808, + 0x08081908, 0x19080808, 0x0808192b, 0x19080808, 0x08082b19, 0x19080808, 0x08190808, 0x19080808, + 0x0819082b, 0x19080808, 0x08191919, 0x19080808, 0x08192b08, 0x19080808, 0x08192b2b, 0x19080808, + 0x082b0819, 0x19080808, 0x082b1908, 0x19080808, 0x082b192b, 0x19080808, 0x19080808, 0x19080808, + 0x1908082b, 0x19080808, 0x19081919, 0x19080808, 0x19082b08, 0x19080808, 0x19082b2b, 0x19080808, + 0x19190819, 0x19080808, 0x19191908, 0x19080808, 0x1919192b, 0x19080808, 0x19192b19, 0x19080808, + 0x192b0808, 0x19080808, 0x192b082b, 0x19080808, 0x192b1919, 0x19080808, 0x2b080819, 0x19080808, + 0x2b081908, 0x19080808, 0x2b190808, 0x19080808, 0x2b191919, 0x19080808, 0x2b192b08, 0x19080808, + 0x2b2b0819, 0x19080808, 0x2b2b1908, 0x19080808, 0x08080808, 0x19080819, 0x0808082b, 0x19080819, + 0x08081919, 0x19080819, 0x08082b08, 0x19080819, 0x08190819, 0x19080819, 0x08191908, 0x19080819, + 0x0819192b, 0x19080819, 0x08192b19, 0x19080819, 0x082b0808, 0x19080819, 0x082b082b, 0x19080819, + 0x082b1919, 0x19080819, 0x19080819, 0x19080819, 0x19081908, 0x19080819, 0x1908192b, 0x19080819, + 0x19082b19, 0x19080819, 0x19190808, 0x19080819, 0x1919082b, 0x19080819, 0x19191919, 0x19080819, + 0x19192b08, 0x19080819, 0x192b0819, 0x19080819, 0x192b1908, 0x19080819, 0x2b080808, 0x19080819, + 0x2b08082b, 0x19080819, 0x2b081919, 0x19080819, 0x2b082b08, 0x19080819, 0x2b190819, 0x19080819, + 0x2b191908, 0x19080819, 0x2b2b0808, 0x19080819, 0x08080819, 0x1908082b, 0x08081908, 0x1908082b, + 0x08190808, 0x1908082b, 0x0819082b, 0x1908082b, 0x08191919, 0x1908082b, 0x08192b08, 0x1908082b, + 0x082b1908, 0x1908082b, 0x19080808, 0x1908082b, 0x19081919, 0x1908082b, 0x19082b08, 0x1908082b, + 0x19190819, 0x1908082b, 0x19191908, 0x1908082b, 0x192b0808, 0x1908082b, 0x2b080819, 0x1908082b, + 0x2b081908, 0x1908082b, 0x08080808, 0x19081908, 0x0808082b, 0x19081908, 0x08081919, 0x19081908, + 0x08082b08, 0x19081908, 0x08082b2b, 0x19081908, 0x08190819, 0x19081908, 0x08191908, 0x19081908, + 0x0819192b, 0x19081908, 0x08192b19, 0x19081908, 0x082b0808, 0x19081908, 0x082b082b, 0x19081908, + 0x082b1919, 0x19081908, 0x082b2b08, 0x19081908, 0x19080819, 0x19081908, 0x19081908, 0x19081908, + 0x1908192b, 0x19081908, 0x19082b19, 0x19081908, 0x19190808, 0x19081908, 0x1919082b, 0x19081908, + 0x19191919, 0x19081908, 0x19192b08, 0x19081908, 0x192b0819, 0x19081908, 0x192b1908, 0x19081908, + 0x2b080808, 0x19081908, 0x2b08082b, 0x19081908, 0x2b081919, 0x19081908, 0x2b082b08, 0x19081908, + 0x2b190819, 0x19081908, 0x2b191908, 0x19081908, 0x2b2b0808, 0x19081908, 0x08080819, 0x19081919, + 0x08081908, 0x19081919, 0x0808192b, 0x19081919, 0x08082b19, 0x19081919, 0x08190808, 0x19081919, + 0x0819082b, 0x19081919, 0x08191919, 0x19081919, 0x08192b08, 0x19081919, 0x082b0819, 0x19081919, + 0x082b1908, 0x19081919, 0x19080808, 0x19081919, 0x1908082b, 0x19081919, 0x19081919, 0x19081919, + 0x19082b08, 0x19081919, 0x19190819, 0x19081919, 0x19191908, 0x19081919, 0x192b0808, 0x19081919, + 0x192b2b2b, 0x19081919, 0x2b080819, 0x19081919, 0x2b081908, 0x19081919, 0x2b190808, 0x19081919, + 0x08080808, 0x1908192b, 0x0808082b, 0x1908192b, 0x08081919, 0x1908192b, 0x08082b08, 0x1908192b, + 0x08190819, 0x1908192b, 0x08191908, 0x1908192b, 0x082b0808, 0x1908192b, 0x19080819, 0x1908192b, + 0x19081908, 0x1908192b, 0x19190808, 0x1908192b, 0x2b080808, 0x1908192b, 0x2b2b1919, 0x1908192b, + 0x08080819, 0x19082b08, 0x08081908, 0x19082b08, 0x08082b19, 0x19082b08, 0x08190808, 0x19082b08, + 0x0819082b, 0x19082b08, 0x08191919, 0x19082b08, 0x08192b08, 0x19082b08, 0x082b0819, 0x19082b08, + 0x082b1908, 0x19082b08, 0x19080808, 0x19082b08, 0x1908082b, 0x19082b08, 0x19081919, 0x19082b08, + 0x19082b08, 0x19082b08, 0x19190819, 0x19082b08, 0x19191908, 0x19082b08, 0x192b0808, 0x19082b08, + 0x2b081908, 0x19082b08, 0x2b190808, 0x19082b08, 0x08080808, 0x19082b19, 0x0808082b, 0x19082b19, + 0x08081919, 0x19082b19, 0x08082b08, 0x19082b19, 0x08190819, 0x19082b19, 0x08191908, 0x19082b19, + 0x082b0808, 0x19082b19, 0x19080819, 0x19082b19, 0x19081908, 0x19082b19, 0x19190808, 0x19082b19, + 0x2b080808, 0x19082b19, 0x2b19192b, 0x19082b19, 0x08080819, 0x19082b2b, 0x08081908, 0x19082b2b, + 0x08190808, 0x19082b2b, 0x19080808, 0x19082b2b, 0x08080808, 0x19190808, 0x0808082b, 0x19190808, + 0x08081919, 0x19190808, 0x08082b08, 0x19190808, 0x08190819, 0x19190808, 0x08191908, 0x19190808, + 0x0819192b, 0x19190808, 0x08192b19, 0x19190808, 0x082b0808, 0x19190808, 0x082b082b, 0x19190808, + 0x082b1919, 0x19190808, 0x082b2b08, 0x19190808, 0x19080819, 0x19190808, 0x19081908, 0x19190808, + 0x1908192b, 0x19190808, 0x19082b19, 0x19190808, 0x19190808, 0x19190808, 0x1919082b, 0x19190808, + 0x19191919, 0x19190808, 0x19192b08, 0x19190808, 0x192b0819, 0x19190808, 0x192b1908, 0x19190808, + 0x2b080808, 0x19190808, 0x2b08082b, 0x19190808, 0x2b081919, 0x19190808, 0x2b082b08, 0x19190808, + 0x2b190819, 0x19190808, 0x2b191908, 0x19190808, 0x08080819, 0x19190819, 0x08081908, 0x19190819, + 0x0808192b, 0x19190819, 0x08082b19, 0x19190819, 0x08190808, 0x19190819, 0x0819082b, 0x19190819, + 0x08191919, 0x19190819, 0x08192b08, 0x19190819, 0x082b0819, 0x19190819, 0x082b1908, 0x19190819, + 0x19080808, 0x19190819, 0x1908082b, 0x19190819, 0x19081919, 0x19190819, 0x19082b08, 0x19190819, + 0x19190819, 0x19190819, 0x19191908, 0x19190819, 0x192b0808, 0x19190819, 0x2b080819, 0x19190819, + 0x2b081908, 0x19190819, 0x2b190808, 0x19190819, 0x08080808, 0x1919082b, 0x08081919, 0x1919082b, + 0x08082b08, 0x1919082b, 0x08190819, 0x1919082b, 0x08191908, 0x1919082b, 0x082b0808, 0x1919082b, + 0x19080819, 0x1919082b, 0x19081908, 0x1919082b, 0x19190808, 0x1919082b, 0x192b2b19, 0x1919082b, + 0x2b080808, 0x1919082b, 0x08080819, 0x19191908, 0x08081908, 0x19191908, 0x0808192b, 0x19191908, + 0x08082b19, 0x19191908, 0x08190808, 0x19191908, 0x0819082b, 0x19191908, 0x08191919, 0x19191908, + 0x08192b08, 0x19191908, 0x082b0819, 0x19191908, 0x082b1908, 0x19191908, 0x19080808, 0x19191908, + 0x1908082b, 0x19191908, 0x19081919, 0x19191908, 0x19082b08, 0x19191908, 0x19190819, 0x19191908, + 0x19191908, 0x19191908, 0x192b0808, 0x19191908, 0x2b080819, 0x19191908, 0x2b081908, 0x19191908, + 0x2b190808, 0x19191908, 0x08080808, 0x19191919, 0x0808082b, 0x19191919, 0x08081919, 0x19191919, + 0x08082b08, 0x19191919, 0x08190819, 0x19191919, 0x08191908, 0x19191919, 0x082b0808, 0x19191919, + 0x19080819, 0x19191919, 0x19081908, 0x19191919, 0x19190808, 0x19191919, 0x2b080808, 0x19191919, + 0x08080819, 0x1919192b, 0x08081908, 0x1919192b, 0x08190808, 0x1919192b, 0x082b192b, 0x1919192b, + 0x19080808, 0x1919192b, 0x08080808, 0x19192b08, 0x0808082b, 0x19192b08, 0x08081919, 0x19192b08, + 0x08082b08, 0x19192b08, 0x08190819, 0x19192b08, 0x08191908, 0x19192b08, 0x082b0808, 0x19192b08, + 0x19080819, 0x19192b08, 0x19081908, 0x19192b08, 0x19190808, 0x19192b08, 0x19192b2b, 0x19192b08, + 0x2b080808, 0x19192b08, 0x08080819, 0x19192b19, 0x08081908, 0x19192b19, 0x08190808, 0x19192b19, + 0x19080808, 0x19192b19, 0x08080808, 0x19192b2b, 0x08192b19, 0x19192b2b, 0x2b081919, 0x19192b2b, + 0x2b2b2b08, 0x19192b2b, 0x08080819, 0x192b0808, 0x08081908, 0x192b0808, 0x0808192b, 0x192b0808, + 0x08190808, 0x192b0808, 0x0819082b, 0x192b0808, 0x08191919, 0x192b0808, 0x08192b08, 0x192b0808, + 0x082b0819, 0x192b0808, 0x082b1908, 0x192b0808, 0x19080808, 0x192b0808, 0x19081919, 0x192b0808, + 0x19082b08, 0x192b0808, 0x19190819, 0x192b0808, 0x19191908, 0x192b0808, 0x192b0808, 0x192b0808, + 0x2b081908, 0x192b0808, 0x2b190808, 0x192b0808, 0x08080808, 0x192b0819, 0x0808082b, 0x192b0819, + 0x08081919, 0x192b0819, 0x08082b08, 0x192b0819, 0x08190819, 0x192b0819, 0x08191908, 0x192b0819, + 0x082b0808, 0x192b0819, 0x19080819, 0x192b0819, 0x19081908, 0x192b0819, 0x19190808, 0x192b0819, + 0x2b080808, 0x192b0819, 0x2b192b19, 0x192b0819, 0x08081908, 0x192b082b, 0x08190808, 0x192b082b, + 0x19080808, 0x192b082b, 0x1919192b, 0x192b082b, 0x2b2b0819, 0x192b082b, 0x08080808, 0x192b1908, + 0x08081919, 0x192b1908, 0x08082b08, 0x192b1908, 0x08190819, 0x192b1908, 0x08191908, 0x192b1908, + 0x082b0808, 0x192b1908, 0x19080819, 0x192b1908, 0x19081908, 0x192b1908, 0x19190808, 0x192b1908, + 0x2b080808, 0x192b1908, 0x08080819, 0x192b1919, 0x08081908, 0x192b1919, 0x08190808, 0x192b1919, + 0x19080808, 0x192b1919, 0x19082b2b, 0x192b1919, 0x192b2b08, 0x192b1919, 0x2b19082b, 0x192b1919, + 0x08080808, 0x192b192b, 0x2b191908, 0x192b192b, 0x08080819, 0x192b2b08, 0x08081908, 0x192b2b08, + 0x08190808, 0x192b2b08, 0x192b1919, 0x192b2b08, 0x2b192b08, 0x192b2b08, 0x08080808, 0x192b2b19, + 0x082b2b2b, 0x192b2b19, 0x1908082b, 0x192b2b2b, 0x2b2b0819, 0x192b2b2b, 0x08080808, 0x2b080808, + 0x0808082b, 0x2b080808, 0x08081919, 0x2b080808, 0x08082b08, 0x2b080808, 0x08190819, 0x2b080808, + 0x08191908, 0x2b080808, 0x08192b19, 0x2b080808, 0x082b0808, 0x2b080808, 0x082b1919, 0x2b080808, + 0x19080819, 0x2b080808, 0x19081908, 0x2b080808, 0x19190808, 0x2b080808, 0x1919082b, 0x2b080808, + 0x19191919, 0x2b080808, 0x19192b08, 0x2b080808, 0x192b0819, 0x2b080808, 0x2b080808, 0x2b080808, + 0x2b081919, 0x2b080808, 0x2b190819, 0x2b080808, 0x2b191908, 0x2b080808, 0x08080819, 0x2b080819, + 0x08081908, 0x2b080819, 0x08082b19, 0x2b080819, 0x08190808, 0x2b080819, 0x0819082b, 0x2b080819, + 0x08191919, 0x2b080819, 0x08192b08, 0x2b080819, 0x082b0819, 0x2b080819, 0x082b1908, 0x2b080819, + 0x19080808, 0x2b080819, 0x1908082b, 0x2b080819, 0x19081919, 0x2b080819, 0x19082b08, 0x2b080819, + 0x19190819, 0x2b080819, 0x19191908, 0x2b080819, 0x2b080819, 0x2b080819, 0x2b081908, 0x2b080819, + 0x2b190808, 0x2b080819, 0x2b2b2b19, 0x2b080819, 0x08080808, 0x2b08082b, 0x08081919, 0x2b08082b, + 0x08082b2b, 0x2b08082b, 0x08190819, 0x2b08082b, 0x08191908, 0x2b08082b, 0x19080819, 0x2b08082b, + 0x19081908, 0x2b08082b, 0x19190808, 0x2b08082b, 0x08080819, 0x2b081908, 0x08081908, 0x2b081908, + 0x0808192b, 0x2b081908, 0x08082b19, 0x2b081908, 0x08190808, 0x2b081908, 0x0819082b, 0x2b081908, + 0x08191919, 0x2b081908, 0x08192b08, 0x2b081908, 0x082b0819, 0x2b081908, 0x19080808, 0x2b081908, + 0x1908082b, 0x2b081908, 0x19081919, 0x2b081908, 0x19082b08, 0x2b081908, 0x19190819, 0x2b081908, + 0x19191908, 0x2b081908, 0x192b0808, 0x2b081908, 0x2b080819, 0x2b081908, 0x2b081908, 0x2b081908, + 0x2b190808, 0x2b081908, 0x08080808, 0x2b081919, 0x0808082b, 0x2b081919, 0x08081919, 0x2b081919, + 0x08082b08, 0x2b081919, 0x08190819, 0x2b081919, 0x08191908, 0x2b081919, 0x082b0808, 0x2b081919, + 0x19080819, 0x2b081919, 0x19081908, 0x2b081919, 0x19190808, 0x2b081919, 0x2b080808, 0x2b081919, + 0x2b082b2b, 0x2b081919, 0x08080819, 0x2b08192b, 0x08081908, 0x2b08192b, 0x08190808, 0x2b08192b, + 0x082b2b19, 0x2b08192b, 0x19080808, 0x2b08192b, 0x08080808, 0x2b082b08, 0x08081919, 0x2b082b08, + 0x08190819, 0x2b082b08, 0x08191908, 0x2b082b08, 0x19080819, 0x2b082b08, 0x19081908, 0x2b082b08, + 0x19190808, 0x2b082b08, 0x2b2b082b, 0x2b082b08, 0x08080819, 0x2b082b19, 0x08081908, 0x2b082b19, + 0x19080808, 0x2b082b19, 0x192b1919, 0x2b082b19, 0x082b082b, 0x2b082b2b, 0x19192b08, 0x2b082b2b, + 0x19192b2b, 0x2b082b2b, 0x2b08082b, 0x2b082b2b, 0x2b2b082b, 0x2b082b2b, 0x08080819, 0x2b190808, + 0x08081908, 0x2b190808, 0x08082b19, 0x2b190808, 0x08190808, 0x2b190808, 0x0819082b, 0x2b190808, + 0x08191919, 0x2b190808, 0x08192b08, 0x2b190808, 0x082b1908, 0x2b190808, 0x19080808, 0x2b190808, + 0x1908082b, 0x2b190808, 0x19081919, 0x2b190808, 0x19082b08, 0x2b190808, 0x19190819, 0x2b190808, + 0x19191908, 0x2b190808, 0x192b0808, 0x2b190808, 0x2b080819, 0x2b190808, 0x2b081908, 0x2b190808, + 0x2b190808, 0x2b190808, 0x08080808, 0x2b190819, 0x08081919, 0x2b190819, 0x08190819, 0x2b190819, + 0x08191908, 0x2b190819, 0x19080819, 0x2b190819, 0x19081908, 0x2b190819, 0x19190808, 0x2b190819, + 0x19192b2b, 0x2b190819, 0x08080819, 0x2b19082b, 0x08081908, 0x2b19082b, 0x08190808, 0x2b19082b, + 0x19080808, 0x2b19082b, 0x2b2b192b, 0x2b19082b, 0x08080808, 0x2b191908, 0x0808082b, 0x2b191908, + 0x08081919, 0x2b191908, 0x08082b08, 0x2b191908, 0x08190819, 0x2b191908, 0x08191908, 0x2b191908, + 0x082b0808, 0x2b191908, 0x19080819, 0x2b191908, 0x19081908, 0x2b191908, 0x19190808, 0x2b191908, + 0x2b080808, 0x2b191908, 0x2b19192b, 0x2b191908, 0x08080819, 0x2b191919, 0x08081908, 0x2b191919, + 0x08190808, 0x2b191919, 0x19080808, 0x2b191919, 0x2b192b08, 0x2b191919, 0x2b2b0819, 0x2b191919, + 0x08080808, 0x2b19192b, 0x1908192b, 0x2b19192b, 0x192b1908, 0x2b19192b, 0x08080819, 0x2b192b08, + 0x08081908, 0x2b192b08, 0x08190808, 0x2b192b08, 0x082b192b, 0x2b192b08, 0x19080808, 0x2b192b08, + 0x2b2b2b19, 0x2b192b08, 0x08080808, 0x2b192b19, 0x19082b19, 0x2b192b19, 0x1919082b, 0x2b192b19, + 0x2b190808, 0x2b192b2b, 0x08080808, 0x2b2b0808, 0x08081919, 0x2b2b0808, 0x08082b2b, 0x2b2b0808, + 0x08191908, 0x2b2b0808, 0x082b082b, 0x2b2b0808, 0x082b2b2b, 0x2b2b0808, 0x19080819, 0x2b2b0808, + 0x19081908, 0x2b2b0808, 0x19190808, 0x2b2b0808, 0x2b2b082b, 0x2b2b0808, 0x2b2b2b2b, 0x2b2b0808, + 0x19080808, 0x2b2b0819, 0x192b1919, 0x2b2b0819, 0x0808082b, 0x2b2b082b, 0x08082b2b, 0x2b2b082b, + 0x082b082b, 0x2b2b082b, 0x082b2b08, 0x2b2b082b, 0x082b2b2b, 0x2b2b082b, 0x2b08082b, 0x2b2b082b, + 0x2b082b08, 0x2b2b082b, 0x2b082b2b, 0x2b2b082b, 0x2b2b2b08, 0x2b2b082b, 0x08080819, 0x2b2b1908, + 0x08081908, 0x2b2b1908, 0x08190808, 0x2b2b1908, 0x19080808, 0x2b2b1908, 0x2b082b19, 0x2b2b1908, + 0x2b2b1908, 0x2b2b1908, 0x08080808, 0x2b2b1919, 0x08192b19, 0x2b2b1919, 0x19190819, 0x2b2b192b, + 0x08082b2b, 0x2b2b2b08, 0x082b2b08, 0x2b2b2b08, 0x2b2b082b, 0x2b2b2b08, 0x19191908, 0x2b2b2b19, + 0x2b08192b, 0x2b2b2b19, 0x08082b08, 0x2b2b2b2b, 0x08082b2b, 0x2b2b2b2b, 0x082b0808, 0x2b2b2b2b, + 0x082b082b, 0x2b2b2b2b, 0x082b2b08, 0x2b2b2b2b, 0x2b082b08, 0x2b2b2b2b, 0x2b2b2b2b, 0x2b2b2b2b +); + +struct iq2_s { + d: f16, + qs: array, + qh: array, + scales: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 256; + var qs_vals : array; + for (var i: u32 = 0; i < 16; i++) { + qs_vals[i] = bitcast(vec2(block.qs[i * 2], block.qs[i * 2 + 1])); + } + var qh_vals = array( + bitcast(vec2(block.qh[0], block.qh[1])), + bitcast(vec2(block.qh[2], block.qh[3])) + ); + var scale_vals = array( + bitcast(vec2(block.scales[0], block.scales[1])), + bitcast(vec2(block.scales[2], block.scales[3])) + ); + var sum = 0.0; + for (var ib: u32 = 0; ib < 8; ib ++) { + let s = get_byte(scale_vals[ib / 4], ib % 4); + let db = array( + d * (0.5 + f32(s & 0xF)) * 0.25, + d * (0.5 + f32(s >> 4)) * 0.25 + ); + let qs_w = qs_vals[ib]; + for (var l: u32 = 0; l < 4; l++) { + let qh_b = (get_byte(qh_vals[ib / 4], ib % 4) << (8 - 2 * l)) & 0x300; + let ig = (get_byte(qs_w, l) | qh_b) * 8; + let signs = get_byte(qs_vals[ib + 8], l); + let dl = db[l/2]; + for (var j: u32 = 0; j < 8; j++) { + let g = get_byte(iq2s_grid[(ig + j) / 4], (ig + j) % 4); + let m = select(1.0, -1.0, (get_byte(kmask_iq2xs[j / 4], j % 4) & signs) != 0); + sum += dl * f32(g) * m * src1[src1_i]; + src1_i++; + } + } + } + return sum; +} + + +#enddecl(IQ2_S) + +#decl(IQ3_XSS) + +const iq3xxs_grid = array( + 0x04040404, 0x04040414, 0x04040424, 0x04040c0c, 0x04040c1c, 0x04040c3e, 0x04041404, 0x04041414, + 0x04041c0c, 0x04042414, 0x04043e1c, 0x04043e2c, 0x040c040c, 0x040c041c, 0x040c0c04, 0x040c0c14, + 0x040c140c, 0x040c142c, 0x040c1c04, 0x040c1c14, 0x040c240c, 0x040c2c24, 0x040c3e04, 0x04140404, + 0x04140414, 0x04140424, 0x04140c0c, 0x04141404, 0x04141414, 0x04141c0c, 0x04141c1c, 0x04141c3e, + 0x04142c0c, 0x04142c3e, 0x04143e2c, 0x041c040c, 0x041c043e, 0x041c0c04, 0x041c0c14, 0x041c142c, + 0x041c3e04, 0x04240c1c, 0x04241c3e, 0x04242424, 0x04242c3e, 0x04243e1c, 0x04243e2c, 0x042c040c, + 0x042c043e, 0x042c1c14, 0x042c2c14, 0x04341c2c, 0x04343424, 0x043e0c04, 0x043e0c24, 0x043e0c34, + 0x043e241c, 0x043e340c, 0x0c04040c, 0x0c04041c, 0x0c040c04, 0x0c040c14, 0x0c04140c, 0x0c04141c, + 0x0c041c04, 0x0c041c14, 0x0c041c24, 0x0c04243e, 0x0c042c04, 0x0c0c0404, 0x0c0c0414, 0x0c0c0c0c, + 0x0c0c1404, 0x0c0c1414, 0x0c14040c, 0x0c14041c, 0x0c140c04, 0x0c140c14, 0x0c14140c, 0x0c141c04, + 0x0c143e14, 0x0c1c0404, 0x0c1c0414, 0x0c1c1404, 0x0c1c1c0c, 0x0c1c2434, 0x0c1c3434, 0x0c24040c, + 0x0c24042c, 0x0c242c04, 0x0c2c1404, 0x0c2c1424, 0x0c2c2434, 0x0c2c3e0c, 0x0c34042c, 0x0c3e1414, + 0x0c3e2404, 0x14040404, 0x14040414, 0x14040c0c, 0x14040c1c, 0x14041404, 0x14041414, 0x14041434, + 0x14041c0c, 0x14042414, 0x140c040c, 0x140c041c, 0x140c042c, 0x140c0c04, 0x140c0c14, 0x140c140c, + 0x140c1c04, 0x140c341c, 0x140c343e, 0x140c3e04, 0x14140404, 0x14140414, 0x14140c0c, 0x14140c3e, + 0x14141404, 0x14141414, 0x14141c3e, 0x14142404, 0x14142c2c, 0x141c040c, 0x141c0c04, 0x141c0c24, + 0x141c3e04, 0x141c3e24, 0x14241c2c, 0x14242c1c, 0x142c041c, 0x142c143e, 0x142c240c, 0x142c3e24, + 0x143e040c, 0x143e041c, 0x143e0c34, 0x143e242c, 0x1c04040c, 0x1c040c04, 0x1c040c14, 0x1c04140c, + 0x1c04141c, 0x1c042c04, 0x1c04342c, 0x1c043e14, 0x1c0c0404, 0x1c0c0414, 0x1c0c1404, 0x1c0c1c0c, + 0x1c0c2424, 0x1c0c2434, 0x1c14040c, 0x1c14041c, 0x1c140c04, 0x1c14142c, 0x1c142c14, 0x1c143e14, + 0x1c1c0c0c, 0x1c1c1c1c, 0x1c241c04, 0x1c24243e, 0x1c243e14, 0x1c2c0404, 0x1c2c0434, 0x1c2c1414, + 0x1c2c2c2c, 0x1c340c24, 0x1c341c34, 0x1c34341c, 0x1c3e1c1c, 0x1c3e3404, 0x24040424, 0x24040c3e, + 0x24041c2c, 0x24041c3e, 0x24042c1c, 0x24042c3e, 0x240c3e24, 0x24141404, 0x24141c3e, 0x24142404, + 0x24143404, 0x24143434, 0x241c043e, 0x241c242c, 0x24240424, 0x24242c0c, 0x24243424, 0x242c142c, + 0x242c241c, 0x242c3e04, 0x243e042c, 0x243e0c04, 0x243e0c14, 0x243e1c04, 0x2c040c14, 0x2c04240c, + 0x2c043e04, 0x2c0c0404, 0x2c0c0434, 0x2c0c1434, 0x2c0c2c2c, 0x2c140c24, 0x2c141c14, 0x2c143e14, + 0x2c1c0414, 0x2c1c2c1c, 0x2c240c04, 0x2c24141c, 0x2c24143e, 0x2c243e14, 0x2c2c0414, 0x2c2c1c0c, + 0x2c342c04, 0x2c3e1424, 0x2c3e2414, 0x34041424, 0x34042424, 0x34042434, 0x34043424, 0x340c140c, + 0x340c340c, 0x34140c3e, 0x34143424, 0x341c1c04, 0x341c1c34, 0x34242424, 0x342c042c, 0x342c2c14, + 0x34341c1c, 0x343e041c, 0x343e140c, 0x3e04041c, 0x3e04042c, 0x3e04043e, 0x3e040c04, 0x3e041c14, + 0x3e042c14, 0x3e0c1434, 0x3e0c2404, 0x3e140c14, 0x3e14242c, 0x3e142c14, 0x3e1c0404, 0x3e1c0c2c, + 0x3e1c1c1c, 0x3e1c3404, 0x3e24140c, 0x3e24240c, 0x3e2c0404, 0x3e2c0414, 0x3e2c1424, 0x3e341c04 +); + +struct iq3_xxs { + d: f16, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 256; + var sum = 0.0; + for (var ib: u32 = 0; ib < 16; ib += 2) { + let sc_sign = bitcast(vec2(block.qs[ib + 32], block.qs[ib + 33])); + let db = d * (0.5 + f32(sc_sign >> 28)) * 0.5; + for (var l: u32 = 0; l < 4; l++) { + let is = (sc_sign >> (7 * l)) & 127; + let signs = get_byte(ksigns_iq2xs[is / 4], is % 4); + let ig_val = bitcast(vec2(block.qs[ib * 2 + l], 0.0)); + let ig1 = get_byte(ig_val, 0); + let ig2 = get_byte(ig_val, 1); + for (var j: u32 = 0; j < 4; j++) { + let g1 = get_byte(iq3xxs_grid[ig1], j); + let g2 = get_byte(iq3xxs_grid[ig2], j); + let m1 = select(1.0, -1.0, (get_byte(kmask_iq2xs[0], j) & signs) != 0); + let m2 = select(1.0, -1.0, (get_byte(kmask_iq2xs[1], j) & signs) != 0); + sum += db * f32(g1) * m1 * src1[src1_i]; + sum += db * f32(g2) * m2 * src1[src1_i + 4]; + src1_i++; + } + src1_i += 4; + } + } + return sum; +} + +#enddecl(IQ3_XSS) + +#decl(IQ3_S) + +const iq3s_grid = array( + 0x01010101, 0x01010103, 0x01010105, 0x0101010b, 0x0101010f, 0x01010301, 0x01010303, 0x01010305, + 0x01010309, 0x0101030d, 0x01010501, 0x01010503, 0x0101050b, 0x01010707, 0x01010901, 0x01010905, + 0x0101090b, 0x0101090f, 0x01010b03, 0x01010b07, 0x01010d01, 0x01010d05, 0x01010f03, 0x01010f09, + 0x01010f0f, 0x01030101, 0x01030103, 0x01030105, 0x01030109, 0x01030301, 0x01030303, 0x0103030b, + 0x01030501, 0x01030507, 0x0103050f, 0x01030703, 0x0103070b, 0x01030909, 0x01030d03, 0x01030d0b, + 0x01030f05, 0x01050101, 0x01050103, 0x0105010b, 0x0105010f, 0x01050301, 0x01050307, 0x0105030d, + 0x01050503, 0x0105050b, 0x01050701, 0x01050709, 0x01050905, 0x0105090b, 0x0105090f, 0x01050b03, + 0x01050b07, 0x01050f01, 0x01050f07, 0x01070107, 0x01070303, 0x0107030b, 0x01070501, 0x01070505, + 0x01070703, 0x01070707, 0x0107070d, 0x01070909, 0x01070b01, 0x01070b05, 0x01070d0f, 0x01070f03, + 0x01070f0b, 0x01090101, 0x01090307, 0x0109030f, 0x01090503, 0x01090509, 0x01090705, 0x01090901, + 0x01090907, 0x01090b03, 0x01090f01, 0x010b0105, 0x010b0109, 0x010b0501, 0x010b0505, 0x010b050d, + 0x010b0707, 0x010b0903, 0x010b090b, 0x010b090f, 0x010b0d0d, 0x010b0f07, 0x010d010d, 0x010d0303, + 0x010d0307, 0x010d0703, 0x010d0b05, 0x010d0f03, 0x010f0101, 0x010f0105, 0x010f0109, 0x010f0501, + 0x010f0505, 0x010f050d, 0x010f0707, 0x010f0b01, 0x010f0b09, 0x03010101, 0x03010103, 0x03010105, + 0x03010109, 0x03010301, 0x03010303, 0x03010307, 0x0301030b, 0x0301030f, 0x03010501, 0x03010505, + 0x03010703, 0x03010709, 0x0301070d, 0x03010b09, 0x03010b0d, 0x03010d03, 0x03010f05, 0x03030101, + 0x03030103, 0x03030107, 0x0303010d, 0x03030301, 0x03030309, 0x03030503, 0x03030701, 0x03030707, + 0x03030903, 0x03030b01, 0x03030b05, 0x03030f01, 0x03030f0d, 0x03050101, 0x03050305, 0x0305030b, + 0x0305030f, 0x03050501, 0x03050509, 0x03050705, 0x03050901, 0x03050907, 0x03050b0b, 0x03050d01, + 0x03050f05, 0x03070103, 0x03070109, 0x0307010f, 0x03070301, 0x03070307, 0x03070503, 0x0307050f, + 0x03070701, 0x03070709, 0x03070903, 0x03070d05, 0x03070f01, 0x03090107, 0x0309010b, 0x03090305, + 0x03090309, 0x03090703, 0x03090707, 0x03090905, 0x0309090d, 0x03090b01, 0x03090b09, 0x030b0103, + 0x030b0301, 0x030b0307, 0x030b0503, 0x030b0701, 0x030b0705, 0x030b0b03, 0x030d0501, 0x030d0509, + 0x030d050f, 0x030d0909, 0x030d090d, 0x030f0103, 0x030f0107, 0x030f0301, 0x030f0305, 0x030f0503, + 0x030f070b, 0x030f0903, 0x030f0d05, 0x030f0f01, 0x05010101, 0x05010103, 0x05010107, 0x0501010b, + 0x0501010f, 0x05010301, 0x05010305, 0x05010309, 0x0501030d, 0x05010503, 0x05010507, 0x0501050f, + 0x05010701, 0x05010705, 0x05010903, 0x05010907, 0x0501090b, 0x05010b01, 0x05010b05, 0x05010d0f, + 0x05010f01, 0x05010f07, 0x05010f0b, 0x05030101, 0x05030105, 0x05030301, 0x05030307, 0x0503030f, + 0x05030505, 0x0503050b, 0x05030703, 0x05030709, 0x05030905, 0x05030b03, 0x05050103, 0x05050109, + 0x0505010f, 0x05050503, 0x05050507, 0x05050701, 0x0505070f, 0x05050903, 0x05050b07, 0x05050b0f, + 0x05050f03, 0x05050f09, 0x05070101, 0x05070105, 0x0507010b, 0x05070303, 0x05070505, 0x05070509, + 0x05070703, 0x05070707, 0x05070905, 0x05070b01, 0x05070d0d, 0x05090103, 0x0509010f, 0x05090501, + 0x05090507, 0x05090705, 0x0509070b, 0x05090903, 0x05090f05, 0x05090f0b, 0x050b0109, 0x050b0303, + 0x050b0505, 0x050b070f, 0x050b0901, 0x050b0b07, 0x050b0f01, 0x050d0101, 0x050d0105, 0x050d010f, + 0x050d0503, 0x050d0b0b, 0x050d0d03, 0x050f010b, 0x050f0303, 0x050f050d, 0x050f0701, 0x050f0907, + 0x050f0b01, 0x07010105, 0x07010303, 0x07010307, 0x0701030b, 0x0701030f, 0x07010505, 0x07010703, + 0x07010707, 0x0701070b, 0x07010905, 0x07010909, 0x0701090f, 0x07010b03, 0x07010d07, 0x07010f03, + 0x07030103, 0x07030107, 0x0703010b, 0x07030309, 0x07030503, 0x07030507, 0x07030901, 0x07030d01, + 0x07030f05, 0x07030f0d, 0x07050101, 0x07050305, 0x07050501, 0x07050705, 0x07050709, 0x07050b01, + 0x07070103, 0x07070301, 0x07070309, 0x07070503, 0x07070507, 0x0707050f, 0x07070701, 0x07070903, + 0x07070907, 0x0707090f, 0x07070b0b, 0x07070f07, 0x07090107, 0x07090303, 0x0709030d, 0x07090505, + 0x07090703, 0x07090b05, 0x07090d01, 0x07090d09, 0x070b0103, 0x070b0301, 0x070b0305, 0x070b050b, + 0x070b0705, 0x070b0909, 0x070b0b0d, 0x070b0f07, 0x070d030d, 0x070d0903, 0x070f0103, 0x070f0107, + 0x070f0501, 0x070f0505, 0x070f070b, 0x09010101, 0x09010109, 0x09010305, 0x09010501, 0x09010509, + 0x0901050f, 0x09010705, 0x09010903, 0x09010b01, 0x09010f01, 0x09030105, 0x0903010f, 0x09030303, + 0x09030307, 0x09030505, 0x09030701, 0x0903070b, 0x09030907, 0x09030b03, 0x09030b0b, 0x09050103, + 0x09050107, 0x09050301, 0x0905030b, 0x09050503, 0x09050707, 0x09050901, 0x09050b0f, 0x09050d05, + 0x09050f01, 0x09070109, 0x09070303, 0x09070307, 0x09070501, 0x09070505, 0x09070703, 0x0907070b, + 0x09090101, 0x09090105, 0x09090509, 0x0909070f, 0x09090901, 0x09090f03, 0x090b010b, 0x090b010f, + 0x090b0503, 0x090b0d05, 0x090d0307, 0x090d0709, 0x090d0d01, 0x090f0301, 0x090f030b, 0x090f0701, + 0x090f0907, 0x090f0b03, 0x0b010105, 0x0b010301, 0x0b010309, 0x0b010505, 0x0b010901, 0x0b010909, + 0x0b01090f, 0x0b010b05, 0x0b010d0d, 0x0b010f09, 0x0b030103, 0x0b030107, 0x0b03010b, 0x0b030305, + 0x0b030503, 0x0b030705, 0x0b030f05, 0x0b050101, 0x0b050303, 0x0b050507, 0x0b050701, 0x0b05070d, + 0x0b050b07, 0x0b070105, 0x0b07010f, 0x0b070301, 0x0b07050f, 0x0b070909, 0x0b070b03, 0x0b070d0b, + 0x0b070f07, 0x0b090103, 0x0b090109, 0x0b090501, 0x0b090705, 0x0b09090d, 0x0b0b0305, 0x0b0b050d, + 0x0b0b0b03, 0x0b0b0b07, 0x0b0d0905, 0x0b0f0105, 0x0b0f0109, 0x0b0f0505, 0x0d010303, 0x0d010307, + 0x0d01030b, 0x0d010703, 0x0d010707, 0x0d010d01, 0x0d030101, 0x0d030501, 0x0d03050f, 0x0d030d09, + 0x0d050305, 0x0d050709, 0x0d050905, 0x0d050b0b, 0x0d050d05, 0x0d050f01, 0x0d070101, 0x0d070309, + 0x0d070503, 0x0d070901, 0x0d09050b, 0x0d090907, 0x0d090d05, 0x0d0b0101, 0x0d0b0107, 0x0d0b0709, + 0x0d0b0d01, 0x0d0d010b, 0x0d0d0901, 0x0d0f0303, 0x0d0f0307, 0x0f010101, 0x0f010109, 0x0f01010f, + 0x0f010501, 0x0f010505, 0x0f01070d, 0x0f010901, 0x0f010b09, 0x0f010d05, 0x0f030105, 0x0f030303, + 0x0f030509, 0x0f030907, 0x0f03090b, 0x0f050103, 0x0f050109, 0x0f050301, 0x0f05030d, 0x0f050503, + 0x0f050701, 0x0f050b03, 0x0f070105, 0x0f070705, 0x0f07070b, 0x0f070b07, 0x0f090103, 0x0f09010b, + 0x0f090307, 0x0f090501, 0x0f090b01, 0x0f0b0505, 0x0f0b0905, 0x0f0d0105, 0x0f0d0703, 0x0f0f0101 +); + +struct iq3_s { + d: f16, + qs: array, + qh: array, + signs: array, + scales: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 256; + var qh_vals = array( + bitcast(vec2(block.qh[0], block.qh[1])), + bitcast(vec2(block.qh[2], block.qh[3])) + ); + var sign_vals: array; + for (var i: u32 = 0; i < 8; i++) { + sign_vals[i] = bitcast(vec2(block.signs[i * 2], block.signs[i * 2 + 1])); + } + var scale_vals = bitcast(vec2(block.scales[0], block.scales[1])); + var sum = 0.0; + for (var ib: u32 = 0; ib < 4; ib++) { + let s = get_byte(scale_vals, ib); + let db = array( + d * (1.0 + 2.0 * f32(s & 0xF)), + d * (1.0 + 2.0 * f32(s >> 4)) + ); + for (var k: u32 = 0; k < 2; k++) { + let dl = db[k]; + let qh_byte = get_byte(qh_vals[ib / 2], (ib % 2) * 2 + k); + let sign_w = sign_vals[ib * 2 + k]; + for (var l: u32 = 0; l < 4; l++) { + let signs = get_byte(sign_w, l); + let ig_val = bitcast(vec2(block.qs[ib * 8 + k * 4 + l], 0.0)); + let ig1 = get_byte(ig_val, 0) | ((qh_byte << ((8 - (2 * l)))) & 256); + let ig2 = get_byte(ig_val, 1) | ((qh_byte << ((7 - (2 * l)))) & 256); + for (var j: u32 = 0; j < 4; j++) { + let g1 = get_byte(iq3s_grid[ig1], j); + let g2 = get_byte(iq3s_grid[ig2], j); + let m1 = select(1.0, -1.0, (get_byte(kmask_iq2xs[0], j) & signs) != 0); + let m2 = select(1.0, -1.0, (get_byte(kmask_iq2xs[1], j) & signs) != 0); + sum += dl * f32(g1) * m1 * src1[src1_i]; + sum += dl * f32(g2) * m2 * src1[src1_i + 4]; + src1_i++; + } + src1_i += 4; + } + } + } + return sum; +} +#enddecl(IQ3_S) + +#decl(IQ1_TABLE) + +const IQ1_DELTA: f32 = 0.125; + +const iq1_grid = array( + 0xfffdffff, 0xfff7fff0, 0xffccfff5, 0xffdfffc0, 0xffd7ffdd, 0xff30ffd5, 0xff03ff0c, 0xff10ff01, + 0xff7dff7f, 0xff75ff77, 0xff5fff40, 0xff57ff5d, 0xfcf3ff55, 0xfcccfcf0, 0xfcc1fcc3, 0xfcc5fcc4, + 0xfc3cfcd0, 0xfc34fc31, 0xfc00fc0d, 0xfc1cfc05, 0xfc11fc13, 0xfc70fc17, 0xfc43fc4c, 0xfc50fc41, + 0xfdfdfdff, 0xfdf5fdf7, 0xfddffdc0, 0xfdd7fddd, 0xfd30fdd5, 0xfd04fd0c, 0xfd14fd13, 0xfd7dfd7f, + 0xfd75fd77, 0xfd40fd4c, 0xfd5ffd44, 0xfd57fd5d, 0xf3ccfd55, 0xf3c1f3c3, 0xf33cf3d0, 0xf300f334, + 0xf313f305, 0xf34cf310, 0xf350f344, 0xf0f3f0fc, 0xf0f1f0f0, 0xf0c7f0c0, 0xf0d4f0c5, 0xf030f03f, + 0xf00ff035, 0xf003f00c, 0xf001f000, 0xf01ff004, 0xf010f01d, 0xf015f017, 0xf04cf07c, 0xf047f040, + 0xf05cf045, 0xf050f053, 0xf054f051, 0xf1c4f1c3, 0xf133f13c, 0xf10df10f, 0xf107f100, 0xf11cf11f, + 0xf114f111, 0xf14cf170, 0xf144f143, 0xf7fdf7ff, 0xf7f5f7f7, 0xf7dff7c0, 0xf7d7f7dd, 0xf730f7d5, + 0xf701f70c, 0xf77ff710, 0xf777f77d, 0xf740f775, 0xf75df75f, 0xf755f757, 0xf4ccf4f0, 0xf4c4f4c3, + 0xf4d0f4d3, 0xf40ff43c, 0xf400f40c, 0xf413f41c, 0xf44cf414, 0xf441f443, 0xf450f444, 0xf5fdf5ff, + 0xf5f5f5f7, 0xf5dff5c0, 0xf5d7f5dd, 0xf530f5d5, 0xf504f50c, 0xf510f51c, 0xf57df57f, 0xf577f570, + 0xf540f575, 0xf55df55f, 0xf555f557, 0xcfcccfcf, 0xcfc4cfc3, 0xcfd0cfd3, 0xcf33cf3c, 0xcf00cf0f, + 0xcf1ccf07, 0xcf10cf13, 0xcf4ccf14, 0xcf41cf43, 0xcf50cf5c, 0xccf3ccfc, 0xccf4ccf1, 0xcccdcccf, + 0xccc7ccc0, 0xccd3ccdc, 0xcc30ccd4, 0xcc0fcc35, 0xcc0dcc0c, 0xcc00cc03, 0xcc04cc01, 0xcc10cc1f, + 0xcc4dcc73, 0xcc5ccc40, 0xcdcccc53, 0xcdc1cdc3, 0xcd3fcdd0, 0xcd34cd31, 0xcd00cd0d, 0xcd05cd07, + 0xcd11cd13, 0xcd4ccd70, 0xcd41cd43, 0xc3fccd50, 0xc3f4c3f1, 0xc3c0c3c3, 0xc3c4c3c7, 0xc3d1c3dc, + 0xc330c33c, 0xc337c331, 0xc30cc335, 0xc300c303, 0xc304c301, 0xc310c31d, 0xc373c317, 0xc34fc374, + 0xc340c343, 0xc344c347, 0xc35cc345, 0xc350c353, 0xc0fdc354, 0xc0f5c0f0, 0xc0c3c0cc, 0xc0c1c0c0, + 0xc0dfc0c4, 0xc0d0c0dd, 0xc0d5c0d7, 0xc033c03c, 0xc031c030, 0xc00dc00c, 0xc000c003, 0xc004c001, + 0xc01cc005, 0xc010c013, 0xc014c011, 0xc07dc07f, 0xc070c073, 0xc075c077, 0xc04cc04f, 0xc040c043, + 0xc044c041, 0xc05fc045, 0xc050c05d, 0xc1f3c1fc, 0xc1f1c1f0, 0xc1c1c1c0, 0xc1c5c1c7, 0xc1d1c1dc, + 0xc13dc13f, 0xc130c133, 0xc135c137, 0xc100c10c, 0xc107c101, 0xc11cc104, 0xc110c113, 0xc114c117, + 0xc171c115, 0xc14dc175, 0xc153c140, 0xc7ccc154, 0xc7d0c7c1, 0xc733c73c, 0xc734c731, 0xc700c70f, + 0xc705c707, 0xc71cc71f, 0xc711c713, 0xc770c714, 0xc743c74c, 0xc4cfc750, 0xc4c0c4cd, 0xc4dcc4c5, + 0xc43dc4d0, 0xc430c433, 0xc40cc437, 0xc400c403, 0xc404c401, 0xc41fc405, 0xc415c410, 0xc44cc474, + 0xc440c44d, 0xc45cc447, 0xc454c451, 0xc5c1c5f4, 0xc5d1c5d3, 0xc531c533, 0xc50fc534, 0xc500c50d, + 0xc51cc507, 0xc514c511, 0xc54cc570, 0xc545c541, 0xdffddfff, 0xdff5dff7, 0xdfdfdfc0, 0xdfd0dfdd, + 0xdfd5dfd7, 0xdf0cdf30, 0xdf1cdf04, 0xdf7fdf10, 0xdf77df7d, 0xdf40df75, 0xdf5ddf5f, 0xdf57df50, + 0xdcf0df55, 0xdcc3dccc, 0xdcd0dcc4, 0xdc33dc3d, 0xdc00dc34, 0xdc05dc07, 0xdc13dc1c, 0xdc11dc10, + 0xdc4fdc70, 0xdc44dc41, 0xddfcdc50, 0xddf5ddf7, 0xddc0ddcc, 0xdddddddf, 0xddd5ddd7, 0xdd0cdd30, + 0xdd04dd01, 0xdd7cdd10, 0xdd75dd77, 0xdd40dd4c, 0xdd5ddd5f, 0xdd55dd57, 0xd3c3d3f0, 0xd3c4d3c1, + 0xd333d3d0, 0xd331d330, 0xd30dd334, 0xd307d300, 0xd311d305, 0xd34cd370, 0xd344d343, 0xd350d35c, + 0xd0c0d0f4, 0xd0d4d0dc, 0xd030d03f, 0xd00cd037, 0xd000d003, 0xd01dd004, 0xd017d010, 0xd04fd074, + 0xd040d043, 0xd045d047, 0xd053d05c, 0xd054d051, 0xd1cfd1f0, 0xd1c4d1cd, 0xd13cd1d0, 0xd100d134, + 0xd11cd11f, 0xd173d114, 0xd14fd171, 0xd7ffd145, 0xd7f7d7fd, 0xd7c0d7f5, 0xd7ddd7df, 0xd7d5d7d7, + 0xd70cd730, 0xd710d703, 0xd77dd77f, 0xd775d777, 0xd75dd75f, 0xd755d757, 0xd4ccd4f4, 0xd4c4d4c3, + 0xd431d4d0, 0xd40dd434, 0xd41cd400, 0xd411d413, 0xd470d414, 0xd441d44f, 0xd453d444, 0xd5ffd450, + 0xd5f7d5fd, 0xd5dfd5f5, 0xd5d7d5dd, 0xd530d5d5, 0xd501d50c, 0xd510d504, 0xd57dd57f, 0xd575d577, + 0xd55fd540, 0xd557d55d, 0x3ff0d555, 0x3fc13fcc, 0x3f343fd0, 0x3f003f0d, 0x3f053f07, 0x3f133f1c, + 0x3f433f11, 0x3f5c3f44, 0x3cff3f51, 0x3cf33cfc, 0x3cf43cf1, 0x3cc03ccd, 0x3cc73cc1, 0x3cdc3cc5, + 0x3cd43cd1, 0x3c373c30, 0x3c0c3c35, 0x3c003c03, 0x3c043c01, 0x3c103c05, 0x3c153c17, 0x3c733c7c, + 0x3c4f3c71, 0x3c403c4d, 0x3c5c3c5f, 0x3df03c5d, 0x3dc33dcc, 0x3dd03dc1, 0x3d0d3d3c, 0x3d053d00, + 0x3d143d13, 0x3d433d74, 0x33fc3d50, 0x33c433c0, 0x333033d4, 0x33353337, 0x3303330c, 0x33013300, + 0x331d331c, 0x33173310, 0x337c3315, 0x33743371, 0x334d334f, 0x335f3340, 0x3354335c, 0x30fd30fc, + 0x30f530f0, 0x30c330cc, 0x30c130c0, 0x30df30c4, 0x30d530d0, 0x3033303c, 0x30313030, 0x300f3034, + 0x3003300c, 0x30013000, 0x30043007, 0x3013301c, 0x30113010, 0x307d3014, 0x30703073, 0x304c3077, + 0x30403043, 0x30443041, 0x30503045, 0x30553057, 0x31f031fc, 0x31c331f4, 0x31c731c0, 0x31dc31c5, + 0x31d431d3, 0x313d313f, 0x31373130, 0x310c310f, 0x3100310d, 0x31043101, 0x3110311d, 0x317c3117, + 0x31753170, 0x31403143, 0x3153315c, 0x37f03151, 0x37c037cc, 0x37d037c5, 0x3734373d, 0x3700370f, + 0x371c3707, 0x37113713, 0x37703714, 0x3743374c, 0x37443741, 0x34fc3750, 0x34f134f0, 0x34cf34f5, + 0x34c034c3, 0x34dc34c7, 0x34d134d3, 0x3430343f, 0x340c3435, 0x3403340d, 0x34013400, 0x341f3404, + 0x3410341d, 0x34153411, 0x34743471, 0x3440344d, 0x34473441, 0x3453345c, 0x34543451, 0x353335c1, + 0x35343531, 0x35073500, 0x35133505, 0x35433514, 0x0ffc3550, 0x0ff00ff3, 0x0ff40ff1, 0x0fc00fcd, + 0x0fdc0fc5, 0x0fd40fd3, 0x0f300f3f, 0x0f0c0f37, 0x0f000f03, 0x0f040f01, 0x0f170f10, 0x0f740f71, + 0x0f470f40, 0x0f5c0f5f, 0x0f540f51, 0x0cf70cf0, 0x0cf50cf4, 0x0cc30ccc, 0x0cc10cc0, 0x0cc40cc7, + 0x0cd00cdf, 0x0cd70cd1, 0x0c3c0cd5, 0x0c300c33, 0x0c340c31, 0x0c0c0c0f, 0x0c030c0d, 0x0c010c00, + 0x0c040c07, 0x0c1c0c05, 0x0c100c13, 0x0c140c11, 0x0c700c7d, 0x0c430c4c, 0x0c410c40, 0x0c5f0c44, + 0x0c550c50, 0x0df10dfc, 0x0dc00dcd, 0x0ddc0dc5, 0x0d3d0dd3, 0x0d350d30, 0x0d030d0c, 0x0d010d00, + 0x0d1d0d04, 0x0d700d10, 0x0d4d0d4f, 0x0d440d40, 0x0d530d45, 0x03f003f3, 0x03c303cc, 0x03c103c0, + 0x03c403c7, 0x03d003dc, 0x03d503d7, 0x0333033c, 0x03310330, 0x03350334, 0x030c030f, 0x03000303, + 0x03070301, 0x03050304, 0x031d031c, 0x03100313, 0x03140311, 0x0377037f, 0x034c0375, 0x03400343, + 0x03440341, 0x0353035c, 0x03550350, 0x00fd00fc, 0x00f000f3, 0x00f400f1, 0x00cc00cf, 0x00c300cd, + 0x00c100c0, 0x00c500c4, 0x00d300dc, 0x00d100d0, 0x003f00d4, 0x003d003c, 0x00300033, 0x00370031, + 0x000f0034, 0x000d000c, 0x00000003, 0x00070001, 0x00050004, 0x001c001f, 0x00100013, 0x00170011, + 0x00150014, 0x0073007c, 0x00740070, 0x004f0075, 0x0043004c, 0x00410040, 0x00440047, 0x0053005c, + 0x00510050, 0x01ff0054, 0x01fd01fc, 0x01f101f3, 0x01f401f7, 0x01c301cc, 0x01c701c0, 0x01df01c4, + 0x01dd01dc, 0x01d001d3, 0x01d701d1, 0x013c01d4, 0x01310130, 0x01340137, 0x010f0135, 0x010d010c, + 0x01000103, 0x01070101, 0x01050104, 0x0113011c, 0x01140110, 0x0170017d, 0x01770171, 0x01750174, + 0x0140014c, 0x015d0145, 0x01510150, 0x01540157, 0x07f007f3, 0x07f407f1, 0x07c007cf, 0x07dc07c7, + 0x073007d5, 0x07350737, 0x0703070c, 0x07010700, 0x07040707, 0x071d071f, 0x07100713, 0x0774077d, + 0x074d074f, 0x07470740, 0x0754075c, 0x04fd04fc, 0x04f504f0, 0x04c304cc, 0x04c104c0, 0x04d004c4, + 0x0433043c, 0x04310430, 0x040f0434, 0x040d040c, 0x04000403, 0x04070401, 0x04050404, 0x0413041c, + 0x04110410, 0x047c0414, 0x04740470, 0x0443044c, 0x04410440, 0x04440447, 0x05f30450, 0x05c005f7, + 0x05df05c5, 0x05d105d0, 0x053005d4, 0x05340537, 0x0500050c, 0x05070501, 0x051d0504, 0x05170510, + 0x057c0515, 0x054d0575, 0x05410540, 0x05450547, 0x1ff0055c, 0x1fc11fc3, 0x1fd01fc4, 0x1f0f1f33, + 0x1f011f00, 0x1f051f07, 0x1f131f1c, 0x1f141f11, 0x1f411f7c, 0x1cfc1f50, 0x1cf11cf3, 0x1ccd1cf4, + 0x1cdc1cc0, 0x1cd11cdd, 0x1c301cd4, 0x1c0c1c34, 0x1c011c00, 0x1c101c04, 0x1c151c11, 0x1c751c73, + 0x1c401c4d, 0x1c511c5c, 0x1dcc1c54, 0x1dc41dc1, 0x1d3c1d3f, 0x1d001d31, 0x1d071d01, 0x1d701d1f, + 0x1d411d4c, 0x13cc1d50, 0x13c013cd, 0x13c513c1, 0x13d113dc, 0x133f13d4, 0x1330133d, 0x13351337, + 0x1303130c, 0x13011300, 0x13051304, 0x131d131f, 0x13731310, 0x13741370, 0x134d134f, 0x13401343, + 0x13471341, 0x135c1345, 0x13541353, 0x10f710f0, 0x10cc10f5, 0x10c110c0, 0x103310c4, 0x10311030, + 0x100f1034, 0x1003100c, 0x10011000, 0x101c1004, 0x10101013, 0x10141011, 0x10741071, 0x104c1075, + 0x10411040, 0x10451044, 0x1050105d, 0x10571051, 0x11f411fd, 0x11df11c0, 0x11d711d1, 0x113f11d4, + 0x11371130, 0x110c1135, 0x11001103, 0x11071101, 0x111f1105, 0x11171110, 0x117d117f, 0x11751170, + 0x11411143, 0x11441147, 0x1153115f, 0x11551151, 0x17c417c1, 0x173c17d0, 0x1700170d, 0x171c1705, + 0x17701714, 0x1747174c, 0x14fc1751, 0x14cf14f3, 0x14dc14c0, 0x14d114d3, 0x143f14d4, 0x1430143c, + 0x14371431, 0x1403140c, 0x14011400, 0x141f1404, 0x14151410, 0x1473147d, 0x14401475, 0x1453145c, + 0x14541450, 0x15c115cc, 0x153c15c7, 0x15341533, 0x1500150f, 0x15051507, 0x15101513, 0x15711514, + 0x15471543, 0x15511545, 0x7ffd7fff, 0x7ff57ff7, 0x7fdd7fdf, 0x7fd57fd7, 0x7f0f7f30, 0x7f037f0c, + 0x7f047f01, 0x7f7f7f10, 0x7f777f7d, 0x7f407f75, 0x7f5d7f5f, 0x7f557f57, 0x7ccc7cf0, 0x7cc17cc3, + 0x7cd07cc4, 0x7c337c3c, 0x7c0f7c34, 0x7c007c0d, 0x7c077c01, 0x7c137c04, 0x7c147c11, 0x7c747c70, + 0x7c417c43, 0x7c507c44, 0x7dfd7dff, 0x7df57df7, 0x7ddf7dc0, 0x7dd77ddd, 0x7d0c7dd5, 0x7d047d03, + 0x7d7f7d10, 0x7d777d7d, 0x7d407d75, 0x7d5d7d5f, 0x7d557d57, 0x73c473c3, 0x7333733c, 0x7300730c, + 0x731c7305, 0x73147313, 0x73447343, 0x70f470fc, 0x70c070cd, 0x70d170c5, 0x703f70d4, 0x7030703c, + 0x700c7037, 0x70007003, 0x70047001, 0x70107005, 0x70177011, 0x707c7015, 0x70717073, 0x704f7074, + 0x7040704d, 0x70517047, 0x71c171cc, 0x71d071c4, 0x7133713c, 0x71357134, 0x7100710f, 0x71057104, + 0x7111711c, 0x71707115, 0x7145714c, 0x77ff7153, 0x77f777fd, 0x77c077f5, 0x77dd77df, 0x77d577d7, + 0x7730773c, 0x7703770c, 0x77107704, 0x777f7714, 0x7777777d, 0x77407775, 0x775d775f, 0x77557757, + 0x74f174f0, 0x74c374cc, 0x74d074c1, 0x7433743c, 0x74347431, 0x740d740f, 0x74057400, 0x7413741c, + 0x74417470, 0x74507444, 0x75fd75ff, 0x75f575f7, 0x75df75c0, 0x75d775dd, 0x753075d5, 0x7503750c, + 0x757f7501, 0x7577757d, 0x75407575, 0x755d755f, 0x75557557, 0x4fcc4ff0, 0x4fc74fc1, 0x4fd04fc4, + 0x4f314f3c, 0x4f004f34, 0x4f054f07, 0x4f154f14, 0x4f4c4f70, 0x4f414f43, 0x4f504f44, 0x4cf34cfc, + 0x4cf44cf1, 0x4cc04ccf, 0x4cc54cc7, 0x4cd34cdc, 0x4cd44cd1, 0x4c304c3f, 0x4c0c4c0f, 0x4c004c03, + 0x4c044c01, 0x4c104c1d, 0x4c714c73, 0x4c404c4d, 0x4c5c4c47, 0x4c514c53, 0x4df04c54, 0x4dc34dcc, + 0x4dd04dc4, 0x4d314d33, 0x4d0f4d34, 0x4d004d0d, 0x4d114d07, 0x4d704d14, 0x4d414d43, 0x43fc4d54, + 0x43f143f3, 0x43c043cf, 0x43d143c7, 0x4335433f, 0x4303430c, 0x43014300, 0x43044307, 0x431c431f, + 0x4310431d, 0x43714373, 0x4343434d, 0x43474340, 0x4354435c, 0x40f040ff, 0x40f540f7, 0x40cc40cf, + 0x40c040c3, 0x40c440c1, 0x40d040dc, 0x40d540d4, 0x4033403c, 0x40314030, 0x400f4034, 0x400d400c, + 0x40004003, 0x40074001, 0x40054004, 0x4013401c, 0x40114010, 0x407c4014, 0x40774070, 0x404d404c, + 0x40404043, 0x40444041, 0x405f4045, 0x4050405d, 0x40554057, 0x41f341fc, 0x41c041cf, 0x41df41c4, + 0x41d441d1, 0x41374130, 0x410c4134, 0x4100410d, 0x41044101, 0x41174110, 0x4173417d, 0x41754174, + 0x4143414d, 0x41534140, 0x41544151, 0x47c147f0, 0x47d047c4, 0x4731473c, 0x470d470f, 0x47014700, + 0x47134705, 0x47704710, 0x4741474c, 0x47504744, 0x44f144f3, 0x44cf44f4, 0x44c044cd, 0x44c544c7, + 0x44dc44df, 0x44d144d3, 0x443d443f, 0x44374430, 0x440c4435, 0x44004403, 0x44044401, 0x4410441d, + 0x44154411, 0x4473447c, 0x444d444f, 0x44454440, 0x4451445c, 0x45c045f0, 0x453345d0, 0x45344531, + 0x4500450f, 0x451c4507, 0x454c4570, 0x45404543, 0x5fff4541, 0x5ff75ffd, 0x5fc05ff5, 0x5fdd5fdf, + 0x5fd55fd7, 0x5f0c5f30, 0x5f015f03, 0x5f7f5f04, 0x5f775f7d, 0x5f405f75, 0x5f5d5f5f, 0x5f555f57, + 0x5cf45cf0, 0x5cc35ccc, 0x5cc45cc1, 0x5c315cc5, 0x5c0c5c34, 0x5c075c00, 0x5c1c5c05, 0x5c705c13, + 0x5c4d5c4f, 0x5c445c41, 0x5df75dfd, 0x5dcf5df5, 0x5ddd5dc4, 0x5dd55dd7, 0x5d0c5d30, 0x5d045d01, + 0x5d7f5d10, 0x5d775d7d, 0x5d405d75, 0x5d5d5d5f, 0x5d555d57, 0x53d053c4, 0x5333533c, 0x5303530f, + 0x53075300, 0x531c5305, 0x53115310, 0x53145317, 0x50f15370, 0x50cf50f4, 0x50c050cd, 0x50d150c7, + 0x503d50d4, 0x500c5030, 0x50005003, 0x50045001, 0x50155010, 0x5073507c, 0x50715070, 0x504d5074, + 0x50475040, 0x51cc51f0, 0x51c551c1, 0x51d051dc, 0x51315133, 0x510d5135, 0x51015100, 0x511f5107, + 0x5171511d, 0x5140514f, 0x51445141, 0x5153515c, 0x57ff5151, 0x57f757fd, 0x57df57f5, 0x57d757dd, + 0x570c57d5, 0x57015703, 0x577f5704, 0x5777577d, 0x57405775, 0x575d575f, 0x57555757, 0x54c354f0, + 0x54dc54c4, 0x543c54d0, 0x5400540f, 0x541c5405, 0x54145411, 0x5441544f, 0x55fd55ff, 0x55f555f7, + 0x55dd55df, 0x55d555d7, 0x5503550c, 0x557f5501, 0x5577557d, 0x55405575, 0x555d555f, 0x55555557 +); + +#enddecl(IQ1_TABLE) + +#decl(IQ1_S) + +struct iq1_s { + d: f16, + qs: array, + qh: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 256; + var sum = 0.0; + for (var ib: u32 = 0; ib < 8; ib++) { + let qh = bitcast(vec2(block.qh[ib], 0.0)); + let dl = d * (2 * f32((qh >> 12) & 7) + 1); + let delta = select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x8000) != 0); + let qs_w = bitcast(vec2(block.qs[ib * 2], block.qs[ib * 2 + 1])); + for (var l: u32 = 0; l < 4; l++) { + let ig = (get_byte(qs_w, l) | (((qh >> (3 * l)) & 7) << 8)) * 8; + for (var j: u32 = 0; j < 8; j++) { + let gw = iq1_grid[(ig + j) / 16]; + let g = (gw >> (((ig + j) % 16) * 2)) & 3; + let gs = bitcast(g << 30) >> 30; + sum += dl * (f32(gs) + delta) * src1[src1_i]; + src1_i++; + } + } + } + return sum; +} + +#enddecl(IQ1_S) + +#decl(IQ1_M) + +struct iq1_m { + qs: array, + qh: array, + scales: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + + let scale = ((block.scales[0] >> 12) & 0xF) | ((block.scales[0] >> 24) & 0x00F0) | ((block.scales[1] >> 4) & 0x0F00) | ((block.scales[1] >> 16) & 0xF000); + let d = f32(bitcast>(scale).x); + var src1_i = src1_idx_base + offset * 256; + var sum = 0.0; + for (var ib: u32 = 0; ib < 8; ib++) { + let sw = (block.scales[ib / 4] >> (16 * ((ib / 2) % 2))) & 0xFFFF; + let s1 : u32 = (sw >> (6 * (ib % 2))) & 0x7; + let s2 : u32 = (sw >> (6 * (ib % 2) + 3)) & 0x7; + var dl = array( + d * f32(2 * s1 + 1), + d * f32(2 * s2 + 1) + ); + + let qh = block.qh[ib / 2] >> (16 * (ib % 2)); + var idx = array( + get_byte(block.qs[ib], 0) | ((qh << 8) & 0x700), + get_byte(block.qs[ib], 1) | ((qh << 4) & 0x700), + get_byte(block.qs[ib], 2) | ((qh) & 0x700), + get_byte(block.qs[ib], 3) | ((qh >> 4) & 0x700) + ); + var delta = array( + select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x08) != 0), + select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x80) != 0), + select(IQ1_DELTA, -IQ1_DELTA, ((qh >> 8) & 0x08) != 0), + select(IQ1_DELTA, -IQ1_DELTA, ((qh >> 8) & 0x80) != 0) + ); + for (var l: u32 = 0; l < 4; l++) { + let ig = idx[l] * 8; + for (var j: u32 = 0; j < 8; j++) { + let gw = iq1_grid[(ig + j) / 16]; + let g = (gw >> (((ig + j) % 16) * 2)) & 3; + let gs = bitcast(g << 30) >> 30; + sum += dl[l/2] * (f32(gs) + delta[l]) * src1[src1_i]; + src1_i++; + } + } + } + return sum; +} + +#enddecl(IQ1_M) + +#decl(IQ4_TABLE) + +const kvalues_iq4nl = array( + -127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113 +); + +#enddecl(IQ4_TABLE) + +#decl(IQ4_NL) + +struct iq4_nl { + d: f16, + qs: array, +} + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + var src1_i = src1_idx_base + offset * 32; + var sum = 0.0; + var qs: array; + for (var i: u32 = 0; i < 4; i++) { + qs[i] = bitcast(vec2(block.qs[i * 2], block.qs[i * 2 + 1])); + } + for (var j: u32 = 0; j < 16; j++) { + let qsb = get_byte(qs[j / 4], j % 4); + sum += d * f32(kvalues_iq4nl[qsb & 0xF]) * src1[src1_i]; + sum += d * f32(kvalues_iq4nl[qsb >> 4]) * src1[src1_i + 16]; + src1_i++; + } + return sum; +} + +#enddecl(IQ4_NL) + +#decl(IQ4_XS) + +struct iq4_xs { + d: f16, + scales_h: f16, + scales_l: u32, + qs: array +}; + +fn multiply_add(src0_idx_base: u32, src1_idx_base: u32, offset: u32) -> f32 { + let block = src0[src0_idx_base + offset]; + let d = f32(block.d); + let scales_h = bitcast(vec2(block.scales_h, 0.0)); + var src1_i = src1_idx_base + offset * 256; + var sum = 0.0; + for (var ib: u32 = 0; ib < 8; ib++) { + let ls = ((get_byte(block.scales_l, ib / 2) >> (4 * (ib % 2))) & 0xF) | (((scales_h >> (2 * ib)) & 3) << 4); + let dl = d * (f32(ls) - 32.0); + for (var j: u32 = 0; j < 16; j++) { + let iqs = ib * 16 + j; + let qsb = get_byte(block.qs[iqs / 4], iqs % 4); + sum += dl * f32(kvalues_iq4nl[qsb & 0xF]) * src1[src1_i]; + sum += dl * f32(kvalues_iq4nl[qsb >> 4]) * src1[src1_i + 16]; + src1_i++; + } + src1_i += 16; + } + return sum; +} + +#enddecl(IQ4_XS) + +#end(DECLS) + +#define(SHADER) + +enable f16; + +DECLS + +struct MulMatParams { + offset_src0: u32, // in elements/blocks + offset_src1: u32, // in elements/blocks + offset_dst: u32, // in elements/blocks + m: u32, + n: u32, + k: u32, + // all strides are in elements/blocks + stride_01: u32, + stride_11: u32, + stride_02: u32, + stride_12: u32, + stride_03: u32, + stride_13: u32, + + bs02: u32, + bs03: u32, + broadcast2: u32, + broadcast3: u32 +}; + +@group(0) @binding(0) var src0: array<{{SRC0_TYPE}}>; // N rows, K columns +@group(0) @binding(1) var src1: array<{{SRC1_TYPE}}>; // M rows, K columns (transposed) +@group(0) @binding(2) var dst: array; // M rows, N columns + +@group(0) @binding(3) var params: MulMatParams; + +@compute @workgroup_size(64) +fn main(@builtin(global_invocation_id) global_id: vec3) { + let total = params.m * params.n * params.bs02 * params.broadcast2 * params.bs03 * params.broadcast3; + if (global_id.x >= total) { + return; + } + + let dst2_stride = params.m * params.n; + let dst3_stride = dst2_stride * params.bs02 * params.broadcast2; + + let dst3_idx = global_id.x / dst3_stride; + let src03_idx = dst3_idx / params.broadcast3; // src0 may be broadcast along the third dimension + let src13_idx = dst3_idx; // src1 is not broadcast + let dst3_rem = global_id.x % dst3_stride; + + let dst2_idx = dst3_rem / dst2_stride; + let src02_idx = dst2_idx / params.broadcast2; // src0 may also be broadcast along the second dimension + let src12_idx = dst2_idx; // src1 is not broadcast + + let dst2_rem = dst3_rem % dst2_stride; + + let row = dst2_rem / params.n; // output row + let col = dst2_rem % params.n; // output column + + let src0_idx_base = params.offset_src0 + src03_idx * params.stride_03 + src02_idx * params.stride_02 + col * params.stride_01; + let src1_idx_base = params.offset_src1 + src13_idx * params.stride_13 + src12_idx * params.stride_12 + row * params.stride_11; + + var sum = 0.0; + for (var i: u32 = 0u; i < params.k/{{BLOCK_SIZE}}; i = i + 1u) { + sum += multiply_add(src0_idx_base, src1_idx_base, i); + } + dst[params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride + row * params.n + col] = sum; +} + +#end(SHADER) diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl deleted file mode 100644 index 054aab566f..0000000000 --- a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.wgsl +++ /dev/null @@ -1,56 +0,0 @@ -struct MulMatParams { - m: u32, - n: u32, - k: u32, - // all strides are in elements - stride_01: u32, - stride_11: u32, - stride_02: u32, - stride_12: u32, - stride_03: u32, - stride_13: u32, - - bs02: u32, - bs03: u32, - broadcast2: u32, - broadcast3: u32 -}; - -@group(0) @binding(0) var src0: array; // N rows, K columns -@group(0) @binding(1) var src1: array; // M rows, K columns (transposed) -@group(0) @binding(2) var dst: array; // M rows, N columns - -@group(0) @binding(3) var params: MulMatParams; - -@compute @workgroup_size(64) -fn main(@builtin(global_invocation_id) global_id: vec3) { - let total = params.m * params.n * params.bs02 * params.broadcast2 * params.bs03 * params.broadcast3; - if (global_id.x >= total) { - return; - } - - let dst2_stride = params.m * params.n; - let dst3_stride = dst2_stride * params.bs02 * params.broadcast2; - - let dst3_idx = global_id.x / dst3_stride; - let src03_idx = dst3_idx / params.broadcast3; // src0 may be broadcast along the third dimension - let src13_idx = dst3_idx; // src1 is not broadcast - let dst3_rem = global_id.x % dst3_stride; - - let dst2_idx = dst3_rem / dst2_stride; - let src02_idx = dst2_idx / params.broadcast2; // src0 may also be broadcast along the second dimension - let src12_idx = dst2_idx; // src1 is not broadcast - - let dst2_rem = dst3_rem % dst2_stride; - - let row = dst2_rem / params.n; // output row - let col = dst2_rem % params.n; // output column - - var sum = 0.0; - for (var i: u32 = 0u; i < params.k; i = i + 1u) { - let src0_idx = src03_idx * params.stride_03 + src02_idx * params.stride_02 + col * params.stride_01 + i; - let src1_idx = src13_idx * params.stride_13 + src12_idx * params.stride_12 + row * params.stride_11 + i; - sum = sum + src0[src0_idx] * src1[src1_idx]; - } - dst[dst3_idx * dst3_stride + dst2_idx * dst2_stride + row * params.n + col] = sum; -} From e92734d51bcb82cc35f0a6b5a14928f0036b2c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Fri, 22 Aug 2025 23:47:01 +0200 Subject: [PATCH 081/174] test-opt: allow slight inprecision (#15503) --- tests/test-opt.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/tests/test-opt.cpp b/tests/test-opt.cpp index f02b4cad8c..18d3fcf2cb 100644 --- a/tests/test-opt.cpp +++ b/tests/test-opt.cpp @@ -358,7 +358,7 @@ static std::pair test_forward_backward( double accuracy; double accuracy_unc; ggml_opt_result_accuracy(cd.result, &accuracy, &accuracy_unc); - const bool subtest_ok = ndata == 0 && loss == 0.0 && std::isnan(loss_unc) && std::isnan(accuracy) && std::isnan(accuracy_unc); + const bool subtest_ok = ndata == 0 && almost_equal(loss, 0.0, 1e-6) && std::isnan(loss_unc) && std::isnan(accuracy) && std::isnan(accuracy_unc); helper_after_test_forward_backward(optim, __func__, high_level, shuffle, "results_initial", subtest_ok, ntest, npass); } @@ -381,10 +381,12 @@ static std::pair test_forward_backward( { float weights; ggml_backend_tensor_get(cd.weights, &weights, 0, sizeof(float)); - const bool subtest_ok = weights == ndata/2; + const bool subtest_ok = almost_equal(weights, ndata/2, 1e-10); helper_after_test_forward_backward(optim, __func__, high_level, shuffle, "weights_after_forward", subtest_ok, ntest, npass); } { + constexpr double atol = 1e-10; + int64_t ndata; ggml_opt_result_ndata(cd.result, &ndata); bool subtest_ok = ndata == 6; @@ -392,7 +394,7 @@ static std::pair test_forward_backward( double loss; double loss_unc; ggml_opt_result_loss(cd.result, &loss, &loss_unc); - subtest_ok = subtest_ok && loss == 33.0 && almost_equal(loss_unc, sqrt(3.5), 1e-10); + subtest_ok = subtest_ok && almost_equal(loss, 33.0, atol) && almost_equal(loss_unc, sqrt(3.5), atol); double accuracy; double accuracy_unc; @@ -437,7 +439,7 @@ static std::pair test_forward_backward( { float weights; ggml_backend_tensor_get(cd.weights, &weights, 0, sizeof(float)); - const bool subtest_ok = weights == -ndata * .5; + const bool subtest_ok = almost_equal(weights, -ndata * 0.5, 1e-10); helper_after_test_forward_backward(optim, __func__, high_level, shuffle, "weights_after_forward_backward", subtest_ok, ntest, npass); } { @@ -448,7 +450,7 @@ static std::pair test_forward_backward( double loss; double loss_unc; ggml_opt_result_loss(cd.result, &loss, &loss_unc); - subtest_ok = subtest_ok && loss == 18.0 && (shuffle || loss_unc == 0.0); + subtest_ok = subtest_ok && almost_equal(loss, 18.0, 1e-10) && (shuffle || loss_unc == 0.0); double accuracy; double accuracy_unc; @@ -550,10 +552,12 @@ static std::pair test_idata_split( if (adamw) { float weights; ggml_backend_tensor_get(cd.weights, &weights, 0, sizeof(float)); - const bool subtest_ok = weights == ndata/2 - epoch*idata_split; + const bool subtest_ok = almost_equal(weights, ndata/2 - epoch*idata_split, 1e-10); helper_after_test_idata_split(optim, __func__, high_level, epoch, "weights", subtest_ok, ntest, npass); } if (adamw) { + constexpr double atol = 1e-10; + int64_t ndata_result; ggml_opt_result_ndata(cd.result, &ndata_result); bool subtest_ok = ndata_result == idata_split; @@ -561,7 +565,7 @@ static std::pair test_idata_split( double loss; double loss_unc; ggml_opt_result_loss(cd.result, &loss, &loss_unc); - subtest_ok = subtest_ok && loss == 28.0 - epoch*16.0 && loss_unc == 0.0; + subtest_ok = subtest_ok && almost_equal(loss, 28.0 - epoch*16.0, atol) && almost_equal(loss_unc, 0.0, atol); double accuracy; double accuracy_unc; @@ -571,6 +575,8 @@ static std::pair test_idata_split( helper_after_test_idata_split(optim, __func__, high_level, epoch, "results_backward", subtest_ok, ntest, npass); } if (adamw) { + constexpr double atol = 1e-10; + int64_t ndata_result; ggml_opt_result_ndata(cd.result2, &ndata_result); bool subtest_ok = ndata_result == ndata - idata_split; @@ -578,7 +584,7 @@ static std::pair test_idata_split( double loss; double loss_unc; ggml_opt_result_loss(cd.result2, &loss, &loss_unc); - subtest_ok = subtest_ok && loss == 15.0 - epoch*8 && almost_equal(loss_unc, sqrt(0.5), 1e-10); + subtest_ok = subtest_ok && almost_equal(loss, 15.0 - epoch*8, atol) && almost_equal(loss_unc, sqrt(0.5), atol); double accuracy; double accuracy_unc; @@ -687,22 +693,24 @@ static std::pair test_gradient_accumulation( } bool const adamw = optim == GGML_OPT_OPTIMIZER_TYPE_ADAMW; if (adamw) { + constexpr double atol = 1e-6; float weights; ggml_backend_tensor_get(cd.weights, &weights, 0, sizeof(float)); - const bool subtest_ok = weights == (ndata/2) - epoch; + const bool subtest_ok = almost_equal(weights, (ndata/2) - epoch, atol); helper_after_test_gradient_accumulation(optim, __func__, nbatch_physical, loss_type, epoch, "weights", subtest_ok, ntest, npass); } { + constexpr double atol = 1e-6; int64_t ndata_result; ggml_opt_result_ndata(cd.result, &ndata_result); - bool subtest_ok = ndata_result == ndata/nbatch_physical; + bool subtest_ok = almost_equal(ndata_result, ndata/nbatch_physical, atol); double loss; ggml_opt_result_loss(cd.result, &loss, /*loss_unc =*/ nullptr); if (loss_type == GGML_OPT_LOSS_TYPE_SUM) { - subtest_ok = subtest_ok && loss == (39.0 - epoch*6.0); + subtest_ok = subtest_ok && almost_equal(loss, (39.0 - epoch*6.0), atol); } else if (loss_type == GGML_OPT_LOSS_TYPE_MEAN) { - subtest_ok = subtest_ok && almost_equal(loss, (39.0 - epoch*6.0) / ndata, 1e-6); + subtest_ok = subtest_ok && almost_equal(loss, (39.0 - epoch*6.0) / ndata, atol); } else { GGML_ASSERT(false); } From 330c3d2d21b55bca5517db7d2eea2ea8f131df4a Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 23 Aug 2025 01:31:54 -0500 Subject: [PATCH 082/174] vulkan: optimize mul_mat_id loading row ids into shared memory (#15427) - Spread the work across the whole workgroup. Using more threads seems to far outweigh the synchronization overhead. - Specialize the code for when the division is by a power of two. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 6 +- .../ggml-vulkan/vulkan-shaders/mul_mm.comp | 105 +++++++++++------- .../vulkan-shaders/mul_mm_cm2.comp | 103 ++++++++++------- 3 files changed, 133 insertions(+), 81 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index fb18a55cda..2c5678f488 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2168,9 +2168,9 @@ static void ggml_vk_load_shaders(vk_device& device) { s_mmq_wg_denoms_k = { 32, 64, 1 }; // spec constants and tile sizes for quant matmul_id - l_warptile_mmqid = { 256, 128, 128, 16, 0 }; - m_warptile_mmqid = { 256, 128, 64, 16, 0 }; - s_warptile_mmqid = { 256, 128, 64, 16, 0 }; + l_warptile_mmqid = { 256, 128, 128, 16, 0, device->subgroup_size }; + m_warptile_mmqid = { 256, 128, 64, 16, 0, device->subgroup_size }; + s_warptile_mmqid = { 256, 128, 64, 16, 0, device->subgroup_size }; l_mmqid_wg_denoms = { 128, 128, 1 }; m_mmqid_wg_denoms = { 128, 64, 1 }; s_mmqid_wg_denoms = { 128, 64, 1 }; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index a61a464c7b..d57cc6bdec 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -103,16 +103,74 @@ layout (constant_id = 10) const uint WARP = 32; shared FLOAT_TYPE buf_a[BM * SHMEM_STRIDE]; shared FLOAT_TYPE buf_b[BN * SHMEM_STRIDE]; +#define NUM_WARPS (BLOCK_SIZE / WARP) + #ifdef MUL_MAT_ID shared u16vec2 row_ids[4096]; uint _ne1; #ifdef COOPMAT -shared uint _ne1_sh; +shared uvec4 ballots_sh[NUM_WARPS]; +void load_row_ids(uint expert_idx, bool nei0_is_pow2) { + _ne1 = 0; + uint num_elements = p.nei1 * p.nei0; + uint nei0shift = findLSB(p.nei0); + + uint ids[16]; + uint iter = 0; + + for (uint j = 0; j < num_elements; j += BLOCK_SIZE) { + // prefetch up to 16 elements + if (iter == 0) { + [[unroll]] for (uint k = 0; k < 16; ++k) { + uint i = j + gl_LocalInvocationIndex + k*BLOCK_SIZE; + bool in_range = i < num_elements; + uint ii1; + if (nei0_is_pow2) { + ii1 = i >> nei0shift; + } else { + ii1 = i / p.nei0; + } + uint ii0 = i - ii1 * p.nei0; + ids[k] = in_range ? data_ids[ii1*p.nbi1 + ii0] : 0; + } + } + uint i = j + gl_LocalInvocationIndex; + bool in_range = i < num_elements; + uint ii1; + if (nei0_is_pow2) { + ii1 = i >> nei0shift; + } else { + ii1 = i / p.nei0; + } + uint ii0 = i - ii1 * p.nei0; + uint id = ids[iter++]; + uvec4 ballot = subgroupBallot(in_range && id == expert_idx); + + ballots_sh[gl_SubgroupID] = ballot; + barrier(); + + uint subgroup_base = 0; + uint total = 0; + for (uint k = 0; k < gl_NumSubgroups; ++k) { + if (k == gl_SubgroupID) { + subgroup_base = total; + } + total += subgroupBallotBitCount(ballots_sh[k]); + } + barrier(); + + uint idx = subgroup_base + subgroupBallotExclusiveBitCount(ballot); + if (in_range && id == expert_idx) { + row_ids[_ne1 + idx] = u16vec2(ii0, ii1); + } + _ne1 += total; + iter &= 15; + } + barrier(); +} #endif #endif // MUL_MAT_ID -#define NUM_WARPS (BLOCK_SIZE / WARP) - #ifdef COOPMAT shared ACC_TYPE coopmat_stage[TM * TN * NUM_WARPS]; #endif @@ -178,44 +236,11 @@ void main() { #ifdef MUL_MAT_ID #ifdef COOPMAT - // Spread the search across all elements in the first subgroup - if (gl_SubgroupID == 0) { - _ne1 = 0; - uint num_elements = p.nei1 * p.nei0; - - uint ids[16]; - uint iter = 0; - - for (uint j = 0; j < num_elements; j += gl_SubgroupSize) { - // prefetch up to 16 elements - if (iter == 0) { - [[unroll]] for (uint k = 0; k < 16; ++k) { - uint i = j + gl_SubgroupInvocationID + k*gl_SubgroupSize; - bool in_range = i < num_elements; - uint ii1 = i / p.nei0; - uint ii0 = i % p.nei0; - ids[k] = in_range ? data_ids[ii1*p.nbi1 + ii0] : 0; - } - } - uint i = j + gl_SubgroupInvocationID; - bool in_range = i < num_elements; - uint ii1 = i / p.nei0; - uint ii0 = i % p.nei0; - uint id = ids[iter++]; - uvec4 ballot = subgroupBallot(in_range && id == expert_idx); - uint idx = subgroupBallotExclusiveBitCount(ballot); - if (in_range && id == expert_idx) { - row_ids[_ne1 + idx] = u16vec2(ii0, ii1); - } - _ne1 += subgroupBallotBitCount(ballot); - iter &= 15; - } - _ne1_sh = _ne1; + if (bitCount(p.nei0) == 1) { + load_row_ids(expert_idx, true); + } else { + load_row_ids(expert_idx, false); } - - barrier(); - - _ne1 = _ne1_sh; #else _ne1 = 0; for (uint ii1 = 0; ii1 < p.nei1; ii1++) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp index 29e4b5c9ce..4d16eb0791 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp @@ -19,6 +19,7 @@ #endif #include "types.comp" +#include "utils.comp" layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; @@ -99,7 +100,8 @@ layout(buffer_reference, std430, buffer_reference_align = 2) buffer decodeBufB { }; uint _ne1; -shared uint _ne1_sh; +layout (constant_id = 5) const uint subgroup_size = 32; +shared uvec4 ballots_sh[BLOCK_SIZE / subgroup_size]; B_TYPE decodeFuncB(const in decodeBufB bl, const in uint blockCoords[2], const in uint coordInBlock[2]) { @@ -128,6 +130,64 @@ D_TYPE perElemOpD(const in uint32_t r, const in uint32_t c, const in D_TYPE elem return elem; } +void load_row_ids(uint expert_idx, bool nei0_is_pow2) { + _ne1 = 0; + uint num_elements = p.nei1 * p.nei0; + uint nei0shift = findLSB(p.nei0); + + uint ids[16]; + uint iter = 0; + + for (uint j = 0; j < num_elements; j += BLOCK_SIZE) { + // prefetch up to 16 elements + if (iter == 0) { + [[unroll]] for (uint k = 0; k < 16; ++k) { + uint i = j + gl_LocalInvocationIndex + k*BLOCK_SIZE; + bool in_range = i < num_elements; + uint ii1; + if (nei0_is_pow2) { + ii1 = i >> nei0shift; + } else { + ii1 = i / p.nei0; + } + uint ii0 = i - ii1 * p.nei0; + ids[k] = in_range ? data_ids[ii1*p.nbi1 + ii0] : 0; + } + } + uint i = j + gl_LocalInvocationIndex; + bool in_range = i < num_elements; + uint ii1; + if (nei0_is_pow2) { + ii1 = i >> nei0shift; + } else { + ii1 = i / p.nei0; + } + uint ii0 = i - ii1 * p.nei0; + uint id = ids[iter++]; + uvec4 ballot = subgroupBallot(in_range && id == expert_idx); + + ballots_sh[gl_SubgroupID] = ballot; + barrier(); + + uint subgroup_base = 0; + uint total = 0; + for (uint k = 0; k < gl_NumSubgroups; ++k) { + if (k == gl_SubgroupID) { + subgroup_base = total; + } + total += subgroupBallotBitCount(ballots_sh[k]); + } + barrier(); + + uint idx = subgroup_base + subgroupBallotExclusiveBitCount(ballot); + if (in_range && id == expert_idx) { + row_ids[_ne1 + idx] = u16vec4(fastmod(ii0, p.ne11), ii1, ii0, 0); + } + _ne1 += total; + iter &= 15; + } + barrier(); +} #endif void main() { @@ -157,45 +217,12 @@ void main() { const uint ic = gl_WorkGroupID.y; #ifdef MUL_MAT_ID - // Spread the search across all elements in the first subgroup - if (gl_SubgroupID == 0) { - _ne1 = 0; - uint num_elements = p.nei1 * p.nei0; - - uint ids[16]; - uint iter = 0; - - for (uint j = 0; j < num_elements; j += gl_SubgroupSize) { - // prefetch up to 16 elements - if (iter == 0) { - [[unroll]] for (uint k = 0; k < 16; ++k) { - uint i = j + gl_SubgroupInvocationID + k*gl_SubgroupSize; - bool in_range = i < num_elements; - uint ii1 = i / p.nei0; - uint ii0 = i % p.nei0; - ids[k] = in_range ? data_ids[ii1*p.nbi1 + ii0] : 0; - } - } - uint i = j + gl_SubgroupInvocationID; - bool in_range = i < num_elements; - uint ii1 = i / p.nei0; - uint ii0 = i % p.nei0; - uint id = ids[iter++]; - uvec4 ballot = subgroupBallot(in_range && id == expert_idx); - uint idx = subgroupBallotExclusiveBitCount(ballot); - if (in_range && id == expert_idx) { - row_ids[_ne1 + idx] = u16vec4(ii0 % p.ne11, ii1, ii0, 0); - } - _ne1 += subgroupBallotBitCount(ballot); - iter &= 15; - } - _ne1_sh = _ne1; + if (bitCount(p.nei0) == 1) { + load_row_ids(expert_idx, true); + } else { + load_row_ids(expert_idx, false); } - barrier(); - - _ne1 = _ne1_sh; - // Workgroup has no work if (ic * BN >= _ne1) return; #endif From 0a9b43e507a359ca392c037cf341f55137ad0b69 Mon Sep 17 00:00:00 2001 From: Acly Date: Sat, 23 Aug 2025 08:35:21 +0200 Subject: [PATCH 083/174] vulkan : support ggml_mean (#15393) * vulkan : support ggml_mean * vulkan : support sum, sum_rows and mean with non-contiguous tensors * vulkan : fix subbuffer size not accounting for misalign offset * tests : add backend-op tests for non-contiguous sum_rows * cuda : require contiguous src for SUM_ROWS, MEAN support * sycl : require contiguous src for SUM, SUM_ROWS, ARGSORT support * require ggml_contiguous_rows in supports_op and expect nb00=1 in the shader --- ggml/src/ggml-cuda/ggml-cuda.cu | 4 +- ggml/src/ggml-sycl/ggml-sycl.cpp | 3 +- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 82 +++++++++++++++++-- .../ggml-vulkan/vulkan-shaders/sum_rows.comp | 43 ++++++++-- tests/test-backend-ops.cpp | 21 ++++- 5 files changed, 135 insertions(+), 18 deletions(-) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index d29a0b573f..aa45ab39ed 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -3485,11 +3485,11 @@ static bool ggml_backend_cuda_device_supports_op(ggml_backend_dev_t dev, const g case GGML_OP_CONV_TRANSPOSE_2D: case GGML_OP_POOL_2D: case GGML_OP_SUM: - case GGML_OP_SUM_ROWS: - case GGML_OP_MEAN: case GGML_OP_ARGSORT: case GGML_OP_ACC: return true; + case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: case GGML_OP_GROUP_NORM: return ggml_is_contiguous(op->src[0]); case GGML_OP_UPSCALE: diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index a0a650e92e..12dd5dd2e6 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -4391,10 +4391,11 @@ static bool ggml_backend_sycl_device_supports_op(ggml_backend_dev_t dev, const g return true; case GGML_OP_UPSCALE: return op->src[0]->type == GGML_TYPE_F32 && op->op_params[0] == GGML_SCALE_MODE_NEAREST; - case GGML_OP_POOL_2D: case GGML_OP_SUM: case GGML_OP_SUM_ROWS: case GGML_OP_ARGSORT: + return ggml_is_contiguous(op->src[0]); + case GGML_OP_POOL_2D: case GGML_OP_ACC: case GGML_OP_PAD: case GGML_OP_LEAKY_RELU: diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 2c5678f488..007556cf4f 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -1015,6 +1015,39 @@ struct vk_op_upscale_push_constants { float sf0; float sf1; float sf2; float sf3; }; +struct vk_op_sum_rows_push_constants +{ + uint32_t n_cols; + uint32_t ne01, ne02; + uint32_t nb01, nb02, nb03; + uint32_t nb11, nb12, nb13; + float weight; + uint32_t misalign_offsets; + uint32_t ne0_12mp, ne0_12L; + uint32_t ne0_1mp, ne0_1L; +}; + +vk_op_sum_rows_push_constants vk_op_sum_rows_push_constants_init(const ggml_tensor * src, const ggml_tensor * dst, int64_t n_cols) { + uint32_t type_size = (uint32_t)ggml_type_size(src->type); + vk_op_sum_rows_push_constants p = {}; + p.n_cols = (uint32_t)n_cols; + p.ne01 = (uint32_t)src->ne[1]; + p.ne02 = (uint32_t)src->ne[2]; + p.nb01 = (uint32_t)src->nb[1] / type_size; + p.nb02 = (uint32_t)src->nb[2] / type_size; + p.nb03 = (uint32_t)src->nb[3] / type_size; + p.nb11 = (uint32_t)dst->nb[1] / type_size; + p.nb12 = (uint32_t)dst->nb[2] / type_size; + p.nb13 = (uint32_t)dst->nb[3] / type_size; + p.weight = 1.0f; + return p; +} + +template <> void init_pushconst_fastdiv(vk_op_sum_rows_push_constants &p) { + init_fastdiv_values(p.ne01*p.ne02, p.ne0_12mp, p.ne0_12L); + init_fastdiv_values(p.ne01, p.ne0_1mp, p.ne0_1L); +} + // Allow pre-recording command buffers struct vk_staging_memcpy { vk_staging_memcpy(void * _dst, const void * _src, size_t _n) : dst(_dst), src(_src), n(_n) {} @@ -3128,7 +3161,7 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_argmax_f32, "argmax_f32", argmax_f32_len, argmax_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(device, device->pipeline_sum_rows_f32, "sum_rows_f32", sum_rows_f32_len, sum_rows_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, { device->subgroup_size }, 1); + ggml_vk_create_pipeline(device, device->pipeline_sum_rows_f32, "sum_rows_f32", sum_rows_f32_len, sum_rows_f32_data, "main", 2, sizeof(vk_op_sum_rows_push_constants), {1, 1, 1}, { device->subgroup_size }, 1); ggml_vk_create_pipeline(device, device->pipeline_count_equal_i32, "count_equal_i32", count_equal_i32_len, count_equal_i32_data, "main", 3, sizeof(vk_op_push_constants), {512, 1, 1}, { device->subgroup_size }, 1); @@ -7249,6 +7282,7 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const return nullptr; case GGML_OP_SUM: case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { return ctx->device->pipeline_sum_rows_f32; } @@ -7387,6 +7421,9 @@ static bool ggml_vk_op_supports_incontiguous(ggml_op op) { case GGML_OP_CONV_2D_DW: case GGML_OP_IM2COL: case GGML_OP_SET_ROWS: + case GGML_OP_SUM: + case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: return true; default: return false; @@ -7421,6 +7458,16 @@ template <> void init_pushconst_tensor_offsets(ggml_backend_vk_context * ctx, vk GGML_UNUSED(src2); } +template <> void init_pushconst_tensor_offsets(ggml_backend_vk_context * ctx, vk_op_sum_rows_push_constants &p, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) { + const uint32_t a_offset = get_misalign_bytes(ctx, src0) / ggml_type_size(src0->type); + const uint32_t d_offset = get_misalign_bytes(ctx, dst) / ggml_type_size(dst->type); + + p.misalign_offsets = (a_offset << 16) | d_offset; + + GGML_UNUSED(src1); + GGML_UNUSED(src2); +} + template <> void init_pushconst_tensor_offsets(ggml_backend_vk_context * ctx, vk_op_binary_push_constants &p, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) { const uint32_t a_offset = get_misalign_bytes(ctx, src0) / ggml_type_size(src0->type); const uint32_t b_offset = get_misalign_bytes(ctx, src1) / ggml_type_size(src1->type); @@ -7571,10 +7618,10 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co d_buf_offset &= ~(ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); if (op_supports_incontiguous) { - x_sz = ggml_nbytes(src0); - y_sz = use_src1 ? ggml_nbytes(src1) : 0; - z_sz = use_src2 ? ggml_nbytes(src2) : 0; - d_sz = ggml_nbytes(dst); + x_sz = ggml_nbytes(src0) + get_misalign_bytes(ctx, src0); + y_sz = use_src1 ? ggml_nbytes(src1) + get_misalign_bytes(ctx, src1) : 0; + z_sz = use_src2 ? ggml_nbytes(src2) + get_misalign_bytes(ctx, src2) : 0; + d_sz = ggml_nbytes(dst) + get_misalign_bytes(ctx, dst); if (x_buf_offset + x_sz >= d_X->size) { x_sz = VK_WHOLE_SIZE; @@ -7602,6 +7649,7 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co case GGML_OP_SOFT_MAX: case GGML_OP_SOFT_MAX_BACK: case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: case GGML_OP_ARGMAX: { const uint32_t nr = ggml_nrows(src0); @@ -8588,11 +8636,19 @@ static void ggml_vk_argsort(ggml_backend_vk_context * ctx, vk_context& subctx, c } static void ggml_vk_sum(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SUM, { (uint32_t)ggml_nelements(src0), 0, 0.0f, 0.0f }, dryrun); + vk_op_sum_rows_push_constants p = vk_op_sum_rows_push_constants_init(src0, dst, ggml_nelements(src0)); + ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SUM, p, dryrun); } static void ggml_vk_sum_rows(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SUM_ROWS, { (uint32_t)src0->ne[0], 0, 0.0f, 0.0f }, dryrun); + vk_op_sum_rows_push_constants p = vk_op_sum_rows_push_constants_init(src0, dst, src0->ne[0]); + ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SUM_ROWS, p, dryrun); +} + +static void ggml_vk_mean(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { + vk_op_sum_rows_push_constants p = vk_op_sum_rows_push_constants_init(src0, dst, src0->ne[0]); + p.weight = 1.0f / (float)src0->ne[0]; + ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_MEAN, p, dryrun); } static void ggml_vk_argmax(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst, bool dryrun = false) { @@ -9815,6 +9871,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr case GGML_OP_ARGSORT: case GGML_OP_SUM: case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: case GGML_OP_ARGMAX: case GGML_OP_COUNT_EQUAL: case GGML_OP_IM2COL: @@ -9884,6 +9941,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr case GGML_OP_ARGSORT: case GGML_OP_SUM: case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: case GGML_OP_ARGMAX: case GGML_OP_COUNT_EQUAL: case GGML_OP_IM2COL: @@ -10087,6 +10145,10 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr case GGML_OP_SUM_ROWS: ggml_vk_sum_rows(ctx, compute_ctx, src0, node, dryrun); + break; + case GGML_OP_MEAN: + ggml_vk_mean(ctx, compute_ctx, src0, node, dryrun); + break; case GGML_OP_ARGMAX: ggml_vk_argmax(ctx, compute_ctx, src0, node, dryrun); @@ -10246,6 +10308,7 @@ static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_cgraph * case GGML_OP_ARGSORT: case GGML_OP_SUM: case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: case GGML_OP_ARGMAX: case GGML_OP_COUNT_EQUAL: case GGML_OP_IM2COL: @@ -11483,8 +11546,11 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm case GGML_OP_DIAG_MASK_INF: case GGML_OP_SOFT_MAX: case GGML_OP_SOFT_MAX_BACK: + return true; case GGML_OP_SUM: case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: + return op->src[0]->type == GGML_TYPE_F32 && ggml_is_contiguous_rows(op->src[0]); case GGML_OP_ARGMAX: case GGML_OP_COUNT_EQUAL: case GGML_OP_IM2COL: @@ -12043,6 +12109,8 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * tensor_clone = ggml_sum(ggml_ctx, src_clone[0]); } else if (tensor->op == GGML_OP_SUM_ROWS) { tensor_clone = ggml_sum_rows(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_MEAN) { + tensor_clone = ggml_mean(ggml_ctx, src_clone[0]); } else if (tensor->op == GGML_OP_ARGMAX) { tensor_clone = ggml_argmax(ggml_ctx, src_clone[0]); } else if (tensor->op == GGML_OP_COUNT_EQUAL) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.comp b/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.comp index 961e5ffa1f..759204afaf 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/sum_rows.comp @@ -1,9 +1,9 @@ #version 450 -#include "generic_head.comp" #include "types.comp" #extension GL_EXT_control_flow_attributes : enable + layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; @@ -11,16 +11,49 @@ layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; layout (constant_id = 0) const uint BLOCK_SIZE = 32; +layout (push_constant) uniform parameter +{ + uint n_cols; + uint ne01, ne02; + uint nb01, nb02, nb03; + uint nb11, nb12, nb13; + float weight; + uint misalign_offsets; + uint ne0_12mp, ne0_12L; + uint ne0_1mp, ne0_1L; +} p; + +uint get_aoffset() { return p.misalign_offsets >> 16; } +uint get_doffset() { return p.misalign_offsets & 0xFFFF; } + +// see init_fastdiv_values in ggml-vulkan.cpp +uint fastdiv(uint n, uint mp, uint L) { + uint msbs, lsbs; + // msbs = mulhi(n, mp) + umulExtended(n, mp, msbs, lsbs); + return (msbs + n) >> L; +} + + shared FLOAT_TYPE tmp[BLOCK_SIZE]; void main() { const uint row = gl_WorkGroupID.z * 262144 + gl_WorkGroupID.y * 512 + gl_WorkGroupID.x; const uint col = gl_LocalInvocationID.x; + const float weight = p.weight; - tmp[col] = FLOAT_TYPE(0.0f); + const uint i03 = fastdiv(row, p.ne0_12mp, p.ne0_12L); + const uint i03_offset = i03 * p.ne01*p.ne02; + const uint i02 = fastdiv(row - i03_offset, p.ne0_1mp, p.ne0_1L); + const uint i01 = row - i03_offset - i02*p.ne01; - for (uint i = col; i < p.KX; i += BLOCK_SIZE) { - tmp[col] += FLOAT_TYPE(data_a[row*p.KX + i]); + const uint src_idx = get_aoffset() + i01 * p.nb01 + i02 * p.nb02 + i03 * p.nb03; + const uint dst_idx = get_doffset() + i01 * p.nb11 + i02 * p.nb12 + i03 * p.nb13; + + tmp[col] = FLOAT_TYPE(0.0); + + for (uint i = col; i < p.n_cols; i += BLOCK_SIZE) { + tmp[col] += FLOAT_TYPE(data_a[src_idx + i]); } barrier(); @@ -32,6 +65,6 @@ void main() { } if (col == 0) { - data_d[row] = D_TYPE(tmp[0]); + data_d[dst_idx] = D_TYPE(tmp[0] * weight); } } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index a51527ca55..2e53f8e21a 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -4300,20 +4300,32 @@ struct test_sum : public test_case { struct test_sum_rows : public test_case { const ggml_type type; const std::array ne; + const bool permute; + const bool slice; std::string vars() override { - return VARS_TO_STR2(type, ne); + return VARS_TO_STR4(type, ne, permute, slice); } test_sum_rows(ggml_type type = GGML_TYPE_F32, - std::array ne = {10, 5, 4, 3}) - : type(type), ne(ne) {} + std::array ne = {10, 5, 4, 3}, + bool permute = false, bool slice = false) + : type(type), ne(ne), permute(permute), slice(slice) {} ggml_tensor * build_graph(ggml_context * ctx) override { ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data()); ggml_set_param(a); ggml_set_name(a, "a"); + if (slice) { + a = ggml_view_4d(ctx, a, + ne[0], ne[1], ne[2] / 2, ne[3] - 1, + a->nb[1], a->nb[2] * 2, a->nb[3], /*offset=*/a->nb[3]); + } + if (permute) { + a = ggml_permute(ctx, a, 0, 2, 3, 1); + } + ggml_tensor * out = ggml_sum_rows(ctx, a); ggml_set_name(out, "out"); @@ -6195,6 +6207,9 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_sum()); test_cases.emplace_back(new test_sum_rows()); + test_cases.emplace_back(new test_sum_rows(GGML_TYPE_F32, { 11, 5, 6, 3 }, true, false)); + test_cases.emplace_back(new test_sum_rows(GGML_TYPE_F32, { 11, 5, 6, 3 }, false, true)); + test_cases.emplace_back(new test_sum_rows(GGML_TYPE_F32, { 11, 5, 6, 3 }, true, true)); test_cases.emplace_back(new test_mean()); test_cases.emplace_back(new test_sum(GGML_TYPE_F32, { 33, 1, 1, 1 })); test_cases.emplace_back(new test_sum_rows(GGML_TYPE_F32, { 33, 1, 1, 1 })); From b55f06e1aa67fb10e89f53e31bbccf37eb2678ea Mon Sep 17 00:00:00 2001 From: R0CKSTAR Date: Sat, 23 Aug 2025 14:58:57 +0800 Subject: [PATCH 084/174] vulkan.Dockerfile: install vulkan SDK using tarball (#15282) Signed-off-by: Xiaodong Ye --- .devops/vulkan.Dockerfile | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/.devops/vulkan.Dockerfile b/.devops/vulkan.Dockerfile index fcd81ffa1e..6cf87c67e8 100644 --- a/.devops/vulkan.Dockerfile +++ b/.devops/vulkan.Dockerfile @@ -2,14 +2,30 @@ ARG UBUNTU_VERSION=24.04 FROM ubuntu:$UBUNTU_VERSION AS build -# Install build tools -RUN apt update && apt install -y git build-essential cmake wget +# Ref: https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html -# Install Vulkan SDK and cURL -RUN wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | apt-key add - && \ - wget -qO /etc/apt/sources.list.d/lunarg-vulkan-noble.list https://packages.lunarg.com/vulkan/lunarg-vulkan-noble.list && \ - apt update -y && \ - apt-get install -y vulkan-sdk libcurl4-openssl-dev curl +# Install build tools +RUN apt update && apt install -y git build-essential cmake wget xz-utils + +# Install Vulkan SDK +ARG VULKAN_VERSION=1.4.321.1 +RUN ARCH=$(uname -m) && \ + wget -qO /tmp/vulkan-sdk.tar.xz https://sdk.lunarg.com/sdk/download/${VULKAN_VERSION}/linux/vulkan-sdk-linux-${ARCH}-${VULKAN_VERSION}.tar.xz && \ + mkdir -p /opt/vulkan && \ + tar -xf /tmp/vulkan-sdk.tar.xz -C /tmp --strip-components=1 && \ + mv /tmp/${ARCH}/* /opt/vulkan/ && \ + rm -rf /tmp/* + +# Install cURL and Vulkan SDK dependencies +RUN apt install -y libcurl4-openssl-dev curl \ + libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev + +# Set environment variables +ENV VULKAN_SDK=/opt/vulkan +ENV PATH=$VULKAN_SDK/bin:$PATH +ENV LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH +ENV CMAKE_PREFIX_PATH=$VULKAN_SDK:$CMAKE_PREFIX_PATH +ENV PKG_CONFIG_PATH=$VULKAN_SDK/lib/pkgconfig:$PKG_CONFIG_PATH # Build it WORKDIR /app From 289bf4113ef5c02d8f5eb0cf2d86683d8b8bc4d9 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 23 Aug 2025 02:33:36 -0500 Subject: [PATCH 085/174] vulkan: Rewrite synchronization to allow some overlap between nodes (#15489) Track a list of nodes that need synchronization, and only sync if the new node depends on them (or overwrites them). This allows some overlap which can improve performance, and centralizes a big chunk of the synchronization logic. The remaining synchronization logic involves writes to memory other than the nodes, e.g. for dequantization or split_k. Each of these allocations has a bool indicating whether they were in use and need to be synced. This should be checked before they are written to, and set to true after they are done being consumed. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 233 ++++++++++++++++++++++----- 1 file changed, 193 insertions(+), 40 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 007556cf4f..c7cfb6473e 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -1231,6 +1231,14 @@ struct ggml_backend_vk_context { vk_pipeline_struct * prealloc_y_last_pipeline_used {}; const ggml_tensor * prealloc_y_last_tensor_used {}; + // Track which nodes have been used since the last sync, and whether they were written to + std::vector unsynced_nodes_written; + std::vector unsynced_nodes_read; + // Track which prealloc buffers have pending reads that need to be synchronized. + // These are checked before writing to the buffer (and call ggml_vk_sync_buffers if set), + // and set to true after the buffer contents are consumed. + bool prealloc_x_need_sync, prealloc_y_need_sync, prealloc_split_k_need_sync; + vk_buffer buffer_pool[MAX_VK_BUFFERS]; vk_context_ref compute_ctx; @@ -1906,14 +1914,18 @@ static vk_subbuffer ggml_vk_subbuffer(vk_buffer& buf) { return { buf, 0, VK_WHOLE_SIZE }; } -static void ggml_vk_sync_buffers(vk_context& ctx) { +static void ggml_vk_sync_buffers(ggml_backend_vk_context* ctx, vk_context& subctx) { VK_LOG_DEBUG("ggml_vk_sync_buffers()"); - const bool transfer_queue = ctx->p->q->transfer_only; + const bool transfer_queue = subctx->p->q->transfer_only; - ctx->s->buffer.pipelineBarrier( - ctx->p->q->stage_flags, - ctx->p->q->stage_flags, + if (ctx) { + ctx->prealloc_x_need_sync = ctx->prealloc_y_need_sync = ctx->prealloc_split_k_need_sync = false; + } + + subctx->s->buffer.pipelineBarrier( + subctx->p->q->stage_flags, + subctx->p->q->stage_flags, {}, { { { !transfer_queue ? (vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eShaderWrite | vk::AccessFlagBits::eTransferRead | vk::AccessFlagBits::eTransferWrite) : (vk::AccessFlagBits::eTransferRead | vk::AccessFlagBits::eTransferWrite) }, @@ -4898,7 +4910,7 @@ static void ggml_vk_buffer_write_nc_async(ggml_backend_vk_context * ctx, vk_cont } } - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(ctx, subctx); subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices); return; } @@ -4913,7 +4925,7 @@ static void ggml_vk_buffer_write_nc_async(ggml_backend_vk_context * ctx, vk_cont ggml_vk_ensure_sync_staging_buffer(ctx->device, copy_size); VkBufferCopy buf_copy{ 0, offset, copy_size }; - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(ctx, subctx); vkCmdCopyBuffer(subctx->s->buffer, (VkBuffer)staging->buffer, (VkBuffer)dst->buffer, 1, &buf_copy); for (uint64_t i3 = 0; i3 < ne3; i3++) { @@ -4967,7 +4979,7 @@ static void ggml_vk_buffer_write_2d_async(vk_context subctx, vk_buffer& dst, siz } } - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(nullptr, subctx); subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices); return; } @@ -4988,7 +5000,7 @@ static void ggml_vk_buffer_write_2d_async(vk_context subctx, vk_buffer& dst, siz offset, copy_size}; - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(nullptr, subctx); vkCmdCopyBuffer(subctx->s->buffer, (VkBuffer)staging_buffer->buffer, (VkBuffer)dst->buffer, 1, &buf_copy); if (width == spitch) { @@ -5068,7 +5080,7 @@ static void ggml_vk_buffer_read_2d_async(vk_context subctx, vk_buffer& src, size if (buf != nullptr) { // Memory is pinned, use as staging buffer - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(nullptr, subctx); subctx->s->buffer.copyBuffer(src->buffer, buf->buffer, slices); return; @@ -5085,7 +5097,7 @@ static void ggml_vk_buffer_read_2d_async(vk_context subctx, vk_buffer& src, size vk_buffer& staging_buffer = src->device->sync_staging; - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(nullptr, subctx); subctx->s->buffer.copyBuffer(src->buffer, staging_buffer->buffer, slices); deferred_memcpy(dst, staging_buffer->ptr, copy_size, &subctx->out_memcpys); @@ -5275,13 +5287,16 @@ static void ggml_vk_matmul( uint32_t split_k, uint32_t batch, uint32_t ne02, uint32_t ne12, uint32_t broadcast2, uint32_t broadcast3, uint32_t padded_n) { VK_LOG_DEBUG("ggml_vk_matmul(a: (" << a.buffer->buffer << ", " << a.offset << ", " << a.size << "), b: (" << b.buffer->buffer << ", " << b.offset << ", " << b.size << "), d: (" << d.buffer->buffer << ", " << d.offset << ", " << d.size << "), split_k: (" << (split_k_buffer.buffer != nullptr ? split_k_buffer.buffer->buffer : VK_NULL_HANDLE) << ", " << split_k_buffer.offset << ", " << split_k_buffer.size << "), m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ", split_k: " << split_k << ", batch: " << batch << ", ne02: " << ne02 << ", ne12: " << ne12 << ", broadcast2: " << broadcast2 << ", broadcast3: " << broadcast3 << ", padded_n: " << padded_n << ")"); - ggml_vk_sync_buffers(subctx); if (split_k == 1) { const vk_mat_mat_push_constants pc = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, k, ne02, ne12, broadcast2, broadcast3, padded_n }; ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d }, pc, { m, n, batch }); return; } + if (ctx->prealloc_split_k_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + GGML_ASSERT(batch_stride_d == m * n); // Round the split size up to a multiple of 256 (k-quant alignment) @@ -5291,9 +5306,10 @@ static void ggml_vk_matmul( const vk_mat_mat_push_constants pc1 = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, k_split, ne02, ne12, broadcast2, broadcast3, padded_n }; // Make sure enough workgroups get assigned for split k to work ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, split_k_buffer }, pc1, { (CEIL_DIV(m, pipeline->wg_denoms[0]) * pipeline->wg_denoms[0]) * split_k, n, batch }); - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(ctx, subctx); const std::array pc2 = { (uint32_t)(m * n * batch), split_k }; ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_matmul_split_k_reduce, { split_k_buffer, d }, pc2, { m * n * batch, 1, 1 }); + ctx->prealloc_split_k_need_sync = true; } static vk_pipeline ggml_vk_guess_matmul_id_pipeline(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, uint32_t m, uint32_t n, bool aligned, ggml_type src0_type) { @@ -5338,7 +5354,6 @@ static void ggml_vk_matmul_id( "m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", " << "batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ", " << "n_as: " << n_as << ", nei0: " << nei0 << ", nei1: " << nei1 << ", nbi1: " << nbi1 << ", ne11: " << ne11 << ")"); - ggml_vk_sync_buffers(subctx); const vk_mat_mat_id_push_constants pc = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, nei0, nei1, nbi1, ne11, padded_n }; ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d, ids }, pc, { m, nei1, n_as }); @@ -5469,8 +5484,8 @@ static void ggml_vk_cpy_to_contiguous(ggml_backend_vk_context * ctx, vk_context& 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; init_pushconst_fastdiv(pc); - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { in, out }, pc, elements); + ggml_vk_sync_buffers(ctx, subctx); } static vk_pipeline ggml_vk_get_quantize_pipeline(ggml_backend_vk_context * ctx, ggml_type type) { @@ -5488,8 +5503,8 @@ static void ggml_vk_quantize_q8_1(ggml_backend_vk_context * ctx, vk_context& sub vk_pipeline pipeline = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1); - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { in, out }, std::array{ne}, { ne, 1, 1 }); + ggml_vk_sync_buffers(ctx, subctx); } static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, bool dryrun = false) { @@ -5684,12 +5699,23 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub GGML_ASSERT(qy_sz == y_sz); } + if (x_non_contig || qx_needs_dequant) { + if (ctx->prealloc_x_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (y_non_contig || quantize_y) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (x_non_contig) { ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); } else if (qx_needs_dequant) { const std::vector pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) }; - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, vk_subbuffer{ d_X, 0, x_sz * ne02 * ne03 } }, pc, { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); + ggml_vk_sync_buffers(ctx, subctx); } if (y_non_contig) { if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || @@ -5728,6 +5754,13 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub ne10, ne10, ne01, stride_batch_x, stride_batch_y, ne20*ne21, split_k, ne12*ne13, ne02, ne12, r2, r3, padded_n ); // NOLINT + + if (x_non_contig || qx_needs_dequant) { + ctx->prealloc_x_need_sync = true; + } + if (y_non_contig || quantize_y) { + ctx->prealloc_y_need_sync = true; + } } static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, bool dryrun = false) { @@ -5874,6 +5907,17 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& GGML_ASSERT(qy_sz == y_sz); } + if (x_non_contig) { + if (ctx->prealloc_x_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (y_non_contig) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (x_non_contig) { GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment)); ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); @@ -5917,10 +5961,16 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& stride_batch_x, stride_batch_y, stride_batch_d, (uint32_t)ne02, (uint32_t)ne12, (uint32_t)r2, (uint32_t)r3, }; - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, { vk_subbuffer{ d_X, x_buf_offset, x_sz * ne02 * ne03 }, vk_subbuffer{ d_Y, y_buf_offset, y_sz * ne12 * ne13 }, vk_subbuffer{ d_D, d_buf_offset, d_sz * ne22 * ne23} }, pc, { groups_x, (uint32_t)(ne12 * ne13), groups_z }); + + if (x_non_contig) { + ctx->prealloc_x_need_sync = true; + } + if (y_non_contig) { + ctx->prealloc_y_need_sync = true; + } } static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, bool dryrun = false) { @@ -6007,7 +6057,6 @@ static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_c workgroups_z /= gqa_ratio; } - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32[gqa_ratio - 1], { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz }, vk_subbuffer{ d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, vk_subbuffer{ d_D, d_buffer_offset, d_sz + d_shader_offset } }, pc, { 1, (uint32_t)ne01, workgroups_z }); } @@ -6094,7 +6143,6 @@ static void ggml_vk_mul_mat_vec_nc_f16_f32(ggml_backend_vk_context * ctx, vk_con // compute const std::array pc = { (uint32_t)ne00, (uint32_t)ne01, row_stride_x, channel_stride_x, channel_stride_y, (uint32_t)(ne12 / ne02), (uint32_t)ne12, (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)), nb03, nb13, nb23 }; - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz }, vk_subbuffer{ d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, vk_subbuffer{ d_D, d_buffer_offset, d_sz + d_shader_offset } }, pc, { (uint32_t)ne03, (uint32_t)ne01, (uint32_t)ne12 }); } @@ -6306,13 +6354,24 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& GGML_ASSERT(qy_sz == y_sz); } + if (x_non_contig || qx_needs_dequant) { + if (ctx->prealloc_x_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (y_non_contig) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (x_non_contig) { ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); } else if (qx_needs_dequant) { const std::vector pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) }; - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, vk_subbuffer{ d_X, 0, x_sz * ne02 * ne03 } }, pc, { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); + ggml_vk_sync_buffers(ctx, subctx); } if (y_non_contig) { if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || @@ -6343,6 +6402,13 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& stride_batch_x, stride_batch_y, ne20*ne21, n_as, nei0, nei1, nbi1 / ggml_type_size(ids->type), ne11, padded_n ); // NOLINT + + if (x_non_contig || qx_needs_dequant) { + ctx->prealloc_x_need_sync = true; + } + if (y_non_contig) { + ctx->prealloc_y_need_sync = true; + } } static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * ids, ggml_tensor * dst, bool dryrun = false) { @@ -6502,6 +6568,17 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte GGML_ASSERT(qy_sz == y_sz); } + if (x_non_contig) { + if (ctx->prealloc_x_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (y_non_contig) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + } + if (x_non_contig) { GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment)); ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); @@ -6538,11 +6615,17 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte (uint32_t)x_ne, stride_batch_y, (uint32_t)(ne20*ne21), (uint32_t)nei0, (uint32_t)ne11, }; - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, { vk_subbuffer{ d_X, x_buf_offset, x_sz * ne02 * ne03 }, vk_subbuffer{ d_Y, y_buf_offset, y_sz * ne12 * ne13 }, vk_subbuffer{ d_D, d_buf_offset, d_sz * ne22 * ne23}, vk_subbuffer{ d_ids, ids_buf_offset, ids_sz } }, pc, { groups_x, (uint32_t)nei0, groups_z }); + + if (x_non_contig) { + ctx->prealloc_x_need_sync = true; + } + if (y_non_contig) { + ctx->prealloc_y_need_sync = true; + } } static void ggml_vk_mul_mat_id(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, bool dryrun = false) { @@ -6925,9 +7008,11 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx mask_n_head_log2, m0, m1, gqa_ratio, split_kv, split_k }; - ggml_vk_sync_buffers(subctx); - if (split_k > 1) { + if (ctx->prealloc_split_k_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{d_Q, q_buf_offset, VK_WHOLE_SIZE}, @@ -6943,7 +7028,7 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx // cancel out the divide by wg_denoms[0]. pc, { workgroups_x * pipeline->wg_denoms[0], workgroups_y, workgroups_z }); - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(ctx, subctx); const std::array pc2 = { HSV, (uint32_t)ne1, (uint32_t)ne3, split_k, (sinks != nullptr) }; ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_flash_attn_split_k_reduce, { @@ -6952,6 +7037,7 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx vk_subbuffer{d_D, d_buf_offset, VK_WHOLE_SIZE}, }, pc2, { (uint32_t)ne1, HSV, (uint32_t)ne3 }); + ctx->prealloc_split_k_need_sync = true; } else { ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { @@ -7820,7 +7906,6 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co subbuf_y = { d_X, 0, x_sz }; } - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, subbuf_y, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else if (op == GGML_OP_SOFT_MAX) { // Empty src1 and src2 is possible in soft_max, but the shader needs a buffer @@ -7838,7 +7923,6 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co subbuf_z = { d_X, 0, x_sz }; } - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, subbuf_y, subbuf_z, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else if (op == GGML_OP_ROPE || op == GGML_OP_ROPE_BACK) { // Empty src2 is possible in rope, but the shader needs a buffer @@ -7849,30 +7933,23 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co subbuf_z = { d_X, 0, x_sz }; } - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, subbuf_z, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else if (op == GGML_OP_IM2COL) { // im2col uses only src1 and dst buffers - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else if (op == GGML_OP_COUNT_EQUAL) { - ggml_vk_sync_buffers(subctx); // count_equal assumes that destination buffer is initialized with zeroes ggml_vk_buffer_memset_async(subctx, d_D, d_buf_offset, 0, d_sz); - ggml_vk_sync_buffers(subctx); + ggml_vk_sync_buffers(ctx, subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else if (op == GGML_OP_OPT_STEP_SGD) { // OPT_STEP_SGD works on src0, it does not need dst - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_Z, z_buf_offset, z_sz } }, pc, elements); } else if (use_src2) { - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_Z, z_buf_offset, z_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else if (use_src1) { - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } else { - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); } } @@ -7999,7 +8076,6 @@ static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, elements = { ne, 1, 1 }; } - ggml_vk_sync_buffers(subctx); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ buf[0], offset[0], VK_WHOLE_SIZE }, @@ -8112,8 +8188,6 @@ static void ggml_vk_op_f32_wkv(ggml_backend_vk_context * ctx, vk_context& subctx src_buf_ctxs[i] = (ggml_backend_vk_buffer_context *)dst->src[i]->buffer->context; } - ggml_vk_sync_buffers(subctx); - vk_buffer d_D = nullptr, d_srcs[7] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; size_t dst_offset = 0, src_offsets[7] = { 0, 0, 0, 0, 0, 0, 0 }; bool dst_uma = false, srcs_uma[7] = { false, false, false, false, false, false, false }; @@ -8251,8 +8325,6 @@ static void ggml_vk_op_f32_opt_step_adamw(ggml_backend_vk_context * ctx, vk_cont ggml_backend_vk_buffer_context * gv_buf_ctx = (ggml_backend_vk_buffer_context *)gv->buffer->context; ggml_backend_vk_buffer_context * p_buf_ctx = (ggml_backend_vk_buffer_context *)p->buffer->context; - ggml_vk_sync_buffers(subctx); - vk_buffer d_X = nullptr, d_G = nullptr, d_GM = nullptr, d_GV = nullptr, d_P = nullptr; size_t x_offset = 0, g_offset = 0, gm_offset = 0, gv_offset = 0, p_offset = 0; bool X_uma = false, G_uma = false, GM_uma = false, GV_uma = false, P_uma = false; @@ -9964,6 +10036,83 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr } } + if (!dryrun) { + // This logic detects dependencies between modes in the graph and calls ggml_vk_sync_buffers + // to synchronize them. This handles most "normal" synchronization when computing the graph, and when + // there is no auxiliary memory use, it shouldn't be necessary to call ggml_vk_sync_buffers + // outside of this logic. When a node uses one of the prealloc buffers for something like + // dequantization or split_k, additional synchronization is needed between those passes. + bool need_sync = false; + + // Check whether "node" requires synchronization. The node requires synchronization if it + // overlaps in memory with another unsynchronized node and at least one of them is a write. + // Destination nodes are checked against both the written/read lists. Source nodes are only + // checked against the written list. Two nodes overlap in memory if they come from the same + // buffer and the tensor or view ranges overlap. + auto const &overlaps_unsynced = [&](const ggml_tensor *node, const std::vector &unsynced_nodes) -> bool { + if (unsynced_nodes.size() == 0) { + return false; + } + auto n_base = vk_tensor_offset(node) + node->view_offs; + auto n_size = ggml_nbytes(node); + ggml_backend_vk_buffer_context * a_buf_ctx = (ggml_backend_vk_buffer_context *)node->buffer->context; + vk_buffer a_buf = a_buf_ctx->dev_buffer; + for (auto &other : unsynced_nodes) { + ggml_backend_vk_buffer_context * o_buf_ctx = (ggml_backend_vk_buffer_context *)other->buffer->context; + vk_buffer o_buf = o_buf_ctx->dev_buffer; + if (a_buf == o_buf) { + auto o_base = vk_tensor_offset(other) + other->view_offs; + auto o_size = ggml_nbytes(other); + + if ((o_base <= n_base && n_base < o_base + o_size) || + (n_base <= o_base && o_base < n_base + n_size)) { + return true; + } + } + } + return false; + }; + + // For all fused ops, check if the destination node or any of the source + // nodes require synchronization. + for (int32_t i = 0; i < ctx->num_additional_fused_ops + 1 && !need_sync; ++i) { + const ggml_tensor *cur_node = cgraph->nodes[node_idx + i]; + if (overlaps_unsynced(cur_node, ctx->unsynced_nodes_read) || overlaps_unsynced(cur_node, ctx->unsynced_nodes_written)) { + need_sync = true; + break; + } + for (uint32_t j = 0; j < GGML_MAX_SRC; ++j) { + if (!cur_node->src[j]) { + continue; + } + if (overlaps_unsynced(cur_node->src[j], ctx->unsynced_nodes_written)) { + need_sync = true; + break; + } + } + } + if (need_sync) { + VK_LOG_DEBUG("node_idx=" << i << " sync"); + ctx->unsynced_nodes_written.clear(); + ctx->unsynced_nodes_read.clear(); + ggml_vk_sync_buffers(ctx, compute_ctx); + } else { + VK_LOG_DEBUG("node_idx=" << i << " unsynced"); + } + // Add the last fused node and all fused source nodes to the unsynchronized list. + const ggml_tensor * last_node = cgraph->nodes[node_idx + ctx->num_additional_fused_ops]; + ctx->unsynced_nodes_written.push_back(last_node); + for (int32_t i = 0; i < ctx->num_additional_fused_ops + 1; ++i) { + const ggml_tensor *cur_node = cgraph->nodes[node_idx + i]; + for (uint32_t j = 0; j < GGML_MAX_SRC; ++j) { + if (!cur_node->src[j]) { + continue; + } + ctx->unsynced_nodes_read.push_back(cur_node->src[j]); + } + } + } + switch (node->op) { case GGML_OP_REPEAT: ggml_vk_repeat(ctx, compute_ctx, src0, node, dryrun); @@ -10427,6 +10576,10 @@ static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) { ctx->gc.temp_buffers.clear(); ctx->prealloc_y_last_pipeline_used = {}; + ctx->unsynced_nodes_written.clear(); + ctx->unsynced_nodes_read.clear(); + ctx->prealloc_x_need_sync = ctx->prealloc_y_need_sync = ctx->prealloc_split_k_need_sync = false; + ggml_vk_command_pool_cleanup(ctx->device, ctx->compute_cmd_pool); ggml_vk_command_pool_cleanup(ctx->device, ctx->transfer_cmd_pool); From 21dc4ddaf21b8ed551d717e7606abd2cffbacdbf Mon Sep 17 00:00:00 2001 From: LaffeyNyaa <112215776+LaffeyNyaa@users.noreply.github.com> Date: Sat, 23 Aug 2025 16:38:30 +0800 Subject: [PATCH 086/174] chat : fix debug build assertion in trim function (#15520) --- src/llama-chat.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/llama-chat.cpp b/src/llama-chat.cpp index 0a96a9a579..4d6fdf8226 100644 --- a/src/llama-chat.cpp +++ b/src/llama-chat.cpp @@ -16,10 +16,10 @@ static std::string trim(const std::string & str) { size_t start = 0; size_t end = str.size(); - while (start < end && isspace(str[start])) { + while (start < end && isspace(static_cast(str[start]))) { start += 1; } - while (end > start && isspace(str[end - 1])) { + while (end > start && isspace(static_cast(str[end - 1]))) { end -= 1; } return str.substr(start, end - start); From 9ef536907de1b50c30e0369284898d30472a755a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 23 Aug 2025 12:58:58 +0200 Subject: [PATCH 087/174] scripts: fix compare-llama-bench.py (#15521) --- scripts/compare-llama-bench.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/compare-llama-bench.py b/scripts/compare-llama-bench.py index 0141e0a350..2cfca66e09 100755 --- a/scripts/compare-llama-bench.py +++ b/scripts/compare-llama-bench.py @@ -37,7 +37,6 @@ LLAMA_BENCH_DB_TYPES = [ "TEXT", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "TEXT", "INTEGER", "INTEGER", "TEXT", "TEXT", "INTEGER", "TEXT", "INTEGER", "INTEGER", "INTEGER", "TEXT", "TEXT", - "REAL", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "TEXT", "INTEGER", "INTEGER", "REAL", "REAL", ] From b1afcab804e3281867a5471fbd701e32eb32e512 Mon Sep 17 00:00:00 2001 From: "Piotr Wilkin (ilintar)" Date: Sat, 23 Aug 2025 15:21:52 +0200 Subject: [PATCH 088/174] model : add support for Seed-OSS (#15490) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * First draft * Fix linter errors * Added missing sinks nullptr * Don't forget the llama-arch! * We're through to the generation stage. * Fix post-attention norm * Apply suggestions from code review Co-authored-by: Sigbjørn Skjæret * Fix RoPE type * Fix tensor name and reorder llm_types * Update gguf-py/gguf/constants.py Remove nonexistent FFN_POST_NORM tensor Co-authored-by: Sigbjørn Skjæret * Update src/llama-model.h Co-authored-by: Sigbjørn Skjæret * Add basic chat template * Add chat template tests * Remake chat template test * Apply suggestions from code review Co-authored-by: Sigbjørn Skjæret * Update src/llama-chat.cpp Co-authored-by: Sigbjørn Skjæret * Reorder llm type descriptions * Update src/llama-model.cpp Co-authored-by: Sigbjørn Skjæret --------- Co-authored-by: Sigbjørn Skjæret --- convert_hf_to_gguf.py | 5 + gguf-py/gguf/constants.py | 16 +++ src/llama-arch.cpp | 18 ++++ src/llama-arch.h | 1 + src/llama-chat.cpp | 11 +++ src/llama-chat.h | 1 + src/llama-model.cpp | 183 +++++++++++++++++++++++++++++++++++ src/llama-model.h | 1 + tests/test-chat-template.cpp | 8 ++ 9 files changed, 244 insertions(+) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 42bf10d216..35fadbc83e 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -5854,6 +5854,11 @@ class OlmoModel(TextModel): return [(self.map_tensor_name(name), data_torch)] +@ModelBase.register("SeedOssForCausalLM") +class SeedOssModel(TextModel): + model_arch = gguf.MODEL_ARCH.SEED_OSS + + @ModelBase.register("Olmo2ForCausalLM") class Olmo2Model(TextModel): model_arch = gguf.MODEL_ARCH.OLMO2 diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 61ebe6e5e7..d03a02c7bf 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -385,6 +385,7 @@ class MODEL_ARCH(IntEnum): DREAM = auto() SMALLTHINKER = auto() LLADA = auto() + SEED_OSS = auto() class VISION_PROJECTOR_TYPE(IntEnum): @@ -717,6 +718,7 @@ MODEL_ARCH_NAMES: dict[MODEL_ARCH, str] = { MODEL_ARCH.DREAM: "dream", MODEL_ARCH.SMALLTHINKER: "smallthinker", MODEL_ARCH.LLADA: "llada", + MODEL_ARCH.SEED_OSS: "seed_oss", } VISION_PROJECTOR_TYPE_NAMES: dict[VISION_PROJECTOR_TYPE, str] = { @@ -1973,6 +1975,20 @@ MODEL_TENSORS: dict[MODEL_ARCH, list[MODEL_TENSOR]] = { MODEL_TENSOR.FFN_DOWN, MODEL_TENSOR.FFN_UP, ], + MODEL_ARCH.SEED_OSS: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.ATTN_Q, + MODEL_TENSOR.ATTN_K, + MODEL_TENSOR.ATTN_V, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.ATTN_POST_NORM, + MODEL_TENSOR.FFN_GATE, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + MODEL_TENSOR.OUTPUT_NORM, + MODEL_TENSOR.OUTPUT, + ], MODEL_ARCH.OLMOE: [ MODEL_TENSOR.TOKEN_EMBD, MODEL_TENSOR.OUTPUT_NORM, diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index c759a9c6d9..0ca0a4c22f 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -93,6 +93,7 @@ static const std::map LLM_ARCH_NAMES = { { LLM_ARCH_DREAM, "dream" }, { LLM_ARCH_SMALLTHINKER, "smallthinker" }, { LLM_ARCH_LLADA, "llada" }, + { LLM_ARCH_SEED_OSS, "seed_oss" }, { LLM_ARCH_UNKNOWN, "(unknown)" }, }; @@ -2068,6 +2069,23 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, }, }, + { + LLM_ARCH_SEED_OSS, + { + { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, + { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, + { LLM_TENSOR_OUTPUT, "output" }, + { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, + { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, + { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, + { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, + { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, + { LLM_TENSOR_ATTN_POST_NORM, "blk.%d.post_attention_norm" }, + { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, + { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, + { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, + }, + }, { LLM_ARCH_UNKNOWN, { diff --git a/src/llama-arch.h b/src/llama-arch.h index 7af587e795..7008c2514c 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -97,6 +97,7 @@ enum llm_arch { LLM_ARCH_DREAM, LLM_ARCH_SMALLTHINKER, LLM_ARCH_LLADA, + LLM_ARCH_SEED_OSS, LLM_ARCH_UNKNOWN, }; diff --git a/src/llama-chat.cpp b/src/llama-chat.cpp index 4d6fdf8226..9d8e57eac1 100644 --- a/src/llama-chat.cpp +++ b/src/llama-chat.cpp @@ -69,6 +69,7 @@ static const std::map LLM_CHAT_TEMPLATES = { { "gpt-oss", LLM_CHAT_TEMPLATE_OPENAI_MOE }, { "hunyuan-dense", LLM_CHAT_TEMPLATE_HUNYUAN_DENSE }, { "kimi-k2", LLM_CHAT_TEMPLATE_KIMI_K2 }, + { "seed_oss", LLM_CHAT_TEMPLATE_SEED_OSS }, }; llm_chat_template llm_chat_template_from_str(const std::string & name) { @@ -201,6 +202,8 @@ llm_chat_template llm_chat_detect_template(const std::string & tmpl) { return LLM_CHAT_TEMPLATE_HUNYUAN_DENSE; } else if (tmpl_contains("<|im_assistant|>assistant<|im_middle|>")) { return LLM_CHAT_TEMPLATE_KIMI_K2; + } else if (tmpl_contains("")) { + return LLM_CHAT_TEMPLATE_SEED_OSS; } return LLM_CHAT_TEMPLATE_UNKNOWN; } @@ -752,6 +755,14 @@ int32_t llm_chat_apply_template( if (add_ass) { ss << "<|im_assistant|>assistant<|im_middle|>"; } + } else if (tmpl == LLM_CHAT_TEMPLATE_SEED_OSS) { + for (auto message: chat) { + std::string role(message->role); + ss << "" << role << "\n" << (role == "assistant" ? trim(message->content) : message->content) << ""; + } + if (add_ass) { + ss << "assistant\n"; + } } else { // template not supported return -1; diff --git a/src/llama-chat.h b/src/llama-chat.h index 35a943856f..21d53ed08b 100644 --- a/src/llama-chat.h +++ b/src/llama-chat.h @@ -49,6 +49,7 @@ enum llm_chat_template { LLM_CHAT_TEMPLATE_OPENAI_MOE, LLM_CHAT_TEMPLATE_HUNYUAN_DENSE, LLM_CHAT_TEMPLATE_KIMI_K2, + LLM_CHAT_TEMPLATE_SEED_OSS, LLM_CHAT_TEMPLATE_UNKNOWN, }; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 3c8440a8f6..d5148f7df3 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -83,6 +83,7 @@ const char * llm_type_name(llm_type type) { case LLM_TYPE_32B: return "32B"; case LLM_TYPE_34B: return "34B"; case LLM_TYPE_35B: return "35B"; + case LLM_TYPE_36B: return "36B"; case LLM_TYPE_40B: return "40B"; case LLM_TYPE_65B: return "65B"; case LLM_TYPE_70B: return "70B"; @@ -1288,6 +1289,14 @@ void llama_model::load_hparams(llama_model_loader & ml) { default: type = LLM_TYPE_UNKNOWN; } } break; + case LLM_ARCH_SEED_OSS: + { + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); + switch (hparams.n_layer) { + case 64: type = LLM_TYPE_36B; break; + default: type = LLM_TYPE_UNKNOWN; + } + } break; case LLM_ARCH_OLMOE: { ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); @@ -3967,6 +3976,43 @@ bool llama_model::load_tensors(llama_model_loader & ml) { layer.ffn_post_norm = create_tensor(tn(LLM_TENSOR_FFN_POST_NORM, "weight", i), {n_embd}, 0); } } break; + case LLM_ARCH_SEED_OSS: + { + const uint32_t head_dim = hparams.n_embd_head_k; + const int64_t n_qo_dim = n_head * head_dim; + const int64_t n_kv_dim = n_head_kv * head_dim; + + tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); + + // output + output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0); + output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED); + // if output is NULL, init from the input tok embed + if (output == NULL) { + output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); + } + + for (int i = 0; i < n_layer; ++i) { + auto & layer = layers[i]; + + layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_qo_dim}, 0); + layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_kv_dim}, 0); + layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_kv_dim}, 0); + layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_qo_dim, n_embd}, 0); + + layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_qo_dim}, TENSOR_NOT_REQUIRED); + layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_kv_dim}, TENSOR_NOT_REQUIRED); + layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_kv_dim}, TENSOR_NOT_REQUIRED); + + layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0); + layer.attn_post_norm = create_tensor(tn(LLM_TENSOR_ATTN_POST_NORM, "weight", i), {n_embd}, 0); + + layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0); + layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0); + layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, 0); + } + } break; + case LLM_ARCH_OLMOE: { tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); @@ -17934,6 +17980,137 @@ struct llm_build_lfm2 : public llm_graph_context { } }; +struct llm_build_seed_oss : public llm_graph_context { + llm_build_seed_oss(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) { + const int64_t n_embd_head = hparams.n_embd_head_v; + + GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); + GGML_ASSERT(n_embd_head == hparams.n_rot); + + ggml_tensor * cur; + ggml_tensor * inpL; + + inpL = build_inp_embd(model.tok_embd); + + // inp_pos - contains the positions + ggml_tensor * inp_pos = build_inp_pos(); + + auto * inp_attn = build_attn_inp_kv(); + + const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; + + ggml_tensor * inp_out_ids = build_inp_out_ids(); + + for (int il = 0; il < n_layer; ++il) { + ggml_tensor * inpSA = inpL; + + // norm + cur = build_norm(inpL, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, il); + cb(cur, "attn_norm", il); + + // self-attention + { + // compute Q and K and RoPE them + ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); + if (model.layers[il].bq) { + Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); + cb(Qcur, "Qcur", il); + } + + ggml_tensor * Kcur = build_lora_mm(model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); + if (model.layers[il].bk) { + Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); + cb(Kcur, "Kcur", il); + } + + ggml_tensor * Vcur = build_lora_mm(model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); + if (model.layers[il].bv) { + Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); + cb(Vcur, "Vcur", il); + } + + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, n_head_kv, n_tokens); + + Qcur = ggml_rope_ext( + ctx0, Qcur, inp_pos, nullptr, + n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow + ); + + Kcur = ggml_rope_ext( + ctx0, Kcur, inp_pos, nullptr, + n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow + ); + + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); + + cur = build_attn(inp_attn, + model.layers[il].wo, model.layers[il].bo, + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); + cb(cur, "attn_out", il); + } + + if (il == n_layer - 1 && inp_out_ids) { + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); + } + + ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); + + // feed-forward network + cur = build_norm(ffn_inp, + model.layers[il].attn_post_norm, NULL, + LLM_NORM_RMS, il); + cb(cur, "attn_post_norm", il); + + cur = build_ffn(cur, + model.layers[il].ffn_up, NULL, NULL, + model.layers[il].ffn_gate, NULL, NULL, + model.layers[il].ffn_down, NULL, NULL, + NULL, + LLM_FFN_SILU, LLM_FFN_PAR, il); + cb(cur, "ffn_out", il); + + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "ffn_out", il); + + cur = build_cvec(cur, il); + cb(cur, "l_out", il); + + // input for next layer + inpL = cur; + } + + cur = inpL; + + cur = build_norm(cur, + model.output_norm, NULL, + LLM_NORM_RMS, -1); + + cb(cur, "result_norm", -1); + res->t_embd = cur; + + // lm_head + cur = build_lora_mm(model.output, cur); + + cb(cur, "result_output", -1); + res->t_logits = cur; + + ggml_build_forward_expand(gf, cur); + } +}; + template struct llm_build_smallthinker : public llm_graph_context{ llm_build_smallthinker(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params){ @@ -18472,6 +18649,10 @@ ggml_cgraph * llama_model::build_graph(const llm_graph_params & params) const { { llm = std::make_unique(*this, params); } break; + case LLM_ARCH_SEED_OSS: + { + llm = std::make_unique(*this, params); + } break; case LLM_ARCH_DOTS1: { llm = std::make_unique(*this, params); @@ -18530,6 +18711,7 @@ ggml_cgraph * llama_model::build_graph(const llm_graph_params & params) const { return llm->res->get_gf(); } + // // interface implementation // @@ -18724,6 +18906,7 @@ llama_rope_type llama_model_rope_type(const llama_model * model) { case LLM_ARCH_LFM2: case LLM_ARCH_SMALLTHINKER: case LLM_ARCH_GLM4_MOE: + case LLM_ARCH_SEED_OSS: return LLAMA_ROPE_TYPE_NEOX; case LLM_ARCH_QWEN2VL: diff --git a/src/llama-model.h b/src/llama-model.h index f639fa1398..af4460cc01 100644 --- a/src/llama-model.h +++ b/src/llama-model.h @@ -76,6 +76,7 @@ enum llm_type { LLM_TYPE_32B, LLM_TYPE_34B, LLM_TYPE_35B, + LLM_TYPE_36B, LLM_TYPE_40B, LLM_TYPE_65B, LLM_TYPE_70B, diff --git a/tests/test-chat-template.cpp b/tests/test-chat-template.cpp index edfac3b08b..b863367db6 100644 --- a/tests/test-chat-template.cpp +++ b/tests/test-chat-template.cpp @@ -290,6 +290,14 @@ int main(void) { /* .bos_token= */ "", /* .eos_token= */ "", }, + { + /* .name= */ "ByteDance-Seed/Seed-OSS-36B-Instruct", + /* .template_str */ "{# #}{%- for message in messages %}{%- if message.role in [\"user\", \"system\"] %}{{ bos_token + message.role + \"\\n\" + message.content + eos_token }}{%- elif message.role == \"assistant\" %}{{ bos_token + message.role }}{%- if message.content is defined and message.content is string and message.content|trim|length > 0 %}{{ \"\\n\" + message.content|trim + eos_token }}{%- endif %}{%- else %}{{ bos_token + message.role + \"\\n\" + message.content + eos_token }}{%- endif %}{%- endfor %}{%- if add_generation_prompt %}{{ bos_token + \"assistant\\n\" }}{%- endif %}", + /* .expected_output= */ "system\nYou are a helpful assistantuser\nHelloassistant\nHi thereuser\nWho are youassistant\nI am an assistantuser\nAnother questionassistant\n", + /* .expected_output_jinja= */ "system\nYou are a helpful assistantuser\nHelloassistant\nHi thereuser\nWho are youassistant\nI am an assistantuser\nAnother questionassistant\n", + /* .bos_token= */ "", + /* .eos_token= */ "", + } }; std::vector formatted_chat(1024); int32_t res; From 611f419cff11e4952228162a1c44cb35dff2274a Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 23 Aug 2025 13:16:17 -0500 Subject: [PATCH 089/174] vulkan: optimize rms_norm, and allow the work to spread across multiple SMs (#15281) * vulkan: optimize rms_norm, and allow the work to spread across multiple SMs There are really two parts to this change: (1) Some optimizations similar to what we have in soft_max, to unroll with different numbers of iterations. (2) A fusion optimization where we detect add followed by rms_norm, and make the add shader atomically accumulate the values^2 into memory. Then the rms_norm shader can just load that sum. This allows the rms_norm to be parallelized across multiple workgroups, it just becomes a simple per-element multiply. The fusion optimization is currently only applied when the rms_norm is on a single vector. This previously always ran on a single SM. It could apply more broadly, but when there are other dimensions the work can already spread across SMs, and there would be some complexity to tracking multiple atomic sums. * Change add+rms_norm optimization to write out an array of partial sums rather than using atomic add, to make it deterministic. The rms_norm shader fetches a subgroup's worth in parallel and uses subgroupAdd to add them up. * complete rebase against fused adds - multi_add shader can also compute partial sums * fix validation errors * disable add_rms_fusion for Intel due to possible driver bug * resolve against #15489, sync after clearing partial sums --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 193 +++++++++++++++--- ggml/src/ggml-vulkan/vulkan-shaders/add.comp | 42 +++- .../ggml-vulkan/vulkan-shaders/multi_add.comp | 42 +++- .../ggml-vulkan/vulkan-shaders/rms_norm.comp | 60 +++++- .../vulkan-shaders/rms_norm_partials.comp | 65 ++++++ .../vulkan-shaders/vulkan-shaders-gen.cpp | 12 +- tests/test-backend-ops.cpp | 15 +- 7 files changed, 379 insertions(+), 50 deletions(-) create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_partials.comp diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index c7cfb6473e..2c8d9ecaa0 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -102,9 +102,9 @@ static bool is_pow2(uint32_t x) { return x > 1 && (x & (x-1)) == 0; } struct ggml_backend_vk_context; -#define MAX_PARAMETER_COUNT 8 +#define MAX_PARAMETER_COUNT 12 // Max number of adds that can be fused without exceeding MAX_PARAMETER_COUNT. -#define MAX_FUSED_ADDS (MAX_PARAMETER_COUNT - 2) +#define MAX_FUSED_ADDS (MAX_PARAMETER_COUNT - 3) struct vk_pipeline_struct { std::string name; @@ -381,6 +381,9 @@ struct vk_device_struct { bool subgroup_shuffle; bool multi_add; + bool add_rms_fusion; + uint32_t partials_binding_alignment; + bool integer_dot_product; bool subgroup_size_control; @@ -460,9 +463,12 @@ struct vk_device_struct { vk_pipeline pipeline_mul_norepeat[2][2][2]; vk_pipeline pipeline_div[2][2][2]; vk_pipeline pipeline_div_norepeat[2][2][2]; + vk_pipeline pipeline_add_rms[2][2][2]; + vk_pipeline pipeline_add_rms_norepeat[2][2][2]; // indexed by num_additional_fused_ops == num_adds - 1 vk_pipeline pipeline_multi_add[MAX_FUSED_ADDS]; + vk_pipeline pipeline_multi_add_rms[MAX_FUSED_ADDS]; vk_pipeline pipeline_add_id_f32; @@ -486,6 +492,8 @@ struct vk_device_struct { vk_pipeline pipeline_group_norm_f32; vk_pipeline pipeline_rms_norm_f32; vk_pipeline pipeline_rms_norm_mul_f32; + vk_pipeline pipeline_rms_norm_partials_f32; + vk_pipeline pipeline_rms_norm_mul_partials_f32; vk_pipeline pipeline_rms_norm_back_f32; vk_pipeline pipeline_l2_norm_f32; @@ -823,8 +831,13 @@ struct vk_op_multi_add_push_constants { uint32_t ne20; uint32_t ne21; uint32_t ne22; uint32_t ne23; // strides for srcs+dst - uint32_t nb[8][4]; + uint32_t nb[MAX_PARAMETER_COUNT][4]; + + uint32_t rms_partials; }; +// update multi_add.comp if this changes +static_assert(MAX_PARAMETER_COUNT == 12); +static_assert(sizeof(vk_op_multi_add_push_constants) <= 256); struct vk_op_add_id_push_constants { uint32_t ne0; @@ -1208,6 +1221,12 @@ class vk_perf_logger { timings[name].push_back(time); return; } + if (node->op == GGML_OP_RMS_NORM) { + std::string name = ggml_op_name(node->op); + name += "(" + std::to_string(node->ne[0]) + "," + std::to_string(node->ne[1]) + "," + std::to_string(node->ne[2]) + "," + std::to_string(node->ne[3]) + ")"; + timings[name].push_back(time); + return; + } timings[ggml_op_name(node->op)].push_back(time); } private: @@ -1222,10 +1241,13 @@ struct ggml_backend_vk_context { size_t semaphore_idx, event_idx; ggml_vk_garbage_collector gc; - size_t prealloc_size_x, prealloc_size_y, prealloc_size_split_k; - vk_buffer prealloc_x, prealloc_y, prealloc_split_k; + size_t prealloc_size_x, prealloc_size_y, prealloc_size_split_k, prealloc_size_add_rms_partials, prealloc_size_add_rms_partials_offset; + vk_buffer prealloc_x, prealloc_y, prealloc_split_k, prealloc_add_rms_partials; vk::Fence fence, almost_ready_fence; bool almost_ready_fence_pending {}; + // Set before op_add and unset after op_rms_norm to indicate that the add should + // write partial sums to accumulate the square of the vector components + bool do_add_rms_partials; // Cache most recent tensor that was converted into prealloc_y, and what pipeline it used to convert. vk_pipeline_struct * prealloc_y_last_pipeline_used {}; @@ -2987,8 +3009,12 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_norm_f32, "norm_f32", norm_f32_len, norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_group_norm_f32, "group_norm_f32", group_norm_f32_len, group_norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); - ggml_vk_create_pipeline(device, device->pipeline_rms_norm_f32, "rms_norm_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 0}, 1); - ggml_vk_create_pipeline(device, device->pipeline_rms_norm_mul_f32, "rms_norm_mul_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 1}, 1); + + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_f32, "rms_norm_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 4, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 0}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_mul_f32, "rms_norm_mul_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 4, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_partials_f32, "rms_norm_partials_f32", rms_norm_partials_f32_len, rms_norm_partials_f32_data, "main", 4, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 0}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_mul_partials_f32, "rms_norm_mul_partials_f32", rms_norm_partials_f32_len, rms_norm_partials_f32_data, "main", 4, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_back_f32, "rms_norm_back_f32", rms_norm_back_f32_len, rms_norm_back_f32_data, "main", 3, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_l2_norm_f32, "l2_norm_f32", l2_norm_f32_len, l2_norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); @@ -3058,25 +3084,28 @@ static void ggml_vk_load_shaders(vk_device& device) { }; bool rte = device->float_controls_rte_fp16; -#define CREATE_BINARY(name, namemod, spec) \ +#define CREATE_BINARY(name, namemod, spec, bindings) \ for (int s0 : {0,1}) for (int s1 : {0,1}) for (int d : {0,1}) \ ggml_vk_create_pipeline(device, device->pipeline_ ## name ## namemod[s0][s1][d], \ #name + get_suffix(s0, s1, d) + #namemod, name ## _len[s0][s1][d][rte], name ## _data[s0][s1][d][rte], \ - "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, spec, 1); + "main", (bindings), sizeof(vk_op_binary_push_constants), {512, 1, 1}, spec, 1); - CREATE_BINARY(add, , {0}) - CREATE_BINARY(add, _norepeat, {1}) - CREATE_BINARY(sub, , {0}) - CREATE_BINARY(sub, _norepeat, {1}) - CREATE_BINARY(mul, , {0}) - CREATE_BINARY(mul, _norepeat, {1}) - CREATE_BINARY(div, , {0}) - CREATE_BINARY(div, _norepeat, {1}) + CREATE_BINARY(add, , {0}, 4) + CREATE_BINARY(add, _norepeat, {1}, 4) + CREATE_BINARY(sub, , {0}, 3) + CREATE_BINARY(sub, _norepeat, {1}, 3) + CREATE_BINARY(mul, , {0}, 3) + CREATE_BINARY(mul, _norepeat, {1}, 3) + CREATE_BINARY(div, , {0}, 3) + CREATE_BINARY(div, _norepeat, {1}, 3) + CREATE_BINARY(add_rms, , {0}, 4) + CREATE_BINARY(add_rms, _norepeat, {1}, 4) #undef CREATE_BINARY if (device->multi_add) { for (uint32_t i = 0; i < MAX_FUSED_ADDS; ++i) { - ggml_vk_create_pipeline(device, device->pipeline_multi_add[i], "multi_add_f32_" + std::to_string(i+1), multi_add_f32_len, multi_add_f32_data, "main", MAX_PARAMETER_COUNT, sizeof(vk_op_multi_add_push_constants), {512, 1, 1}, {i+2}, 1); + ggml_vk_create_pipeline(device, device->pipeline_multi_add[i], "multi_add_f32_" + std::to_string(i+1), multi_add_f32_len, multi_add_f32_data, "main", MAX_PARAMETER_COUNT, sizeof(vk_op_multi_add_push_constants), {512, 1, 1}, {i+2}, 1); + ggml_vk_create_pipeline(device, device->pipeline_multi_add_rms[i], "multi_add_rms_f32_" + std::to_string(i+1), multi_add_rms_f32_len, multi_add_rms_f32_data, "main", MAX_PARAMETER_COUNT, sizeof(vk_op_multi_add_push_constants), {512, 1, 1}, {i+2}, 1); } } @@ -3944,6 +3973,12 @@ static vk_device ggml_vk_get_device(size_t idx) { device->disable_fusion = getenv("GGML_VK_DISABLE_FUSION") != nullptr; + device->add_rms_fusion = !device->disable_fusion && + device->subgroup_add && + device->vendor_id != VK_VENDOR_ID_INTEL; + device->partials_binding_alignment = + std::max(4u, (uint32_t)device->properties.limits.minStorageBufferOffsetAlignment); + return device; } @@ -7080,7 +7115,7 @@ static std::array ggml_vk_get_conv_elements(const ggml_tensor *dst) return elements; } -static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op) { +static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, const ggml_tensor * dst, ggml_op op) { switch (op) { case GGML_OP_GET_ROWS: GGML_ASSERT(src1->type == GGML_TYPE_I32); @@ -7109,10 +7144,19 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const case GGML_OP_ADD: { if (ctx->num_additional_fused_ops > 0) { - return ctx->device->pipeline_multi_add[ctx->num_additional_fused_ops]; + if (ctx->do_add_rms_partials) { + return ctx->device->pipeline_multi_add_rms[ctx->num_additional_fused_ops]; + } else { + return ctx->device->pipeline_multi_add[ctx->num_additional_fused_ops]; + } + } + if (ctx->do_add_rms_partials) { + auto pipelines = ggml_are_same_shape(src0, src1) ? ctx->device->pipeline_add_rms_norepeat : ctx->device->pipeline_add_rms; + return pipelines[src0->type == GGML_TYPE_F16][src1->type == GGML_TYPE_F16][dst->type == GGML_TYPE_F16]; + } else { + auto pipelines = ggml_are_same_shape(src0, src1) ? ctx->device->pipeline_add_norepeat : ctx->device->pipeline_add; + return pipelines[src0->type == GGML_TYPE_F16][src1->type == GGML_TYPE_F16][dst->type == GGML_TYPE_F16]; } - auto pipelines = ggml_are_same_shape(src0, src1) ? ctx->device->pipeline_add_norepeat : ctx->device->pipeline_add; - return pipelines[src0->type == GGML_TYPE_F16][src1->type == GGML_TYPE_F16][dst->type == GGML_TYPE_F16]; } case GGML_OP_SUB: { @@ -7235,7 +7279,11 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const return nullptr; case GGML_OP_RMS_NORM: if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->num_additional_fused_ops > 0 ? ctx->device->pipeline_rms_norm_mul_f32 : ctx->device->pipeline_rms_norm_f32; + if (ctx->do_add_rms_partials) { + return ctx->num_additional_fused_ops > 0 ? ctx->device->pipeline_rms_norm_mul_partials_f32 : ctx->device->pipeline_rms_norm_partials_f32; + } else { + return ctx->num_additional_fused_ops > 0 ? ctx->device->pipeline_rms_norm_mul_f32 : ctx->device->pipeline_rms_norm_f32; + } } return nullptr; case GGML_OP_RMS_NORM_BACK: @@ -7748,7 +7796,12 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co } } break; case GGML_OP_RMS_NORM: - elements = { (uint32_t)ne01, (uint32_t)ne02, (uint32_t)ne03 }; + if (ctx->do_add_rms_partials) { + // Run one element per thread, 128 threads per workgroup + elements = { (uint32_t)CEIL_DIV(ne00, 128), 1, 1 }; + } else { + elements = { (uint32_t)ne01, (uint32_t)ne02, (uint32_t)ne03 }; + } break; case GGML_OP_SUM: @@ -7897,7 +7950,16 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co } } - if (op == GGML_OP_GLU) { + if (op == GGML_OP_ADD || op == GGML_OP_RMS_NORM) { + vk_buffer d_A = ctx->do_add_rms_partials ? ctx->prealloc_add_rms_partials : d_X; + size_t a_buf_offset = ctx->do_add_rms_partials ? ctx->prealloc_size_add_rms_partials_offset : 0; + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + { vk_subbuffer{ d_X, x_buf_offset, x_sz }, + vk_subbuffer{ d_Y, y_buf_offset, y_sz }, + vk_subbuffer{ d_D, d_buf_offset, d_sz }, + vk_subbuffer{ d_A, a_buf_offset, VK_WHOLE_SIZE }, + }, pc, elements); + } else if (op == GGML_OP_GLU) { // Empty src1 is possible in glu, but the shader needs a buffer vk_subbuffer subbuf_y; if (use_src1) { @@ -7998,7 +8060,7 @@ static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor *tensors[MAX_PARAMETER_COUNT]; uint32_t num_srcs = ctx->num_additional_fused_ops + 2; uint32_t num_tensors = num_srcs + 1; - GGML_ASSERT(num_tensors <= MAX_PARAMETER_COUNT); + GGML_ASSERT(num_tensors + ctx->do_add_rms_partials <= MAX_PARAMETER_COUNT); tensors[0] = first_node->src[0]; tensors[1] = first_node->src[1]; @@ -8025,8 +8087,9 @@ static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, pc.nb[i][2] = (uint32_t)t->nb[2] / sizeof(float); pc.nb[i][3] = (uint32_t)t->nb[3] / sizeof(float); } + pc.rms_partials = ctx->do_add_rms_partials; - vk_pipeline pipeline = ctx->device->pipeline_multi_add[ctx->num_additional_fused_ops]; + vk_pipeline pipeline = ggml_vk_op_get_pipeline(ctx, tensors[0], tensors[1], nullptr, dst, dst->op); if (pipeline == nullptr) { std::cerr << "ggml_vulkan: Error: Missing multi_add"; @@ -8064,6 +8127,10 @@ static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, buf[i] = buf[0]; offset[i] = 0; } + if (ctx->do_add_rms_partials) { + buf[num_tensors] = ctx->prealloc_add_rms_partials; + offset[num_tensors] = ctx->prealloc_size_add_rms_partials_offset; + } std::array elements; @@ -8076,6 +8143,7 @@ static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, elements = { ne, 1, 1 }; } + static_assert(MAX_PARAMETER_COUNT == 12); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ buf[0], offset[0], VK_WHOLE_SIZE }, @@ -8086,6 +8154,10 @@ static void ggml_vk_multi_add(ggml_backend_vk_context * ctx, vk_context& subctx, vk_subbuffer{ buf[5], offset[5], VK_WHOLE_SIZE }, vk_subbuffer{ buf[6], offset[6], VK_WHOLE_SIZE }, vk_subbuffer{ buf[7], offset[7], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[8], offset[8], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[9], offset[9], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[10], offset[10], VK_WHOLE_SIZE }, + vk_subbuffer{ buf[11], offset[11], VK_WHOLE_SIZE }, }, pc, elements); } @@ -8100,7 +8172,7 @@ static void ggml_vk_add(ggml_backend_vk_context * ctx, vk_context& subctx, const (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size, (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, 0, - 0.0f, 0.0f, 0, + 0.0f, 0.0f, ctx->do_add_rms_partials, }, dryrun); } @@ -8558,19 +8630,39 @@ static void ggml_vk_group_norm(ggml_backend_vk_context * ctx, vk_context& subctx ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_GROUP_NORM, { group_size, 0, eps, 0.0f }, dryrun); } +static uint32_t ggml_vk_rms_num_partials(ggml_backend_vk_context * ctx, const ggml_tensor *node) { + const uint32_t ne = (uint32_t)node->ne[0]; + const uint32_t denom = ctx->device->pipeline_add_rms[0][0][0]->wg_denoms[0]; + const uint32_t num_partials = CEIL_DIV(ne, denom); + return num_partials; +} + +static uint32_t ggml_vk_rms_partials_size(ggml_backend_vk_context * ctx, const ggml_tensor *node) { + const uint32_t num_partials = ggml_vk_rms_num_partials(ctx, node); + const uint32_t num_bytes = ROUNDUP_POW2(num_partials * sizeof(uint32_t), ctx->device->partials_binding_alignment); + return num_bytes; +} + static void ggml_vk_rms_norm(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, float * op_params, bool dryrun = false) { const uint32_t src0_type_size = ggml_type_size(src0->type); const uint32_t src1_type_size = ggml_type_size(src1->type); const uint32_t dst_type_size = ggml_type_size(dst->type); + uint32_t param3 = ctx->do_add_rms_partials ? ggml_vk_rms_num_partials(ctx, dst) : 0; + ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_RMS_NORM, { (uint32_t)ggml_nelements(src0), (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size, (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, 0, - op_params[0], 0.0f, 0, + op_params[0], 0.0f, (int32_t)param3, }, dryrun); + + if (ctx->do_add_rms_partials) { + ctx->prealloc_size_add_rms_partials_offset += ggml_vk_rms_partials_size(ctx, src0); + ctx->do_add_rms_partials = false; + } } static void ggml_vk_rms_norm_back(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, bool dryrun = false) { @@ -9848,6 +9940,14 @@ static void ggml_vk_preallocate_buffers(ggml_backend_vk_context * ctx) { } ctx->prealloc_split_k = ggml_vk_create_buffer_device(ctx->device, ctx->prealloc_size_split_k); } + if (ctx->prealloc_add_rms_partials == nullptr || (ctx->prealloc_size_add_rms_partials > 0 && ctx->prealloc_add_rms_partials->size < ctx->prealloc_size_add_rms_partials)) { + VK_LOG_MEMORY("ggml_vk_preallocate_buffers(add_partials_size: " << ctx->prealloc_add_rms_partials << ")"); + // Resize buffer + if (ctx->prealloc_add_rms_partials != nullptr) { + ggml_vk_destroy_buffer(ctx->prealloc_add_rms_partials); + } + ctx->prealloc_add_rms_partials = ggml_vk_create_buffer_device(ctx->device, ctx->prealloc_size_add_rms_partials); + } } static bool ggml_vk_compute_forward(ggml_backend_vk_context* ctx, ggml_cgraph * cgraph, ggml_tensor* tensor, int tensor_idx, bool use_fence, bool almost_ready); @@ -9904,10 +10004,23 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr return false; } break; + case GGML_OP_ADD: + { + int next_node_idx = node_idx + 1 + ctx->num_additional_fused_ops; + if (next_node_idx < cgraph->n_nodes && + cgraph->nodes[next_node_idx]->op == GGML_OP_RMS_NORM && + cgraph->nodes[next_node_idx]->src[0] == cgraph->nodes[next_node_idx - 1] && + ggml_nrows(cgraph->nodes[next_node_idx]) == 1 && + ctx->device->add_rms_fusion) { + if (dryrun) { + ctx->prealloc_size_add_rms_partials += ggml_vk_rms_partials_size(ctx, cgraph->nodes[node_idx]); + } + ctx->do_add_rms_partials = true; + } + } break; case GGML_OP_REPEAT: case GGML_OP_REPEAT_BACK: case GGML_OP_GET_ROWS: - case GGML_OP_ADD: case GGML_OP_ADD_ID: case GGML_OP_ACC: case GGML_OP_SUB: @@ -10029,6 +10142,9 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr // do the only thing needed for the dryrun. vk_pipeline pipeline = ggml_vk_op_get_pipeline(ctx, src0, src1, src2, node, node->op); ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); + if (node->op == GGML_OP_RMS_NORM) { + ctx->do_add_rms_partials = false; + } return false; } default: @@ -11098,6 +11214,10 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg vk_instance.pfn_vkQueueBeginDebugUtilsLabelEXT(ctx->device->compute_queue.queue, reinterpret_cast(&dul)); } + ctx->prealloc_size_add_rms_partials = 0; + ctx->prealloc_size_add_rms_partials_offset = 0; + ctx->do_add_rms_partials = false; + uint64_t total_mat_mul_bytes = 0; for (int i = 0; i < cgraph->n_nodes; i++) { if (!ctx->device->disable_fusion) { @@ -11166,6 +11286,19 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg ctx->prealloc_y_last_pipeline_used = nullptr; ctx->prealloc_y_last_tensor_used = nullptr; + if (ctx->prealloc_size_add_rms_partials) { + if (ctx->compute_ctx.expired()) { + compute_ctx = ggml_vk_create_context(ctx, ctx->compute_cmd_pool); + ctx->compute_ctx = compute_ctx; + ggml_vk_ctx_begin(ctx->device, compute_ctx); + } else { + compute_ctx = ctx->compute_ctx.lock(); + } + // initialize partial sums to zero. + ggml_vk_buffer_memset_async(compute_ctx, ctx->prealloc_add_rms_partials, 0, 0, ctx->prealloc_size_add_rms_partials); + ggml_vk_sync_buffers(ctx, compute_ctx); + } + // Submit after enough work has accumulated, to overlap CPU cmdbuffer generation with GPU execution. // Estimate the amount of matmul work by looking at the weight matrix size, and submit every 100MB // (and scaled down based on model size, so smaller models submit earlier). diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/add.comp b/ggml/src/ggml-vulkan/vulkan-shaders/add.comp index 2b4085c4f8..00cf2dd62f 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/add.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/add.comp @@ -1,20 +1,34 @@ #version 450 #extension GL_EXT_shader_16bit_storage : require +#if ADD_RMS +#extension GL_KHR_shader_subgroup_arithmetic : enable +#extension GL_KHR_shader_subgroup_basic : enable +#endif #include "types.comp" #include "generic_binary_head.comp" const uint num_threads = 256; +layout (binding = 3, std430) buffer PartialBuf {float partial_sums[];}; + layout(local_size_x = num_threads, local_size_y = 1, local_size_z = 1) in; +#if ADD_RMS +// XXX TODO this could be sized based on number of subgroups, but that't not considered a constant +shared FLOAT_TYPE sumsh[num_threads]; +#endif + void main() { uint idx = get_idx(); + uint orig_idx = idx; // num_threads * num_iter must equal 512, to match the wg_denoms and get_idx calculation const uint num_iter = 2; + FLOAT_TYPE sum_sq = 0; + [[unroll]] for (uint i = 0; i < num_iter; ++i) { if (idx >= p.ne) { continue; @@ -22,8 +36,34 @@ void main() { uint i00, i01, i02, i03; get_indices(idx, i00, i01, i02, i03); - data_d[get_doffset() + dst_idx(i00, i01, i02, i03)] = D_TYPE(FLOAT_TYPE(data_a[get_aoffset() + src0_idx(i00, i01, i02, i03)]) + FLOAT_TYPE(data_b[get_boffset() + src1_idx(i00, i01, i02, i03)])); + FLOAT_TYPE sum = FLOAT_TYPE(data_a[get_aoffset() + src0_idx(i00, i01, i02, i03)]) + FLOAT_TYPE(data_b[get_boffset() + src1_idx(i00, i01, i02, i03)]); + sum_sq += sum*sum; + + data_d[get_doffset() + dst_idx(i00, i01, i02, i03)] = D_TYPE(sum); idx += num_threads; } + +#if ADD_RMS + if (p.param3 != 0) { + // reduce the sum within each subgroup, then across subgroups + const uint NumSubgroups = num_threads / gl_SubgroupSize; + sum_sq = subgroupAdd(sum_sq); + if (gl_SubgroupInvocationID == 0) { + sumsh[gl_SubgroupID] = sum_sq; + } + barrier(); + [[unroll]] for (uint s = NumSubgroups / 2; s > 0; s >>= 1) { + if (gl_SubgroupID < s && gl_SubgroupInvocationID == 0) { + sum_sq += sumsh[gl_SubgroupID + s]; + sumsh[gl_SubgroupID] = sum_sq; + } + barrier(); + } + + if (gl_SubgroupID == 0 && gl_SubgroupInvocationID == 0) { + partial_sums[orig_idx / (num_iter * num_threads)] = sum_sq; + } + } +#endif } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp b/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp index 0c7acb7060..f2f218b04a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp @@ -3,6 +3,10 @@ #extension GL_EXT_shader_16bit_storage : require #extension GL_EXT_nonuniform_qualifier : enable #extension GL_EXT_control_flow_attributes : require +#if ADD_RMS +#extension GL_KHR_shader_subgroup_arithmetic : enable +#extension GL_KHR_shader_subgroup_basic : enable +#endif #include "rte.comp" #include "types.comp" @@ -14,12 +18,16 @@ layout (push_constant) uniform parameter2 uint ne20; uint ne21; uint ne22; uint ne23; // strides for srcs+dst - uint nb[8][4]; + uint nb[12][4]; + + uint rms_partials; } p; layout (binding = 0) readonly buffer A {A_TYPE data_a[];} a[]; layout (binding = 0) writeonly buffer D {D_TYPE data_d[];} d[]; +layout (binding = 0, std430) buffer PartialBuf {float partial_sums[];} partials[]; + layout(constant_id = 0) const uint num_srcs = 2; uint src_idx(uint s, uint i00, uint i01, uint i02, uint i03) { @@ -42,14 +50,22 @@ const uint num_threads = 256; layout(local_size_x = num_threads, local_size_y = 1, local_size_z = 1) in; +#if ADD_RMS +// XXX TODO this could be sized based on number of subgroups, but that't not considered a constant +shared FLOAT_TYPE sumsh[num_threads]; +#endif + void main() { uint idx = get_idx(); + uint orig_idx = idx; uint ne = p.ne20 * p.ne21 * p.ne22 * p.ne23; // num_threads * num_iter must equal 512, to match the wg_denoms and get_idx calculation const uint num_iter = 2; + FLOAT_TYPE sum_sq = 0; + [[unroll]] for (uint i = 0; i < num_iter; ++i) { if (idx >= ne) { continue; @@ -61,8 +77,32 @@ void main() { [[unroll]] for (uint s = 0; s < num_srcs; ++s) { sum += FLOAT_TYPE(a[s].data_a[src_idx(s, i00, i01, i02, i03)]); } + sum_sq += sum*sum; d[num_srcs].data_d[dst_idx(i00, i01, i02, i03)] = D_TYPE(sum); idx += num_threads; } + +#if ADD_RMS + if (p.rms_partials != 0) { + // reduce the sum within each subgroup, then across subgroups + const uint NumSubgroups = num_threads / gl_SubgroupSize; + sum_sq = subgroupAdd(sum_sq); + if (gl_SubgroupInvocationID == 0) { + sumsh[gl_SubgroupID] = sum_sq; + } + barrier(); + [[unroll]] for (uint s = NumSubgroups / 2; s > 0; s >>= 1) { + if (gl_SubgroupID < s && gl_SubgroupInvocationID == 0) { + sum_sq += sumsh[gl_SubgroupID + s]; + sumsh[gl_SubgroupID] = sum_sq; + } + barrier(); + } + + if (gl_SubgroupID == 0 && gl_SubgroupInvocationID == 0) { + partials[num_srcs + 1].partial_sums[orig_idx / (num_iter * num_threads)] = sum_sq; + } + } +#endif } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp index bdd7db2d69..41197e9301 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp @@ -10,9 +10,9 @@ layout (constant_id = 1) const bool do_multiply = false; layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; -shared FLOAT_TYPE sum[BLOCK_SIZE]; +shared FLOAT_TYPE sumsh[BLOCK_SIZE]; -void main() { +void rms_norm(uint num_iters) { const uint ncols = p.ne00; const uint nrows = gl_NumWorkGroups.x; const uint nchannels = gl_NumWorkGroups.y; @@ -30,38 +30,76 @@ void main() { uint32_t b_offset = src1_idx(0, row, channel, samp) + get_boffset(); uint32_t d_offset = ((samp*nchannels + channel)*nrows + row)*ncols + get_doffset(); - sum[tid] = FLOAT_TYPE(0.0f); // partial sum for thread in warp + FLOAT_TYPE sum = FLOAT_TYPE(0.0f); // partial sum for thread in warp - [[unroll]] for (uint col = tid; col < ncols; col += BLOCK_SIZE) { - const FLOAT_TYPE xi = FLOAT_TYPE(data_a[a_offset + col]); - sum[tid] += xi * xi; + [[unroll]] for (uint col = tid, idx = 0; idx < num_iters; col += BLOCK_SIZE, ++idx) { + FLOAT_TYPE xi = FLOAT_TYPE(0); + if (col < ncols) { + xi = FLOAT_TYPE(data_a[a_offset + col]); + } + sum += xi * xi; } + sumsh[tid] = sum; // sum up partial sums and write back result barrier(); [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { if (tid < s) { - sum[tid] += sum[tid + s]; + sum += sumsh[tid + s]; + sumsh[tid] = sum; } barrier(); } + sum = sumsh[0]; - const FLOAT_TYPE mean = sum[0] / FLOAT_TYPE(ncols); + const FLOAT_TYPE mean = sum / FLOAT_TYPE(ncols); const FLOAT_TYPE scale = inversesqrt(mean + FLOAT_TYPE(p.param1)); if (do_multiply) { if (ncols > p.ne10) { - [[unroll]] for (uint col = tid; col < ncols; col += BLOCK_SIZE) { + [[unroll]] for (uint col = tid, idx = 0; idx < num_iters; col += BLOCK_SIZE, ++idx) { + if (col >= ncols) { + continue; + } data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col]) * FLOAT_TYPE(data_b[b_offset + fastmod(col, p.ne10)])); } } else { - [[unroll]] for (uint col = tid; col < ncols; col += BLOCK_SIZE) { + [[unroll]] for (uint col = tid, idx = 0; idx < num_iters; col += BLOCK_SIZE, ++idx) { + if (col >= ncols) { + continue; + } data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col]) * FLOAT_TYPE(data_b[b_offset + col])); } } } else { - [[unroll]] for (uint col = tid; col < ncols; col += BLOCK_SIZE) { + [[unroll]] for (uint col = tid, idx = 0; idx < num_iters; col += BLOCK_SIZE, ++idx) { + if (col >= ncols) { + continue; + } data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col])); } } } + +void main() { + // instantiate the rms_norm function for several different + // dimensions, to allow loop unrolling + uint num_blocks = (p.ne00 + BLOCK_SIZE - 1) / BLOCK_SIZE; + if (num_blocks > 32) { + rms_norm(num_blocks); + } else if (num_blocks > 16) { + rms_norm(32); + } else if (num_blocks > 8) { + rms_norm(16); + } else if (num_blocks > 4) { + rms_norm(8); + } else if (num_blocks == 4) { + rms_norm(4); + } else if (num_blocks == 3) { + rms_norm(3); + } else if (num_blocks == 2) { + rms_norm(2); + } else if (num_blocks == 1) { + rms_norm(1); + } +} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_partials.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_partials.comp new file mode 100644 index 0000000000..ba4677c293 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm_partials.comp @@ -0,0 +1,65 @@ +#version 450 + +#include "generic_binary_head.comp" +#include "types.comp" + +#extension GL_EXT_control_flow_attributes : enable +#extension GL_KHR_shader_subgroup_arithmetic : enable +#extension GL_KHR_shader_subgroup_basic : enable + +#define BLOCK_SIZE 128 + +layout (constant_id = 1) const bool do_multiply = false; + +layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; + +layout (binding = 3, std430) readonly buffer PartialsBuf {float partial_sums[];}; + +shared FLOAT_TYPE sumsh[BLOCK_SIZE]; + +void main() { + const uint ncols = p.ne00; + const uint nrows = gl_NumWorkGroups.x; + const uint nchannels = gl_NumWorkGroups.y; + + const uint row = 0; + const uint channel = gl_WorkGroupID.y; + const uint samp = gl_WorkGroupID.z; + // The work is split across multiple workgroups in the x dimension. Each invocation + // processes one element + const uint tid = gl_GlobalInvocationID.x; + + const uint stride_row = p.nb01; + const uint stride_channel = p.nb02; + const uint stride_sample = p.nb03; + + uint32_t a_offset = samp*stride_sample + channel*stride_channel + row*stride_row + get_aoffset(); + uint32_t b_offset = src1_idx(0, row, channel, samp) + get_boffset(); + uint32_t d_offset = ((samp*nchannels + channel)*nrows + row)*ncols + get_doffset(); + + FLOAT_TYPE sum = FLOAT_TYPE(0.0f); // partial sum for thread in warp + + uint32_t num_partials = p.param3; + for (uint32_t i = gl_SubgroupInvocationID; i < num_partials; i += gl_SubgroupSize) { + sum += partial_sums[i]; + } + sum = subgroupAdd(sum); + + uint col = tid; + if (col >= ncols) { + return; + } + + const FLOAT_TYPE mean = sum / FLOAT_TYPE(ncols); + const FLOAT_TYPE scale = inversesqrt(mean + FLOAT_TYPE(p.param1)); + + if (do_multiply) { + if (ncols > p.ne10) { + data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col]) * FLOAT_TYPE(data_b[b_offset + fastmod(col, p.ne10)])); + } else { + data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col]) * FLOAT_TYPE(data_b[b_offset + col])); + } + } else { + data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col])); + } +} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 123ae04491..50a2774831 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -503,6 +503,7 @@ void process_shaders() { string_to_spv("norm_f32", "norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("group_norm_f32", "group_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("rms_norm_f32", "rms_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); + string_to_spv("rms_norm_partials_f32", "rms_norm_partials.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("rms_norm_back_f32", "rms_norm_back.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("l2_norm_f32", "l2_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"D_TYPE", "float"}})); @@ -538,13 +539,15 @@ void process_shaders() { s += std::string(dst_f16 ? "_f16" : "_f32"); return s; }; - for (std::string op : {"add", "sub", "mul", "div"}) { + for (std::string op : {"add", "sub", "mul", "div", "add_rms", }) { for (auto src0_f16 : {false, true}) { for (auto src1_f16 : {false, true}) { for (auto dst_f16 : {false, true}) { for (auto rte : {false, true}) { + auto source = op == "add_rms" ? std::string("add") : op; auto name = op + get_suffix(src0_f16, src1_f16, dst_f16) + (rte ? "_rte" : ""); - string_to_spv(name.c_str(), op + ".comp", {{"A_TYPE", get_type_str(src0_f16)}, {"B_TYPE", get_type_str(src1_f16)}, {"D_TYPE", get_type_str(dst_f16)}, {"FLOAT_TYPE", "float"}, {"RTE16", rte ? "1" : "0"}}); + auto add_rms = op == "add_rms" ? "1" : "0"; + string_to_spv(name.c_str(), source + ".comp", {{"A_TYPE", get_type_str(src0_f16)}, {"B_TYPE", get_type_str(src1_f16)}, {"D_TYPE", get_type_str(dst_f16)}, {"FLOAT_TYPE", "float"}, {"RTE16", rte ? "1" : "0"}, {"ADD_RMS" , add_rms}}); } } } @@ -687,7 +690,8 @@ void process_shaders() { string_to_spv("add_id_f32", "add_id.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); - string_to_spv("multi_add_f32", "multi_add.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}, {"RTE16", "1"}}); + string_to_spv("multi_add_f32", "multi_add.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}, {"RTE16", "1"}, {"ADD_RMS" , "0"}}); + string_to_spv("multi_add_rms_f32", "multi_add.comp", {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"FLOAT_TYPE", "float"}, {"RTE16", "1"}, {"ADD_RMS" , "1"}}); for (auto &c : compiles) { c.wait(); @@ -745,7 +749,7 @@ void write_output_files() { } std::string suffixes[2] = {"_f32", "_f16"}; - for (const char *op : {"add", "sub", "mul", "div"}) { + for (const char *op : {"add", "sub", "mul", "div", "add_rms"}) { fprintf(hdr, "extern unsigned char *%s_data[2][2][2][2];\n", op); fprintf(hdr, "extern uint64_t %s_len[2][2][2][2];\n", op); std::string data = "unsigned char *" + std::string(op) + "_data[2][2][2][2] = "; diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 2e53f8e21a..1e1e43f505 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2858,6 +2858,7 @@ struct test_rms_norm_mul_add : public test_case { const std::array ne; const float eps; const bool broadcast; + const bool multi_add; // test a sequence of adds feeding into rms_norm std::string op_desc(ggml_tensor * t) override { GGML_UNUSED(t); @@ -2867,13 +2868,13 @@ struct test_rms_norm_mul_add : public test_case { bool run_whole_graph() override { return true; } std::string vars() override { - return VARS_TO_STR4(type, ne, eps, broadcast); + return VARS_TO_STR5(type, ne, eps, broadcast, multi_add); } test_rms_norm_mul_add(ggml_type type = GGML_TYPE_F32, std::array ne = {64, 5, 4, 3}, - float eps = 1e-6f, bool broadcast = false) - : type(type), ne(ne), eps(eps), broadcast(broadcast) {} + float eps = 1e-6f, bool broadcast = false, bool multi_add = false) + : type(type), ne(ne), eps(eps), broadcast(broadcast), multi_add(multi_add) {} ggml_tensor * build_graph(ggml_context * ctx) override { std::array broadcast_dims = {ne[0]*2, ne[1]*3, ne[2]*3, ne[3]*4}; @@ -2891,6 +2892,9 @@ struct test_rms_norm_mul_add : public test_case { // Use a, b and c early, so we don't end up with an OP_NONE between rms_norm and mul a = ggml_add(ctx, ggml_add(ctx, a, b), c); + if (multi_add) { + a = ggml_add(ctx, ggml_add(ctx, a, b), c); + } ggml_tensor * out = ggml_add(ctx, ggml_mul(ctx, ggml_rms_norm(ctx, a, eps), b), c); ggml_set_name(out, "out"); @@ -5842,6 +5846,11 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_rms_norm_mul_add(GGML_TYPE_F32, {64, 5, 4, 3}, eps)); test_cases.emplace_back(new test_rms_norm_mul_add(GGML_TYPE_F32, {64, 5, 4, 3}, eps, true)); } + for (uint32_t n : {1, 511, 1025, 8192, 33*512}) { + for (bool multi_add : {false, true}) { + test_cases.emplace_back(new test_rms_norm_mul_add(GGML_TYPE_F32, {n, 1, 1, 1}, 1e-6f, false, multi_add)); + } + } test_cases.emplace_back(new test_l2_norm(GGML_TYPE_F32, {64, 5, 4, 3}, 1e-12f)); From 710dfc465a68f7443b87d9f792cffba00ed739fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 23 Aug 2025 21:37:06 +0200 Subject: [PATCH 090/174] CUDA: fix half2 -> half conversion for HIP (#15529) --- ggml/src/ggml-cuda/fattn-tile-f16.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/fattn-tile-f16.cu b/ggml/src/ggml-cuda/fattn-tile-f16.cu index 6239d184d0..a900799a99 100644 --- a/ggml/src/ggml-cuda/fattn-tile-f16.cu +++ b/ggml/src/ggml-cuda/fattn-tile-f16.cu @@ -258,7 +258,7 @@ static __global__ void flash_attn_tile_ext_f16( const half val = hexp(sink - kqmax[j0/nwarps]); kqsum[j0/nwarps] = kqsum[j0/nwarps] * KQ_max_scale; if (threadIdx.x == 0) { - kqsum[j0/nwarps].x = __hadd(kqsum[j0/nwarps].x, val); + kqsum[j0/nwarps].x = __hadd(__low2half(kqsum[j0/nwarps]), val); } #pragma unroll From e78cf0d4b1bdbbc2479f11d58ce0c8f51f755875 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 24 Aug 2025 03:48:21 -0500 Subject: [PATCH 091/174] vulkan: workaround MoltenVK compile failure in multi_add (#15506) * vulkan: workaround MoltenVK compile failure in multi_add * Update ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp Co-authored-by: 0cc4m --- ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp b/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp index f2f218b04a..854a2ad818 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/multi_add.comp @@ -23,8 +23,11 @@ layout (push_constant) uniform parameter2 uint rms_partials; } p; -layout (binding = 0) readonly buffer A {A_TYPE data_a[];} a[]; -layout (binding = 0) writeonly buffer D {D_TYPE data_d[];} d[]; +// Workaround for MoltenVK Bug, see https://github.com/ggml-org/llama.cpp/issues/15498 +// layout (binding = 0) readonly buffer A {A_TYPE data_a[];} a[]; +// layout (binding = 0) writeonly buffer D {D_TYPE data_d[];} d[]; +layout (binding = 0) buffer A {A_TYPE data_a[];} a[]; +layout (binding = 0) buffer D {D_TYPE data_d[];} d[]; layout (binding = 0, std430) buffer PartialBuf {float partial_sums[];} partials[]; From a9c6ffcbfacee092bfaaa400306fceda18199737 Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Sun, 24 Aug 2025 10:48:53 +0200 Subject: [PATCH 092/174] vulkan: enable Conv2D for Apple after MoltenVK fixed the bug (#15526) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 2c8d9ecaa0..c77d1d32a0 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -11853,14 +11853,13 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm // Op is disabled for Apple because it segfaults at pipeline create time on MoltenVK ggml_backend_vk_device_context * ctx = (ggml_backend_vk_device_context *)dev->context; const vk_device& device = ggml_vk_get_device(ctx->device); - bool is_Apple = ggml_vk_get_device(ctx->device)->vendor_id == VK_VENDOR_ID_APPLE; // Channel-contiguous format is not supported yet. return ((op->src[0]->type == GGML_TYPE_F32 || op->src[0]->type == GGML_TYPE_F16) && op->src[1]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32 && ggml_is_contiguous(op->src[0]) && ggml_is_contiguous(op->src[1]) && - ggml_is_contiguous(op)) && !is_Apple; + ggml_is_contiguous(op)); } default: return false; From c9a24fb93208fbbd3da6d903eb75431bfa97e59e Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 24 Aug 2025 04:24:25 -0500 Subject: [PATCH 093/174] vulkan: Support FA with any multiple of 8 head sizes (#15537) The scalar FA shader already handled multiples of 8. The coopmat1 FA shader assumed 16x16x16 and the shared memory allocations need the HSK dimensions padded to a multiple of 16. NVIDIA's coopmat2 implementation requires multiples of 16 for N and K, and needs the matrix dimensions padded and loads clamped. Store the FA pipelines in a map, indexed by the pipeline state. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 213 ++++++++---------- .../vulkan-shaders/flash_attn_base.comp | 4 + .../vulkan-shaders/flash_attn_cm1.comp | 23 +- .../vulkan-shaders/flash_attn_cm2.comp | 36 +-- tests/test-backend-ops.cpp | 4 +- 5 files changed, 143 insertions(+), 137 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index c77d1d32a0..a5406f7612 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -115,6 +115,8 @@ struct vk_pipeline_struct { uint32_t parameter_count; std::array wg_denoms; uint32_t align; + // true if fields have been set by ggml_vk_create_pipeline + bool initialized {}; // set to true to request the pipeline is compiled after the dryrun bool needed {}; // set to true when the shader has been compiled @@ -227,21 +229,6 @@ enum vk_device_architecture { NVIDIA_PRE_TURING, }; -// HSK x HSV -enum FaHeadSizes { - FA_HEAD_SIZE_64, - FA_HEAD_SIZE_80, - FA_HEAD_SIZE_96, - FA_HEAD_SIZE_112, - FA_HEAD_SIZE_128, - FA_HEAD_SIZE_192, - FA_HEAD_SIZE_192_128, - FA_HEAD_SIZE_256, - FA_HEAD_SIZE_576_512, - FA_HEAD_SIZE_UNSUPPORTED, - FA_HEAD_SIZE_COUNT = FA_HEAD_SIZE_UNSUPPORTED, -}; - static vk_device_architecture get_device_architecture(const vk::PhysicalDevice& device) { vk::PhysicalDeviceProperties props = device.getProperties(); @@ -351,6 +338,28 @@ enum dmmv_wg_sizes { DMMV_WG_SIZE_COUNT, }; +enum FaCodePath { + FA_SCALAR, + FA_COOPMAT1, + FA_COOPMAT2, +}; + +struct vk_fa_pipeline_state { + vk_fa_pipeline_state(uint32_t HSK, uint32_t HSV, bool small_rows, FaCodePath path, bool aligned, bool f32acc) + : HSK(HSK), HSV(HSV), small_rows(small_rows), path(path), aligned(aligned), f32acc(f32acc) {} + + uint32_t HSK, HSV; + bool small_rows; + FaCodePath path; + bool aligned; + bool f32acc; + + bool operator<(const vk_fa_pipeline_state &b) const { + return std::tie(HSK, HSV, small_rows, path, aligned, f32acc) < + std::tie(b.HSK, b.HSV, b.small_rows, b.path, b.aligned, b.f32acc); + } +}; + static constexpr uint32_t num_argsort_pipelines = 11; static constexpr uint32_t max_argsort_cols = 1 << (num_argsort_pipelines-1); @@ -541,16 +550,11 @@ struct vk_device_struct { vk_pipeline pipeline_conv2d_dw_whcn_f32, pipeline_conv2d_dw_whcn_f16_f32; vk_pipeline pipeline_conv2d_dw_cwhn_f32, pipeline_conv2d_dw_cwhn_f16_f32; - // [2][2][2] is for {f16acc,f32acc}x{large,small_rows}x{unaligned, aligned} - vk_pipeline pipeline_flash_attn_f32_f16_cm2[GGML_TYPE_COUNT][FA_HEAD_SIZE_COUNT][2][2][2]; - - vk_pipeline pipeline_flash_attn_f32_f16_cm1[GGML_TYPE_COUNT][FA_HEAD_SIZE_COUNT][2][2][2]; - - vk_pipeline pipeline_flash_attn_f32_f16[GGML_TYPE_COUNT][FA_HEAD_SIZE_COUNT][2][2][2]; + std::map pipeline_flash_attn_f32_f16[GGML_TYPE_COUNT]; vk_pipeline pipeline_flash_attn_split_k_reduce; - std::unordered_map pipelines; + std::vector all_pipelines; std::vector> pinned_memory; @@ -581,15 +585,15 @@ struct vk_device_struct { compute_queue.cmd_pool.destroy(device); transfer_queue.cmd_pool.destroy(device); - for (auto& pipeline : pipelines) { - if (pipeline.second.expired()) { + for (auto& pipeline : all_pipelines) { + if (pipeline.expired()) { continue; } - vk_pipeline pl = pipeline.second.lock(); + vk_pipeline pl = pipeline.lock(); ggml_vk_destroy_pipeline(device, pl); } - pipelines.clear(); + all_pipelines.clear(); device.destroyDescriptorSetLayout(dsl); @@ -1499,7 +1503,7 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin { std::lock_guard guard(device->mutex); - device->pipelines.insert({ pipeline->name, pipeline }); + device->all_pipelines.push_back(pipeline); } { @@ -1974,47 +1978,12 @@ static void ggml_vk_wait_events(vk_context& ctx, std::vector&& events ); } -enum FaCodePath { - FA_SCALAR, - FA_COOPMAT1, - FA_COOPMAT2, -}; - -static FaHeadSizes fa_get_head_sizes(uint32_t hsk, uint32_t hsv) { - if (hsk != 192 && hsk != 576 && hsk != hsv) { - return FA_HEAD_SIZE_UNSUPPORTED; - } - switch (hsk) { - case 64: return FA_HEAD_SIZE_64; - case 80: return FA_HEAD_SIZE_80; - case 96: return FA_HEAD_SIZE_96; - case 112: return FA_HEAD_SIZE_112; - case 128: return FA_HEAD_SIZE_128; - case 192: - if (hsv == 192) { - return FA_HEAD_SIZE_192; - } else if (hsv == 128) { - return FA_HEAD_SIZE_192_128; - } else { - return FA_HEAD_SIZE_UNSUPPORTED; - } - case 256: return FA_HEAD_SIZE_256; - case 576: - if (hsv == 512) { - return FA_HEAD_SIZE_576_512; - } else { - return FA_HEAD_SIZE_UNSUPPORTED; - } - default: return FA_HEAD_SIZE_UNSUPPORTED; - } -} - // number of rows/cols for flash attention shader static constexpr uint32_t flash_attention_num_small_rows = 32; static constexpr uint32_t scalar_flash_attention_num_small_rows = 1; static uint32_t get_fa_scalar_num_large_rows(uint32_t hsv) { - if (hsv >= 512) { + if (hsv >= 192) { return 2; } else { return 8; @@ -2044,7 +2013,13 @@ static std::array fa_rows_cols(FaCodePath path, uint32_t hsk, uint3 if (small_rows) { return {scalar_flash_attention_num_small_rows, 64}; } else { - return {get_fa_scalar_num_large_rows(hsv), 32}; + if ((hsv | hsk) & 8) { + // HSV/HSK not being a multiple of 16 makes D_split smaller, which makes cols_per_iter + // larger, and Bc needs to be >= cols_per_thread. 64 is large enough, 32 is not. + return {get_fa_scalar_num_large_rows(hsv), 64}; + } else { + return {get_fa_scalar_num_large_rows(hsv), 32}; + } } } @@ -2062,8 +2037,8 @@ static std::array fa_rows_cols(FaCodePath path, uint32_t hsk, uint3 } // small cols to reduce register count - if (ggml_is_quantized(type) || hsk >= 256) { - if (hsk >= 512) { + if (ggml_is_quantized(type) || hsk >= 256 || hsv >= 256) { + if (hsk >= 512 || hsv >= 512) { return {32, 32}; } else { return {64, 32}; @@ -2072,6 +2047,10 @@ static std::array fa_rows_cols(FaCodePath path, uint32_t hsk, uint3 return {64, 64}; } +static uint32_t fa_align(FaCodePath path, uint32_t hsk, uint32_t hsv, ggml_type type, bool small_rows) { + return fa_rows_cols(path, hsk, hsv, 0, type, small_rows)[1]; +} + static bool ggml_vk_matmul_shmem_support(const vk_device& device, const std::vector& warptile, bool mul_mat_id, ggml_type src0_type) { uint32_t lut_size = 0; @@ -2337,11 +2316,14 @@ static void ggml_vk_load_shaders(vk_device& device) { if (!pipeline) { pipeline = std::make_shared(); + } + if (!pipeline->initialized) { pipeline->name = name; pipeline->parameter_count = parameter_count; pipeline->push_constant_size = push_constant_size; pipeline->wg_denoms = wg_denoms; pipeline->align = align; + pipeline->initialized = true; } if (!pipeline->needed || pipeline->compiled) { @@ -2387,26 +2369,30 @@ static void ggml_vk_load_shaders(vk_device& device) { return {wg_size, rows_cols[0], rows_cols[1], hsk, hsv, clamp, D_split}; }; -#define CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, HSK, HSV, HEAD_SIZES) \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][0][0][0], "flash_attn_f32_f16_" #HEAD_SIZES "_f16acc" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,1,TYPE,false), fa_spec_constants(FAPATH, HSK,HSV,1,TYPE,false), 1, true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][0][0][1], "flash_attn_f32_f16_" #HEAD_SIZES "_aligned_f16acc" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,0,TYPE,false), fa_spec_constants(FAPATH, HSK,HSV,0,TYPE,false), fa_rows_cols(FAPATH,HSK,HSV,0,TYPE,false)[1], true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][1][0][0], "flash_attn_f32_f16_" #HEAD_SIZES "_f32acc" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,1,TYPE,false), fa_spec_constants(FAPATH, HSK,HSV,1,TYPE,false), 1, true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][1][0][1], "flash_attn_f32_f16_" #HEAD_SIZES "_aligned_f32acc" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,0,TYPE,false), fa_spec_constants(FAPATH, HSK,HSV,0,TYPE,false), fa_rows_cols(FAPATH,HSK,HSV,0,TYPE,false)[1], true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][0][1][0], "flash_attn_f32_f16_" #HEAD_SIZES "_f16acc_smallrows" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,1,TYPE,true), fa_spec_constants(FAPATH, HSK,HSV,1,TYPE,true), 1, true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][0][1][1], "flash_attn_f32_f16_" #HEAD_SIZES "_aligned_f16acc_smallrows" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,0,TYPE,true), fa_spec_constants(FAPATH, HSK,HSV,0,TYPE,true), fa_rows_cols(FAPATH,HSK,HSV,0,TYPE,true)[1], true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][1][1][0], "flash_attn_f32_f16_" #HEAD_SIZES "_f32acc_smallrows" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,1,TYPE,true), fa_spec_constants(FAPATH, HSK,HSV,1,TYPE,true), 1, true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - ggml_vk_create_pipeline(device, device->pipeline_flash_attn_f32_f16 ## SUFFIX[TYPE][FA_HEAD_SIZE_##HEAD_SIZES][1][1][1], "flash_attn_f32_f16_" #HEAD_SIZES "_aligned_f32acc_smallrows" #NAMELC #SUFFIX, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,0,TYPE,true), fa_spec_constants(FAPATH, HSK,HSV,0,TYPE,true), fa_rows_cols(FAPATH,HSK,HSV,0,TYPE,true)[1], true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ - #define CREATE_FA(TYPE, NAMELC, FAPATH, SUFFIX) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 64, 64, 64) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 80, 80, 80) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 96, 96, 96) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 112, 112, 112) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 128, 128, 128) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 192, 192, 192) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 192, 128, 192_128) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 256, 256, 256) \ - CREATE_FA2(TYPE, NAMELC, FAPATH, SUFFIX, 576, 512, 576_512) + for (auto &fa : device->pipeline_flash_attn_f32_f16[TYPE]) { \ + uint32_t HSK = fa.first.HSK; \ + uint32_t HSV = fa.first.HSV; \ + bool small_rows = fa.first.small_rows; \ + FaCodePath path = fa.first.path; \ + bool aligned = fa.first.aligned; \ + bool f32acc = fa.first.f32acc; \ + if (path == FAPATH) { \ + if (aligned) { \ + if (f32acc) { \ + ggml_vk_create_pipeline(device, fa.second, "flash_attn_f32_f16_aligned_f32acc" #NAMELC, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,0,TYPE,small_rows), fa_spec_constants(FAPATH, HSK,HSV,0,TYPE,small_rows), fa_align(FAPATH,HSK,HSV,TYPE,small_rows), true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ + } else { \ + ggml_vk_create_pipeline(device, fa.second, "flash_attn_f32_f16_aligned_f16acc" #NAMELC, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,0,TYPE,small_rows), fa_spec_constants(FAPATH, HSK,HSV,0,TYPE,small_rows), fa_align(FAPATH,HSK,HSV,TYPE,small_rows), true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ + } \ + } else { \ + if (f32acc) { \ + ggml_vk_create_pipeline(device, fa.second, "flash_attn_f32_f16_f32acc" #NAMELC, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,1,TYPE,small_rows), fa_spec_constants(FAPATH, HSK,HSV,1,TYPE,small_rows), 1, true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ + } else { \ + ggml_vk_create_pipeline(device, fa.second, "flash_attn_f32_f16_f16acc" #NAMELC, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _len, flash_attn_f32_f16_ ## NAMELC ## _f16acc ## SUFFIX ## _data, "main", 6, sizeof(vk_flash_attn_push_constants), fa_wg_denoms(FAPATH, HSK,HSV,1,TYPE,small_rows), fa_spec_constants(FAPATH, HSK,HSV,1,TYPE,small_rows), 1, true, FAPATH==FA_COOPMAT1, (FAPATH==FA_COOPMAT1 ? 32 : 0)); \ + } \ + } \ + } \ + } CREATE_FA(GGML_TYPE_F16, f16, FA_SCALAR, ) CREATE_FA(GGML_TYPE_Q4_0, q4_0, FA_SCALAR, ) @@ -2429,7 +2415,6 @@ static void ggml_vk_load_shaders(vk_device& device) { CREATE_FA(GGML_TYPE_IQ4_NL, iq4_nl, FA_COOPMAT2, _cm2) } #endif -#undef CREATE_FA2 #undef CREATE_FA #if defined(VK_NV_cooperative_matrix2) && defined(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) @@ -6731,18 +6716,21 @@ static bool ggml_vk_flash_attn_coopmat_shmem_support(const vk_device& device, co const uint32_t Br = coopmat1_flash_attention_num_large_rows; const uint32_t Bc = scalar_flash_attention_Bc; + const uint32_t hsk_pad = ROUNDUP_POW2(hsk, 16); + const uint32_t acctype = f32acc ? 4 : 2; const uint32_t f16vec4 = 8; const uint32_t tmpsh = wg_size * sizeof(float); const uint32_t tmpshv4 = wg_size * 4 * acctype; - const uint32_t Qf = Br * (hsk / 4 + 2) * f16vec4; + const uint32_t qstride = hsk_pad / 4 + 2; + const uint32_t Qf = Br * qstride * f16vec4; const uint32_t sfshstride = (hsk <= 128) ? (Br + 8) : Br; const uint32_t sfsh = Bc * sfshstride * acctype; - const uint32_t kshstride = hsk / 4 + 2; + const uint32_t kshstride = hsk_pad / 4 + 2; const uint32_t ksh = Bc * kshstride * f16vec4; const uint32_t slope = Br * sizeof(float); @@ -6853,7 +6841,6 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx workgroups_y /= N; } - vk_pipeline *pipelines; bool small_rows = N <= get_fa_num_small_rows(path); // coopmat1 does not actually support "small rows" (it needs 16 rows). @@ -6873,37 +6860,36 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx small_rows = true; } - bool f32acc = path == FA_SCALAR || dst->op_params[3] == GGML_PREC_F32; - - FaHeadSizes head_sizes = fa_get_head_sizes(k->ne[0], v->ne[0]); - - switch (path) { - case FA_SCALAR: - pipelines = &ctx->device->pipeline_flash_attn_f32_f16[k->type][head_sizes][f32acc][small_rows][0]; - break; - case FA_COOPMAT1: - pipelines = &ctx->device->pipeline_flash_attn_f32_f16_cm1[k->type][head_sizes][f32acc][small_rows][0]; - break; - case FA_COOPMAT2: - pipelines = &ctx->device->pipeline_flash_attn_f32_f16_cm2[k->type][head_sizes][f32acc][small_rows][0]; - break; - default: - GGML_ASSERT(0); - } - assert(pipelines); - const uint32_t q_stride = (uint32_t)(nbq1 / ggml_type_size(q->type)); const uint32_t k_stride = (uint32_t)(nbk1 / ggml_type_size(k->type)); const uint32_t v_stride = (uint32_t)(nbv1 / ggml_type_size(v->type)); - bool aligned = (KV % pipelines[1]->align) == 0 && + uint32_t alignment = fa_align(path, HSK, HSV, k->type, small_rows); + bool aligned = (KV % alignment) == 0 && // the "aligned" shader variant will forcibly align strides, for performance (q_stride & 7) == 0 && (k_stride & 7) == 0 && (v_stride & 7) == 0; + // Need to use the coopmat2 variant that clamps loads when HSK/HSV aren't sufficiently aligned. + if (((HSK | HSV) % 16) != 0 && path == FA_COOPMAT2) { + aligned = false; + } // mask dim1 is padded to 64, we rely on this to avoid clamping mask loads GGML_ASSERT((nem1 % GGML_KQ_MASK_PAD) == 0); - vk_pipeline pipeline = pipelines[aligned]; + bool f32acc = path == FA_SCALAR || dst->op_params[3] == GGML_PREC_F32; + + vk_fa_pipeline_state fa_pipeline_state(HSK, HSV, small_rows, path, aligned, f32acc); + + vk_pipeline pipeline = nullptr; + + auto &pipelines = ctx->device->pipeline_flash_attn_f32_f16[k->type]; + auto it = pipelines.find(fa_pipeline_state); + if (it != pipelines.end()) { + pipeline = it->second; + } else { + pipelines[fa_pipeline_state] = pipeline = std::make_shared(); + } + assert(pipeline); uint32_t split_kv = KV; @@ -6919,7 +6905,7 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx if (split_k > 1) { // Try to evenly split KV into split_k chunks, but it needs to be a multiple // of "align", so recompute split_k based on that. - split_kv = ROUNDUP_POW2(std::max(1u, KV / split_k), pipelines[1]->align); + split_kv = ROUNDUP_POW2(std::max(1u, KV / split_k), alignment); split_k = CEIL_DIV(KV, split_kv); workgroups_x = split_k; } @@ -11629,8 +11615,9 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm ggml_backend_vk_device_context * ctx = (ggml_backend_vk_device_context *)dev->context; auto device = ggml_vk_get_device(ctx->device); bool coopmat2 = device->coopmat2; - FaHeadSizes head_sizes = fa_get_head_sizes(op->src[1]->ne[0], op->src[2]->ne[0]); - if (head_sizes == FA_HEAD_SIZE_UNSUPPORTED) { + uint32_t HSK = op->src[1]->ne[0]; + uint32_t HSV = op->src[2]->ne[0]; + if ((HSK % 8) != 0 || (HSV % 8) != 0) { return false; } if (op->src[4] && op->src[4]->type != GGML_TYPE_F32) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.comp index b57c9dcfc4..f73e17e1fa 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_base.comp @@ -9,6 +9,10 @@ layout (constant_id = 4) const uint32_t HSV = 32; layout (constant_id = 5) const uint32_t Clamp = 0; layout (constant_id = 6) const uint32_t D_split = 16; +// Round up head sizes to a multiple of 16, for coopmat1/coopmat2 paths +const uint32_t HSK_pad = (HSK + 15) & ~15; +const uint32_t HSV_pad = (HSV + 15) & ~15; + layout (push_constant) uniform parameter { uint32_t N; uint32_t KV; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp index 81cc3f81fc..97c2a54129 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp @@ -46,14 +46,14 @@ const uint32_t MatBc = 16; shared FLOAT_TYPE tmpsh[gl_WorkGroupSize.x]; shared ACC_TYPEV4 tmpshv4[gl_WorkGroupSize.x]; -const uint32_t qstride = HSK / 4 + 2; // in units of f16vec4 +const uint32_t qstride = HSK_pad / 4 + 2; // in units of f16vec4 shared f16vec4 Qf[Br * qstride]; // Avoid padding for hsk==256 to make it fit in 48KB shmem. const uint32_t sfshstride = (HSK <= 128) ? (Br + 8) : Br; shared ACC_TYPE sfsh[Bc * sfshstride]; -const uint32_t kshstride = HSK / 4 + 2; // in units of f16vec4 +const uint32_t kshstride = HSK_pad / 4 + 2; // in units of f16vec4 shared f16vec4 ksh[Bc * kshstride]; shared float slope[Br]; @@ -74,6 +74,21 @@ void main() { #define tile_row(r) (row_tid * rows_per_thread + (r)) + // Zero-initialize shared memory for Q/K when HSK is not a multiple of 16 (HSK_pad > HSK). + if ((HSK % 16) != 0) { + [[unroll]] for (uint i = 0; i < Br * qstride; i += gl_WorkGroupSize.x) { + if (i + tid < Br * qstride) { + Qf[i + tid] = f16vec4(0); + } + } + [[unroll]] for (uint i = 0; i < Bc * kshstride; i += gl_WorkGroupSize.x) { + if (i + tid < Bc * kshstride) { + ksh[i + tid] = f16vec4(0); + } + } + barrier(); + } + uint32_t q_offset = (iq2*p.nb02+iq3*p.nb03) / 4; [[unroll]] for (uint32_t idx = 0; idx < Br * HSK / 4; idx += gl_WorkGroupSize.x) { @@ -151,14 +166,14 @@ void main() { } barrier(); - // K * Q^T -> S^T: Bc x HSK * HSK x Br -> Bc x Br + // K * Q^T -> S^T: Bc x HSK_pad * HSK_pad x Br -> Bc x Br // Bc split across workgroup (four subgroups), loop over HSK in chunks of 16: 16 x 16 * 16 x 16 -> 16 x 16 // This is written transposed in order to allow for N being 8 if implementations need it coopmat SfMat = coopmat(0); coopmat KMat; coopmat QMat; - for (uint32_t d = 0; d < HSK / 16; ++d) { + for (uint32_t d = 0; d < HSK_pad / 16; ++d) { coopMatLoad(QMat, Qf, d * 16 / 4, qstride, gl_CooperativeMatrixLayoutColumnMajor); uint coord = (gl_SubgroupID * MatBc) * kshstride + d * 16 / 4; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp index b0564ca0bf..77ae5ff01d 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp @@ -104,16 +104,16 @@ void main() { tensorLayoutK = setTensorLayoutStrideNV(tensorLayoutK, k_stride, 1); tensorLayoutV = setTensorLayoutStrideNV(tensorLayoutV, v_stride, 1); - coopmat Q; - coopmat Qf16; + coopmat Q; + coopmat Qf16; uint32_t q_offset = iq2*p.nb02+iq3*p.nb03; - coopMatLoadTensorNV(Q, data_q, q_offset, sliceTensorLayoutNV(tensorLayoutQ, i * Br, Br, 0, HSK)); + coopMatLoadTensorNV(Q, data_q, q_offset, sliceTensorLayoutNV(tensorLayoutQ, i * Br, Br, 0, HSK_pad)); - Qf16 = coopmat(Q); + Qf16 = coopmat(Q); Qf16 *= float16_t(p.scale); - coopmat O = coopmat(0); + coopmat O = coopmat(0); coopmat L, M; @@ -140,10 +140,10 @@ void main() { coopmat S = coopmat(0); - coopmat K_T; + coopmat K_T; uint32_t k_offset = ik2*p.nb12 + ik3*p.nb13; - coopMatLoadTensorNV(K_T, data_k, k_offset, sliceTensorLayoutNV(tensorLayoutK, j * Bc, Bc, 0, HSK), tensorViewTranspose DECODEFUNC); + coopMatLoadTensorNV(K_T, data_k, k_offset, sliceTensorLayoutNV(tensorLayoutK, j * Bc, Bc, 0, HSK_pad), tensorViewTranspose DECODEFUNC); S = coopMatMulAdd(Qf16, K_T, S); if (p.logit_softcap != 0.0f) { @@ -208,31 +208,31 @@ void main() { rowsum = coopmat(0.0); rowsum = coopMatMulAdd(P_A, One, rowsum); - coopmat V; + coopmat V; uint32_t v_offset = iv2*p.nb22 + iv3*p.nb23; - coopMatLoadTensorNV(V, data_v, v_offset, sliceTensorLayoutNV(tensorLayoutV, j * Bc, Bc, 0, HSV) DECODEFUNC); + coopMatLoadTensorNV(V, data_v, v_offset, sliceTensorLayoutNV(tensorLayoutV, j * Bc, Bc, 0, HSV_pad) DECODEFUNC); L = eM*L + rowsum; // This is the "diagonal" matrix in the paper, but since we do componentwise // multiply rather than matrix multiply it has the diagonal element smeared // across the row - coopmat eMdiag; + coopmat eMdiag; // resize eM by using smear/reduce coopMatReduceNV(eMdiag, eM, gl_CooperativeMatrixReduceRowNV, smearReduce); // multiply with fp16 accumulation, then add to O. - coopmat PV = coopmat(0); + coopmat PV = coopmat(0); PV = coopMatMulAdd(P_A, V, PV); - O = eMdiag * O + coopmat(PV); + O = eMdiag * O + coopmat(PV); } // If there is split_k, then the split_k resolve shader does the final // division by L. Store the intermediate O value and per-row m and L values. if (p.k_num > 1) { - coopmat O_D = coopmat(O); + coopmat O_D = coopmat(O); uint32_t o_offset = HSV * p.ne1 * (split_k_index + iq3 * p.k_num); coopMatPerElementNV(O_D, O_D, perElemOpGqaStore, o_offset, iq2, N); @@ -243,16 +243,16 @@ void main() { return; } - coopmat Ldiag; + coopmat Ldiag; // resize L by using smear/reduce coopMatReduceNV(Ldiag, L, gl_CooperativeMatrixReduceRowNV, smearReduce); if ((p.mask_n_head_log2 & SINK_ENABLE_BIT) != 0) { - coopmat S; + coopmat S; coopMatPerElementNV(S, S, perElemOpGetSink, iq2); - coopmat Mr; + coopmat Mr; // resize M by using smear/reduce coopMatReduceNV(Mr, M, gl_CooperativeMatrixReduceRowNV, smearReduce); @@ -285,7 +285,7 @@ void main() { uint32_t o_offset = iq3*p.ne2*p.ne1*HSV; - coopmat O_D = coopmat(O); + coopmat O_D = coopmat(O); if (p.gqa_ratio > 1) { coopMatPerElementNV(O_D, O_D, perElemOpGqaStore, o_offset, iq2, N); } else { @@ -295,6 +295,6 @@ void main() { // permute dimensions tensorViewNV<3, false, 1, 0, 2> tensorViewPermute = createTensorViewNV(3, false, 1, 0, 2); - coopMatStoreTensorNV(O_D, data_o, o_offset, sliceTensorLayoutNV(tensorLayoutD, i * Br, Br, iq2, N, 0, HSV), tensorViewPermute); + coopMatStoreTensorNV(O_D, data_o, o_offset, sliceTensorLayoutNV(tensorLayoutD, i * Br, Br, iq2, N, 0, HSV_pad), tensorViewPermute); } } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 1e1e43f505..74886b4549 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6239,8 +6239,8 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_timestep_embedding()); test_cases.emplace_back(new test_leaky_relu()); - for (int hsk : { 64, 80, 128, 192, 256, 576 }) { - for (int hsv : { 64, 80, 128, 192, 256, 512 }) { + for (int hsk : { 40, 64, 80, 128, 192, 256, 576 }) { + for (int hsv : { 40, 64, 80, 128, 192, 256, 512 }) { if (hsk != 192 && hsk != 576 && hsk != hsv) continue; if (hsk == 192 && (hsv != 128 && hsv != 192)) continue; if (hsk == 576 && hsv != 512) continue; // DeepSeek MLA From b730706a49e576fb882dc34d9966345778b3ab0b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 24 Aug 2025 13:07:07 +0300 Subject: [PATCH 094/174] kv-cache : support layer reuse (#15504) * kv-cache : support layer reuse ggml-ci * cont : update comments [no ci] --- src/llama-hparams.cpp | 25 +++++++++++++ src/llama-hparams.h | 6 +++ src/llama-kv-cache-iswa.cpp | 31 ++++++++++++---- src/llama-kv-cache-iswa.h | 6 ++- src/llama-kv-cache.cpp | 68 +++++++++++++++++----------------- src/llama-kv-cache.h | 28 +++++++------- src/llama-memory-hybrid.cpp | 57 ++++++++++++++-------------- src/llama-memory-hybrid.h | 40 +++++++++----------- src/llama-memory-recurrent.cpp | 14 +++---- src/llama-memory-recurrent.h | 18 ++++----- src/llama-memory.h | 8 ++++ src/llama-model.cpp | 38 +++++++++++++------ 12 files changed, 203 insertions(+), 136 deletions(-) diff --git a/src/llama-hparams.cpp b/src/llama-hparams.cpp index 7a06368dcd..91636572da 100644 --- a/src/llama-hparams.cpp +++ b/src/llama-hparams.cpp @@ -153,3 +153,28 @@ bool llama_hparams::is_swa(uint32_t il) const { GGML_ABORT("fatal error"); } + +bool llama_hparams::has_kv(uint32_t il) const { + if (n_layer_kv_from_start >= 0) { + if (il < (uint32_t) n_layer_kv_from_start) { + return true; + } + + return false; + } + + // by default, all layers have kv + return true; +} + +uint32_t llama_hparams::n_layer_kv() const { + uint32_t res = 0; + + for (uint32_t il = 0; il < n_layer; ++il) { + if (has_kv(il)) { + res++; + } + } + + return res; +} diff --git a/src/llama-hparams.h b/src/llama-hparams.h index bd23122443..60415f0c20 100644 --- a/src/llama-hparams.h +++ b/src/llama-hparams.h @@ -41,6 +41,7 @@ struct llama_hparams { uint32_t n_embd; uint32_t n_embd_features = 0; uint32_t n_layer; + int32_t n_layer_kv_from_start = -1; // if non-negative, the first n_layer_kv_from_start layers have KV cache uint32_t n_rot; uint32_t n_embd_head_k; // dimension of keys (d_k). d_q is assumed to be the same, but there are n_head q heads, and only n_head_kv k-v heads uint32_t n_embd_head_v; // dimension of values (d_v) aka n_embd_head @@ -221,6 +222,11 @@ struct llama_hparams { uint32_t n_pos_per_embd() const; bool is_swa(uint32_t il) const; + + bool has_kv(uint32_t il) const; + + // number of layers for which has_kv() returns true + uint32_t n_layer_kv() const; }; static_assert(std::is_trivially_copyable::value, "llama_hparams must be trivially copyable"); diff --git a/src/llama-kv-cache-iswa.cpp b/src/llama-kv-cache-iswa.cpp index a11ee5a5b1..d7342914c6 100644 --- a/src/llama-kv-cache-iswa.cpp +++ b/src/llama-kv-cache-iswa.cpp @@ -22,9 +22,26 @@ llama_kv_cache_iswa::llama_kv_cache_iswa( uint32_t kv_size, uint32_t n_seq_max, uint32_t n_ubatch, - uint32_t n_pad) : hparams(model.hparams), unified(unified) { - llama_kv_cache::layer_filter_cb filter_base = [&](int32_t il) { return !model.hparams.is_swa(il); }; - llama_kv_cache::layer_filter_cb filter_swa = [&](int32_t il) { return model.hparams.is_swa(il); }; + uint32_t n_pad, + const layer_filter_cb & filter, + const layer_reuse_cb & reuse) : hparams(model.hparams), unified(unified) { + + // chain filters + const layer_filter_cb filter_base = [&](int32_t il) { + if (filter && !filter(il)) { + return false; + } + + return !model.hparams.is_swa(il); + }; + + const layer_filter_cb filter_swa = [&](int32_t il) { + if (filter && !filter(il)) { + return false; + } + + return model.hparams.is_swa(il); + }; const uint32_t size_base = kv_size; @@ -41,16 +58,16 @@ llama_kv_cache_iswa::llama_kv_cache_iswa( LLAMA_LOG_INFO("%s: creating non-SWA KV cache, size = %u cells\n", __func__, size_base); kv_base = std::make_unique( - model, std::move(filter_base), type_k, type_v, + model, type_k, type_v, v_trans, offload, unified, size_base, n_seq_max, n_pad, - 0, LLAMA_SWA_TYPE_NONE); + 0, LLAMA_SWA_TYPE_NONE, filter_base, reuse); LLAMA_LOG_INFO("%s: creating SWA KV cache, size = %u cells\n", __func__, size_swa); kv_swa = std::make_unique( - model, std::move(filter_swa), type_k, type_v, + model, type_k, type_v, v_trans, offload, unified, size_swa, n_seq_max, n_pad, - hparams.n_swa, hparams.swa_type); + hparams.n_swa, hparams.swa_type, filter_swa, reuse); } void llama_kv_cache_iswa::clear(bool data) { diff --git a/src/llama-kv-cache-iswa.h b/src/llama-kv-cache-iswa.h index dd673f18e7..5ed134b795 100644 --- a/src/llama-kv-cache-iswa.h +++ b/src/llama-kv-cache-iswa.h @@ -20,11 +20,13 @@ public: bool v_trans, bool offload, bool swa_full, - bool , + bool unified, uint32_t kv_size, uint32_t n_seq_max, uint32_t n_ubatch, - uint32_t n_pad); + uint32_t n_pad, + const layer_filter_cb & filter, + const layer_reuse_cb & reuse); ~llama_kv_cache_iswa() = default; diff --git a/src/llama-kv-cache.cpp b/src/llama-kv-cache.cpp index 70ddd5f4b9..d7ab56ccd9 100644 --- a/src/llama-kv-cache.cpp +++ b/src/llama-kv-cache.cpp @@ -17,32 +17,25 @@ // llama_kv_cache::llama_kv_cache( - const llama_model & model, - layer_filter_cb && filter, - ggml_type type_k, - ggml_type type_v, - bool v_trans, - bool offload, - bool unified, - uint32_t kv_size, - uint32_t n_seq_max, - uint32_t n_pad, - uint32_t n_swa, - llama_swa_type swa_type) : + const llama_model & model, + ggml_type type_k, + ggml_type type_v, + bool v_trans, + bool offload, + bool unified, + uint32_t kv_size, + uint32_t n_seq_max, + uint32_t n_pad, + uint32_t n_swa, + llama_swa_type swa_type, + const layer_filter_cb & filter, + const layer_reuse_cb & reuse) : model(model), hparams(model.hparams), v_trans(v_trans), n_seq_max(n_seq_max), n_stream(unified ? 1 : n_seq_max), n_pad(n_pad), n_swa(n_swa), swa_type(swa_type) { GGML_ASSERT(kv_size % n_pad == 0); - // TODO: this is temporary until we support passing reuse layer filters [KV_REUSE] - auto n_layer_cache = hparams.n_layer; - if (model.arch == LLM_ARCH_GEMMA3N) { - n_layer_cache = 20; - } - if (model.arch == LLM_ARCH_GLM4_MOE) { - // GLM-4.5: Only process up to last layer, skip final NextN layer - n_layer_cache = hparams.n_layer - hparams.nextn_predict_layers; - } + const uint32_t n_layer_kv = hparams.n_layer_kv(); // create a context for each buffer type std::map ctx_map; @@ -50,7 +43,7 @@ llama_kv_cache::llama_kv_cache( auto it = ctx_map.find(buft); if (it == ctx_map.end()) { ggml_init_params params = { - /*.mem_size =*/ size_t(2u*(1 + n_stream)*n_layer_cache*ggml_tensor_overhead()), + /*.mem_size =*/ size_t(2u*(1 + n_stream)*n_layer_kv*ggml_tensor_overhead()), /*.mem_buffer =*/ NULL, /*.no_alloc =*/ true, }; @@ -97,9 +90,14 @@ llama_kv_cache::llama_kv_cache( __func__, hparams.n_embd_v_gqa_max()); } - for (uint32_t il = 0; il < n_layer_cache; il++) { + for (uint32_t il = 0; il < hparams.n_layer; il++) { + if (!hparams.has_kv(il)) { + LLAMA_LOG_DEBUG("%s: layer %3d: does not have KV cache\n", __func__, il); + continue; + } + if (filter && !filter(il)) { - LLAMA_LOG_DEBUG("%s: layer %3d: skipped\n", __func__, il); + LLAMA_LOG_DEBUG("%s: layer %3d: filtered\n", __func__, il); continue; } @@ -147,23 +145,27 @@ llama_kv_cache::llama_kv_cache( layers.push_back({ il, k, v, k_stream, v_stream, }); } - // TODO: this is temporary until we support passing reuse layer filters [KV_REUSE] - if (model.arch == LLM_ARCH_GEMMA3N) { - LLAMA_LOG_DEBUG("%s: GEMMA3N: reuse layers [%d, %d]\n", __func__, n_layer_cache, hparams.n_layer - 1); + if (reuse) { + LLAMA_LOG_DEBUG("%s: reusing layers:\n", __func__); - for (uint32_t il = n_layer_cache; il < hparams.n_layer; il++) { - if (filter && !filter(il)) { - LLAMA_LOG_DEBUG("%s: layer %3d: skipped\n", __func__, il); + for (uint32_t il = 0; il < hparams.n_layer; il++) { + const int32_t il_reuse = reuse(il); + + if (il_reuse < 0) { + LLAMA_LOG_DEBUG("%s: - layer %3d: no reuse\n", __func__, il); continue; } - const bool is_swa = hparams.is_swa(il); - const uint32_t il_reuse = n_layer_cache - (is_swa ? 2 : 1); + if (filter && !filter(il)) { + LLAMA_LOG_DEBUG("%s: - layer %3d: filtered\n", __func__, il); + continue; + } GGML_ASSERT(map_layer_ids.find(il_reuse) != map_layer_ids.end()); + map_layer_ids[il] = map_layer_ids[il_reuse]; - LLAMA_LOG_DEBUG("%s: layer %3d: reuse layer %d, isw = %d\n", __func__, il, il_reuse, is_swa); + LLAMA_LOG_DEBUG("%s: - layer %3d: reuse layer %d, is_swa = %d\n", __func__, il, il_reuse, hparams.is_swa(il)); } } diff --git a/src/llama-kv-cache.h b/src/llama-kv-cache.h index 297a0973dd..76a5cb1e28 100644 --- a/src/llama-kv-cache.h +++ b/src/llama-kv-cache.h @@ -21,9 +21,6 @@ class llama_kv_cache : public llama_memory_i { public: static uint32_t get_padding(const llama_cparams & cparams); - // this callback is used to filter out layers that should not be included in the cache - using layer_filter_cb = std::function; - struct stream_copy_info { bool empty() const { assert(ssrc.size() == sdst.size()); @@ -82,18 +79,19 @@ public: using slot_info_vec_t = std::vector; llama_kv_cache( - const llama_model & model, - layer_filter_cb && filter, - ggml_type type_k, - ggml_type type_v, - bool v_trans, - bool offload, - bool unified, - uint32_t kv_size, - uint32_t n_seq_max, - uint32_t n_pad, - uint32_t n_swa, - llama_swa_type swa_type); + const llama_model & model, + ggml_type type_k, + ggml_type type_v, + bool v_trans, + bool offload, + bool unified, + uint32_t kv_size, + uint32_t n_seq_max, + uint32_t n_pad, + uint32_t n_swa, + llama_swa_type swa_type, + const layer_filter_cb & filter, + const layer_reuse_cb & reuse); ~llama_kv_cache() = default; diff --git a/src/llama-memory-hybrid.cpp b/src/llama-memory-hybrid.cpp index f8303dacbf..ba61ebaa88 100644 --- a/src/llama-memory-hybrid.cpp +++ b/src/llama-memory-hybrid.cpp @@ -9,32 +9,29 @@ // llama_memory_hybrid::llama_memory_hybrid( - const llama_model & model, - /* attn */ - ggml_type type_k, - ggml_type type_v, - bool v_trans, - uint32_t kv_size, - uint32_t n_pad, - uint32_t n_swa, - llama_swa_type swa_type, - /* recurrent */ - ggml_type type_r, - ggml_type type_s, - uint32_t rs_size, - /* common */ - uint32_t n_seq_max, - bool offload, - bool unified, - /* layer filters */ - layer_filter_cb && filter_attn, - layer_filter_cb && filter_recr) : + const llama_model & model, + /* attn */ + ggml_type type_k, + ggml_type type_v, + bool v_trans, + uint32_t kv_size, + uint32_t n_pad, + uint32_t n_swa, + llama_swa_type swa_type, + /* recurrent */ + ggml_type type_r, + ggml_type type_s, + uint32_t rs_size, + /* common */ + uint32_t n_seq_max, + bool offload, + bool unified, + /* layer filters */ + const layer_filter_cb & filter_attn, + const layer_filter_cb & filter_recr) : hparams(model.hparams), mem_attn(new llama_kv_cache( model, - filter_attn == nullptr ? - [&](int32_t il) { return !hparams.is_recurrent(il); } - : filter_attn, type_k, type_v, v_trans, @@ -44,18 +41,22 @@ llama_memory_hybrid::llama_memory_hybrid( n_seq_max, n_pad, n_swa, - swa_type + swa_type, + filter_attn == nullptr ? + [&](int32_t il) { return !hparams.is_recurrent(il); } + : filter_attn, + nullptr )), mem_recr(new llama_memory_recurrent( model, - filter_recr == nullptr ? - [&](int32_t il) { return hparams.is_recurrent(il); } - : filter_recr, type_r, type_s, offload, rs_size, - n_seq_max + n_seq_max, + filter_recr == nullptr ? + [&](int32_t il) { return hparams.is_recurrent(il); } + : filter_recr )) {} llama_memory_context_ptr llama_memory_hybrid::init_batch(llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { diff --git a/src/llama-memory-hybrid.h b/src/llama-memory-hybrid.h index e9c64ee40a..11a3565178 100644 --- a/src/llama-memory-hybrid.h +++ b/src/llama-memory-hybrid.h @@ -18,31 +18,27 @@ class llama_memory_hybrid : public llama_memory_i { public: - - // this callback is used to filter out layers that should not be included in the cache - using layer_filter_cb = std::function; - llama_memory_hybrid( const llama_model & model, /* attn */ - ggml_type type_k, - ggml_type type_v, - bool v_trans, - uint32_t kv_size, - uint32_t n_pad, - uint32_t n_swa, - llama_swa_type swa_type, - /* recurrent */ - ggml_type type_r, - ggml_type type_s, - uint32_t rs_size, - /* common */ - uint32_t n_seq_max, - bool offload, - bool unified, - /* layer filters */ - layer_filter_cb && filter_attn = nullptr, - layer_filter_cb && filter_recr = nullptr); + ggml_type type_k, + ggml_type type_v, + bool v_trans, + uint32_t kv_size, + uint32_t n_pad, + uint32_t n_swa, + llama_swa_type swa_type, + /* recurrent */ + ggml_type type_r, + ggml_type type_s, + uint32_t rs_size, + /* common */ + uint32_t n_seq_max, + bool offload, + bool unified, + /* layer filters */ + const layer_filter_cb & filter_attn = nullptr, + const layer_filter_cb & filter_recr = nullptr); ~llama_memory_hybrid() = default; diff --git a/src/llama-memory-recurrent.cpp b/src/llama-memory-recurrent.cpp index 849675c418..08716ed91a 100644 --- a/src/llama-memory-recurrent.cpp +++ b/src/llama-memory-recurrent.cpp @@ -16,13 +16,13 @@ // llama_memory_recurrent::llama_memory_recurrent( - const llama_model & model, - layer_filter_cb && filter, - ggml_type type_r, - ggml_type type_s, - bool offload, - uint32_t mem_size, - uint32_t n_seq_max) : hparams(model.hparams), n_seq_max(n_seq_max) { + const llama_model & model, + ggml_type type_r, + ggml_type type_s, + bool offload, + uint32_t mem_size, + uint32_t n_seq_max, + const layer_filter_cb & filter) : hparams(model.hparams), n_seq_max(n_seq_max) { const int32_t n_layer = hparams.n_layer; head = 0; diff --git a/src/llama-memory-recurrent.h b/src/llama-memory-recurrent.h index c8e8623602..c4daf00495 100644 --- a/src/llama-memory-recurrent.h +++ b/src/llama-memory-recurrent.h @@ -15,18 +15,14 @@ // see the implementation of llama_kv_cache_context_i for an example how to do it class llama_memory_recurrent : public llama_memory_i { public: - - // this callback is used to filter out layers that should not be included in the cache - using layer_filter_cb = std::function; - llama_memory_recurrent( - const llama_model & model, - layer_filter_cb && filter, - ggml_type type_r, - ggml_type type_s, - bool offload, - uint32_t mem_size, - uint32_t n_seq_max); + const llama_model & model, + ggml_type type_r, + ggml_type type_s, + bool offload, + uint32_t mem_size, + uint32_t n_seq_max, + const layer_filter_cb & filter); ~llama_memory_recurrent() = default; diff --git a/src/llama-memory.h b/src/llama-memory.h index 94d858bccc..ccd1f073b0 100644 --- a/src/llama-memory.h +++ b/src/llama-memory.h @@ -3,6 +3,7 @@ #include "llama.h" #include +#include struct llama_ubatch; @@ -64,6 +65,13 @@ using llama_memory_context_ptr = std::unique_ptr; // general concept of LLM memory // the KV cache is a type of LLM memory, but there can be other types struct llama_memory_i { + // this callback is used to filter out layers that should not be included in the cache + using layer_filter_cb = std::function; + + // this callback is used to specify which layers should reuse memory from other layers + // return negative value to indicate that the layer il should not reuse memory + using layer_reuse_cb = std::function; + virtual ~llama_memory_i() = default; // split the input batch into a set of ubatches and verify that they can fit into the cache diff --git a/src/llama-model.cpp b/src/llama-model.cpp index d5148f7df3..7d3429617b 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -1115,6 +1115,7 @@ void llama_model::load_hparams(llama_model_loader & ml) { hparams.swa_type = LLAMA_SWA_TYPE_STANDARD; hparams.set_swa_pattern(5); + hparams.n_layer_kv_from_start = 20; hparams.rope_freq_base_train_swa = 10000.0f; hparams.rope_freq_scale_train_swa = 1.0f; hparams.f_attention_scale = 1.0f; @@ -1474,12 +1475,15 @@ void llama_model::load_hparams(llama_model_loader & ml) { // Expert gating function (GLM-4.5 uses sigmoid) ml.get_key(LLM_KV_EXPERT_GATING_FUNC, hparams.expert_gating_func, false); if (hparams.expert_gating_func == LLAMA_EXPERT_GATING_FUNC_TYPE_NONE) { - hparams.expert_gating_func = LLAMA_EXPERT_GATING_FUNC_TYPE_SIGMOID; + hparams.expert_gating_func = LLAMA_EXPERT_GATING_FUNC_TYPE_SIGMOID; } // NextN/MTP parameters ml.get_key(LLM_KV_NEXTN_PREDICT_LAYERS, hparams.nextn_predict_layers, false); + // TODO: when MTP is implemented, this should probably be updated if needed + hparams.n_layer_kv_from_start = hparams.n_layer - hparams.nextn_predict_layers; + switch (hparams.n_layer) { case 47: type = LLM_TYPE_106B_A12B; break; // GLM-4.5-Air (46 layers + 1 NextN layer) case 93: type = LLM_TYPE_355B_A32B; break; // GLM-4.5 (92 layers + 1 NextN layer) @@ -10524,7 +10528,6 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { const int64_t n_embd_altup; const int64_t n_altup; const int i_altup_act; - const int n_layer_kv = 20; // number of layers having KV [KV_REUSE] const int n_layer_sparsity = 10; // number of layers using activation sparsity const float f_sparsity_std_mul = 1.6448533535003662f; // std_multiplier = normal_dist.icdf(0.95) @@ -10574,8 +10577,6 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { for (int il = 0; il < n_layer; ++il) { // this block is made to be closely resemble Gemma3p5DecoderLayer on python code - const bool has_kv = (il < n_layer_kv); - const float freq_base_l = model.get_rope_freq_base (cparams, il); const float freq_scale_l = model.get_rope_freq_scale(cparams, il); @@ -10595,7 +10596,7 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { ggml_tensor * laurel_out = laurel(cur, il); // [n_embd, n_tokens] // self-attention - if (has_kv) { + if (hparams.has_kv(il)) { // compute Q and K and RoPE them ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); cb(Qcur, "Qcur", il); @@ -10635,7 +10636,7 @@ struct llm_build_gemma3n_iswa : public llm_graph_context { model.layers[il].wo, NULL, Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, hparams.f_attention_scale, il); } else { - // no KV layers + // reuse KV cache of earlier layers ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); cb(Qcur, "Qcur", il); Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); @@ -18256,12 +18257,12 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, if (llm_arch_is_recurrent(arch)) { res = new llama_memory_recurrent( *this, - nullptr, GGML_TYPE_F32, GGML_TYPE_F32, cparams.offload_kqv, std::max((uint32_t) 1, cparams.n_seq_max), - cparams.n_seq_max); + cparams.n_seq_max, + nullptr); } else if (llm_arch_is_hybrid(arch)) { const auto padding = llama_kv_cache::get_padding(cparams); @@ -18302,6 +18303,18 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, LLAMA_LOG_DEBUG("%s: n_ctx = %u (padded)\n", __func__, cparams.n_ctx); + llama_memory_i::layer_reuse_cb reuse = nullptr; + + if (arch == LLM_ARCH_GEMMA3N) { + reuse = [&](int32_t il) { + if (il >= (int32_t) hparams.n_layer_kv_from_start) { + return (int32_t) hparams.n_layer_kv_from_start - (hparams.is_swa(il) ? 2 : 1); + } + + return -1; + }; + } + if (hparams.swa_type != LLAMA_SWA_TYPE_NONE) { GGML_ASSERT(hparams.is_swa_any()); @@ -18316,13 +18329,14 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, n_ctx_per_stream, cparams.n_seq_max, cparams.n_ubatch, - padding); + padding, + nullptr, + reuse); } else { GGML_ASSERT(!hparams.is_swa_any()); res = new llama_kv_cache( *this, - nullptr, params.type_k, params.type_v, !cparams.flash_attn, @@ -18332,7 +18346,9 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, cparams.n_seq_max, padding, hparams.n_swa, - hparams.swa_type); + hparams.swa_type, + nullptr, + nullptr); } } } From 043fb27d3808766d8ea8195bbd12359727264402 Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Sun, 24 Aug 2025 19:36:36 +0200 Subject: [PATCH 095/174] vulkan: apply MUL_MAT_ID subgroup optimization to non-coopmat devices (#15524) * vulkan: use subgroup function for mul_mat_id shader even without coopmat * vulkan: fix compile warnings * vulkan: properly check for subgroup size control and require full subgroups for subgroup mul_mat_id * vulkan: disable subgroup mul_mat_id on devices with subgroups < 16 --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 428 ++++++++++-------- .../ggml-vulkan/vulkan-shaders/mul_mm.comp | 11 +- .../vulkan-shaders/vulkan-shaders-gen.cpp | 38 +- 3 files changed, 282 insertions(+), 195 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index a5406f7612..4b959d844f 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -388,6 +388,7 @@ struct vk_device_struct { bool float_controls_rte_fp16; bool subgroup_add; bool subgroup_shuffle; + bool subgroup_ballot; bool multi_add; bool add_rms_fusion; @@ -1044,7 +1045,7 @@ struct vk_op_sum_rows_push_constants uint32_t ne0_1mp, ne0_1L; }; -vk_op_sum_rows_push_constants vk_op_sum_rows_push_constants_init(const ggml_tensor * src, const ggml_tensor * dst, int64_t n_cols) { +static vk_op_sum_rows_push_constants vk_op_sum_rows_push_constants_init(const ggml_tensor * src, const ggml_tensor * dst, int64_t n_cols) { uint32_t type_size = (uint32_t)ggml_type_size(src->type); vk_op_sum_rows_push_constants p = {}; p.n_cols = (uint32_t)n_cols; @@ -2176,8 +2177,17 @@ static void ggml_vk_load_shaders(vk_device& device) { const uint32_t subgroup_size_16 = std::max(device->subgroup_size, 16u); const uint32_t subgroup_size_32 = std::max(device->subgroup_size, 32u); + const uint32_t mul_mat_subgroup_size = (device->vendor_id == VK_VENDOR_ID_INTEL && device->subgroup_size_control) ? device->subgroup_min_size : device->subgroup_size; + const uint32_t mul_mat_subgroup_size_8 = std::max(mul_mat_subgroup_size, 8u); + const uint32_t mul_mat_subgroup_size_16 = std::max(mul_mat_subgroup_size, 16u); + const uint32_t mul_mat_subgroup_size_32 = std::max(mul_mat_subgroup_size, 32u); + + const bool subgroup_min_size_16 = (!device->subgroup_size_control && device->subgroup_size >= 16) || + (device->subgroup_size_control && device->subgroup_min_size <= 16 && device->subgroup_max_size >= 16); + // mulmat std::vector l_warptile, m_warptile, s_warptile, + l_warptile_id, m_warptile_id, s_warptile_id, l_warptile_mmq, m_warptile_mmq, s_warptile_mmq, l_warptile_mmq_int, m_warptile_mmq_int, s_warptile_mmq_int, l_warptile_mmq_k, m_warptile_mmq_k, s_warptile_mmq_k, @@ -2248,9 +2258,18 @@ static void ggml_vk_load_shaders(vk_device& device) { m_warptile_mmq_int = { 128, 64, 64, 32, subgroup_size_8, 32, 2, 2, 2, 1, subgroup_size_8 }; s_warptile_mmq_int = { subgroup_size_32, 32, 32, 32, 32, 32, 2, 2, 1, 1, subgroup_size_8 }; + l_warptile_id = { 128, 128, 128, 16, mul_mat_subgroup_size_16 * 2, 64, 2, tm_l, tn_l, tk_l, mul_mat_subgroup_size_16 }; + m_warptile_id = { 128, 64, 64, 16, mul_mat_subgroup_size_16, 32, 2, tm_m, tn_m, tk_m, mul_mat_subgroup_size_16 }; + s_warptile_id = { mul_mat_subgroup_size_16, 32, 32, 16, 32, 32, 2, tm_s, tn_s, tk_s, mul_mat_subgroup_size_16 }; + + l_warptile_mmqid = { 128, 128, 128, 32, mul_mat_subgroup_size_8 * 2, 64, 2, tm_l, tn_l, tk_l, mul_mat_subgroup_size_8 }; + m_warptile_mmqid = { 128, 64, 64, 32, mul_mat_subgroup_size_8, 32, 2, tm_m, tn_m, tk_m, mul_mat_subgroup_size_8 }; + s_warptile_mmqid = { mul_mat_subgroup_size_32, 32, 32, 32, 32, 32, 2, tm_s, tn_s, tk_s, mul_mat_subgroup_size_8 }; + // chip specific tuning if ((device->architecture == AMD_GCN) && (device->driver_id != vk::DriverId::eAmdProprietary)) { m_warptile_mmq = m_warptile_mmq_int = { 256, 64, 64, 32, 16, 16, 2, 2, 2, 1, 16 }; + m_warptile_mmqid = { 256, 64, 64, 32, 16, 16, 2, 2, 2, 1, 16 }; } l_mmq_wg_denoms = l_wg_denoms = {128, 128, 1 }; @@ -2276,14 +2295,14 @@ static void ggml_vk_load_shaders(vk_device& device) { } // Disable mul_mat_id if not enough shared memory is available - if (!ggml_vk_matmul_shmem_support(device, s_warptile_mmq, true, t)) { + if (!ggml_vk_matmul_shmem_support(device, s_warptile_mmqid, true, t)) { device->mul_mat_id_s[i] = false; device->mul_mat_id_m[i] = false; device->mul_mat_id_l[i] = false; - } else if (!ggml_vk_matmul_shmem_support(device, m_warptile_mmq, true, t)) { + } else if (!ggml_vk_matmul_shmem_support(device, m_warptile_mmqid, true, t)) { device->mul_mat_id_m[i] = false; device->mul_mat_id_l[i] = false; - } else if (!ggml_vk_matmul_shmem_support(device, l_warptile_mmq, true, t)) { + } else if (!ggml_vk_matmul_shmem_support(device, l_warptile_mmqid, true, t)) { device->mul_mat_id_l[i] = false; } } @@ -2461,32 +2480,34 @@ static void ggml_vk_load_shaders(vk_device& device) { CREATE_MM2(pipeline_dequant_mul_mat_mat_f16[GGML_TYPE_IQ4_NL], matmul_iq4_nl_f16, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3) CREATE_MM2(pipeline_dequant_mul_mat_mat_f16[GGML_TYPE_MXFP4], matmul_mxfp4_f16, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3) - CREATE_MM2(pipeline_matmul_id_f16, matmul_id_f16, wg_denoms, warptile, vk_mat_mat_id_push_constants, 4) + GGML_ASSERT(device->subgroup_ballot); + + CREATE_MM2(pipeline_matmul_id_f16, matmul_id_subgroup_f16, wg_denoms, warptile, vk_mat_mat_id_push_constants, 4) #if defined(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) if (device->coopmat_bf16_support) { - CREATE_MM(pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4) + CREATE_MM(pipeline_matmul_id_bf16, matmul_id_subgroup_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4) } #endif - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) - CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_subgroup_q4_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_subgroup_q4_1_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_subgroup_q5_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_subgroup_q5_1_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_subgroup_q8_0_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_subgroup_q2_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_subgroup_q3_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_subgroup_q4_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_subgroup_q5_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_subgroup_q6_k_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_subgroup_iq1_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_subgroup_iq1_m_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_subgroup_iq2_xxs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_subgroup_iq2_xs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_subgroup_iq2_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_subgroup_iq3_xxs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_subgroup_iq3_s_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_subgroup_iq4_xs_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_subgroup_iq4_nl_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) + CREATE_MM2(pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_subgroup_mxfp4_f16, mmqid_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4) #undef CREATE_MM #undef CREATE_MM2 } else @@ -2573,55 +2594,56 @@ static void ggml_vk_load_shaders(vk_device& device) { CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat[GGML_TYPE_MXFP4].f32acc, matmul_mxfp4_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); } - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); + GGML_ASSERT(device->subgroup_ballot); + + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_subgroup_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_subgroup_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_subgroup_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); #if defined(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) if (device->coopmat_bf16_support) { - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_subgroup_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); } #endif - CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - - CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_subgroup_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_subgroup_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_subgroup_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_subgroup_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_subgroup_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_subgroup_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_subgroup_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_subgroup_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_subgroup_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_subgroup_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_subgroup_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_subgroup_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_subgroup_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_subgroup_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_subgroup_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_subgroup_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_subgroup_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_subgroup_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_subgroup_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_subgroup_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); #undef CREATE_MM2 #undef CREATE_MM } else #endif // defined(VK_KHR_cooperative_matrix) && defined(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) if (device->fp16) { // Create 6 variants, {s,m,l}x{unaligned,aligned} -#define CREATE_MM(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ +#define CREATE_MM(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ if (device->mul_mat ## ID ## _l[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->l, #NAMELC #F16ACC "_l", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, 1); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->l, #NAMELC #F16ACC "_l", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _m[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->m, #NAMELC #F16ACC "_m", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, 1); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->m, #NAMELC #F16ACC "_m", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _s[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->s, #NAMELC #F16ACC "_s", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, 1); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->s, #NAMELC #F16ACC "_s", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _l[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_l, #NAMELC #F16ACC "_aligned_l", NAMELC ## _aligned ## F16ACC ## _len, NAMELC ## _aligned ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, l_align); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_l, #NAMELC #F16ACC "_aligned_l", NAMELC ## _aligned ## F16ACC ## _len, NAMELC ## _aligned ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, l_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _m[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_m, #NAMELC #F16ACC "_aligned_m", NAMELC ## _aligned ## F16ACC ## _len, NAMELC ## _aligned ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, m_align); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_m, #NAMELC #F16ACC "_aligned_m", NAMELC ## _aligned ## F16ACC ## _len, NAMELC ## _aligned ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, m_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _s[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_s, #NAMELC #F16ACC "_aligned_s", NAMELC ## _aligned ## F16ACC ## _len, NAMELC ## _aligned ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, s_align); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_s, #NAMELC #F16ACC "_aligned_s", NAMELC ## _aligned ## F16ACC ## _len, NAMELC ## _aligned ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, s_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ #define CREATE_MMQ(TYPE, PIPELINE_NAME, NAMELC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ if (device->mul_mat ## ID ## _l[TYPE]) { \ @@ -2638,38 +2660,38 @@ static void ggml_vk_load_shaders(vk_device& device) { } \ // Create 2 variants, {f16,f32} accumulator -#define CREATE_MM2(TYPE, PIPELINE_NAME, NAMELC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ - CREATE_MM(TYPE, PIPELINE_NAME . f16acc, NAMELC, _f16acc, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ - CREATE_MM(TYPE, PIPELINE_NAME . f32acc, NAMELC, , WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ +#define CREATE_MM2(TYPE, PIPELINE_NAME, NAMELC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ + CREATE_MM(TYPE, PIPELINE_NAME . f16acc, NAMELC, _f16acc, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ + CREATE_MM(TYPE, PIPELINE_NAME . f32acc, NAMELC, , WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32, matmul_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32_f16, matmul_f32_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_f16, matmul_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_f16_f32, matmul_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32, matmul_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32_f16, matmul_f32_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_f16, matmul_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_f16_f32, matmul_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0], matmul_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1], matmul_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0], matmul_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1], matmul_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0], matmul_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); + CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0], matmul_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1], matmul_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0], matmul_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1], matmul_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0], matmul_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K], matmul_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K], matmul_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K], matmul_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K], matmul_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K], matmul_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_S], matmul_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_M], matmul_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XXS], matmul_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XS], matmul_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_S], matmul_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_XXS], matmul_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_S], matmul_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_XS], matmul_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_NL], matmul_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat[GGML_TYPE_MXFP4], matmul_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); + CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K], matmul_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K], matmul_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K], matmul_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K], matmul_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K], matmul_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_S], matmul_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_M], matmul_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XXS], matmul_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XS], matmul_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_S], matmul_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_XXS], matmul_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_S], matmul_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_XS], matmul_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_NL], matmul_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat[GGML_TYPE_MXFP4], matmul_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); #if defined(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) if (device->integer_dot_product) { @@ -2681,51 +2703,77 @@ static void ggml_vk_load_shaders(vk_device& device) { } #endif - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); + if (device->subgroup_ballot && device->subgroup_require_full_support && subgroup_min_size_16) { + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_subgroup_f32_f32, , wg_denoms, warptile_id, vk_mat_mat_push_constants, 4, _id, mul_mat_subgroup_size_16); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_subgroup_f16, wg_denoms, warptile_id, vk_mat_mat_push_constants, 4, _id, mul_mat_subgroup_size_16); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_subgroup_f16_f32, wg_denoms, warptile_id, vk_mat_mat_push_constants, 4, _id, mul_mat_subgroup_size_16); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_subgroup_bf16, , wg_denoms, warptile_id, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size_16); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_subgroup_q4_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_subgroup_q4_1_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_subgroup_q5_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_subgroup_q5_1_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_subgroup_q8_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_subgroup_q2_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_subgroup_q3_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_subgroup_q4_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_subgroup_q5_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_subgroup_q6_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_subgroup_iq1_s_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_subgroup_iq1_m_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_subgroup_iq2_xxs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_subgroup_iq2_xs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_subgroup_iq2_s_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_subgroup_iq3_xxs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_subgroup_iq3_s_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_subgroup_iq4_xs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_subgroup_iq4_nl_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_subgroup_mxfp4_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + } else { + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id, 0); - CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - - CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0], matmul_id_q5_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1], matmul_id_q5_1_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0], matmul_id_q8_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K], matmul_id_q2_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K], matmul_id_q3_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K], matmul_id_q4_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K], matmul_id_q5_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K], matmul_id_q6_k_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S], matmul_id_iq1_s_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M], matmul_id_iq1_m_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS], matmul_id_iq2_xxs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS], matmul_id_iq2_xs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S], matmul_id_iq2_s_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS], matmul_id_iq3_xxs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S], matmul_id_iq3_s_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS], matmul_id_iq4_xs_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL], matmul_id_iq4_nl_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM2(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4], matmul_id_mxfp4_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + } #undef CREATE_MM2 #undef CREATE_MMQ #undef CREATE_MM } else { // Create 6 variants, {s,m,l}x{unaligned,aligned} -#define CREATE_MM(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ +#define CREATE_MM(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ if (device->mul_mat ## ID ## _l[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->l, #NAMELC #F16ACC "_l", NAMELC ## F16ACC ## _fp32_len, NAMELC ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, 1); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->l, #NAMELC #F16ACC "_l", NAMELC ## F16ACC ## _fp32_len, NAMELC ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, 1, REQSUBGROUPSIZE > 0, false, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _m[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->m, #NAMELC #F16ACC "_m", NAMELC ## F16ACC ## _fp32_len, NAMELC ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, 1); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->m, #NAMELC #F16ACC "_m", NAMELC ## F16ACC ## _fp32_len, NAMELC ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, 1, REQSUBGROUPSIZE > 0, false, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _s[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->s, #NAMELC #F16ACC "_s", NAMELC ## F16ACC ## _fp32_len, NAMELC ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, 1); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->s, #NAMELC #F16ACC "_s", NAMELC ## F16ACC ## _fp32_len, NAMELC ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, 1, REQSUBGROUPSIZE > 0, false, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _l[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_l, #NAMELC #F16ACC "_aligned_l", NAMELC ## _aligned ## F16ACC ## _fp32_len, NAMELC ## _aligned ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, l_align); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_l, #NAMELC #F16ACC "_aligned_l", NAMELC ## _aligned ## F16ACC ## _fp32_len, NAMELC ## _aligned ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, l_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _m[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_m, #NAMELC #F16ACC "_aligned_m", NAMELC ## _aligned ## F16ACC ## _fp32_len, NAMELC ## _aligned ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, m_align); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_m, #NAMELC #F16ACC "_aligned_m", NAMELC ## _aligned ## F16ACC ## _fp32_len, NAMELC ## _aligned ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, m_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _s[TYPE]) \ - ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_s, #NAMELC #F16ACC "_aligned_s", NAMELC ## _aligned ## F16ACC ## _fp32_len, NAMELC ## _aligned ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, s_align); \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_s, #NAMELC #F16ACC "_aligned_s", NAMELC ## _aligned ## F16ACC ## _fp32_len, NAMELC ## _aligned ## F16ACC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, s_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ #define CREATE_MMQ(TYPE, PIPELINE_NAME, NAMELC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID) \ if (device->mul_mat ## ID ## _l[TYPE]) \ @@ -2735,34 +2783,34 @@ static void ggml_vk_load_shaders(vk_device& device) { if (device->mul_mat ## ID ## _s[TYPE]) \ ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->s, #NAMELC "_s", NAMELC ## _fp32_len, NAMELC ## _fp32_data, "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, 1); \ - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32, matmul_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32_f16, matmul_f32_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_F16, pipeline_matmul_f16.f32acc, matmul_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_F16, pipeline_matmul_f16_f32.f32acc, matmul_f16_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32, matmul_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_f32_f16, matmul_f32_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_F16, pipeline_matmul_f16.f32acc, matmul_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_F16, pipeline_matmul_f16_f32.f32acc, matmul_f16_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0].f32acc, matmul_q4_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1].f32acc, matmul_q4_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0].f32acc, matmul_q5_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1].f32acc, matmul_q5_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0].f32acc, matmul_q8_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); + CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0].f32acc, matmul_q4_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1].f32acc, matmul_q4_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0].f32acc, matmul_q5_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1].f32acc, matmul_q5_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0].f32acc, matmul_q8_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K].f32acc, matmul_q2_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K].f32acc, matmul_q3_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K].f32acc, matmul_q4_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K].f32acc, matmul_q5_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K].f32acc, matmul_q6_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_S].f32acc, matmul_iq1_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_M].f32acc, matmul_iq1_m_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XXS].f32acc, matmul_iq2_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XS].f32acc, matmul_iq2_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_S].f32acc, matmul_iq2_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_XXS].f32acc, matmul_iq3_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_S].f32acc, matmul_iq3_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_XS].f32acc, matmul_iq4_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_NL].f32acc, matmul_iq4_nl_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat[GGML_TYPE_MXFP4].f32acc, matmul_mxfp4_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, ); + CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K].f32acc, matmul_q2_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K].f32acc, matmul_q3_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K].f32acc, matmul_q4_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K].f32acc, matmul_q5_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K].f32acc, matmul_q6_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_S].f32acc, matmul_iq1_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ1_M].f32acc, matmul_iq1_m_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XXS].f32acc, matmul_iq2_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_XS].f32acc, matmul_iq2_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ2_S].f32acc, matmul_iq2_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_XXS].f32acc, matmul_iq3_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ3_S].f32acc, matmul_iq3_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_XS].f32acc, matmul_iq4_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat[GGML_TYPE_IQ4_NL].f32acc, matmul_iq4_nl_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat[GGML_TYPE_MXFP4].f32acc, matmul_mxfp4_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); #if defined(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) if (device->integer_dot_product) { @@ -2774,33 +2822,59 @@ static void ggml_vk_load_shaders(vk_device& device) { } #endif - CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_F16, pipeline_matmul_id_f16.f32acc, matmul_id_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_F16, pipeline_matmul_id_f16_f32.f32acc, matmul_id_f16_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id); + if (device->subgroup_ballot && device->subgroup_require_full_support && subgroup_min_size_16) { + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_subgroup_f32_f32, , wg_denoms, warptile_id, vk_mat_mat_push_constants, 4, _id, mul_mat_subgroup_size_16); + CREATE_MM(GGML_TYPE_F16, pipeline_matmul_id_f16.f32acc, matmul_id_subgroup_f16, , wg_denoms, warptile_id, vk_mat_mat_push_constants, 4, _id, mul_mat_subgroup_size_16); + CREATE_MM(GGML_TYPE_F16, pipeline_matmul_id_f16_f32.f32acc, matmul_id_subgroup_f16_f32, , wg_denoms, warptile_id, vk_mat_mat_push_constants, 4, _id, mul_mat_subgroup_size_16); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_subgroup_bf16, , wg_denoms, warptile_id, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size_16); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f32acc, matmul_id_subgroup_q4_0_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f32acc, matmul_id_subgroup_q4_1_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f32acc, matmul_id_subgroup_q5_0_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f32acc, matmul_id_subgroup_q5_1_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f32acc, matmul_id_subgroup_q8_0_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f32acc, matmul_id_subgroup_q2_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f32acc, matmul_id_subgroup_q3_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f32acc, matmul_id_subgroup_q4_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f32acc, matmul_id_subgroup_q5_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f32acc, matmul_id_subgroup_q6_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f32acc, matmul_id_subgroup_iq1_s_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f32acc, matmul_id_subgroup_iq1_m_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f32acc, matmul_id_subgroup_iq2_xxs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f32acc, matmul_id_subgroup_iq2_xs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f32acc, matmul_id_subgroup_iq2_s_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f32acc, matmul_id_subgroup_iq3_xxs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f32acc, matmul_id_subgroup_iq3_s_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f32acc, matmul_id_subgroup_iq4_xs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f32acc, matmul_id_subgroup_iq4_nl_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f32acc, matmul_id_subgroup_mxfp4_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, mul_mat_subgroup_size); + } else { + CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_f32_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_F16, pipeline_matmul_id_f16.f32acc, matmul_id_f16, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_F16, pipeline_matmul_id_f16_f32.f32acc, matmul_id_f16_f32, , wg_denoms, warptile, vk_mat_mat_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id, 0); - CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f32acc, matmul_id_q4_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f32acc, matmul_id_q4_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f32acc, matmul_id_q5_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f32acc, matmul_id_q5_1_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f32acc, matmul_id_q8_0_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - - CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f32acc, matmul_id_q2_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f32acc, matmul_id_q3_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f32acc, matmul_id_q4_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f32acc, matmul_id_q5_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f32acc, matmul_id_q6_k_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f32acc, matmul_id_iq1_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f32acc, matmul_id_iq1_m_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f32acc, matmul_id_iq2_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f32acc, matmul_id_iq2_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f32acc, matmul_id_iq2_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f32acc, matmul_id_iq3_xxs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f32acc, matmul_id_iq3_s_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f32acc, matmul_id_iq4_xs_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f32acc, matmul_id_iq4_nl_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); - CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f32acc, matmul_id_mxfp4_f32, , mmq_wg_denoms, warptile_mmq, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0].f32acc, matmul_id_q4_0_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1].f32acc, matmul_id_q4_1_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0].f32acc, matmul_id_q5_0_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1].f32acc, matmul_id_q5_1_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0].f32acc, matmul_id_q8_0_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K].f32acc, matmul_id_q2_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K].f32acc, matmul_id_q3_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K].f32acc, matmul_id_q4_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q5_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K].f32acc, matmul_id_q5_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_Q6_K, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K].f32acc, matmul_id_q6_k_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ1_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_S].f32acc, matmul_id_iq1_s_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ1_M, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ1_M].f32acc, matmul_id_iq1_m_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ2_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XXS].f32acc, matmul_id_iq2_xxs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ2_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_XS].f32acc, matmul_id_iq2_xs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ2_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ2_S].f32acc, matmul_id_iq2_s_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ3_XXS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_XXS].f32acc, matmul_id_iq3_xxs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ3_S, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ3_S].f32acc, matmul_id_iq3_s_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ4_XS, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_XS].f32acc, matmul_id_iq4_xs_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_IQ4_NL, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_IQ4_NL].f32acc, matmul_id_iq4_nl_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + CREATE_MM(GGML_TYPE_MXFP4, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_MXFP4].f32acc, matmul_id_mxfp4_f32, , mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, 4, _id, 0); + } } // reusing CREATE_MM from the fp32 path if ((device->coopmat2 || device->coopmat_support) @@ -2817,8 +2891,8 @@ static void ggml_vk_load_shaders(vk_device& device) { m_wg_denoms = { 64, 64, 1 }; s_wg_denoms = { 32, 32, 1 }; - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, ); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, 4, _id, 0); } #undef CREATE_MM @@ -3506,6 +3580,9 @@ static vk_device ggml_vk_get_device(size_t idx) { device->subgroup_shuffle = (vk11_props.subgroupSupportedStages & vk::ShaderStageFlagBits::eCompute) && (vk11_props.subgroupSupportedOperations & vk::SubgroupFeatureFlagBits::eShuffle); + device->subgroup_ballot = (vk11_props.subgroupSupportedStages & vk::ShaderStageFlagBits::eCompute) && + (vk11_props.subgroupSupportedOperations & vk::SubgroupFeatureFlagBits::eBallot); + const bool force_disable_f16 = getenv("GGML_VK_DISABLE_F16") != nullptr; device->fp16 = !force_disable_f16 && fp16_storage && fp16_compute; @@ -3655,9 +3732,7 @@ static vk_device ggml_vk_get_device(size_t idx) { (subgroup_size_control_props.requiredSubgroupSizeStages & vk::ShaderStageFlagBits::eCompute) && subgroup_size_control_features.subgroupSizeControl; - if (device->subgroup_size_control) { - device->subgroup_require_full_support = subgroup_size_control_features.computeFullSubgroups; - } + device->subgroup_require_full_support = subgroup_size_control_features.computeFullSubgroups; #if defined(VK_KHR_cooperative_matrix) device->coopmat_support = device->coopmat_support && coopmat_features.cooperativeMatrix; @@ -10194,12 +10269,9 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr } } if (need_sync) { - VK_LOG_DEBUG("node_idx=" << i << " sync"); ctx->unsynced_nodes_written.clear(); ctx->unsynced_nodes_read.clear(); ggml_vk_sync_buffers(ctx, compute_ctx); - } else { - VK_LOG_DEBUG("node_idx=" << i << " unsynced"); } // Add the last fused node and all fused source nodes to the unsynchronized list. const ggml_tensor * last_node = cgraph->nodes[node_idx + ctx->num_additional_fused_ops]; @@ -12241,7 +12313,7 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * } else if (tensor->op == GGML_OP_CONCAT) { tensor_clone = ggml_concat(ggml_ctx, src_clone[0], src_clone[1], *(int *)tensor->op_params); } else if (tensor->op == GGML_OP_UPSCALE) { - tensor_clone = ggml_upscale_ext(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], (ggml_scale_mode) tensor->op_params[0]); + tensor_clone = ggml_interpolate(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], (ggml_scale_mode) tensor->op_params[0]); } else if (tensor->op == GGML_OP_SCALE) { const float * params = (const float *)tensor->op_params; tensor_clone = ggml_scale_bias(ggml_ctx, src_clone[0], params[0], params[1]); @@ -12480,11 +12552,9 @@ static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_cgraph * if (tensor->op == GGML_OP_TRANSPOSE || tensor->op == GGML_OP_SET_ROWS) { return; } - bool fused_rms_norm_mul = false; if (ctx->num_additional_fused_ops == 1 && tensor->op == GGML_OP_RMS_NORM && cgraph->nodes[tensor_idx + 1]->op == GGML_OP_MUL) { - fused_rms_norm_mul = true; tensor = cgraph->nodes[tensor_idx + 1]; } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index d57cc6bdec..40c0d9b0c5 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -17,6 +17,9 @@ #ifdef COOPMAT #extension GL_KHR_cooperative_matrix : enable #extension GL_KHR_memory_scope_semantics : enable +#endif + +#if defined(COOPMAT) || defined(MUL_MAT_ID_USE_SUBGROUPS) #extension GL_KHR_shader_subgroup_basic : enable #extension GL_KHR_shader_subgroup_ballot : enable #endif @@ -108,8 +111,10 @@ shared FLOAT_TYPE buf_b[BN * SHMEM_STRIDE]; #ifdef MUL_MAT_ID shared u16vec2 row_ids[4096]; uint _ne1; -#ifdef COOPMAT + +#ifdef MUL_MAT_ID_USE_SUBGROUPS shared uvec4 ballots_sh[NUM_WARPS]; + void load_row_ids(uint expert_idx, bool nei0_is_pow2) { _ne1 = 0; uint num_elements = p.nei1 * p.nei0; @@ -168,7 +173,7 @@ void load_row_ids(uint expert_idx, bool nei0_is_pow2) { } barrier(); } -#endif +#endif // MUL_MAT_ID_USE_SUBGROUPS #endif // MUL_MAT_ID #ifdef COOPMAT @@ -235,7 +240,7 @@ void main() { const uint loadstride_b = gl_WorkGroupSize.x * LOAD_VEC_B / BK; #ifdef MUL_MAT_ID -#ifdef COOPMAT +#ifdef MUL_MAT_ID_USE_SUBGROUPS if (bitCount(p.nei0) == 1) { load_row_ids(expert_idx, true); } else { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 50a2774831..a973625857 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -68,6 +68,12 @@ const std::vector type_names = { "bf16", }; +enum MatMulIdType { + NONE, + DEFAULT, + SUBGROUP, +}; + namespace { void execute_command(const std::string& command, std::string& stdout_str, std::string& stderr_str) { #ifdef _WIN32 @@ -293,7 +299,7 @@ void string_to_spv(const std::string& _name, const std::string& in_fname, const compiles.push_back(std::async(string_to_spv_func, _name, in_fname, defines, fp16, coopmat, coopmat2, f16acc)); } -void matmul_shaders(bool fp16, bool matmul_id, bool coopmat, bool coopmat2, bool f16acc) { +void matmul_shaders(bool fp16, MatMulIdType matmul_id_type, bool coopmat, bool coopmat2, bool f16acc) { std::string load_vec = coopmat2 ? "1" : fp16 ? "8" : "4"; std::string aligned_b_type_f32 = coopmat2 ? "float" : fp16 ? "mat2x4" : "vec4"; std::string aligned_b_type_f16 = coopmat2 ? "float16_t" : fp16 ? "f16mat2x4" : "f16vec4"; @@ -303,9 +309,13 @@ void matmul_shaders(bool fp16, bool matmul_id, bool coopmat, bool coopmat2, bool }; std::string shader_name = "matmul"; - if (matmul_id) { + if (matmul_id_type == MatMulIdType::DEFAULT) { base_dict["MUL_MAT_ID"] = "1"; shader_name = "matmul_id"; + } else if (matmul_id_type == MatMulIdType::SUBGROUP) { + base_dict["MUL_MAT_ID"] = "1"; + base_dict["MUL_MAT_ID_USE_SUBGROUPS"] = "1"; + shader_name = "matmul_id_subgroup"; } if (fp16) { @@ -389,7 +399,7 @@ void matmul_shaders(bool fp16, bool matmul_id, bool coopmat, bool coopmat2, bool } #if defined(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) - if (!coopmat && !coopmat2 && !matmul_id && (tname == "q4_0" || tname == "q4_1" || tname == "q5_0" || tname == "q5_1" || tname == "q8_0")) { + if (!coopmat && !coopmat2 && matmul_id_type == MatMulIdType::NONE && (tname == "q4_0" || tname == "q4_1" || tname == "q5_0" || tname == "q5_1" || tname == "q8_0")) { string_to_spv(shader_name + "_" + tname + "_q8_1", "mul_mmq.comp", merge_maps(base_dict, {{"FLOAT_TYPE", FLOAT_TYPE(tname)}, {data_a_key, "1"}, {"D_TYPE", "float"},}), fp16, coopmat, coopmat2, f16acc); } #endif @@ -401,26 +411,28 @@ void process_shaders() { std::map base_dict = {{"FLOAT_TYPE", "float"}}; // matmul - for (const auto& matmul_id : {false, true}) { + for (const MatMulIdType& matmul_id_type : {MatMulIdType::NONE, MatMulIdType::DEFAULT, MatMulIdType::SUBGROUP}) { // No coopmats // fp32 - matmul_shaders(false, matmul_id, false, false, false); + matmul_shaders(false, matmul_id_type, false, false, false); // fp16, fp32acc and fp16acc - matmul_shaders(true, matmul_id, false, false, false); - matmul_shaders(true, matmul_id, false, false, true); + matmul_shaders(true, matmul_id_type, false, false, false); + matmul_shaders(true, matmul_id_type, false, false, true); + if (matmul_id_type != MatMulIdType::DEFAULT) { #if defined(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) - // Coopmat, fp32acc and fp16acc - matmul_shaders(true, matmul_id, true, false, false); - matmul_shaders(true, matmul_id, true, false, true); + // Coopmat, fp32acc and fp16acc + matmul_shaders(true, matmul_id_type, true, false, false); + matmul_shaders(true, matmul_id_type, true, false, true); #endif #if defined(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) - // Coopmat2, fp32acc and fp16acc - matmul_shaders(true, matmul_id, false, true, false); - matmul_shaders(true, matmul_id, false, true, true); + // Coopmat2, fp32acc and fp16acc + matmul_shaders(true, matmul_id_type, false, true, false); + matmul_shaders(true, matmul_id_type, false, true, true); #endif + } } // flash attention From c247d06f38fc09059c9607a28aa44f5ff6be208d Mon Sep 17 00:00:00 2001 From: Chenguang Li <757486878@qq.com> Date: Mon, 25 Aug 2025 10:32:21 +0800 Subject: [PATCH 096/174] CANN: ROPE cache sin/cos repeat (#15501) Signed-off-by: noemotiovon <757486878@qq.com> --- ggml/src/ggml-cann/aclnn_ops.cpp | 195 ++++++++++++++++++------------- ggml/src/ggml-cann/common.h | 28 +++-- 2 files changed, 135 insertions(+), 88 deletions(-) diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index 8f65904b8f..bc33b99d96 100755 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -1257,12 +1257,20 @@ static void aclnn_exp(ggml_backend_cann_context& ctx, aclTensor* acl_src) { void aclnn_cos(ggml_backend_cann_context& ctx, aclTensor* acl_src, aclTensor* acl_dst) { - GGML_CANN_CALL_ACLNN_OP(ctx, Cos, acl_src, acl_dst); + if(acl_dst == nullptr) { + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceCos, acl_src); + } else { + GGML_CANN_CALL_ACLNN_OP(ctx, Cos, acl_src, acl_dst); + } } void aclnn_sin(ggml_backend_cann_context& ctx, aclTensor* acl_src, aclTensor* acl_dst) { - GGML_CANN_CALL_ACLNN_OP(ctx, Sin, acl_src, acl_dst); + if(acl_dst == nullptr) { + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceSin, acl_src); + } else { + GGML_CANN_CALL_ACLNN_OP(ctx, Sin, acl_src, acl_dst); + } } void ggml_cann_timestep_embedding(ggml_backend_cann_context& ctx, @@ -2221,13 +2229,54 @@ static void aclnn_index_fill_tensor(ggml_backend_cann_context& ctx, ggml_cann_release_resources(ctx, acl_index, acl_value); } +/** + * @brief Initializes and caches sine/cosine positional encoding values + * (used in RoPE, Rotary Position Embedding) for attention layers. + * + * This function computes and caches the sin/cos values of + * θ = position * theta_scale for RoPE encoding. The cache is shared + * across attention layers, and only the first attention layer will + * trigger initialization. The cache includes repeated sin/cos values + * with different repeat methods depending on the @param is_neox flag. + * + * Steps performed by this function: + * 1. Identify whether the target tensor belongs to Q/K in attention + * and restrict computation to the first layer only. + * 2. Initialize the theta scale array (arange → power → freq scaling). + * 3. Allocate sin/cos caches if the max prompt length increases. + * 4. Compute θ = position * theta_scale. + * 5. Compute sin(θ), cos(θ) and optionally scale by attn_factor. + * 6. Expand sin/cos values by repeat or repeat_interleave depending + * on whether @param is_neox is enabled. + * 7. Store the computed values into persistent buffers + * (ctx.rope_sin_ptr / ctx.rope_cos_ptr). + * + * @param ctx The CANN backend context, holding memory pool, + * stream, and persistent buffers for rope init/cache. + * @param dst The destination ggml_tensor whose computation + * depends on the cached RoPE values (usually Qcur/Kcur). + * @param theta_scale Scalar exponent base for computing theta scale values. + * @param freq_scale Frequency scaling factor, applied to theta scale. + * @param attn_factor Attention scaling factor, applied to sin/cos. + * @param is_neox Whether to use Neox-style repeat strategy + * (dim expansion vs repeat_interleave). + */ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, - aclTensor* acl_cos_repeat_tensor, - aclTensor* acl_sin_repeat_tensor, float theta_scale, float freq_scale, float attn_factor, bool is_neox) { // int sin/cos cache, cache has different repeat method depond on // @param.is_neox + bool is_q = (std::strncmp(dst->name, "Qcur-", 5) == 0); + bool is_k = (std::strncmp(dst->name, "Kcur-", 5) == 0); + + // used for accuracy testing + bool is_attention = is_q || is_k; + + // just compute in first layer in attention + bool is_fisrt_layer = (std::strncmp(dst->name, "Qcur-0", GGML_MAX_NAME) == 0); + if(is_attention && !is_fisrt_layer) { + return; + } ggml_tensor* src0 = dst->src[0]; // input ggml_tensor* src1 = dst->src[1]; // position @@ -2253,21 +2302,16 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, theta_nb[i] = theta_nb[i - 1] * theta_ne[i - 1]; } - bool is_q = (std::strncmp(dst->name, "Qcur-", 5) == 0); - bool is_k = (std::strncmp(dst->name, "Kcur-", 5) == 0); - - // used for accuracy testing - bool is_attention = is_q || is_k; - - if(ctx.init_ptr == nullptr || !is_attention) { + // init theta scale, just one time + if(ctx.rope_init_ptr == nullptr || !is_attention) { // theta_scale arange, [0,1,...,ne00/2 - 1] - if(ctx.init_ptr != nullptr){ - ACL_CHECK(aclrtFree(ctx.init_ptr)); + if(ctx.rope_init_ptr != nullptr){ + ACL_CHECK(aclrtFree(ctx.rope_init_ptr)); } - ACL_CHECK(aclrtMalloc(&ctx.init_ptr, theta_scale_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + ACL_CHECK(aclrtMalloc(&ctx.rope_init_ptr, theta_scale_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); aclTensor* acl_theta_scale_tensor = - ggml_cann_create_tensor(ctx.init_ptr, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(ctx.rope_init_ptr, ACL_FLOAT, sizeof(float_t), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); float start = 0; float step = 1; @@ -2297,67 +2341,55 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, ggml_cann_release_resources(ctx, acl_theta_scale_tensor,acl_theta_scale); } - if(ctx.sin_ptr == nullptr) { - int64_t theta_length = theta_scale_length * ctx.max_prompt_length; - ACL_CHECK(aclrtMalloc(&ctx.sin_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); - ACL_CHECK(aclrtMalloc(&ctx.cos_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); - } + // init sin_repeat && cos_repeat, one token just init in 0 layer if(position_length > ctx.max_prompt_length) { ctx.max_prompt_length = position_length; - int64_t theta_length = theta_scale_length * ctx.max_prompt_length; - ACL_CHECK(aclrtFree(ctx.sin_ptr)); - ACL_CHECK(aclrtFree(ctx.cos_ptr)); - ACL_CHECK(aclrtMalloc(&ctx.sin_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); - ACL_CHECK(aclrtMalloc(&ctx.cos_ptr, theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + int64_t repeat_theta_length = theta_scale_length * ctx.max_prompt_length * 2; + if(ctx.rope_sin_ptr != nullptr) { + ACL_CHECK(aclrtFree(ctx.rope_sin_ptr)); + ACL_CHECK(aclrtFree(ctx.rope_cos_ptr)); + } + ACL_CHECK(aclrtMalloc(&ctx.rope_sin_ptr, repeat_theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + ACL_CHECK(aclrtMalloc(&ctx.rope_cos_ptr, repeat_theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); } - bool is_fisrt_layer = (std::strncmp(dst->name, "Qcur-0", GGML_MAX_NAME) == 0); - - if(is_fisrt_layer || !is_attention) { - - aclTensor* acl_theta_scale_tensor = - ggml_cann_create_tensor(ctx.init_ptr, ACL_FLOAT, sizeof(float_t), + aclTensor* acl_theta_scale_tensor = + ggml_cann_create_tensor(ctx.rope_init_ptr, ACL_FLOAT, sizeof(float_t), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); - // position - aclTensor* acl_position_tensor = ggml_cann_create_tensor( - src1->data, ggml_cann_type_mapping(src1->type), - ggml_type_size(src1->type), position_ne, position_nb, GGML_MAX_DIMS); + // position + aclTensor* acl_position_tensor = ggml_cann_create_tensor( + src1->data, ggml_cann_type_mapping(src1->type), + ggml_type_size(src1->type), position_ne, position_nb, GGML_MAX_DIMS); - // power * position - int64_t theta_length = theta_scale_length * position_length; - ggml_cann_pool_alloc theta_allocator(ctx.pool(), - theta_length * sizeof(float_t)); - void* theta_buffer = theta_allocator.get(); + // power * position + int64_t theta_length = theta_scale_length * position_length; + ggml_cann_pool_alloc theta_allocator(ctx.pool(), + theta_length * sizeof(float_t)); + void* theta_buffer = theta_allocator.get(); - aclTensor* acl_theta_tensor = - ggml_cann_create_tensor(theta_buffer, ACL_FLOAT, sizeof(float_t), - theta_ne, theta_nb, GGML_MAX_DIMS); - aclnn_mul(ctx, acl_position_tensor, acl_theta_scale_tensor, - acl_theta_tensor); - - // sin/cos - aclTensor* acl_sin_tensor = ggml_cann_create_tensor( - ctx.sin_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, - GGML_MAX_DIMS, ACL_FORMAT_ND); - aclnn_sin(ctx, acl_theta_tensor, acl_sin_tensor); - - aclTensor* acl_cos_tensor = ggml_cann_create_tensor( - ctx.cos_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, - GGML_MAX_DIMS, ACL_FORMAT_ND); - aclnn_cos(ctx, acl_theta_tensor, acl_cos_tensor); - - // release - ggml_cann_release_resources(ctx, acl_theta_scale_tensor, acl_position_tensor, - acl_theta_tensor, acl_sin_tensor, acl_cos_tensor); - } + aclTensor* acl_theta_tensor = + ggml_cann_create_tensor(theta_buffer, ACL_FLOAT, sizeof(float_t), + theta_ne, theta_nb, GGML_MAX_DIMS); + aclnn_mul(ctx, acl_position_tensor, acl_theta_scale_tensor, + acl_theta_tensor); + // sin/cos + ggml_cann_pool_alloc sin_allocator(ctx.pool(), + theta_length * sizeof(float_t)); + void* sin_buffer = sin_allocator.get(); aclTensor* acl_sin_tensor = ggml_cann_create_tensor( - ctx.sin_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, - GGML_MAX_DIMS, ACL_FORMAT_ND); + sin_buffer, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, + GGML_MAX_DIMS, ACL_FORMAT_ND); + aclnn_sin(ctx, acl_theta_tensor, acl_sin_tensor); + + ggml_cann_pool_alloc cos_allocator(ctx.pool(), + theta_length * sizeof(float_t)); + void* cos_buffer = cos_allocator.get(); aclTensor* acl_cos_tensor = ggml_cann_create_tensor( - ctx.cos_ptr, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, - GGML_MAX_DIMS, ACL_FORMAT_ND); + cos_buffer, ACL_FLOAT, sizeof(float_t), theta_ne, theta_nb, + GGML_MAX_DIMS, ACL_FORMAT_ND); + aclnn_cos(ctx, acl_theta_tensor, acl_cos_tensor); // attn_factor if (attn_factor != 1) { @@ -2365,6 +2397,19 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, aclnn_muls(ctx, acl_cos_tensor, attn_factor, nullptr, true); } + int64_t sin_reshape_ne[4] = {ne00, 1, ne02, 1}; + size_t sin_reshape_nb[GGML_MAX_DIMS]; + sin_reshape_nb[0] = sizeof(float_t); + for (int i = 1; i < GGML_MAX_DIMS; i++) { + sin_reshape_nb[i] = sin_reshape_nb[i - 1] * sin_reshape_ne[i - 1]; + } + aclTensor* acl_sin_repeat_tensor = + ggml_cann_create_tensor(ctx.rope_sin_ptr, ACL_FLOAT, sizeof(float_t), + sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); + aclTensor* acl_cos_repeat_tensor = + ggml_cann_create_tensor(ctx.rope_cos_ptr, ACL_FLOAT, sizeof(float_t), + sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); + // repeat if (is_neox) { int64_t repeatsArray[] = {1, 1, 1, 2}; @@ -2380,8 +2425,9 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, num_repeats, output_size); } - // release - ggml_cann_release_resources(ctx, acl_sin_tensor, acl_cos_tensor); + ggml_cann_release_resources(ctx, acl_theta_scale_tensor, acl_position_tensor, + acl_theta_tensor, acl_sin_tensor, acl_sin_repeat_tensor, acl_cos_tensor, + acl_cos_repeat_tensor); } #ifdef __cplusplus @@ -2435,13 +2481,8 @@ void ggml_cann_rope(ggml_backend_cann_context& ctx, ggml_tensor* dst) { const bool is_neox = mode & GGML_ROPE_TYPE_NEOX; - // init cos/sin cache - ggml_cann_pool_alloc sin_allocator( - ctx.pool(), ne00 * ne02 * sizeof(float_t)); - ggml_cann_pool_alloc cos_allocator( - ctx.pool(), ne00 * ne02 * sizeof(float_t)); - void* sin_buffer = sin_allocator.get(); - void* cos_buffer = cos_allocator.get(); + // init ctx.rope_cos/rope_sin cache + aclnn_cache_init(ctx, dst, theta_scale, freq_scale, attn_factor, is_neox); int64_t sin_reshape_ne[4] = {ne00, 1, ne02, 1}; size_t sin_reshape_nb[GGML_MAX_DIMS]; @@ -2450,13 +2491,11 @@ void ggml_cann_rope(ggml_backend_cann_context& ctx, ggml_tensor* dst) { sin_reshape_nb[i] = sin_reshape_nb[i - 1] * sin_reshape_ne[i - 1]; } aclTensor* acl_sin_reshape_tensor = - ggml_cann_create_tensor(sin_buffer, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(ctx.rope_sin_ptr, ACL_FLOAT, sizeof(float_t), sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); aclTensor* acl_cos_reshape_tensor = - ggml_cann_create_tensor(cos_buffer, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(ctx.rope_cos_ptr, ACL_FLOAT, sizeof(float_t), sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); - aclnn_cache_init(ctx, dst, acl_cos_reshape_tensor, acl_sin_reshape_tensor, - theta_scale, freq_scale, attn_factor, is_neox); aclTensor* acl_src = ggml_cann_create_tensor(src0); aclTensor* acl_dst = ggml_cann_create_tensor(dst); diff --git a/ggml/src/ggml-cann/common.h b/ggml/src/ggml-cann/common.h index 5858bd3f6a..33794062f5 100755 --- a/ggml/src/ggml-cann/common.h +++ b/ggml/src/ggml-cann/common.h @@ -368,10 +368,6 @@ struct ggml_backend_cann_context { std::string name; /**< Name of the device. */ std::string description; /**< Description of the device. */ aclrtEvent copy_event = nullptr; /**< Event for managing copy operations. */ - void* init_ptr = nullptr; - void* sin_ptr = nullptr; - void* cos_ptr = nullptr; - int64_t max_prompt_length = 65536; #ifdef USE_ACL_GRAPH /// Cached CANN ACL graph used for executing the current ggml computation graph. std::unique_ptr cann_graph; @@ -379,6 +375,12 @@ struct ggml_backend_cann_context { cann_task_queue task_queue; bool async_mode; bool support_set_rows; + // Rope Cache + void* rope_init_ptr = nullptr; + void* rope_sin_ptr = nullptr; + void* rope_cos_ptr = nullptr; + int64_t max_prompt_length = 0; + // Constant Pool void* f32_zero_cache = nullptr; void* f32_one_cache = nullptr; int64_t f32_zero_cache_element = 0; @@ -422,14 +424,20 @@ struct ggml_backend_cann_context { ACL_CHECK(aclrtDestroyStream(streams[i])); } } - if(init_ptr != nullptr) { - ACL_CHECK(aclrtFree(init_ptr)); + if(rope_init_ptr != nullptr) { + ACL_CHECK(aclrtFree(rope_init_ptr)); } - if(sin_ptr != nullptr) { - ACL_CHECK(aclrtFree(sin_ptr)); + if(rope_sin_ptr != nullptr) { + ACL_CHECK(aclrtFree(rope_sin_ptr)); } - if(cos_ptr != nullptr) { - ACL_CHECK(aclrtFree(cos_ptr)); + if(rope_cos_ptr != nullptr) { + ACL_CHECK(aclrtFree(rope_cos_ptr)); + } + if(f32_zero_cache != nullptr) { + ACL_CHECK(aclrtFree(f32_zero_cache)); + } + if(f32_one_cache != nullptr) { + ACL_CHECK(aclrtFree(f32_one_cache)); } } From 7da9fed0d6f1750a8783436f6f313b87e76e6378 Mon Sep 17 00:00:00 2001 From: RunningLeon Date: Mon, 25 Aug 2025 14:32:16 +0800 Subject: [PATCH 097/174] convert : support interns1-mini (#15412) * support interns1-mini * fix comment * update --- convert_hf_to_gguf.py | 133 +++++++++++++++++++++--------------------- 1 file changed, 65 insertions(+), 68 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 35fadbc83e..12ecd64515 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -1216,6 +1216,55 @@ class TextModel(ModelBase): raise NotImplementedError("Only MEAN, CLS, and LAST pooling types supported") self.gguf_writer.add_pooling_type(pooling_type) + def _set_vocab_interns1(self): + tokens: list[str] = [] + toktypes: list[int] = [] + + from transformers import AutoTokenizer + tokenizer = AutoTokenizer.from_pretrained(self.dir_model, trust_remote_code=True) + vocab = getattr(tokenizer, 'vocab', tokenizer.get_vocab()) + vocab_size = self.hparams.get("vocab_size", len(vocab)) + assert max(vocab.values()) < vocab_size + + tokpre = self.get_vocab_base_pre(tokenizer) + + reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in vocab.items()} + added_vocab = tokenizer.get_added_vocab() + + added_tokens_decoder = tokenizer.added_tokens_decoder + + for i in range(vocab_size): + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.UNUSED) + else: + token: str = reverse_vocab[i] + if token in added_vocab: + # The tokenizer in llama.cpp assumes the CONTROL and USER_DEFINED tokens are pre-normalized. + # To avoid unexpected issues - we make sure to normalize non-normalized tokens + if not added_tokens_decoder[i].normalized: + previous_token = token + token = tokenizer.decode(tokenizer.encode(token, add_special_tokens=False)) + if previous_token != token: + logger.info(f"{repr(previous_token)} is encoded and decoded back to {repr(token)} using AutoTokenizer") + + if added_tokens_decoder[i].special or self.does_token_look_special(token): + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + toktypes.append(gguf.TokenType.NORMAL) + tokens.append(token) + + self.gguf_writer.add_tokenizer_model("gpt2") + self.gguf_writer.add_tokenizer_pre(tokpre) + self.gguf_writer.add_token_list(tokens) + self.gguf_writer.add_token_types(toktypes) + + special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=True) + special_vocab._set_special_token("bos", 151643) + special_vocab.add_to_gguf(self.gguf_writer) + class MmprojModel(ModelBase): model_type = ModelType.MMPROJ @@ -2932,7 +2981,8 @@ class Qwen2Model(TextModel): if "language_model." in name: name = name.replace("language_model.", "") # for InternVL if name.startswith("mlp") or name.startswith("multi_modal_projector") \ - or name.startswith("vision_model") or name.startswith("audio_tower"): + or name.startswith("vision_model") or name.startswith("audio_tower") \ + or name.startswith("model.vision_tower") or name.startswith("model.multi_modal_projector"): # skip vision and audio tensors return [] yield from super().modify_tensors(data_torch, name, bid) @@ -3604,6 +3654,19 @@ class Qwen2MoeModel(TextModel): class Qwen3Model(Qwen2Model): model_arch = gguf.MODEL_ARCH.QWEN3 + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + hparams = ModelBase.load_hparams(self.dir_model, is_mistral_format=False) + self.origin_hf_arch = hparams.get('architectures', [None])[0] + + def set_vocab(self): + # deal with intern-s1-mini + if self.origin_hf_arch == 'InternS1ForConditionalGeneration': + self._set_vocab_interns1() + return + + super().set_vocab() + @ModelBase.register("Qwen3MoeForCausalLM") class Qwen3MoeModel(Qwen2MoeModel): @@ -3620,73 +3683,7 @@ class Qwen3MoeModel(Qwen2MoeModel): self._set_vocab_interns1() return - try: - self._set_vocab_sentencepiece() - except FileNotFoundError: - self._set_vocab_gpt2() - - def _set_vocab_interns1(self): - tokens: list[str] = [] - toktypes: list[int] = [] - - from transformers import AutoTokenizer - tokenizer = AutoTokenizer.from_pretrained(self.dir_model, trust_remote_code=True) - vocab = getattr(tokenizer, 'vocab', tokenizer.get_vocab()) - vocab_size = self.hparams.get("vocab_size", len(vocab)) - assert max(vocab.values()) < vocab_size - - tokpre = self.get_vocab_base_pre(tokenizer) - - reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in vocab.items()} - added_vocab = tokenizer.get_added_vocab() - - added_tokens_decoder = tokenizer.added_tokens_decoder - - for i in range(vocab_size): - if i not in reverse_vocab: - tokens.append(f"[PAD{i}]") - toktypes.append(gguf.TokenType.UNUSED) - else: - token: str = reverse_vocab[i] - if token in added_vocab: - # The tokenizer in llama.cpp assumes the CONTROL and USER_DEFINED tokens are pre-normalized. - # To avoid unexpected issues - we make sure to normalize non-normalized tokens - if not added_tokens_decoder[i].normalized: - previous_token = token - token = tokenizer.decode(tokenizer.encode(token, add_special_tokens=False)) - if previous_token != token: - logger.info(f"{repr(previous_token)} is encoded and decoded back to {repr(token)} using AutoTokenizer") - - if added_tokens_decoder[i].special or self.does_token_look_special(token): - toktypes.append(gguf.TokenType.CONTROL) - else: - toktypes.append(gguf.TokenType.USER_DEFINED) - else: - toktypes.append(gguf.TokenType.NORMAL) - tokens.append(token) - - self.gguf_writer.add_tokenizer_model("gpt2") - self.gguf_writer.add_tokenizer_pre(tokpre) - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=True) - special_tokens_map_file = self.dir_model / 'special_tokens_map.json' - additional_special_tokens = [] - if special_tokens_map_file.is_file(): - with open(special_tokens_map_file, encoding = 'utf-8') as f: - additional_special_tokens = json.load(f).get('additional_special_tokens', []) - tokenizer_cfg_file = self.dir_model / 'special_tokens_map.json' - if tokenizer_cfg_file.is_file(): - with open(tokenizer_cfg_file, encoding = 'utf-8') as f: - added_tokens_decoder = json.load(f).get('added_tokens_decoder', {}) - token2ids_map = {data['content'] : int(token) for token, data in added_tokens_decoder.items() if data['special']} - for token in additional_special_tokens: - if token in token2ids_map: - special_vocab._set_special_token(token, token2ids_map[token]) - special_vocab._set_special_token('eos', 151645) - special_vocab._set_special_token("bos", 151643) - special_vocab.add_to_gguf(self.gguf_writer) + super().set_vocab() @ModelBase.register("GPT2LMHeadModel") From b0ba31f525a2ad7fb539660be0c8f088c9869f6a Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 25 Aug 2025 10:14:48 +0300 Subject: [PATCH 098/174] metal : add FA kernels for HS=40 (#15559) ggml-ci --- ggml/src/ggml-metal/ggml-metal.m | 53 ++++++++++++++++++++++++++++ ggml/src/ggml-metal/ggml-metal.metal | 17 +++++++++ 2 files changed, 70 insertions(+) diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index 7c70d352df..b2ec7a263f 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -443,6 +443,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC, GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC, GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96, @@ -452,6 +453,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H96, @@ -461,6 +463,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H96, @@ -470,6 +473,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H96, @@ -479,6 +483,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H96, @@ -488,6 +493,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H96, @@ -497,6 +503,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H80, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H96, @@ -506,6 +513,13 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H40, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H40, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H40, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_1_H40, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_H40, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_H40, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H64, @@ -1459,6 +1473,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC, argsort_f32_i32_asc, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC, argsort_f32_i32_desc, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32, leaky_relu_f32, true); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H40, flash_attn_ext_f16_h40, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64, flash_attn_ext_f16_h64, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80, flash_attn_ext_f16_h80, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96, flash_attn_ext_f16_h96, has_simdgroup_mm); @@ -1468,6 +1483,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_HK192_HV128, flash_attn_ext_f16_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256, flash_attn_ext_f16_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_HK576_HV512, flash_attn_ext_f16_hk576_hv512, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H40, flash_attn_ext_bf16_h40, has_simdgroup_mm && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H64, flash_attn_ext_bf16_h64, has_simdgroup_mm && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H80, flash_attn_ext_bf16_h80, has_simdgroup_mm && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H96, flash_attn_ext_bf16_h96, has_simdgroup_mm && use_bfloat); @@ -1477,6 +1493,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_HK192_HV128, flash_attn_ext_bf16_hk192_hv128, has_simdgroup_mm && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H256, flash_attn_ext_bf16_h256, has_simdgroup_mm && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_HK576_HV512, flash_attn_ext_bf16_hk576_hv512, has_simdgroup_mm && use_bfloat); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H40, flash_attn_ext_q4_0_h40, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H64, flash_attn_ext_q4_0_h64, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H80, flash_attn_ext_q4_0_h80, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H96, flash_attn_ext_q4_0_h96, has_simdgroup_mm); @@ -1486,6 +1503,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_HK192_HV128, flash_attn_ext_q4_0_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H256, flash_attn_ext_q4_0_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_HK576_HV512, flash_attn_ext_q4_0_hk576_hv512, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H40, flash_attn_ext_q4_1_h40, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H64, flash_attn_ext_q4_1_h64, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H80, flash_attn_ext_q4_1_h80, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H96, flash_attn_ext_q4_1_h96, has_simdgroup_mm); @@ -1495,6 +1513,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_HK192_HV128, flash_attn_ext_q4_1_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H256, flash_attn_ext_q4_1_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_HK576_HV512, flash_attn_ext_q4_1_hk576_hv512, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H40, flash_attn_ext_q5_0_h40, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H64, flash_attn_ext_q5_0_h64, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H80, flash_attn_ext_q5_0_h80, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H96, flash_attn_ext_q5_0_h96, has_simdgroup_mm); @@ -1504,6 +1523,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_HK192_HV128, flash_attn_ext_q5_0_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H256, flash_attn_ext_q5_0_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_HK576_HV512, flash_attn_ext_q5_0_hk576_hv512, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H40, flash_attn_ext_q5_1_h40, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H64, flash_attn_ext_q5_1_h64, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H80, flash_attn_ext_q5_1_h80, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H96, flash_attn_ext_q5_1_h96, has_simdgroup_mm); @@ -1513,6 +1533,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_HK192_HV128, flash_attn_ext_q5_1_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H256, flash_attn_ext_q5_1_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_HK576_HV512, flash_attn_ext_q5_1_hk576_hv512, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H40, flash_attn_ext_q8_0_h40, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H64, flash_attn_ext_q8_0_h64, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H80, flash_attn_ext_q8_0_h80, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H96, flash_attn_ext_q8_0_h96, has_simdgroup_mm); @@ -1522,6 +1543,13 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK192_HV128, flash_attn_ext_q8_0_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H256, flash_attn_ext_q8_0_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK576_HV512, flash_attn_ext_q8_0_hk576_hv512, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H40, flash_attn_ext_vec_f16_h40, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H40, flash_attn_ext_vec_bf16_h40, has_simdgroup_reduction && use_bfloat); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H40, flash_attn_ext_vec_q4_0_h40, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_1_H40, flash_attn_ext_vec_q4_1_h40, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_H40, flash_attn_ext_vec_q5_0_h40, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_H40, flash_attn_ext_vec_q5_1_h40, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_H40, flash_attn_ext_vec_q8_0_h40, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H64, flash_attn_ext_vec_f16_h64, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H64, flash_attn_ext_vec_bf16_h64, has_simdgroup_reduction && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H64, flash_attn_ext_vec_q4_0_h64, has_simdgroup_reduction); @@ -5130,6 +5158,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96 ].pipeline; break; @@ -5154,6 +5183,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_BF16_H96 ].pipeline; break; @@ -5178,6 +5208,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_0_H96 ].pipeline; break; @@ -5202,6 +5233,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q4_1_H96 ].pipeline; break; @@ -5226,6 +5258,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_0_H96 ].pipeline; break; @@ -5250,6 +5283,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q5_1_H96 ].pipeline; break; @@ -5274,6 +5308,7 @@ static int ggml_metal_encode_node( pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK576_HV512].pipeline; } else { switch (ne00) { + case 40: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H40 ].pipeline; break; case 64: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H64 ].pipeline; break; case 80: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H80 ].pipeline; break; case 96: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H96 ].pipeline; break; @@ -5301,6 +5336,24 @@ static int ggml_metal_encode_node( use_vec_kernel = true; switch (ne00) { + case 40: + { + switch (src1->type) { + case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H40].pipeline; break; + case GGML_TYPE_BF16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H40].pipeline; break; + case GGML_TYPE_Q4_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H40].pipeline; break; + case GGML_TYPE_Q4_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_1_H40].pipeline; break; + case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_H40].pipeline; break; + case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_H40].pipeline; break; + case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_H40].pipeline; break; + default: + { + GGML_LOG_ERROR("unsupported type: %d\n", src1->type); + GGML_LOG_ERROR("add template specialization for this type\n"); + GGML_ABORT("add template specialization for this type"); + } + } + } break; case 64: { switch (src1->type) { diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index b35a3bbdc3..3dd55fd325 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -4663,6 +4663,7 @@ kernel void kernel_flash_attn_ext( typedef decltype(kernel_flash_attn_ext) flash_attn_ext_t; +template [[host_name("kernel_flash_attn_ext_f16_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_f16_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_f16_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_f16_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -4674,6 +4675,7 @@ template [[host_name("kernel_flash_attn_ext_f16_h256")]] kernel flash_at template [[host_name("kernel_flash_attn_ext_f16_hk576_hv512")]] kernel flash_attn_ext_t kernel_flash_attn_ext; #if defined(GGML_METAL_USE_BF16) +template [[host_name("kernel_flash_attn_ext_bf16_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_bf16_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_bf16_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_bf16_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -4685,6 +4687,7 @@ template [[host_name("kernel_flash_attn_ext_bf16_h256")]] kernel flash_at template [[host_name("kernel_flash_attn_ext_bf16_hk576_hv512")]] kernel flash_attn_ext_t kernel_flash_attn_ext; #endif +template [[host_name("kernel_flash_attn_ext_q4_0_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_0_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_0_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_0_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -4695,6 +4698,7 @@ template [[host_name("kernel_flash_attn_ext_q4_0_hk192_hv128")]] kernel flash_at template [[host_name("kernel_flash_attn_ext_q4_0_h256")]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_0_hk576_hv512")]] kernel flash_attn_ext_t kernel_flash_attn_ext; +template [[host_name("kernel_flash_attn_ext_q4_1_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_1_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_1_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_1_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -4705,6 +4709,7 @@ template [[host_name("kernel_flash_attn_ext_q4_1_hk192_hv128")]] kernel flash_at template [[host_name("kernel_flash_attn_ext_q4_1_h256")]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q4_1_hk576_hv512")]] kernel flash_attn_ext_t kernel_flash_attn_ext; +template [[host_name("kernel_flash_attn_ext_q5_0_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_0_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_0_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_0_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -4715,6 +4720,7 @@ template [[host_name("kernel_flash_attn_ext_q5_0_hk192_hv128")]] kernel flash_at template [[host_name("kernel_flash_attn_ext_q5_0_h256")]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_0_hk576_hv512")]] kernel flash_attn_ext_t kernel_flash_attn_ext; +template [[host_name("kernel_flash_attn_ext_q5_1_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_1_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_1_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_1_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -4725,6 +4731,7 @@ template [[host_name("kernel_flash_attn_ext_q5_1_hk192_hv128")]] kernel flash_at template [[host_name("kernel_flash_attn_ext_q5_1_h256")]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q5_1_hk576_hv512")]] kernel flash_attn_ext_t kernel_flash_attn_ext; +template [[host_name("kernel_flash_attn_ext_q8_0_h40" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q8_0_h64" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q8_0_h80" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; template [[host_name("kernel_flash_attn_ext_q8_0_h96" )]] kernel flash_attn_ext_t kernel_flash_attn_ext; @@ -5115,6 +5122,16 @@ kernel void kernel_flash_attn_ext_vec( typedef decltype(kernel_flash_attn_ext_vec) flash_attn_ext_vec_t; +template [[host_name("kernel_flash_attn_ext_vec_f16_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; +#if defined(GGML_METAL_USE_BF16) +template [[host_name("kernel_flash_attn_ext_vec_bf16_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; +#endif +template [[host_name("kernel_flash_attn_ext_vec_q4_0_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; +template [[host_name("kernel_flash_attn_ext_vec_q4_1_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; +template [[host_name("kernel_flash_attn_ext_vec_q5_0_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; +template [[host_name("kernel_flash_attn_ext_vec_q5_1_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; +template [[host_name("kernel_flash_attn_ext_vec_q8_0_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; + template [[host_name("kernel_flash_attn_ext_vec_f16_h64")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; #if defined(GGML_METAL_USE_BF16) template [[host_name("kernel_flash_attn_ext_vec_bf16_h64")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; From 0d5a470223fc90b6b6807921d68011ff06ae7f9e Mon Sep 17 00:00:00 2001 From: Weizhao Ouyang Date: Mon, 25 Aug 2025 17:15:06 +0800 Subject: [PATCH 099/174] convert : update Ernie 4.5 dense architecture name (#15555) Signed-off-by: Weizhao Ouyang --- convert_hf_to_gguf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 12ecd64515..9fa35e8b11 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -3159,7 +3159,7 @@ class LLaDAModel(TextModel): yield from super().modify_tensors(data_torch, name, bid) -@ModelBase.register("Ernie4_5_ForCausalLM") +@ModelBase.register("Ernie4_5_ForCausalLM", "Ernie4_5ForCausalLM") class Ernie4_5Model(TextModel): model_arch = gguf.MODEL_ARCH.ERNIE4_5 From 6b64f74b55628e4193f4fb00313f07dbd8556528 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 25 Aug 2025 13:56:43 +0300 Subject: [PATCH 100/174] batched-bench : fix unified KV cache handling + pp timing (#15562) * batched-bench : fix unified KV cache handling + pp timing * cont : run dummy token only with split KV cache --- tools/batched-bench/batched-bench.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tools/batched-bench/batched-bench.cpp b/tools/batched-bench/batched-bench.cpp index c6c601add3..93efad3280 100644 --- a/tools/batched-bench/batched-bench.cpp +++ b/tools/batched-bench/batched-bench.cpp @@ -124,7 +124,7 @@ int main(int argc, char ** argv) { const int tg = n_tg[i_tg]; const int pl = n_pl[i_pl]; - const int n_ctx_req = is_pp_shared ? pp + pl*tg : pl*(pp + tg); + const int n_ctx_req = is_pp_shared ? (params.kv_unified ? pp : pl*pp) + pl*tg : pl*(pp + tg); if (n_ctx_req > n_kv_max) { continue; @@ -147,13 +147,24 @@ int main(int argc, char ** argv) { return 1; } + const auto t_pp_end = ggml_time_us(); + if (is_pp_shared) { for (int32_t i = 1; i < pl; ++i) { llama_memory_seq_cp(mem, 0, i, -1, -1); } - } - const auto t_pp_end = ggml_time_us(); + if (!params.kv_unified) { + // run one dummy token to apply the memory copy + common_batch_clear(batch); + common_batch_add(batch, get_token_rand(), pp + 0, { 0 }, true); + if (!decode_helper(ctx, batch, ctx_params.n_batch)) { + LOG_ERR("%s: llama_decode() failed\n", __func__); + return 1; + } + llama_memory_seq_rm(mem, 0, pp, -1); + } + } const auto t_tg_start = ggml_time_us(); From 5a6bc6b1a6cb665a944426c2055794950e524bf5 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Mon, 25 Aug 2025 14:25:25 +0200 Subject: [PATCH 101/174] model-conversion : add model card template for embeddings [no ci] (#15557) * model-conversion: add model card template for embeddings [no ci] This commit adds a separate model card template (model repository README.md template) for embedding models. The motivation for this is that there server command for the embedding model is a little different and some addition information can be useful in the model card for embedding models which might not be directly relevant for causal models. * squash! model-conversion: add model card template for embeddings [no ci] Fix pyright lint error. * remove --pooling override and clarify embd_normalize usage --- examples/model-conversion/Makefile | 9 ++++ examples/model-conversion/README.md | 10 +++- .../modelcard.template} | 0 .../scripts/embedding/modelcard.template | 48 +++++++++++++++++++ .../scripts/utils/hf-create-model.py | 47 +++++++++++------- 5 files changed, 97 insertions(+), 17 deletions(-) rename examples/model-conversion/scripts/{readme.md.template => causal/modelcard.template} (100%) create mode 100644 examples/model-conversion/scripts/embedding/modelcard.template diff --git a/examples/model-conversion/Makefile b/examples/model-conversion/Makefile index 27d95b4f2b..2f1c3eb903 100644 --- a/examples/model-conversion/Makefile +++ b/examples/model-conversion/Makefile @@ -144,6 +144,15 @@ perplexity-run: hf-create-model: @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" +hf-create-model-dry-run: + @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" -d + +hf-create-model-embedding: + @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" -e + +hf-create-model-embedding-dry-run: + @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" -e -d + hf-create-model-private: @./scripts/utils/hf-create-model.py -m "${MODEL_NAME}" -ns "${NAMESPACE}" -b "${ORIGINAL_BASE_MODEL}" -p diff --git a/examples/model-conversion/README.md b/examples/model-conversion/README.md index c924a6be3c..424c4e5655 100644 --- a/examples/model-conversion/README.md +++ b/examples/model-conversion/README.md @@ -285,13 +285,21 @@ For the following targets a `HF_TOKEN` environment variable is required. This will create a new model repsository on Hugging Face with the specified model name. ```console -(venv) $ make hf-create-model MODEL_NAME='TestModel' NAMESPACE="danbev" +(venv) $ make hf-create-model MODEL_NAME='TestModel' NAMESPACE="danbev" ORIGINAL_BASE_MODEL="some-base-model" Repository ID: danbev/TestModel-GGUF Repository created: https://huggingface.co/danbev/TestModel-GGUF ``` Note that we append a `-GGUF` suffix to the model name to ensure a consistent naming convention for GGUF models. +An embedding model can be created using the following command: +```console +(venv) $ make hf-create-model-embedding MODEL_NAME='TestEmbeddingModel' NAMESPACE="danbev" ORIGINAL_BASE_MODEL="some-base-model" +``` +The only difference is that the model card for an embedding model will be different +with regards to the llama-server command and also how to access/call the embedding +endpoint. + ### Upload a GGUF model to model repository The following target uploads a model to an existing Hugging Face model repository. ```console diff --git a/examples/model-conversion/scripts/readme.md.template b/examples/model-conversion/scripts/causal/modelcard.template similarity index 100% rename from examples/model-conversion/scripts/readme.md.template rename to examples/model-conversion/scripts/causal/modelcard.template diff --git a/examples/model-conversion/scripts/embedding/modelcard.template b/examples/model-conversion/scripts/embedding/modelcard.template new file mode 100644 index 0000000000..75c580524f --- /dev/null +++ b/examples/model-conversion/scripts/embedding/modelcard.template @@ -0,0 +1,48 @@ +--- +base_model: +- {base_model} +--- +# {model_name} GGUF + +Recommended way to run this model: + +```sh +llama-server -hf {namespace}/{model_name}-GGUF +``` + +Then the endpoint can be accessed at http://localhost:8080/embedding, for +example using `curl`: +```console +curl --request POST \ + --url http://localhost:8080/embedding \ + --header "Content-Type: application/json" \ + --data '{{"input": "Hello embeddings"}}' \ + --silent +``` + +Alternatively, the `llama-embedding` command line tool can be used: +```sh +llama-embedding -hf {namespace}/{model_name}-GGUF --verbose-prompt -p "Hello embeddings" +``` + +#### embd_normalize +When a model uses pooling, or the pooling method is specified using `--pooling`, +the normalization can be controlled by the `embd_normalize` parameter. + +The default value is `2` which means that the embeddings are normalized using +the Euclidean norm (L2). Other options are: +* -1 No normalization +* 0 Max absolute +* 1 Taxicab +* 2 Euclidean/L2 +* \>2 P-Norm + +This can be passed in the request body to `llama-server`, for example: +```sh + --data '{{"input": "Hello embeddings", "embd_normalize": -1}}' \ +``` + +And for `llama-embedding`, by passing `--embd-normalize `, for example: +```sh +llama-embedding -hf {namespace}/{model_name}-GGUF --embd-normalize -1 -p "Hello embeddings" +``` diff --git a/examples/model-conversion/scripts/utils/hf-create-model.py b/examples/model-conversion/scripts/utils/hf-create-model.py index 09bb8511ef..ea99bd886f 100755 --- a/examples/model-conversion/scripts/utils/hf-create-model.py +++ b/examples/model-conversion/scripts/utils/hf-create-model.py @@ -26,21 +26,31 @@ parser.add_argument('--namespace', '-ns', help='Namespace to add the model to', parser.add_argument('--org-base-model', '-b', help='Original Base model name', default="") parser.add_argument('--no-card', action='store_true', help='Skip creating model card') parser.add_argument('--private', '-p', action='store_true', help='Create private model') +parser.add_argument('--embedding', '-e', action='store_true', help='Use embedding model card template') +parser.add_argument('--dry-run', '-d', action='store_true', help='Print repository info and template without creating repository') args = parser.parse_args() repo_id = f"{args.namespace}/{args.model_name}-GGUF" print("Repository ID: ", repo_id) -repo_url = api.create_repo( - repo_id=repo_id, - repo_type="model", - private=args.private, - exist_ok=False -) +repo_url = None +if not args.dry_run: + repo_url = api.create_repo( + repo_id=repo_id, + repo_type="model", + private=args.private, + exist_ok=False + ) if not args.no_card: - template_path = "scripts/readme.md.template" + if args.embedding: + template_path = "scripts/embedding/modelcard.template" + else: + template_path = "scripts/causal/modelcard.template" + + print("Template path: ", template_path) + model_card_content = load_template_and_substitute( template_path, model_name=args.model_name, @@ -48,16 +58,21 @@ if not args.no_card: base_model=args.org_base_model, ) - if model_card_content: - api.upload_file( - path_or_fileobj=model_card_content.encode('utf-8'), - path_in_repo="README.md", - repo_id=repo_id - ) - print("Model card created successfully.") + if args.dry_run: + print("\nTemplate Content:\n") + print(model_card_content) else: - print("Failed to create model card.") + if model_card_content: + api.upload_file( + path_or_fileobj=model_card_content.encode('utf-8'), + path_in_repo="README.md", + repo_id=repo_id + ) + print("Model card created successfully.") + else: + print("Failed to create model card.") -print(f"Repository created: {repo_url}") +if not args.dry_run and repo_url: + print(f"Repository created: {repo_url}") From dfd9b5f6c7586c88588f06a644c131bec071a0a1 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Mon, 25 Aug 2025 15:00:43 +0200 Subject: [PATCH 102/174] model-conversion : set pooling type to none in logits.cpp (#15564) This commit explicitly sets the pooling type to 'none' in the logits.cpp to support models that have a pooling type specified. The motivation for this is that some models may have a pooling type set in the model file (.gguf file) and for this specific case where we only want to extract logits, we need to ensure that no pooling is used to so that we are comparing raw logits and not pooled embeddings. --- examples/model-conversion/logits.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/model-conversion/logits.cpp b/examples/model-conversion/logits.cpp index 2cac6a3b3e..ddc5e9005f 100644 --- a/examples/model-conversion/logits.cpp +++ b/examples/model-conversion/logits.cpp @@ -112,6 +112,7 @@ int main(int argc, char ** argv) { ctx_params.no_perf = false; if (embedding_mode) { ctx_params.embeddings = true; + ctx_params.pooling_type = LLAMA_POOLING_TYPE_NONE; ctx_params.n_ubatch = ctx_params.n_batch; } From 5eff6ec9b1220b599a43b594b1110487ab6aca08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Mon, 25 Aug 2025 17:23:40 +0200 Subject: [PATCH 103/174] CUDA: MoE helper in device code, better tile sizes (#15525) * CUDA: MoE helper in device code, better tile sizes * reduce superfluous CUDA blocks --- ggml/src/ggml-cuda/common.cuh | 28 ++-- ggml/src/ggml-cuda/mmq.cu | 224 ++++++++++++++++++++++++------- ggml/src/ggml-cuda/mmq.cuh | 34 +++-- ggml/src/ggml-cuda/vendors/hip.h | 3 + 4 files changed, 221 insertions(+), 68 deletions(-) diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index 767ad83f60..48de1649cf 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -420,16 +420,28 @@ static __device__ __forceinline__ half2 warp_reduce_sum(half2 a) { template static __device__ __forceinline__ int warp_reduce_all(int x) { -#ifdef GGML_USE_HIP + if (width == ggml_cuda_get_physical_warp_size()) { + return __all_sync(0xffffffff, x); + } else { #pragma unroll - for (int offset = width/2; offset > 0; offset >>= 1) { - x = x && __shfl_xor_sync(0xffffffff, x, offset, width); + for (int offset = width/2; offset > 0; offset >>= 1) { + x = __shfl_xor_sync(0xffffffff, x, offset, width) && x; + } + return x; + } +} + +template +static __device__ __forceinline__ int warp_reduce_any(int x) { + if (width == ggml_cuda_get_physical_warp_size()) { + return __any_sync(0xffffffff, x); + } else { +#pragma unroll + for (int offset = width/2; offset > 0; offset >>= 1) { + x = __shfl_xor_sync(0xffffffff, x, offset, width) || x; + } + return x; } - return x; -#else - static_assert(width == WARP_SIZE, "width != WARP_SIZE not implemented"); - return __all_sync(0xffffffff, x); -#endif // GGML_USE_HIP } template diff --git a/ggml/src/ggml-cuda/mmq.cu b/ggml/src/ggml-cuda/mmq.cu index 576032a0ce..714b23f9f4 100644 --- a/ggml/src/ggml-cuda/mmq.cu +++ b/ggml/src/ggml-cuda/mmq.cu @@ -3,6 +3,140 @@ #include +// To reduce shared memory use, store "it" and "iex_used" with 22/10 bits each. +struct mmq_ids_helper_store { + uint32_t data; + + __device__ mmq_ids_helper_store(const uint32_t it, const uint32_t iex_used) { + data = (it & 0x003FFFFF) | (iex_used << 22); + } + + __device__ uint32_t it() const { + return data & 0x003FFFFF; + } + + __device__ uint32_t iex_used() const { + return data >> 22; + } +}; +static_assert(sizeof(mmq_ids_helper_store) == 4, "unexpected size for mmq_ids_helper_store"); + +// Helper function for mul_mat_id, converts ids to a more convenient format. +// ids_src1 describes how to permute the flattened column indices of src1 in order to get a compact src1 tensor sorted by expert. +// ids_dst describes the same mapping but for the dst tensor. +// The upper and lower bounds for the ith expert in the compact src1 tensor are stored in expert_bounds[i:i+1]. +template +__launch_bounds__(ggml_cuda_get_physical_warp_size(), 1) +static __global__ void mmq_ids_helper( + const int32_t * __restrict__ ids, int32_t * __restrict__ ids_src1, int32_t * __restrict__ ids_dst, int32_t * __restrict__ expert_bounds, + const int n_tokens, const int n_expert_used_var, const int nchannels_y, const int si1, const int sis1) { + constexpr int warp_size = ggml_cuda_get_physical_warp_size(); + const int n_expert_used = n_expert_used_template == 0 ? n_expert_used_var : n_expert_used_template; + const int expert = blockIdx.x; + + extern __shared__ char data_mmq_ids_helper[]; + mmq_ids_helper_store * store = (mmq_ids_helper_store *) data_mmq_ids_helper; + + int nex_prev = 0; // Number of columns for experts with a lower index. + int it_compact = 0; // Running index for the compact slice of this expert. + + if constexpr (n_expert_used_template == 0) { + // Generic implementation: + for (int it = 0; it < n_tokens; ++it) { + int iex_used = -1; // The index at which the expert is used, if any. + for (int iex = threadIdx.x; iex < n_expert_used; iex += warp_size) { + const int expert_used = ids[it*si1 + iex]; + nex_prev += expert_used < expert; + if (expert_used == expert) { + iex_used = iex; + } + } + + if (iex_used != -1) { + store[it_compact] = mmq_ids_helper_store(it, iex_used); + } + + if (warp_reduce_any(iex_used != -1)) { + it_compact++; + } + } + } else { + // Implementation optimized for specific numbers of experts used: + static_assert(n_expert_used == 6 || warp_size % n_expert_used == 0, "bad n_expert_used"); + const int neu_padded = n_expert_used == 6 ? 8 : n_expert_used; // Padded to next higher power of 2. + for (int it0 = 0; it0 < n_tokens; it0 += warp_size/neu_padded) { + const int it = it0 + threadIdx.x / neu_padded; + + const int iex = threadIdx.x % neu_padded; // The index at which the expert is used, if any. + const int expert_used = (neu_padded == n_expert_used || iex < n_expert_used) && it < n_tokens ? + ids[it*si1 + iex] : INT_MAX; + const int iex_used = expert_used == expert ? iex : -1; + nex_prev += expert_used < expert; + + // Whether the threads at this token position have used the expert: + const int it_compact_add_self = warp_reduce_any(iex_used != -1); + + // Do a scan over threads at lower token positions in warp to get the correct index for writing data: + int it_compact_add_lower = 0; +#pragma unroll + for (int offset = neu_padded; offset < warp_size; offset += neu_padded) { + const int tmp = __shfl_up_sync(0xFFFFFFFF, it_compact_add_self, offset, warp_size); + if (threadIdx.x >= offset) { + it_compact_add_lower += tmp; + } + } + + if (iex_used != -1) { + store[it_compact + it_compact_add_lower] = mmq_ids_helper_store(it, iex_used); + } + + // The thread with the highest index in the warp always has the sum over the whole warp, use it to increment all threads: + it_compact += __shfl_sync(0xFFFFFFFF, it_compact_add_lower + it_compact_add_self, warp_size - 1, warp_size); + } + } + nex_prev = warp_reduce_sum(nex_prev); + + for (int itc = threadIdx.x; itc < it_compact; itc += warp_size) { + const mmq_ids_helper_store store_it = store[itc]; + const int it = store_it.it(); + const int iex_used = store_it.iex_used(); + ids_src1[nex_prev + itc] = it*sis1 + iex_used % nchannels_y; + ids_dst [nex_prev + itc] = it*n_expert_used + iex_used; + } + + if (threadIdx.x != 0) { + return; + } + + expert_bounds[expert] = nex_prev; + + if (expert < gridDim.x - 1) { + return; + } + + expert_bounds[gridDim.x] = nex_prev + it_compact; +} + +template +static void launch_mmq_ids_helper( + const int32_t * __restrict__ ids, int32_t * __restrict__ ids_src1, int32_t * __restrict__ ids_dst, int32_t * __restrict__ expert_bounds, + const int n_experts, const int n_tokens, const int n_expert_used_var, const int nchannels_y, const int si1, const int sis1, cudaStream_t stream) { + GGML_ASSERT(n_tokens < (1 << 22) && "too few bits in mmq_ids_helper_store"); + GGML_ASSERT(n_expert_used_var < (1 << 10) && "too few bits in mmq_ids_helper_store"); + + const int id = ggml_cuda_get_device(); + const int warp_size = ggml_cuda_info().devices[id].warp_size; + const size_t smpbo = ggml_cuda_info().devices[id].smpbo; + CUDA_SET_SHARED_MEMORY_LIMIT(mmq_ids_helper, smpbo); + + const dim3 num_blocks(n_experts, 1, 1); + const dim3 block_size(warp_size, 1, 1); + const size_t nbytes_shared = n_tokens*sizeof(mmq_ids_helper_store); + GGML_ASSERT(nbytes_shared <= smpbo); + mmq_ids_helper<<>> + (ids, ids_src1, ids_dst, expert_bounds, n_tokens, n_expert_used_var, nchannels_y, si1, sis1); +} + static void ggml_cuda_mul_mat_q_switch_type(ggml_backend_cuda_context & ctx, const mmq_args & args, cudaStream_t stream) { switch (args.type_x) { case GGML_TYPE_Q4_0: @@ -137,7 +271,7 @@ void ggml_cuda_mul_mat_q( ne00, ne01, ne1, s01, ne11, s1, ne02, ne12, s02, s12, s2, ne03, ne13, s03, s13, s3, - use_stream_k}; + use_stream_k, ne1}; ggml_cuda_mul_mat_q_switch_type(ctx, args, stream); return; } @@ -148,54 +282,50 @@ void ggml_cuda_mul_mat_q( const int64_t n_expert_used = ids->ne[0]; const int64_t ne_get_rows = ne12 * n_expert_used; + GGML_ASSERT(ne1 == n_expert_used); - std::vector ids_host(ggml_nbytes(ids)); - std::vector ids_src1_host; - ids_src1_host.reserve(ne_get_rows); - std::vector ids_dst_host; - ids_dst_host.reserve(ne_get_rows); - std::vector tokens_per_expert_host(ne02); - std::vector expert_bounds_host(ne02 + 1); - ggml_cuda_pool_alloc ids_buf_dev(ctx.pool()); + ggml_cuda_pool_alloc ids_src1(ctx.pool(), ne_get_rows); + ggml_cuda_pool_alloc ids_dst(ctx.pool(), ne_get_rows); + ggml_cuda_pool_alloc expert_bounds(ctx.pool(), ne02 + 1); - CUDA_CHECK(cudaMemcpyAsync(ids_host.data(), ids->data, ggml_nbytes(ids), cudaMemcpyDeviceToHost, stream)); - CUDA_CHECK(cudaStreamSynchronize(stream)); + { + GGML_ASSERT(ids->nb[0] == ggml_element_size(ids)); + const int si1 = ids->nb[1] / ggml_element_size(ids); + const int sis1 = nb12 / nb11; - for (int64_t i02 = 0; i02 < ne02; ++i02) { // expert matrices - for (int64_t i12 = 0; i12 < ne12; ++i12) { // tokens - for (int64_t iex = 0; iex < n_expert_used; ++iex) { - const int32_t expert_to_use = *(const int32_t *)(ids_host.data() + i12*ids->nb[1] + iex*ids->nb[0]); - assert(expert_to_use >= 0 && expert_to_use < ne02); - if (expert_to_use == i02) { - ids_src1_host.push_back(i12*(nb12/nb11) + iex % ne11); - ids_dst_host.push_back(i12*ne1 + iex); - tokens_per_expert_host[i02]++; - break; - } - } + switch (n_expert_used) { + case 2: + launch_mmq_ids_helper< 2> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; + case 4: + launch_mmq_ids_helper< 4> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; + case 6: + launch_mmq_ids_helper< 6> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; + case 8: + launch_mmq_ids_helper< 8> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; + case 16: + launch_mmq_ids_helper<16> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; + case 32: + launch_mmq_ids_helper<32> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; + default: + launch_mmq_ids_helper< 0> ((const int32_t *) ids->data, ids_src1.get(), ids_dst.get(), expert_bounds.get(), + ne02, ne12, n_expert_used, ne11, si1, sis1, stream); + break; } + CUDA_CHECK(cudaGetLastError()); } - int32_t cumsum = 0; - for (int64_t i = 0; i < ne02; ++i) { - expert_bounds_host[i] = cumsum; - cumsum += tokens_per_expert_host[i]; - } - expert_bounds_host[ne02] = cumsum; - - std::vector ids_buf_host; - ids_buf_host.reserve(ids_src1_host.size() + ids_dst_host.size() + expert_bounds_host.size()); - ids_buf_host.insert(ids_buf_host.end(), ids_src1_host.begin(), ids_src1_host.end()); - ids_buf_host.insert(ids_buf_host.end(), ids_dst_host.begin(), ids_dst_host.end()); - ids_buf_host.insert(ids_buf_host.end(), expert_bounds_host.begin(), expert_bounds_host.end()); - ids_buf_dev.alloc(ids_buf_host.size() + get_mmq_x_max_host(cc)); // Expert bounds are padded on device. - CUDA_CHECK(cudaMemcpyAsync(ids_buf_dev.ptr, ids_buf_host.data(), ids_buf_host.size()*sizeof(int32_t), cudaMemcpyHostToDevice, stream)); - CUDA_CHECK(cudaStreamSynchronize(stream)); - - const int32_t * ids_src1_dev = ids_buf_dev.ptr; - const int32_t * ids_dst_dev = ids_src1_dev + ids_src1_host.size(); - const int32_t * expert_bounds_dev = ids_dst_dev + ids_dst_host.size(); - const size_t nbytes_src1_q8_1 = ne12*n_expert_used*ne10_padded * sizeof(block_q8_1)/QK8_1 + get_mmq_x_max_host(cc)*sizeof(block_q8_1_mmq); ggml_cuda_pool_alloc src1_q8_1(ctx.pool(), nbytes_src1_q8_1); @@ -208,7 +338,7 @@ void ggml_cuda_mul_mat_q( const int64_t s11 = src1->nb[1] / ts_src1; const int64_t s12 = src1->nb[2] / ts_src1; const int64_t s13 = src1->nb[2] / ts_src1; - quantize_mmq_q8_1_cuda(src1_d, ids_src1_dev, src1_q8_1.get(), src0->type, + quantize_mmq_q8_1_cuda(src1_d, ids_src1.get(), src1_q8_1.get(), src0->type, ne10, s11, s12, s13, ne10_padded, ne11_flat, ne12_flat, ne13_flat, stream); CUDA_CHECK(cudaGetLastError()); } @@ -218,11 +348,11 @@ void ggml_cuda_mul_mat_q( // Note that ne02 is used instead of ne12 because the number of y channels determines the z dimension of the CUDA grid. const mmq_args args = { - src0_d, src0->type, (const int *) src1_q8_1.ptr, ids_dst_dev, expert_bounds_dev, dst_d, + src0_d, src0->type, (const int *) src1_q8_1.get(), ids_dst.get(), expert_bounds.get(), dst_d, ne00, ne01, ne_get_rows, s01, ne_get_rows, s1, ne02, ne02, s02, s12, s2, ne03, ne13, s03, s13, s3, - use_stream_k}; + use_stream_k, ne12}; ggml_cuda_mul_mat_q_switch_type(ctx, args, stream); } @@ -262,7 +392,7 @@ void ggml_cuda_op_mul_mat_q( ne00, row_diff, src1_ncols, stride01, ne11, nrows_dst, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, - use_stream_k}; + use_stream_k, src1_ncols}; ggml_cuda_mul_mat_q_switch_type(ctx, args, stream); diff --git a/ggml/src/ggml-cuda/mmq.cuh b/ggml/src/ggml-cuda/mmq.cuh index 650f708067..c9a07e82fe 100644 --- a/ggml/src/ggml-cuda/mmq.cuh +++ b/ggml/src/ggml-cuda/mmq.cuh @@ -3138,7 +3138,8 @@ static __global__ void mul_mat_q( const int32_t * __restrict__ expert_bounds, float * __restrict__ dst, float * __restrict__ tmp_fixup, const int ncols_x, const int nrows_x, const int ncols_dst, const int stride_row_x, const int ncols_y, const int stride_col_dst, const int channel_ratio, const int nchannels_y, const int stride_channel_x, const int stride_channel_y, const int stride_channel_dst, - const int sample_ratio, const int nsamples_y, const int stride_sample_x, const int stride_sample_y, const int stride_sample_dst) { + const int sample_ratio, const int nsamples_y, const int stride_sample_x, const int stride_sample_y, const int stride_sample_dst, + const int ncols_max) { // Skip unused template specializations for faster compilation: if (mmq_x > get_mmq_x_max_device() || mmq_x % mmq_get_granularity_device(mmq_x) != 0) { @@ -3152,7 +3153,7 @@ static __global__ void mul_mat_q( constexpr int qk = ggml_cuda_type_traits::qk; constexpr int mmq_y = get_mmq_y_device(); - const int ntx = (ncols_dst + mmq_x - 1) / mmq_x; // Number of tiles x + const int ntx = (ncols_max + mmq_x - 1) / mmq_x; // Number of tiles x const int nty = (nrows_x + mmq_y - 1) / mmq_y; // Number of tiles y // Initialize the ids for writing back data with just the index. @@ -3376,7 +3377,8 @@ template static __global__ void mul_mat_q_stream_k_fixup( const int32_t * ids_dst, const int32_t * expert_bounds, float * __restrict__ dst, const float * __restrict__ tmp_last_tile, const int ncols_x, const int nrows_x, const int ncols_dst, const int stride_col_dst, - const int nchannels_y, const int stride_channel_dst, const int nsamples_y, const int stride_sample_dst) { + const int nchannels_y, const int stride_channel_dst, const int nsamples_y, const int stride_sample_dst, + const int ncols_max) { constexpr int mmq_y = get_mmq_y_device(); constexpr int qk = ggml_cuda_type_traits::qk; constexpr int blocks_per_iter = MMQ_ITER_K / qk; @@ -3387,7 +3389,7 @@ static __global__ void mul_mat_q_stream_k_fixup( float sum[mmq_x*mmq_y / (nwarps*warp_size)] = {0.0f}; - const int ntx = (ncols_dst + mmq_x - 1) / mmq_x; + const int ntx = (ncols_max + mmq_x - 1) / mmq_x; const int nty = (nrows_x + mmq_y - 1) / mmq_y; const int bidx0 = blockIdx.x; @@ -3528,7 +3530,7 @@ struct mmq_args { int64_t ncols_x; int64_t nrows_x; int64_t ncols_dst; int64_t stride_row_x; int64_t ncols_y; int64_t nrows_dst; int64_t nchannels_x; int64_t nchannels_y; int64_t stride_channel_x; int64_t stride_channel_y; int64_t stride_channel_dst; int64_t nsamples_x; int64_t nsamples_y; int64_t stride_sample_x; int64_t stride_sample_y; int64_t stride_sample_dst; - bool use_stream_k; + bool use_stream_k; int64_t ncols_max; }; template @@ -3558,7 +3560,7 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a CUDA_SET_SHARED_MEMORY_LIMIT((mul_mat_q), nbytes_shared); const int nty = (args.nrows_x + mmq_y - 1) / mmq_y; - const int ntx = (args.ncols_dst + mmq_x - 1) / mmq_x; + const int ntx = (args.ncols_max + mmq_x - 1) / mmq_x; const int ntzw = args.nchannels_y * args.nsamples_y; const dim3 block_nums_xy_tiling(nty, ntx, ntzw); @@ -3574,14 +3576,16 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, nullptr, args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst); + sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + args.ncols_max); } else { constexpr bool need_check = true; mul_mat_q<<>> (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, nullptr, args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst); + sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + args.ncols_max); } return; } @@ -3601,7 +3605,8 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst); + sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + args.ncols_max); if (!fixup_needed) { return; @@ -3609,14 +3614,16 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a mul_mat_q_stream_k_fixup<<>> (args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, args.ncols_x, args.nrows_x, args.ncols_dst, - args.nrows_dst, args.nchannels_y, args.stride_channel_dst, args.nsamples_y, args.stride_sample_dst); + args.nrows_dst, args.nchannels_y, args.stride_channel_dst, args.nsamples_y, args.stride_sample_dst, + args.ncols_max); } else { constexpr bool need_check = true; mul_mat_q<<>> (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst); + sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + args.ncols_max); if (!fixup_needed) { return; @@ -3624,7 +3631,8 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a mul_mat_q_stream_k_fixup<<>> (args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, args.ncols_x, args.nrows_x, args.ncols_dst, - args.nrows_dst, args.nchannels_y, args.stride_channel_dst, args.nsamples_y, args.stride_sample_dst); + args.nrows_dst, args.nchannels_y, args.stride_channel_dst, args.nsamples_y, args.stride_sample_dst, + args.ncols_max); } } @@ -3649,7 +3657,7 @@ void mul_mat_q_case(ggml_backend_cuda_context & ctx, const mmq_args & args, cuda continue; } - const int ntiles_x = (args.ncols_y + mmq_x - 1) / mmq_x; + const int ntiles_x = (args.ncols_max + mmq_x - 1) / mmq_x; if (ntiles_x < ntiles_x_best) { mmq_x_best = mmq_x; diff --git a/ggml/src/ggml-cuda/vendors/hip.h b/ggml/src/ggml-cuda/vendors/hip.h index 6e9c67aca0..c6a33d5de3 100644 --- a/ggml/src/ggml-cuda/vendors/hip.h +++ b/ggml/src/ggml-cuda/vendors/hip.h @@ -22,7 +22,10 @@ #define CU_MEM_ACCESS_FLAGS_PROT_READWRITE hipMemAccessFlagsProtReadWrite #define CU_CHECK(fn) {hipError_t err = fn; if(err != hipSuccess) { GGML_ABORT("HipVMM Failure: %s\n", hipGetErrorString(err)); }} #define __shfl_sync(mask, var, laneMask, width) __shfl(var, laneMask, width) +#define __shfl_up_sync(mask, var, laneMask, width) __shfl_up(var, laneMask, width) #define __shfl_xor_sync(mask, var, laneMask, width) __shfl_xor(var, laneMask, width) +#define __all_sync(mask, var) __all(var) +#define __any_sync(mask, var) __any(var) #define cublasCreate hipblasCreate #define cublasDestroy hipblasDestroy #define cublasGemmEx hipblasGemmEx From 111f8d06f0b9169059779a35f655b343242ccbb6 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Mon, 25 Aug 2025 11:27:34 -0400 Subject: [PATCH 104/174] metal: fix regression when no metal devices are present (#15531) --- ggml/src/ggml-metal/ggml-metal.m | 38 +++++++++++++++++--------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index b2ec7a263f..de52b3a4f4 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -93,35 +93,37 @@ static id ggml_backend_metal_device_acq(struct ggml_backend_metal_dev if (ctx->mtl_device == nil) { ctx->mtl_device = MTLCreateSystemDefaultDevice(); - ctx->has_simdgroup_reduction = [ctx->mtl_device supportsFamily:MTLGPUFamilyApple7]; - ctx->has_simdgroup_reduction |= [ctx->mtl_device supportsFamily:MTLGPUFamilyMetal3_GGML]; + if (ctx->mtl_device) { + ctx->has_simdgroup_reduction = [ctx->mtl_device supportsFamily:MTLGPUFamilyApple7]; + ctx->has_simdgroup_reduction |= [ctx->mtl_device supportsFamily:MTLGPUFamilyMetal3_GGML]; - ctx->has_simdgroup_mm = [ctx->mtl_device supportsFamily:MTLGPUFamilyApple7]; + ctx->has_simdgroup_mm = [ctx->mtl_device supportsFamily:MTLGPUFamilyApple7]; #if defined(GGML_METAL_HAS_RESIDENCY_SETS) - ctx->has_residency_sets = getenv("GGML_METAL_NO_RESIDENCY") == nil; + ctx->has_residency_sets = getenv("GGML_METAL_NO_RESIDENCY") == nil; #endif - ctx->has_bfloat = [ctx->mtl_device supportsFamily:MTLGPUFamilyMetal3_GGML]; - ctx->has_bfloat |= [ctx->mtl_device supportsFamily:MTLGPUFamilyApple6]; + ctx->has_bfloat = [ctx->mtl_device supportsFamily:MTLGPUFamilyMetal3_GGML]; + ctx->has_bfloat |= [ctx->mtl_device supportsFamily:MTLGPUFamilyApple6]; #if defined(GGML_METAL_USE_BF16) - ctx->use_bfloat = ctx->has_bfloat; + ctx->use_bfloat = ctx->has_bfloat; #else - ctx->use_bfloat = false; + ctx->use_bfloat = false; #endif - ctx->use_fusion = getenv("GGML_METAL_FUSION_DISABLE") == nil; + ctx->use_fusion = getenv("GGML_METAL_FUSION_DISABLE") == nil; - { - const char * val = getenv("GGML_METAL_FUSION_DEBUG"); - ctx->debug_fusion = val ? atoi(val) : 0; + { + const char * val = getenv("GGML_METAL_FUSION_DEBUG"); + ctx->debug_fusion = val ? atoi(val) : 0; + } + + memset(ctx->fuse_cnt, 0, sizeof(ctx->fuse_cnt)); + + ctx->max_size = ctx->mtl_device.maxBufferLength; + + strncpy(ctx->name, [[ctx->mtl_device name] UTF8String], sizeof(ctx->name) - 1); } - - memset(ctx->fuse_cnt, 0, sizeof(ctx->fuse_cnt)); - - ctx->max_size = ctx->mtl_device.maxBufferLength; - - strncpy(ctx->name, [[ctx->mtl_device name] UTF8String], sizeof(ctx->name) - 1); } ctx->mtl_device_ref_count++; From 886b97a5d693550c2da470c091d9d27bf38398f8 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Mon, 25 Aug 2025 10:47:16 -0500 Subject: [PATCH 105/174] tests: Generate unique input values for count_equal (#15487) This avoids backend-dependent behavior for argmax that leads to intermittent failures. --- tests/test-backend-ops.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 74886b4549..ef6f452195 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2209,6 +2209,26 @@ struct test_count_equal : public test_case { double max_nmse_err() override { return 0.0; } + + void initialize_tensors(ggml_context * ctx) override { + std::random_device rd; + std::default_random_engine rng(rd()); + for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) { + if (t->type == GGML_TYPE_F32) { + // initialize with unique values to avoid ties + for (int64_t r = 0; r < ggml_nrows(t); r++) { + std::vector data(t->ne[0]); + for (int i = 0; i < t->ne[0]; i++) { + data[i] = i; + } + std::shuffle(data.begin(), data.end(), rng); + ggml_backend_tensor_set(t, data.data(), r * t->nb[1], t->ne[0] * sizeof(float)); + } + } else { + init_tensor_uniform(t); + } + } + } }; // GGML_OP_REPEAT From 4d917cd4f64cc37744e76d084659475819fb0728 Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Mon, 25 Aug 2025 17:56:59 +0200 Subject: [PATCH 106/174] vulkan: fix min subgroup 16 condition for mmid subgroup optimization (#15565) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 4b959d844f..30e5317504 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2183,7 +2183,7 @@ static void ggml_vk_load_shaders(vk_device& device) { const uint32_t mul_mat_subgroup_size_32 = std::max(mul_mat_subgroup_size, 32u); const bool subgroup_min_size_16 = (!device->subgroup_size_control && device->subgroup_size >= 16) || - (device->subgroup_size_control && device->subgroup_min_size <= 16 && device->subgroup_max_size >= 16); + (device->subgroup_size_control && device->subgroup_max_size >= 16); // mulmat std::vector l_warptile, m_warptile, s_warptile, From f7207b0415986dd7f48447149da7de3a82338276 Mon Sep 17 00:00:00 2001 From: lhez Date: Mon, 25 Aug 2025 14:18:09 -0700 Subject: [PATCH 107/174] opencl: fix support ops condition for `rms_norm` (#15560) --- ggml/src/ggml-opencl/ggml-opencl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index df27501361..36b18ddb8a 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -2647,8 +2647,9 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te return op->src[0]->type == GGML_TYPE_F32; case GGML_OP_SOFT_MAX: case GGML_OP_NORM: - case GGML_OP_RMS_NORM: return true; + case GGML_OP_RMS_NORM: + return op->ne[0] % 4 == 0 && ggml_is_contiguous_rows(op->src[0]); case GGML_OP_REPEAT: return op->src[0]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32; // Assuming F32 for now, can be expanded case GGML_OP_PAD: From 74f52f77f28a5ad6d6075231afcb8d1ad763ca32 Mon Sep 17 00:00:00 2001 From: Qeeweew <68716978+Qeeweew@users.noreply.github.com> Date: Tue, 26 Aug 2025 05:21:22 +0800 Subject: [PATCH 108/174] CUDA: Accelerate MXFP4 table lookup using `__byte_perm` (#15451) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CUDA: optimize get_int_from_table_16 * CUDA: use v_perm_b32 to replace byte_perm on AMD GPUs * revise documentation --------- Co-authored-by: xix Co-authored-by: Johannes Gäßler --- ggml/src/ggml-cuda/vecdotq.cuh | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/ggml/src/ggml-cuda/vecdotq.cuh b/ggml/src/ggml-cuda/vecdotq.cuh index d60292b83b..6baab1176f 100644 --- a/ggml/src/ggml-cuda/vecdotq.cuh +++ b/ggml/src/ggml-cuda/vecdotq.cuh @@ -28,7 +28,58 @@ static __device__ __forceinline__ int get_int_b4(const void * x, const int & i32 return ((const int *) x)[i32]; // assume at least 4 byte alignment } +// q4 contains 8 indices with 4 bit each. +// This function selects those bytes from table that are at those indices and returns them as int2. +// The first int contains the bytes with even indices in q4, the second int contains the bytes with odd indices in q4. static __device__ __forceinline__ int2 get_int_from_table_16(const int & q4, const int8_t * table) { +#if defined(GGML_USE_HIP) + // Load the 16-byte table into four 32-bit unsigned integers. + const uint32_t *values = (const uint32_t *)table; + + const uint32_t q_even = q4; + const uint32_t q_odd = (q4 >> 4); + + // Perform lookups in the lower half of the table (indices 0-7). + uint32_t v_even_low = __builtin_amdgcn_perm(values[1], values[0], q_even & 0x07070707); + uint32_t v_odd_low = __builtin_amdgcn_perm(values[1], values[0], q_odd & 0x07070707); + + // Perform lookups in the upper half of the table (indices 8-15). + uint32_t v_even_high = __builtin_amdgcn_perm(values[3], values[2], q_even & 0x07070707); + uint32_t v_odd_high = __builtin_amdgcn_perm(values[3], values[2], q_odd & 0x07070707); + + // Select between the low and high results based on the MSB of each index nibble. + uint32_t mask_even = 0x03020100 | ((q_even & 0x08080808) >> 1); + uint32_t res_x = __builtin_amdgcn_perm(v_even_high, v_even_low, mask_even); + uint32_t mask_odd = 0x03020100 | ((q_odd & 0x08080808) >> 1); + uint32_t res_y = __builtin_amdgcn_perm(v_odd_high, v_odd_low, mask_odd); + + return make_int2(res_x, res_y); +#elif !defined(GGML_USE_MUSA) + // CUDA does not have an instruction for selecting bytes with 4 bit indices. + // However, __byte_perm is an instruction that selects bytes with 3 bit indices that can be used instead. + const uint32_t * table32 = (const uint32_t *) table; + + // __byte_perm selects bytes based on the lower 16 bits in its third argument. + // Therefore, do 2 iterations over the 32 bits in q4 with 0 and 16 shift. + // To handle the fourth bit, first call _byte_perm both for the low and the high 64 bit of table, using the low 3 bits. + // Then, call __byte_perm again to select from the low and high bytes based on the fourth bit. + uint32_t tmp[2]; + const uint32_t low_high_selection_indices = (0x32103210 | ((q4 & 0x88888888) >> 1)); +#pragma unroll + for (uint32_t i = 0; i < 2; ++i) { + const uint32_t shift = 16 * i; + + const uint32_t low = __byte_perm(table32[0], table32[1], q4 >> shift); + const uint32_t high = __byte_perm(table32[2], table32[3], q4 >> shift); + tmp[i] = __byte_perm(low, high, low_high_selection_indices >> shift); + } + + // tmp contains the bytes from tyble in the same order as the 4 bit indices in q4. + // However, for the result we need ints with all even/odd 4 bit indices in q4. + // Therefore, 2 more calls to __byte_perm to put the bytes in the correct order. + return make_int2(__byte_perm(tmp[0], tmp[1], 0x6420), __byte_perm(tmp[0], tmp[1], 0x7531)); +#else + // Generic implementation. const int q0_32 = (q4 >> 0) & 0x0F0F0F0F; const int8_t * q0_8 = (const int8_t *) &q0_32; const char4 val0_8 = make_char4( @@ -40,6 +91,7 @@ static __device__ __forceinline__ int2 get_int_from_table_16(const int & q4, con table[q1_8[0]], table[q1_8[1]], table[q1_8[2]], table[q1_8[3]]); return make_int2(*((const int *) &val0_8), *((const int *) &val1_8)); +#endif } // VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called From 34bdbbd7c2b70b848718e95bc48010f6aecd2816 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Mon, 25 Aug 2025 23:42:44 -0500 Subject: [PATCH 109/174] vulkan: Remove splitting for mul_mat_id (#15568) row_ids only needs to hold the BN rows for the current tile. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 38 ++----------------- .../ggml-vulkan/vulkan-shaders/mul_mm.comp | 33 +++++++++------- .../vulkan-shaders/mul_mm_cm2.comp | 19 ++++++---- tests/test-backend-ops.cpp | 1 + 4 files changed, 35 insertions(+), 56 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 30e5317504..04ad664e61 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2090,10 +2090,11 @@ static bool ggml_vk_matmul_shmem_support(const vk_device& device, const std::vec const uint32_t warps = warptile[0] / warptile[10]; const uint32_t load_bufs = (warptile[1] + warptile[2]) * (warptile[3] + bank_conflict_offset) * type_size; - const uint32_t mmid_row_ids = mul_mat_id ? (4096 * sizeof(uint32_t) + 4/*_ne1*/) : 0; + const uint32_t mmid_row_ids = mul_mat_id ? (warptile[2] * 2 * sizeof(uint16_t)) : 0; const uint32_t coopmat_stage = device->coopmat_support ? warptile[7] * warptile[8] / warps * sizeof(float) : 0; + const uint32_t ballots_sh = mul_mat_id ? (warps * 4 * sizeof(uint32_t)) : 0; - const uint32_t total_size = load_bufs + mmid_row_ids + coopmat_stage + lut_size; + const uint32_t total_size = load_bufs + mmid_row_ids + coopmat_stage + lut_size + ballots_sh; const bool supported = total_size <= device->properties.limits.maxComputeSharedMemorySize; VK_LOG_DEBUG("ggml_vk_matmul_shmem_support(warptile=(" << warptile[0] << "," << warptile[1] << "," << warptile[2] << "), " @@ -6288,7 +6289,6 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& const uint64_t nei0 = ids->ne[0]; const uint64_t nei1 = ids->ne[1]; - GGML_ASSERT(nei0 * nei1 <= 4096); const uint32_t nbi1 = ids->nb[1]; const uint32_t nbi2 = ids->nb[2]; @@ -6728,37 +6728,7 @@ static void ggml_vk_mul_mat_id(ggml_backend_vk_context * ctx, vk_context& subctx if (src2->ne[1] == 1 && (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type))) { ggml_vk_mul_mat_vec_id_q_f16(ctx, subctx, src0, src1, src2, dst, dryrun); } else { - // Split based on number of ids, to fit in shared memory - const uint32_t nei0 = (uint32_t)src2->ne[0]; - const uint32_t nei1 = (uint32_t)src2->ne[1]; - - GGML_ASSERT(nei0 <= 4096); - const uint32_t split_size = std::min(nei1, 4096u / nei0); - - if (split_size == nei1) { - ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, src1, src2, dst, dryrun); - } else { - ggml_tensor src1_copy = *src1; - ggml_tensor src2_copy = *src2; - ggml_tensor dst_copy = *dst; - - for (uint32_t token_start = 0; token_start < nei1; token_start += split_size) { - const uint32_t n_tokens = std::min(split_size, nei1 - token_start); - - src1_copy.view_offs = src1->view_offs + token_start * src1_copy.nb[2]; - src2_copy.view_offs = src2->view_offs + token_start * src2_copy.nb[1]; - dst_copy.view_offs = dst->view_offs + token_start * dst_copy.nb[2]; - - src1_copy.ne[2] = n_tokens; - src2_copy.ne[1] = n_tokens; - dst_copy.ne[2] = n_tokens; - - ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, &src1_copy, &src2_copy, &dst_copy, dryrun); - // invalidate cached prealloc_y, can't cache based on the copy of the ggml_tensor - ctx->prealloc_y_last_pipeline_used = {}; - ctx->prealloc_y_last_tensor_used = nullptr; - } - } + ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, src1, src2, dst, dryrun); } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index 40c0d9b0c5..5ecf68a643 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -109,13 +109,13 @@ shared FLOAT_TYPE buf_b[BN * SHMEM_STRIDE]; #define NUM_WARPS (BLOCK_SIZE / WARP) #ifdef MUL_MAT_ID -shared u16vec2 row_ids[4096]; +shared u16vec2 row_ids[BN]; uint _ne1; #ifdef MUL_MAT_ID_USE_SUBGROUPS shared uvec4 ballots_sh[NUM_WARPS]; -void load_row_ids(uint expert_idx, bool nei0_is_pow2) { +void load_row_ids(uint expert_idx, bool nei0_is_pow2, uint ic) { _ne1 = 0; uint num_elements = p.nei1 * p.nei0; uint nei0shift = findLSB(p.nei0); @@ -165,11 +165,14 @@ void load_row_ids(uint expert_idx, bool nei0_is_pow2) { barrier(); uint idx = subgroup_base + subgroupBallotExclusiveBitCount(ballot); - if (in_range && id == expert_idx) { - row_ids[_ne1 + idx] = u16vec2(ii0, ii1); + if (in_range && id == expert_idx && _ne1 + idx >= ic * BN && _ne1 + idx < (ic + 1) * BN) { + row_ids[_ne1 + idx - ic * BN] = u16vec2(ii0, ii1); } _ne1 += total; iter &= 15; + if (_ne1 >= (ic + 1) * BN) { + break; + } } barrier(); } @@ -242,16 +245,18 @@ void main() { #ifdef MUL_MAT_ID #ifdef MUL_MAT_ID_USE_SUBGROUPS if (bitCount(p.nei0) == 1) { - load_row_ids(expert_idx, true); + load_row_ids(expert_idx, true, ic); } else { - load_row_ids(expert_idx, false); + load_row_ids(expert_idx, false, ic); } #else _ne1 = 0; - for (uint ii1 = 0; ii1 < p.nei1; ii1++) { - for (uint ii0 = 0; ii0 < p.nei0; ii0++) { + for (uint ii1 = 0; ii1 < p.nei1 && _ne1 < (ic + 1) * BN; ii1++) { + for (uint ii0 = 0; ii0 < p.nei0 && _ne1 < (ic + 1) * BN; ii0++) { if (data_ids[ii1*p.nbi1 + ii0] == expert_idx) { - row_ids[_ne1] = u16vec2(ii0, ii1); + if (_ne1 >= ic * BN) { + row_ids[_ne1 - ic * BN] = u16vec2(ii0, ii1); + } _ne1++; } } @@ -797,7 +802,7 @@ void main() { [[unroll]] for (uint l = 0; l < BN; l += loadstride_b) { #if LOAD_VEC_B == 8 #ifdef MUL_MAT_ID - const u16vec2 row_idx = row_ids[ic * BN + loadc_b + l]; + const u16vec2 row_idx = row_ids[loadc_b + l]; const uint idx = pos_b + row_idx.y * p.batch_stride_b / LOAD_VEC_B + (row_idx.x % p.ne11) * p.stride_b / LOAD_VEC_B + loadr_b; #else const uint idx = pos_b + (loadc_b + l) * p.stride_b / LOAD_VEC_B + loadr_b; @@ -813,7 +818,7 @@ void main() { buf_b[buf_idx + 7] = FLOAT_TYPE(data_b[idx][1].w); #elif LOAD_VEC_B == 4 #ifdef MUL_MAT_ID - const u16vec2 row_idx = row_ids[ic * BN + loadc_b + l]; + const u16vec2 row_idx = row_ids[loadc_b + l]; const uint idx = pos_b + row_idx.y * p.batch_stride_b / LOAD_VEC_B + (row_idx.x % p.ne11) * p.stride_b / LOAD_VEC_B + loadr_b; #else const uint idx = pos_b + (loadc_b + l) * p.stride_b / LOAD_VEC_B + loadr_b; @@ -832,7 +837,7 @@ void main() { #else const uint row_i = ic * BN + loadc_b + l; if (row_i < _ne1 && block + loadr_b < end_k) { - const u16vec2 row_idx = row_ids[row_i]; + const u16vec2 row_idx = row_ids[loadc_b + l]; buf_b[(loadc_b + l) * SHMEM_STRIDE + loadr_b] = TO_FLOAT_TYPE(data_b[pos_b + row_idx.y * p.batch_stride_b + (row_idx.x % p.ne11) * p.stride_b + loadr_b]); } else { buf_b[(loadc_b + l) * SHMEM_STRIDE + loadr_b] = FLOAT_TYPE(0.0f); @@ -903,7 +908,7 @@ void main() { const uint row_i = dc + cm_col * TN + col + store_c; if (row_i >= _ne1) break; - const u16vec2 row_idx = row_ids[row_i]; + const u16vec2 row_idx = row_ids[row_i - ic * BN]; if (dr + cm_row * TM + store_r < p.M) { data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr + cm_row * TM + store_r] = D_TYPE(coopmat_stage[warp_i * TM * TN + (col + store_c) * TM + store_r]); @@ -953,7 +958,7 @@ void main() { const uint row_i = dc_warp + cc; if (row_i >= _ne1) break; - const u16vec2 row_idx = row_ids[row_i]; + const u16vec2 row_idx = row_ids[row_i - ic * BN]; #endif // MUL_MAT_ID [[unroll]] for (uint cr = 0; cr < TM; cr++) { #ifdef MUL_MAT_ID diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp index 4d16eb0791..f5aebf6e93 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp @@ -93,7 +93,7 @@ layout (binding = 2) writeonly buffer D {D_TYPE data_d[];}; #ifdef MUL_MAT_ID layout (binding = 3) readonly buffer IDS {int data_ids[];}; -shared u16vec4 row_ids[4096]; +shared u16vec4 row_ids[BN]; layout(buffer_reference, std430, buffer_reference_align = 2) buffer decodeBufB { B_TYPE b[]; @@ -111,7 +111,7 @@ B_TYPE decodeFuncB(const in decodeBufB bl, const in uint blockCoords[2], const i return B_TYPE(0.0); } - const u16vec4 row_idx = row_ids[row_i]; + const u16vec4 row_idx = row_ids[row_i & (BN - 1)]; B_TYPE ret = data_b[row_idx.y * p.batch_stride_b + row_idx.x * p.stride_b + blockCoords[1]]; return ret; @@ -123,14 +123,14 @@ D_TYPE perElemOpD(const in uint32_t r, const in uint32_t c, const in D_TYPE elem uint dc = ic * BN + c; if (dr < p.M && dc < _ne1) { - uint row_i = dc; + uint row_i = c; const u16vec4 row_idx = row_ids[row_i]; data_d[row_idx.y * p.batch_stride_d + row_idx.z * p.stride_d + dr] = elem; } return elem; } -void load_row_ids(uint expert_idx, bool nei0_is_pow2) { +void load_row_ids(uint expert_idx, bool nei0_is_pow2, uint ic) { _ne1 = 0; uint num_elements = p.nei1 * p.nei0; uint nei0shift = findLSB(p.nei0); @@ -180,11 +180,14 @@ void load_row_ids(uint expert_idx, bool nei0_is_pow2) { barrier(); uint idx = subgroup_base + subgroupBallotExclusiveBitCount(ballot); - if (in_range && id == expert_idx) { - row_ids[_ne1 + idx] = u16vec4(fastmod(ii0, p.ne11), ii1, ii0, 0); + if (in_range && id == expert_idx && _ne1 + idx >= ic * BN && _ne1 + idx < (ic + 1) * BN) { + row_ids[_ne1 + idx - ic * BN] = u16vec4(fastmod(ii0, p.ne11), ii1, ii0, 0); } _ne1 += total; iter &= 15; + if (_ne1 >= (ic + 1) * BN) { + break; + } } barrier(); } @@ -218,9 +221,9 @@ void main() { #ifdef MUL_MAT_ID if (bitCount(p.nei0) == 1) { - load_row_ids(expert_idx, true); + load_row_ids(expert_idx, true, ic); } else { - load_row_ids(expert_idx, false); + load_row_ids(expert_idx, false, ic); } // Workgroup has no work diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index ef6f452195..765521ffeb 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6017,6 +6017,7 @@ static std::vector> make_test_cases_eval() { // test large experts*tokens for (bool b : {false, true}) { test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, b, 32, 1024, 16)); + test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 2, 2, b, 32, 8192, 64)); } test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 1, 1, false, 8, 16, 1)); From 4c37636b3ea96f2574eeb7668b93fcc0e64b05dd Mon Sep 17 00:00:00 2001 From: Yoshi_likes_e4 <104140648+pt13762104@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:15:33 +0700 Subject: [PATCH 110/174] Add a warning for special devices (#15563) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add warning * Print the devices names * Add newlines * Apply suggestions from code review Co-authored-by: Johannes Gäßler * Fix vector names --------- Co-authored-by: Johannes Gäßler --- ggml/src/ggml-cuda/ggml-cuda.cu | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index aa45ab39ed..4494883415 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -204,6 +204,8 @@ static ggml_cuda_device_info ggml_cuda_init() { GGML_LOG_INFO("%s: GGML_CUDA_FORCE_CUBLAS: no\n", __func__); #endif // GGML_CUDA_FORCE_CUBLAS GGML_LOG_INFO("%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, info.device_count); + + std::vector> turing_devices_without_mma; for (int id = 0; id < info.device_count; ++id) { int device_vmm = 0; @@ -261,7 +263,25 @@ static ggml_cuda_device_info ggml_cuda_init() { info.devices[id].cc = 100*prop.major + 10*prop.minor; GGML_LOG_INFO(" Device %d: %s, compute capability %d.%d, VMM: %s\n", id, prop.name, prop.major, prop.minor, device_vmm ? "yes" : "no"); -#endif // defined(GGML_USE_HIP) + std::string device_name(prop.name); + if (device_name == "NVIDIA GeForce MX450") { + turing_devices_without_mma.push_back({ id, device_name }); + } else if (device_name == "NVIDIA GeForce MX550") { + turing_devices_without_mma.push_back({ id, device_name }); + } else if (device_name.substr(0, 21) == "NVIDIA GeForce GTX 16") { + turing_devices_without_mma.push_back({ id, device_name }); + } +#endif // defined(GGML_USE_HIP) + } + + if (ggml_cuda_highest_compiled_arch(GGML_CUDA_CC_TURING) >= GGML_CUDA_CC_TURING && !turing_devices_without_mma.empty()) { + GGML_LOG_INFO("The following devices will have suboptimal performance due to a lack of tensor cores:\n"); + for (size_t device_pos = 0; device_pos < turing_devices_without_mma.size(); device_pos++) { + GGML_LOG_INFO( + " Device %d: %s\n", turing_devices_without_mma[device_pos].first, turing_devices_without_mma[device_pos].second.c_str()); + } + GGML_LOG_INFO( + "Consider compiling with CMAKE_CUDA_ARCHITECTURES=61-virtual;80-virtual and DGGML_CUDA_FORCE_MMQ to force the use of the Pascal code for Turing.\n"); } for (int id = 0; id < info.device_count; ++id) { From 0fd90db5858e325358a5fbdaa4e327ee2a79d0d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 26 Aug 2025 08:51:43 +0200 Subject: [PATCH 111/174] metal : remove contiguous assertion for src0 in IM2COL (#15577) * remove contiguous assertion for src0 in IM2COL * add contiguous check in supports_op --- ggml/src/ggml-metal/ggml-metal.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index de52b3a4f4..dcd816a430 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -1876,7 +1876,7 @@ static bool ggml_metal_supports_op(const struct ggml_backend_metal_device_contex case GGML_OP_ROPE: return true; case GGML_OP_IM2COL: - return op->src[1]->type == GGML_TYPE_F32 && (op->type == GGML_TYPE_F16 || op->type == GGML_TYPE_F32); + return ggml_is_contiguous(op->src[1]) && op->src[1]->type == GGML_TYPE_F32 && (op->type == GGML_TYPE_F16 || op->type == GGML_TYPE_F32); case GGML_OP_POOL_1D: return false; case GGML_OP_UPSCALE: @@ -4731,7 +4731,6 @@ static int ggml_metal_encode_node( } break; case GGML_OP_IM2COL: { - GGML_ASSERT(ggml_is_contiguous(src0)); GGML_ASSERT(ggml_is_contiguous(src1)); GGML_ASSERT(src1->type == GGML_TYPE_F32); GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32); From 39842a7f73012eb42816ca4f26411782bd3da7c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 26 Aug 2025 09:08:08 +0200 Subject: [PATCH 112/174] gguf-py : remove erroneous FFN_GATE entry (#15583) --- gguf-py/gguf/tensor_mapping.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 87edaa3232..38bbd6e310 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -427,7 +427,6 @@ class TensorNameMap: "model.layers.{bid}.residual_mlp.w1", # arctic "transformer.h.{bid}.mlp.c_fc_0", # exaone "model.layers.{bid}.feed_forward.gate_proj", # llama4 jamba granite-hybrid - "model.layers.{bid}.block_sparse_moe.gate", # smallthinker "model.transformer.blocks.{bid}.ff_proj", # llada "layers.{bid}.mlp.gate_proj", # qwen3-embedding ), From c4e9239064a564de7b94ee2b401ae907235a8fca Mon Sep 17 00:00:00 2001 From: tc-mb <157115220+tc-mb@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:05:55 +0800 Subject: [PATCH 113/174] model : support MiniCPM-V 4.5 (#15575) --- docs/multimodal/minicpmv4.0.md | 2 +- docs/multimodal/minicpmv4.5.md | 47 +++++++++++++++++++ tools/mtmd/clip.cpp | 5 ++ .../minicpmv-convert-image-encoder-to-gguf.py | 7 +++ tools/mtmd/mtmd.cpp | 2 +- 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 docs/multimodal/minicpmv4.5.md diff --git a/docs/multimodal/minicpmv4.0.md b/docs/multimodal/minicpmv4.0.md index 65887d9601..d04cb338ce 100644 --- a/docs/multimodal/minicpmv4.0.md +++ b/docs/multimodal/minicpmv4.0.md @@ -6,7 +6,7 @@ Download [MiniCPM-V-4](https://huggingface.co/openbmb/MiniCPM-V-4) PyTorch model ### Build llama.cpp -Readme modification time: 20250206 +Readme modification time: 20250731 If there are differences in usage, please refer to the official build [documentation](https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md) diff --git a/docs/multimodal/minicpmv4.5.md b/docs/multimodal/minicpmv4.5.md new file mode 100644 index 0000000000..8fea5e611d --- /dev/null +++ b/docs/multimodal/minicpmv4.5.md @@ -0,0 +1,47 @@ +## MiniCPM-V 4.5 + +### Prepare models and code + +Download [MiniCPM-V-4_5](https://huggingface.co/openbmb/MiniCPM-V-4_5) PyTorch model from huggingface to "MiniCPM-V-4_5" folder. + + +### Build llama.cpp +Readme modification time: 20250826 + +If there are differences in usage, please refer to the official build [documentation](https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md) + +Clone llama.cpp: +```bash +git clone https://github.com/ggerganov/llama.cpp +cd llama.cpp +``` + +Build llama.cpp using `CMake`: +```bash +cmake -B build +cmake --build build --config Release +``` + + +### Usage of MiniCPM-V 4 + +Convert PyTorch model to gguf files (You can also download the converted [gguf](https://huggingface.co/openbmb/MiniCPM-V-4_5-gguf) by us) + +```bash +python ./tools/mtmd/legacy-models/minicpmv-surgery.py -m ../MiniCPM-V-4_5 +python ./tools/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py -m ../MiniCPM-V-4_5 --minicpmv-projector ../MiniCPM-V-4_5/minicpmv.projector --output-dir ../MiniCPM-V-4_5/ --minicpmv_version 6 +python ./convert_hf_to_gguf.py ../MiniCPM-V-4_5/model + +# quantize int4 version +./build/bin/llama-quantize ../MiniCPM-V-4_5/model/ggml-model-f16.gguf ../MiniCPM-V-4_5/model/ggml-model-Q4_K_M.gguf Q4_K_M +``` + + +Inference on Linux or Mac +```bash +# run in single-turn mode +./build/bin/llama-mtmd-cli -m ../MiniCPM-V-4_5/model/ggml-model-f16.gguf --mmproj ../MiniCPM-V-4_5/mmproj-model-f16.gguf -c 4096 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 --image xx.jpg -p "What is in the image?" + +# run in conversation mode +./build/bin/llama-mtmd-cli -m ../MiniCPM-V-4_5/model/ggml-model-Q4_K_M.gguf --mmproj ../MiniCPM-V-4_5/mmproj-model-f16.gguf +``` diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index b3628db64f..0e76b9c590 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -2202,6 +2202,8 @@ struct clip_model_loader { hparams.minicpmv_query_num = 64; } else if (hparams.minicpmv_version == 5) { hparams.minicpmv_query_num = 64; + } else if (hparams.minicpmv_version == 6) { + hparams.minicpmv_query_num = 64; } else { hparams.minicpmv_query_num = 96; } @@ -3685,6 +3687,9 @@ int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * im } else if (params.minicpmv_version == 5) { // MiniCPM-V 4.0 n_patches = 64; + } else if (params.minicpmv_version == 6) { + // MiniCPM-V 4.5 + n_patches = 64; } else { GGML_ABORT("Unknown minicpmv version"); } diff --git a/tools/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py b/tools/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py index 4dda60a211..f34d858d67 100644 --- a/tools/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py +++ b/tools/mtmd/legacy-models/minicpmv-convert-image-encoder-to-gguf.py @@ -607,6 +607,9 @@ else: elif minicpmv_version == 5: emb_dim = 2560 block_count = 27 + elif minicpmv_version == 6: + emb_dim = 4096 + block_count = 27 default_vision_config = { "hidden_size": 1152, @@ -630,6 +633,10 @@ elif minicpmv_version == 5: default_vision_config["model_type"] = "siglip_vision_model" vision_config = SiglipVisionConfig(**default_vision_config) model = SiglipVisionTransformer(vision_config) +elif minicpmv_version == 6: + default_vision_config["model_type"] = "siglip_vision_model" + vision_config = SiglipVisionConfig(**default_vision_config) + model = SiglipVisionTransformer(vision_config) processor = None # if model.attn_pool is not None: diff --git a/tools/mtmd/mtmd.cpp b/tools/mtmd/mtmd.cpp index a05373d5b3..cd022c5e24 100644 --- a/tools/mtmd/mtmd.cpp +++ b/tools/mtmd/mtmd.cpp @@ -207,7 +207,7 @@ struct mtmd_context { tok_row_end_trail = false; // no trailing end-of-row token ov_img_first = true; - } else if (minicpmv_version == 3 || minicpmv_version == 4 || minicpmv_version == 5) { + } else if (minicpmv_version == 3 || minicpmv_version == 4 || minicpmv_version == 5 || minicpmv_version == 6) { // minicpmv 2.6 format: // (overview) (slice) (slice) \n ... slice_tmpl = MTMD_SLICE_TMPL_MINICPMV_2_6; From 1d8d83deaa48d4a5491820d58ff1c0d8cf9d196c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 26 Aug 2025 12:46:15 +0300 Subject: [PATCH 114/174] metal : improve `MUL_MAT_ID` (#15541) * metal : mul_mm_id remove hdst * metal : remove mul_mm_id hsrc1 * metal : mul_mm_id simplify + add test * metal : opt mul_mm_id map0 * metal : optimize mul_mm_id id gathering * metal : mul/div opt * metal : optimize mul_mm_id_map0 ggml-ci --- ggml/src/ggml-metal/ggml-metal-impl.h | 31 ++-- ggml/src/ggml-metal/ggml-metal.m | 141 ++++++---------- ggml/src/ggml-metal/ggml-metal.metal | 235 +++++++++++++------------- tests/test-backend-ops.cpp | 1 + 4 files changed, 180 insertions(+), 228 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal-impl.h b/ggml/src/ggml-metal/ggml-metal-impl.h index fc6526d6d5..82c1ac1da0 100644 --- a/ggml/src/ggml-metal/ggml-metal-impl.h +++ b/ggml/src/ggml-metal/ggml-metal-impl.h @@ -320,40 +320,31 @@ typedef struct { } ggml_metal_kargs_mul_mv_ext; typedef struct { + int32_t ne02; int32_t ne10; int32_t ne11; // n_expert_used (bcast) uint64_t nb11; uint64_t nb12; - int32_t neh11; // n_tokens - uint64_t nbh11; + int32_t ne21; // n_tokens int32_t ne20; // n_expert_used uint64_t nb21; } ggml_metal_kargs_mul_mm_id_map0; -typedef struct { - int32_t ne20; // n_expert_used - int32_t neh0; - int32_t neh1; - uint64_t nbh1; - uint64_t nbh2; - int32_t ne0; - uint64_t nb1; - uint64_t nb2; -} ggml_metal_kargs_mul_mm_id_map1; - typedef struct { int32_t ne00; int32_t ne02; uint64_t nb01; uint64_t nb02; uint64_t nb03; - int32_t neh12; - uint64_t nbh10; - uint64_t nbh11; - uint64_t nbh12; - uint64_t nbh13; - int32_t neh0; - int32_t neh1; + int32_t ne11; + uint64_t nb10; + uint64_t nb11; + uint64_t nb12; + uint64_t nb13; + int32_t ne20; + int32_t ne21; + int32_t ne0; + int32_t ne1; int16_t r2; int16_t r3; } ggml_metal_kargs_mul_mm_id; diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index dcd816a430..7a05a98278 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -398,8 +398,12 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32, GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32, GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP1_F32, + GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_1, + GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_2, + GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_4, + GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_6, + GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_8, + GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_16, GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F16, GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F16, GGML_METAL_KERNEL_TYPE_MUL_MM_ID_BF16_F16, @@ -1428,8 +1432,12 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32, mul_mm_iq1_m_f32, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32, mul_mm_iq4_nl_f32, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32, mul_mm_iq4_xs_f32, has_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16, mul_mm_id_map0_f16, has_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP1_F32, mul_mm_id_map1_f32, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_1, mul_mm_id_map0_f16_ne20_1, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_2, mul_mm_id_map0_f16_ne20_2, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_4, mul_mm_id_map0_f16_ne20_4, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_6, mul_mm_id_map0_f16_ne20_6, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_8, mul_mm_id_map0_f16_ne20_8, has_simdgroup_mm); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_16, mul_mm_id_map0_f16_ne20_16, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F16, mul_mm_id_f32_f16, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F16, mul_mm_id_f16_f16, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_BF16_F16, mul_mm_id_bf16_f16, has_simdgroup_mm && use_bfloat); @@ -3908,38 +3916,6 @@ static int ggml_metal_encode_node( default: break; } - const int64_t neh10 = ne10; // n_embd - const int64_t neh11 = ne21; // n_tokens - const int64_t neh12 = ne02; // n_expert - - const uint64_t nbh10 = ggml_type_size(GGML_TYPE_F16); - const uint64_t nbh11 = nbh10*neh10; - const uint64_t nbh12 = nbh11*neh11; - const uint64_t nbh13 = nbh12*neh12; - - const size_t s_src1 = ggml_type_size(GGML_TYPE_F16)*neh10*neh11*neh12; - id h_src1 = ggml_metal_mem_pool_alloc(mem_pool, s_src1); - if (!h_src1) { - GGML_LOG_ERROR("%s: failed to allocate buffer from memory pool, size = %zu\n", __func__, s_src1); - return 0; - } - - const int64_t neh0 = ne0; - const int64_t neh1 = ne21; - const int64_t neh2 = ne02; - - const uint64_t nbh0 = ggml_type_size(GGML_TYPE_F32); - const uint64_t nbh1 = nbh0*neh0; - const uint64_t nbh2 = nbh1*neh1; - //const uint64_t nbh3 = nbh2*neh2; - - const size_t s_dst = ggml_type_size(GGML_TYPE_F32)*neh0*neh1*neh2; - id h_dst = ggml_metal_mem_pool_alloc(mem_pool, s_dst); - if (!h_dst) { - GGML_LOG_ERROR("%s: failed to allocate buffer from memory pool, size = %zu\n", __func__, s_dst); - return 0; - } - // tokens per expert const size_t s_tpe = ggml_type_size(GGML_TYPE_I32)*ne02; id h_tpe = ggml_metal_mem_pool_alloc(mem_pool, s_tpe); @@ -3949,8 +3925,8 @@ static int ggml_metal_encode_node( } // id map - // [n_expert_used, n_tokens] - const size_t s_ids = ggml_type_size(GGML_TYPE_I32)*ne20*ne21; + // [n_tokens, n_expert] + const size_t s_ids = ggml_type_size(GGML_TYPE_I32)*ne21*ne02; id h_ids = ggml_metal_mem_pool_alloc(mem_pool, s_ids); if (!h_ids) { GGML_LOG_ERROR("%s: failed to allocate buffer from memory pool, size = %zu\n", __func__, s_ids); @@ -3958,32 +3934,45 @@ static int ggml_metal_encode_node( } { - const int nth = MIN(1024, ne10/4); - ggml_metal_kargs_mul_mm_id_map0 args = { + ne02, ne10, - ne11, // n_expert_used (bcast) + ne11, // n_expert_used (bcast) nb11, nb12, - neh11, // n_tokens - nbh11, - ne20, // n_expert_used + ne21, // n_tokens + ne20, // n_expert_used nb21, }; id pipeline = nil; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16].pipeline; + pipeline = nil; + + switch (ne20) { + case 1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_1 ].pipeline; break; + case 2: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_2 ].pipeline; break; + case 4: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_4 ].pipeline; break; + case 6: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_6 ].pipeline; break; + case 8: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_8 ].pipeline; break; + case 16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP0_F16_NE20_16].pipeline; break; + default: GGML_ABORT("missing specialization for ne20 = %d", (int) ne20); + } + + GGML_ASSERT(ne02 <= (int) pipeline.maxTotalThreadsPerThreadgroup); + + const size_t smem = ne02*ne20*sizeof(uint16_t); + + GGML_ASSERT(smem <= device.maxThreadgroupMemoryLength); [encoder setComputePipelineState:pipeline]; [encoder setBytes:&args length:sizeof(args) atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_src2 offset:offs_src2 atIndex:2]; - [encoder setBuffer: h_src1 offset:0 atIndex:3]; - [encoder setBuffer: h_tpe offset:0 atIndex:4]; - [encoder setBuffer: h_ids offset:0 atIndex:5]; + [encoder setBuffer:id_src2 offset:offs_src2 atIndex:1]; + [encoder setBuffer: h_tpe offset:0 atIndex:2]; + [encoder setBuffer: h_ids offset:0 atIndex:3]; + [encoder setThreadgroupMemoryLength:smem atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(ne02, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; + [encoder dispatchThreadgroups:MTLSizeMake(1, 1, 1) threadsPerThreadgroup:MTLSizeMake(ne02, 1, 1)]; } { @@ -4022,13 +4011,15 @@ static int ggml_metal_encode_node( /*.nb01 =*/ nb01, /*.nb02 =*/ nb02, /*.nb03 =*/ nb03, - /*.neh12 =*/ neh12, - /*.nbh10 =*/ nbh10, - /*.nbh11 =*/ nbh11, - /*.nbh12 =*/ nbh12, - /*.nbh13 =*/ nbh13, - /*.neh0 =*/ neh0, - /*.neh1 =*/ neh1, + /*.ne11 =*/ ne11, // n_expert_used (bcast) + /*.nb10 =*/ nb10, + /*.nb11 =*/ nb11, + /*.nb12 =*/ nb12, + /*.nb13 =*/ nb13, + /*.ne20 =*/ ne20, // n_expert_used + /*.ne21 =*/ ne21, // n_tokens + /*.ne0 =*/ ne0, + /*.ne1 =*/ ne1, /*.r2 =*/ r2, /*.r3 =*/ r3, }; @@ -4036,42 +4027,14 @@ static int ggml_metal_encode_node( [encoder setComputePipelineState:pipeline]; [encoder setBytes:&args length:sizeof(args) atIndex:0]; [encoder setBuffer:id_src0 offset:offs_src0 atIndex:1]; - [encoder setBuffer: h_src1 offset:0 atIndex:2]; + [encoder setBuffer:id_src1 offset:offs_src1 atIndex:2]; [encoder setBuffer: h_tpe offset:0 atIndex:3]; - [encoder setBuffer: h_dst offset:0 atIndex:4]; + [encoder setBuffer: h_ids offset:0 atIndex:4]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:5]; [encoder setThreadgroupMemoryLength:8192 atIndex:0]; [encoder dispatchThreadgroups:MTLSizeMake((ne21 + 31)/32, (ne01 + 63)/64, ne02) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)]; } - - { - GGML_ASSERT(ne0 % 4 == 0); - - const int nth = MIN(1024, ne0/4); - - ggml_metal_kargs_mul_mm_id_map1 args = { - ne20, // n_expert_used - neh0, - neh1, - nbh1, - nbh2, - ne0, - nb1, - nb2, - }; - - id pipeline = nil; - - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_MAP1_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBytes:&args length:sizeof(args) atIndex:0]; - [encoder setBuffer: h_dst offset:0 atIndex:1]; - [encoder setBuffer: h_ids offset:0 atIndex:2]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:3]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne20, ne21, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } } else { id pipeline = nil; diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index 3dd55fd325..7037c1aa0d 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -974,9 +974,16 @@ kernel void kernel_mul( device const char * src1_ptr = src1 + i13*args.nb13 + i12*args.nb12 + i11*args.nb11 + args.o1[0]; device char * dst_ptr = dst + i03*args.nb3 + i02*args.nb2 + i01*args.nb1 + args.offs; - for (int i0 = tpitg.x; i0 < args.ne0; i0 += ntg.x) { - const int i10 = i0%args.ne10; - *((device float *)(dst_ptr + i0*args.nb0)) = *((device float *)(src0_ptr + i0*args.nb00)) * *((device float *)(src1_ptr + i10*args.nb10)); + if (args.ne10 == 1) { + const float x = *((device float *)(src1_ptr)); + for (int i0 = tpitg.x; i0 < args.ne0; i0 += ntg.x) { + *((device float *)(dst_ptr + i0*args.nb0)) = *((device float *)(src0_ptr + i0*args.nb00)) * x; + } + } else { + for (int i0 = tpitg.x; i0 < args.ne0; i0 += ntg.x) { + const int i10 = i0%args.ne10; + *((device float *)(dst_ptr + i0*args.nb0)) = *((device float *)(src0_ptr + i0*args.nb00)) * *((device float *)(src1_ptr + i10*args.nb10)); + } } } @@ -1000,9 +1007,16 @@ kernel void kernel_div( device const char * src1_ptr = src1 + i13*args.nb13 + i12*args.nb12 + i11*args.nb11 + args.o1[0]; device char * dst_ptr = dst + i03*args.nb3 + i02*args.nb2 + i01*args.nb1 + args.offs; - for (int i0 = tpitg.x; i0 < args.ne0; i0 += ntg.x) { - const int i10 = i0%args.ne10; - *((device float *)(dst_ptr + i0*args.nb0)) = *((device float *)(src0_ptr + i0*args.nb00)) / *((device float *)(src1_ptr + i10*args.nb10)); + if (args.ne10 == 1) { + const float x = 1.0f / *((device float *)(src1_ptr)); + for (int i0 = tpitg.x; i0 < args.ne0; i0 += ntg.x) { + *((device float *)(dst_ptr + i0*args.nb0)) = *((device float *)(src0_ptr + i0*args.nb00)) * x; + } + } else { + for (int i0 = tpitg.x; i0 < args.ne0; i0 += ntg.x) { + const int i10 = i0%args.ne10; + *((device float *)(dst_ptr + i0*args.nb0)) = *((device float *)(src0_ptr + i0*args.nb00)) / *((device float *)(src1_ptr + i10*args.nb10)); + } } } @@ -7491,97 +7505,81 @@ kernel void kernel_mul_mm( } } -template +template // n_expert_used kernel void kernel_mul_mm_id_map0( constant ggml_metal_kargs_mul_mm_id_map0 & args, - device const char * src1, device const char * src2, - device char * hsrc1, device char * htpe, device char * hids, - uint3 tgpig[[threadgroup_position_in_grid]], - ushort3 tpitg[[thread_position_in_threadgroup]], - ushort3 ntg[[threads_per_threadgroup]]) { - const int ide = tgpig[0]; // expert id + threadgroup char * shmem [[threadgroup(0)]], + ushort tpitg[[thread_position_in_threadgroup]], + ushort ntg[[threads_per_threadgroup]]) { + const short ide = tpitg; // expert id - int n_all = 0; + uint32_t n_all = 0; - device int32_t * ids_i32 = (device int32_t *) (hids); + device int32_t * ids_i32 = (device int32_t *) hids + ide*args.ne21; - for (int i21 = 0; i21 < args.neh11; i21++) { // n_tokens - device const int32_t * src2_i32 = (device const int32_t *) (src2 + i21*args.nb21); + for (int i21 = 0; i21 < args.ne21; i21 += ntg) { // n_tokens + if (i21 + tpitg < args.ne21) { + device const int32_t * src2_i32 = (device const int32_t *) (src2 + (i21 + tpitg)*args.nb21); - for (int i20 = 0; i20 < args.ne20; i20++) { // n_expert_used - if (src2_i32[i20] != ide) { - continue; + threadgroup uint16_t * sids = (threadgroup uint16_t *) shmem + tpitg*ne20; + + #pragma unroll(ne20) + for (short i20 = 0; i20 < ne20; i20++) { + sids[i20] = src2_i32[i20]; } - - device const float4 * src1_f32x4 = (device const float4 *) ( src1 + i21*args.nb12 + (i20%args.ne11)*args.nb11); - device T4 * hsrc1_f32x4 = (device T4 *) (hsrc1 + (ide*args.neh11 + n_all)*args.nbh11); - - for (int64_t i00 = tpitg.x; i00 < args.ne10/4; i00 += ntg.x) { - hsrc1_f32x4[i00] = (T4) (src1_f32x4[i00]); - } - - if (tpitg.x == 0) { - ids_i32[i21*args.ne20 + i20] = ide*args.neh11 + n_all; - } - - ++n_all; } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + for (short t = 0; t < ntg; t++) { + if (i21 + t >= args.ne21) { + break; + } + + threadgroup const uint16_t * sids = (threadgroup const uint16_t *) shmem + t*ne20; + + short sel = 0; + #pragma unroll(ne20) + for (short i20 = 0; i20 < ne20; i20++) { + sel += (sids[i20] == ide)*(i20 + 1); + } + + ids_i32[n_all] = (i21 + t)*ne20 + sel - 1; + + n_all += sel > 0; + } + + threadgroup_barrier(mem_flags::mem_threadgroup); } - if (tpitg.x == 0) { - device int32_t * tpe_i32 = (device int32_t *) (htpe); - tpe_i32[ide] = n_all; - } + device uint32_t * tpe_u32 = (device uint32_t *) (htpe); + tpe_u32[ide] = n_all; } -typedef decltype(kernel_mul_mm_id_map0) kernel_mul_mm_id_map0_t; +typedef decltype(kernel_mul_mm_id_map0<1>) kernel_mul_mm_id_map0_t; -template [[host_name("kernel_mul_mm_id_map0_f16")]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0; - -template -kernel void kernel_mul_mm_id_map1( - constant ggml_metal_kargs_mul_mm_id_map1 & args, - device const char * hdst, - device const char * hids, - device char * dst, - uint3 tgpig[[threadgroup_position_in_grid]], - ushort3 tpitg[[thread_position_in_threadgroup]], - ushort3 ntg[[threads_per_threadgroup]]) { - const int i20 = tgpig[0]; // used expert - const int i21 = tgpig[1]; // token - - device const int32_t * ids_i32 = (device const int32_t *) (hids); - device float4 * dst_f32x4 = (device float4 *) (dst + i20*args.nb1 + i21*args.nb2); - - const int id = ids_i32[i21*args.ne20 + i20]; - - const int ide = id / args.neh1; - const int idt = id % args.neh1; - - device const float4 * hdst_f32x4 = (device const float4 *) (hdst + idt*args.nbh1 + ide*args.nbh2); - - for (int64_t i0 = tpitg.x; i0 < args.neh0/4; i0 += ntg.x) { - dst_f32x4[i0] = hdst_f32x4[i0]; - } -} - -typedef decltype(kernel_mul_mm_id_map1) kernel_mul_mm_id_map1_t; - -template [[host_name("kernel_mul_mm_id_map1_f32")]] kernel kernel_mul_mm_id_map1_t kernel_mul_mm_id_map1; +template [[host_name("kernel_mul_mm_id_map0_f16_ne20_1" )]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0<1>; +template [[host_name("kernel_mul_mm_id_map0_f16_ne20_2" )]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0<2>; +template [[host_name("kernel_mul_mm_id_map0_f16_ne20_4" )]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0<4>; +template [[host_name("kernel_mul_mm_id_map0_f16_ne20_6" )]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0<6>; +template [[host_name("kernel_mul_mm_id_map0_f16_ne20_8" )]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0<8>; +template [[host_name("kernel_mul_mm_id_map0_f16_ne20_16")]] kernel kernel_mul_mm_id_map0_t kernel_mul_mm_id_map0<16>; template kernel void kernel_mul_mm_id( constant ggml_metal_kargs_mul_mm_id & args, device const char * src0, device const char * src1, - device const char * tpe, + device const char * htpe, + device const char * hids, device char * dst, threadgroup char * shmem [[threadgroup(0)]], uint3 tgpig[[threadgroup_position_in_grid]], ushort tiitg[[thread_index_in_threadgroup]], + ushort tiisg[[thread_index_in_simdgroup]], ushort sgitg[[simdgroup_index_in_threadgroup]]) { threadgroup T * sa = (threadgroup T *)(shmem); @@ -7589,19 +7587,20 @@ kernel void kernel_mul_mm_id( const int r0 = tgpig.y; const int r1 = tgpig.x; - const int im = tgpig.z; + const int im = tgpig.z; // expert - device const int32_t * tpe_i32 = (device const int32_t *) (tpe); + device const uint32_t * tpe_u32 = (device const uint32_t *) (htpe); + device const int32_t * ids_i32 = (device const int32_t *) (hids); - const int neh1 = tpe_i32[im]; + const int32_t neh1 = tpe_u32[im]; if (r1*BLOCK_SIZE_N >= neh1) { return; } // if this block is of 64x32 shape or smaller - const short n_rows = (args.neh0 - r0*BLOCK_SIZE_M < BLOCK_SIZE_M) ? (args.neh0 - r0*BLOCK_SIZE_M) : BLOCK_SIZE_M; - const short n_cols = ( neh1 - r1*BLOCK_SIZE_N < BLOCK_SIZE_N) ? ( neh1 - r1*BLOCK_SIZE_N) : BLOCK_SIZE_N; + const short n_rows = (args.ne0 - r0*BLOCK_SIZE_M < BLOCK_SIZE_M) ? (args.ne0 - r0*BLOCK_SIZE_M) : BLOCK_SIZE_M; + const short n_cols = ( neh1 - r1*BLOCK_SIZE_N < BLOCK_SIZE_N) ? ( neh1 - r1*BLOCK_SIZE_N) : BLOCK_SIZE_N; // a thread shouldn't load data outside of the matrix const short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1; @@ -7617,20 +7616,23 @@ kernel void kernel_mul_mm_id( short il = (tiitg % THREAD_PER_ROW); - const int i12 = im%args.neh12; - const int i13 = im/args.neh12; + const int id = ids_i32[im*args.ne21 + r1*BLOCK_SIZE_N + thread_col]; - const uint64_t offset0 = (i12/args.r2)*args.nb02 + (i13/args.r3)*args.nb03; + const short i11 = (id % args.ne20) % args.ne11; + const short i12 = (id / args.ne20); + const short i13 = 0; + + const uint64_t offset0 = im*args.nb02 + i13*args.nb03; const short offset1 = il/nl; device const block_q * x = (device const block_q *)(src0 + args.nb01*(r0*BLOCK_SIZE_M + thread_row) + offset0) + offset1; - device const half * y = (device const half *)(src1 - + args.nbh13*i13 - + args.nbh12*i12 - + args.nbh11*(r1*BLOCK_SIZE_N + thread_col) - + args.nbh10*(BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL))); + device const float * y = (device const float *)(src1 + + args.nb13*i13 + + args.nb12*i12 + + args.nb11*i11 + + args.nb10*(BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL))); for (int loop_k = 0; loop_k < args.ne00; loop_k += BLOCK_SIZE_K) { // load data and store to threadgroup memory @@ -7646,7 +7648,7 @@ kernel void kernel_mul_mm_id( + (tiitg/THREAD_PER_ROW)%8 + (i&7)*8) = temp_a[i/4][i%4]; } - *(threadgroup half2x4 *)(sb + 32*8*(tiitg%THREAD_PER_COL) + 8*(tiitg/THREAD_PER_COL)) = *((device half2x4 *) y); + *(threadgroup half2x4 *)(sb + 32*8*(tiitg%THREAD_PER_COL) + 8*(tiitg/THREAD_PER_COL)) = (half2x4)(*((device float2x4 *) y)); il = (il + 2 < nl) ? il + 2 : il % 2; x = (il < 2) ? x + (2 + nl - 1)/nl : x; @@ -7682,43 +7684,38 @@ kernel void kernel_mul_mm_id( } } - if ((r0 + 1) * BLOCK_SIZE_M <= args.neh0 && (r1 + 1) * BLOCK_SIZE_N <= neh1) { - device float * C = (device float *) dst + - (BLOCK_SIZE_M * r0 + 32*(sgitg & 1)) + \ - (BLOCK_SIZE_N * r1 + 16*(sgitg >> 1)) * args.neh0 + im*args.neh1*args.neh0; + threadgroup_barrier(mem_flags::mem_threadgroup); - for (short i = 0; i < 8; i++) { - simdgroup_store(mc[i], C + 8 * (i%4) + 8 * args.neh0 * (i/4), args.neh0); - } - } else { - // block is smaller than 64x32, we should avoid writing data outside of the matrix - threadgroup_barrier(mem_flags::mem_threadgroup); - threadgroup float * temp_str = ((threadgroup float *) shmem) \ - + 32*(sgitg&1) + (16*(sgitg >> 1))*BLOCK_SIZE_M; - for (short i = 0; i < 8; i++) { - simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*BLOCK_SIZE_M*(i/4), BLOCK_SIZE_M); + threadgroup float * temp_str = ((threadgroup float *) shmem) \ + + 32*(sgitg&1) + (16*(sgitg >> 1))*BLOCK_SIZE_M; + + #pragma unroll(8) + for (short i = 0; i < 8; i++) { + simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*BLOCK_SIZE_M*(i/4), BLOCK_SIZE_M); + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + for (short j = sgitg; j < n_cols; j += 4) { + const int id = ids_i32[im*args.ne21 + r1*BLOCK_SIZE_N + j]; + + const short ide = id % args.ne20; + const short idt = id / args.ne20; + + device float * D = (device float *) dst + (r0*BLOCK_SIZE_M) + ide*args.ne0 + idt*args.ne1*args.ne0; + device float4 * D4 = (device float4 *) D; + + threadgroup float * C = (threadgroup float *) shmem + (j*BLOCK_SIZE_M); + threadgroup float4 * C4 = (threadgroup float4 *) C; + + int i = tiisg; + for (; i < n_rows/4; i += 32) { + *(D4 + i) = *(C4 + i); } - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (sgitg == 0) { - for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) { - device float * D = (device float *) dst + (r0*BLOCK_SIZE_M) + (r1*BLOCK_SIZE_N + j)*args.neh0 + im*args.neh1*args.neh0; - device float4 * D4 = (device float4 *) D; - - threadgroup float * C = temp_str + (j*BLOCK_SIZE_M); - threadgroup float4 * C4 = (threadgroup float4 *) C; - - int i = 0; - for (; i < n_rows/4; i++) { - *(D4 + i) = *(C4 + i); - } - - i *= 4; - for (; i < n_rows; i++) { - *(D + i) = *(C + i); - } - } + i = (4*(n_rows/4)) + tiisg; + for (; i < n_rows; i += 32) { + *(D + i) = *(C + i); } } } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 765521ffeb..4b4299d49d 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6018,6 +6018,7 @@ static std::vector> make_test_cases_eval() { for (bool b : {false, true}) { test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, b, 32, 1024, 16)); test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 2, 2, b, 32, 8192, 64)); + test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, b, 50, 200, 64)); } test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 1, 1, false, 8, 16, 1)); From 85cc1ae998e4898d9fa992cb9b8620338cee97bf Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 26 Aug 2025 12:47:00 +0300 Subject: [PATCH 115/174] context : print graph stats for memory-less contexts (#15586) ggml-ci --- src/llama-context.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 18cf25079d..99bfed7513 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -280,7 +280,7 @@ llama_context::llama_context( } // reserve worst-case graph - if (!hparams.vocab_only && memory) { + if (!hparams.vocab_only) { const uint32_t n_seqs = cparams.kv_unified ? 1 : cparams.n_seq_max; const uint32_t n_tokens = std::min(cparams.n_ctx, cparams.n_ubatch); @@ -292,11 +292,13 @@ llama_context::llama_context( int n_splits_tg = -1; int n_nodes_tg = -1; - // simulate full KV cache - - const auto mctx = memory->init_full(); - if (!mctx) { - throw std::runtime_error("failed to initialize KV cache"); + llama_memory_context_ptr mctx; + if (memory) { + LLAMA_LOG_DEBUG("%s: reserving full memory module\n", __func__); + mctx = memory->init_full(); + if (!mctx) { + throw std::runtime_error("failed to initialize memory module"); + } } cross.v_embd.clear(); @@ -1056,7 +1058,7 @@ int llama_context::decode(const llama_batch & batch_inp) { const auto * res = process_ubatch(ubatch, LLM_GRAPH_TYPE_DECODER, mctx.get(), status); if (!res) { - // the last ubatch failed or was aborted -> remove all positions of that ubatch from the KV cache + // the last ubatch failed or was aborted -> remove all positions of that ubatch from the memory module llama_pos pos_min[LLAMA_MAX_SEQ]; for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { pos_min[s] = std::numeric_limits::max(); @@ -1073,7 +1075,7 @@ int llama_context::decode(const llama_batch & batch_inp) { continue; } - LLAMA_LOG_WARN("%s: removing KV cache entries for seq_id = %d, pos = [%d, +inf)\n", __func__, s, pos_min[s]); + LLAMA_LOG_WARN("%s: removing memory module entries for seq_id = %d, pos = [%d, +inf)\n", __func__, s, pos_min[s]); memory->seq_rm(s, pos_min[s], -1); } @@ -1857,7 +1859,7 @@ size_t llama_context::state_write_data(llama_io_write_i & io) { } if (memory != nullptr) { - LLAMA_LOG_DEBUG("%s: - writing KV self\n", __func__); + LLAMA_LOG_DEBUG("%s: - writing memory module\n", __func__); memory->state_write(io); } @@ -1943,7 +1945,7 @@ size_t llama_context::state_read_data(llama_io_read_i & io) { } if (memory) { - LLAMA_LOG_DEBUG("%s: - reading KV self\n", __func__); + LLAMA_LOG_DEBUG("%s: - reading memory module\n", __func__); memory->state_read(io); } From 79a546220c719e6a70627b243a478ab8d84dc9e1 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Tue, 26 Aug 2025 12:54:19 +0200 Subject: [PATCH 116/174] mtmd : support Kimi VL model (#15458) * convert : fix tensor naming conflict for llama 4 vision * convert ok * support kimi vision model * clean up * fix style * fix calc number of output tokens * refactor resize_position_embeddings * add test case * rename build fn * correct a small bug --- convert_hf_to_gguf.py | 45 ++++++- gguf-py/gguf/constants.py | 1 + gguf-py/gguf/tensor_mapping.py | 12 ++ tools/mtmd/clip-impl.h | 2 + tools/mtmd/clip.cpp | 211 ++++++++++++++++++++++++--------- tools/mtmd/tests.sh | 1 + 6 files changed, 211 insertions(+), 61 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 9fa35e8b11..31a11cbec0 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -6254,9 +6254,11 @@ class DeepseekModel(TextModel): raise ValueError(f"Unprocessed experts: {experts}") -@ModelBase.register("DeepseekV2ForCausalLM") -@ModelBase.register("DeepseekV3ForCausalLM") -@ModelBase.register("KimiVLForConditionalGeneration") +@ModelBase.register( + "DeepseekV2ForCausalLM", + "DeepseekV3ForCausalLM", + "KimiVLForConditionalGeneration", +) class DeepseekV2Model(TextModel): model_arch = gguf.MODEL_ARCH.DEEPSEEK2 @@ -8507,6 +8509,43 @@ class PixtralModel(LlavaVisionModel): return "mm.2.weight" return super().map_tensor_name(name, try_suffixes) + +@ModelBase.register("KimiVLForConditionalGeneration") +class KimiVLModel(MmprojModel): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + assert self.hparams_vision is not None + self.hparams_vision["image_size"] = 64 * 14 # for compatibility + + def set_gguf_parameters(self): + super().set_gguf_parameters() + self.gguf_writer.add_clip_projector_type(gguf.VisionProjectorType.KIMIVL) + self.gguf_writer.add_vision_use_gelu(True) + self.gguf_writer.add_vision_projector_scale_factor(2) + # eps is the same as pytorch's default value + assert self.hparams_vision is not None + self.gguf_writer.add_vision_attention_layernorm_eps(self.hparams_vision.get("layer_norm_eps", 1e-5)) + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + del bid # unused + is_vision_tensor = "vision_tower" in name or "multi_modal_projector" in name + + if is_vision_tensor: + if "pos_emb.weight" in name: + data_torch = data_torch.view(data_torch.shape[0] * data_torch.shape[1], data_torch.shape[2]) + elif "wqkv" in name: + split_dim = 0 if "weight" in name else -1 + wq, wk, wv = data_torch.chunk(3, dim=split_dim) + return [ + (self.map_tensor_name(name.replace("wqkv", "wq")), wq), + (self.map_tensor_name(name.replace("wqkv", "wk")), wk), + (self.map_tensor_name(name.replace("wqkv", "wv")), wv) + ] + + return [(self.map_tensor_name(name), data_torch)] + + return [] # skip other tensors + ###### CONVERSION LOGIC ###### diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index d03a02c7bf..b9d1235d17 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -2850,6 +2850,7 @@ class VisionProjectorType: QWEN25O = "qwen2.5o" # omni VOXTRAL = "voxtral" LFM2 = "lfm2" + KIMIVL = "kimivl" # Items here are (block size, type size) diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 38bbd6e310..abb21fa821 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -1122,6 +1122,7 @@ class TensorNameMap: "vision_encoder.patch_conv", # pixtral "vision_model.patch_embedding.linear", # llama 4 "visual.patch_embed.proj", # qwen2vl + "vision_tower.patch_embed.proj", # kimi-vl ), MODEL_TENSOR.V_ENC_EMBD_POS: ( @@ -1130,6 +1131,7 @@ class TensorNameMap: "vpm.embeddings.position_embedding", "model.vision_model.embeddings.position_embedding", # SmolVLM "vision_model.positional_embedding_vlm", # llama 4 + "vision_tower.patch_embed.pos_emb", # kimi-vl ), MODEL_TENSOR.V_ENC_ATTN_Q: ( @@ -1141,6 +1143,7 @@ class TensorNameMap: "vision_tower.transformer.layers.{bid}.attention.q_proj", # pixtral-hf "vision_encoder.transformer.layers.{bid}.attention.wq", # pixtral "visual.blocks.{bid}.attn.q", # qwen2vl, generated + "vision_tower.encoder.blocks.{bid}.wq", # kimi-vl, generated ), MODEL_TENSOR.V_ENC_ATTN_Q_NORM: ( @@ -1157,6 +1160,7 @@ class TensorNameMap: "vision_tower.transformer.layers.{bid}.attention.k_proj", # pixtral-hf "vision_encoder.transformer.layers.{bid}.attention.wk", # pixtral "visual.blocks.{bid}.attn.k", # qwen2vl, generated + "vision_tower.encoder.blocks.{bid}.wk", # kimi-vl, generated ), MODEL_TENSOR.V_ENC_ATTN_K_NORM: ( @@ -1173,6 +1177,7 @@ class TensorNameMap: "vision_tower.transformer.layers.{bid}.attention.v_proj", # pixtral-hf "vision_encoder.transformer.layers.{bid}.attention.wv", # pixtral "visual.blocks.{bid}.attn.v", # qwen2vl, generated + "vision_tower.encoder.blocks.{bid}.wv", # kimi-vl, generated ), MODEL_TENSOR.V_ENC_INPUT_NORM: ( @@ -1185,6 +1190,7 @@ class TensorNameMap: "vision_encoder.transformer.layers.{bid}.attention_norm", # pixtral "vision_model.model.layers.{bid}.input_layernorm", # llama4 "visual.blocks.{bid}.norm1", # qwen2vl + "vision_tower.encoder.blocks.{bid}.norm0", # kimi-vl (norm0/norm1) ), MODEL_TENSOR.V_ENC_ATTN_O: ( @@ -1197,6 +1203,7 @@ class TensorNameMap: "vision_tower.transformer.layers.{bid}.attention.o_proj", # pixtral-hf "vision_encoder.transformer.layers.{bid}.attention.wo", # pixtral "visual.blocks.{bid}.attn.proj", # qwen2vl + "vision_tower.encoder.blocks.{bid}.wo", # kimi-vl ), MODEL_TENSOR.V_ENC_POST_ATTN_NORM: ( @@ -1209,6 +1216,7 @@ class TensorNameMap: "vision_tower.transformer.layers.{bid}.ffn_norm", # pixtral-hf "vision_encoder.transformer.layers.{bid}.ffn_norm", # pixtral "visual.blocks.{bid}.norm2", # qwen2vl + "vision_tower.encoder.blocks.{bid}.norm1", # kimi-vl (norm0/norm1) ), MODEL_TENSOR.V_ENC_FFN_UP: ( @@ -1221,6 +1229,7 @@ class TensorNameMap: "vision_model.model.layers.{bid}.mlp.fc1", # llama4 "visual.blocks.{bid}.mlp.fc1", # qwen2vl "visual.blocks.{bid}.mlp.up_proj", # qwen2.5vl + "vision_tower.encoder.blocks.{bid}.mlp.fc0", # kimi-vl (fc0/fc1) ), MODEL_TENSOR.V_ENC_FFN_GATE: ( @@ -1239,6 +1248,7 @@ class TensorNameMap: "vision_model.model.layers.{bid}.mlp.fc2", # llama4 "visual.blocks.{bid}.mlp.fc2", # qwen2vl "visual.blocks.{bid}.mlp.down_proj", # qwen2.5vl + "vision_tower.encoder.blocks.{bid}.mlp.fc1", # kimi-vl (fc0/fc1) ), MODEL_TENSOR.V_LAYER_SCALE_1: ( @@ -1263,6 +1273,7 @@ class TensorNameMap: "model.vision_model.post_layernorm", # SmolVLM "vision_model.layernorm_post", # llama4 "visual.merger.ln_q", # qwen2vl + "vision_tower.encoder.final_layernorm", # kimi-vl ), MODEL_TENSOR.V_MM_INP_PROJ: ( @@ -1272,6 +1283,7 @@ class TensorNameMap: MODEL_TENSOR.V_MM_INP_NORM: ( "multi_modal_projector.norm", "multi_modal_projector.layer_norm", + "multi_modal_projector.pre_norm", "pre_mm_projector_norm", ), diff --git a/tools/mtmd/clip-impl.h b/tools/mtmd/clip-impl.h index 706ed2e3b5..664b0c9ac6 100644 --- a/tools/mtmd/clip-impl.h +++ b/tools/mtmd/clip-impl.h @@ -135,6 +135,7 @@ enum projector_type { PROJECTOR_TYPE_QWEN25O, // will be replaced by QWEN2A or QWEN25VL depending on clip_ctx PROJECTOR_TYPE_VOXTRAL, PROJECTOR_TYPE_LFM2, + PROJECTOR_TYPE_KIMIVL, PROJECTOR_TYPE_UNKNOWN, }; @@ -156,6 +157,7 @@ static std::map PROJECTOR_TYPE_NAMES = { { PROJECTOR_TYPE_QWEN25O, "qwen2.5o"}, { PROJECTOR_TYPE_VOXTRAL, "voxtral"}, { PROJECTOR_TYPE_LFM2, "lfm2"}, + { PROJECTOR_TYPE_KIMIVL, "kimivl"}, }; static projector_type clip_projector_type_from_string(const std::string & str) { diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index 0e76b9c590..e7c516d2de 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -526,57 +526,16 @@ struct clip_graph { cur); } else if (ctx->proj_type() == PROJECTOR_TYPE_IDEFICS3) { + // pixel_shuffle // https://github.com/huggingface/transformers/blob/0a950e0bbe1ed58d5401a6b547af19f15f0c195e/src/transformers/models/idefics3/modeling_idefics3.py#L578 - const int scale_factor = model.hparams.proj_scale_factor; - const int n_embd = cur->ne[0]; - const int seq = cur->ne[1]; - const int bsz = 1; // batch size, always 1 for now since we don't support batching - const int height = std::sqrt(seq); - const int width = std::sqrt(seq); - GGML_ASSERT(scale_factor != 0); - cur = ggml_reshape_4d(ctx0, cur, n_embd * scale_factor, width / scale_factor, height, bsz); - cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_cont_4d(ctx0, cur, - n_embd * scale_factor * scale_factor, - height / scale_factor, - width / scale_factor, - bsz); - cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - cur = ggml_cont_3d(ctx0, cur, - n_embd * scale_factor * scale_factor, - seq / (scale_factor * scale_factor), - bsz); - + cur = build_patch_merge_permute(cur, scale_factor); cur = ggml_mul_mat(ctx0, model.projection, cur); + } else if (ctx->proj_type() == PROJECTOR_TYPE_LFM2) { // pixel unshuffle block const int scale_factor = model.hparams.proj_scale_factor; - GGML_ASSERT(scale_factor > 1); - - const int n_embd = cur->ne[0]; - int width = img.nx / patch_size; - int height = img.ny / patch_size; - - // pad width and height to factor - const int64_t pad_width = CLIP_ALIGN(width, scale_factor) - width; - const int64_t pad_height = CLIP_ALIGN(height, scale_factor) - height; - cur = ggml_reshape_3d(ctx0, cur, n_embd, width, height); - if (pad_width || pad_height) { - cur = ggml_pad(ctx0, cur, 0, pad_width, pad_height, 0); - width += pad_width; - height += pad_height; - } - - // unshuffle h - cur = ggml_reshape_3d(ctx0, cur, n_embd * scale_factor, width / scale_factor, height); - cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - - // unshuffle w - cur = ggml_cont_3d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor); - cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); - - cur = ggml_cont_2d(ctx0, cur, cur->ne[0], cur->ne[1] * cur->ne[2]); + cur = build_patch_merge_permute(cur, scale_factor); // projection cur = ggml_norm(ctx0, cur, 1e-5); // default nn.LayerNorm @@ -1086,7 +1045,7 @@ struct clip_graph { n_patches_x / scale_factor, n_patches_y / scale_factor, bsz); - cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); + //cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); // flatten to 2D cur = ggml_cont_2d(ctx0, cur, n_embd * scale_factor * scale_factor, @@ -1113,6 +1072,67 @@ struct clip_graph { return gf; } + ggml_cgraph * build_kimivl() { + // 2D input positions + ggml_tensor * pos_h = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_patches); + ggml_set_name(pos_h, "pos_h"); + ggml_set_input(pos_h); + + ggml_tensor * pos_w = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_patches); + ggml_set_name(pos_w, "pos_w"); + ggml_set_input(pos_w); + + ggml_tensor * learned_pos_embd = resize_position_embeddings(); + + // build ViT with 2D position embeddings + auto add_pos = [&](ggml_tensor * cur, const clip_layer &) { + // first half is X axis and second half is Y axis + return build_rope_2d(ctx0, cur, pos_w, pos_h, hparams.rope_theta, false); + }; + + ggml_tensor * inp = build_inp(); + ggml_tensor * cur = build_vit( + inp, n_patches, + NORM_TYPE_NORMAL, + hparams.ffn_op, + learned_pos_embd, + add_pos); + + cb(cur, "vit_out", -1); + + { + // patch_merger + const int scale_factor = model.hparams.proj_scale_factor; + cur = build_patch_merge_permute(cur, scale_factor); + + // projection norm + int proj_inp_dim = cur->ne[0]; + cur = ggml_view_2d(ctx0, cur, + n_embd, cur->ne[1] * scale_factor * scale_factor, + ggml_row_size(cur->type, n_embd), 0); + cur = ggml_norm(ctx0, cur, 1e-5); // default nn.LayerNorm + cur = ggml_mul(ctx0, cur, model.mm_input_norm_w); + cur = ggml_add(ctx0, cur, model.mm_input_norm_b); + cur = ggml_view_2d(ctx0, cur, + proj_inp_dim, cur->ne[1] / scale_factor / scale_factor, + ggml_row_size(cur->type, proj_inp_dim), 0); + cb(cur, "proj_inp_normed", -1); + + // projection mlp + cur = ggml_mul_mat(ctx0, model.mm_1_w, cur); + cur = ggml_add(ctx0, cur, model.mm_1_b); + cur = ggml_gelu(ctx0, cur); + cur = ggml_mul_mat(ctx0, model.mm_2_w, cur); + cur = ggml_add(ctx0, cur, model.mm_2_b); + cb(cur, "proj_out", -1); + } + + // build the graph + ggml_build_forward_expand(gf, cur); + + return gf; + } + // this graph is used by llava, granite and glm // due to having embedding_stack (used by granite), we cannot reuse build_vit ggml_cgraph * build_llava() { @@ -1611,18 +1631,20 @@ private: ggml_tensor * pos_embd = model.position_embeddings; const int height = img.ny / patch_size; const int width = img.nx / patch_size; + const uint32_t mode = GGML_SCALE_MODE_BILINEAR; + const int n_per_side = (int)std::sqrt(pos_embd->ne[1]); - if (!pos_embd || height * width == pos_embd->ne[1]) { + GGML_ASSERT(pos_embd); + + if (height == n_per_side && width == n_per_side) { return pos_embd; } - const int n_pos_embd = std::sqrt(pos_embd->ne[1]); - pos_embd = ggml_reshape_3d(ctx0, pos_embd, n_embd, n_pos_embd, n_pos_embd); // -> (n_embd, n_pos_embd, n_pos_embd) - pos_embd = ggml_permute(ctx0, pos_embd, 2, 0, 1, 3); // -> (n_pos_embd, n_pos_embd, n_embd) - pos_embd = ggml_interpolate(ctx0, pos_embd, width, height, n_embd, 1, 1); // -> (width, height, n_embd) - pos_embd = ggml_reshape_2d(ctx0, pos_embd, height * width, n_embd); // -> (height * width, n_embd) - pos_embd = ggml_transpose(ctx0, pos_embd); // -> (n_embd, height * width) - pos_embd = ggml_cont(ctx0, pos_embd); + pos_embd = ggml_reshape_3d(ctx0, pos_embd, n_embd, n_per_side, n_per_side); // -> (n_embd, n_per_side, n_per_side) + pos_embd = ggml_permute(ctx0, pos_embd, 2, 0, 1, 3); // -> (n_per_side, n_per_side, n_embd) + pos_embd = ggml_interpolate(ctx0, pos_embd, width, height, n_embd, 1, mode); // -> (width, height, n_embd) + pos_embd = ggml_permute(ctx0, pos_embd, 1, 2, 0, 3); // -> (n_embd, width, height) + pos_embd = ggml_cont_2d(ctx0, pos_embd, n_embd, width * height); // -> (n_embd, width * height) return pos_embd; } @@ -2021,6 +2043,39 @@ private: return cur; } + // aka pixel_shuffle / pixel_unshuffle / patch_merger (Kimi-VL) + // support dynamic resolution + ggml_tensor * build_patch_merge_permute(ggml_tensor * cur, int scale_factor) { + GGML_ASSERT(scale_factor > 1); + + const int n_embd = cur->ne[0]; + int width = img.nx / patch_size; + int height = img.ny / patch_size; + + // pad width and height to factor + const int64_t pad_width = CLIP_ALIGN(width, scale_factor) - width; + const int64_t pad_height = CLIP_ALIGN(height, scale_factor) - height; + cur = ggml_reshape_3d(ctx0, cur, n_embd, width, height); + if (pad_width || pad_height) { + cur = ggml_pad(ctx0, cur, 0, pad_width, pad_height, 0); + width += pad_width; + height += pad_height; + } + + // unshuffle h + cur = ggml_reshape_3d(ctx0, cur, n_embd * scale_factor, width / scale_factor, height); + cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); + + // unshuffle w + cur = ggml_cont_3d(ctx0, cur, n_embd * scale_factor * scale_factor, height / scale_factor, width / scale_factor); + cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); + + cur = ggml_cont_2d(ctx0, cur, cur->ne[0], cur->ne[1] * cur->ne[2]); + cb(cur, "pixel_shuffle", -1); + + return cur; + } + }; static ggml_cgraph * clip_image_build_graph(clip_ctx * ctx, const clip_image_f32_batch & imgs) { @@ -2063,6 +2118,10 @@ static ggml_cgraph * clip_image_build_graph(clip_ctx * ctx, const clip_image_f32 { res = graph.build_whisper_enc(); } break; + case PROJECTOR_TYPE_KIMIVL: + { + res = graph.build_kimivl(); + } break; default: { res = graph.build_llava(); @@ -2313,6 +2372,12 @@ struct clip_model_loader { hparams.image_size = 1024; get_u32(KEY_SPATIAL_MERGE_SIZE, hparams.spatial_merge_size, false); } break; + case PROJECTOR_TYPE_KIMIVL: + { + hparams.rope_theta = 10000.0f; + hparams.warmup_image_size = hparams.patch_size * 8; + get_u32(KEY_PROJ_SCALE_FACTOR, hparams.proj_scale_factor, false); + } break; case PROJECTOR_TYPE_GEMMA3: { // default value (used by all model sizes in gemma 3 family) @@ -2477,7 +2542,20 @@ struct clip_model_loader { // some models already exported with legacy (incorrect) naming which is quite messy, let's fix it here // note: Qwen model converted from the old surgery script has n_ff = 0, so we cannot use n_ff to check! - if (layer.ff_up_w && layer.ff_down_w && layer.ff_down_w->ne[0] == hparams.n_embd) { + bool is_ffn_swapped = ( + // only old models need this fix + model.proj_type == PROJECTOR_TYPE_MLP + || model.proj_type == PROJECTOR_TYPE_MLP_NORM + || model.proj_type == PROJECTOR_TYPE_LDP + || model.proj_type == PROJECTOR_TYPE_LDPV2 + || model.proj_type == PROJECTOR_TYPE_QWEN2VL + || model.proj_type == PROJECTOR_TYPE_QWEN25VL + || model.proj_type == PROJECTOR_TYPE_GLM_EDGE + || model.proj_type == PROJECTOR_TYPE_GEMMA3 + || model.proj_type == PROJECTOR_TYPE_IDEFICS3 + || model.proj_type == PROJECTOR_TYPE_MINICPMV + ) && layer.ff_up_w && layer.ff_down_w && layer.ff_down_w->ne[0] == hparams.n_embd; + if (is_ffn_swapped) { // swap up and down weights ggml_tensor * tmp = layer.ff_up_w; layer.ff_up_w = layer.ff_down_w; @@ -2486,6 +2564,9 @@ struct clip_model_loader { tmp = layer.ff_up_b; layer.ff_up_b = layer.ff_down_b; layer.ff_down_b = tmp; + if (il == 0) { + LOG_WRN("%s: ffn up/down are swapped\n", __func__); + } } } @@ -2604,6 +2685,7 @@ struct clip_model_loader { model.projection = get_tensor(TN_MM_PROJECTOR); } break; case PROJECTOR_TYPE_LFM2: + case PROJECTOR_TYPE_KIMIVL: { model.mm_input_norm_w = get_tensor(TN_MM_INP_NORM); model.mm_input_norm_b = get_tensor(TN_MM_INP_NORM_B); @@ -3507,7 +3589,9 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, str res_imgs->grid_y = inst.grid_size.height; return true; - } else if (ctx->proj_type() == PROJECTOR_TYPE_LFM2) { + } else if ( ctx->proj_type() == PROJECTOR_TYPE_LFM2 + || ctx->proj_type() == PROJECTOR_TYPE_KIMIVL + ) { GGML_ASSERT(params.proj_scale_factor); // smart resize @@ -3708,12 +3792,21 @@ int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * im case PROJECTOR_TYPE_IDEFICS3: case PROJECTOR_TYPE_INTERNVL: case PROJECTOR_TYPE_LLAMA4: - case PROJECTOR_TYPE_LFM2: { - // both W and H are divided by proj_scale_factor + // both X and Y are downscaled by the scale factor int scale_factor = ctx->model.hparams.proj_scale_factor; n_patches /= (scale_factor * scale_factor); } break; + case PROJECTOR_TYPE_LFM2: + case PROJECTOR_TYPE_KIMIVL: + { + // dynamic size + int scale_factor = ctx->model.hparams.proj_scale_factor; + int out_patch_size = params.patch_size * scale_factor; + int x_patch = CLIP_ALIGN(img->nx, out_patch_size) / out_patch_size; + int y_patch = CLIP_ALIGN(img->ny, out_patch_size) / out_patch_size; + n_patches = x_patch * y_patch; + } break; case PROJECTOR_TYPE_PIXTRAL: { // dynamic size @@ -4096,6 +4189,7 @@ bool clip_image_batch_encode(clip_ctx * ctx, const int n_threads, const clip_ima set_input_i32("positions", positions); } break; case PROJECTOR_TYPE_PIXTRAL: + case PROJECTOR_TYPE_KIMIVL: { // set the 2D positions int n_patches_per_col = image_size_width / patch_size; @@ -4250,6 +4344,7 @@ int clip_n_mmproj_embd(const struct clip_ctx * ctx) { case PROJECTOR_TYPE_QWEN2A: return ctx->model.mm_fc_w->ne[1]; case PROJECTOR_TYPE_LFM2: + case PROJECTOR_TYPE_KIMIVL: return ctx->model.mm_2_w->ne[1]; default: GGML_ABORT("Unknown projector type"); diff --git a/tools/mtmd/tests.sh b/tools/mtmd/tests.sh index 6f8a5f86ac..c64be03630 100755 --- a/tools/mtmd/tests.sh +++ b/tools/mtmd/tests.sh @@ -86,6 +86,7 @@ if [ "$RUN_BIG_TESTS" = true ]; then add_test_vision "ggml-org/InternVL3-14B-Instruct-GGUF:Q4_K_M" add_test_vision "ggml-org/Qwen2.5-Omni-7B-GGUF:Q4_K_M" # add_test_vision "ggml-org/Qwen2.5-VL-32B-Instruct-GGUF:Q4_K_M" # does not work on my mac M3 Ultra + add_test_vision "ggml-org/Kimi-VL-A3B-Thinking-2506-GGUF:Q4_K_M" add_test_audio "ggml-org/ultravox-v0_5-llama-3_1-8b-GGUF:Q4_K_M" add_test_audio "ggml-org/Qwen2.5-Omni-7B-GGUF:Q4_K_M" From b3964c1e890ef8c947afb36a5124ce6fcb2136d4 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 26 Aug 2025 14:22:14 +0300 Subject: [PATCH 117/174] metal : optimize FA vec for large sequences and BS <= 8 (#15566) * metal : optmize FA vec for large heads and sequences * metal : adjust small-batch mul mv kernels ggml-ci * batched-bench : fix total speed computation ggml-ci * cont : add comments ggml-ci --- ggml/src/ggml-metal/ggml-metal-impl.h | 6 ++ ggml/src/ggml-metal/ggml-metal.m | 127 ++++++++++++++++++++++---- ggml/src/ggml-metal/ggml-metal.metal | 73 +++++++++++++-- tools/batched-bench/batched-bench.cpp | 2 +- 4 files changed, 183 insertions(+), 25 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal-impl.h b/ggml/src/ggml-metal/ggml-metal-impl.h index 82c1ac1da0..b9d3639448 100644 --- a/ggml/src/ggml-metal/ggml-metal-impl.h +++ b/ggml/src/ggml-metal/ggml-metal-impl.h @@ -249,6 +249,7 @@ typedef struct { uint64_t nb33; int32_t ne1; int32_t ne2; + int32_t ne3; float scale; float max_bias; float m0; @@ -257,6 +258,11 @@ typedef struct { float logit_softcap; } ggml_metal_kargs_flash_attn_ext; +typedef struct { + int32_t nrows; + int32_t ne20; +} ggml_metal_kargs_flash_attn_ext_reduce; + typedef struct { int32_t ne00; int32_t ne02; diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index 7a05a98278..1f93633d91 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -291,6 +291,10 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32, GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32, GGML_METAL_KERNEL_TYPE_MUL_MV_MXFP4_F32, + GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_2, + GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_3, + GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_4, + GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_5, GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_2, GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_3, GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_4, @@ -575,6 +579,7 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_HK576_HV512, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_HK576_HV512, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_HK576_HV512, + GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_REDUCE, GGML_METAL_KERNEL_TYPE_SET_I32, GGML_METAL_KERNEL_TYPE_SET_F32, GGML_METAL_KERNEL_TYPE_CPY_F32_F32, @@ -1324,6 +1329,10 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32, mul_mv_q5_1_f32, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32, mul_mv_q8_0_f32, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_MXFP4_F32, mul_mv_mxfp4_f32, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_2, mul_mv_ext_f32_f32_r1_2, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_3, mul_mv_ext_f32_f32_r1_3, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_4, mul_mv_ext_f32_f32_r1_4, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_5, mul_mv_ext_f32_f32_r1_5, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_2, mul_mv_ext_f16_f32_r1_2, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_3, mul_mv_ext_f16_f32_r1_3, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_4, mul_mv_ext_f16_f32_r1_4, has_simdgroup_reduction); @@ -1609,6 +1618,7 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_HK576_HV512, flash_attn_ext_vec_q5_0_hk576_hv512, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_HK576_HV512, flash_attn_ext_vec_q5_1_hk576_hv512, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_HK576_HV512, flash_attn_ext_vec_q8_0_hk576_hv512, has_simdgroup_reduction); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_REDUCE, flash_attn_ext_reduce, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SET_F32, set_f32, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SET_I32, set_i32, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F32, cpy_f32_f32, true); @@ -3385,15 +3395,16 @@ static int ggml_metal_encode_node( // find the break-even point where the matrix-matrix kernel becomes more efficient compared // to the matrix-vector kernel - const int ne11_mm_min = 4; + const int ne11_mm_min = 8; // first try to use small-batch mat-mv kernels // these should be efficient for BS [2, ~8] - if (src1t == GGML_TYPE_F32 && (ne00%256 == 0) && + if (src1t == GGML_TYPE_F32 && (ne00%128 == 0) && ( ( ( - src0t == GGML_TYPE_F16 || // TODO: helper function + src0t == GGML_TYPE_F32 || // TODO: helper function + src0t == GGML_TYPE_F16 || src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q5_0 || @@ -3421,7 +3432,17 @@ static int ggml_metal_encode_node( // values and there can be some tail effects when nsg is high. need to confirm this // const int nsg = 2; // num simdgroups per threadgroup - const int nxpsg = ne11 < 3 ? 16 : 8; // num threads along row per simdgroup + + // num threads along row per simdgroup + int nxpsg = 0; + if (ne00 % 256 == 0 && ne11 < 3) { + nxpsg = 16; + } else if (ne00 % 128 == 0) { + nxpsg = 8; + } else { + nxpsg = 4; + } + const int nypsg = 32/nxpsg; // num threads along col per simdgroup (i.e. a simdgroup processes that many src0 rows at a time) const int r0ptg = nypsg*nsg; // num src0 rows per threadgroup int r1ptg = 4; // num src1 rows per threadgroup @@ -3444,6 +3465,14 @@ static int ggml_metal_encode_node( id pipeline = nil; switch (src0->type) { + case GGML_TYPE_F32: + switch (r1ptg) { + case 2: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_2].pipeline; break; + case 3: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_3].pipeline; break; + case 4: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_4].pipeline; break; + case 5: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F32_F32_R1_5].pipeline; break; + default: GGML_ABORT("not implemented"); + } break; case GGML_TYPE_F16: switch (r1ptg) { case 2: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_EXT_F16_F32_R1_2].pipeline; break; @@ -3598,7 +3627,7 @@ static int ggml_metal_encode_node( case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32 ].pipeline; break; case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32 ].pipeline; break; case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32 ].pipeline; break; - case GGML_TYPE_MXFP4: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_MXFP4_F32 ].pipeline; break; + case GGML_TYPE_MXFP4: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_MXFP4_F32 ].pipeline; break; case GGML_TYPE_Q2_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32 ].pipeline; break; case GGML_TYPE_Q3_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32 ].pipeline; break; case GGML_TYPE_Q4_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32 ].pipeline; break; @@ -5482,6 +5511,7 @@ static int ggml_metal_encode_node( /*.nb33 =*/ nb33, /*.ne1 =*/ ne1, /*.ne2 =*/ ne2, + /*.ne3 =*/ ne3, /*.scale =*/ scale, /*.max_bias =*/ max_bias, /*.m0 =*/ m0, @@ -5505,7 +5535,6 @@ static int ggml_metal_encode_node( } else { [encoder setBuffer:id_src0 offset:offs_src0 atIndex:5]; } - [encoder setBuffer:id_dst offset:offs_dst atIndex:6]; if (!use_vec_kernel) { // half8x8 kernel @@ -5531,7 +5560,7 @@ static int ggml_metal_encode_node( while (true) { const size_t smem = FATTN_SMEM(nsgmax); - if (smem > device.maxThreadgroupMemoryLength) { + if (smem > device.maxThreadgroupMemoryLength/2) { break; } nsgmax *= 2; @@ -5543,15 +5572,18 @@ static int ggml_metal_encode_node( const size_t smem = FATTN_SMEM(nsg); + [encoder setBuffer:id_dst offset:offs_dst atIndex:6]; + //printf("smem: %zu, max: %zu, nsg = %d\n", smem, device.maxThreadgroupMemoryLength, (int) nsg); GGML_ASSERT(smem <= device.maxThreadgroupMemoryLength); [encoder setThreadgroupMemoryLength:smem atIndex:0]; -#undef FATTN_SMEM [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)]; +#undef FATTN_SMEM } else { // half4x4 kernel const int64_t nqptg = 1; // queries per threadgroup !! sync with kernel template arguments !! const int64_t ncpsg = 32; // cache values per simdgroup !! sync with kernel template arguments !! + const int64_t nkpsg = 1*ncpsg; // TODO: make adjustable GGML_ASSERT(nqptg <= 32); GGML_ASSERT(nqptg % 1 == 0); @@ -5561,15 +5593,17 @@ static int ggml_metal_encode_node( // for each query, we load it as f16 in shared memory (ne00) // and store the soft_max values and the mask // - // ne00*(nsg) + // ne20*(nsg) // each simdgroup has a full f32 head vector in shared mem to accumulate results // #define FATTN_SMEM(nsg) (GGML_PAD((nqptg*(GGML_PAD(ne00, 128) + 4*ncpsg*(nsg)) + 2*ne20*(nsg))*(sizeof(float)/2), 16)) +//#define FATTN_SMEM(nsg) (GGML_PAD((nqptg*(GGML_PAD(ne00, 128) + 4*ncpsg*(nsg)))*(sizeof(float)/2), 16)) int64_t nsgmax = 2; while (true) { const size_t smem = FATTN_SMEM(nsgmax); - if (smem > device.maxThreadgroupMemoryLength) { + // avoid using more than half of the threadgroup memory - can cause slow downs especially for large head sizes + if (smem > device.maxThreadgroupMemoryLength/2) { break; } nsgmax *= 2; @@ -5577,7 +5611,7 @@ static int ggml_metal_encode_node( nsgmax /= 2; // simdgroups per threadgroup (a.k.a. warps) - const int64_t nsgt = MAX(2, MIN(nsgmax, MIN(ne11/ncpsg, (int64_t) pipeline.maxTotalThreadsPerThreadgroup/32))); + const int64_t nsgt = MAX(2, MIN(nsgmax, MIN((ne11 + nkpsg - 1)/(nkpsg), (int64_t) pipeline.maxTotalThreadsPerThreadgroup/32))); int64_t nsg = 1; while (nsg <= nsgt) { @@ -5585,13 +5619,74 @@ static int ggml_metal_encode_node( } nsg /= 2; - const size_t smem = FATTN_SMEM(nsg); + // workgroups + // each workgroup handles nsg*nkpsg cache values + uint16_t nwg = 1; + if (4*nsg*nkpsg >= ne11) { + const size_t smem = FATTN_SMEM(nsg); - //printf("smem: %zu, max: %zu, nsg = %d\n", smem, device.maxThreadgroupMemoryLength, (int) nsg); - GGML_ASSERT(smem <= device.maxThreadgroupMemoryLength); - [encoder setThreadgroupMemoryLength:smem atIndex:0]; + //printf("smem: %zu, max: %zu, nsg = %d, nsgmax = %d\n", smem, device.maxThreadgroupMemoryLength, (int) nsg, (int) nsgmax); + GGML_ASSERT(smem <= device.maxThreadgroupMemoryLength); + + // using 1 workgroup -> write the result directly into dst + [encoder setBuffer:id_dst offset:offs_dst atIndex:6]; + [encoder setBytes:&nwg length:sizeof(uint16_t) atIndex:7]; + + [encoder setThreadgroupMemoryLength:smem atIndex:0]; + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03*nwg) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)]; + } else { + nwg = 32; + nsg = MIN(4, nsg); + + const size_t smem = FATTN_SMEM(nsg); + + //printf("smem: %zu, max: %zu, nsg = %d, nsgmax = %d\n", smem, device.maxThreadgroupMemoryLength, (int) nsg, (int) nsgmax); + GGML_ASSERT(smem <= device.maxThreadgroupMemoryLength); + + // sanity checks + GGML_ASSERT(ne01*ne02*ne03 == ne1*ne2*ne3); + GGML_ASSERT(ne1*ne2*ne3 <= (1u << 31)); + + const int32_t nrows = ne1*ne2*ne3; + + // temp buffer for writing the results from each workgroup + // - ne20: the size of the head vector + // - + 2: the S and M values for each intermediate result + const size_t s_tmp = ggml_type_size(GGML_TYPE_F32)*(nrows*nwg*(ne20 + 2)); + id h_tmp = ggml_metal_mem_pool_alloc(mem_pool, s_tmp); + if (!h_tmp) { + GGML_LOG_ERROR("%s: failed to allocate buffer from memory pool, size = %zu\n", __func__, s_tmp); + return 0; + } + + //printf("ne01 = %d, ne02 = %d, ne03 = %d, ne20 = %d\n", ne01, ne02, ne03, ne20); + //printf("needed memory: %.3f MiB\n", (float) (ne01*ne02*ne03*ne20*sizeof(float))/1024.0f/1024.0f); + + [encoder setBuffer:h_tmp offset:0 atIndex:6]; + [encoder setBytes:&nwg length:sizeof(uint16_t) atIndex:7]; + + [encoder setThreadgroupMemoryLength:smem atIndex:0]; + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03*nwg) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)]; + + // reduce the results from the workgroups + { + ggml_metal_kargs_flash_attn_ext_reduce args0 = { + nrows, + ne20, + }; + + id pipeline0 = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_REDUCE].pipeline; + + [encoder setComputePipelineState:pipeline0]; + [encoder setBytes:&args0 length:sizeof(args0) atIndex:0]; + [encoder setBuffer:h_tmp offset:0 atIndex:1]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; + + //printf("ne1 = %d, ne2 = %d, ne3 = %d, ne20 = %d\n", ne1, ne2, ne3, ne20); + [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(32*32, 1, 1)]; + } + } #undef FATTN_SMEM - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)]; } } break; case GGML_OP_DUP: diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index 7037c1aa0d..fa80d6e405 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -68,6 +68,11 @@ void dequantize_f32(device const float4x4 * src, short il, thread type4x4 & reg) reg = (type4x4)(*src); } +template +void dequantize_f32_t4(device const float4 * src, short il, thread type4 & reg) { + reg = (type4)(*src); +} + template void dequantize_f16(device const half4x4 * src, short il, thread type4x4 & reg) { reg = (type4x4)(*src); @@ -3015,7 +3020,6 @@ void kernel_mul_mv_ext_q4_f32_impl( #pragma unroll(r1ptg) for (short ir1 = 0; ir1 < r1ptg; ++ir1) { sumf[ir1] += dot(lx[ch], y4[ir1][ch*nxpsg]); - } } @@ -3200,6 +3204,11 @@ kernel void kernel_mul_mv_ext_q4x4_f32_disp( typedef decltype(kernel_mul_mv_ext_q4_f32_disp <2, block_q8_0, 32, dequantize_q8_0_t4>) mul_mv_ext_q4_f32_t; typedef decltype(kernel_mul_mv_ext_q4x4_f32_disp<2, block_q4_K, 256, dequantize_q4_K>) mul_mv_ext_q4x4_f32_t; +template [[host_name("kernel_mul_mv_ext_f32_f32_r1_2")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<2, float4, 4, dequantize_f32_t4>; +template [[host_name("kernel_mul_mv_ext_f32_f32_r1_3")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<3, float4, 4, dequantize_f32_t4>; +template [[host_name("kernel_mul_mv_ext_f32_f32_r1_4")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<4, float4, 4, dequantize_f32_t4>; +template [[host_name("kernel_mul_mv_ext_f32_f32_r1_5")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<5, float4, 4, dequantize_f32_t4>; + template [[host_name("kernel_mul_mv_ext_f16_f32_r1_2")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<2, half4, 4, dequantize_f16_t4>; template [[host_name("kernel_mul_mv_ext_f16_f32_r1_3")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<3, half4, 4, dequantize_f16_t4>; template [[host_name("kernel_mul_mv_ext_f16_f32_r1_4")]] kernel mul_mv_ext_q4_f32_t kernel_mul_mv_ext_q4_f32_disp<4, half4, 4, dequantize_f16_t4>; @@ -4786,14 +4795,16 @@ kernel void kernel_flash_attn_ext_vec( device const char * mask, device const char * sinks, device char * dst, + constant uint16_t & nwg, threadgroup half * shmem_f16 [[threadgroup(0)]], uint3 tgpig[[threadgroup_position_in_grid]], ushort3 ntg[[threads_per_threadgroup]], ushort tiisg[[thread_index_in_simdgroup]], ushort sgitg[[simdgroup_index_in_threadgroup]]) { const short nsg = ntg.y; // number of simdgroups + const short iwg = tgpig[2]%nwg; - const int iq3 = tgpig[2]; + const int iq3 = tgpig[2]/nwg; const int iq2 = tgpig[1]; const int iq1 = tgpig[0]; @@ -4872,7 +4883,7 @@ kernel void kernel_flash_attn_ext_vec( // loop over the KV cache // each simdgroup handles blocks of Q rows and C columns - for (int ic0 = 0; ic0 < args.ne11; ic0 += C*nsg) { + for (int ic0 = (int) iwg*C*nsg; ic0 < args.ne11; ic0 += (int) nwg*C*nsg) { const int ic = ic0 + C*sgitg; if (ic >= args.ne11) { break; @@ -5002,7 +5013,7 @@ kernel void kernel_flash_attn_ext_vec( } } - if (sinks != q && sgitg == 0) { + if (sinks != q && sgitg == 0 && iwg == 0) { const float m = M; const float s = tiisg == 0 ? ((device const float *) sinks)[iq2] : -FLT_MAX/2; @@ -5111,14 +5122,25 @@ kernel void kernel_flash_attn_ext_vec( threadgroup_barrier(mem_flags::mem_threadgroup); } - device float4 * dst4 = (device float4 *) dst; - // final rescale with 1/S and store to global memory if (sgitg == 0) { - const float S = ss[0]; + const int64_t nrows = args.ne3*args.ne2*args.ne1; + const int64_t rid = iq3*args.ne2*args.ne1 + iq2 + iq1*args.ne1; + device float4 * dst4 = (device float4 *) dst; + device float * dst1 = (device float *) dst + nrows*DV*nwg; // the S and M are stored after the results + + const float S = nwg == 1 ? 1.0f/ss[0] : 1.0f; + + // interleave the workgroup data for (short i = tiisg; i < DV4; i += NW) { - dst4[((uint64_t)iq3*args.ne2*args.ne1 + iq2 + (uint64_t)iq1*args.ne1)*DV4 + i] = (float4) sr4[i]/S; + dst4[rid*DV4*nwg + nwg*i + iwg] = (float4) sr4[i]*S; + } + + // store S and M + if (nwg > 1 && tiisg == 0) { + dst1[rid*(2*nwg) + 2*iwg + 0] = ss[0]; + dst1[rid*(2*nwg) + 2*iwg + 1] = ss[1]; } } } @@ -5218,6 +5240,41 @@ template [[host_name("kernel_flash_attn_ext_vec_q8_0_hk576_hv512")]] kernel flas #undef FA_TYPES +kernel void kernel_flash_attn_ext_reduce( + constant ggml_metal_kargs_flash_attn_ext_reduce & args, + device const char * htmp, + device char * dst, + uint tgpig[[threadgroup_position_in_grid]], + ushort tiisg[[thread_index_in_simdgroup]], + ushort sgitg[[simdgroup_index_in_threadgroup]]) { + const uint64_t rid = tgpig; + + const short nwg = 32; + const short iwg = tiisg; + const short DV = args.ne20; + const short DV4 = DV/4; + + device const float4 * htmp4 = (device const float4 *) htmp + rid*DV4*nwg; + device const float * ss = (device const float *) htmp + (uint64_t)args.nrows*DV*nwg; + device float4 * dst4 = (device float4 *) dst + rid*DV4; + + float S = ss[rid*(2*nwg) + 2*iwg + 0]; + float M = ss[rid*(2*nwg) + 2*iwg + 1]; + + const float m = simd_max(M); + const float ms = exp(M - m); + + S = 1.0f/simd_sum(S*ms); + + for (int i = sgitg; i < DV4; i += nwg) { + const float4 v = simd_sum(htmp4[i*nwg + iwg]*ms); + + if (iwg == 0) { + dst4[i] = v*S; + } + } +} + template kernel void kernel_set( constant ggml_metal_kargs_set & args, diff --git a/tools/batched-bench/batched-bench.cpp b/tools/batched-bench/batched-bench.cpp index 93efad3280..23d03039dc 100644 --- a/tools/batched-bench/batched-bench.cpp +++ b/tools/batched-bench/batched-bench.cpp @@ -191,7 +191,7 @@ int main(int argc, char ** argv) { const float speed_pp = is_pp_shared ? pp / t_pp : pl*pp / t_pp; const float speed_tg = pl*tg / t_tg; - const float speed = n_kv / t; + const float speed = ((is_pp_shared ? pp : pl*pp) + pl*tg) / t; if(params.batched_bench_output_jsonl) { LOG( From 8f5afa94c4f929da71f560db7c9f38ef6a783d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Tue, 26 Aug 2025 16:01:20 +0200 Subject: [PATCH 118/174] CUDA: return -1 for nonexistent compiled arch (#15587) --- ggml/src/ggml-cuda/common.cuh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index 48de1649cf..85bc9e933b 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -107,9 +107,9 @@ constexpr bool ggml_cuda_has_arch(const int arch) { return ggml_cuda_has_arch_impl(arch, __CUDA_ARCH_LIST__); } -constexpr int ggml_cuda_highest_compiled_arch_impl(const int arch, const int cur) { +constexpr int ggml_cuda_highest_compiled_arch_impl(const int /*arch*/, const int cur) { if (cur == 0) { - GGML_ABORT("ggml was not compiled with any CUDA arch <= %d", arch); + return -1; } return cur; } From 62cef26ac5b6b7acb635d3dc963813b43952dc2b Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Tue, 26 Aug 2025 16:12:29 +0200 Subject: [PATCH 119/174] model-conversion : add qat-q4 quantization targets (#15588) This commit adds two targets to the Makefile for quantizing of Quantization Aware Trained (QAT) models to Q4_0 format. The motivation for this is that this sets the token embedding and the output tensors data types to Q8_0 instead of the default Q6_K. This is someting that we wish to enforce for QAT Q4_0 models that are to be uploaded to ggml-org on Huggingface to guarantee the best quality. --- examples/model-conversion/Makefile | 30 +++++++++++++++---- examples/model-conversion/README.md | 24 +++++++++++++++ .../scripts/utils/quantize.sh | 18 +++++++++-- 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/examples/model-conversion/Makefile b/examples/model-conversion/Makefile index 2f1c3eb903..37982495b2 100644 --- a/examples/model-conversion/Makefile +++ b/examples/model-conversion/Makefile @@ -1,4 +1,5 @@ -# Validation functions +MAKEFLAGS += --no-print-directory + define validate_model_path @if [ -z "$(MODEL_PATH)" ]; then \ echo "Error: MODEL_PATH must be provided either as:"; \ @@ -17,6 +18,13 @@ define validate_embedding_model_path fi endef +define quantize_model + @CONVERTED_MODEL="$(1)" QUANTIZED_TYPE="$(QUANTIZED_TYPE)" \ + TOKEN_EMBD_TYPE="$(TOKEN_EMBD_TYPE)" OUTPUT_TYPE="$(OUTPUT_TYPE)" \ + ./scripts/utils/quantize.sh "$(1)" "$(QUANTIZED_TYPE)" "$(TOKEN_EMBD_TYPE)" "$(OUTPUT_TYPE)" + @echo "Export the quantized model path to $(2) variable in your environment" +endef + ### ### Casual Model targets/recipes ### @@ -67,9 +75,15 @@ causal-quantize-Q8_0: causal-quantize-model causal-quantize-Q4_0: QUANTIZED_TYPE = Q4_0 causal-quantize-Q4_0: causal-quantize-model +# For Quantization Aware Trained (QAT) models in Q4_0 we explicitly set the +# token embedding and output types to Q8_0 instead of the default Q6_K. +causal-quantize-qat-Q4_0: QUANTIZED_TYPE = Q4_0 +causal-quantize-qat-Q4_0: TOKEN_EMBD_TYPE = Q8_0 +causal-quantize-qat-Q4_0: OUTPUT_TYPE = Q8_0 +causal-quantize-qat-Q4_0: causal-quantize-model + causal-quantize-model: - @CONVERTED_MODEL="$(CONVERTED_MODEL)" QUANTIZED_TYPE="$(QUANTIZED_TYPE)" ./scripts/utils/quantize.sh ${CONVERTED_MODEL} ${QUANTIZED_TYPE} - @echo "Export the quantized model path to QUANTIZED_MODEL variable in your environment" + $(call quantize_model,$(CONVERTED_MODEL),QUANTIZED_MODEL) causal-run-quantized-model: @QUANTIZED_MODEL="$(QUANTIZED_MODEL)" ./scripts/causal/run-converted-model.sh ${QUANTIZED_MODEL} @@ -117,9 +131,15 @@ embedding-quantize-Q8_0: embedding-quantize-model embedding-quantize-Q4_0: QUANTIZED_TYPE = Q4_0 embedding-quantize-Q4_0: embedding-quantize-model +# For Quantization Aware Trained (QAT) models in Q4_0 we explicitly set the +# token embedding and output types to Q8_0 instead of the default Q6_K. +embedding-quantize-qat-Q4_0: QUANTIZED_TYPE = Q4_0 +embedding-quantize-qat-Q4_0: TOKEN_EMBD_TYPE = Q8_0 +embedding-quantize-qat-Q4_0: OUTPUT_TYPE = Q8_0 +embedding-quantize-qat-Q4_0: embedding-quantize-model + embedding-quantize-model: - @./scripts/utils/quantize.sh ${CONVERTED_EMBEDDING_MODEL} ${QUANTIZED_TYPE} - @echo "Export the quantized model path to QUANTIZED_EMBEDDING_MODEL variable in your environment" + $(call quantize_model,$(CONVERTED_EMBEDDING_MODEL),QUANTIZED_EMBEDDING_MODEL) embedding-run-quantized-model: @./scripts/embedding/run-converted-model.sh ${QUANTIZED_EMBEDDING_MODEL} diff --git a/examples/model-conversion/README.md b/examples/model-conversion/README.md index 424c4e5655..5e5992d964 100644 --- a/examples/model-conversion/README.md +++ b/examples/model-conversion/README.md @@ -137,6 +137,18 @@ Then the quantized model can be run using the following command: (venv) $ make causal-run-quantized-model ``` +### Quantizing QAT (Quantization Aware Training) models +When quantizing to `Q4_0`, the default data type for the token embedding weights +will be `Q6_K`. For models that are going to be uploaded to ggml-org it is +recommended to use `Q8_0` instead for the embeddings and output tensors. +The reason is that although `Q6_K` is smaller in size, it requires more compute +to unpack, which can hurt performance during output generation when the entire +embedding matrix must be dequantized to compute vocabulary logits. `Q8_0` +provides practically full quality with better computational efficiency. +```console +(venv) $ make causal-quantize-qat-Q4_0 +``` + ## Embedding Language Model Conversion @@ -238,6 +250,18 @@ Then the quantized model can be run using the following command: (venv) $ make embedding-run-quantized-model ``` +### Quantizing QAT (Quantization Aware Training) models +When quantizing to `Q4_0`, the default data type for the token embedding weights +will be `Q6_K`. For models that are going to be uploaded to ggml-org it is +recommended to use `Q8_0` instead for the embeddings and output tensors. +The reason is that although `Q6_K` is smaller in size, it requires more compute +to unpack, which can hurt performance during output generation when the entire +embedding matrix must be dequantized to compute vocabulary logits. `Q8_0` +provides practically full quality with better computational efficiency. +```console +(venv) $ make embedding-quantize-qat-Q4_0 +``` + ## Perplexity Evaluation ### Simple perplexity evaluation diff --git a/examples/model-conversion/scripts/utils/quantize.sh b/examples/model-conversion/scripts/utils/quantize.sh index bcb8775754..90460aa6b0 100755 --- a/examples/model-conversion/scripts/utils/quantize.sh +++ b/examples/model-conversion/scripts/utils/quantize.sh @@ -4,6 +4,8 @@ set -e CONVERTED_MODEL="${1:-"$CONVERTED_MODEL"}" QUANTIZED_TYPE="${2:-"$QUANTIZED_TYPE"}" +TOKEN_EMBD_TYPE="${3:-"${TOKEN_EMBD_TYPE}"}" +OUTPUT_TYPE="${4:-"${OUTPUT_TYPE}"}" QUANTIZED_MODEL=$CONVERTED_MODEL # Final check if we have a model path @@ -14,6 +16,11 @@ if [ -z "$CONVERTED_MODEL" ]; then exit 1 fi +if [ -z "$QUANTIZED_TYPE" ]; then + echo "Error: QUANTIZED_TYPE is required" >&2 + exit 1 +fi + echo $CONVERTED_MODEL # Process the quantized model filename @@ -26,9 +33,16 @@ else exit 1 fi - cmake --build ../../build --target llama-quantize -j8 -../../build/bin/llama-quantize $CONVERTED_MODEL $QUANTIZED_MODEL $QUANTIZED_TYPE +echo $TOKEN_EMBD_TYPE +echo $OUTPUT_TYPE + +CMD_ARGS=("../../build/bin/llama-quantize") +[[ -n "$TOKEN_EMBD_TYPE" ]] && CMD_ARGS+=("--token-embedding-type" "$TOKEN_EMBD_TYPE") +[[ -n "$OUTPUT_TYPE" ]] && CMD_ARGS+=("--output-tensor-type" "$OUTPUT_TYPE") +CMD_ARGS+=("$CONVERTED_MODEL" "$QUANTIZED_MODEL" "$QUANTIZED_TYPE") + +"${CMD_ARGS[@]}" echo "Quantized model saved to: $QUANTIZED_MODEL" From 0373486dbc0dccbdcb3b5fdd65759d88cec06196 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 26 Aug 2025 17:45:17 +0300 Subject: [PATCH 120/174] graph : fix assert in memory-less build_attn (#15590) ggml-ci --- src/llama-graph.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 6419d739bd..b928e9e16e 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -1376,7 +1376,7 @@ ggml_tensor * llm_graph_context::build_attn( // [TAG_NO_CACHE_PAD] // TODO: if ubatch.equal_seqs() == true, we can split the three tensors below into ubatch.n_seqs_unq streams - assert(!ubatch.equal_seqs()); + assert(!ubatch.equal_seqs() || (k_cur->ne[3] == 1 && k_cur->ne[3] == ubatch.n_seqs_unq)); ggml_tensor * q = q_cur; ggml_tensor * k = k_cur; From a6a58d64785cb458ed9de52f391aa38142d38d64 Mon Sep 17 00:00:00 2001 From: shalinib-ibm Date: Tue, 26 Aug 2025 21:05:25 +0530 Subject: [PATCH 121/174] llamafile: PowerPC Sgemm Optimization (#15558) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch improves GEMM for FP32 Data Type on PowerPC Implements GEMM on large blocks with configurable block size mc, nc, kc (default: 256, 256, 256). Packing Function optimized to access blocks as per memory layout. GEMM Optimized to work on larger blocks. Isolated Packing from GEMM Operations for better MMA utilization. Verified functionality and correctness uing llama-cli and stand alone test case (performs matmul and compares final mattrix C result with base). Minor code refactoring changes: Replace macro with inline function Code Indent made consistent with 4 spaces Performance Testing: Observed 50% ~ 70% improvement in Prompt Processing Speed mesured using llama-bench with Meta-Llama3-8B FP32 Model. Similar gains observed with Mistral-7b-Instruct-v0.3 Model. model                   Size Params Backend Threads Test Patch Base llama 8B all F32        29.92 GiB     8.03 B CPU        20 pp512 98.58 60.3 llama 8B all F32        29.92 GiB     8.03 B CPU        20 pp1024 95.88 57.36 llama 8B all F32        29.92 GiB     8.03 B CPU        20 pp2048 85.46 53.26 llama 8B all F32        29.92 GiB     8.03 B CPU        20 pp4096 68.66 45.78 llama 8B all F32        29.92 GiB     8.03 B CPU        20 pp6144 57.35 40.44 25 ~ 30% improvement in llama-batched-bench with Metla-Llama3-8B in Prompt Processing Speed for large prompts (256, 512, 1024, 2048, 4096)tokens with various batch sizes ( 1, 2, 4, 8, 16) Signed-off-by: Shalini Salomi Bodapati --- ggml/src/ggml-cpu/llamafile/sgemm.cpp | 373 +++++++++++++++++--------- 1 file changed, 241 insertions(+), 132 deletions(-) diff --git a/ggml/src/ggml-cpu/llamafile/sgemm.cpp b/ggml/src/ggml-cpu/llamafile/sgemm.cpp index 2be54c31b5..2c4ad9d58b 100644 --- a/ggml/src/ggml-cpu/llamafile/sgemm.cpp +++ b/ggml/src/ggml-cpu/llamafile/sgemm.cpp @@ -2169,94 +2169,117 @@ class tinyBLAS_Q0_PPC { class tinyBLAS_PPC { public: tinyBLAS_PPC(int64_t k, - const float *A, int64_t lda, - const float *B, int64_t ldb, - float *C, int64_t ldc, + const float * A, int64_t lda, + const float * B, int64_t ldb, + float * C, int64_t ldc, int ith, int nth) : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) { } void matmul(int64_t m, int64_t n) { - mnpack(0, m, 0, n); + int64_t mc = 256; int64_t nc = 256; int64_t kc = 256; + if (m % mc == 0 && n % nc == 0 && k % kc == 0) { + matmul_tiled(m, n, mc, nc, kc); + } else { + mnpack(0, m, 0, n); + } } private: - void (tinyBLAS_PPC::*kernel)(int64_t, int64_t); - - inline void vector_permute_store_4(vector float *src, float *vecOffset) { - vector float t1, t2, t3, t4, t5, t6, t7, t8; - t1 = vec_mergeh(src[0], src[1]); - t2 = vec_mergeh(src[2], src[3]); - t3 = vec_mergel(src[0], src[1]); - t4 = vec_mergel(src[2], src[3]); - - t5 = vec_xxpermdi(t1, t2, 0); - t6 = vec_xxpermdi(t1, t2, 3); - t7 = vec_xxpermdi(t3, t4, 0); - t8 = vec_xxpermdi(t3, t4, 3); - - vec_xst(t5, 0, vecOffset); - vec_xst(t6, 0, vecOffset + 4); - vec_xst(t7, 0, vecOffset + 8); - vec_xst(t8, 0, vecOffset + 12); - } - - inline void vector_permute_store_8(vector float *src, float *vecOffset) { - vector float t1, t2, t3, t4, t5, t6, t7, t8; - t1 = vec_mergeh(src[0], src[1]); - t2 = vec_mergeh(src[2], src[3]); - t3 = vec_mergeh(src[4], src[5]); - t4 = vec_mergeh(src[6], src[7]); - - t5 = vec_xxpermdi(t1, t2, 0); - t6 = vec_xxpermdi(t3, t4, 0); - t7 = vec_xxpermdi(t1, t2, 3); - t8 = vec_xxpermdi(t3, t4, 3); - - vec_xst(t5, 0, vecOffset); - vec_xst(t6, 0, vecOffset + 4); - vec_xst(t7, 0, vecOffset + 8); - vec_xst(t8, 0, vecOffset + 12); - - t1 = vec_mergel(src[0], src[1]); - t2 = vec_mergel(src[2], src[3]); - t3 = vec_mergel(src[4], src[5]); - t4 = vec_mergel(src[6], src[7]); - - t5 = vec_xxpermdi(t1, t2, 0); - t6 = vec_xxpermdi(t3, t4, 0); - t7 = vec_xxpermdi(t1, t2, 3); - t8 = vec_xxpermdi(t3, t4, 3); - - vec_xst(t5, 0, vecOffset + 16); - vec_xst(t6, 0, vecOffset + 20); - vec_xst(t7, 0, vecOffset + 24); - vec_xst(t8, 0, vecOffset + 28); + inline void save_acc(acc_t * ACC, int64_t ii, int64_t jj) { + vec_t vec_C[4]; + __builtin_mma_disassemble_acc(vec_C, ACC); + for (int I = 0; I < 4; I++) { + for (int J = 0; J < 4; J++) { + *((float *)(C+ii+((jj+J)*ldc)+I)) = *((float *)&vec_C[I]+J); + } + } } - void packTranspose(const float* a, int64_t lda, int rows, int cols, float* vec) { + inline void add_save_acc(acc_t * ACC, int64_t ii, int64_t jj) { + vec_t vec_C[4]; + __builtin_mma_disassemble_acc(vec_C, ACC); + for (int I = 0; I < 4; I++) { + for (int J = 0; J < 4; J++) { + float * c_ptr = (float *)(C+ii+((jj+J)*ldc)+I); + *c_ptr += *((float *)&vec_C[I]+J); + } + } + } + + inline void vector_permute_store_4(vector float * src, float * vecOffset) { + vector float t1, t2, t3, t4, t5, t6, t7, t8; + t1 = vec_mergeh(src[0], src[1]); + t2 = vec_mergeh(src[2], src[3]); + t3 = vec_mergel(src[0], src[1]); + t4 = vec_mergel(src[2], src[3]); + + t5 = vec_xxpermdi(t1, t2, 0); + t6 = vec_xxpermdi(t1, t2, 3); + t7 = vec_xxpermdi(t3, t4, 0); + t8 = vec_xxpermdi(t3, t4, 3); + + vec_xst(t5, 0, vecOffset); + vec_xst(t6, 0, vecOffset + 4); + vec_xst(t7, 0, vecOffset + 8); + vec_xst(t8, 0, vecOffset + 12); + } + + inline void vector_permute_store_8(vector float * src, float * vecOffset) { + vector float t1, t2, t3, t4, t5, t6, t7, t8; + t1 = vec_mergeh(src[0], src[1]); + t2 = vec_mergeh(src[2], src[3]); + t3 = vec_mergeh(src[4], src[5]); + t4 = vec_mergeh(src[6], src[7]); + + t5 = vec_xxpermdi(t1, t2, 0); + t6 = vec_xxpermdi(t3, t4, 0); + t7 = vec_xxpermdi(t1, t2, 3); + t8 = vec_xxpermdi(t3, t4, 3); + + vec_xst(t5, 0, vecOffset); + vec_xst(t6, 0, vecOffset + 4); + vec_xst(t7, 0, vecOffset + 8); + vec_xst(t8, 0, vecOffset + 12); + + t1 = vec_mergel(src[0], src[1]); + t2 = vec_mergel(src[2], src[3]); + t3 = vec_mergel(src[4], src[5]); + t4 = vec_mergel(src[6], src[7]); + + t5 = vec_xxpermdi(t1, t2, 0); + t6 = vec_xxpermdi(t3, t4, 0); + t7 = vec_xxpermdi(t1, t2, 3); + t8 = vec_xxpermdi(t3, t4, 3); + + vec_xst(t5, 0, vecOffset + 16); + vec_xst(t6, 0, vecOffset + 20); + vec_xst(t7, 0, vecOffset + 24); + vec_xst(t8, 0, vecOffset + 28); + } + + void packTranspose(const float * a, int64_t lda, int rows, int cols, float * vec) { int64_t i, j; float * aoffsets[8]; - float *aoffset = NULL, *boffset = NULL; + float * aoffset = NULL, * boffset = NULL; __vector_pair arr[8]; vector float c[8][2] = {0}; vector float c1[8] = {0}; vector float c2[8] = {0}; - aoffset = const_cast(a); + aoffset = const_cast(a); boffset = vec; j = (rows >> 3); if (j > 0) { - do { aoffsets[0] = aoffset; - for (int it = 1; it< 8; it++) + for (int it = 1; it < 8; it++) aoffsets[it] = aoffsets[it-1] + lda; aoffset += 8 * lda; i = (cols >> 3); if (i > 0) { do { - for (int it = 0; it< 8; it++) { + for (int it = 0; it < 8; it++) { arr[it] = __builtin_vsx_lxvp(0, (__vector_pair*)aoffsets[it]); __builtin_vsx_disassemble_pair(c[it], &arr[it]); c1[it] = c[it][0]; @@ -2264,11 +2287,14 @@ class tinyBLAS_PPC { } vector_permute_store_8(c1, boffset); - vector_permute_store_8(c2, boffset+32); - for (int it = 0; it < 4; it++) - aoffsets[it] = aoffsets[it] + 8*lda; + vector_permute_store_8(c2, boffset + 32); boffset += 64; i--; + if (i > 0) { + for (int it = 0; it < 8; it++) { + aoffsets[it] = aoffsets[it] + 8; + } + } } while(i > 0); } if (cols & 4) { @@ -2295,9 +2321,9 @@ class tinyBLAS_PPC { c2[it] = c[it][1]; } vector_permute_store_4(c1, boffset); - vector_permute_store_4(c2, boffset+16); + vector_permute_store_4(c2, boffset + 16); for (int it = 0; it < 4; it++) - aoffsets[it] += 8*lda; + aoffsets[it] += 8 * lda; boffset += 32; i--; } while(i > 0); @@ -2325,15 +2351,15 @@ class tinyBLAS_PPC { vec_t vec_A[4], vec_B[4], vec_C[4]; acc_t acc_0; __builtin_mma_xxsetaccz(&acc_0); - for (int l = 0; l < k; l+=4) { - packTranspose(A+(ii*lda)+l, lda, 4, 4, (float*)vec_A); - packTranspose(B+(jj*ldb)+l, ldb, 4, 4, (float*)vec_B); + for (int l = 0; l < k; l += 4) { + packTranspose(A + (ii * lda) + l, lda, 4, 4, (float *)vec_A); + packTranspose(B + (jj * ldb) + l, ldb, 4, 4, (float *)vec_B); __builtin_mma_xvf32gerpp(&acc_0, vec_A[0], vec_B[0]); __builtin_mma_xvf32gerpp(&acc_0, vec_A[1], vec_B[1]); __builtin_mma_xvf32gerpp(&acc_0, vec_A[2], vec_B[2]); __builtin_mma_xvf32gerpp(&acc_0, vec_A[3], vec_B[3]); } - SAVE_ACC(&acc_0, ii, jj); + save_acc(&acc_0, ii, jj); } void KERNEL_4x8(int64_t ii, int64_t jj) { @@ -2341,9 +2367,9 @@ class tinyBLAS_PPC { acc_t acc_0, acc_1; __builtin_mma_xxsetaccz(&acc_0); __builtin_mma_xxsetaccz(&acc_1); - for (int64_t l = 0; l < k; l+=4) { - packTranspose(A+(ii*lda)+l, lda, 4, 4, (float*)vec_A); - packTranspose(B+(jj*ldb)+l, ldb, 8, 4, (float*)vec_B); + for (int64_t l = 0; l < k; l += 4) { + packTranspose(A + (ii * lda) + l, lda, 4, 4, (float *)vec_A); + packTranspose(B + (jj * ldb) + l, ldb, 8, 4, (float *)vec_B); __builtin_mma_xvf32gerpp(&acc_0, vec_A[0], (vec_t)vec_B[0]); __builtin_mma_xvf32gerpp(&acc_1, vec_A[0], (vec_t)vec_B[1]); __builtin_mma_xvf32gerpp(&acc_0, vec_A[1], (vec_t)vec_B[2]); @@ -2353,8 +2379,8 @@ class tinyBLAS_PPC { __builtin_mma_xvf32gerpp(&acc_0, vec_A[3], (vec_t)vec_B[6]); __builtin_mma_xvf32gerpp(&acc_1, vec_A[3], (vec_t)vec_B[7]); } - SAVE_ACC(&acc_0, ii, jj); - SAVE_ACC(&acc_1, ii, jj+4); + save_acc(&acc_0, ii, jj); + save_acc(&acc_1, ii, jj + 4); } void KERNEL_8x4(int64_t ii, int64_t jj) { @@ -2362,9 +2388,9 @@ class tinyBLAS_PPC { acc_t acc_0, acc_1; __builtin_mma_xxsetaccz(&acc_0); __builtin_mma_xxsetaccz(&acc_1); - for (int64_t l = 0; l < k; l+=4) { - packTranspose(A+(ii*lda)+l, lda, 8, 4, (float*)vec_A); - packTranspose(B+(jj*ldb)+l, ldb, 4, 4, (float*)vec_B); + for (int64_t l = 0; l < k; l += 4) { + packTranspose(A + (ii * lda) + l, lda, 8, 4, (float *)vec_A); + packTranspose(B + (jj * ldb) + l, ldb, 4, 4, (float *)vec_B); __builtin_mma_xvf32gerpp(&acc_0, (vec_t)vec_A[0], vec_B[0]); __builtin_mma_xvf32gerpp(&acc_1, (vec_t)vec_A[1], vec_B[0]); __builtin_mma_xvf32gerpp(&acc_0, (vec_t)vec_A[2], vec_B[1]); @@ -2374,8 +2400,8 @@ class tinyBLAS_PPC { __builtin_mma_xvf32gerpp(&acc_0, (vec_t)vec_A[6], vec_B[3]); __builtin_mma_xvf32gerpp(&acc_1, (vec_t)vec_A[7], vec_B[3]); } - SAVE_ACC(&acc_0, ii, jj); - SAVE_ACC(&acc_1, ii+4, jj); + save_acc(&acc_0, ii, jj); + save_acc(&acc_1, ii + 4, jj); } void KERNEL_8x8(int64_t ii, int64_t jj) { @@ -2386,19 +2412,96 @@ class tinyBLAS_PPC { __builtin_mma_xxsetaccz(&acc_2); __builtin_mma_xxsetaccz(&acc_3); for (int l = 0; l < k; l+=8) { - packTranspose(A+(ii*lda)+l, lda, 8, 8, (float*)vec_A); - packTranspose(B+(jj*ldb)+l, ldb, 8, 8, (float*)vec_B); + packTranspose(A + (ii * lda) + l, lda, 8, 8, (float *)vec_A); + packTranspose(B + (jj * ldb) + l, ldb, 8, 8, (float *)vec_B); for(int x = 0; x < 16; x+=2) { __builtin_mma_xvf32gerpp(&acc_0, (vec_t)vec_A[x], vec_B[x]); - __builtin_mma_xvf32gerpp(&acc_1, (vec_t)vec_A[x], vec_B[x+1]); - __builtin_mma_xvf32gerpp(&acc_2, (vec_t)vec_A[x+1], vec_B[x]); - __builtin_mma_xvf32gerpp(&acc_3, (vec_t)vec_A[x+1], vec_B[x+1]); + __builtin_mma_xvf32gerpp(&acc_1, (vec_t)vec_A[x], vec_B[x + 1]); + __builtin_mma_xvf32gerpp(&acc_2, (vec_t)vec_A[x + 1], vec_B[x]); + __builtin_mma_xvf32gerpp(&acc_3, (vec_t)vec_A[x + 1], vec_B[x + 1]); + } + } + save_acc(&acc_0, ii, jj); + save_acc(&acc_1, ii, jj + 4); + save_acc(&acc_2, ii + 4, jj); + save_acc(&acc_3, ii + 4, jj + 4); + } + + inline void MMA_16x8(vec_t * vec_A0, vec_t * vec_A1, vec_t * vec_B, acc_t * acc) { + for (int x = 0; x < 16; x += 2) { + __builtin_mma_xvf32gerpp(&acc[0], vec_A0[x + 0], vec_B[x]); + __builtin_mma_xvf32gerpp(&acc[1], vec_A0[x + 0], vec_B[x + 1]); + __builtin_mma_xvf32gerpp(&acc[2], vec_A0[x + 1], vec_B[x]); + __builtin_mma_xvf32gerpp(&acc[3], vec_A0[x + 1], vec_B[x + 1]); + __builtin_mma_xvf32gerpp(&acc[4], vec_A1[x + 0], vec_B[x]); + __builtin_mma_xvf32gerpp(&acc[5], vec_A1[x + 0], vec_B[x + 1]); + __builtin_mma_xvf32gerpp(&acc[6], vec_A1[x + 1], vec_B[x]); + __builtin_mma_xvf32gerpp(&acc[7], vec_A1[x + 1], vec_B[x + 1]); + } + } + + void KERNEL(int64_t ii, int64_t jj, int64_t mc, int64_t nc, int64_t kc, vec_t * vec_A, vec_t * vec_B, int64_t kk) { + for (int64_t i = 0; i < mc; i += 16) { + int A_base_addr = (mc / 8) * (i / 8) * 16; + for (int64_t j = 0; j < nc; j += 8) { + int B_base_addr = (nc / 8) * (j / 8) * 16; + acc_t acc[8]; + vec_t A0_block[16]; vec_t A1_block[16]; + for (int x = 0; x < 8; x++) + __builtin_mma_xxsetaccz(&acc[x]); + for (int64_t l = 0; l < kc; l += 8) { + int A0_block_idx = A_base_addr + (l / 8) * 16; + int A1_block_idx = A0_block_idx + (mc / 8) * 16; + int B_block_idx = B_base_addr + (l / 8) * 16; + vec_t* A0_block = &vec_A[A0_block_idx]; + vec_t* A1_block = &vec_A[A1_block_idx]; + vec_t* B_block = &vec_B[B_block_idx]; + MMA_16x8(A0_block, A1_block, B_block, acc); + } + if (kk == 0) { + save_acc(&acc[0], ii + i, jj + j); + save_acc(&acc[1], ii + i, jj + j + 4); + save_acc(&acc[2], ii + i + 4, jj + j); + save_acc(&acc[3], ii + i + 4, jj + j + 4); + save_acc(&acc[4], ii + i + 8, jj + j); + save_acc(&acc[5], ii + i + 8, jj + j + 4); + save_acc(&acc[6], ii + i + 12, jj + j); + save_acc(&acc[7], ii + i + 12, jj + j + 4); + } else { + add_save_acc(&acc[0], ii + i, jj + j); + add_save_acc(&acc[1], ii + i, jj + j + 4); + add_save_acc(&acc[2], ii + i + 4, jj + j); + add_save_acc(&acc[3], ii + i + 4, jj + j + 4); + add_save_acc(&acc[4], ii + i + 8, jj + j); + add_save_acc(&acc[5], ii + i + 8, jj + j + 4); + add_save_acc(&acc[6], ii + i + 12, jj + j); + add_save_acc(&acc[7], ii + i + 12, jj + j + 4); + } + } + } + } + + void matmul_tiled(int64_t m , int64_t n, int64_t mc, int64_t nc, int64_t kc) { + int64_t ytiles = m / mc; + int64_t xtiles = n / nc; + int64_t tiles = xtiles * ytiles; + int64_t duty = (tiles + nth - 1) / nth; + int64_t start = duty * ith; + int64_t end = start + duty; + if (end > tiles) { + end = tiles; + } + for (int64_t job = start; job < end; ++job) { + int64_t ii = (job / xtiles) * mc; + int64_t jj = (job % xtiles) * nc; + for (int64_t kk = 0; kk < k; kk += kc) { + vec_t A_pack[kc * mc / 4]; + vec_t B_pack[kc * nc / 4]; + packTranspose(A + (ii * lda) + kk, lda, kc, mc, (float *)A_pack); + packTranspose(B + (jj * ldb) + kk, ldb, kc, nc, (float *)B_pack); + KERNEL(ii, jj, mc, nc, kc, A_pack, B_pack, kk); } } - SAVE_ACC(&acc_0, ii, jj); - SAVE_ACC(&acc_1, ii, jj+4); - SAVE_ACC(&acc_2, ii+4, jj); - SAVE_ACC(&acc_3, ii+4, jj+4); } void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) { @@ -2406,35 +2509,35 @@ class tinyBLAS_PPC { int n_rem = MIN(n - n0, 8); int mc = 0, nc = 0; if (m_rem >= 8 && n_rem >= 8) { - mc = 8; - nc = 8; - gemm<8, 8>(m0, m, n0, n); + mc = 8; + nc = 8; + gemm<8, 8>(m0, m, n0, n); } else if (m_rem >= 4 && n_rem >= 8) { - mc = 4; - nc = 8; - gemm<4, 8>(m0, m, n0, n); + mc = 4; + nc = 8; + gemm<4, 8>(m0, m, n0, n); } else if (m_rem >= 8 && n_rem >= 4) { - mc = 8; - nc = 4; - gemm<8, 4>(m0, m, n0, n); + mc = 8; + nc = 4; + gemm<8, 4>(m0, m, n0, n); } else if (m_rem >= 4 && n_rem >= 4) { - mc = 4; - nc = 4; - gemm<4, 4>(m0, m, n0, n); + mc = 4; + nc = 4; + gemm<4, 4>(m0, m, n0, n); } else { mc = (m_rem >= 4) ? 4 : m_rem; nc = (n_rem >= 4) ? 4 : n_rem; if (mc == 0 || nc == 0) - return; + return; gemm_small(m0, m, n0, n, mc, nc); } int64_t mp = m0 + ((m - m0) / mc) * mc; int64_t np = n0 + ((n - n0) / nc) * nc; mnpack(mp, m, n0, np); mnpack(m0, m, np, n); - } + } - void gemm_small(int64_t m0, int64_t m, int64_t n0, int64_t n, int RM, int RN) { + void gemm_small(int64_t m0, int64_t m, int64_t n0, int64_t n, int RM, int RN) { int64_t ytiles = (m - m0) / RM; int64_t xtiles = (n - n0) / RN; int64_t tiles = xtiles * ytiles; @@ -2449,30 +2552,30 @@ class tinyBLAS_PPC { vec_t vec_C[4]; acc_t acc_0; __builtin_mma_xxsetaccz(&acc_0); - vec_t vec_A[4] {0}, vec_B[4] = {0}; - for (int l=0; l(A+(ii)*lda+l); - packTranspose(B+(jj*ldb)+l, ldb, RN, 4, (float*)vec_B); + float * a = const_cast(A + (ii) * lda + l); + packTranspose(B + (jj * ldb) + l, ldb, RN, 4, (float *)vec_B); vec_A[0] = (vec_t)vec_xl(0,a); - vec_A[1] = (vec_t)vec_splats(*((float*)&vec_A+1)); - vec_A[2] = (vec_t)vec_splats(*((float*)&vec_A+2)); - vec_A[3] = (vec_t)vec_splats(*((float*)&vec_A+3)); + vec_A[1] = (vec_t)vec_splats(*((float *)&vec_A+1)); + vec_A[2] = (vec_t)vec_splats(*((float *)&vec_A+2)); + vec_A[3] = (vec_t)vec_splats(*((float *)&vec_A+3)); } else if (RN == 1) { - packTranspose(A+(ii*lda)+l, lda, RM, 4, (float*)vec_A); - float* b = const_cast(B+(jj)*ldb+l); + packTranspose(A + (ii * lda) + l, lda, RM, 4, (float *)vec_A); + float * b = const_cast(B + (jj) * ldb + l); vec_B[0] = (vec_t)vec_xl(0,b); - vec_B[1] = (vec_t)vec_splats(*((float*)&vec_B+1)); - vec_B[2] = (vec_t)vec_splats(*((float*)&vec_B+2)); - vec_B[3] = (vec_t)vec_splats(*((float*)&vec_B+3)); + vec_B[1] = (vec_t)vec_splats(*((float *)&vec_B+1)); + vec_B[2] = (vec_t)vec_splats(*((float *)&vec_B+2)); + vec_B[3] = (vec_t)vec_splats(*((float *)&vec_B+3)); } else { - packTranspose(A+(ii*lda)+l, lda, RM, 4, (float*)vec_A); - packTranspose(B+(jj*ldb)+l, ldb, RN, 4, (float*)vec_B); + packTranspose(A + (ii * lda) + l, lda, RM, 4, (float *)vec_A); + packTranspose(B + (jj * ldb) + l, ldb, RN, 4, (float *)vec_B); } __builtin_mma_xvf32gerpp(&acc_0, vec_A[0], vec_B[0]); __builtin_mma_xvf32gerpp(&acc_0, vec_A[1], vec_B[1]); @@ -2482,12 +2585,27 @@ class tinyBLAS_PPC { __builtin_mma_disassemble_acc(vec_C, &acc_0); for (int I = 0; I < RM; I++) { for (int J = 0; J < RN; J++) { - *((float*)(C+ii+((jj+J)*ldc)+I)) = *((float*)&vec_C[I]+J); + *((float *)(C+ii+((jj+J)*ldc)+I)) = *((float *)&vec_C[I]+J); } } } } + template + inline void kernel(int64_t ii, int64_t jj) { + if constexpr(RM == 4 && RN == 4) { + KERNEL_4x4(ii, jj); + } else if constexpr(RM == 4 && RN == 8) { + KERNEL_4x8(ii, jj); + } else if constexpr(RM == 8 && RN == 4) { + KERNEL_8x4(ii, jj); + } else if constexpr(RM == 8 && RN == 8) { + KERNEL_8x8(ii, jj); + } else { + static_assert(false, "RN/RM values not supported"); + } + } + template NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) { int64_t ytiles = (m - m0) / RM; @@ -2496,27 +2614,18 @@ class tinyBLAS_PPC { int64_t duty = (tiles + nth - 1) / nth; int64_t start = duty * ith; int64_t end = start + duty; - if (RM == 4 && RN == 4) { - kernel = &tinyBLAS_PPC::KERNEL_4x4; - } else if (RM == 4 && RN == 8) { - kernel = &tinyBLAS_PPC::KERNEL_4x8; - } else if (RM == 8 && RN == 4) { - kernel = &tinyBLAS_PPC::KERNEL_8x4; - } else if (RM == 8 && RN == 8) { - kernel = &tinyBLAS_PPC::KERNEL_8x8; - } if (end > tiles) end = tiles; for (int64_t job = start; job < end; ++job) { int64_t ii = m0 + job / xtiles * RM; int64_t jj = n0 + job % xtiles * RN; - (this->*kernel)(ii, jj); + kernel(ii, jj); } } - const float *const A; - const float *const B; - float *C; + const float * const A; + const float * const B; + float * C; const int64_t k; const int64_t lda; const int64_t ldb; From 44b1efa41acd4df3f56ee0e46f898135ecd1a054 Mon Sep 17 00:00:00 2001 From: Eve <139727413+netrunnereve@users.noreply.github.com> Date: Tue, 26 Aug 2025 15:42:49 +0000 Subject: [PATCH 122/174] tests: add performance test for mul mat id (#15543) --- tests/test-backend-ops.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 4b4299d49d..c84023e05e 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6400,6 +6400,24 @@ static std::vector> make_test_cases_perf() { } } + // qwen3-30b-a3b + for (int bs : {1, 4, 8, 512}) { + for (ggml_type type_a : {GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0, GGML_TYPE_Q4_K, GGML_TYPE_Q6_K, GGML_TYPE_IQ2_XS}) { + for (ggml_type type_b : {GGML_TYPE_F32}) { + test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, 128, 8, false, 768, bs, 2048, 1)); + } + } + } + + // gpt-oss-20b + for (int bs : {1, 4, 8, 512}) { + for (ggml_type type_a : {GGML_TYPE_MXFP4}) { + for (ggml_type type_b : {GGML_TYPE_F32}) { + test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, 32, 4, false, 2880, bs, 2880, 1)); + } + } + } + for (int K : {3, 5}) { for (int IC : {256, 2560}) { for (int IW_IH : {32, 64, 256}) { From 8ce3ff1d91245e158d98d8062cd64b0dd98dcfe3 Mon Sep 17 00:00:00 2001 From: fidoriel <49869342+fidoriel@users.noreply.github.com> Date: Tue, 26 Aug 2025 20:05:50 +0200 Subject: [PATCH 123/174] mtmd : fix mtmd ios build (#15579) --- tools/mtmd/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/mtmd/CMakeLists.txt b/tools/mtmd/CMakeLists.txt index 4baa15b960..0979488560 100644 --- a/tools/mtmd/CMakeLists.txt +++ b/tools/mtmd/CMakeLists.txt @@ -55,6 +55,8 @@ add_executable(llama-qwen2vl-cli deprecation-warning.cpp) set(TARGET llama-mtmd-cli) add_executable (${TARGET} mtmd-cli.cpp) set_target_properties (${TARGET} PROPERTIES OUTPUT_NAME llama-mtmd-cli) -install (TARGETS ${TARGET} RUNTIME) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") + install(TARGETS ${TARGET} RUNTIME) +endif() target_link_libraries (${TARGET} PRIVATE common mtmd Threads::Threads) target_compile_features(${TARGET} PRIVATE cxx_std_17) From 8b696861364360770e9f61a3422d32941a477824 Mon Sep 17 00:00:00 2001 From: Akarshan Biswas Date: Wed, 27 Aug 2025 00:27:49 +0530 Subject: [PATCH 124/174] SYCL: fix rms_norm_mul_add for tensor dim not a multiple of sg_size (#15592) The original implementation unconditionally returned true for this operation, leading to a failure when the tensor's first dimension (ne[0]) was not a multiple of WARP_SIZE. This caused an GGML_ASSERT(ncols % WARP_SIZE == 0) failure in ggml-sycl/norm.cpp. This change updates the ggml_backend_sycl_device_supports_op check to correctly return true for GGML_OP_RMS_NORM only when the first dimension of the tensor is a multiple of WARP_SIZE, ensuring the operation can be performed without error. --- ggml/src/ggml-sycl/ggml-sycl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index 12dd5dd2e6..18ff4e0b0c 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -4364,11 +4364,12 @@ static bool ggml_backend_sycl_device_supports_op(ggml_backend_dev_t dev, const g return (op->type == GGML_TYPE_F32 && op->src[0]->type == GGML_TYPE_F32) && (op->type == op->src[0]->type); #endif case GGML_OP_NORM: - case GGML_OP_RMS_NORM: return true; case GGML_OP_L2_NORM: case GGML_OP_GROUP_NORM: return ggml_is_contiguous(op->src[0]); + case GGML_OP_RMS_NORM: + return ((op->src[0]->ne[0] % WARP_SIZE) == 0); case GGML_OP_SCALE: return true; case GGML_OP_CONT: From bcbddcd54f0d5c22eab180831fdea6484107112f Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Tue, 26 Aug 2025 13:14:38 -0700 Subject: [PATCH 125/174] tests : fix test-opt with GGML_BACKEND_DL (#15599) --- tests/test-opt.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/test-opt.cpp b/tests/test-opt.cpp index 18d3fcf2cb..8dcb4a7dbf 100644 --- a/tests/test-opt.cpp +++ b/tests/test-opt.cpp @@ -3,7 +3,6 @@ #include "ggml.h" #include "ggml-alloc.h" #include "ggml-backend.h" -#include "ggml-cpu.h" #include "ggml-opt.h" #include @@ -899,6 +898,7 @@ static std::pair test_backend( int main(void) { ggml_log_set(nullptr, nullptr); + ggml_backend_load_all(); const size_t dev_count = ggml_backend_dev_count(); printf("Testing %zu devices\n\n", dev_count); size_t n_ok = 0; @@ -911,11 +911,12 @@ int main(void) { ggml_backend_t backend = ggml_backend_dev_init(devs[i], NULL); GGML_ASSERT(backend != NULL); -#ifndef _MSC_VER - if (ggml_backend_is_cpu(backend)) { - ggml_backend_cpu_set_n_threads(backend, std::thread::hardware_concurrency() / 2); + + auto * reg = ggml_backend_dev_backend_reg(devs[i]); + auto ggml_backend_set_n_threads_fn = (ggml_backend_set_n_threads_t) ggml_backend_reg_get_proc_address(reg, "ggml_backend_set_n_threads"); + if (ggml_backend_set_n_threads_fn) { + ggml_backend_set_n_threads_fn(backend, std::thread::hardware_concurrency() / 2); } -#endif backends.push_back(backend); } From 86076f92de1a547ef87c304facca3b4b9fae6c21 Mon Sep 17 00:00:00 2001 From: rmatif Date: Wed, 27 Aug 2025 08:36:05 +0200 Subject: [PATCH 126/174] OpenCL: add fused group_norm/norm, mul, add (#15314) * add fused group_norm/norm, mul, add * fix spacing * revert rms_norm logic * fix trailing whitespace --- ggml/src/ggml-opencl/ggml-opencl.cpp | 189 ++++++++++++++++++++- ggml/src/ggml-opencl/kernels/group_norm.cl | 49 ++++++ ggml/src/ggml-opencl/kernels/norm.cl | 80 +++++++++ tests/test-backend-ops.cpp | 85 +++++++++ 4 files changed, 399 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index 36b18ddb8a..c25c2daaf6 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -420,9 +420,9 @@ struct ggml_backend_opencl_context { cl_kernel kernel_clamp; cl_kernel kernel_geglu, kernel_reglu, kernel_swiglu, kernel_swiglu_oai, kernel_geglu_erf, kernel_geglu_quick, kernel_geglu_f16, kernel_reglu_f16, kernel_swiglu_f16, kernel_geglu_erf_f16, kernel_geglu_quick_f16; - cl_kernel kernel_norm; + cl_kernel kernel_norm, kernel_norm_mul_add; cl_kernel kernel_rms_norm, kernel_rms_norm_mul; - cl_kernel kernel_group_norm; + cl_kernel kernel_group_norm, kernel_group_norm_mul_add; cl_kernel kernel_diag_mask_inf, kernel_diag_mask_inf_8; cl_kernel kernel_soft_max, kernel_soft_max_4; cl_kernel kernel_soft_max_f16, kernel_soft_max_4_f16; @@ -1161,7 +1161,8 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve backend_ctx->program_norm = build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); - CL_CHECK((backend_ctx->kernel_norm = clCreateKernel(backend_ctx->program_norm, "kernel_norm", &err), err)); + CL_CHECK((backend_ctx->kernel_norm = clCreateKernel(backend_ctx->program_norm, "kernel_norm", &err), err)); + CL_CHECK((backend_ctx->kernel_norm_mul_add = clCreateKernel(backend_ctx->program_norm, "kernel_norm_mul_add", &err), err)); GGML_LOG_CONT("."); } @@ -1487,7 +1488,8 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve backend_ctx->program_group_norm = build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); - CL_CHECK((backend_ctx->kernel_group_norm = clCreateKernel(backend_ctx->program_group_norm, "kernel_group_norm", &err), err)); + CL_CHECK((backend_ctx->kernel_group_norm = clCreateKernel(backend_ctx->program_group_norm, "kernel_group_norm", &err), err)); + CL_CHECK((backend_ctx->kernel_group_norm_mul_add = clCreateKernel(backend_ctx->program_group_norm, "kernel_group_norm_mul_add", &err), err)); GGML_LOG_CONT("."); } @@ -2498,12 +2500,47 @@ static bool ggml_opencl_can_fuse(const struct ggml_cgraph * cgraph, int node_idx if (!ggml_is_contiguous_rows(mul->src[0]) || !ggml_is_contiguous_rows(mul->src[1])) { return false; } + } else if (ops.size() == 3 && ops.begin()[0] == GGML_OP_NORM && ops.begin()[1] == GGML_OP_MUL && ops.begin()[2] == GGML_OP_ADD) { + const ggml_tensor *norm = cgraph->nodes[node_idx]; + const ggml_tensor *mul = cgraph->nodes[node_idx+1]; + const ggml_tensor *add = cgraph->nodes[node_idx+2]; + const ggml_tensor *w = mul->src[0] == norm ? mul->src[1] : mul->src[0]; + const ggml_tensor *b = add->src[0] == mul ? add->src[1] : add->src[0]; + + // norm fusion only supports F32 + if (norm->src[0]->type != GGML_TYPE_F32 || w->type != GGML_TYPE_F32 || b->type != GGML_TYPE_F32) { + return false; + } + + if (norm->src[0]->ne[0] % 4 != 0) { + return false; + } + + if (!ggml_is_contiguous(norm->src[0]) || !ggml_is_contiguous(w) || !ggml_is_contiguous(b)) { + return false; + } + } else if (ops.size() == 3 && ops.begin()[0] == GGML_OP_GROUP_NORM && ops.begin()[1] == GGML_OP_MUL && ops.begin()[2] == GGML_OP_ADD) { + const ggml_tensor *gn = cgraph->nodes[node_idx]; + const ggml_tensor *mul = cgraph->nodes[node_idx+1]; + const ggml_tensor *add = cgraph->nodes[node_idx+2]; + const ggml_tensor *w = mul->src[0] == gn ? mul->src[1] : mul->src[0]; + const ggml_tensor *b = add->src[0] == mul ? add->src[1] : add->src[0]; + + if (gn->src[0]->type != GGML_TYPE_F32 || w->type != GGML_TYPE_F32 || b->type != GGML_TYPE_F32) { + return false; + } + + if (!ggml_is_contiguous(gn->src[0]) || !ggml_is_contiguous(w) || !ggml_is_contiguous(b)) { + return false; + } } return true; } static void ggml_opencl_op_rms_norm_fused(ggml_backend_t backend, ggml_tensor * rms_norm_tensor, ggml_tensor * mul_tensor); +static void ggml_opencl_op_norm_fused(ggml_backend_t backend, ggml_tensor * norm_tensor, ggml_tensor * mul_tensor, ggml_tensor * add_tensor); +static void ggml_opencl_op_group_norm_fused(ggml_backend_t backend, ggml_tensor * gn_tensor, ggml_tensor * mul_tensor, ggml_tensor * add_tensor); static ggml_status ggml_backend_opencl_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) { ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; @@ -2520,6 +2557,16 @@ static ggml_status ggml_backend_opencl_graph_compute(ggml_backend_t backend, ggm continue; } + if (!backend_ctx->disable_fusion && ggml_opencl_can_fuse(cgraph, i, { GGML_OP_NORM, GGML_OP_MUL, GGML_OP_ADD })) { + ggml_opencl_op_norm_fused(backend, node, cgraph->nodes[i+1], cgraph->nodes[i+2]); + i += 2; + continue; + } + if (!backend_ctx->disable_fusion && ggml_opencl_can_fuse(cgraph, i, { GGML_OP_GROUP_NORM, GGML_OP_MUL, GGML_OP_ADD })) { + ggml_opencl_op_group_norm_fused(backend, node, cgraph->nodes[i+1], cgraph->nodes[i+2]); + i += 2; + continue; + } if (!backend_ctx->disable_fusion && ggml_opencl_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { ggml_opencl_op_rms_norm_fused(backend, node, cgraph->nodes[i+1]); i++; @@ -5039,6 +5086,140 @@ static void ggml_opencl_op_rms_norm_fused(ggml_backend_t backend, ggml_tensor * backend_ctx->enqueue_ndrange_kernel(kernel, 3, global_work_size, local_work_size, dst); } +static void ggml_opencl_op_norm_fused(ggml_backend_t backend, ggml_tensor * norm_tensor, ggml_tensor * mul_tensor, ggml_tensor * add_tensor) { + GGML_ASSERT(norm_tensor && mul_tensor && add_tensor); + + const ggml_tensor * src0 = norm_tensor->src[0]; + const ggml_tensor * src1 = mul_tensor->src[0] == norm_tensor ? mul_tensor->src[1] : mul_tensor->src[0]; + const ggml_tensor * src2 = add_tensor->src[0] == mul_tensor ? add_tensor->src[1] : add_tensor->src[0]; + const ggml_tensor * dst = add_tensor; + + ggml_tensor_extra_cl * extra0 = (ggml_tensor_extra_cl *)src0->extra; + ggml_tensor_extra_cl * extra1 = (ggml_tensor_extra_cl *)src1->extra; + ggml_tensor_extra_cl * extra2 = (ggml_tensor_extra_cl *)src2->extra; + ggml_tensor_extra_cl * extrad = (ggml_tensor_extra_cl *)dst->extra; + + cl_ulong offset0 = extra0->offset + src0->view_offs; + cl_ulong offset1 = extra1->offset + src1->view_offs; + cl_ulong offset2 = extra2->offset + src2->view_offs; + cl_ulong offsetd = extrad->offset + dst->view_offs; + + ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; + + float eps; + memcpy(&eps, norm_tensor->op_params, sizeof(float)); + + const int ne00 = src0->ne[0], ne01 = src0->ne[1], ne02 = src0->ne[2], ne03 = src0->ne[3]; + const cl_ulong nb01 = src0->nb[1], nb02 = src0->nb[2], nb03 = src0->nb[3]; + const int ne10 = src1->ne[0], ne11 = src1->ne[1], ne12 = src1->ne[2], ne13 = src1->ne[3]; + const cl_ulong nb11 = src1->nb[1], nb12 = src1->nb[2], nb13 = src1->nb[3]; + const int ne20 = src2->ne[0], ne21 = src2->ne[1], ne22 = src2->ne[2], ne23 = src2->ne[3]; + const cl_ulong nb21 = src2->nb[1], nb22 = src2->nb[2], nb23 = src2->nb[3]; + const cl_ulong nbd1 = dst->nb[1], nbd2 = dst->nb[2], nbd3 = dst->nb[3]; + + size_t sgs; + if (backend_ctx->gpu_family == ADRENO) sgs = 64; + else if (backend_ctx->gpu_family == INTEL) sgs = 32; + else GGML_ASSERT(false && "Unsupported GPU"); + + cl_kernel kernel = backend_ctx->kernel_norm_mul_add; + + int nth = sgs; + int max_workgroup_size = backend_ctx->get_kernel_workgroup_size(kernel); + while (nth < ne00/4 && nth < max_workgroup_size) nth *= 2; + nth = MIN(nth, max_workgroup_size); + nth = MIN(nth, ne00/4); + + size_t gws[] = {(size_t)ne01*nth, (size_t)ne02, (size_t)ne03}; + size_t lws[] = {(size_t)nth, 1, 1}; + size_t num_subgroups = (nth + sgs - 1) / sgs; + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0->data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset0)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extra2->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offset2)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(int), &ne01)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &ne02)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(int), &ne03)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(cl_ulong), &nb01)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(cl_ulong), &nb02)); + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(cl_ulong), &nb03)); + CL_CHECK(clSetKernelArg(kernel, 15, sizeof(int), &ne10)); + CL_CHECK(clSetKernelArg(kernel, 16, sizeof(int), &ne11)); + CL_CHECK(clSetKernelArg(kernel, 17, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 18, sizeof(int), &ne13)); + CL_CHECK(clSetKernelArg(kernel, 19, sizeof(cl_ulong), &nb11)); + CL_CHECK(clSetKernelArg(kernel, 20, sizeof(cl_ulong), &nb12)); + CL_CHECK(clSetKernelArg(kernel, 21, sizeof(cl_ulong), &nb13)); + CL_CHECK(clSetKernelArg(kernel, 22, sizeof(int), &ne20)); + CL_CHECK(clSetKernelArg(kernel, 23, sizeof(int), &ne21)); + CL_CHECK(clSetKernelArg(kernel, 24, sizeof(int), &ne22)); + CL_CHECK(clSetKernelArg(kernel, 25, sizeof(int), &ne23)); + CL_CHECK(clSetKernelArg(kernel, 26, sizeof(cl_ulong), &nb21)); + CL_CHECK(clSetKernelArg(kernel, 27, sizeof(cl_ulong), &nb22)); + CL_CHECK(clSetKernelArg(kernel, 28, sizeof(cl_ulong), &nb23)); + CL_CHECK(clSetKernelArg(kernel, 29, sizeof(cl_ulong), &nbd1)); + CL_CHECK(clSetKernelArg(kernel, 30, sizeof(cl_ulong), &nbd2)); + CL_CHECK(clSetKernelArg(kernel, 31, sizeof(cl_ulong), &nbd3)); + CL_CHECK(clSetKernelArg(kernel, 32, sizeof(float), &eps)); + CL_CHECK(clSetKernelArg(kernel, 33, sizeof(cl_float2) * num_subgroups, NULL)); + + backend_ctx->enqueue_ndrange_kernel(kernel, 3, gws, lws, dst); +} + +static void ggml_opencl_op_group_norm_fused(ggml_backend_t backend, ggml_tensor * gn_tensor, ggml_tensor * mul_tensor, ggml_tensor * add_tensor) { + GGML_ASSERT(gn_tensor && mul_tensor && add_tensor); + + const ggml_tensor * src0 = gn_tensor->src[0]; + const ggml_tensor * src1 = mul_tensor->src[0] == gn_tensor ? mul_tensor->src[1] : mul_tensor->src[0]; + const ggml_tensor * src2 = add_tensor->src[0] == mul_tensor ? add_tensor->src[1] : add_tensor->src[0]; + const ggml_tensor * dst = add_tensor; + + ggml_tensor_extra_cl * extra0 = (ggml_tensor_extra_cl *)src0->extra; + ggml_tensor_extra_cl * extra1 = (ggml_tensor_extra_cl *)src1->extra; + ggml_tensor_extra_cl * extra2 = (ggml_tensor_extra_cl *)src2->extra; + ggml_tensor_extra_cl * extrad = (ggml_tensor_extra_cl *)dst->extra; + + cl_ulong offset0 = extra0->offset + src0->view_offs; + cl_ulong offset1 = extra1->offset + src1->view_offs; + cl_ulong offset2 = extra2->offset + src2->view_offs; + cl_ulong offsetd = extrad->offset + dst->view_offs; + + ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; + + int groups; + float eps; + memcpy(&groups, gn_tensor->op_params, sizeof(int)); + memcpy(&eps, (char *)gn_tensor->op_params + sizeof(int), sizeof(float)); + + cl_kernel kernel = backend_ctx->kernel_group_norm_mul_add; + int max_workgroup_size = backend_ctx->get_kernel_workgroup_size(kernel); + int ne = ggml_nelements(src0); + int group_size = ne / groups; + + size_t lws[] = { (size_t)MIN(max_workgroup_size, group_size) }; + size_t gws[] = { (size_t)groups * lws[0] }; + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0->data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset0)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extra2->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offset2)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(int), &ne)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(int), &group_size)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(float), &eps)); + + backend_ctx->enqueue_ndrange_kernel(kernel, 1, gws, lws, dst); +} + static void ggml_cl_group_norm(ggml_backend_t backend, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(src0); GGML_ASSERT(src0->extra); diff --git a/ggml/src/ggml-opencl/kernels/group_norm.cl b/ggml/src/ggml-opencl/kernels/group_norm.cl index 57c9df4d35..8e4fa0ed12 100644 --- a/ggml/src/ggml-opencl/kernels/group_norm.cl +++ b/ggml/src/ggml-opencl/kernels/group_norm.cl @@ -70,3 +70,52 @@ kernel void kernel_group_norm( dst[j] *= scale; } } + +//------------------------------------------------------------------------------ +// group_norm_mul_add +//------------------------------------------------------------------------------ +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_32 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_group_norm_mul_add( + global float * src0, ulong offset0, + global float * src1, ulong offset1, + global float * src2, ulong offset2, + global float * dst, ulong offsetd, + int ne, + int group_size, + float eps +) { + src0 = (global float *)((global char *)src0 + offset0); + src1 = (global float *)((global char *)src1 + offset1); + src2 = (global float *)((global char *)src2 + offset2); + dst = (global float *)((global char *)dst + offsetd); + + int start = get_group_id(0) * group_size; + int end = start + group_size; + if (end > ne) { + end = ne; + } + + float sum = 0.0f; + float sum_sq = 0.0f; + + for (int j = start + get_local_id(0); j < end; j += get_local_size(0)) { + float val = src0[j]; + sum += val; + sum_sq += val*val; + } + + sum = sub_group_reduce_add(sum); + sum_sq = sub_group_reduce_add(sum_sq); + + const float mean = sum / group_size; + const float var = sum_sq / group_size - mean * mean; + const float scale = rsqrt(var + eps); + + for (int j = start + get_local_id(0); j < end; j += get_local_size(0)) { + dst[j] = ((src0[j] - mean) * scale) * src1[j] + src2[j]; + } +} diff --git a/ggml/src/ggml-opencl/kernels/norm.cl b/ggml/src/ggml-opencl/kernels/norm.cl index 43167ba4d2..170f822787 100644 --- a/ggml/src/ggml-opencl/kernels/norm.cl +++ b/ggml/src/ggml-opencl/kernels/norm.cl @@ -79,3 +79,83 @@ kernel void kernel_norm( y[i00] = y[i00] * scale; } } + +//------------------------------------------------------------------------------ +// norm_mul_add +//------------------------------------------------------------------------------ +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_32 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_norm_mul_add( + global char * src0_ptr, ulong src0_offset, + global char * src1_ptr, ulong src1_offset, + global char * src2_ptr, ulong src2_offset, + global char * dst_ptr, ulong dst_offset, + int ne00, int ne01, int ne02, int ne03, + ulong nb01, ulong nb02, ulong nb03, + int ne10, int ne11, int ne12, int ne13, + ulong nb11, ulong nb12, ulong nb13, + int ne20, int ne21, int ne22, int ne23, + ulong nb21, ulong nb22, ulong nb23, + ulong nbd1, ulong nbd2, ulong nbd3, + float eps, + local float2 * sums +) { + const int i03 = get_group_id(2); + const int i02 = get_group_id(1); + const int i01 = get_group_id(0); + + global float4 * x = (global float4 *)(src0_ptr + src0_offset + i01*nb01 + i02*nb02 + i03*nb03); + global float4 * w = (global float4 *)(src1_ptr + src1_offset + (i01%ne11)*nb11 + (i02%ne12)*nb12 + (i03%ne13)*nb13); + global float4 * b = (global float4 *)(src2_ptr + src2_offset + (i01%ne21)*nb21 + (i02%ne22)*nb22 + (i03%ne23)*nb23); + global float4 * y = (global float4 *)(dst_ptr + dst_offset + i01*nbd1 + i02*nbd2 + i03*nbd3); + + float p_sum = 0.0f; + float p_sum_sq = 0.0f; + + const int n_chunks = ne00 / 4; + for (int i00 = get_local_id(0); i00 < n_chunks; i00 += get_local_size(0)) { + float4 val = x[i00]; + p_sum += val.x + val.y + val.z + val.w; + p_sum_sq += dot(val, val); + } + + p_sum = sub_group_reduce_add(p_sum); + p_sum_sq = sub_group_reduce_add(p_sum_sq); + + if (get_sub_group_local_id() == 0) { + sums[get_sub_group_id()] = (float2)(p_sum, p_sum_sq); + } + barrier(CLK_LOCAL_MEM_FENCE); + + if (get_local_id(0) == 0) { + float sum = 0.0f; + float sum_sq = 0.0f; + for (uint i = 0; i < get_num_sub_groups(); ++i) { + float2 s = sums[i]; + sum += s.x; + sum_sq += s.y; + } + + const float inv_ne00 = 1.0f / (float)ne00; + const float mean = sum * inv_ne00; + const float variance = mad(-mean, mean, sum_sq * inv_ne00); + + sums[0] = (float2)(mean, rsqrt(variance + eps)); + } + barrier(CLK_LOCAL_MEM_FENCE); + + const float2 mean_scale = sums[0]; + const float mean = mean_scale.x; + const float scale = mean_scale.y; + const float neg_mean_scale = -mean * scale; + + for (int i00 = get_local_id(0); i00 < n_chunks; i00 += get_local_size(0)) { + const int w_idx = ne10 > 1 ? i00 : 0; + const int b_idx = ne20 > 1 ? i00 : 0; + const float4 norm_x = mad(x[i00], (float4)scale, (float4)neg_mean_scale); + y[i00] = mad(norm_x, w[w_idx], b[b_idx]); + } +} diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index c84023e05e..3a58621094 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2789,6 +2789,49 @@ struct test_norm : public test_case { } }; +// GGML_OP_NORM + GGML_OP_MUL + GGML_OP_ADD +struct test_norm_mul_add : public test_case { + const ggml_type type; + const std::array ne; + float eps; + const bool broadcast; + + std::string op_desc(ggml_tensor * t) override { + GGML_UNUSED(t); + return "NORM_MUL_ADD"; + } + + bool run_whole_graph() override { return true; } + + std::string vars() override { + return VARS_TO_STR4(type, ne, eps, broadcast); + } + + test_norm_mul_add(ggml_type type = GGML_TYPE_F32, + std::array ne = {128, 2, 1, 1}, + float eps = 1e-5f, + bool broadcast = false) + : type(type), ne(ne), eps(eps), broadcast(broadcast) {} + + ggml_tensor * build_graph(ggml_context * ctx) override { + std::array broadcast_dims = {ne[0], ne[1] * 2, ne[2] * 2, ne[3] * 2}; + + ggml_tensor * a = ggml_new_tensor(ctx, type, 4, broadcast ? broadcast_dims.data() : ne.data()); + ggml_tensor * w = ggml_new_tensor(ctx, type, 4, ne.data()); + ggml_tensor * b = ggml_new_tensor(ctx, type, 4, ne.data()); + ggml_set_param(a); ggml_set_param(w); ggml_set_param(b); + ggml_set_name(a, "a"); ggml_set_name(w, "w"); ggml_set_name(b, "b"); + + // Use a, w and b early to avoid OP_NONE in graph + a = ggml_add(ctx, ggml_add(ctx, a, w), b); + + ggml_tensor * n = ggml_norm(ctx, a, eps); + ggml_tensor * m = ggml_mul(ctx, n, w); + ggml_tensor * out = ggml_add(ctx, m, b); + ggml_set_name(out, "out"); + return out; + } +}; // GGML_OP_RMS_NORM struct test_rms_norm : public test_case { const ggml_type type; @@ -4475,6 +4518,44 @@ struct test_group_norm : public test_case { } }; +// GGML_OP_GROUP_NORM + GGML_OP_MUL + GGML_OP_ADD +struct test_group_norm_mul_add : public test_case { + const ggml_type type; + const std::array ne; + int num_groups; + float eps; + + std::string op_desc(ggml_tensor * t) override { + GGML_UNUSED(t); + return "GROUP_NORM_MUL_ADD"; + } + + bool run_whole_graph() override { return true; } + + std::string vars() override { + return VARS_TO_STR4(type, ne, num_groups, eps); + } + + test_group_norm_mul_add(ggml_type type = GGML_TYPE_F32, + std::array ne = {128, 1, 1, 1}, + int num_groups = 4, + float eps = 1e-5f) + : type(type), ne(ne), num_groups(num_groups), eps(eps) {} + + ggml_tensor * build_graph(ggml_context * ctx) override { + ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data()); + ggml_tensor * w = ggml_new_tensor(ctx, type, 4, ne.data()); + ggml_tensor * b = ggml_new_tensor(ctx, type, 4, ne.data()); + ggml_set_param(a); ggml_set_param(w); ggml_set_param(b); + ggml_set_name(a, "a"); ggml_set_name(w, "w"); ggml_set_name(b, "b"); + ggml_tensor * n = ggml_group_norm(ctx, a, num_groups, eps); + ggml_tensor * m = ggml_mul(ctx, n, w); + ggml_tensor * out = ggml_add(ctx, m, b); + ggml_set_name(out, "out"); + return out; + } +}; + // GGML_OP_L2_NORM struct test_l2_norm : public test_case { const ggml_type type; @@ -5865,6 +5946,8 @@ static std::vector> make_test_cases_eval() { for (float eps : {0.0f, 1e-6f, 1e-4f, 1e-1f, 1.0f}) { test_cases.emplace_back(new test_rms_norm_mul_add(GGML_TYPE_F32, {64, 5, 4, 3}, eps)); test_cases.emplace_back(new test_rms_norm_mul_add(GGML_TYPE_F32, {64, 5, 4, 3}, eps, true)); + test_cases.emplace_back(new test_norm_mul_add(GGML_TYPE_F32, {64, 5, 4, 3}, eps, false)); + test_cases.emplace_back(new test_norm_mul_add(GGML_TYPE_F32, {64, 5, 4, 3}, eps, true)); } for (uint32_t n : {1, 511, 1025, 8192, 33*512}) { for (bool multi_add : {false, true}) { @@ -6253,6 +6336,8 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_mean(GGML_TYPE_F32, { 32769, 1, 1, 1 })); test_cases.emplace_back(new test_group_norm(GGML_TYPE_F32, {64, 64, 320, 1})); test_cases.emplace_back(new test_group_norm(GGML_TYPE_F32, {9, 9, 1280, 1})); + test_cases.emplace_back(new test_group_norm_mul_add(GGML_TYPE_F32, {64, 64, 320, 1})); + test_cases.emplace_back(new test_group_norm_mul_add(GGML_TYPE_F32, {9, 9, 1280, 1})); test_cases.emplace_back(new test_acc()); test_cases.emplace_back(new test_pad()); test_cases.emplace_back(new test_pad_reflect_1d()); From fcca2182a18c786c57d02d1d1927204b133f1fdc Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 27 Aug 2025 10:28:53 +0200 Subject: [PATCH 127/174] common : add -m to bash completion for --model [no ci] (#15591) This commit updates the bash completion script to include the -m short option for the --model argument. The motivation for this is that currently tab completion only works the full --model option, and it is nice to have it work for the short option as well. --- common/arg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/arg.cpp b/common/arg.cpp index 81c4005c5e..1ae3fdbf4a 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1106,7 +1106,7 @@ static void common_params_print_completion(common_params_context & ctx_arg) { printf("\"\n\n"); printf(" case \"$prev\" in\n"); - printf(" --model)\n"); + printf(" --model|-m)\n"); printf(" COMPREPLY=( $(compgen -f -X '!*.gguf' -- \"$cur\") $(compgen -d -- \"$cur\") )\n"); printf(" return 0\n"); printf(" ;;\n"); From 1cf123a343ab7ca5586aacb9e0a1d2de7fe33be4 Mon Sep 17 00:00:00 2001 From: xctan Date: Wed, 27 Aug 2025 16:44:22 +0800 Subject: [PATCH 128/174] ggml-cpu : add basic RVV support for vector f32 ops (#15057) * ggml-cpu : add basic RVV support for vector f32 ops * ggml-cpu : add RVV support for f32 softmax --- ggml/src/ggml-cpu/CMakeLists.txt | 2 +- ggml/src/ggml-cpu/ops.cpp | 7 +- ggml/src/ggml-cpu/simd-mappings.h | 53 +++++++++++---- ggml/src/ggml-cpu/vec.cpp | 21 +++++- ggml/src/ggml-cpu/vec.h | 104 +++++++++++++++++++++++++++++- 5 files changed, 168 insertions(+), 19 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index ce0a3e1285..b70302ec8c 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -435,7 +435,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) ) if (GGML_RVV) if (GGML_XTHEADVECTOR) - list(APPEND ARCH_FLAGS -march=rv64gc_xtheadvector -mabi=lp64d) + list(APPEND ARCH_FLAGS -march=rv64gc_zfhmin_xtheadvector -mabi=lp64d) elseif (GGML_RV_ZFH) list(APPEND ARCH_FLAGS -march=rv64gcv_zfhmin -mabi=lp64d) else() diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index 460367cca0..93330b43a9 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -9072,6 +9072,9 @@ static void ggml_compute_forward_ssm_scan_f32( } sumf = GGML_F32xt_REDUCE_ONE(sum); + #elif defined(__riscv_v_intrinsic) + // todo: RVV implementation + const int np = 0; #else const int np = (nc & ~(GGML_F32_STEP - 1)); @@ -10023,8 +10026,8 @@ static void ggml_compute_forward_rwkv_wkv7_f32( int64_t h_stride_2d = head_size * head_size; #if defined(GGML_SIMD) - #if defined(__ARM_FEATURE_SVE) - // scalar Route to scalar implementation //TODO: Write SVE code + #if defined(__ARM_FEATURE_SVE) || defined(__riscv_v_intrinsic) + // scalar Route to scalar implementation //TODO: Write SVE code and RVV code for (int64_t t = 0; t < T; t++) { int64_t t_offset = t * t_stride; int64_t state_offset = head_size * C * (t / (T / n_seqs)); diff --git a/ggml/src/ggml-cpu/simd-mappings.h b/ggml/src/ggml-cpu/simd-mappings.h index b4ad68c9fd..f71ce58079 100644 --- a/ggml/src/ggml-cpu/simd-mappings.h +++ b/ggml/src/ggml-cpu/simd-mappings.h @@ -18,6 +18,10 @@ #include #endif +#if defined(__riscv_v_intrinsic) +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -94,24 +98,15 @@ extern "C" { } #elif defined(__riscv) && defined(__riscv_zfhmin) static inline float riscv_compute_fp16_to_fp32(ggml_fp16_t h) { - float f; - __asm__( - "fmv.h.x %[f], %[h]\n\t" - "fcvt.s.h %[f], %[f]" - : [f] "=&f" (f) - : [h] "r" (h) - ); - return f; + _Float16 hf; + memcpy(&hf, &h, sizeof(ggml_fp16_t)); + return hf; } static inline ggml_fp16_t riscv_compute_fp32_to_fp16(float f) { ggml_fp16_t res; - __asm__( - "fcvt.h.s %[f], %[f]\n\t" - "fmv.x.h %[h], %[f]" - : [h] "=&r" (res) - : [f] "f" (f) - ); + _Float16 hf = (_Float16)f; + memcpy(&res, &hf, sizeof(ggml_fp16_t)); return res; } @@ -1170,6 +1165,36 @@ static inline void __lzs_f16cx4_store(ggml_fp16_t * x, float32x4_t v_y) { #define GGML_F16_VEC_MUL GGML_F32x4_MUL #define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE +#elif defined(__riscv_v_intrinsic) + +// compatible with vlen >= 128 + +#define GGML_SIMD + +// F32 + +#define GGML_F32_STEP 16 +#define GGML_F32_EPR 4 + +#define GGML_F32x4 vfloat32m1_t +#define GGML_F32x4_ZERO __riscv_vfmv_v_f_f32m1(0.0f, GGML_F32_EPR) +#define GGML_F32x4_SET1(x) __riscv_vfmv_v_f_f32m1(x, GGML_F32_EPR) +#define GGML_F32x4_LOAD(x) __riscv_vle32_v_f32m1(x, GGML_F32_EPR) +#define GGML_F32x4_STORE(b, v) __riscv_vse32_v_f32m1(b, v, GGML_F32_EPR) +#define GGML_F32x4_FMA(a, b, c) __riscv_vfmacc_vv_f32m1(a, b, c, GGML_F32_EPR) +#define GGML_F32x4_ADD(a, b) __riscv_vfadd_vv_f32m1(a, b, GGML_F32_EPR) +#define GGML_F32x4_MUL(a, b) __riscv_vfmul_vv_f32m1(a, b, GGML_F32_EPR) + +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE + #endif // GGML_F32_ARR / GGML_F16_ARR diff --git a/ggml/src/ggml-cpu/vec.cpp b/ggml/src/ggml-cpu/vec.cpp index 07b377bdd8..d8ec3b81d2 100644 --- a/ggml/src/ggml-cpu/vec.cpp +++ b/ggml/src/ggml-cpu/vec.cpp @@ -84,6 +84,16 @@ void ggml_vec_dot_f32(int n, float * GGML_RESTRICT s, size_t bs, const float * G } // reduce sum1,sum2 to sum1 GGML_F32_VEC_REDUCE(sumf, sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8); + #elif defined(__riscv_v_intrinsic) + vfloat32m1_t vsum = __riscv_vfmv_v_f_f32m1(0.0f, 1); + for (int i = 0, avl; i < n; i += avl) { + avl = __riscv_vsetvl_e32m8(n - i); + vfloat32m8_t ax = __riscv_vle32_v_f32m8(&x[i], avl); + vfloat32m8_t ay = __riscv_vle32_v_f32m8(&y[i], avl); + vfloat32m8_t prod = __riscv_vfmul_vv_f32m8(ax, ay, avl); + vsum = __riscv_vfredusum_vs_f32m8_f32m1(prod, vsum, avl); + } + sumf += __riscv_vfmv_f_s_f32m1_f32(vsum); #else const int np = (n & ~(GGML_F32_STEP - 1)); @@ -197,7 +207,7 @@ void ggml_vec_dot_f16(int n, float * GGML_RESTRICT s, size_t bs, ggml_fp16_t * G ggml_float sumf = 0.0; -#if defined(GGML_SIMD) +#if defined(GGML_SIMD) && !defined(__riscv_v_intrinsic) const int np = (n & ~(GGML_F16_STEP - 1)); GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO }; @@ -325,6 +335,15 @@ ggml_float ggml_vec_soft_max_f32(const int n, float * y, const float * x, float vst1q_f32(y + i, val); sum += (ggml_float)vaddvq_f32(val); } +#elif defined(__riscv_v_intrinsic) + vfloat64m1_t vsum = __riscv_vfmv_v_f_f64m1(0, 1); + for (int avl; i < n; i += avl) { + avl = __riscv_vsetvl_e32m2(n - i); + vfloat32m2_t val = ggml_v_expf_m2(__riscv_vfsub_vf_f32m2(__riscv_vle32_v_f32m2(&x[i], avl), max, avl), avl); + __riscv_vse32_v_f32m2(&y[i], val, avl); + vsum = __riscv_vfwredusum_vs_f32m2_f64m1(val, vsum, avl); + } + return (ggml_float)__riscv_vfmv_f_s_f64m1_f64(vsum); #endif for (; i < n; ++i) { float val = expf(x[i] - max); diff --git a/ggml/src/ggml-cpu/vec.h b/ggml/src/ggml-cpu/vec.h index 2250d93cb0..8ccf340d47 100644 --- a/ggml/src/ggml-cpu/vec.h +++ b/ggml/src/ggml-cpu/vec.h @@ -119,6 +119,14 @@ inline static void ggml_vec_dot_f16_unroll(const int n, const int xs, float * GG } #if defined(GGML_SIMD) +#if defined(__riscv_v_intrinsic) + // todo: RVV impl + for (int i = 0; i < n; ++i) { + for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) { + sumf[j] += (ggml_float)(GGML_CPU_FP16_TO_FP32(x[j][i])*GGML_CPU_FP16_TO_FP32(y[i])); + } + } +#else const int np = (n & ~(GGML_F16_STEP - 1)); GGML_F16_VEC sum[GGML_VEC_DOT_UNROLL][GGML_F16_ARR] = { { GGML_F16_VEC_ZERO } }; @@ -149,6 +157,7 @@ inline static void ggml_vec_dot_f16_unroll(const int n, const int xs, float * GG sumf[j] += (ggml_float)(GGML_CPU_FP16_TO_FP32(x[j][i])*GGML_CPU_FP16_TO_FP32(y[i])); } } +#endif #else for (int i = 0; i < n; ++i) { for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) { @@ -243,6 +252,14 @@ inline static void ggml_vec_mad_f32(const int n, float * GGML_RESTRICT y, const svst1_f32(pg, y + np2, ay1); } + #elif defined(__riscv_v_intrinsic) + for (int i = 0, avl; i < n; i += avl) { + avl = __riscv_vsetvl_e32m8(n - i); + vfloat32m8_t ax = __riscv_vle32_v_f32m8(&x[i], avl); + vfloat32m8_t ay = __riscv_vle32_v_f32m8(&y[i], avl); + vfloat32m8_t ny = __riscv_vfmadd_vf_f32m8(ax, v, ay, avl); + __riscv_vse32_v_f32m8(&y[i], ny, avl); + } #else const int np = (n & ~(GGML_F32_STEP - 1)); @@ -276,6 +293,13 @@ inline static void ggml_vec_mad_f32(const int n, float * GGML_RESTRICT y, const inline static void ggml_vec_mad_f16(const int n, ggml_fp16_t * GGML_RESTRICT y, const ggml_fp16_t * GGML_RESTRICT x, const float v) { #if defined(GGML_SIMD) +#if defined(__riscv_v_intrinsic) + // todo: RVV impl + // scalar + for (int i = 0; i < n; ++i) { + y[i] = GGML_CPU_FP32_TO_FP16(GGML_CPU_FP16_TO_FP32(y[i]) + GGML_CPU_FP16_TO_FP32(x[i])*v); + } +#else const int np = (n & ~(GGML_F16_STEP - 1)); GGML_F16_VEC vx = GGML_F16_VEC_SET1(v); @@ -297,6 +321,7 @@ inline static void ggml_vec_mad_f16(const int n, ggml_fp16_t * GGML_RESTRICT y, for (int i = np; i < n; ++i) { y[i] = GGML_CPU_FP32_TO_FP16(GGML_CPU_FP16_TO_FP32(y[i]) + GGML_CPU_FP16_TO_FP32(x[i])*v); } +#endif #else // scalar for (int i = 0; i < n; ++i) { @@ -324,6 +349,16 @@ inline static void ggml_vec_mad_f32_unroll(const int n, const int xs, const int y[i] += x[k][i]*v[k][0]; } } + #elif defined(__riscv_v_intrinsic) + for (int i = 0, avl; i < n; i += avl) { + avl = __riscv_vsetvl_e32m8(n - i); + vfloat32m8_t ay = __riscv_vle32_v_f32m8(&y[i], avl); + for (int k = 0; k < GGML_VEC_MAD_UNROLL; k++) { + vfloat32m8_t ax = __riscv_vle32_v_f32m8(&x[k][i], avl); + ay = __riscv_vfmadd_vf_f32m8(ax, v[k][0], ay, avl); + } + __riscv_vse32_v_f32m8(&y[i], ay, avl); + } #else const int np = (n & ~(GGML_F32_STEP - 1)); @@ -375,6 +410,14 @@ inline static void ggml_vec_mad1_f32(const int n, float * y, const float * x, co for (int i = 0; i < n; ++i) { y[i] = x[i]*s + b; } + #elif defined(__riscv_v_intrinsic) + for (int i = 0, avl; i < n; i += avl) { + avl = __riscv_vsetvl_e32m8(n - i); + vfloat32m8_t ax = __riscv_vle32_v_f32m8(&x[i], avl); + vfloat32m8_t vb = __riscv_vfmv_v_f_f32m8(b, avl); + vfloat32m8_t ny = __riscv_vfmadd_vf_f32m8(ax, s, vb, avl); + __riscv_vse32_v_f32m8(&y[i], ny, avl); + } #else const int np = (n & ~(GGML_F32_STEP - 1)); @@ -436,6 +479,13 @@ inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { ay1 = svmul_f32_m(pg, ay1, vx); svst1_f32(pg, y + np, ay1); } + #elif defined(__riscv_v_intrinsic) + for (int i = 0, avl; i < n; i += avl) { + avl = __riscv_vsetvl_e32m8(n - i); + vfloat32m8_t ay = __riscv_vle32_v_f32m8(&y[i], avl); + vfloat32m8_t ny = __riscv_vfmul_vf_f32m8(ay, v, avl); + __riscv_vse32_v_f32m8(&y[i], ny, avl); + } #else const int np = (n & ~(GGML_F32_STEP - 1)); @@ -467,6 +517,13 @@ inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { inline static void ggml_vec_scale_f16(const int n, ggml_fp16_t * y, const float v) { #if defined(GGML_SIMD) +#if defined(__riscv_v_intrinsic) + // todo: RVV impl + // scalar + for (int i = 0; i < n; ++i) { + y[i] = GGML_CPU_FP32_TO_FP16(GGML_CPU_FP16_TO_FP32(y[i])*v); + } +#else const int np = (n & ~(GGML_F16_STEP - 1)); GGML_F16_VEC vx = GGML_F16_VEC_SET1(v); @@ -486,6 +543,7 @@ inline static void ggml_vec_scale_f16(const int n, ggml_fp16_t * y, const float for (int i = np; i < n; ++i) { y[i] = GGML_CPU_FP32_TO_FP16(GGML_CPU_FP16_TO_FP32(y[i])*v); } +#endif #else // scalar for (int i = 0; i < n; ++i) { @@ -928,7 +986,51 @@ inline static __m128 ggml_v_silu(__m128 x) { return _mm_div_ps(x, one_plus_exp_neg_x); } -#endif // __ARM_NEON / __AVX2__ / __SSE2__ +#elif defined(__riscv_v_intrinsic) + +// adapted from arm limited optimized routine +// the maximum error is 1.45358 plus 0.5 ulps +// numbers above 88.38 will flush to infinity +// numbers beneath -103.97 will flush to zero +inline static vfloat32m2_t ggml_v_expf_m2(vfloat32m2_t x, int vl) { + const vfloat32m2_t r = __riscv_vfmv_v_f_f32m2(0x1.8p23f, vl); +#ifdef __riscv_xtheadvector + // workaround for compiler bug (gcc 14.3.0: Error: unrecognized opcode `th.vmv1r.v v2,v4') + vfloat32m2_t z = __riscv_vfadd_vf_f32m2(r, 0.0f, vl); + z = __riscv_vfmacc_vf_f32m2(z, 0x1.715476p+0f, x, vl); +#else + const vfloat32m2_t z = __riscv_vfmacc_vf_f32m2(r, 0x1.715476p+0f, x, vl); +#endif + const vfloat32m2_t n = __riscv_vfsub_vv_f32m2(z, r, vl); + const vfloat32m2_t b = __riscv_vfnmsac_vf_f32m2(__riscv_vfnmsac_vf_f32m2(x, 0x1.62e4p-1f, n, vl), + 0x1.7f7d1cp-20f, n, vl); + const vuint32m2_t e = __riscv_vsll_vx_u32m2(__riscv_vreinterpret_v_f32m2_u32m2(z), 23, vl); + const vfloat32m2_t k = __riscv_vreinterpret_v_u32m2_f32m2(__riscv_vadd_vx_u32m2(e, 0x3f800000, vl)); // 1.0f + const vbool16_t c = __riscv_vmfgt_vf_f32m2_b16(__riscv_vfabs_v_f32m2(n, vl), 126.0f, vl); + const vfloat32m2_t u = __riscv_vfmul_vv_f32m2(b, b, vl); + const vfloat32m2_t j = __riscv_vfmacc_vv_f32m2( + __riscv_vfmul_vf_f32m2(b, 0x1.ffffecp-1f, vl), + __riscv_vfmacc_vv_f32m2( + __riscv_vfmacc_vf_f32m2(__riscv_vfmv_v_f_f32m2(0x1.fffdb6p-2f, vl), 0x1.555e66p-3f, b, vl), + __riscv_vfmacc_vf_f32m2(__riscv_vfmv_v_f_f32m2(0x1.573e2ep-5f, vl), 0x1.0e4020p-7f, b, vl), + u, vl), u, vl); + if (!__riscv_vcpop_m_b16(c, vl)) + return __riscv_vfmacc_vv_f32m2(k, j, k, vl); + const vbool16_t dm = __riscv_vmfle_vf_f32m2_b16(n, 0.0f, vl); + const vuint32m2_t d = __riscv_vmerge_vxm_u32m2(__riscv_vmv_v_x_u32m2(0, vl), 0x82000000, dm, vl); + const vfloat32m2_t s1 = __riscv_vreinterpret_v_u32m2_f32m2(__riscv_vadd_vx_u32m2(d, 0x7f000000, vl)); + const vfloat32m2_t s2 = __riscv_vreinterpret_v_u32m2_f32m2(__riscv_vsub_vv_u32m2(e, d, vl)); + const vfloat32m2_t r1 = __riscv_vmerge_vvm_f32m2( + __riscv_vfmacc_vv_f32m2(k, k, j, vl), + __riscv_vfmul_vv_f32m2(__riscv_vfmacc_vv_f32m2(s2, s2, j, vl), s1, vl), + c, vl); + return __riscv_vmerge_vvm_f32m2( + r1, __riscv_vfmul_vv_f32m2(s1, s1, vl), + __riscv_vmfgt_vf_f32m2_b16(__riscv_vfabs_v_f32m2(n, vl), 192.0f, vl), + vl); +} + +#endif // __ARM_NEON / __AVX2__ / __SSE2__ / __riscv_v_intrinsic inline static void ggml_vec_silu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { for (int i = 0; i < n; ++i) { From 1e7489745a74996fc36e8fd05b73aa16bc184e0c Mon Sep 17 00:00:00 2001 From: Chenguang Li <757486878@qq.com> Date: Wed, 27 Aug 2025 17:21:41 +0800 Subject: [PATCH 129/174] CANN: refactor mask handling and improve performance in FA (#15561) * CANN(flash-attn): refactor mask handling and improve performance 1. Refactored the mask computation in Flash Attention, unified the logic without separating prefill and decode. 2. Optimized performance in non-alibi scenarios by reducing one repeat operation. 3. Updated operator management to explicitly mark unsupported cases on 310P devices and when dim is not divisible by 16. Signed-off-by: noemotiovon <757486878@qq.com> * [CANN]: fix review Signed-off-by: noemotiovon <757486878@qq.com> * [CANN]: Optimization FA BNSD to BSND Signed-off-by: noemotiovon <757486878@qq.com> --------- Signed-off-by: noemotiovon <757486878@qq.com> --- ggml/src/ggml-cann/aclnn_ops.cpp | 173 ++++++++++++++++--------------- ggml/src/ggml-cann/ggml-cann.cpp | 12 ++- 2 files changed, 97 insertions(+), 88 deletions(-) diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index bc33b99d96..c42871c575 100755 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -1427,17 +1427,17 @@ static void aclnn_pow_tensor_tensor(ggml_backend_cann_context& ctx, static void aclnn_get_slope_inner(ggml_backend_cann_context& ctx, void* slope_buffer, float m, int64_t size, float start, float stop, float step){ int64_t ne[] = {size}; - size_t nb[] = {sizeof(float)}; + size_t nb[] = {sizeof(uint16_t)}; - ggml_cann_pool_alloc arange_allocator(ctx.pool(), size * sizeof(float)); + ggml_cann_pool_alloc arange_allocator(ctx.pool(), size * sizeof(uint16_t)); void* arange_buffer = arange_allocator.get(); aclTensor* arange_tensor = ggml_cann_create_tensor( - arange_buffer, ACL_FLOAT, sizeof(float), ne, nb, 1); + arange_buffer, ACL_FLOAT16, sizeof(uint16_t), ne, nb, 1); aclnn_arange(ctx, arange_tensor, start, stop, step, size); aclTensor* slope_tensor = ggml_cann_create_tensor( - slope_buffer, ACL_FLOAT, sizeof(float), ne, nb, 1); + slope_buffer, ACL_FLOAT16, sizeof(uint16_t), ne, nb, 1); aclScalar* sc = aclCreateScalar(&m, aclDataType::ACL_FLOAT); @@ -3180,11 +3180,38 @@ void ggml_cann_mul_mat_id(ggml_backend_cann_context& ctx, ggml_tensor* dst) { void ggml_cann_flash_attn_ext(ggml_backend_cann_context& ctx, ggml_tensor* dst){ - ggml_tensor* src0 = dst->src[0]; // q, fp32 - ggml_tensor* src1 = dst->src[1]; // k, fp16 - ggml_tensor* src2 = dst->src[2]; // v, fp16 + ggml_tensor* src0 = dst->src[0]; // q, fp32 | B, N, S, D (uncont) -> B, S, N, D (cont) + ggml_tensor* src1 = dst->src[1]; // k, fp16 | B, N, S, D (uncont) -> B, S, N, D (cont) + ggml_tensor* src2 = dst->src[2]; // v, fp16 | B, N, S, D (uncont) -> B, S, N, D (cont) ggml_tensor* src3 = dst->src[3]; // mask, fp16 + // B, N, S, D (uncont) -> B, S, N, D (cont) + int64_t src0_bsnd_ne[GGML_MAX_DIMS]; + memcpy(src0_bsnd_ne, src0->ne, GGML_MAX_DIMS * sizeof(int64_t)); + size_t src0_bsnd_nb[GGML_MAX_DIMS]; + memcpy(src0_bsnd_nb, src0->nb, GGML_MAX_DIMS * sizeof(size_t)); + int64_t src1_bsnd_ne[GGML_MAX_DIMS]; + memcpy(src1_bsnd_ne, src1->ne, GGML_MAX_DIMS * sizeof(int64_t)); + size_t src1_bsnd_nb[GGML_MAX_DIMS]; + memcpy(src1_bsnd_nb, src1->nb, GGML_MAX_DIMS * sizeof(size_t)); + int64_t src2_bsnd_ne[GGML_MAX_DIMS]; + memcpy(src2_bsnd_ne, src2->ne, GGML_MAX_DIMS * sizeof(int64_t)); + size_t src2_bsnd_nb[GGML_MAX_DIMS]; + memcpy(src2_bsnd_nb, src2->nb, GGML_MAX_DIMS * sizeof(size_t)); + + auto transpose12 = [](int64_t* ne, size_t* nb) { + int64_t ne_tmp = ne[1]; + size_t nb_tmp = nb[1]; + ne[1] = ne[2]; + nb[1] = nb[2]; + ne[2] = ne_tmp; + nb[2] = nb_tmp; + }; + + transpose12(src0_bsnd_ne, src0_bsnd_nb); + transpose12(src1_bsnd_ne, src1_bsnd_nb); + transpose12(src2_bsnd_ne, src2_bsnd_nb); + float maxBias = 0.0f; float scaleValue = 1.0f; float logitSoftcap = 0.0f; @@ -3206,11 +3233,12 @@ void ggml_cann_flash_attn_ext(ggml_backend_cann_context& ctx, ggml_tensor* dst){ void* src0_f16_buffer = nullptr; if(ggml_cann_type_mapping(src0->type) != faDataType){ - aclTensor* acl_src0_f32_tensor = ggml_cann_create_tensor(src0); + aclTensor* acl_src0_f32_tensor = ggml_cann_create_tensor(src0, src0_bsnd_ne, + src0_bsnd_nb, GGML_MAX_DIMS); src0_f16_buffer = src0_f16_allocator.alloc( ggml_nelements(src0) * faElemSize); - int64_t* src0_f16_ne = src0->ne; + int64_t* src0_f16_ne = src0_bsnd_ne; size_t src0_f16_nb[GGML_MAX_DIMS]; src0_f16_nb[0] = sizeof(uint16_t); for(int i = 1; i < GGML_MAX_DIMS; ++i){ @@ -3224,20 +3252,23 @@ void ggml_cann_flash_attn_ext(ggml_backend_cann_context& ctx, ggml_tensor* dst){ aclnn_cast(ctx, acl_src0_f32_tensor, acl_src0_f16_tensor, faDataType); ggml_cann_release_resources(ctx, acl_src0_f32_tensor); }else{ - acl_src0_f16_tensor = ggml_cann_create_tensor(src0); + acl_src0_f16_tensor = ggml_cann_create_tensor(src0, src0_bsnd_ne, + src0_bsnd_nb, GGML_MAX_DIMS); } // Step 2: create the acl tensors for src1 (Key), src2 (Value), // and the direct output from FusedInferAttention - acl_src1_f16_tensor = ggml_cann_create_tensor(src1); - acl_src2_f16_tensor = ggml_cann_create_tensor(src2); + acl_src1_f16_tensor = ggml_cann_create_tensor(src1, src1_bsnd_ne, + src1_bsnd_nb, GGML_MAX_DIMS); + acl_src2_f16_tensor = ggml_cann_create_tensor(src2, src2_bsnd_ne, + src2_bsnd_nb, GGML_MAX_DIMS); ggml_cann_pool_alloc out_f16_allocator(ctx.pool()); void* out_f16_buffer = out_f16_allocator.alloc( ggml_nelements(dst) * faElemSize); - int64_t* out_f16_ne = src0->ne; + int64_t* out_f16_ne = src0_bsnd_ne; size_t out_f16_nb[GGML_MAX_DIMS]; out_f16_nb[0] = faElemSize; for(int i = 1; i < GGML_MAX_DIMS; ++i){ @@ -3251,88 +3282,81 @@ void ggml_cann_flash_attn_ext(ggml_backend_cann_context& ctx, ggml_tensor* dst){ // Step 3: create the PSEShift tensor if needed // this tensor is considered as mask (f16) in the llama.cpp - aclTensor* bcast_pse_tensor = nullptr; - int64_t bcast_pse_ne[GGML_MAX_DIMS]; - size_t bcast_pse_nb[GGML_MAX_DIMS]; ggml_cann_pool_alloc bcast_pse_allocator(ctx.pool()); - void* bcast_pse_buffer = nullptr; - if(src3 != nullptr){ - bcast_pse_buffer = bcast_pse_allocator.alloc( - ggml_nelements(src3) * src0->ne[2] * sizeof(uint16_t)); + // Construct the truncated pse tensor (common for prefill/decode) + int64_t trunc_pse_ne[GGML_MAX_DIMS] = { + src3->ne[0], // D + src0->ne[1], // S (number of Q tokens) + src3->ne[2], // mask N + src3->ne[3] // B + }; + size_t* trunc_pse_nb = src3->nb; - if(src0->ne[1] > 1){ - // Case 1: broadcast pse for prefill stage with multiple head - aclTensor* acl_mask_f16_tensor = ggml_cann_create_tensor(src3); - bcast_pse_ne[0] = src3->ne[0]; - bcast_pse_ne[1] = src3->ne[1]; - bcast_pse_ne[2] = src0->ne[2]; - bcast_pse_ne[3] = src3->ne[3]; + aclTensor* acl_mask_f16_trunc_tensor = ggml_cann_create_tensor( + src3->data, ACL_FLOAT16, sizeof(uint16_t), + trunc_pse_ne, trunc_pse_nb, GGML_MAX_DIMS + ); + int64_t bcast_pse_ne[GGML_MAX_DIMS]; + size_t bcast_pse_nb[GGML_MAX_DIMS]; + bcast_pse_ne[0] = src3->ne[0]; // D + bcast_pse_ne[1] = src0->ne[1]; // S + bcast_pse_ne[2] = src0->ne[2]; // N (num_heads) + bcast_pse_ne[3] = src3->ne[3]; // B + if (maxBias == 0.0f) { + // When maxBias == 0.0f, use nb = 0 reduce once repeat (Qwen2) + // Construct the bcast tensor (simulate repeat on the head dimension using stride=0) bcast_pse_nb[0] = sizeof(uint16_t); - for(int i = 1; i < GGML_MAX_DIMS; ++i){ - bcast_pse_nb[i] = bcast_pse_nb[i - 1] * bcast_pse_ne[i - 1]; - } + bcast_pse_nb[1] = bcast_pse_nb[0] * bcast_pse_ne[0]; + bcast_pse_nb[2] = 0; // <---- the head dimension shares the same data + bcast_pse_nb[3] = src3->nb[3]; bcast_pse_tensor = ggml_cann_create_tensor( - bcast_pse_buffer, ACL_FLOAT16, sizeof(uint16_t), - bcast_pse_ne, bcast_pse_nb, GGML_MAX_DIMS); - - int64_t repeats[] = {1, src0->ne[2], 1, 1}; - aclnn_repeat(ctx, acl_mask_f16_tensor, bcast_pse_tensor, repeats); - - ggml_cann_release_resources(ctx, acl_mask_f16_tensor); - }else{ - // Case 2: trunc the first row and broadcast pse for decode stage with multiple head - int64_t trunc_pse_ne[GGML_MAX_DIMS] = {src3->ne[0], src0->ne[1], src3->ne[2], src3->ne[3]}; - size_t* trunc_pse_nb = src3->nb; - - aclTensor* acl_mask_f16_trunc_tensor = ggml_cann_create_tensor( src3->data, ACL_FLOAT16, sizeof(uint16_t), - trunc_pse_ne, trunc_pse_nb, GGML_MAX_DIMS); - - bcast_pse_ne[0] = src3->ne[0]; - bcast_pse_ne[1] = src0->ne[1]; - bcast_pse_ne[2] = src0->ne[2]; - bcast_pse_ne[3] = src3->ne[3]; + bcast_pse_ne, bcast_pse_nb, GGML_MAX_DIMS + ); + ggml_cann_release_resources(ctx, acl_mask_f16_trunc_tensor); + } else { bcast_pse_nb[0] = sizeof(uint16_t); - for(int i = 1; i < GGML_MAX_DIMS; ++i){ + for (int i = 1; i < GGML_MAX_DIMS; i++) { bcast_pse_nb[i] = bcast_pse_nb[i - 1] * bcast_pse_ne[i - 1]; } + void* bcast_pse_buffer = bcast_pse_allocator.alloc( + ggml_nelements(src3) * src0->ne[2] * sizeof(uint16_t) + ); + bcast_pse_tensor = ggml_cann_create_tensor( bcast_pse_buffer, ACL_FLOAT16, sizeof(uint16_t), - bcast_pse_ne, bcast_pse_nb, GGML_MAX_DIMS); + bcast_pse_ne, bcast_pse_nb, GGML_MAX_DIMS + ); int64_t repeats[] = {1, src0->ne[2], 1, 1}; aclnn_repeat(ctx, acl_mask_f16_trunc_tensor, bcast_pse_tensor, repeats); - ggml_cann_release_resources(ctx, acl_mask_f16_trunc_tensor); - } - - // Compute the slope if needed. Derived from ggml_cann_softmax(). - if(maxBias != 0.0f){ // alibi + // Compute the slope if needed. Derived from ggml_cann_softmax(). const int64_t n_heads = src0->ne[2]; - ggml_cann_pool_alloc slope_allocator(ctx.pool(), n_heads * sizeof(float)); + ggml_cann_pool_alloc slope_allocator(ctx.pool(), n_heads * sizeof(uint16_t)); void* slope_buffer = slope_allocator.get(); aclnn_get_slope(ctx, n_heads, slope_buffer, maxBias); int64_t slope_ne[] = {1, 1, n_heads, 1}; size_t slope_nb[GGML_MAX_DIMS]; - slope_nb[0] = sizeof(float); + slope_nb[0] = sizeof(uint16_t); for(int i = 1;ine[0]); // 1/sqrt(d) int64_t preTokens = 65535; int64_t nextTokens = 65535; - char layout[5] = {'B', 'N', 'S', 'D', 0}; + char layout[5] = {'B', 'S', 'N', 'D', 0}; int64_t sparseMode = 0; int64_t innerPrecise = (src0->ne[1] == 1) ? 0 : 2; int64_t blockSize = 0; @@ -3386,32 +3410,9 @@ void ggml_cann_flash_attn_ext(ggml_backend_cann_context& ctx, ggml_tensor* dst){ ); // Step 6: post-processing, permute and cast to f32 - - int64_t new_dim[] = {0, 2, 1, 3}; aclTensor* acl_dst_tensor = ggml_cann_create_tensor(dst); - - if(ggml_cann_type_mapping(dst->type) != faDataType){ - ggml_cann_pool_alloc perm_out_f16_allocator(ctx.pool()); - perm_out_f16_allocator.alloc(ggml_nelements(dst) * faElemSize); - void* perm_out_f16_buffer = perm_out_f16_allocator.get(); - - int64_t* perm_out_f16_ne = dst->ne; - size_t perm_out_f16_nb[GGML_MAX_DIMS]; - perm_out_f16_nb[0] = faElemSize; - for(int i = 1; i < GGML_MAX_DIMS; ++i){ - perm_out_f16_nb[i] = perm_out_f16_nb[i - 1] * perm_out_f16_ne[i - 1]; - } - aclTensor* acl_perm_out_f16_tensor = ggml_cann_create_tensor( - perm_out_f16_buffer, faDataType, faElemSize, - perm_out_f16_ne, perm_out_f16_nb, GGML_MAX_DIMS); - aclnn_permute(ctx, acl_dst_f16_tensor, acl_perm_out_f16_tensor, new_dim, GGML_MAX_DIMS); - aclnn_cast(ctx, - acl_perm_out_f16_tensor, acl_dst_tensor, ggml_cann_type_mapping(dst->type)); - ggml_cann_release_resources(ctx, acl_perm_out_f16_tensor); - }else{ - // only need to permute - aclnn_permute(ctx, acl_dst_f16_tensor, acl_dst_tensor, new_dim, GGML_MAX_DIMS); - } + // TODO: when dst is fp16, don't need cast + aclnn_cast(ctx, acl_dst_f16_tensor, acl_dst_tensor, ggml_cann_type_mapping(dst->type)); ggml_cann_release_resources(ctx, acl_src0_f16_tensor, acl_src1_f16_tensor, acl_src2_f16_tensor, diff --git a/ggml/src/ggml-cann/ggml-cann.cpp b/ggml/src/ggml-cann/ggml-cann.cpp index cb8af42ebf..8121542561 100755 --- a/ggml/src/ggml-cann/ggml-cann.cpp +++ b/ggml/src/ggml-cann/ggml-cann.cpp @@ -2336,7 +2336,7 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, case GGML_TYPE_Q8_0: case GGML_TYPE_Q4_0: #ifdef ASCEND_310P - // Q4 && Q8 per group is not suppor on 310p device + // Q4 && Q8 per group is not support on 310p device return false; #endif // only support contiguous for quantized types. @@ -2354,7 +2354,7 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, case GGML_TYPE_Q8_0: case GGML_TYPE_Q4_0: #ifdef ASCEND_310P - // Q4 && Q8 per group is not suppor on 310p device + // Q4 && Q8 per group is not support on 310p device return false; #endif // only support contiguous for quantized types. @@ -2505,6 +2505,10 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, } return true; case GGML_OP_FLASH_ATTN_EXT:{ +#ifdef ASCEND_310P + // FA not support on 310p device + return false; +#endif // derived from [ggml-cuda.cu] if(op->src[1]->type != GGML_TYPE_F16 || op->src[2]->type != GGML_TYPE_F16){ return false; @@ -2530,6 +2534,10 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, // DeepSeek MLA return false; } + if (op->src[0]->ne[0] % 16 != 0) { + // TODO: padding to support + return false; + } float logitSoftcap = 0.0f; memcpy(&logitSoftcap, (float*)op->op_params + 2, sizeof(float)); if(logitSoftcap != 0.0f) { From 1bded5a3b3376b2aa3ba2f11ade5910c550f354b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 27 Aug 2025 13:55:12 +0300 Subject: [PATCH 130/174] kv-cache : better estimate of n_kv for multi-sequence batches (#15610) ggml-ci --- src/llama-kv-cache.cpp | 25 ++++++++++++------------- src/llama-kv-cache.h | 6 +++--- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/llama-kv-cache.cpp b/src/llama-kv-cache.cpp index d7ab56ccd9..920c1d0dbd 100644 --- a/src/llama-kv-cache.cpp +++ b/src/llama-kv-cache.cpp @@ -771,8 +771,8 @@ llama_kv_cache::slot_info llama_kv_cache::find_slot(const llama_ubatch & ubatch, GGML_ASSERT(ubatch.seq_id [s*n_tokens][0] == seq_id); } - res.s0 = std::min(res.s0, seq_to_stream[seq_id]); - res.s1 = std::max(res.s1, seq_to_stream[seq_id]); + res.s0 = std::min(res.s0, seq_to_stream[seq_id]); + res.s1 = std::max(res.s1, seq_to_stream[seq_id]); res.strm[s] = seq_to_stream[seq_id]; res.idxs[s].reserve(n_tokens); @@ -964,11 +964,11 @@ bool llama_kv_cache::get_has_shift() const { return result; } -uint32_t llama_kv_cache::get_n_kv() const { +uint32_t llama_kv_cache::get_n_kv(const slot_info & sinfo) const { uint32_t result = 0; - for (uint32_t s = 0; s < n_stream; ++s) { - const auto & cells = v_cells[s]; + for (uint32_t s = 0; s < sinfo.n_stream(); ++s) { + const auto & cells = v_cells[sinfo.strm[s]]; result = std::max(std::min(cells.size(), std::max(n_pad, GGML_PAD(cells.used_max_p1(), n_pad))), result); } @@ -1017,18 +1017,18 @@ ggml_tensor * llama_kv_cache::get_v(ggml_context * ctx, int32_t il, uint32_t n_k // note: v->nb[1] <= v->nb[2] return ggml_view_4d(ctx, v, hparams.n_embd_head_v, hparams.n_head_kv(il), n_kv, ns, - ggml_row_size(v->type, hparams.n_embd_head_v), // v->nb[1] - ggml_row_size(v->type, n_embd_v_gqa), // v->nb[2] - ggml_row_size(v->type, n_embd_v_gqa*kv_size), // v->nb[3] + ggml_row_size(v->type, hparams.n_embd_head_v), // v->nb[1] + ggml_row_size(v->type, n_embd_v_gqa), // v->nb[2] + ggml_row_size(v->type, n_embd_v_gqa*kv_size), // v->nb[3] ggml_row_size(v->type, n_embd_v_gqa*kv_size)*sinfo.s0); } // note: v->nb[1] > v->nb[2] return ggml_view_4d(ctx, v, n_kv, hparams.n_head_kv(il), hparams.n_embd_head_v, ns, - ggml_row_size(v->type, kv_size*hparams.n_embd_head_v), // v->nb[1] - ggml_row_size(v->type, kv_size), // v->nb[2] - ggml_row_size(v->type, kv_size*n_embd_v_gqa), // v->nb[3] + ggml_row_size(v->type, kv_size*hparams.n_embd_head_v), // v->nb[1] + ggml_row_size(v->type, kv_size), // v->nb[2] + ggml_row_size(v->type, kv_size*n_embd_v_gqa), // v->nb[3] ggml_row_size(v->type, kv_size*n_embd_v_gqa)*sinfo.s0); } @@ -1985,8 +1985,7 @@ bool llama_kv_cache_context::apply() { } kv->apply_ubatch(sinfos[i_cur], ubatches[i_cur]); - - n_kv = kv->get_n_kv(); + n_kv = kv->get_n_kv(sinfos[i_cur]); return true; } diff --git a/src/llama-kv-cache.h b/src/llama-kv-cache.h index 76a5cb1e28..3ca82917d3 100644 --- a/src/llama-kv-cache.h +++ b/src/llama-kv-cache.h @@ -38,8 +38,8 @@ public: using idx_vec_t = std::vector; // number of streams: ns = s1 - s0 + 1 - llama_seq_id s0; - llama_seq_id s1; + uint32_t s0; + uint32_t s1; std::vector strm; // [ns] std::vector idxs; // [ns] @@ -139,7 +139,7 @@ public: // graph_build API // - uint32_t get_n_kv() const; + uint32_t get_n_kv(const slot_info & sinfo) const; // TODO: temporary bool get_supports_set_rows() const; From 47373271f971aa5a0a6462b286f4a7b5bd4ba644 Mon Sep 17 00:00:00 2001 From: uvos Date: Wed, 27 Aug 2025 13:58:54 +0200 Subject: [PATCH 131/174] HIP: Enable support for ggml_backend_cuda_register_host_buffer (#15615) --- ggml/src/ggml-cuda/ggml-cuda.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 4494883415..3a50527248 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -3106,7 +3106,7 @@ bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size) { return false; } -#if CUDART_VERSION >= 11010 || defined(GGML_USE_MUSA) +#if CUDART_VERSION >= 11010 || defined(GGML_USE_MUSA) || defined(GGML_USE_HIP) cudaError_t err = cudaHostRegister(buffer, size, cudaHostRegisterPortable | cudaHostRegisterReadOnly); if (err != cudaSuccess) { // clear the error From da54f9f1a2db07aaae390024ac466e7867685d94 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 27 Aug 2025 15:48:07 +0300 Subject: [PATCH 132/174] presets : add qwen3-30B-a3b FIM (#15616) --- common/arg.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/common/arg.cpp b/common/arg.cpp index 1ae3fdbf4a..d82f55890d 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -3538,6 +3538,22 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } ).set_examples({LLAMA_EXAMPLE_SERVER})); + add_opt(common_arg( + {"--fim-qwen-30b-default"}, + string_format("use default Qwen 3 Coder 30B A3B Instruct (note: can download weights from the internet)"), + [](common_params & params) { + params.model.hf_repo = "ggml-org/Qwen3-Coder-30B-A3B-Instruct-Q8_0-GGUF"; + params.model.hf_file = "qwen3-coder-30b-a3b-instruct-q8_0.gguf"; + params.port = 8012; + params.n_gpu_layers = 99; + params.flash_attn = true; + params.n_ubatch = 1024; + params.n_batch = 1024; + params.n_ctx = 0; + params.n_cache_reuse = 256; + } + ).set_examples({LLAMA_EXAMPLE_SERVER})); + add_opt(common_arg( { "--diffusion-steps" }, "N", string_format("number of diffusion steps (default: %d)", params.diffusion.steps), From fbef0fad7a7c765939f6c9e322fa05cd52cf0c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Wed, 27 Aug 2025 20:58:09 +0200 Subject: [PATCH 133/174] server: higher timeout for tests (#15621) --- tools/server/tests/utils.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/server/tests/utils.py b/tools/server/tests/utils.py index 5f42bcae61..f55a539471 100644 --- a/tools/server/tests/utils.py +++ b/tools/server/tests/utils.py @@ -26,10 +26,7 @@ from re import RegexFlag import wget -DEFAULT_HTTP_TIMEOUT = 12 - -if "LLAMA_SANITIZE" in os.environ or "GITHUB_ACTION" in os.environ: - DEFAULT_HTTP_TIMEOUT = 30 +DEFAULT_HTTP_TIMEOUT = 30 class ServerResponse: From 5a0e3ef6f00c658fbae53797f02d5a360ebf8fec Mon Sep 17 00:00:00 2001 From: matiaslin <45382001+matiaslin@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:32:36 -0700 Subject: [PATCH 134/174] cuda: Add cublasLt_static linking when GGML_STATIC is enabled (#15622) Prior to this change, we faced undefined cublasLt references when attempting to compile 'llama-cli' with GGML_STATIC=ON on Linux. We add linking with CUDA::cublasLt_static when CUDA version is greater than 10.1. --- ggml/src/ggml-cuda/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/CMakeLists.txt b/ggml/src/ggml-cuda/CMakeLists.txt index ea824965aa..d3dfc7807d 100644 --- a/ggml/src/ggml-cuda/CMakeLists.txt +++ b/ggml/src/ggml-cuda/CMakeLists.txt @@ -94,7 +94,11 @@ if (CUDAToolkit_FOUND) # As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library target_link_libraries(ggml-cuda PRIVATE CUDA::cudart_static CUDA::cublas) else () - target_link_libraries(ggml-cuda PRIVATE CUDA::cudart_static CUDA::cublas_static) + if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL "10.1") + target_link_libraries(ggml-cuda PRIVATE CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static) + else() + target_link_libraries(ggml-cuda PRIVATE CUDA::cudart_static CUDA::cublas_static) + endif() endif() else() target_link_libraries(ggml-cuda PRIVATE CUDA::cudart CUDA::cublas) From 46d9caa27a0281150e8cf082308c0f9e7576ebe5 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 28 Aug 2025 09:26:48 +0200 Subject: [PATCH 135/174] model-conversion : add mmproj conversion target (#15628) This commit adds a new target to the Makefile for converting models that are multimodal. This target will convert the original model and in addition also create the mmproj GGUF model. The motivation for this change is that for models that are multimodal, for example those that contain a vision encoders, we will often want to upload both the quantized model and the vision encoder model to HuggingFace. Example usage: ```console $ make causal-convert-mm-model MODEL_PATH=~/work/ai/models/gemma-3-4b-it-qat-q4_0-unquantized/ ... The environment variable CONVERTED_MODEL can be set to this path using: export CONVERTED_MODEL=/home/danbev/work/ai/llama.cpp/models/gemma-3-4b-it-qat-q4_0-unquantized.gguf The mmproj model was created in /home/danbev/work/ai/llama.cpp/models/mmproj-gemma-3-4b-it-qat-q4_0-unquantized.gguf ``` The converted original model can then be quantized, and after that both the quantized model and the mmproj file can then be uploaded to HuggingFace. Refs: https://huggingface.co/ggml-org/gemma-3-4b-it-qat-GGUF/tree/main --- examples/model-conversion/Makefile | 14 ++++++++ .../scripts/causal/convert-model.sh | 34 ++++++++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/examples/model-conversion/Makefile b/examples/model-conversion/Makefile index 37982495b2..03b928afda 100644 --- a/examples/model-conversion/Makefile +++ b/examples/model-conversion/Makefile @@ -37,6 +37,20 @@ causal-convert-model: METADATA_OVERRIDE="$(METADATA_OVERRIDE)" \ ./scripts/causal/convert-model.sh +causal-convert-mm-model-bf16: OUTTYPE=bf16 +causal-convert-mm-model-bf16: MM_OUTTYPE=f16 +causal-convert-mm-model-bf16: causal-convert-mm-model + +causal-convert-mm-model: + $(call validate_model_path,causal-convert-mm-model) + @MODEL_NAME="$(MODEL_NAME)" OUTTYPE="$(OUTTYPE)" MODEL_PATH="$(MODEL_PATH)" \ + METADATA_OVERRIDE="$(METADATA_OVERRIDE)" \ + ./scripts/causal/convert-model.sh + + @MODEL_NAME="$(MODEL_NAME)" OUTTYPE="$(MM_OUTTYPE)" MODEL_PATH="$(MODEL_PATH)" \ + METADATA_OVERRIDE="$(METADATA_OVERRIDE)" \ + ./scripts/causal/convert-model.sh --mmproj + causal-run-original-model: $(call validate_model_path,causal-run-original-model) @MODEL_PATH="$(MODEL_PATH)" ./scripts/causal/run-org-model.py diff --git a/examples/model-conversion/scripts/causal/convert-model.sh b/examples/model-conversion/scripts/causal/convert-model.sh index 56b21f9baa..9d95025950 100755 --- a/examples/model-conversion/scripts/causal/convert-model.sh +++ b/examples/model-conversion/scripts/causal/convert-model.sh @@ -1,5 +1,21 @@ #!/bin/bash +set -e + +# Parse command line arguments +MMPROJ="" +while [[ $# -gt 0 ]]; do + case $1 in + --mmproj) + MMPROJ="--mmproj" + shift + ;; + *) + shift + ;; + esac +done + MODEL_NAME="${MODEL_NAME:-$(basename "$MODEL_PATH")}" OUTPUT_DIR="${OUTPUT_DIR:-../../models}" TYPE="${OUTTYPE:-f16}" @@ -11,12 +27,20 @@ echo "Model name: ${MODEL_NAME}" echo "Data type: ${TYPE}" echo "Converted model path:: ${CONVERTED_MODEL}" echo "Metadata override: ${METADATA_OVERRIDE}" -python ../../convert_hf_to_gguf.py --verbose \ - ${MODEL_PATH} \ - --outfile ${CONVERTED_MODEL} \ - --outtype ${TYPE} \ - --metadata "${METADATA_OVERRIDE}" + +CMD_ARGS=("python" "../../convert_hf_to_gguf.py" "--verbose") +CMD_ARGS+=("${MODEL_PATH}") +CMD_ARGS+=("--outfile" "${CONVERTED_MODEL}") +CMD_ARGS+=("--outtype" "${TYPE}") +[[ -n "$METADATA_OVERRIDE" ]] && CMD_ARGS+=("--metadata" "${METADATA_OVERRIDE}") +[[ -n "$MMPROJ" ]] && CMD_ARGS+=("${MMPROJ}") + +"${CMD_ARGS[@]}" echo "" echo "The environment variable CONVERTED_MODEL can be set to this path using:" echo "export CONVERTED_MODEL=$(realpath ${CONVERTED_MODEL})" +if [[ -n "$MMPROJ" ]]; then + mmproj_file="${OUTPUT_DIR}/mmproj-$(basename "${CONVERTED_MODEL}")" + echo "The mmproj model was created in $(realpath "$mmproj_file")" +fi From d35a1e8c41f747548775225973a99507896a8c61 Mon Sep 17 00:00:00 2001 From: Joshua Cogliati Date: Thu, 28 Aug 2025 01:48:20 -0600 Subject: [PATCH 136/174] cli : change log to warning to explain reason for stopping (#15604) * Change to warn instead of debug, to explain reason for stopping. * Update tools/main/main.cpp Fix printing --2 Co-authored-by: Georgi Gerganov --------- Co-authored-by: Georgi Gerganov --- tools/main/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/main/main.cpp b/tools/main/main.cpp index dc776f59e9..865ea4a2f7 100644 --- a/tools/main/main.cpp +++ b/tools/main/main.cpp @@ -587,12 +587,12 @@ int main(int argc, char ** argv) { if (n_past + (int) embd.size() >= n_ctx) { if (!params.ctx_shift){ - LOG_DBG("\n\n%s: context full and context shift is disabled => stopping\n", __func__); + LOG_WRN("\n\n%s: context full and context shift is disabled => stopping\n", __func__); break; } if (params.n_predict == -2) { - LOG_DBG("\n\n%s: context full and n_predict == -%d => stopping\n", __func__, params.n_predict); + LOG_WRN("\n\n%s: context full and n_predict == %d => stopping\n", __func__, params.n_predict); break; } From 64387f6e95434b393ac3df285864692b7fd9c4d2 Mon Sep 17 00:00:00 2001 From: Aleksei Nikiforov <103434461+AlekseiNikiforovIBM@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:56:41 +0200 Subject: [PATCH 137/174] gguf-py: byteswapping improvements (#12851) * gguf-py: implement byteswapping for Q4_0 This is needed to byteswap Mistral model. Also restore original shapes after byteswapping tensors. It is not needed at the moment, but do it in case they'd be used in future. * Rework byteswapping code in gguf-py Move out details from byteswapping tensor blocks code --- gguf-py/gguf/scripts/gguf_convert_endian.py | 132 ++++++++++---------- 1 file changed, 68 insertions(+), 64 deletions(-) diff --git a/gguf-py/gguf/scripts/gguf_convert_endian.py b/gguf-py/gguf/scripts/gguf_convert_endian.py index 0e0febaa79..211a3f536a 100755 --- a/gguf-py/gguf/scripts/gguf_convert_endian.py +++ b/gguf-py/gguf/scripts/gguf_convert_endian.py @@ -19,6 +19,61 @@ import gguf logger = logging.getLogger("gguf-convert-endian") +def byteswap_q4_0(tensor, block_offs): + # Each block_q4_0 consists of an f16 delta (scaling factor) followed by 16 int8 quantizations. + + # Byte-Swap f16 sized delta field + delta = tensor.data[block_offs:block_offs + 2].view(dtype=np.uint16) + delta.byteswap(inplace=True) + + +def byteswap_q8_0(tensor, block_offs): + # Each block_q8_0 consists of an f16 delta (scaling factor) followed by 32 int8 quantizations. + + # Byte-Swap f16 sized delta field + delta = tensor.data[block_offs:block_offs + 2].view(dtype=np.uint16) + delta.byteswap(inplace=True) + + +def byteswap_q4_k(tensor, block_offs): + # Each block_q4_k consists of 2 f16 values followed by 140 int8 values. + + # Byte-Swap f16 sized fields + delta = tensor.data[block_offs:block_offs + 2].view(dtype=np.uint16) + delta.byteswap(inplace=True) + + delta = tensor.data[block_offs + 2:block_offs + 4].view(dtype=np.uint16) + delta.byteswap(inplace=True) + + +def byteswap_q6_k(tensor, block_offs): + # Each block_q6_k consists of 208 int8 values followed by 1 f16 value. + + # Byte-Swap f16 sized field + delta = tensor.data[block_offs + 208:block_offs + 210].view(dtype=np.uint16) + delta.byteswap(inplace=True) + + +byteswap_tensors = { + gguf.GGMLQuantizationType.Q4_0: { + "block_size": 18, # 18 bytes = + 16 * + "byteswap_func": byteswap_q4_0, + }, + gguf.GGMLQuantizationType.Q8_0: { + "block_size": 34, # 34 bytes = + 32 * + "byteswap_func": byteswap_q8_0, + }, + gguf.GGMLQuantizationType.Q4_K: { + "block_size": 144, # 144 bytes = 2 * + 140 * + "byteswap_func": byteswap_q4_k, + }, + gguf.GGMLQuantizationType.Q6_K: { + "block_size": 210, # 210 bytes = + 208 * + "byteswap_func": byteswap_q6_k, + }, +} + + def convert_byteorder(reader: gguf.GGUFReader, args: argparse.Namespace) -> None: file_endian = reader.endianess.name if reader.byte_order == 'S': @@ -32,13 +87,11 @@ def convert_byteorder(reader: gguf.GGUFReader, args: argparse.Namespace) -> None sys.exit(0) logger.info("* Checking tensors for conversion compatibility") for tensor in reader.tensors: - if tensor.tensor_type not in ( - gguf.GGMLQuantizationType.F32, - gguf.GGMLQuantizationType.F16, - gguf.GGMLQuantizationType.Q8_0, - gguf.GGMLQuantizationType.Q4_K, - gguf.GGMLQuantizationType.Q6_K, - ): + if tensor.tensor_type not in byteswap_tensors and \ + tensor.tensor_type not in ( + gguf.GGMLQuantizationType.F32, + gguf.GGMLQuantizationType.F16, + ): raise ValueError(f"Cannot handle type {tensor.tensor_type.name} for tensor {repr(tensor.name)}") logger.info(f"* Preparing to convert from {file_endian} to {order}") if args.dry_run: @@ -72,78 +125,29 @@ def convert_byteorder(reader: gguf.GGUFReader, args: argparse.Namespace) -> None part.byteswap(inplace=True) # Byte-swap tensor data if necessary - if tensor.tensor_type == gguf.GGMLQuantizationType.Q8_0: - # Handle Q8_0 tensor blocks (block_q8_0) - # Specific handling of block_q8_0 is required. - # Each block_q8_0 consists of an f16 delta (scaling factor) followed by 32 int8 quantizations. - - block_size = 34 # 34 bytes = + 32 * - - n_blocks = len(tensor.data) // block_size - for block_num in (inner_pbar := tqdm(range(n_blocks), desc="Byte-swapping Blocks", leave=False)): - block_offs = block_num * block_size - - # Byte-Swap f16 sized delta field - delta = tensor.data[block_offs:block_offs + 2].view(dtype=np.uint16) - delta.byteswap(inplace=True) - - # Byte-Swap Q8 weights - if block_num % 100000 == 0: - inner_pbar.set_description(f"Byte-swapping Blocks [{(n_blocks - block_num) // n_blocks}]") - - elif tensor.tensor_type == gguf.GGMLQuantizationType.Q4_K: - # Handle Q4_K tensor blocks (block_q4_k) - # Specific handling of block_q4_k is required. - # Each block_q4_k consists of 2 f16 values followed by 140 int8 values. - + if tensor.tensor_type in byteswap_tensors: # first flatten structure + oldshape = tensor.data.shape newshape = 1 for i in tensor.data.shape: newshape *= i tensor.data.resize(newshape) - block_size = 144 + block_size = byteswap_tensors[tensor.tensor_type]["block_size"] + byteswap_func = byteswap_tensors[tensor.tensor_type]["byteswap_func"] + n_blocks = len(tensor.data) // block_size for block_num in (inner_pbar := tqdm(range(n_blocks), desc="Byte-swapping Blocks", leave=False)): block_offs = block_num * block_size - # Byte-Swap f16 sized fields - delta = tensor.data[block_offs:block_offs + 2].view(dtype=np.uint16) - delta.byteswap(inplace=True) + byteswap_func(tensor, block_offs) - delta = tensor.data[block_offs + 2:block_offs + 4].view(dtype=np.uint16) - delta.byteswap(inplace=True) - - # Byte-Swap - if block_num % 100000 == 0: - inner_pbar.set_description(f"Byte-swapping Blocks [{(n_blocks - block_num) // n_blocks}]") - - elif tensor.tensor_type == gguf.GGMLQuantizationType.Q6_K: - # Handle Q6_K tensor blocks (block_q6_k) - # Specific handling of block_q6_k is required. - # Each block_q6_k consists of 208 int8 values followed by 1 f16 value. - - # first flatten structure - newshape = 1 - for i in tensor.data.shape: - newshape *= i - - tensor.data.resize(newshape) - - block_size = 210 - n_blocks = len(tensor.data) // block_size - for block_num in (inner_pbar := tqdm(range(n_blocks), desc="Byte-swapping Blocks", leave=False)): - block_offs = block_num * block_size - - # Byte-Swap f16 sized field - delta = tensor.data[block_offs + 208:block_offs + 210].view(dtype=np.uint16) - delta.byteswap(inplace=True) - - # Byte-Swap if block_num % 100000 == 0: inner_pbar.set_description(f"Byte-swapping Blocks [{(n_blocks - block_num) // n_blocks}]") + # restore old shape in case it's ever used + tensor.data.resize(oldshape) else: # Handle other tensor types tensor.data.byteswap(inplace=True) From 8a4280ce431da6b33e5a95ae1fd61472c8c3f8cc Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 28 Aug 2025 12:27:02 +0300 Subject: [PATCH 138/174] kv-cache : remove LLAMA_SET_ROWS checks (#15505) ggml-ci --- ggml/src/ggml-cann/common.h | 9 --- ggml/src/ggml-cann/ggml-cann.cpp | 5 -- src/llama-context.cpp | 22 ------- src/llama-context.h | 4 -- src/llama-graph.cpp | 4 -- src/llama-kv-cache.cpp | 110 +++++++------------------------ src/llama-kv-cache.h | 10 --- 7 files changed, 23 insertions(+), 141 deletions(-) diff --git a/ggml/src/ggml-cann/common.h b/ggml/src/ggml-cann/common.h index 33794062f5..88cc3f481e 100755 --- a/ggml/src/ggml-cann/common.h +++ b/ggml/src/ggml-cann/common.h @@ -374,7 +374,6 @@ struct ggml_backend_cann_context { #endif cann_task_queue task_queue; bool async_mode; - bool support_set_rows; // Rope Cache void* rope_init_ptr = nullptr; void* rope_sin_ptr = nullptr; @@ -400,14 +399,6 @@ struct ggml_backend_cann_context { async_mode = parse_bool(get_env("GGML_CANN_ASYNC_MODE").value_or("")); GGML_LOG_INFO("%s: device %d async operator submission is %s\n", __func__, device, async_mode ? "ON" : "OFF"); - - support_set_rows = parse_bool(get_env("LLAMA_SET_ROWS").value_or("")); - GGML_LOG_INFO("%s: LLAMA_SET_ROWS is %s\n", __func__, support_set_rows ? "ON" : "OFF"); - - if (!support_set_rows) { - GGML_LOG_INFO("%s: CANN Graph currently only supports execution when LLAMA_SET_ROWS is ON. " - "Falling back to eager mode.\n", __func__); - } } /** diff --git a/ggml/src/ggml-cann/ggml-cann.cpp b/ggml/src/ggml-cann/ggml-cann.cpp index 8121542561..558121dff7 100755 --- a/ggml/src/ggml-cann/ggml-cann.cpp +++ b/ggml/src/ggml-cann/ggml-cann.cpp @@ -2251,11 +2251,6 @@ static enum ggml_status ggml_backend_cann_graph_compute( bool use_cann_graph = true; bool cann_graph_update_required = false; - // check environment LLAMA_SET_ROWS - if (!cann_ctx->support_set_rows) { - use_cann_graph = false; - } - if (use_cann_graph) { if (cann_ctx->cann_graph == nullptr) { cann_ctx->cann_graph.reset(new ggml_cann_graph()); diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 99bfed7513..6b20161a38 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -102,16 +102,6 @@ llama_context::llama_context( cparams.op_offload = params.op_offload; cparams.kv_unified = params.kv_unified; - { - const char * LLAMA_SET_ROWS = getenv("LLAMA_SET_ROWS"); - supports_set_rows = LLAMA_SET_ROWS ? (atoi(LLAMA_SET_ROWS) != 0) : supports_set_rows; - - if (!supports_set_rows && !cparams.kv_unified) { - LLAMA_LOG_WARN("%s: non-unified KV cache requires ggml_set_rows() - forcing unified KV cache\n", __func__); - cparams.kv_unified = true; - } - } - { const char * LLAMA_GRAPH_REUSE_DISABLE = getenv("LLAMA_GRAPH_REUSE_DISABLE"); graph_reuse_disable = LLAMA_GRAPH_REUSE_DISABLE ? (atoi(LLAMA_GRAPH_REUSE_DISABLE) != 0) : graph_reuse_disable; @@ -890,12 +880,6 @@ int llama_context::encode(const llama_batch & batch_inp) { } } - if (!supports_set_rows) { - // Reset state for the next token before backend sync, to allow the CPU activities in the reset to - // overlap with device computation. - ggml_backend_sched_reset(sched.get()); - } - // TODO: hacky solution if (model.arch == LLM_ARCH_T5 && t_embd) { //cross.t_embd = t_embd; @@ -1226,12 +1210,6 @@ int llama_context::decode(const llama_batch & batch_inp) { // wait for the computation to finish (automatically done when obtaining the model output) //synchronize(); - if (!supports_set_rows) { - // Reset state for the next token before backend sync, to allow the CPU activities in the reset to - // overlap with device computation. - ggml_backend_sched_reset(sched.get()); - } - return 0; } diff --git a/src/llama-context.h b/src/llama-context.h index 3dd9205446..a372bcfbe4 100644 --- a/src/llama-context.h +++ b/src/llama-context.h @@ -283,10 +283,6 @@ private: bool has_evaluated_once = false; - // env: LLAMA_SET_ROWS (temporary) - // ref: https://github.com/ggml-org/llama.cpp/pull/14285 - bool supports_set_rows = true; - // env: LLAMA_GRAPH_REUSE_DISABLE bool graph_reuse_disable = false; diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index b928e9e16e..1f2fc3ab62 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -314,8 +314,6 @@ bool llm_graph_input_attn_kv::can_reuse(const llm_graph_params & params) { res &= self_kq_mask->ne[0] == mctx->get_n_kv(); res &= self_kq_mask->ne[1] == GGML_PAD(params.ubatch.n_tokens, GGML_KQ_MASK_PAD); - res &= mctx->get_supports_set_rows(); // TODO: tmp - return res; } @@ -350,8 +348,6 @@ bool llm_graph_input_attn_kv_iswa::can_reuse(const llm_graph_params & params) { res &= self_kq_mask_swa->ne[0] == mctx->get_swa()->get_n_kv(); res &= self_kq_mask_swa->ne[1] == GGML_PAD(params.ubatch.n_tokens, GGML_KQ_MASK_PAD); - res &= mctx->get_base()->get_supports_set_rows(); // TODO: tmp - return res; } diff --git a/src/llama-kv-cache.cpp b/src/llama-kv-cache.cpp index 920c1d0dbd..4485f78d5f 100644 --- a/src/llama-kv-cache.cpp +++ b/src/llama-kv-cache.cpp @@ -197,18 +197,6 @@ llama_kv_cache::llama_kv_cache( const char * LLAMA_KV_CACHE_DEBUG = getenv("LLAMA_KV_CACHE_DEBUG"); debug = LLAMA_KV_CACHE_DEBUG ? atoi(LLAMA_KV_CACHE_DEBUG) : 0; - - const char * LLAMA_SET_ROWS = getenv("LLAMA_SET_ROWS"); - supports_set_rows = LLAMA_SET_ROWS ? atoi(LLAMA_SET_ROWS) != 0 : supports_set_rows; - - if (!supports_set_rows) { - // ref: https://github.com/ggml-org/llama.cpp/pull/14363 - GGML_ASSERT(unified && "cannot use non-unified KV cache without ggml_set_rows() support"); - } - - if (!supports_set_rows) { - LLAMA_LOG_WARN("%s: LLAMA_SET_ROWS=0, using old ggml_cpy() method for backwards compatibility\n", __func__); - } } void llama_kv_cache::clear(bool data) { @@ -551,11 +539,8 @@ llama_kv_cache::slot_info_vec_t llama_kv_cache::prepare(const std::vectorne[0]; const int64_t n_tokens = k_cur->ne[2]; k_cur = ggml_reshape_2d(ctx, k_cur, k->ne[0], n_tokens); - if (k_idxs && supports_set_rows) { - if (k->ne[2] > 1) { - k = ggml_reshape_2d(ctx, k, k->ne[0], k->ne[1]*k->ne[2]); - } - - return ggml_set_rows(ctx, k, k_cur, k_idxs); + if (k->ne[2] > 1) { + k = ggml_reshape_2d(ctx, k, k->ne[0], k->ne[1]*k->ne[2]); } - // TODO: fallback to old ggml_cpy() method for backwards compatibility - // will be removed when ggml_set_rows() is adopted by all backends - - GGML_ASSERT(n_stream == 1 && "n_stream > 1 not supported without LLAMA_SET_ROWS"); - - ggml_tensor * k_view = ggml_view_1d(ctx, k, - n_tokens*n_embd_k_gqa, - ggml_row_size(k->type, n_embd_k_gqa)*sinfo.head()); - - return ggml_cpy(ctx, k_cur, k_view); + return ggml_set_rows(ctx, k, k_cur, k_idxs); } ggml_tensor * llama_kv_cache::cpy_v(ggml_context * ctx, ggml_tensor * v_cur, ggml_tensor * v_idxs, int32_t il, const slot_info & sinfo) const { + GGML_UNUSED(sinfo); + const int32_t ikv = map_layer_ids.at(il); auto * v = layers[ikv].v; @@ -1072,48 +1043,25 @@ ggml_tensor * llama_kv_cache::cpy_v(ggml_context * ctx, ggml_tensor * v_cur, ggm v_cur = ggml_reshape_2d(ctx, v_cur, n_embd_v_gqa, n_tokens); - if (v_idxs && supports_set_rows) { - if (!v_trans) { - if (v->ne[2] > 1) { - v = ggml_reshape_2d(ctx, v, v->ne[0], v->ne[1]*v->ne[2]); - } - - return ggml_set_rows(ctx, v, v_cur, v_idxs); - } - - // [TAG_V_CACHE_VARIABLE] - if (n_embd_v_gqa < v->ne[0]) { - v_cur = ggml_pad(ctx, v_cur, v->ne[0] - n_embd_v_gqa, 0, 0, 0); - } - - // the row becomes a single element - ggml_tensor * v_view = ggml_reshape_2d(ctx, v, 1, v->ne[0]*v->ne[1]*v->ne[2]); - - v_cur = ggml_reshape_2d(ctx, v_cur, 1, v_cur->ne[0]*v_cur->ne[1]); - - return ggml_set_rows(ctx, v_view, v_cur, v_idxs); - } - - // TODO: fallback to old ggml_cpy() method for backwards compatibility - // will be removed when ggml_set_rows() is adopted by all backends - - GGML_ASSERT(n_stream == 1 && "n_stream > 1 not supported without LLAMA_SET_ROWS"); - - ggml_tensor * v_view = nullptr; - if (!v_trans) { - v_view = ggml_view_1d(ctx, v, - n_tokens*n_embd_v_gqa, - ggml_row_size(v->type, n_embd_v_gqa)*sinfo.head()); - } else { - v_cur = ggml_transpose(ctx, v_cur); + if (v->ne[2] > 1) { + v = ggml_reshape_2d(ctx, v, v->ne[0], v->ne[1]*v->ne[2]); + } - v_view = ggml_view_2d(ctx, v, n_tokens, n_embd_v_gqa, - (v->ne[1] )*ggml_element_size(v), - (sinfo.head())*ggml_element_size(v)); + return ggml_set_rows(ctx, v, v_cur, v_idxs); } - return ggml_cpy(ctx, v_cur, v_view); + // [TAG_V_CACHE_VARIABLE] + if (n_embd_v_gqa < v->ne[0]) { + v_cur = ggml_pad(ctx, v_cur, v->ne[0] - n_embd_v_gqa, 0, 0, 0); + } + + // the row becomes a single element + ggml_tensor * v_view = ggml_reshape_2d(ctx, v, 1, v->ne[0]*v->ne[1]*v->ne[2]); + + v_cur = ggml_reshape_2d(ctx, v_cur, 1, v_cur->ne[0]*v_cur->ne[1]); + + return ggml_set_rows(ctx, v_view, v_cur, v_idxs); } ggml_tensor * llama_kv_cache::build_input_k_idxs(ggml_context * ctx, const llama_ubatch & ubatch) const { @@ -1143,10 +1091,6 @@ ggml_tensor * llama_kv_cache::build_input_v_idxs(ggml_context * ctx, const llama } void llama_kv_cache::set_input_k_idxs(ggml_tensor * dst, const llama_ubatch * ubatch, const slot_info & sinfo) const { - if (!supports_set_rows) { - return; - } - const uint32_t n_tokens = ubatch->n_tokens; GGML_ASSERT(n_tokens == (int64_t) sinfo.size()*sinfo.n_stream()); @@ -1163,10 +1107,6 @@ void llama_kv_cache::set_input_k_idxs(ggml_tensor * dst, const llama_ubatch * ub } void llama_kv_cache::set_input_v_idxs(ggml_tensor * dst, const llama_ubatch * ubatch, const slot_info & sinfo) const { - if (!supports_set_rows) { - return; - } - const uint32_t n_tokens = ubatch->n_tokens; GGML_ASSERT(n_tokens == (int64_t) sinfo.size()*sinfo.n_stream()); @@ -2004,10 +1944,6 @@ uint32_t llama_kv_cache_context::get_n_kv() const { return n_kv; } -bool llama_kv_cache_context::get_supports_set_rows() const { - return kv->get_supports_set_rows(); -} - ggml_tensor * llama_kv_cache_context::get_k(ggml_context * ctx, int32_t il) const { return kv->get_k(ctx, il, n_kv, sinfos[i_cur]); } diff --git a/src/llama-kv-cache.h b/src/llama-kv-cache.h index 3ca82917d3..07d29bb818 100644 --- a/src/llama-kv-cache.h +++ b/src/llama-kv-cache.h @@ -141,9 +141,6 @@ public: uint32_t get_n_kv(const slot_info & sinfo) const; - // TODO: temporary - bool get_supports_set_rows() const; - // get views of the current state of the cache ggml_tensor * get_k(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const; ggml_tensor * get_v(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const; @@ -215,10 +212,6 @@ private: // env: LLAMA_KV_CACHE_DEBUG int debug = 0; - // env: LLAMA_SET_ROWS (temporary) - // ref: https://github.com/ggml-org/llama.cpp/pull/14285 - bool supports_set_rows = true; - const llama_swa_type swa_type = LLAMA_SWA_TYPE_NONE; std::vector ctxs; @@ -318,9 +311,6 @@ public: uint32_t get_n_kv() const; - // TODO: temporary - bool get_supports_set_rows() const; - // get views of the current state of the cache ggml_tensor * get_k(ggml_context * ctx, int32_t il) const; ggml_tensor * get_v(ggml_context * ctx, int32_t il) const; From 55042b3692cb1467c9ee15c62c4a9fbf180f89e3 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Thu, 28 Aug 2025 19:23:22 +0800 Subject: [PATCH 139/174] scripts: add sqlite3 check for compare-commits.sh (#15633) --- scripts/compare-commits.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/compare-commits.sh b/scripts/compare-commits.sh index a28cd5e535..1802d6e5ef 100755 --- a/scripts/compare-commits.sh +++ b/scripts/compare-commits.sh @@ -25,6 +25,12 @@ fi # verify at the start that the compare script has all the necessary dependencies installed ./scripts/compare-llama-bench.py --check +if ! command -v sqlite3 >/dev/null 2>&1; then + echo "Error: sqlite3 is not installed or not in PATH" + echo "Please install sqlite3 to use this script" + exit 1 +fi + if [ "$tool" = "llama-bench" ]; then db_file="llama-bench.sqlite" target="llama-bench" From 84ab83cc0b4b7e769451ee48e4c7d1acef91ef25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Thu, 28 Aug 2025 15:49:50 +0200 Subject: [PATCH 140/174] model : jina-embeddings-v3 support (#13693) * initial jina-embeddings-v3 support * initial jina-embeddings-v3 support * initial jina-embeddings-v3 support * fix vocab parsing with only tokenizer.json * set mask token lstrip attribute * additional unk_token_id fallback just in case [no ci] * revert vocab_size() change [no ci] * merge tensor loading into general bert * rope * add lora embedding and loading (non-functional) * export separate lora ggufs instead * add adapter metadata api * use std::string * convert_hf_to_lora compatibility * fix assert * apply suggestions from review * apply suggestion from review --- common/arg.cpp | 4 +- common/common.cpp | 5 +++ common/common.h | 3 ++ convert_hf_to_gguf.py | 79 ++++++++++++++++++++++++++++++++++++++- gguf-py/gguf/constants.py | 20 +++++++++- include/llama.h | 18 +++++++++ src/llama-adapter.cpp | 72 +++++++++++++++++++++++++++++++++-- src/llama-adapter.h | 3 ++ src/llama-arch.cpp | 21 ++++++++++- src/llama-arch.h | 3 ++ src/llama-model.cpp | 35 ++++++++++++----- src/llama-model.h | 1 + src/llama-vocab.cpp | 2 +- tools/server/server.cpp | 2 + 14 files changed, 245 insertions(+), 23 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index d82f55890d..93f0108b2b 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2555,7 +2555,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex {"--lora"}, "FNAME", "path to LoRA adapter (can be repeated to use multiple adapters)", [](common_params & params, const std::string & value) { - params.lora_adapters.push_back({ std::string(value), 1.0, nullptr }); + params.lora_adapters.push_back({ std::string(value), 1.0, "", "", nullptr }); } // we define this arg on both COMMON and EXPORT_LORA, so when showing help message of export-lora, it will be categorized as "example-specific" arg ).set_examples({LLAMA_EXAMPLE_COMMON, LLAMA_EXAMPLE_EXPORT_LORA})); @@ -2563,7 +2563,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex {"--lora-scaled"}, "FNAME", "SCALE", "path to LoRA adapter with user defined scaling (can be repeated to use multiple adapters)", [](common_params & params, const std::string & fname, const std::string & scale) { - params.lora_adapters.push_back({ fname, std::stof(scale), nullptr }); + params.lora_adapters.push_back({ fname, std::stof(scale), "", "", nullptr }); } // we define this arg on both COMMON and EXPORT_LORA, so when showing help message of export-lora, it will be categorized as "example-specific" arg ).set_examples({LLAMA_EXAMPLE_COMMON, LLAMA_EXAMPLE_EXPORT_LORA})); diff --git a/common/common.cpp b/common/common.cpp index fdce1dcdec..054b43be77 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -988,7 +988,12 @@ struct common_init_result common_init_from_params(common_params & params) { return iparams; } + char buf[1024]; la.ptr = lora.get(); + llama_adapter_meta_val_str(la.ptr, "adapter.lora.task_name", buf, sizeof(buf)); + la.task_name = buf; + llama_adapter_meta_val_str(la.ptr, "adapter.lora.prompt_prefix", buf, sizeof(buf)); + la.prompt_prefix = buf; iparams.lora.emplace_back(std::move(lora)); // copy to list of loaded adapters } diff --git a/common/common.h b/common/common.h index 390dda5e53..87ea060695 100644 --- a/common/common.h +++ b/common/common.h @@ -34,6 +34,9 @@ struct common_adapter_lora_info { std::string path; float scale; + std::string task_name; + std::string prompt_prefix; + struct llama_adapter_lora * ptr; }; diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 31a11cbec0..6c8a034060 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -72,6 +72,7 @@ class ModelBase: endianess: gguf.GGUFEndian use_temp_file: bool lazy: bool + dry_run: bool part_names: list[str] is_safetensors: bool hparams: dict[str, Any] @@ -111,6 +112,7 @@ class ModelBase: self.endianess = gguf.GGUFEndian.BIG if is_big_endian else gguf.GGUFEndian.LITTLE self.use_temp_file = use_temp_file self.lazy = not eager or (remote_hf_model_id is not None) + self.dry_run = dry_run self.remote_hf_model_id = remote_hf_model_id if remote_hf_model_id is not None: self.is_safetensors = True @@ -4871,11 +4873,35 @@ class NeoBert(BertModel): @ModelBase.register("XLMRobertaModel", "XLMRobertaForSequenceClassification") class XLMRobertaModel(BertModel): model_arch = gguf.MODEL_ARCH.BERT + _lora_files = {} + _lora_names = [] - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, dir_model: Path, ftype: gguf.LlamaFileType, fname_out: Path, **kwargs: Any): + hparams = kwargs.pop("hparams", None) + if hparams is None: + hparams = ModelBase.load_hparams(dir_model, False) + + if lora_names := hparams.get("lora_adaptations"): + self._lora_names = lora_names + self.model_arch = gguf.MODEL_ARCH.JINA_BERT_V3 + + super().__init__(dir_model, ftype, fname_out, hparams=hparams, **kwargs) self._xlmroberta_tokenizer_init() + def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: + if self._lora_names: + for name in self._lora_names: + fname = self.add_prefix_to_filename(self.fname_out, f"lora-{name}-") + self._lora_files[name] = gguf.GGUFWriter(fname, arch=gguf.MODEL_ARCH_NAMES[self.model_arch], endianess=self.endianess, use_temp_file=self.use_temp_file, dry_run=self.dry_run) + + return super().generate_extra_tensors() + + def set_type(self): + for lora_writer in self._lora_files.values(): + lora_writer.add_type(gguf.GGUFType.ADAPTER) + lora_writer.add_string(gguf.Keys.Adapter.TYPE, "lora") + super().set_type() + def set_vocab(self): self._xlmroberta_set_vocab() @@ -4885,13 +4911,62 @@ class XLMRobertaModel(BertModel): if name.startswith("roberta."): name = name[8:] + # jina-embeddings-v3 + if ".parametrizations." in name: + name = name.replace(".parametrizations.", ".") + if name.endswith(".original"): + name = name[:-9] + # position embeddings start at pad_token_id + 1, so just chop down the weight tensor if name == "embeddings.position_embeddings.weight": if self._position_offset is not None: data_torch = data_torch[self._position_offset:,:] + if name.endswith(".0.lora_A") or name.endswith(".0.lora_B"): + if name.startswith("pooler.dense"): + return [] + + num_loras = data_torch.size(0) + assert num_loras == len(self._lora_names) + + # Split out each LoRA in their own GGUF + for i, lora_writer in enumerate(self._lora_files.values()): + new_name = self.map_tensor_name(name[:-9]) + name[-7:].lower() + data = data_torch[i, :, :] + # Transpose/flip token_embd/types into correct shape + if new_name == "token_embd.weight.lora_b": + data = data.T + elif new_name.startswith("token_types.weight."): + new_name = new_name[:-1] + ("a" if new_name[-1:] == "b" else "b") + lora_writer.add_tensor(new_name, data.float().numpy(), raw_dtype=gguf.GGMLQuantizationType.F32) + + return [] + return super().modify_tensors(data_torch, name, bid) + def set_gguf_parameters(self): + super().set_gguf_parameters() + + # jina-embeddings-v3 + if rotary_emb_base := self.hparams.get("rotary_emb_base"): + self.gguf_writer.add_rope_freq_base(rotary_emb_base) + lora_alpha = self.hparams.get("lora_alpha") + if lora_prompt_prefixes := self.hparams.get("task_instructions"): + assert self._lora_files and all(lora_name in lora_prompt_prefixes for lora_name in self._lora_files.keys()) + for lora_name, lora_writer in self._lora_files.items(): + lora_writer.add_float32(gguf.Keys.Adapter.LORA_ALPHA, lora_alpha if lora_alpha is not None else 1.0) + lora_writer.add_string(gguf.Keys.Adapter.LORA_TASK_NAME, lora_name) + if lora_prompt_prefixes: + lora_writer.add_string(gguf.Keys.Adapter.LORA_PROMPT_PREFIX, lora_prompt_prefixes[lora_name]) + + def write(self): + super().write() + for lora_writer in self._lora_files.values(): + lora_writer.write_header_to_file() + lora_writer.write_kv_data_to_file() + lora_writer.write_tensors_to_file(progress=True) + lora_writer.close() + @ModelBase.register("GemmaForCausalLM") class GemmaModel(TextModel): diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index b9d1235d17..a581f9601f 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -231,8 +231,10 @@ class Keys: MIDDLE_ID = "tokenizer.ggml.middle_token_id" class Adapter: - TYPE = "adapter.type" - LORA_ALPHA = "adapter.lora.alpha" + TYPE = "adapter.type" + LORA_ALPHA = "adapter.lora.alpha" + LORA_TASK_NAME = "adapter.lora.task_name" + LORA_PROMPT_PREFIX = "adapter.lora.prompt_prefix" class IMatrix: CHUNK_COUNT = "imatrix.chunk_count" @@ -315,6 +317,7 @@ class MODEL_ARCH(IntEnum): NOMIC_BERT_MOE = auto() NEO_BERT = auto() JINA_BERT_V2 = auto() + JINA_BERT_V3 = auto() BLOOM = auto() STABLELM = auto() QWEN = auto() @@ -647,6 +650,7 @@ MODEL_ARCH_NAMES: dict[MODEL_ARCH, str] = { MODEL_ARCH.NOMIC_BERT_MOE: "nomic-bert-moe", MODEL_ARCH.NEO_BERT: "neo-bert", MODEL_ARCH.JINA_BERT_V2: "jina-bert-v2", + MODEL_ARCH.JINA_BERT_V3: "jina-bert-v3", MODEL_ARCH.BLOOM: "bloom", MODEL_ARCH.STABLELM: "stablelm", MODEL_ARCH.QWEN: "qwen", @@ -1234,6 +1238,18 @@ MODEL_TENSORS: dict[MODEL_ARCH, list[MODEL_TENSOR]] = { MODEL_TENSOR.LAYER_OUT_NORM, MODEL_TENSOR.CLS, ], + MODEL_ARCH.JINA_BERT_V3: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.TOKEN_EMBD_NORM, + MODEL_TENSOR.TOKEN_TYPES, + MODEL_TENSOR.OUTPUT_NORM, + MODEL_TENSOR.ATTN_OUT_NORM, + MODEL_TENSOR.ATTN_QKV, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + MODEL_TENSOR.LAYER_OUT_NORM, + ], MODEL_ARCH.MPT: [ MODEL_TENSOR.TOKEN_EMBD, MODEL_TENSOR.OUTPUT_NORM, diff --git a/include/llama.h b/include/llama.h index c5622cc16b..7025353850 100644 --- a/include/llama.h +++ b/include/llama.h @@ -553,6 +553,24 @@ extern "C" { struct llama_model * model, const char * path_lora); + // Functions to access the adapter's GGUF metadata scalar values + // - The functions return the length of the string on success, or -1 on failure + // - The output string is always null-terminated and cleared on failure + // - When retrieving a string, an extra byte must be allocated to account for the null terminator + // - GGUF array values are not supported by these functions + + // Get metadata value as a string by key name + LLAMA_API int32_t llama_adapter_meta_val_str(const struct llama_adapter_lora * adapter, const char * key, char * buf, size_t buf_size); + + // Get the number of metadata key/value pairs + LLAMA_API int32_t llama_adapter_meta_count(const struct llama_adapter_lora * adapter); + + // Get metadata key name by index + LLAMA_API int32_t llama_adapter_meta_key_by_index(const struct llama_adapter_lora * adapter, int32_t i, char * buf, size_t buf_size); + + // Get metadata value as a string by index + LLAMA_API int32_t llama_adapter_meta_val_str_by_index(const struct llama_adapter_lora * adapter, int32_t i, char * buf, size_t buf_size); + // Manually free a LoRA adapter // Note: loaded adapters will be free when the associated model is deleted LLAMA_API void llama_adapter_lora_free(struct llama_adapter_lora * adapter); diff --git a/src/llama-adapter.cpp b/src/llama-adapter.cpp index 8d94034aed..772ce1b448 100644 --- a/src/llama-adapter.cpp +++ b/src/llama-adapter.cpp @@ -163,13 +163,38 @@ static void llama_adapter_lora_init_impl(llama_model & model, const char * path_ // check metadata { + const gguf_context * gguf_ctx = ctx_gguf.get(); + + LLAMA_LOG_INFO("%s: Dumping metadata keys/values.\n", __func__); + + // get metadata as string + for (int i = 0; i < gguf_get_n_kv(gguf_ctx); i++) { + gguf_type type = gguf_get_kv_type(gguf_ctx, i); + const std::string type_name = + type == GGUF_TYPE_ARRAY + ? format("%s[%s,%zu]", gguf_type_name(type), gguf_type_name(gguf_get_arr_type(gguf_ctx, i)), gguf_get_arr_n(gguf_ctx, i)) + : gguf_type_name(type); + const char * name = gguf_get_key(gguf_ctx, i); + const std::string value = gguf_kv_to_str(gguf_ctx, i); + + if (type != GGUF_TYPE_ARRAY) { + adapter.gguf_kv.emplace(name, value); + } + + const size_t MAX_VALUE_LEN = 40; + std::string print_value = value.size() > MAX_VALUE_LEN ? format("%s...", value.substr(0, MAX_VALUE_LEN - 3).c_str()) : value; + replace_all(print_value, "\n", "\\n"); + + LLAMA_LOG_INFO("%s: - kv %3d: %42s %-16s = %s\n", __func__, i, name, type_name.c_str(), print_value.c_str()); + } + auto get_kv_str = [&](const std::string & key) -> std::string { - int id = gguf_find_key(ctx_gguf.get(), key.c_str()); - return id < 0 ? "" : std::string(gguf_get_val_str(ctx_gguf.get(), id)); + int id = gguf_find_key(gguf_ctx, key.c_str()); + return id < 0 ? "" : std::string(gguf_get_val_str(gguf_ctx, id)); }; auto get_kv_f32 = [&](const std::string & key) -> float { - int id = gguf_find_key(ctx_gguf.get(), key.c_str()); - return id < 0 ? 0.0f : gguf_get_val_f32(ctx_gguf.get(), id); + int id = gguf_find_key(gguf_ctx, key.c_str()); + return id < 0 ? 0.0f : gguf_get_val_f32(gguf_ctx, id); }; LLM_KV llm_kv = LLM_KV(LLM_ARCH_UNKNOWN); @@ -383,6 +408,45 @@ llama_adapter_lora * llama_adapter_lora_init(llama_model * model, const char * p return nullptr; } +int32_t llama_adapter_meta_val_str(const llama_adapter_lora * adapter, const char * key, char * buf, size_t buf_size) { + const auto & it = adapter->gguf_kv.find(key); + if (it == adapter->gguf_kv.end()) { + if (buf_size > 0) { + buf[0] = '\0'; + } + return -1; + } + return snprintf(buf, buf_size, "%s", it->second.c_str()); +} + +int32_t llama_adapter_meta_count(const llama_adapter_lora * adapter) { + return (int)adapter->gguf_kv.size(); +} + +int32_t llama_adapter_meta_key_by_index(const llama_adapter_lora * adapter, int i, char * buf, size_t buf_size) { + if (i < 0 || i >= (int)adapter->gguf_kv.size()) { + if (buf_size > 0) { + buf[0] = '\0'; + } + return -1; + } + auto it = adapter->gguf_kv.begin(); + std::advance(it, i); + return snprintf(buf, buf_size, "%s", it->first.c_str()); +} + +int32_t llama_adapter_meta_val_str_by_index(const llama_adapter_lora * adapter, int32_t i, char * buf, size_t buf_size) { + if (i < 0 || i >= (int)adapter->gguf_kv.size()) { + if (buf_size > 0) { + buf[0] = '\0'; + } + return -1; + } + auto it = adapter->gguf_kv.begin(); + std::advance(it, i); + return snprintf(buf, buf_size, "%s", it->second.c_str()); +} + void llama_adapter_lora_free(llama_adapter_lora * adapter) { delete adapter; } diff --git a/src/llama-adapter.h b/src/llama-adapter.h index 65824e9727..9084e7cab0 100644 --- a/src/llama-adapter.h +++ b/src/llama-adapter.h @@ -67,6 +67,9 @@ struct llama_adapter_lora { float alpha; + // gguf metadata + std::unordered_map gguf_kv; + llama_adapter_lora() = default; ~llama_adapter_lora() = default; diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index 0ca0a4c22f..a61dc177ac 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -22,6 +22,7 @@ static const std::map LLM_ARCH_NAMES = { { LLM_ARCH_NOMIC_BERT_MOE, "nomic-bert-moe" }, { LLM_ARCH_NEO_BERT, "neo-bert" }, { LLM_ARCH_JINA_BERT_V2, "jina-bert-v2" }, + { LLM_ARCH_JINA_BERT_V3, "jina-bert-v3" }, { LLM_ARCH_BLOOM, "bloom" }, { LLM_ARCH_STABLELM, "stablelm" }, { LLM_ARCH_QWEN, "qwen" }, @@ -234,8 +235,10 @@ static const std::map LLM_KV_NAMES = { { LLM_KV_TOKENIZER_FIM_REP_ID, "tokenizer.ggml.fim_rep_token_id" }, { LLM_KV_TOKENIZER_FIM_SEP_ID, "tokenizer.ggml.fim_sep_token_id" }, - { LLM_KV_ADAPTER_TYPE, "adapter.type" }, - { LLM_KV_ADAPTER_LORA_ALPHA, "adapter.lora.alpha" }, + { LLM_KV_ADAPTER_TYPE, "adapter.type" }, + { LLM_KV_ADAPTER_LORA_ALPHA, "adapter.lora.alpha" }, + { LLM_KV_ADAPTER_LORA_TASK_NAME, "adapter.lora.task_name" }, + { LLM_KV_ADAPTER_LORA_PROMPT_PREFIX, "adapter.lora.prompt_prefix" }, // deprecated { LLM_KV_TOKENIZER_PREFIX_ID, "tokenizer.ggml.prefix_token_id" }, @@ -575,6 +578,20 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_CLS, "cls" }, }, }, + { + LLM_ARCH_JINA_BERT_V3, + { + { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, + { LLM_TENSOR_TOKEN_EMBD_NORM, "token_embd_norm" }, + { LLM_TENSOR_TOKEN_TYPES, "token_types" }, + { LLM_TENSOR_ATTN_OUT_NORM, "blk.%d.attn_output_norm" }, + { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, + { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, + { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, + { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, + { LLM_TENSOR_LAYER_OUT_NORM, "blk.%d.layer_output_norm" }, + }, + }, { LLM_ARCH_BLOOM, { diff --git a/src/llama-arch.h b/src/llama-arch.h index 7008c2514c..94b0bef719 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -26,6 +26,7 @@ enum llm_arch { LLM_ARCH_NOMIC_BERT_MOE, LLM_ARCH_NEO_BERT, LLM_ARCH_JINA_BERT_V2, + LLM_ARCH_JINA_BERT_V3, LLM_ARCH_BLOOM, LLM_ARCH_STABLELM, LLM_ARCH_QWEN, @@ -230,6 +231,8 @@ enum llm_kv { LLM_KV_ADAPTER_TYPE, LLM_KV_ADAPTER_LORA_ALPHA, + LLM_KV_ADAPTER_LORA_TASK_NAME, + LLM_KV_ADAPTER_LORA_PROMPT_PREFIX, LLM_KV_POSNET_EMBEDDING_LENGTH, LLM_KV_POSNET_BLOCK_COUNT, diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 7d3429617b..30974a723f 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -47,6 +47,7 @@ const char * llm_type_name(llm_type type) { case LLM_TYPE_410M: return "410M"; case LLM_TYPE_450M: return "450M"; case LLM_TYPE_475M: return "475M"; + case LLM_TYPE_558M: return "558M"; case LLM_TYPE_700M: return "700M"; case LLM_TYPE_770M: return "770M"; case LLM_TYPE_780M: return "780M"; @@ -772,6 +773,18 @@ void llama_model::load_hparams(llama_model_loader & ml) { default: type = LLM_TYPE_UNKNOWN; } } break; + case LLM_ARCH_JINA_BERT_V3: + { + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); + ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn); + ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type, false); + + switch (hparams.n_layer) { + case 24: + type = LLM_TYPE_558M; break; + default: type = LLM_TYPE_UNKNOWN; + } + } break; case LLM_ARCH_NOMIC_BERT: case LLM_ARCH_NOMIC_BERT_MOE: { @@ -2631,6 +2644,7 @@ bool llama_model::load_tensors(llama_model_loader & ml) { case LLM_ARCH_BERT: case LLM_ARCH_NOMIC_BERT: case LLM_ARCH_NOMIC_BERT_MOE: + case LLM_ARCH_JINA_BERT_V3: { tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); type_embd = create_tensor(tn(LLM_TENSOR_TOKEN_TYPES, "weight"), {n_embd, n_token_types}, TENSOR_NOT_REQUIRED); @@ -2666,24 +2680,22 @@ bool llama_model::load_tensors(llama_model_loader & ml) { } layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0); + layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED); layer.attn_out_norm = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}, 0); layer.attn_out_norm_b = create_tensor(tn(LLM_TENSOR_ATTN_OUT_NORM, "bias", i), {n_embd}, 0); if (hparams.moe_every_n_layers > 0 && i % hparams.moe_every_n_layers == 1) { - layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0); layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), { n_embd, n_ff, n_expert}, 0); layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), { n_ff, n_embd, n_expert}, 0); layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0); } else { - layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0); - layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0); + layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0); + layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED); + layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0); + layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED); - if (arch == LLM_ARCH_BERT || arch == LLM_ARCH_NOMIC_BERT_MOE) { - layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, 0); - layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, 0); - layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0); - } else { + if (arch == LLM_ARCH_NOMIC_BERT) { layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0); } } @@ -7461,7 +7473,7 @@ struct llm_build_bert : public llm_graph_context { } // RoPE - if (model.arch == LLM_ARCH_NOMIC_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE) { + if (model.arch == LLM_ARCH_NOMIC_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE || model.arch == LLM_ARCH_JINA_BERT_V3) { Qcur = ggml_rope_ext( ctx0, Qcur, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, @@ -7520,7 +7532,7 @@ struct llm_build_bert : public llm_graph_context { 0.0f, LLAMA_EXPERT_GATING_FUNC_TYPE_SOFTMAX, il); cb(cur, "ffn_moe_out", il); - } else if (model.arch == LLM_ARCH_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE) { + } else if (model.arch == LLM_ARCH_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE || model.arch == LLM_ARCH_JINA_BERT_V3) { cur = build_ffn(cur, model.layers[il].ffn_up, model.layers[il].ffn_up_b, NULL, NULL, NULL, NULL, @@ -18241,6 +18253,7 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, // switch statement case LLM_ARCH_BERT: case LLM_ARCH_JINA_BERT_V2: + case LLM_ARCH_JINA_BERT_V3: case LLM_ARCH_NOMIC_BERT: case LLM_ARCH_NOMIC_BERT_MOE: case LLM_ARCH_NEO_BERT: @@ -18395,6 +18408,7 @@ ggml_cgraph * llama_model::build_graph(const llm_graph_params & params) const { } break; case LLM_ARCH_BERT: case LLM_ARCH_JINA_BERT_V2: + case LLM_ARCH_JINA_BERT_V3: case LLM_ARCH_NOMIC_BERT: case LLM_ARCH_NOMIC_BERT_MOE: { @@ -18885,6 +18899,7 @@ llama_rope_type llama_model_rope_type(const llama_model * model) { case LLM_ARCH_GROK: case LLM_ARCH_DBRX: case LLM_ARCH_BERT: + case LLM_ARCH_JINA_BERT_V3: case LLM_ARCH_NOMIC_BERT: case LLM_ARCH_NOMIC_BERT_MOE: case LLM_ARCH_STABLELM: diff --git a/src/llama-model.h b/src/llama-model.h index af4460cc01..fa44d800d5 100644 --- a/src/llama-model.h +++ b/src/llama-model.h @@ -40,6 +40,7 @@ enum llm_type { LLM_TYPE_450M, LLM_TYPE_475M, LLM_TYPE_537M, + LLM_TYPE_558M, LLM_TYPE_700M, LLM_TYPE_770M, LLM_TYPE_780M, diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index de5d1681df..ca02b63a58 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -2470,7 +2470,7 @@ void llama_vocab::impl::load(llama_model_loader & ml, const LLM_KV & kv) { // set attributes by model/tokenizer/architecture name if (false || _contains_any(tokenizer_pre, {"jina-v2-de", "jina-v2-es", "jina-v2-code"}) - || _contains_any(general_arch, {"nomic-bert-moe"}) + || _contains_any(general_arch, {"nomic-bert-moe", "jina-bert-v3"}) ) { if (token_to_id.count("") == 0) { LLAMA_LOG_WARN("%s: Mask token is missing in vocab, please reconvert model!\n", __func__); diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 6eb5aeb582..6aa319d2f1 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -4898,6 +4898,8 @@ int main(int argc, char ** argv) { {"id", i}, {"path", lora.path}, {"scale", lora.scale}, + {"task_name", lora.task_name}, + {"prompt_prefix", lora.prompt_prefix}, }); } res_ok(res, result); From c8d0d14e77c3c45df5cbbddde9c2b4c377ec4e7a Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 28 Aug 2025 17:09:05 +0300 Subject: [PATCH 141/174] kv-cache : fix find_slot to not search for continuous slot (#15638) ggml-ci --- src/llama-kv-cache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llama-kv-cache.cpp b/src/llama-kv-cache.cpp index 4485f78d5f..f1c6918738 100644 --- a/src/llama-kv-cache.cpp +++ b/src/llama-kv-cache.cpp @@ -540,7 +540,7 @@ llama_kv_cache::slot_info_vec_t llama_kv_cache::prepare(const std::vector Date: Thu, 28 Aug 2025 10:11:36 -0400 Subject: [PATCH 142/174] ggml : fix SSM_SCAN for n_groups > 1 (#15625) --- ggml/src/ggml-cpu/ops.cpp | 21 +++++++++++---------- ggml/src/ggml-cuda/ssm-scan.cu | 2 +- ggml/src/ggml-metal/ggml-metal.metal | 10 ++++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index 93330b43a9..8c1f794885 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -9003,8 +9003,7 @@ static void ggml_compute_forward_ssm_scan_f32( GGML_ASSERT(src4->nb[0] == sizeof(float)); GGML_ASSERT(src5->nb[0] == sizeof(float)); GGML_ASSERT(src6->nb[0] == sizeof(int32_t)); - // allows optimizing the modulo since n_group should be a power of 2 - GGML_ASSERT((ng & -ng) == ng); + GGML_ASSERT(nh % ng == 0); // heads per thread const int dh = (nh + nth - 1)/nth; @@ -9035,6 +9034,7 @@ static void ggml_compute_forward_ssm_scan_f32( // ref: https://github.com/state-spaces/mamba/blob/62db608da60f6fc790b8ed9f4b3225e95ca15fde/mamba_ssm/ops/triton/softplus.py#L16 const float dt_soft_plus = dt[h] <= 20.0f ? log1pf(expf(dt[h])) : dt[h]; const float dA = expf(dt_soft_plus * A[h]); + const int g = h / (nh / ng); // repeat_interleave // dim for (int i1 = 0; i1 < nr; ++i1) { @@ -9057,8 +9057,8 @@ static void ggml_compute_forward_ssm_scan_f32( // TODO: maybe unroll more? for (int j = 0; j < 1; j++) { GGML_F32_VEC t0 = GGML_F32_VEC_LOAD(s0 + i + j*ggml_f32_epr + ii*nc); - GGML_F32_VEC t1 = GGML_F32_VEC_LOAD(B + i + j*ggml_f32_epr + (h & (ng - 1))*nc); - GGML_F32_VEC t2 = GGML_F32_VEC_LOAD(C + i + j*ggml_f32_epr + (h & (ng - 1))*nc); + GGML_F32_VEC t1 = GGML_F32_VEC_LOAD(B + i + j*ggml_f32_epr + g*nc); + GGML_F32_VEC t2 = GGML_F32_VEC_LOAD(C + i + j*ggml_f32_epr + g*nc); t0 = GGML_F32_VEC_MUL(t0, adA); t1 = GGML_F32_VEC_MUL(t1, axdt); @@ -9090,8 +9090,8 @@ static void ggml_compute_forward_ssm_scan_f32( for (int i = 0; i < np; i += GGML_F32_STEP) { for (int j = 0; j < GGML_F32_ARR; j++) { ax[j] = GGML_F32_VEC_LOAD(s0 + i + j*GGML_F32_EPR + ii*nc); - ay[j] = GGML_F32_VEC_LOAD(B + i + j*GGML_F32_EPR + (h & (ng - 1))*nc); - az[j] = GGML_F32_VEC_LOAD(C + i + j*GGML_F32_EPR + (h & (ng - 1))*nc); + ay[j] = GGML_F32_VEC_LOAD(B + i + j*GGML_F32_EPR + g*nc); + az[j] = GGML_F32_VEC_LOAD(C + i + j*GGML_F32_EPR + g*nc); ax[j] = GGML_F32_VEC_MUL(ax[j], adA); ay[j] = GGML_F32_VEC_MUL(ay[j], axdt); @@ -9113,7 +9113,7 @@ static void ggml_compute_forward_ssm_scan_f32( // d_state for (int i0 = np; i0 < nc; ++i0) { const int i = i0 + ii*nc; - const int ig = i0 + (h & (ng - 1))*nc; + const int ig = i0 + g*nc; // state = prev_state * dA + dB * x const float state = (s0[i] * dA) + (B[ig] * x_dt); // y = rowwise_dotprod(state, C) @@ -9130,6 +9130,7 @@ static void ggml_compute_forward_ssm_scan_f32( for (int h = ih0; h < ih1; ++h) { // ref: https://github.com/state-spaces/mamba/blob/62db608da60f6fc790b8ed9f4b3225e95ca15fde/mamba_ssm/ops/triton/softplus.py#L16 const float dt_soft_plus = dt[h] <= 20.0f ? log1pf(expf(dt[h])) : dt[h]; + const int g = h / (nh / ng); // repeat_interleave // dim for (int i1 = 0; i1 < nr; ++i1) { @@ -9144,8 +9145,8 @@ static void ggml_compute_forward_ssm_scan_f32( // TODO: what happens when (d_state % svcntw()) != 0? for (int64_t k = 0; k < nc; k += svcntw()) { svfloat32_t vA = GGML_F32_VEC_LOAD(&A[h*nc + k]); - svfloat32_t vB = GGML_F32_VEC_LOAD(&B[k + (h & (ng - 1))*nc]); - svfloat32_t vC = GGML_F32_VEC_LOAD(&C[k + (h & (ng - 1))*nc]); + svfloat32_t vB = GGML_F32_VEC_LOAD(&B[k + g*nc]); + svfloat32_t vC = GGML_F32_VEC_LOAD(&C[k + g*nc]); svfloat32_t vs0 = GGML_F32_VEC_LOAD(&s0[ii*nc + k]); svfloat32_t t1 = GGML_F32_VEC_MUL(vdt_soft_plus, vA); @@ -9165,7 +9166,7 @@ static void ggml_compute_forward_ssm_scan_f32( // d_state for (int i0 = 0; i0 < nc; ++i0) { const int i = i0 + ii*nc; - const int ig = i0 + (h & (ng - 1))*nc; + const int ig = i0 + g*nc; // state = prev_state * dA + dB * x const float state = (s0[i] * expf(dt_soft_plus * A[i0 + h*nc])) + (B[ig] * x_dt); // y = rowwise_dotprod(state, C) diff --git a/ggml/src/ggml-cuda/ssm-scan.cu b/ggml/src/ggml-cuda/ssm-scan.cu index dc9a7d58d0..6b424381df 100644 --- a/ggml/src/ggml-cuda/ssm-scan.cu +++ b/ggml/src/ggml-cuda/ssm-scan.cu @@ -129,7 +129,7 @@ __global__ void __launch_bounds__(d_state, 1) const int head_off = ((blockIdx.x * splitH) % d_head) * sizeof(float); const int seq_idx = blockIdx.y; - const int group_off = (head_idx & (n_group - 1)) * d_state * sizeof(float); + const int group_off = (head_idx / (n_head / n_group)) * d_state * sizeof(float); const float * s0_block = (const float *) ((const char *) src0 + src6[seq_idx] * src0_nb3 + head_idx * src0_nb2 + head_off * d_state); const float * x_block = (const float *) ((const char *) src1 + (seq_idx * src1_nb3) + blockIdx.x * splitH * sizeof(float)); diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index fa80d6e405..4fa16c4a55 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -1983,14 +1983,15 @@ kernel void kernel_ssm_scan_f32( device const float * s0_buff = (device const float *) ((device const char *) src0 + ir*args.nb02 + ids[i3]*args.nb03); device float * s_buff = (device float *) ((device char *) dst + ir*args.nb02 + i3*args.nb03 + s_off); const int64_t i = i0 + i1*nc; + const int64_t g = ir / (nh / ng); // repeat_interleave float s0 = s0_buff[i]; float s = s_buff[i]; device const float * A = (device const float *) ((device const char *) src3 + ir*args.nb31); device const float * x_block = (device const float *) ((device const char *) src1 + i1*nb10 + ir*args.nb11 + i3*args.nb13); device const float * dt_block = (device const float *) ((device const char *) src2 + ir*nb20 + i3*args.nb22); - device const float * B_block = (device const float *) ((device const char *) src4 + (ir & (ng - 1))*args.nb41 + i3*args.nb43); - device const float * C_block = (device const float *) ((device const char *) src5 + (ir & (ng - 1))*args.nb51 + i3*args.nb53); + device const float * B_block = (device const float *) ((device const char *) src4 + g*args.nb41 + i3*args.nb43); + device const float * C_block = (device const float *) ((device const char *) src5 + g*args.nb51 + i3*args.nb53); device float * y_block = (device float *) ((device char *) dst + (i1 + ir*(nr) + i3*(n_t*nh*nr))*nb00); for (int64_t i2 = 0; i2 < n_t; ++i2) { @@ -2098,14 +2099,15 @@ kernel void kernel_ssm_scan_f32_group( device const float * s0_buff = (device const float *) ((device const char *) src0 + ir*args.nb02 + ids[i3]*args.nb03); device float * s_buff = (device float *) ((device char *) dst + ir*args.nb02 + i3*args.nb03 + s_off); const int64_t i = i0 + i1*nc; + const int64_t g = ir / (nh / ng); // repeat_interleave float s0 = s0_buff[i]; float s = s_buff[i]; device const float * A = (device const float *) ((device const char *) src3 + ir*args.nb31); // {1, nh} device const float * x_block = (device const float *) ((device const char *) src1 + i1*nb10 + ir*args.nb11 + i3*args.nb13); device const float * dt_block = (device const float *) ((device const char *) src2 + ir*nb20 + i3*args.nb22); - device const float * B_block = (device const float *) ((device const char *) src4 + (ir & (ng - 1))*args.nb41 + i3*args.nb43); - device const float * C_block = (device const float *) ((device const char *) src5 + (ir & (ng - 1))*args.nb51 + i3*args.nb53); + device const float * B_block = (device const float *) ((device const char *) src4 + g*args.nb41 + i3*args.nb43); + device const float * C_block = (device const float *) ((device const char *) src5 + g*args.nb51 + i3*args.nb53); device float * y_block = (device float *) ((device char *) dst + (i1 + ir*(nr) + i3*(n_t*nh*nr))*nb00); for (int64_t i2 = 0; i2 < n_t; ++i2) { From 6c442f42ff25564a0cd6b1435d9abc1b0178eac5 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Thu, 28 Aug 2025 22:39:27 +0800 Subject: [PATCH 143/174] ggml-cpu: fix invalid hsum build in debug s390x (#15634) Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/ggml-cpu-impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index 1f6844e16c..e08c30a348 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -489,7 +489,7 @@ inline static int16x8_t vec_padd_s16(int16x8_t a, int16x8_t b) { /** * @see https://github.com/ggml-org/llama.cpp/pull/14037 */ -inline float vec_hsum(float32x4_t v) { +inline static float vec_hsum(float32x4_t v) { float32x4_t v_temp = v + vec_reve(v); return v_temp[0] + v_temp[1]; } From c97dc093912ad014f6d22743ede0d4d7fd82365a Mon Sep 17 00:00:00 2001 From: mnehete32 <33429707+mnehete32@users.noreply.github.com> Date: Fri, 29 Aug 2025 00:03:03 +0530 Subject: [PATCH 144/174] CUDA: add conv2d (#15635) * CUDA: add conv2d * CUDA: conv2d - correct formatting and added const --- ggml/src/ggml-cuda/conv2d.cu | 171 ++++++++++++++++++++++++++++++++ ggml/src/ggml-cuda/conv2d.cuh | 5 + ggml/src/ggml-cuda/ggml-cuda.cu | 5 + 3 files changed, 181 insertions(+) create mode 100644 ggml/src/ggml-cuda/conv2d.cu create mode 100644 ggml/src/ggml-cuda/conv2d.cuh diff --git a/ggml/src/ggml-cuda/conv2d.cu b/ggml/src/ggml-cuda/conv2d.cu new file mode 100644 index 0000000000..cf878d1fd1 --- /dev/null +++ b/ggml/src/ggml-cuda/conv2d.cu @@ -0,0 +1,171 @@ +#include "conv2d.cuh" + +struct conv_params { + const int64_t IW, IH; + const int64_t OW, OH; + const int64_t KW, KH; + const int64_t ST_X, ST_Y; + const int64_t PD_X, PD_Y; + const int64_t DL_X, DL_Y; + const int64_t IC, OC; + const int64_t B; + const int64_t TOTAL; +}; + +struct kernel_bounds { + int64_t y_min, y_max; + int64_t x_min, x_max; +}; + +__device__ __forceinline__ int64_t max64(int64_t a, int64_t b) { + return (a > b) ? a : b; +} + +__device__ __forceinline__ int64_t min64(int64_t a, int64_t b) { + return (a < b) ? a : b; +} + +__device__ __forceinline__ kernel_bounds calculate_kernel_bounds(int64_t out_x, int64_t out_y, const conv_params & P) { + kernel_bounds bounds; + bounds.y_min = max64(0, (P.PD_Y - out_y * P.ST_Y + P.DL_Y - 1) / P.DL_Y); + bounds.y_max = min64(P.KH, (P.IH + P.PD_Y - out_y * P.ST_Y + P.DL_Y - 1) / P.DL_Y); + bounds.x_min = max64(0, (P.PD_X - out_x * P.ST_X + P.DL_X - 1) / P.DL_X); + bounds.x_max = min64(P.KW, (P.IW + P.PD_X - out_x * P.ST_X + P.DL_X - 1) / P.DL_X); + return bounds; +} + +__device__ __forceinline__ int calculate_input_coord(int64_t out_coord, + int64_t kern_coord, + int64_t stride, + int64_t dilation, + int64_t padding) { + return out_coord * stride + kern_coord * dilation - padding; +} + +struct whcn_layout { + __device__ static int64_t input_index(int64_t n, int64_t c, int64_t y, int64_t x, const conv_params & P) { + return n * (P.IC * P.IW * P.IH) + c * P.IW * P.IH + y * P.IW + x; + } + + __device__ static int64_t kernel_index(int64_t c_out, int64_t c_in, int64_t ky, int64_t kx, const conv_params & P) { + return c_out * (P.IC * P.KH * P.KW) + c_in * (P.KH * P.KW) + ky * P.KW + kx; + } + + __device__ static int64_t output_index(int64_t n, int64_t c, int64_t y, int64_t x, const conv_params & P) { + return n * (P.OC * P.OW * P.OH) + c * P.OW * P.OH + y * P.OW + x; + } + + __device__ static void unpack_indices(int64_t global_idx, + const conv_params & P, + int64_t & n, + int64_t & c, + int64_t & out_y, + int64_t & out_x) { + out_x = global_idx % P.OW; + out_y = (global_idx / P.OW) % P.OH; + c = (global_idx / (P.OW * P.OH)) % P.OC; + n = global_idx / (P.OW * P.OH * P.OC); + } +}; + +template +static __global__ void conv2d_kernel(const float * __restrict__ input, + const T * __restrict__ kernel, + float * __restrict__ output, + const conv_params P) { + const int64_t global_idx = blockIdx.x * blockDim.x + threadIdx.x; + + if (global_idx >= P.TOTAL) { + return; + } + + int64_t n, c_out, out_y, out_x; + Layout::unpack_indices(global_idx, P, n, c_out, out_y, out_x); + + T acc = 0; + + for (int64_t c_in = 0; c_in < P.IC; ++c_in) { + kernel_bounds bounds = calculate_kernel_bounds(out_x, out_y, P); + + for (int64_t ky = bounds.y_min; ky < bounds.y_max; ++ky) { + const int64_t in_y = calculate_input_coord(out_y, ky, P.ST_Y, P.DL_Y, P.PD_Y); + + for (int64_t kx = bounds.x_min; kx < bounds.x_max; ++kx) { + const int64_t in_x = calculate_input_coord(out_x, kx, P.ST_X, P.DL_X, P.PD_X); + + T input_val; + if (std::is_same::value) { + input_val = __float2half(input[Layout::input_index(n, c_in, in_y, in_x, P)]); + } else { + input_val = input[Layout::input_index(n, c_in, in_y, in_x, P)]; + } + + T kernel_val = kernel[Layout::kernel_index(c_out, c_in, ky, kx, P)]; + acc += (input_val * kernel_val); + } + } + } + + // [N, OC, OH, OW] + output[Layout::output_index(n, c_out, out_y, out_x, P)] = (float) acc; +} + +template +static void conv2d_cuda(const float * X_D, const T * K_D, float * Y_D, const conv_params P, cudaStream_t st) { + const int blocks = (P.TOTAL + CUDA_CONV2D_BLOCK_SIZE - 1) / CUDA_CONV2D_BLOCK_SIZE; + conv2d_kernel<<>>(X_D, K_D, Y_D, P); +} + +static void conv2d_cuda_f16(const float * X_D, const half * K_D, float * Y_D, const conv_params P, cudaStream_t st) { + conv2d_cuda(X_D, K_D, Y_D, P, st); +} + +static void conv2d_cuda_f32(const float * X_D, const float * K_D, float * Y_D, const conv_params P, cudaStream_t st) { + conv2d_cuda(X_D, K_D, Y_D, P, st); +} + +void ggml_cuda_op_conv2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { + const ggml_tensor * kernel = dst->src[0]; + const ggml_tensor * input = dst->src[1]; + float * K_D = (float *) kernel->data; + const float * X_D = (const float *) input->data; + float * Y_D = (float *) dst->data; + + GGML_ASSERT(ggml_is_contiguous(kernel)); + GGML_ASSERT(kernel->type == GGML_TYPE_F16 || kernel->type == GGML_TYPE_F32); + + // same number of input channels + GGML_ASSERT(input->ne[2] == kernel->ne[2]); + + cudaStream_t st = ctx.stream(); + + const int32_t * p = (const int32_t *) dst->op_params; + const int ST_X = p[0]; // stride_x + const int ST_Y = p[1]; // stride_y + const int PD_X = p[2]; // padding_x + const int PD_Y = p[3]; // padding_y + const int DL_X = p[4]; // dilation_x + const int DL_Y = p[5]; // dilation_y + + // No cwhn + GGML_ASSERT(p[6] == false); + + const int IW = input->ne[0]; // input_w + const int IH = input->ne[1]; // input_h + const int OW = dst->ne[0]; // output_w + const int OH = dst->ne[1]; // output_h + const int KW = kernel->ne[0]; // kernel_w + const int KH = kernel->ne[1]; // kernel_h + const int IC = input->ne[2]; // input_channels + const int OC = kernel->ne[3]; // ouptut_chanles + const int B = input->ne[3]; // n_batches + + const int64_t total = B * OC * OH * OW; + conv_params params = { IW, IH, OW, OH, KW, KH, ST_X, ST_Y, PD_X, PD_Y, DL_X, DL_Y, IC, OC, B, total }; + + if (kernel->type == GGML_TYPE_F16) { + conv2d_cuda_f16(X_D, (half *) K_D, Y_D, params, st); + } else { + conv2d_cuda_f32(X_D, K_D, Y_D, params, st); + } +} diff --git a/ggml/src/ggml-cuda/conv2d.cuh b/ggml/src/ggml-cuda/conv2d.cuh new file mode 100644 index 0000000000..ce4802c7ed --- /dev/null +++ b/ggml/src/ggml-cuda/conv2d.cuh @@ -0,0 +1,5 @@ +#pragma once +#include "common.cuh" + +#define CUDA_CONV2D_BLOCK_SIZE 256 +void ggml_cuda_op_conv2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 3a50527248..4c02b57227 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -12,6 +12,7 @@ #include "ggml-cuda/clamp.cuh" #include "ggml-cuda/concat.cuh" #include "ggml-cuda/conv-transpose-1d.cuh" +#include "ggml-cuda/conv2d.cuh" #include "ggml-cuda/conv2d-dw.cuh" #include "ggml-cuda/conv2d-transpose.cuh" #include "ggml-cuda/convert.cuh" @@ -2451,6 +2452,9 @@ static bool ggml_cuda_compute_forward(ggml_backend_cuda_context & ctx, struct gg case GGML_OP_IM2COL: ggml_cuda_op_im2col(ctx, dst); break; + case GGML_OP_CONV_2D: + ggml_cuda_op_conv2d(ctx, dst); + break; case GGML_OP_CONV_2D_DW: ggml_cuda_op_conv2d_dw(ctx, dst); break; @@ -3501,6 +3505,7 @@ static bool ggml_backend_cuda_device_supports_op(ggml_backend_dev_t dev, const g return op->src[0]->nb[0] == ggml_type_size(op->src[0]->type) && ggml_is_contiguous_2(op->src[0]); } case GGML_OP_IM2COL: + case GGML_OP_CONV_2D: case GGML_OP_CONV_2D_DW: case GGML_OP_CONV_TRANSPOSE_2D: case GGML_OP_POOL_2D: From a8bca68f727844e7dcf24a956003b3c2039ea563 Mon Sep 17 00:00:00 2001 From: Gabe Goodhart Date: Thu, 28 Aug 2025 15:27:36 -0500 Subject: [PATCH 145/174] fix: Compute the full sum in llama-eval-callback, not just the sum of printed values (#15637) This makes it much easier to compare between llama.cpp and transformers! https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart --- examples/eval-callback/eval-callback.cpp | 50 +++++++++++++++--------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/examples/eval-callback/eval-callback.cpp b/examples/eval-callback/eval-callback.cpp index 61eefc7248..d4ef751fbb 100644 --- a/examples/eval-callback/eval-callback.cpp +++ b/examples/eval-callback/eval-callback.cpp @@ -28,9 +28,40 @@ static std::string ggml_ne_string(const ggml_tensor * t) { return str; } +static float ggml_get_float_value(uint8_t * data, ggml_type type, const size_t * nb, size_t i0, size_t i1, size_t i2, size_t i3) { + size_t i = i3 * nb[3] + i2 * nb[2] + i1 * nb[1] + i0 * nb[0]; + float v; + if (type == GGML_TYPE_F16) { + v = ggml_fp16_to_fp32(*(ggml_fp16_t *) &data[i]); + } else if (type == GGML_TYPE_F32) { + v = *(float *) &data[i]; + } else if (type == GGML_TYPE_I64) { + v = (float) *(int64_t *) &data[i]; + } else if (type == GGML_TYPE_I32) { + v = (float) *(int32_t *) &data[i]; + } else if (type == GGML_TYPE_I16) { + v = (float) *(int16_t *) &data[i]; + } else if (type == GGML_TYPE_I8) { + v = (float) *(int8_t *) &data[i]; + } else { + GGML_ABORT("fatal error"); + } + return v; +} + static void ggml_print_tensor(uint8_t * data, ggml_type type, const int64_t * ne, const size_t * nb, int64_t n) { GGML_ASSERT(n > 0); float sum = 0; + for (int64_t i3 = 0; i3 < ne[3]; i3++) { + for (int64_t i2 = 0; i2 < ne[2]; i2++) { + for (int64_t i1 = 0; i1 < ne[1]; i1++) { + for (int64_t i0 = 0; i0 < ne[0]; i0++) { + const float v = ggml_get_float_value(data, type, nb, i0, i1, i2, i3); + sum += v; + } + } + } + } for (int64_t i3 = 0; i3 < ne[3]; i3++) { LOG(" [\n"); for (int64_t i2 = 0; i2 < ne[2]; i2++) { @@ -50,25 +81,8 @@ static void ggml_print_tensor(uint8_t * data, ggml_type type, const int64_t * ne LOG("..., "); i0 = ne[0] - n; } - size_t i = i3 * nb[3] + i2 * nb[2] + i1 * nb[1] + i0 * nb[0]; - float v; - if (type == GGML_TYPE_F16) { - v = ggml_fp16_to_fp32(*(ggml_fp16_t *) &data[i]); - } else if (type == GGML_TYPE_F32) { - v = *(float *) &data[i]; - } else if (type == GGML_TYPE_I64) { - v = (float) *(int64_t *) &data[i]; - } else if (type == GGML_TYPE_I32) { - v = (float) *(int32_t *) &data[i]; - } else if (type == GGML_TYPE_I16) { - v = (float) *(int16_t *) &data[i]; - } else if (type == GGML_TYPE_I8) { - v = (float) *(int8_t *) &data[i]; - } else { - GGML_ABORT("fatal error"); - } + const float v = ggml_get_float_value(data, type, nb, i0, i1, i2, i3); LOG("%12.4f", v); - sum += v; if (i0 < ne[0] - 1) LOG(", "); } LOG("],\n"); From e8d99dd0b67f2ecc1e45fca8074a3a18c3e036d2 Mon Sep 17 00:00:00 2001 From: Gabe Goodhart Date: Thu, 28 Aug 2025 18:39:31 -0600 Subject: [PATCH 146/174] nvidia nemotron nano v2 (nemotronh) (#15507) * feat: Add NEMOTRONH to python arch enum https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * feat: Add NEMOTRONH to c++ arch enum https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * feat: Add NEMOTRONH to llama-arch layer map https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * feat: First pass at conversion for nemotronh https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * feat: Add a verbose log for each tensor loaded This is really helpful for diagnosing mismatches between the expected and received tensors https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * feat: First (broken) pass at nemotronh model architecture It generates tokens, just not valid ones! https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * fix: Explicitly enable add_bos_token during conversion The `tokenizer.json`/`tokenizer_config.json` in the model are a bit contradictory. In the config, add_bos_token is set to False, but the tokenizer model itself has a post_processor that adds the BOS token via type: TemplateProcessing https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * fix: Use relu2 (LLM_FFN_RELU_SQR) for activation in FFN layers https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * fix: Only allocate attention cache for attention layers (not non-recurrent) https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * fix: Move residual add to after every block https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * fix: Use the correct norm tensor for the MLP blocks https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart * Nemotron-H: MLP gate cleanup (pass NULL for unused gate) This model does not use a gate in MLP blocks; pass NULLs for gate tensors to make intent clear and avoid unused-pointer noise. * SSM: respect ssm_dt_rank for dt_dim when provided Use GGUF-provided time_step_rank (ssm_dt_rank) to set dt_dim when > 0; fallback to max(64, n_embd/16). * fix: plamo2 - revert dt_dim to default (remove ssm_dt_rank usage) * Rename nemotronh to nemotron_h for consistency - Update architecture name from NEMOTRONH to NEMOTRON_H in constants.py - Change architecture string from 'nemotronh' to 'nemotron_h' in all files - Update enum LLM_ARCH_NEMOTRONH to LLM_ARCH_NEMOTRON_H - Update class name llm_build_nemotronh to llm_build_nemotron_h - Consistent naming with underscore convention (nemotron_h vs nemotronh) * feat: Support conversion for older NemotronH models https://github.com/ggml-org/llama.cpp/issues/nemotron-nano-15409 Branch: gabe-l-hart/nvidia-nemotron-nano-15409 Signed-off-by: Gabe Goodhart --------- Signed-off-by: Gabe Goodhart Co-authored-by: Maicon Domingues Co-authored-by: weatherman --- convert_hf_to_gguf.py | 63 ++++++++- gguf-py/gguf/constants.py | 21 +++ gguf-py/gguf/tensor_mapping.py | 6 + src/llama-arch.cpp | 27 ++++ src/llama-arch.h | 1 + src/llama-model-loader.cpp | 1 + src/llama-model.cpp | 251 ++++++++++++++++++++++++++++++++- 7 files changed, 362 insertions(+), 8 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 6c8a034060..df37c4a6e4 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -7546,9 +7546,13 @@ class GraniteHybridModel(Mamba2Model, GraniteMoeModel): ] # n_group and d_inner are used during reshape_tensors for mamba2 - self.d_model = self.find_hparam(["hidden_size", "d_model"]) - self.n_group = self.find_hparam(["n_groups"]) - self.d_inner = self.find_hparam(["expand"]) * self.d_model + # NOTE: Explicitly include hparam prefix prefix for d_model to + # disambiguate with top-level head_dim + # NOTE 2: If needed for future models, this can be isolated in a method + # to separate the prefix setting and teh keys used + self.d_model = self.find_hparam([f"{self.hparam_prefixes[0]}_head_dim", "hidden_size", "d_model"]) + self.n_group = self.find_hparam(["n_groups", "num_groups"]) + self.d_inner = self.find_hparam(["expand", "num_heads"]) * self.d_model def get_attn_layers(self): # Explicit list of layer type names @@ -7609,12 +7613,12 @@ class GraniteHybridModel(Mamba2Model, GraniteMoeModel): ## Mamba mixer params ## self.gguf_writer.add_ssm_conv_kernel(self.find_hparam(["conv_kernel", "d_conv"])) - self.gguf_writer.add_ssm_state_size(self.find_hparam(["state_size", "d_state"])) + self.gguf_writer.add_ssm_state_size(self.find_hparam(["state_size", "d_state", "state_dim", "ssm_state_size"])) self.gguf_writer.add_ssm_group_count(self.n_group) self.gguf_writer.add_ssm_inner_size(self.d_inner) # NOTE: The mamba_dt_rank is _not_ the right field for how this is used # in llama.cpp - self.gguf_writer.add_ssm_time_step_rank(self.find_hparam(["n_heads"])) + self.gguf_writer.add_ssm_time_step_rank(self.find_hparam(["n_heads", "num_heads"])) ## Attention params ## head_count_kv = self.find_hparam(["num_key_value_heads", "n_head_kv"]) @@ -7641,6 +7645,55 @@ class GraniteHybridModel(Mamba2Model, GraniteMoeModel): Mamba2Model.set_vocab(self) +@ModelBase.register("NemotronHForCausalLM") +class NemotronHModel(GraniteHybridModel): + """Hybrid mamba2/attention model from NVIDIA""" + model_arch = gguf.MODEL_ARCH.NEMOTRON_H + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Save the top-level head_dim for later + self.head_dim = self.hparams.get("head_dim", self.hparams.get("attention_head_dim")) + assert self.head_dim is not None, "Could not find the attention head dim in config" + + # Don't use expand to calculate d_inner + self.d_inner = self.find_hparam(["num_heads"]) * self.d_model + + # Update the ssm / attn / mlp layers + # M: Mamba2, *: Attention, -: MLP + hybrid_override_pattern = self.hparams["hybrid_override_pattern"] + self._ssm_layers = [i for i, val in enumerate(hybrid_override_pattern) if val == "M"] + self._mlp_layers = [i for i, val in enumerate(hybrid_override_pattern) if val == "-"] + + def get_attn_layers(self): + hybrid_override_pattern = self.hparams["hybrid_override_pattern"] + assert len(hybrid_override_pattern) == self.block_count, "Mismatch between hybrid override and num_hidden_layers!" + return [i for i, val in enumerate(hybrid_override_pattern) if val == "*"] + + def set_gguf_parameters(self): + super().set_gguf_parameters() + + self.gguf_writer.add_key_length(self.head_dim) + self.gguf_writer.add_value_length(self.head_dim) + + # Set feed_forward_length + # NOTE: This will trigger an override warning. This is preferrable to + # duplicating all the parent logic + n_ff = self.find_hparam(["intermediate_size", "n_inner", "hidden_dim"]) + self.gguf_writer.add_feed_forward_length([ + n_ff if i in self._mlp_layers else 0 for i in range(self.block_count) + ]) + + def set_vocab(self): + super().set_vocab() + + # The tokenizer _does_ add a BOS token (via post_processor type + # TemplateProcessing) but does not set add_bos_token to true in the + # config, so we need to explicitly override it here. + self.gguf_writer.add_add_bos_token(True) + + @ModelBase.register("BailingMoeForCausalLM") class BailingMoeModel(TextModel): model_arch = gguf.MODEL_ARCH.BAILINGMOE diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index a581f9601f..6156d35c2a 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -367,6 +367,7 @@ class MODEL_ARCH(IntEnum): T5ENCODER = auto() JAIS = auto() NEMOTRON = auto() + NEMOTRON_H = auto() EXAONE = auto() EXAONE4 = auto() GRANITE = auto() @@ -700,6 +701,7 @@ MODEL_ARCH_NAMES: dict[MODEL_ARCH, str] = { MODEL_ARCH.T5ENCODER: "t5encoder", MODEL_ARCH.JAIS: "jais", MODEL_ARCH.NEMOTRON: "nemotron", + MODEL_ARCH.NEMOTRON_H: "nemotron_h", MODEL_ARCH.EXAONE: "exaone", MODEL_ARCH.EXAONE4: "exaone4", MODEL_ARCH.GRANITE: "granite", @@ -2297,6 +2299,25 @@ MODEL_TENSORS: dict[MODEL_ARCH, list[MODEL_TENSOR]] = { MODEL_TENSOR.FFN_DOWN, MODEL_TENSOR.FFN_UP, ], + MODEL_ARCH.NEMOTRON_H: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.OUTPUT_NORM, + MODEL_TENSOR.OUTPUT, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.SSM_IN, + MODEL_TENSOR.SSM_CONV1D, + MODEL_TENSOR.SSM_DT, + MODEL_TENSOR.SSM_A, + MODEL_TENSOR.SSM_D, + MODEL_TENSOR.SSM_NORM, + MODEL_TENSOR.SSM_OUT, + MODEL_TENSOR.ATTN_Q, + MODEL_TENSOR.ATTN_K, + MODEL_TENSOR.ATTN_V, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + ], MODEL_ARCH.EXAONE: [ MODEL_TENSOR.TOKEN_EMBD, MODEL_TENSOR.OUTPUT_NORM, diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index abb21fa821..497f48809f 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -191,6 +191,7 @@ class TensorNameMap: "model.layers.{bid}.self_attn.q_proj", # llama4 "model.transformer.blocks.{bid}.q_proj", # llada "layers.{bid}.self_attn.q_proj", # qwen3-embedding + "backbone.layers.{bid}.mixer.q_proj", # nemotron-h ), # Attention key @@ -209,6 +210,7 @@ class TensorNameMap: "model.layers.{bid}.self_attn.k_proj", # llama4 "model.transformer.blocks.{bid}.k_proj", # llada "layers.{bid}.self_attn.k_proj", # qwen3-embedding + "backbone.layers.{bid}.mixer.k_proj", # nemotron-h ), # Attention value @@ -226,6 +228,7 @@ class TensorNameMap: "model.layers.{bid}.self_attn.v_proj", # llama4 "model.transformer.blocks.{bid}.v_proj", # llada "layers.{bid}.self_attn.v_proj", # qwen3-embedding + "backbone.layers.{bid}.mixer.v_proj", # nemotron-h ), # Attention output @@ -260,6 +263,7 @@ class TensorNameMap: "transformer_encoder.{bid}.wo", # neobert "model.transformer.blocks.{bid}.attn_out", # llada "layers.{bid}.self_attn.o_proj", # qwen3-embedding + "backbone.layers.{bid}.mixer.o_proj", # nemotron-h ), # Attention output norm @@ -387,6 +391,7 @@ class TensorNameMap: "model.layers.{bid}.block_sparse_moe.up", # smallthinker "model.transformer.blocks.{bid}.up_proj", # llada "layers.{bid}.mlp.up_proj", # qwen3-embedding + "backbone.layers.{bid}.mixer.up_proj", # nemotron-h ), MODEL_TENSOR.FFN_UP_EXP: ( @@ -480,6 +485,7 @@ class TensorNameMap: "model.layers.{bid}.block_sparse_moe.down", # smallthinker "model.transformer.blocks.{bid}.ff_out", # llada "layers.{bid}.mlp.down_proj", # qwen3-embedding + "backbone.layers.{bid}.mixer.down_proj", # nemotron-h ), MODEL_TENSOR.FFN_DOWN_EXP: ( diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index a61dc177ac..d5c8477f4a 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -69,6 +69,7 @@ static const std::map LLM_ARCH_NAMES = { { LLM_ARCH_T5ENCODER, "t5encoder" }, { LLM_ARCH_JAIS, "jais" }, { LLM_ARCH_NEMOTRON, "nemotron" }, + { LLM_ARCH_NEMOTRON_H, "nemotron_h" }, { LLM_ARCH_EXAONE, "exaone" }, { LLM_ARCH_EXAONE4, "exaone4" }, { LLM_ARCH_RWKV6, "rwkv6" }, @@ -1550,6 +1551,31 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, }, }, + { + LLM_ARCH_NEMOTRON_H, + { + { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, + { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, + { LLM_TENSOR_OUTPUT, "output" }, + { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, + // mamba(2) ssm layers + { LLM_TENSOR_SSM_IN, "blk.%d.ssm_in" }, + { LLM_TENSOR_SSM_CONV1D, "blk.%d.ssm_conv1d" }, + { LLM_TENSOR_SSM_DT, "blk.%d.ssm_dt" }, + { LLM_TENSOR_SSM_A, "blk.%d.ssm_a" }, + { LLM_TENSOR_SSM_D, "blk.%d.ssm_d" }, + { LLM_TENSOR_SSM_NORM, "blk.%d.ssm_norm" }, + { LLM_TENSOR_SSM_OUT, "blk.%d.ssm_out" }, + // attention layers + { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, + { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, + { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, + { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, + // dense FFN + { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, + { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, + }, + }, { LLM_ARCH_EXAONE, { @@ -2355,6 +2381,7 @@ bool llm_arch_is_hybrid(const llm_arch & arch) { case LLM_ARCH_PLAMO2: case LLM_ARCH_GRANITE_HYBRID: case LLM_ARCH_LFM2: + case LLM_ARCH_NEMOTRON_H: return true; default: return false; diff --git a/src/llama-arch.h b/src/llama-arch.h index 94b0bef719..86c119692d 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -73,6 +73,7 @@ enum llm_arch { LLM_ARCH_T5ENCODER, LLM_ARCH_JAIS, LLM_ARCH_NEMOTRON, + LLM_ARCH_NEMOTRON_H, LLM_ARCH_EXAONE, LLM_ARCH_EXAONE4, LLM_ARCH_RWKV6, diff --git a/src/llama-model-loader.cpp b/src/llama-model-loader.cpp index f71c40f8e3..8182a9adf5 100644 --- a/src/llama-model-loader.cpp +++ b/src/llama-model-loader.cpp @@ -788,6 +788,7 @@ const struct ggml_tensor * llama_model_loader::check_tensor_dims(const std::stri } struct ggml_tensor * llama_model_loader::create_tensor(struct ggml_context * ctx, const std::string & name, const std::initializer_list & ne, int flags) { + LLAMA_LOG_DEBUG("%s: loading tensor %s\n", __func__, name.c_str()); const struct ggml_tensor * cur = check_tensor_dims(name, ne, !(flags & TENSOR_NOT_REQUIRED)); if (cur == NULL) { diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 30974a723f..f3e0e9ac64 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -1570,6 +1570,27 @@ void llama_model::load_hparams(llama_model_loader & ml) { default: type = LLM_TYPE_UNKNOWN; } } break; + case LLM_ARCH_NEMOTRON_H: + { + ml.get_key(LLM_KV_SSM_CONV_KERNEL, hparams.ssm_d_conv); + ml.get_key(LLM_KV_SSM_INNER_SIZE, hparams.ssm_d_inner); + ml.get_key(LLM_KV_SSM_STATE_SIZE, hparams.ssm_d_state); + ml.get_key(LLM_KV_SSM_TIME_STEP_RANK, hparams.ssm_dt_rank); + ml.get_key(LLM_KV_SSM_GROUP_COUNT, hparams.ssm_n_group); + + // A layer is recurrent IFF the n_head_kv value is set to 0 and + // the n_ff value is set to 0 + for (uint32_t i = 0; i < hparams.n_layer; ++i) { + hparams.recurrent_layer_arr[i] = (hparams.n_head_kv(i) == 0 && hparams.n_ff(i) == 0); + } + + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); + + switch (hparams.n_layer) { + case 56: type = LLM_TYPE_9B; break; + default: type = LLM_TYPE_UNKNOWN; + } + } break; case LLM_ARCH_EXAONE: { ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); @@ -4688,6 +4709,75 @@ bool llama_model::load_tensors(llama_model_loader & ml) { layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, TENSOR_NOT_REQUIRED); } } break; + case LLM_ARCH_NEMOTRON_H: + { + // mamba2 Mixer SSM params + // NOTE: int64_t for tensor dimensions + const int64_t d_conv = hparams.ssm_d_conv; + const int64_t d_inner = hparams.ssm_d_inner; + const int64_t d_state = hparams.ssm_d_state; + const int64_t n_ssm_head = hparams.ssm_dt_rank; + const int64_t n_group = hparams.ssm_n_group; + const int64_t d_in_proj = 2*d_inner + 2*n_group*d_state + n_ssm_head; + + // embeddings + tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); + + // output + { + output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}, 0); + output = create_tensor(tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, TENSOR_NOT_REQUIRED); + // if output is NULL, init from the input tok embed, duplicated to allow offloading + if (output == NULL) { + output = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, TENSOR_DUPLICATED); + } + } + + for (int i = 0; i < n_layer; ++i) { + auto & layer = layers[i]; + + // all blocks use the attn norm + layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0); + + if (hparams.is_recurrent(i)) { + // ssm layers + layer.ssm_in = create_tensor(tn(LLM_TENSOR_SSM_IN, "weight", i), {n_embd, d_in_proj}, 0); + + layer.ssm_conv1d = create_tensor(tn(LLM_TENSOR_SSM_CONV1D, "weight", i), {d_conv, d_inner + 2*n_group*d_state}, 0); + layer.ssm_conv1d_b = create_tensor(tn(LLM_TENSOR_SSM_CONV1D, "bias", i), {d_inner + 2*n_group*d_state}, TENSOR_NOT_REQUIRED); + + layer.ssm_dt_b = create_tensor(tn(LLM_TENSOR_SSM_DT, "bias", i), {n_ssm_head}, 0); + + // no "weight" suffix for these + layer.ssm_a = create_tensor(tn(LLM_TENSOR_SSM_A, i), {1, n_ssm_head}, 0); + layer.ssm_d = create_tensor(tn(LLM_TENSOR_SSM_D, i), {1, n_ssm_head}, 0); + + layer.ssm_norm = create_tensor(tn(LLM_TENSOR_SSM_NORM, "weight", i), {d_inner / n_group, n_group}, 0); + + // out_proj + layer.ssm_out = create_tensor(tn(LLM_TENSOR_SSM_OUT, "weight", i), {d_inner, n_embd}, 0); + } else if (hparams.n_ff(i) == 0) { + // attention layers (with optional bias) + const int64_t n_head_i = hparams.n_head(i); + const int64_t n_embd_k_gqa_i = hparams.n_embd_k_gqa(i); + const int64_t n_embd_v_gqa_i = hparams.n_embd_v_gqa(i); + layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head_i}, 0); + layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa_i}, 0); + layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa_i}, 0); + layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head_i, n_embd}, 0); + layer.bq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED); + layer.bk = create_tensor(tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_k_gqa_i}, TENSOR_NOT_REQUIRED); + layer.bv = create_tensor(tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_v_gqa_i}, TENSOR_NOT_REQUIRED); + layer.bo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED); + } else { + // mlp layers + layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), { hparams.n_ff(i), n_embd}, 0); + layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, hparams.n_ff(i)}, 0); + layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED); + layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {hparams.n_ff(i)}, TENSOR_NOT_REQUIRED); + } + } + } break; case LLM_ARCH_EXAONE: { tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); @@ -5862,7 +5952,8 @@ void llama_model::print_info() const { arch == LLM_ARCH_JAMBA || arch == LLM_ARCH_FALCON_H1 || arch == LLM_ARCH_PLAMO2 || - arch == LLM_ARCH_GRANITE_HYBRID) { + arch == LLM_ARCH_GRANITE_HYBRID || + arch == LLM_ARCH_NEMOTRON_H) { LLAMA_LOG_INFO("%s: ssm_d_conv = %u\n", __func__, hparams.ssm_d_conv); LLAMA_LOG_INFO("%s: ssm_d_inner = %u\n", __func__, hparams.ssm_d_inner); LLAMA_LOG_INFO("%s: ssm_d_state = %u\n", __func__, hparams.ssm_d_state); @@ -14129,6 +14220,138 @@ struct llm_build_nemotron : public llm_graph_context { } }; +struct llm_build_nemotron_h : public llm_graph_context_mamba { + llm_build_nemotron_h( + const llama_model & model, + const llm_graph_params & params) : + llm_graph_context_mamba(params) { + + const int64_t n_embd_head = hparams.n_embd_head_v; + GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); + + ggml_tensor * cur; + ggml_tensor * inpL; + + inpL = build_inp_embd(model.tok_embd); + + auto * inp = build_inp_mem_hybrid(); + + ggml_tensor * inp_out_ids = build_inp_out_ids(); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * inpSA = inpL; + + // norm + cur = build_norm(inpL, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, il); + cb(cur, "attn_norm", il); + + if (hparams.is_recurrent(il)) { + // ssm layer // + cur = build_mamba2_layer(inp->get_recr(), cur, model, ubatch, il); + } else if (hparams.n_ff(il) == 0) { + // attention layer // + cur = build_attention_layer(cur, inp->get_attn(), model, n_embd_head, il); + } else { + cur = build_ffn_layer(cur, model, il); + } + + if (il == n_layer - 1 && inp_out_ids) { + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); + } + + // add residual + cur = ggml_add(ctx0, cur, inpSA); + cb(cur, "block_out", il); + + // input for next layer + inpL = cur; + } + + cur = inpL; + + cur = build_norm(cur, + model.output_norm, NULL, + LLM_NORM_RMS, -1); + + cb(cur, "result_norm", -1); + res->t_embd = cur; + + // lm_head + cur = build_lora_mm(model.output, cur); + cb(cur, "result_output", -1); + res->t_logits = cur; + + ggml_build_forward_expand(gf, cur); + } + + ggml_tensor * build_attention_layer( + ggml_tensor * cur, + llm_graph_input_attn_kv * inp_attn, + const llama_model & model, + const int64_t n_embd_head, + const int il) { + + // compute Q and K and (optionally) RoPE them + ggml_tensor * Qcur = build_lora_mm(model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); + if (model.layers[il].bq) { + Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); + cb(Qcur, "Qcur", il); + } + + ggml_tensor * Kcur = build_lora_mm(model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); + if (model.layers[il].bk) { + Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); + cb(Kcur, "Kcur", il); + } + + ggml_tensor * Vcur = build_lora_mm(model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); + if (model.layers[il].bv) { + Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); + cb(Vcur, "Vcur", il); + } + + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, hparams.n_head(il), n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, hparams.n_head_kv(il), n_tokens); + Vcur = ggml_reshape_3d(ctx0, Vcur, n_embd_head, hparams.n_head_kv(il), n_tokens); + + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); + + const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; + cur = build_attn(inp_attn, + model.layers[il].wo, model.layers[il].bo, + Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); + cb(cur, "attn_out", il); + return cur; + } + + ggml_tensor * build_ffn_layer( + ggml_tensor * cur, + const llama_model & model, + const int il) { + + cur = build_ffn(cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, NULL, + NULL, NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, NULL, + NULL, + LLM_FFN_RELU_SQR, LLM_FFN_PAR, il); + cb(cur, "ffn_out", il); + + cur = build_cvec(cur, il); + cb(cur, "l_out", il); + + return cur; + } +}; + struct llm_build_exaone : public llm_graph_context { llm_build_exaone(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) { const int64_t n_embd_head = hparams.n_embd_head_v; @@ -18277,6 +18500,23 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, cparams.n_seq_max, nullptr); } else if (llm_arch_is_hybrid(arch)) { + + // The main difference between hybrid architectures is the + // layer filters, so pick the right one here + llama_memory_hybrid::layer_filter_cb filter_attn = nullptr; + llama_memory_hybrid::layer_filter_cb filter_recr = nullptr; + if (arch == LLM_ARCH_FALCON_H1) { + filter_attn = [&](int32_t) { return true; }; + filter_recr = [&](int32_t) { return true; }; + } else if (arch == LLM_ARCH_NEMOTRON_H) { + filter_attn = [&](int32_t il) { + return !hparams.is_recurrent(il) && hparams.n_ff(il) == 0; + }; + filter_recr = [&](int32_t il) { + return hparams.is_recurrent(il) && hparams.n_ff(il) == 0; + }; + } + const auto padding = llama_kv_cache::get_padding(cparams); cparams.n_ctx = GGML_PAD(cparams.n_ctx, padding); @@ -18296,8 +18536,8 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, /* n_seq_max */ cparams.n_seq_max, /* offload */ cparams.offload_kqv, /* unified */ cparams.kv_unified, - /* filter_attn */ (arch == LLM_ARCH_FALCON_H1) ? [&](int32_t) { return true; } : (llama_memory_hybrid::layer_filter_cb)nullptr, - /* filter_recr */ (arch == LLM_ARCH_FALCON_H1) ? [&](int32_t) { return true; } : (llama_memory_hybrid::layer_filter_cb)nullptr); + /* filter_attn */ std::move(filter_attn), + /* filter_recr */ std::move(filter_recr)); } else { const auto padding = llama_kv_cache::get_padding(cparams); @@ -18625,6 +18865,10 @@ ggml_cgraph * llama_model::build_graph(const llm_graph_params & params) const { { llm = std::make_unique(*this, params); } break; + case LLM_ARCH_NEMOTRON_H: + { + llm = std::make_unique(*this, params); + } break; case LLM_ARCH_EXAONE: { llm = std::make_unique(*this, params); @@ -18860,6 +19104,7 @@ llama_rope_type llama_model_rope_type(const llama_model * model) { case LLM_ARCH_RWKV7: case LLM_ARCH_ARWKV7: case LLM_ARCH_WAVTOKENIZER_DEC: + case LLM_ARCH_NEMOTRON_H: return LLAMA_ROPE_TYPE_NONE; // use what we call a normal RoPE, operating on pairs of consecutive head values From 009b709d6efd24820ac67765ed339a72dc797814 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Fri, 29 Aug 2025 11:35:58 +0800 Subject: [PATCH 147/174] CUDA: fuse adds, fuse add with rms norm (#15631) * CUDA: fused add with rms_norm_mul * Non-broadcast fuse works * Add fused adds * format * Remove n_fuse from template params * Address review comments * Move template inside binbcast --- ggml/src/ggml-cuda/binbcast.cu | 415 +++++++++++++++++++------------- ggml/src/ggml-cuda/binbcast.cuh | 2 + ggml/src/ggml-cuda/ggml-cuda.cu | 58 ++++- ggml/src/ggml-cuda/norm.cu | 211 ++++++++++++++-- ggml/src/ggml-cuda/norm.cuh | 5 + 5 files changed, 501 insertions(+), 190 deletions(-) diff --git a/ggml/src/ggml-cuda/binbcast.cu b/ggml/src/ggml-cuda/binbcast.cu index e1fbf0e136..99a98fcbfc 100644 --- a/ggml/src/ggml-cuda/binbcast.cu +++ b/ggml/src/ggml-cuda/binbcast.cu @@ -1,5 +1,6 @@ #include "binbcast.cuh" #include +#include static __device__ __forceinline__ float op_repeat(const float a, const float b) { return b; @@ -22,13 +23,16 @@ static __device__ __forceinline__ float op_div(const float a, const float b) { return a / b; } -template + + +template static __global__ void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst, - int ne0, int ne1, int ne2, int ne3, - int ne10, int ne11, int ne12, int ne13, - /*int s0, */ int s1, int s2, int s3, - /*int s00,*/ int s01, int s02, int s03, - /*int s10,*/ int s11, int s12, int s13) { + const int ne0, const int ne1, const int ne2, const int ne3, + const int ne10, const int ne11, const int ne12, const int ne13, + /*int s0, */ const int s1, const int s2, const int s3, + /*int s00,*/ const int s01, const int s02, const int s03, + /*int s10,*/ const int s11, const int s12, const int s13, + src1_ptrs... src1s) { const int i0s = blockDim.x*blockIdx.x + threadIdx.x; const int i1 = (blockDim.y*blockIdx.y + threadIdx.y); const int i2 = (blockDim.z*blockIdx.z + threadIdx.z) / ne3; @@ -46,24 +50,27 @@ static __global__ void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst const size_t i_src1 = i13*s13 + i12*s12 + i11*s11; const size_t i_dst = i3*s3 + i2*s2 + i1*s1; - const src0_t * src0_row = src0 + i_src0; - const src1_t * src1_row = src1 + i_src1; + const src0_t * src0_row = src0 ? (src0 + i_src0) : nullptr; dst_t * dst_row = dst + i_dst; for (int i0 = i0s; i0 < ne0; i0 += blockDim.x*gridDim.x) { const int i10 = i0 % ne10; - dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]); + + float result = src0_row ? (float) src0_row[i0] : 0.0f; + result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10]))); + + dst_row[i0] = (dst_t) result; } } -template -static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst, - int ne0, int ne1, int ne2, int ne3, - int ne10, int ne11, int ne12, int ne13, - /*int s0, */ int s1, int s2, int s3, - /*int s00,*/ int s01, int s02, int s03, - /*int s10,*/ int s11, int s12, int s13) { - +template +static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst, + const int ne0, const int ne1, const int ne2,const int ne3, + const int ne10, const int ne11, const int ne12, const int ne13, + /*int s0, */ const int s1, const int s2, const int s3, + /*int s00,*/ const int s01, const int s02, const int s03, + /*int s10,*/ const int s11, const int s12, const int s13, + src1_ptrs ... src1s) { const int i = blockDim.x*blockIdx.x + threadIdx.x; const int i3 = i/(ne2*ne1*ne0); @@ -83,12 +90,166 @@ static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * s const size_t i_src1 = i13*s13 + i12*s12 + i11*s11; const size_t i_dst = i3*s3 + i2*s2 + i1*s1; - const src0_t * src0_row = src0 + i_src0; - const src1_t * src1_row = src1 + i_src1; + const src0_t * src0_row = src0 ? (src0 + i_src0) : nullptr; dst_t * dst_row = dst + i_dst; const int i10 = i0 % ne10; - dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]); + + float result = src0_row ? (float) src0_row[i0] : 0.0f; + result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10]))); + + dst_row[i0] = (dst_t) result; +} + +template +static void launch_bin_bcast_pack(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, + const src0_t * src0_dd, const src1_t * src1_dd, dst_t * dst_dd, + cudaStream_t stream, std::index_sequence) { + GGML_TENSOR_BINARY_OP_LOCALS + + int nr0 = ne10 / ne0; + int nr1 = ne11 / ne1; + int nr2 = ne12 / ne2; + int nr3 = ne13 / ne3; + + int nr[4] = { nr0, nr1, nr2, nr3 }; + + int64_t cne[] = { ne0, ne1, ne2, ne3 }; + int64_t cne0[] = { ne00, ne01, ne02, ne03 }; + int64_t cne1[] = { ne10, ne11, ne12, ne13 }; + + size_t cnb[] = { nb0, nb1, nb2, nb3 }; + size_t cnb0[] = { nb00, nb01, nb02, nb03 }; + size_t cnb1[] = { nb10, nb11, nb12, nb13 }; + + auto collapse = [](int64_t cne[]) { + cne[0] *= cne[1]; + cne[1] = cne[2]; + cne[2] = cne[3]; + cne[3] = 1; + }; + + auto collapse_nb = [](size_t cnb[], const int64_t cne[]) { + cnb[1] *= cne[1]; + cnb[2] *= cne[2]; + cnb[3] *= cne[3]; + }; + + if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && ggml_is_contiguous(dst)) { + for (int i = 0; i < 4; i++) { + if (nr[i] != 1) { + break; + } + if (i > 0) { + collapse_nb(cnb, cne); + collapse_nb(cnb0, cne0); + collapse_nb(cnb1, cne1); + collapse(cne); + collapse(cne0); + collapse(cne1); + } + } + } + + { + int64_t ne0 = cne[0]; + int64_t ne1 = cne[1]; + int64_t ne2 = cne[2]; + int64_t ne3 = cne[3]; + + //int64_t ne00 = cne0[0]; GGML_UNUSED(ne00); + //int64_t ne01 = cne0[1]; GGML_UNUSED(ne01); + //int64_t ne02 = cne0[2]; GGML_UNUSED(ne02); + //int64_t ne03 = cne0[3]; GGML_UNUSED(ne03); + + int64_t ne10 = cne1[0]; + int64_t ne11 = cne1[1]; + int64_t ne12 = cne1[2]; + int64_t ne13 = cne1[3]; + + size_t nb0 = cnb[0]; + size_t nb1 = cnb[1]; + size_t nb2 = cnb[2]; + size_t nb3 = cnb[3]; + + size_t nb00 = cnb0[0]; + size_t nb01 = cnb0[1]; + size_t nb02 = cnb0[2]; + size_t nb03 = cnb0[3]; + + size_t nb10 = cnb1[0]; + size_t nb11 = cnb1[1]; + size_t nb12 = cnb1[2]; + size_t nb13 = cnb1[3]; + + size_t s0 = nb0 / sizeof(dst_t); + size_t s1 = nb1 / sizeof(dst_t); + size_t s2 = nb2 / sizeof(dst_t); + size_t s3 = nb3 / sizeof(dst_t); + + size_t s10 = nb10 / sizeof(src1_t); + size_t s11 = nb11 / sizeof(src1_t); + size_t s12 = nb12 / sizeof(src1_t); + size_t s13 = nb13 / sizeof(src1_t); + + size_t s00 = nb00 / sizeof(src0_t); + size_t s01 = nb01 / sizeof(src0_t); + size_t s02 = nb02 / sizeof(src0_t); + size_t s03 = nb03 / sizeof(src0_t); + + GGML_ASSERT(nb0 % sizeof(dst_t) == 0); + GGML_ASSERT(nb1 % sizeof(dst_t) == 0); + GGML_ASSERT(nb2 % sizeof(dst_t) == 0); + GGML_ASSERT(nb3 % sizeof(dst_t) == 0); + + GGML_ASSERT(nb00 % sizeof(src0_t) == 0); + GGML_ASSERT(nb01 % sizeof(src0_t) == 0); + GGML_ASSERT(nb02 % sizeof(src0_t) == 0); + GGML_ASSERT(nb03 % sizeof(src0_t) == 0); + + GGML_ASSERT(nb10 % sizeof(src1_t) == 0); + GGML_ASSERT(nb11 % sizeof(src1_t) == 0); + GGML_ASSERT(nb12 % sizeof(src1_t) == 0); + GGML_ASSERT(nb13 % sizeof(src1_t) == 0); + + GGML_ASSERT(s0 == 1); + GGML_ASSERT(s00 == 1); + GGML_ASSERT(s10 == 1); + + const int block_size = 128; + + int64_t hne0 = std::max(ne0 / 2LL, 1LL); + + dim3 block_dims; + block_dims.x = std::min(hne0, block_size); + block_dims.y = std::min(ne1, block_size / block_dims.x); + block_dims.z = std::min(std::min(ne2 * ne3, block_size / block_dims.x / block_dims.y), 64U); + + dim3 block_nums((hne0 + block_dims.x - 1) / block_dims.x, + (ne1 + block_dims.y - 1) / block_dims.y, + (ne2 * ne3 + block_dims.z - 1) / block_dims.z); + + if (block_nums.z > 65535) { + int block_num = (ne0 * ne1 * ne2 * ne3 + block_size - 1) / block_size; + k_bin_bcast_unravel + <<>>(src0_dd, src1_dd, dst_dd, + ne0, ne1, ne2, ne3, + ne10, ne11, ne12, ne13, + /* s0, */ s1, s2, s3, + /* s00,*/ s01, s02, s03, + /* s10,*/ s11, s12,s13, + (const src1_t *) dst->src[I + 1]->data...); + } else { + k_bin_bcast + <<>>(src0_dd, src1_dd, dst_dd, + ne0, ne1, ne2, ne3, + ne10, ne11, ne12, ne13, + /* s0, */ s1, s2, s3, + /* s00,*/ s01, s02, s03, + /* s10,*/ s11, s12,s13, + (const src1_t *) dst->src[I + 1]->data...); + } + } } template @@ -120,160 +281,14 @@ static __global__ void k_repeat_back( dst[tid3*ne2*ne1*ne0 + tid2*ne1*ne0 + tid1*ne0 + tid0] = sum; } -template +template struct bin_bcast_cuda { template void operator()(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, const src0_t * src0_dd, const src1_t * src1_dd, dst_t * dst_dd, cudaStream_t stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - int nr0 = ne10/ne0; - int nr1 = ne11/ne1; - int nr2 = ne12/ne2; - int nr3 = ne13/ne3; - - int nr[4] = { nr0, nr1, nr2, nr3 }; - - // collapse dimensions until first broadcast dimension - int64_t cne[] = {ne0, ne1, ne2, ne3}; - int64_t cne0[] = {ne00, ne01, ne02, ne03}; - int64_t cne1[] = {ne10, ne11, ne12, ne13}; - - size_t cnb[] = {nb0, nb1, nb2, nb3}; - size_t cnb0[] = {nb00, nb01, nb02, nb03}; - size_t cnb1[] = {nb10, nb11, nb12, nb13}; - - auto collapse = [](int64_t cne[]) { - cne[0] *= cne[1]; - cne[1] = cne[2]; - cne[2] = cne[3]; - cne[3] = 1; - }; - - auto collapse_nb = [](size_t cnb[], const int64_t cne[]) { - cnb[1] *= cne[1]; - cnb[2] *= cne[2]; - cnb[3] *= cne[3]; - }; - - if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && ggml_is_contiguous(dst)) { - for (int i = 0; i < 4; i++) { - if (nr[i] != 1) { - break; - } - if (i > 0) { - collapse_nb(cnb, cne); - collapse_nb(cnb0, cne0); - collapse_nb(cnb1, cne1); - collapse(cne); - collapse(cne0); - collapse(cne1); - } - } - } - - { - int64_t ne0 = cne[0]; - int64_t ne1 = cne[1]; - int64_t ne2 = cne[2]; - int64_t ne3 = cne[3]; - - //int64_t ne00 = cne0[0]; GGML_UNUSED(ne00); - //int64_t ne01 = cne0[1]; GGML_UNUSED(ne01); - //int64_t ne02 = cne0[2]; GGML_UNUSED(ne02); - //int64_t ne03 = cne0[3]; GGML_UNUSED(ne03); - - int64_t ne10 = cne1[0]; - int64_t ne11 = cne1[1]; - int64_t ne12 = cne1[2]; - int64_t ne13 = cne1[3]; - - size_t nb0 = cnb[0]; - size_t nb1 = cnb[1]; - size_t nb2 = cnb[2]; - size_t nb3 = cnb[3]; - - size_t nb00 = cnb0[0]; - size_t nb01 = cnb0[1]; - size_t nb02 = cnb0[2]; - size_t nb03 = cnb0[3]; - - size_t nb10 = cnb1[0]; - size_t nb11 = cnb1[1]; - size_t nb12 = cnb1[2]; - size_t nb13 = cnb1[3]; - - size_t s0 = nb0 / sizeof(dst_t); - size_t s1 = nb1 / sizeof(dst_t); - size_t s2 = nb2 / sizeof(dst_t); - size_t s3 = nb3 / sizeof(dst_t); - - size_t s10 = nb10 / sizeof(src1_t); - size_t s11 = nb11 / sizeof(src1_t); - size_t s12 = nb12 / sizeof(src1_t); - size_t s13 = nb13 / sizeof(src1_t); - - size_t s00 = nb00 / sizeof(src0_t); - size_t s01 = nb01 / sizeof(src0_t); - size_t s02 = nb02 / sizeof(src0_t); - size_t s03 = nb03 / sizeof(src0_t); - - GGML_ASSERT(nb0 % sizeof(dst_t) == 0); - GGML_ASSERT(nb1 % sizeof(dst_t) == 0); - GGML_ASSERT(nb2 % sizeof(dst_t) == 0); - GGML_ASSERT(nb3 % sizeof(dst_t) == 0); - - GGML_ASSERT(nb00 % sizeof(src0_t) == 0); - GGML_ASSERT(nb01 % sizeof(src0_t) == 0); - GGML_ASSERT(nb02 % sizeof(src0_t) == 0); - GGML_ASSERT(nb03 % sizeof(src0_t) == 0); - - GGML_ASSERT(nb10 % sizeof(src1_t) == 0); - GGML_ASSERT(nb11 % sizeof(src1_t) == 0); - GGML_ASSERT(nb12 % sizeof(src1_t) == 0); - GGML_ASSERT(nb13 % sizeof(src1_t) == 0); - - GGML_ASSERT(s0 == 1); - GGML_ASSERT(s00 == 1); - GGML_ASSERT(s10 == 1); - - const int block_size = 128; - - int64_t hne0 = std::max(ne0/2LL, 1LL); - - dim3 block_dims; - block_dims.x = std::min(hne0, block_size); - block_dims.y = std::min(ne1, block_size / block_dims.x); - block_dims.z = std::min(std::min(ne2*ne3, block_size / block_dims.x / block_dims.y), 64U); - - dim3 block_nums( - (hne0 + block_dims.x - 1) / block_dims.x, - (ne1 + block_dims.y - 1) / block_dims.y, - (ne2*ne3 + block_dims.z - 1) / block_dims.z - ); - - if (block_nums.z > 65535) { - // this is the maximum number of blocks in z dimension, fallback to 1D grid kernel - int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size; - k_bin_bcast_unravel<<>>( - src0_dd, src1_dd, dst_dd, - ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, - /* s0, */ s1, s2, s3, - /* s00, */ s01, s02, s03, - /* s10, */ s11, s12, s13); - } else { - k_bin_bcast<<>>( - src0_dd, src1_dd, dst_dd, - ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, - /* s0, */ s1, s2, s3, - /* s00, */ s01, s02, s03, - /* s10, */ s11, s12, s13); - } - } + launch_bin_bcast_pack( + src0, src1, dst, src0_dd, src1_dd, dst_dd, stream, std::make_index_sequence{}); } }; @@ -331,6 +346,68 @@ void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { ggml_cuda_op_bin_bcast>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream()); } +template +static void ggml_cuda_op_fused_binbcast_impl(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { + cudaStream_t stream = ctx.stream(); + + const ggml_tensor * src0 = dst->src[0]; + const ggml_tensor * src1 = dst->src[1]; + + if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { + launch_bin_bcast_pack(src0, src1, dst, + (const float *) src0->data, (const float *) src1->data, (float *) dst->data, + stream, std::make_index_sequence{}); + } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { + launch_bin_bcast_pack(src0, src1, dst, + (const half *) src0->data, (const half *) src1->data, (half *) dst->data, + stream, std::make_index_sequence{}); + } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F16) { + launch_bin_bcast_pack(src0, src1, dst, + (const half *) src0->data, (const float *) src1->data, (half *) dst->data, + stream, std::make_index_sequence{}); + } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { + launch_bin_bcast_pack(src0, src1, dst, + (const half *) src0->data, (const float *) src1->data, (float *) dst->data, + stream, std::make_index_sequence{}); + } else { + fprintf(stderr, + "%s: unsupported types for fusion: dst: %s, src0: %s, src1: %s\n", + __func__, ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type)); + GGML_ABORT("fatal error"); + } +} + + +void ggml_cuda_op_fused_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst, int n_fuse) { + GGML_ASSERT(2 <= n_fuse && n_fuse <= 8); + + switch (n_fuse) { + case 2: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + case 3: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + case 4: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + case 5: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + case 6: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + case 7: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + case 8: + ggml_cuda_op_fused_binbcast_impl(ctx, dst); + break; + default: + GGML_ASSERT(false && "Unsupported n_fuse value"); + } +} + void ggml_cuda_op_repeat_back(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { const ggml_tensor * src0 = dst->src[0]; diff --git a/ggml/src/ggml-cuda/binbcast.cuh b/ggml/src/ggml-cuda/binbcast.cuh index 3ac1c9b03f..62bc950111 100644 --- a/ggml/src/ggml-cuda/binbcast.cuh +++ b/ggml/src/ggml-cuda/binbcast.cuh @@ -7,3 +7,5 @@ void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst); void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst); void ggml_cuda_op_repeat_back(ggml_backend_cuda_context & ctx, ggml_tensor * dst); + +void ggml_cuda_op_fused_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst, int n_fuse); diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 4c02b57227..6a1b0fc936 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -2821,9 +2821,14 @@ static bool ggml_cuda_can_fuse(const struct ggml_cgraph * cgraph, int node_idx, return false; } - if (ops.size() == 2 && ops.begin()[0] == GGML_OP_RMS_NORM && ops.begin()[1] == GGML_OP_MUL) { + if ((ops.size() == 2 || ops.size() == 3) && ops.begin()[0] == GGML_OP_RMS_NORM && ops.begin()[1] == GGML_OP_MUL) { const ggml_tensor *rms_norm = cgraph->nodes[node_idx]; const ggml_tensor *mul = cgraph->nodes[node_idx+1]; + const ggml_tensor *add = nullptr; + + if (ops.size() == 3 && ops.begin()[2] == GGML_OP_ADD) { + add = cgraph->nodes[node_idx+1]; + } GGML_ASSERT(rms_norm->src[0]->type == GGML_TYPE_F32); GGML_ASSERT(rms_norm->type == GGML_TYPE_F32); @@ -2835,6 +2840,12 @@ static bool ggml_cuda_can_fuse(const struct ggml_cgraph * cgraph, int node_idx, return false; } + if (add && (add->src[0]->type != GGML_TYPE_F32 || + add->src[1]->type != GGML_TYPE_F32 || + add->type != GGML_TYPE_F32) ) { + return false; + } + //if rms norm is the B operand, then we don't handle broadcast if (rms_norm == mul->src[1] && !ggml_are_same_shape(mul->src[0], rms_norm->src[1])) { return false; @@ -2845,6 +2856,10 @@ static bool ggml_cuda_can_fuse(const struct ggml_cgraph * cgraph, int node_idx, return false; } + if (add && (!ggml_is_contiguous(add->src[0]) || !ggml_is_contiguous_rows(add->src[1]))) { + return false; + } + return true; } @@ -2891,7 +2906,46 @@ static void evaluate_and_capture_cuda_graph(ggml_backend_cuda_context * cuda_ctx static bool disable_fusion = (getenv("GGML_CUDA_DISABLE_FUSION") != nullptr); if (!disable_fusion) { - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL }, {})) { + + if (node->op == GGML_OP_ADD) { + int n_fuse = 0; + ggml_op ops[8]; + std::fill(ops, ops + 8, GGML_OP_ADD); + + for (; n_fuse <= 6; ++n_fuse){ + if (!ggml_can_fuse(cgraph, i + n_fuse, ops + n_fuse, 2)) { + break; + } + if (cgraph->nodes[i + n_fuse] != cgraph->nodes[i + n_fuse + 1]->src[0]) { + break; + } + if (!ggml_are_same_layout(cgraph->nodes[i + n_fuse]->src[1], cgraph->nodes[i + n_fuse + 1]->src[1])) { + break; + } + } + + n_fuse++; + + if (n_fuse > 1) { + for (int j = 0; j < n_fuse - 1; ++j) { + node->src[j + 2] = cgraph->nodes[i + j + 1]->src[1]; + } + cgraph->nodes[i + n_fuse - 1]->data = node->data; + ggml_cuda_op_fused_add(*cuda_ctx, node, n_fuse); + i += n_fuse - 1; + + continue; + } + } + + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL, GGML_OP_ADD}, {})) { + ggml_cuda_op_rms_norm_fused_add(*cuda_ctx, node, cgraph->nodes[i+1], cgraph->nodes[i+2]); + i += 2; + continue; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL}, {})) { ggml_cuda_op_rms_norm_fused(*cuda_ctx, node, cgraph->nodes[i+1]); i++; continue; diff --git a/ggml/src/ggml-cuda/norm.cu b/ggml/src/ggml-cuda/norm.cu index bddcca51b7..293f6f68e5 100644 --- a/ggml/src/ggml-cuda/norm.cu +++ b/ggml/src/ggml-cuda/norm.cu @@ -104,12 +104,29 @@ static __global__ void group_norm_f32(const float * x, float * dst, const int gr } } -template -static __global__ void rms_norm_f32( - const float * x, float * dst, const int ncols, const int64_t stride_row, const int64_t stride_channel, - const int64_t stride_sample, const float eps, const float * mul = nullptr, const int64_t mul_stride_row = 0, - const int64_t mul_stride_channel = 0, const int64_t mul_stride_sample = 0, const int mul_ncols = 0, - const int mul_nrows = 0, const int mul_nchannels = 0, const int mul_nsamples = 0) { +template +static __global__ void rms_norm_f32(const float * x, float * dst, + const int ncols, + const int64_t stride_row, + const int64_t stride_channel, + const int64_t stride_sample, + const float eps, + const float * mul = nullptr, + const int64_t mul_stride_row = 0, + const int64_t mul_stride_channel = 0, + const int64_t mul_stride_sample = 0, + const int mul_ncols = 0, + const int mul_nrows = 0, + const int mul_nchannels = 0, + const int mul_nsamples = 0, + const float * add = nullptr, + const int64_t add_stride_row = 0, + const int64_t add_stride_channel = 0, + const int64_t add_stride_sample = 0, + const int add_ncols = 0, + const int add_nrows = 0, + const int add_nchannels = 0, + const int add_nsamples = 0) { const int nrows = gridDim.x; const int nchannels = gridDim.y; @@ -128,6 +145,13 @@ static __global__ void rms_norm_f32( mul += mul_sample*mul_stride_sample + mul_channel*mul_stride_channel + mul_row*mul_stride_row; } + if constexpr (do_add) { + const int add_row = row % add_nrows; + const int add_channel = channel % add_nchannels; + const int add_sample = sample % add_nsamples; + add += add_sample * add_stride_sample + add_channel * add_stride_channel + add_row * add_stride_row; + } + float tmp = 0.0f; // partial sum for thread in warp for (int col = tid; col < ncols; col += block_size) { @@ -154,9 +178,16 @@ static __global__ void rms_norm_f32( const float scale = rsqrtf(mean + eps); for (int col = tid; col < ncols; col += block_size) { - if constexpr (do_multiply) { + if constexpr (do_multiply && do_add) { + const int mul_col = col % mul_ncols; + const int add_col = col % add_ncols; + dst[col] = scale * x[col] * mul[mul_col] + add[add_col]; + } else if constexpr (do_multiply) { const int mul_col = col % mul_ncols; dst[col] = scale * x[col] * mul[mul_col]; + } else if constexpr (do_add) { + const int add_col = col % add_ncols; + dst[col] += add[add_col]; } else { dst[col] = scale * x[col]; } @@ -331,23 +362,70 @@ static void rms_norm_f32_cuda( } } -static void rms_norm_mul_f32_cuda( - const float * x, const float * mul, float * dst, const int ncols, const int nrows, const int nchannels, const int nsamples, - const int64_t stride_row, const int64_t stride_channel, const int64_t stride_sample, - const int64_t mul_stride_row, const int64_t mul_stride_channel, const int64_t mul_stride_sample, - const int mul_ncols, const int mul_nrows, const int mul_nchannels, const int mul_nsamples, - const float eps, cudaStream_t stream) { +static void rms_norm_mul_f32_cuda(const float * x, + const float * mul, + const float * add, + float * dst, + const int ncols, + const int nrows, + const int nchannels, + const int nsamples, + const int64_t stride_row, + const int64_t stride_channel, + const int64_t stride_sample, + const int64_t mul_stride_row, + const int64_t mul_stride_channel, + const int64_t mul_stride_sample, + const int mul_ncols, + const int mul_nrows, + const int mul_nchannels, + const int mul_nsamples, + const int64_t add_stride_row, + const int64_t add_stride_channel, + const int64_t add_stride_sample, + const int add_ncols, + const int add_nrows, + const int add_nchannels, + const int add_nsamples, + const float eps, + cudaStream_t stream) { const dim3 blocks_num(nrows, nchannels, nsamples); if (mul == nullptr) { rms_norm_f32_cuda(x, dst, ncols, nrows, nchannels, nsamples, stride_row, stride_channel, stride_sample, eps, stream); return; } - if (ncols < 1024) { - const dim3 block_dims(WARP_SIZE, 1, 1); - rms_norm_f32<<>>(x, dst, ncols, stride_row, stride_channel, stride_sample, eps, mul, mul_stride_row, mul_stride_channel, mul_stride_sample, mul_ncols, mul_nrows, mul_nchannels, mul_nsamples); + if (add == nullptr) { + if (ncols < 1024) { + const dim3 block_dims(WARP_SIZE, 1, 1); + rms_norm_f32<<>>(x, dst, + ncols, stride_row, stride_channel, stride_sample, eps, + mul, mul_stride_row, mul_stride_channel, mul_stride_sample, + mul_ncols, mul_nrows, mul_nchannels, mul_nsamples); + } else { + const dim3 block_dims(1024, 1, 1); + rms_norm_f32<1024, true><<>>(x, dst, + ncols, stride_row, stride_channel, stride_sample, eps, + mul, mul_stride_row, mul_stride_channel, mul_stride_sample, + mul_ncols, mul_nrows, mul_nchannels, mul_nsamples); + } } else { - const dim3 block_dims(1024, 1, 1); - rms_norm_f32<1024, true><<>>(x, dst, ncols, stride_row, stride_channel, stride_sample, eps, mul, mul_stride_row, mul_stride_channel, mul_stride_sample, mul_ncols, mul_nrows, mul_nchannels, mul_nsamples); + if (ncols < 1024) { + const dim3 block_dims(WARP_SIZE, 1, 1); + rms_norm_f32<<>>(x, dst, + ncols, stride_row, stride_channel, stride_sample, eps, + mul, mul_stride_row, mul_stride_channel, mul_stride_sample, + mul_ncols, mul_nrows, mul_nchannels, mul_nsamples, + add, add_stride_row, add_stride_channel, add_stride_sample, + add_ncols, add_nrows, add_nchannels, add_nsamples); + } else { + const dim3 block_dims(1024, 1, 1); + rms_norm_f32<1024, true, true><<>>(x, dst, + ncols, stride_row, stride_channel, stride_sample, eps, + mul, mul_stride_row, mul_stride_channel, mul_stride_sample, + mul_ncols, mul_nrows, mul_nchannels, mul_nsamples, + add, add_stride_row, add_stride_channel, add_stride_sample, + add_ncols, add_nrows, add_nchannels, add_nsamples); + } } } @@ -491,7 +569,102 @@ void ggml_cuda_op_rms_norm_fused(ggml_backend_cuda_context & ctx, ggml_tensor * const int mul_nchannels = mul_src->ne[2]; const int mul_nsamples = mul_src->ne[3]; - rms_norm_mul_f32_cuda(src0_d, mul_d, dst_d, ne00, ne01, ne02, ne03, s01, s02, s03, mul_s01, mul_s02, mul_s03, mul_ncols, mul_nrows, mul_nchannels, mul_nsamples, eps, stream); + rms_norm_mul_f32_cuda(src0_d, mul_d, nullptr, dst_d, + ne00, ne01, ne02, ne03, + /*s00*/ s01, s02, s03, + /*mul_s00*/ mul_s01, mul_s02, mul_s03, + mul_ncols, mul_nrows, mul_nchannels, mul_nsamples, + /*add_s00*/ 0, 0, 0, + 0, 0, 0, 0, + eps, stream); +} + +void ggml_cuda_op_rms_norm_fused_add(ggml_backend_cuda_context & ctx, + ggml_tensor * dst, + ggml_tensor * mul_tensor, + ggml_tensor * add_tensor) { + const ggml_tensor * rms_norm_src = (ggml_tensor *) dst->src[0]; + float eps = 0.0f; + + memcpy(&eps, dst->op_params, sizeof(float)); + + const float * src0_d = (const float *) rms_norm_src->data; + const float * mul_d = nullptr; + const ggml_tensor * mul_src = nullptr; + + if (mul_tensor->src[0] == dst) { + mul_d = (float *) mul_tensor->src[1]->data; + mul_src = mul_tensor->src[1]; + } else if (mul_tensor->src[1] == dst) { + mul_d = (float *) mul_tensor->src[0]->data; + mul_src = mul_tensor->src[0]; + } else { + GGML_ASSERT(false); + } + + const float * add_d = nullptr; + const ggml_tensor * add_src = nullptr; + + if (add_tensor->src[0] == mul_tensor) { + add_d = (float *) add_tensor->src[1]->data; + add_src = add_tensor->src[1]; + } else if (add_tensor->src[1] == mul_tensor) { + add_d = (float *) add_tensor->src[0]->data; + add_src = add_tensor->src[0]; + } else { + GGML_ASSERT(false); + } + + float * dst_d = (float *) add_tensor->data; + cudaStream_t stream = ctx.stream(); + + GGML_ASSERT(rms_norm_src->type == GGML_TYPE_F32); + GGML_ASSERT(dst->type == GGML_TYPE_F32); + GGML_ASSERT(mul_tensor->type == GGML_TYPE_F32); + GGML_ASSERT(add_tensor->type == GGML_TYPE_F32); + GGML_ASSERT(eps >= 0.0f); + + const int64_t ne00 = rms_norm_src->ne[0]; + const int64_t ne01 = rms_norm_src->ne[1]; + const int64_t ne02 = rms_norm_src->ne[2]; + const int64_t ne03 = rms_norm_src->ne[3]; + + const size_t ts0 = ggml_type_size(rms_norm_src->type); + GGML_ASSERT(rms_norm_src->nb[0] == ts0); + const int64_t s01 = rms_norm_src->nb[1] / ts0; + const int64_t s02 = rms_norm_src->nb[2] / ts0; + const int64_t s03 = rms_norm_src->nb[3] / ts0; + + const size_t ts_mul = ggml_type_size(mul_src->type); + GGML_ASSERT(mul_src->nb[0] == ts_mul); + const int64_t mul_s01 = mul_src->nb[1] / ts_mul; + const int64_t mul_s02 = mul_src->nb[2] / ts_mul; + const int64_t mul_s03 = mul_src->nb[3] / ts_mul; + + const int mul_ncols = mul_src->ne[0]; + const int mul_nrows = mul_src->ne[1]; + const int mul_nchannels = mul_src->ne[2]; + const int mul_nsamples = mul_src->ne[3]; + + const size_t ts_add = ggml_type_size(add_src->type); + GGML_ASSERT(add_src->nb[0] == ts_add); + const int64_t add_s01 = add_src->nb[1] / ts_add; + const int64_t add_s02 = add_src->nb[2] / ts_add; + const int64_t add_s03 = add_src->nb[3] / ts_add; + + const int add_ncols = add_src->ne[0]; + const int add_nrows = add_src->ne[1]; + const int add_nchannels = add_src->ne[2]; + const int add_nsamples = add_src->ne[3]; + + rms_norm_mul_f32_cuda(src0_d, mul_d,add_d,dst_d, + ne00,ne01, ne02, ne03, + /*s00*/ s01, s02, s03, + /*mul_s00*/ mul_s01, mul_s02, mul_s03, + mul_ncols, mul_nrows, mul_nchannels, mul_nsamples, + /*add_s00*/ add_s01, add_s02, add_s03, + add_ncols, add_nrows, add_nchannels, add_nsamples, + eps, stream); } void ggml_cuda_op_rms_norm_back(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { diff --git a/ggml/src/ggml-cuda/norm.cuh b/ggml/src/ggml-cuda/norm.cuh index 7ea7bd4df3..a74f637672 100644 --- a/ggml/src/ggml-cuda/norm.cuh +++ b/ggml/src/ggml-cuda/norm.cuh @@ -8,6 +8,11 @@ void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst); void ggml_cuda_op_rms_norm_fused(ggml_backend_cuda_context & ctx, ggml_tensor * dst, ggml_tensor * mul_tensor); +void ggml_cuda_op_rms_norm_fused_add(ggml_backend_cuda_context & ctx, + ggml_tensor * dst, + ggml_tensor * mul_tensor, + ggml_tensor * add_tensor); + void ggml_cuda_op_rms_norm_back(ggml_backend_cuda_context & ctx, ggml_tensor * dst); void ggml_cuda_op_l2_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst); From 60e5eee31f1af9bb579ac45380e3857d610020b9 Mon Sep 17 00:00:00 2001 From: "Piotr Wilkin (ilintar)" Date: Fri, 29 Aug 2025 14:53:41 +0200 Subject: [PATCH 148/174] chat : Seed OSS thinking + tool call support (#15552) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Reasoning and tool-calling support for Seed OSS * Fix grammar and partial parsing * Whitespace * New chat template * Update common/chat.cpp Co-authored-by: Sigbjørn Skjæret * Update common/chat.cpp Co-authored-by: Sigbjørn Skjæret * Remove unused 'purge_healing_marker' helper --------- Co-authored-by: Sigbjørn Skjæret --- common/chat.cpp | 153 ++++++++++++++++++- common/chat.h | 1 + models/templates/ByteDance-Seed-OSS.jinja | 171 ++++++++++++++++++++++ tests/test-chat.cpp | 134 +++++++++++++++++ 4 files changed, 458 insertions(+), 1 deletion(-) create mode 100644 models/templates/ByteDance-Seed-OSS.jinja diff --git a/common/chat.cpp b/common/chat.cpp index 111b4a21b3..955c42852a 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -622,6 +622,7 @@ const char * common_chat_format_name(common_chat_format format) { case COMMON_CHAT_FORMAT_COMMAND_R7B: return "Command R7B"; case COMMON_CHAT_FORMAT_GRANITE: return "Granite"; case COMMON_CHAT_FORMAT_GPT_OSS: return "GPT-OSS"; + case COMMON_CHAT_FORMAT_SEED_OSS: return "Seed-OSS"; default: throw std::runtime_error("Unknown chat format"); } @@ -2059,6 +2060,94 @@ static void common_chat_parse_granite(common_chat_msg_parser & builder) { } } +static void common_chat_parse_seed_oss(common_chat_msg_parser & builder) { + // Parse thinking tags first - this handles the main reasoning content + builder.try_parse_reasoning("", ""); + + if (!builder.syntax().parse_tool_calls) { + builder.add_content(builder.consume_rest()); + return; + } + + // Parse tool calls - Seed-OSS uses format + static const common_regex tool_call_begin_regex(""); + static const common_regex tool_call_end_regex(""); + static const common_regex function_regex("]+)>"); + static const common_regex param_regex("]+)>"); + + while (auto tool_res = builder.try_find_regex(tool_call_begin_regex)) { + builder.consume_spaces(); // Consume whitespace after + + // Look for function call inside tool call, ignore any content before it + if (auto func_res = builder.try_find_regex(function_regex, std::string::npos, false)) { + auto function_name = builder.str(func_res->groups[1]); + + // Parse Seed-OSS parameters value + json args = json::object(); + // Parse all parameters + while (auto param_res = builder.try_find_regex(param_regex, std::string::npos, false)) { + // again, ignore noise around parameters + auto param_name = builder.str(param_res->groups[1]); + builder.move_to(param_res->groups[0].end); + builder.consume_spaces(); // Consume whitespace after parameter + auto savedPos = builder.pos(); + if (auto param_parse = builder.try_find_literal("")) { + auto param = param_parse->prelude; + builder.move_to(savedPos); + try { + if (auto param_res = builder.try_consume_json()) { + args[param_name] = param_res->json; + } else { + args[param_name] = param; + } + } catch (json::exception &) { + args[param_name] = param; + } + } else { + throw common_chat_msg_partial_exception("Incomplete tool parameter"); + } + } + // Look for closing function tag + auto end_func = builder.try_find_literal(""); + if (end_func) { + builder.move_to(end_func->groups[0].end); + builder.consume_spaces(); // Consume whitespace after + + // Add the tool call with parsed arguments, but only if we REALLY got the literal + auto eaten_fragment = builder.input().substr(end_func->groups[0].begin, end_func->groups[0].end); + auto funlen = std::string("").length(); + if (eaten_fragment.length() >= funlen && eaten_fragment.substr(0, funlen) == std::string("")) { + if (!builder.add_tool_call(function_name, "", args.dump())) { + throw common_chat_msg_partial_exception("Incomplete tool call"); + } + } else { + throw common_chat_msg_partial_exception("Incomplete tool call"); + } + } else { + throw common_chat_msg_partial_exception("Incomplete tool call"); + } + // Look for closing tool call tag + if (auto end_tool = builder.try_find_regex(tool_call_end_regex, std::string::npos, false)) { + builder.move_to(end_tool->groups[0].end); + builder.consume_spaces(); // Consume trailing whitespace after tool call + } else { + throw common_chat_msg_partial_exception("Incomplete tool call"); + } + } else { + // No function found - don't consume content here, let it be handled at the end + break; + } + } + + // Consume any remaining whitespace after all tool call processing + builder.consume_spaces(); + auto remaining = builder.consume_rest(); + // If there's any non-whitespace content remaining, add it as content + if (!string_strip(remaining).empty()) { + builder.add_content(remaining); + } +} + static common_chat_params common_chat_params_init_without_tools(const common_chat_template & tmpl, const struct templates_params & inputs) { common_chat_params data; data.prompt = apply(tmpl, inputs); @@ -2075,8 +2164,62 @@ static common_chat_params common_chat_params_init_without_tools(const common_cha return data; } +static common_chat_params common_chat_params_init_seed_oss( + const common_chat_template & tmpl, + templates_params & params, + const common_chat_templates_inputs & inputs) +{ + common_chat_params data; + data.prompt = apply(tmpl, params); + data.format = COMMON_CHAT_FORMAT_SEED_OSS; + if (string_ends_with(data.prompt, "")) { + if (!inputs.enable_thinking) { + data.prompt += ""; + } else { + data.thinking_forced_open = true; + } + } + + if (params.tools.is_array() && !params.tools.empty()) { + data.grammar_lazy = inputs.tool_choice != COMMON_CHAT_TOOL_CHOICE_REQUIRED; + data.grammar = build_grammar([&](const common_grammar_builder & builder) { + std::vector tool_rules; + foreach_function(params.tools, [&](const json & tool) { + const auto & function = tool.at("function"); + std::string name = function.at("name"); + auto parameters = function.at("parameters"); + builder.resolve_refs(parameters); + + // Create rule for Seed-OSS function call format + std::string param_rules; + if (parameters.contains("properties")) { + for (const auto & [key, value] : parameters.at("properties").items()) { + param_rules += "\"\"" + builder.add_schema(name + "-arg-" + key, value) + + "\"\""; + } + } + + tool_rules.push_back(builder.add_rule(name + "-call", + "\"\" space \"\" space " + + param_rules + + " \"\" space \"\"")); + }); + + data.grammar_triggers.push_back({ COMMON_GRAMMAR_TRIGGER_TYPE_WORD, "" }); + + data.preserved_tokens = { + "", "", "", "", + "", "", + }; + + builder.add_rule("root", string_join(tool_rules, " | ")); + }); + } + return data; +} + static common_chat_params common_chat_templates_apply_jinja( - const struct common_chat_templates * tmpls, + const struct common_chat_templates * tmpls, const struct common_chat_templates_inputs & inputs) { templates_params params; @@ -2145,6 +2288,11 @@ static common_chat_params common_chat_templates_apply_jinja( return common_chat_params_init_gpt_oss(tmpl, params); } + // Seed-OSS + if (src.find("") != std::string::npos) { + return common_chat_params_init_seed_oss(tmpl, params, inputs); + } + // Use generic handler when mixing tools + JSON schema. // TODO: support that mix in handlers below. if ((params.tools.is_array() && params.json_schema.is_object())) { @@ -2303,6 +2451,9 @@ static void common_chat_parse(common_chat_msg_parser & builder) { case COMMON_CHAT_FORMAT_GPT_OSS: common_chat_parse_gpt_oss(builder); break; + case COMMON_CHAT_FORMAT_SEED_OSS: + common_chat_parse_seed_oss(builder); + break; default: throw std::runtime_error(std::string("Unsupported format: ") + common_chat_format_name(builder.syntax().format)); } diff --git a/common/chat.h b/common/chat.h index d1e480c918..b09ff3b126 100644 --- a/common/chat.h +++ b/common/chat.h @@ -111,6 +111,7 @@ enum common_chat_format { COMMON_CHAT_FORMAT_COMMAND_R7B, COMMON_CHAT_FORMAT_GRANITE, COMMON_CHAT_FORMAT_GPT_OSS, + COMMON_CHAT_FORMAT_SEED_OSS, COMMON_CHAT_FORMAT_COUNT, // Not a format, just the # formats }; diff --git a/models/templates/ByteDance-Seed-OSS.jinja b/models/templates/ByteDance-Seed-OSS.jinja new file mode 100644 index 0000000000..903ebaaba7 --- /dev/null +++ b/models/templates/ByteDance-Seed-OSS.jinja @@ -0,0 +1,171 @@ +{# ----------‑‑‑ special token variables ‑‑‑---------- #} +{%- set bos_token = '' -%} +{%- set eos_token = '' -%} +{%- set pad_token = '' -%} +{%- set toolcall_begin_token = '' -%} +{%- set toolcall_end_token = '' -%} +{%- set think_begin_token = '' -%} +{%- set think_end_token = '' -%} +{%- set budget_begin_token = ''-%} +{%- set budget_end_token = ''-%} +{# -------------- reflection-interval lookup -------------- #} +{%- if not thinking_budget is defined %} +{%- set thinking_budget = -1 -%} +{%- endif -%} +{%- set budget_reflections_v05 = { + 0: 0, + 512: 128, + 1024: 256, + 2048: 512, + 4096: 512, + 8192: 1024, + 16384: 1024 +} -%} +{# Find the first gear that is greater than or equal to the thinking_budget. #} +{%- set ns = namespace(interval = None) -%} +{%- for k, v in budget_reflections_v05 | dictsort -%} + {%- if ns.interval is none and thinking_budget <= k -%} + {%- set ns.interval = v -%} + {%- endif -%} +{%- endfor -%} +{# If it exceeds the maximum gear, use the value of the last gear #} +{%- if ns.interval is none -%} + {%- set ns.interval = budget_reflections_v05[16384] -%} +{%- endif -%} +{# ---------- Preprocess the system message ---------- #} +{%- if messages[0]["role"] == "system" %} +{%- set system_message = messages[0]["content"] %} +{%- set loop_messages = messages[1:] %} +{%- else %} +{%- set loop_messages = messages %} +{%- endif %} +{# ---------- Ensure tools exist ---------- #} +{%- if not tools is defined or tools is none %} +{%- set tools = [] %} +{%- endif %} +{# tools2doc.jinja #} +{%- macro py_type(t) -%} + {%- if t == "string" -%}str + {%- elif t in ("number", "integer") -%}int + {%- elif t == "boolean" -%}bool + {%- elif t == "array" -%}list + {%- else -%}Any{%- endif -%} +{%- endmacro -%} +{# ---------- Output the system block ---------- #} +{%- if system_message is defined %} +{{ bos_token + "system\n" + system_message }} +{%- else %} +{%- if tools is iterable and tools | length > 0 %} +{{ bos_token + "system\nYou are Doubao, a helpful AI assistant. You may call one or more functions to assist with the user query." }} +{%- endif %} +{%- endif %} +{%- if use_json_tooldef is defined and use_json_tooldef %} + +{{"Tool List:\nYou are authorized to use the following tools (described in JSON Schema format). Before performing any task, you must decide how to call them based on the descriptions and parameters of these tools."}} +{{ tools | tojson(ensure_ascii=False) }} +{%- else %} +{%- for item in tools if item.type == "function" %} + + +Function: +def {{ item.function.name }}( +{%- for name, spec in item.function.parameters.properties.items() %} + {{- name }}: {{ py_type(spec.type) }}{% if not loop.last %},{% endif %} +{%- endfor %}): + """ + {{ item.function.description | trim }} + + {# ---------- Args ---------- #} + {%- if item.function.parameters.properties %} + Args: + {%- for name, spec in item.function.parameters.properties.items() %} + + - {{ name }} ({{ py_type(spec.type) }}) + {%- if name in item.function.parameters.required %} [必填]{% else %} [选填]{% endif %}: + {{- " " ~ (spec.description or "") }} + {%- endfor %} + {%- endif %} + + {# ---------- Returns ---------- #} + {%- if item.function.returns is defined + and item.function.returns.properties is defined + and item.function.returns.properties %} + Returns: + {%- for name, spec in item.function.returns.properties.items() %} + + - {{ name }} ({{ py_type(spec.type) }}): + {{- " " ~ (spec.description or "") }} + {%- endfor %} + {%- endif %} + + """ +{%- endfor %} +{%- endif %} +{%- if tools is iterable and tools | length > 0 %} + +{{"工具调用请遵循如下格式:\n\n\nvalue_1\nThis is the value for the second parameter\nthat can span\nmultiple lines\n\n\n"}} +{%- endif %} +{# End the system block line #} +{%- if system_message is defined or tools is iterable and tools | length > 0 %} +{{ eos_token }} +{%- endif %} +{# ---------- Thinking Budget ---------- #} +{%- if thinking_budget is defined %} +{%- if thinking_budget == 0 %} +{{ bos_token+"system" }} +{{ "You are an intelligent assistant that can answer questions in one step without the need for reasoning and thinking, that is, your thinking budget is 0. Next, please skip the thinking process and directly start answering the user's questions." }} +{{ eos_token }} +{%- elif not thinking_budget == -1 %} +{{ bos_token+"system" }} +{{ "You are an intelligent assistant with reflective ability. In the process of thinking and reasoning, you need to strictly follow the thinking budget, which is "}}{{thinking_budget}}{{". That is, you need to complete your thinking within "}}{{thinking_budget}}{{" tokens and start answering the user's questions. You will reflect on your thinking process every "}}{{ns.interval}}{{" tokens, stating how many tokens have been used and how many are left."}} +{{ eos_token }} +{%- endif %} +{%- endif %} +{# ---------- List the historical messages one by one ---------- #} +{%- for message in loop_messages %} +{%- if message.role == "assistant" + and message.tool_calls is defined + and message.tool_calls is iterable + and message.tool_calls | length > 0 %} +{{ bos_token + message.role }} +{%- if message.reasoning_content is defined and message.reasoning_content is string and message.reasoning_content | trim | length > 0 %} +{{ "\n" + think_begin_token + message.reasoning_content | trim + think_end_token }} +{%- endif %} +{%- if message.content is defined and message.content is string and message.content | trim | length > 0 %} +{{ "\n" + message.content | trim + "\n" }} +{%- endif %} +{%- for tool_call in message.tool_calls %} +{%- if tool_call.function is defined %}{% set tool_call = tool_call.function %}{% endif %} +{{ "\n" + toolcall_begin_token + "\n\n" }} +{%- if tool_call.arguments is defined %} +{%- for arg_name, arg_value in tool_call.arguments | items %} +{{ "" }} +{%- set arg_value = arg_value if arg_value is string else arg_value | string %} +{{ arg_value+"\n" }} +{%- endfor %} +{%- endif %} +{{ "\n" + toolcall_end_token }} +{%- endfor %} +{{ eos_token }} +{%- elif message.role in ["user", "system"] %} +{{ bos_token + message.role + "\n" + message.content + eos_token }} +{%- elif message.role == "assistant" %} +{{ bos_token + message.role }} +{%- if message.reasoning_content is defined and message.reasoning_content is string and message.reasoning_content | trim | length > 0 %} +{{ "\n" + think_begin_token + message.reasoning_content | trim + think_end_token }} +{%- endif %} +{%- if message.content is defined and message.content is string and message.content | trim | length > 0 %} +{{ "\n" + message.content | trim + eos_token }} +{%- endif %} +{# Include the tool role #} +{%- else %} +{{ bos_token + message.role + "\n" + message.content + eos_token }} +{%- endif %} +{%- endfor %} +{# ---------- Control the model to start continuation ---------- #} +{%- if add_generation_prompt %} +{{ bos_token+"assistant\n" }} +{%- if thinking_budget == 0 %} +{{ think_begin_token + "\n" + budget_begin_token + "The current thinking budget is 0, so I will directly start answering the question." + budget_end_token + "\n" + think_end_token }} +{%- endif %} +{%- endif %} \ No newline at end of file diff --git a/tests/test-chat.cpp b/tests/test-chat.cpp index a6daa93a82..8120b45c4b 100644 --- a/tests/test-chat.cpp +++ b/tests/test-chat.cpp @@ -1621,6 +1621,140 @@ static void test_template_output_parsers() { /* .reasoning_format = */ COMMON_REASONING_FORMAT_AUTO, })); } + { + // Seed-OSS format tests + auto tmpls = read_templates("models/templates/ByteDance-Seed-OSS.jinja"); + std::vector end_tokens{ "" }; + + assert_equals(COMMON_CHAT_FORMAT_SEED_OSS, common_chat_templates_apply(tmpls.get(), inputs_no_tools).format); + assert_equals(COMMON_CHAT_FORMAT_SEED_OSS, common_chat_templates_apply(tmpls.get(), inputs_tools).format); + + test_templates(tmpls.get(), end_tokens, message_assist, tools, "Hello, world!\nWhat's up?", /* expect_grammar_triggered= */ false); + + // Test simple reasoning content + assert_msg_equals( + simple_assist_msg("Hello, world!", "I'm thinking about the answer"), + common_chat_parse( + "I'm thinking about the answerHello, world!", + /* is_partial= */ false, + { + /* .format = */ COMMON_CHAT_FORMAT_SEED_OSS, + /* .reasoning_format = */ COMMON_REASONING_FORMAT_DEEPSEEK, + })); + + // Test budget reflection tags + common_chat_msg msg_budget_reflect; + msg_budget_reflect.role = "assistant"; + msg_budget_reflect.content = "Token usage: 45/1000\nI should continue thinking to find the best solution.I need to calculate this step by step."; + msg_budget_reflect.reasoning_content = "Token usage: 45/1000\nI should continue thinking to find the best solution."; + assert_msg_equals( + msg_budget_reflect, + common_chat_parse( + "Token usage: 45/1000\nI should continue thinking to find the best solution." + "Token usage: 45/1000\nI should continue thinking to find the best solution." + "I need to calculate this step by step.", + /* is_partial= */ false, + { + /* .format = */ COMMON_CHAT_FORMAT_SEED_OSS, + /* .reasoning_format = */ COMMON_REASONING_FORMAT_DEEPSEEK, + })); + + // Test tool calls with Seed-OSS format + common_chat_msg msg_tool_call; + msg_tool_call.role = "assistant"; + msg_tool_call.tool_calls.push_back({"calculate_sum", "{\"numbers\": [1, 2, 3]}", ""}); + assert_msg_equals( + msg_tool_call, + common_chat_parse( + "\n" + "\n" + "[1, 2, 3]\n" + "\n" + "", + /* is_partial= */ false, + {COMMON_CHAT_FORMAT_SEED_OSS})); + + // Test reasoning + tool call combination + common_chat_msg msg_reasoning_tool; + msg_reasoning_tool.role = "assistant"; + msg_reasoning_tool.content = ""; + msg_reasoning_tool.reasoning_content = "I need to calculate the sum of these numbers"; + msg_reasoning_tool.tool_calls.push_back({"calculate_sum", "{\"numbers\": [1, 2, 3]}", ""}); + assert_msg_equals( + msg_reasoning_tool, + common_chat_parse( + "I need to calculate the sum of these numbers" + "\n" + "\n" + "[1, 2, 3]\n" + "\n" + "", + /* is_partial= */ false, + { + /* .format = */ COMMON_CHAT_FORMAT_SEED_OSS, + /* .reasoning_format = */ COMMON_REASONING_FORMAT_DEEPSEEK, + })); + + // Test deltas: the number of tool calls in partial parses should never decrease + std::string tool_msg = "\n" + "\n" + "[1, 2, 3]\n" + ""; + std::size_t previousToolCalls = 0; + for (std::size_t i = std::string("").length(); i < tool_msg.length() - 1; i++) { + auto partial = tool_msg.substr(0, i); + auto partial_res = common_chat_parse(partial, true, { COMMON_CHAT_FORMAT_SEED_OSS, COMMON_REASONING_FORMAT_DEEPSEEK }); + if (partial_res.tool_calls.size() < previousToolCalls) { + throw std::runtime_error("Tool call size decreased on partial: " + partial + " from " + std::to_string(previousToolCalls) + " to " + std::to_string(partial_res.tool_calls.size())); + } + previousToolCalls = partial_res.tool_calls.size(); + } + + // Test multiple parameters in tool call + common_chat_msg msg_multi_param; + msg_multi_param.role = "assistant"; + msg_multi_param.tool_calls.push_back({"process_data", "{\"input\": \"test\", \"format\": \"json\"}", ""}); + assert_msg_equals( + msg_multi_param, + common_chat_parse( + "\n" + "\n" + "test\n" + "json\n" + "\n" + "", + /* is_partial= */ false, + {COMMON_CHAT_FORMAT_SEED_OSS})); + + // Test partial parsing for incomplete tool call - don't actually add the call until parsing parameters is done + assert_msg_equals( + simple_assist_msg("", ""), + common_chat_parse( + "\n" + "\n" + "[1,\n", + /* is_partial= */ true, + {COMMON_CHAT_FORMAT_SEED_OSS})); + + // Test incomplete reasoning tag + assert_msg_equals( + simple_assist_msg("", "I was thinking"), + common_chat_parse( + "I was thinking", + /* is_partial= */ true, + { + /* .format = */ COMMON_CHAT_FORMAT_SEED_OSS, + /* .reasoning_format = */ COMMON_REASONING_FORMAT_DEEPSEEK, + })); + + // Test content without reasoning + assert_msg_equals( + simple_assist_msg("This is a simple response without reasoning."), + common_chat_parse( + "This is a simple response without reasoning.", + /* is_partial= */ false, + {COMMON_CHAT_FORMAT_SEED_OSS})); + } } static void test_msg_diffs_compute() { From 81017865ee444cf49ce0136f2be1e41a0270ff91 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Fri, 29 Aug 2025 21:30:06 +0800 Subject: [PATCH 149/174] CUDA: fix bug in rms_norm fusion (#15660) * CUDA: fix bug in rms_norm fusion * Fix bug for OP_REPEAT * Fix index for add --- ggml/src/ggml-cuda/binbcast.cu | 66 +++++++++++++++++++++++---------- ggml/src/ggml-cuda/ggml-cuda.cu | 2 +- ggml/src/ggml-cuda/norm.cu | 6 +-- 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/ggml/src/ggml-cuda/binbcast.cu b/ggml/src/ggml-cuda/binbcast.cu index 99a98fcbfc..1c76566344 100644 --- a/ggml/src/ggml-cuda/binbcast.cu +++ b/ggml/src/ggml-cuda/binbcast.cu @@ -57,7 +57,11 @@ static __global__ void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst const int i10 = i0 % ne10; float result = src0_row ? (float) src0_row[i0] : 0.0f; - result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10]))); + if constexpr (sizeof...(src1_ptrs) > 0) { + result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10]))); + } else { + result = bin_op(result, (float)src1[i_src1 + i10]); + } dst_row[i0] = (dst_t) result; } @@ -96,7 +100,11 @@ static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * const int i10 = i0 % ne10; float result = src0_row ? (float) src0_row[i0] : 0.0f; - result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10]))); + if constexpr (sizeof...(src1_ptrs) > 0) { + result = (..., (result = bin_op(result, (float)src1s[i_src1 + i10]))); + } else { + result = bin_op(result, (float)src1[i_src1 + i10]); + } dst_row[i0] = (dst_t) result; } @@ -231,23 +239,43 @@ static void launch_bin_bcast_pack(const ggml_tensor * src0, const ggml_tensor * if (block_nums.z > 65535) { int block_num = (ne0 * ne1 * ne2 * ne3 + block_size - 1) / block_size; - k_bin_bcast_unravel - <<>>(src0_dd, src1_dd, dst_dd, - ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, - /* s0, */ s1, s2, s3, - /* s00,*/ s01, s02, s03, - /* s10,*/ s11, s12,s13, - (const src1_t *) dst->src[I + 1]->data...); + if constexpr (sizeof...(I) > 0) { + k_bin_bcast_unravel + <<>>(src0_dd, src1_dd, dst_dd, + ne0, ne1, ne2, ne3, + ne10, ne11, ne12, ne13, + /* s0, */ s1, s2, s3, + /* s00,*/ s01, s02, s03, + /* s10,*/ s11, s12,s13, + (const src1_t *) dst->src[I + 1]->data...); + } else { + k_bin_bcast_unravel + <<>>(src0_dd, src1_dd, dst_dd, + ne0, ne1, ne2, ne3, + ne10, ne11, ne12, ne13, + /* s0, */ s1, s2, s3, + /* s00,*/ s01, s02, s03, + /* s10,*/ s11, s12,s13); + } } else { - k_bin_bcast - <<>>(src0_dd, src1_dd, dst_dd, - ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, - /* s0, */ s1, s2, s3, - /* s00,*/ s01, s02, s03, - /* s10,*/ s11, s12,s13, - (const src1_t *) dst->src[I + 1]->data...); + if constexpr (sizeof...(I) > 0) { + k_bin_bcast + <<>>(src0_dd, src1_dd, dst_dd, + ne0, ne1, ne2, ne3, + ne10, ne11, ne12, ne13, + /* s0, */ s1, s2, s3, + /* s00,*/ s01, s02, s03, + /* s10,*/ s11, s12,s13, + (const src1_t *) dst->src[I + 1]->data...); + } else { + k_bin_bcast + <<>>(src0_dd, src1_dd, dst_dd, + ne0, ne1, ne2, ne3, + ne10, ne11, ne12, ne13, + /* s0, */ s1, s2, s3, + /* s00,*/ s01, s02, s03, + /* s10,*/ s11, s12,s13); + } } } } @@ -327,7 +355,7 @@ static void ggml_cuda_op_bin_bcast( } void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - ggml_cuda_op_bin_bcast>(dst, dst->src[0], dst, nullptr, dst->src[0]->data, dst->data, ctx.stream()); + ggml_cuda_op_bin_bcast>(dst, dst->src[0], dst, nullptr, dst->src[0]->data, dst->data, ctx.stream()); } void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 6a1b0fc936..e06f95f081 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -2827,7 +2827,7 @@ static bool ggml_cuda_can_fuse(const struct ggml_cgraph * cgraph, int node_idx, const ggml_tensor *add = nullptr; if (ops.size() == 3 && ops.begin()[2] == GGML_OP_ADD) { - add = cgraph->nodes[node_idx+1]; + add = cgraph->nodes[node_idx+2]; } GGML_ASSERT(rms_norm->src[0]->type == GGML_TYPE_F32); diff --git a/ggml/src/ggml-cuda/norm.cu b/ggml/src/ggml-cuda/norm.cu index 293f6f68e5..d5157d958b 100644 --- a/ggml/src/ggml-cuda/norm.cu +++ b/ggml/src/ggml-cuda/norm.cu @@ -127,6 +127,7 @@ static __global__ void rms_norm_f32(const float * x, float * dst, const int add_nrows = 0, const int add_nchannels = 0, const int add_nsamples = 0) { + const int nrows = gridDim.x; const int nchannels = gridDim.y; @@ -135,6 +136,8 @@ static __global__ void rms_norm_f32(const float * x, float * dst, const int sample = blockIdx.z; const int tid = threadIdx.x; + static_assert(!do_add || do_multiply, "fusing add is not supported without multiplying"); + x += sample*stride_sample + channel*stride_channel + row*stride_row; dst += ((sample*nchannels + channel)*nrows + row)*ncols; @@ -185,9 +188,6 @@ static __global__ void rms_norm_f32(const float * x, float * dst, } else if constexpr (do_multiply) { const int mul_col = col % mul_ncols; dst[col] = scale * x[col] * mul[mul_col]; - } else if constexpr (do_add) { - const int add_col = col % add_ncols; - dst[col] += add[add_col]; } else { dst[col] = scale * x[col]; } From 792b44f2ed9668cce7f267ff0ae4950ed9b4a5de Mon Sep 17 00:00:00 2001 From: ExtReMLapin <3909752+ExtReMLapin@users.noreply.github.com> Date: Fri, 29 Aug 2025 19:25:40 +0200 Subject: [PATCH 150/174] server : add documentation for `parallel_tool_calls` param (#15647) Co-authored-by: Pierre F --- docs/function-calling.md | 2 ++ tools/server/README.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/function-calling.md b/docs/function-calling.md index 37eacaf310..67cf785c7a 100644 --- a/docs/function-calling.md +++ b/docs/function-calling.md @@ -21,6 +21,8 @@ Function calling is supported for all models (see https://github.com/ggml-org/ll - Use `--chat-template-file` to override the template when appropriate (see examples below) - Generic support may consume more tokens and be less efficient than a model's native format. +- Multiple/parallel tool calling is supported on some models but disabled by default, enable it by passing `"parallel_tool_calls": true` in the completion endpoint payload. +

    Show some common templates and which format handler they use diff --git a/tools/server/README.md b/tools/server/README.md index baf3730add..6962b0d3a2 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -1143,6 +1143,8 @@ The `response_format` parameter supports both plain JSON output (e.g. `{"type": `parse_tool_calls`: Whether to parse the generated tool call. +`parallel_tool_calls` : Whether to enable parallel/multiple tool calls (only supported on some models, verification is based on jinja template). + *Examples:* You can use either Python `openai` library with appropriate checkpoints: From 3d16b29c3bb1ec816ac0e782f20d169097063919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Fri, 29 Aug 2025 22:04:08 +0200 Subject: [PATCH 151/174] scripts: strip "AMD Instinct" from GPU name (#15668) --- scripts/compare-llama-bench.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/compare-llama-bench.py b/scripts/compare-llama-bench.py index 2cfca66e09..c45c83fdb5 100755 --- a/scripts/compare-llama-bench.py +++ b/scripts/compare-llama-bench.py @@ -96,7 +96,7 @@ DEFAULT_HIDE_LLAMA_BENCH = ["model_filename"] # Always hide these properties by DEFAULT_SHOW_TEST_BACKEND_OPS = ["backend_name", "op_name"] # Always show these properties by default. DEFAULT_HIDE_TEST_BACKEND_OPS = ["error_message"] # Always hide these properties by default. -GPU_NAME_STRIP = ["NVIDIA GeForce ", "Tesla ", "AMD Radeon "] # Strip prefixes for smaller tables. +GPU_NAME_STRIP = ["NVIDIA GeForce ", "Tesla ", "AMD Radeon ", "AMD Instinct "] # Strip prefixes for smaller tables. MODEL_SUFFIX_REPLACE = {" - Small": "_S", " - Medium": "_M", " - Large": "_L"} DESCRIPTION = """Creates tables from llama-bench or test-backend-ops data written to multiple JSON/CSV files, a single JSONL file or SQLite database. Example usage (Linux): From d82f6aa34a216f5df1945cdfe121ba5e6cd80be0 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sat, 30 Aug 2025 00:12:53 +0200 Subject: [PATCH 152/174] server : removed obsolete doc (#15670) completing a4090d1174aed22dde5cacce2a4c27656b987a2f --- tools/server/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/server/README.md b/tools/server/README.md index 6962b0d3a2..b7285b2319 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -62,7 +62,6 @@ The project is under active development, and we are [looking for feedback and co | `--yarn-attn-factor N` | YaRN: scale sqrt(t) or attention magnitude (default: 1.0)
    (env: LLAMA_ARG_YARN_ATTN_FACTOR) | | `--yarn-beta-slow N` | YaRN: high correction dim or alpha (default: 1.0)
    (env: LLAMA_ARG_YARN_BETA_SLOW) | | `--yarn-beta-fast N` | YaRN: low correction dim or beta (default: 32.0)
    (env: LLAMA_ARG_YARN_BETA_FAST) | -| `-dkvc, --dump-kv-cache` | verbose print of the KV cache | | `-nkvo, --no-kv-offload` | disable KV offload
    (env: LLAMA_ARG_NO_KV_OFFLOAD) | | `-ctk, --cache-type-k TYPE` | KV cache data type for K
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_K) | | `-ctv, --cache-type-v TYPE` | KV cache data type for V
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_V) | From ef476916bba4b44f44be0c98babc1cb025968e75 Mon Sep 17 00:00:00 2001 From: Chenguang Li <757486878@qq.com> Date: Sat, 30 Aug 2025 10:18:35 +0800 Subject: [PATCH 153/174] CANN: FIx compiler warnings (#15661) Signed-off-by: noemotiovon <757486878@qq.com> --- ggml/src/ggml-cann/ggml-cann.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-cann/ggml-cann.cpp b/ggml/src/ggml-cann/ggml-cann.cpp index 558121dff7..7b3aca9db9 100755 --- a/ggml/src/ggml-cann/ggml-cann.cpp +++ b/ggml/src/ggml-cann/ggml-cann.cpp @@ -1155,7 +1155,7 @@ namespace { * @note The workspace buffer used in this function is managed globally and reused * across calls. This reduces overhead from repeated memory allocation and deallocation. */ -static void weight_format_to_nz(ggml_tensor *tensor, const void *data, size_t offset) { +static void weight_format_to_nz(ggml_tensor *tensor, size_t offset) { aclTensor* weightTransposed = ggml_cann_create_tensor(tensor, tensor->ne, tensor->nb, 2, ACL_FORMAT_ND, offset); uint64_t workspaceSize = 0; @@ -1203,7 +1203,7 @@ static void ggml_backend_cann_buffer_set_tensor( if (weight_to_nz && is_matmul_weight((const ggml_tensor*)tensor)) { GGML_ASSERT(tensor->ne[2] == 1); GGML_ASSERT(tensor->ne[3] == 1); - weight_format_to_nz(tensor, data, offset); + weight_format_to_nz(tensor, offset); } } else { void *transform_buffer = malloc(size); @@ -2491,7 +2491,7 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, return true; case GGML_OP_SCALE: float bias; - memcpy(&bias, (float*)op->op_params + 1, sizeof(float)); + memcpy(&bias, (const float *)(op->op_params) + 1, sizeof(float)); return bias == 0.0f; // TODO: support bias != 0.0f case GGML_OP_SOFT_MAX: // TODO: support attention sinks [TAG_ATTN_SINKS] @@ -2534,7 +2534,7 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, return false; } float logitSoftcap = 0.0f; - memcpy(&logitSoftcap, (float*)op->op_params + 2, sizeof(float)); + memcpy(&logitSoftcap, (const float *)(op->op_params) + 2, sizeof(float)); if(logitSoftcap != 0.0f) { return false; } From 696fccf354e9dbdfbce135bc40b44c9dcc64dda9 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 30 Aug 2025 04:11:22 -0500 Subject: [PATCH 154/174] vulkan: Skip syncing for prealloc_y when it is reused (#15544) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 35 ++++++++++++---------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 04ad664e61..40962de508 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -5800,11 +5800,6 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub ggml_vk_sync_buffers(ctx, subctx); } } - if (y_non_contig || quantize_y) { - if (ctx->prealloc_y_need_sync) { - ggml_vk_sync_buffers(ctx, subctx); - } - } if (x_non_contig) { ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); @@ -5816,6 +5811,9 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub if (y_non_contig) { if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || ctx->prealloc_y_last_tensor_used != src1) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); ctx->prealloc_y_last_tensor_used = src1; @@ -5824,6 +5822,9 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub if (quantize_y) { if (ctx->prealloc_y_last_pipeline_used != to_q8_1.get() || ctx->prealloc_y_last_tensor_used != src1) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } ggml_vk_quantize_q8_1(ctx, subctx, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }, y_ne * ne12 * ne13); ctx->prealloc_y_last_pipeline_used = to_q8_1.get(); ctx->prealloc_y_last_tensor_used = src1; @@ -6008,11 +6009,6 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& ggml_vk_sync_buffers(ctx, subctx); } } - if (y_non_contig) { - if (ctx->prealloc_y_need_sync) { - ggml_vk_sync_buffers(ctx, subctx); - } - } if (x_non_contig) { GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment)); @@ -6022,6 +6018,9 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne); if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || ctx->prealloc_y_last_tensor_used != src1) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); ctx->prealloc_y_last_tensor_used = src1; @@ -6454,11 +6453,6 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& ggml_vk_sync_buffers(ctx, subctx); } } - if (y_non_contig) { - if (ctx->prealloc_y_need_sync) { - ggml_vk_sync_buffers(ctx, subctx); - } - } if (x_non_contig) { ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); @@ -6471,6 +6465,9 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& if (y_non_contig) { if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || ctx->prealloc_y_last_tensor_used != src1) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); ctx->prealloc_y_last_tensor_used = src1; @@ -6668,11 +6665,6 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte ggml_vk_sync_buffers(ctx, subctx); } } - if (y_non_contig) { - if (ctx->prealloc_y_need_sync) { - ggml_vk_sync_buffers(ctx, subctx); - } - } if (x_non_contig) { GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment)); @@ -6682,6 +6674,9 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne); if (ctx->prealloc_y_last_pipeline_used != to_fp16_vk_1.get() || ctx->prealloc_y_last_tensor_used != src1) { + if (ctx->prealloc_y_need_sync) { + ggml_vk_sync_buffers(ctx, subctx); + } ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); ctx->prealloc_y_last_pipeline_used = to_fp16_vk_1.get(); ctx->prealloc_y_last_tensor_used = src1; From 38ad381f9f5d4dd368a96d844fb19cf501ed9d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 30 Aug 2025 16:20:32 +0200 Subject: [PATCH 155/174] CUDA: use FP32 arithmetic for conv2d (#15683) --- ggml/src/ggml-cuda/conv2d.cu | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/ggml/src/ggml-cuda/conv2d.cu b/ggml/src/ggml-cuda/conv2d.cu index cf878d1fd1..bcb70762ee 100644 --- a/ggml/src/ggml-cuda/conv2d.cu +++ b/ggml/src/ggml-cuda/conv2d.cu @@ -82,7 +82,7 @@ static __global__ void conv2d_kernel(const float * __restrict__ input, int64_t n, c_out, out_y, out_x; Layout::unpack_indices(global_idx, P, n, c_out, out_y, out_x); - T acc = 0; + float acc = 0.0f; for (int64_t c_in = 0; c_in < P.IC; ++c_in) { kernel_bounds bounds = calculate_kernel_bounds(out_x, out_y, P); @@ -93,21 +93,15 @@ static __global__ void conv2d_kernel(const float * __restrict__ input, for (int64_t kx = bounds.x_min; kx < bounds.x_max; ++kx) { const int64_t in_x = calculate_input_coord(out_x, kx, P.ST_X, P.DL_X, P.PD_X); - T input_val; - if (std::is_same::value) { - input_val = __float2half(input[Layout::input_index(n, c_in, in_y, in_x, P)]); - } else { - input_val = input[Layout::input_index(n, c_in, in_y, in_x, P)]; - } - - T kernel_val = kernel[Layout::kernel_index(c_out, c_in, ky, kx, P)]; + const float input_val = input[Layout::input_index(n, c_in, in_y, in_x, P)]; + const float kernel_val = kernel[Layout::kernel_index(c_out, c_in, ky, kx, P)]; acc += (input_val * kernel_val); } } } // [N, OC, OH, OW] - output[Layout::output_index(n, c_out, out_y, out_x, P)] = (float) acc; + output[Layout::output_index(n, c_out, out_y, out_x, P)] = acc; } template From e81b8e4b7f5ab870836fad26d154a7507b341b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 30 Aug 2025 16:32:10 +0200 Subject: [PATCH 156/174] llama: use FA + max. GPU layers by default (#15434) * llama: use max. GPU layers by default, auto -fa * ggml-backend: abort instead of segfault --- common/arg.cpp | 30 ++++---- common/common.cpp | 8 ++- common/common.h | 2 +- examples/diffusion/diffusion-cli.cpp | 2 +- ggml/src/ggml-backend.cpp | 78 +++++++++++++++++++++ include/llama.h | 10 ++- scripts/server-bench.py | 6 -- scripts/tool_bench.py | 2 +- src/llama-context.cpp | 75 ++++++++++++++++++-- src/llama-graph.cpp | 24 +++++-- src/llama-graph.h | 3 +- src/llama-impl.h | 2 + src/llama-model.cpp | 7 +- src/llama.cpp | 12 ++++ tools/batched-bench/batched-bench.cpp | 4 +- tools/llama-bench/llama-bench.cpp | 20 +++--- tools/server/tests/unit/test_ctx_shift.py | 15 ++-- tools/server/tests/unit/test_speculative.py | 1 + tools/server/tests/utils.py | 6 +- 19 files changed, 235 insertions(+), 72 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 93f0108b2b..72c69c39a0 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1545,10 +1545,18 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } ).set_examples({LLAMA_EXAMPLE_IMATRIX, LLAMA_EXAMPLE_PERPLEXITY, LLAMA_EXAMPLE_RETRIEVAL})); add_opt(common_arg( - {"-fa", "--flash-attn"}, - string_format("enable Flash Attention (default: %s)", params.flash_attn ? "enabled" : "disabled"), - [](common_params & params) { - params.flash_attn = true; + {"-fa", "--flash-attn"}, "FA", + string_format("set Flash Attention use ('on', 'off', or 'auto', default: '%s')", llama_flash_attn_type_name(params.flash_attn_type)), + [](common_params & params, const std::string & value) { + if (value == "on" || value == "enabled") { + params.flash_attn_type = LLAMA_FLASH_ATTN_TYPE_ENABLED; + } else if (value == "off" || value == "disabled") { + params.flash_attn_type = LLAMA_FLASH_ATTN_TYPE_DISABLED; + } else if (value == "auto") { + params.flash_attn_type = LLAMA_FLASH_ATTN_TYPE_AUTO; + } else { + throw std::runtime_error(string_format("error: unkown value for --flash-attn: '%s'\n", value.c_str())); + } } ).set_env("LLAMA_ARG_FLASH_ATTN")); add_opt(common_arg( @@ -3459,8 +3467,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_repo = "ggml-org/Qwen2.5-Coder-1.5B-Q8_0-GGUF"; params.model.hf_file = "qwen2.5-coder-1.5b-q8_0.gguf"; params.port = 8012; - params.n_gpu_layers = 99; - params.flash_attn = true; params.n_ubatch = 1024; params.n_batch = 1024; params.n_ctx = 0; @@ -3475,8 +3481,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_repo = "ggml-org/Qwen2.5-Coder-3B-Q8_0-GGUF"; params.model.hf_file = "qwen2.5-coder-3b-q8_0.gguf"; params.port = 8012; - params.n_gpu_layers = 99; - params.flash_attn = true; params.n_ubatch = 1024; params.n_batch = 1024; params.n_ctx = 0; @@ -3491,8 +3495,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_repo = "ggml-org/Qwen2.5-Coder-7B-Q8_0-GGUF"; params.model.hf_file = "qwen2.5-coder-7b-q8_0.gguf"; params.port = 8012; - params.n_gpu_layers = 99; - params.flash_attn = true; params.n_ubatch = 1024; params.n_batch = 1024; params.n_ctx = 0; @@ -3508,10 +3510,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_file = "qwen2.5-coder-7b-q8_0.gguf"; params.speculative.model.hf_repo = "ggml-org/Qwen2.5-Coder-0.5B-Q8_0-GGUF"; params.speculative.model.hf_file = "qwen2.5-coder-0.5b-q8_0.gguf"; - params.speculative.n_gpu_layers = 99; params.port = 8012; - params.n_gpu_layers = 99; - params.flash_attn = true; params.n_ubatch = 1024; params.n_batch = 1024; params.n_ctx = 0; @@ -3527,10 +3526,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_file = "qwen2.5-coder-14b-q8_0.gguf"; params.speculative.model.hf_repo = "ggml-org/Qwen2.5-Coder-0.5B-Q8_0-GGUF"; params.speculative.model.hf_file = "qwen2.5-coder-0.5b-q8_0.gguf"; - params.speculative.n_gpu_layers = 99; params.port = 8012; - params.n_gpu_layers = 99; - params.flash_attn = true; params.n_ubatch = 1024; params.n_batch = 1024; params.n_ctx = 0; @@ -3545,8 +3541,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_repo = "ggml-org/Qwen3-Coder-30B-A3B-Instruct-Q8_0-GGUF"; params.model.hf_file = "qwen3-coder-30b-a3b-instruct-q8_0.gguf"; params.port = 8012; - params.n_gpu_layers = 99; - params.flash_attn = true; params.n_ubatch = 1024; params.n_batch = 1024; params.n_ctx = 0; diff --git a/common/common.cpp b/common/common.cpp index 054b43be77..0c92d4d57d 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -901,7 +901,8 @@ struct common_init_result common_init_from_params(common_params & params) { llama_model * model = llama_model_load_from_file(params.model.path.c_str(), mparams); if (model == NULL) { - LOG_ERR("%s: failed to load model '%s'\n", __func__, params.model.path.c_str()); + LOG_ERR("%s: failed to load model '%s', try reducing --n-gpu-layers if you're running out of VRAM\n", + __func__, params.model.path.c_str()); return iparams; } @@ -911,7 +912,8 @@ struct common_init_result common_init_from_params(common_params & params) { llama_context * lctx = llama_init_from_model(model, cparams); if (lctx == NULL) { - LOG_ERR("%s: failed to create context with model '%s'\n", __func__, params.model.path.c_str()); + LOG_ERR("%s: failed to create context with model '%s', try reducing --n-gpu-layers if you're running out of VRAM\n", + __func__, params.model.path.c_str()); llama_model_free(model); return iparams; } @@ -1157,10 +1159,10 @@ struct llama_context_params common_context_params_to_llama(const common_params & cparams.yarn_orig_ctx = params.yarn_orig_ctx; cparams.pooling_type = params.pooling_type; cparams.attention_type = params.attention_type; + cparams.flash_attn_type = params.flash_attn_type; cparams.cb_eval = params.cb_eval; cparams.cb_eval_user_data = params.cb_eval_user_data; cparams.offload_kqv = !params.no_kv_offload; - cparams.flash_attn = params.flash_attn; cparams.no_perf = params.no_perf; cparams.op_offload = !params.no_op_offload; cparams.swa_full = params.swa_full; diff --git a/common/common.h b/common/common.h index 87ea060695..02ca093bdf 100644 --- a/common/common.h +++ b/common/common.h @@ -312,6 +312,7 @@ struct common_params { enum llama_rope_scaling_type rope_scaling_type = LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED; enum llama_pooling_type pooling_type = LLAMA_POOLING_TYPE_UNSPECIFIED; // pooling type for embeddings enum llama_attention_type attention_type = LLAMA_ATTENTION_TYPE_UNSPECIFIED; // attention type for embeddings + enum llama_flash_attn_type flash_attn_type = LLAMA_FLASH_ATTN_TYPE_AUTO; // whether to use Flash Attention struct common_params_sampling sampling; struct common_params_speculative speculative; @@ -375,7 +376,6 @@ struct common_params { bool multiline_input = false; // reverse the usage of `\` bool simple_io = false; // improves compatibility with subprocesses and limited consoles bool cont_batching = true; // insert new sequences for decoding on-the-fly - bool flash_attn = false; // flash attention bool no_perf = false; // disable performance metrics bool ctx_shift = false; // context shift on infinite text generation bool swa_full = false; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) diff --git a/examples/diffusion/diffusion-cli.cpp b/examples/diffusion/diffusion-cli.cpp index 8431dcea8f..abf7fb3573 100644 --- a/examples/diffusion/diffusion-cli.cpp +++ b/examples/diffusion/diffusion-cli.cpp @@ -564,7 +564,7 @@ int main(int argc, char ** argv) { ctx_params.n_ctx = params.n_ctx; ctx_params.n_batch = params.n_batch; ctx_params.n_ubatch = params.n_ubatch; - ctx_params.flash_attn = params.flash_attn; + ctx_params.flash_attn_type = params.flash_attn_type; ctx_params.no_perf = params.no_perf; ctx_params.type_k = params.cache_type_k; ctx_params.type_v = params.cache_type_v; diff --git a/ggml/src/ggml-backend.cpp b/ggml/src/ggml-backend.cpp index e34feccc98..02375337c4 100644 --- a/ggml/src/ggml-backend.cpp +++ b/ggml/src/ggml-backend.cpp @@ -31,6 +31,7 @@ // backend buffer type const char * ggml_backend_buft_name(ggml_backend_buffer_type_t buft) { + GGML_ASSERT(buft); return buft->iface.get_name(buft); } @@ -40,14 +41,17 @@ ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer_type_t return ggml_backend_buffer_init(buft, {}, NULL, 0); } + GGML_ASSERT(buft); return buft->iface.alloc_buffer(buft, size); } size_t ggml_backend_buft_get_alignment(ggml_backend_buffer_type_t buft) { + GGML_ASSERT(buft); return buft->iface.get_alignment(buft); } size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) { + GGML_ASSERT(buft); // get_max_size is optional, defaults to SIZE_MAX if (buft->iface.get_max_size) { return buft->iface.get_max_size(buft); @@ -56,6 +60,7 @@ size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) { } size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor) { + GGML_ASSERT(buft); // get_alloc_size is optional, defaults to ggml_nbytes if (buft->iface.get_alloc_size) { size_t size = buft->iface.get_alloc_size(buft, tensor); @@ -66,6 +71,7 @@ size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, const s } bool ggml_backend_buft_is_host(ggml_backend_buffer_type_t buft) { + GGML_ASSERT(buft); if (buft->iface.is_host) { return buft->iface.is_host(buft); } @@ -73,6 +79,7 @@ bool ggml_backend_buft_is_host(ggml_backend_buffer_type_t buft) { } ggml_backend_dev_t ggml_backend_buft_get_device(ggml_backend_buffer_type_t buft) { + GGML_ASSERT(buft); return buft->device; } @@ -110,10 +117,12 @@ void ggml_backend_buffer_free(ggml_backend_buffer_t buffer) { } size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); return buffer->size; } void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); // get_base is optional if the buffer is zero-sized if (buffer->size == 0) { return NULL; @@ -127,6 +136,7 @@ void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) { } enum ggml_status ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) { + GGML_ASSERT(buffer); // init_tensor is optional if (buffer->iface.init_tensor) { return buffer->iface.init_tensor(buffer, tensor); @@ -135,6 +145,7 @@ enum ggml_status ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, s } void ggml_backend_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { + GGML_ASSERT(buffer); // clear is optional if the buffer is zero-sized if (buffer->size == 0) { return; @@ -160,6 +171,7 @@ bool ggml_backend_buffer_is_host(ggml_backend_buffer_t buffer) { } void ggml_backend_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) { + GGML_ASSERT(buffer); buffer->usage = usage; // FIXME: add a generic callback to the buffer interface @@ -169,14 +181,17 @@ void ggml_backend_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backe } enum ggml_backend_buffer_usage ggml_backend_buffer_get_usage(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); return buffer->usage; } ggml_backend_buffer_type_t ggml_backend_buffer_get_type(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); return buffer->buft; } void ggml_backend_buffer_reset(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); if (buffer->iface.reset) { buffer->iface.reset(buffer); } @@ -215,6 +230,7 @@ void ggml_backend_free(ggml_backend_t backend) { } ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend) { + GGML_ASSERT(backend); return ggml_backend_dev_buffer_type(backend->device); } @@ -231,6 +247,8 @@ size_t ggml_backend_get_max_size(ggml_backend_t backend) { } void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) { + GGML_ASSERT(backend); + GGML_ASSERT(tensor); GGML_ASSERT(tensor->data != NULL && "tensor not allocated"); GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds"); @@ -242,6 +260,8 @@ void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * } void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) { + GGML_ASSERT(backend); + GGML_ASSERT(tensor); GGML_ASSERT(tensor->data != NULL && "tensor not allocated"); GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds"); @@ -283,6 +303,7 @@ void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, siz } void ggml_backend_tensor_memset(struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) { + GGML_ASSERT(tensor); ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; if (size == 0) { @@ -298,6 +319,7 @@ void ggml_backend_tensor_memset(struct ggml_tensor * tensor, uint8_t value, size } void ggml_backend_synchronize(ggml_backend_t backend) { + GGML_ASSERT(backend); if (backend->iface.synchronize == NULL) { return; } @@ -306,18 +328,21 @@ void ggml_backend_synchronize(ggml_backend_t backend) { } ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph) { + GGML_ASSERT(backend); GGML_ASSERT(backend->iface.graph_plan_create != NULL); return backend->iface.graph_plan_create(backend, cgraph); } void ggml_backend_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) { + GGML_ASSERT(backend); GGML_ASSERT(backend->iface.graph_plan_free != NULL); backend->iface.graph_plan_free(backend, plan); } enum ggml_status ggml_backend_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) { + GGML_ASSERT(backend); GGML_ASSERT(backend->iface.graph_plan_compute != NULL); return backend->iface.graph_plan_compute(backend, plan); @@ -330,22 +355,27 @@ enum ggml_status ggml_backend_graph_compute(ggml_backend_t backend, struct ggml_ } enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph) { + GGML_ASSERT(backend); return backend->iface.graph_compute(backend, cgraph); } bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) { + GGML_ASSERT(backend); return ggml_backend_dev_supports_op(backend->device, op); } bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) { + GGML_ASSERT(backend); return ggml_backend_dev_supports_buft(backend->device, buft); } bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op) { + GGML_ASSERT(backend); return ggml_backend_dev_offload_op(backend->device, op); } ggml_backend_dev_t ggml_backend_get_device(ggml_backend_t backend) { + GGML_ASSERT(backend); return backend->device; } @@ -381,6 +411,7 @@ void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t b return; } + GGML_ASSERT(backend_dst); if (backend_dst->iface.cpy_tensor_async != NULL) { if (backend_dst->iface.cpy_tensor_async(backend_src, backend_dst, src, dst)) { return; @@ -412,18 +443,21 @@ void ggml_backend_event_free(ggml_backend_event_t event) { } void ggml_backend_event_record(ggml_backend_event_t event, ggml_backend_t backend) { + GGML_ASSERT(backend); GGML_ASSERT(backend->iface.event_record != NULL); backend->iface.event_record(backend, event); } void ggml_backend_event_synchronize(ggml_backend_event_t event) { + GGML_ASSERT(event); GGML_ASSERT(event->device->iface.event_synchronize); event->device->iface.event_synchronize(event->device, event); } void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event) { + GGML_ASSERT(backend); GGML_ASSERT(backend->iface.event_wait != NULL); backend->iface.event_wait(backend, event); @@ -432,18 +466,22 @@ void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event) // Backend device const char * ggml_backend_dev_name(ggml_backend_dev_t device) { + GGML_ASSERT(device); return device->iface.get_name(device); } const char * ggml_backend_dev_description(ggml_backend_dev_t device) { + GGML_ASSERT(device); return device->iface.get_description(device); } void ggml_backend_dev_memory(ggml_backend_dev_t device, size_t * free, size_t * total) { + GGML_ASSERT(device); device->iface.get_memory(device, free, total); } enum ggml_backend_dev_type ggml_backend_dev_type(ggml_backend_dev_t device) { + GGML_ASSERT(device); return device->iface.get_type(device); } @@ -453,18 +491,22 @@ void ggml_backend_dev_get_props(ggml_backend_dev_t device, struct ggml_backend_d } ggml_backend_reg_t ggml_backend_dev_backend_reg(ggml_backend_dev_t device) { + GGML_ASSERT(device); return device->reg; } ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * params) { + GGML_ASSERT(device); return device->iface.init_backend(device, params); } ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device) { + GGML_ASSERT(device); return device->iface.get_buffer_type(device); } ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t device) { + GGML_ASSERT(device); if (device->iface.get_host_buffer_type == NULL) { return NULL; } @@ -473,18 +515,22 @@ ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t } ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr(ggml_backend_dev_t device, void * ptr, size_t size, size_t max_tensor_size) { + GGML_ASSERT(device); return device->iface.buffer_from_host_ptr(device, ptr, size, max_tensor_size); } bool ggml_backend_dev_supports_op(ggml_backend_dev_t device, const struct ggml_tensor * op) { + GGML_ASSERT(device); return device->iface.supports_op(device, op); } bool ggml_backend_dev_supports_buft(ggml_backend_dev_t device, ggml_backend_buffer_type_t buft) { + GGML_ASSERT(device); return device->iface.supports_buft(device, buft); } bool ggml_backend_dev_offload_op(ggml_backend_dev_t device, const struct ggml_tensor * op) { + GGML_ASSERT(device); if (device->iface.offload_op != NULL) { return device->iface.offload_op(device, op); } @@ -495,18 +541,22 @@ bool ggml_backend_dev_offload_op(ggml_backend_dev_t device, const struct ggml_te // Backend (reg) const char * ggml_backend_reg_name(ggml_backend_reg_t reg) { + GGML_ASSERT(reg); return reg->iface.get_name(reg); } size_t ggml_backend_reg_dev_count(ggml_backend_reg_t reg) { + GGML_ASSERT(reg); return reg->iface.get_device_count(reg); } ggml_backend_dev_t ggml_backend_reg_dev_get(ggml_backend_reg_t reg, size_t index) { + GGML_ASSERT(reg); return reg->iface.get_device(reg, index); } void * ggml_backend_reg_get_proc_address(ggml_backend_reg_t reg, const char * name) { + GGML_ASSERT(reg); if (!reg->iface.get_proc_address) { return NULL; } @@ -521,6 +571,7 @@ struct ggml_backend_multi_buffer_context { }; static void ggml_backend_multi_buffer_free_buffer(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); ggml_backend_multi_buffer_context * ctx = (ggml_backend_multi_buffer_context *) buffer->context; for (size_t i = 0; i < ctx->n_buffers; i++) { ggml_backend_buffer_free(ctx->buffers[i]); @@ -531,6 +582,7 @@ static void ggml_backend_multi_buffer_free_buffer(ggml_backend_buffer_t buffer) } static void ggml_backend_multi_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { + GGML_ASSERT(buffer); ggml_backend_multi_buffer_context * ctx = (ggml_backend_multi_buffer_context *) buffer->context; for (size_t i = 0; i < ctx->n_buffers; i++) { ggml_backend_buffer_clear(ctx->buffers[i], value); @@ -566,10 +618,12 @@ ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer } bool ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); return buffer->iface.free_buffer == ggml_backend_multi_buffer_free_buffer; } void ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) { + GGML_ASSERT(buffer); GGML_ASSERT(ggml_backend_buffer_is_multi_buffer(buffer)); ggml_backend_multi_buffer_context * ctx = (ggml_backend_multi_buffer_context *) buffer->context; for (size_t i = 0; i < ctx->n_buffers; i++) { @@ -1349,6 +1403,7 @@ static bool ggml_backend_sched_alloc_splits(ggml_backend_sched_t sched) { } static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t sched) { + GGML_ASSERT(sched); struct ggml_backend_sched_split * splits = sched->splits; ggml_tensor * prev_ids_tensor = nullptr; @@ -1617,6 +1672,7 @@ void ggml_backend_sched_free(ggml_backend_sched_t sched) { } void ggml_backend_sched_reset(ggml_backend_sched_t sched) { + GGML_ASSERT(sched); // reset state for the next run if (!sched->is_reset) { ggml_hash_set_reset(&sched->hash_set); @@ -1628,6 +1684,7 @@ void ggml_backend_sched_reset(ggml_backend_sched_t sched) { } bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph) { + GGML_ASSERT(sched); GGML_ASSERT((int)sched->hash_set.size >= measure_graph->n_nodes + measure_graph->n_leafs); ggml_backend_sched_synchronize(sched); @@ -1644,6 +1701,7 @@ bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * } bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { + GGML_ASSERT(sched); GGML_ASSERT((int)sched->hash_set.size >= graph->n_nodes + graph->n_leafs); GGML_ASSERT(!sched->is_alloc); @@ -1668,6 +1726,7 @@ enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, st } enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { + GGML_ASSERT(sched); if (!sched->is_reset && !sched->is_alloc) { ggml_backend_sched_reset(sched); } @@ -1682,6 +1741,7 @@ enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sch } void ggml_backend_sched_synchronize(ggml_backend_sched_t sched) { + GGML_ASSERT(sched); for (int i = 0; i < sched->n_backends; i++) { ggml_backend_synchronize(sched->backends[i]); } @@ -1694,28 +1754,34 @@ void ggml_backend_sched_synchronize(ggml_backend_sched_t sched) { } void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data) { + GGML_ASSERT(sched); sched->callback_eval = callback; sched->callback_eval_user_data = user_data; } int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched) { + GGML_ASSERT(sched); return sched->n_splits; } int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched) { + GGML_ASSERT(sched); return sched->n_copies; } int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched) { + GGML_ASSERT(sched); return sched->n_backends; } ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i) { + GGML_ASSERT(sched); GGML_ASSERT(i >= 0 && i < sched->n_backends); return sched->backends[i]; } size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend) { + GGML_ASSERT(sched); int backend_index = ggml_backend_sched_backend_id(sched, backend); GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends); @@ -1723,6 +1789,7 @@ size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backe } void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend) { + GGML_ASSERT(sched); int backend_index = ggml_backend_sched_backend_id(sched, backend); GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends); tensor_backend_id(node) = backend_index; @@ -1731,6 +1798,7 @@ void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct gg } ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node) { + GGML_ASSERT(sched); int backend_index = tensor_backend_id(node); if (backend_index == -1) { return NULL; @@ -1741,6 +1809,7 @@ ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, // utils enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor) { + GGML_ASSERT(tensor); GGML_ASSERT(tensor->buffer == NULL); GGML_ASSERT(tensor->view_src != NULL); GGML_ASSERT(tensor->view_src->buffer != NULL); @@ -1752,6 +1821,7 @@ enum ggml_status ggml_backend_view_init(struct ggml_tensor * tensor) { } enum ggml_status ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr) { + GGML_ASSERT(tensor); GGML_ASSERT(tensor->buffer == NULL); GGML_ASSERT(tensor->data == NULL); GGML_ASSERT(tensor->view_src == NULL); @@ -1825,6 +1895,7 @@ static void graph_copy_init_tensor(struct ggml_hash_set * hash_set, struct ggml_ } struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph) { + GGML_ASSERT(graph); struct ggml_hash_set hash_set = ggml_hash_set_new(graph->visited_hash_set.size); struct ggml_tensor ** node_copies = (ggml_tensor **) calloc(hash_set.size, sizeof(node_copies[0])); // NOLINT bool * node_init = (bool *) calloc(hash_set.size, sizeof(node_init[0])); @@ -1969,6 +2040,7 @@ bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t // CPU backend - buffer static void * ggml_backend_cpu_buffer_get_base(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); uintptr_t data = (uintptr_t)buffer->context; // align the buffer @@ -1980,28 +2052,33 @@ static void * ggml_backend_cpu_buffer_get_base(ggml_backend_buffer_t buffer) { } static void ggml_backend_cpu_buffer_free_buffer(ggml_backend_buffer_t buffer) { + GGML_ASSERT(buffer); ggml_aligned_free(buffer->context, buffer->size); } static void ggml_backend_cpu_buffer_memset_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) { + GGML_ASSERT(tensor); memset((char *)tensor->data + offset, value, size); GGML_UNUSED(buffer); } static void ggml_backend_cpu_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) { + GGML_ASSERT(tensor); memcpy((char *)tensor->data + offset, data, size); GGML_UNUSED(buffer); } static void ggml_backend_cpu_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) { + GGML_ASSERT(tensor); memcpy(data, (const char *)tensor->data + offset, size); GGML_UNUSED(buffer); } static bool ggml_backend_cpu_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) { + GGML_ASSERT(src); if (ggml_backend_buffer_is_host(src->buffer)) { memcpy(dst->data, src->data, ggml_nbytes(src)); return true; @@ -2012,6 +2089,7 @@ static bool ggml_backend_cpu_buffer_cpy_tensor(ggml_backend_buffer_t buffer, con } static void ggml_backend_cpu_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { + GGML_ASSERT(buffer); memset(buffer->context, value, buffer->size); } diff --git a/include/llama.h b/include/llama.h index 7025353850..346135c71e 100644 --- a/include/llama.h +++ b/include/llama.h @@ -179,6 +179,14 @@ extern "C" { LLAMA_ATTENTION_TYPE_NON_CAUSAL = 1, }; + enum llama_flash_attn_type { + LLAMA_FLASH_ATTN_TYPE_AUTO = -1, + LLAMA_FLASH_ATTN_TYPE_DISABLED = 0, + LLAMA_FLASH_ATTN_TYPE_ENABLED = 1, + }; + + LLAMA_API const char * llama_flash_attn_type_name(enum llama_flash_attn_type flash_attn_type); + enum llama_split_mode { LLAMA_SPLIT_MODE_NONE = 0, // single GPU LLAMA_SPLIT_MODE_LAYER = 1, // split layers and KV across GPUs @@ -303,6 +311,7 @@ extern "C" { enum llama_rope_scaling_type rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` enum llama_pooling_type pooling_type; // whether to pool (sum) embedding results by sequence id enum llama_attention_type attention_type; // attention type to use for embeddings + enum llama_flash_attn_type flash_attn_type; // when to enable Flash Attention // ref: https://github.com/ggml-org/llama.cpp/pull/2054 float rope_freq_base; // RoPE base frequency, 0 = from model @@ -329,7 +338,6 @@ extern "C" { // Keep the booleans together and at the end of the struct to avoid misalignment during copy-by-value. bool embeddings; // if true, extract embeddings (together with logits) bool offload_kqv; // offload the KQV ops (including the KV cache) to GPU - bool flash_attn; // use flash attention [EXPERIMENTAL] bool no_perf; // measure performance timings bool op_offload; // offload host tensor operations to device bool swa_full; // use full-size SWA cache (https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) diff --git a/scripts/server-bench.py b/scripts/server-bench.py index a716020173..dbbb0939ff 100755 --- a/scripts/server-bench.py +++ b/scripts/server-bench.py @@ -151,12 +151,6 @@ def benchmark( if os.environ.get("LLAMA_ARG_N_PARALLEL") is None: logger.info("LLAMA_ARG_N_PARALLEL not explicitly set, using 32") os.environ["LLAMA_ARG_N_PARALLEL"] = "32" - if not external_server and os.environ.get("LLAMA_ARG_N_GPU_LAYERS") is None: - logger.info("LLAMA_ARG_N_GPU_LAYERS not explicitly set, using 999") - os.environ["LLAMA_ARG_N_GPU_LAYERS"] = "999" - if not external_server and os.environ.get("LLAMA_ARG_FLASH_ATTN") is None: - logger.info("LLAMA_ARG_FLASH_ATTN not explicitly set, using 'true'") - os.environ["LLAMA_ARG_FLASH_ATTN"] = "true" parallel: int = int(os.environ.get("LLAMA_ARG_N_PARALLEL")) # type: ignore prompts: Union[None, list[str], list[list[int]]] = get_prompts_text(prompt_source, n_prompts) diff --git a/scripts/tool_bench.py b/scripts/tool_bench.py index d8018e2e23..05d6dfc30a 100755 --- a/scripts/tool_bench.py +++ b/scripts/tool_bench.py @@ -323,7 +323,7 @@ def run( server.jinja = True server.ctk = ctk server.ctv = ctv - server.fa = fa + server.fa = "on" if fa else "off" server.n_predict = n_predict server.model_hf_repo = hf server.model_hf_file = None diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 6b20161a38..ac8453ab74 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -41,7 +41,6 @@ llama_context::llama_context( cparams.yarn_beta_slow = params.yarn_beta_slow; cparams.embeddings = params.embeddings; cparams.offload_kqv = params.offload_kqv; - cparams.flash_attn = params.flash_attn; cparams.no_perf = params.no_perf; cparams.pooling_type = params.pooling_type; cparams.warmup = false; @@ -86,6 +85,8 @@ llama_context::llama_context( cparams.causal_attn = params.attention_type == LLAMA_ATTENTION_TYPE_CAUSAL; } + cparams.flash_attn = params.flash_attn_type != LLAMA_FLASH_ATTN_TYPE_DISABLED; + // with causal attention, the batch size is limited by the context size cparams.n_batch = cparams.causal_attn ? std::min(cparams.n_ctx, params.n_batch) : params.n_batch; @@ -119,7 +120,7 @@ llama_context::llama_context( LLAMA_LOG_INFO("%s: n_batch = %u\n", __func__, cparams.n_batch); LLAMA_LOG_INFO("%s: n_ubatch = %u\n", __func__, cparams.n_ubatch); LLAMA_LOG_INFO("%s: causal_attn = %d\n", __func__, cparams.causal_attn); - LLAMA_LOG_INFO("%s: flash_attn = %d\n", __func__, cparams.flash_attn); + LLAMA_LOG_INFO("%s: flash_attn = %s\n", __func__, llama_flash_attn_type_name(params.flash_attn_type)); LLAMA_LOG_INFO("%s: kv_unified = %s\n", __func__, cparams.kv_unified ? "true" : "false"); LLAMA_LOG_INFO("%s: freq_base = %.1f\n", __func__, cparams.rope_freq_base); LLAMA_LOG_INFO("%s: freq_scale = %g\n", __func__, cparams.rope_freq_scale); @@ -269,7 +270,7 @@ llama_context::llama_context( } } - // reserve worst-case graph + // resolve automatic Flash Attention use and reserve worst-case graph if (!hparams.vocab_only) { const uint32_t n_seqs = cparams.kv_unified ? 1 : cparams.n_seq_max; const uint32_t n_tokens = std::min(cparams.n_ctx, cparams.n_ubatch); @@ -300,6 +301,48 @@ llama_context::llama_context( throw std::runtime_error("failed to allocate compute pp buffers"); } + if (params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_AUTO) { + ggml_backend_sched_alloc_graph(sched.get(), gf); + + const size_t prefix_len = strlen(LLAMA_TENSOR_NAME_FATTN) + 1; + bool fa_device_mismatch = false; + for (int i = 0; i < ggml_graph_n_nodes(gf); i++) { + ggml_tensor * n = ggml_graph_node(gf, i); + if (n->op != GGML_OP_FLASH_ATTN_EXT) { + continue; + } + ggml_backend_dev_t device_fa = ggml_backend_get_device( + ggml_backend_sched_get_tensor_backend(sched.get(), n)); + + // TODO: instead of the tensor names, use a map to keep track of which (FA) tensors belong to which layer + GGML_ASSERT(strncmp(n->name, LLAMA_TENSOR_NAME_FATTN "-", prefix_len) == 0); + const int il = std::stoi(n->name + prefix_len); + ggml_backend_dev_t device_kv = model.dev_layer(il); + if (device_fa != device_kv) { + LLAMA_LOG_WARN("%s: layer %d is assigned to device %s but the Flash Attention tensor " + "is assigned to device %s (usually due to missing support)\n", + __func__, il, ggml_backend_dev_name(device_kv), ggml_backend_dev_name(device_fa)); + // FIXME: fa_device_mismatch logic is wrong for --no-kv-offload, but this is broken anyways + fa_device_mismatch = true; + break; + } + } + if (fa_device_mismatch) { + cparams.flash_attn = false; + LLAMA_LOG_WARN("%s: Flash Attention was auto, set to disabled\n", __func__); + if (ggml_is_quantized(params.type_v)) { + throw std::runtime_error("quantized V cache was requested, but this requires Flash Attention"); + } + auto * gf = graph_reserve(n_tokens, n_seqs, n_tokens, mctx.get()); + if (!gf) { + throw std::runtime_error("failed to allocate compute pp buffers"); + } + } else { + cparams.flash_attn = true; + LLAMA_LOG_INFO("%s: Flash Attention was auto, set to enabled\n", __func__); + } + } + n_splits_pp = ggml_backend_sched_get_n_splits(sched.get()); n_nodes_pp = ggml_graph_n_nodes(gf); } @@ -2208,6 +2251,7 @@ llama_context_params llama_context_default_params() { /*.rope_scaling_type =*/ LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED, /*.pooling_type =*/ LLAMA_POOLING_TYPE_UNSPECIFIED, /*.attention_type =*/ LLAMA_ATTENTION_TYPE_UNSPECIFIED, + /*.flash_attn_type =*/ LLAMA_FLASH_ATTN_TYPE_AUTO, /*.rope_freq_base =*/ 0.0f, /*.rope_freq_scale =*/ 0.0f, /*.yarn_ext_factor =*/ -1.0f, @@ -2224,7 +2268,6 @@ llama_context_params llama_context_default_params() { /*.abort_callback_data =*/ nullptr, /*.embeddings =*/ false, /*.offload_kqv =*/ true, - /*.flash_attn =*/ false, /*.no_perf =*/ true, /*.op_offload =*/ true, /*.swa_full =*/ true, @@ -2252,12 +2295,30 @@ llama_context * llama_init_from_model( return nullptr; } - if (params.flash_attn && model->arch == LLM_ARCH_GROK) { + if (params.flash_attn_type != LLAMA_FLASH_ATTN_TYPE_DISABLED && model->arch == LLM_ARCH_GROK) { LLAMA_LOG_WARN("%s: flash_attn is not compatible with Grok - forcing off\n", __func__); - params.flash_attn = false; + params.flash_attn_type = LLAMA_FLASH_ATTN_TYPE_DISABLED; } - if (ggml_is_quantized(params.type_v) && !params.flash_attn) { + if (params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_AUTO && ggml_is_quantized(params.type_k)) { + const uint32_t blck_size = ggml_blck_size(params.type_k); + if (model->hparams.n_embd_head_k % blck_size != 0) { + LLAMA_LOG_ERROR("%s: K cache type %s with block size %u does not divide n_embd_head_k=%u\n", + __func__, ggml_type_name(params.type_k), blck_size, model->hparams.n_embd_head_k); + return nullptr; + } + } + + if (params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_AUTO && ggml_is_quantized(params.type_v)) { + const uint32_t blck_size = ggml_blck_size(params.type_v); + if (model->hparams.n_embd_head_v % blck_size != 0) { + LLAMA_LOG_ERROR("%s: V cache type %s with block size %u does not divide n_embd_head_k=%u\n", + __func__, ggml_type_name(params.type_v), blck_size, model->hparams.n_embd_head_v); + return nullptr; + } + } + + if (ggml_is_quantized(params.type_v) && params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_DISABLED) { LLAMA_LOG_ERROR("%s: V cache quantization requires flash_attn\n", __func__); return nullptr; } diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 1f2fc3ab62..49ea5da7cb 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -1221,7 +1221,8 @@ ggml_tensor * llm_graph_context::build_attn_mha( ggml_tensor * kq_mask, ggml_tensor * sinks, ggml_tensor * v_mla, - float kq_scale) const { + float kq_scale, + int il) const { const bool v_trans = v->nb[1] > v->nb[2]; // split the batch into streams if needed @@ -1256,6 +1257,7 @@ ggml_tensor * llm_graph_context::build_attn_mha( cur = ggml_flash_attn_ext(ctx0, q, k, v, kq_mask, kq_scale, hparams.f_max_alibi_bias, hparams.attn_soft_cap ? hparams.f_attn_logit_softcapping : 0.0f); + cb(cur, LLAMA_TENSOR_NAME_FATTN, il); ggml_flash_attn_ext_add_sinks(cur, sinks); ggml_flash_attn_ext_set_prec (cur, GGML_PREC_F32); @@ -1271,6 +1273,7 @@ ggml_tensor * llm_graph_context::build_attn_mha( // The permutations are noops and only change how the tensor data is interpreted. cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); cur = ggml_mul_mat(ctx0, v_mla, cur); + cb(cur, "fattn_mla", il); cur = ggml_permute(ctx0, cur, 0, 2, 1, 3); cur = ggml_cont(ctx0, cur); // Needed because ggml_reshape_2d expects contiguous inputs. #endif @@ -1279,6 +1282,7 @@ ggml_tensor * llm_graph_context::build_attn_mha( cur = ggml_reshape_2d(ctx0, cur, cur->ne[0]*cur->ne[1], cur->ne[2]*cur->ne[3]); } else { ggml_tensor * kq = ggml_mul_mat(ctx0, k, q); + cb(kq, "kq", il); // note: this op tends to require high floating point range // while for some models F16 is enough, for others it is not, so we default to F32 here @@ -1292,32 +1296,42 @@ ggml_tensor * llm_graph_context::build_attn_mha( // before the softmax below kq = ggml_tanh(ctx0, ggml_scale(ctx0, kq, 0.08838834764831845f/30.0f)); + cb(kq, "kq_tanh", il); kq = ggml_scale(ctx0, kq, 30); + cb(kq, "kq_scaled", il); } if (hparams.attn_soft_cap) { kq = ggml_scale(ctx0, kq, 1.0f / hparams.f_attn_logit_softcapping); + cb(kq, "kq_scaled_1", il); kq = ggml_tanh (ctx0, kq); + cb(kq, "kq_tanh", il); kq = ggml_scale(ctx0, kq, hparams.f_attn_logit_softcapping); + cb(kq, "kq_scaled_2", il); } if (kq_b) { kq = ggml_add(ctx0, kq, kq_b); + cb(kq, "kq_plus_kq_b", il); } kq = ggml_soft_max_ext(ctx0, kq, kq_mask, kq_scale, hparams.f_max_alibi_bias); ggml_soft_max_add_sinks(kq, sinks); + cb(kq, "kq_soft_max", il); if (!v_trans) { // note: avoid this branch v = ggml_cont(ctx0, ggml_transpose(ctx0, v)); + cb(v, "v_cont", il); } ggml_tensor * kqv = ggml_mul_mat(ctx0, v, kq); + cb(kqv, "kqv", il); // for MLA with the absorption optimization, we need to "decompress" from MQA back to MHA if (v_mla) { kqv = ggml_mul_mat(ctx0, v_mla, kqv); + cb(kqv, "kqv_mla", il); } cur = ggml_permute(ctx0, kqv, 0, 2, 1, 3); @@ -1378,7 +1392,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = k_cur; ggml_tensor * v = v_cur; - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale, il); cb(cur, "kqv_out", il); if (wo) { @@ -1467,7 +1481,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = mctx_cur->get_k(ctx0, il); ggml_tensor * v = mctx_cur->get_v(ctx0, il); - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale, il); cb(cur, "kqv_out", il); if (wo) { @@ -1534,7 +1548,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = mctx_cur->get_k(ctx0, il); ggml_tensor * v = mctx_cur->get_v(ctx0, il); - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale, il); cb(cur, "kqv_out", il); if (wo) { @@ -1589,7 +1603,7 @@ ggml_tensor * llm_graph_context::build_attn( ggml_tensor * k = k_cur; ggml_tensor * v = v_cur; - ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale); + ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale, il); cb(cur, "kqv_out", il); if (wo) { diff --git a/src/llama-graph.h b/src/llama-graph.h index e11d91d529..3c85333fde 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -687,7 +687,8 @@ struct llm_graph_context { ggml_tensor * kq_mask, ggml_tensor * sinks, // [n_head_q] ggml_tensor * v_mla, // [n_embd_head_v_mla, n_embd_head_v, n_head_v] - float kq_scale) const; + float kq_scale, + int il) const; llm_graph_input_attn_no_cache * build_attn_inp_no_cache() const; diff --git a/src/llama-impl.h b/src/llama-impl.h index 02b1d07f84..c5163e9225 100644 --- a/src/llama-impl.h +++ b/src/llama-impl.h @@ -59,3 +59,5 @@ std::string llama_format_tensor_shape(const std::vector & ne); std::string llama_format_tensor_shape(const struct ggml_tensor * t); std::string gguf_kv_to_str(const struct gguf_context * ctx_gguf, int i); + +#define LLAMA_TENSOR_NAME_FATTN "__fattn__" diff --git a/src/llama-model.cpp b/src/llama-model.cpp index f3e0e9ac64..58a0581e26 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -18994,7 +18994,7 @@ llama_model_params llama_model_default_params() { llama_model_params result = { /*.devices =*/ nullptr, /*.tensor_buft_overrides =*/ nullptr, - /*.n_gpu_layers =*/ 0, + /*.n_gpu_layers =*/ 999, /*.split_mode =*/ LLAMA_SPLIT_MODE_LAYER, /*.main_gpu =*/ 0, /*.tensor_split =*/ nullptr, @@ -19008,11 +19008,6 @@ llama_model_params llama_model_default_params() { /*.use_extra_bufts =*/ true, }; -#ifdef GGML_USE_METAL - // note: we usually have plenty of VRAM, so by default offload all layers to the GPU - result.n_gpu_layers = 999; -#endif - return result; } diff --git a/src/llama.cpp b/src/llama.cpp index 34906cdb62..f0d4f5f891 100644 --- a/src/llama.cpp +++ b/src/llama.cpp @@ -25,6 +25,18 @@ // interface implementation // +const char * llama_flash_attn_type_name(enum llama_flash_attn_type flash_attn_type) { + switch (flash_attn_type) { + case LLAMA_FLASH_ATTN_TYPE_AUTO: + return "auto"; + case LLAMA_FLASH_ATTN_TYPE_DISABLED: + return "disabled"; + case LLAMA_FLASH_ATTN_TYPE_ENABLED: + return "enabled"; + } + GGML_ABORT("fatal error"); +} + struct llama_sampler_chain_params llama_sampler_chain_default_params() { struct llama_sampler_chain_params result = { /*.no_perf =*/ true, diff --git a/tools/batched-bench/batched-bench.cpp b/tools/batched-bench/batched-bench.cpp index 23d03039dc..46dd12caae 100644 --- a/tools/batched-bench/batched-bench.cpp +++ b/tools/batched-bench/batched-bench.cpp @@ -111,7 +111,7 @@ int main(int argc, char ** argv) { if (!params.batched_bench_output_jsonl) { LOG("\n"); - LOG("%s: n_kv_max = %d, n_batch = %d, n_ubatch = %d, flash_attn = %d, is_pp_shared = %d, n_gpu_layers = %d, n_threads = %u, n_threads_batch = %u\n", __func__, n_kv_max, params.n_batch, params.n_ubatch, params.flash_attn, params.is_pp_shared, params.n_gpu_layers, ctx_params.n_threads, ctx_params.n_threads_batch); + LOG("%s: n_kv_max = %d, n_batch = %d, n_ubatch = %d, flash_attn = %d, is_pp_shared = %d, n_gpu_layers = %d, n_threads = %u, n_threads_batch = %u\n", __func__, n_kv_max, params.n_batch, params.n_ubatch, int(params.flash_attn_type), params.is_pp_shared, params.n_gpu_layers, ctx_params.n_threads, ctx_params.n_threads_batch); LOG("\n"); LOG("|%6s | %6s | %4s | %6s | %8s | %8s | %8s | %8s | %8s | %8s |\n", "PP", "TG", "B", "N_KV", "T_PP s", "S_PP t/s", "T_TG s", "S_TG t/s", "T s", "S t/s"); LOG("|%6s-|-%6s-|-%4s-|-%6s-|-%8s-|-%8s-|-%8s-|-%8s-|-%8s-|-%8s-|\n", "------", "------", "----", "------", "--------", "--------", "--------", "--------", "--------", "--------"); @@ -197,7 +197,7 @@ int main(int argc, char ** argv) { LOG( "{\"n_kv_max\": %d, \"n_batch\": %d, \"n_ubatch\": %d, \"flash_attn\": %d, \"is_pp_shared\": %d, \"n_gpu_layers\": %d, \"n_threads\": %u, \"n_threads_batch\": %u, " "\"pp\": %d, \"tg\": %d, \"pl\": %d, \"n_kv\": %d, \"t_pp\": %f, \"speed_pp\": %f, \"t_tg\": %f, \"speed_tg\": %f, \"t\": %f, \"speed\": %f}\n", - n_kv_max, params.n_batch, params.n_ubatch, params.flash_attn, params.is_pp_shared, params.n_gpu_layers, ctx_params.n_threads, ctx_params.n_threads_batch, + n_kv_max, params.n_batch, params.n_ubatch, int(params.flash_attn_type), params.is_pp_shared, params.n_gpu_layers, ctx_params.n_threads, ctx_params.n_threads_batch, pp, tg, pl, n_kv, t_pp, speed_pp, t_tg, speed_tg, t, speed ); } else { diff --git a/tools/llama-bench/llama-bench.cpp b/tools/llama-bench/llama-bench.cpp index 9378706a12..9b9803deda 100644 --- a/tools/llama-bench/llama-bench.cpp +++ b/tools/llama-bench/llama-bench.cpp @@ -987,16 +987,16 @@ struct cmd_params_instance { llama_context_params to_llama_cparams() const { llama_context_params cparams = llama_context_default_params(); - cparams.n_ctx = n_prompt + n_gen + n_depth; - cparams.n_batch = n_batch; - cparams.n_ubatch = n_ubatch; - cparams.type_k = type_k; - cparams.type_v = type_v; - cparams.offload_kqv = !no_kv_offload; - cparams.flash_attn = flash_attn; - cparams.embeddings = embeddings; - cparams.op_offload = !no_op_offload; - cparams.swa_full = false; + cparams.n_ctx = n_prompt + n_gen + n_depth; + cparams.n_batch = n_batch; + cparams.n_ubatch = n_ubatch; + cparams.type_k = type_k; + cparams.type_v = type_v; + cparams.offload_kqv = !no_kv_offload; + cparams.flash_attn_type = flash_attn ? LLAMA_FLASH_ATTN_TYPE_ENABLED : LLAMA_FLASH_ATTN_TYPE_DISABLED; + cparams.embeddings = embeddings; + cparams.op_offload = !no_op_offload; + cparams.swa_full = false; return cparams; } diff --git a/tools/server/tests/unit/test_ctx_shift.py b/tools/server/tests/unit/test_ctx_shift.py index 8f51bc301a..92e49f2bb0 100644 --- a/tools/server/tests/unit/test_ctx_shift.py +++ b/tools/server/tests/unit/test_ctx_shift.py @@ -15,25 +15,26 @@ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deseru def create_server(): global server server = ServerPreset.tinyllama2() - server.n_ctx = 256 + server.n_ctx = 512 server.n_slots = 2 + server.n_predict = 128 def test_ctx_shift_enabled(): # the prompt is 301 tokens - # the slot context is 256/2 = 128 tokens - # the prompt is truncated to keep the last 109 tokens - # 64 tokens are generated thanks to shifting the context when it gets full + # the slot context is 512/2 = 256 tokens + # the prompt is truncated to keep the last (301 - 256/2) = 173 tokens + # 96 tokens are generated thanks to shifting the context when it gets full global server server.enable_ctx_shift = True server.start() res = server.make_request("POST", "/completion", data={ - "n_predict": 64, + "n_predict": 96, "prompt": LONG_TEXT, }) assert res.status_code == 200 - assert res.body["timings"]["prompt_n"] == 109 - assert res.body["timings"]["predicted_n"] == 64 + assert res.body["timings"]["prompt_n"] == 173 + assert res.body["timings"]["predicted_n"] == 96 assert res.body["truncated"] is True diff --git a/tools/server/tests/unit/test_speculative.py b/tools/server/tests/unit/test_speculative.py index 38ca4325ba..65952de8b8 100644 --- a/tools/server/tests/unit/test_speculative.py +++ b/tools/server/tests/unit/test_speculative.py @@ -14,6 +14,7 @@ def create_server(): server.model_draft = download_file(MODEL_DRAFT_FILE_URL) server.draft_min = 4 server.draft_max = 8 + server.fa = "off" @pytest.fixture(autouse=True) diff --git a/tools/server/tests/utils.py b/tools/server/tests/utils.py index f55a539471..82f7215d53 100644 --- a/tools/server/tests/utils.py +++ b/tools/server/tests/utils.py @@ -66,7 +66,7 @@ class ServerProcess: n_slots: int | None = None ctk: str | None = None ctv: str | None = None - fa: bool | None = None + fa: str | None = None server_continuous_batching: bool | None = False server_embeddings: bool | None = False server_reranking: bool | None = False @@ -161,7 +161,7 @@ class ServerProcess: if self.ctv: server_args.extend(["-ctv", self.ctv]) if self.fa is not None: - server_args.append("-fa") + server_args.extend(["-fa", self.fa]) if self.n_predict: server_args.extend(["--n-predict", self.n_predict]) if self.slot_save_path: @@ -427,7 +427,7 @@ class ServerPreset: server.n_batch = 300 server.n_ubatch = 300 server.n_slots = 2 - server.fa = True + server.fa = "on" server.seed = 42 server.server_embeddings = True return server From dd892555b0681b7f56d38780f6fdfe00a195160f Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Sat, 30 Aug 2025 08:51:28 -0700 Subject: [PATCH 157/174] Update build.md to remove MSVC arm64 notes (#15684) Removed information about MSVC compiler limitations for arm64 builds. --- docs/build.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/build.md b/docs/build.md index b35a898ba9..dcbcce7549 100644 --- a/docs/build.md +++ b/docs/build.md @@ -59,8 +59,6 @@ cmake --build build --config Release cmake --preset arm64-windows-llvm-release -D GGML_OPENMP=OFF cmake --build build-arm64-windows-llvm-release ``` - Building for arm64 can also be done with the MSVC compiler with the build-arm64-windows-MSVC preset, or the standard CMake build instructions. However, note that the MSVC compiler does not support inline ARM assembly code, used e.g. for the accelerated Q4_0_N_M CPU kernels. - For building with ninja generator and clang compiler as default: -set path:set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\lib\x64\uwp;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64 ```bash From 4d74393bcc956ccd7df68a6a06d1a0575cfa712c Mon Sep 17 00:00:00 2001 From: Charles Xu Date: Sat, 30 Aug 2025 18:03:42 +0200 Subject: [PATCH 158/174] ggml: update kleidiai to v1.13.0 (#15663) --- ggml/CMakeLists.txt | 2 +- ggml/src/ggml-cpu/CMakeLists.txt | 8 ++-- ggml/src/ggml-cpu/kleidiai/kernels.cpp | 49 ++++++++++++++++++++++--- ggml/src/ggml-cpu/kleidiai/kernels.h | 5 ++- ggml/src/ggml-cpu/kleidiai/kleidiai.cpp | 23 +++++++----- 5 files changed, 67 insertions(+), 20 deletions(-) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 2ead001e2c..96be001f8c 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) # for add_link_options and implicit target directories. -project("ggml" C CXX) +project("ggml" C CXX ASM) include(CheckIncludeFileCXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index b70302ec8c..040b7ded90 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -497,9 +497,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name) # Fetch KleidiAI sources: include(FetchContent) - set(KLEIDIAI_COMMIT_TAG "v1.11.0") + set(KLEIDIAI_COMMIT_TAG "v1.13.0") set(KLEIDIAI_DOWNLOAD_URL "https://github.com/ARM-software/kleidiai/archive/refs/tags/${KLEIDIAI_COMMIT_TAG}.tar.gz") - set(KLEIDIAI_ARCHIVE_MD5 "3fe9e5ab964c375c53839296eb71eaa2") + set(KLEIDIAI_ARCHIVE_MD5 "d82a8de939d9814621a5ba23907bdac1") if (POLICY CMP0135) cmake_policy(SET CMP0135 NEW) @@ -555,6 +555,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND GGML_KLEIDIAI_SOURCES ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qsi8d32p_f32.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qsi8d32p4x8sb_f32_neon.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi4c32ps1s0scalef16_qsu4c32s16s0_neon.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qsi8d32p_f32_neon.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi4c32pscalef16_qsu4c32s16s0.c) @@ -576,7 +577,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name) ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4vlx4_1x4vl_sme2_sdot.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_fp32_bf16p_bf16p/kai_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_pack_bf16p2vlx2_f32_sme.c - ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_kxn_bf16p2vlx2b_f32_x32_sme.c) + ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_kxn_bf16p2vlx2b_f32_x32_sme.c + ${KLEIDIAI_SRC}/kai/kai_common_sme_asm.S) set(PRIVATE_ARCH_FLAGS "-fno-tree-vectorize;${PRIVATE_ARCH_FLAGS}+sve+sve2") endif() diff --git a/ggml/src/ggml-cpu/kleidiai/kernels.cpp b/ggml/src/ggml-cpu/kleidiai/kernels.cpp index ddd29d002d..7ba659124c 100644 --- a/ggml/src/ggml-cpu/kleidiai/kernels.cpp +++ b/ggml/src/ggml-cpu/kleidiai/kernels.cpp @@ -14,6 +14,7 @@ #include "kai_lhs_pack_bf16p2vlx2_f32_sme.h" #include "kai_lhs_quant_pack_qsi8d32p_f32.h" +#include "kai_lhs_quant_pack_qsi8d32p4x8sb_f32_neon.h" #include "kai_lhs_quant_pack_qsi8d32p_f32_neon.h" #include "kai_rhs_pack_kxn_bf16p2vlx2b_f32_x32_sme.h" @@ -127,6 +128,12 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p1vlx4_qsi4c32p4vlx4_1vlx4vl_sme2_mopa, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p1vlx4_qsi4c32p4vlx4_1vlx4vl_sme2_mopa, }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32_neon, + /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32_neon, + /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32_neon, + /* .pack_func = */ kai_run_lhs_quant_pack_qsi8d32p_f32_neon, + }, /* SME GEMV */ /* .kern_info = */ { /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4vlx4_1x4vl_sme2_sdot, @@ -141,7 +148,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4vlx4_1x4vl_sme2_sdot, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4vlx4_1x4vl_sme2_sdot, }, - /* .lhs_info = */ { + /* .gemv_lhs_info = */ { /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32_neon, /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32_neon, /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32_neon, @@ -173,6 +180,12 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa, /* .run_kernel = */ kai_run_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa, }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_pack_bf16p2vlx2_f32_sme, + /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_pack_bf16p2vlx2_f32_sme, + /* .packed_size = */ kai_get_lhs_packed_size_lhs_pack_bf16p2vlx2_f32_sme, + /* .pack_func = */ kai_run_lhs_pack_bf16p2vlx2_f32_sme, + }, /* SME GEMV */ /* .kern_info = */ { /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa, @@ -187,7 +200,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa, /* .run_kernel = */ kai_run_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa, }, - /* .lhs_info = */ { + /* .gemv_lhs_info = */ { /* .get_offset = */ kai_get_lhs_offset_lhs_pack_bf16p2vlx2_f32_sme, /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_pack_bf16p2vlx2_f32_sme, /* .packed_size = */ kai_get_lhs_packed_size_lhs_pack_bf16p2vlx2_f32_sme, @@ -222,6 +235,12 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod, }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32, + /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32, + /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32, + /* .pack_func = */ kai_run_lhs_quant_pack_qsi8d32p_f32, + }, /* DOTPROD GEMV */ /* .kern_info = */ { /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod, @@ -236,7 +255,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod, }, - /* .lhs_info = */ { + /* .gemv_lhs_info = */ { /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32, /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32, /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32, @@ -270,6 +289,12 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p4x8_qsi4c32p4x8_16x4_neon_i8mm, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p4x8_qsi4c32p4x8_16x4_neon_i8mm, }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + /* .pack_func = */ kai_run_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + }, /* i8mm GEMV */ /* .kern_info = */ { /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod, @@ -284,7 +309,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod, }, - /* .lhs_info = */ { + /* .gemv_lhs_info = */ { /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32, /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32, /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32, @@ -319,6 +344,12 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p4x8_qsi4c32p4x8_16x4_neon_i8mm, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p4x8_qsi4c32p4x8_16x4_neon_i8mm, }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + /* .pack_func = */ kai_run_lhs_quant_pack_qsi8d32p4x8sb_f32_neon, + }, /* i8mm GEMV */ /* .kern_info = */ { /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod, @@ -333,7 +364,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod, }, - /* .lhs_info = */ { + /* .gemv_lhs_info = */ { /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32, /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32, /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32, @@ -367,6 +398,12 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod, }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32, + /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32, + /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32, + /* .pack_func = */ kai_run_lhs_quant_pack_qsi8d32p_f32, + }, /* DOTPROD GEMV */ /* .kern_info = */ { /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod, @@ -381,7 +418,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod, /* .run_kernel = */ kai_run_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod, }, - /* .lhs_info = */ { + /* .gemv_lhs_info = */ { /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qsi8d32p_f32, /* .get_packed_offset = */ kai_get_lhs_packed_offset_lhs_quant_pack_qsi8d32p_f32, /* .packed_size = */ kai_get_lhs_packed_size_lhs_quant_pack_qsi8d32p_f32, diff --git a/ggml/src/ggml-cpu/kleidiai/kernels.h b/ggml/src/ggml-cpu/kleidiai/kernels.h index bc8f33405d..2ad6ad6fd0 100644 --- a/ggml/src/ggml-cpu/kleidiai/kernels.h +++ b/ggml/src/ggml-cpu/kleidiai/kernels.h @@ -84,8 +84,11 @@ struct rhs_packing_info { struct ggml_kleidiai_kernels { kernel_info gemm; + lhs_packing_info gemm_lhs_info; + kernel_info gemv; - lhs_packing_info lhs_info; + lhs_packing_info gemv_lhs_info; + rhs_packing_info rhs_info; cpu_feature required_cpu; diff --git a/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp b/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp index dff8fa244a..7a830448eb 100644 --- a/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +++ b/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp @@ -123,7 +123,9 @@ class tensor_traits : public ggml::cpu::tensor_traits { } ggml_kleidiai_kernels *kernels = ggml_kleidiai_select_kernels(ctx.features, op); GGML_ASSERT(kernels); - kernel_info * kernel = op->src[1]->ne[1] == 1 ? &kernels->gemv : &kernels->gemm; + bool is_gemv = op->src[1]->ne[1] == 1; + kernel_info * kernel = is_gemv ? &kernels->gemv : &kernels->gemm; + lhs_packing_info * lhs_info = is_gemv ? &kernels->gemv_lhs_info : &kernels->gemm_lhs_info; size_t k = op->src[0]->ne[0]; size_t n = op->src[0]->ne[1]; @@ -134,9 +136,9 @@ class tensor_traits : public ggml::cpu::tensor_traits { size_t sr = kernel->get_sr(); if (kernels->rhs_type == GGML_TYPE_Q4_0) { - size = variant_call(kernels->lhs_info.packed_size, m, k, QK4_0, mr, kr, sr); + size = variant_call(lhs_info->packed_size, m, k, QK4_0, mr, kr, sr); } else if (kernels->rhs_type == GGML_TYPE_F16) { - size = variant_call(kernels->lhs_info.packed_size, m, k, mr, kr, sr) + + size = variant_call(lhs_info->packed_size, m, k, mr, kr, sr) + variant_call(kernels->rhs_info.packed_size, n, k) + k * n * sizeof(float) + n * sizeof(float); } else { @@ -173,7 +175,9 @@ class tensor_traits : public ggml::cpu::tensor_traits { ggml_kleidiai_kernels *kernels = ggml_kleidiai_select_kernels(ctx.features, dst); GGML_ASSERT(kernels); - kernel_info * kernel = src1->ne[1] == 1 ? &kernels->gemv : &kernels->gemm; + bool is_gemv = src1->ne[1] == 1; + kernel_info * kernel = is_gemv ? &kernels->gemv : &kernels->gemm; + lhs_packing_info * lhs_info = is_gemv ? &kernels->gemv_lhs_info : &kernels->gemm_lhs_info; GGML_ASSERT(kernel); const int nth = params->nth; @@ -198,7 +202,7 @@ class tensor_traits : public ggml::cpu::tensor_traits { const int64_t kr = static_cast(kernel->get_kr()); const int64_t sr = static_cast(kernel->get_sr()); - const size_t lhs_packed_size = variant_call(kernels->lhs_info.packed_size, m, k, mr, kr, sr); + const size_t lhs_packed_size = variant_call(lhs_info->packed_size, m, k, mr, kr, sr); const size_t rhs_packed_size = variant_call(kernels->rhs_info.packed_size, n, k); const size_t kxn_size = k * n * sizeof(float); const size_t bias_size = n * sizeof(float); @@ -229,12 +233,12 @@ class tensor_traits : public ggml::cpu::tensor_traits { const int64_t num_m_per_thread = (ith == num_threads - 1) ? num_m_per_threadN_1 : num_m_per_thread0; const size_t lhs_offset = variant_call(kernels->gemm.get_lhs_offset, m_start, lhs_stride); - const size_t lhs_packed_offset = variant_call(kernels->lhs_info.get_packed_offset, m_start, k, mr, kr, sr); + const size_t lhs_packed_offset = variant_call(lhs_info->get_packed_offset, m_start, k, mr, kr, sr); const void * src_ptr = static_cast(lhs_batch) + lhs_offset; void * dst_ptr = static_cast(lhs_packed) + lhs_packed_offset; - variant_call(kernels->lhs_info.pack_func, num_m_per_thread, k, mr, kr, sr, 0, src_ptr, lhs_stride, dst_ptr); + variant_call(lhs_info->pack_func, num_m_per_thread, k, mr, kr, sr, 0, src_ptr, lhs_stride, dst_ptr); } } @@ -306,8 +310,9 @@ class tensor_traits : public ggml::cpu::tensor_traits { ggml_kleidiai_kernels *kernels = ggml_kleidiai_select_kernels(ctx.features, dst); GGML_ASSERT(kernels); - kernel_info * kernel = src1->ne[1] == 1 ? &kernels->gemv : &kernels->gemm; - lhs_packing_info * lhs_info = &kernels->lhs_info; + bool is_gemv = src1->ne[1] == 1; + kernel_info * kernel = is_gemv ? &kernels->gemv : &kernels->gemm; + lhs_packing_info * lhs_info = is_gemv ? &kernels->gemv_lhs_info : &kernels->gemm_lhs_info; GGML_ASSERT(kernel); From 94e82c7eadeb8fff0db4bfd1ab6d8cf65fa6f2e0 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 31 Aug 2025 01:27:57 -0500 Subject: [PATCH 159/174] vulkan: clamp matmul and FA results to the max finite value (#15652) * vulkan: clamp matmul and FA results to the max finite value * only clamp for fp16 --- .../vulkan-shaders/flash_attn.comp | 3 +++ .../vulkan-shaders/flash_attn_cm1.comp | 3 +++ .../vulkan-shaders/flash_attn_cm2.comp | 4 ++++ .../flash_attn_split_k_reduce.comp | 4 ++++ .../ggml-vulkan/vulkan-shaders/mul_mm.comp | 14 +++++++++++ .../vulkan-shaders/mul_mm_cm2.comp | 15 ++++++++++++ .../vulkan-shaders/vulkan-shaders-gen.cpp | 23 ++++++++++++------- 7 files changed, 58 insertions(+), 8 deletions(-) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp index d40848e15f..482445c6fe 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp @@ -334,6 +334,9 @@ void main() { [[unroll]] for (uint32_t d = 0; d < HSV_per_thread / 4; ++d) { [[unroll]] for (uint32_t r = 0; r < Br; ++r) { Of[r][d] *= Lfrcp[r]; +#if defined(ACC_TYPE_MAX) + Of[r][d] = clamp(Of[r][d], -vec4(ACC_TYPE_MAX), vec4(ACC_TYPE_MAX)); +#endif } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp index 97c2a54129..63b32171b0 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm1.comp @@ -373,6 +373,9 @@ void main() { [[unroll]] for (uint32_t d = 0; d < HSV_per_thread / 4; ++d) { [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { Of[r][d] *= ACC_TYPE(Lfrcp[r]); +#if defined(ACC_TYPE_MAX) + Of[r][d] = clamp(Of[r][d], -ACC_TYPE_MAX, ACC_TYPE_MAX); +#endif } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp index 77ae5ff01d..ab647e9bc8 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_cm2.comp @@ -283,6 +283,10 @@ void main() { O = Ldiag*O; +#if defined(ACC_TYPE_MAX) + [[unroll]] for (uint i = 0; i < O.length(); ++i) { O[i] = clamp(O[i], -ACC_TYPE_MAX, ACC_TYPE_MAX); } +#endif + uint32_t o_offset = iq3*p.ne2*p.ne1*HSV; coopmat O_D = coopmat(O); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_split_k_reduce.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_split_k_reduce.comp index 76ef4b6dfb..06e83822fe 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_split_k_reduce.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn_split_k_reduce.comp @@ -111,6 +111,10 @@ void main() { } } O *= L; + + const float FLT_MAX = uintBitsToFloat(0x7F7FFFFF); + O = clamp(O, -FLT_MAX, FLT_MAX); + data_d[iq3 * D * N + D * n + d] = O; } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index 5ecf68a643..7e10e99e9e 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -891,6 +891,20 @@ void main() { barrier(); } +#if defined(ACC_TYPE_MAX) +#ifdef COOPMAT + [[unroll]] for (uint j = 0; j < cms_per_row * cms_per_col; j++) { + [[unroll]] for (uint i = 0; i < sums[j].length(); ++i) { + sums[j][i] = clamp(sums[j][i], -ACC_TYPE_MAX, ACC_TYPE_MAX); + } + } +#else + [[unroll]] for (uint i = 0; i < WMITER*TM*WNITER*TN; i++) { + sums[i] = clamp(sums[i], -ACC_TYPE_MAX, ACC_TYPE_MAX); + } +#endif +#endif + const uint dr = ir * BM + warp_r * WM; const uint dc = ic * BN + warp_c * WN; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp index f5aebf6e93..dd1b176049 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp @@ -349,6 +349,10 @@ void main() { sum = coopMatMulAdd(mat_a, mat_b, sum); block_k += BK; } +#if defined(ACC_TYPE_MAX) + [[unroll]] for (uint i = 0; i < sum.length(); ++i) { sum[i] = clamp(sum[i], -ACC_TYPE_MAX, ACC_TYPE_MAX); } +#endif + coopmat mat_d = coopmat(sum); coopMatStoreTensorNV(mat_d, data_d, pos_d, sliceTensorLayoutNV(tensorLayoutD, ic * BN, BNover4, ir * BM, BM), tensorViewTranspose); @@ -388,6 +392,10 @@ void main() { sum = coopMatMulAdd(mat_a, mat_b, sum); block_k += BK; } +#if defined(ACC_TYPE_MAX) + [[unroll]] for (uint i = 0; i < sum.length(); ++i) { sum[i] = clamp(sum[i], -ACC_TYPE_MAX, ACC_TYPE_MAX); } +#endif + coopmat mat_d = coopmat(sum); coopMatStoreTensorNV(mat_d, data_d, pos_d, sliceTensorLayoutNV(tensorLayoutD, ic * BN, BNover2, ir * BM, BM), tensorViewTranspose); @@ -428,6 +436,10 @@ void main() { sum = coopMatMulAdd(mat_a, mat_b, sum); block_k += BK; } +#if defined(ACC_TYPE_MAX) + [[unroll]] for (uint i = 0; i < sum.length(); ++i) { sum[i] = clamp(sum[i], -ACC_TYPE_MAX, ACC_TYPE_MAX); } +#endif + coopmat mat_d = coopmat(sum); coopMatStoreTensorNV(mat_d, data_d, pos_d, sliceTensorLayoutNV(tensorLayoutD, ic * BN, BN, ir * BM, BM), tensorViewTranspose); @@ -485,6 +497,9 @@ void main() { sum = coopMatMulAdd(mat_a, mat_b, sum); } } +#if defined(ACC_TYPE_MAX) + [[unroll]] for (uint i = 0; i < sum.length(); ++i) { sum[i] = clamp(sum[i], -ACC_TYPE_MAX, ACC_TYPE_MAX); } +#endif // Convert from ACC_TYPE to D_TYPE coopmat mat_d; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index a973625857..d81bb47e7b 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -323,6 +323,9 @@ void matmul_shaders(bool fp16, MatMulIdType matmul_id_type, bool coopmat, bool c } base_dict["ACC_TYPE"] = f16acc ? "float16_t" : "float"; + if (f16acc) { + base_dict["ACC_TYPE_MAX"] = "\"float16_t(65504.0)\""; + } if (coopmat) { base_dict["COOPMAT"] = "1"; @@ -437,8 +440,12 @@ void process_shaders() { // flash attention for (const auto& f16acc : {false, true}) { - std::string acctype = f16acc ? "float16_t" : "float"; - std::string acctypev4 = f16acc ? "f16vec4" : "vec4"; + std::map fa_base_dict = base_dict; + fa_base_dict["ACC_TYPE"] = f16acc ? "float16_t" : "float"; + fa_base_dict["ACC_TYPEV4"] = f16acc ? "f16vec4" : "vec4"; + if (f16acc) { + fa_base_dict["ACC_TYPE_MAX"] = "\"float16_t(65504.0)\""; + } for (const auto& tname : type_names) { if (tname == "f32") { @@ -449,30 +456,30 @@ void process_shaders() { #if defined(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) if (tname == "f16") { string_to_spv("flash_attn_f32_f16_" + tname, "flash_attn_cm2.comp", - merge_maps(base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"ACC_TYPE", acctype}}), true, false, true, f16acc); + merge_maps(fa_base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}}), true, false, true, f16acc); } else { std::string data_a_key = "DATA_A_" + to_uppercase(tname); string_to_spv("flash_attn_f32_f16_" + tname, "flash_attn_cm2.comp", - merge_maps(base_dict, {{data_a_key, "1"}, {"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"ACC_TYPE", acctype}, {"DEQUANTFUNC", "dequantFunc"+to_uppercase(tname) }, {"BLOCK_SIZE", "QUANT_K_"+to_uppercase(tname) }}), true, false, true, f16acc); + merge_maps(fa_base_dict, {{data_a_key, "1"}, {"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"DEQUANTFUNC", "dequantFunc"+to_uppercase(tname) }, {"BLOCK_SIZE", "QUANT_K_"+to_uppercase(tname) }}), true, false, true, f16acc); } #endif #if defined(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) if (tname == "f16") { string_to_spv("flash_attn_f32_f16_" + tname, "flash_attn_cm1.comp", - merge_maps(base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"ACC_TYPE", acctype}, {"ACC_TYPEV4", acctypev4}, {"COOPMAT", "1"}}), true, true, false, f16acc); + merge_maps(fa_base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"COOPMAT", "1"}}), true, true, false, f16acc); } else if (tname == "q4_0" || tname == "q8_0") { std::string data_a_key = "DATA_A_" + to_uppercase(tname); string_to_spv("flash_attn_f32_f16_" + tname, "flash_attn_cm1.comp", - merge_maps(base_dict, {{data_a_key, "1"}, {"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"ACC_TYPE", acctype}, {"ACC_TYPEV4", acctypev4}, {"BLOCK_SIZE", "QUANT_K_"+to_uppercase(tname)}, {"COOPMAT", "1"}}), true, true, false, f16acc); + merge_maps(fa_base_dict, {{data_a_key, "1"}, {"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"BLOCK_SIZE", "QUANT_K_"+to_uppercase(tname)}, {"COOPMAT", "1"}}), true, true, false, f16acc); } #endif if (tname == "f16") { string_to_spv("flash_attn_f32_f16_" + tname, "flash_attn.comp", - merge_maps(base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"ACC_TYPE", acctype}}), true, false, false, f16acc); + merge_maps(fa_base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}}), true, false, false, f16acc); } else if (tname == "q4_0" || tname == "q8_0") { std::string data_a_key = "DATA_A_" + to_uppercase(tname); string_to_spv("flash_attn_f32_f16_" + tname, "flash_attn.comp", - merge_maps(base_dict, {{data_a_key, "1"}, {"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"ACC_TYPE", acctype}, {"BLOCK_SIZE", "QUANT_K_"+to_uppercase(tname) }}), true, false, false, f16acc); + merge_maps(fa_base_dict, {{data_a_key, "1"}, {"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"BLOCK_SIZE", "QUANT_K_"+to_uppercase(tname) }}), true, false, false, f16acc); } } } From b97c9edc59d4a1b4069991aa670411190f4f3a3e Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 31 Aug 2025 01:30:54 -0500 Subject: [PATCH 160/174] vulkan: Allow fallback to sysmem memory when vidmem is full (#15649) * vulkan: Allow fallback to sysmem memory when vidmem is full * vulkan: Add env var GGML_VK_ALLOW_SYSMEM_FALLBACK --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 103 ++++++++++++++------------- 1 file changed, 53 insertions(+), 50 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 40962de508..7658f56f2d 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -566,6 +566,7 @@ struct vk_device_struct { bool disable_fusion; bool disable_host_visible_vidmem; + bool allow_sysmem_fallback; #ifdef GGML_VULKAN_MEMORY_DEBUG std::unique_ptr memory_logger; @@ -1808,8 +1809,8 @@ static uint32_t find_properties(const vk::PhysicalDeviceMemoryProperties* mem_pr return UINT32_MAX; } -static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) { - VK_LOG_DEBUG("ggml_vk_create_buffer(" << device->name << ", " << size << ", " << to_string(req_flags) << ", " << to_string(fallback_flags) << ")"); +static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, const std::initializer_list & req_flags_list) { + VK_LOG_DEBUG("ggml_vk_create_buffer(" << device->name << ", " << size << ", " << to_string(req_flags_list.begin()[0]) << ", " << to_string(req_flags_list.begin()[req_flags_list.size()-1]) << ")"); if (size > device->max_memory_allocation_size) { throw vk::OutOfDeviceMemoryError("Requested buffer size exceeds device memory allocation limit"); } @@ -1836,42 +1837,27 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor vk::PhysicalDeviceMemoryProperties mem_props = device->physical_device.getMemoryProperties(); - uint32_t memory_type_index = UINT32_MAX; + for (auto &req_flags : req_flags_list) { + uint32_t memory_type_index = find_properties(&mem_props, &mem_req, req_flags); - memory_type_index = find_properties(&mem_props, &mem_req, req_flags); - buf->memory_property_flags = req_flags; + if (memory_type_index == UINT32_MAX) { + continue; + } + buf->memory_property_flags = req_flags; - if (memory_type_index == UINT32_MAX && fallback_flags) { - memory_type_index = find_properties(&mem_props, &mem_req, fallback_flags); - buf->memory_property_flags = fallback_flags; + try { + buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index }); + break; + } catch (const vk::SystemError& e) { + // loop and retry + } } - if (memory_type_index == UINT32_MAX) { + if (buf->device_memory == VK_NULL_HANDLE) { device->device.destroyBuffer(buf->buffer); throw vk::OutOfDeviceMemoryError("No suitable memory type found"); } - try { - buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index }); - } catch (const vk::SystemError& e) { - if (buf->memory_property_flags != fallback_flags) { - // Try again with fallback flags - memory_type_index = find_properties(&mem_props, &mem_req, fallback_flags); - buf->memory_property_flags = fallback_flags; - - try { - buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index }); - } - catch (const vk::SystemError& e) { - device->device.destroyBuffer(buf->buffer); - throw e; - } - } else { - // Out of Host/Device memory, clean up buffer - device->device.destroyBuffer(buf->buffer); - throw e; - } - } buf->ptr = nullptr; if (buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { @@ -1892,7 +1878,7 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor static vk_buffer ggml_vk_create_buffer_check(vk_device& device, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) { try { - return ggml_vk_create_buffer(device, size, req_flags, fallback_flags); + return ggml_vk_create_buffer(device, size, {req_flags, fallback_flags}); } catch (const vk::SystemError& e) { std::cerr << "ggml_vulkan: Memory allocation of size " << size << " failed." << std::endl; std::cerr << "ggml_vulkan: " << e.what() << std::endl; @@ -1904,15 +1890,29 @@ static vk_buffer ggml_vk_create_buffer_device(vk_device& device, size_t size) { vk_buffer buf; try { if (device->prefer_host_memory) { - buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, vk::MemoryPropertyFlagBits::eDeviceLocal); + buf = ggml_vk_create_buffer(device, size, {vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, + vk::MemoryPropertyFlagBits::eDeviceLocal}); } else if (device->uma) { // Fall back to host memory type - buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); + buf = ggml_vk_create_buffer(device, size, {vk::MemoryPropertyFlagBits::eDeviceLocal, + vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent}); } else if (device->disable_host_visible_vidmem) { - buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal, vk::MemoryPropertyFlagBits::eDeviceLocal); + if (device->allow_sysmem_fallback) { + buf = ggml_vk_create_buffer(device, size, {vk::MemoryPropertyFlagBits::eDeviceLocal, + vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent}); + } else { + buf = ggml_vk_create_buffer(device, size, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + } } else { // use rebar if available, otherwise fallback to device only visible memory - buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal | vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, vk::MemoryPropertyFlagBits::eDeviceLocal); + if (device->allow_sysmem_fallback) { + buf = ggml_vk_create_buffer(device, size, {vk::MemoryPropertyFlagBits::eDeviceLocal | vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, + vk::MemoryPropertyFlagBits::eDeviceLocal, + vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent}); + } else { + buf = ggml_vk_create_buffer(device, size, {vk::MemoryPropertyFlagBits::eDeviceLocal | vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, + vk::MemoryPropertyFlagBits::eDeviceLocal}); + } } } catch (const vk::SystemError& e) { std::cerr << "ggml_vulkan: Device memory allocation of size " << size << " failed." << std::endl; @@ -3437,6 +3437,9 @@ static vk_device ggml_vk_get_device(size_t idx) { const char* GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM = getenv("GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM"); device->disable_host_visible_vidmem = GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM != nullptr; + const char* GGML_VK_ALLOW_SYSMEM_FALLBACK = getenv("GGML_VK_ALLOW_SYSMEM_FALLBACK"); + device->allow_sysmem_fallback = GGML_VK_ALLOW_SYSMEM_FALLBACK != nullptr; + bool fp16_storage = false; bool fp16_compute = false; bool maintenance4_support = false; @@ -4774,8 +4777,8 @@ static vk_buffer ggml_vk_create_buffer_temp(ggml_backend_vk_context * ctx, size_ static void * ggml_vk_host_malloc(vk_device& device, size_t size) { VK_LOG_MEMORY("ggml_vk_host_malloc(" << size << ")"); vk_buffer buf = ggml_vk_create_buffer(device, size, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); + {vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached, + vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent}); if(!(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible)) { fprintf(stderr, "WARNING: failed to allocate %.2f MB of pinned memory\n", @@ -9182,7 +9185,7 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t if (ctx->prealloc_split_k != nullptr) { ggml_vk_destroy_buffer(ctx->prealloc_split_k); } - ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx->device, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal); + ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx->device, sizeof(float) * d_ne * split_k, {vk::MemoryPropertyFlagBits::eDeviceLocal}); } } @@ -9192,9 +9195,9 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t ggml_pipeline_allocate_descriptor_sets(ctx); - vk_buffer d_X = ggml_vk_create_buffer_check(ctx->device, sizeof(X_TYPE) * x_ne, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer d_Y = ggml_vk_create_buffer_check(ctx->device, sizeof(Y_TYPE) * y_ne, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer d_D = ggml_vk_create_buffer_check(ctx->device, sizeof(float) * d_ne, vk::MemoryPropertyFlagBits::eDeviceLocal); + vk_buffer d_X = ggml_vk_create_buffer_check(ctx->device, sizeof(X_TYPE) * x_ne, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + vk_buffer d_Y = ggml_vk_create_buffer_check(ctx->device, sizeof(Y_TYPE) * y_ne, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + vk_buffer d_D = ggml_vk_create_buffer_check(ctx->device, sizeof(float) * d_ne, {vk::MemoryPropertyFlagBits::eDeviceLocal}); X_TYPE* x = (X_TYPE *) malloc(sizeof(X_TYPE) * x_ne); Y_TYPE* y = (Y_TYPE *) malloc(sizeof(Y_TYPE) * y_ne); @@ -9420,8 +9423,8 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ const size_t qx_sz = ne * ggml_type_size(quant)/ggml_blck_size(quant); float * x = (float *) malloc(x_sz); void * qx = malloc(qx_sz); - vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx->device, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer x_buf = ggml_vk_create_buffer_check(ctx->device, x_sz_f16, vk::MemoryPropertyFlagBits::eDeviceLocal); + vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx->device, qx_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + vk_buffer x_buf = ggml_vk_create_buffer_check(ctx->device, x_sz_f16, {vk::MemoryPropertyFlagBits::eDeviceLocal}); float * x_ref = (float *) malloc(x_sz); ggml_fp16_t * x_chk = (ggml_fp16_t *) malloc(x_sz_f16); @@ -9526,8 +9529,8 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ // float * x = (float *) malloc(x_sz); // block_q8_1 * qx = (block_q8_1 *)malloc(qx_sz); // block_q8_1 * qx_res = (block_q8_1 *)malloc(qx_sz); -// vk_buffer x_buf = ggml_vk_create_buffer_check(ctx->device, x_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); -// vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx->device, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); +// vk_buffer x_buf = ggml_vk_create_buffer_check(ctx->device, x_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); +// vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx->device, qx_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); // // for (size_t i = 0; i < ne; i++) { // x[i] = rand() / (float)RAND_MAX; @@ -9674,10 +9677,10 @@ static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, float * x = (float *) malloc(x_sz); float * y = (float *) malloc(y_sz); void * qx = malloc(qx_sz); - vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx->device, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer y_buf = ggml_vk_create_buffer_check(ctx->device, y_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer qy_buf = ggml_vk_create_buffer_check(ctx->device, qy_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer d_buf = ggml_vk_create_buffer_check(ctx->device, d_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); + vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx->device, qx_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + vk_buffer y_buf = ggml_vk_create_buffer_check(ctx->device, y_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + vk_buffer qy_buf = ggml_vk_create_buffer_check(ctx->device, qy_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); + vk_buffer d_buf = ggml_vk_create_buffer_check(ctx->device, d_sz, {vk::MemoryPropertyFlagBits::eDeviceLocal}); float * d = (float *) malloc(d_sz); float * d_chk = (float *) malloc(d_sz); @@ -9704,7 +9707,7 @@ static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, if (ctx->prealloc_split_k != nullptr) { ggml_vk_destroy_buffer(ctx->prealloc_split_k); } - ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx->device, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal); + ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx->device, sizeof(float) * d_ne * split_k, {vk::MemoryPropertyFlagBits::eDeviceLocal}); } } if (mmq) { From 5c16b9c87d840e4d5d55fa83c732c6b693346f40 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Sun, 31 Aug 2025 08:46:42 +0200 Subject: [PATCH 161/174] vulkan : remove unused portability_enumeration_ext variable (#15679) This commit removes the portability_enumeration_ext variable from the ggml_vk_instance_portability_enumeration_ext_available function as it is initialized to false but never modified, making it redundant. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 7658f56f2d..a44a2770b8 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -12015,16 +12015,13 @@ static bool ggml_vk_instance_validation_ext_available(const std::vector& instance_extensions) { #ifdef __APPLE__ - bool portability_enumeration_ext = false; // Check for portability enumeration extension for MoltenVK support for (const auto& properties : instance_extensions) { if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) { return true; } } - if (!portability_enumeration_ext) { - std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl; - } + std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl; #endif return false; From c37052ab4d6d1ae73c0e90bc6e560cc6409e1311 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 31 Aug 2025 02:06:43 -0500 Subject: [PATCH 162/174] vulkan: mul_mat_id coopmat2 optimizations (#15546) * vulkan: mul_mat_id coopmat2 optimizations Add a path for when the tile fits in BN/2, similar to what we have for mul_mat. Only call fetch_scales/store_scales once per QUANT_K block, and once at the beginning in case start_k is not aligned. * Also add a path for BN/4 - worth a couple more percent --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 2 +- .../vulkan-shaders/mul_mm_cm2.comp | 97 ++++++++++++++++++- 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index a44a2770b8..5728514a9f 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2225,7 +2225,7 @@ static void ggml_vk_load_shaders(vk_device& device) { s_mmq_wg_denoms_k = { 32, 64, 1 }; // spec constants and tile sizes for quant matmul_id - l_warptile_mmqid = { 256, 128, 128, 16, 0, device->subgroup_size }; + l_warptile_mmqid = { 256, 128, 128, 16, 1, device->subgroup_size }; m_warptile_mmqid = { 256, 128, 64, 16, 0, device->subgroup_size }; s_warptile_mmqid = { 256, 128, 64, 16, 0, device->subgroup_size }; l_mmqid_wg_denoms = { 128, 128, 1 }; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp index dd1b176049..654105a491 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp @@ -456,18 +456,105 @@ void main() { tensorLayoutBClamp = setTensorLayoutStrideNV(tensorLayoutBClamp, stride_b, 1); - coopmat sum; - sum = coopmat(0.0); - uint k_iters = (end_k - start_k + BK - 1) / BK; fetch_scales(ir * BM, pos_a, stride_a, start_k, tid, false); + store_scales(tid); + +#ifdef MUL_MAT_ID + if (enable_smaller_matrices && ic * BN + BNover4 >= _ne1) { + coopmat sum; + sum = coopmat(0.0); + + [[dont_unroll]] + for (uint block_k = start_k, i = 0; i < k_iters; block_k += BK, ++i) { + + if ((block_k % QUANT_K) == 0) { + store_scales(tid); + } + if (block_k + BK < end_k && ((block_k + BK) % QUANT_K) == 0) { + fetch_scales(ir * BM, pos_a, stride_a, block_k + BK, tid, false); + } + + if ((ir + 1) * BM <= p.M && block_k + BK <= end_k) { + coopmat mat_a; + coopmat mat_b; + + coopMatLoadTensorNV(mat_a, data_a, pos_a, sliceTensorLayoutNV(tensorLayoutA, ir * BM, BM, block_k, BK) DECODEFUNCA); + coopMatLoadTensorNV(mat_b, data_b, pos_b, sliceTensorLayoutNV(tensorLayoutB, ic * BN, BNover4, block_k, BK), tensorViewTranspose, decodeFuncB); + + sum = coopMatMulAdd(mat_a, mat_b, sum); + } else { + coopmat mat_a; + coopmat mat_b; + + coopMatLoadTensorNV(mat_a, data_a, pos_a, sliceTensorLayoutNV(tensorLayoutAClamp, ir * BM, BM, block_k, BK) DECODEFUNCA); + coopMatLoadTensorNV(mat_b, data_b, pos_b, sliceTensorLayoutNV(tensorLayoutB, ic * BN, BNover4, block_k, BK), tensorViewTranspose, decodeFuncB); + + sum = coopMatMulAdd(mat_a, mat_b, sum); + } + } + + // Convert from ACC_TYPE to D_TYPE + coopmat mat_d; + mat_d = coopmat(sum); + + // Call callback to store each element, remapping row through shared memory + coopMatPerElementNV(mat_d, mat_d, perElemOpD, ir, ic); + return; + } + if (enable_smaller_matrices && ic * BN + BNover2 >= _ne1) { + coopmat sum; + sum = coopmat(0.0); + + [[dont_unroll]] + for (uint block_k = start_k, i = 0; i < k_iters; block_k += BK, ++i) { + + if ((block_k % QUANT_K) == 0) { + store_scales(tid); + } + if (block_k + BK < end_k && ((block_k + BK) % QUANT_K) == 0) { + fetch_scales(ir * BM, pos_a, stride_a, block_k + BK, tid, false); + } + + if ((ir + 1) * BM <= p.M && block_k + BK <= end_k) { + coopmat mat_a; + coopmat mat_b; + + coopMatLoadTensorNV(mat_a, data_a, pos_a, sliceTensorLayoutNV(tensorLayoutA, ir * BM, BM, block_k, BK) DECODEFUNCA); + coopMatLoadTensorNV(mat_b, data_b, pos_b, sliceTensorLayoutNV(tensorLayoutB, ic * BN, BNover2, block_k, BK), tensorViewTranspose, decodeFuncB); + + sum = coopMatMulAdd(mat_a, mat_b, sum); + } else { + coopmat mat_a; + coopmat mat_b; + + coopMatLoadTensorNV(mat_a, data_a, pos_a, sliceTensorLayoutNV(tensorLayoutAClamp, ir * BM, BM, block_k, BK) DECODEFUNCA); + coopMatLoadTensorNV(mat_b, data_b, pos_b, sliceTensorLayoutNV(tensorLayoutB, ic * BN, BNover2, block_k, BK), tensorViewTranspose, decodeFuncB); + + sum = coopMatMulAdd(mat_a, mat_b, sum); + } + } + + // Convert from ACC_TYPE to D_TYPE + coopmat mat_d; + mat_d = coopmat(sum); + + // Call callback to store each element, remapping row through shared memory + coopMatPerElementNV(mat_d, mat_d, perElemOpD, ir, ic); + return; + } +#endif + coopmat sum; + sum = coopmat(0.0); [[dont_unroll]] for (uint block_k = start_k, i = 0; i < k_iters; block_k += BK, ++i) { - store_scales(tid); - if (block_k + BK < end_k) { + if ((block_k % QUANT_K) == 0) { + store_scales(tid); + } + if (block_k + BK < end_k && ((block_k + BK) % QUANT_K) == 0) { fetch_scales(ir * BM, pos_a, stride_a, block_k + BK, tid, false); } From bbbf5ecccb35286521f735239d499eec4279a840 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 31 Aug 2025 03:13:27 -0500 Subject: [PATCH 163/174] vulkan: handle large sizes for get_rows (#15686) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 2 + .../ggml-vulkan/vulkan-shaders/get_rows.comp | 29 +++++++++----- .../vulkan-shaders/get_rows_quant.comp | 40 ++++++++++++------- 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 5728514a9f..f67ca966d1 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -7849,6 +7849,8 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co break; case GGML_OP_GET_ROWS: elements = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) }; + elements[1] = std::min(elements[1], ctx->device->properties.limits.maxComputeWorkGroupCount[1]); + elements[2] = std::min(elements[2], ctx->device->properties.limits.maxComputeWorkGroupCount[2]); break; case GGML_OP_ARGSORT: elements = { (uint32_t)ne00, (uint32_t)ggml_nrows(src0), 1 }; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/get_rows.comp b/ggml/src/ggml-vulkan/vulkan-shaders/get_rows.comp index ee6b86a18d..7ef75cd7a4 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/get_rows.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/get_rows.comp @@ -7,27 +7,36 @@ layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; void main() { const uint i00 = gl_GlobalInvocationID.x; - const uint i10 = gl_GlobalInvocationID.y; - const uint i11 = (gl_GlobalInvocationID.z)/p.ne12; - const uint i12 = (gl_GlobalInvocationID.z)%p.ne12; if (i00 >= p.ne00) { return; } - const uint i01 = data_b[get_boffset() + i10*p.nb10 + i11*p.nb11 + i12*p.nb12]; + uint gid_z = gl_GlobalInvocationID.z; + while (gid_z < p.ne11 * p.ne12) { + uint gid_y = gl_GlobalInvocationID.y; + while (gid_y < p.ne10) { + const uint i10 = gid_y; + const uint i11 = gid_z / p.ne12; + const uint i12 = gid_z % p.ne12; - const uint a_offset = get_aoffset() + i01*p.nb01 + i11*p.nb02 + i12*p.nb03; - const uint d_offset = get_doffset() + i10*p.nb21 + i11*p.nb22 + i12*p.nb23; + const uint i01 = data_b[get_boffset() + i10*p.nb10 + i11*p.nb11 + i12*p.nb12]; + + const uint a_offset = get_aoffset() + i01*p.nb01 + i11*p.nb02 + i12*p.nb03; + const uint d_offset = get_doffset() + i10*p.nb21 + i11*p.nb22 + i12*p.nb23; #if defined(DATA_A_BF16) - FLOAT_TYPE v = FLOAT_TYPE(bf16_to_fp32(data_a[a_offset + i00])); + FLOAT_TYPE v = FLOAT_TYPE(bf16_to_fp32(data_a[a_offset + i00])); #else - FLOAT_TYPE v = FLOAT_TYPE(data_a[a_offset + i00]); + FLOAT_TYPE v = FLOAT_TYPE(data_a[a_offset + i00]); #endif #ifndef OPTIMIZATION_ERROR_WORKAROUND - data_d[d_offset + i00] = D_TYPE(v); + data_d[d_offset + i00] = D_TYPE(v); #else - data_d[d_offset + i00] = D_TYPE(v); + data_d[d_offset + i00] = D_TYPE(v); #endif + gid_y += gl_WorkGroupSize.y * gl_NumWorkGroups.y; + } + gid_z += gl_WorkGroupSize.z * gl_NumWorkGroups.z; + } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_quant.comp b/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_quant.comp index cfd645a38a..339f905fc7 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_quant.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/get_rows_quant.comp @@ -10,9 +10,6 @@ layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; void main() { const uint i00 = (gl_GlobalInvocationID.x)*2; - const uint i10 = gl_GlobalInvocationID.y; - const uint i11 = (gl_GlobalInvocationID.z)/p.ne12; - const uint i12 = (gl_GlobalInvocationID.z)%p.ne12; #ifdef NEEDS_INIT_IQ_SHMEM init_iq_shmem(gl_WorkGroupSize); @@ -22,20 +19,33 @@ void main() { return; } - const uint i01 = data_b[i10*p.nb10 + i11*p.nb11 + i12*p.nb12]; + uint gid_z = gl_GlobalInvocationID.z; + while (gid_z < p.ne11 * p.ne12) { + uint gid_y = gl_GlobalInvocationID.y; + while (gid_y < p.ne10) { + const uint i10 = gid_y; + const uint i11 = gid_z / p.ne12; + const uint i12 = gid_z % p.ne12; - const uint a_offset = i01*p.nb01 + i11*p.nb02 + i12*p.nb03; - const uint d_offset = i10*p.nb21 + i11*p.nb22 + i12*p.nb23; + const uint i01 = data_b[i10*p.nb10 + i11*p.nb11 + i12*p.nb12]; - const uint ib = a_offset + i00/QUANT_K; // block index - const uint iqs = (i00%QUANT_K)/QUANT_R; // quant index - const uint iybs = i00 - i00%QUANT_K; // dst block start index - const uint y_offset = QUANT_R == 1 ? 1 : QUANT_K/2; + const uint a_offset = i01*p.nb01 + i11*p.nb02 + i12*p.nb03; + const uint d_offset = i10*p.nb21 + i11*p.nb22 + i12*p.nb23; - vec2 v = dequantize(ib, iqs, 0); - const vec2 dm = get_dm(ib, 0); - v = v * dm.x + dm.y; + const uint ib = a_offset + i00/QUANT_K; // block index + const uint iqs = (i00%QUANT_K)/QUANT_R; // quant index + const uint iybs = i00 - i00%QUANT_K; // dst block start index + const uint y_offset = QUANT_R == 1 ? 1 : QUANT_K/2; - data_d[d_offset + iybs + iqs ] = D_TYPE(v.x); - data_d[d_offset + iybs + iqs + y_offset] = D_TYPE(v.y); + vec2 v = dequantize(ib, iqs, 0); + const vec2 dm = get_dm(ib, 0); + v = v * dm.x + dm.y; + + data_d[d_offset + iybs + iqs ] = D_TYPE(v.x); + data_d[d_offset + iybs + iqs + y_offset] = D_TYPE(v.y); + + gid_y += gl_WorkGroupSize.y * gl_NumWorkGroups.y; + } + gid_z += gl_WorkGroupSize.z * gl_NumWorkGroups.z; + } } From 7d3c9f2b217acf0ce5db81ae83d3f375f49ab2c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Sun, 31 Aug 2025 15:30:20 +0200 Subject: [PATCH 164/174] ci : explicitly set fa off or on (#15692) --- ci/run.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ci/run.sh b/ci/run.sh index d51ba44385..a250393ee9 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -386,10 +386,10 @@ function gg_run_open_llama_7b_v2 { (time ./bin/llama-imatrix --model ${model_f16} -f ${wiki_test} -t 1 -ngl 99 -c 2048 -b 512 --chunks 4 ) 2>&1 | tee -a $OUT/${ci}-imatrix.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 -fa ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 -fa off ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 -fa on ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa off ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa on ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log function check_ppl { qnt="$1" @@ -520,8 +520,8 @@ function gg_run_pythia_1_4b { (time ./bin/llama-imatrix --model ${model_f16} -f ${wiki_test_60} -ngl 99 -c 128 -b 128 --chunks 1 ) 2>&1 | tee -a $OUT/${ci}-imatrix.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa off ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa on ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log function check_ppl { qnt="$1" @@ -651,10 +651,10 @@ function gg_run_pythia_2_8b { (time ./bin/llama-imatrix --model ${model_f16} -f ${wiki_test} -t 1 -ngl 99 -c 2048 -b 512 --chunks 4 ) 2>&1 | tee -a $OUT/${ci}-imatrix.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 -fa ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log - (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 -fa off ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 10 -c 0 -fa on ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa off ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log + (time ./bin/llama-save-load-state --model ${model_q4_0} -ngl 99 -c 0 -fa on ) 2>&1 | tee -a $OUT/${ci}-save-load-state.log function check_ppl { qnt="$1" From 9777032dccd67bdc7785aeab7497014a8be8dacc Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Sun, 31 Aug 2025 06:49:03 -0700 Subject: [PATCH 165/174] llama : separate compute buffer reserve from fattn check (#15696) Exposes ggml_backend_sched_split_graph() to allow splitting the graph without allocating compute buffers and uses it to split the graph for the automatic Flash Attention check. --- ggml/include/ggml-backend.h | 3 + ggml/src/ggml-backend.cpp | 4 +- src/llama-context.cpp | 113 ++++++++++++++++++------------------ src/llama-context.h | 2 +- 4 files changed, 64 insertions(+), 58 deletions(-) diff --git a/ggml/include/ggml-backend.h b/ggml/include/ggml-backend.h index a2977ea2e5..4f246f6ccd 100644 --- a/ggml/include/ggml-backend.h +++ b/ggml/include/ggml-backend.h @@ -307,6 +307,9 @@ extern "C" { GGML_API void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend); GGML_API ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node); + // Split graph without allocating it + GGML_API void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); + // Allocate and compute graph on the backend scheduler GGML_API bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); // returns success GGML_API enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph); diff --git a/ggml/src/ggml-backend.cpp b/ggml/src/ggml-backend.cpp index 02375337c4..0cdbf18017 100644 --- a/ggml/src/ggml-backend.cpp +++ b/ggml/src/ggml-backend.cpp @@ -902,7 +902,7 @@ static void ggml_backend_sched_set_if_supported(ggml_backend_sched_t sched, stru } // assigns backends to ops and splits the graph into subgraphs that can be computed on the same backend -static void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { +void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { // reset splits sched->n_splits = 0; sched->n_graph_inputs = 0; @@ -1687,6 +1687,8 @@ bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * GGML_ASSERT(sched); GGML_ASSERT((int)sched->hash_set.size >= measure_graph->n_nodes + measure_graph->n_leafs); + ggml_backend_sched_reset(sched); + ggml_backend_sched_synchronize(sched); ggml_backend_sched_split_graph(sched, measure_graph); diff --git a/src/llama-context.cpp b/src/llama-context.cpp index ac8453ab74..7e20ee9f8b 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -270,8 +270,60 @@ llama_context::llama_context( } } - // resolve automatic Flash Attention use and reserve worst-case graph if (!hparams.vocab_only) { + llama_memory_context_ptr mctx; + if (memory) { + LLAMA_LOG_DEBUG("%s: reserving full memory module\n", __func__); + mctx = memory->init_full(); + if (!mctx) { + throw std::runtime_error("failed to initialize memory module"); + } + } + + cross.v_embd.clear(); + // resolve automatic Flash Attention use + if (params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_AUTO) { + auto * gf = graph_reserve(1, 1, 0, mctx.get(), true); + if (!gf) { + throw std::runtime_error("failed to split graph for Flash Attention check"); + } + + const size_t prefix_len = strlen(LLAMA_TENSOR_NAME_FATTN) + 1; + bool fa_device_mismatch = false; + for (int i = 0; i < ggml_graph_n_nodes(gf); i++) { + ggml_tensor * n = ggml_graph_node(gf, i); + if (n->op != GGML_OP_FLASH_ATTN_EXT) { + continue; + } + ggml_backend_dev_t device_fa = ggml_backend_get_device( + ggml_backend_sched_get_tensor_backend(sched.get(), n)); + + // TODO: instead of the tensor names, use a map to keep track of which (FA) tensors belong to which layer + GGML_ASSERT(strncmp(n->name, LLAMA_TENSOR_NAME_FATTN "-", prefix_len) == 0); + const int il = std::stoi(n->name + prefix_len); + ggml_backend_dev_t device_kv = model.dev_layer(il); + if (device_fa != device_kv) { + LLAMA_LOG_WARN("%s: layer %d is assigned to device %s but the Flash Attention tensor " + "is assigned to device %s (usually due to missing support)\n", + __func__, il, ggml_backend_dev_name(device_kv), ggml_backend_dev_name(device_fa)); + // FIXME: fa_device_mismatch logic is wrong for --no-kv-offload, but this is broken anyways + fa_device_mismatch = true; + break; + } + } + if (fa_device_mismatch) { + cparams.flash_attn = false; + LLAMA_LOG_WARN("%s: Flash Attention was auto, set to disabled\n", __func__); + if (ggml_is_quantized(params.type_v)) { + throw std::runtime_error("quantized V cache was requested, but this requires Flash Attention"); + } + } else { + cparams.flash_attn = true; + LLAMA_LOG_INFO("%s: Flash Attention was auto, set to enabled\n", __func__); + } + } + + // reserve worst-case graph const uint32_t n_seqs = cparams.kv_unified ? 1 : cparams.n_seq_max; const uint32_t n_tokens = std::min(cparams.n_ctx, cparams.n_ubatch); @@ -283,17 +335,6 @@ llama_context::llama_context( int n_splits_tg = -1; int n_nodes_tg = -1; - llama_memory_context_ptr mctx; - if (memory) { - LLAMA_LOG_DEBUG("%s: reserving full memory module\n", __func__); - mctx = memory->init_full(); - if (!mctx) { - throw std::runtime_error("failed to initialize memory module"); - } - } - - cross.v_embd.clear(); - // reserve pp (prompt processing) graph first so that buffers are only allocated once { auto * gf = graph_reserve(n_tokens, n_seqs, n_tokens, mctx.get()); @@ -301,48 +342,6 @@ llama_context::llama_context( throw std::runtime_error("failed to allocate compute pp buffers"); } - if (params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_AUTO) { - ggml_backend_sched_alloc_graph(sched.get(), gf); - - const size_t prefix_len = strlen(LLAMA_TENSOR_NAME_FATTN) + 1; - bool fa_device_mismatch = false; - for (int i = 0; i < ggml_graph_n_nodes(gf); i++) { - ggml_tensor * n = ggml_graph_node(gf, i); - if (n->op != GGML_OP_FLASH_ATTN_EXT) { - continue; - } - ggml_backend_dev_t device_fa = ggml_backend_get_device( - ggml_backend_sched_get_tensor_backend(sched.get(), n)); - - // TODO: instead of the tensor names, use a map to keep track of which (FA) tensors belong to which layer - GGML_ASSERT(strncmp(n->name, LLAMA_TENSOR_NAME_FATTN "-", prefix_len) == 0); - const int il = std::stoi(n->name + prefix_len); - ggml_backend_dev_t device_kv = model.dev_layer(il); - if (device_fa != device_kv) { - LLAMA_LOG_WARN("%s: layer %d is assigned to device %s but the Flash Attention tensor " - "is assigned to device %s (usually due to missing support)\n", - __func__, il, ggml_backend_dev_name(device_kv), ggml_backend_dev_name(device_fa)); - // FIXME: fa_device_mismatch logic is wrong for --no-kv-offload, but this is broken anyways - fa_device_mismatch = true; - break; - } - } - if (fa_device_mismatch) { - cparams.flash_attn = false; - LLAMA_LOG_WARN("%s: Flash Attention was auto, set to disabled\n", __func__); - if (ggml_is_quantized(params.type_v)) { - throw std::runtime_error("quantized V cache was requested, but this requires Flash Attention"); - } - auto * gf = graph_reserve(n_tokens, n_seqs, n_tokens, mctx.get()); - if (!gf) { - throw std::runtime_error("failed to allocate compute pp buffers"); - } - } else { - cparams.flash_attn = true; - LLAMA_LOG_INFO("%s: Flash Attention was auto, set to enabled\n", __func__); - } - } - n_splits_pp = ggml_backend_sched_get_n_splits(sched.get()); n_nodes_pp = ggml_graph_n_nodes(gf); } @@ -1366,7 +1365,7 @@ llm_graph_result * llama_context::get_gf_res_reserve() const { return static_cast(gf_res_reserve.get()); } -ggml_cgraph * llama_context::graph_reserve(uint32_t n_tokens, uint32_t n_seqs, uint32_t n_outputs, const llama_memory_context_i * mctx) { +ggml_cgraph * llama_context::graph_reserve(uint32_t n_tokens, uint32_t n_seqs, uint32_t n_outputs, const llama_memory_context_i * mctx, bool split_only) { LLAMA_LOG_DEBUG("%s: reserving a graph for ubatch with n_tokens = %4u, n_seqs = %2u, n_outputs = %4u\n", __func__, n_tokens, n_seqs, n_outputs); if (n_tokens % n_seqs != 0) { @@ -1401,7 +1400,9 @@ ggml_cgraph * llama_context::graph_reserve(uint32_t n_tokens, uint32_t n_seqs, u this->n_outputs = save_n_outputs; // initialize scheduler with the specified graph - if (!ggml_backend_sched_reserve(sched.get(), gf)) { + if (split_only) { + ggml_backend_sched_split_graph(sched.get(), gf); + } else if (!ggml_backend_sched_reserve(sched.get(), gf)) { LLAMA_LOG_ERROR("%s: failed to allocate compute buffers\n", __func__); return nullptr; } diff --git a/src/llama-context.h b/src/llama-context.h index a372bcfbe4..f23aa8ee13 100644 --- a/src/llama-context.h +++ b/src/llama-context.h @@ -196,7 +196,7 @@ public: ggml_status graph_compute(ggml_cgraph * gf, bool batched); // reserve a graph with a dummy ubatch of the specified size - ggml_cgraph * graph_reserve(uint32_t n_tokens, uint32_t n_seqs, uint32_t n_outputs, const llama_memory_context_i * mctx); + ggml_cgraph * graph_reserve(uint32_t n_tokens, uint32_t n_seqs, uint32_t n_outputs, const llama_memory_context_i * mctx, bool split_only = false); private: llm_graph_params graph_params( From 274966226f87f301ac132da898280ca3142b60e5 Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Sun, 31 Aug 2025 08:47:05 -0700 Subject: [PATCH 166/174] llama : fix fattn reserve call n_seqs parameter (#15699) ggml-ci --- src/llama-context.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 7e20ee9f8b..2de6fcf0cb 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -281,9 +281,15 @@ llama_context::llama_context( } cross.v_embd.clear(); + + const uint32_t n_seqs = cparams.kv_unified ? 1 : cparams.n_seq_max; + const uint32_t n_tokens = std::min(cparams.n_ctx, cparams.n_ubatch); + + LLAMA_LOG_DEBUG("%s: worst-case: n_tokens = %d, n_seqs = %d, n_outputs = %d\n", __func__, n_tokens, n_seqs, n_outputs); + // resolve automatic Flash Attention use if (params.flash_attn_type == LLAMA_FLASH_ATTN_TYPE_AUTO) { - auto * gf = graph_reserve(1, 1, 0, mctx.get(), true); + auto * gf = graph_reserve(1, n_seqs, n_outputs, mctx.get(), true); if (!gf) { throw std::runtime_error("failed to split graph for Flash Attention check"); } @@ -324,11 +330,6 @@ llama_context::llama_context( } // reserve worst-case graph - const uint32_t n_seqs = cparams.kv_unified ? 1 : cparams.n_seq_max; - const uint32_t n_tokens = std::min(cparams.n_ctx, cparams.n_ubatch); - - LLAMA_LOG_DEBUG("%s: worst-case: n_tokens = %d, n_seqs = %d, n_outputs = %d\n", __func__, n_tokens, n_seqs, n_outputs); - int n_splits_pp = -1; int n_nodes_pp = -1; From 4efd5a83163ff383285b3a4c2106feabf5c69557 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 31 Aug 2025 19:43:30 +0300 Subject: [PATCH 167/174] metal : fix checks for available FA kernels (#15700) * metal : fix checks for available FA kernels ggml-ci * cont : fix comment [no ci] --- ggml/src/ggml-metal/ggml-metal.m | 50 ++++++---------------------- ggml/src/ggml-metal/ggml-metal.metal | 13 ++------ 2 files changed, 14 insertions(+), 49 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index 1f93633d91..3d16a1dcd4 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -523,13 +523,6 @@ enum ggml_metal_kernel_type { GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK192_HV128, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H256, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK576_HV512, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H40, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H40, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H40, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_1_H40, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_H40, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_H40, - GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_H40, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H64, GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H64, @@ -1562,13 +1555,6 @@ static struct ggml_backend_metal_context * ggml_metal_init(ggml_backend_dev_t de GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK192_HV128, flash_attn_ext_q8_0_hk192_hv128, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_H256, flash_attn_ext_q8_0_h256, has_simdgroup_mm); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_Q8_0_HK576_HV512, flash_attn_ext_q8_0_hk576_hv512, has_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H40, flash_attn_ext_vec_f16_h40, has_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H40, flash_attn_ext_vec_bf16_h40, has_simdgroup_reduction && use_bfloat); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H40, flash_attn_ext_vec_q4_0_h40, has_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_1_H40, flash_attn_ext_vec_q4_1_h40, has_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_H40, flash_attn_ext_vec_q5_0_h40, has_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_H40, flash_attn_ext_vec_q5_1_h40, has_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_H40, flash_attn_ext_vec_q8_0_h40, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H64, flash_attn_ext_vec_f16_h64, has_simdgroup_reduction); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H64, flash_attn_ext_vec_bf16_h64, has_simdgroup_reduction && use_bfloat); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H64, flash_attn_ext_vec_q4_0_h64, has_simdgroup_reduction); @@ -1909,9 +1895,15 @@ static bool ggml_metal_supports_op(const struct ggml_backend_metal_device_contex case GGML_OP_ARANGE: return true; case GGML_OP_FLASH_ATTN_EXT: - if (op->src[0]->ne[0] == 32) { - // head size == 32 (e.g. bert-bge-small) - // TODO: not sure if it is worth adding kernels for this size + // for new head sizes, add checks here + if (op->src[0]->ne[0] != 40 && + op->src[0]->ne[0] != 64 && + op->src[0]->ne[0] != 80 && + op->src[0]->ne[0] != 96 && + op->src[0]->ne[0] != 112 && + op->src[0]->ne[0] != 128 && + op->src[0]->ne[0] != 192 && + op->src[0]->ne[0] != 256) { return false; } if (op->src[0]->ne[0] == 576) { @@ -5138,10 +5130,8 @@ static int ggml_metal_encode_node( bool use_vec_kernel = false; - // TODO: add vec kernels for (ne00%64 == 0) and maybe also for (ne00%32 == 0) - // for now avoiding mainly to keep the number of templates/kernels a bit lower - // these are now trivial to add after: https://github.com/ggml-org/llama.cpp/pull/12612 - if (ne01 >= 20 || (ne00%128 != 0 && ne00 != 64 && ne00 != 96 && ne00 != 192 && ne00 != 576)) { + // use non-vec kernel if the batch size is large or if the vec-kernel is not supported for this head size + if (ne01 >= 20 || (ne00 == 40 || ne00 == 80 || ne00 == 112)) { switch (src1->type) { case GGML_TYPE_F16: { @@ -5329,24 +5319,6 @@ static int ggml_metal_encode_node( use_vec_kernel = true; switch (ne00) { - case 40: - { - switch (src1->type) { - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H40].pipeline; break; - case GGML_TYPE_BF16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_BF16_H40].pipeline; break; - case GGML_TYPE_Q4_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_0_H40].pipeline; break; - case GGML_TYPE_Q4_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q4_1_H40].pipeline; break; - case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_0_H40].pipeline; break; - case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q5_1_H40].pipeline; break; - case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_Q8_0_H40].pipeline; break; - default: - { - GGML_LOG_ERROR("unsupported type: %d\n", src1->type); - GGML_LOG_ERROR("add template specialization for this type\n"); - GGML_ABORT("add template specialization for this type"); - } - } - } break; case 64: { switch (src1->type) { diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index 4fa16c4a55..9c5933d24a 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -4803,6 +4803,9 @@ kernel void kernel_flash_attn_ext_vec( ushort3 ntg[[threads_per_threadgroup]], ushort tiisg[[thread_index_in_simdgroup]], ushort sgitg[[simdgroup_index_in_threadgroup]]) { + static_assert(DK % 32 == 0, "DK must be divisible by 32"); + static_assert(DV % 32 == 0, "DV must be divisible by 32"); + const short nsg = ntg.y; // number of simdgroups const short iwg = tgpig[2]%nwg; @@ -5160,16 +5163,6 @@ kernel void kernel_flash_attn_ext_vec( typedef decltype(kernel_flash_attn_ext_vec) flash_attn_ext_vec_t; -template [[host_name("kernel_flash_attn_ext_vec_f16_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; -#if defined(GGML_METAL_USE_BF16) -template [[host_name("kernel_flash_attn_ext_vec_bf16_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; -#endif -template [[host_name("kernel_flash_attn_ext_vec_q4_0_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; -template [[host_name("kernel_flash_attn_ext_vec_q4_1_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; -template [[host_name("kernel_flash_attn_ext_vec_q5_0_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; -template [[host_name("kernel_flash_attn_ext_vec_q5_1_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; -template [[host_name("kernel_flash_attn_ext_vec_q8_0_h40")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; - template [[host_name("kernel_flash_attn_ext_vec_f16_h64")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; #if defined(GGML_METAL_USE_BF16) template [[host_name("kernel_flash_attn_ext_vec_bf16_h64")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; From 0d161f021aa33ec0e90cce96f5d1a88925557327 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 31 Aug 2025 20:11:58 +0300 Subject: [PATCH 168/174] server : enable /slots by default and make it secure (#15630) * server : enable /slots by default and make it secure ggml-ci * server : fix tests to pass `--no-slots` when necessary * server : extend /props with info about enabled endpoints --- common/arg.cpp | 14 ++-- common/common.h | 2 +- tools/server/README.md | 148 ++++++++++++++++++++++++++++-------- tools/server/server.cpp | 81 ++++++++++++++++++-- tools/server/tests/utils.py | 2 + 5 files changed, 200 insertions(+), 47 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 72c69c39a0..4fa214d3d2 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2962,13 +2962,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.endpoint_metrics = true; } ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_ENDPOINT_METRICS")); - add_opt(common_arg( - {"--slots"}, - string_format("enable slots monitoring endpoint (default: %s)", params.endpoint_slots ? "enabled" : "disabled"), - [](common_params & params) { - params.endpoint_slots = true; - } - ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_ENDPOINT_SLOTS")); add_opt(common_arg( {"--props"}, string_format("enable changing global properties via POST /props (default: %s)", params.endpoint_props ? "enabled" : "disabled"), @@ -2976,6 +2969,13 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.endpoint_props = true; } ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_ENDPOINT_PROPS")); + add_opt(common_arg( + {"--slots"}, + string_format("enable slots monitoring endpoint (default: %s)", params.endpoint_slots ? "enabled" : "disabled"), + [](common_params & params) { + params.endpoint_slots = true; + } + ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_ENDPOINT_SLOTS")); add_opt(common_arg( {"--no-slots"}, "disables slots monitoring endpoint", diff --git a/common/common.h b/common/common.h index 02ca093bdf..85b3b879d4 100644 --- a/common/common.h +++ b/common/common.h @@ -444,7 +444,7 @@ struct common_params { // "advanced" endpoints are disabled by default for better security bool webui = true; - bool endpoint_slots = false; + bool endpoint_slots = true; bool endpoint_props = false; // only control POST requests, not GET bool endpoint_metrics = false; diff --git a/tools/server/README.md b/tools/server/README.md index b7285b2319..b0527f3cbe 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -37,7 +37,7 @@ The project is under active development, and we are [looking for feedback and co | `-C, --cpu-mask M` | CPU affinity mask: arbitrarily long hex. Complements cpu-range (default: "") | | `-Cr, --cpu-range lo-hi` | range of CPUs for affinity. Complements --cpu-mask | | `--cpu-strict <0\|1>` | use strict CPU placement (default: 0)
    | -| `--prio N` | set process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime (default: 0)
    | +| `--prio N` | set process/thread priority : low(-1), normal(0), medium(1), high(2), realtime(3) (default: 0)
    | | `--poll <0...100>` | use polling level to wait for work (0 - no polling, default: 50)
    | | `-Cb, --cpu-mask-batch M` | CPU affinity mask: arbitrarily long hex. Complements cpu-range-batch (default: same as --cpu-mask) | | `-Crb, --cpu-range-batch lo-hi` | ranges of CPUs for affinity. Complements --cpu-mask-batch | @@ -49,6 +49,8 @@ The project is under active development, and we are [looking for feedback and co | `-b, --batch-size N` | logical maximum batch size (default: 2048)
    (env: LLAMA_ARG_BATCH) | | `-ub, --ubatch-size N` | physical maximum batch size (default: 512)
    (env: LLAMA_ARG_UBATCH) | | `--keep N` | number of tokens to keep from the initial prompt (default: 0, -1 = all) | +| `--swa-full` | use full-size SWA cache (default: false)
    [(more info)](https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055)
    (env: LLAMA_ARG_SWA_FULL) | +| `--kv-unified, -kvu` | use single unified KV buffer for the KV cache of all sequences (default: false)
    [(more info)](https://github.com/ggml-org/llama.cpp/pull/14363)
    (env: LLAMA_ARG_KV_SPLIT) | | `-fa, --flash-attn` | enable Flash Attention (default: disabled)
    (env: LLAMA_ARG_FLASH_ATTN) | | `--no-perf` | disable internal libllama performance timings (default: false)
    (env: LLAMA_ARG_NO_PERF) | | `-e, --escape` | process escapes sequences (\n, \r, \t, \', \", \\) (default: true) | @@ -63,6 +65,7 @@ The project is under active development, and we are [looking for feedback and co | `--yarn-beta-slow N` | YaRN: high correction dim or alpha (default: 1.0)
    (env: LLAMA_ARG_YARN_BETA_SLOW) | | `--yarn-beta-fast N` | YaRN: low correction dim or beta (default: 32.0)
    (env: LLAMA_ARG_YARN_BETA_FAST) | | `-nkvo, --no-kv-offload` | disable KV offload
    (env: LLAMA_ARG_NO_KV_OFFLOAD) | +| `-nr, --no-repack` | disable weight repacking
    (env: LLAMA_ARG_NO_REPACK) | | `-ctk, --cache-type-k TYPE` | KV cache data type for K
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_K) | | `-ctv, --cache-type-v TYPE` | KV cache data type for V
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_V) | | `-dt, --defrag-thold N` | KV cache defragmentation threshold (DEPRECATED)
    (env: LLAMA_ARG_DEFRAG_THOLD) | @@ -73,12 +76,15 @@ The project is under active development, and we are [looking for feedback and co | `-dev, --device ` | comma-separated list of devices to use for offloading (none = don't offload)
    use --list-devices to see a list of available devices
    (env: LLAMA_ARG_DEVICE) | | `--list-devices` | print list of available devices and exit | | `--override-tensor, -ot =,...` | override tensor buffer type | +| `--cpu-moe, -cmoe` | keep all Mixture of Experts (MoE) weights in the CPU
    (env: LLAMA_ARG_CPU_MOE) | +| `--n-cpu-moe, -ncmoe N` | keep the Mixture of Experts (MoE) weights of the first N layers in the CPU
    (env: LLAMA_ARG_N_CPU_MOE) | | `-ngl, --gpu-layers, --n-gpu-layers N` | number of layers to store in VRAM
    (env: LLAMA_ARG_N_GPU_LAYERS) | | `-sm, --split-mode {none,layer,row}` | how to split the model across multiple GPUs, one of:
    - none: use one GPU only
    - layer (default): split layers and KV across GPUs
    - row: split rows across GPUs
    (env: LLAMA_ARG_SPLIT_MODE) | | `-ts, --tensor-split N0,N1,N2,...` | fraction of the model to offload to each GPU, comma-separated list of proportions, e.g. 3,1
    (env: LLAMA_ARG_TENSOR_SPLIT) | | `-mg, --main-gpu INDEX` | the GPU to use for the model (with split-mode = none), or for intermediate results and KV (with split-mode = row) (default: 0)
    (env: LLAMA_ARG_MAIN_GPU) | | `--check-tensors` | check model tensor data for invalid values (default: false) | | `--override-kv KEY=TYPE:VALUE` | advanced option to override model metadata by key. may be specified multiple times.
    types: int, float, bool, str. example: --override-kv tokenizer.ggml.add_bos_token=bool:false | +| `--no-op-offload` | disable offloading host tensor operations to device (default: false) | | `--lora FNAME` | path to LoRA adapter (can be repeated to use multiple adapters) | | `--lora-scaled FNAME SCALE` | path to LoRA adapter with user defined scaling (can be repeated to use multiple adapters) | | `--control-vector FNAME` | add a control vector
    note: this argument can be repeated to add multiple control vectors | @@ -96,9 +102,12 @@ The project is under active development, and we are [looking for feedback and co | `--log-file FNAME` | Log to file | | `--log-colors` | Enable colored logging
    (env: LLAMA_LOG_COLORS) | | `-v, --verbose, --log-verbose` | Set verbosity level to infinity (i.e. log all messages, useful for debugging) | +| `--offline` | Offline mode: forces use of cache, prevents network access
    (env: LLAMA_OFFLINE) | | `-lv, --verbosity, --log-verbosity N` | Set the verbosity threshold. Messages with a higher verbosity will be ignored.
    (env: LLAMA_LOG_VERBOSITY) | | `--log-prefix` | Enable prefix in log messages
    (env: LLAMA_LOG_PREFIX) | | `--log-timestamps` | Enable timestamps in log messages
    (env: LLAMA_LOG_TIMESTAMPS) | +| `-ctkd, --cache-type-k-draft TYPE` | KV cache data type for K for the draft model
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_K_DRAFT) | +| `-ctvd, --cache-type-v-draft TYPE` | KV cache data type for V for the draft model
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_V_DRAFT) | **Sampling params** @@ -113,6 +122,7 @@ The project is under active development, and we are [looking for feedback and co | `--top-k N` | top-k sampling (default: 40, 0 = disabled) | | `--top-p N` | top-p sampling (default: 0.9, 1.0 = disabled) | | `--min-p N` | min-p sampling (default: 0.1, 0.0 = disabled) | +| `--top-nsigma N` | top-n-sigma sampling (default: -1.0, -1.0 = disabled) | | `--xtc-probability N` | xtc probability (default: 0.0, 0.0 = disabled) | | `--xtc-threshold N` | xtc threshold (default: 0.1, 1.0 = disabled) | | `--typical N` | locally typical sampling, parameter p (default: 1.0, 1.0 = disabled) | @@ -141,7 +151,10 @@ The project is under active development, and we are [looking for feedback and co | Argument | Explanation | | -------- | ----------- | -| `--no-context-shift` | disables context shift on infinite text generation (default: disabled)
    (env: LLAMA_ARG_NO_CONTEXT_SHIFT) | +| `--swa-checkpoints N` | max number of SWA checkpoints per slot to create (default: 3)
    [(more info)](https://github.com/ggml-org/llama.cpp/pull/15293)
    (env: LLAMA_ARG_SWA_CHECKPOINTS) | +| `--no-context-shift` | disables context shift on infinite text generation (default: enabled)
    (env: LLAMA_ARG_NO_CONTEXT_SHIFT) | +| `--context-shift` | enables context shift on infinite text generation (default: disabled)
    (env: LLAMA_ARG_CONTEXT_SHIFT) | +| `-r, --reverse-prompt PROMPT` | halt generation at PROMPT, return control in interactive mode
    | | `-sp, --special` | special tokens output enabled (default: false) | | `--no-warmup` | skip warming up the model with an empty run | | `--spm-infill` | use Suffix/Prefix/Middle pattern for infill (instead of Prefix/Suffix/Middle) as some models prefer this. (default: disabled) | @@ -152,10 +165,14 @@ The project is under active development, and we are [looking for feedback and co | `--mmproj-url URL` | URL to a multimodal projector file. see tools/mtmd/README.md
    (env: LLAMA_ARG_MMPROJ_URL) | | `--no-mmproj` | explicitly disable multimodal projector, useful when using -hf
    (env: LLAMA_ARG_NO_MMPROJ) | | `--no-mmproj-offload` | do not offload multimodal projector to GPU
    (env: LLAMA_ARG_NO_MMPROJ_OFFLOAD) | +| `--override-tensor-draft, -otd =,...` | override tensor buffer type for draft model | +| `--cpu-moe-draft, -cmoed` | keep all Mixture of Experts (MoE) weights in the CPU for the draft model
    (env: LLAMA_ARG_CPU_MOE_DRAFT) | +| `--n-cpu-moe-draft, -ncmoed N` | keep the Mixture of Experts (MoE) weights of the first N layers in the CPU for the draft model
    (env: LLAMA_ARG_N_CPU_MOE_DRAFT) | | `-a, --alias STRING` | set alias for model name (to be used by REST API)
    (env: LLAMA_ARG_ALIAS) | | `--host HOST` | ip address to listen, or bind to an UNIX socket if the address ends with .sock (default: 127.0.0.1)
    (env: LLAMA_ARG_HOST) | | `--port PORT` | port to listen (default: 8080)
    (env: LLAMA_ARG_PORT) | | `--path PATH` | path to serve static files from (default: )
    (env: LLAMA_ARG_STATIC_PATH) | +| `--api-prefix PREFIX` | prefix path the server serves from, without the trailing slash (default: )
    (env: LLAMA_ARG_API_PREFIX) | | `--no-webui` | Disable the Web UI (default: enabled)
    (env: LLAMA_ARG_NO_WEBUI) | | `--embedding, --embeddings` | restrict to only support embedding use case; use only with dedicated embedding models (default: disabled)
    (env: LLAMA_ARG_EMBEDDINGS) | | `--reranking, --rerank` | enable reranking endpoint on server (default: disabled)
    (env: LLAMA_ARG_RERANKING) | @@ -163,23 +180,25 @@ The project is under active development, and we are [looking for feedback and co | `--api-key-file FNAME` | path to file containing API keys (default: none) | | `--ssl-key-file FNAME` | path to file a PEM-encoded SSL private key
    (env: LLAMA_ARG_SSL_KEY_FILE) | | `--ssl-cert-file FNAME` | path to file a PEM-encoded SSL certificate
    (env: LLAMA_ARG_SSL_CERT_FILE) | -| `--chat-template-kwargs STRING` | JSON object containing additional params for the json template parser. Example: `--chat_template_kwargs "{\"enable_thinking\":false}`"
    (env: LLAMA_CHAT_TEMPLATE_KWARGS) | +| `--chat-template-kwargs STRING` | sets additional params for the json template parser
    (env: LLAMA_CHAT_TEMPLATE_KWARGS) | | `-to, --timeout N` | server read/write timeout in seconds (default: 600)
    (env: LLAMA_ARG_TIMEOUT) | | `--threads-http N` | number of threads used to process HTTP requests (default: -1)
    (env: LLAMA_ARG_THREADS_HTTP) | | `--cache-reuse N` | min chunk size to attempt reusing from the cache via KV shifting (default: 0)
    [(card)](https://ggml.ai/f0.png)
    (env: LLAMA_ARG_CACHE_REUSE) | | `--metrics` | enable prometheus compatible metrics endpoint (default: disabled)
    (env: LLAMA_ARG_ENDPOINT_METRICS) | -| `--slots` | enable slots monitoring endpoint (default: disabled)
    (env: LLAMA_ARG_ENDPOINT_SLOTS) | | `--props` | enable changing global properties via POST /props (default: disabled)
    (env: LLAMA_ARG_ENDPOINT_PROPS) | +| `--slots` | enable slots monitoring endpoint (default: enabled)
    (env: LLAMA_ARG_ENDPOINT_SLOTS) | | `--no-slots` | disables slots monitoring endpoint
    (env: LLAMA_ARG_NO_ENDPOINT_SLOTS) | | `--slot-save-path PATH` | path to save slot kv cache (default: disabled) | | `--jinja` | use jinja template for chat (default: disabled)
    (env: LLAMA_ARG_JINJA) | -| `--reasoning-format FORMAT` | controls whether thought tags are allowed and/or extracted from the response, and in which format they're returned; one of:
    - none: leaves thoughts unparsed in `message.content`
    - deepseek: puts thoughts in `message.reasoning_content` (except in streaming mode, which behaves as `none`)
    (default: deepseek)
    (env: LLAMA_ARG_THINK) | +| `--reasoning-format FORMAT` | controls whether thought tags are allowed and/or extracted from the response, and in which format they're returned; one of:
    - none: leaves thoughts unparsed in `message.content`
    - deepseek: puts thoughts in `message.reasoning_content` (except in streaming mode, which behaves as `none`)
    (default: auto)
    (env: LLAMA_ARG_THINK) | | `--reasoning-budget N` | controls the amount of thinking allowed; currently only one of: -1 for unrestricted thinking budget, or 0 to disable thinking (default: -1)
    (env: LLAMA_ARG_THINK_BUDGET) | -| `--chat-template JINJA_TEMPLATE` | set custom jinja chat template (default: template taken from model's metadata)
    if suffix/prefix are specified, template will be disabled
    only commonly used templates are accepted (unless --jinja is set before this flag):
    list of built-in templates:
    bailing, chatglm3, chatglm4, chatml, command-r, deepseek, deepseek2, deepseek3, exaone3, falcon3, gemma, gigachat, glmedge, granite, llama2, llama2-sys, llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, mistral-v7-tekken, monarch, openchat, orion, phi3, phi4, rwkv-world, smolvlm, vicuna, vicuna-orca, yandex, zephyr
    (env: LLAMA_ARG_CHAT_TEMPLATE) | -| `--chat-template-file JINJA_TEMPLATE_FILE` | set custom jinja chat template file (default: template taken from model's metadata)
    if suffix/prefix are specified, template will be disabled
    only commonly used templates are accepted (unless --jinja is set before this flag):
    list of built-in templates:
    bailing, chatglm3, chatglm4, chatml, command-r, deepseek, deepseek2, deepseek3, exaone3, falcon3, gemma, gigachat, glmedge, granite, llama2, llama2-sys, llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, mistral-v7-tekken, monarch, openchat, orion, phi3, phi4, rwkv-world, smolvlm, vicuna, vicuna-orca, yandex, zephyr
    (env: LLAMA_ARG_CHAT_TEMPLATE_FILE) | -| `--no-prefill-assistant` | whether to prefill the assistant's response if the last message is an assistant message (default: prefill enabled)
    when this flag is set, if the last message is an assistant message then it will be treated as a full message and not prefilled
    (env: LLAMA_ARG_NO_PREFILL_ASSISTANT) | +| `--chat-template JINJA_TEMPLATE` | set custom jinja chat template (default: template taken from model's metadata)
    if suffix/prefix are specified, template will be disabled
    only commonly used templates are accepted (unless --jinja is set before this flag):
    list of built-in templates:
    bailing, chatglm3, chatglm4, chatml, command-r, deepseek, deepseek2, deepseek3, exaone3, exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, hunyuan-dense, hunyuan-moe, kimi-k2, llama2, llama2-sys, llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, mistral-v7-tekken, monarch, openchat, orion, phi3, phi4, rwkv-world, seed_oss, smolvlm, vicuna, vicuna-orca, yandex, zephyr
    (env: LLAMA_ARG_CHAT_TEMPLATE) | +| `--chat-template-file JINJA_TEMPLATE_FILE` | set custom jinja chat template file (default: template taken from model's metadata)
    if suffix/prefix are specified, template will be disabled
    only commonly used templates are accepted (unless --jinja is set before this flag):
    list of built-in templates:
    bailing, chatglm3, chatglm4, chatml, command-r, deepseek, deepseek2, deepseek3, exaone3, exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, hunyuan-dense, hunyuan-moe, kimi-k2, llama2, llama2-sys, llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, mistral-v7-tekken, monarch, openchat, orion, phi3, phi4, rwkv-world, seed_oss, smolvlm, vicuna, vicuna-orca, yandex, zephyr
    (env: LLAMA_ARG_CHAT_TEMPLATE_FILE) | +| `--no-prefill-assistant` | whether to prefill the assistant's response if the last message is an assistant message (default: prefill enabled)
    when this flag is set, if the last message is an assistant message then it will be treated as a full message and not prefilled

    (env: LLAMA_ARG_NO_PREFILL_ASSISTANT) | | `-sps, --slot-prompt-similarity SIMILARITY` | how much the prompt of a request must match the prompt of a slot in order to use that slot (default: 0.50, 0.0 = disabled)
    | | `--lora-init-without-apply` | load LoRA adapters without applying them (apply later via POST /lora-adapters) (default: disabled) | +| `-td, --threads-draft N` | number of threads to use during generation (default: same as --threads) | +| `-tbd, --threads-batch-draft N` | number of threads to use during batch and prompt processing (default: same as --threads-draft) | | `--draft-max, --draft, --draft-n N` | number of tokens to draft for speculative decoding (default: 16)
    (env: LLAMA_ARG_DRAFT_MAX) | | `--draft-min, --draft-n-min N` | minimum number of draft tokens to use for speculative decoding (default: 0)
    (env: LLAMA_ARG_DRAFT_MIN) | | `--draft-p-min P` | minimum speculative decoding probability (greedy) (default: 0.8)
    (env: LLAMA_ARG_DRAFT_P_MIN) | @@ -187,8 +206,7 @@ The project is under active development, and we are [looking for feedback and co | `-devd, --device-draft ` | comma-separated list of devices to use for offloading the draft model (none = don't offload)
    use --list-devices to see a list of available devices | | `-ngld, --gpu-layers-draft, --n-gpu-layers-draft N` | number of layers to store in VRAM for the draft model
    (env: LLAMA_ARG_N_GPU_LAYERS_DRAFT) | | `-md, --model-draft FNAME` | draft model for speculative decoding (default: unused)
    (env: LLAMA_ARG_MODEL_DRAFT) | -| `-ctkd, --cache-type-k-draft TYPE` | KV cache data type for K for speculative decoding model
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_K_DRAFT) | -| `-ctvd, --cache-type-v-draft TYPE` | KV cache data type for V for speculative decoding model
    allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
    (default: f16)
    (env: LLAMA_ARG_CACHE_TYPE_V_DRAFT) | +| `--spec-replace TARGET DRAFT` | translate the string in TARGET into DRAFT if the draft model and main model are not compatible | | `-mv, --model-vocoder FNAME` | vocoder model for audio generation (default: unused) | | `--tts-use-guide-tokens` | Use guide tokens to improve TTS word recall | | `--embd-bge-small-en-default` | use default bge-small-en-v1.5 model (note: can download weights from the internet) | @@ -199,6 +217,7 @@ The project is under active development, and we are [looking for feedback and co | `--fim-qwen-7b-default` | use default Qwen 2.5 Coder 7B (note: can download weights from the internet) | | `--fim-qwen-7b-spec` | use Qwen 2.5 Coder 7B + 0.5B draft for speculative decoding (note: can download weights from the internet) | | `--fim-qwen-14b-spec` | use Qwen 2.5 Coder 14B + 0.5B draft for speculative decoding (note: can download weights from the internet) | +| `--fim-qwen-30b-default` | use default Qwen 3 Coder 30B A3B Instruct (note: can download weights from the internet) | Note: If both command line argument and environment variable are both set for the same param, the argument will take precedence over env var. @@ -865,25 +884,23 @@ Same as the `/v1/embeddings` endpoint. ### GET `/slots`: Returns the current slots processing state -> [!WARNING] -> This endpoint is intended for debugging and may be modified in future versions. For security reasons, we strongly advise against enabling it in production environments. - -This endpoint is disabled by default and can be enabled with `--slots` +This endpoint is enabled by default and can be disabled with `--no-slots`. It can be used to query various per-slot metrics, such as speed, processed tokens, sampling parameters, etc. If query param `?fail_on_no_slot=1` is set, this endpoint will respond with status code 503 if there is no available slots. **Response format** -Example: +
    +Example with 2 slots ```json [ { "id": 0, - "id_task": -1, - "n_ctx": 1024, + "id_task": 135, + "n_ctx": 65536, "speculative": false, - "is_processing": false, + "is_processing": true, "params": { "n_predict": -1, "seed": 4294967295, @@ -893,6 +910,7 @@ Example: "top_k": 40, "top_p": 0.949999988079071, "min_p": 0.05000000074505806, + "top_n_sigma": -1.0, "xtc_probability": 0.0, "xtc_threshold": 0.10000000149011612, "typical_p": 1.0, @@ -903,17 +921,10 @@ Example: "dry_multiplier": 0.0, "dry_base": 1.75, "dry_allowed_length": 2, - "dry_penalty_last_n": -1, - "dry_sequence_breakers": [ - "\n", - ":", - "\"", - "*" - ], + "dry_penalty_last_n": 131072, "mirostat": 0, "mirostat_tau": 5.0, "mirostat_eta": 0.10000000149011612, - "stop": [], "max_tokens": -1, "n_keep": 0, "n_discard": 0, @@ -921,8 +932,12 @@ Example: "stream": true, "n_probs": 0, "min_keep": 0, - "grammar": "", + "chat_format": "GPT-OSS", + "reasoning_format": "none", + "reasoning_in_content": false, + "thinking_forced_open": false, "samplers": [ + "penalties", "dry", "top_k", "typ_p", @@ -932,22 +947,89 @@ Example: "temperature" ], "speculative.n_max": 16, - "speculative.n_min": 5, - "speculative.p_min": 0.8999999761581421, - "timings_per_token": false + "speculative.n_min": 0, + "speculative.p_min": 0.75, + "timings_per_token": false, + "post_sampling_probs": false, + "lora": [] }, - "prompt": "", "next_token": { "has_next_token": true, "has_new_line": false, "n_remain": -1, - "n_decoded": 0, - "stopping_word": "" + "n_decoded": 0 + } + }, + { + "id": 1, + "id_task": 0, + "n_ctx": 65536, + "speculative": false, + "is_processing": true, + "params": { + "n_predict": -1, + "seed": 4294967295, + "temperature": 0.800000011920929, + "dynatemp_range": 0.0, + "dynatemp_exponent": 1.0, + "top_k": 40, + "top_p": 0.949999988079071, + "min_p": 0.05000000074505806, + "top_n_sigma": -1.0, + "xtc_probability": 0.0, + "xtc_threshold": 0.10000000149011612, + "typical_p": 1.0, + "repeat_last_n": 64, + "repeat_penalty": 1.0, + "presence_penalty": 0.0, + "frequency_penalty": 0.0, + "dry_multiplier": 0.0, + "dry_base": 1.75, + "dry_allowed_length": 2, + "dry_penalty_last_n": 131072, + "mirostat": 0, + "mirostat_tau": 5.0, + "mirostat_eta": 0.10000000149011612, + "max_tokens": -1, + "n_keep": 0, + "n_discard": 0, + "ignore_eos": false, + "stream": true, + "n_probs": 0, + "min_keep": 0, + "chat_format": "GPT-OSS", + "reasoning_format": "none", + "reasoning_in_content": false, + "thinking_forced_open": false, + "samplers": [ + "penalties", + "dry", + "top_k", + "typ_p", + "top_p", + "min_p", + "xtc", + "temperature" + ], + "speculative.n_max": 16, + "speculative.n_min": 0, + "speculative.p_min": 0.75, + "timings_per_token": false, + "post_sampling_probs": false, + "lora": [] + }, + "next_token": { + "has_next_token": true, + "has_new_line": true, + "n_remain": -1, + "n_decoded": 136 } } ] ``` +
    + ### GET `/metrics`: Prometheus compatible metrics exporter This endpoint is only accessible if `--metrics` is set. diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 6aa319d2f1..aebd886ea2 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -141,7 +141,7 @@ struct slot_params { // Embeddings int32_t embd_normalize = 2; // (-1=none, 0=max absolute int16, 1=taxicab, 2=Euclidean/L2, >2=p-norm) - json to_json() const { + json to_json(bool only_metrics = false) const { std::vector samplers; samplers.reserve(sampling.samplers.size()); for (const auto & sampler : sampling.samplers) { @@ -153,9 +153,55 @@ struct slot_params { lora.push_back({{"id", i}, {"scale", this->lora[i].scale}}); } + if (only_metrics) { + return json { + {"n_predict", n_predict}, // Server configured n_predict + {"seed", sampling.seed}, + {"temperature", sampling.temp}, + {"dynatemp_range", sampling.dynatemp_range}, + {"dynatemp_exponent", sampling.dynatemp_exponent}, + {"top_k", sampling.top_k}, + {"top_p", sampling.top_p}, + {"min_p", sampling.min_p}, + {"top_n_sigma", sampling.top_n_sigma}, + {"xtc_probability", sampling.xtc_probability}, + {"xtc_threshold", sampling.xtc_threshold}, + {"typical_p", sampling.typ_p}, + {"repeat_last_n", sampling.penalty_last_n}, + {"repeat_penalty", sampling.penalty_repeat}, + {"presence_penalty", sampling.penalty_present}, + {"frequency_penalty", sampling.penalty_freq}, + {"dry_multiplier", sampling.dry_multiplier}, + {"dry_base", sampling.dry_base}, + {"dry_allowed_length", sampling.dry_allowed_length}, + {"dry_penalty_last_n", sampling.dry_penalty_last_n}, + {"mirostat", sampling.mirostat}, + {"mirostat_tau", sampling.mirostat_tau}, + {"mirostat_eta", sampling.mirostat_eta}, + {"max_tokens", n_predict}, // User configured n_predict + {"n_keep", n_keep}, + {"n_discard", n_discard}, + {"ignore_eos", sampling.ignore_eos}, + {"stream", stream}, + {"n_probs", sampling.n_probs}, + {"min_keep", sampling.min_keep}, + {"chat_format", common_chat_format_name(oaicompat_chat_syntax.format)}, + {"reasoning_format", common_reasoning_format_name(oaicompat_chat_syntax.reasoning_format)}, + {"reasoning_in_content", oaicompat_chat_syntax.reasoning_in_content}, + {"thinking_forced_open", oaicompat_chat_syntax.thinking_forced_open}, + {"samplers", samplers}, + {"speculative.n_max", speculative.n_max}, + {"speculative.n_min", speculative.n_min}, + {"speculative.p_min", speculative.p_min}, + {"timings_per_token", timings_per_token}, + {"post_sampling_probs", post_sampling_probs}, + {"lora", lora}, + }; + } + auto grammar_triggers = json::array(); for (const auto & trigger : sampling.grammar_triggers) { - server_grammar_trigger ct(std::move(trigger)); + server_grammar_trigger ct(trigger); grammar_triggers.push_back(ct.to_json()); } @@ -1572,7 +1618,26 @@ struct server_slot { } } - json to_json() const { + json to_json(bool only_metrics = false) const { + if (only_metrics) { + return json { + {"id", id}, + {"id_task", id_task}, + {"n_ctx", n_ctx}, + {"speculative", can_speculate()}, + {"is_processing", is_processing()}, + {"params", params.to_json(true)}, + {"next_token", + { + {"has_next_token", has_next_token}, + {"has_new_line", has_new_line}, + {"n_remain", n_remaining}, + {"n_decoded", n_decoded}, + } + }, + }; + } + return json { {"id", id}, {"id_task", id_task}, @@ -2874,7 +2939,7 @@ struct server_context { int n_processing_slots = 0; for (server_slot & slot : slots) { - json slot_data = slot.to_json(); + json slot_data = slot.to_json(true); if (slot.is_processing()) { n_processing_slots++; @@ -4271,16 +4336,20 @@ int main(int argc, char ** argv) { } }; - const auto handle_props = [&ctx_server, &res_ok](const httplib::Request &, httplib::Response & res) { + const auto handle_props = [¶ms, &ctx_server, &res_ok](const httplib::Request &, httplib::Response & res) { // this endpoint is publicly available, please only return what is safe to be exposed json data = { { "default_generation_settings", ctx_server.default_generation_settings_for_props }, { "total_slots", ctx_server.params_base.n_parallel }, { "model_path", ctx_server.params_base.model.path }, - { "modalities", json{ + { "modalities", json { {"vision", ctx_server.oai_parser_opt.allow_image}, {"audio", ctx_server.oai_parser_opt.allow_audio}, } }, + { "endpoint_slots", params.endpoint_slots }, + { "endpoint_props", params.endpoint_props }, + { "endpoint_metrics", params.endpoint_metrics }, + { "webui", params.webui }, { "chat_template", common_chat_templates_source(ctx_server.chat_templates.get()) }, { "bos_token", common_token_to_piece(ctx_server.ctx, llama_vocab_bos(ctx_server.vocab), /* special= */ true)}, { "eos_token", common_token_to_piece(ctx_server.ctx, llama_vocab_eos(ctx_server.vocab), /* special= */ true)}, diff --git a/tools/server/tests/utils.py b/tools/server/tests/utils.py index 82f7215d53..cda7434d7c 100644 --- a/tools/server/tests/utils.py +++ b/tools/server/tests/utils.py @@ -148,6 +148,8 @@ class ServerProcess: server_args.append("--metrics") if self.server_slots: server_args.append("--slots") + else: + server_args.append("--no-slots") if self.pooling: server_args.extend(["--pooling", self.pooling]) if self.model_alias: From e92d53b29e393fc4c0f9f1f7c3fe651be8d36faa Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 31 Aug 2025 20:41:02 +0300 Subject: [PATCH 169/174] sampling : optimize samplers by reusing bucket sort (#15665) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sampling : optimize sorting using bucket sort in more places ggml-ci * sampling : do not sort in dist sampler ggml-ci * sampling : avoid heap allocations for sort buffers ggml-ci * common : add option to sort sampling candidates by probability ggml-ci * sampling : revert the change for preserving sort buffers * sampling : use std::copy instead of memcpy * sampling : clarify purpose of partial sort helpers ggml-ci * cont : remove wrong comment [no ci] * common : update comment Co-authored-by: Johannes Gäßler --------- Co-authored-by: Johannes Gäßler --- common/sampling.cpp | 25 ++- common/sampling.h | 4 +- common/speculative.cpp | 2 +- examples/speculative/speculative.cpp | 4 +- include/llama.h | 7 +- src/llama-sampling.cpp | 289 +++++++++++++++------------ tests/test-sampling.cpp | 60 +++--- tools/server/server.cpp | 5 +- tools/tts/tts.cpp | 2 +- 9 files changed, 227 insertions(+), 171 deletions(-) diff --git a/common/sampling.cpp b/common/sampling.cpp index 9c04d35fd0..c710ee173c 100644 --- a/common/sampling.cpp +++ b/common/sampling.cpp @@ -426,8 +426,29 @@ uint32_t common_sampler_get_seed(const struct common_sampler * gsmpl) { // helpers -llama_token_data_array * common_sampler_get_candidates(struct common_sampler * gsmpl) { - return &gsmpl->cur_p; +llama_token_data_array * common_sampler_get_candidates(struct common_sampler * gsmpl, bool do_sort) { + auto * res = &gsmpl->cur_p; + + if (do_sort && !res->sorted) { + // remember the selected token before sorting + const llama_token id = res->data[res->selected].id; + + std::sort(res->data, res->data + res->size, [](const llama_token_data & a, const llama_token_data & b) { + return a.p > b.p; + }); + + // restore the selected token after sorting + for (size_t i = 0; i < res->size; ++i) { + if (res->data[i].id == id) { + res->selected = i; + break; + } + } + + res->sorted = true; + } + + return res; } llama_token common_sampler_last(const struct common_sampler * gsmpl) { diff --git a/common/sampling.h b/common/sampling.h index 2064421db4..e198eecda3 100644 --- a/common/sampling.h +++ b/common/sampling.h @@ -86,7 +86,9 @@ uint32_t common_sampler_get_seed(const struct common_sampler * gsmpl); // helpers // access the internal list of current candidate tokens -llama_token_data_array * common_sampler_get_candidates(struct common_sampler * gsmpl); +// if do_sort == true, the candidates are guaranteed to be sorted afterwards (in descending order of probability) +// the .sorted flag of the result indicates whether the returned candidates are sorted +llama_token_data_array * common_sampler_get_candidates(struct common_sampler * gsmpl, bool do_sort); // get the last accepted token llama_token common_sampler_last(const struct common_sampler * gsmpl); diff --git a/common/speculative.cpp b/common/speculative.cpp index 262b2c23e7..3e83b0964c 100644 --- a/common/speculative.cpp +++ b/common/speculative.cpp @@ -317,7 +317,7 @@ llama_tokens common_speculative_gen_draft( common_sampler_sample(smpl, ctx_dft, 0, true); - const auto * cur_p = common_sampler_get_candidates(smpl); + const auto * cur_p = common_sampler_get_candidates(smpl, true); for (int k = 0; k < std::min(3, (int) cur_p->size); ++k) { LOG_DBG(" - draft candidate %3d, pos %3d: %6d (%8.3f) '%s'\n", diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index 8449406a6d..5f5ac5eb64 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -244,7 +244,7 @@ int main(int argc, char ** argv) { // stochastic verification common_sampler_sample(smpl, ctx_tgt, drafts[s_keep].i_batch_tgt[i_dft], true); - auto & dist_tgt = *common_sampler_get_candidates(smpl); + auto & dist_tgt = *common_sampler_get_candidates(smpl, true); float p_tgt = 0.0f; float p_dft = 0.0f; @@ -493,7 +493,7 @@ int main(int argc, char ** argv) { common_sampler_sample(drafts[s].smpl, ctx_dft, drafts[s].i_batch_dft, true); - const auto * cur_p = common_sampler_get_candidates(drafts[s].smpl); + const auto * cur_p = common_sampler_get_candidates(drafts[s].smpl, true); for (int k = 0; k < std::min(n_seq_dft + 3, (int) cur_p->size); ++k) { LOG_DBG(" - draft candidate %3d for seq %3d, pos %3d: %6d (%8.3f) '%s'\n", diff --git a/include/llama.h b/include/llama.h index 346135c71e..11f8a363a5 100644 --- a/include/llama.h +++ b/include/llama.h @@ -206,7 +206,7 @@ extern "C" { llama_token_data * data; size_t size; int64_t selected; // this is the index in the data array (i.e. not the token id) - bool sorted; + bool sorted; // note: do not assume the data is sorted - always check this flag } llama_token_data_array; typedef bool (*llama_progress_callback)(float progress, void * user_data); @@ -1156,11 +1156,6 @@ extern "C" { LLAMA_API struct llama_sampler * llama_sampler_init_greedy(void); LLAMA_API struct llama_sampler * llama_sampler_init_dist (uint32_t seed); - /// @details Sorts candidate tokens by their logits in descending order and calculate probabilities based on logits. - /// NOTE: Avoid using on the full vocabulary as the sorting can become slow. For example, apply top-k or top-p sampling first. - DEPRECATED(LLAMA_API struct llama_sampler * llama_sampler_init_softmax (void), - "will be removed in the future (see https://github.com/ggml-org/llama.cpp/pull/9896#discussion_r1800920915)"); - /// @details Top-K sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 /// Setting k <= 0 makes this a noop LLAMA_API struct llama_sampler * llama_sampler_init_top_k (int32_t k); diff --git a/src/llama-sampling.cpp b/src/llama-sampling.cpp index bfbf5fa230..e8c0fc3418 100644 --- a/src/llama-sampling.cpp +++ b/src/llama-sampling.cpp @@ -128,6 +128,89 @@ struct ring_buffer { std::vector data; }; +// writes result in res, does not mutate cur +static void llama_token_data_array_partial_sort(const llama_token_data_array & cur, int npartial, std::vector & res) { + static const auto comp = [](const llama_token_data & a, const llama_token_data & b) { + return a.logit > b.logit; + }; + + constexpr int nbuckets = 128; + constexpr float bucket_low = -10.0f; + constexpr float bucket_high = 10.0f; + constexpr float bucket_scale = nbuckets/(bucket_high - bucket_low); + constexpr float bucket_inter = -bucket_low * bucket_scale; + + std::vector bucket_idx; + std::vector histo(nbuckets, 0); + + std::vector bucket_ptrs; + + bucket_idx.reserve(cur.size); + + for (int i = 0; i < (int)cur.size; ++i) { + const float val = cur.data[i].logit; + int ib = int(bucket_scale * val + bucket_inter); //nbuckets * (val - bucket_low) / (bucket_high - bucket_low); + ib = std::max(0, std::min(nbuckets - 1, ib)); + bucket_idx.push_back(ib); + ++histo[ib]; + } + int nhave = 0; + int ib = nbuckets - 1; + for ( ; ib >= 0; --ib) { + nhave += histo[ib]; + if (nhave >= npartial) { + break; + } + } + res.resize(nhave); + auto * ptr = res.data(); + bucket_ptrs.reserve(nbuckets - ib); + for (int j = nbuckets - 1; j >= ib; --j) { + bucket_ptrs.push_back(ptr); + ptr += histo[j]; + } + for (int i = 0; i < (int)cur.size; ++i) { + int j = bucket_idx[i]; + if (j >= ib) { + *bucket_ptrs[nbuckets - 1 - j]++ = cur.data[i]; + } + } + + ptr = res.data(); + int ndone = 0; + for (int j = nbuckets - 1; j > ib; --j) { + std::sort(ptr, ptr + histo[j], comp); + ptr += histo[j]; + ndone += histo[j]; + } + std::partial_sort(ptr, ptr + npartial - ndone, ptr + histo[ib], comp); +} + +// reduces the size of cur_p to npartial, keeping only the top npartial elements +static void llama_token_data_array_partial_sort_inplace(llama_token_data_array * cur_p, int npartial) { + static const auto comp = [](const llama_token_data & a, const llama_token_data & b) { + return a.logit > b.logit; + }; + + if (npartial <= 128) { + std::partial_sort(cur_p->data, cur_p->data + npartial, cur_p->data + cur_p->size, comp); + + cur_p->size = npartial; + cur_p->sorted = true; + + return; + } + + std::vector tmp; + + llama_token_data_array_partial_sort(*cur_p, npartial, tmp); + + std::copy(tmp.data(), tmp.data() + npartial, cur_p->data); + + cur_p->size = npartial; + cur_p->sorted = true; +} + static int llama_sample_dist(llama_token_data_array * cur_p, std::mt19937 & rng) { // iterator for the probabilities #ifdef __GNUC__ @@ -200,18 +283,21 @@ static void llama_sampler_temp_impl(llama_token_data_array * cur_p, float temp) } } -static void llama_sampler_softmax_impl(llama_token_data_array * cur_p) { +static void llama_sampler_softmax_impl(llama_token_data_array * cur_p, bool do_sort) { GGML_ASSERT(cur_p->size > 0); - // Sort the logits in descending order - if (!cur_p->sorted) { - std::sort(cur_p->data, cur_p->data + cur_p->size, [](const llama_token_data & a, const llama_token_data & b) { - return a.logit > b.logit; - }); - cur_p->sorted = true; + // Sort the logits in descending order if requested + if (do_sort && !cur_p->sorted) { + llama_token_data_array_partial_sort_inplace(cur_p, cur_p->size); } float max_l = cur_p->data[0].logit; + if (!cur_p->sorted) { + for (size_t i = 1; i < cur_p->size; ++i) { + max_l = std::max(max_l, cur_p->data[i].logit); + } + } + float cum_sum = 0.0f; for (size_t i = 0; i < cur_p->size; ++i) { @@ -226,7 +312,6 @@ static void llama_sampler_softmax_impl(llama_token_data_array * cur_p) { } static void llama_sampler_top_k_impl(llama_token_data_array * cur_p, int32_t k) { - // TODO: move bucket sort to separate function so that top_p/typical/softmax first is equally fast // if (k >= (int32_t)cur_p->size) { // return; // } @@ -239,64 +324,7 @@ static void llama_sampler_top_k_impl(llama_token_data_array * cur_p, int32_t k) // Sort scores in descending order if (!cur_p->sorted) { - auto comp = [](const llama_token_data & a, const llama_token_data & b) { - return a.logit > b.logit; - }; - if (k <= 128) { - std::partial_sort(cur_p->data, cur_p->data + k, cur_p->data + cur_p->size, comp); - } else { - constexpr int nbuckets = 128; - constexpr float bucket_low = -10.0f; - constexpr float bucket_high = 10.0f; - constexpr float bucket_scale = nbuckets/(bucket_high - bucket_low); - constexpr float bucket_inter = -bucket_low * bucket_scale; - - std::vector bucket_idx(cur_p->size); - std::vector histo(nbuckets, 0); - - for (int i = 0; i < (int)cur_p->size; ++i) { - const float val = cur_p->data[i].logit; - int ib = int(bucket_scale * val + bucket_inter); //nbuckets * (val - bucket_low) / (bucket_high - bucket_low); - ib = std::max(0, std::min(nbuckets - 1, ib)); - bucket_idx[i] = ib; - ++histo[ib]; - } - int nhave = 0; - int ib = nbuckets - 1; - for ( ; ib >= 0; --ib) { - nhave += histo[ib]; - if (nhave >= k) { - break; - } - } - std::vector tmp_tokens(nhave); - auto * ptr = tmp_tokens.data(); - std::vector bucket_ptrs; - bucket_ptrs.reserve(nbuckets - ib); - for (int j = nbuckets - 1; j >= ib; --j) { - bucket_ptrs.push_back(ptr); - ptr += histo[j]; - } - for (int i = 0; i < (int)cur_p->size; ++i) { - int j = bucket_idx[i]; - if (j >= ib) { - *bucket_ptrs[nbuckets - 1 - j]++ = cur_p->data[i]; - } - } - - ptr = tmp_tokens.data(); - int ndone = 0; - for (int j = nbuckets - 1; j > ib; --j) { - std::sort(ptr, ptr + histo[j], comp); - ptr += histo[j]; - ndone += histo[j]; - } - std::partial_sort(ptr, ptr + k - ndone, ptr + histo[ib], comp); - - std::memcpy(cur_p->data, tmp_tokens.data(), k*sizeof(llama_token_data)); - - } - cur_p->sorted = true; + llama_token_data_array_partial_sort_inplace(cur_p, k); } cur_p->size = k; @@ -576,7 +604,8 @@ static const char * llama_sampler_dist_name(const struct llama_sampler * /*smpl* static void llama_sampler_dist_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { auto * ctx = (llama_sampler_dist *) smpl->ctx; - llama_sampler_softmax_impl(cur_p); + // sorting is not necessary here + llama_sampler_softmax_impl(cur_p, false); cur_p->selected = llama_sample_dist(cur_p, ctx->rng); } @@ -626,32 +655,6 @@ struct llama_sampler * llama_sampler_init_dist(uint32_t seed) { ); } -// softmax - -static const char * llama_sampler_softmax_name(const struct llama_sampler * /*smpl*/) { - return "softmax"; -} - -static void llama_sampler_softmax_apply(struct llama_sampler * /*smpl*/, llama_token_data_array * cur_p) { - llama_sampler_softmax_impl(cur_p); -} - -static struct llama_sampler_i llama_sampler_softmax_i = { - /* .name = */ llama_sampler_softmax_name, - /* .accept = */ nullptr, - /* .apply = */ llama_sampler_softmax_apply, - /* .reset = */ nullptr, - /* .clone = */ nullptr, - /* .free = */ nullptr, -}; - -struct llama_sampler * llama_sampler_init_softmax() { - return llama_sampler_init( - /* .iface = */ &llama_sampler_softmax_i, - /* .ctx = */ nullptr - ); -} - // top-k struct llama_sampler_top_k { @@ -663,7 +666,7 @@ static const char * llama_sampler_top_k_name(const struct llama_sampler * /*smpl } static void llama_sampler_top_k_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { - const auto * ctx = (llama_sampler_top_k *) smpl->ctx; + auto * ctx = (llama_sampler_top_k *) smpl->ctx; llama_sampler_top_k_impl(cur_p, ctx->k); } @@ -699,6 +702,8 @@ struct llama_sampler * llama_sampler_init_top_k(int32_t k) { struct llama_sampler_top_p { const float p; const size_t min_keep; + + std::vector buf_sort; }; static const char * llama_sampler_top_p_name(const struct llama_sampler * /*smpl*/) { @@ -706,20 +711,35 @@ static const char * llama_sampler_top_p_name(const struct llama_sampler * /*smpl } static void llama_sampler_top_p_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { - const auto * ctx = (llama_sampler_top_p *) smpl->ctx; + auto * ctx = (llama_sampler_top_p *) smpl->ctx; if (ctx->p >= 1.0f) { return; } - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, false); + + size_t k = cur_p->size; + auto * pdata = cur_p->data; + + auto & buf_sort = ctx->buf_sort; + + // if not sorted, try adaptive top-k sorting + if (!cur_p->sorted && cur_p->size > 1024) { + k = std::min(256, cur_p->size); + llama_token_data_array_partial_sort(*cur_p, k, buf_sort); + pdata = buf_sort.data(); + } else if (!cur_p->sorted) { + // small candidates -> sort inplace + llama_token_data_array_partial_sort_inplace(cur_p, k); + } // Compute the cumulative probabilities float cum_sum = 0.0f; size_t last_idx = cur_p->size; for (size_t i = 0; i < cur_p->size; ++i) { - cum_sum += cur_p->data[i].p; + cum_sum += pdata[i].p; // Check if the running sum is at least p or if we have kept at least min_keep tokens // we set the last index to i+1 to indicate that the current iterate should be included in the set @@ -727,9 +747,21 @@ static void llama_sampler_top_p_apply(struct llama_sampler * smpl, llama_token_d last_idx = i + 1; break; } + + // we exceeded the current top-k heuristic -> increase k and continue + if (!cur_p->sorted && i == k - 1) { + k = cur_p->size; + llama_token_data_array_partial_sort(*cur_p, k, buf_sort); + pdata = buf_sort.data(); + } } // Resize the output vector to keep only the top-p tokens + if (!cur_p->sorted) { + std::copy(buf_sort.data(), buf_sort.data() + last_idx, cur_p->data); + cur_p->sorted = true; + } + cur_p->size = last_idx; } @@ -757,6 +789,7 @@ struct llama_sampler * llama_sampler_init_top_p(float p, size_t min_keep) { /* .ctx = */ new llama_sampler_top_p { /* .p = */ p, /* .min_keep = */ min_keep, + /* .buf_sort = */ {}, } ); } @@ -773,7 +806,7 @@ static const char * llama_sampler_min_p_name(const struct llama_sampler * /*smpl } static void llama_sampler_min_p_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { - const auto * ctx = (llama_sampler_min_p *) smpl->ctx; + auto * ctx = (llama_sampler_min_p *) smpl->ctx; if (ctx->p <= 0.0f || !cur_p->size) { return; @@ -799,7 +832,7 @@ static void llama_sampler_min_p_apply(struct llama_sampler * smpl, llama_token_d // if we have enough values the operation was a success if (!filtered_tokens.empty() && filtered_tokens.size() >= ctx->min_keep) { - memcpy(cur_p->data, filtered_tokens.data(), filtered_tokens.size()*sizeof(llama_token_data)); + std::copy(filtered_tokens.begin(), filtered_tokens.end(), cur_p->data); cur_p->size = filtered_tokens.size(); min_p_applied = true; } @@ -809,10 +842,7 @@ static void llama_sampler_min_p_apply(struct llama_sampler * smpl, llama_token_d if (!min_p_applied) { // Sort the logits in descending order if (!cur_p->sorted) { - std::sort(cur_p->data, cur_p->data + cur_p->size, [](const llama_token_data & a, const llama_token_data & b) { - return a.logit > b.logit; - }); - cur_p->sorted = true; + llama_token_data_array_partial_sort_inplace(cur_p, cur_p->size); } const float min_logit = cur_p->data[0].logit + logf(ctx->p); // min logit for p_i >= p * p_max @@ -869,7 +899,7 @@ static const char * llama_sampler_typical_name(const struct llama_sampler * /*sm } static void llama_sampler_typical_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { - const auto * ctx = (llama_sampler_typical *) smpl->ctx; + auto * ctx = (llama_sampler_typical *) smpl->ctx; // Reference implementation: // https://github.com/huggingface/transformers/compare/main...cimeister:typical-sampling:typical-pr @@ -878,7 +908,7 @@ static void llama_sampler_typical_apply(struct llama_sampler * smpl, llama_token } // Compute the softmax of logits and calculate entropy - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); float entropy = 0.0f; for (size_t i = 0; i < cur_p->size; ++i) { @@ -1012,7 +1042,7 @@ static const char * llama_sampler_temp_ext_name(const struct llama_sampler * /*s } static void llama_sampler_temp_ext_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { - const auto * ctx = (llama_sampler_temp_ext *) smpl->ctx; + auto * ctx = (llama_sampler_temp_ext *) smpl->ctx; if (ctx->delta > 0) { const float min_temp = std::max(0.0f, ctx->temp - ctx->delta); const float max_temp = ctx->temp + ctx->delta; @@ -1027,7 +1057,7 @@ static void llama_sampler_temp_ext_apply(struct llama_sampler * smpl, llama_toke // Calculate maximum possible entropy float max_entropy = -logf(1.0f / cur_p->size); - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); // Calculate entropy of the softmax probabilities float entropy = 0.0f; @@ -1121,7 +1151,7 @@ struct llama_sampler_xtc { const uint32_t seed; uint32_t seed_cur; - std::mt19937 rng; + std::mt19937 rng; }; static const char * llama_sampler_xtc_name(const struct llama_sampler * /*smpl*/) { @@ -1139,17 +1169,20 @@ static void llama_sample_xtc_apply(struct llama_sampler * smpl, llama_token_data std::uniform_real_distribution distribution(0.0f, 1.0f); float chance = distribution(ctx->rng); - if (chance > ctx->probability) return; + if (chance > ctx->probability) { + return; + } - // in case it's not sorted/recalculated yet - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); int pos_last = 0; for (size_t i = 0; i < cur_p->size; ++i) { if (cur_p->data[i].p >= ctx->threshold) { pos_last = i; - } else break; + } else { + break; + } } if (cur_p->size - pos_last >= ctx->min_keep && pos_last > 0) { @@ -1221,7 +1254,7 @@ struct llama_sampler_mirostat { float mu; - std::mt19937 rng; + std::mt19937 rng; }; static const char * llama_sampler_mirostat_name(const struct llama_sampler * /*smpl*/) { @@ -1231,7 +1264,7 @@ static const char * llama_sampler_mirostat_name(const struct llama_sampler * /*s static void llama_sampler_mirostat_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { auto * ctx = (llama_sampler_mirostat *) smpl->ctx; - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); // Estimate s_hat using the most probable m tokens float s_hat = 0.0; @@ -1250,7 +1283,8 @@ static void llama_sampler_mirostat_apply(struct llama_sampler * smpl, llama_toke float k = powf((epsilon_hat * powf(2, ctx->mu)) / (1 - powf(ctx->n_vocab, -epsilon_hat)), 1 / s_hat); llama_sampler_top_k_impl(cur_p, std::max(int(k), 1)); - llama_sampler_softmax_impl(cur_p); + + llama_sampler_softmax_impl(cur_p, true); const int idx = llama_sample_dist(cur_p, ctx->rng); @@ -1336,7 +1370,7 @@ static const char * llama_sampler_mirostat_v2_name(const struct llama_sampler * static void llama_sampler_mirostat_v2_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { auto * ctx = (llama_sampler_mirostat_v2 *) smpl->ctx; - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); // Truncate the words with surprise values greater than mu cur_p->size = std::distance(cur_p->data, std::find_if(cur_p->data, cur_p->data + cur_p->size, [&](const llama_token_data & candidate) { @@ -1348,7 +1382,7 @@ static void llama_sampler_mirostat_v2_apply(struct llama_sampler * smpl, llama_t } // Normalize the probabilities of the remaining words - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); const int idx = llama_sample_dist(cur_p, ctx->rng); @@ -1540,7 +1574,7 @@ static struct llama_sampler * llama_sampler_init_grammar_impl( trigger_pattern += std::regex_replace(trigger_words[i], special_chars, "\\$0"); } trigger_pattern += ")[\\s\\S]*"; - auto trigger_pattern_c = trigger_pattern.c_str(); + const auto * trigger_pattern_c = trigger_pattern.c_str(); trigger_patterns = &trigger_pattern_c; num_trigger_patterns = 1; } @@ -1748,7 +1782,7 @@ static const char * llama_sampler_top_n_sigma_name(const struct llama_sampler * } static void llama_sampler_top_n_sigma_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { - const auto * ctx = (llama_sampler_top_n_sigma *) smpl->ctx; + auto * ctx = (llama_sampler_top_n_sigma *) smpl->ctx; if (ctx->n <= 0.0f || cur_p->size <= 1) { return; @@ -1780,13 +1814,14 @@ static void llama_sampler_top_n_sigma_apply(struct llama_sampler * smpl, llama_t } float std = valid_count > 0 ? sqrt(acc/valid_count) : 0; - //apply mask + // apply mask for (size_t i = 0; i < cur_p->size; ++i) { if (cur_p->data[i].logit < max - (ctx->n * std)) { cur_p->data[i].logit = -INFINITY; } } - llama_sampler_softmax_impl(cur_p); + + llama_sampler_softmax_impl(cur_p, true); } static struct llama_sampler * llama_sampler_top_n_sigma_clone(const struct llama_sampler * smpl) { @@ -1991,7 +2026,9 @@ static void llama_sampler_dry_apply(struct llama_sampler * smpl, llama_token_dat { const int last = last_n_repeat - 1; - int rt = 0, lt = 0; + + int rt = 0; + int lt = 0; for (int k = 1; k < last_n_repeat; ++k) { if (k > rt) { @@ -2135,8 +2172,8 @@ static struct llama_sampler_i llama_sampler_dry_i = { /* .free = */ llama_sampler_dry_free, }; -struct llama_sampler * llama_sampler_init_dry(const struct llama_vocab * vocab, int32_t context_size, float dry_multiplier, float dry_base, int32_t dry_allowed_length, int32_t dry_penalty_last_n, const char** seq_breakers, size_t num_breakers) { - int32_t effective_dry_penalty_last_n = (dry_penalty_last_n == -1) ? context_size : std::max(dry_penalty_last_n, 0); +struct llama_sampler * llama_sampler_init_dry(const struct llama_vocab * vocab, int32_t n_ctx_train, float dry_multiplier, float dry_base, int32_t dry_allowed_length, int32_t dry_penalty_last_n, const char** seq_breakers, size_t num_breakers) { + int32_t effective_dry_penalty_last_n = (dry_penalty_last_n == -1) ? n_ctx_train : std::max(dry_penalty_last_n, 0); std::unordered_multimap> processed_breakers; const int MAX_CHAR_LEN = 40; const int MAX_SEQ_LEN = 20; @@ -2169,7 +2206,7 @@ struct llama_sampler * llama_sampler_init_dry(const struct llama_vocab * vocab, return llama_sampler_init( /* .iface = */ &llama_sampler_dry_i, /* .ctx = */ new llama_sampler_dry { - /* .total_context_size = */ context_size, + /* .total_context_size = */ n_ctx_train, /* .dry_multiplier = */ dry_multiplier, /* .dry_base = */ dry_base, /* .dry_allowed_length = */ dry_allowed_length, @@ -2308,7 +2345,7 @@ static const char * llama_sampler_infill_name(const struct llama_sampler * /*smp static void llama_sampler_infill_apply(struct llama_sampler * smpl, llama_token_data_array * cur_p) { auto * ctx = (llama_sampler_infill *) smpl->ctx; - llama_sampler_softmax_impl(cur_p); + llama_sampler_softmax_impl(cur_p, true); #if defined(GGML_DEBUG_SAMPLER_INFILL) #define LOG_DBG_CUR LLAMA_LOG_DEBUG diff --git a/tests/test-sampling.cpp b/tests/test-sampling.cpp index 6300f25cae..7cd96c5cd3 100644 --- a/tests/test-sampling.cpp +++ b/tests/test-sampling.cpp @@ -197,10 +197,10 @@ static void test_sampler_queue(const size_t n_vocab, const std::string & sampler sampler_tester tester(n_vocab); llama_token min_token_id = 0; - const llama_token max_token_id = n_vocab-1; + const llama_token max_token_id = n_vocab - 1; for (auto s : samplers_sequence) { - switch (s){ + switch (s) { case 'k': tester.apply(llama_sampler_init_top_k(top_k)); break; case 'y': GGML_ABORT("typical test not implemented"); case 'p': tester.apply(llama_sampler_init_top_p(top_p, 1)); break; @@ -243,10 +243,10 @@ static void test_sampler_queue(const size_t n_vocab, const std::string & sampler } GGML_ASSERT(size == expected_size); - GGML_ASSERT(cur_p.data[0].id == max_token_id); - GGML_ASSERT(cur_p.data[expected_size-1].id == min_token_id); + GGML_ASSERT(!cur_p.sorted || cur_p.data[0].id == max_token_id); + GGML_ASSERT(!cur_p.sorted || cur_p.data[expected_size-1].id == min_token_id); } else if (s == 'm') { - int expected_size = ceilf((1.0f-min_p) * n_vocab); + int expected_size = ceilf((1.0f - min_p) * n_vocab); expected_size = std::max(expected_size, 1); expected_size = std::min(expected_size, size); @@ -256,14 +256,14 @@ static void test_sampler_queue(const size_t n_vocab, const std::string & sampler min_token_id = std::min(min_token_id, (llama_token)(n_vocab - 1)); GGML_ASSERT(size == expected_size); - GGML_ASSERT(cur_p.data[0].id == max_token_id); - GGML_ASSERT(cur_p.data[expected_size-1].id == min_token_id); + GGML_ASSERT(!cur_p.sorted || cur_p.data[0].id == max_token_id); + GGML_ASSERT(!cur_p.sorted || cur_p.data[expected_size-1].id == min_token_id); } else { GGML_ABORT("fatal error"); } } - printf("Sampler queue %3s OK with n_vocab=%05zu top_k=%05d top_p=%f min_p=%f\n", + printf("Sampler queue %3s OK with n_vocab=%05zu top_k=%5d top_p=%f min_p=%f\n", samplers_sequence.c_str(), n_vocab, top_k, top_p, min_p); } @@ -308,28 +308,28 @@ static void test_perf() { int main(void) { ggml_time_init(); - test_temp({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 1.0f); - test_temp({0.1f, 0.2f, 0.3f, 0.4f}, {1.0f, 0.0f, 0.0f, 0.0f}, 0.0f); + test_temp({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f, 0.2f, 0.3f, 0.4f}, 1.0f); + test_temp({0.1f, 0.2f, 0.3f, 0.4f}, {0.0f, 0.0f, 0.0f, 1.0f}, 0.0f); - test_temp_ext({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 1.0f, 0.0f, 1.0f); - test_temp_ext({0.1f, 0.2f, 0.3f, 0.4f}, {1.0f, 0.0f, 0.0f, 0.0f}, 0.0f, 0.0f, 1.0f); + test_temp_ext({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f, 0.2f, 0.3f, 0.4f}, 1.0f, 0.0f, 1.0f); + test_temp_ext({0.1f, 0.2f, 0.3f, 0.4f}, {0.0f, 0.0f, 0.0f, 1.0f}, 0.0f, 0.0f, 1.0f); test_top_k({0.1f, 0.2f, 0.3f, 0.4f}, {1.0f}, 1); test_top_k({0.1f, 0.2f, 0.3f, 0.4f}, {0.44444f, 0.33333f, 0.22222f}, 3); test_top_k({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 4); - test_top_k({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 0); + test_top_k({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f, 0.2f, 0.3f, 0.4f}, 0); test_top_p({0.1f, 0.2f, 0.3f, 0.4f}, {1.0f}, 0); test_top_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.571429f, 0.428571f}, 0.7f); test_top_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.44444f, 0.33333f, 0.22222f}, 0.8f); - test_top_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 1.0f); + test_top_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f, 0.2f, 0.3f, 0.4f}, 1.0f); - test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/1.0f, 0.3f/1.0f, 0.2f/1.0f, 0.1f/1.0f}, 0.00f); - test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/1.0f, 0.3f/1.0f, 0.2f/1.0f, 0.1f/1.0f}, 0.24f); - test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.9f, 0.3f/0.9f, 0.2f/0.9f}, 0.26f); - test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.9f, 0.3f/0.9f, 0.2f/0.9f}, 0.49f); - test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.7f, 0.3f/0.7f}, 0.51f); - test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.7f, 0.3f/0.7f}, 0.74f); + test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f/1.0f, 0.2f/1.0f, 0.3f/1.0f, 0.4f/1.0f}, 0.00f); + test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f/1.0f, 0.2f/1.0f, 0.3f/1.0f, 0.4f/1.0f}, 0.24f); + test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.2f/0.9f, 0.3f/0.9f, 0.4f/0.9f}, 0.26f); + test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.2f/0.9f, 0.3f/0.9f, 0.4f/0.9f}, 0.49f); + test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.3f/0.7f, 0.4f/0.7f}, 0.51f); + test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.3f/0.7f, 0.4f/0.7f}, 0.74f); test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.4f}, 0.76f); test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.4f}, 1.00f); test_min_p({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f/0.4f}, 1.05f); @@ -345,23 +345,23 @@ int main(void) { test_typical({0.97f, 0.01f, 0.01f, 0.01f}, {0.97f}, 0.5f); test_typical({0.4f, 0.2f, 0.2f, 0.2f}, {0.2f, 0.2f, 0.2f}, 0.5f); - test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0}, {0.25f, 0.25f, 0.25f, 0.25f, 0}, 50.0f, 0.0f, 0.0f); - test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2}, {0.5f, 0.5f, 0, 0, 0}, 50.0f, 0.0f, 0.0f); - test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 0, 0}, {0.5f, 0.5f, 0, 0, 0}, 50.0f, 0.0f, 0.0f); + test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0}, {0, 0.25f, 0.25f, 0.25f, 0.25f}, 50.0f, 0.0f, 0.0f); + test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2}, {0, 0, 0, 0.5f, 0.5f}, 50.0f, 0.0f, 0.0f); + test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 0, 0}, {0, 0, 0, 0.5f, 0.5f}, 50.0f, 0.0f, 0.0f); - test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0}, {0.249997f, 0.249997f, 0.249997f, 0.249997f, 0.000011f}, 1.0f, 5.0f, 5.0f); - test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2}, {0.499966f, 0.499966f, 0.000023f, 0.000023f, 0.000023f}, 1.0f, 5.0f, 5.0f); - test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 0, 0}, {0.499977f, 0.499977f, 0.000023f, 0.000023f, 0.000000f}, 1.0f, 5.0f, 5.0f); + test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0}, {0.000011f, 0.249997f, 0.249997f, 0.249997f, 0.249997f}, 1.0f, 5.0f, 5.0f); + test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2}, {0.000023f, 0.000023f, 0.000023f, 0.499966f, 0.499966f}, 1.0f, 5.0f, 5.0f); + test_penalties({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 0, 0}, {0.000000f, 0.000023f, 0.000023f, 0.499977f, 0.499977f}, 1.0f, 5.0f, 5.0f); test_dry({0.25f, 0.25f, 0.25f, 0.25f}, {0, 1}, {0.25f, 0.25f, 0.25f, 0.25f}, 1.0f, 1.1f, 2, 4, {}); - test_dry({0.25f, 0.25f, 0.25f, 0.25f}, {0, 1, 2, 0, 1}, {0.296923f, 0.296923f, 0.296923f, 0.109232f}, 1.0f, 1.1f, 2, 5, {}); + test_dry({0.25f, 0.25f, 0.25f, 0.25f}, {0, 1, 2, 0, 1}, {0.296923f, 0.296923f, 0.109232f, 0.296923f}, 1.0f, 1.1f, 2, 5, {}); test_dry({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 3, 4, 0, 1}, {0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, 1.0f, 1.1f, 2, 6, {{3}}); - test_dry({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 0, 1}, {0.241818f, 0.241818f, 0.241818f, 0.241818f, 0.032727f}, 2.0f, 1.1f, 2, 5, {}); + test_dry({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 0, 1}, {0.241818f, 0.241818f, 0.032727f, 0.241818f, 0.241818f}, 2.0f, 1.1f, 2, 5, {}); test_dry({0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, {0, 1, 2, 3, 4, 0, 1}, {0.2f, 0.2f, 0.2f, 0.2f, 0.2f}, 1.0f, 1.1f, 4, 7, {}); test_top_n_sigma({0.1f, 0.2f, 0.3f, 0.4f}, {0.571429f, 0.428571f, 0.0f, 0.0f}, 1.00f); - test_top_n_sigma({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 0.00f); // top_n_sigma == 0 now represents a no-op rather than greedy decoding as of PR#13345 + test_top_n_sigma({0.1f, 0.2f, 0.3f, 0.4f}, {0.1f, 0.2f, 0.3f, 0.4f}, 0.00f); // top_n_sigma == 0 now represents a no-op rather than greedy decoding as of PR#13345 test_top_n_sigma({0.1f, 0.2f, 0.3f, 0.4f}, {0.4f, 0.3f, 0.2f, 0.1f}, 3.00f); test_sampler_queue(10000, "k", 10000, 1.0f, 1.0f); @@ -372,7 +372,7 @@ int main(void) { test_sampler_queue(10000, "m", 10000, 1.0f, 1e-12); test_sampler_queue(10000, "k", 100, 1.0000f, 1.0f); - test_sampler_queue(10000, "p", 10000, 0.0002f, 1.0f); + test_sampler_queue(10000, "p", 10000, 0.0003f, 1.0f); test_sampler_queue(10000, "p", 10000, 0.8000f, 1.0f); test_sampler_queue(10000, "m", 10000, 1.0000f, 9997.9f/9999.0f); test_sampler_queue(10000, "m", 10000, 1.0000f, 0.1f); diff --git a/tools/server/server.cpp b/tools/server/server.cpp index aebd886ea2..e0302e2f2f 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -2550,11 +2550,12 @@ struct server_context { return slot.has_next_token; // continue } - void populate_token_probs(const server_slot & slot, completion_token_output & result, bool post_sampling, bool special, int idx) { + void populate_token_probs(const server_slot & slot, completion_token_output & result, bool post_sampling, bool special, int idx) const { size_t n_probs = slot.params.sampling.n_probs; size_t n_vocab = llama_vocab_n_tokens(vocab); + if (post_sampling) { - const auto * cur_p = common_sampler_get_candidates(slot.smpl); + const auto * cur_p = common_sampler_get_candidates(slot.smpl, true); const size_t max_probs = cur_p->size; // set probability for sampled token diff --git a/tools/tts/tts.cpp b/tools/tts/tts.cpp index 18f01a9946..eaf56591d9 100644 --- a/tools/tts/tts.cpp +++ b/tools/tts/tts.cpp @@ -895,7 +895,7 @@ lovely<|t_0.56|><|code_start|><|634|><|596|><|1766|><|1556|><|1306|><|1285|><|14 codes.push_back(new_token_id); - const auto * cands = common_sampler_get_candidates(smpl[i]); + const auto * cands = common_sampler_get_candidates(smpl[i], false); // is it an end of generation? -> mark the stream as finished if (llama_vocab_is_eog(vocab, new_token_id) || n_decode == n_predict) { From 3dc7397a2799bdc07bccf637ab7ae5a1e786d1a4 Mon Sep 17 00:00:00 2001 From: hipudding Date: Mon, 1 Sep 2025 08:57:00 +0800 Subject: [PATCH 170/174] CANN: fix RoPE cache issue on multi-device (#15629) * CANN: fix RoPE cache issue on multi-device RoPE cache only needs to be computed once per token. However, in multi-device scenarios, not every device starts computation from layer 0, which may lead to unallocated memory issues and precision errors. This commit records the first layer of each device to avoid the above issues. * CANN: Optimize first-layer detection method * CANN: Remove trailing whitespace * CANN: Only cache the data that can be determined as unchanged through the parameters. * CANN: Update function comment --- ggml/src/ggml-cann/aclnn_ops.cpp | 149 ++++++++++++++++--------------- ggml/src/ggml-cann/common.h | 51 ++++++----- ggml/src/ggml-cann/ggml-cann.cpp | 1 + 3 files changed, 105 insertions(+), 96 deletions(-) diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index c42871c575..1f1d489ffa 100755 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -964,8 +964,8 @@ void ggml_cann_rms_norm(ggml_backend_cann_context& ctx, ggml_tensor* dst) { } aclTensor* acl_gamma = get_f32_cache_acl_tensor( ctx, - &ctx.f32_one_cache, - ctx.f32_one_cache_element, + &ctx.rms_norm_one_tensor_cache.cache, + ctx.rms_norm_one_tensor_cache.size, src->ne, acl_gamma_nb, 1, // dims @@ -980,8 +980,8 @@ void ggml_cann_rms_norm(ggml_backend_cann_context& ctx, ggml_tensor* dst) { } aclTensor* acl_rstd = get_f32_cache_acl_tensor( ctx, - &ctx.f32_zero_cache, - ctx.f32_zero_cache_element, + &ctx.rms_norm_zero_tensor_cache.cache, + ctx.rms_norm_zero_tensor_cache.size, src->ne, acl_rstd_nb, GGML_MAX_DIMS, @@ -2248,43 +2248,31 @@ static void aclnn_index_fill_tensor(ggml_backend_cann_context& ctx, * 5. Compute sin(θ), cos(θ) and optionally scale by attn_factor. * 6. Expand sin/cos values by repeat or repeat_interleave depending * on whether @param is_neox is enabled. - * 7. Store the computed values into persistent buffers - * (ctx.rope_sin_ptr / ctx.rope_cos_ptr). * - * @param ctx The CANN backend context, holding memory pool, - * stream, and persistent buffers for rope init/cache. - * @param dst The destination ggml_tensor whose computation - * depends on the cached RoPE values (usually Qcur/Kcur). - * @param theta_scale Scalar exponent base for computing theta scale values. - * @param freq_scale Frequency scaling factor, applied to theta scale. - * @param attn_factor Attention scaling factor, applied to sin/cos. - * @param is_neox Whether to use Neox-style repeat strategy - * (dim expansion vs repeat_interleave). + * @param ctx The CANN backend context, holding memory pool, + * stream, and persistent buffers for rope init/cache. + * @param dst The destination ggml_tensor whose computation + * depends on the RoPE values (usually Qcur/Kcur). + * @param sin_tensor_buffer Pre-allocated buffer for storing repeated sin values. + * @param cos_tensor_buffer Pre-allocated buffer for storing repeated cos values. + * @param theta_scale Scalar exponent base for computing theta scale values. + * @param freq_scale Frequency scaling factor, applied to theta scale. + * @param attn_factor Attention scaling factor, applied to sin/cos. + * @param is_neox Whether to use Neox-style repeat strategy + * (dim expansion vs repeat_interleave). */ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, + void* sin_tensor_buffer, void* cos_tensor_buffer, float theta_scale, float freq_scale, float attn_factor, bool is_neox) { // int sin/cos cache, cache has different repeat method depond on // @param.is_neox - bool is_q = (std::strncmp(dst->name, "Qcur-", 5) == 0); - bool is_k = (std::strncmp(dst->name, "Kcur-", 5) == 0); - - // used for accuracy testing - bool is_attention = is_q || is_k; - - // just compute in first layer in attention - bool is_fisrt_layer = (std::strncmp(dst->name, "Qcur-0", GGML_MAX_NAME) == 0); - if(is_attention && !is_fisrt_layer) { - return; - } ggml_tensor* src0 = dst->src[0]; // input ggml_tensor* src1 = dst->src[1]; // position ggml_tensor* src2 = dst->src[2]; // freq_factors - GGML_TENSOR_BINARY_OP_LOCALS - - int64_t theta_scale_length = ne00 / 2; + int64_t theta_scale_length = src0->ne[0] / 2; int64_t theta_scale_ne[] = {theta_scale_length, 1, 1, 1}; size_t theta_scale_nb[] = {sizeof(float_t), sizeof(float_t), sizeof(float_t), theta_scale_length * sizeof(float_t)}; @@ -2302,21 +2290,32 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, theta_nb[i] = theta_nb[i - 1] * theta_ne[i - 1]; } - // init theta scale, just one time - if(ctx.rope_init_ptr == nullptr || !is_attention) { - // theta_scale arange, [0,1,...,ne00/2 - 1] - if(ctx.rope_init_ptr != nullptr){ - ACL_CHECK(aclrtFree(ctx.rope_init_ptr)); - } - ACL_CHECK(aclrtMalloc(&ctx.rope_init_ptr, theta_scale_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + // theta_scale arange, [0,1,...,ne00/2 - 1] + aclTensor* acl_theta_scale_tensor = nullptr; + // cache theta scale + if (ctx.rope_cache.theta_scale_length != theta_scale_length || + // theta_scale and freq_scale should not change during the current token inference process, + // so we can directly use == here instead of comparing the absolute difference. + ctx.rope_cache.theta_scale != theta_scale || + ctx.rope_cache.freq_scale != freq_scale) { - aclTensor* acl_theta_scale_tensor = - ggml_cann_create_tensor(ctx.rope_init_ptr, ACL_FLOAT, sizeof(float_t), + ctx.rope_cache.theta_scale_length = theta_scale_length; + ctx.rope_cache.theta_scale = theta_scale; + ctx.rope_cache.freq_scale = freq_scale; + + if (ctx.rope_cache.theta_scale_cache != nullptr) { + ACL_CHECK(aclrtFree(ctx.rope_cache.theta_scale_cache)); + } + ACL_CHECK(aclrtMalloc(&ctx.rope_cache.theta_scale_cache, theta_scale_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); + + acl_theta_scale_tensor = + ggml_cann_create_tensor(ctx.rope_cache.theta_scale_cache, ACL_FLOAT, sizeof(float_t), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + float start = 0; float step = 1; - float stop = ne00 / 2; - float n_elements = ne00 / 2; + float stop = theta_scale_length; + float n_elements = theta_scale_length; aclnn_arange(ctx, acl_theta_scale_tensor, start, stop, step, n_elements); // power @@ -2328,34 +2327,29 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, if (freq_scale != 1) { aclnn_muls(ctx, acl_theta_scale_tensor, freq_scale, nullptr, true); } - - // freq_factors - if (src2) { - aclTensor* acl_freq_factors_tensor = ggml_cann_create_tensor( - src2->data, ggml_cann_type_mapping(src2->type), - ggml_type_size(src2->type), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); - aclnn_div(ctx, acl_theta_scale_tensor, acl_freq_factors_tensor); - ggml_cann_release_resources(ctx, acl_freq_factors_tensor); - } - // release - ggml_cann_release_resources(ctx, acl_theta_scale_tensor,acl_theta_scale); - } - - // init sin_repeat && cos_repeat, one token just init in 0 layer - if(position_length > ctx.max_prompt_length) { - ctx.max_prompt_length = position_length; - int64_t repeat_theta_length = theta_scale_length * ctx.max_prompt_length * 2; - if(ctx.rope_sin_ptr != nullptr) { - ACL_CHECK(aclrtFree(ctx.rope_sin_ptr)); - ACL_CHECK(aclrtFree(ctx.rope_cos_ptr)); - } - ACL_CHECK(aclrtMalloc(&ctx.rope_sin_ptr, repeat_theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); - ACL_CHECK(aclrtMalloc(&ctx.rope_cos_ptr, repeat_theta_length * sizeof(float_t), ACL_MEM_MALLOC_HUGE_FIRST)); - } - - aclTensor* acl_theta_scale_tensor = - ggml_cann_create_tensor(ctx.rope_init_ptr, ACL_FLOAT, sizeof(float_t), + ggml_cann_release_resources(ctx, acl_theta_scale); + } else { + // use cache + acl_theta_scale_tensor = + ggml_cann_create_tensor(ctx.rope_cache.theta_scale_cache, ACL_FLOAT, sizeof(float_t), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + } + + ggml_cann_pool_alloc freq_fac_res_allocator(ctx.pool()); + // freq_factors + if (src2) { + freq_fac_res_allocator.alloc(theta_scale_length * sizeof(float_t)); + void* freq_fac_res_ptr = freq_fac_res_allocator.get(); + aclTensor* acl_freq_factors_tensor = ggml_cann_create_tensor( + src2->data, ggml_cann_type_mapping(src2->type), + ggml_type_size(src2->type), theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + aclTensor* acl_freq_fac_res_tensor = ggml_cann_create_tensor( + freq_fac_res_ptr, ACL_FLOAT, sizeof(float_t), + theta_scale_ne, theta_scale_nb, GGML_MAX_DIMS); + aclnn_div(ctx, acl_theta_scale_tensor, acl_freq_factors_tensor, acl_freq_fac_res_tensor); + std::swap(acl_theta_scale_tensor, acl_freq_fac_res_tensor); + ggml_cann_release_resources(ctx, acl_freq_factors_tensor, acl_freq_fac_res_tensor); + } // position aclTensor* acl_position_tensor = ggml_cann_create_tensor( @@ -2397,17 +2391,17 @@ static void aclnn_cache_init(ggml_backend_cann_context& ctx, ggml_tensor* dst, aclnn_muls(ctx, acl_cos_tensor, attn_factor, nullptr, true); } - int64_t sin_reshape_ne[4] = {ne00, 1, ne02, 1}; + int64_t sin_reshape_ne[4] = {src0->ne[0], 1, src0->ne[2], 1}; size_t sin_reshape_nb[GGML_MAX_DIMS]; sin_reshape_nb[0] = sizeof(float_t); for (int i = 1; i < GGML_MAX_DIMS; i++) { sin_reshape_nb[i] = sin_reshape_nb[i - 1] * sin_reshape_ne[i - 1]; } aclTensor* acl_sin_repeat_tensor = - ggml_cann_create_tensor(ctx.rope_sin_ptr, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(sin_tensor_buffer, ACL_FLOAT, sizeof(float_t), sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); aclTensor* acl_cos_repeat_tensor = - ggml_cann_create_tensor(ctx.rope_cos_ptr, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(cos_tensor_buffer, ACL_FLOAT, sizeof(float_t), sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); // repeat @@ -2449,6 +2443,7 @@ void ggml_cann_rope(ggml_backend_cann_context& ctx, ggml_tensor* dst) { // TODO: use ascendc // Only test with LLAMA model. ggml_tensor* src0 = dst->src[0]; // input + ggml_tensor* src1 = dst->src[1]; // param float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; @@ -2481,8 +2476,16 @@ void ggml_cann_rope(ggml_backend_cann_context& ctx, ggml_tensor* dst) { const bool is_neox = mode & GGML_ROPE_TYPE_NEOX; + // sin/cos tensor length. + int64_t repeat_theta_length = src0->ne[0] * src1->ne[0]; + ggml_cann_pool_alloc sin_tensor_allocator(ctx.pool(), repeat_theta_length * sizeof(float)); + ggml_cann_pool_alloc cos_tensor_allocator(ctx.pool(), repeat_theta_length * sizeof(float)); + void *sin_tensor_buffer = sin_tensor_allocator.get(); + void *cos_tensor_buffer = cos_tensor_allocator.get(); + // init ctx.rope_cos/rope_sin cache - aclnn_cache_init(ctx, dst, theta_scale, freq_scale, attn_factor, is_neox); + aclnn_cache_init(ctx, dst, sin_tensor_buffer, cos_tensor_buffer, + theta_scale, freq_scale, attn_factor, is_neox); int64_t sin_reshape_ne[4] = {ne00, 1, ne02, 1}; size_t sin_reshape_nb[GGML_MAX_DIMS]; @@ -2491,10 +2494,10 @@ void ggml_cann_rope(ggml_backend_cann_context& ctx, ggml_tensor* dst) { sin_reshape_nb[i] = sin_reshape_nb[i - 1] * sin_reshape_ne[i - 1]; } aclTensor* acl_sin_reshape_tensor = - ggml_cann_create_tensor(ctx.rope_sin_ptr, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(sin_tensor_buffer, ACL_FLOAT, sizeof(float_t), sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); aclTensor* acl_cos_reshape_tensor = - ggml_cann_create_tensor(ctx.rope_cos_ptr, ACL_FLOAT, sizeof(float_t), + ggml_cann_create_tensor(cos_tensor_buffer, ACL_FLOAT, sizeof(float_t), sin_reshape_ne, sin_reshape_nb, GGML_MAX_DIMS); aclTensor* acl_src = ggml_cann_create_tensor(src0); diff --git a/ggml/src/ggml-cann/common.h b/ggml/src/ggml-cann/common.h index 88cc3f481e..f71aa9d1de 100755 --- a/ggml/src/ggml-cann/common.h +++ b/ggml/src/ggml-cann/common.h @@ -360,6 +360,30 @@ struct ggml_cann_graph { }; #endif // USE_ACL_GRAPH +struct ggml_cann_rope_cache { + ~ggml_cann_rope_cache() { + if(theta_scale_cache != nullptr) { + ACL_CHECK(aclrtFree(theta_scale_cache)); + } + } + + void* theta_scale_cache = nullptr; + int64_t theta_scale_length = 0; + float theta_scale = 0.0f; + float freq_scale = 0.0f; +}; + +struct ggml_cann_tensor_cache { + ~ggml_cann_tensor_cache() { + if(cache != nullptr) { + ACL_CHECK(aclrtFree(cache)); + } + } + + void* cache = nullptr; + int64_t size = 0; +}; + /** * @brief Context for managing CANN backend operations. */ @@ -375,15 +399,11 @@ struct ggml_backend_cann_context { cann_task_queue task_queue; bool async_mode; // Rope Cache - void* rope_init_ptr = nullptr; - void* rope_sin_ptr = nullptr; - void* rope_cos_ptr = nullptr; - int64_t max_prompt_length = 0; + ggml_cann_rope_cache rope_cache; // Constant Pool - void* f32_zero_cache = nullptr; - void* f32_one_cache = nullptr; - int64_t f32_zero_cache_element = 0; - int64_t f32_one_cache_element = 0; + ggml_cann_tensor_cache rms_norm_one_tensor_cache; + ggml_cann_tensor_cache rms_norm_zero_tensor_cache; + aclrtStream streams[GGML_CANN_MAX_STREAMS] = {nullptr}; /**< Array of streams for the device. */ @@ -415,21 +435,6 @@ struct ggml_backend_cann_context { ACL_CHECK(aclrtDestroyStream(streams[i])); } } - if(rope_init_ptr != nullptr) { - ACL_CHECK(aclrtFree(rope_init_ptr)); - } - if(rope_sin_ptr != nullptr) { - ACL_CHECK(aclrtFree(rope_sin_ptr)); - } - if(rope_cos_ptr != nullptr) { - ACL_CHECK(aclrtFree(rope_cos_ptr)); - } - if(f32_zero_cache != nullptr) { - ACL_CHECK(aclrtFree(f32_zero_cache)); - } - if(f32_one_cache != nullptr) { - ACL_CHECK(aclrtFree(f32_one_cache)); - } } /** diff --git a/ggml/src/ggml-cann/ggml-cann.cpp b/ggml/src/ggml-cann/ggml-cann.cpp index 7b3aca9db9..15ea85e273 100755 --- a/ggml/src/ggml-cann/ggml-cann.cpp +++ b/ggml/src/ggml-cann/ggml-cann.cpp @@ -2247,6 +2247,7 @@ static enum ggml_status ggml_backend_cann_graph_compute( (ggml_backend_cann_context*)backend->context; ggml_cann_set_device(cann_ctx->device); release_nz_workspace(); + #ifdef USE_ACL_GRAPH bool use_cann_graph = true; bool cann_graph_update_required = false; From b9382c3877c6067feccf182efe9449a2d1cb24c7 Mon Sep 17 00:00:00 2001 From: hipudding Date: Mon, 1 Sep 2025 08:57:23 +0800 Subject: [PATCH 171/174] CANN: Optimize MUL_MAT_ID (#15658) --- ggml/src/ggml-cann/aclnn_ops.cpp | 193 ++++++------------------------- 1 file changed, 34 insertions(+), 159 deletions(-) diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index 1f1d489ffa..84e705af9a 100755 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -2867,174 +2867,49 @@ void ggml_cann_step(ggml_backend_cann_context& ctx, ggml_tensor* dst){ */ static void ggml_cann_mul_mat_id_fp(ggml_backend_cann_context& ctx, ggml_tensor* dst) { //dst [M, K, N, 1] - ggml_tensor * src0 = dst->src[0]; //src0 [D, M, A, 1] - ggml_tensor * src1 = dst->src[1]; //src1 [D, B, N, 1], B = K or B = 1 + ggml_tensor * src0 = dst->src[0]; //src0 [D, M, A, 1] -> [D, M, K, 1] + ggml_tensor * src1 = dst->src[1]; //src1 [D, B, N, 1], B = K or B = 1 -> [D, 1, K, 1] ggml_tensor * ids = dst->src[2]; //ids [K, N] - GGML_TENSOR_BINARY_OP_LOCALS + GGML_ASSERT(src0->ne[3] == 1); + GGML_ASSERT(src1->ne[3] == 1); + GGML_ASSERT(dst->ne[3] == 1); - // copy index from npu to cpu - int64_t n_as = ne02; // A - int64_t n_ids = ids->ne[0]; // K + int64_t batch = src1->ne[2]; + GGML_ASSERT(batch == ids->ne[1]); - std::vector ids_host(ggml_nbytes(ids)); - ggml_cann_async_memcpy(ctx, ids_host.data(), ids->data, ggml_nbytes(ids), - ACL_MEMCPY_DEVICE_TO_HOST); - ACL_CHECK(aclrtSynchronizeStream(ctx.stream())); + ggml_cann_pool_alloc export_allocator(ctx.pool(), src0->ne[0] * src0->ne[1] * ids->ne[0] * ggml_element_size(src0)); + void* export_ptr = export_allocator.get(); + for (int64_t i = 0; i < batch; i++) { + aclTensor *select_index = ggml_cann_create_tensor(ids, ids->ne, ids->nb, 1, ACL_FORMAT_ND, i * ids->nb[1]); + aclTensor *export_weight = ggml_cann_create_tensor(src0, src0->ne, src0->nb, 3); - char * src0_original = (char *) src0->data; - char * src1_original = (char *) src1->data; - char * dst_original = (char *) dst->data; - size_t ori_src0_nb[4] = {nb00, nb01, nb02, nb03}; - - // src0 is F16, src1 is F32, dst is F32 - ggml_cann_pool_alloc src0_cast_allocator; - if (src0->type == GGML_TYPE_F16) { - src0_cast_allocator.alloc(ctx.pool(), sizeof(float) * ggml_nelements(src0)); - void* src0_cast_buf = src0_cast_allocator.get(); - - size_t cast_nb[GGML_MAX_DIMS]; - cast_nb[0] = sizeof(float_t); - for (int i = 1; i < GGML_MAX_DIMS; i++) { - cast_nb[i] = cast_nb[i - 1] * src0->ne[i - 1]; + int64_t select_export_ne[] = {src0->ne[0], src0->ne[1], ids->ne[0]}; + size_t select_export_nb[3]; + select_export_nb[0] = src0->nb[0]; + for (int k = 1;k < 3; k++) { + select_export_nb[k] = select_export_nb[k-1] * select_export_ne[k-1]; } - aclTensor* acl_src0_f16 = ggml_cann_create_tensor(src0); - aclTensor* acl_cast = ggml_cann_create_tensor(src0_cast_buf, - ACL_FLOAT, sizeof(float), src0->ne, cast_nb, 4); - GGML_CANN_CALL_ACLNN_OP(ctx, Cast, acl_src0_f16, ACL_FLOAT, acl_cast); - ggml_cann_release_resources(ctx, acl_cast, acl_src0_f16); + aclTensor *select_export = ggml_cann_create_tensor(export_ptr, ggml_cann_type_mapping(src0->type), ggml_element_size(src0), select_export_ne, select_export_nb, 3); + GGML_CANN_CALL_ACLNN_OP(ctx, IndexSelect, export_weight, 0, select_index, select_export); - src0_original = (char *) src0_cast_buf; - memcpy(ori_src0_nb, cast_nb, sizeof(ori_src0_nb)); + int64_t select_transpose_ne[] = {select_export_ne[1], select_export_ne[0], select_export_ne[2]}; + size_t select_transpose_nb[] = {select_export_nb[1], select_export_nb[0], select_export_nb[2]}; + aclTensor *select_export_transpose = ggml_cann_create_tensor(export_ptr, ggml_cann_type_mapping(src0->type), ggml_element_size(src0), select_transpose_ne, select_transpose_nb, 3); + + int64_t active_tensor_ne[] = {src1->ne[0], 1, src1->ne[1]}; + size_t active_tensor_nb[] = {src1->nb[0], src1->nb[1], src1->nb[1]}; + aclTensor *active_tensor = ggml_cann_create_tensor(src1, active_tensor_ne, active_tensor_nb, 3, ACL_FORMAT_ND, i * src1->nb[2]); + + int64_t dst_ne[] = {dst->ne[0], 1, dst->ne[1]}; + size_t dst_nb[] = {dst->nb[0], dst->nb[1], dst->nb[1]}; + aclTensor *acl_dst = ggml_cann_create_tensor(dst, dst_ne,dst_nb, 3, ACL_FORMAT_ND, i * dst->nb[2]); + + GGML_CANN_CALL_ACLNN_OP(ctx, BatchMatMul, active_tensor, select_export_transpose, acl_dst, 2); + + ggml_cann_release_resources(ctx, select_index, export_weight, select_export, active_tensor, acl_dst, select_export_transpose); } - -#ifdef ASCEND_310P - ggml_tensor src0_row = *src0; - ggml_tensor src1_row = *src1; - ggml_tensor dst_row = *dst; - - if (src0->type == GGML_TYPE_F16) { - src0_row.type = GGML_TYPE_F32; - } - - // src0_row [D, M, 1, 1] weight without permute - src0_row.ne[2] = 1; - src0_row.ne[3] = 1; - src0_row.nb[0] = ori_src0_nb[0]; - src0_row.nb[1] = ori_src0_nb[1]; - src0_row.nb[2] = ori_src0_nb[1]; - src0_row.nb[3] = ori_src0_nb[1]; - - // src1_row [D, 1, 1, 1] -> input - src1_row.ne[1] = 1; - src1_row.ne[2] = 1; - src1_row.ne[3] = 1; - src1_row.nb[2] = nb11; - src1_row.nb[3] = nb11; - - // dst_row [M, 1, 1, 1] -> out - dst_row.ne[1] = 1; - dst_row.ne[2] = 1; - dst_row.ne[3] = 1; - dst_row.nb[2] = nb1; - dst_row.nb[3] = nb1; - - //create weight for one row - for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) { - for (int64_t id = 0; id < n_ids; id++) { - // expert index - int32_t i02 = *(int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]); - GGML_ASSERT(i02 >= 0 && i02 < n_as); - - // If B = 1 (broadcast), always use 0; otherwise, use id. - int64_t i11 = (ne11 == 1 ? 0 : id); - int64_t i12 = iid1; - - int64_t i1 = id; - int64_t i2 = i12; - - void* src0_tmp_ptr = src0_original + i02*ori_src0_nb[2]; - void* src1_tmp_ptr = src1_original + i11*nb11 + i12*nb12; - void* dst_tmp_ptr = dst_original + i1*nb1 + i2*nb2; - - src0_row.data = src0_tmp_ptr; - src1_row.data = src1_tmp_ptr; - dst_row.data = dst_tmp_ptr; - dst_row.src[0] = &src0_row; - dst_row.src[1] = &src1_row; - - ggml_cann_mul_mat(ctx, &dst_row); - } - } - return; -#endif - - std::vector src0_tensor_vec; - std::vector src1_tensor_vec; - std::vector dst_tensor_vec; - for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) { - for (int64_t id = 0; id < n_ids; id++) { - // src0_row [M, D] -> weight && permute - int64_t src0_ne[2] = {ne01, ne00}; - size_t src0_nb[2] = {ori_src0_nb[1], ori_src0_nb[0]}; - // src1_row [D, 1] -> input - int64_t src1_ne[2] = {ne10, 1}; - size_t src1_nb[2] = {nb10, nb11}; - // dst_row [M, 1] -> out - int64_t dst_ne[2] = {ne0, 1}; - size_t dst_nb[2] = {nb0, nb1}; - - // expert index - int32_t i02 = *(int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]); - GGML_ASSERT(i02 >= 0 && i02 < n_as); - - // If B = 1 (broadcast), always use 0; otherwise, use id. - int64_t i11 = (ne11 == 1 ? 0 : id); - int64_t i12 = iid1; - - int64_t i1 = id; - int64_t i2 = i12; - - void* src0_tmp_ptr = src0_original + i02*ori_src0_nb[2]; - void* src1_tmp_ptr = src1_original + i11*nb11 + i12*nb12; - void* dst_tmp_ptr = dst_original + i1*nb1 + i2*nb2; - - aclTensor* acl_src0 = ggml_cann_create_tensor(src0_tmp_ptr, - ACL_FLOAT, sizeof(float), - src0_ne, src0_nb, 2); - aclTensor* acl_src1 = ggml_cann_create_tensor(src1_tmp_ptr, - ACL_FLOAT, sizeof(float), - src1_ne, src1_nb, 2); - aclTensor* acl_dst = ggml_cann_create_tensor(dst_tmp_ptr, - ACL_FLOAT, sizeof(float), - dst_ne, dst_nb, 2); - - src0_tensor_vec.push_back(acl_src0); - src1_tensor_vec.push_back(acl_src1); - dst_tensor_vec.push_back(acl_dst); - } - } - - size_t GROUP_SIZE = 128; - // GroupedMatmulV3 required tensor_list.size < 128 - for (size_t i = 0; i < src0_tensor_vec.size(); i += GROUP_SIZE) { - // split and call GroupedMatmulV3 - size_t end = std::min(i + GROUP_SIZE, src0_tensor_vec.size()); - std::vector src0_tensor_vec_split(src0_tensor_vec.begin() + i, src0_tensor_vec.begin() + end); - std::vector src1_tensor_vec_split(src1_tensor_vec.begin() + i, src1_tensor_vec.begin() + end); - std::vector dst_tensor_vec_split(dst_tensor_vec.begin() + i, dst_tensor_vec.begin() + end); - - aclTensorList* src0_tensor_list = aclCreateTensorList(src0_tensor_vec_split.data(), src0_tensor_vec_split.size()); - aclTensorList* src1_tensor_list = aclCreateTensorList(src1_tensor_vec_split.data(), src1_tensor_vec_split.size()); - aclTensorList* dst_tensor_list = aclCreateTensorList(dst_tensor_vec_split.data(), dst_tensor_vec_split.size()); - - GGML_CANN_CALL_ACLNN_OP(ctx, GroupedMatmulV3, src1_tensor_list, src0_tensor_list, - nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0, -1, dst_tensor_list); - - ggml_cann_release_resources(ctx, src0_tensor_list, src1_tensor_list, dst_tensor_list); - } - return; } /** From b66df9d9c942254d03209186ef24ed7c994a576e Mon Sep 17 00:00:00 2001 From: Akarshan Biswas Date: Mon, 1 Sep 2025 06:55:06 +0530 Subject: [PATCH 172/174] CUDA: fix build error from ambiguous __half conversions in conv2d (#15690) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CUDA: fix build error from ambiguous __half conversions in conv2d Building conv2d with half precision failed because `__half` defines multiple implicit conversion operators (to float, int, short, etc.), causing ambiguous overload resolution when multiplying with float. Introduce a templated `to_float` helper that explicitly converts `__half` via `__half2float`, while passing through float unchanged. Use this helper in conv2d accumulation to ensure unambiguous and correct promotion to float. Fixes some build errors with half-precision kernels on CUDA. ggml-ci * CUDA: Replace custom to_float helper with unified ggml_cuda_cast and add half‑>float conversion * CUDA: Add missing convert.cuh header * CUDA: remove unnecessary extension in ggml_cuda_cast * CUDA: Address review comment, remove second type template argument --- ggml/src/ggml-cuda/conv2d.cu | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-cuda/conv2d.cu b/ggml/src/ggml-cuda/conv2d.cu index bcb70762ee..142dd66903 100644 --- a/ggml/src/ggml-cuda/conv2d.cu +++ b/ggml/src/ggml-cuda/conv2d.cu @@ -1,4 +1,5 @@ #include "conv2d.cuh" +#include "convert.cuh" struct conv_params { const int64_t IW, IH; @@ -94,8 +95,8 @@ static __global__ void conv2d_kernel(const float * __restrict__ input, const int64_t in_x = calculate_input_coord(out_x, kx, P.ST_X, P.DL_X, P.PD_X); const float input_val = input[Layout::input_index(n, c_in, in_y, in_x, P)]; - const float kernel_val = kernel[Layout::kernel_index(c_out, c_in, ky, kx, P)]; - acc += (input_val * kernel_val); + const T kernel_val = kernel[Layout::kernel_index(c_out, c_in, ky, kx, P)]; + acc += (input_val * ggml_cuda_cast(kernel_val)); } } } From 4795c91c32fec7165a1364763d4d4f0c93abf933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jie=20Fu=20=28=E5=82=85=E6=9D=B0=29?= Date: Mon, 1 Sep 2025 15:34:59 +0800 Subject: [PATCH 173/174] docs : add Hunyuan to models section (#15707) Signed-off-by: Jie Fu --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a01ef6d503..17f59e988e 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,7 @@ Instructions for adding support for new models: [HOWTO-add-model.md](docs/develo - [X] [Trillion-7B-preview](https://huggingface.co/trillionlabs/Trillion-7B-preview) - [x] [Ling models](https://huggingface.co/collections/inclusionAI/ling-67c51c85b34a7ea0aba94c32) - [x] [LFM2 models](https://huggingface.co/collections/LiquidAI/lfm2-686d721927015b2ad73eaa38) +- [x] [Hunyuan models](https://huggingface.co/collections/tencent/hunyuan-dense-model-6890632cda26b19119c9c5e7) #### Multimodal From 77dee9de97be75b7143a213bc48893e0c0b29af7 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Mon, 1 Sep 2025 14:28:49 +0200 Subject: [PATCH 174/174] ggml : WebGPU add TRANSPOSE and RESHAPE to supported ops (#15695) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ggml : WebGPU add TRANSPOSE and RESHAPE to supported ops This commit adds support for the TRANSPOSE and RESHAPE operations in the ggml webgpu backend. Co-authored-by: Diego Devesa Co-authored-by: Sigbjørn Skjæret --- ggml/src/ggml-webgpu/ggml-webgpu.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index 32f1e304e1..e5df883c13 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -611,6 +611,8 @@ static bool ggml_webgpu_encode_node(webgpu_context ctx, ggml_tensor * node) { case GGML_OP_NONE: case GGML_OP_VIEW: case GGML_OP_PERMUTE: + case GGML_OP_TRANSPOSE: + case GGML_OP_RESHAPE: return false; case GGML_OP_CPY: { @@ -1062,6 +1064,8 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const case GGML_OP_NONE: case GGML_OP_VIEW: case GGML_OP_PERMUTE: + case GGML_OP_TRANSPOSE: + case GGML_OP_RESHAPE: return true; case GGML_OP_CPY: case GGML_OP_SET_ROWS:

    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±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