From 97340b4c9924be86704dbf155e97c8319849ee19 Mon Sep 17 00:00:00 2001 From: 0cc4m Date: Tue, 10 Jun 2025 14:01:33 +0200 Subject: [PATCH 01/95] Vulkan: Don't default to CPU device (like llvmpipe), even if no other device is available, to allow fallback to CPU backend (#14099) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 3e43b03bc446a..8ccc73e7422fe 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -3595,11 +3595,11 @@ static void ggml_vk_instance_init() { vk_perf_logger_enabled = getenv("GGML_VK_PERF_LOGGER") != nullptr; - size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size(); - // Emulate behavior of CUDA_VISIBLE_DEVICES for Vulkan char * devices_env = getenv("GGML_VK_VISIBLE_DEVICES"); if (devices_env != nullptr) { + size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size(); + std::string devices(devices_env); std::replace(devices.begin(), devices.end(), ',', ' '); @@ -3615,9 +3615,9 @@ static void ggml_vk_instance_init() { } else { std::vector devices = vk_instance.instance.enumeratePhysicalDevices(); - // Make sure at least one device exists + // If no vulkan devices are found, return early if (devices.empty()) { - std::cerr << "ggml_vulkan: Error: No devices found." << std::endl; + GGML_LOG_INFO("ggml_vulkan: No devices found.\n"); return; } @@ -3700,9 +3700,20 @@ static void ggml_vk_instance_init() { } } - // If no dedicated GPUs found, fall back to GPU 0 + // If no dedicated GPUs found, fall back to the first non-CPU device. + // If only CPU devices are available, return without devices. + if (vk_instance.device_indices.empty()) { + for (size_t i = 0; i < devices.size(); i++) { + if (devices[i].getProperties().deviceType != vk::PhysicalDeviceType::eCpu) { + vk_instance.device_indices.push_back(i); + break; + } + } + } + if (vk_instance.device_indices.empty()) { - vk_instance.device_indices.push_back(0); + GGML_LOG_INFO("ggml_vulkan: No devices found.\n"); + return; } } GGML_LOG_DEBUG("ggml_vulkan: Found %zu Vulkan devices:\n", vk_instance.device_indices.size()); From b7ce1ad1e332da5909772d173a7e6748fbd1887a Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 10 Jun 2025 11:34:10 +0300 Subject: [PATCH 02/95] ggml : fix weak alias win32 (whisper/0) ggml-ci --- ggml/src/ggml-cpu/ggml-cpu-impl.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index 337d8094e8092..69415daa82025 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -518,11 +518,14 @@ void ggml_barrier(struct ggml_threadpool * tp); #elif defined(__GNUC__) // GCC/Clang on *nix # define GGML_WEAK_ALIAS(name, alias) GGML_DO_PRAGMA(weak name = alias) // NOLINT -#elif defined(_MSC_VER) && defined (_WIN64) +#elif defined(_MSC_VER) && defined(_WIN64) // MSVC // Note: C name mangling varies across different calling conventions // see https://learn.microsoft.com/en-us/cpp/build/reference/decorated-names?view=msvc-170 # define GGML_WEAK_ALIAS(name, alias) GGML_DO_PRAGMA(comment(linker, "/alternatename:" #name "=" #alias)) +#elif defined(_MSC_VER) && defined(WIN32) +// ref: https://github.com/ggml-org/whisper.cpp/pull/3239#issuecomment-2958224591 +# define GGML_WEAK_ALIAS(name, alias) GGML_DO_PRAGMA(comment(linker, "/alternatename:_" #name "=_" #alias)) #else # error "Unsupported compiler for GGML_WEAK_ALIAS" #endif From ae92c1855b1a5b604fa1bfcced19a556ab3e78c5 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 10 Jun 2025 17:37:45 +0300 Subject: [PATCH 03/95] sync : ggml ggml-ci --- 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 490115500d224..914fe47ff6a34 100644 --- a/scripts/sync-ggml.last +++ b/scripts/sync-ggml.last @@ -1 +1 @@ -a1761cd64ce4a75a9770a954a013422c7910db8b +6a7d170c04789f6ebcf320ed03c1b16973f93bd7 From 3a12db23b6918682ccb70ab15d897f11fe5fc320 Mon Sep 17 00:00:00 2001 From: Juk Armstrong <69222624+jukofyork@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:48:07 +0100 Subject: [PATCH 04/95] Fixed spec timings to: accepted/tested instead of accepted/drafted (#14104) --- tools/server/server.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 77dcbc11bf1f0..3b5e03528e2d7 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -3556,9 +3556,6 @@ struct server_context { const llama_tokens & cached_text_tokens = slot.cache_tokens.get_text_tokens(); llama_tokens draft = common_speculative_gen_draft(slot.spec, params_spec, cached_text_tokens, id); - // keep track of total number of tokens generated in the draft - slot.n_draft_total += draft.size(); - // ignore small drafts if (slot.params.speculative.n_min > (int) draft.size()) { SLT_DBG(slot, "ignoring small draft: %d < %d\n", (int) draft.size(), slot.params.speculative.n_min); @@ -3566,6 +3563,9 @@ struct server_context { continue; } + // keep track of total number of drafted tokens tested + slot.n_draft_total += draft.size(); + // construct the speculation batch common_batch_clear(slot.batch_spec); common_batch_add (slot.batch_spec, id, slot.n_past, { slot.id }, true); @@ -3584,7 +3584,7 @@ struct server_context { slot.n_past += ids.size(); slot.n_decoded += ids.size(); - // update how many tokens out of draft was accepted + // update how many tokens out of those tested were accepted slot.n_draft_accepted += ids.size() - 1; slot.cache_tokens.push_back(id); From 652b70e6678d503626f3c9d33831ba604b473401 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Tue, 10 Jun 2025 10:53:47 -0500 Subject: [PATCH 05/95] vulkan: force device 0 in CI (#14106) --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3c9804d437cdc..5422dd81723f9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -306,6 +306,7 @@ jobs: id: cmake_test run: | cd build + export GGML_VK_VISIBLE_DEVICES=0 # This is using llvmpipe and runs slower than other backends ctest -L main --verbose --timeout 3600 From 3678b838bb71eaccbaeb479ff38c2e12bfd2f960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 10 Jun 2025 18:02:08 +0200 Subject: [PATCH 06/95] llama : support GEGLU for jina-bert-v2 (#14090) --- convert_hf_to_gguf.py | 27 --------------------------- gguf-py/gguf/tensor_mapping.py | 6 ++++-- src/llama-graph.cpp | 3 ++- src/llama-model.cpp | 6 +++--- 4 files changed, 9 insertions(+), 33 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 7b9893c8a3e10..a208c42ba9a8b 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -4798,25 +4798,6 @@ def prepare_tensors(self): class JinaBertV2Model(BertModel): model_arch = gguf.MODEL_ARCH.JINA_BERT_V2 - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.intermediate_size = self.hparams["intermediate_size"] - - def get_tensors(self): - for name, data in super().get_tensors(): - if 'gated_layer' in name: - d1 = data[:self.intermediate_size, :] - name1 = name.replace('gated_layers', 'gated_layers_w') - name1 = name1.replace('up_gated_layer', 'gated_layers_v') - d2 = data[self.intermediate_size:, :] - name2 = name.replace('gated_layers', 'gated_layers_v') - name2 = name2.replace('up_gated_layer', 'gated_layers_w') - yield name1, d1 - yield name2, d2 - continue - - yield name, data - def set_vocab(self): tokenizer_class = 'BertTokenizer' with open(self.dir_model / "tokenizer_config.json", "r", encoding="utf-8") as f: @@ -4832,14 +4813,6 @@ def set_vocab(self): self.gguf_writer.add_add_bos_token(True) self.gguf_writer.add_add_eos_token(True) - def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: - # if name starts with "bert.", remove the prefix - # e.g. https://huggingface.co/jinaai/jina-reranker-v1-tiny-en - if name.startswith("bert."): - name = name[5:] - - return super().modify_tensors(data_torch, name, bid) - @ModelBase.register("OpenELMForCausalLM") class OpenELMModel(TextModel): diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 93dd1d8028f3d..439fc1afeeb0c 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -333,7 +333,9 @@ class TensorNameMap: "encoder.layers.{bid}.mlp.fc11", # nomic-bert "encoder.layers.{bid}.mlp.fc1", # nomic-bert-moe "model.layers.{bid}.mlp.c_fc", # starcoder2 - "encoder.layer.{bid}.mlp.gated_layers_v", # jina-bert-v2 + "encoder.layer.{bid}.mlp.gated_layers_v", # jina-bert-v2 (split up/gate, no longer used) + "encoder.layer.{bid}.mlp.gated_layers", # jina-bert-v2 (GEGLU) + "encoder.layer.{bid}.mlp.up_gated_layer", # jina-v2-code (GEGLU) "model.layers.{bid}.residual_mlp.w3", # arctic "encoder.layers.{bid}.mlp.dense_h_to_4h", # chatglm "transformer.h.{bid}.mlp.c_fc_1", # exaone @@ -370,7 +372,7 @@ class TensorNameMap: "model.layers.layers.{bid}.mlp.gate_proj", # plamo "model.layers.{bid}.feed_forward.w1", # internlm2 "encoder.layers.{bid}.mlp.fc12", # nomic-bert - "encoder.layer.{bid}.mlp.gated_layers_w", # jina-bert-v2 + "encoder.layer.{bid}.mlp.gated_layers_w", # jina-bert-v2 (split up/gate, no longer used) "transformer.h.{bid}.mlp.linear_1", # refact "model.layers.{bid}.residual_mlp.w1", # arctic "transformer.h.{bid}.mlp.c_fc_0", # exaone diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 27c9ab74be112..56082279119d8 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -650,6 +650,7 @@ ggml_tensor * llm_graph_context::build_ffn( { // Project to 4h. If using swiglu double the output width, see https://arxiv.org/pdf/2002.05202.pdf int64_t split_point = cur->ne[0] / 2; + // TODO: these conts should not be needed, see https://github.com/ggml-org/llama.cpp/pull/14090#discussion_r2137437217 ggml_tensor * x0 = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, split_point, cur->ne[1], cur->nb[1], 0)); ggml_tensor * x1 = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, split_point, cur->ne[1], cur->nb[1], split_point * ggml_element_size(cur))); @@ -663,7 +664,7 @@ ggml_tensor * llm_graph_context::build_ffn( { // Split into two equal parts int64_t split_point = cur->ne[0] / 2; - // TODO: these conts should not be needed + // TODO: these conts should not be needed, see https://github.com/ggml-org/llama.cpp/pull/14090#discussion_r2137437217 ggml_tensor * x0 = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, split_point, cur->ne[1], cur->nb[1], 0)); ggml_tensor * x1 = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, split_point, cur->ne[1], cur->nb[1], split_point * ggml_element_size(cur))); diff --git a/src/llama-model.cpp b/src/llama-model.cpp index c41ee24507fca..f4a66390c7981 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -2224,8 +2224,8 @@ bool llama_model::load_tensors(llama_model_loader & ml) { layer.attn_norm_2 = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "weight", i), {n_embd}, TENSOR_NOT_REQUIRED); layer.attn_norm_2_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED); - layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, 0); - layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, 0); + layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, TENSOR_NOT_REQUIRED); + layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, layer.ffn_gate ? n_ff : n_ff * 2}, 0); 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}, 0); @@ -6043,7 +6043,7 @@ struct llm_build_bert : public llm_graph_context { model.layers[il].ffn_gate, NULL, NULL, model.layers[il].ffn_down, model.layers[il].ffn_down_b, NULL, NULL, - LLM_FFN_GELU, LLM_FFN_PAR, il); + model.layers[il].ffn_gate ? LLM_FFN_GELU : LLM_FFN_GEGLU, LLM_FFN_PAR, il); cb(cur, "ffn_out", il); } else { cur = build_ffn(cur, From 55f6b9fa6563f6ae49113f9abdc980c12348cc1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 10 Jun 2025 23:29:52 +0200 Subject: [PATCH 07/95] convert : fix duplicate key DeepSeek-R1 conversion error (#14103) --- convert_hf_to_gguf.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index a208c42ba9a8b..173a103badc60 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -556,8 +556,11 @@ def set_gguf_parameters(self): logger.info(f"gguf: experts used count = {n_experts_used}") if (head_dim := self.hparams.get("head_dim")) is not None: - self.gguf_writer.add_key_length(head_dim) - self.gguf_writer.add_value_length(head_dim) + # Workaround for incorrect AutoConfig value for DeepSeekV3 (is set correctly in DeepSeekV2Model class) + # https://github.com/huggingface/transformers/blob/19224c3642705c5b6988c9f5f4251f83323d05ae/src/transformers/models/deepseek_v3/configuration_deepseek_v3.py#L210 + if self.hparams.get("model_type") != "deepseek_v3": + self.gguf_writer.add_key_length(head_dim) + self.gguf_writer.add_value_length(head_dim) self.gguf_writer.add_file_type(self.ftype) logger.info(f"gguf: file type = {self.ftype}") From dad5c44398b78467943ed0a603ea427fe9f6fc62 Mon Sep 17 00:00:00 2001 From: compilade Date: Tue, 10 Jun 2025 18:20:14 -0400 Subject: [PATCH 08/95] kv-cache : avoid modifying recurrent cells when setting inputs (#13834) * kv-cache : avoid modifying recurrent cells when setting inputs * kv-cache : remove inp_s_mask It was replaced with equivalent and simpler functionality with rs_z (the first zeroed state) and the already-existing inp_s_copy. * kv-cache : fix non-consecutive token pos warning for recurrent models The problem was apparently caused by how the tail cells were swapped. * graph : simplify logic for recurrent state copies * kv-cache : use cell without src refs for rs_z in recurrent cache * llama-graph : fix recurrent state copy The `state_copy` shuffle assumes everything is moved at once, which is not true when `states_extra` is copied back to the cache before copying the range of states between `head` and `head + n_seqs`. This is only a problem if any of the cells in [`head`, `head + n_seqs`) have an `src` in [`head + n_seqs`, `head + n_kv`), which does happen when `n_ubatch > 1` in the `llama-parallel` example. Changing the order of the operations avoids the potential overwrite before use, although when copies are avoided (like with Mamba2), this will require further changes. * llama-graph : rename n_state to state_size in build_recurrent_state This naming should reduce confusion between the state size and the number of states. --- src/llama-graph.cpp | 83 +++++++------------ src/llama-graph.h | 22 +---- src/llama-kv-cache-recurrent.cpp | 135 ++++++++++++++----------------- src/llama-kv-cache-recurrent.h | 12 +-- src/llama-kv-cache-unified.cpp | 2 - src/llama-model.cpp | 43 ++++------ 6 files changed, 117 insertions(+), 180 deletions(-) diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 56082279119d8..e74c9ff53b05a 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -250,22 +250,6 @@ void llm_graph_input_s_copy::set_input(const llama_ubatch * ubatch) { } } -void llm_graph_input_s_mask::set_input(const llama_ubatch * ubatch) { - GGML_UNUSED(ubatch); - - const int64_t n_kv = kv_state->get_n_kv(); - - if (s_mask) { - GGML_ASSERT(ggml_backend_buffer_is_host(s_mask->buffer)); - float * data = (float *) s_mask->data; - - // clear unused states - for (int i = 0; i < n_kv; ++i) { - data[i] = kv_state->s_mask(i); - } - } -} - void llm_graph_input_cross_embd::set_input(const llama_ubatch * ubatch) { GGML_UNUSED(ubatch); @@ -987,23 +971,6 @@ ggml_tensor * llm_graph_context::build_inp_s_copy() const { return cur; } -ggml_tensor * llm_graph_context::build_inp_s_mask() const { - const auto * kv_state = static_cast(mstate); - - auto inp = std::make_unique(kv_state); - - const auto n_kv = kv_state->get_n_kv(); - - auto & cur = inp->s_mask; - - cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, 1, n_kv); - ggml_set_input(cur); - - res->add_input(std::move(inp)); - - return cur; -} - ggml_tensor * llm_graph_context::build_inp_cross_embd() const { auto inp = std::make_unique(cross); @@ -1456,43 +1423,53 @@ ggml_tensor * llm_graph_context::build_attn( return cur; } -ggml_tensor * llm_graph_context::build_copy_mask_state( +ggml_tensor * llm_graph_context::build_recurrent_state( ggml_cgraph * gf, ggml_tensor * s, ggml_tensor * state_copy, - ggml_tensor * state_mask, - int32_t n_state, - int32_t n_seqs) const { + int32_t state_size, + int32_t n_seqs, + bool avoid_copies) const { const auto * kv_state = static_cast(mstate); const auto n_kv = kv_state->get_n_kv(); const auto kv_head = kv_state->get_head(); + const auto rs_zero = kv_state->get_rs_z(); - ggml_tensor * states = ggml_reshape_2d(ctx0, s, n_state, kv_state->get_size()); + ggml_tensor * states = ggml_reshape_2d(ctx0, s, state_size, kv_state->get_size()); - // copy states - // NOTE: assuming the copy destinations are ALL contained between kv_head and kv_head + n_kv - // this shrinks the tensors's ne[1] to n_kv - states = ggml_get_rows(ctx0, states, state_copy); + // Clear a single state which will then be copied to the other cleared states. + // Note that this is a no-op when the view is zero-sized. + ggml_tensor * state_zero = ggml_view_1d(ctx0, states, state_size*(rs_zero >= 0), rs_zero*states->nb[1]*(rs_zero >= 0)); + ggml_build_forward_expand(gf, ggml_scale_inplace(ctx0, state_zero, 0)); - // clear states of sequences which are starting at the beginning of this batch - // FIXME: zero-out NANs? - states = ggml_mul(ctx0, states, state_mask); + ggml_tensor * output_states; + + if (!avoid_copies) { + // copy states + // NOTE: assuming the copy destinations are ALL contained between kv_head and kv_head + n_kv + // {state_size, kv_size} -> {state_size, n_seqs} + output_states = ggml_get_rows(ctx0, states, ggml_view_1d(ctx0, state_copy, n_seqs, 0)); + ggml_build_forward_expand(gf, output_states); + } else { + // FIXME: make the gathering operation happen before the copy below + // (maybe with an optional lambda function passed as a parameter instead of `avoid_copies`?) + output_states = states; + } - // copy states which won't be changed further (between n_seqs and n_kv) + // copy extra states which won't be changed further (between n_seqs and n_kv) + ggml_tensor * states_extra = ggml_get_rows(ctx0, states, ggml_view_1d(ctx0, state_copy, n_kv - n_seqs, n_seqs*state_copy->nb[0])); ggml_build_forward_expand(gf, ggml_cpy(ctx0, - ggml_view_1d(ctx0, states, n_state*(n_kv - n_seqs), (n_seqs )*n_state*ggml_element_size(states)), - ggml_view_1d(ctx0, s, n_state*(n_kv - n_seqs), (kv_head + n_seqs)*n_state*ggml_element_size(s)))); + states_extra, + ggml_view_1d(ctx0, s, state_size*(n_kv - n_seqs), (kv_head + n_seqs)*state_size*ggml_element_size(s)))); - // the part of the states that will be used and modified - return ggml_view_2d(ctx0, states, n_state, n_seqs, states->nb[1], 0); + return output_states; } ggml_tensor * llm_graph_context::build_rwkv_token_shift_load( ggml_cgraph * gf, ggml_tensor * state_copy, - ggml_tensor * state_mask, const llama_ubatch & ubatch, int il) const { const auto * kv_state = static_cast(mstate); @@ -1503,8 +1480,8 @@ ggml_tensor * llm_graph_context::build_rwkv_token_shift_load( ggml_tensor * token_shift_all = kv_state->get_k_l(il); - ggml_tensor * token_shift = build_copy_mask_state( - gf, token_shift_all, state_copy, state_mask, + ggml_tensor * token_shift = build_recurrent_state( + gf, token_shift_all, state_copy, hparams.n_embd_k_s(), n_seqs); token_shift = ggml_reshape_3d(ctx0, token_shift, hparams.n_embd, token_shift_count, n_seqs); diff --git a/src/llama-graph.h b/src/llama-graph.h index 28da6a5228bdc..88fb77f1ddc9a 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -200,18 +200,6 @@ class llm_graph_input_s_copy : public llm_graph_input_i { const llama_kv_cache_recurrent_state * kv_state; }; -class llm_graph_input_s_mask : public llm_graph_input_i { -public: - llm_graph_input_s_mask(const llama_kv_cache_recurrent_state * kv_state) : kv_state(kv_state) {} - virtual ~llm_graph_input_s_mask() = default; - - void set_input(const llama_ubatch * ubatch) override; - - ggml_tensor * s_mask; // F32 [1, n_kv] - - const llama_kv_cache_recurrent_state * kv_state; -}; - class llm_graph_input_cross_embd : public llm_graph_input_i { public: llm_graph_input_cross_embd( @@ -521,7 +509,6 @@ struct llm_graph_context { ggml_tensor * build_inp_mean() const; ggml_tensor * build_inp_cls() const; ggml_tensor * build_inp_s_copy() const; - ggml_tensor * build_inp_s_mask() const; ggml_tensor * build_inp_cross_embd() const; ggml_tensor * build_inp_pos_bucket_enc() const; @@ -606,18 +593,17 @@ struct llm_graph_context { // recurrent // - ggml_tensor * build_copy_mask_state( + ggml_tensor * build_recurrent_state( ggml_cgraph * gf, ggml_tensor * s, ggml_tensor * state_copy, - ggml_tensor * state_mask, - int32_t n_state, - int32_t n_seqs) const; + int32_t state_size, + int32_t n_seqs, + bool avoid_copies = false) const; ggml_tensor * build_rwkv_token_shift_load( ggml_cgraph * gf, ggml_tensor * state_copy, - ggml_tensor * state_mask, const llama_ubatch & ubatch, int il) const; diff --git a/src/llama-kv-cache-recurrent.cpp b/src/llama-kv-cache-recurrent.cpp index f5c6dcd66ce9e..f8cdd52808d7b 100644 --- a/src/llama-kv-cache-recurrent.cpp +++ b/src/llama-kv-cache-recurrent.cpp @@ -406,21 +406,12 @@ bool llama_kv_cache_recurrent::prepare(const std::vector & ubatche bool success = true; - // TODO: here we have to verify that all ubatches can fit in the cells - // however, the current implementation is broken because it relies on s_copy() and s_mask() to update the cells - // during the compute of each ubatch. to reproduce, uncomment the following loop and run: - // - // $ llama-parallel -m ./mamba-130m/ggml-model-f16.gguf -np 5 -ns 8 - // - // recovery from failures when the batch does not fit in the KV cache will not work correctly until this is fixed - // - GGML_UNUSED(ubatches); - //for (const auto & ubatch : ubatches) { - // if (!find_slot(ubatch)) { - // success = false; - // break; - // } - //} + for (const auto & ubatch : ubatches) { + if (!find_slot(ubatch)) { + success = false; + break; + } + } // restore the original state cells = std::move(org_cells); @@ -431,14 +422,13 @@ bool llama_kv_cache_recurrent::prepare(const std::vector & ubatche } bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { - const uint32_t n_tokens = ubatch.n_tokens; - const uint32_t n_seqs = ubatch.n_seqs; + const uint32_t n_seqs = ubatch.n_seqs; const uint32_t n_seq_tokens = ubatch.n_seq_tokens; // if we have enough unused cells before the current head -> // better to start searching from the beginning of the cache, hoping to fill it - if (head > used + 2*n_tokens) { + if (head > used + 2*n_seqs) { head = 0; } @@ -534,16 +524,16 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { empty_cell.src = orig_cell.src; orig_cell.seq_id.erase(seq_id); empty_cell.seq_id.insert(seq_id); // will be overwritten + GGML_ASSERT(!orig_cell.is_empty()); // has at least one remaining seq_id } seq_meta.tail = next_empty_cell; // find next empty cell if (s + 1 < n_seqs) { - next_empty_cell += 1; for (uint32_t i = 0; i < size; ++i) { + next_empty_cell += 1; if (next_empty_cell >= size) { next_empty_cell -= size; } kv_cell & cell = cells[next_empty_cell]; if (cell.is_empty()) { break; } - next_empty_cell += 1; } } } @@ -553,8 +543,8 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { // gather and re-order for (uint32_t s = 0; s < n_seqs; ++s) { - int32_t dst_id = s + min; - int32_t src_id = cells[ubatch.seq_id[s][0]].tail; + const int32_t dst_id = s + min; + const int32_t src_id = cells[ubatch.seq_id[s][0]].tail; if (dst_id != src_id) { kv_cell & dst_cell = cells[dst_id]; kv_cell & src_cell = cells[src_id]; @@ -563,12 +553,14 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { std::swap(dst_cell.src, src_cell.src); std::swap(dst_cell.seq_id, src_cell.seq_id); - // swap tails (assuming they NEVER overlap) - for (const llama_seq_id seq_id : src_cell.seq_id) { - cells[seq_id].tail = src_id; - } - for (const llama_seq_id seq_id : dst_cell.seq_id) { - cells[seq_id].tail = dst_id; + // swap tails + for (uint32_t i = 0; i < size; ++i) { + int32_t & tail = cells[i].tail; + if (tail == src_id) { + tail = dst_id; + } else if (tail == dst_id) { + tail = src_id; + } } } } @@ -576,7 +568,7 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { // update the pos of the used seqs for (uint32_t s = 0; s < n_seqs; ++s) { const llama_pos last_pos = ubatch.pos[n_seq_tokens * s + n_seq_tokens - 1]; - int32_t cell_id = s + min; + const int32_t cell_id = s + min; kv_cell & cell = cells[cell_id]; if (cell.pos >= 0 && last_pos != cell.pos + (llama_pos) n_seq_tokens) { @@ -594,6 +586,38 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { } } + // Find first cell without src refs, to use as the zero-ed state + { + // TODO: bake-in src refcounts in the cell metadata + std::vector refcounts(size, 0); + for (size_t i = 0; i < size; ++i) { + const int32_t src = cells[i].src; + if (src >= 0) { + refcounts[src] += 1; + } + } + + rs_z = -1; + for (int i = min; i <= max; ++i) { + if (refcounts[i] == 0) { + rs_z = i; + break; + } + } + + for (int i = min; i <= max; ++i) { + if (cells[i].src < 0) { + GGML_ASSERT(rs_z >= 0); + cells[i].src0 = rs_z; + } else { + // Stage the source ids for all used cells to allow correct seq_* behavior + // and still make these values available when setting the inputs + cells[i].src0 = cells[i].src; + } + cells[i].src = i; // avoid moving or clearing twice + } + } + // allow getting the range of used cells, from head to head + n head = min; n = max - min + 1; @@ -605,47 +629,8 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { } bool llama_kv_cache_recurrent::get_can_shift() const { - return false; -} - -int32_t llama_kv_cache_recurrent::s_copy(int i) const { - const uint32_t cell_id = i + head; - - ////////////////////////////////////////////// - // TODO: this should not mutate the KV cache ! - kv_cell & cell = const_cast(cells[cell_id]); - - // prevent out-of-bound sources - if (cell.src < 0 || (uint32_t) cell.src >= size) { - cell.src = cell_id; - } - - int32_t res = cell.src; - - // TODO: do not mutate the KV cache - // ensure copy only happens once - if (cell.src != (int32_t) cell_id) { - cell.src = cell_id; - } - - return res; -} - -float llama_kv_cache_recurrent::s_mask(int i) const { - const uint32_t cell_id = i + head; - - ////////////////////////////////////////////// - // TODO: this should not mutate the KV cache ! - kv_cell & cell = const_cast(cells[cell_id]); - - float res = (float) (cell.src >= 0); - - // only clear once - if (cell.src < 0) { - cell.src = cell_id; - } - - return res; + // shifting the pos is trivial for recurrent models + return true; } size_t llama_kv_cache_recurrent::total_size() const { @@ -1111,6 +1096,10 @@ uint32_t llama_kv_cache_recurrent_state::get_head() const { return is_full ? 0 : kv->head; } +int32_t llama_kv_cache_recurrent_state::get_rs_z() const { + return is_full ? 0 : kv->rs_z; +} + uint32_t llama_kv_cache_recurrent_state::get_size() const { return kv->size; } @@ -1124,9 +1113,5 @@ ggml_tensor * llama_kv_cache_recurrent_state::get_v_l(int32_t il) const { } int32_t llama_kv_cache_recurrent_state::s_copy(int i) const { - return kv->s_copy(i); -} - -float llama_kv_cache_recurrent_state::s_mask(int i) const { - return kv->s_mask(i); + return kv->cells[i + kv->head].src0; } diff --git a/src/llama-kv-cache-recurrent.h b/src/llama-kv-cache-recurrent.h index d1da1225655fa..4b33bafd71cca 100644 --- a/src/llama-kv-cache-recurrent.h +++ b/src/llama-kv-cache-recurrent.h @@ -57,10 +57,6 @@ class llama_kv_cache_recurrent : public llama_memory_i { bool get_can_shift() const override; - // TODO: temporary methods - they are not really const as they do const_cast<>, fix this - int32_t s_copy(int i) const; - float s_mask(int i) const; - // state write/load void state_write(llama_io_write_i & io, llama_seq_id seq_id = -1) const override; @@ -73,10 +69,14 @@ class llama_kv_cache_recurrent : public llama_memory_i { // computed before each graph build uint32_t n = 0; + // first zero-ed state + int32_t rs_z = -1; + // TODO: optimize for recurrent state needs struct kv_cell { llama_pos pos = -1; - int32_t src = -1; // used to copy states + int32_t src = -1; // used to know where states should be copied from + int32_t src0 = -1; // like src, but only used when setting the inputs (allowing to copy once) int32_t tail = -1; std::set seq_id; @@ -157,13 +157,13 @@ class llama_kv_cache_recurrent_state : public llama_memory_state_i { uint32_t get_n_kv() const; uint32_t get_head() const; + int32_t get_rs_z() const; uint32_t get_size() const; ggml_tensor * get_k_l(int32_t il) const; ggml_tensor * get_v_l(int32_t il) const; int32_t s_copy(int i) const; - float s_mask(int i) const; private: const llama_memory_status status; diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index 3566d5fd4d72b..fe41b94804310 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -512,8 +512,6 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { head_cur = 0; } - // otherwise, one cell per token. - if (n_tokens > cells.size()) { LLAMA_LOG_ERROR("%s: n_tokens = %d > size = %u\n", __func__, n_tokens, cells.size()); return -1; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index f4a66390c7981..c64bf9de939f4 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -8857,7 +8857,6 @@ struct llm_build_mamba : public llm_graph_context { inpL = build_inp_embd(model.tok_embd); ggml_tensor * state_copy = build_inp_s_copy(); - ggml_tensor * state_mask = build_inp_s_mask(); for (int il = 0; il < n_layer; ++il) { // norm @@ -8866,8 +8865,7 @@ struct llm_build_mamba : public llm_graph_context { LLM_NORM_RMS, il); cb(cur, "attn_norm", il); - //cur = build_mamba_layer(gf, cur, state_copy, state_mask, il); - cur = build_mamba_layer(gf, cur, state_copy, state_mask, ubatch, il); + cur = build_mamba_layer(gf, cur, state_copy, ubatch, il); if (il == n_layer - 1) { // skip computing output for unused tokens @@ -8908,7 +8906,6 @@ struct llm_build_mamba : public llm_graph_context { ggml_cgraph * gf, ggml_tensor * cur, ggml_tensor * state_copy, - ggml_tensor * state_mask, const llama_ubatch & ubatch, int il) const { const auto * kv_state = static_cast(mstate); @@ -8935,12 +8932,12 @@ struct llm_build_mamba : public llm_graph_context { ggml_tensor * ssm_states_all = kv_state->get_v_l(il); // (ab)using the KV cache to store the states - ggml_tensor * conv = build_copy_mask_state( - gf, conv_states_all, state_copy, state_mask, + ggml_tensor * conv = build_recurrent_state( + gf, conv_states_all, state_copy, hparams.n_embd_k_s(), n_seqs); conv = ggml_reshape_3d(ctx0, conv, d_conv - 1, d_inner, n_seqs); - ggml_tensor * ssm = build_copy_mask_state( - gf, ssm_states_all, state_copy, state_mask, + ggml_tensor * ssm = build_recurrent_state( + gf, ssm_states_all, state_copy, hparams.n_embd_v_s(), n_seqs); ssm = ggml_reshape_3d(ctx0, ssm, d_state, d_inner, n_seqs); @@ -11656,7 +11653,6 @@ struct llm_build_rwkv6_base : public llm_graph_context { ggml_tensor * cur, ggml_tensor * x_prev, ggml_tensor * state_copy, - ggml_tensor * state_mask, const llama_ubatch & ubatch, int il) const { const auto * kv_state = static_cast(mstate); @@ -11780,8 +11776,8 @@ struct llm_build_rwkv6_base : public llm_graph_context { k = ggml_sub(ctx0, k, ggml_mul(ctx0, k, w)); } - ggml_tensor * wkv_state = build_copy_mask_state( - gf, kv_state->get_v_l(il), state_copy, state_mask, + ggml_tensor * wkv_state = build_recurrent_state( + gf, kv_state->get_v_l(il), state_copy, hparams.n_embd_v_s(), n_seqs); ggml_tensor * wkv_output; @@ -11837,7 +11833,6 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { inpL = build_norm(inpL, model.tok_norm, model.tok_norm_b, LLM_NORM, -1); ggml_tensor * state_copy = build_inp_s_copy(); - ggml_tensor * state_mask = build_inp_s_mask(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -11848,7 +11843,7 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, state_mask, ubatch, il + gf, state_copy, ubatch, il ); ggml_tensor * att_shift = ggml_view_3d(ctx0, token_shift, n_embd, 1, n_seqs, token_shift->nb[1], token_shift->nb[2], 0); @@ -11864,7 +11859,7 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { 1 ); - cur = build_rwkv6_time_mix(gf, att_norm, x_prev, state_copy, state_mask, ubatch, il); + cur = build_rwkv6_time_mix(gf, att_norm, x_prev, state_copy, ubatch, il); ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); cb(ffn_inp, "ffn_inp", il); @@ -11935,7 +11930,6 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { inpL = build_inp_embd(model.tok_embd); ggml_tensor * state_copy = build_inp_s_copy(); - ggml_tensor * state_mask = build_inp_s_mask(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -11946,7 +11940,7 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, state_mask, ubatch, il + gf, state_copy, ubatch, il ); ggml_tensor * att_norm = build_norm(inpL, layer->attn_norm, layer->attn_norm_b, LLM_NORM_RMS, il); @@ -11959,7 +11953,7 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { 1 ); - cur = build_rwkv6_time_mix(gf, att_norm, x_prev, state_copy, state_mask, ubatch, il); + cur = build_rwkv6_time_mix(gf, att_norm, x_prev, state_copy, ubatch, il); token_shift = ggml_view_3d(ctx0, att_norm, n_embd, 1, n_seqs, att_norm->nb[1], att_norm->nb[2], (n_seq_tokens-1)*n_embd*ggml_element_size(att_norm)); ggml_build_forward_expand(gf, build_rwkv_token_shift_store(token_shift, ubatch, il)); @@ -12051,7 +12045,6 @@ struct llm_build_rwkv7_base : public llm_graph_context { ggml_tensor * cur, ggml_tensor * x_prev, ggml_tensor * state_copy, - ggml_tensor * state_mask, ggml_tensor *& first_layer_value, const llama_ubatch & ubatch, int il) const { @@ -12134,8 +12127,8 @@ struct llm_build_rwkv7_base : public llm_graph_context { v = ggml_reshape_3d(ctx0, v, head_size, head_count, n_tokens); a = ggml_reshape_3d(ctx0, a, head_size, head_count, n_tokens); - ggml_tensor * wkv_state = build_copy_mask_state( - gf, kv_state->get_v_l(il), state_copy, state_mask, + ggml_tensor * wkv_state = build_recurrent_state( + gf, kv_state->get_v_l(il), state_copy, hparams.n_embd_v_s(), n_seqs); ggml_tensor * wkv_output = ggml_rwkv_wkv7(ctx0, r, w, k, v, ggml_neg(ctx0, kk), ggml_mul(ctx0, kk, a), wkv_state); @@ -12193,7 +12186,6 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { inpL = build_norm(inpL, model.tok_norm, model.tok_norm_b, LLM_NORM, -1); ggml_tensor * state_copy = build_inp_s_copy(); - ggml_tensor * state_mask = build_inp_s_mask(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -12204,7 +12196,7 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, state_mask, ubatch, il + gf, state_copy, ubatch, il ); ggml_tensor * att_shift = ggml_view_3d(ctx0, token_shift, n_embd, 1, n_seqs, token_shift->nb[1], token_shift->nb[2], 0); @@ -12220,7 +12212,7 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { 1 ); - cur = build_rwkv7_time_mix(gf, att_norm, x_prev, state_copy, state_mask, v_first, ubatch, il); + cur = build_rwkv7_time_mix(gf, att_norm, x_prev, state_copy, v_first, ubatch, il); ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); cb(ffn_inp, "ffn_inp", il); @@ -12287,7 +12279,6 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { inpL = build_inp_embd(model.tok_embd); ggml_tensor * state_copy = build_inp_s_copy(); - ggml_tensor * state_mask = build_inp_s_mask(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -12298,7 +12289,7 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, state_mask, ubatch, il + gf, state_copy, ubatch, il ); ggml_tensor * att_norm = build_norm(inpL, layer->attn_norm, layer->attn_norm_b, LLM_NORM_RMS, il); @@ -12311,7 +12302,7 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { 1 ); - cur = build_rwkv7_time_mix(gf, att_norm, x_prev, state_copy, state_mask, v_first, ubatch, il); + cur = build_rwkv7_time_mix(gf, att_norm, x_prev, state_copy, v_first, ubatch, il); token_shift = ggml_view_3d(ctx0, att_norm, n_embd, 1, n_seqs, att_norm->nb[1], att_norm->nb[2], (n_seq_tokens-1)*n_embd*ggml_element_size(att_norm)); ggml_build_forward_expand(gf, build_rwkv_token_shift_store(token_shift, ubatch, il)); From 4c763c8d1b4d4de20bf364ec1837430783cba984 Mon Sep 17 00:00:00 2001 From: lhez Date: Tue, 10 Jun 2025 16:55:58 -0700 Subject: [PATCH 09/95] opencl: add `mul_mv_id_q4_0_f32_8x_flat` (#14003) --- ggml/src/ggml-opencl/CMakeLists.txt | 1 + ggml/src/ggml-opencl/ggml-opencl.cpp | 163 +++++++++- .../kernels/mul_mv_id_q4_0_f32_8x_flat.cl | 283 ++++++++++++++++++ 3 files changed, 446 insertions(+), 1 deletion(-) create mode 100644 ggml/src/ggml-opencl/kernels/mul_mv_id_q4_0_f32_8x_flat.cl diff --git a/ggml/src/ggml-opencl/CMakeLists.txt b/ggml/src/ggml-opencl/CMakeLists.txt index d0a8b4cc6d0fc..0e2a419649cea 100644 --- a/ggml/src/ggml-opencl/CMakeLists.txt +++ b/ggml/src/ggml-opencl/CMakeLists.txt @@ -80,6 +80,7 @@ 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_id_q4_0_f32_8x_flat mul norm relu diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index 80a364380d05a..628e574f0f71e 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -321,6 +321,7 @@ struct ggml_backend_opencl_context { cl_program program_upscale; cl_program program_concat; cl_program program_tsembd; + cl_program program_mul_mv_id_q4_0_f32_8x_flat; cl_kernel kernel_add, kernel_add_row; cl_kernel kernel_mul, kernel_mul_row; @@ -366,6 +367,7 @@ struct ggml_backend_opencl_context { cl_kernel kernel_concat_f32_contiguous; cl_kernel kernel_concat_f32_non_contiguous; cl_kernel kernel_timestep_embedding; + cl_kernel kernel_mul_mv_id_q4_0_f32_8x_flat; #ifdef GGML_OPENCL_USE_ADRENO_KERNELS // Transpose kernels @@ -1112,7 +1114,7 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } - // repeat + // repeat { #ifdef GGML_OPENCL_EMBED_KERNELS const std::string kernel_src { @@ -1256,6 +1258,22 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve } } + // mul_mv_id_q4_0_f32_8x_flat + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "mul_mv_id_q4_0_f32_8x_flat.cl.h" + }; +#else + const std::string kernel_src = read_file("mul_mv_id_q4_0_f32_8x_flat.cl"); +#endif + backend_ctx->program_mul_mv_id_q4_0_f32_8x_flat = + build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + + CL_CHECK((backend_ctx->kernel_mul_mv_id_q4_0_f32_8x_flat = clCreateKernel(backend_ctx->program_mul_mv_id_q4_0_f32_8x_flat, "kernel_mul_mv_id_q4_0_f32_8x_flat", &err), err)); + GGML_LOG_CONT("."); + } + // Adreno kernels #ifdef GGML_OPENCL_USE_ADRENO_KERNELS // transpose @@ -2178,6 +2196,13 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te 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[1]->type == GGML_TYPE_F32) { + return ggml_is_contiguous(op->src[0]) && ggml_is_contiguous(op->src[1]); + } + } + return false; case GGML_OP_RESHAPE: case GGML_OP_VIEW: case GGML_OP_PERMUTE: @@ -5536,6 +5561,136 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co } } +static void ggml_cl_mul_mat_id(ggml_backend_t backend, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + GGML_ASSERT(src0); + GGML_ASSERT(src0->extra); + GGML_ASSERT(src1); + GGML_ASSERT(src1->extra); + GGML_ASSERT(dst); + GGML_ASSERT(dst->extra); + + const ggml_tensor * src2 = dst->src[2]; + GGML_ASSERT(src2); + GGML_ASSERT(src2->extra); + + ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; + cl_command_queue queue = backend_ctx->queue; + + 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 offset1 = extra1->offset + src1->view_offs; + cl_ulong offset2 = extra2->offset + src2->view_offs; + cl_ulong offsetd = extrad->offset + dst->view_offs; + +#ifdef GGML_OPENCL_SOA_Q + ggml_tensor_extra_cl_q4_0 * extra0_q4_0 = (ggml_tensor_extra_cl_q4_0 *)src0->extra; +#endif + + const int ne00 = src0->ne[0]; + const int ne01 = src0->ne[1]; + const int ne02 = src0->ne[2]; + const int ne03 = src0->ne[3]; + + const cl_ulong nb00 = src0->nb[0]; + const cl_ulong nb02 = src0->nb[2]; + + const int ne10 = src1->ne[0]; + const int ne11 = src1->ne[1]; + const int ne12 = src1->ne[2]; + const int ne13 = src1->ne[3]; + + const cl_ulong nb11 = src1->nb[1]; + const cl_ulong nb12 = src1->nb[2]; + + const int ne20 = src2->ne[0]; + const int ne21 = src2->ne[1]; + + const cl_ulong nb21 = src2->nb[1]; + + const int ne0 = dst->ne[0]; + const int ne1 = dst->ne[1]; + + const int r2 = ne12/ne02; + const int r3 = ne13/ne03; + const int dst_rows = ne20*ne21; // ne20 = n_used_experts, ne21 = n_rows + + GGML_ASSERT(ne00 == ne10); + + int sgs = 32; // subgroup size + int nsg = 1; // number of subgroups + int nrows = 1; // number of row in src1 + int ndst = 4; // number of values produced by each subgroup + + cl_kernel kernel; + + // subgroup mat vec + switch (src0->type) { + case GGML_TYPE_Q4_0: { + kernel = backend_ctx->kernel_mul_mv_id_q4_0_f32_8x_flat; + + if (backend_ctx->gpu_family == INTEL) { + sgs = 16; + nsg = 1; + ndst = 8; + } else if (backend_ctx->gpu_family == ADRENO) { + sgs = 64; + nsg = 1; + ndst = 8; + } else { + GGML_ASSERT(false && "TODO: Unknown GPU"); + } + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0_q4_0->q)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra0_q4_0->d)); + 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(cl_ulong), &nb00)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(cl_ulong), &nb02)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(int), &ne10)); + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(int), &ne11)); + CL_CHECK(clSetKernelArg(kernel, 15, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 16, sizeof(cl_ulong), &nb11)); + CL_CHECK(clSetKernelArg(kernel, 17, sizeof(cl_ulong), &nb12)); + CL_CHECK(clSetKernelArg(kernel, 18, sizeof(int), &ne20)); + CL_CHECK(clSetKernelArg(kernel, 19, sizeof(int), &ne21)); + CL_CHECK(clSetKernelArg(kernel, 20, sizeof(cl_ulong), &nb21)); + CL_CHECK(clSetKernelArg(kernel, 21, sizeof(int), &ne0)); + CL_CHECK(clSetKernelArg(kernel, 22, sizeof(int), &ne1)); + CL_CHECK(clSetKernelArg(kernel, 23, sizeof(int), &r2)); + CL_CHECK(clSetKernelArg(kernel, 24, sizeof(int), &r3)); + + break; + } + default: + GGML_ASSERT(false && "not implemented");; + } + + int _ne1 = 1; + int ne123 = dst_rows; + + size_t global_work_size[] = {(size_t)(ne01+ndst*nsg-1)/(ndst*nsg)*sgs, (size_t)(_ne1+nrows-1)/nrows*nsg, (size_t)ne123}; + size_t local_work_size[] = {(size_t)sgs, (size_t)nsg, 1}; + +#ifdef GGML_OPENCL_PROFILING + cl_event evt; + CL_CHECK(clEnqueueNDRangeKernel(queue, kernel, 3, NULL, global_work_size, local_work_size, 0, NULL, &evt)); + + g_profiling_info.emplace_back(); + populateProfilingInfo(g_profiling_info.back(), evt, kernel, global_work_size, local_work_size, dst); +#else + CL_CHECK(clEnqueueNDRangeKernel(queue, kernel, 3, NULL, global_work_size, local_work_size, 0, NULL, NULL)); +#endif +} + static void ggml_cl_scale(ggml_backend_t backend, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(src0); GGML_ASSERT(src0->extra); @@ -6444,6 +6599,12 @@ bool ggml_cl_compute_forward(ggml_backend_t backend, struct ggml_tensor * tensor } func = ggml_cl_mul_mat; break; + case GGML_OP_MUL_MAT_ID: + if (!any_on_device) { + return false; + } + func = ggml_cl_mul_mat_id; + break; case GGML_OP_SCALE: if (!any_on_device) { return false; diff --git a/ggml/src/ggml-opencl/kernels/mul_mv_id_q4_0_f32_8x_flat.cl b/ggml/src/ggml-opencl/kernels/mul_mv_id_q4_0_f32_8x_flat.cl new file mode 100644 index 0000000000000..7ccf41efbe918 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/mul_mv_id_q4_0_f32_8x_flat.cl @@ -0,0 +1,283 @@ +#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 QK4_0 32 + +typedef char int8_t; +typedef uchar uint8_t; +typedef short int16_t; +typedef ushort uint16_t; +typedef int int32_t; +typedef uint uint32_t; + +//------------------------------------------------------------------------------ +// block_q4_0 +//------------------------------------------------------------------------------ +struct block_q4_0 +{ + half d; + uint8_t qs[QK4_0 / 2]; +}; + +// This function requires the original shuffled weights. +// As a reminder, the original weights are shuffled so that (q[0], q[16]) are +// packed together in a byte, so are (q[1], q[17]) and so on. +inline float block_q_4_0_dot_y_flat( + global uchar * x, + global half * dh, + float sumy, + float16 yl, + int il +) { + float d = *dh; + global ushort * qs = ((global ushort *)x + il/2); + float acc = 0.f; + + acc += yl.s0 * (qs[0] & 0x000F); + acc += yl.s1 * (qs[0] & 0x0F00); + acc += yl.s8 * (qs[0] & 0x00F0); + acc += yl.s9 * (qs[0] & 0xF000); + + acc += yl.s2 * (qs[1] & 0x000F); + acc += yl.s3 * (qs[1] & 0x0F00); + acc += yl.sa * (qs[1] & 0x00F0); + acc += yl.sb * (qs[1] & 0xF000); + + acc += yl.s4 * (qs[2] & 0x000F); + acc += yl.s5 * (qs[2] & 0x0F00); + acc += yl.sc * (qs[2] & 0x00F0); + acc += yl.sd * (qs[2] & 0xF000); + + acc += yl.s6 * (qs[3] & 0x000F); + acc += yl.s7 * (qs[3] & 0x0F00); + acc += yl.se * (qs[3] & 0x00F0); + acc += yl.sf * (qs[3] & 0xF000); + + return d * (sumy * -8.f + acc); +} + +// +// This variant outputs 8 values. +// +#undef N_DST +#undef N_SIMDGROUP +#undef N_SIMDWIDTH + +#ifdef INTEL_GPU +#define N_DST 8 // each SIMD group works on 8 rows +#define N_SIMDGROUP 1 // number of SIMD groups in a thread group +#define N_SIMDWIDTH 16 // subgroup size +#elif defined (ADRENO_GPU) +#define N_DST 8 +#define N_SIMDGROUP 1 +#define N_SIMDWIDTH 64 +#endif + +inline void mul_vec_q_n_f32_8x_flat( + global char * src0_q, + global half * src0_d, + global float * src1, + global float * dst, + int ne00, + int ne01, + int ne02, + int ne10, + int ne12, + int ne0, + int ne1, + int r2, + int r3 +) { + const ulong nb = ne00/QK4_0; + + int r0 = get_group_id(0); + int r1 = get_group_id(1); + int im = 0; + + int first_row = (r0 * N_SIMDGROUP + get_sub_group_id()) * N_DST; + + int i12 = im%ne12; + int i13 = im/ne12; + + // The number of scales is the same as the number of blocks. + ulong offset0_d = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); + // Each block contains QK4_0/2 uchars, hence offset for qs is as follows. + ulong offset0_q = (first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02)) * QK4_0/2; + + global uchar * x = (global uchar *) src0_q + offset0_q; + global half * d = (global half *) src0_d + offset0_d; + global float * y = (global float *) src1 + r1*ne10 + im*ne00*ne1; + + float16 yl; + float8 sumf = 0.f; + + int ix = get_sub_group_local_id()/2; + int il = 8*(get_sub_group_local_id()%2); + + global float * yb = y + ix*QK4_0 + il; + + for (int ib = ix; ib < nb; ib += N_SIMDWIDTH/2) { + float sumy = 0.f; + + sumy += yb[0]; + sumy += yb[1]; + sumy += yb[2]; + sumy += yb[3]; + sumy += yb[4]; + sumy += yb[5]; + sumy += yb[6]; + sumy += yb[7]; + + sumy += yb[16]; + sumy += yb[17]; + sumy += yb[18]; + sumy += yb[19]; + sumy += yb[20]; + sumy += yb[21]; + sumy += yb[22]; + sumy += yb[23]; + + yl.s0 = yb[0]; + yl.s1 = yb[1]/256.f; + + yl.s2 = yb[2]; + yl.s3 = yb[3]/256.f; + + yl.s4 = yb[4]; + yl.s5 = yb[5]/256.f; + + yl.s6 = yb[6]; + yl.s7 = yb[7]/256.f; + + yl.s8 = yb[16]/16.f; + yl.s9 = yb[17]/4096.f; + + yl.sa = yb[18]/16.f; + yl.sb = yb[19]/4096.f; + + yl.sc = yb[20]/16.f; + yl.sd = yb[21]/4096.f; + + yl.se = yb[22]/16.f; + yl.sf = yb[23]/4096.f; + + sumf.s0 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 0*nb*QK4_0/2, d + ib + 0*nb, sumy, yl, il); + sumf.s1 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 1*nb*QK4_0/2, d + ib + 1*nb, sumy, yl, il); + sumf.s2 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 2*nb*QK4_0/2, d + ib + 2*nb, sumy, yl, il); + sumf.s3 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 3*nb*QK4_0/2, d + ib + 3*nb, sumy, yl, il); + + sumf.s4 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 4*nb*QK4_0/2, d + ib + 4*nb, sumy, yl, il); + sumf.s5 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 5*nb*QK4_0/2, d + ib + 5*nb, sumy, yl, il); + sumf.s6 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 6*nb*QK4_0/2, d + ib + 6*nb, sumy, yl, il); + sumf.s7 += block_q_4_0_dot_y_flat(x + ib*QK4_0/2 + 7*nb*QK4_0/2, d + ib + 7*nb, sumy, yl, il); + + yb += QK4_0 * (N_SIMDWIDTH/2); + } + + float8 tot = (float8)( + sub_group_reduce_add(sumf.s0), sub_group_reduce_add(sumf.s1), + sub_group_reduce_add(sumf.s2), sub_group_reduce_add(sumf.s3), + sub_group_reduce_add(sumf.s4), sub_group_reduce_add(sumf.s5), + sub_group_reduce_add(sumf.s6), sub_group_reduce_add(sumf.s7) + ); + + if (get_sub_group_local_id() == 0) { + if (first_row + 0 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 0] = tot.s0; + } + if (first_row + 1 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 1] = tot.s1; + } + if (first_row + 2 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 2] = tot.s2; + } + if (first_row + 3 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 3] = tot.s3; + } + + if (first_row + 4 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 4] = tot.s4; + } + if (first_row + 5 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 5] = tot.s5; + } + if (first_row + 6 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 6] = tot.s6; + } + if (first_row + 7 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 7] = tot.s7; + } + } +} + +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_16 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_mul_mv_id_q4_0_f32_8x_flat( + global char * src0_q, + global half * src0_d, + global float * src1, + ulong offset1, + global char * src2, + ulong offset2, + global float * dst, + ulong offsetd, + int ne00, + int ne01, + int ne02, + ulong nb00, + ulong nb02, + int ne10, + int ne11, + int ne12, + ulong nb11, + ulong nb12, + int ne20, + int ne21, + ulong nb21, + int ne0, + int ne1, + int r2, + int r3 +) { + src1 = (global float *)((global char *)src1 + offset1); + src2 = (global char *)((global char *)src2 + offset2); + dst = (global float *)((global char *)dst + offsetd); + + const int iid1 = get_group_id(2)/ne20; + const int idx = get_group_id(2)%ne20; + + const int i02 = ((global int *)(src2 + iid1*nb21))[idx]; + + const int i11 = idx%ne11; + const int i12 = iid1; + + const int i1 = idx; + const int i2 = i12; + + global char * src0_q_cur = src0_q + (i02*nb02/nb00)*(QK4_0/2); + global half * src0_d_cur = src0_d + (i02*nb02/nb00); + global float * src1_cur = (global float *)((global char *) src1 + i11*nb11 + i12*nb12); + global float * dst_cur = dst + i1*ne0 + i2*ne1*ne0; + + mul_vec_q_n_f32_8x_flat(src0_q_cur, src0_d_cur, src1_cur, dst_cur, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3); +} From 1f7d50b2936023b26eb218e944e62834b80a2ce0 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 11 Jun 2025 00:19:25 -0500 Subject: [PATCH 10/95] vulkan: Track descriptor pools/sets per-context (#14109) Use the same descriptor set layout for all pipelines (MAX_PARAMETER_COUNT == 8) and move it to the vk_device. Move all the descriptor pool and set tracking to the context - none of it is specific to pipelines anymore. It has a single vector of pools and vector of sets, and a single counter to track requests and a single counter to track use. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 233 ++++++++++++--------------- 1 file changed, 104 insertions(+), 129 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 8ccc73e7422fe..e5200b96d0d8d 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -78,7 +78,7 @@ static bool is_pow2(uint32_t x) { return x > 1 && (x & (x-1)) == 0; } #define VK_VENDOR_ID_INTEL 0x8086 #define VK_VENDOR_ID_NVIDIA 0x10de -#define VK_DEVICE_DESCRIPTOR_POOL_SIZE 32 +#define VK_DEVICE_DESCRIPTOR_POOL_SIZE 256 #define GGML_VK_MAX_NODES 8192 @@ -114,13 +114,11 @@ struct vk_queue { bool transfer_only; }; +#define MAX_PARAMETER_COUNT 8 + struct vk_pipeline_struct { std::string name; vk::ShaderModule shader_module; - vk::DescriptorSetLayout dsl; - std::vector descriptor_pools; - std::vector descriptor_sets; - uint32_t descriptor_set_idx; vk::PipelineLayout layout; vk::Pipeline pipeline; uint32_t push_constant_size; @@ -341,6 +339,8 @@ struct vk_device_struct { // set to true to indicate that some shaders need to be compiled after the dryrun bool need_compiles {}; + vk::DescriptorSetLayout dsl; + vk_matmul_pipeline pipeline_matmul_f32 {}; vk_matmul_pipeline pipeline_matmul_f32_f16 {}; vk_matmul_pipeline pipeline_matmul_bf16 {}; @@ -458,7 +458,6 @@ struct vk_device_struct { vk_pipeline pipeline_flash_attn_split_k_reduce; std::unordered_map pipelines; - std::unordered_map pipeline_descriptor_set_requirements; std::vector> pinned_memory; @@ -498,6 +497,8 @@ struct vk_device_struct { } pipelines.clear(); + device.destroyDescriptorSetLayout(dsl); + device.destroy(); } }; @@ -930,6 +931,11 @@ struct ggml_backend_vk_context { vk_context_ref transfer_ctx; std::vector tensor_ctxs; + + std::vector descriptor_pools; + std::vector descriptor_sets; + uint32_t descriptor_set_idx {}; + uint32_t pipeline_descriptor_set_requirements {}; }; static void * const vk_ptr_base = (void *)(uintptr_t) 0x1000; // NOLINT @@ -1060,39 +1066,19 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin ", (" << wg_denoms[0] << "," << wg_denoms[1] << "," << wg_denoms[2] << "), specialization_constants, " << disable_robustness << ", " << require_full_subgroups << ", " << required_subgroup_size << ")"); GGML_ASSERT(parameter_count > 0); + GGML_ASSERT(parameter_count <= MAX_PARAMETER_COUNT); GGML_ASSERT(wg_denoms[0] > 0 && wg_denoms[1] > 0 && wg_denoms[2] > 0); // NOLINT vk::ShaderModuleCreateInfo shader_module_create_info({}, spv_size, reinterpret_cast(spv_data)); pipeline->shader_module = device->device.createShaderModule(shader_module_create_info); - std::vector dsl_binding; - std::vector dsl_binding_flags; - for (uint32_t i = 0; i < parameter_count; i++) { - dsl_binding.push_back({i, vk::DescriptorType::eStorageBuffer, 1, vk::ShaderStageFlagBits::eCompute}); - dsl_binding_flags.push_back({}); - } - - vk::DescriptorSetLayoutBindingFlagsCreateInfo dslbfci = { dsl_binding_flags }; - vk::PushConstantRange pcr( vk::ShaderStageFlagBits::eCompute, 0, pipeline->push_constant_size ); - vk::DescriptorSetLayoutCreateInfo descriptor_set_layout_create_info( - {}, - dsl_binding); - descriptor_set_layout_create_info.setPNext(&dslbfci); - pipeline->dsl = device->device.createDescriptorSetLayout(descriptor_set_layout_create_info); - - vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count * VK_DEVICE_DESCRIPTOR_POOL_SIZE); - vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, VK_DEVICE_DESCRIPTOR_POOL_SIZE, descriptor_pool_size); - pipeline->descriptor_pools.push_back(device->device.createDescriptorPool(descriptor_pool_create_info)); - - pipeline->descriptor_set_idx = 0; - - vk::PipelineLayoutCreateInfo pipeline_layout_create_info(vk::PipelineLayoutCreateFlags(), pipeline->dsl, pcr); + vk::PipelineLayoutCreateInfo pipeline_layout_create_info(vk::PipelineLayoutCreateFlags(), device->dsl, pcr); pipeline->layout = device->device.createPipelineLayout(pipeline_layout_create_info); std::vector specialization_entries(specialization_constants.size()); @@ -1167,15 +1153,6 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline) { VK_LOG_DEBUG("ggml_pipeline_destroy_pipeline(" << pipeline->name << ")"); - for (auto& pool : pipeline->descriptor_pools) { - device.destroyDescriptorPool(pool); - } - pipeline->descriptor_pools.clear(); - pipeline->descriptor_sets.clear(); - pipeline->descriptor_set_idx = 0; - - device.destroyDescriptorSetLayout(pipeline->dsl); - device.destroyPipelineLayout(pipeline->layout); device.destroyShaderModule(pipeline->shader_module); @@ -1183,60 +1160,49 @@ static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline) device.destroyPipeline(pipeline->pipeline); } -static void ggml_pipeline_request_descriptor_sets(vk_device& device, vk_pipeline& pipeline, uint32_t n) { +static void ggml_pipeline_request_descriptor_sets(ggml_backend_vk_context *ctx, vk_pipeline& pipeline, uint32_t n) { VK_LOG_DEBUG("ggml_pipeline_request_descriptor_sets(" << pipeline->name << ", " << n << ")"); - device->pipeline_descriptor_set_requirements[pipeline->name] += n; + ctx->pipeline_descriptor_set_requirements += n; if (!pipeline->compiled) { pipeline->needed = true; - device->need_compiles = true; + ctx->device->need_compiles = true; } } -static void ggml_pipeline_allocate_descriptor_sets(vk_device& device) { - std::lock_guard guard(device->mutex); - - for (auto& pair : device->pipeline_descriptor_set_requirements) { - vk_pipeline pipeline = device->pipelines.at(pair.first).lock(); - const uint64_t n = pair.second; - - VK_LOG_DEBUG("ggml_pipeline_allocate_descriptor_sets(" << pipeline->name << ", " << n << ")"); +static void ggml_pipeline_allocate_descriptor_sets(ggml_backend_vk_context * ctx) { - if (pipeline->descriptor_sets.size() >= pipeline->descriptor_set_idx + n) { - // Enough descriptors are available - continue; - } + if (ctx->descriptor_sets.size() >= ctx->pipeline_descriptor_set_requirements) { + // Enough descriptors are available + return; + } - uint32_t to_alloc = pipeline->descriptor_set_idx + n - pipeline->descriptor_sets.size(); - uint32_t pool_remaining = VK_DEVICE_DESCRIPTOR_POOL_SIZE - pipeline->descriptor_sets.size() % VK_DEVICE_DESCRIPTOR_POOL_SIZE; - uint32_t pool_idx = pipeline->descriptor_sets.size() / VK_DEVICE_DESCRIPTOR_POOL_SIZE; + vk_device& device = ctx->device; - while (to_alloc > 0) { - const uint32_t alloc_count = std::min(pool_remaining, to_alloc); - to_alloc -= alloc_count; - pool_remaining = VK_DEVICE_DESCRIPTOR_POOL_SIZE; + uint32_t to_alloc = ctx->pipeline_descriptor_set_requirements - ctx->descriptor_sets.size(); + uint32_t pool_remaining = VK_DEVICE_DESCRIPTOR_POOL_SIZE - ctx->descriptor_sets.size() % VK_DEVICE_DESCRIPTOR_POOL_SIZE; + uint32_t pool_idx = ctx->descriptor_sets.size() / VK_DEVICE_DESCRIPTOR_POOL_SIZE; - if (pool_idx >= pipeline->descriptor_pools.size()) { - vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count * VK_DEVICE_DESCRIPTOR_POOL_SIZE); - vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, VK_DEVICE_DESCRIPTOR_POOL_SIZE, descriptor_pool_size); - pipeline->descriptor_pools.push_back(device->device.createDescriptorPool(descriptor_pool_create_info)); - } + while (to_alloc > 0) { + const uint32_t alloc_count = std::min(pool_remaining, to_alloc); + to_alloc -= alloc_count; + pool_remaining = VK_DEVICE_DESCRIPTOR_POOL_SIZE; - std::vector layouts(alloc_count); - for (uint32_t i = 0; i < alloc_count; i++) { - layouts[i] = pipeline->dsl; - } - vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[pool_idx], alloc_count, layouts.data()); - std::vector sets = device->device.allocateDescriptorSets(descriptor_set_alloc_info); - pipeline->descriptor_sets.insert(pipeline->descriptor_sets.end(), sets.begin(), sets.end()); + if (pool_idx >= ctx->descriptor_pools.size()) { + vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, MAX_PARAMETER_COUNT * VK_DEVICE_DESCRIPTOR_POOL_SIZE); + vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, VK_DEVICE_DESCRIPTOR_POOL_SIZE, descriptor_pool_size); + ctx->descriptor_pools.push_back(device->device.createDescriptorPool(descriptor_pool_create_info)); + } - pool_idx++; + std::vector layouts(alloc_count); + for (uint32_t i = 0; i < alloc_count; i++) { + layouts[i] = device->dsl; } - } -} + vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(ctx->descriptor_pools[pool_idx], alloc_count, layouts.data()); + std::vector sets = device->device.allocateDescriptorSets(descriptor_set_alloc_info); + ctx->descriptor_sets.insert(ctx->descriptor_sets.end(), sets.begin(), sets.end()); -static void ggml_pipeline_cleanup(vk_pipeline& pipeline) { - VK_LOG_DEBUG("ggml_pipeline_cleanup(" << pipeline->name << ")"); - pipeline->descriptor_set_idx = 0; + pool_idx++; + } } static vk::CommandBuffer ggml_vk_create_cmd_buffer(vk_device& device, vk_queue& q) { @@ -3369,6 +3335,22 @@ static vk_device ggml_vk_get_device(size_t idx) { } } + + std::vector dsl_binding; + std::vector dsl_binding_flags; + for (uint32_t i = 0; i < MAX_PARAMETER_COUNT; i++) { + dsl_binding.push_back({i, vk::DescriptorType::eStorageBuffer, 1, vk::ShaderStageFlagBits::eCompute}); + dsl_binding_flags.push_back({}); + } + + vk::DescriptorSetLayoutBindingFlagsCreateInfo dslbfci = { dsl_binding_flags }; + + vk::DescriptorSetLayoutCreateInfo descriptor_set_layout_create_info( + {}, + dsl_binding); + descriptor_set_layout_create_info.setPNext(&dslbfci); + device->dsl = device->device.createDescriptorSetLayout(descriptor_set_layout_create_info); + ggml_vk_load_shaders(device); if (!device->single_queue) { @@ -4154,10 +4136,10 @@ static void ggml_vk_dispatch_pipeline(ggml_backend_vk_context* ctx, vk_context& std::cerr << "(" << buffer.buffer << ", " << buffer.offset << ", " << buffer.range << "), "; } std::cerr << "}, (" << wg0 << "," << wg1 << "," << wg2 << "))"); - GGML_ASSERT(pipeline->descriptor_set_idx < pipeline->descriptor_sets.size()); - GGML_ASSERT(descriptor_buffer_infos.size() == pipeline->parameter_count); + GGML_ASSERT(ctx->descriptor_set_idx < ctx->descriptor_sets.size()); + GGML_ASSERT(descriptor_buffer_infos.size() <= MAX_PARAMETER_COUNT); - vk::DescriptorSet& descriptor_set = pipeline->descriptor_sets[pipeline->descriptor_set_idx++]; + vk::DescriptorSet& descriptor_set = ctx->descriptor_sets[ctx->descriptor_set_idx++]; vk::WriteDescriptorSet write_descriptor_set{ descriptor_set, 0, 0, pipeline->parameter_count, vk::DescriptorType::eStorageBuffer, nullptr, descriptor_buffer_infos.begin() }; ctx->device->device.updateDescriptorSets({ write_descriptor_set }, {}); @@ -4964,18 +4946,18 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub } // Request descriptor sets - ggml_pipeline_request_descriptor_sets(ctx->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); if (qx_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_0, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_0, 1); } if (qy_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_1, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_1, 1); } if (quantize_y) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_q8_1, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_q8_1, 1); } if (split_k > 1) { - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_matmul_split_k_reduce, 1); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, 1); } return; } @@ -5157,12 +5139,12 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& // Request descriptor sets if (qx_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_0, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_0, 1); } if (qy_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_1, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_1, 1); } - ggml_pipeline_request_descriptor_sets(ctx->device, dmmv, 1); + ggml_pipeline_request_descriptor_sets(ctx, dmmv, 1); return; } @@ -5295,7 +5277,7 @@ static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_c if (dryrun) { // Request descriptor sets - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_mul_mat_vec_p021_f16_f32[gqa_ratio - 1], 1); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32[gqa_ratio - 1], 1); return; } @@ -5384,7 +5366,7 @@ static void ggml_vk_mul_mat_vec_nc_f16_f32(ggml_backend_vk_context * ctx, vk_con if (dryrun) { // Request descriptor sets - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, 1); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, 1); return; } @@ -5571,12 +5553,12 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& } // Request descriptor sets - ggml_pipeline_request_descriptor_sets(ctx->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); if (qx_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_0, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_0, 1); } if (qy_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_1, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_1, 1); } return; } @@ -5765,12 +5747,12 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte // Request descriptor sets if (qx_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_0, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_0, 1); } if (qy_needs_dequant) { - ggml_pipeline_request_descriptor_sets(ctx->device, to_fp16_vk_1, 1); + ggml_pipeline_request_descriptor_sets(ctx, to_fp16_vk_1, 1); } - ggml_pipeline_request_descriptor_sets(ctx->device, dmmv, 1); + ggml_pipeline_request_descriptor_sets(ctx, dmmv, 1); return; } @@ -6090,9 +6072,9 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx if (dryrun) { // Request descriptor sets - ggml_pipeline_request_descriptor_sets(ctx->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); if (split_k > 1) { - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_flash_attn_split_k_reduce, 1); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_flash_attn_split_k_reduce, 1); } return; } @@ -6655,7 +6637,7 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co } if (dryrun) { - ggml_pipeline_request_descriptor_sets(ctx->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); return; } @@ -7036,7 +7018,7 @@ static void ggml_vk_op_f32_wkv(ggml_backend_vk_context * ctx, vk_context& subctx GGML_ASSERT(pipeline != nullptr); if (dryrun) { - ggml_pipeline_request_descriptor_sets(ctx->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); return; } @@ -7175,7 +7157,7 @@ static void ggml_vk_op_f32_opt_step_adamw(ggml_backend_vk_context * ctx, vk_cont GGML_ASSERT(pipeline != nullptr); if (dryrun) { - ggml_pipeline_request_descriptor_sets(ctx->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); return; } @@ -7853,9 +7835,9 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t } } - ggml_pipeline_request_descriptor_sets(ctx->device, p, num_it); + ggml_pipeline_request_descriptor_sets(ctx, p, num_it); if (split_k > 1) { - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_matmul_split_k_reduce, num_it); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it); if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) { // Resize buffer @@ -7870,7 +7852,7 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t ggml_vk_load_shaders(ctx->device); } - ggml_pipeline_allocate_descriptor_sets(ctx->device); + 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); @@ -8036,9 +8018,6 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t ggml_vk_destroy_buffer(d_Y); ggml_vk_destroy_buffer(d_D); - ggml_pipeline_cleanup(p); - ggml_pipeline_cleanup(ctx->device->pipeline_matmul_split_k_reduce); - free(x); free(y); free(d); @@ -8116,13 +8095,13 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ ggml_vk_quantize_data(x, qx, ne, quant); ggml_vk_dequantize_data(qx, x_ref, ne, quant); - ggml_pipeline_request_descriptor_sets(ctx->device, p, 1); + ggml_pipeline_request_descriptor_sets(ctx, p, 1); if (ctx->device->need_compiles) { ggml_vk_load_shaders(ctx->device); } - ggml_pipeline_allocate_descriptor_sets(ctx->device); + ggml_pipeline_allocate_descriptor_sets(ctx); ggml_vk_buffer_write(qx_buf, 0, qx, qx_sz); @@ -8216,13 +8195,13 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ // // vk_pipeline p = ggml_vk_get_quantize_pipeline(ctx, quant); // -// ggml_pipeline_request_descriptor_sets(ctx->device, p, 1); +// ggml_pipeline_request_descriptor_sets(ctx, p, 1); // // if (ctx->device->need_compiles) { // ggml_vk_load_shaders(ctx->device); // } // -// ggml_pipeline_allocate_descriptor_sets(ctx->device); +// ggml_pipeline_allocate_descriptor_sets(ctx); // // ggml_vk_buffer_write(x_buf, 0, x, x_sz); // @@ -8375,9 +8354,9 @@ static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, // y[i] = i % k; } - ggml_pipeline_request_descriptor_sets(ctx->device, p, num_it); + ggml_pipeline_request_descriptor_sets(ctx, p, num_it); if (split_k > 1) { - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_matmul_split_k_reduce, num_it); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it); if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) { // Resize buffer @@ -8388,14 +8367,14 @@ static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, } } if (mmq) { - ggml_pipeline_request_descriptor_sets(ctx->device, ctx->device->pipeline_quantize_q8_1, num_it); + ggml_pipeline_request_descriptor_sets(ctx, ctx->device->pipeline_quantize_q8_1, num_it); } if (ctx->device->need_compiles) { ggml_vk_load_shaders(ctx->device); } - ggml_pipeline_allocate_descriptor_sets(ctx->device); + ggml_pipeline_allocate_descriptor_sets(ctx); ggml_vk_buffer_write(qx_buf, 0, qx, qx_sz); ggml_vk_buffer_write(y_buf, 0, y, y_sz); @@ -8797,7 +8776,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_tensor * nod // These operations all go through ggml_vk_op_f32, so short-circuit and // 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->device, pipeline, 1); + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); return false; } default: @@ -9189,17 +9168,6 @@ static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) { } ctx->gc.temp_buffers.clear(); - for (auto& dsr : ctx->device->pipeline_descriptor_set_requirements) { - vk_pipeline_ref plr = ctx->device->pipelines[dsr.first]; - - if (plr.expired()) { - continue; - } - - vk_pipeline pl = plr.lock(); - ggml_pipeline_cleanup(pl); - } - ggml_vk_queue_cleanup(ctx->device, ctx->device->compute_queue); ggml_vk_queue_cleanup(ctx->device, ctx->device->transfer_queue); @@ -9222,7 +9190,8 @@ static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) { ctx->tensor_ctxs.clear(); ctx->gc.contexts.clear(); - ctx->device->pipeline_descriptor_set_requirements.clear(); + ctx->pipeline_descriptor_set_requirements = 0; + ctx->descriptor_set_idx = 0; } // Clean up on backend free @@ -9249,6 +9218,12 @@ static void ggml_vk_cleanup(ggml_backend_vk_context * ctx) { ctx->device->device.destroyFence(ctx->fence); ctx->device->device.destroyFence(ctx->almost_ready_fence); + + for (auto& pool : ctx->descriptor_pools) { + ctx->device->device.destroyDescriptorPool(pool); + } + ctx->descriptor_pools.clear(); + ctx->descriptor_sets.clear(); } static int ggml_vk_get_device_count() { @@ -9622,7 +9597,7 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg ggml_vk_load_shaders(ctx->device); } ggml_vk_preallocate_buffers(ctx); - ggml_pipeline_allocate_descriptor_sets(ctx->device); + ggml_pipeline_allocate_descriptor_sets(ctx); int last_node = cgraph->n_nodes - 1; From 7ae2932116a4de3141cbc8c488f7f6e4e06d8171 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 11 Jun 2025 12:52:45 +0300 Subject: [PATCH 11/95] kv-cache : add LLAMA_KV_CACHE_DEBUG environment variable (#14121) --- src/llama-kv-cache-unified.cpp | 53 +++++++++++++++++++++++++--------- src/llama-kv-cache-unified.h | 2 ++ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index fe41b94804310..b184735566a0a 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -127,6 +127,9 @@ llama_kv_cache_unified::llama_kv_cache_unified( ggml_type_name(type_k), (float)memory_size_k / (1024.0f * 1024.0f), ggml_type_name(type_v), (float)memory_size_v / (1024.0f * 1024.0f)); } + + const char * LLAMA_KV_CACHE_DEBUG = getenv("LLAMA_KV_CACHE_DEBUG"); + debug = LLAMA_KV_CACHE_DEBUG ? atoi(LLAMA_KV_CACHE_DEBUG) : 0; } void llama_kv_cache_unified::clear(bool data) { @@ -517,14 +520,12 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { return -1; } -//#define FIND_SLOT_DEBUG 1 -#if FIND_SLOT_DEBUG - LLAMA_LOG_WARN("begin: n = %5d, used = %5d, head = %5d, n_swa = %5d\n", cells.used_max_p1(), cells.get_used(), head, n_swa); + if (debug > 0) { + LLAMA_LOG_CONT("\n"); + LLAMA_LOG_DEBUG("%s: n = %5d, used = %5d, head = %5d, size = %5d, n_swa = %5d\n", __func__, cells.used_max_p1(), cells.get_used(), head, get_size(), n_swa); - // for debugging - { - std::string ss; - if (n_swa > 0) { + if ((debug == 2 && n_swa > 0) || debug > 2) { + std::string ss; for (uint32_t i = 0; i < cells.size(); ++i) { if (cells.is_empty(i)) { ss += '.'; @@ -532,21 +533,45 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { ss += std::to_string(cells.seq_get(i)); } if (i%256 == 255) { + ss += " *"; ss += '\n'; } } + LLAMA_LOG_DEBUG("\n%s\n", ss.c_str()); } - LLAMA_LOG_WARN("\n%s\n", ss.c_str()); - } - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { - if (cells.seq_pos_min(s) < 0) { - continue; + if ((debug == 2 && n_swa > 0) || debug > 2) { + std::string ss; + for (uint32_t i = 0; i < cells.size(); ++i) { + std::string cur; + if (cells.is_empty(i)) { + cur = '.'; + } else { + cur = std::to_string(cells.pos_get(i)); + } + const int n = cur.size(); + for (int j = 0; j < 5 - n; ++j) { + cur += ' '; + } + ss += cur; + if (i%256 == 255) { + ss += " *"; + } + if (i%64 == 63) { + ss += '\n'; + } + } + LLAMA_LOG_DEBUG("\n%s\n", ss.c_str()); } - LLAMA_LOG_WARN("kv_cells: n_swa = %4d, min[%d] = %5d, max[%d] = %5d\n", n_swa, s, cells.seq_pos_min(s), s, cells.seq_pos_max(s)); + for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + if (cells.seq_pos_min(s) < 0) { + continue; + } + + LLAMA_LOG_DEBUG("%s: min[%d] = %5d, max[%d] = %5d\n", __func__, s, cells.seq_pos_min(s), s, cells.seq_pos_max(s)); + } } -#endif uint32_t n_tested = 0; diff --git a/src/llama-kv-cache-unified.h b/src/llama-kv-cache-unified.h index 49f410ef6ecab..cf4c691babd1e 100644 --- a/src/llama-kv-cache-unified.h +++ b/src/llama-kv-cache-unified.h @@ -158,6 +158,8 @@ class llama_kv_cache_unified : public llama_memory_i { // SWA const uint32_t n_swa = 0; + int debug = 0; + const llama_swa_type swa_type = LLAMA_SWA_TYPE_NONE; std::vector ctxs; From 2baf07727f921d9a4a1b63a2eff941e95d0488ed Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 11 Jun 2025 06:43:43 -0400 Subject: [PATCH 12/95] server : pass default --keep argument (#14120) --- tools/server/server.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 3b5e03528e2d7..1b1cf439baa5f 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -233,6 +233,7 @@ struct server_task { slot_params defaults; defaults.sampling = params_base.sampling; defaults.speculative = params_base.speculative; + defaults.n_keep = params_base.n_keep; // enabling this will output extra debug information in the HTTP responses from the server params.verbose = params_base.verbosity > 9; @@ -2060,6 +2061,7 @@ struct server_context { SLT_INF(slot, "new slot n_ctx_slot = %d\n", slot.n_ctx); slot.params.sampling = params_base.sampling; + slot.params.n_keep = params_base.n_keep; slot.callback_on_release = [this](int) { queue_tasks.pop_deferred_task(); From 89a184fa7125b7c3e2fb567337cc2bd7bc2d376c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 11 Jun 2025 16:48:45 +0300 Subject: [PATCH 13/95] kv-cache : relax SWA masking condition (#14119) ggml-ci --- src/llama-kv-cache-unified.cpp | 58 +++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index b184735566a0a..1a9f4e3159f94 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -582,21 +582,15 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { continue; } - // keep track of what the minimum sequence positions would be if we accept the ubatch - llama_seq_id seq_pos_min[LLAMA_MAX_PARALLEL_SEQUENCES]; - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { - seq_pos_min[s] = cells.seq_pos_min(s); - } - bool found = true; for (uint32_t i = 0; i < n_tokens; i++) { - const llama_pos pos = ubatch.pos[i]; - const llama_seq_id seq_id = ubatch.seq_id[i][0]; + //const llama_pos pos = ubatch.pos[i]; + //const llama_seq_id seq_id = ubatch.seq_id[i][0]; // can we use this cell? either: // - the cell is empty // - the cell is occupied only by one sequence: - // - mask causally, if the sequence is the same as the one we are inserting + // - (disabled) mask causally, if the sequence is the same as the one we are inserting // - mask SWA, using current max pos for that sequence in the cache // always insert in the cell with minimum pos bool can_use = cells.is_empty(head_cur + i); @@ -604,21 +598,17 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { if (!can_use && cells.seq_count(head_cur + i) == 1) { const llama_pos pos_cell = cells.pos_get(head_cur + i); - // causal mask - if (cells.seq_has(head_cur + i, seq_id)) { - can_use = pos_cell >= pos; - } + // (disabled) causal mask + // note: it's better to purge any "future" tokens beforehand + //if (cells.seq_has(head_cur + i, seq_id)) { + // can_use = pos_cell >= pos; + //} if (!can_use) { const llama_seq_id seq_id_cell = cells.seq_get(head_cur + i); // SWA mask - // note: we insert only in the cell with minimum pos in order to preserve the invariant that - // all positions between [pos_min, pos_max] for each sequence will be present in the cache - // ref: https://github.com/ggml-org/llama.cpp/pull/13746#issuecomment-2916057092 - if (pos_cell == seq_pos_min[seq_id_cell] && - is_masked_swa(pos_cell, cells.seq_pos_max(seq_id_cell) + 1)) { - seq_pos_min[seq_id_cell]++; + if (is_masked_swa(pos_cell, cells.seq_pos_max(seq_id_cell) + 1)) { can_use = true; } } @@ -646,8 +636,22 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { } void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, 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_PARALLEL_SEQUENCES]; + for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + seq_pos_max_rm[s] = -1; + } + for (uint32_t i = 0; i < ubatch.n_tokens; ++i) { if (!cells.is_empty(head_cur + i)) { + assert(cells.seq_count(head_cur + i) == 1); + + const llama_seq_id seq_id = cells.seq_get(head_cur + i); + const llama_pos pos = cells.pos_get(head_cur + i); + + seq_pos_max_rm[seq_id] = std::max(seq_pos_max_rm[seq_id], pos); + cells.rm(head_cur + i); } @@ -658,6 +662,22 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch } } + // note: we want to preserve the invariant that all positions between [pos_min, pos_max] for each sequence + // will be present in the cache. so we have to purge any position which is less than those we would overwrite + // ref: https://github.com/ggml-org/llama.cpp/pull/13746#issuecomment-2916057092 + for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + if (seq_pos_max_rm[s] == -1) { + continue; + } + + if (cells.seq_pos_min(s) <= seq_pos_max_rm[s]) { + LLAMA_LOG_DEBUG("%s: purging positions [%d, %d] of sequence %d from KV cache\n", + __func__, cells.seq_pos_min(s), seq_pos_max_rm[s], s); + + seq_rm(s, cells.seq_pos_min(s), seq_pos_max_rm[s] + 1); + } + } + // move the head at the end of the slot head = head_cur + ubatch.n_tokens; } From 7781e5fe99f2a4fc1c8af0a8488eedac4644cb72 Mon Sep 17 00:00:00 2001 From: Aman Date: Wed, 11 Jun 2025 22:42:25 +0800 Subject: [PATCH 14/95] webui: Wrap long numbers instead of infinite horizontal scroll (#14062) * webui: Wrap long numbers instead of infinite horizontal scroll * Use tailwind class * update index.html.gz --- tools/server/public/index.html.gz | Bin 1913882 -> 1913886 bytes tools/server/webui/src/index.scss | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz index 35b9e702f698c154ceb60ac4fb8b5b3fd38c0e50..0fb01665ae5ccf999a186e13ea09b8f67de3fa1e 100644 GIT binary patch delta 935429 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

9!L6$;nCs9wqY8lokFG+ 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 delta 935424 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

ZhHo@&HcDF@b#g( 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

jt3TJE}Dk1<* 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

ttg`q|l0XCh>ImC-X*C{&7Ms7gN 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
P06q^b=#=x%;AudGcNdb-eIwK&)UUg8-9c|M|~; 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

P4CIMR4;Uk^8J`KG>6=XtqFF4f}* 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%0Am3 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 Fy1nV&e?@Pr@w(D#&06`x zt;|G2z8^gPtjx0{>ZM`dNrSJ7J4{jb}%*V*T7RCLo~lD3}L zp*wlm+&xTB$P2}da8-;e_kVrJFt<;Q$9D6OJ`B{;{Pk@;==S`_>SlNHZf;MlUgPHZ zCTM=VoSsLcue?`z3=SW97(vGc&(27~wjL}I=7n zk7-raUy?m+d)i6i4Q}HBr@z+m^B+mBrWP z?M+j^S+Nd2EKHjD0nVWs#ZU^tXCeP02eht(!1V`iIuyk@SISCC3=g}wV>q&}1B30j zKv~iOHRI1)`sGiPrhgH$Yy`<}9PM5uWMY0ySQI^L^ZOIM$ddZ}Xkwy;;a_WY&H=jU zYa`t2XP;L0Ge3_CUfF+?bof8*gGgRq7t0{$8vHgH1>rN!&rGhg+|XJG{(aoK5#Ky| z(>O{gXExK78S#RxK-lj#BfGw|2PHanS0|cetthouZLtW}jY6a(3MxGbV6%_|U?|-?13rIjJwZi^zu62&?r?bYI0u}MM!x4nH5S<$YN|YUAA0dRyP^p1A(cC=Q+k019p771kyeRSV78wav(A<#EM}7q@3N zJem?j#}$6~s~rozj3$o&ut;`xbr7l|kFOp$##Y0H^?$;i9@Ld83vAOnD&Zy99$p_; z8Y)38Jn2y;$-b}NRbmt>$PcXt-HjsK{zxjsm(>IA!;ec!+j!X}Jhn zAY%I7TyYXKv(03+h%G`JKb^oR-;pM$?FT4k$Vo2@DGzTH-a=R2Vxs4|-IsIUcsbh% z{yLh~x_`!|X~cS~hx7B3)IU=E@yBfa4H5szW?wF}&lgc?$0AShPvA|bY0=Ld5dVJ6 zAqK9BgyyUoqPnsCwh_7*T=FYUr#V#h@?6v(;eCKK;ObhM)s!Q)SGM8VaXh93Qx(xJ zD5T2)%HlkD74V_o*m?E4$&gE6zgky&V9^m2i+@w`6|naZHh`$OUGwuxXUJ>{=XCF& zcG#oFQJntlI(M_TOnqqY=sOCM=SYL$L;$$#jml{*6+h9&L^y5oA)@#4*PKVDIk7C{Sy6U8u%Dihdywc zmw#gHq_?xby6Z#8xLe1E0gXLL(L&8y)&HqWI*}(J@uaT5$`1DKDgg~wmAdh!;O_sd zNW+WHvKwXr$QA^B-0MpbB3yxu)h~|LU9Cr0ck%K+!!Q&z8Bh2kzOmhm;u8f<5^%Qg z6Y7n|U+Xs-wpXxqj#o{7mfkIvAV*x)E}R} zAK<%p#*C2?AN|w(`E;s3C7tLH6wG9cVt&4K^;1w$i?cK3|BR1rw--w+K7ZSg;)q2a zHZCnB!2pL5Y-!GLKTEv#Q0|9Zorb%8v9jG~m z<2;F}eD4$`UU6V2`3> z*2<;5yJyZg{Fx)iaZ$!|d`!5EDRrN-9LlP;Tp8jNf;K{cwd=S)lJKAGB!15ZJ~$3E z3_8YsdiXrYkj56YkzKrkG>LHh!S{~X zkMUhUlebUgolBG_#u9o7wokQxwc1x4IoVBvZmS}?OO!t% zHUG*HoXOQ+v+WfbIDf)=db_`T>DLm$zvup>V}XWaSG>;YNQhtd4A>|8TE7VRr%H|~ za&VL&Kbq%We2ze1Ze;(C2n!z5cNIQ)~p|r;BAqDNa z4rx8U7*HC$t4w>Iw z=bDa)Qw!9IPVZ86zgLysb&**1{7kB73;xuG1aF@r5}1Ccg99%rM;{*T6T9Hgu6s#o z!7wiflz#)xUFj|C=x6hc+X#TD-g|4c>hdAt1YRmO@ke?O=q}~5mFgZ6cwU61g$sR| zmlQyQY{BBnNHn%t0 zIL#bnA31&>i77UzRA%VK8BjF@iFUQpAsHdk^?wv}P`aT4w_GeHgYP49pb4MPa&XWf zQ+Nd*bdcfjB9=Ch6HMZV0Cm=nBL(}x7W$*+9Cl87oIe7jd5S%<@iB!-?}Q@{6|@?ttl6^c zOcnBJoQqr})o-8Xcz!*xU?HNxY_p$&B3O6qa2wW5*f*$DevPkqVDn@rf!H%ed(>=9)Y$o}3dtRyenTbh2xU zdcp4|iTT%V%(!61dzc&QyPOXPn)_jpS+mTmO*i#@&orY0SZ&K6X`^&!MK^?bWpT(p zHPk<(`}TG4^qo<~@QDYV`03GyE`L*w?KP)&@b~uFcH1h56B)g6TaWI~zpCF5?6h1X zcZV}?NOx0^1+x;(ra2AwMl|g(TH2$~kr6~xaN_0l*Ig&{$1fP$$JO!&50Rb4%kH9x zzXek8R`ru;njFeC1R}hb%+^!(=cLFoZI9h;H-9DT#byRS z`If-HaI9VTKb=Do)TCCT6CXtGDYN7+&zZK?aLB9Rp#9`W);xz+7P1x0&kTwldKhUH z$hcM{P_zqo7B?^xN8B;m@U&XzF!i>rJ1oU|9>BIa56 z8<8zC>JFk?SOUtWb)%kig|j!YFP_)ox+l$sDqk;UE{yP$toHX%UxL2Qp@X4kt>`7j z2@=J-B9vGd=|5$`dN;opqxDEW5mf&mH>Ua;$=QAgp7~3s40wjI^ndt-4}KRB1*Imy zg_$$~k50uLtnpP{Z<-Yw1QN_nJ5gYtef`nZo{V@8sMw8|fwyGoJ;4|vsc!*kKRa;fpO2f~s>90gLhIhA4Qg>Iy^b8S)%d;8 z7>1TSb8IMsg<9-$8sV9f_R}wuuFQqC z5DL**focwCAa!zA94^u+IJG*4V7&J)v0~o$`_t*FLWcHa0DmfdeH!vFE9K&5_Pl4M z_@+xggvS7vWD!t8$3ZXp)*B3B2pY0MeZyhm5epGT#=_h~(qi$owt9W9#w3a8AKVNY zpGJ$M;VH4<>gA|c$go2l&*#tLW>zK%?1rhO5NDLh$#Wt!GkoCs8?Il;AJjxXt^T1r zI4~vb!ictS7=IhxFi1unBK3;g(WN z987;0=vv(CAW;uj6DIH3SmO1Ngdb>!l1-FB{jOzZI)5H42h&Mtu?dXZM`z^X_C=l} z{jDZAgYJ!R?c>!Xl&hkA6%n7)&SgHf53qE--Qx2|_m+jwJrnT8cRegKp^jBDHDA|0*n&UH^O_37zCTQ z*2=0ng!we(Z!v)%N5ib3tMqS*j{e&+W^tcLOU(29Njg*QTt;C+t?e&v8M&?8=fSCc z2_^lCb|sSvddue_opLN!K7ZPpe~q55RmL+y;pv6-`hf|^V|8)wdwZca2DIV$&o>nR zjejBB;ipX12=d_8-beUS9Ww_PZRMMA=Pl-FzXE8@4E`VjJHrV?l+cVA2XArRHZQ-F z97>X2FpgXSqaFJS^5jtqNXN0c&|DzZ+IazitiTNOApfq)c@wg{@k>!DAQ2tDPE|m$(dcuZ(mFsdc@e+$* zciOBwMTx?iqcF}8I5QNpk7|Aj#q&=79XhO^@=E3(eM>YC$3V8nYKaVR?x$CGJHc_vSaLIOx&5gB^4H?x zJ(nPl>1E+?Z0-=sR){Vnzva!)?4tpl@9G1N8{hn55D^e%yBdfp@yAAt@_+Omq+ySX zD?9NXD^<)iLzYDDow93#>i{({%(04=?sJd{X^6#KKU$pmB^_qA(Cj;9FDOF~3)5a4 zdVg{=O`i6m`Z+Kh7*QtWuAd_LELuc)C?P}#EiPtv{GdM-m_{36bwB}Xb?yl^vD}(u zlF9QJAHok@X?Q8qKVC9y$bUQv^zqoV&jG4a4dC2hwrFV;p(+7GlifnzlX8JI6(x*K z^~rOn@J#_QOzqf`X^9wep?~4Q0L=rQI4g!A_e$rRQa@M(3AEoBg|XpXNGj9T^_|UU zuOgE-sQ{fQUF{-7K#<_=p{3mf$O1xazVSS}p%)aW!DOHLWVTQYE`O+>6#5Co7j%{| zAP6AEh-|b+&}J=U5hQSvPc&iTv4cD!$|l#z5MU%;W&cW%#;to_4;~hGi{f1qX+ss> zcee0!(6~a2b7;nRh8^DD_`^54HcQQfVqEt!JMzZujO2^=9}}!EWVtL5kDJosP9!EM z-mjoMf#TH1nU-L5f`9c6Q(`QOIf*n?<#poEky$H6BYUpR7zg9#2bJG0M$P|T33#;6 zsrn&B*c3zzQqX`gE?-h5ZNx@5lnoS05xSlB{_@!yKCL2cWc?wZsU0z~`)IuEnKKEIzzV9^-a94vS%Kbek*BKQWPb(?jb4v@+Ys!j#$;B? z9_QPI&XNd&QeM%X@c2Q4_uI^gRGQcFuJ`a;!H;AZB7loXa~0R;^nu6psPJ-jub(v6 z3BA>hg52E`fXK=Iz`W{brJxu+gxaQ4&>u$tuO;2g~qV4kJB)#Yr3x**TfqEBd* z*6h~7`j)g1r>6WB2Hp=VZX0k7{w*hwQ#$>}&~O=WYA){=`Z5Nm1mkvau4-Mp=((ZY zshwy0sIW8M?8B590(ODZoLRr>5lcpK@3Yjw`b=+zX@AG{!hAOJVJbn49>6+e$;H}y z1mWtx8G1R*nKr-goRF2`L9^;cGM#*CaLgvCplsaOq0Vtpyup5mhZH@?eBrqA#@N+z zUP&K~9|po1uVmd{dKq_;IRvv(&GG$Ff6t0Qh5C5yPvS{CqOcPlUR)oU%z%4s?$Xm$ zq1}2-t$z)y>ko#9@{t7>G zKlCPpqSD3agrm!Aa;_K}+m#4ZqzPcC9r?h5cYht)3#)*L+dWT~+l9WeEx4+le2~}| z0y(3Hq>WaNA-5Vc>2BCTU0KF?>up@+SP4Jj9Z*!k@PSc$yB?d)yG2)O%G5+(wjuz@ z=8s~Fa(6++Z{GOZv@xPuBXZvAD= zlJ4HST{EDHtdahis7cs3UsunVBp_zs2y_9!jxuV27rlRie<1krQ`Av*(n5-t8b#Ew zSbI645xx@si#uBWj*W5Yayp8pcZV)kP=62B5yF3HmvG)Sd6eWKGWlC4ASlM1qcIZh=bNo%v1&3W4 z<-nIanaN}S$&Us$1wc8cz`bvv#x3$Nua#q7?$e{C?(0T}NsFFoJV1wK|KXm0yKsTC zNGyGPPtiPeGLO$P zVJ_eef{r)c4gFKpo90RcB%A<_iqjR+C=z@&wfJLf%3C0lrd4l0`A|Uv0DqMw)O+Ge zgNg^|33(>RigbPz3@j-#1)S zSku>Gwe-xncjrR$2{F0}skQ=OFE1>>d)a*Y*;h!a@K+;ILdR`4uGpKNhn~YiQft!j zoPY?C*YW+$5iVDjLU(+XD1TL(%vD{ad8oe~0haZ~sb7^^7d7l^=!^^G3%a9QneL4M zcnMh&tJ;ZO)6*-r*cZ}FOG2yCCl@j>*c_}2D`WaAtqZszmV8f)@OK*@Vu1@3*{!)v zmIH5oi{OPOrV+L9&J!s4P4%omqR6)i#tfFL%iF2XPJ z)}Nm}AU1`9w-4rU1P4lG7qX?gI~Xm~OJ{T69UaB3sac)&g$t~LAkWBFyOdJN#ZHK3 za4{}=feXrq{(rMD3%7`CLdFVqo5@~S=m$0!5d3&|2FDSk9k<*&fTKjWtsMo=PMRIp zw%^jDS9$tbEGX$o@b{nL+|%^ZH_-3VqbXW`yaVBgCcR?fE~`d;>sRxyY_!K*vE zBo4p!(PttuYP*a&KmQ(H@&0bmgT~AanKOU{JXO7Hp?|s#OgBg1h%yze3Xz39y$4;) zwx&Qx*+gy411tRj6fu;hZ^G1?xc7O4{^~m$*H9{Z@7WElZHZSe(`8BHN)e1=y4DjO z>ZEzG^X+Ex)FE;<6X0umzS84{E0qP+qlc8Tqime|Q64HbE&lRIvy~H_jdaSd6TY}{ zu=PDXJb&|~88pES%J&Tc%qHCWK)qhl%ia#DvFYoBM-Nq>DVhaB579DclgCe_9z_`3Hb*0Gc~+c{7Pghu90$I~u(5#%4Kk{m;K0@2 z57zn?7#CQyJpNEH)QpdGIqP>d@O;v~C_*%&Re#uZ^#J3GVI9>LH5v(=e#$6xu1uKd zIKXtF?3)@LbW){X_pk=b0Xa^}Bom%ka)K!E;z>5j6hAX6aTW|Trt|t7g0ExcRk-$D zN|r(WR`*6{T6vQvm|Ka+iCh(`B7-m2lO@)$UqXry$zL6Hpq9jgznc_zD@I^6W58dP zFn>y#HXGq>3W52bPp|!clYk?1&O|rt<^H|Mr!0nFVPSM4w@~pBqq1*TNP#W7KS`sGhVa^^Aj_0Un+_%0CqY`ea z`llx78duD6<>}Ehc?;Rgm9moTebUzBhJP`ODWieAE*k;w+jpk31ciy@`(@bj0=ni8 zJX9T>hP=-aF9M7vCBk%#LEikPvMG6mS^F2(#-OIn3(PgPmyBW1)$KnMT!f0|1L_d= zqV%LbVPZT~C|LPgEE#gVy<(~Nslf-kzX+gU;e_(BnhE($5D(+7>3ECYM2!6P8h@bW zE&4sQ_}Lis^^NA<1ACoNzUEvL!f4*ozLrAsZ#(H9c28dB9DfIb;cwwLJdx&A?$q@L z?WwI=`C^N@ZwU4W+-PFq#p8Vi24EIwuq1bvRm8*eW47aV5lLUXp^}(vE()c}t`&L%RF@dQ@tV9p9Ig!_B-W>{NS(<>%mw!v(T^+`f&vV9rp#hBlP9 zu7^P}CB5=ccT0LN+(*dfCTkMF6>hFBIDf37*FJ$87hhUkT!=J|NKxxBZI8C^{6-b#H^+bEeNroF zcs+d`FqTt)oA%wf!S^ul_T-x;$7@fKLCHRMS9ic4Pki;_^QhwZMsmHa4ra zYyh4(9HtZ#_CR2Vtj~x(UJ0n)K?#pd!SO`IG01o|+yol&DCh0qe}6AC{C)x1yeZsf z0^RIKlcprj?mjvf%^ddjT=;}FaX3ifBt3ke{vg@S7(MlVB^oj#Fk2u3S|;9e1+(~; zuydf~ixS-^5L1K**2^!ks-Xz=ya4U}mu>HNVv}F2*5xn1;8T2T{y?$WqJx9^dnm%1G$0EB<6HyatyQ3H6oX95A#lOe;uAZHcCq!Doo!SNDP0ZI>eLX2z*0t~QM;J5A@7mm`FhR?? zUI|ua-NA<0Trh-cry!mQ-IjSR?Kf8iB*WCS?*?;%ac>R|%xD-*(U z4yxzsgp%DaprW~YnjTF$RE$EIq#s~Ye@(J-6VG2Rwon=eHY{KO3B)4)GxOL%Sp+}4 z8aDH2&D&zGdqIjI$HB-1IRTD%1}fd{z1Z$%GL_$l4i>sC1kgM<&ygZccBauCKuA&) zq$Gxz_!ttWOxw zH&~(t6q3<31%2DEjwPEOhgOaC)+nIBeD4g6AQua{*)yb};ADT?QLf`%YP}N1W*@_K zjX|SCoHBjG_eBd-K?y2u(s9|&WJr%0*r6_fltX0P{ePCww!>`vy>-UeVphQd{e(m= zW~4q=&0-<}#`Gh=jO%HxRv=n+q*+fCUe4figLS(R+;Tn5VRi(WXNFv30RGXayTR{B zci2`mKUq`c@>A^pSVu9*J&uzkv|Mm80qQvvx8jdAnl`U2s3gx`#$)%m2zjn4c5XlO zX1)1<4}ZIqp{Ox&w4LqWgsdfRr{#Rp?T9BMsv}&-S))Se&37du< z_T5UfS&IFQRIK8)#x(2A36-?>*^T&`L!d;{&KY4gdhG=iPyF=t;-QWYm%=2EUMw*; zJluvvW1b;v`LD?gfuDF?h(+`p;K03~Y=N#^wSUr2zk1hKrbf&3Fv_@1O7Y=BvNwv< zh>$beaF*vjejC^bcFg#Km)p1XMY}z|4 z^M5f_rgob@eReJNPF~{r6}#fEJ-81}3yVSfz3%{x{oK!|noiBC+M=7%Pf&ZPhx#(# zy~ZbsMXg$gvhUMLoL@?mkI-Y!)M&xn@EeaeGrQIMIi9R{&%jqrJ$gpy6SkirtqMRh zi+3HRY#=)~#IGQ*FTa7tBuSF~f&JlKZ-0#h@GiXuW@pD@rP;=RrA@a({?Z z@_DmJDNt|s5Q0|{!AR1b^HO5gcG1IAH*^V>kMdnGiW+F$^Il4}XC9IXx*@IEN^Ax0 zN5OYS6vqpm(vG#Hck#!tw?A4=)0O2L8hJPLv7#uiTYsx|9O;Uo)6EcI2LA zsQzaXg;HQv`BL{c3im$~Lht45Jb&(&^Yn#2a>I%Abz(yHaIyQ`B)}CSo$srE8yPJ- zPZ+s!ntMRGH|3Ky{i^7=mv}I|@pBDcAPuUYqU8gO?C)Xy<#Z^$#6R2>OIeJ92LrUf z<9bDY?(#rJ0K^)vg{$;$tzty4LJvdo^Vx*}I^R=RqfUi-4}cm-^_=ndCEvrcaE0r*niDKzAhd$E);eU>OttCogm zN31vrZY(Z%l1ICiA_LqYG6Cfx9F!`V7ZK(SPYY<9`QvZE{01W|cD-^*P7`4h@CP9_ zvrppVnsNoU2;6iB(dSpj9)BLg{9$uu{x?=Lbhm{^8vvW!#6FrYQd7;&0HZOG@1HFv z7CEH2C{%bpWmhyoA(Igb43@D^?6j#U)cw-tB$| zI41C4Z7bi#j|kaHciFpfa6#ck?9k1FS0O-hrXjw|+|7pQ#w#uPtrH+>o+4CDY#i{DLgr>hMo`ykKwYW^7z zWqD@l^<^QE7F^&e(qhd9=g1@u26(|*?j^o-8%IFo0(pb-bUw2?}nUu746?l86`QvlF2=J8fX4q!I5>N>EC)`T>o7Z#3hmSeX#a(gvXr zUywyf7|%!X8-0Luv3*(!>?(j8rnMMrW;(}?#Kj^Ogx{u-3MmnOGrbP|K@oG}6r-^u zfGH3TY|uSgi27q0QShyWN|;(DtdRaF_Ejw>_2H`Lb6NWS0Dqu$!qH}U0pic!m6`h8 zlF(_#lu(7ES6q-0>tE2-h11h z&ID~IC(t+Zw0+18nP~h0+U7DY@rUi(&Tt;=3=Md3wps)bhvcChl?mIuK2-W2fz#Ec z@Q7+Rf_SK6W1yf_d zWaIx{;kR}yjlzmaK9G6&2WzeXS`NNGUBeEuM9q-Jo*JF|NXjOLZO;4mi65%#;(UVC zOKtff+l=rr5Zn8n;e+v{!?njUAfSE^^vg~B8XSLh<9{$QQe~#$5ShnRk~CM8W!C`y zgLyIbG6O|ApVU_y8}q<`Kk3M2ihe?Sv^NY_Fjr5Bsngys-Bm~Wum+xHbq7||{_a@^ zo!nb0*4k*ZD25y%BbcG#`ar1yF8CdTQU@l*;e zDv)^6-U;>m+C4bP{6x?`v!A9ZRy8Ab{@msSo6R3Atc$)Q_=^||FmNqHqBY8nK3RJQ zcNv6ImbJ5vhpK>mL#g(%`-sb{HRSzkZA6RE>wmig!SN;iD=31x^YT_AA#jzhd<@{_ zPT&AS`}bs^F}Cqof&k%Z-(I-Ptt)H2H00)(14$H4Lk7hzIe*Sp~le{{ZHO7|ea*r}};zHGPHPa%nW*fq(+ z-puFe!aFTaX@J}y)ph@rZQMi1VqWjyy&d`M&HOw&%-N}F<@;^b1*~y$BV%lQvEBG| zQi9{xA#Tm8suL+1poSK7W#Qs1o26`qfPW2Ce;o{~%^VJUW+oNDdSzoAAZCPvL4XP^ zUzR59nJTid=^n%rsV`s@d-pNHEJ`kNzChfNe*HCAO4sssz1hg}|6YBf>CI#aRw?-> ziIA8D)&={Gj0vu3kJ=7&*zBcHw(GKRtQLqvzuc&UFb#nC(IT z=|n^?W}8JE@*Se_B5L*V_Tr%WoKgzb17#kzTcHtDhDXH@zl+c&h9xPLZbxd%AkK)!Avs@3?zJwFB&PjS_9 zyPz$K&M_Q-7+1p$YPo-MUpxk9>!E*##G5$N{H8rKl4d-FTIqP9NA@d21 z?PQvKY5~r6Z7kyWM}Iuu^v?XgxJoln8=Scs%F{2JGl322TK(T|VfXIOg2@#W7>c21 z{Hal*-{91FUBfCPW$_(dBK2p;4Y$98MYTtWwzuD(YgNCHz;U5hX!eB6q@#kofZL4yJfmK;!vu(*f79WMEDuSeTf|~it`G&c7oJ#1Sz@RPszRV#MOZ(k;}xgr@T#t&4AUPg zw!-yu`xEv;1MT;B_b@PFc2}?D0!+AYyzP2p z-X{C8U0d>=>dSfqrQ?57Ps;Xo--!!m#R{S$S|Blxb8%ZnlUfOXJwf=B8%Wb$!!kix zS(ih<*omUzb6-yb%z`4N!V>E??_{;n`vO?X9FTzj(LPnKp5*?T&~zzP$V$Yz2AS2as+$d?fG!CIlhh> z7eE2)5FJE#gxY6iS<3=f@M1OIN=k8Mu(anbHzo%;{74)hfD?pXdq z-d~TiCIa|ME2kFZ2q%*@epu@~3mA>SnzQ!36(>oM198$`Qh_V`v{I_lSv$s?6Dz~mT0LMsFBQFtn;=l&>8xrMRKriTngs6XiI$CL$6>0=ytF9KCcwjc@ z{daQik^GJ|L!RpVIAQ!LKKL1XFp%dkGeh({zg8{WuGgI^*m|1au>6p71&z zM@wN9v{XHt_Q_XhXx8GHcyZ||sYM>k4hc94PRWv{UC;z@L1$8`z36BT;$w`1ki)=c z(nvMmeUE=v2M%yL)2~@ivfD{Trfy7P6GO&G!R#163^M{-=6u1^2a;_(u?Lmfaq_ad zFI04eB_e}0Yon<_qT<7fJygwvmsapoI3)9J)^>#?&tSi_p!~3z!HA3CZC0AGt?mlSIrH2SOdm8MYQ=Wi=Zu}V!w_8!M+r>)YR@-5V^CM{ zT|j>yu;j7$YS&voPO4KG#=X3Wo*7*U0dND}4-u{LoRB)w`GJT4$ z=(nm`;e#sUufO}~U6WG=u1wc?xYXh5=7(_}#>H(l#xeeCSu!|aiuq-D&Lk9A$!{_i(vAEs&g{h3?~C?i(4va*gwKJr*l32wEjl>ifhsY$pHtI)EBe=UUw*>^olRjC# z>w^K>hQ58sm<2gI?;f}aVo>gQ73!Mg)-9AzM?H#Nc17??Gi z^(nf_IAuRlz`@r)+2NPHA?bF-h-BheGzFSgL$wciZADrh5wi3kx)S8L4_8|i*eU!( zU<65FotK=cDc3{DyFjTnN*|+zqs~#ZTl9*oOnljv?tijSN98om9Q1{`UK@X>pIwfp z*M?0QxE`O*gG7L>ftG-WeAfsRJAO?v%(DfD6Sd@NmXD$3^<;~lA7kvUQG{1Pf~}Xo z8GTkAnb-?7V+5ZAj3cOX3ce?zt+e_O9-x4L6UQnH(46M@SWQA`1Y&+9Y<0O6qc`_2 zR=C>3qmAl_uEU)g*`kOEyr+MxW3wo&U6Yeee~zg*TV0V{AmDm=cahB;+5UO41cW%do)H6M^5 z{fu=cbC>#!0VlxU1lm5{=Sf!Y39&*^F9x&RhOpSYN9;ta3TGSOcfJ!vEJFe7O%Om9 z50aIiEj4nfVED@*A9R0Iavipz^bfEekY;$p3;?m-1KU`%AnNgG$3Bif7aRFzt@R~DHNc~u4*UfExW>hmwJ`_K^}bX3_o z4V(aih~A_bq%LiNqn_YczAWB8wyKPZ_Q1^Vgu<55+;F(zX4-$q`P%sdwg-HJ4*_53 zt!)&xORjb9b?pRsi;n9R#l{^}Dk_besqgqcj5#;!$rLA|sC?L~@wem#ceUwGK(w(; z4azYf6I#Pegcs7aA41_87&t8{Maw46w1BaQRI9$-f??o*ww!0WUJQp#&;~1xB0%DvWbk0jnE_*<*PYyTOQaO;h#uv&LM)~8l_M}37*i)e=MIoVX zuqs-QXWTlBx551kvytTeK5KMCA7j-K=qg}+e7Mxgq_nO=xeF9X3NDNgkjF1fqX**L z%5tWvy5oQEvpdwG2+q_&v@<^I0D_dBTT-ys*+NgFSZ!y>R>&jP zS_bT|j}w9j(Q640{#PV+>X3F(7-+Kxu%ynwT?T9l3=@7D1eL+%=DfHhE77+Swv568 zJf6QAMlZp~BemRF%9e*rH}}1VZ#i(@y9t5k0N+G!kk4!jPblTlOE8J4=T{`zX8X}_ zb5MUdV)U8xuV|#ViXgxU>HP+XOYqPPx+5MvKpKw53WV;_-CnG(4nUG|rxmZ0 z;Guj2Q$-r{5b)J%iv4hPrpjJAGI+0zS)Uy}w_ zRvn-NKoIILcC~a8oantTA)RO5w)oO>6#Re9dCvn_A+>K^Q8Sw4;B6Wd2WtPZ6tWb_ zj8!>eXmLoT?_@Fn6!NEwAMYNt{;PItDfg)U<60>E2_mU!Y@`}}C%g?bRXqIX_**Xe zuZdoSU=PxT#F5~JkYKEPiH(i(RcgOiB7W*wvj$StUn=>zhF?(pxWNs9#srbS1FU}~ z@ZmPFoUU*&l=%8dy0JMO;a>i*c!R6x0{36h5N=qwiUcI&8!=PXjPR5_Vbt*|gxu_T z+`txevOv_Az~zR6U@^B4i34d?-+;j+gQA}NUe=nl$%d`j(zwbb)b9ccls@z_s`fM53Z!=1G5K#KGKii|SKO;b*Jq4D=1Hthns+@=6vU060H~ zCyN@&#Z!5Kj-?oV`R0Qy&O)i7pUC`~Pkg({^!aP;=K zD?CGN+QC%4;44jK%(Yy{f7`qXI&`zd?$BB4Bp`q9v{g+Jra@sAWz3x(kcJyUp;M?C zQ+$#l?PTb+DWn2uh5U>^)EKyQQVP9%TQ+3T^in4#?0z^GcaU zozs7dXO4}f>?lsf%n+dY(3+`EL>;LwNKvFTf6p{brqE54ViJ{AAt`?Y!-}Yk3?4_@ z_#txsq5UUp;u#B?|3j!*3b?cWb$nac zFZRa~InbC5T?lkE-Yc=1#d+qkixQ>ToNTMz2!>xq>U7V3Ma$9xYo#fVdbzN!~SmAuu2^~E7H&6X^?t%txYdtmhf)v)}hoY4YrH`|af~ce14Hv! z&#GeM9VOr)%79` z1EDN4odS0GIAfH3Fh^r*x@bBB0~Ek=8MB^7aWhZnu1#NvXZK&7$&gY048-3TiW8K@ zX*R=Q)}f&pk8Mp~6+kcgA!e_1tW-kV7RPRGl)absZNClL2Bm zS%uEs4qb9RO$Ia=61mN0I9#B1e|QKwQV?`5k8s{x%@Q*jZ(dlf1PzEcGdGj6hdnpN zx)d7y8`CrYg-RKvnm|huu3y`dwq&gmI<;oia|QQN2ylPA81Qb#FsjG_C->SeK5`Sj zMLUo8<DCKr_bTP!+4ToP=q(lo?Cz-9joPHT>YkZT zDm>Zg*IRL7X%jvIFm064FkOfwpzWVTmClPiNhy0w^5f{2KXy`I zwh;DpOXf1zZlKu~jWFD21)SOWgR3Os3XOXQOZo*}$WS5%Vswh_VY~yTs&mb@rn`3Y zvyjlxY!e)VhCj7aVfhRCwljHiCqvfnSF3YuhT4BaY~u0ZfZNc?4msJtua>UnV8<~O z3j^`iV*w_N{Gde|#umAj-){#BoS;<;S^-JdI6z|qEknEU!fagS`42ZAQ0| zr+8mF0oLP;mP}j4Vm98IEzgk)oD3=!B9ea#6BSg!T9p3^p7-yI5VbMr4!W#1O_m$lF-^etDT@h83hjjH@n2Y8i!8sx?xfIo(< z`RcH#*&)o{w9y_pGWx|LB7XcM?c3#lC8qytV% z1t=@{g97M(UrY4w|M3WdQ8<|OU{Hd82lwxP4c7lY)$1ckfW1mY>;atfKMN``;G6od z@p-pwxT9@riW~oWcp2a||NR;NeolO0y!6xyunJt7@Q>@i(t&?u=zm}2Q~ZB1a@q?U z@Us8x=HJH?|9$9p)*)5-jKOkc!1wc%{sa5^|8;3|clv+E84lT5J|}I0b?6YXt8PsP2i|q1b;)dFSz*b zig^fPslYW2(vt86-t?ZK{NDyq|LXQvu>eQu^M~{%^_yM|3C(wsOA#gSb+&v+`-D{M8h~ zar|#;EqHR&FJSOR=Y@Z2@qzg-5;?(`!I2Bc2nI95nA^}S@+2rS1C}5l;2?AV+aUFn z;csP+(K!J>>6}~m289~p->@H}7pfF2^Wa_tynaW;5@P}aF+iH|0HNHZP*?`Cp|uXnXPk7prU^g7A9PYv-u|Wj@b~z#W8uG zU%P|ovr=Q-y9@^4e@?X?((=2Nt-nudgp=;P?X$F=tHF*3cBMPgM+W;=MCA2%HgF!r z>xuN2QNlC!R}c9vs@)TA)T)hMfqw5OYIhLv%!Z&qc&PLb6|DakL{3^LdvUPbhrjTE z2a`~;IE;Vv9_bXe+ljG5;#v!Qmr%;K421baa{>dn-pf~ae6NQ;@9lnF_BzrDNV$3Q zW8R>01PPhZ(cM1~INKi)K#mfhes8`%Rk@cVSl#i`Vwu)SiE&Ul09C=%6^a+YT({^5K`On#`PV zjTJc)XRXhADx2xkQx}PaGZ6fYB40BB)w?kPSi7){N`Z~90I25LcO#L&|7@xC_#s3h@7X2Vl6sw9dZk-;RFQ z5Bm#;Dnvt}qMhthP2mH`2h}{WnRI`=dv)+hM8Nk=)~Y`Ja;xz?8kqsYKQ$w{3u{so z9F$Kmz8J}{ym^sP@QAd@Nu=te5X=z;5|UGaWV4>o?FmPm$u<6tB+Qd-KMVdbQK_Xn zYD#9LwP%?(F4q5n7_84%@j@zv1;i=7UTGBwP_5gj@Jo4Lz~GS9;_VF&;8A})#yw^x z5W3#wxCQ$>ITUcoh{hyi{|5OGJ^j3Ku=w@OU+^ik;zJKD>>4`}8pB@k24;fasI^Do zs!Pu0P%BHII4;M@3lm=&7|#g1rOd`KF5?ouEu^URs5wWFe;I=;6*Qm)$q`nL>afX%}O!02S@Wq)W>= zQ0oD~x-@>08GlIoIErrP@xKeZg2nckOJB*nQ?2**pix%q`SzWwLP9Eo6FqEQ9xb@N z1uA^-LK%W>2`qmjh*yNL_PZA0I58A*7a6X*#mbBky(Z@d*^zE)b~Sd_Mj% zODomq(p_MfDrQFp+vspw^sJ z?LRDl0pGMvH}eSySgU^lv(LF8BRw@=LE^wi8;4E3y}S6*A)xli;RxT#8W5mlkrOWd zn^?9(Fv0uQCHXU$sAh-P`_IwXUrM=GKIbt-xy;KNeEHim)2Ml$z?W$>roWc7LOzkf zdQuC57dB?Lm3yVIE_C^uL{aV{Z-=z8KXzA%%L7ADs>t+2Qo?^5!zmdT)^~A~r9E5Y z7$BHKPIyHhLXYsz&MJEgEMI|#t}lWJmdT*0wH9LX2A%uyZiOf8?rnr(DZy22+WEG! z4k~P)@68a8P}eZx#nXM)+Q907Ro2naE=Wi-*81=Ak#}Bp0QU{x{`?ZcW0c1a4_-`d zN{MWNS2F}f&=Y^|h=j8;rWWoQ02(EE_LmTF9({AvLdh;P7rPxwW@AP+A( zKpd8UC6=RqOwYFYlFQ7ChLrM>x}eI~7o8slaj}*GxMYpUIylpG;kZn z;*y{RxYTIvcwJh#IBD!6iE+VhwB*e>wLQz}bK4&cQf59RP4{zi!+iAHRG!ge9@< z=LSCeLm>6`VDD{{#>=sn!^Z(}#|+qLivQ}VdvW*c_VI!Ntm%Yge_2TGaV${tfVG~* zg@rJ#w5?DLFm|!;x~lY-_(0JATkNTfA}Bs8>a;_UU5uAEF*UN8AbcNnPl(dP%>p0@QJ_G}j*(ng6031wDP9Er)0?9RZ$qo=eWQ2*KA;EhL_sDKZ z=!yCQb{}Yx#DU1fp*RsotY(1)1zaklQ)SCY zh*I!>O|eK%e<6HDlpfFqe&7%cFtJ~;?(9fOAj6qKX&6SJ8jup?8-1zaz$6*;pL2mnyvHoBdhvj!M7r?-yzIhYVRjSjq;< zE!+!{b8-4TlV|c(85ZMMsR-sV`uq#{xAj|jLrgM&20NAb+$XY`$Y824t9&5-|Mnlw zB)=8`Z~&5Eq4gy4W^$8{t;~O>w*f6)-IaNWkFErSQicrVm~8jum*Qvkbik9@OUM}c)#4m`E!{7=+n^F z_4iYHov$34D$t&&X@HRa1;E+TgK>l$0X-;x0-4%6l+Tskhtn^3vUY!z)DunRXP>kd zCVD*ya9{u^5b^^6xNeEG-=o|>CX+*E9{K|KK44dEv4m$KKy&#vrpyQG%rx;cfY4q4 z>-1VQ;Nn0b9<;Aj<0~6Lf2XuRSgE3h%M|nmkzW024Hux$NqMmk?GoVObR#8R@dYq1 zvk+Lg_$Ljd_7x&;c=Uf{i3`+INGo|myXn7k5)6xib>TNxwD94ML%tDEC=6Fwpo+ko zI=<6tIJN@$%3!#Ef8y8s32YMxlIQ*}1^6-QN{jyI$)xs;(T<1D@$WC;7W^cl79JAy8!tKwNm|kA!dKRLPF>5uW{)AlqebU zrUEXA`6XgN{eSvz`TCyzrcS9N@T2CpWd+ljF$}iJz+FhJBw2llvjFZIXN|t;$HG2O z67Znzf|7*;KkvWR25I8`ib|;6QW!eP1acDj*zu)SEjsFzT z_Gj-sL-R%qhPi*D>xm4A1V{5R1M~MT8<;@WA6tmq2E90-KH(1uUWk2pXS&w@V$WSK zB9yKz?@tJ2#r;r^EgKSW^%6se<)DfSMrV{R-W^yB3E-29N7?|&j;O^urh+sQq6k8b4xjTW4pCJzO@7rZrq z1$gX=@150hE9(;^{v$LXD(JNB6LA`Lv&$UtHa_g8&`zD&)R-EeZbbl`0N;CLG8@>l zFJFvdivWMCD7srfMY%rVZ;7*7n*@(!Xb8E>zUBfo*m_VKO#t=aZw|}s{V*p0VSjU5 z-2qkw`d(x=2zne>q5g?*jiU+aCpJ`D`4fr#MMwMoQ-h##3B z!ec6WuntPk2SRX@t#m4#ZNuZdoZwU7`SWL^(4qn2$cw|I3WdUyt+7}2+kKj5pTd#$ zEx>i@e%ifW{rkYyy^`Zn7$1C}goS%{tCgyoF)UiH`+ zF`C!?ma_Z;8S0*@Dd=&Agy_^3)`Omot^KUgS57;n%46Q-I<2SmDKid*)*$o*>;AL5F<75>8<4{*A@ z{yL!4N#rMrvD4t}%Yv>A3SJ9H|Neu#z;F3L`?2^}FGFb4aDjV~AwRL4lg8}l`)&AN zve&H-Bru5HHt#8WUa%18_Uu88ggVJ$3Mr+*b0CLYNN!l-hIf}+=_ph_m=%AoBE5&2 zm#1h^+xDUjH?oaF;|$B72_2NIo_au%41c1ce?#ggL0?WjVf9?zUco97F<@-xWx0nE zZFM?N>>gG!DbXLVWz1rqh{GzERTCH5xJ%9a(dd~E_TEBmXZpEb`qFgaDva@|QayZ% zeKg7IV!)r((etLgp(sIz|A~Lx@lHjcbXjWkqR}sKVcK>Kyf-4rC*61gJgwqqfC8b) z-S=2;Ng(sHRq!M2ZzD;lC@a6Y`e=aaP5}Hnem)u8o+`Zm)G1%K&sFcEbdkg6`%RG! z(AZIaqj?jneXO|FRaXtlfuEKH&THT)kwWOdsBS!LDarUj%=AT2lwxS=T5f zrK|vhi`%$e2z>=>!>!-s&(apSj}{k6gF67>0K&Z~CUZ+SGgyyD@6`Y!YE#>k)jCRk zKk%l%RPlFNFyz%4C2X_KIfRw@pFruNE1lODc7%VC_~zK9v<%l}diNRTBK93-MgP zIy}$*WLSr+stb8~=SR2^&ruyM{-6lQOvNWu5&ruT20; z)mKu3OO#Ud(R{{(0+x0g?k)d6WpA>jxUvL`eh>o$2oQgRH&EXT)Pghv0ct^j05xC# zECiWV`!x5Sd)BH`wX-3UP=trOxw#ofzt_Qu(u+%{Dbr$_z%^3NJVs;m4V>xY?W;Wp zS$$kxq}Yaf5p5=55L-7^(r#EzM+w&Pw5K9Dm`*QzyeJT0bnmeh*M6%id$cxAUYOkC z6UTSq#Xo=Cd3a+PpfgqJO7FLEo!VM=yguC5YJoNt{kSNF3mb z6@C5$p0rLts5}R5Uv#58m8`?yyu42!ksT!R3FaFkYTEIOc0#d!AZ$vwOyuEOJmtFi zD(lN^2f+jHcrcYCI1!PR1rz5a%^{LL2h4xq%nxelKJUwwK5HhU*Ww0((N*hk<+H;<|>?4SjE~`sYj-YwLEwb{k-}}ya`yS=%^Exc9 z(NihwTFmM7hB>cJHbygho;UAwcIhQpsAY5H3z%tuO8B^~njX_6_ftIGjf>+JDo%eR zr-wb(_$F``+zKEgMva8J3Pl#GU(#wVlmN=0w0q+B)0bF0dgCnA6G^L%_S>65U+dJJ z%#3>%LnqsGK?kHLll27jMI(t+y=TPW<7j8^_A6|^y-$VZg!sx^5gL=cC47OAPqf@)0$RIj`ys5jS?uP3g)oTN#(dlzPo6rjdJxEu! zwJqZ`qPIv^`MRsODW*RI_6b-+e?Z36Fs4#_Turd0q-Rz+=<`?h!Exi6%g}$4^MbPn?VJtvk9fb&^``eB{!@2ZGco*lwRu6!0<-^kao}=K4|W*n*KM`nZMh5m zneVD8%+gH1w+U0cb){x-ENZ&D?V?=Ft(rr1S zwmD2;v}ql{7W;Nqs{4PWSuT!8C*7985{fpj1iwCL$_Ip>L`Yer`nzb?t&Q|?af3S9>EdSwoA=DVnvL36!7q ztNFe4FD9fE+BOC+YCp@jQZioG)Lq+){$!-&naOLjr*74&vw(l<4bpfVAI$V_eLscz z;?ip{R+yOMvtOoit-h!A>VX;rCajQ$zwUtN&t9vn#gKspXlB+w9*eQDfAdD=zfO&| z6IW}D07H}ddIRY$LBp#o>del?oet+cm{H*BxI?wM+^W;3sd1M_s=nZ6Gi_^79N(Ca zem>XFQUfVe^E!XG33-Qw9dc*)WjCElNlu+=4^1U{U$kA;3I#0PFrlcf6ObVD==^$4 zFw&NQ(kF`GrtX!j_v{JZ&n6|0*~#5;Ek#^nMB|6mHG8jwkI~M1?iTd3G2>i6L;@s+ zpcVyNu3(EJB%@B6!?-+?UR4=_b$iX+?HXpFerr70i#&fX9$@-FmO%%Z;(mP6JnEuL zwzQkO{TQ@GFqn}=kD#VVFV|6YKb70b0^%pT8wmAM0;i~ghWjT= zgKFGsvz3lm=I^12xF4tMK9mCpx%BVFw4ItuVgl)8(iM%G-JqHQR**e5g% zu_8Xu0`Y$>x+v+2z1N!kTYp`qeye5IS46EYo9$yX(a~N;LFGMeZp}gE+sG~X%p_jX zXm0S3r^RmS-80R4u5Z&wF6H|KVZqlR5Zso$ppG%nTy`cWIO|RTUugMyi(oG=i z@005V>)vKJ2_8W}m+r7F-AudFG~d`a(Y|gKH&}myH#Tv^iM3#0dqzo4+_V7(?BQ!% z6?;re(MyrS!7CH7VjYoqYlb;%6&aXhHlL%U+jz?%9K2p z$NhiGd>Q>^`yOW*^RT5p~t-QT#)|h|c^z`H5u2V83%~F`(b_SY3k5-nhBJZU0 z#X>I4D!4+Ja&m=ITD`a}XVcwP@yq#fT0%B#&vdCQ;D{}>*}fWW>?qw(ck%d6gDHPO zib({I)w2ElQ)MnOJoh>FyOqze( z+t8StoTXCl){k=1j8OT{&u31KPAB*so_6n4gFxKMS1b69meX+z_M^78n`<#r9#mmD z23;K1%x*!oBU)umIEw2v81qlH56~RUlWcBXiX3&y_k3@fJc?awL z%GqWdLWi8S8Xatmq?w@GB&N0ws}yg)yVd=Xx?b<>EjqxSdEUqO*j?FylRg+2&>kr^ znoVAhuEAaFsAhHC1o<6s{EIqh;#>tU@51-lReJjq&)N6M)m-xMZla}NJ9{mjui$*9!_l$N5^r<5wC(MAyLO6*zWaTGEBEA{R`d1i_F%`8cuMErFh!x}up~eo!fRsa(vk zTzkw2ookr-K(SvcJl2MA{Z8|4VfV=3w9EW1i07Li8tuPk3=Asu@FQe=9JFM z1>erEG(fHQUeNuZqDls%S?=lzfhWp|%YF>Y-?tz>j>2wkXfJU-qUTF1q|*Dvf_f_m z?rK@yjS@|biDhDCX$~2GeN0}x zCPm|}=N`wnzj-6CK9v4sY(^nk>gyh7>lOel-<@8`99))~@n{IqWJSM7q~{|BmA0M0 zE0n9AlkUva>%~jGxoyI1p0?`lw>IojtjdZ;bPcvAye>x%#p{Fx`-BKBe8{%&Tpe{U zN>5=P>u`UM%&8c#!XNKxbVD(%Y(PrO3ls=G)h?i7`UEd~Em&IW^rP6gIAwI->|pzo zyr(9*Nc-t>ygFF>`!c?8yMlkr7^s~GniV^uaG%X!CgF)8E~75wIqxhrAjEmHKDFSW zqcuf#zGwNOfIjCmHOEzZUpf9g!bs>bfasRz#0r1aZ{Wt*Tl=$`7Z4~c=j@t0QO^mC zBJE>@c+OYBeWXo_hkm$h7Zck7bNz5HmxeA}?j}fHm2zZl_%vQ8=O%3fznk3n*95|S zS9ppfnqGLtb^K^AvJON%gr;yL>>_mHH#VBW6nbagVdlFqf|O5VvrO)^-tD^!h?86& zb$x%&*mQ2O9o*m-Ubutf%)5&nP)SR5cj*rA>HD=CW4e55d+WYD9j7n}yC@^fc+it; z#Dv<*fRm?((LpFfY#(;YzrEwwHs+M4;(coG#Me9Ko2+D2MlBuiy(Mfg%XEJmw>Fr>`jt)n)o4>s*6l77-be}|%Phi- zgr4pANUPjnAyhX=6O6`dVY6$6xM0@ZK56{%JPP*JoM6VMu>OIeIB-*LZzOuX<7C8OTEA zyw^{dJ3ikeDAYNlj4$rYvkWq2s=j5+y3lyM34HQVWb~A8Z(C?@G(*?a)K{Qrcc-oHk8P^U-+| zdu*YJ4X@{AAtd(|Bk#v=d--@HGjl{P^qjiUK>Oz?P%T8(gi}i}8ClD{B13;oes&V- z0}gtZVp@C``A`0oS*y`G-K;Vm?uA-rbEi(yt`k`+Ot&9#tLSm;_Ff+J5%;`RRWzMF zsc2#FD;0)hdkCe3?pB{w*9JJF#D)F*y>H8K-_5O_P63b|(Jy?D->{A9br#*7`Dj94 zq4hkv^H8?xF&>O+deTV}_nd#QvLH{-%`-j4 zv_HlarFZa(6;w!gTPK)PS4){Q#YQ?}IA3sBhOL&HCA%c@U-4yOT6ceAdLF^`BnYP| z1$mjip}Ut5@2E{P9=Tv$D-dOdr1upe+V7J^2z&R-y1TA9X?kO3EQlq`NVa@>vaS|5 z1K<|)SDB(0TJVAiMzyZ}=z@u`<1*hQvpTwhR9;uPuoPNvGUhOfF`I500AVm9Nn36U zK0`hp1ryIz8#?tTrICN#lGCF)wYOZ%&ejsDIBHNVeRk_qmvY^X%8QP^R~)FAP=Imi zREI%xeTWyg?c|{JC;Mcl#9|P zSxwb58>*+&z`zU-EwS2#5Io09$*4{E<# z&Q`B6wcIxlF1o<5-R6Dc46*eaX1}uMS>l6Q5UxONMI*V(I-^;g(>GCv1wNgR8`IZW z%Q(UGqQ*4g)0$1io;%YhP&tvUs@Gy|#W2o}>db%CLqVv8mzj~r=Kh-N6}39M z5-@PF8e_24j89W>_l&OUVR{!9(W!{p+>EIA-hq*H;YX9h8^gpeyGf0EJn85ADlb!oQ^Gvf6&5P15>c-a;QUW0%8gdu8I{ zWIbBd_a=YapD%S&aQywoK30!#^aiqS76D}!c?0f`qj7uV2-DK-ZFExZ``wnpZ%hQ2^XW*2|20(_sxaZV>&m(}PKe6NDjBHio+ z?eZ+1o4uIB!ls`WGvfrkvH-X1#NR)u&1*Uqd5AE+mT9@TwOc1I1>uauwD!Y$!OUM$ z^Tt#26BY!g1&=`#G1y+c#l?N_^Y{Yb8FjS>%e**;$ag3#pMH?h44SmksX$xB#Og-JlNDbip@>E7p(x7+~WZnA4gU> zH()^0mUp$LvGD3ftUfXA$=spB6}z~uECB+ciWw)ckYW%O>r3}qSo3QJdpe{m_xPTs zyhTr7JVmwf$uuOGQ1Sj7JT-Y$6qMF8Idmh!?RpFn<=ah@6b+awCKxRNAk)2NvsvMY znzWUFZ;+9n$EUUDVT$awUYg82zdyH4AVZ2EYy=pZO?rNG*3f2?Zf(8cgF$ zju}sg)=gKsUCWqMc>ALlb1mNO=p-eWy*EQ0vLd{!Sypvm6UDeyew1$*OS-DcL}X>W zTRk?eP(iyzt8|MgB5GkMf;57gXWUY^hfN`wBeRpu#C^iLDC0$spJCbY-) z=+ND6l{pzN1bTj27U_Xk4^Bnx6=++30Ak;4jm%f=m1**)@UjMpfF(hJkdtzWHKK0h$0DMqci#NI={wn=l~9n@!y$S-qSeh z=-sH2S_q+P=o>=F{EX36`rkdU4akpI_0+4aSTx)_9=;*+yy-dztT*(1r27XAIeOt zr~l&x$97U zzpPCvT=QqRca3yi1^wC)sw4L1zE3yOZ5&@W z3cMqqiZ(WG$m@f*EoO5n7B9g<1DOWS_V>fs-M!5=Z#*4-VOfhyIBxJ&Vw6*8$o2NTJD!ty$t+&$#pA^u{Q13@oDS=L9zHYwA+3+K z7MY_3pbT6^=OEhmRdOA_=T8hL?A&N;wsW~4-W z>2UxTs93%>P=+=4*2-8%=7z4GuT8#lyRdNI?F34y$h^DY(K?3^R`-}GyDXF_n_5jY zKGx_x_^X|LhxJ{5IGJ4bR~VJ-`wK$W1T4%(S=ZNXab1Yk*^-2BabVz2#7jvh* z%qQ%zXI?vhf{VjzK0U}z>@a88gB>OZ3}X2)j6ZtifK>ecF0VWELg)=Fojz@7t>) z8V?u{E7h0w(4Myl1p}K)-z#V>y3Ur zI>xgpV6{yz+Yk--?KYm(`ZYOv(rJt75^wgt&X%a(mfB6-U^Z%{8>yt-%{N7Pu`@Z2 zC6=Om2w?4}AQK>!-9EKo^>#V7;YR>SXy{K)q~{n?dgk7z`vzh`TDdV747@xMwzb;} zX}Q{e82M&-XdW&|=2|sR9F01g$H6VJ2>YE%=R?g3r!uy?*Q_o#F++*}1OYjn*K*C9u*=Yy)%ml{Po{F&$m3NGeG2PeIdv zTpw+3xwf~Sa~`SgNIf@4;~E)oVwh#N|PbqF!EIa%Dp^`>m;!@ zqV3gU90}{yI({`r=$jRZx`5$tHdS9rQAejIEXQD!#!`#P&R8EG>?7pVMH)KO%E(?^ zdW&{4z13L^a0TrWlp=rJu0qT)mT4=0Rlg3qc9O5;+iu2WZqBsitSoy36&_?UhlU_OAH2rR?;5}{aD+j?vD?8DBFX759K)(NAhxcHV>nqrX`57PA79V!=P>9S4wbvG!UzH z*MMX(vMcvfAt-n3ynJs?7|Nd>kHPKc>FdSFsX`NY1uu-;d;d0;@_n70g$t^Sxn)ls zOqD2y+7G6UBvEa``a6f#8DE6gbX2{beOTV)SC-Yj-A%Ph7z4dxQVZ>W!TQn!@P$E+ zf1T%%dz{Z;Lwnll*=+e-LAz*P17mD9uX7wesiQM$VGDNT56gmvZ!*=I%O1U0_%&9~ zDFf*EyncDAJaL!sVp~$XSvkVEn+=!o==}i4s2)$(^Yc=HmMC=KbMY~E<~^KEgbeKd z4a3bWaB^ld*^qTeueZ+Il`4t?1qBL~Ct-MA>0JU5wH7n@?xb zDSL44#6A&`LCz;uZP)F!d5nyGv@Ce)ns@HgtLK2@+#SulXX(3Q_Q`m|=*ubydj3gO zKH6dn^WeGX#j6fEZFJeRPwU>-l)`>@+4>Oq6 z^mST8xZc(~!E&B|PMORWS#Q1NrE`G~3$?=t?}b^yI23j;WjpKD<9hi>{Bt-fAx4G9 zG0irpQ!vrAI>X(y6Q8p=7SD`t5xq%vPO+lo$vBcD0La1>?U3`Ln`3tNv6v?OlB-uD zw11Ccy^0Ddt%|3?9-NeepBxl@G5n*ArtpsL-(q_`#`P|Lp1)=nm39+r|7W6HX}h-8c2g>XzVFg} z!_?kHzl<3z-3!GWJ*$A(kkrZxBfQQo3lDV;-&J0=;ZMiW>5M@TxD&y6T<&(v2#%T3 z`Kb8!dBh`sF_56RKZX)jsGJW<-k(MjK$DMRJ)iE(7v}w$*&g<`Qx3z!^!PP-EO?0A zVFDiGLHPQc$?6@jP-DfU9RDo#U})4XEd+<@&SsRUaDM^;%VB`4uws5u#JT>&(1n1x z(D|iTqT;qF?~m4{R?pXURgRd&6m2R^fh{|~3bv@%w+R#sq zM* z?4Y%OrG!#6xx5zd^m1>fuSqIiw9E?MN1xvK_#qB-@S7^UC+lXueDszhR0Nn@%&%3C zfoe;c`0=(VlSBXnM3ozHv2PgI7SY}5&}C>J#pBVv+|d1qelg6&WWc3u7QPkh_r+<) z#evI}l!dt)RVo|X;k9K3ir_6cER#mnscZ#*Q=m7T^6!eVIY4D8gdE1oM(Z^h-zE$& zo6`%UwG_R1!mhMuk4wW_G=S?W4DRMC3+wFjHeQV;)g+pu-i9do@t7FrBpIzI)CQ81 zo!^WwLl(h{?S0G-XuDSoXtZ=IO_r~#eOpqUb?E5&MjMc#G?fZ)Fqo)ZrY28EIM}m) zO?ZMny|4-un#yk0`s^x~Cz6;ahVD1UqMtra+w};zeh+(a+OhZdZVp+gTePO8`QGh? z1+~dAh8jwswhsYRRyi0#A2|F(qv!dO?5B8H63!(tj(%5d82s!qp1REy1+;A$nnb819mK~4Qm|5;$(3QIXbi0EXtAwWm%XleeZ4T zH3|IhC%2ufz%M#1XOQ4N?(I8&E5fl9W{bvQX8WmrdHD`kPLIoZw@;@fKkc{sY9>F? z_ercj=s7>7!*m#=A5P4u!9d=8GC%P?)2#~YplEk-^`?|dG`_OxRqLztc(dM+ zs<3j6x)-WZd9dJN?Ir?$)8xTFb9)b$Zg+oVwH1Xcfsee!d^@K+NG$fpXIH-(pr&fA z_Ujycn)e=ceKK7GzhfI~ztHZ>L+2T{nFf2o-I#?H6Eh|fZyzDKL&9U;p6Jm1s<4Hu zI!MOFLPGS{KK~OF)`jvF{)UQzX0xkAdb2Ubo3?&nUyTsi8;65`b@DX9h{eH{{p3(_ zvrvU!^_;g0t#587|3!!RQB zL(bDB&xX6?ZX{LAmQGKcG*&}EL#FICQ3*YL`O@s^_Q}ai4ZeGSRkmpGb2Ff{$>{r0u|?6txWEd3d@pdm==5$*!yw3&!`29% zjc|jPNuH?rKLku&2adN!9fVI1Yc7|)imK}la@p!<= z@KKc11k=SCeRkaS8zE;peLpJ*%T45Ka$ubHTC7Lq%~?6`+h(!3jV|xXJB43u=m`ROngkhz>|*U`-OObPNj7-v%4Q*ulXrET03&cnn|IH zU4nYYSb(j_J|56tX5V<(V*IYn!QN8{&KR zt%O`K))E@HwOQYSzHjPWsy(<>#PWGkoBDb!O~wZ`np>}B&D6)!adnoCyY#u6TW(2X zW|imW9VS;nPjw#4ym;2tI652K_!6;FD_X47JT@8P70w5=4N#;#p)D}Izk*XB!O!x4 z5(A_TPdc@tjCN^HXXo9r)2D@ojCj>OHVyP!{B=1SO%sS3YRggd3{2JR8UeV8sHd#C z9l>FbJUIs(H9S2%ZB8y8 z3Dl!SyS3`*;h@pE=gXt;EGw#+X0RXGG|j>a%@yfK^%x_cc*|=8f5sjBZKkM#r;Nc* zBxXr5dv#S-rxI6Db8S}B%>{!AkvM6_;@R z8m;`auc2U=EW@Q5ft-3Q`R00%*QkfotFr(fwDB8g2Wq1vJsGlDSyZ{5=Xe?0o6xj>TCEQHp0^C( zv)Wo%;BZNf)NHML>e=(Tlosc>%DM|Ei+lMbHsveo6bNPr%}$aYXcyl~5B7Y0&yOgewd&B=oA~6|U>r3MYYsNdYKnR&Ty;5#r zofn{Hr)Tt?qnC_JucQyv%bc+3r4`E(>c8XZ>mbk>J}KAJWO?#`)ho!&hqgcKTNhp| z2Q=y%OY_}GDV1pJZ>@RYI%D+YAGc^$o;BO75111e%jQkf!_u+@np-hjZslv3Q&&f8 z3?FMvJnJ08<#b~e zCZh;)Fb)qGsMr;Y!y8PA+1d%$&17xzE*wl@s{sR~>@trQnyH_`P`DNtzmUp^esU2q z$So>khIgN0@2)h5T1espW-@qRFYi5>c3MeO%OmK25YBQwan`{?S}ftC#KmpYJ(%F( zVsvqP?BQ_oIK!KTSLRrdTzdp-NC(|U-SUe9~HW)eS+0^W;Zg;KSXIP9G} z`#SEovUTORYTn6U(O&~Ig6H+d?e{{Th_^7Q_J9l)<9lRq_H$Ym7SmBRHQs}G=R;$r z%Fy;z!A8&HdBcZWMR+*l7I`|*^fbM3eTJ!Ws;PNKcT0L^X2S>q;7tTV+=#^>-l z5}XNs=7TPt(Hku(?_|a`21%gK6GFgVne5&YOOIDe%rsI{U4%%RKD*vIBQ)=3%^ES( zcH8}`o5aAfpE8sgOFuDa?z?(mvYSi+v9MAf&|R<~`py(r#|d(GU-#(Q|1+w2Bq(DuAjdCai*`$>3O2QR;W zZCgrS?(Q(8)!kJW+n4bgQ@`~3c#7cRSnhJ6TYH8LD^KxSj$!gT!!nqwS=gVW>>u(2T6xP zu+jAJ+}@6lCuH1tD+b}fTI9!fS!T<3Xphe=6{9cMuI-V=SEtRUQ+TcOuKL26$}8tt zOOFkIosQJ>2sN#GjT%tS*wl#f!ZO(H4E}l&Xp0xd+X1kz&d2Fwv*EK@wBK!iqQ%C9}^D`_4En6L+^AYx3a@$_XTN!H2mB>1nr7UfG*ydk^_S#t&x2BflH{$P}M21;PRv;^31KMv;PLiM; zKP8JfZMSDQGckxZQMiVGCBnrTZ6>>;x=?qU=$duSaXm*DUpTC(!;E`rJLamwS$o+$ z>e1otdri1tXi(kk{j?L)<4JbzzN_Ea*=c^FU;;L=efg%RAsQAZuQ}>&a-KpNEQ|5j5-@Zy71>k5 z^Rz|u{PDl?5nd%Vc8+l4npv~?7^9QpO^%W36~v#>b(9=)Cu**XZd6drPj(<_7{v~} zU?TX`^ML;JX2uAAc4y_{#O&kd37_Tqu4Y2*&TIP6U(%u^V{Sz72dG>Q?|YLkH((G5e0o7 zVO4Jok(2b@vcRb60jkJ1<+|jW<9-FV^JbLr_oEBND`;#Sd7I&byK-Gc9TW?0?(%W> zZjI~0qX+VTMWLzj^9h>Hfb^RBY`~G(4RddLs&*a>3i}WK!i~oaD>VP#|MyQ%hkvtl zcs_p}9X^N+3-5Enf8!EwV!q8{tD!vw0o%d001_^PL&M<60PrlIk`E$@I9~09lakXC znhwT^EMqrowOhI)G*dUh^@`Nztj zJmY_}%iy>$I4ls?iD>wK?iIojV7HJM2|p@ckqKJM6Csm0giv|xGu zHIk3*{%Clt?+XGK-;~DI*_3X1JCRriT8AxvlNwxXVvwmh&&ufnrWzW+DH+2N3J2fn z=BAmDdJ^r}mwOb14Ov65#0e6&M{fYEcl@Kr)dcZ`8V18L=0)SF*{eJJE|9>EAuq3P z@oxwus~1?Z=4uvBhWCN5vwHm74i&XKZZXjZ&!R-l{F~5RWH#m5I zG1zcDW*c$mrj^1*rpSUaz$LIoVO51qd|7l@{H-d$OJ&ZsW%f1&!5N<;h%QflcLlel z4*;2!YfMjJiti!zHu-(Yx&;y&uki(ImaJ!L_fWeazvJigO{n1W8H_KdvO z;XUwpU-+KSYlNAWA0KY%z{5`DaeaAzS_>FG1zMiKG*Q9Oev^n?LYbUxf{?nOWRMZV z@6Fvsc4PS~&T?o-fX5L$WH=8*<&B51lalvGxd2#Awkc%Rwnz9LLrGbgO-?+Uh~#4& zn*u#ctQODeX+TIwNmS_A(w^*8cE0C9jqHUWppVDxTgM<;0VB%T0bo#w$uRIj4 z4m3w~@|@W#QeNElJIc2u#b@AuMh8KyBv5S(h_O7STC~P zJ=Q7UI`e{ag7Xm1(9%^nMwAuXwz#H}xW<<7jD_Nka{x}8?#*7K+p~6e#86Z-0!gG@m_|r{&OC#LtJXec_;7R zCVzVC6AxzOZ^`jVOh6q9WtN|qLH1LFd;=fHx>3V^x-ro0kKt~`b{qUHwDw+|uve~O z@H|yKPhWAw61I?VKZkmO(ISpJYN3_I4EqLp6wTbAd>Jh0P|2Eq9iEfs2=zX18|hUgx2I%E79VAgB+^VM9#)#hBp`tvm&;(u7h=t@(tJM9f}^PQfTGz(5X3 zP)79vTTE29h$WlmB0hvfQRz2`fNSw9sJ~hNzt0#8^+3&;q z!g(NPVYt5_X*aCZch8VDLVWeYO#QAO*F=T@0J} z{fU3%-iXN_zhGVD?_IgW*};4EDSXX^C1=UAhp)k(E4g2WJD!Uq%%ezQLUS@#pcO(_ zYO6Y&!@WRXe+r3Osh+6`ZEabG{eldFiqTo!B6nwha^nol$0-n81_2Afz~8MMRtgfO zakhcHwnJA3FIlq_O$Id`>wz|m#3E@&Iux-+7RQ`jIfCa&W>+V2Qam-3pN1nIfPY-f z^E7vQ7QZWIdoYH>IqGf0g`2gHGlK+DAL0kfLz|`GzQyuJz*!lcvAOz?K6%1$M|^S^ z^6dS8pF88KVO@S>Xdc3_$^5RZP1fZnuYgU?5O;po^m}f|nnp8nCIq{JyLf%KyXMMe zPb3la*vQqb(1!;NGr>Yqt=Xat`3B~{LNVV!9;i?4T*sLbu>aAPqBL|h#iVW(*qsOo z?q*S3CTy%ZtZITVzT5EB(Q4=bF;`Clx-zGKS*mxCAaRNl3oThWy}=DBHrH)+SNPQ> z?4bI9^-)QR@(lSNBZDkt_OL#>;~@FP`j{kt8tw+T>XLo($xYZ#euA}dOm|o}yyu_2 z_HSR`#qh!UoHMNV=bnbhoz{HrYx7+@u)#r|li-fP(j@j8n)5OnFtF_^T--@8=~ShE z4d)B^yujJD>$l}ev74W-_pPKdmzi217kL3h5V$u3o!lBqvA1i4JQnfV7Vy0+3^Uj= z7I@p#*z;mFeoz7rKY2K*kQ`3t9E6VsQm^xHu|ZCV`x;gkz6P;E+)pBua_fVyCFs=3o9PTo*ABSA_6PG@p!yguUIzzsczy{=-OAVh(z!6Ank%wm=*EC4fD%`EG zsAXl`$uOUF<4SC!)Ut0#b2Mw8objufNWn#k1FQ&l&JQ|GtYaePqN9dRP$>4+=a1O4xcAB3k9&=A5!VnSp>*4ssV<5J+myOR zC1W^ZAb+r3{604Jt$-X8Ie{aoIhL2iLOT@3$g|B37~rd@*9megTVFc`6zh;%a8o$q z*=&b56IQC$S<*f{@-&stnHsV<+EHnrGPIcqfhP(xuJq0h zM4gzb7A0uvJT^rOsux&2H8)6jMQ;9f^6Wqfh zAQ(tlY6MOYKMsoThQGt$h~$|e6fbeVa)|Fgx#cHcNU%1;*&NP)^N91zPD#w&@VV@} zj>8>lVqM7HNzNnr+TqVos|;t|CArDJtSjye?62!j{8XKxwj=v9*Ajifr4-aC(g5|M zz%8GDW1e>NhM2-Depm_ z8^3m;%VK*qNK)E=;mq?H{%tsjm58sn%I{oTp~h29u2FbCZ&ZV)QBRUwC5GIc3i)gs z$OB?(gP%=84r-xP_3@gfAUTz%*zjXKBc5Z;ahD^Ds!8oFa$`JiU#Lra4b2AYe@rQi8 z6aU=XLq0@m%5S~-`)p&y9AfWq7N)5Cc=MY#lHUQj@#nREo^OLG>rXyO?mygn`?&&Y zKLEr3(|R8MtS8okrvu2_Vc`;nHa39NJ*XCL<)^y*k!VPOrz*|dx2Byz_XGC+u%iLY}Gb#ys$F32+s zxuhCm?MBQ)foDw;izLq8j1gRMAH-|?AG9^1@fqVg*wd28QmFq)-ffH*i9sXPWsyuE z??ybv^WdMNj*o-Mh8P* zyykFD2P}r1Q>KK!6yi6DXaCHJ>>H|m7rz6vYREmqvEfGBiV<=o2eJ2G@+XbL>*3db zCvO3mX#2Ul@HLpM!pHHvIeYgc`atX`w2%*xpQlSUVj=b^@+b0|NY3%|&NGk1T*M;a zqvQ;tzOt(!etz>O{O%|j!V}JYh`kED3gtQC21)Lbci~PP&iv<2B>PAvFw42ZK7yJB z_K}^LWFO6bpW`PU5{zl~n>)4Y1ho-=!3sX{kmL=Y=iCqbgv8j---tQ!fH(aWBYQch z{m*+hWg!XSKuhk01{}c%@2Ohh&cj_nu-3Wi=0{iqR2t5Y$hP)bCGVR`z*>)WScQF_ zRmzrREpWHs`)HCEzzymCHk=Be5vjd#FE-SMD7XP@vV{g~+~973Nox+OE_ptGxN|;d zZ@?3-h-=!M2v4))Y9a+liH5N^FMg(zr_i1?!PrrkJn<+{2lToeC<$M ze(Lg{*zl>JeldKPbtpV*5{oOGZyR%qIES|V8xydMiNC<9_*{eXDV{0z zkcojh_vE8->L5MUV$1mK~J7A-qyV#8g{p5@14eo$t~qc~2hxckBO(2M!|-u<4Zp-%haF8?V9c1f=bcOW@Gz+CX!Lq7X` z9lKsT&Qlc~)I;b~u&~$@Z5MkS?>(#Fwu-AX31xWrL~J9e$e$+byqf5CW0D-7L+6B? z4~`ch;fpOuV~&{IiAgN+t%Qqsf<-UVfhqdT2Rv;q>oZHY7E)FvK|m)ucZ1 zwcj&#DO(5o6R<0}r;$rl%HF5?+3pG2*Gju$EQ-kCx8jcwT2JspsZ^3JkJm^gW z-t_{iq4%f_1jIY?(8$l@d56R+vjn9ac$&6fkLfAT<9iy0p$Quzi0gqPXBqY!@Wpy zZtLCbNe?g6J^bfqY5a5g`9vI6YmGaR9m&71S7&_=?^YL_GE?26S!Z_^vHiAUMPA8 zH43{sQmAeJ``ske7qtP#ig3WQ`*lj{VC2JE`jmCT$!LK0^)#NIfo#TReHO$!_C5=L zN?g94=%I)4z}ozc<9~Y}!@7KXWZ%9s!34>Fe{-`>zV^*uvrr)M_>2D!IKih+_QkSs zACeponD&hHPKNxC-~=H9tt%Ri&_|PXv`pc-_sJ12{6(AIu3!rw4?wT%tmVK^l2}77 ze{)h$jx(Fmc!pfxXQ7cq^sO4RywS*ijUjsyD5w*$xzxSF`Y{5bVUoIqeg0#g@{PDI zbuLcNnDHJmy8fafQGUwvKe zL`Y(N&Z`R9Ef!=V+-q;pB}ji@73Z=0Ij@8df}Ra9K*CY@gCP$2-VcVD|NNVOtoIMr z^^e^0+j~VU{q02oxA|G;|59K6#D%|ba+f>@#O6;9%H#D1ZpfEE@J~$gPp-i~^k%*7 zn3Cg;4DxS;Rn&!PvgTm*j5>;dFtFfDf<1@6BEh$k1bJq?k%Wn)^0=G+t^*||1RM50 z)Pa&B`Suu?0PZVbn!YA^=*g&mExY}lLT|6R zq;a*bG1#0zVOv`OcJ_Q;*k+2H7H=^n{1oJ(zjX})6U>{zQNX?Sn+MigVK`?nSw-we z9%Pu@5&RC^d+3)DTpbo*GApShKUAb|y)eWi@@zh5=O51+eN^jm2B@=Ds3TP_HHBfO}wcPU@qni$!m=LW36Eh zgLp*hYxu0zx{$35#5)QqZ-OECb6tQPBpVxhzFJCoAqx&!Z&h_ret~;Y|N~B;lDq5;ZHyQTUY*d2d1QFD{({o`u449 z9tA8MTe111>F zPwx$w1bIHNO>y{|69=5S*ehkTMSqIt%A2G+=I3?6DVmadWH97Zfm`2u~<_YHej~Mq;A7gz9hDGAi=b3>=)$GHKm%3*M^8o*vi%}JF zF`MLKf=D5bc2olmx)V;&3-OzW6llA4{wItJ0{6)Is%Ex-+1?PgVqFF=g+;zi0txwk z+_53)2WfT&k+D^jl`Z0txD%7B)dEw%*O2}kiB_8x z2b?N6^{t_4;YQe#E(IJ7dkJ=c$cd0!o8b77*hrDOTIM#>2R{F)DQpdZQvJPemOa-KXLQI z=EzydT7K_Di%g_r&;1+b^zSwJu!ds(;dlJj8vQpn{@k_0&lxcG)^;V2^sdM~OnP}A zymy0p%4szNt{@)n4HEk#-eWTPzOb=QE^sqJwVUleT^SlHB3Cte1LsiW7&H-v`_I(# zN=Hn8v^2*ibsfP^B*~#X?1z+%T3|f5*WoJgQ|Bu@gd%;$MxP(`Cjto03b9?_Z90%M zGl16KRZ0lfbbQ71VU6SP`@B!lLalFj1TX;CBQ=9cp`E zW&f!2eZ05xNJq^psa2`t^@d&|e&^5q9*Z)6slyTq@2MZHn+7!_v(tEbq^-fJY*`1t zC+Z{u>f$I89F<@y6T%1Jz|RB53G5#6zWm1fpP2K>eX+Y0cmP~ z3VR^LJv%(#wOYp801D}N4aBB!4IRw{mXimiC7h>%1Z@a=MOn}wp%}i$w>=M~JbB(y zwA)}lh|fvy4CxHjoRt!Nk`HEv?^AJs)7%T3UW!j)psw_R<8$m~Vl9k0lA>Chi{GH^X!95)wCfPFf{wGy=v08DzG` z+adTfu)Cq(607X%jeVNvxTlaa#X52e5(hCI19{arMjvbmSt(&Zf!@-c{I1DCUDHoMCEo=X`(C^$1Fh;2|@kZXkps!H$#zM0Fi zVD1T*6Kn6eJf$Tx#(w((Jp|~+kh>gww&9G};FoNV*W)Q6{Y0EQ(r+X<>F3-D_HKlc zVLU(cXgKYP$HXGyE$+8wL;AdbczqeT8F`jZKDzJrGGVfdgy#xg5~({_^da}Xj%Pvo zTV%if#7C?puoRmG$LQOWB6qhLeB&wMAxyq_nNzh@yg`CSX;9((gz5{@2; z5y&OMY1KCqP}-yr{DT4a0GB`%&?Iue9pc&1`O4Xc6@&e_4H(r8{FrNhu=l~&kQ0bF zzj0q;zYC$D6slRwDYl5NvLcIE`#`)&ZU+(AU+=E8@#Y+CJg}=4#a4$el`ir0Z)JY#6 z?Z5{`yoC*n!WPDGe}IF3g6Akm8M{+G2(FTzQv#VrjA7YXePZpSWC}Od%o3=5Q2zMg z16!cr@(H{xhg@`4R2zpqg44!j&?}ufaQ3#r2jK{B0Kr1SkU$SrfguK~Pu#^b1I%o$ z;3hDUXq6N$0zBE22`+9AcWtxPDZ7UJH}F`3!@zXdmM_pBWc7r9^s}P&Oz>*Y)0@?<@kQ+g>X5{9Ayu@T%O(86rqj-mwt~Y?4IFX zm|`dA$l{CP9HB4u!(SYFIKQ~sPY?bFQ~Q(S{^lwF(%a|mT?o6O5O0p~YHCl-<0qyS zZN6uKCo}er2+KFNMlduvpP!{vdg!U?DWQdXgvymX;lh@Gxq?sV5UDG?+oxQl9Gzuc z(_b6L>4p)~F+u^A6p&_wf{KEG3P_AlKtO8JV?R11EjlewkVcx(p!6REl-Q^ZX&A9! z+vDeXb?!Ik?YYmn?sHw=*s1SdSt!N#@udqk{ZyEfHb<>_EvI zs4u-|^3s2O2ze2W!H`R05(=EjO6jc+wS@|SUeLQm6W{S(KqTYWuH$02x*_kX%=k?F z%nDn}7JWu`BA-+AE@!Rtrvx>|11P7yoC`#hF#F}3yrGSU`(3RKbSnw( zfv$e|WOo61Ba_-+2swAJGD|$cyJ(i^A5Y5+3>h>qq4ZBj2DZr|6EFwbHOE@$mu$56 zfh3E}wKw@)UE8)6CX4)a%mJB;jsb~g-q;WOHl(l9hMyK5;J-9X)w@L9x?(|J#_DbQ za{7Gvy1*0vr$XR}4q@CSW;N}Fj~^Td7qhed;H(; zxvpEt)~Xid*?0TnldQm)n%(>SGgl|?uqgjzY-b8)LG`M;g@U&q>pdh~d|1C)tu>68ml^Fflq&#)<8Ge z@&_z+_6~ehew3I{6!xH^k1={Z;r=s5)YmCmhv*9@D&~bZ`^Blsi-`xsVSsc=d!Zca z8HhpEtv3tah=>GcH%E}v!3&XgoWKsEfQANrj z%MIUW$y*?DO?5Ph9bc?CSR{jwDptGd3hImgEP* zWIOimitnvWRER|p#lwMOV{72YM zx}tz4&QsiQY)sa)95G89w&f`vjU`w2HBV%f0+cx&JBD)UhO4#U^deCBn@ zqF`aL;0t2W=`1tPX}g9P0_3Ku@9Y5Tw=yY1QvPd?%0=`}V}pO8nF+=`nl2+B`= z+iUuPNAOle>9f01AT!3=9x|PBu4iw|L}IJb%+!pws}l?%78sHDC7seA9P1YQICKr}|zJ3rN4i&=`v zQF)Y@)oRtT4g{3@tg*)>eee*?*51^^k6R>nru|O%_#?X6;PyS)koQ-AUl^ADVR|Zj zt$oW^*DK;hCEa>mWdYCORo-uSVJd0l#?AQ{CS$=v-%b9 zYbCXgP9VI;zGN>b2Q*X16Od>85$R7lU(r*YA~_<%!jyo>u>%@bp0w-%Qk;U)0q=z( z6EJjGbUHp!3*#K{BarjrY&3seE`7Jcx86RQ4$Ts@7SG}Z6lo)rZ;#`zrDoQU_T+HX zW!ermYsjC?X6`B>Yre@LIwei?epcj@9!22N=C}*sI?V}-3&R`~4lWZ%-@IPr6k-a` z#6WPJQouNzO8)YLs;o+Yl73MIaAiujRjymVq2OT5*{AvoH!=lY1~FJl);V?Nt+G_9jGhfx($3bYAn=}Z|>8k)Y;Fp*{B<;ib_ERRaOH3CRIY8H>I&Qhu8lm4@|?`MwV-12WFj7G;2l1qKJou2ZQ5;TS^67pLZ>@=O>H zeiglYXaMnWm{Ijp-H8+q+k)*MpZxdkPGQ4jwvAs&W={Sx zJ@BUYi+_^U=EHYM+PbIu8I$GM$s)%r%1ZHQrJw6@>@sHxjvAIxf;$mBTVt*PBpcki zG6`(GCZ;u*)Eu%)0rGr0lc^hWIx^9^msGf-OTww4Zg*i8YGUTI&@@-qWSNMJmIs%T zh)%vEzD0@LXN-QEuY;xFuK(%&qyL%lx&8A2i{qoB0xbB`)sJmFk{v9Jn1p&u3fFdL zxH(vwxjz-UUF+k69Si&RvKs-JgFUbOUvKMtQ!#$D*h7uG`)c65vys62SR5MW)!{oBY2$*w!faIvAU>SE0|CkfuVkaU7|wD*Cj+{7o( zL&r&UV9IjbzA}q!I#!ze3rg*iFX{Ci z4E8GmdlKT`KuDHi&vuO;e(qbc*O;#<38o&rt@ySfd-c_a?m8EXY}=UO{S}Kii@R=r z@Of^AS|#5(6%zrMTW{0SulC+ZTUSJO9$x&T1#f4KriHbPuEaWBpr`tn9b60(c({`| z6Q`)6Z4KfgkW`>YHH0ky)x`B1wt&*7yurS1BELbxy?e|X5(By=LKh%w)LP{)l{;C* zm0!IiX3WB=$ZU@eV z&1iFP(rQ|Qg>-Gz8;d}D-aH+F{;$K*thS=|;RG~FY^QIZ+yON2ckE=@c50n5D-)*N z|EWqVt$@maa>-f}=zK#7u{xu1{4x8$ll61*>yMw7C5C(-)Ypiwe+{XML50TwFJ7M0 zuilh2a#!MulviI2yQ2PU?AE3xx3WdN(@IwY%TDo=X$tL9txsk^DwK#6E_xtJF zybVfXX7^_21;c>WrrrXjHv7_?-UWK9sp1D(D(LQxtp>YNLHyyn40OE6kd7Gfj z*f+L@%USKKSQ##mTHW`ysYsNG-?R5}piZU(LMgv17ZCNp=67hwk3YOj2{*@{+0UeG z0)LTZ{@<7_rowT;>ee=1;7C)kCp0@p?D_9cx!KdqQZ_I6Y>euJ)h~`u! zC7y_{-aZ{E@BN30%ZYCPCv`?p*V)OVuI^yz)7Ozyx&8AE9;5IWGjXQTU&V&*v?Pe> z{^VS#55VhU3nvb3y1GK}5gyqQ)onUk?s=a3-Y+S)JW6T__t*ZD2#c$msb?Z)D+RRk z@mfTsABxL(mar6ObKSnX$tT3yKZ)=*9=gX%PnM)NelhPO7@h5Pw~dmbtODt;>cM5B zS)>e`-Bh_d-c5>PDiU>s9}LjTJ3q0AJvcr$&=Xc~=!z=#?;uS1;>Vl}!lt?x@cntHlPSum^EveFH{>Y% zeaf}PVAa2ZD|@0XAH|OR*Xy<<+@8HGey_Y~{7FpDVeuqXQ9~EPs@T^&XKl)V%7DE@ zKb}(DFe5$4EwMiF*bTwh+NjWWQ^q5mMG(L;AKh4I{TTMSh50lwfGv>mQqg?l0du#( zk6(PNRDq}v_vzqjR%711HoHKy?c8j>k|6av_3Z;0(n-3ju$^IY_PEW}WvSeHb^V3I zEdR=X%^kZ^m~8@~x$xEB;1sJzrY|R@uQAjRNz2lU3rO!$B+-I8%#XmHxNK^S0(4O& zm$WpH4M0f*oO9ST@l>2BN@y!X5AJE|aMLp0*^rG0lJ;^Bz zpirnY?v>Bh58YL|hP{N|Iqj7!83{kbyULR}CZGZ)xp9=axIzXuJNLr1zbyFPQ$Y8RXg>VLj@YxxogC$NcwhpXS8IIsQ-jY_g~>?4e`3ZiwP zCp|YhpyU*){^!_#Ft&C?v1l=E08cM}#^0ukCVh9(P>;UTVQj-+^U?b-0og_^cHi!> z+~nFf&5eq#X5EL}W77*1)xIryhXoceE7Q3K5fW9|<_NV(%6#6X8d4q?`OWBtz2O~& z#>^>I4F}}CQ(5yq#+mp(75f}fJnv275nQnjI-_-s!S3^cGA$F{OM^b>nc*ja%D=x} zx!-+1oXF&BIQyN0#VfhpF&0=f=2BwC#4(FkOLZBWcDTjG2r}K7DDBhOIfS&1cK69> z4T3GMdo^7wAdgQ1p5UwsmIpcwNrhD&nM`Idc?#q%K#gh*KXdEH=;_z zO$XEE#d_A&6tgF$B4cvvSuu91t*0|tRHZ3ahT*Bm$JQBs1Nq5jZdWDNyWOA5Qr66A z?)($Ia0xO+ALId@yRMAbXCV zVbjjPqznT-ZxHjEC~^E32!ZpI=kdG8K_eMY_0F0%qAbZPlMQ=fZ?FA|eMh(d^^{&U z4yI@N?$3<{$D6%ZyQl6a#50+JaL8QIUPoH|DO$M98Q+}gE|JV|wQ8t4&(q zCE+#`As+8=`4T~#?kK%6tUp}~FB+g>)@mYu#Q+bY5yN9`( z13u5Thz=JjdELGEf-CImRQh@i>nUU5MxbAo+}h$XRN;eg%cRL7SUsd;Vwu_5(2eRT zyRHj5E;=FZF2zxge)+`Cqft7#{vo>ohj;J+@h@r@!URMV(d3`#43|u!eERBUlo~xq zL5&6wW;;>)Dp@lhy>GT5<%MP309&~*77AX&BF^lGx6rkv6X#lcG{a7T&RxVufiHu* z3Hb4DPA$bfrCaHg&GypFlQ@*cfW-iZ?hoJ<^#GCh*gLnJHsX(BtO3vF z$##b3uU2VBZ(QixMa2v6T*I++s%t&v!ZqvX@fay*4c%q?M?uHl9l{mQ^!jqgU~i}> zqOB&IFGhrxo=8O`Y}UzjF?2*n^63jZM3?0muPPhL^Lz|H_ls}8Tx}Ja*3*c#|5OA=A&H$Z^eAL%gJ0Ra*QDG%8wZkGlbop(UzD^CTHe z@D?ulqXKjLB(?7vj2695`XW0FMzjcns~2IR-~TrJon3gSnS#a4*THjP@0%Rf+#Kmyw{ZJ_0+No9{KE9P>vTL80pt2ug|x zQhNlsHwEVE2NnM@xq3En_jl-c99@R*-U?=JB+6tj@ScD+G#I#-Inl4X${2xg`*vKr zz3l?YYGkX;h#9)v_O!rr!OI41!EUvt<~cw5n=U|m zb95{?qX%c?Xa-<2pVHdA(oRc^JMFr+N`yh|d4hCPwkIzWevp_faAvxzmCV=HmrEc& zQTnvka#X#RxmpI1OG%KzkEl-4(n8X zr!o2a*M*uzgKiyoHqkxSO9v^beQ9^e{gQJnu@GJ2Z-w7GZewvObhFnP{+7H2t-Lk6J?-8o(W#5J6D4bpacMeH%1L>!B$} z+xX_k5}gO_5#PGUWSvYtm_bek_U}0SdOUx28-~kg%9W*gG1KH5E*{RJocnTc$4jdj zrY7C?6UYu?-kZ9sD)&c--r%NNyMfdM?$)tN#ZM88_iz#MmoX8kXTD*nNBG80$&bP7 z?XM`D*LboJWlFI6{k4#WBJh&=I{RUEB7!>tL)ga^22eiVdZG6QSuA%FEm8NZdqEuk z^=sJIkDe_s=5IYJH^e($y}Q<%&+hvYVNg|z1VZCK>>q$F(i)Q6r&#Zc$~^C<;l+H; zg2ws}*}nJtkTfqxI>Q+*gWQOjAw#8_$z7a{l8aWH|Dhg_tYppVY=VtxM333EzhQL~ z2GibtA80r?k4yNH34Nd$A}*y{Nmp+FCNl5IqqHUV`iR_0p9leYv~4t9*Gg}Z*# zKmLh!e3*M8G-DyJ+tdTyGUXi~=}KrWAoub9RFgkf z(*tQq$;Cn%qmR7&+$u8ENQ3zye3$B6A#7uOG+B&CCZaixE&Wl)Zd3`~5TzHf%tA1* ztLxF|LeSX?<#&}^UT2Y;=BScA72iyEN7DHEahCF=bV|!zxN3di-YX!?6EO1&9dR5|N=3R!c-NbA4&S*=!#c0d*W+3(26KSsHeG$n}TRE6I)vJ19q z`wj~?mC$FZjT_43M6lx^3Pu|wvv{wm>}G7P5v>JVof3LbQZWdyBi$uE;TS$2TU%yO z{R4W*q&@5s-70u`UumnD>BVz?zOePYp@*osPn>OSymg;yhxEdIAIWWk!isCfGh#_M z&gqI{`w3oh#T;=mNqTd`P9`(u+-I(Wa5`uBvN6w&RNw6L*@5%7GC{^L$MXWvL8#w; zj>IXdDR=)63R?xL6!9C^sA+YmU_JCIKpgbXa8kj&KcsX@W-7&w^AGkpK5-Bae^7Oy zi;*chT0-pTGeICCJ4vX;zu%21$aGbdIBYfr;yCQ2z3LHdvgO{z`Cu5B@HM359Y29Vj^A&g>!m$fjLj@Bwfqcl!l`OwUP zJ5pJiI36n0SH{nezjcBth_dvK4zDW)ZF8f*^p6dT1hCKzU&dF@a_W5lvZ3TSMLOhj z3}I-G3hAHkDl$JP9c=^v8z!}h;sja^SHog%=DAC70TAy2lLhRW0z;cNyI2ezXPJFB zFy7sIhpvX()7dl3vs2^c#c&*VBR-)#+CobdH z+%N-HRuKV?gV+3@hR?2voYp=kGoJ$sn$(wV3yz+7b03m7%tv*Hk;at_#$RES15L{f zOT`3e-86V@<5X1i{FhDc0$sTMdM(1|3Z;K=F>nx99D5bAu z^C)RuxAjDy!tSH^&keNl;8`-wF-UzrWIW|g+a#^ouz5SgT zK$1L7;3c?~(j-H!hWmH%oaT8{^-Y(7B{FC6OdnfHZ)>fJ#KZPaFT6_VOd|eKeqU9) zp4!;X=9tsLWznskj?(Ah+-B6DD8z{i8h7yPeXft8S0z}13f1`lvsf>%>}|;Oo-(*` ztz9$l+dPNfjZHD2{FbSIrhvL7&8V`Zp~QGh4~=DZd2)XAp$DoldVgsD(`93y`4HE8 zZ#gHsgil-9`}wr`CjIlnS#y&-kSvq;RY5U3432_ygC*gclp*IA#kLgq9uNTfevS%$ zxNbu6;gYR|sWL7XaXAI}uG=%W&~d$eseGL|oOPLQ-*N(QUC~XQ`BO3Q5*3htZKaI$qPHvEbnt~`4ouf6^iW~t+tlcH`-;r} z%x6*xTlMdMF^wEO{@H3k%u!+rYd{81Q~Nj12Q|pO7C_)JDxBnrw7m}9V^vXu?LD8c zwqSCWUljms|GUdf{54j{{I2elg1I%0|I}(hf0y9~50t!Gz#ROa6Wpy%bNK#m>pSbl zF_n|citW7`rKXx|^8ZMb9F*))xcGYn-T|ef+`^75`O(1?IbZ(IhlJ9>IZhLM@+c-8 z?ootWXUf?t%8P%XK4&%X{+d9_+%kG1m^9>1j|KjH%fj0a^(^Jj1#q<)jw^ftopV00 zf7CV1?6V#`1yYt$VU*IUPq|hdp)K>N^Wjmf4I90WUaeA79#~t8#3l`6?EE z{h#I{dS^7fVqx7io}yfPCOYe9OC!suTApA=-H1YqbUR7e(w|>Eoo|SJ#OQc|C?xvC8_7SD)UF?Lf;z>;f+oo#gI^R(#l#Ul%Un+iF_0OdB4kE5@9%H(3jbDk6E1e6Y5a=U+O%Oi}@ zpg?5LLEFA0My9seW~yXO1|_a{4LGu5ttFMTa>4Fll{sVxeAAST^wVaEHPqoqXcS4D zeKiuTroIM!<(Ghd3K2nCXoFh-ifWKeJJE`1P$p=2%!_*DF zGjn&&eO1^ikQM5F3inA+@)O`G{j;7-5!I56@V=a(pkkR;wVK5X(g&q|Pi0IeqVv9f zV)*Qyw-Z#c8x}Ucqe9HKg_L&k4y$W!ujlXlnm(rcM@BSy@VWj$G8p`Y9JEqbri-p^z&Aau3+lt&b2Jdn z^RbcNCiOrGMjWfR~=GsvVcj%>qURbQF#7U(j!lw)01>mWbeaQ*~4S8 zJq$xKofeeG8=Qc^>z?p2*cKGlW4U;ew7i3|dj&5>VpZn>>}r3e;^2~Z{PI2hIfuGK zLHwH)H^jRhmp7&EFtqbzQh|&1lV;|D2+Wn}4;9S;9W+%3G?q%njT`owI0KJ zHj?{BsBvlr6Ytc@c_6@wBw}!F|2t9lGacq62LP5(c2{>&DTO`=tmbbYngFJ%ihi?} z(0P^?kqa+uPgg1}-PjGbWe*-5hOuPI9KXIHs5hXk4EgR!<~z1^iQ-Uhq0yrQm2x9` zCdc|a!mecbzm`H}ipi7ug%X$EWmzTHai=VVBqE_I@7!@5YrK&MD`#f=+VaV1WkBg4 z;87GEQaUj5ldo>T6_o6HRxOnVI=D&>M;(7?&|n{l+I|I~w*ZnkIi{ST%Y4rM;WU+m z4+Th=7%E>P9(?4Wb)DYL#VsYbQGfWfiWGE1QIAH=Ze=?1%auvaUOj;^612YqmpeT0 zO8@9%(30+_pW=_^Gh>o67iq^)?p**^*(+j{M8on>xYvz3uae%DPvgyk3B+&uI39o6 zM{0p`!(s>VUh0TOZ;txr<+qwGX6`>kqmlVhQQs~qE6bclqsz!ga}0iegl5L7NCCyc z-wmP}DgECdxZhBrYnzf(?;7O{G&KDaRJ%o81 z-z<~Oor0j~l;3H2+PD66nBD&^l$%&mClDsoOmoS}ZKSgLe3!QyMNj;d>^V0~zPE=Q zhJ<_vqN-lVpw-EwJbLCpZ&6z6wdsQK|*U0vgXLUkNm!2d3M_^`NvtxnBdzxqm`_W|&_Az-!;Ts+6e4{r#m2GizbED}LV)Ebn9w~jjg%XYqu_5V5urC>D*qcI^j|{r>$eY;L943 zu*%1t&Owg*&1YnyXt@Mpf?w#$4{3w*?*DXz71l14q%s61b-wm)0leP?FdW+$OfqoB zJu2s#?CvG{yvx7Q-Lxg5gXsB07~X-NoDrV3QB#enAIMrHP}uiS6>QvB8QRXI?=QK?9DE#Ovy( zX`9i>1ShB0&61+}R?}AFn@Flo^L0-3Mg-c2Ly={@u&mWPUcPLlVcaP1(tkIyiXXfT zzzX@E(R7KfhI&V-um@ne!tQ!)2g0g%vtD$Fnt0JXQK}&VIoeu1yB?RTGi@IIC-kyA zNH`>;@RY{sLQs<-xcDR%+U;bb^8}-Pbtf=4{IjJ>u*5V zwg~LinP=3G| z07&dTj5T#+r(HH2YNIn&(q)cQ!!N1@qaYO3g1DF*8We`GJ0k_A}&ykX^8k zz%%~eOfF*-^zwao-{ni<#YWB3%6Icl9qVf~Gf)>+tF zTyl{tOAY}k1NNzY7-8drAQho^BEP27zTBu~{}+H!gJ;oOE^M@X4%+#5DIp@4e4@02 zfi0^E92SiD4lP_)cJkiH#BXM{Ak682kJkmQ_2Tv01InjE)g;VBoVDaFn@OS^i_Xfq4ZS**HdX&u6ks0ACJT1S0 z8k>`5?CyT2*wGfO8ruv;D?3)y$3EH!Yo*P6^+nBqjrE=j)86Cd*{?1NFSKZ7AafNJ zmnFGknG1?8XREP&H?hjV2i!j&B=D%{pzGgrc8lUH+i7lcGwpsKT6P(9-=dAK*9+?f z4vQ?H;zhr+pUw)9<^uamwy`K6xDm3}4pC86I_c%h(x!oUR&7EL>Ga+YDR%29mFqHi zt6X(rHcM^r1S<=A$#tMQBsp(_;PLBJ3r$@j9NgObMceu{vdOfI>BPbRI=X*R zp_+$zZgPA5)l-7V&ID0*P?8e{F&OnDBFSS@gWVI9(KpRt%NfY29{}{*H24qOLjF2T z6UN?Mz_Yj5+W(Ylrrp&l`ZVd}8!*SV@lx+XOUeOL(PMPe{rv!@*pr?IC7dUa?&}&k zb_pR&L3Ry-!yiip3O~rw^u{Ui;j$U)6j8AtJ<=8V_;J?Mx50Defizv7&RQ6J($lpx zW+bhB);_XkTkf+Bngx)QOj(^}T zX)Qdn=!Q0_Z&}$i4EzS?5>tW8f#%7^Q))tSi#Hb1+!bN($88QHt$8nW)YwOP=4|gY` z_8o2yPfc!){3o*fA8G7*1B}9X@gTie{bpX(`yV~QZ&G;KH!RZ2KtGb=h(Y^0B`>zd zy-vd|yob;$xZn>?ww93*B7YVl62^5WU4<;ypL{EK10SS)>1)59Ph&-yGAHik*w3ag z1%~n)fL|vx4{%rmWGvA8y3KFvTq=Rgc~mTL0GP%0?lZMy&M2ileWjcrpnj~- zYBY0Y{)Nx0-{H(yULfv3m2O0Qn;$qT!V#J43nJ7s+#JvMz(@hePM zU8kJs8%dZPN%QcjYHR~VF1X39uJ$mGcAsI!LKZ!ixtMZRDG-1cPElw2QgkY~p zNMCD^P&;L}8xJ5?z+!d(#VJUx;S{-SB1Q*k7e!B_FTiWcU7{M5t?d;|KkC=|qf70c z&7Ub)2H*`c?>RmCabaBsd%{wJZSKya&&kA20aE#%{IA@2SWJIK%y636xRSluG)-MCE`sRdtD5+n-2f}Hv%xh`-b15 zt$zqUOoD@7KWwp&doF@bIRx=rx?J)67czs_40ZD82XMN;`T3icKZ$mPs?pjjO0hwU z03G#LDUyBIR`Q;O@drQ3fA#>$lZiNP4p~F%Dz8X)og0hgy_rAv^Lc8eQ~{VYRp(a;JQ6u5HR|M$VV zt#-T}(df-rh0*Xa+)>P!e(siZz*Ft2&q-ohJP-c127HgUV)4u`X}=lRksq`!g`1S7AD(YUq?FX=3 zcJSr3jvDlr?kwYr6CCI3HZ%clvFKk4KW{!PUT$N5Dh6tK58&VAJQtfpji#T3Ypxzl?YbqmwH` za%vs6X*jky*3+a3nZC>KRR08R-1+^D->+={Aiz_KabbuQ#k@PbLhgQwfJ}^`@yAgm zhf&~3PwUg?*bXL}w^4Qmb_5)TKnlMFAK|;6^Xpt#f#2l?$(jGX8}nPbL=GT9+sc|= zk6BN*L$Ks(vgwXWE-mH^=A)nd>T}k;bMpP;O`_4mgffMd-zmyyy{Xw2iQj#}u%{yl zUgjG8u(!4L?*hc%Z<$|0>?ywPJ9A`X_X}eylT_9L65p;k3ZMVP2 zt-e!BJzd{sA+GQxq56=;;zU8sGRdt~!no4|hE@4;n(-l2A-(r&*d?Y*@Z*Bg45nGL z0z%lhO&r4Nd+rK`q&}6+(iPL&+Y)d|%i*V^P?w!jsa8t|ux~RR%m{?v^HVa1Owr{k zwLr<0H>t$(I+ti%N!fk%S_|D~HDb#{TE@#8+V6FL$G%*(gm(LCRBkX-NDtvU3FGIE zt&+#yjb9uL$s1=H(F|m0)MvE{99EKplyp6xR0C^~+DMP|4D77j#}Bm-N<#+g){V|?A658zcb9$^G2 z^V?dBe5J;+t-Q{~8&7O(O8;E$jdHe@4e7?Y*hTBQs#k|wpQ4$k-} zek8XfECqIV@MH!5cP`MDneVOwNFw7ywl>7J)-aAAJ09mfgyD&lRam zL{U^$5WzbRQ?{7XhJ3l$md}RZx&W$|ZEYk4p??O|v+39;3Ew%vowZW;84B|DA$k8& z^!9Y|N@ayZ;`k4+n*oUH^Uv^nd)8XT8t1vQaslXut>fDgStO zsHYs(^}hVx49)$cWU+nrArrBrkS%yePvABdubw{nCNC2j;7HN7K;t(e;U$(b6H%Ga zKu59!wygbSB$a$#SN(+R8S~Hn)3Bn^?IAtCU;tr=GE6+0YkBK!arTj8etfLEcnYjK zgof#kDpy{?3J=#3KKOMa4k5G0bqeY>gs)Zw|Mt|4aZk@nhu+kL_T7AXf<+ zjalX=22dESMj`~L!|k^{02 z^{aKfz?<|dVd-oC=98HdyQ1(+A1|mMQ361>9KqmzQ0}V%juS~c$>ECVL*3aQG?LIX zZ20q4I-a?-rcjAUMPx7hw$yD-z7Jo9fKh0y)&!Ka-*T=@%rj28st2mtpt&ZgyIAid z<$_Vwo|qOIG1OtOK8bon3$)|`j-)69rfdq5SlUE4!$ba=!PFO?q2?z5BSklJ`Srj;;MGQ7y5E&(XQ#BF7|sb z=dPveUVQiI2C@rCbFFp55)u;qNrdEWwZLyftwq$4V7EkC35;jL77&u?X)_L!zq;Y~ z87r3Cc7GWdgIRwoQ?i-o!}$D7wA*SISj(+9-s^jVC$zo?YLox8?nhij%-uM{>MLS= z&hIsUuKtPRA7pDE`g!%HA$Vj{|Mq-Og7OA#GETt$X4RS3Xq z`fe;lY*^S0*B|1iuC@hAfR_=gVp_UxL)WQ=?s8rL!G+^IT)#P7>5p{R(@%o6 zPjekGfy|($yHv6sME-nmXKw=b_Vr&NcR^tz7r+fGJ5=&YQk3#S5*; zdRP1DX)4_`JB!@M2>SrIU}1K^XS)Wb-N=az+nQ*5fS|qX;v|S9%_6~A(@cVv?iEf< z;=W${`4F&;a0zXpob1Hp-(cc+ey;o{U~rYX6{q4+j140#Oa%J(({@*mAFA$)eX2Ku z54k1`hUYd@aN*74L@W-Y-;X5g!S_Y>1ieHZ8*VO(<=xnc_c<&YOU~FE$5kfGPmab6 z5r<%kd4=vHfZp8TqPIoob<{*?hdONGykrRkaC3Z`qR&gzE`Eb(TA9F;$cu-C4E?1@ z((RFu*z3Z%HuKJebpW7tWP2o=)xyZzY7}t#O87FN*?mLT;KIfi#$-9|eq*W3L$rk7 zie_TJ(Dy+9WV5crHKf=-gG=eX?eHigfb25r26^T_jz^q!?1i16&XVltbXRgH#z4>V zcg(3ZCbz$^HgO_~2R9brx1mPmZJtdU=5>?fQzQGE|q@WSKfp<(g*5O0b zKp>pr=g2I!_m^<;3^B`vdCXJCfw?E@E{Ig;oh+Gfc!NPo zoMXR~L;A`*p;NHmOT{kIbvbXM1TnaIUW|xF$c_)e>id!7mY7`p@f=~j2G@$57*aF& z`M7`r6zjhBN68)(@9RbP(i(sdlQqr?$YShhc;XrsHm&_xj~uKN2m7~yQTPWhRp*S@ zdHSow-Q$qFBZdX`gO@Ao*b6h85=80=e*z6K7KI}+;J67&RCR3Evy^|~o>1K18rZ-- z)&gk!5R34x8$s;`71THwrky<(L{MQApyqnd>zE13_9DD%ZyJhq+fUoZZ#(LFjvAn% z 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

XEa@)~$VJj$3A{VaK?YE&;Nvw51{6 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

){UaF907F2$zb@V}dobK% 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 P{Nw)sCjRD4^I1ax;-6bc diff --git a/tools/server/webui/src/index.scss b/tools/server/webui/src/index.scss index 64460b74092e1..362db6e17df5e 100644 --- a/tools/server/webui/src/index.scss +++ b/tools/server/webui/src/index.scss @@ -41,6 +41,10 @@ html { max-width: 900px; } +.chat-bubble { + @apply break-words; +} + .chat-bubble-base-300 { --tw-bg-opacity: 1; --tw-text-opacity: 1; From bd248d4dc7265437e1918dc53ae3f49a0c592e5f Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 11 Jun 2025 09:48:52 -0500 Subject: [PATCH 15/95] vulkan: Better thread-safety for command pools/buffers (#14116) This change moves the command pool/buffer tracking into a vk_command_pool structure. There are two instances per context (for compute+transfer) and two instances per device for operations that don't go through a context. This should prevent separate contexts from stomping on each other. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 213 +++++++++++++++++---------- 1 file changed, 135 insertions(+), 78 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index e5200b96d0d8d..32d6407441535 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -102,18 +102,6 @@ static bool is_pow2(uint32_t x) { return x > 1 && (x & (x-1)) == 0; } struct ggml_backend_vk_context; -struct vk_queue { - uint32_t queue_family_index; - vk::Queue queue; - vk::CommandPool pool; - uint32_t cmd_buffer_idx; - std::vector cmd_buffers; - - vk::PipelineStageFlags stage_flags; - - bool transfer_only; -}; - #define MAX_PARAMETER_COUNT 8 struct vk_pipeline_struct { @@ -165,6 +153,40 @@ struct ggml_backend_vk_buffer_type_context { vk_device device; }; +struct vk_queue; + +// Stores command pool/buffers. There's an instance of this +// for each (context,queue) pair and for each (device,queue) pair. +struct vk_command_pool { + void init(vk_device& device, vk_queue *q_); + void destroy(vk::Device& device); + + vk::CommandPool pool; + uint32_t cmd_buffer_idx; + std::vector cmd_buffers; + + vk_queue *q; +}; + +struct vk_queue { + uint32_t queue_family_index; + vk::Queue queue; + + vk_command_pool cmd_pool; + + vk::PipelineStageFlags stage_flags; + + bool transfer_only; + + // copy everything except the cmd_pool + void copyFrom(vk_queue &other) { + queue_family_index = other.queue_family_index; + queue = other.queue; + stage_flags = other.stage_flags; + transfer_only = other.transfer_only; + } +}; + static const char * ggml_backend_vk_buffer_type_name(ggml_backend_buffer_type_t buft); static ggml_backend_buffer_t ggml_backend_vk_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size); static size_t ggml_backend_vk_buffer_type_get_alignment(ggml_backend_buffer_type_t buft); @@ -482,10 +504,8 @@ struct vk_device_struct { ggml_vk_destroy_buffer(sync_staging); - device.destroyCommandPool(compute_queue.pool); - if (!single_queue) { - device.destroyCommandPool(transfer_queue.pool); - } + compute_queue.cmd_pool.destroy(device); + transfer_queue.cmd_pool.destroy(device); for (auto& pipeline : pipelines) { if (pipeline.second.expired()) { @@ -503,6 +523,20 @@ struct vk_device_struct { } }; +void vk_command_pool::init(vk_device& device, vk_queue *q_) { + cmd_buffer_idx = 0; + q = q_; + + vk::CommandPoolCreateInfo command_pool_create_info(vk::CommandPoolCreateFlags(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT), q->queue_family_index); + pool = device->device.createCommandPool(command_pool_create_info); +} + +void vk_command_pool::destroy(vk::Device& device) { + device.destroyCommandPool(pool); + pool = nullptr; + cmd_buffers.clear(); +} + struct vk_buffer_struct { vk::Buffer buffer = VK_NULL_HANDLE; vk::DeviceMemory device_memory = VK_NULL_HANDLE; @@ -820,7 +854,7 @@ struct vk_context_struct { std::vector in_memcpys; std::vector out_memcpys; - vk_queue * q; + vk_command_pool * p {}; }; typedef std::shared_ptr vk_context; typedef std::weak_ptr vk_context_ref; @@ -936,6 +970,9 @@ struct ggml_backend_vk_context { std::vector descriptor_sets; uint32_t descriptor_set_idx {}; uint32_t pipeline_descriptor_set_requirements {}; + + vk_command_pool compute_cmd_pool; + vk_command_pool transfer_cmd_pool; }; static void * const vk_ptr_base = (void *)(uintptr_t) 0x1000; // NOLINT @@ -1205,41 +1242,31 @@ static void ggml_pipeline_allocate_descriptor_sets(ggml_backend_vk_context * ctx } } -static vk::CommandBuffer ggml_vk_create_cmd_buffer(vk_device& device, vk_queue& q) { +static vk::CommandBuffer ggml_vk_create_cmd_buffer(vk_device& device, vk_command_pool& p) { VK_LOG_DEBUG("ggml_vk_create_cmd_buffer()"); - std::lock_guard guard(device->mutex); - if (q.cmd_buffers.size() > q.cmd_buffer_idx) { + if (p.cmd_buffers.size() > p.cmd_buffer_idx) { // Reuse command buffer - return q.cmd_buffers[q.cmd_buffer_idx++]; + return p.cmd_buffers[p.cmd_buffer_idx++]; } vk::CommandBufferAllocateInfo command_buffer_alloc_info( - q.pool, + p.pool, vk::CommandBufferLevel::ePrimary, 1); const std::vector cmd_buffers = device->device.allocateCommandBuffers(command_buffer_alloc_info); auto buf = cmd_buffers.front(); - q.cmd_buffers.push_back(buf); - q.cmd_buffer_idx++; + p.cmd_buffers.push_back(buf); + p.cmd_buffer_idx++; return buf; } -static vk_submission ggml_vk_create_submission(vk_device& device, vk_queue& q, std::vector wait_semaphores, std::vector signal_semaphores) { - VK_LOG_DEBUG("ggml_vk_create_submission()"); - vk_submission s; - s.buffer = ggml_vk_create_cmd_buffer(device, q); - s.wait_semaphores = std::move(wait_semaphores); - s.signal_semaphores = std::move(signal_semaphores); - return s; -} - static void ggml_vk_submit(vk_context& ctx, vk::Fence fence) { if (ctx->seqs.empty()) { if (fence) { - ctx->q->queue.submit({}, fence); + ctx->p->q->queue.submit({}, fence); } return; } @@ -1278,7 +1305,7 @@ static void ggml_vk_submit(vk_context& ctx, vk::Fence fence) { tl_signal_vals.push_back({}); tl_signal_semaphores.push_back({}); for (size_t i = 0; i < submission.wait_semaphores.size(); i++) { - stage_flags[idx].push_back(ctx->q->stage_flags); + stage_flags[idx].push_back(ctx->p->q->stage_flags); tl_wait_vals[idx].push_back(submission.wait_semaphores[i].value); tl_wait_semaphores[idx].push_back(submission.wait_semaphores[i].s); } @@ -1308,7 +1335,7 @@ static void ggml_vk_submit(vk_context& ctx, vk::Fence fence) { } } - ctx->q->queue.submit(submit_infos, fence); + ctx->p->q->queue.submit(submit_infos, fence); ctx->seqs.clear(); } @@ -1366,28 +1393,25 @@ static void ggml_vk_create_queue(vk_device& device, vk_queue& q, uint32_t queue_ q.queue_family_index = queue_family_index; q.transfer_only = transfer_only; - vk::CommandPoolCreateInfo command_pool_create_info_compute(vk::CommandPoolCreateFlags(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT), queue_family_index); - q.pool = device->device.createCommandPool(command_pool_create_info_compute); - - q.cmd_buffer_idx = 0; + q.cmd_pool.init(device, &q); q.queue = device->device.getQueue(queue_family_index, queue_index); q.stage_flags = stage_flags; } -static vk_context ggml_vk_create_context(ggml_backend_vk_context * ctx, vk_queue& q) { +static vk_context ggml_vk_create_context(ggml_backend_vk_context * ctx, vk_command_pool& p) { vk_context result = std::make_shared(); VK_LOG_DEBUG("ggml_vk_create_context(" << result << ")"); ctx->gc.contexts.emplace_back(result); - result->q = &q; + result->p = &p; return result; } -static vk_context ggml_vk_create_temporary_context(vk_queue& q) { +static vk_context ggml_vk_create_temporary_context(vk_command_pool& p) { vk_context result = std::make_shared(); VK_LOG_DEBUG("ggml_vk_create_temporary_context(" << result << ")"); - result->q = &q; + result->p = &p; return result; } @@ -1420,15 +1444,29 @@ static vk::Event ggml_vk_create_event(ggml_backend_vk_context * ctx) { return ctx->gc.events[ctx->event_idx++]; } -static void ggml_vk_queue_cleanup(vk_device& device, vk_queue& q) { - VK_LOG_DEBUG("ggml_vk_queue_cleanup()"); - std::lock_guard guard(device->mutex); +static void ggml_vk_command_pool_cleanup(vk_device& device, vk_command_pool& p) { + VK_LOG_DEBUG("ggml_vk_command_pool_cleanup()"); // Requires command buffers to be done - device->device.resetCommandPool(q.pool); - q.cmd_buffer_idx = 0; + device->device.resetCommandPool(p.pool); + p.cmd_buffer_idx = 0; +} + +static void ggml_vk_queue_command_pools_cleanup(vk_device& device) { + VK_LOG_DEBUG("ggml_vk_queue_command_pools_cleanup()"); + + // Arbitrary frequency to cleanup/reuse command buffers + static constexpr uint32_t cleanup_frequency = 10; + + if (device->compute_queue.cmd_pool.cmd_buffer_idx >= cleanup_frequency) { + ggml_vk_command_pool_cleanup(device, device->compute_queue.cmd_pool); + } + if (device->transfer_queue.cmd_pool.cmd_buffer_idx >= cleanup_frequency) { + ggml_vk_command_pool_cleanup(device, device->transfer_queue.cmd_pool); + } } + static uint32_t find_properties(const vk::PhysicalDeviceMemoryProperties* mem_props, vk::MemoryRequirements* mem_req, vk::MemoryPropertyFlags flags) { for (uint32_t i = 0; i < mem_props->memoryTypeCount; ++i) { vk::MemoryType memory_type = mem_props->memoryTypes[i]; @@ -1447,8 +1485,6 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor throw vk::OutOfDeviceMemoryError("Requested buffer size exceeds device memory allocation limit"); } - std::lock_guard guard(device->mutex); - vk_buffer buf = std::make_shared(); if (size == 0) { @@ -1577,11 +1613,11 @@ static vk_subbuffer ggml_vk_subbuffer(vk_buffer& buf) { static void ggml_vk_sync_buffers(vk_context& ctx) { VK_LOG_DEBUG("ggml_vk_sync_buffers()"); - const bool transfer_queue = ctx->q->transfer_only; + const bool transfer_queue = ctx->p->q->transfer_only; ctx->s->buffer.pipelineBarrier( - ctx->q->stage_flags, - ctx->q->stage_flags, + ctx->p->q->stage_flags, + ctx->p->q->stage_flags, {}, { { { !transfer_queue ? (vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eShaderWrite | vk::AccessFlagBits::eTransferRead | vk::AccessFlagBits::eTransferWrite) : (vk::AccessFlagBits::eTransferRead | vk::AccessFlagBits::eTransferWrite) }, @@ -1600,8 +1636,8 @@ static void ggml_vk_wait_events(vk_context& ctx, std::vector&& events ctx->s->buffer.waitEvents( events, - ctx->q->stage_flags, - ctx->q->stage_flags, + ctx->p->q->stage_flags, + ctx->p->q->stage_flags, {}, {}, {} @@ -3358,7 +3394,8 @@ static vk_device ggml_vk_get_device(size_t idx) { ggml_vk_create_queue(device, device->transfer_queue, transfer_queue_family_index, transfer_queue_index, { vk::PipelineStageFlagBits::eTransfer }, true); } else { // TODO: Use pointer or reference to avoid copy - device->transfer_queue = device->compute_queue; + device->transfer_queue.copyFrom(device->compute_queue); + device->transfer_queue.cmd_pool.init(device, &device->transfer_queue); } device->buffer_type = { @@ -3724,6 +3761,9 @@ static void ggml_vk_init(ggml_backend_vk_context * ctx, size_t idx) { ctx->fence = ctx->device->device.createFence({}); ctx->almost_ready_fence = ctx->device->device.createFence({}); + ctx->compute_cmd_pool.init(ctx->device, &ctx->device->compute_queue); + ctx->transfer_cmd_pool.init(ctx->device, &ctx->device->transfer_queue); + #ifdef GGML_VULKAN_CHECK_RESULTS const char* skip_checks = getenv("GGML_VULKAN_SKIP_CHECKS"); vk_skip_checks = (skip_checks == NULL ? 0 : atoi(skip_checks)); @@ -4089,9 +4129,9 @@ static void ggml_vk_host_get(vk_device& device, const void * ptr, vk_buffer& buf } } -static vk_submission ggml_vk_begin_submission(vk_device& device, vk_queue& q, bool one_time = true) { +static vk_submission ggml_vk_begin_submission(vk_device& device, vk_command_pool& p, bool one_time = true) { vk_submission s; - s.buffer = ggml_vk_create_cmd_buffer(device, q); + s.buffer = ggml_vk_create_cmd_buffer(device, p); if (one_time) { s.buffer.begin({ vk::CommandBufferUsageFlagBits::eOneTimeSubmit }); } else { @@ -4176,7 +4216,7 @@ static void ggml_vk_ctx_begin(vk_device& device, vk_context& subctx) { ggml_vk_ctx_end(subctx); } - subctx->seqs.push_back({ ggml_vk_begin_submission(device, *subctx->q) }); + subctx->seqs.push_back({ ggml_vk_begin_submission(device, *subctx->p) }); subctx->s = subctx->seqs[subctx->seqs.size() - 1].data(); } @@ -4377,7 +4417,9 @@ static void ggml_vk_buffer_write_2d(vk_buffer& dst, size_t offset, const void * memcpy((uint8_t *)dst->ptr + offset + i * width, (const uint8_t *) src + i * spitch, width); } } else { - vk_context subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue); + std::lock_guard guard(dst->device->mutex); + + vk_context subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue.cmd_pool); ggml_vk_ctx_begin(dst->device, subctx); ggml_vk_buffer_write_2d_async(subctx, dst, offset, src, spitch, width, height, true); ggml_vk_ctx_end(subctx); @@ -4389,6 +4431,7 @@ static void ggml_vk_buffer_write_2d(vk_buffer& dst, size_t offset, const void * ggml_vk_submit(subctx, dst->device->fence); VK_CHECK(dst->device->device.waitForFences({ dst->device->fence }, true, UINT64_MAX), "vk_buffer_write_2d waitForFences"); dst->device->device.resetFences({ dst->device->fence }); + ggml_vk_queue_command_pools_cleanup(dst->device); } } @@ -4465,7 +4508,9 @@ static void ggml_vk_buffer_read(vk_buffer& src, size_t offset, void * dst, size_ memcpy(dst, (uint8_t *) src->ptr + offset, size); } else { - vk_context subctx = ggml_vk_create_temporary_context(src->device->transfer_queue); + std::lock_guard guard(src->device->mutex); + + vk_context subctx = ggml_vk_create_temporary_context(src->device->transfer_queue.cmd_pool); ggml_vk_ctx_begin(src->device, subctx); ggml_vk_buffer_read_async(subctx, src, offset, dst, size, true); ggml_vk_ctx_end(subctx); @@ -4473,6 +4518,7 @@ static void ggml_vk_buffer_read(vk_buffer& src, size_t offset, void * dst, size_ ggml_vk_submit(subctx, src->device->fence); VK_CHECK(src->device->device.waitForFences({ src->device->fence }, true, UINT64_MAX), "vk_buffer_read waitForFences"); src->device->device.resetFences({ src->device->fence }); + ggml_vk_queue_command_pools_cleanup(src->device); for (auto& cpy : subctx->out_memcpys) { memcpy(cpy.dst, cpy.src, cpy.n); @@ -4492,15 +4538,17 @@ static void ggml_vk_buffer_copy_async(vk_context& ctx, vk_buffer& dst, size_t ds static void ggml_vk_buffer_copy(vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) { if (src->device == dst->device) { + std::lock_guard guard(src->device->mutex); VK_LOG_DEBUG("ggml_vk_buffer_copy(SINGLE_DEVICE, " << size << ")"); // Copy within the device - vk_context subctx = ggml_vk_create_temporary_context(src->device->transfer_queue); + vk_context subctx = ggml_vk_create_temporary_context(src->device->transfer_queue.cmd_pool); ggml_vk_ctx_begin(src->device, subctx); ggml_vk_buffer_copy_async(subctx, dst, dst_offset, src, src_offset, size); ggml_vk_ctx_end(subctx); ggml_vk_submit(subctx, src->device->fence); VK_CHECK(src->device->device.waitForFences({ src->device->fence }, true, UINT64_MAX), "vk_buffer_copy waitForFences"); src->device->device.resetFences({ src->device->fence }); + ggml_vk_queue_command_pools_cleanup(src->device); } else { VK_LOG_DEBUG("ggml_vk_buffer_copy(MULTI_DEVICE, " << size << ")"); // Copy device to device @@ -4525,7 +4573,8 @@ static void ggml_vk_buffer_memset_async(vk_context& ctx, vk_buffer& dst, size_t static void ggml_vk_buffer_memset(vk_buffer& dst, size_t offset, uint32_t c, size_t size) { VK_LOG_DEBUG("ggml_vk_buffer_memset(" << offset << ", " << c << ", " << size << ")"); - vk_context subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue); + std::lock_guard guard(dst->device->mutex); + vk_context subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue.cmd_pool); ggml_vk_ctx_begin(dst->device, subctx); subctx->s->buffer.fillBuffer(dst->buffer, offset, size, c); ggml_vk_ctx_end(subctx); @@ -4533,6 +4582,7 @@ static void ggml_vk_buffer_memset(vk_buffer& dst, size_t offset, uint32_t c, siz ggml_vk_submit(subctx, dst->device->fence); VK_CHECK(dst->device->device.waitForFences({ dst->device->fence }, true, UINT64_MAX), "vk_memset waitForFences"); dst->device->device.resetFences({ dst->device->fence }); + ggml_vk_queue_command_pools_cleanup(dst->device); } static uint32_t ggml_vk_guess_split_k(ggml_backend_vk_context * ctx, int m, int n, int k, const vk_pipeline& pipeline) { @@ -7894,7 +7944,7 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t ggml_vk_buffer_write(d_X, 0, x, sizeof(X_TYPE) * k * m * batch); ggml_vk_buffer_write(d_Y, 0, y, sizeof(Y_TYPE) * k * n * batch); - vk_context subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); + vk_context subctx = ggml_vk_create_context(ctx, ctx->compute_cmd_pool); ggml_vk_ctx_begin(ctx->device, subctx); for (size_t i = 0; i < num_it; i++) { ggml_vk_matmul( @@ -7910,6 +7960,7 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t ggml_vk_submit(subctx, ctx->fence); VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_matmul waitForFences"); ctx->device->device.resetFences({ ctx->fence }); + ggml_vk_queue_command_pools_cleanup(ctx->device); auto end = std::chrono::high_resolution_clock::now(); double time = std::chrono::duration_cast(end-begin).count() / 1000.0; @@ -8011,8 +8062,8 @@ static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t free(d_chk); - ggml_vk_queue_cleanup(ctx->device, ctx->device->transfer_queue); - ggml_vk_queue_cleanup(ctx->device, ctx->device->compute_queue); + ggml_vk_command_pool_cleanup(ctx->device, ctx->compute_cmd_pool); + ggml_vk_command_pool_cleanup(ctx->device, ctx->transfer_cmd_pool); ggml_vk_destroy_buffer(d_X); ggml_vk_destroy_buffer(d_Y); @@ -8105,7 +8156,7 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ ggml_vk_buffer_write(qx_buf, 0, qx, qx_sz); - vk_context subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); + vk_context subctx = ggml_vk_create_context(ctx, ctx->compute_cmd_pool); ggml_vk_ctx_begin(ctx->device, subctx); const std::vector pc = { 1, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne }; ggml_vk_dispatch_pipeline(ctx, subctx, p, { vk_subbuffer{ qx_buf, 0, qx_sz }, vk_subbuffer{ x_buf, 0, x_sz_f16 } }, pc, { (uint32_t)ne, 1, 1}); @@ -8116,6 +8167,7 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ ggml_vk_submit(subctx, ctx->fence); VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences"); ctx->device->device.resetFences({ ctx->fence }); + ggml_vk_queue_command_pools_cleanup(ctx->device); auto end = std::chrono::high_resolution_clock::now(); @@ -8205,7 +8257,7 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ // // ggml_vk_buffer_write(x_buf, 0, x, x_sz); // -// vk_context subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); +// vk_context subctx = ggml_vk_create_context(ctx, ctx->compute_cmd_pool); // ggml_vk_ctx_begin(ctx->device, subctx); // ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(x_buf), ggml_vk_subbuffer(qx_buf), ne); // ggml_vk_ctx_end(subctx); @@ -8215,6 +8267,7 @@ static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_ // ggml_vk_submit(subctx, ctx->fence); // VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_quantize waitForFences"); // ctx->device->device.resetFences({ ctx->fence }); +// ggml_vk_queue_command_pools_cleanup(ctx->device); // // auto end = std::chrono::high_resolution_clock::now(); // @@ -8379,7 +8432,7 @@ static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, ggml_vk_buffer_write(qx_buf, 0, qx, qx_sz); ggml_vk_buffer_write(y_buf, 0, y, y_sz); - vk_context subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); + vk_context subctx = ggml_vk_create_context(ctx, ctx->compute_cmd_pool); ggml_vk_ctx_begin(ctx->device, subctx); if (mmq) { for (size_t i = 0; i < num_it; i++) { @@ -8408,6 +8461,7 @@ static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, ggml_vk_submit(subctx, ctx->fence); VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences"); ctx->device->device.resetFences({ ctx->fence }); + ggml_vk_queue_command_pools_cleanup(ctx->device); auto end = std::chrono::high_resolution_clock::now(); @@ -8722,7 +8776,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_tensor * nod if (!dryrun) { if (ctx->compute_ctx.expired()) { - compute_ctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); + 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 { @@ -9168,8 +9222,8 @@ static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) { } ctx->gc.temp_buffers.clear(); - ggml_vk_queue_cleanup(ctx->device, ctx->device->compute_queue); - ggml_vk_queue_cleanup(ctx->device, ctx->device->transfer_queue); + ggml_vk_command_pool_cleanup(ctx->device, ctx->compute_cmd_pool); + ggml_vk_command_pool_cleanup(ctx->device, ctx->transfer_cmd_pool); for (size_t i = 0; i < ctx->gc.semaphores.size(); i++) { ctx->device->device.destroySemaphore({ ctx->gc.semaphores[i].s }); @@ -9224,6 +9278,9 @@ static void ggml_vk_cleanup(ggml_backend_vk_context * ctx) { } ctx->descriptor_pools.clear(); ctx->descriptor_sets.clear(); + + ctx->compute_cmd_pool.destroy(ctx->device->device); + ctx->transfer_cmd_pool.destroy(ctx->device->device); } static int ggml_vk_get_device_count() { @@ -9490,7 +9547,7 @@ static void ggml_backend_vk_set_tensor_async(ggml_backend_t backend, ggml_tensor if (ctx->transfer_ctx.expired()) { // Initialize new transfer context - transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); + transfer_ctx = ggml_vk_create_context(ctx, ctx->transfer_cmd_pool); ctx->transfer_ctx = transfer_ctx; ggml_vk_ctx_begin(ctx->device, transfer_ctx); } else { @@ -9513,7 +9570,7 @@ static void ggml_backend_vk_get_tensor_async(ggml_backend_t backend, const ggml_ if (ctx->transfer_ctx.expired()) { // Initialize new transfer context - transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); + transfer_ctx = ggml_vk_create_context(ctx, ctx->transfer_cmd_pool); ctx->transfer_ctx = transfer_ctx; ggml_vk_ctx_begin(ctx->device, transfer_ctx); } else { @@ -9536,7 +9593,7 @@ static bool ggml_backend_vk_cpy_tensor_async(ggml_backend_t backend, const ggml_ if (ctx->transfer_ctx.expired()) { // Initialize new transfer context - transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); + transfer_ctx = ggml_vk_create_context(ctx, ctx->transfer_cmd_pool); ctx->transfer_ctx = transfer_ctx; ggml_vk_ctx_begin(ctx->device, transfer_ctx); } else { @@ -9629,7 +9686,7 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg ctx->device->device.resetQueryPool(ctx->device->query_pool, 0, cgraph->n_nodes+1); GGML_ASSERT(ctx->compute_ctx.expired()); - compute_ctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); + compute_ctx = ggml_vk_create_context(ctx, ctx->compute_cmd_pool); ctx->compute_ctx = compute_ctx; ggml_vk_ctx_begin(ctx->device, compute_ctx); compute_ctx->s->buffer.writeTimestamp(vk::PipelineStageFlagBits::eAllCommands, ctx->device->query_pool, 0); @@ -9664,7 +9721,7 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg if (vk_perf_logger_enabled) { if (ctx->compute_ctx.expired()) { - compute_ctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); + 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 { From cc66a7f78f95dcb5208420f4dd1abc3fc6aec0cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Wed, 11 Jun 2025 17:16:32 +0200 Subject: [PATCH 16/95] tests : add test-tokenizers-repo (#14017) --- tests/CMakeLists.txt | 38 +++++++++++++++++++++++++++++++++-- tests/test-tokenizers-repo.sh | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100755 tests/test-tokenizers-repo.sh diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2f7bad2cf7ec9..85299837c2f8a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -42,6 +42,34 @@ function(llama_test target) set_property(TEST ${TEST_NAME} PROPERTY LABELS ${LLAMA_TEST_LABEL}) endfunction() +function(llama_test_cmd target) + include(CMakeParseArguments) + set(options) + set(oneValueArgs NAME LABEL WORKING_DIRECTORY) + set(multiValueArgs ARGS) + cmake_parse_arguments(LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT DEFINED LLAMA_TEST_LABEL) + set(LLAMA_TEST_LABEL "main") + endif() + if (NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY) + set(LLAMA_TEST_WORKING_DIRECTORY .) + endif() + if (DEFINED LLAMA_TEST_NAME) + set(TEST_NAME ${LLAMA_TEST_NAME}) + else() + set(TEST_NAME ${target}) + endif() + + add_test( + NAME ${TEST_NAME} + WORKING_DIRECTORY ${LLAMA_TEST_WORKING_DIRECTORY} + COMMAND ${target} + ${LLAMA_TEST_ARGS}) + + set_property(TEST ${TEST_NAME} PROPERTY LABELS ${LLAMA_TEST_LABEL}) +endfunction() + # Builds and runs a test source file. # Optional args: # - NAME: name of the executable & test target (defaults to the source file name without extension) @@ -97,8 +125,14 @@ llama_test(test-tokenizer-0 NAME test-tokenizer-0-qwen2 ARGS ${CMAKE llama_test(test-tokenizer-0 NAME test-tokenizer-0-refact ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-refact.gguf) llama_test(test-tokenizer-0 NAME test-tokenizer-0-starcoder ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-starcoder.gguf) -# TODO: missing HF tokenizer for this model in convert_hf_to_gguf_update.py, see https://github.com/ggml-org/llama.cpp/pull/13847 -# llama_test(test-tokenizer-0 NAME test-tokenizer-0-nomic-bert-moe ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-nomic-bert-moe.gguf) +if (NOT WIN32) + llama_test_cmd( + ${CMAKE_CURRENT_SOURCE_DIR}/test-tokenizers-repo.sh + NAME test-tokenizers-ggml-vocabs + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + ARGS https://huggingface.co/ggml-org/vocabs ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocabs + ) +endif() if (LLAMA_LLGUIDANCE) llama_build_and_test(test-grammar-llguidance.cpp ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama-bpe.gguf) diff --git a/tests/test-tokenizers-repo.sh b/tests/test-tokenizers-repo.sh new file mode 100755 index 0000000000000..86e839133ce62 --- /dev/null +++ b/tests/test-tokenizers-repo.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +if [ $# -lt 2 ]; then + printf "Usage: $0 []\n" + exit 1 +fi + +if [ $# -eq 3 ]; then + toktest=$3 +else + toktest="./test-tokenizer-0" +fi + +if [ ! -x $toktest ]; then + printf "Test executable \"$toktest\" not found!\n" + exit 1 +fi + +repo=$1 +folder=$2 + +if [ -d $folder ] && [ -d $folder/.git ]; then + (cd $folder; git pull) +else + git clone $repo $folder +fi + +shopt -s globstar +for gguf in $folder/**/*.gguf; do + if [ -f $gguf.inp ] && [ -f $gguf.out ]; then + $toktest $gguf + else + printf "Found \"$gguf\" without matching inp/out files, ignoring...\n" + fi +done + From d4e0d95cf581f50c9a21d06eaecae2dd580076bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Wed, 11 Jun 2025 19:04:23 +0200 Subject: [PATCH 17/95] chore : clean up relative source dir paths (#14128) --- common/CMakeLists.txt | 8 +++---- tests/CMakeLists.txt | 54 +++++++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 564af1448f95a..8ba02c1462c91 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -7,8 +7,8 @@ llama_add_compile_flags() # Build info header # -if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.git") - set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.git") +if(EXISTS "${PROJECT_SOURCE_DIR}/.git") + set(GIT_DIR "${PROJECT_SOURCE_DIR}/.git") # Is git submodule if(NOT IS_DIRECTORY "${GIT_DIR}") @@ -18,7 +18,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.git") if (SLASH_POS EQUAL 0) set(GIT_DIR "${REAL_GIT_DIR}") else() - set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${REAL_GIT_DIR}") + set(GIT_DIR "${PROJECT_SOURCE_DIR}/${REAL_GIT_DIR}") endif() endif() @@ -42,7 +42,7 @@ add_custom_command( -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR} -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info-gen-cpp.cmake" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.." + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in" ${GIT_INDEX} VERBATIM ) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 85299837c2f8a..db4b2cf65cc43 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -111,31 +111,31 @@ endfunction() # build test-tokenizer-0 target once and add many tests llama_build(test-tokenizer-0.cpp) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-bert-bge ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-bert-bge.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-command-r ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-command-r.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-deepseek-coder ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-deepseek-coder.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-deepseek-llm ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-deepseek-llm.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-falcon ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-falcon.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-gpt-2 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-gpt-2.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-llama-bpe ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama-bpe.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-llama-spm ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama-spm.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-mpt ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-mpt.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-phi-3 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-phi-3.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-qwen2 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-qwen2.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-refact ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-refact.gguf) -llama_test(test-tokenizer-0 NAME test-tokenizer-0-starcoder ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-starcoder.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-bert-bge ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-bert-bge.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-command-r ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-command-r.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-deepseek-coder ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-deepseek-coder.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-deepseek-llm ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-deepseek-llm.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-falcon ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-falcon.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-gpt-2 ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-2.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-llama-bpe ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-llama-spm ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-spm.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-mpt ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-mpt.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-phi-3 ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-phi-3.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-qwen2 ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-qwen2.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-refact ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-refact.gguf) +llama_test(test-tokenizer-0 NAME test-tokenizer-0-starcoder ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-starcoder.gguf) if (NOT WIN32) llama_test_cmd( ${CMAKE_CURRENT_SOURCE_DIR}/test-tokenizers-repo.sh NAME test-tokenizers-ggml-vocabs WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - ARGS https://huggingface.co/ggml-org/vocabs ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocabs + ARGS https://huggingface.co/ggml-org/vocabs ${PROJECT_SOURCE_DIR}/models/ggml-vocabs ) endif() if (LLAMA_LLGUIDANCE) - llama_build_and_test(test-grammar-llguidance.cpp ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama-bpe.gguf) + llama_build_and_test(test-grammar-llguidance.cpp ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf) endif () if (NOT WIN32 OR NOT BUILD_SHARED_LIBS) @@ -147,8 +147,8 @@ if (NOT WIN32 OR NOT BUILD_SHARED_LIBS) llama_build_and_test(test-chat.cpp) # TODO: disabled on loongarch64 because the ggml-ci node lacks Python 3.8 if (NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64") - llama_build_and_test(test-json-schema-to-grammar.cpp WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..) - target_include_directories(test-json-schema-to-grammar PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../tools/server) + llama_build_and_test(test-json-schema-to-grammar.cpp WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + target_include_directories(test-json-schema-to-grammar PRIVATE ${PROJECT_SOURCE_DIR}/tools/server) endif() if (NOT GGML_BACKEND_DL) @@ -161,20 +161,20 @@ if (NOT WIN32 OR NOT BUILD_SHARED_LIBS) llama_build(test-tokenizer-1-bpe.cpp) # TODO: disabled due to slowness - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-aquila ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-aquila.gguf) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-falcon ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-falcon.gguf) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-2 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-gpt-2.gguf) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-neox ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-gpt-neox.gguf) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-llama-bpe ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama-bpe.gguf --ignore-merges) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-mpt ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-mpt.gguf) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-refact ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-refact.gguf) - #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-starcoder ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-starcoder.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-aquila ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-aquila.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-falcon ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-falcon.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-2 ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-2.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-neox ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-neox.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-llama-bpe ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf --ignore-merges) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-mpt ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-mpt.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-refact ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-refact.gguf) + #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-starcoder ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-starcoder.gguf) # build test-tokenizer-1-spm target once and add many tests llama_build(test-tokenizer-1-spm.cpp) - llama_test(test-tokenizer-1-spm NAME test-tokenizer-1-llama-spm ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama-spm.gguf) - #llama_test(test-tokenizer-1-spm NAME test-tokenizer-1-baichuan ARGS ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-baichuan.gguf) + llama_test(test-tokenizer-1-spm NAME test-tokenizer-1-llama-spm ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-spm.gguf) + #llama_test(test-tokenizer-1-spm NAME test-tokenizer-1-baichuan ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-baichuan.gguf) # llama_build_and_test(test-double-float.cpp) # SLOW endif() From 532802f938c6a18cc6a704057ab571f253fd77ed Mon Sep 17 00:00:00 2001 From: Christian Kastner Date: Wed, 11 Jun 2025 19:07:44 +0000 Subject: [PATCH 18/95] Implement GGML_CPU_ALL_VARIANTS for ARM (#14080) * ggml-cpu: Factor out feature detection build from x86 * ggml-cpu: Add ARM feature detection and scoring This is analogous to cpu-feats-x86.cpp. However, to detect compile-time activation of features, we rely on GGML_USE_ which need to be set in cmake, instead of GGML_ that users would set for x86. This is because on ARM, users specify features with GGML_CPU_ARM_ARCH, rather than with individual flags. * ggml-cpu: Implement GGML_CPU_ALL_VARIANTS for ARM Like x86, however to pass around arch flags within cmake, we use GGML_INTERNAL_ as we don't have GGML_. Some features are optional, so we may need to build multiple backends per arch version (armv8.2_1, armv8.2_2, ...), and let the scoring function sort out which one can be used. * ggml-cpu: Limit ARM GGML_CPU_ALL_VARIANTS to Linux for now The other platforms will need their own specific variants. This also fixes the bug that the the variant-building branch was always being executed as the else-branch of GGML_NATIVE=OFF. The branch is moved to an elseif-branch which restores the previous behavior. --- ggml/src/CMakeLists.txt | 44 ++++++++--- ggml/src/ggml-cpu/CMakeLists.txt | 70 +++++++++++++++--- ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp | 94 ++++++++++++++++++++++++ 3 files changed, 184 insertions(+), 24 deletions(-) create mode 100644 ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index d91dbc46fe9e1..726da5e048b18 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -270,17 +270,23 @@ endfunction() function(ggml_add_cpu_backend_variant tag_name) set(GGML_CPU_TAG_NAME ${tag_name}) # other: OPENMP LLAMAFILE CPU_HBM - foreach (feat NATIVE - SSE42 - AVX AVX2 BMI2 AVX_VNNI FMA F16C - AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 - AMX_TILE AMX_INT8 AMX_BF16) - set(GGML_${feat} OFF) - endforeach() - - foreach (feat ${ARGN}) - set(GGML_${feat} ON) - endforeach() + if (GGML_SYSTEM_ARCH STREQUAL "x86") + foreach (feat NATIVE + SSE42 + AVX AVX2 BMI2 AVX_VNNI FMA F16C + AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 + AMX_TILE AMX_INT8 AMX_BF16) + set(GGML_${feat} OFF) + endforeach() + + foreach (feat ${ARGN}) + set(GGML_${feat} ON) + endforeach() + elseif (GGML_SYSTEM_ARCH STREQUAL "ARM") + foreach (feat ${ARGN}) + set(GGML_INTERNAL_${feat} ON) + endforeach() + endif() ggml_add_cpu_backend_variant_impl(${tag_name}) endfunction() @@ -290,6 +296,8 @@ ggml_add_backend(CPU) if (GGML_CPU_ALL_VARIANTS) if (NOT GGML_BACKEND_DL) message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS requires GGML_BACKEND_DL") + elseif (GGML_CPU_ARM_ARCH) + message(FATAL_ERROR "Cannot use both GGML_CPU_ARM_ARCH and GGML_CPU_ALL_VARIANTS") endif() if (GGML_SYSTEM_ARCH STREQUAL "x86") ggml_add_cpu_backend_variant(x64) @@ -303,8 +311,20 @@ if (GGML_CPU_ALL_VARIANTS) # MSVC doesn't support AMX ggml_add_cpu_backend_variant(sapphirerapids SSE42 AVX F16C AVX2 BMI2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8) endif() + elseif(GGML_SYSTEM_ARCH STREQUAL "ARM" AND CMAKE_SYSTEM_NAME MATCHES "Linux") + # Many of these features are optional so we build versions with popular + # combinations and name the backends based on the version they were + # first released with + ggml_add_cpu_backend_variant(armv8.0_1) + ggml_add_cpu_backend_variant(armv8.2_1 DOTPROD) + ggml_add_cpu_backend_variant(armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC) + ggml_add_cpu_backend_variant(armv8.2_3 DOTPROD FP16_VECTOR_ARITHMETIC SVE) + ggml_add_cpu_backend_variant(armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) + ggml_add_cpu_backend_variant(armv8.6_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) + ggml_add_cpu_backend_variant(armv9.2_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME) + ggml_add_cpu_backend_variant(armv9.2_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME) else() - message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported on ${GGML_SYSTEM_ARCH}") + message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") endif() elseif (GGML_CPU) ggml_add_cpu_backend_variant_impl("") diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 77dfc10df2057..e4c0fa8d0240c 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -1,3 +1,17 @@ +function(ggml_add_cpu_backend_features cpu_name arch) + # The feature detection code is compiled as a separate target so that + # it can be built without the architecture flags + # Since multiple variants of the CPU backend may be included in the same + # build, using set_source_files_properties() to set the arch flags is not possible + set(GGML_CPU_FEATS_NAME ${cpu_name}-feats) + add_library(${GGML_CPU_FEATS_NAME} OBJECT ggml-cpu/arch/${arch}/cpu-feats.cpp) + target_include_directories(${GGML_CPU_FEATS_NAME} PRIVATE . .. ../include) + target_compile_definitions(${GGML_CPU_FEATS_NAME} PRIVATE ${ARGN}) + target_compile_definitions(${GGML_CPU_FEATS_NAME} PRIVATE GGML_BACKEND_DL GGML_BACKEND_BUILD GGML_BACKEND_SHARED) + set_target_properties(${GGML_CPU_FEATS_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) + target_link_libraries(${cpu_name} PRIVATE ${GGML_CPU_FEATS_NAME}) +endfunction() + function(ggml_add_cpu_backend_variant_impl tag_name) if (tag_name) set(GGML_CPU_NAME ggml-cpu-${tag_name}) @@ -143,6 +157,49 @@ function(ggml_add_cpu_backend_variant_impl tag_name) else() if (GGML_CPU_ARM_ARCH) list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH}) + elseif(GGML_CPU_ALL_VARIANTS) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + # Begin with the lowest baseline + set(ARM_MCPU "armv8-a") + set(ARCH_TAGS "") + set(ARCH_DEFINITIONS "") + + # When a feature is selected, bump the MCPU to the first + # version that supported it + if (GGML_INTERNAL_DOTPROD) + set(ARM_MCPU "armv8.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+dotprod") + list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD) + endif() + if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC) + set(ARM_MCPU "armv8.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+fp16") + list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC) + endif() + if (GGML_INTERNAL_SVE) + set(ARM_MCPU "armv8.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+sve") + list(APPEND ARCH_DEFINITIONS GGML_USE_SVE) + endif() + if (GGML_INTERNAL_MATMUL_INT8) + set(ARM_MCPU "armv8.6-a") + set(ARCH_TAGS "${ARCH_TAGS}+i8mm") + list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8) + endif() + if (GGML_INTERNAL_SVE2) + set(ARM_MCPU "armv8.6-a") + set(ARCH_TAGS "${ARCH_TAGS}+sve2") + list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2) + endif() + if (GGML_INTERNAL_SME) + set(ARM_MCPU "armv9.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+sme") + list(APPEND ARCH_DEFINITIONS GGML_USE_SME) + endif() + + list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}") + ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) + endif() endif() endif() @@ -306,18 +363,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) # the feature check relies on ARCH_DEFINITIONS, but it is not set with GGML_NATIVE message(FATAL_ERROR "GGML_NATIVE is not compatible with GGML_BACKEND_DL, consider using GGML_CPU_ALL_VARIANTS") endif() - - # The feature detection code is compiled as a separate target so that - # it can be built without the architecture flags - # Since multiple variants of the CPU backend may be included in the same - # build, using set_source_files_properties() to set the arch flags is not possible - set(GGML_CPU_FEATS_NAME ${GGML_CPU_NAME}-feats) - add_library(${GGML_CPU_FEATS_NAME} OBJECT ggml-cpu/arch/x86/cpu-feats.cpp) - target_include_directories(${GGML_CPU_FEATS_NAME} PRIVATE . .. ../include) - target_compile_definitions(${GGML_CPU_FEATS_NAME} PRIVATE ${ARCH_DEFINITIONS}) - target_compile_definitions(${GGML_CPU_FEATS_NAME} PRIVATE GGML_BACKEND_DL GGML_BACKEND_BUILD GGML_BACKEND_SHARED) - set_target_properties(${GGML_CPU_FEATS_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) - target_link_libraries(${GGML_CPU_NAME} PRIVATE ${GGML_CPU_FEATS_NAME}) + ggml_add_cpu_backend_features(${GGML_CPU_NAME} x86 ${ARCH_DEFINITIONS}) endif() elseif (GGML_SYSTEM_ARCH STREQUAL "PowerPC") message(STATUS "PowerPC detected") diff --git a/ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp b/ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp new file mode 100644 index 0000000000000..67369147ce851 --- /dev/null +++ b/ggml/src/ggml-cpu/arch/arm/cpu-feats.cpp @@ -0,0 +1,94 @@ +#include "ggml-backend-impl.h" + +#if defined(__aarch64__) + +#if defined(__linux__) +#include +#elif defined(__APPLE__) +#include +#endif + +#if !defined(HWCAP2_I8MM) +#define HWCAP2_I8MM (1 << 13) +#endif + +#if !defined(HWCAP2_SME) +#define HWCAP2_SME (1 << 23) +#endif + +struct aarch64_features { + // has_neon not needed, aarch64 has NEON guaranteed + bool has_dotprod = false; + bool has_fp16_va = false; + bool has_sve = false; + bool has_sve2 = false; + bool has_i8mm = false; + bool has_sme = false; + + aarch64_features() { +#if defined(__linux__) + uint32_t hwcap = getauxval(AT_HWCAP); + uint32_t hwcap2 = getauxval(AT_HWCAP2); + + has_dotprod = !!(hwcap & HWCAP_ASIMDDP); + has_fp16_va = !!(hwcap & HWCAP_FPHP); + has_sve = !!(hwcap & HWCAP_SVE); + has_sve2 = !!(hwcap2 & HWCAP2_SVE2); + has_i8mm = !!(hwcap2 & HWCAP2_I8MM); + has_sme = !!(hwcap2 & HWCAP2_SME); +#elif defined(__APPLE__) + int oldp = 0; + size_t size = sizeof(oldp); + + if (sysctlbyname("hw.optional.arm.FEAT_DotProd", &oldp, &size, NULL, 0) == 0) { + has_dotprod = static_cast(oldp); + } + + if (sysctlbyname("hw.optional.arm.FEAT_I8MM", &oldp, &size, NULL, 0) == 0) { + has_i8mm = static_cast(oldp); + } + + if (sysctlbyname("hw.optional.arm.FEAT_SME", &oldp, &size, NULL, 0) == 0) { + has_sme = static_cast(oldp); + } + + // Apple apparently does not implement SVE yet +#endif + } +}; + +static int ggml_backend_cpu_aarch64_score() { + int score = 1; + aarch64_features af; + +#ifdef GGML_USE_DOTPROD + if (!af.has_dotprod) { return 0; } + score += 1<<1; +#endif +#ifdef GGML_USE_FP16_VECTOR_ARITHMETIC + if (!af.has_fp16_va) { return 0; } + score += 1<<2; +#endif +#ifdef GGML_USE_SVE + if (!af.has_sve) { return 0; } + score += 1<<3; +#endif +#ifdef GGML_USE_MATMUL_INT8 + if (!af.has_i8mm) { return 0; } + score += 1<<4; +#endif +#ifdef GGML_USE_SVE2 + if (!af.has_sve2) { return 0; } + score += 1<<5; +#endif +#ifdef GGML_USE_SME + if (!af.has_sme) { return 0; } + score += 1<<6; +#endif + + return score; +} + +GGML_BACKEND_DL_SCORE_IMPL(ggml_backend_cpu_aarch64_score) + +# endif // defined(__aarch64__) From 2e89f76b7af2c0b827be785e445f2e2b3e52e1ca Mon Sep 17 00:00:00 2001 From: bandoti <141645996+bandoti@users.noreply.github.com> Date: Wed, 11 Jun 2025 17:19:44 -0300 Subject: [PATCH 19/95] common: fix issue with regex_escape routine on windows (#14133) --- common/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/common.cpp b/common/common.cpp index 218f1e1dc0e4d..e23887c70770c 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -466,7 +466,7 @@ size_t string_find_partial_stop(const std::string_view & str, const std::string_ std::string regex_escape(const std::string & s) { static const std::regex special_chars("[.^$|()*+?\\[\\]{}\\\\]"); - return std::regex_replace(s, special_chars, "\\$0"); + return std::regex_replace(s, special_chars, "\\$&"); } std::string string_join(const std::vector & values, const std::string & separator) { From a20b2b05bce6622c585459ebf46f142f113d021c Mon Sep 17 00:00:00 2001 From: compilade Date: Thu, 12 Jun 2025 02:56:04 -0400 Subject: [PATCH 20/95] context : round n_tokens to next multiple of n_seqs when reserving (#14140) This fixes RWKV inference which otherwise failed when the worst case ubatch.n_seq_tokens rounded to 0. --- src/llama-context.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llama-context.cpp b/src/llama-context.cpp index b130b484bcf6f..525a00d8adb95 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -1332,7 +1332,7 @@ ggml_cgraph * llama_context::graph_reserve(uint32_t n_tokens, uint32_t n_seqs, u 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) { - n_tokens = (n_tokens / n_seqs) * n_seqs; + n_tokens = ((n_tokens + (n_seqs - 1)) / n_seqs) * n_seqs; // round to next multiple of n_seqs n_outputs = std::min(n_outputs, n_tokens); LLAMA_LOG_DEBUG("%s: making n_tokens a multiple of n_seqs - n_tokens = %u, n_seqs = %u, n_outputs = %u\n", __func__, n_tokens, n_seqs, n_outputs); From 9596506965f65be5d802ecef6a315fe43d2391a8 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 12 Jun 2025 10:02:15 +0300 Subject: [PATCH 21/95] kv-cache : fix split_equal handling in unified implementation (#14130) ggml-ci --- src/llama-context.cpp | 2 + src/llama-kv-cache-unified-iswa.cpp | 71 ++++++++++++----- src/llama-kv-cache-unified.cpp | 114 +++++++++++++++++----------- 3 files changed, 122 insertions(+), 65 deletions(-) diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 525a00d8adb95..8cea21d6989ef 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -877,6 +877,8 @@ int llama_context::encode(llama_batch & inp_batch) { memcpy(cross.v_embd.data(), embd, ggml_nbytes(t_embd)); // remember the sequence ids used during the encoding - needed for cross attention later + // TODO: the seuqence indexing here is likely not correct in the general case + // probably works only for split_simple cross.seq_ids_enc.resize(n_tokens); for (int32_t i = 0; i < n_tokens; i++) { cross.seq_ids_enc[i].clear(); diff --git a/src/llama-kv-cache-unified-iswa.cpp b/src/llama-kv-cache-unified-iswa.cpp index 28d1826547649..caa58ea9aa3b0 100644 --- a/src/llama-kv-cache-unified-iswa.cpp +++ b/src/llama-kv-cache-unified-iswa.cpp @@ -98,33 +98,66 @@ llama_pos llama_kv_cache_unified_iswa::seq_pos_max(llama_seq_id seq_id) const { llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled, bool logits_all) { GGML_UNUSED(embd_pooled); - // TODO: if we fail with split_simple, we should attempt different splitting strategies - // but to do that properly, we first have to refactor the batches to be more flexible + // first try simple split + do { + auto sbatch = llama_sbatch(batch, hparams.n_embd, true, logits_all); - auto sbatch = llama_sbatch(batch, hparams.n_embd, true, logits_all); + std::vector ubatches; - std::vector ubatches; + while (sbatch.n_tokens > 0) { + auto ubatch = sbatch.split_simple(n_ubatch); - while (sbatch.n_tokens > 0) { - auto ubatch = sbatch.split_simple(n_ubatch); + ubatches.push_back(ubatch); + } - ubatches.push_back(ubatch); - } + auto heads_base = kv_base->prepare(ubatches); + if (heads_base.empty()) { + break; + } - auto heads_base = kv_base->prepare(ubatches); - if (heads_base.empty()) { - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); - } + auto heads_swa = kv_swa->prepare(ubatches); + if (heads_swa.empty()) { + break; + } - auto heads_swa = kv_swa->prepare(ubatches); - if (heads_swa.empty()) { - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); - } + assert(heads_base.size() == heads_swa.size()); + + return std::make_unique( + this, std::move(sbatch), std::move(heads_base), std::move(heads_swa), std::move(ubatches)); + } while (false); + + // if it fails, try equal split + do { + auto sbatch = llama_sbatch(batch, hparams.n_embd, false, logits_all); + + std::vector ubatches; - assert(heads_base.size() == heads_swa.size()); + while (sbatch.n_tokens > 0) { + auto ubatch = sbatch.split_equal(n_ubatch); + + ubatches.push_back(ubatch); + } + + auto heads_base = kv_base->prepare(ubatches); + if (heads_base.empty()) { + break; + } + + auto heads_swa = kv_swa->prepare(ubatches); + if (heads_swa.empty()) { + break; + } + + assert(heads_base.size() == heads_swa.size()); + + return std::make_unique( + this, std::move(sbatch), std::move(heads_base), std::move(heads_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( - this, std::move(sbatch), std::move(heads_base), std::move(heads_swa), std::move(ubatches)); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } llama_memory_state_ptr llama_kv_cache_unified_iswa::init_full() { diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index 1a9f4e3159f94..ddeb138f38fb9 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -314,20 +314,24 @@ llama_memory_state_ptr llama_kv_cache_unified::init_batch( bool logits_all) { GGML_UNUSED(embd_pooled); - auto sbatch = llama_sbatch(batch, hparams.n_embd, true, logits_all); + do { + auto sbatch = llama_sbatch(batch, hparams.n_embd, true, logits_all); - std::vector ubatches; - while (sbatch.n_tokens > 0) { - ubatches.push_back(sbatch.split_simple(n_ubatch)); - } + std::vector ubatches; + while (sbatch.n_tokens > 0) { + ubatches.push_back(sbatch.split_simple(n_ubatch)); + } - auto heads = prepare(ubatches); - if (heads.empty()) { - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); - } + auto heads = prepare(ubatches); + if (heads.empty()) { + break; + } - return std::make_unique( - this, std::move(sbatch), std::move(heads), std::move(ubatches)); + return std::make_unique( + this, std::move(sbatch), std::move(heads), std::move(ubatches)); + } while (false); + + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } llama_memory_state_ptr llama_kv_cache_unified::init_full() { @@ -521,7 +525,6 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { } if (debug > 0) { - LLAMA_LOG_CONT("\n"); LLAMA_LOG_DEBUG("%s: n = %5d, used = %5d, head = %5d, size = %5d, n_swa = %5d\n", __func__, cells.used_max_p1(), cells.get_used(), head, get_size(), n_swa); if ((debug == 2 && n_swa > 0) || debug > 2) { @@ -530,7 +533,13 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { if (cells.is_empty(i)) { ss += '.'; } else { - ss += std::to_string(cells.seq_get(i)); + assert(cells.seq_count(i) >= 1); + + if (cells.seq_count(i) == 1) { + ss += std::to_string(cells.seq_get(i)); + } else { + ss += 'M'; + } } if (i%256 == 255) { ss += " *"; @@ -636,6 +645,12 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { } void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch & ubatch) { + if (debug > 0) { + LLAMA_LOG_DEBUG("%s: ubatch info:\n", __func__); + LLAMA_LOG_DEBUG("%s: n_tokens = %d, equal_seqs = %d\n", __func__, ubatch.n_tokens, ubatch.equal_seqs); + LLAMA_LOG_DEBUG("%s: n_seq_tokens = %d, n_seqs = %d\n", __func__, ubatch.n_seq_tokens, ubatch.n_seqs); + } + // 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_PARALLEL_SEQUENCES]; @@ -643,22 +658,26 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch seq_pos_max_rm[s] = -1; } - for (uint32_t i = 0; i < ubatch.n_tokens; ++i) { - if (!cells.is_empty(head_cur + i)) { - assert(cells.seq_count(head_cur + i) == 1); + for (uint32_t s = 0; s < ubatch.n_seqs; ++s) { + for (uint32_t j = 0; j < ubatch.n_seq_tokens; ++j) { + const uint32_t idx = s*ubatch.n_seq_tokens + j; - const llama_seq_id seq_id = cells.seq_get(head_cur + i); - const llama_pos pos = cells.pos_get(head_cur + i); + if (!cells.is_empty(head_cur + idx)) { + assert(cells.seq_count(head_cur + idx) == 1); - seq_pos_max_rm[seq_id] = std::max(seq_pos_max_rm[seq_id], pos); + const llama_seq_id seq_id = cells.seq_get(head_cur + idx); + const llama_pos pos = cells.pos_get(head_cur + idx); - cells.rm(head_cur + i); - } + seq_pos_max_rm[seq_id] = std::max(seq_pos_max_rm[seq_id], pos); + + cells.rm(head_cur + idx); + } - cells.pos_set(head_cur + i, ubatch.pos[i]); + cells.pos_set(head_cur + idx, ubatch.pos[idx]); - for (int32_t j = 0; j < ubatch.n_seq_id[i]; j++) { - cells.seq_add(head_cur + i, ubatch.seq_id[i][j]); + for (int32_t i = 0; i < ubatch.n_seq_id[s]; i++) { + cells.seq_add(head_cur + idx, ubatch.seq_id[s][i]); + } } } @@ -677,7 +696,6 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch seq_rm(s, cells.seq_pos_min(s), seq_pos_max_rm[s] + 1); } } - // move the head at the end of the slot head = head_cur + ubatch.n_tokens; } @@ -774,14 +792,14 @@ ggml_tensor * llama_kv_cache_unified::cpy_v(ggml_context * ctx, ggml_tensor * v_ } void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ubatch * ubatch, bool causal_attn) const { - const int64_t n_tokens = ubatch->n_tokens; - const int64_t n_seq_tokens = ubatch->n_seq_tokens; - const int64_t n_seqs = ubatch->n_seqs; + const uint32_t n_tokens = ubatch->n_tokens; + const uint32_t n_seq_tokens = ubatch->n_seq_tokens; + const uint32_t n_seqs = ubatch->n_seqs; GGML_ASSERT(ggml_backend_buffer_is_host(dst->buffer)); float * data = (float *) dst->data; - const auto n_kv = dst->ne[0]; + const int64_t n_kv = dst->ne[0]; // Use only the previous KV cells of the correct sequence for each token of the ubatch. // It's assumed that if a token in the batch has multiple sequences, they are equivalent. @@ -795,12 +813,14 @@ void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ub // xxxxx----- // xxxxx----- // To visualize the mask, see https://github.com/ggml-org/llama.cpp/pull/12615 - for (int h = 0; h < 1; ++h) { - for (int s = 0; s < n_seqs; ++s) { + for (uint32_t h = 0; h < 1; ++h) { + for (uint32_t s = 0; s < n_seqs; ++s) { const llama_seq_id seq_id = ubatch->seq_id[s][0]; - for (int j = 0; j < n_seq_tokens; ++j) { - const llama_pos p1 = ubatch->pos[s*n_seq_tokens + j]; + for (uint32_t j = 0; j < n_seq_tokens; ++j) { + const uint32_t idx = s*n_seq_tokens + j; + + const llama_pos p1 = ubatch->pos[idx]; for (uint32_t i = 0; i < n_kv; ++i) { float f = 0.0f; @@ -830,16 +850,16 @@ void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ub f = -INFINITY; } - data[h*(n_kv*n_tokens) + s*(n_kv*n_seq_tokens) + j*n_kv + i] = f; + data[h*(n_kv*n_tokens) + idx*n_kv + i] = f; } } } // mask padded tokens if (data) { - for (int i = n_tokens; i < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++i) { - for (uint32_t j = 0; j < n_kv; ++j) { - data[h*(n_kv*n_tokens) + i*n_kv + j] = -INFINITY; + for (uint32_t j = n_tokens; j < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++j) { + for (uint32_t i = 0; i < n_kv; ++i) { + data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; } } } @@ -1490,9 +1510,11 @@ bool llama_kv_cache_unified::state_read_meta(llama_io_read_i & io, uint32_t cell seq_rm(dest_seq_id, -1, -1); llama_sbatch sbatch; - llama_ubatch batch = sbatch.reserve_ubatch(cell_count, /* has_embd */ false); + llama_ubatch ubatch = sbatch.reserve_ubatch(cell_count, /* has_embd */ false); - batch.n_tokens = cell_count; + ubatch.n_tokens = cell_count; + ubatch.n_seq_tokens = cell_count; + ubatch.n_seqs = 1; for (uint32_t i = 0; i < cell_count; ++i) { llama_pos pos; @@ -1512,18 +1534,18 @@ bool llama_kv_cache_unified::state_read_meta(llama_io_read_i & io, uint32_t cell io.read_to(&seq_id, sizeof(seq_id)); } - batch.pos[i] = pos; - batch.n_seq_id[i] = n_seq_id; - batch.seq_id[i] = &dest_seq_id; + ubatch.pos[i] = pos; + ubatch.n_seq_id[i] = n_seq_id; + ubatch.seq_id[i] = &dest_seq_id; } - const auto head_cur = find_slot(batch); + const auto head_cur = find_slot(ubatch); if (head_cur < 0) { LLAMA_LOG_ERROR("%s: failed to find available cells in kv cache\n", __func__); return false; } - apply_ubatch(head_cur, batch); + apply_ubatch(head_cur, ubatch); // keep the head at the old position because we will read the KV data into it in state_read_data() head = head_cur; @@ -1531,8 +1553,8 @@ bool llama_kv_cache_unified::state_read_meta(llama_io_read_i & io, uint32_t cell // DEBUG CHECK: head_cur should be our first cell, head_cur + cell_count - 1 should be our last cell (verify seq_id and pos values) // Assume that this is one contiguous block of cells GGML_ASSERT(head_cur + cell_count <= cells.size()); - GGML_ASSERT(cells.pos_get(head_cur) == batch.pos[0]); - GGML_ASSERT(cells.pos_get(head_cur + cell_count - 1) == batch.pos[cell_count - 1]); + GGML_ASSERT(cells.pos_get(head_cur) == ubatch.pos[0]); + GGML_ASSERT(cells.pos_get(head_cur + cell_count - 1) == ubatch.pos[cell_count - 1]); GGML_ASSERT(cells.seq_has(head_cur, dest_seq_id)); GGML_ASSERT(cells.seq_has(head_cur + cell_count - 1, dest_seq_id)); } else { From e2c0b6e46a5596665569ae765f0993cea2619af6 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 12 Jun 2025 10:14:24 +0300 Subject: [PATCH 22/95] cmake : handle whitepsaces in path during metal build (#14126) * cmake : handle whitepsaces in path during metal build ggml-ci * cont : proper fix ggml-ci --------- Co-authored-by: Daniel Bevenius --- ggml/src/ggml-metal/CMakeLists.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/ggml/src/ggml-metal/CMakeLists.txt b/ggml/src/ggml-metal/CMakeLists.txt index e222327809c31..77187efc1756d 100644 --- a/ggml/src/ggml-metal/CMakeLists.txt +++ b/ggml/src/ggml-metal/CMakeLists.txt @@ -44,21 +44,22 @@ if (GGML_METAL_EMBED_LIBRARY) set(METALLIB_SOURCE_EMBED_TMP "${CMAKE_BINARY_DIR}/autogenerated/ggml-metal-embed.metal.tmp") add_custom_command( - OUTPUT ${METALLIB_EMBED_ASM} + OUTPUT "${METALLIB_EMBED_ASM}" COMMAND echo "Embedding Metal library" - COMMAND sed -e '/__embed_ggml-common.h__/r ${METALLIB_COMMON}' -e '/__embed_ggml-common.h__/d' < ${METALLIB_SOURCE} > ${METALLIB_SOURCE_EMBED_TMP} - COMMAND sed -e '/\#include \"ggml-metal-impl.h\"/r ${METALLIB_IMPL}' -e '/\#include \"ggml-metal-impl.h\"/d' < ${METALLIB_SOURCE_EMBED_TMP} > ${METALLIB_SOURCE_EMBED} - COMMAND echo ".section __DATA,__ggml_metallib" > ${METALLIB_EMBED_ASM} - COMMAND echo ".globl _ggml_metallib_start" >> ${METALLIB_EMBED_ASM} - COMMAND echo "_ggml_metallib_start:" >> ${METALLIB_EMBED_ASM} - COMMAND echo ".incbin \\\"${METALLIB_SOURCE_EMBED}\\\"" >> ${METALLIB_EMBED_ASM} - COMMAND echo ".globl _ggml_metallib_end" >> ${METALLIB_EMBED_ASM} - COMMAND echo "_ggml_metallib_end:" >> ${METALLIB_EMBED_ASM} + COMMAND sed -e "/__embed_ggml-common.h__/r ${METALLIB_COMMON}" -e "/__embed_ggml-common.h__/d" < "${METALLIB_SOURCE}" > "${METALLIB_SOURCE_EMBED_TMP}" + COMMAND sed -e "/\#include \"ggml-metal-impl.h\"/r ${METALLIB_IMPL}" -e "/\#include \"ggml-metal-impl.h\"/d" < "${METALLIB_SOURCE_EMBED_TMP}" > "${METALLIB_SOURCE_EMBED}" + COMMAND echo ".section __DATA,__ggml_metallib" > "${METALLIB_EMBED_ASM}" + COMMAND echo ".globl _ggml_metallib_start" >> "${METALLIB_EMBED_ASM}" + COMMAND echo "_ggml_metallib_start:" >> "${METALLIB_EMBED_ASM}" + COMMAND echo .incbin "\"${METALLIB_SOURCE_EMBED}\"" >> "${METALLIB_EMBED_ASM}" + COMMAND echo ".globl _ggml_metallib_end" >> "${METALLIB_EMBED_ASM}" + COMMAND echo "_ggml_metallib_end:" >> "${METALLIB_EMBED_ASM}" DEPENDS ../ggml-common.h ggml-metal.metal ggml-metal-impl.h COMMENT "Generate assembly for embedded Metal library" + VERBATIM ) - target_sources(ggml-metal PRIVATE ${METALLIB_EMBED_ASM}) + target_sources(ggml-metal PRIVATE "${METALLIB_EMBED_ASM}") else() if (GGML_METAL_SHADER_DEBUG) # custom command to do the following: From c3ee46fab49a765d2e32e171e9ed7a5fa121dd9c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 12 Jun 2025 11:49:26 +0300 Subject: [PATCH 23/95] batch : remove logits_all flag (#14141) ggml-ci --- src/llama-batch.cpp | 10 ++-------- src/llama-batch.h | 4 +--- src/llama-context.cpp | 6 +++--- src/llama-kv-cache-recurrent.cpp | 4 ++-- src/llama-kv-cache-recurrent.h | 3 +-- src/llama-kv-cache-unified-iswa.cpp | 6 +++--- src/llama-kv-cache-unified-iswa.h | 3 +-- src/llama-kv-cache-unified.cpp | 5 ++--- src/llama-kv-cache-unified.h | 3 +-- src/llama-memory.h | 3 +-- 10 files changed, 17 insertions(+), 30 deletions(-) diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index 6a19a243118d3..58787fdba0d44 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -105,12 +105,7 @@ void llama_sbatch::add_seq_to_ubatch(llama_ubatch & ubatch, llama_sbatch_seq & s ubatch.seq_id = batch->seq_id + seq.offset; } } - if (logits_all) { - for (size_t i = 0; i < length; ++i) { - ubatch.output[ubatch.n_tokens + i] = 1; - out_ids.push_back(ids[seq.offset + i]); - } - } else if (batch->logits) { + if (batch->logits) { if (ubatch.equal_seqs) { for (size_t i = 0; i < length; ++i) { size_t id = ids[seq.offset + i]; @@ -197,11 +192,10 @@ llama_ubatch llama_sbatch::split_seq(size_t n_ubatch) { return ubatch; } -llama_sbatch::llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split, bool logits_all) { +llama_sbatch::llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split) { GGML_ASSERT(batch.n_tokens >= 0); this->batch = &batch; this->n_embd = n_embd; - this->logits_all = logits_all; n_tokens = batch.n_tokens; ids.resize(n_tokens); diff --git a/src/llama-batch.h b/src/llama-batch.h index b8260b94fd2d0..989fb6cf9d95c 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -39,8 +39,6 @@ struct llama_sbatch { size_t n_embd; - bool logits_all; // TODO: remove once lctx.logits_all is removed too - // sorted indices into the batch std::vector ids; // batch indices of the output @@ -76,7 +74,7 @@ struct llama_sbatch { llama_ubatch split_seq(size_t n_ubatch); llama_sbatch() = default; - llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split = false, bool logits_all = false); + llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split = false); }; // temporary allocate memory for the input batch if needed diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 8cea21d6989ef..ebcba6993c471 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -764,7 +764,7 @@ int llama_context::encode(llama_batch & inp_batch) { const int64_t n_embd = hparams.n_embd; - llama_sbatch sbatch = llama_sbatch(batch, n_embd, /* simple_split */ true, /* logits_all */ true); + llama_sbatch sbatch = llama_sbatch(batch, n_embd, /* simple_split */ true); const llama_ubatch ubatch = sbatch.split_simple(n_tokens); @@ -976,7 +976,7 @@ int llama_context::decode(llama_batch & inp_batch) { llama_memory_state_ptr mstate; while (true) { - mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled, /* logits_all */ n_outputs_all == n_tokens_all); + mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled); if (!mstate) { return -2; } @@ -2080,7 +2080,7 @@ void llama_context::opt_epoch_iter( int64_t n_outputs_all = n_tokens_all; - auto mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled, /* logits_all */ true); + auto mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled); if (!mstate || mstate->get_status() != LLAMA_MEMORY_STATUS_SUCCESS) { LLAMA_LOG_ERROR("%s: could not initialize batch\n", __func__); break; diff --git a/src/llama-kv-cache-recurrent.cpp b/src/llama-kv-cache-recurrent.cpp index f8cdd52808d7b..de23b4ad23bce 100644 --- a/src/llama-kv-cache-recurrent.cpp +++ b/src/llama-kv-cache-recurrent.cpp @@ -359,10 +359,10 @@ llama_pos llama_kv_cache_recurrent::seq_pos_max(llama_seq_id seq_id) const { return result; } -llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled, bool logits_all) { +llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled) { GGML_UNUSED(embd_pooled); - auto sbatch = llama_sbatch(batch, hparams.n_embd, false, logits_all); + auto sbatch = llama_sbatch(batch, hparams.n_embd, false); std::vector ubatches; diff --git a/src/llama-kv-cache-recurrent.h b/src/llama-kv-cache-recurrent.h index 4b33bafd71cca..d7c02ea872160 100644 --- a/src/llama-kv-cache-recurrent.h +++ b/src/llama-kv-cache-recurrent.h @@ -32,8 +32,7 @@ class llama_kv_cache_recurrent : public llama_memory_i { llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled, - bool logits_all) override; + bool embd_pooled) override; llama_memory_state_ptr init_full() override; diff --git a/src/llama-kv-cache-unified-iswa.cpp b/src/llama-kv-cache-unified-iswa.cpp index caa58ea9aa3b0..9814f76631203 100644 --- a/src/llama-kv-cache-unified-iswa.cpp +++ b/src/llama-kv-cache-unified-iswa.cpp @@ -95,12 +95,12 @@ llama_pos llama_kv_cache_unified_iswa::seq_pos_max(llama_seq_id seq_id) const { return kv_swa->seq_pos_max(seq_id); } -llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled, bool logits_all) { +llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled) { GGML_UNUSED(embd_pooled); // first try simple split do { - auto sbatch = llama_sbatch(batch, hparams.n_embd, true, logits_all); + auto sbatch = llama_sbatch(batch, hparams.n_embd, true); std::vector ubatches; @@ -128,7 +128,7 @@ llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch // if it fails, try equal split do { - auto sbatch = llama_sbatch(batch, hparams.n_embd, false, logits_all); + auto sbatch = llama_sbatch(batch, hparams.n_embd, false); std::vector ubatches; diff --git a/src/llama-kv-cache-unified-iswa.h b/src/llama-kv-cache-unified-iswa.h index 3dbf33ed7b960..d114c7378fbe9 100644 --- a/src/llama-kv-cache-unified-iswa.h +++ b/src/llama-kv-cache-unified-iswa.h @@ -34,8 +34,7 @@ class llama_kv_cache_unified_iswa : public llama_memory_i { llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled, - bool logits_all) override; + bool embd_pooled) override; llama_memory_state_ptr init_full() override; diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index ddeb138f38fb9..89606c598fc4f 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -310,12 +310,11 @@ llama_pos llama_kv_cache_unified::seq_pos_max(llama_seq_id seq_id) const { llama_memory_state_ptr llama_kv_cache_unified::init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled, - bool logits_all) { + bool embd_pooled) { GGML_UNUSED(embd_pooled); do { - auto sbatch = llama_sbatch(batch, hparams.n_embd, true, logits_all); + auto sbatch = llama_sbatch(batch, hparams.n_embd, true); std::vector ubatches; while (sbatch.n_tokens > 0) { diff --git a/src/llama-kv-cache-unified.h b/src/llama-kv-cache-unified.h index cf4c691babd1e..d6dcd19f2507e 100644 --- a/src/llama-kv-cache-unified.h +++ b/src/llama-kv-cache-unified.h @@ -59,8 +59,7 @@ class llama_kv_cache_unified : public llama_memory_i { llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled, - bool logits_all) override; + bool embd_pooled) override; llama_memory_state_ptr init_full() override; diff --git a/src/llama-memory.h b/src/llama-memory.h index 991aae781ba57..42e226dc0ed61 100644 --- a/src/llama-memory.h +++ b/src/llama-memory.h @@ -73,8 +73,7 @@ struct llama_memory_i { virtual llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled, - bool logits_all) = 0; + bool embd_pooled) = 0; // simulate full cache, used for allocating worst-case compute buffers virtual llama_memory_state_ptr init_full() = 0; From f6e1a7aa8787b5c00acba6370cb70a0beff48b1e Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 12 Jun 2025 11:50:01 +0300 Subject: [PATCH 24/95] context : simplify output counting logic during decode (#14142) * batch : remove logits_all flag ggml-ci * context : simplify output counting logic during decode ggml-ci * cont : fix comments --- src/llama-batch.cpp | 7 ++++--- src/llama-batch.h | 2 +- src/llama-context.cpp | 42 +++++++++++++++++++++++------------------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index 58787fdba0d44..69e0d7549c334 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -306,9 +306,10 @@ llama_batch_allocr::llama_batch_allocr(struct llama_batch in_batch, llama_pos p0 batch.seq_id = seq_id.data(); } if (!batch.logits) { - logits.resize(batch.n_tokens); - logits[logits.size() - 1] = true; - batch.logits = logits.data(); + // by default return the output only for the last token + output.resize(batch.n_tokens); + output[output.size() - 1] = true; + batch.logits = output.data(); } } diff --git a/src/llama-batch.h b/src/llama-batch.h index 989fb6cf9d95c..7ad82b528b18b 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -85,7 +85,7 @@ struct llama_batch_allocr { std::vector pos; std::vector n_seq_id; std::vector seq_id; - std::vector logits; + std::vector output; // optionally fulfill the batch returned by llama_batch_get_one llama_batch_allocr(struct llama_batch in_batch, llama_pos p0); diff --git a/src/llama-context.cpp b/src/llama-context.cpp index ebcba6993c471..2e551bf6e111c 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -758,6 +758,7 @@ int llama_context::encode(llama_batch & inp_batch) { t_compute_start_us = ggml_time_us(); } + // TODO: this clear of the buffer can easily be forgotten - need something better embd_seq.clear(); n_queued_tokens += n_tokens; @@ -940,6 +941,25 @@ int llama_context::decode(llama_batch & inp_batch) { } } + // this indicates we are doing pooled embedding + const bool embd_pooled = cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE; + + int64_t n_outputs_all = 0; + + // count outputs + for (uint32_t i = 0; i < n_tokens_all; ++i) { + n_outputs_all += batch.logits[i] != 0; + } + + if (embd_pooled) { + // require that all tokens are output + if (n_outputs_all != n_tokens_all) { + LLAMA_LOG_ERROR("%s: pooled embedding requires that all tokens are output (n_outputs_all = %" PRId64 ", n_tokens_all = %" PRId64 ")\n", + __func__, n_outputs_all, n_tokens_all); + return -1; + } + } + GGML_ASSERT(n_tokens_all <= cparams.n_batch); GGML_ASSERT((cparams.causal_attn || cparams.n_ubatch >= n_tokens_all) && "non-causal attention requires n_ubatch >= n_tokens"); @@ -949,25 +969,9 @@ int llama_context::decode(llama_batch & inp_batch) { } n_queued_tokens += n_tokens_all; - // this indicates we are doing pooled embedding, so we ignore batch.logits and output all tokens - const bool embd_pooled = cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE; - + // TODO: this clear of the buffer can easily be forgotten - need something better embd_seq.clear(); - int64_t n_outputs_all = 0; - - // count outputs - if (batch.logits && !embd_pooled) { - for (uint32_t i = 0; i < n_tokens_all; ++i) { - n_outputs_all += batch.logits[i] != 0; - } - } else if (embd_pooled) { - n_outputs_all = n_tokens_all; - } else { - // keep last output only - n_outputs_all = 1; - } - bool did_optimize = false; // handle any pending defrags/shifts @@ -1029,7 +1033,7 @@ int llama_context::decode(llama_batch & inp_batch) { do { const auto & ubatch = mstate->get_ubatch(); - // count the outputs in this u_batch + // count the outputs in this ubatch { int32_t n_outputs_new = 0; @@ -2073,7 +2077,7 @@ void llama_context::opt_epoch_iter( n_queued_tokens += n_tokens_all; - // this indicates we are doing pooled embedding, so we ignore batch.logits and output all tokens + // this indicates we are doing pooled embedding const bool embd_pooled = cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE; embd_seq.clear(); From 7d516443dd7766569110b38e6374649bee6eb1c4 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 12 Jun 2025 11:51:38 +0300 Subject: [PATCH 25/95] server : re-enable SWA speculative decoding (#14131) ggml-ci --- tools/server/server.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 1b1cf439baa5f..8efb8b704141f 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -2017,11 +2017,6 @@ struct server_context { params_base.n_cache_reuse = 0; SRV_WRN("%s\n", "cache_reuse is not supported by this context, it will be disabled"); } - - if (!params_base.speculative.model.path.empty()) { - SRV_ERR("%s\n", "err: speculative decode is not supported by this context"); - return false; - } } return true; From a681b4ba83a61dce71a4f24e558efe7278d8b1a9 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 12 Jun 2025 14:43:09 +0300 Subject: [PATCH 26/95] readme : remove project status link (#14149) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 385ac04d84e56..928100f3c256a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Release](https://img.shields.io/github/v/release/ggml-org/llama.cpp)](https://github.com/ggml-org/llama.cpp/releases) [![Server](https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml/badge.svg)](https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml) -[Roadmap](https://github.com/users/ggerganov/projects/7) / [Project status](https://github.com/ggml-org/llama.cpp/discussions/3471) / [Manifesto](https://github.com/ggml-org/llama.cpp/discussions/205) / [ggml](https://github.com/ggml-org/ggml) +[Roadmap](https://github.com/users/ggerganov/projects/7) / [Manifesto](https://github.com/ggml-org/llama.cpp/discussions/205) / [ggml](https://github.com/ggml-org/ggml) Inference of Meta's [LLaMA](https://arxiv.org/abs/2302.13971) model (and others) in pure C/C++ From ed52f3668e633423054a4eab61bb7efee47025ab Mon Sep 17 00:00:00 2001 From: Anton Mitkov Date: Thu, 12 Jun 2025 14:15:11 +0100 Subject: [PATCH 27/95] sycl: Remove not needed copy f16->f32 for dnnl mul mat (#14125) --- ggml/src/ggml-sycl/gemm.hpp | 3 +++ ggml/src/ggml-sycl/ggml-sycl.cpp | 9 +++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-sycl/gemm.hpp b/ggml/src/ggml-sycl/gemm.hpp index 6cbc7e0f6938c..5efe03d364b1b 100644 --- a/ggml/src/ggml-sycl/gemm.hpp +++ b/ggml/src/ggml-sycl/gemm.hpp @@ -65,6 +65,9 @@ class DnnlGemmWrapper { dnnl::primitive_attr primitive_attr; primitive_attr.set_scratchpad_mode(dnnl::scratchpad_mode::user); +#ifdef GGML_SYCL_F16 + primitive_attr.set_fpmath_mode(dnnl::fpmath_mode::f16); +#endif auto a_mem = dnnl::memory(a_in_md, eng, const_cast(a)); auto b_mem = dnnl::memory(b_in_md, eng, const_cast(b)); diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index 3693b0a4337a5..feb30304fc092 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -2127,21 +2127,18 @@ inline void ggml_sycl_op_mul_mat_sycl( const sycl::half *src1_ptr = src1->type == GGML_TYPE_F16 ? (const sycl::half *)src1->data + src1_padded_row_size : src1_as_f16.get(); - ggml_sycl_pool_alloc dst_f16(ctx.pool(), row_diff * src1_ncols); #if GGML_SYCL_DNNL if (!g_ggml_sycl_disable_dnn) { DnnlGemmWrapper::row_gemm(ctx, src1_ncols, row_diff, ne10, src1_ptr, DnnlGemmWrapper::to_dt(), src0_ptr, DnnlGemmWrapper::to_dt(), - dst_f16.get(), DnnlGemmWrapper::to_dt(), stream); - scope_op_debug_print scope_dbg_print(__func__, "/to_fp32_sycl", dst, /*num_src=*/2, - " : converting dst to fp32"); - const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16, dst); - to_fp32_sycl(dst_f16.get(), dst_dd_i, row_diff* src1_ncols, stream); + dst_dd_i, DnnlGemmWrapper::to_dt(), stream); } else #endif { + ggml_sycl_pool_alloc dst_f16(ctx.pool(), row_diff * src1_ncols); + const sycl::half alpha_f16 = 1.0f; const sycl::half beta_f16 = 0.0f; SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm( From c33fe8b8c4427202706b1434e9fc8ab5752c9cac Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 13 Jun 2025 08:03:54 +0300 Subject: [PATCH 28/95] vocab : prevent heap overflow when vocab is too small (#14145) ggml-ci --- src/llama-vocab.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index ba2e1864ec005..d8c9d9730a095 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -2768,26 +2768,26 @@ void llama_vocab::impl::print_info() const { LLAMA_LOG_INFO("%s: n_merges = %u\n", __func__, (uint32_t) bpe_ranks.size()); // special tokens - if (special_bos_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: BOS token = %d '%s'\n", __func__, special_bos_id, id_to_token[special_bos_id].text.c_str() ); } - if (special_eos_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: EOS token = %d '%s'\n", __func__, special_eos_id, id_to_token[special_eos_id].text.c_str() ); } - if (special_eot_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: EOT token = %d '%s'\n", __func__, special_eot_id, id_to_token[special_eot_id].text.c_str() ); } - if (special_eom_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: EOM token = %d '%s'\n", __func__, special_eom_id, id_to_token[special_eom_id].text.c_str() ); } - if (special_unk_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: UNK token = %d '%s'\n", __func__, special_unk_id, id_to_token[special_unk_id].text.c_str() ); } - if (special_sep_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: SEP token = %d '%s'\n", __func__, special_sep_id, id_to_token[special_sep_id].text.c_str() ); } - if (special_pad_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: PAD token = %d '%s'\n", __func__, special_pad_id, id_to_token[special_pad_id].text.c_str() ); } - if (special_mask_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: MASK token = %d '%s'\n", __func__, special_mask_id, id_to_token[special_mask_id].text.c_str() ); } - - if (linefeed_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: LF token = %d '%s'\n", __func__, linefeed_id, id_to_token[linefeed_id].text.c_str() ); } - - if (special_fim_pre_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM PRE token = %d '%s'\n", __func__, special_fim_pre_id, id_to_token[special_fim_pre_id].text.c_str() ); } - if (special_fim_suf_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM SUF token = %d '%s'\n", __func__, special_fim_suf_id, id_to_token[special_fim_suf_id].text.c_str() ); } - if (special_fim_mid_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM MID token = %d '%s'\n", __func__, special_fim_mid_id, id_to_token[special_fim_mid_id].text.c_str() ); } - if (special_fim_pad_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM PAD token = %d '%s'\n", __func__, special_fim_pad_id, id_to_token[special_fim_pad_id].text.c_str() ); } - if (special_fim_rep_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM REP token = %d '%s'\n", __func__, special_fim_rep_id, id_to_token[special_fim_rep_id].text.c_str() ); } - if (special_fim_sep_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM SEP token = %d '%s'\n", __func__, special_fim_sep_id, id_to_token[special_fim_sep_id].text.c_str() ); } + if (special_bos_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: BOS token = %d '%s'\n", __func__, special_bos_id, id_to_token.at(special_bos_id).text.c_str() ); } + if (special_eos_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: EOS token = %d '%s'\n", __func__, special_eos_id, id_to_token.at(special_eos_id).text.c_str() ); } + if (special_eot_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: EOT token = %d '%s'\n", __func__, special_eot_id, id_to_token.at(special_eot_id).text.c_str() ); } + if (special_eom_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: EOM token = %d '%s'\n", __func__, special_eom_id, id_to_token.at(special_eom_id).text.c_str() ); } + if (special_unk_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: UNK token = %d '%s'\n", __func__, special_unk_id, id_to_token.at(special_unk_id).text.c_str() ); } + if (special_sep_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: SEP token = %d '%s'\n", __func__, special_sep_id, id_to_token.at(special_sep_id).text.c_str() ); } + if (special_pad_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: PAD token = %d '%s'\n", __func__, special_pad_id, id_to_token.at(special_pad_id).text.c_str() ); } + if (special_mask_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: MASK token = %d '%s'\n", __func__, special_mask_id, id_to_token.at(special_mask_id).text.c_str() ); } + + if (linefeed_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: LF token = %d '%s'\n", __func__, linefeed_id, id_to_token.at(linefeed_id).text.c_str() ); } + + if (special_fim_pre_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM PRE token = %d '%s'\n", __func__, special_fim_pre_id, id_to_token.at(special_fim_pre_id).text.c_str() ); } + if (special_fim_suf_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM SUF token = %d '%s'\n", __func__, special_fim_suf_id, id_to_token.at(special_fim_suf_id).text.c_str() ); } + if (special_fim_mid_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM MID token = %d '%s'\n", __func__, special_fim_mid_id, id_to_token.at(special_fim_mid_id).text.c_str() ); } + if (special_fim_pad_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM PAD token = %d '%s'\n", __func__, special_fim_pad_id, id_to_token.at(special_fim_pad_id).text.c_str() ); } + if (special_fim_rep_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM REP token = %d '%s'\n", __func__, special_fim_rep_id, id_to_token.at(special_fim_rep_id).text.c_str() ); } + if (special_fim_sep_id != LLAMA_TOKEN_NULL) { LLAMA_LOG_INFO( "%s: FIM SEP token = %d '%s'\n", __func__, special_fim_sep_id, id_to_token.at(special_fim_sep_id).text.c_str() ); } for (const auto & id : special_eog_ids) { - LLAMA_LOG_INFO( "%s: EOG token = %d '%s'\n", __func__, id, id_to_token[id].text.c_str() ); + LLAMA_LOG_INFO( "%s: EOG token = %d '%s'\n", __func__, id, id_to_token.at(id).text.c_str() ); } LLAMA_LOG_INFO("%s: max token length = %d\n", __func__, max_token_len); From 09cf2c7c655c90e53e100f29b830a788bab0653d Mon Sep 17 00:00:00 2001 From: Christian Kastner Date: Fri, 13 Jun 2025 06:51:34 +0000 Subject: [PATCH 29/95] cmake : Improve build-info.cpp generation (#14156) * cmake: Simplify build-info.cpp generation The rebuild of build-info.cpp still gets triggered when .git/index gets changes. * cmake: generate build-info.cpp in build dir --- common/CMakeLists.txt | 24 +++++++----------------- common/cmake/build-info-gen-cpp.cmake | 24 ------------------------ 2 files changed, 7 insertions(+), 41 deletions(-) delete mode 100644 common/cmake/build-info-gen-cpp.cmake diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 8ba02c1462c91..f43a630c900ff 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -23,31 +23,21 @@ if(EXISTS "${PROJECT_SOURCE_DIR}/.git") endif() if(EXISTS "${GIT_DIR}/index") - set(GIT_INDEX "${GIT_DIR}/index") + # For build-info.cpp below + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${GIT_DIR}/index") else() message(WARNING "Git index not found in git repository.") - set(GIT_INDEX "") endif() else() message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.") - set(GIT_INDEX "") endif() -# Add a custom command to rebuild build-info.cpp when .git/index changes -add_custom_command( - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp" - COMMENT "Generating build details from Git" - COMMAND ${CMAKE_COMMAND} -DMSVC=${MSVC} -DCMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION} - -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} -DCMAKE_VS_PLATFORM_NAME=${CMAKE_VS_PLATFORM_NAME} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR} - -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info-gen-cpp.cmake" - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in" ${GIT_INDEX} - VERBATIM -) +set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in") +set(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/build-info.cpp") +configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) + set(TARGET build_info) -add_library(${TARGET} OBJECT build-info.cpp) +add_library(${TARGET} OBJECT ${OUTPUT_FILE}) if (BUILD_SHARED_LIBS) set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() diff --git a/common/cmake/build-info-gen-cpp.cmake b/common/cmake/build-info-gen-cpp.cmake deleted file mode 100644 index fbc92b52cc4fe..0000000000000 --- a/common/cmake/build-info-gen-cpp.cmake +++ /dev/null @@ -1,24 +0,0 @@ -include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info.cmake) - -set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/common/build-info.cpp.in") -set(OUTPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/common/build-info.cpp") - -# Only write the build info if it changed -if(EXISTS ${OUTPUT_FILE}) - file(READ ${OUTPUT_FILE} CONTENTS) - string(REGEX MATCH "LLAMA_COMMIT = \"([^\"]*)\";" _ ${CONTENTS}) - set(OLD_COMMIT ${CMAKE_MATCH_1}) - string(REGEX MATCH "LLAMA_COMPILER = \"([^\"]*)\";" _ ${CONTENTS}) - set(OLD_COMPILER ${CMAKE_MATCH_1}) - string(REGEX MATCH "LLAMA_BUILD_TARGET = \"([^\"]*)\";" _ ${CONTENTS}) - set(OLD_TARGET ${CMAKE_MATCH_1}) - if ( - NOT OLD_COMMIT STREQUAL BUILD_COMMIT OR - NOT OLD_COMPILER STREQUAL BUILD_COMPILER OR - NOT OLD_TARGET STREQUAL BUILD_TARGET - ) - configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) - endif() -else() - configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) -endif() From c61285e7396c8e526fe7794c19e8d4f1c99bfc51 Mon Sep 17 00:00:00 2001 From: Ewan Crawford Date: Fri, 13 Jun 2025 08:45:37 +0100 Subject: [PATCH 30/95] SYCL: Bump oneMath commit (#14152) Update oneMath commit to merged PR https://github.com/uxlfoundation/oneMath/pull/669 which adds SYCL-Graph support for recording CUDA BLAS commands. With this change the `MUL_MAT` tests now pass on DPC++ CUDA backends with SYCL-Graph enabled. Prior to this change, an error would be thrown. ``` $ GGML_SYCL_DISABLE_GRAPH=0 ./bin/test-backend-ops -b SYCL0 -o MUL_MAT -p type_a=f16,type_b=f32,m=16,n=1,k=256,bs=\\[1,1\\],nr=\\[2 UR CUDA ERROR: Value: 700 Name: CUDA_ERROR_ILLEGAL_ADDRESS Description: an illegal memory access was encountered Function: operator() Source Location: $HOME/dpcpp/unified-runtime/source/adapters/cuda/queue.cpp:154 Native API failed. Native API returns: 2147483646 (UR_RESULT_ERROR_UNKNOWN) Exception caught at file:$HOME/llama.cpp/ggml/src/ggml-sycl/ggml-sycl.cpp, line:3598, func:operator() SYCL error: CHECK_TRY_ERROR((stream)->wait()): Meet error in this line code! in function ggml_backend_sycl_synchronize at $HOME/llama.cpp/ggml/src/ggml-sycl/ggml-sycl.cpp:3598 $HOME/llama.cpp/ggml/src/ggml-sycl/../ggml-sycl/common.hpp:118: SYCL error Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf ptrace: Operation not permitted. No stack. The program is not being run. ``` --- ggml/src/ggml-sycl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-sycl/CMakeLists.txt b/ggml/src/ggml-sycl/CMakeLists.txt index 2a0045bcc158e..efd78b912cc65 100644 --- a/ggml/src/ggml-sycl/CMakeLists.txt +++ b/ggml/src/ggml-sycl/CMakeLists.txt @@ -142,7 +142,7 @@ else() FetchContent_Declare( ONEMATH GIT_REPOSITORY https://github.com/uxlfoundation/oneMath.git - GIT_TAG c255b1b4c41e2ee3059455c1f96a965d6a62568a + GIT_TAG 8efe85f5aaebb37f1d8c503b7af66315feabf142 ) FetchContent_MakeAvailable(ONEMATH) # Create alias to match with find_package targets name From 0889eba570126f8a2f5a0e88fde776bbc91cca66 Mon Sep 17 00:00:00 2001 From: Anton Mitkov Date: Fri, 13 Jun 2025 08:51:39 +0100 Subject: [PATCH 31/95] sycl: Adding additional cpy dbg print output (#14034) --- ggml/src/ggml-sycl/common.hpp | 41 +++++++++++++++----------------- ggml/src/ggml-sycl/cpy.cpp | 3 +-- ggml/src/ggml-sycl/ggml-sycl.cpp | 26 ++++++++++---------- 3 files changed, 33 insertions(+), 37 deletions(-) diff --git a/ggml/src/ggml-sycl/common.hpp b/ggml/src/ggml-sycl/common.hpp index 4f17699a5fcc1..753b4af143622 100644 --- a/ggml/src/ggml-sycl/common.hpp +++ b/ggml/src/ggml-sycl/common.hpp @@ -513,9 +513,9 @@ constexpr size_t ceil_div(const size_t m, const size_t n) { bool gpu_has_xmx(sycl::device &dev); -template void debug_print_array(const std::string & prefix, const T array[N]) { +template std::string debug_get_array_str(const std::string & prefix, const T array[N]) { if (LIKELY(!g_ggml_sycl_debug)) { - return; + return ""; } std::stringstream ss; ss << prefix << "=["; @@ -526,29 +526,26 @@ template void debug_print_array(const std::string & prefix, con ss << array[N - 1]; } ss << "]"; - GGML_SYCL_DEBUG("%s", ss.str().c_str()); + return ss.str(); } -inline void debug_print_tensor(const std::string & prefix, const ggml_tensor * tensor, - const std::string & suffix = "") { - if (LIKELY(!g_ggml_sycl_debug)) { - return; - } - GGML_SYCL_DEBUG("%s=", prefix.c_str()); +inline std::string debug_get_tensor_str(const std::string &prefix, + const ggml_tensor *tensor, const std::string &suffix = "") { + std::stringstream ss; + if (LIKELY(!g_ggml_sycl_debug)) { return ss.str(); } + ss << prefix.c_str() << "="; if (tensor) { - GGML_SYCL_DEBUG("'%s':type=%s", tensor->name, ggml_type_name(tensor->type)); - debug_print_array(";ne", tensor->ne); - debug_print_array(";nb", tensor->nb); - if (!ggml_is_contiguous(tensor)) { - GGML_SYCL_DEBUG(";strided"); - } - if (ggml_is_permuted(tensor)) { - GGML_SYCL_DEBUG(";permuted"); - } + ss << "'" << tensor->name << "':type=" << ggml_type_name(tensor->type); + ss << debug_get_array_str(";ne", tensor->ne); + ss << debug_get_array_str(";nb", tensor->nb); + + if (!ggml_is_contiguous(tensor)) { ss << ";strided"; } + if (ggml_is_permuted(tensor)) { ss << ";permuted"; } } else { - GGML_SYCL_DEBUG("nullptr"); + ss << "nullptr"; } - GGML_SYCL_DEBUG("%s", suffix.c_str()); + ss << suffix; + return ss.str(); } // Use scope_op_debug_print to log operations coming from running a model @@ -564,10 +561,10 @@ struct scope_op_debug_print { return; } GGML_SYCL_DEBUG("[SYCL][OP] call %s%s:", func.data(), func_suffix.data()); - debug_print_tensor(" dst", dst); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(" dst", dst).c_str()); if (dst) { for (std::size_t i = 0; i < num_src; ++i) { - debug_print_tensor("\tsrc" + std::to_string(i), dst->src[i]); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str("\tsrc" + std::to_string(i), dst->src[i]).c_str()); } } GGML_SYCL_DEBUG("%s\n", suffix.data()); diff --git a/ggml/src/ggml-sycl/cpy.cpp b/ggml/src/ggml-sycl/cpy.cpp index 56373b4d085d5..bec1371401955 100644 --- a/ggml/src/ggml-sycl/cpy.cpp +++ b/ggml/src/ggml-sycl/cpy.cpp @@ -723,8 +723,7 @@ static void ggml_cpy_q4_1_q4_1(const char * cx, char * cdst, const int ne, const void ggml_sycl_cpy(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1) try { // Unlike other operators ggml_sycl_cpy takes 2 distinct tensors instead of a dst ggml_tensor and rely on its src field - scope_op_debug_print scope_dbg_print(__func__, src1, /*num_src=*/0, - std::string(" src0 type=") + ggml_type_name(src0->type)); + scope_op_debug_print scope_dbg_print(__func__, src1, /*num_src=*/0, debug_get_tensor_str("\tsrc0", src0)); const int64_t ne = ggml_nelements(src0); GGML_ASSERT(ne == ggml_nelements(src1)); diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index feb30304fc092..4b7610362b608 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -347,7 +347,7 @@ static enum ggml_status ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor *tensor) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor, "\n"); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor, "\n").c_str()); ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context; if (tensor->view_src != NULL) { @@ -385,7 +385,7 @@ static void ggml_backend_sycl_buffer_set_tensor(ggml_backend_buffer_t buffer, const void *data, size_t offset, size_t size) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset); ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; ggml_sycl_set_device(ctx->device); @@ -413,7 +413,7 @@ static void ggml_backend_sycl_buffer_get_tensor(ggml_backend_buffer_t buffer, void *data, size_t offset, size_t size) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset); ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; @@ -444,8 +444,8 @@ ggml_backend_sycl_buffer_cpy_tensor(ggml_backend_buffer_t buffer, ggml_tensor *dst) try { bool is_cpy_supported = ggml_backend_buffer_is_sycl(src->buffer); GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": dst=", dst); - debug_print_tensor(" src=", src); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": dst", dst).c_str()); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(" src", src).c_str()); GGML_SYCL_DEBUG(" is_cpy_supported=%d\n", is_cpy_supported); if (is_cpy_supported) { ggml_backend_sycl_buffer_context * src_ctx = (ggml_backend_sycl_buffer_context *)src->buffer->context; @@ -525,7 +525,7 @@ catch (sycl::exception const &exc) { static void ggml_backend_sycl_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu value=%u\n", size, offset, value); ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *) buffer->context; SYCL_CHECK(ggml_sycl_set_device(ctx->device)); @@ -805,7 +805,7 @@ static enum ggml_status ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor *tensor) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor, "\n"); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor, "\n").c_str()); GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context; @@ -891,7 +891,7 @@ ggml_backend_sycl_split_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor *tensor, const void *data, size_t offset, size_t size) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset); // split tensors must always be set in their entirety at once GGML_ASSERT(offset == 0); @@ -947,7 +947,7 @@ ggml_backend_sycl_split_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor *tensor, void *data, size_t offset, size_t size) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset); // split tensors must always be set in their entirety at once GGML_ASSERT(offset == 0); @@ -3863,7 +3863,7 @@ static void ggml_backend_sycl_set_tensor_async(ggml_backend_t backend, const void *data, size_t offset, size_t size) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset); ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; @@ -3884,7 +3884,7 @@ static void ggml_backend_sycl_get_tensor_async(ggml_backend_t backend, void *data, size_t offset, size_t size) try { GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": tensor=", tensor); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": tensor", tensor).c_str()); GGML_SYCL_DEBUG(" size=%zu offset=%zu\n", size, offset); ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; @@ -3907,8 +3907,8 @@ static bool ggml_backend_sycl_cpy_tensor_async(ggml_backend_t backend, bool is_cpy_supported = dst->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && ggml_backend_buffer_is_sycl(src->buffer); GGML_SYCL_DEBUG("[SYCL] call %s", __func__); - debug_print_tensor(": dst=", dst); - debug_print_tensor(" src=", src); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(": dst", dst).c_str()); + GGML_SYCL_DEBUG("%s", debug_get_tensor_str(" src", src).c_str()); GGML_SYCL_DEBUG(" is_cpy_supported=%d\n", is_cpy_supported); if (is_cpy_supported) { /* From ffad04397399ea1650fda6560c7c753059804876 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 13 Jun 2025 11:18:25 +0300 Subject: [PATCH 32/95] server : fix SWA condition for full context reprocess (#14163) ggml-ci --- 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 8efb8b704141f..b439d8b19dda3 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -3217,7 +3217,7 @@ struct server_context { } const auto n_swa = llama_model_n_swa(model); - if (pos_min > slot.n_past - n_swa) { + if (pos_min > std::max(0, slot.n_past - n_swa)) { SLT_WRN(slot, "n_past = %d, cache_tokens.size() = %d, seq_id = %d, pos_min = %d, n_swa = %d\n", slot.n_past, (int) slot.cache_tokens.size(), slot.id, pos_min, n_swa); SLT_WRN(slot, "forcing full prompt re-processing due to lack of cache data (likely due to SWA, see %s)\n", "https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055"); From d714dadb57d8feaa03d13b79345a4c3382172d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90inh=20Tr=E1=BB=8Dng=20Huy?= <77562200+huydt84@users.noreply.github.com> Date: Fri, 13 Jun 2025 17:34:08 +0900 Subject: [PATCH 33/95] pooling : make cls_b and cls_out_b optional (#14165) Co-authored-by: dinhhuy --- src/llama-graph.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index e74c9ff53b05a..4493fb164eb12 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -1556,23 +1556,30 @@ void llm_graph_context::build_pooling( ggml_tensor * inp_cls = build_inp_cls(); inp = ggml_get_rows(ctx0, inp, inp_cls); - if (cls != nullptr && cls_b != nullptr) { + if (cls) { // classification head // https://github.com/huggingface/transformers/blob/5af7d41e49bbfc8319f462eb45253dcb3863dfb7/src/transformers/models/roberta/modeling_roberta.py#L1566 - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, cls, inp), cls_b); + cur = ggml_mul_mat(ctx0, cls, inp); + if (cls_b) { + cur = ggml_add(ctx0, cur, cls_b); + } cur = ggml_tanh(ctx0, cur); // some models don't have `cls_out`, for example: https://huggingface.co/jinaai/jina-reranker-v1-tiny-en // https://huggingface.co/jinaai/jina-reranker-v1-tiny-en/blob/cb5347e43979c3084a890e3f99491952603ae1b7/modeling_bert.py#L884-L896 if (cls_out) { - GGML_ASSERT(cls_out_b != nullptr); - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, cls_out, cur), cls_out_b); + cur = ggml_mul_mat(ctx0, cls_out, cur); + if (cls_out_b) { + cur = ggml_add(ctx0, cur, cls_out_b); + } } } else if (cls_out) { // Single layer classification head (direct projection) // https://github.com/huggingface/transformers/blob/f4fc42216cd56ab6b68270bf80d811614d8d59e4/src/transformers/models/bert/modeling_bert.py#L1476 - GGML_ASSERT(cls_out_b != nullptr); - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, cls_out, inp), cls_out_b); + cur = ggml_mul_mat(ctx0, cls_out, inp); + if (cls_out_b) { + cur = ggml_add(ctx0, cur, cls_out_b); + } } else { GGML_ABORT("RANK pooling requires either cls+cls_b or cls_out+cls_out_b"); } From cc8d08187918c6f643c3ffabb7b1ac21aa19f3d1 Mon Sep 17 00:00:00 2001 From: Christian Kastner Date: Fri, 13 Jun 2025 08:38:52 +0000 Subject: [PATCH 34/95] cmake: Add ability to pass in LLAMA_BUILD_NUMBER/COMMIT (#14167) * cmake: Add ability to pass in LLAMA_BUILD_NUMBER/COMMIT * cmake: Pass on LLAMA_BUILD_* to GGML_BUILD_* --- CMakeLists.txt | 14 ++++++++++---- common/build-info.cpp.in | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f73470dffd106..50801cdc637bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,14 @@ option(LLAMA_LLGUIDANCE "llama-common: include LLGuidance library for structured include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/common.cmake) +if (NOT DEFINED LLAMA_BUILD_NUMBER) + set(LLAMA_BUILD_NUMBER ${BUILD_NUMBER}) +endif() +if (NOT DEFINED LLAMA_BUILD_COMMIT) + set(LLAMA_BUILD_COMMIT ${BUILD_COMMIT}) +endif() +set(LLAMA_INSTALL_VERSION 0.0.${BUILD_NUMBER}) + # override ggml options set(GGML_ALL_WARNINGS ${LLAMA_ALL_WARNINGS}) set(GGML_FATAL_WARNINGS ${LLAMA_FATAL_WARNINGS}) @@ -155,6 +163,8 @@ if (LLAMA_USE_SYSTEM_GGML) endif() if (NOT TARGET ggml AND NOT LLAMA_USE_SYSTEM_GGML) + set(GGML_BUILD_NUMBER ${LLAMA_BUILD_NUMBER}) + set(GGML_BUILD_COMMIT ${LLAMA_BUILD_COMMIT}) add_subdirectory(ggml) # ... otherwise assume ggml is added by a parent CMakeLists.txt endif() @@ -204,10 +214,6 @@ endif() include(GNUInstallDirs) include(CMakePackageConfigHelpers) -set(LLAMA_BUILD_NUMBER ${BUILD_NUMBER}) -set(LLAMA_BUILD_COMMIT ${BUILD_COMMIT}) -set(LLAMA_INSTALL_VERSION 0.0.${BUILD_NUMBER}) - set(LLAMA_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files") set(LLAMA_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files") set(LLAMA_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files") diff --git a/common/build-info.cpp.in b/common/build-info.cpp.in index 0b945aa68fff3..aee9d7eafd681 100644 --- a/common/build-info.cpp.in +++ b/common/build-info.cpp.in @@ -1,4 +1,4 @@ -int LLAMA_BUILD_NUMBER = @BUILD_NUMBER@; -char const *LLAMA_COMMIT = "@BUILD_COMMIT@"; +int LLAMA_BUILD_NUMBER = @LLAMA_BUILD_NUMBER@; +char const *LLAMA_COMMIT = "@LLAMA_BUILD_COMMIT@"; char const *LLAMA_COMPILER = "@BUILD_COMPILER@"; char const *LLAMA_BUILD_TARGET = "@BUILD_TARGET@"; From b7cc7745e38141060845145af0a1fd489d8e3e33 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 13 Jun 2025 11:55:44 +0300 Subject: [PATCH 35/95] readme : remove survey link (#14168) --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 928100f3c256a..90c7364dfcba0 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ Inference of Meta's [LLaMA](https://arxiv.org/abs/2302.13971) model (and others) ## Hot topics - 🔥 Multimodal support arrived in `llama-server`: [#12898](https://github.com/ggml-org/llama.cpp/pull/12898) | [documentation](./docs/multimodal.md) -- **GGML developer experience survey (organized and reviewed by NVIDIA):** [link](https://forms.gle/Gasw3cRgyhNEnrwK9) - A new binary `llama-mtmd-cli` is introduced to replace `llava-cli`, `minicpmv-cli`, `gemma3-cli` ([#13012](https://github.com/ggml-org/llama.cpp/pull/13012)) and `qwen2vl-cli` ([#13141](https://github.com/ggml-org/llama.cpp/pull/13141)), `libllava` will be deprecated - VS Code extension for FIM completions: https://github.com/ggml-org/llama.vscode - Universal [tool call support](./docs/function-calling.md) in `llama-server` https://github.com/ggml-org/llama.cpp/pull/9639 From 60c666347becacff81cd4bc9a52038ba71038e41 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 13 Jun 2025 13:47:55 +0300 Subject: [PATCH 36/95] batch : rework llama_batch_allocr (#14153) * batch : rework llama_batch_allocr ggml-ci * cont : move validation inside class ggml-ci * cont : move output counting to class ggml-ci * cont : minor ggml-ci * batch : add TODOs ggml-ci --- src/llama-batch.cpp | 68 +++++++++++++++- src/llama-batch.h | 27 ++++-- src/llama-context.cpp | 145 +++++++++++++-------------------- src/llama-context.h | 14 ++-- src/llama-graph.cpp | 7 ++ src/llama-graph.h | 6 +- src/llama-kv-cache-unified.cpp | 1 + 7 files changed, 162 insertions(+), 106 deletions(-) diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index 69e0d7549c334..9066d5a9b274d 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -1,5 +1,9 @@ #include "llama-batch.h" +#include "llama-impl.h" +#include "llama-cparams.h" +#include "llama-vocab.h" + #include #include #include @@ -279,9 +283,42 @@ llama_sbatch::llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple ); } -llama_batch_allocr::llama_batch_allocr(struct llama_batch in_batch, llama_pos p0) { - batch = in_batch; +llama_batch_allocr::llama_batch_allocr() = default; + +bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & vocab, llama_pos p0) { + clear(); + + batch = batch_inp; + GGML_ASSERT(batch.n_tokens > 0); + + if (!batch.pos) { + if (batch.seq_id) { + LLAMA_LOG_ERROR("%s: pos == NULL, but seq_id != NULL\n", __func__); + return false; + } + } + + if (batch.token) { + for (int32_t i = 0; i < batch.n_tokens; ++i) { + if (batch.token[i] < 0 || (uint32_t) batch.token[i] >= vocab.n_tokens()) { + LLAMA_LOG_ERROR("%s: invalid token[%d] = %d\n", __func__, i, batch.token[i]); + return false; + } + } + } + + if (batch.seq_id) { + for (int32_t i = 0; i < batch.n_tokens; ++i) { + for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { + if (batch.seq_id && (batch.seq_id[i][s] < 0 || batch.seq_id[i][s] >= LLAMA_MAX_PARALLEL_SEQUENCES)) { + LLAMA_LOG_ERROR("%s: invalid seq_id[%d][%d] = %d > %d\n", __func__, i, s, batch.seq_id[i][s], LLAMA_MAX_PARALLEL_SEQUENCES); + return false; + } + } + } + } + if (!batch.pos) { assert(p0 >= 0); pos.resize(batch.n_tokens); @@ -290,6 +327,7 @@ llama_batch_allocr::llama_batch_allocr(struct llama_batch in_batch, llama_pos p0 } batch.pos = pos.data(); } + if (!batch.n_seq_id) { n_seq_id.resize(batch.n_tokens); for (int32_t i = 0; i < batch.n_tokens; i++) { @@ -297,6 +335,7 @@ llama_batch_allocr::llama_batch_allocr(struct llama_batch in_batch, llama_pos p0 } batch.n_seq_id = n_seq_id.data(); } + if (!batch.seq_id) { seq_id.resize(batch.n_tokens + 1); seq_id[batch.n_tokens] = NULL; @@ -305,12 +344,37 @@ llama_batch_allocr::llama_batch_allocr(struct llama_batch in_batch, llama_pos p0 } batch.seq_id = seq_id.data(); } + if (!batch.logits) { // by default return the output only for the last token output.resize(batch.n_tokens); output[output.size() - 1] = true; batch.logits = output.data(); } + + for (int32_t i = 0; i < batch.n_tokens; ++i) { + n_outputs += batch.logits[i] != 0; + } + + return true; +} + +const llama_batch & llama_batch_allocr::get_batch() const { + return batch; +} + +uint32_t llama_batch_allocr::get_n_outputs() const { + return n_outputs; +} + +void llama_batch_allocr::clear() { + n_outputs = 0; + + batch = {}; + pos.clear(); + n_seq_id.clear(); + seq_id.clear(); + output.clear(); } // diff --git a/src/llama-batch.h b/src/llama-batch.h index 7ad82b528b18b..24340b00f2702 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -18,8 +18,8 @@ struct llama_ubatch { llama_token * token; // [n_tokens] float * embd; // [n_embd, n_tokens] llama_pos * pos; // [n_tokens] - int32_t * n_seq_id; // [n_seqs] // TODO: remove, should belong to only 1 sequence - llama_seq_id ** seq_id; // [n_seqs] // TODO: become llama_seq_id * seq_id; + int32_t * n_seq_id; // [n_seqs] + llama_seq_id ** seq_id; // [n_seqs] int8_t * output; // [n_tokens] }; @@ -78,15 +78,28 @@ struct llama_sbatch { }; // temporary allocate memory for the input batch if needed -struct llama_batch_allocr { - struct llama_batch batch; +class llama_batch_allocr { +public: + llama_batch_allocr(); + + // optionally fulfill the batch returned by llama_batch_get_one + bool init(const llama_batch & batch_inp, const llama_vocab & vocab, llama_pos p0); + + const llama_batch & get_batch() const; + + uint32_t get_n_outputs() const; + +private: + void clear(); + + llama_batch batch; + + uint32_t n_outputs; std::array seq_id_0 = { 0 }; // default sequence id + std::vector pos; std::vector n_seq_id; std::vector seq_id; std::vector output; - - // optionally fulfill the batch returned by llama_batch_get_one - llama_batch_allocr(struct llama_batch in_batch, llama_pos p0); }; diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 2e551bf6e111c..ec1e1189b219a 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -1,6 +1,7 @@ #include "llama-context.h" #include "llama-impl.h" +#include "llama-batch.h" #include "llama-io.h" #include "llama-memory.h" #include "llama-mmap.h" @@ -18,7 +19,8 @@ llama_context::llama_context( const llama_model & model, llama_context_params params) : - model(model) { + model(model), + batch_allocr(std::make_unique()) { LLAMA_LOG_INFO("%s: constructing llama_context\n", __func__); t_start_us = model.t_start_us; @@ -494,7 +496,7 @@ float * llama_context::get_logits() { } float * llama_context::get_logits_ith(int32_t i) { - int32_t j = -1; + int64_t j = -1; try { if (logits == nullptr) { @@ -517,7 +519,7 @@ float * llama_context::get_logits_ith(int32_t i) { } if (j >= n_outputs) { // This should not happen - throw std::runtime_error(format("corrupt output buffer (j=%d, n_outputs=%d)", j, n_outputs)); + throw std::runtime_error(format("corrupt output buffer (j=%" PRId64 ", n_outputs=%d)", j, n_outputs)); } return logits + j*model.vocab.n_tokens(); @@ -536,7 +538,7 @@ float * llama_context::get_embeddings() { } float * llama_context::get_embeddings_ith(int32_t i) { - int32_t j = -1; + int64_t j = -1; try { if (embd == nullptr) { @@ -559,7 +561,7 @@ float * llama_context::get_embeddings_ith(int32_t i) { } if (j >= n_outputs) { // This should not happen - throw std::runtime_error(format("corrupt output buffer (j=%d, n_outputs=%d)", j, n_outputs)); + throw std::runtime_error(format("corrupt output buffer (j=%" PRId64 ", n_outputs=%d)", j, n_outputs)); } return embd + j*model.hparams.n_embd; @@ -719,40 +721,27 @@ llm_graph_result_ptr llama_context::process_ubatch(const llama_ubatch & ubatch, return res; } -int llama_context::encode(llama_batch & inp_batch) { - if (inp_batch.n_tokens == 0) { +int llama_context::encode(const llama_batch & batch_inp) { + if (batch_inp.n_tokens == 0) { LLAMA_LOG_ERROR("%s: n_tokens == 0\n", __func__); return -1; } // temporary allocate memory for the input batch if needed // note: during encode, we always pass the full sequence starting from pos = 0 - llama_batch_allocr batch_allocr(inp_batch, inp_batch.pos ? -1 : 0); + if (!batch_allocr->init(batch_inp, model.vocab, batch_inp.pos ? -1 : 0)) { + LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); + return -1; + } - const llama_batch & batch = batch_allocr.batch; - const int32_t n_tokens = batch.n_tokens; + const llama_batch & batch = batch_allocr->get_batch(); - const auto & hparams = model.hparams; + const uint32_t n_tokens = batch.n_tokens; GGML_ASSERT((!batch.token && batch.embd) || (batch.token && !batch.embd)); // NOLINT - // TODO: move the validation to the llama_batch_allocr - if (batch.token) { - for (int32_t i = 0; i < n_tokens; ++i) { - if (batch.token[i] < 0 || (uint32_t) batch.token[i] >= model.vocab.n_tokens()) { - LLAMA_LOG_ERROR("%s: invalid token[%d] = %d\n", __func__, i, batch.token[i]); - return -1; - } - - if (batch.seq_id && (batch.seq_id[i][0] < 0 || batch.seq_id[i][0] >= LLAMA_MAX_PARALLEL_SEQUENCES)) { - LLAMA_LOG_ERROR("%s: invalid seq_id[%d] = %d > %d\n", __func__, i, batch.seq_id[i][0], LLAMA_MAX_PARALLEL_SEQUENCES); - throw -1; - } - } - } - // micro-batching is not possible for non-causal encoding, so we process the batch in a single shot - GGML_ASSERT(cparams.n_ubatch >= (uint32_t) n_tokens && "encoder requires n_ubatch >= n_tokens"); + GGML_ASSERT(cparams.n_ubatch >= n_tokens && "encoder requires n_ubatch >= n_tokens"); if (t_compute_start_us == 0) { t_compute_start_us = ggml_time_us(); @@ -763,6 +752,8 @@ int llama_context::encode(llama_batch & inp_batch) { n_queued_tokens += n_tokens; + const auto & hparams = model.hparams; + const int64_t n_embd = hparams.n_embd; llama_sbatch sbatch = llama_sbatch(batch, n_embd, /* simple_split */ true); @@ -775,7 +766,7 @@ int llama_context::encode(llama_batch & inp_batch) { return -2; }; - for (int32_t i = 0; i < n_tokens; ++i) { + for (uint32_t i = 0; i < n_tokens; ++i) { output_ids[i] = i; } @@ -831,7 +822,8 @@ int llama_context::encode(llama_batch & inp_batch) { GGML_ASSERT(!ubatch.equal_seqs); // TODO: handle equal splits - for (int32_t i = 0; i < n_tokens; i++) { + // TODO: fix indexing [UBATCH_IDX] + for (uint32_t i = 0; i < n_tokens; i++) { const llama_seq_id seq_id = ubatch.seq_id[i][0]; if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { continue; @@ -846,6 +838,7 @@ int llama_context::encode(llama_batch & inp_batch) { auto & embd_seq_out = embd_seq; const uint32_t n_cls_out = hparams.n_cls_out; + // TODO: fix indexing [UBATCH_IDX] for (uint32_t s = 0; s < ubatch.n_seqs; ++s) { const llama_seq_id seq_id = ubatch.seq_id[s][0]; if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { @@ -878,13 +871,11 @@ int llama_context::encode(llama_batch & inp_batch) { memcpy(cross.v_embd.data(), embd, ggml_nbytes(t_embd)); // remember the sequence ids used during the encoding - needed for cross attention later - // TODO: the seuqence indexing here is likely not correct in the general case - // probably works only for split_simple cross.seq_ids_enc.resize(n_tokens); - for (int32_t i = 0; i < n_tokens; i++) { + for (uint32_t i = 0; i < n_tokens; i++) { cross.seq_ids_enc[i].clear(); - for (int s = 0; s < ubatch.n_seq_id[i]; s++) { - llama_seq_id seq_id = ubatch.seq_id[i][s]; + for (int s = 0; s < batch.n_seq_id[i]; s++) { + llama_seq_id seq_id = batch.seq_id[i][s]; cross.seq_ids_enc[i].insert(seq_id); } } @@ -893,68 +884,44 @@ int llama_context::encode(llama_batch & inp_batch) { return 0; } -int llama_context::decode(llama_batch & inp_batch) { +int llama_context::decode(const llama_batch & batch_inp) { if (!memory) { LLAMA_LOG_DEBUG("%s: cannot decode batches with this context (calling encode() instead)\n", __func__); - return encode(inp_batch); + return encode(batch_inp); } - if (inp_batch.n_tokens == 0) { + if (batch_inp.n_tokens == 0) { LLAMA_LOG_ERROR("%s: n_tokens == 0\n", __func__); return -1; } - if (!inp_batch.pos) { - if (inp_batch.seq_id) { - LLAMA_LOG_ERROR("%s: pos == NULL, but seq_id != NULL\n", __func__); - return -1; - } - } - // temporary allocate memory for the input batch if needed - llama_batch_allocr batch_allocr(inp_batch, inp_batch.pos ? -1 : memory->seq_pos_max(0) + 1); + if (!batch_allocr->init(batch_inp, model.vocab, batch_inp.pos ? -1 : memory->seq_pos_max(0) + 1)) { + LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); + return -1; + } - const llama_batch & batch = batch_allocr.batch; + const llama_batch & batch = batch_allocr->get_batch(); const auto & vocab = model.vocab; const auto & hparams = model.hparams; const int32_t n_vocab = vocab.n_tokens(); + const int64_t n_embd = hparams.n_embd; - const int64_t n_tokens_all = batch.n_tokens; - const int64_t n_embd = hparams.n_embd; + const uint32_t n_tokens_all = batch.n_tokens; GGML_ASSERT((!batch.token && batch.embd) || (batch.token && !batch.embd)); // NOLINT - // TODO: move the validation to the llama_batch_allocr - if (batch.token) { - for (int64_t i = 0; i < n_tokens_all; ++i) { - if (batch.token[i] < 0 || (uint32_t) batch.token[i] >= model.vocab.n_tokens()) { - LLAMA_LOG_ERROR("%s: invalid token[%" PRId64 "] = %d\n", __func__, i, batch.token[i]); - return -1; - } - - if (batch.seq_id && (batch.seq_id[i][0] < 0 || batch.seq_id[i][0] >= LLAMA_MAX_PARALLEL_SEQUENCES)) { - LLAMA_LOG_ERROR("%s: invalid seq_id[%" PRId64 "] = %d >= %d\n", __func__, i, batch.seq_id[i][0], LLAMA_MAX_PARALLEL_SEQUENCES); - return -1; - } - } - } - // this indicates we are doing pooled embedding const bool embd_pooled = cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE; - int64_t n_outputs_all = 0; - - // count outputs - for (uint32_t i = 0; i < n_tokens_all; ++i) { - n_outputs_all += batch.logits[i] != 0; - } + const uint32_t n_outputs_all = batch_allocr->get_n_outputs(); if (embd_pooled) { // require that all tokens are output if (n_outputs_all != n_tokens_all) { - LLAMA_LOG_ERROR("%s: pooled embedding requires that all tokens are output (n_outputs_all = %" PRId64 ", n_tokens_all = %" PRId64 ")\n", + LLAMA_LOG_ERROR("%s: pooled embedding requires that all tokens are output (n_outputs_all = %d, n_tokens_all = %d)\n", __func__, n_outputs_all, n_tokens_all); return -1; } @@ -1024,7 +991,7 @@ int llama_context::decode(llama_batch & inp_batch) { // reserve output buffer if (output_reserve(n_outputs_all) < n_outputs_all) { - LLAMA_LOG_ERROR("%s: could not reserve space for batch with %" PRId64 " outputs\n", __func__, n_outputs_all); + LLAMA_LOG_ERROR("%s: could not reserve space for batch with %d outputs\n", __func__, n_outputs_all); return -2; }; @@ -1063,6 +1030,7 @@ int llama_context::decode(llama_batch & inp_batch) { pos_min[s] = std::numeric_limits::max(); } + // TODO: fix sequence indexing for (uint32_t i = 0; i < ubatch.n_tokens; ++i) { const auto & seq_id = ubatch.seq_id[i][0]; @@ -1176,14 +1144,14 @@ int llama_context::decode(llama_batch & inp_batch) { n_outputs = n_outputs_all; // set output mappings - { + if (n_outputs > 0) { bool sorted_output = true; auto & out_ids = mstate->out_ids(); - GGML_ASSERT(out_ids.size() == (size_t) n_outputs_all); + GGML_ASSERT(out_ids.size() == (size_t) n_outputs); - for (int64_t i = 0; i < n_outputs_all; ++i) { + for (int64_t i = 0; i < n_outputs; ++i) { int64_t out_id = out_ids[i]; output_ids[out_id] = i; if (out_id != i) { @@ -1195,20 +1163,22 @@ int llama_context::decode(llama_batch & inp_batch) { // note: this is mostly relevant for recurrent models atm if (!sorted_output) { const uint32_t n_vocab = model.vocab.n_tokens(); - const uint32_t n_embd = model.hparams.n_embd; + const uint64_t n_embd = model.hparams.n_embd; GGML_ASSERT((size_t) n_outputs == out_ids.size()); // TODO: is there something more efficient which also minimizes swaps? // selection sort, to minimize swaps (from https://en.wikipedia.org/wiki/Selection_sort) - for (int32_t i = 0; i < n_outputs - 1; ++i) { - int32_t j_min = i; - for (int32_t j = i + 1; j < n_outputs; ++j) { + for (uint32_t i = 0; i < n_outputs - 1; ++i) { + uint32_t j_min = i; + for (uint32_t j = i + 1; j < n_outputs; ++j) { if (out_ids[j] < out_ids[j_min]) { j_min = j; } } - if (j_min == i) { continue; } + if (j_min == i) { + continue; + } std::swap(out_ids[i], out_ids[j_min]); if (logits_size > 0) { for (uint32_t k = 0; k < n_vocab; k++) { @@ -1221,8 +1191,10 @@ int llama_context::decode(llama_batch & inp_batch) { } } } + std::fill(output_ids.begin(), output_ids.end(), -1); - for (int32_t i = 0; i < n_outputs; ++i) { + + for (uint32_t i = 0; i < n_outputs; ++i) { output_ids[out_ids[i]] = i; } } @@ -1242,7 +1214,7 @@ int llama_context::decode(llama_batch & inp_batch) { // output // -int32_t llama_context::output_reserve(int32_t n_outputs) { +uint32_t llama_context::output_reserve(int32_t n_outputs) { const auto & hparams = model.hparams; const auto & vocab = model.vocab; @@ -1308,8 +1280,7 @@ int32_t llama_context::output_reserve(int32_t n_outputs) { // set all ids as invalid (negative) std::fill(output_ids.begin(), output_ids.end(), -1); - this->n_outputs = 0; - this->n_outputs_max = n_outputs_max; + this->n_outputs = 0; return n_outputs_max; } @@ -1800,14 +1771,12 @@ size_t llama_context::state_write_data(llama_io_write_i & io) { std::vector w_output_pos; - GGML_ASSERT(n_outputs <= n_outputs_max); - w_output_pos.resize(n_outputs); // build a more compact representation of the output ids for (size_t i = 0; i < n_batch(); ++i) { // map an output id to a position in the batch - int32_t pos = output_ids[i]; + int64_t pos = output_ids[i]; if (pos >= 0) { GGML_ASSERT(pos < n_outputs); w_output_pos[pos] = i; @@ -2082,7 +2051,7 @@ void llama_context::opt_epoch_iter( embd_seq.clear(); - int64_t n_outputs_all = n_tokens_all; + uint32_t n_outputs_all = n_tokens_all; auto mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled); if (!mstate || mstate->get_status() != LLAMA_MEMORY_STATUS_SUCCESS) { @@ -2092,7 +2061,7 @@ void llama_context::opt_epoch_iter( // reserve output buffer if (output_reserve(n_outputs_all) < n_outputs_all) { - LLAMA_LOG_ERROR("%s: could not reserve space for batch with %" PRId64 " outputs\n", __func__, n_outputs_all); + LLAMA_LOG_ERROR("%s: could not reserve space for batch with %d outputs\n", __func__, n_outputs_all); GGML_ABORT("TODO: handle this error"); }; diff --git a/src/llama-context.h b/src/llama-context.h index 2e0da8c83bd59..040f03ae42e65 100644 --- a/src/llama-context.h +++ b/src/llama-context.h @@ -1,7 +1,6 @@ #pragma once #include "llama.h" -#include "llama-batch.h" #include "llama-cparams.h" #include "llama-graph.h" #include "llama-adapter.h" @@ -13,6 +12,7 @@ #include struct llama_model; +class llama_batch_allocr; class llama_io_read_i; class llama_io_write_i; @@ -102,8 +102,8 @@ struct llama_context { llama_memory_state_i * mstate, ggml_status & ret); - int encode(llama_batch & inp_batch); - int decode(llama_batch & inp_batch); + int encode(const llama_batch & batch_inp); + int decode(const llama_batch & batch_inp); // // state save/load @@ -181,7 +181,7 @@ struct llama_context { // Make sure enough space is available for outputs. // Returns max number of outputs for which space was reserved. - int32_t output_reserve(int32_t n_outputs); + uint32_t output_reserve(int32_t n_outputs); // // graph @@ -246,8 +246,10 @@ struct llama_context { // populated only when pooling_type != LLAMA_POOLING_TYPE_NONE std::map> embd_seq; - int32_t n_outputs = 0; // number of actually-used outputs in the current ubatch or last logical batch - int32_t n_outputs_max = 0; // capacity (of tokens positions) for the output buffers + // reuse the batch_allocr to avoid unnecessary memory allocations + std::unique_ptr batch_allocr; + + uint32_t n_outputs = 0; // number of actually-used outputs in the current ubatch or last logical batch std::vector output_ids; // map batch token positions to ids of the logits and embd buffers diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 4493fb164eb12..337fb5cb0df36 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -139,6 +139,7 @@ void llm_graph_input_mean::set_input(const llama_ubatch * ubatch) { std::vector sum(n_tokens, 0); + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < n_seqs; ++s) { const llama_seq_id seq_id = ubatch->seq_id[s][0]; @@ -156,6 +157,7 @@ void llm_graph_input_mean::set_input(const llama_ubatch * ubatch) { } } + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < n_seqs; ++s) { const llama_seq_id seq_id = ubatch->seq_id[s][0]; @@ -180,6 +182,7 @@ void llm_graph_input_cls::set_input(const llama_ubatch * ubatch) { uint32_t * data = (uint32_t *) cls->data; memset(cls->data, 0, n_tokens * ggml_element_size(cls)); + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < n_seqs; ++s) { const llama_seq_id seq_id = ubatch->seq_id[s][0]; @@ -210,6 +213,7 @@ void llm_graph_input_cls::set_input(const llama_ubatch * ubatch) { std::vector last_pos(n_tokens, -1); std::vector last_row(n_tokens, -1); + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < n_seqs; ++s) { const llama_seq_id seq_id = ubatch->seq_id[s][0]; @@ -283,6 +287,7 @@ void llm_graph_input_attn_no_cache::set_input(const llama_ubatch * ubatch) { const int32_t ti = s0*n_seq_tokens + i; float f = -INFINITY; + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < ubatch->n_seq_id[s0]; ++s) { if (ubatch->seq_id[s0][s] == seq_id && ubatch->pos[ti] <= ubatch->pos[tj]) { if (hparams.use_alibi) { @@ -322,6 +327,7 @@ void llm_graph_input_attn_no_cache::set_input(const llama_ubatch * ubatch) { const int32_t ti = s0*n_seq_tokens + i; float f = -INFINITY; + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < ubatch->n_seq_id[s0]; ++s) { if (ubatch->seq_id[s0][s] == seq_id) { if (hparams.use_alibi) { @@ -377,6 +383,7 @@ void llm_graph_input_attn_cross::set_input(const llama_ubatch * ubatch) { for (int j = 0; j < n_tokens; ++j) { for (int i = 0; i < n_enc; ++i) { float f = -INFINITY; + // TODO: fix indexing [UBATCH_IDX] for (int s = 0; s < ubatch->n_seq_id[j]; ++s) { const llama_seq_id seq_id = ubatch->seq_id[j][s]; if (cross->seq_ids_enc[i].find(seq_id) != cross->seq_ids_enc[i].end()) { diff --git a/src/llama-graph.h b/src/llama-graph.h index 88fb77f1ddc9a..87813119b1a3c 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -378,7 +378,7 @@ struct llm_graph_params { const llama_memory_state_i * mstate; const llama_cross * cross; - int32_t n_outputs; + uint32_t n_outputs; const llm_graph_cb & cb; }; @@ -412,8 +412,8 @@ struct llm_graph_context { const float norm_eps; const float norm_rms_eps; - const int32_t n_tokens; - const int32_t n_outputs; + const int64_t n_tokens; + const int64_t n_outputs; const int32_t n_ctx_orig; // yarn const enum llama_pooling_type pooling_type; diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index 89606c598fc4f..d4e92eab3a179 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -674,6 +674,7 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch cells.pos_set(head_cur + idx, ubatch.pos[idx]); + // TODO: fix indexing [UBATCH_IDX] for (int32_t i = 0; i < ubatch.n_seq_id[s]; i++) { cells.seq_add(head_cur + idx, ubatch.seq_id[s][i]); } From 26ff3685bfbaa4c8838d7afd988b17dd5eb99f92 Mon Sep 17 00:00:00 2001 From: ddpasa <112642920+ddpasa@users.noreply.github.com> Date: Fri, 13 Jun 2025 15:17:53 +0200 Subject: [PATCH 37/95] docs : Update multimodal.md (#14122) * Update multimodal.md * Update multimodal.md --- docs/multimodal.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/multimodal.md b/docs/multimodal.md index e849c2a0b8ba1..edbd081df7969 100644 --- a/docs/multimodal.md +++ b/docs/multimodal.md @@ -107,3 +107,7 @@ NOTE: some models may require large context window, for example: `-c 8192` (tool_name) -hf ggml-org/Qwen2.5-Omni-3B-GGUF (tool_name) -hf ggml-org/Qwen2.5-Omni-7B-GGUF ``` + +## Finding more models: + +GGUF models on Huggingface with vision capabilities can be found here: https://huggingface.co/models?pipeline_tag=image-text-to-text&sort=trending&search=gguf From 80709b70a2f87c13ccaf1480b799393109996789 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 13 Jun 2025 18:35:00 +0300 Subject: [PATCH 38/95] batch : add LLAMA_BATCH_DEBUG environment variable (#14172) * batch : add LLAMA_BATCH_DEBUG environment variable ggml-ci * cont : improve seq_id display --- src/llama-batch.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++- src/llama-batch.h | 2 ++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index 9066d5a9b274d..bdbf766266f90 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -7,6 +7,7 @@ #include #include #include +#include llama_ubatch llama_sbatch::reserve_ubatch(size_t n_ubatch, bool has_embd) { // clear empty sequences @@ -283,7 +284,10 @@ llama_sbatch::llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple ); } -llama_batch_allocr::llama_batch_allocr() = default; +llama_batch_allocr::llama_batch_allocr() { + const char * LLAMA_BATCH_DEBUG = getenv("LLAMA_BATCH_DEBUG"); + debug = LLAMA_BATCH_DEBUG ? atoi(LLAMA_BATCH_DEBUG) : 0; +} bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & vocab, llama_pos p0) { clear(); @@ -356,6 +360,53 @@ bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & n_outputs += batch.logits[i] != 0; } + if (debug > 0) { + LLAMA_LOG_DEBUG("%s: input batch info (p0 = %d):\n", __func__, p0); + LLAMA_LOG_DEBUG("%s: n_tokens = %d\n", __func__, batch.n_tokens); + LLAMA_LOG_DEBUG("%s: token = %p\n", __func__, (void *) batch.token); + LLAMA_LOG_DEBUG("%s: embd = %p\n", __func__, (void *) batch.embd); + LLAMA_LOG_DEBUG("%s: pos = %p\n", __func__, (void *) batch.pos); + LLAMA_LOG_DEBUG("%s: n_seq_id = %p\n", __func__, (void *) batch.n_seq_id); + LLAMA_LOG_DEBUG("%s: seq_id = %p\n", __func__, (void *) batch.seq_id); + LLAMA_LOG_DEBUG("%s: logits = %p\n", __func__, (void *) batch.logits); + LLAMA_LOG_DEBUG("%s: n_outputs = %d\n", __func__, n_outputs); + + if (debug > 1) { + int seq_id_max = 0; + for (int32_t i = 0; i < batch.n_tokens; ++i) { + for (int s = 0; s < batch.n_seq_id[i]; ++s) { + for (int s = 0; s < batch.n_seq_id[i]; ++s) { + seq_id_max = std::max(seq_id_max, batch.seq_id[i][s]); + } + } + } + ++seq_id_max; + + LLAMA_LOG_DEBUG("%s: token = [\n", __func__); + for (int32_t i = 0; i < batch.n_tokens; ++i) { + std::vector seq_id(seq_id_max); + + for (int s = 0; s < batch.n_seq_id[i]; ++s) { + seq_id[batch.seq_id[i][s]] = 1; + } + + std::stringstream ss; + for (int s = 0; s < seq_id_max; ++s) { + if (seq_id[s]) { + ss << s%10; + } else { + ss << "."; + } + } + + LLAMA_LOG_DEBUG("%s: %4d: id = %6d (%16s), pos = %4d, n_seq_id = %2d, seq_id = [%s], output = %d\n", + __func__, i, batch.token[i], vocab.token_to_piece(batch.token[i]).c_str(), + batch.pos[i], batch.n_seq_id[i], ss.str().c_str(), batch.logits[i]); + } + LLAMA_LOG_DEBUG("%s: ]\n", __func__); + } + } + return true; } diff --git a/src/llama-batch.h b/src/llama-batch.h index 24340b00f2702..1e0be8ac2c6ce 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -102,4 +102,6 @@ class llama_batch_allocr { std::vector n_seq_id; std::vector seq_id; std::vector output; + + int debug; }; From 3cfbbdb44e08fd19429fed6cc85b982a91f0efd5 Mon Sep 17 00:00:00 2001 From: Guy Goldenberg Date: Fri, 13 Jun 2025 19:20:25 +0300 Subject: [PATCH 39/95] Merge commit from fork * vocab : prevent integer overflow during load * Add static cast and GGML_ABORT --------- Co-authored-by: Georgi Gerganov --- src/llama-vocab.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index d8c9d9730a095..07e692208b0eb 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -19,6 +19,7 @@ #include #include #include +#include // // helpers @@ -2572,6 +2573,10 @@ int32_t llama_vocab::impl::token_to_piece(llama_token token, char * buf, int32_t // copy piece chars to output text buffer // skip up to 'lstrip' leading spaces before copying auto _try_copy = [=] (const char * token, size_t size) -> int32_t { + if (size >= static_cast(std::numeric_limits::max())) { + GGML_ABORT("invalid token size: %zu exceeds int32_t limit", size); + } + for (int32_t i = 0; i < lstrip && size && *token == ' '; ++i) { token++; size--; From 40643edb86eb10b471b0f57d4f3f7eb0e06a0df7 Mon Sep 17 00:00:00 2001 From: Svetlozar Georgiev <55534064+sgeor255@users.noreply.github.com> Date: Fri, 13 Jun 2025 17:32:56 +0100 Subject: [PATCH 40/95] sycl: fix docker image (#14144) --- .devops/intel.Dockerfile | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/.devops/intel.Dockerfile b/.devops/intel.Dockerfile index 8cad660523ecc..9ce80a71eb950 100644 --- a/.devops/intel.Dockerfile +++ b/.devops/intel.Dockerfile @@ -49,19 +49,23 @@ COPY --from=build /app/full /app WORKDIR /app -RUN apt-get update \ - && apt-get install -y \ - git \ - python3 \ - python3-pip \ - && pip install --upgrade pip setuptools wheel \ - && pip install -r requirements.txt \ - && apt autoremove -y \ - && apt clean -y \ - && rm -rf /tmp/* /var/tmp/* \ - && find /var/cache/apt/archives /var/lib/apt/lists -not -name lock -type f -delete \ - && find /var/cache -type f -delete - +RUN apt-get update && \ + apt-get install -y \ + git \ + python3 \ + python3-pip \ + python3-venv && \ + python3 -m venv /opt/venv && \ + . /opt/venv/bin/activate && \ + pip install --upgrade pip setuptools wheel && \ + pip install -r requirements.txt && \ + apt autoremove -y && \ + apt clean -y && \ + rm -rf /tmp/* /var/tmp/* && \ + find /var/cache/apt/archives /var/lib/apt/lists -not -name lock -type f -delete && \ + find /var/cache -type f -delete + +ENV PATH="/opt/venv/bin:$PATH" ENTRYPOINT ["/app/tools.sh"] From fb85a288d72abbd5e5daa8de96e6f8bfa7b5ab46 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 13 Jun 2025 20:03:05 +0300 Subject: [PATCH 41/95] vocab : fix build (#14175) ggml-ci --- src/llama-vocab.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index 07e692208b0eb..905d7c4281d9c 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -9,17 +9,16 @@ #include #include +#include #include -#include #include #include #include +#include #include #include #include #include -#include -#include // // helpers From 2e42be42bd6bf1dcc643d6ac4e77419bfe5dd24f Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Sat, 14 Jun 2025 16:34:20 +0800 Subject: [PATCH 42/95] compare-llama-bench: add option to plot (#14169) * compare llama-bench: add option to plot * Address review comments: convert case + add type hints * Add matplotlib to requirements * fix tests * Improve comment and fix assert condition for test * Add back default test_name, add --plot_log_scale * use log_scale regardless of x_values --- .../requirements-compare-llama-bench.txt | 1 + scripts/compare-llama-bench.py | 169 +++++++++++++++++- 2 files changed, 169 insertions(+), 1 deletion(-) diff --git a/requirements/requirements-compare-llama-bench.txt b/requirements/requirements-compare-llama-bench.txt index e0aaa32043ce2..d87e897e17199 100644 --- a/requirements/requirements-compare-llama-bench.txt +++ b/requirements/requirements-compare-llama-bench.txt @@ -1,2 +1,3 @@ tabulate~=0.9.0 GitPython~=3.1.43 +matplotlib~=3.10.0 diff --git a/scripts/compare-llama-bench.py b/scripts/compare-llama-bench.py index a1013c3b7a66d..30e3cf8649e8a 100755 --- a/scripts/compare-llama-bench.py +++ b/scripts/compare-llama-bench.py @@ -19,6 +19,7 @@ print("the following Python libraries are required: GitPython, tabulate.") # noqa: NP100 raise e + logger = logging.getLogger("compare-llama-bench") # All llama-bench SQL fields @@ -122,11 +123,15 @@ parser.add_argument("--check", action="store_true", help="check if all required Python libraries are installed") parser.add_argument("-s", "--show", help=help_s) parser.add_argument("--verbose", action="store_true", help="increase output verbosity") +parser.add_argument("--plot", help="generate a performance comparison plot and save to specified file (e.g., plot.png)") +parser.add_argument("--plot_x", help="parameter to use as x axis for plotting (default: n_depth)", default="n_depth") +parser.add_argument("--plot_log_scale", action="store_true", help="use log scale for x axis in plots (off by default)") known_args, unknown_args = parser.parse_known_args() logging.basicConfig(level=logging.DEBUG if known_args.verbose else logging.INFO) + if known_args.check: # Check if all required Python libraries are installed. Would have failed earlier if not. sys.exit(0) @@ -499,7 +504,6 @@ def valid_format(data_files: list[str]) -> bool: name_compare = bench_data.get_commit_name(hexsha8_compare) - # If the user provided columns to group the results by, use them: if known_args.show is not None: show = known_args.show.split(",") @@ -544,6 +548,14 @@ def valid_format(data_files: list[str]) -> bool: show.remove(prop) except ValueError: pass + + # Add plot_x parameter to parameters to show if it's not already present: + if known_args.plot: + for k, v in PRETTY_NAMES.items(): + if v == known_args.plot_x and k not in show: + show.append(k) + break + rows_show = bench_data.get_rows(show, hexsha8_baseline, hexsha8_compare) if not rows_show: @@ -600,6 +612,161 @@ def valid_format(data_files: list[str]) -> bool: headers = [PRETTY_NAMES[p] for p in show] headers += ["Test", f"t/s {name_baseline}", f"t/s {name_compare}", "Speedup"] +if known_args.plot: + def create_performance_plot(table_data: list[list[str]], headers: list[str], baseline_name: str, compare_name: str, output_file: str, plot_x_param: str, log_scale: bool = False): + try: + import matplotlib.pyplot as plt + import matplotlib + matplotlib.use('Agg') + except ImportError as e: + logger.error("matplotlib is required for --plot.") + raise e + + data_headers = headers[:-4] # Exclude the last 4 columns (Test, baseline t/s, compare t/s, Speedup) + plot_x_index = None + plot_x_label = plot_x_param + + if plot_x_param not in ["n_prompt", "n_gen", "n_depth"]: + pretty_name = PRETTY_NAMES.get(plot_x_param, plot_x_param) + if pretty_name in data_headers: + plot_x_index = data_headers.index(pretty_name) + plot_x_label = pretty_name + elif plot_x_param in data_headers: + plot_x_index = data_headers.index(plot_x_param) + plot_x_label = plot_x_param + else: + logger.error(f"Parameter '{plot_x_param}' not found in current table columns. Available columns: {', '.join(data_headers)}") + return + + grouped_data = {} + + for i, row in enumerate(table_data): + group_key_parts = [] + test_name = row[-4] + + base_test = "" + x_value = None + + if plot_x_param in ["n_prompt", "n_gen", "n_depth"]: + for j, val in enumerate(row[:-4]): + header_name = data_headers[j] + if val is not None and str(val).strip(): + group_key_parts.append(f"{header_name}={val}") + + if plot_x_param == "n_prompt" and "pp" in test_name: + base_test = test_name.split("@")[0] + x_value = base_test + elif plot_x_param == "n_gen" and "tg" in test_name: + x_value = test_name.split("@")[0] + elif plot_x_param == "n_depth" and "@d" in test_name: + base_test = test_name.split("@d")[0] + x_value = int(test_name.split("@d")[1]) + else: + base_test = test_name + + if base_test.strip(): + group_key_parts.append(f"Test={base_test}") + else: + for j, val in enumerate(row[:-4]): + if j != plot_x_index: + header_name = data_headers[j] + if val is not None and str(val).strip(): + group_key_parts.append(f"{header_name}={val}") + else: + x_value = val + + group_key_parts.append(f"Test={test_name}") + + group_key = tuple(group_key_parts) + + if group_key not in grouped_data: + grouped_data[group_key] = [] + + grouped_data[group_key].append({ + 'x_value': x_value, + 'baseline': float(row[-3]), + 'compare': float(row[-2]), + 'speedup': float(row[-1]) + }) + + if not grouped_data: + logger.error("No data available for plotting") + return + + def make_axes(num_groups, max_cols=2, base_size=(8, 4)): + from math import ceil + cols = 1 if num_groups == 1 else min(max_cols, num_groups) + rows = ceil(num_groups / cols) + + # Scale figure size by grid dimensions + w, h = base_size + fig, ax_arr = plt.subplots(rows, cols, + figsize=(w * cols, h * rows), + squeeze=False) + + axes = ax_arr.flatten()[:num_groups] + return fig, axes + + num_groups = len(grouped_data) + fig, axes = make_axes(num_groups) + + plot_idx = 0 + + for group_key, points in grouped_data.items(): + if plot_idx >= len(axes): + break + ax = axes[plot_idx] + + try: + points_sorted = sorted(points, key=lambda p: float(p['x_value']) if p['x_value'] is not None else 0) + x_values = [float(p['x_value']) if p['x_value'] is not None else 0 for p in points_sorted] + except ValueError: + points_sorted = sorted(points, key=lambda p: group_key) + x_values = [p['x_value'] for p in points_sorted] + + baseline_vals = [p['baseline'] for p in points_sorted] + compare_vals = [p['compare'] for p in points_sorted] + + ax.plot(x_values, baseline_vals, 'o-', color='skyblue', + label=f'{baseline_name}', linewidth=2, markersize=6) + ax.plot(x_values, compare_vals, 's--', color='lightcoral', alpha=0.8, + label=f'{compare_name}', linewidth=2, markersize=6) + + if log_scale: + ax.set_xscale('log', base=2) + unique_x = sorted(set(x_values)) + ax.set_xticks(unique_x) + ax.set_xticklabels([str(int(x)) for x in unique_x]) + + title_parts = [] + for part in group_key: + if '=' in part: + key, value = part.split('=', 1) + title_parts.append(f"{key}: {value}") + + title = ', '.join(title_parts) if title_parts else "Performance comparison" + + ax.set_xlabel(plot_x_label, fontsize=12, fontweight='bold') + ax.set_ylabel('Tokens per second (t/s)', fontsize=12, fontweight='bold') + ax.set_title(title, fontsize=12, fontweight='bold') + ax.legend(loc='best', fontsize=10) + ax.grid(True, alpha=0.3) + + plot_idx += 1 + + for i in range(plot_idx, len(axes)): + axes[i].set_visible(False) + + fig.suptitle(f'Performance comparison: {compare_name} vs. {baseline_name}', + fontsize=14, fontweight='bold') + fig.subplots_adjust(top=1) + + plt.tight_layout() + plt.savefig(output_file, dpi=300, bbox_inches='tight') + plt.close() + + create_performance_plot(table, headers, name_baseline, name_compare, known_args.plot, known_args.plot_x, known_args.plot_log_scale) + print(tabulate( # noqa: NP100 table, headers=headers, From 3cb203c89f60483e349f841684173446ed23c28f Mon Sep 17 00:00:00 2001 From: Piotr Date: Sat, 14 Jun 2025 18:25:15 +0200 Subject: [PATCH 43/95] llama-chat : Do not throw when tool parsing fails (#14012) Currently when a model generates output which looks like a tool call, but is invalid an exception is thrown and not handled, causing the cli or llama-server to bail. Instead, handle the chat parser exception and simply return the generated text in such cases. Signed-off-by: Piotr Stankiewicz --- common/chat-parser.cpp | 5 +++++ common/chat-parser.h | 2 ++ common/chat.cpp | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/common/chat-parser.cpp b/common/chat-parser.cpp index 65b664cb37da4..18a30e49aa578 100644 --- a/common/chat-parser.cpp +++ b/common/chat-parser.cpp @@ -49,6 +49,7 @@ bool common_chat_msg_parser::add_tool_call(const std::string & name, const std:: // LOG_DBG("Tool call arguments:\n\traw: %s\n\tresult: %s\n", arguments.c_str(), tool_call.arguments.c_str()); result_.tool_calls.emplace_back(tool_call); + return true; } bool common_chat_msg_parser::add_tool_call(const json & tool_call) { @@ -378,3 +379,7 @@ std::optional common_chat_msg_parse /* .is_partial = */ found_healing_marker, }; } + +void common_chat_msg_parser::clear_tools() { + result_.tool_calls.clear(); +} diff --git a/common/chat-parser.h b/common/chat-parser.h index 7ee355056b30a..0e64c341a50aa 100644 --- a/common/chat-parser.h +++ b/common/chat-parser.h @@ -115,4 +115,6 @@ class common_chat_msg_parser { const std::vector> & args_paths = {}, const std::vector> & content_paths = {} ); + + void clear_tools(); }; diff --git a/common/chat.cpp b/common/chat.cpp index 1d6974a8c563b..0dad14fba9ba5 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -1921,7 +1921,9 @@ common_chat_msg common_chat_parse(const std::string & input, bool is_partial, co } catch (const common_chat_msg_partial_exception & ex) { LOG_DBG("Partial parse: %s\n", ex.what()); if (!is_partial) { - throw std::runtime_error(ex.what()); + builder.clear_tools(); + builder.move_to(0); + common_chat_parse_content_only(builder); } } auto msg = builder.result(); From 00ba7726100d7e1941d9f5a06f56a7559945b33c Mon Sep 17 00:00:00 2001 From: Pepijn de Vos Date: Sun, 15 Jun 2025 08:06:37 +0200 Subject: [PATCH 44/95] docs : remove WIP since PR has been merged (#13912) --- docs/function-calling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/function-calling.md b/docs/function-calling.md index fd3db9bd16a92..37eacaf3100c1 100644 --- a/docs/function-calling.md +++ b/docs/function-calling.md @@ -11,7 +11,7 @@ Function calling is supported for all models (see https://github.com/ggml-org/ll - Llama 3.1 / 3.3 (including builtin tools support - tool names for `wolfram_alpha`, `web_search` / `brave_search`, `code_interpreter`), Llama 3.2 - Functionary v3.1 / v3.2 - Hermes 2/3, Qwen 2.5 - - Qwen 2.5 Coder (WIP: https://github.com/ggml-org/llama.cpp/pull/12034) + - Qwen 2.5 Coder - Mistral Nemo - Firefunction v2 - Command R7B From b9912ac570de8945ae9383c9ca8291027bf287dd Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 15 Jun 2025 09:18:37 +0300 Subject: [PATCH 45/95] batch : auto-gen positions + verify multi-sequence input (#14177) * batch : verify multi-sequence input batches ggml-ci * cont : auto-gen positions + verify multi-seq input ggml-ci * cont : first print debug info, then perform validation ggml-ci * cont : fix position auto-gen + add comments ggml-ci --- include/llama.h | 4 +- src/llama-batch.cpp | 153 +++++++++++++++++++++++++++++++++++++----- src/llama-batch.h | 17 ++++- src/llama-context.cpp | 6 +- src/llama-cparams.h | 1 + 5 files changed, 155 insertions(+), 26 deletions(-) diff --git a/include/llama.h b/include/llama.h index 015a57898e22d..d5e4cef68c213 100644 --- a/include/llama.h +++ b/include/llama.h @@ -243,14 +243,14 @@ extern "C" { typedef bool (*llama_progress_callback)(float progress, void * user_data); - // Input data for llama_decode + // Input data for llama_encode/llama_decode // A llama_batch object can contain input about one or many sequences // The provided arrays (i.e. token, embd, pos, etc.) must have size of n_tokens // // - token : the token ids of the input (used when embd is NULL) // - embd : token embeddings (i.e. float vector of size n_embd) (used when token is NULL) // - pos : the positions of the respective token in the sequence - // (if set to NULL, the token position will be tracked automatically by llama_decode) + // (if set to NULL, the token position will be tracked automatically by llama_encode/llama_decode) // - seq_id : the sequence to which the respective token belongs // (if set to NULL, the sequence ID will be assumed to be 0) // - logits : if zero, the logits (and/or the embeddings) for the respective token will not be output diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index bdbf766266f90..2265db9b235b8 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -3,6 +3,7 @@ #include "llama-impl.h" #include "llama-cparams.h" #include "llama-vocab.h" +#include "llama-memory.h" #include #include @@ -287,21 +288,27 @@ llama_sbatch::llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple llama_batch_allocr::llama_batch_allocr() { const char * LLAMA_BATCH_DEBUG = getenv("LLAMA_BATCH_DEBUG"); debug = LLAMA_BATCH_DEBUG ? atoi(LLAMA_BATCH_DEBUG) : 0; + + seq_pos.resize(LLAMA_MAX_PARALLEL_SEQUENCES); + seq_cpl.resize(LLAMA_MAX_PARALLEL_SEQUENCES); + for (auto & cur : seq_cpl) { + cur.resize(LLAMA_MAX_PARALLEL_SEQUENCES); + } } -bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & vocab, llama_pos p0) { +bool llama_batch_allocr::init( + const llama_batch & batch_inp, + const llama_vocab & vocab, + const llama_memory_i * memory) { clear(); batch = batch_inp; GGML_ASSERT(batch.n_tokens > 0); - if (!batch.pos) { - if (batch.seq_id) { - LLAMA_LOG_ERROR("%s: pos == NULL, but seq_id != NULL\n", __func__); - return false; - } - } + // + // validate input batch + // if (batch.token) { for (int32_t i = 0; i < batch.n_tokens; ++i) { @@ -323,14 +330,9 @@ bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & } } - if (!batch.pos) { - assert(p0 >= 0); - pos.resize(batch.n_tokens); - for (int32_t i = 0; i < batch.n_tokens; i++) { - pos[i] = p0 + i; - } - batch.pos = pos.data(); - } + // + // auto-generate missing fields + // if (!batch.n_seq_id) { n_seq_id.resize(batch.n_tokens); @@ -349,6 +351,32 @@ bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & batch.seq_id = seq_id.data(); } + if (!batch.pos) { + pos.resize(batch.n_tokens); + + // initialize the starting position for each sequence based on the positions in the memory + llama_pos p0[LLAMA_MAX_PARALLEL_SEQUENCES]; + for (int32_t s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + if (!memory) { + p0[s] = 0; + } else { + p0[s] = memory->seq_pos_max(s) + 1; + } + } + + for (int32_t i = 0; i < batch.n_tokens; i++) { + const llama_seq_id seq_id = batch.seq_id[i][0]; + + pos[i] = p0[seq_id]; + + for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { + p0[batch.seq_id[i][s]] = pos[i] + 1; + } + } + + batch.pos = pos.data(); + } + if (!batch.logits) { // by default return the output only for the last token output.resize(batch.n_tokens); @@ -356,13 +384,36 @@ bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & batch.logits = output.data(); } + // + // compute stats + // + for (int32_t i = 0; i < batch.n_tokens; ++i) { n_outputs += batch.logits[i] != 0; } + // determine coupled sequences + // these are pairs of sequences that have at least one token in the input batch that is assigned to both of them + for (int32_t i = 0; i < batch.n_tokens; ++i) { + for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { + seq_pos[batch.seq_id[i][s]].insert(batch.pos[i]); + + if (s > 0) { + const llama_seq_id s0 = batch.seq_id[i][0]; + const llama_seq_id s1 = batch.seq_id[i][s]; + + // mark that sequence s1 is coupled to s0 + seq_cpl[s1][s0] = true; + + // note: the other way around is not necessary for now + //seq_cpl[s0][s1] = true; + } + } + } + if (debug > 0) { - LLAMA_LOG_DEBUG("%s: input batch info (p0 = %d):\n", __func__, p0); - LLAMA_LOG_DEBUG("%s: n_tokens = %d\n", __func__, batch.n_tokens); + LLAMA_LOG_DEBUG("%s: input batch info:\n", __func__); + LLAMA_LOG_DEBUG("%s: n_tokens = %d\n", __func__, batch.n_tokens); LLAMA_LOG_DEBUG("%s: token = %p\n", __func__, (void *) batch.token); LLAMA_LOG_DEBUG("%s: embd = %p\n", __func__, (void *) batch.embd); LLAMA_LOG_DEBUG("%s: pos = %p\n", __func__, (void *) batch.pos); @@ -404,6 +455,58 @@ bool llama_batch_allocr::init(const llama_batch & batch_inp, const llama_vocab & batch.pos[i], batch.n_seq_id[i], ss.str().c_str(), batch.logits[i]); } LLAMA_LOG_DEBUG("%s: ]\n", __func__); + + LLAMA_LOG_DEBUG("%s: seq = [\n", __func__); + for (int s0 = 0; s0 < (int) seq_pos.size(); ++s0) { + if (seq_pos[s0].empty()) { + continue; + } + + std::stringstream ss; + for (int s1 = 0; s1 < (int) seq_cpl[s0].size(); ++s1) { + if (seq_cpl[s0][s1]) { + ss << s1 << " "; + } + } + + LLAMA_LOG_DEBUG("%s: %4d: pos = [%4d, %4d], cpl = %s\n", + __func__, s0, seq_pos_min(s0), seq_pos_max(s0), ss.str().empty() ? "-" : ss.str().c_str()); + } + LLAMA_LOG_DEBUG("%s: ]\n", __func__); + } + } + + // + // consistency checks + // + + for (int32_t s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + if (seq_pos[s].empty()) { + continue; + } + + if (memory && seq_pos_min(s) != memory->seq_pos_max(s) + 1) { + LLAMA_LOG_ERROR("%s: sequence %d does not start from the last position stored in the memory\n", __func__, s); + return false; + } + + if (seq_pos_max(s) - seq_pos_min(s) + 1 > (int) seq_pos[s].size()) { + LLAMA_LOG_ERROR("%s: sequence %d positions are not continuous\n", __func__, s); + return false; + } + } + + if (memory) { + for (int32_t s0 = 0; s0 < LLAMA_MAX_PARALLEL_SEQUENCES; ++s0) { + for (int32_t s1 = 0; s1 < LLAMA_MAX_PARALLEL_SEQUENCES; ++s1) { + if (seq_cpl[s0][s1]) { + if (memory->seq_pos_min(s0) != memory->seq_pos_min(s1) || + memory->seq_pos_max(s0) != memory->seq_pos_max(s1)) { + LLAMA_LOG_ERROR("%s: sequence %d is coupled to %d in the input batch, but have divereged\n", __func__, s0, s1); + return false; + } + } + } } } @@ -418,6 +521,14 @@ uint32_t llama_batch_allocr::get_n_outputs() const { return n_outputs; } +llama_pos llama_batch_allocr::seq_pos_min(llama_seq_id seq_id) const { + return seq_pos[seq_id].empty() ? -1 : *seq_pos[seq_id].begin(); +} + +llama_pos llama_batch_allocr::seq_pos_max(llama_seq_id seq_id) const { + return seq_pos[seq_id].empty() ? -1 : *seq_pos[seq_id].rbegin(); +} + void llama_batch_allocr::clear() { n_outputs = 0; @@ -426,6 +537,14 @@ void llama_batch_allocr::clear() { n_seq_id.clear(); seq_id.clear(); output.clear(); + + for (auto & cur : seq_pos) { + cur.clear(); + } + + for (auto & cur : seq_cpl) { + std::fill(cur.begin(), cur.end(), false); + } } // diff --git a/src/llama-batch.h b/src/llama-batch.h index 1e0be8ac2c6ce..04501ce5d424c 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -4,6 +4,7 @@ #include #include +#include // very similar to llama_batch, // but has more metadata about sequences @@ -77,18 +78,25 @@ struct llama_sbatch { llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split = false); }; -// temporary allocate memory for the input batch if needed +// a helper for sanitizing and fulfilling a batch class llama_batch_allocr { public: llama_batch_allocr(); - // optionally fulfill the batch returned by llama_batch_get_one - bool init(const llama_batch & batch_inp, const llama_vocab & vocab, llama_pos p0); + // sanitize and auto-gen missing data in the input batch + // memory is optional. if provided will be used to check for sequence continuity and to determine the positions + bool init( + const llama_batch & batch_inp, + const llama_vocab & vocab, + const llama_memory_i * memory); const llama_batch & get_batch() const; uint32_t get_n_outputs() const; + llama_pos seq_pos_min(llama_seq_id seq_id) const; + llama_pos seq_pos_max(llama_seq_id seq_id) const; + private: void clear(); @@ -103,5 +111,8 @@ class llama_batch_allocr { std::vector seq_id; std::vector output; + std::vector> seq_pos; // seq_pos[s]: the set of positions in sequence s + std::vector> seq_cpl; // seq_cpl[s0][s1]: if sequence s0 is coupled to sequence s1 + int debug; }; diff --git a/src/llama-context.cpp b/src/llama-context.cpp index ec1e1189b219a..47c60e960dc01 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -727,9 +727,8 @@ int llama_context::encode(const llama_batch & batch_inp) { return -1; } - // temporary allocate memory for the input batch if needed // note: during encode, we always pass the full sequence starting from pos = 0 - if (!batch_allocr->init(batch_inp, model.vocab, batch_inp.pos ? -1 : 0)) { + if (!batch_allocr->init(batch_inp, model.vocab, nullptr)) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); return -1; } @@ -895,8 +894,7 @@ int llama_context::decode(const llama_batch & batch_inp) { return -1; } - // temporary allocate memory for the input batch if needed - if (!batch_allocr->init(batch_inp, model.vocab, batch_inp.pos ? -1 : memory->seq_pos_max(0) + 1)) { + if (!batch_allocr->init(batch_inp, model.vocab, memory.get())) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); return -1; } diff --git a/src/llama-cparams.h b/src/llama-cparams.h index 2871031ef0961..51ebe5d17efa7 100644 --- a/src/llama-cparams.h +++ b/src/llama-cparams.h @@ -4,6 +4,7 @@ #include +// TODO: rename to something shorter #define LLAMA_MAX_PARALLEL_SEQUENCES 64 struct llama_cparams { From c311ac664d68d10781a3e7b9f02d9d9520837d80 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 15 Jun 2025 10:08:58 +0300 Subject: [PATCH 46/95] cparams : rename LLAMA_MAX_PARALLEL_SEQUENCES to LLAMA_MAX_SEQ (#14188) ggml-ci --- src/llama-batch.cpp | 20 ++++++++++---------- src/llama-context.cpp | 10 +++++----- src/llama-cparams.cpp | 2 +- src/llama-cparams.h | 3 +-- src/llama-kv-cache-unified.cpp | 8 ++++---- src/llama-kv-cells.h | 16 ++++++++-------- 6 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index 2265db9b235b8..a9f4a3d4c45c5 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -289,10 +289,10 @@ llama_batch_allocr::llama_batch_allocr() { const char * LLAMA_BATCH_DEBUG = getenv("LLAMA_BATCH_DEBUG"); debug = LLAMA_BATCH_DEBUG ? atoi(LLAMA_BATCH_DEBUG) : 0; - seq_pos.resize(LLAMA_MAX_PARALLEL_SEQUENCES); - seq_cpl.resize(LLAMA_MAX_PARALLEL_SEQUENCES); + seq_pos.resize(LLAMA_MAX_SEQ); + seq_cpl.resize(LLAMA_MAX_SEQ); for (auto & cur : seq_cpl) { - cur.resize(LLAMA_MAX_PARALLEL_SEQUENCES); + cur.resize(LLAMA_MAX_SEQ); } } @@ -322,8 +322,8 @@ bool llama_batch_allocr::init( if (batch.seq_id) { for (int32_t i = 0; i < batch.n_tokens; ++i) { for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { - if (batch.seq_id && (batch.seq_id[i][s] < 0 || batch.seq_id[i][s] >= LLAMA_MAX_PARALLEL_SEQUENCES)) { - LLAMA_LOG_ERROR("%s: invalid seq_id[%d][%d] = %d > %d\n", __func__, i, s, batch.seq_id[i][s], LLAMA_MAX_PARALLEL_SEQUENCES); + if (batch.seq_id && (batch.seq_id[i][s] < 0 || batch.seq_id[i][s] >= LLAMA_MAX_SEQ)) { + LLAMA_LOG_ERROR("%s: invalid seq_id[%d][%d] = %d > %d\n", __func__, i, s, batch.seq_id[i][s], LLAMA_MAX_SEQ); return false; } } @@ -355,8 +355,8 @@ bool llama_batch_allocr::init( pos.resize(batch.n_tokens); // initialize the starting position for each sequence based on the positions in the memory - llama_pos p0[LLAMA_MAX_PARALLEL_SEQUENCES]; - for (int32_t s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + llama_pos p0[LLAMA_MAX_SEQ]; + for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { if (!memory) { p0[s] = 0; } else { @@ -480,7 +480,7 @@ bool llama_batch_allocr::init( // consistency checks // - for (int32_t s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { if (seq_pos[s].empty()) { continue; } @@ -497,8 +497,8 @@ bool llama_batch_allocr::init( } if (memory) { - for (int32_t s0 = 0; s0 < LLAMA_MAX_PARALLEL_SEQUENCES; ++s0) { - for (int32_t s1 = 0; s1 < LLAMA_MAX_PARALLEL_SEQUENCES; ++s1) { + for (int32_t s0 = 0; s0 < LLAMA_MAX_SEQ; ++s0) { + for (int32_t s1 = 0; s1 < LLAMA_MAX_SEQ; ++s1) { if (seq_cpl[s0][s1]) { if (memory->seq_pos_min(s0) != memory->seq_pos_min(s1) || memory->seq_pos_max(s0) != memory->seq_pos_max(s1)) { diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 47c60e960dc01..3a113d1bcfb2a 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -29,8 +29,8 @@ llama_context::llama_context( const auto & hparams = model.hparams; cparams.n_seq_max = std::max(1u, params.n_seq_max); - if (cparams.n_seq_max > LLAMA_MAX_PARALLEL_SEQUENCES) { - throw std::runtime_error("n_seq_max must be <= " + std::to_string(LLAMA_MAX_PARALLEL_SEQUENCES)); + if (cparams.n_seq_max > LLAMA_MAX_SEQ) { + throw std::runtime_error("n_seq_max must be <= " + std::to_string(LLAMA_MAX_SEQ)); } cparams.n_threads = params.n_threads; @@ -1023,8 +1023,8 @@ int llama_context::decode(const llama_batch & batch_inp) { if (!res) { // the last ubatch failed or was aborted -> remove all positions of that ubatch from the KV cache - llama_pos pos_min[LLAMA_MAX_PARALLEL_SEQUENCES]; - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + llama_pos pos_min[LLAMA_MAX_SEQ]; + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { pos_min[s] = std::numeric_limits::max(); } @@ -1035,7 +1035,7 @@ int llama_context::decode(const llama_batch & batch_inp) { pos_min[seq_id] = std::min(pos_min[seq_id], ubatch.pos[i]); } - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { if (pos_min[s] == std::numeric_limits::max()) { continue; } diff --git a/src/llama-cparams.cpp b/src/llama-cparams.cpp index f7b36590fe3e3..a3e7a37ee36d7 100644 --- a/src/llama-cparams.cpp +++ b/src/llama-cparams.cpp @@ -1,5 +1,5 @@ #include "llama-cparams.h" size_t llama_max_parallel_sequences(void) { - return LLAMA_MAX_PARALLEL_SEQUENCES; + return LLAMA_MAX_SEQ; } diff --git a/src/llama-cparams.h b/src/llama-cparams.h index 51ebe5d17efa7..118615d5bd2d5 100644 --- a/src/llama-cparams.h +++ b/src/llama-cparams.h @@ -4,8 +4,7 @@ #include -// TODO: rename to something shorter -#define LLAMA_MAX_PARALLEL_SEQUENCES 64 +#define LLAMA_MAX_SEQ 64 struct llama_cparams { uint32_t n_ctx; // context size used during inference diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index d4e92eab3a179..03107057079ca 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -572,7 +572,7 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { LLAMA_LOG_DEBUG("\n%s\n", ss.c_str()); } - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { if (cells.seq_pos_min(s) < 0) { continue; } @@ -652,8 +652,8 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_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_PARALLEL_SEQUENCES]; - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + llama_seq_id seq_pos_max_rm[LLAMA_MAX_SEQ]; + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { seq_pos_max_rm[s] = -1; } @@ -684,7 +684,7 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch // note: we want to preserve the invariant that all positions between [pos_min, pos_max] for each sequence // will be present in the cache. so we have to purge any position which is less than those we would overwrite // ref: https://github.com/ggml-org/llama.cpp/pull/13746#issuecomment-2916057092 - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { if (seq_pos_max_rm[s] == -1) { continue; } diff --git a/src/llama-kv-cells.h b/src/llama-kv-cells.h index acf30aebec69b..1d4e70f4d3212 100644 --- a/src/llama-kv-cells.h +++ b/src/llama-kv-cells.h @@ -23,7 +23,7 @@ class llama_kv_cells_unified { used.clear(); - for (uint32_t s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (uint32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { seq_pos[s].clear(); } } @@ -240,7 +240,7 @@ class llama_kv_cells_unified { llama_seq_id seq_get(uint32_t i) const { assert(seq[i].count() == 1); - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { if (seq[i].test(s)) { return s; } @@ -253,7 +253,7 @@ class llama_kv_cells_unified { // return -1 if the sequence is not present llama_pos seq_pos_min(llama_seq_id seq_id) const { assert(seq_id >= 0); - assert(seq_id < LLAMA_MAX_PARALLEL_SEQUENCES); + assert(seq_id < LLAMA_MAX_SEQ); if (seq_pos[seq_id].empty()) { return -1; @@ -266,7 +266,7 @@ class llama_kv_cells_unified { // return -1 if the sequence is not present llama_pos seq_pos_max(llama_seq_id seq_id) const { assert(seq_id >= 0); - assert(seq_id < LLAMA_MAX_PARALLEL_SEQUENCES); + assert(seq_id < LLAMA_MAX_SEQ); if (seq_pos[seq_id].empty()) { return -1; @@ -384,20 +384,20 @@ class llama_kv_cells_unified { // std::vector shift; - using bits_t = std::bitset; + using bits_t = std::bitset; // the bitset seq[i] tells us which sequences are currently occupying the i-th cell std::vector seq; // the set seq_pos[s] tells us which positions are currently present for sequence s // this way seq_pos[s].begin() and seq_pos[s].rbegin() give us the min/max positions currently in the cache - std::set seq_pos[LLAMA_MAX_PARALLEL_SEQUENCES]; + std::set seq_pos[LLAMA_MAX_SEQ]; // helper functions for updating `seq_pos`, once cell at a time: // remove cell i void seq_pos_rm(uint32_t i) { - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { if (seq[i].test(s)) { seq_pos[s].erase(pos[i]); } @@ -406,7 +406,7 @@ class llama_kv_cells_unified { // add cell i void seq_pos_add(uint32_t i) { - for (int s = 0; s < LLAMA_MAX_PARALLEL_SEQUENCES; ++s) { + for (int s = 0; s < LLAMA_MAX_SEQ; ++s) { if (seq[i].test(s)) { seq_pos[s].insert(pos[i]); } From 9ae4143bc6ecb4c2f0f0301578f619f6c201b857 Mon Sep 17 00:00:00 2001 From: Mikko Juola Date: Sun, 15 Jun 2025 00:52:06 -0700 Subject: [PATCH 47/95] model : add dots.llm1 architecture support (#14044) (#14118) Adds: * Dots1Model to convert_hf_to_gguf.py * Computation graph code to llama-model.cpp * Chat template to llama-chat.cpp to detect this model's template. --- The model is called "dots.llm1" (I decided to shorten it to dots1 or DOTS1 in the code generally) architecture. The only models that exist as of writing of this commit that follow this architecture are "dots.llm1.inst" and "dots.llm1.base" from here: * https://huggingface.co/rednote-hilab/dots.llm1.inst * https://huggingface.co/rednote-hilab/dots.llm1.base The model architecture is a combination of Qwen and Deepseek parts, as seen here: https://github.com/huggingface/transformers/blob/ffe12627b4e84489d2ab91dd0ec00614855edc79/src/transformers/models/dots1/modular_dots1.py --- convert_hf_to_gguf.py | 28 +++++ gguf-py/gguf/constants.py | 26 ++++ gguf-py/gguf/tensor_mapping.py | 2 +- src/llama-arch.cpp | 29 +++++ src/llama-arch.h | 1 + src/llama-chat.cpp | 17 +++ src/llama-chat.h | 1 + src/llama-model.cpp | 222 +++++++++++++++++++++++++++++++++ src/llama-model.h | 1 + 9 files changed, 326 insertions(+), 1 deletion(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 173a103badc60..cff72c85fab69 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -5262,6 +5262,34 @@ def prepare_tensors(self): raise ValueError(f"Unprocessed experts: {experts}") +@ModelBase.register("Dots1ForCausalLM") +class Dots1Model(Qwen2MoeModel): + model_arch = gguf.MODEL_ARCH.DOTS1 + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.hparams["num_experts"] = self.hparams["n_routed_experts"] + + def set_gguf_parameters(self): + super().set_gguf_parameters() + self.gguf_writer.add_leading_dense_block_count(self.hparams["first_k_dense_replace"]) + self.gguf_writer.add_expert_shared_count(self.hparams["n_shared_experts"]) + self.gguf_writer.add_expert_weights_scale(self.hparams["routed_scaling_factor"]) + self.gguf_writer.add_expert_weights_norm(self.hparams["norm_topk_prob"]) + + if self.hparams["scoring_func"] == "noaux_tc": + self.gguf_writer.add_expert_gating_func(gguf.ExpertGatingFuncType.SIGMOID) + else: + raise ValueError(f"Unsupported scoring_func value: {self.hparams['scoring_func']}") + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None): + if name.endswith("e_score_correction_bias"): + name = name.replace("e_score_correction_bias", "e_score_correction.bias") + if "shared_experts" in name: + return [(self.map_tensor_name(name), data_torch)] + return super().modify_tensors(data_torch, name, bid) + + @ModelBase.register("PLMForCausalLM") class PLMModel(TextModel): model_arch = gguf.MODEL_ARCH.PLM diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 3ee2b2064e1b4..8de2f7a531967 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -343,6 +343,7 @@ class MODEL_ARCH(IntEnum): WAVTOKENIZER_DEC = auto() PLM = auto() BAILINGMOE = auto() + DOTS1 = auto() class VISION_PROJECTOR_TYPE(IntEnum): @@ -623,6 +624,7 @@ class MODEL_TENSOR(IntEnum): MODEL_ARCH.WAVTOKENIZER_DEC: "wavtokenizer-dec", MODEL_ARCH.PLM: "plm", MODEL_ARCH.BAILINGMOE: "bailingmoe", + MODEL_ARCH.DOTS1: "dots1" } VISION_PROJECTOR_TYPE_NAMES: dict[VISION_PROJECTOR_TYPE, str] = { @@ -2044,6 +2046,30 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.FFN_DOWN_SHEXP, MODEL_TENSOR.FFN_UP_SHEXP, ], + MODEL_ARCH.DOTS1: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.OUTPUT_NORM, + MODEL_TENSOR.OUTPUT, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.ATTN_Q, + MODEL_TENSOR.ATTN_Q_NORM, + MODEL_TENSOR.ATTN_K, + MODEL_TENSOR.ATTN_K_NORM, + MODEL_TENSOR.ATTN_V, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.FFN_EXP_PROBS_B, + MODEL_TENSOR.FFN_NORM, + MODEL_TENSOR.FFN_GATE, + MODEL_TENSOR.FFN_GATE_EXP, + MODEL_TENSOR.FFN_GATE_INP, + MODEL_TENSOR.FFN_GATE_SHEXP, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_DOWN_EXP, + MODEL_TENSOR.FFN_DOWN_SHEXP, + MODEL_TENSOR.FFN_UP, + MODEL_TENSOR.FFN_UP_EXP, + MODEL_TENSOR.FFN_UP_SHEXP, + ], # TODO } diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 439fc1afeeb0c..5e3f01754bf07 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -305,7 +305,7 @@ class TensorNameMap: ), MODEL_TENSOR.FFN_EXP_PROBS_B: ( - "model.layers.{bid}.mlp.gate.e_score_correction", # deepseek-v3 + "model.layers.{bid}.mlp.gate.e_score_correction", # deepseek-v3 dots1 ), # Feed-forward up diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index 43fa60a8070b7..f8f76eedd4fa6 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -72,6 +72,7 @@ static const std::map LLM_ARCH_NAMES = { { LLM_ARCH_WAVTOKENIZER_DEC, "wavtokenizer-dec" }, { LLM_ARCH_PLM, "plm" }, { LLM_ARCH_BAILINGMOE, "bailingmoe" }, + { LLM_ARCH_DOTS1, "dots1" }, { LLM_ARCH_UNKNOWN, "(unknown)" }, }; @@ -1555,6 +1556,34 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_FFN_UP_SHEXP, "blk.%d.ffn_up_shexp" }, }, }, + { + LLM_ARCH_DOTS1, + { + { 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_Q_NORM, "blk.%d.attn_q_norm" }, + { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, + { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm" }, + { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, + { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, + { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, + { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, + { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, + { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, + { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" }, + { LLM_TENSOR_FFN_GATE_EXPS, "blk.%d.ffn_gate_exps" }, + { LLM_TENSOR_FFN_DOWN_EXPS, "blk.%d.ffn_down_exps" }, + { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, + { LLM_TENSOR_FFN_GATE_INP_SHEXP, "blk.%d.ffn_gate_inp_shexp" }, + { LLM_TENSOR_FFN_GATE_SHEXP, "blk.%d.ffn_gate_shexp" }, + { LLM_TENSOR_FFN_DOWN_SHEXP, "blk.%d.ffn_down_shexp" }, + { LLM_TENSOR_FFN_UP_SHEXP, "blk.%d.ffn_up_shexp" }, + { LLM_TENSOR_FFN_EXP_PROBS_B, "blk.%d.exp_probs_b" }, + } + }, { LLM_ARCH_UNKNOWN, { diff --git a/src/llama-arch.h b/src/llama-arch.h index f3825528aefdb..18f6d6b94f137 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -76,6 +76,7 @@ enum llm_arch { LLM_ARCH_WAVTOKENIZER_DEC, LLM_ARCH_PLM, LLM_ARCH_BAILINGMOE, + LLM_ARCH_DOTS1, LLM_ARCH_UNKNOWN, }; diff --git a/src/llama-chat.cpp b/src/llama-chat.cpp index d12743e6b9a0c..bc4fa05a74ef4 100644 --- a/src/llama-chat.cpp +++ b/src/llama-chat.cpp @@ -183,6 +183,8 @@ llm_chat_template llm_chat_detect_template(const std::string & tmpl) { return LLM_CHAT_TEMPLATE_BAILING; } else if (tmpl_contains("<|header_start|>") && tmpl_contains("<|header_end|>")) { return LLM_CHAT_TEMPLATE_LLAMA4; + } else if (tmpl_contains("<|endofuserprompt|>")) { + return LLM_CHAT_TEMPLATE_DOTS1; } return LLM_CHAT_TEMPLATE_UNKNOWN; } @@ -643,6 +645,21 @@ int32_t llm_chat_apply_template( if (add_ass) { ss << "Assistant:"; } + } else if (tmpl == LLM_CHAT_TEMPLATE_DOTS1) { + // dots.llm1.inst (DOTS1) + for (auto message : chat) { + std::string role(message->role); + if (role == "system") { + ss << "<|system|>" << message->content << "<|endofsystem|>"; + } else if (role == "user") { + ss << "<|userprompt|>" << message->content << "<|endofuserprompt|>"; + } else { + ss << "<|response|>" << message->content << "<|endofresponse|>"; + } + } + if (add_ass) { + ss << "<|response|>"; + } } else { // template not supported return -1; diff --git a/src/llama-chat.h b/src/llama-chat.h index db24ade21e2ad..38800010ae48b 100644 --- a/src/llama-chat.h +++ b/src/llama-chat.h @@ -43,6 +43,7 @@ enum llm_chat_template { LLM_CHAT_TEMPLATE_BAILING, LLM_CHAT_TEMPLATE_LLAMA4, LLM_CHAT_TEMPLATE_SMOLVLM, + LLM_CHAT_TEMPLATE_DOTS1, LLM_CHAT_TEMPLATE_UNKNOWN, }; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index c64bf9de939f4..fdd5fefd6e778 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -80,6 +80,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_142B: return "142B"; case LLM_TYPE_236B: return "236B"; case LLM_TYPE_290B: return "290B"; case LLM_TYPE_314B: return "314B"; @@ -1444,6 +1445,20 @@ void llama_model::load_hparams(llama_model_loader & ml) { default: type = LLM_TYPE_UNKNOWN; } } break; + case LLM_ARCH_DOTS1: + { + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); + ml.get_key(LLM_KV_LEADING_DENSE_BLOCK_COUNT, hparams.n_layer_dense_lead); + ml.get_key(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp); + ml.get_key(LLM_KV_EXPERT_SHARED_COUNT, hparams.n_expert_shared); + ml.get_key(LLM_KV_EXPERT_WEIGHTS_SCALE, hparams.expert_weights_scale); + ml.get_key(LLM_KV_EXPERT_WEIGHTS_NORM, hparams.expert_weights_norm, false); + ml.get_key(LLM_KV_EXPERT_GATING_FUNC, hparams.expert_gating_func, false); + switch (hparams.n_layer) { + case 62: type = LLM_TYPE_142B; break; + default: type = LLM_TYPE_UNKNOWN; + } + } break; default: throw std::runtime_error("unsupported model architecture"); } @@ -4123,6 +4138,58 @@ bool llama_model::load_tensors(llama_model_loader & ml) { layer.ffn_up_shexp = create_tensor(tn(LLM_TENSOR_FFN_UP_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0); } } break; + case LLM_ARCH_DOTS1: + { + const int64_t n_ff_exp = hparams.n_ff_exp; + const int64_t n_expert_shared = hparams.n_expert_shared; + + tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); + + 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}, 0); + + for (int i = 0; i < n_layer; ++i) { + auto & layer = layers[i]; + + layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0); + + layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0); + layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_head_k * n_head}, 0); + layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_head_k * n_head}, 0); + layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0); + + layer.attn_k_norm = create_tensor(tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd_head_k}, 0); + layer.attn_q_norm = create_tensor(tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd_head_k}, 0); + + layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0); + + if (i < (int) hparams.n_layer_dense_lead) { + layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "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); + } else { + layer.ffn_gate_inp = create_tensor(tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}, 0); + layer.ffn_exp_probs_b = create_tensor(tn(LLM_TENSOR_FFN_EXP_PROBS_B, "bias", i), {n_expert}, TENSOR_NOT_REQUIRED); + + if (n_expert == 0) { + throw std::runtime_error("n_expert must be > 0"); + } + if (n_expert_used == 0) { + throw std::runtime_error("n_expert_used must be > 0"); + } + + // MoE branch + layer.ffn_gate_exps = create_tensor(tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0); + layer.ffn_down_exps = create_tensor(tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff_exp, n_embd, n_expert}, 0); + layer.ffn_up_exps = create_tensor(tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}, 0); + + // Shared expert branch + layer.ffn_gate_shexp = create_tensor(tn(LLM_TENSOR_FFN_GATE_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0); + layer.ffn_down_shexp = create_tensor(tn(LLM_TENSOR_FFN_DOWN_SHEXP, "weight", i), { n_ff_exp * n_expert_shared, n_embd}, 0); + layer.ffn_up_shexp = create_tensor(tn(LLM_TENSOR_FFN_UP_SHEXP, "weight", i), {n_embd, n_ff_exp * n_expert_shared}, 0); + } + } + } break; default: throw std::runtime_error("unknown architecture"); } @@ -13194,6 +13261,156 @@ struct llm_build_bailingmoe : public llm_graph_context { } }; +struct llm_build_dots1 : public llm_graph_context { + llm_build_dots1(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : 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_unified(); + + 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); + + ggml_tensor * Kcur = build_lora_mm(model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); + + ggml_tensor * Vcur = build_lora_mm(model.layers[il].wv, cur); + 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 = build_norm(Qcur, model.layers[il].attn_q_norm, NULL, LLM_NORM_RMS, il); + cb(Qcur, "Qcur_normed", il); + + 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 = build_norm(Kcur, model.layers[il].attn_k_norm, NULL, LLM_NORM_RMS, il); + cb(Kcur, "Kcur_normed", il); + + 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, gf, + model.layers[il].wo, model.layers[il].bo, + Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + } + + if (il == n_layer - 1) { + // skip computing output for unused tokens + ggml_tensor * inp_out_ids = build_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); + + // MoE branch + cur = build_norm(ffn_inp, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, il); + cb(cur, "ffn_norm", il); + + if ((uint32_t) il < hparams.n_layer_dense_lead) { + 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); + } else { + ggml_tensor * moe_out = + build_moe_ffn(cur, + model.layers[il].ffn_gate_inp, + model.layers[il].ffn_up_exps, + model.layers[il].ffn_gate_exps, + model.layers[il].ffn_down_exps, + model.layers[il].ffn_exp_probs_b, + n_expert, n_expert_used, + LLM_FFN_SILU, hparams.expert_weights_norm, + true, hparams.expert_weights_scale, + (llama_expert_gating_func_type) hparams.expert_gating_func, + il); + cb(moe_out, "ffn_moe_out", il); + + { + ggml_tensor * ffn_shexp = build_ffn(cur, + model.layers[il].ffn_up_shexp, NULL, NULL, + model.layers[il].ffn_gate_shexp, NULL, NULL, + model.layers[il].ffn_down_shexp, NULL, NULL, + NULL, + LLM_FFN_SILU, LLM_FFN_PAR, il); + cb(ffn_shexp, "ffn_shexp", il); + + cur = ggml_add(ctx0, moe_out, ffn_shexp); + cb(cur, "ffn_out", il); + } + } + + cur = ggml_add(ctx0, cur, ffn_inp); + + 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); + } +}; + llama_memory_i * llama_model::create_memory(const llama_memory_params & params, llama_cparams & cparams) const { llama_memory_i * res; @@ -13532,6 +13749,10 @@ llm_graph_result_ptr llama_model::build_graph( { llm = std::make_unique(*this, params, gf); } break; + case LLM_ARCH_DOTS1: + { + llm = std::make_unique(*this, params, gf); + } break; default: GGML_ABORT("fatal error"); } @@ -13714,6 +13935,7 @@ llama_rope_type llama_model_rope_type(const llama_model * model) { case LLM_ARCH_NEMOTRON: case LLM_ARCH_EXAONE: case LLM_ARCH_MINICPM3: + case LLM_ARCH_DOTS1: return LLAMA_ROPE_TYPE_NEOX; case LLM_ARCH_QWEN2VL: diff --git a/src/llama-model.h b/src/llama-model.h index 18b714620bbcf..06e6c687943cc 100644 --- a/src/llama-model.h +++ b/src/llama-model.h @@ -73,6 +73,7 @@ enum llm_type { LLM_TYPE_40B, LLM_TYPE_65B, LLM_TYPE_70B, + LLM_TYPE_142B, LLM_TYPE_236B, LLM_TYPE_290B, LLM_TYPE_314B, From 5fce5f948df8f189a5401a8ecaa9753106e75abb Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 15 Jun 2025 10:52:11 +0300 Subject: [PATCH 48/95] kv-cache : fix use-after-move of defrag info (#14189) ggml-ci --- src/llama-kv-cache-unified.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index 03107057079ca..b17936abdb4c6 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -1739,7 +1739,7 @@ llama_kv_cache_unified_state::llama_kv_cache_unified_state( llama_context * lctx, bool do_shift, defrag_info dinfo) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv), lctx(lctx), do_shift(do_shift), dinfo(std::move(dinfo)) { - if (!do_shift && dinfo.empty()) { + if (!do_shift && this->dinfo.empty()) { status = LLAMA_MEMORY_STATUS_NO_UPDATE; } } From 2c2caa444341d99c87ff153f142c2d4762a776a2 Mon Sep 17 00:00:00 2001 From: uvos Date: Sun, 15 Jun 2025 15:45:27 +0200 Subject: [PATCH 49/95] HIP: Replace usage of depricated preprocessor macro __AMDGCN_WAVEFRONT_SIZE__ (#14183) --- ggml/src/ggml-cuda/common.cuh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index a82ec26ee1a2d..563a7828bdd14 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -262,11 +262,11 @@ static bool cp_async_available(const int cc) { } static constexpr __device__ int ggml_cuda_get_physical_warp_size() { -#if defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__) - return __AMDGCN_WAVEFRONT_SIZE; +#if defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__) && (defined(__GFX9__) || defined(__GFX8__)) + return 64; #else return 32; -#endif // defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__) +#endif // defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__) && (defined(__GFX9__) || defined(__GFX8__)) } [[noreturn]] From e54b394082de242be4ee2e692b11fcc8d4eba371 Mon Sep 17 00:00:00 2001 From: uvos Date: Sun, 15 Jun 2025 17:30:13 +0200 Subject: [PATCH 50/95] CUDA/HIP: fix ssm_scan on devices where warp size is not 32 (#14196) --- ggml/src/ggml-cuda/ssm-scan.cu | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-cuda/ssm-scan.cu b/ggml/src/ggml-cuda/ssm-scan.cu index 37ee208c09d46..2d34b836054f8 100644 --- a/ggml/src/ggml-cuda/ssm-scan.cu +++ b/ggml/src/ggml-cuda/ssm-scan.cu @@ -10,6 +10,8 @@ __global__ void __launch_bounds__(splitD, 2) float * __restrict__ dst, const int64_t L) { GGML_UNUSED(src1_nb0); GGML_UNUSED(src2_nb0); + + constexpr int warp_size = ggml_cuda_get_physical_warp_size(); const int bidx = blockIdx.x; // split along B const int bidy = blockIdx.y; // split along D const int tid = threadIdx.x; @@ -44,16 +46,16 @@ __global__ void __launch_bounds__(splitD, 2) if (N == 16) { #pragma unroll for (size_t i = 0; i < splitD / 4; i += 2) { - float value = A_block[(wid * warpSize + i) * stride_A + wtid]; + float value = A_block[(wid * warp_size + i) * stride_A + wtid]; // todo: bank conflict // I am always confused with how to use the swizzling method to solve // bank conflit. Hoping somebody can tell me. - smem_A[(wid * warpSize + i) * stride_sA + wtid + ((wtid / 16) > 0 ? 1 : 0)] = value; + smem_A[(wid * warp_size + i) * stride_sA + wtid + ((wtid / 16) > 0 ? 1 : 0)] = value; } #pragma unroll for (size_t i = 0; i < splitD / 4; i += 2) { - float value = s0_block[(wid * warpSize + i) * stride_s0 + wtid]; - smem_s0[(wid * warpSize + i) * stride_ss0 + wtid + ((wtid / 16) > 0 ? 1 : 0)] = value; + float value = s0_block[(wid * warp_size + i) * stride_s0 + wtid]; + smem_s0[(wid * warp_size + i) * stride_ss0 + wtid + ((wtid / 16) > 0 ? 1 : 0)] = value; } } From 30e5b01de2a0bcddc7c063c8ef0802703a958417 Mon Sep 17 00:00:00 2001 From: Ed Addario <29247825+EAddario@users.noreply.github.com> Date: Sun, 15 Jun 2025 17:53:45 +0100 Subject: [PATCH 51/95] quantize : change int to unsigned int for KV overrides (#14197) --- src/llama-quant.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/llama-quant.cpp b/src/llama-quant.cpp index 159b1307a4c5d..8cf45732fd6d4 100644 --- a/src/llama-quant.cpp +++ b/src/llama-quant.cpp @@ -585,7 +585,8 @@ static void llama_model_quantize_impl(const std::string & fname_inp, const std:: if (o.tag == LLAMA_KV_OVERRIDE_TYPE_FLOAT) { gguf_set_val_f32(ctx_out.get(), o.key, o.val_f64); } else if (o.tag == LLAMA_KV_OVERRIDE_TYPE_INT) { - gguf_set_val_i32(ctx_out.get(), o.key, o.val_i64); + // Setting type to UINT32. See https://github.com/ggml-org/llama.cpp/pull/14182 for context + gguf_set_val_u32(ctx_out.get(), o.key, (uint32_t)abs(o.val_i64)); } else if (o.tag == LLAMA_KV_OVERRIDE_TYPE_BOOL) { gguf_set_val_bool(ctx_out.get(), o.key, o.val_bool); } else if (o.tag == LLAMA_KV_OVERRIDE_TYPE_STR) { From cd355eda7df1898d25d433b4bdaa4b4b479e0bad Mon Sep 17 00:00:00 2001 From: Eric Curtin Date: Sun, 15 Jun 2025 23:36:22 +0200 Subject: [PATCH 52/95] server : When listening on a unix domain socket don't print http:// and port (#14180) Instead show something like this: main: server is listening on file.sock - starting the main loop Signed-off-by: Eric Curtin --- tools/server/server.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index b439d8b19dda3..626c58bd304ff 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -4878,7 +4878,9 @@ int main(int argc, char ** argv) { }; bool was_bound = false; + bool is_sock = false; if (string_ends_with(std::string(params.hostname), ".sock")) { + is_sock = true; LOG_INF("%s: setting address family to AF_UNIX\n", __func__); svr->set_address_family(AF_UNIX); // bind_to_port requires a second arg, any value other than 0 should @@ -4956,7 +4958,9 @@ int main(int argc, char ** argv) { SetConsoleCtrlHandler(reinterpret_cast(console_ctrl_handler), true); #endif - LOG_INF("%s: server is listening on http://%s:%d - starting the main loop\n", __func__, params.hostname.c_str(), params.port); + LOG_INF("%s: server is listening on %s - starting the main loop\n", __func__, + is_sock ? string_format("unix://%s", params.hostname.c_str()).c_str() : + string_format("http://%s:%d", params.hostname.c_str(), params.port).c_str()); // this call blocks the main thread until queue_tasks.terminate() is called ctx_server.queue_tasks.start_loop(); From d7da8dc83a03b30e1ec10317080082ea76840c38 Mon Sep 17 00:00:00 2001 From: Bartowski <3266127+bartowski1182@users.noreply.github.com> Date: Mon, 16 Jun 2025 00:04:06 +0100 Subject: [PATCH 53/95] model : Add support for Arcee AI's upcoming AFM model (#14185) * Add Arcee AFM support * Add draft update code * Fix linter and update URL, may still not be final * Update src/llama-model.cpp Co-authored-by: Xuan-Son Nguyen * Remote accidental blank line --------- Co-authored-by: Xuan-Son Nguyen --- convert_hf_to_gguf.py | 14 +++ convert_hf_to_gguf_update.py | 1 + gguf-py/gguf/constants.py | 19 +++- src/llama-arch.cpp | 19 ++++ src/llama-arch.h | 1 + src/llama-model.cpp | 181 +++++++++++++++++++++++++++++++++++ src/llama-vocab.cpp | 1 + 7 files changed, 235 insertions(+), 1 deletion(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index cff72c85fab69..2232a7d82349e 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -2020,6 +2020,20 @@ def prepare_tensors(self): raise ValueError(f"Unprocessed experts: {experts}") +@ModelBase.register("ArceeForCausalLM") +class ArceeModel(LlamaModel): + model_arch = gguf.MODEL_ARCH.ARCEE + + def set_gguf_parameters(self): + super().set_gguf_parameters() + self._try_set_pooling_type() + rope_scaling = self.hparams.get("rope_scaling") or {} + if rope_scaling.get("rope_type", rope_scaling.get("type")) == "yarn" and "factor" in rope_scaling: + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.YARN) + self.gguf_writer.add_rope_scaling_factor(rope_scaling["factor"]) + self.gguf_writer.add_rope_scaling_orig_ctx_len(rope_scaling["original_max_position_embeddings"]) + + @ModelBase.register( "LlavaForConditionalGeneration", # pixtral "Mistral3ForConditionalGeneration", # mistral small 3.1 diff --git a/convert_hf_to_gguf_update.py b/convert_hf_to_gguf_update.py index 2f733f0973686..fae4f72605f46 100755 --- a/convert_hf_to_gguf_update.py +++ b/convert_hf_to_gguf_update.py @@ -128,6 +128,7 @@ class TOKENIZER_TYPE(IntEnum): {"name": "llama4", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", }, {"name": "pixtral", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/mistral-community/pixtral-12b", }, {"name": "seed-coder", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/ByteDance-Seed/Seed-Coder-8B-Base", }, + {"name": "arcee", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/arcee-ai/AFM-4.5B", }, # TODO confirm final URL ] # some models are known to be broken upstream, so we will skip them as exceptions diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 8de2f7a531967..9b2143c7c2eaa 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -344,6 +344,7 @@ class MODEL_ARCH(IntEnum): PLM = auto() BAILINGMOE = auto() DOTS1 = auto() + ARCEE = auto() class VISION_PROJECTOR_TYPE(IntEnum): @@ -624,7 +625,8 @@ class MODEL_TENSOR(IntEnum): MODEL_ARCH.WAVTOKENIZER_DEC: "wavtokenizer-dec", MODEL_ARCH.PLM: "plm", MODEL_ARCH.BAILINGMOE: "bailingmoe", - MODEL_ARCH.DOTS1: "dots1" + MODEL_ARCH.DOTS1: "dots1", + MODEL_ARCH.ARCEE: "arcee", } VISION_PROJECTOR_TYPE_NAMES: dict[VISION_PROJECTOR_TYPE, str] = { @@ -2070,6 +2072,21 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.FFN_UP_EXP, MODEL_TENSOR.FFN_UP_SHEXP, ], + MODEL_ARCH.ARCEE: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.OUTPUT_NORM, + MODEL_TENSOR.OUTPUT, + MODEL_TENSOR.ROPE_FREQS, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.ATTN_Q, + MODEL_TENSOR.ATTN_K, + MODEL_TENSOR.ATTN_V, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.ATTN_ROT_EMBD, + MODEL_TENSOR.FFN_NORM, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + ], # TODO } diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index f8f76eedd4fa6..a3e7c861ca02f 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -73,6 +73,7 @@ static const std::map LLM_ARCH_NAMES = { { LLM_ARCH_PLM, "plm" }, { LLM_ARCH_BAILINGMOE, "bailingmoe" }, { LLM_ARCH_DOTS1, "dots1" }, + { LLM_ARCH_ARCEE, "arcee" }, { LLM_ARCH_UNKNOWN, "(unknown)" }, }; @@ -244,6 +245,24 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, }, }, + { + LLM_ARCH_ARCEE, + { + { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, + { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, + { LLM_TENSOR_OUTPUT, "output" }, + { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, + { 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_ROT_EMBD, "blk.%d.attn_rot_embd" }, + { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, + { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, + { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, + }, + }, { LLM_ARCH_LLAMA4, { diff --git a/src/llama-arch.h b/src/llama-arch.h index 18f6d6b94f137..168fdcb401cfd 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -77,6 +77,7 @@ enum llm_arch { LLM_ARCH_PLM, LLM_ARCH_BAILINGMOE, LLM_ARCH_DOTS1, + LLM_ARCH_ARCEE, LLM_ARCH_UNKNOWN, }; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index fdd5fefd6e778..dcc8b0be72563 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -599,6 +599,16 @@ void llama_model::load_hparams(llama_model_loader & ml) { hparams.use_kq_norm = false; } } break; + case LLM_ARCH_ARCEE: + { + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); + + // Arcee uses the same structure as Llama + switch (hparams.n_layer) { + case 36: type = LLM_TYPE_4B; break; + default: type = LLM_TYPE_UNKNOWN; + } + } break; case LLM_ARCH_DECI: { ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); @@ -4190,6 +4200,37 @@ bool llama_model::load_tensors(llama_model_loader & ml) { } } } break; + case LLM_ARCH_ARCEE: + { + 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.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0); + + layer.wq = create_tensor(tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * n_head}, 0); + layer.wk = create_tensor(tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}, 0); + layer.wv = create_tensor(tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}, 0); + layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * n_head, n_embd}, 0); + + layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0); + + layer.rope_freqs = create_tensor(tn(LLM_TENSOR_ROPE_FREQS, "weight", i), {n_rot/2}, TENSOR_NOT_REQUIRED | (i != 0 ? TENSOR_DUPLICATED : 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); + } + } break; default: throw std::runtime_error("unknown architecture"); } @@ -13411,6 +13452,141 @@ struct llm_build_dots1 : public llm_graph_context { } }; +struct llm_build_arcee : public llm_graph_context { + llm_build_arcee(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : 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_unified(); + + const float kq_scale = hparams.f_attention_scale == 0.0f ? 1.0f/sqrtf(float(n_embd_head)) : hparams.f_attention_scale; + + 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 + { + // rope freq factors for llama3; may return nullptr for llama2 and other models + ggml_tensor * rope_factors = model.get_rope_factors(cparams, il); + + // 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, rope_factors, + 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, rope_factors, + 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, gf, + model.layers[il].wo, model.layers[il].bo, + Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); + cb(cur, "attn_out", il); + } + + if (il == n_layer - 1) { + // skip computing output for unused tokens + ggml_tensor * inp_out_ids = build_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 + // ARCEE uses relu^2 instead of silu + cur = build_norm(ffn_inp, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, il); + cb(cur, "ffn_norm", il); + + cur = build_ffn(cur, + model.layers[il].ffn_up, NULL, NULL, + NULL, NULL, NULL, + model.layers[il].ffn_down, NULL, NULL, + NULL, + LLM_FFN_RELU_SQR, LLM_FFN_SEQ, 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); + } +}; + llama_memory_i * llama_model::create_memory(const llama_memory_params & params, llama_cparams & cparams) const { llama_memory_i * res; @@ -13753,6 +13929,10 @@ llm_graph_result_ptr llama_model::build_graph( { llm = std::make_unique(*this, params, gf); } break; + case LLM_ARCH_ARCEE: + { + llm = std::make_unique(*this, params, gf); + } break; default: GGML_ABORT("fatal error"); } @@ -13902,6 +14082,7 @@ llama_rope_type llama_model_rope_type(const llama_model * model) { case LLM_ARCH_GRANITE_MOE: case LLM_ARCH_CHAMELEON: case LLM_ARCH_BAILINGMOE: + case LLM_ARCH_ARCEE: return LLAMA_ROPE_TYPE_NORM; // the pairs of head values are offset by n_rot/2 diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index 905d7c4281d9c..dd2251ef3cbef 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -1987,6 +1987,7 @@ void llama_vocab::impl::load(llama_model_loader & ml, const LLM_KV & kv) { || t.first == "<|eom_id|>" || t.first == "" || t.first == "_" + || t.first == "<|end_of_text|>" ) { special_eog_ids.insert(t.second); if ((id_to_token[t.second].attr & LLAMA_TOKEN_ATTR_CONTROL) == 0) { From 3555b3004ba7687be3d734acade52a3345758aa4 Mon Sep 17 00:00:00 2001 From: xctan Date: Mon, 16 Jun 2025 13:54:15 +0800 Subject: [PATCH 54/95] ggml-cpu : rework weak alias on apple targets (#14146) * ggml-cpu : rework weak alias on apple targets * fix powerpc detection * fix ppc detection * fix powerpc detection on darwin --- ggml/cmake/common.cmake | 3 +- ggml/src/ggml-cpu/apple-fallback.h | 88 ++++++++++++++++++++++++++++++ ggml/src/ggml-cpu/ggml-cpu-impl.h | 2 +- ggml/src/ggml-cpu/quants.c | 4 ++ ggml/src/ggml-cpu/quants.h | 27 --------- ggml/src/ggml-cpu/repack.cpp | 4 ++ ggml/src/ggml-cpu/repack.h | 18 +----- 7 files changed, 99 insertions(+), 47 deletions(-) create mode 100644 ggml/src/ggml-cpu/apple-fallback.h diff --git a/ggml/cmake/common.cmake b/ggml/cmake/common.cmake index bb1ec9b37a7f0..cb66388332040 100644 --- a/ggml/cmake/common.cmake +++ b/ggml/cmake/common.cmake @@ -36,8 +36,7 @@ function(ggml_get_system_arch) (NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64|amd64)$")) set(GGML_SYSTEM_ARCH "x86" PARENT_SCOPE) - elseif ("${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "ppc64le " OR - "${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "powerpc ") + elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc|power") set(GGML_SYSTEM_ARCH "PowerPC" PARENT_SCOPE) elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64") set(GGML_SYSTEM_ARCH "loongarch64" PARENT_SCOPE) diff --git a/ggml/src/ggml-cpu/apple-fallback.h b/ggml/src/ggml-cpu/apple-fallback.h new file mode 100644 index 0000000000000..f477505d787a7 --- /dev/null +++ b/ggml/src/ggml-cpu/apple-fallback.h @@ -0,0 +1,88 @@ +#pragma once + +// Solve alias issue for Apple targets (currently PowerPC, x86, and ARM64). +// Mach-O has a weak alias equivalent but no practical compiler support can +// be found, so we need to do it manually. +// ref: https://stackoverflow.com/questions/42757744 +// +// This file is a complement to native implementations in the `arch` folder. +// A kernel in quants.c or repack.cpp is either: +// - implemented in the `arch` folder, or +// - defined in this file to remove the `_generic` suffix + +#if defined(GGML_CPU_GENERIC) +// quants.c +#define quantize_row_q8_0_generic quantize_row_q8_0 +#define quantize_row_q8_1_generic quantize_row_q8_1 +#define quantize_row_q8_K_generic quantize_row_q8_K +#define ggml_vec_dot_q4_0_q8_0_generic ggml_vec_dot_q4_0_q8_0 +#define ggml_vec_dot_q4_1_q8_1_generic ggml_vec_dot_q4_1_q8_1 +#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_q8_0_q8_0_generic ggml_vec_dot_q8_0_q8_0 +#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 +#define ggml_vec_dot_q3_K_q8_K_generic ggml_vec_dot_q3_K_q8_K +#define ggml_vec_dot_q4_K_q8_K_generic ggml_vec_dot_q4_K_q8_K +#define ggml_vec_dot_q5_K_q8_K_generic ggml_vec_dot_q5_K_q8_K +#define ggml_vec_dot_q6_K_q8_K_generic ggml_vec_dot_q6_K_q8_K +#define ggml_vec_dot_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K +#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K +#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K +#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K +#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K +#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K +#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K +#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0 +#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__aarch64__) || defined(__arm__) +// repack.cpp +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#elif defined(__x86_64__) || defined(__i386__) +// repack.cpp +#define ggml_quantize_mat_q8_0_4x4_generic ggml_quantize_mat_q8_0_4x4 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__POWERPC__) +// ref: https://github.com/ggml-org/llama.cpp/pull/14146#issuecomment-2972561679 +// quants.c +#define quantize_row_q8_K_generic quantize_row_q8_K +#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 +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#endif diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index 69415daa82025..9662e4d7b5a6a 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -509,7 +509,7 @@ void ggml_barrier(struct ggml_threadpool * tp); #define GGML_DO_PRAGMA_(x) _Pragma (#x) #define GGML_DO_PRAGMA(x) GGML_DO_PRAGMA_(x) -#if defined(GGML_CPU_GENERIC) || defined(__HIPCC__) +#if defined(GGML_CPU_GENERIC) || defined(__HIPCC__) || defined(__APPLE__) // Note for Apple targets: // - clang: aliases are not supported on darwin // - all native kernels need to be implemented in both x86 and arm files diff --git a/ggml/src/ggml-cpu/quants.c b/ggml/src/ggml-cpu/quants.c index 1ca9c50e724a3..516c5b2ced06d 100644 --- a/ggml/src/ggml-cpu/quants.c +++ b/ggml/src/ggml-cpu/quants.c @@ -5,6 +5,10 @@ #include "ggml-quants.h" #include "quants.h" +#if defined(__APPLE__) +#include "apple-fallback.h" +#endif + #include #include #include diff --git a/ggml/src/ggml-cpu/quants.h b/ggml/src/ggml-cpu/quants.h index d729e07d633f5..dc4342c87f592 100644 --- a/ggml/src/ggml-cpu/quants.h +++ b/ggml/src/ggml-cpu/quants.h @@ -84,33 +84,6 @@ void ggml_vec_dot_iq1_m_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, void ggml_vec_dot_iq4_nl_q8_0_generic(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); void ggml_vec_dot_iq4_xs_q8_K_generic(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); -#if defined(GGML_CPU_GENERIC) -#define quantize_row_q8_0_generic quantize_row_q8_0 -#define quantize_row_q8_1_generic quantize_row_q8_1 -#define quantize_row_q8_K_generic quantize_row_q8_K -#define ggml_vec_dot_q4_0_q8_0_generic ggml_vec_dot_q4_0_q8_0 -#define ggml_vec_dot_q4_1_q8_1_generic ggml_vec_dot_q4_1_q8_1 -#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_q8_0_q8_0_generic ggml_vec_dot_q8_0_q8_0 -#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 -#define ggml_vec_dot_q3_K_q8_K_generic ggml_vec_dot_q3_K_q8_K -#define ggml_vec_dot_q4_K_q8_K_generic ggml_vec_dot_q4_K_q8_K -#define ggml_vec_dot_q5_K_q8_K_generic ggml_vec_dot_q5_K_q8_K -#define ggml_vec_dot_q6_K_q8_K_generic ggml_vec_dot_q6_K_q8_K -#define ggml_vec_dot_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K -#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K -#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K -#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K -#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K -#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K -#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K -#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0 -#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K -#endif - #ifdef __cplusplus } #endif diff --git a/ggml/src/ggml-cpu/repack.cpp b/ggml/src/ggml-cpu/repack.cpp index 628142d5f630a..604ccee907843 100644 --- a/ggml/src/ggml-cpu/repack.cpp +++ b/ggml/src/ggml-cpu/repack.cpp @@ -8,6 +8,10 @@ #include "ggml-cpu-impl.h" #include "traits.h" +#if defined(__APPLE__) +#include "apple-fallback.h" +#endif + #include #include #include diff --git a/ggml/src/ggml-cpu/repack.h b/ggml/src/ggml-cpu/repack.h index 8ee6e92ea96b8..b13d2d0c73495 100644 --- a/ggml/src/ggml-cpu/repack.h +++ b/ggml/src/ggml-cpu/repack.h @@ -67,7 +67,7 @@ extern "C" { // Workaround for clang: // clang++ complains: ``error: call to 'ggml_gemm_q4_0_4x4_q8_0' is ambiguous'' // repro: https://godbolt.org/z/oKdeWKonM (ICE), https://godbolt.org/z/1szq6P36v (ambiguous call) -#if defined(GGML_CPU_CLANG_WORKAROUND) || !(defined(__GNUC__) && defined(__clang__)) || defined(__HIPCC__) +#if defined(GGML_CPU_CLANG_WORKAROUND) || defined(__APPLE__) || !(defined(__GNUC__) && defined(__clang__)) || defined(__HIPCC__) void ggml_quantize_mat_q8_0_4x4(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); void ggml_quantize_mat_q8_0_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); void ggml_quantize_mat_q8_K_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); @@ -98,22 +98,6 @@ void ggml_gemm_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, void ggml_gemm_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc); void ggml_gemm_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc); -#if defined(GGML_CPU_GENERIC) -#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 -#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 -#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 -#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 -#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 -#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K -#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 -#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 -#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 -#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 -#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K -#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 -#endif - #if defined(__cplusplus) } // extern "C" #endif From c89c2d1ab94b11845240b7d3313c87691ea18d88 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Mon, 16 Jun 2025 00:21:08 -0600 Subject: [PATCH 55/95] vulkan: mutex around vkQueueSubmit (#14127) This fixes the remaining crash in test-thread-safety on my system. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 32d6407441535..8d62303aabd7f 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -168,6 +168,11 @@ struct vk_command_pool { vk_queue *q; }; +// Prevent simultaneous submissions to the same queue. +// This could be per vk_queue if we stopped having two vk_queue structures +// sharing the same vk::Queue. +static std::mutex queue_mutex; + struct vk_queue { uint32_t queue_family_index; vk::Queue queue; @@ -1266,6 +1271,7 @@ static vk::CommandBuffer ggml_vk_create_cmd_buffer(vk_device& device, vk_command static void ggml_vk_submit(vk_context& ctx, vk::Fence fence) { if (ctx->seqs.empty()) { if (fence) { + std::lock_guard guard(queue_mutex); ctx->p->q->queue.submit({}, fence); } return; @@ -1335,6 +1341,7 @@ static void ggml_vk_submit(vk_context& ctx, vk::Fence fence) { } } + std::lock_guard guard(queue_mutex); ctx->p->q->queue.submit(submit_infos, fence); ctx->seqs.clear(); From 4ad243677bca6c97f14dbc187b2116b51fcb7ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90inh=20Tr=E1=BB=8Dng=20Huy?= <77562200+huydt84@users.noreply.github.com> Date: Mon, 16 Jun 2025 16:20:59 +0900 Subject: [PATCH 56/95] gguf-py : allow key override when adding value to GGUFWriter (#14194) Co-authored-by: dinhhuy --- gguf-py/gguf/gguf_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gguf-py/gguf/gguf_writer.py b/gguf-py/gguf/gguf_writer.py index adc673e38ff07..54ca0c33fd336 100644 --- a/gguf-py/gguf/gguf_writer.py +++ b/gguf-py/gguf/gguf_writer.py @@ -271,7 +271,7 @@ def write_ti_data_to_file(self) -> None: def add_key_value(self, key: str, val: Any, vtype: GGUFValueType, sub_type: GGUFValueType | None = None) -> None: if any(key in kv_data for kv_data in self.kv_data): - raise ValueError(f'Duplicated key name {key!r}') + logger.warning(f'Duplicated key name {key!r}, overwriting it with new value {val!r} of type {vtype.name}') self.kv_data[0][key] = GGUFValue(value=val, type=vtype, sub_type=sub_type) From 0bf49eb668bb95b50e41583e22aaf60ddade1fbe Mon Sep 17 00:00:00 2001 From: Bartowski <3266127+bartowski1182@users.noreply.github.com> Date: Mon, 16 Jun 2025 09:16:06 +0100 Subject: [PATCH 57/95] convert : remove arcee change in convert_hf_to_gguf_update.py (#14207) --- convert_hf_to_gguf_update.py | 1 - 1 file changed, 1 deletion(-) diff --git a/convert_hf_to_gguf_update.py b/convert_hf_to_gguf_update.py index fae4f72605f46..2f733f0973686 100755 --- a/convert_hf_to_gguf_update.py +++ b/convert_hf_to_gguf_update.py @@ -128,7 +128,6 @@ class TOKENIZER_TYPE(IntEnum): {"name": "llama4", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", }, {"name": "pixtral", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/mistral-community/pixtral-12b", }, {"name": "seed-coder", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/ByteDance-Seed/Seed-Coder-8B-Base", }, - {"name": "arcee", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/arcee-ai/AFM-4.5B", }, # TODO confirm final URL ] # some models are known to be broken upstream, so we will skip them as exceptions From 3ba0d843c6bd3faea5cf5e53dc7f3c82be20bffb Mon Sep 17 00:00:00 2001 From: Charles Xu Date: Mon, 16 Jun 2025 11:47:57 +0200 Subject: [PATCH 58/95] ggml: Add Android support for GGML_CPU_ALL_VARIANTS (#14206) --- ggml/src/CMakeLists.txt | 34 +++++++++----- ggml/src/ggml-cpu/CMakeLists.txt | 79 +++++++++++++++----------------- 2 files changed, 60 insertions(+), 53 deletions(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 726da5e048b18..17c9366f4a3cf 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -311,18 +311,28 @@ if (GGML_CPU_ALL_VARIANTS) # MSVC doesn't support AMX ggml_add_cpu_backend_variant(sapphirerapids SSE42 AVX F16C AVX2 BMI2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8) endif() - elseif(GGML_SYSTEM_ARCH STREQUAL "ARM" AND CMAKE_SYSTEM_NAME MATCHES "Linux") - # Many of these features are optional so we build versions with popular - # combinations and name the backends based on the version they were - # first released with - ggml_add_cpu_backend_variant(armv8.0_1) - ggml_add_cpu_backend_variant(armv8.2_1 DOTPROD) - ggml_add_cpu_backend_variant(armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC) - ggml_add_cpu_backend_variant(armv8.2_3 DOTPROD FP16_VECTOR_ARITHMETIC SVE) - ggml_add_cpu_backend_variant(armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) - ggml_add_cpu_backend_variant(armv8.6_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) - ggml_add_cpu_backend_variant(armv9.2_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME) - ggml_add_cpu_backend_variant(armv9.2_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME) + elseif(GGML_SYSTEM_ARCH STREQUAL "ARM") + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + # Many of these features are optional so we build versions with popular + # combinations and name the backends based on the version they were + # first released with + ggml_add_cpu_backend_variant(armv8.0_1) + ggml_add_cpu_backend_variant(armv8.2_1 DOTPROD) + ggml_add_cpu_backend_variant(armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC) + ggml_add_cpu_backend_variant(armv8.2_3 DOTPROD FP16_VECTOR_ARITHMETIC SVE) + ggml_add_cpu_backend_variant(armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) + ggml_add_cpu_backend_variant(armv8.6_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) + ggml_add_cpu_backend_variant(armv9.2_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME) + ggml_add_cpu_backend_variant(armv9.2_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME) + elseif (CMAKE_SYSTEM_NAME MATCHES "Android") + # Android-specific backends with SoC-compatible feature sets + ggml_add_cpu_backend_variant(android_armv8.0_1) + ggml_add_cpu_backend_variant(android_armv8.2_1 DOTPROD) + ggml_add_cpu_backend_variant(android_armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC) + ggml_add_cpu_backend_variant(android_armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC MATMUL_INT8) + else() + message(FATAL_ERROR "Unsupported ARM target OS: ${CMAKE_SYSTEM_NAME}") + endif() else() message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") endif() diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index e4c0fa8d0240c..3bd1b0507e2cb 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -158,48 +158,45 @@ function(ggml_add_cpu_backend_variant_impl tag_name) if (GGML_CPU_ARM_ARCH) list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH}) elseif(GGML_CPU_ALL_VARIANTS) - if (CMAKE_SYSTEM_NAME MATCHES "Linux") - # Begin with the lowest baseline - set(ARM_MCPU "armv8-a") - set(ARCH_TAGS "") - set(ARCH_DEFINITIONS "") - - # When a feature is selected, bump the MCPU to the first - # version that supported it - if (GGML_INTERNAL_DOTPROD) - set(ARM_MCPU "armv8.2-a") - set(ARCH_TAGS "${ARCH_TAGS}+dotprod") - list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD) - endif() - if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC) - set(ARM_MCPU "armv8.2-a") - set(ARCH_TAGS "${ARCH_TAGS}+fp16") - list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC) - endif() - if (GGML_INTERNAL_SVE) - set(ARM_MCPU "armv8.2-a") - set(ARCH_TAGS "${ARCH_TAGS}+sve") - list(APPEND ARCH_DEFINITIONS GGML_USE_SVE) - endif() - if (GGML_INTERNAL_MATMUL_INT8) - set(ARM_MCPU "armv8.6-a") - set(ARCH_TAGS "${ARCH_TAGS}+i8mm") - list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8) - endif() - if (GGML_INTERNAL_SVE2) - set(ARM_MCPU "armv8.6-a") - set(ARCH_TAGS "${ARCH_TAGS}+sve2") - list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2) - endif() - if (GGML_INTERNAL_SME) - set(ARM_MCPU "armv9.2-a") - set(ARCH_TAGS "${ARCH_TAGS}+sme") - list(APPEND ARCH_DEFINITIONS GGML_USE_SME) - endif() - - list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}") - ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) + # Begin with the lowest baseline + set(ARM_MCPU "armv8-a") + set(ARCH_TAGS "") + set(ARCH_DEFINITIONS "") + + # When a feature is selected, bump the MCPU to the first + # version that supported it + if (GGML_INTERNAL_DOTPROD) + set(ARM_MCPU "armv8.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+dotprod") + list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD) + endif() + if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC) + set(ARM_MCPU "armv8.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+fp16") + list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC) + endif() + if (GGML_INTERNAL_SVE) + set(ARM_MCPU "armv8.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+sve") + list(APPEND ARCH_DEFINITIONS GGML_USE_SVE) + endif() + if (GGML_INTERNAL_MATMUL_INT8) + set(ARM_MCPU "armv8.6-a") + set(ARCH_TAGS "${ARCH_TAGS}+i8mm") + list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8) + endif() + if (GGML_INTERNAL_SVE2) + set(ARM_MCPU "armv8.6-a") + set(ARCH_TAGS "${ARCH_TAGS}+sve2") + list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2) + endif() + if (GGML_INTERNAL_SME) + set(ARM_MCPU "armv9.2-a") + set(ARCH_TAGS "${ARCH_TAGS}+sme") + list(APPEND ARCH_DEFINITIONS GGML_USE_SME) endif() + list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}") + ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) endif() endif() From d3e64b9f490cee41b7b9aa275dae2f6568ae3054 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 16 Jun 2025 14:14:00 +0300 Subject: [PATCH 59/95] llama : rework embeddings logic (#14208) * llama : rework embeddings logic ggml-ci * cont : fix rerank ggml-ci * cont : engrish [no ci] * cont : fix rerank ggml-ci * server : support both embeddings and completions with single model ggml-ci * cont : avoid embeddings_org ggml-ci --- common/arg.cpp | 9 +-- common/common.cpp | 62 +++++++++--------- common/common.h | 1 - examples/gritlm/gritlm.cpp | 8 ++- include/llama.h | 12 ++-- src/llama-batch.cpp | 30 +++++++-- src/llama-batch.h | 3 +- src/llama-context.cpp | 26 ++++---- src/llama-kv-cache-recurrent.cpp | 8 +-- src/llama-kv-cache-recurrent.h | 2 +- src/llama-kv-cache-unified-iswa.cpp | 4 +- src/llama-kv-cache-unified-iswa.h | 2 +- src/llama-kv-cache-unified.cpp | 4 +- src/llama-kv-cache-unified.h | 2 +- src/llama-memory.h | 2 +- tools/server/server.cpp | 98 +++++++++++++++++++---------- 16 files changed, 159 insertions(+), 114 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 0d0daa3610105..231de227a9122 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -988,10 +988,6 @@ static bool common_params_parse_ex(int argc, char ** argv, common_params_context params.tensor_buft_overrides.push_back({nullptr, nullptr}); } - if (params.reranking && params.embedding) { - throw std::invalid_argument("error: either --embedding or --reranking can be specified, but not both"); - } - if (!params.chat_template.empty() && !common_chat_verify_template(params.chat_template, params.use_jinja)) { throw std::runtime_error(string_format( "error: the supplied chat template is not supported: %s%s\n", @@ -2747,9 +2743,10 @@ common_params_context common_params_parser_init(common_params & params, llama_ex ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_EMBEDDINGS")); add_opt(common_arg( {"--reranking", "--rerank"}, - string_format("enable reranking endpoint on server (default: %s)", params.reranking ? "enabled" : "disabled"), + string_format("enable reranking endpoint on server (default: %s)", "disabled"), [](common_params & params) { - params.reranking = true; + params.embedding = true; + params.pooling_type = LLAMA_POOLING_TYPE_RANK; } ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_RERANKING")); add_opt(common_arg( diff --git a/common/common.cpp b/common/common.cpp index e23887c70770c..5b465150f0533 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -897,34 +897,6 @@ struct common_init_result common_init_from_params(common_params & params) { const llama_vocab * vocab = llama_model_get_vocab(model); - if (params.reranking) { - bool ok = true; - - if (llama_vocab_bos(vocab) == LLAMA_TOKEN_NULL) { - LOG_WRN("%s: warning: vocab does not have a BOS token, reranking will not work\n", __func__); - ok = false; - } - - bool has_eos = llama_vocab_eos(vocab) != LLAMA_TOKEN_NULL; - bool has_sep = llama_vocab_sep(vocab) != LLAMA_TOKEN_NULL; - - if (!has_eos && !has_sep) { - LOG_WRN("%s: warning: vocab does not have an EOS token or SEP token, reranking will not work\n", __func__); - ok = false; - } else if (!has_eos) { - LOG_WRN("%s: warning: vocab does not have an EOS token, using SEP token as fallback\n", __func__); - } else if (!has_sep) { - LOG_WRN("%s: warning: vocab does not have a SEP token, reranking will not work\n", __func__); - ok = false; - } - - if (!ok) { - llama_model_free(model); - - return iparams; - } - } - auto cparams = common_context_params_to_llama(params); llama_context * lctx = llama_init_from_model(model, cparams); @@ -966,6 +938,35 @@ struct common_init_result common_init_from_params(common_params & params) { } } + if (llama_pooling_type(lctx) == LLAMA_POOLING_TYPE_RANK) { + bool ok = true; + + if (llama_vocab_bos(vocab) == LLAMA_TOKEN_NULL) { + LOG_WRN("%s: warning: vocab does not have a BOS token, reranking will not work\n", __func__); + ok = false; + } + + bool has_eos = llama_vocab_eos(vocab) != LLAMA_TOKEN_NULL; + bool has_sep = llama_vocab_sep(vocab) != LLAMA_TOKEN_NULL; + + if (!has_eos && !has_sep) { + LOG_WRN("%s: warning: vocab does not have an EOS token or SEP token, reranking will not work\n", __func__); + ok = false; + } else if (!has_eos) { + LOG_WRN("%s: warning: vocab does not have an EOS token, using SEP token as fallback\n", __func__); + } else if (!has_sep) { + LOG_WRN("%s: warning: vocab does not have a SEP token, reranking will not work\n", __func__); + ok = false; + } + + if (!ok) { + llama_free(lctx); + llama_model_free(model); + + return iparams; + } + } + // load and optionally apply lora adapters for (auto & la : params.lora_adapters) { llama_adapter_lora_ptr lora; @@ -1143,11 +1144,6 @@ struct llama_context_params common_context_params_to_llama(const common_params & cparams.op_offload = !params.no_op_offload; cparams.swa_full = params.swa_full; - if (params.reranking) { - cparams.embeddings = true; - cparams.pooling_type = LLAMA_POOLING_TYPE_RANK; - } - cparams.type_k = params.cache_type_k; cparams.type_v = params.cache_type_v; diff --git a/common/common.h b/common/common.h index f26724b6e1495..00b6ca03a20b4 100644 --- a/common/common.h +++ b/common/common.h @@ -355,7 +355,6 @@ struct common_params { int32_t embd_normalize = 2; // normalisation for embeddings (-1=none, 0=max absolute int16, 1=taxicab, 2=euclidean, >2=p-norm) std::string embd_out = ""; // empty = default, "array" = [[],[]...], "json" = openai style, "json+" = same "json" + cosine similarity matrix std::string embd_sep = "\n"; // separator of embeddings - bool reranking = false; // enable reranking support on server // server params int32_t port = 8080; // server listens on this network port diff --git a/examples/gritlm/gritlm.cpp b/examples/gritlm/gritlm.cpp index 041da61c743c1..bdab052c3390f 100644 --- a/examples/gritlm/gritlm.cpp +++ b/examples/gritlm/gritlm.cpp @@ -41,12 +41,11 @@ static std::vector> encode(llama_context * ctx, const std::ve // add input to batch (this increments n_tokens) for (int32_t j = 0; j < n_toks; j++) { - common_batch_add(batch, inputs[j], j, { 0 }, j >= n_inst); + common_batch_add(batch, inputs[j], j, { 0 }, true); } // clear previous kv_cache values (irrelevant for embeddings) llama_memory_clear(llama_get_memory(ctx), true); - llama_set_embeddings(ctx, true); llama_set_causal_attn(ctx, false); // run model @@ -103,7 +102,6 @@ static std::string generate(llama_context * ctx, llama_sampler * smpl, const std llama_token eos_token = llama_vocab_eos(vocab); llama_memory_clear(llama_get_memory(ctx), true); - llama_set_embeddings(ctx, false); llama_set_causal_attn(ctx, true); llama_batch bat = llama_batch_init(llama_n_batch(ctx), 0, 1); @@ -166,6 +164,8 @@ int main(int argc, char * argv[]) { llama_model_params mparams = common_model_params_to_llama(params); llama_context_params cparams = common_context_params_to_llama(params); + cparams.embeddings = true; + llama_backend_init(); llama_model * model = llama_model_load_from_file(params.model.path.c_str(), mparams); @@ -213,6 +213,8 @@ int main(int argc, char * argv[]) { std::printf("Cosine similarity between \"%.50s\" and \"%.50s\" is: %.3f\n", queries[1].c_str(), documents[1].c_str(), cosine_sim_q1_d1); } + llama_set_embeddings(ctx, false); + // ### Generation ### // GritLM models are not finetuned with system prompts, as you can just include system-like instructions together with your user instruction { diff --git a/include/llama.h b/include/llama.h index d5e4cef68c213..b086b68e6d4ea 100644 --- a/include/llama.h +++ b/include/llama.h @@ -254,7 +254,10 @@ extern "C" { // - seq_id : the sequence to which the respective token belongs // (if set to NULL, the sequence ID will be assumed to be 0) // - logits : if zero, the logits (and/or the embeddings) for the respective token will not be output - // (if set to NULL, only the logits for last token will be returned) + // (if set to NULL: + // - if embeddings: all tokens are output + // - if not: only the last token is output + // ) // typedef struct llama_batch { int32_t n_tokens; @@ -262,8 +265,8 @@ extern "C" { llama_token * token; float * embd; llama_pos * pos; - int32_t * n_seq_id; // TODO: remove, should belong to only 1 sequence - llama_seq_id ** seq_id; // TODO: become llama_seq_id * seq_id; + int32_t * n_seq_id; + llama_seq_id ** seq_id; int8_t * logits; // TODO: rename this to "output" } llama_batch; @@ -961,8 +964,7 @@ extern "C" { // Get the number of threads used for prompt and batch processing (multiple token). LLAMA_API int32_t llama_n_threads_batch(struct llama_context * ctx); - // Set whether the model is in embeddings mode or not - // If true, embeddings will be returned but logits will not + // Set whether the context outputs embeddings or not LLAMA_API void llama_set_embeddings(struct llama_context * ctx, bool embeddings); // Set whether to use causal attention or not diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index a9f4a3d4c45c5..8b6d14fe8813c 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -299,7 +299,8 @@ llama_batch_allocr::llama_batch_allocr() { bool llama_batch_allocr::init( const llama_batch & batch_inp, const llama_vocab & vocab, - const llama_memory_i * memory) { + const llama_memory_i * memory, + bool embd_all) { clear(); batch = batch_inp; @@ -378,10 +379,31 @@ bool llama_batch_allocr::init( } if (!batch.logits) { - // by default return the output only for the last token - output.resize(batch.n_tokens); - output[output.size() - 1] = true; + if (embd_all) { + // return the output for all tokens + output.resize(batch.n_tokens, true); + } else { + // return the output only for the last token + output.resize(batch.n_tokens, false); + output[output.size() - 1] = true; + } + batch.logits = output.data(); + } else if (embd_all) { + bool warn = false; + + for (int32_t i = 0; i < batch.n_tokens; ++i) { + if (batch.logits[i] == 0) { + warn = true; + } + } + + if (warn) { + LLAMA_LOG_WARN("%s: embeddings required but some input tokens were not marked as outputs -> overriding\n", __func__); + + output.resize(batch.n_tokens, true); + batch.logits = output.data(); + } } // diff --git a/src/llama-batch.h b/src/llama-batch.h index 04501ce5d424c..a555c157234be 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -88,7 +88,8 @@ class llama_batch_allocr { bool init( const llama_batch & batch_inp, const llama_vocab & vocab, - const llama_memory_i * memory); + const llama_memory_i * memory, + bool embd_all); const llama_batch & get_batch() const; diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 3a113d1bcfb2a..f56a58e9b6ec6 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -728,7 +728,7 @@ int llama_context::encode(const llama_batch & batch_inp) { } // note: during encode, we always pass the full sequence starting from pos = 0 - if (!batch_allocr->init(batch_inp, model.vocab, nullptr)) { + if (!batch_allocr->init(batch_inp, model.vocab, nullptr, true)) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); return -1; } @@ -894,7 +894,10 @@ int llama_context::decode(const llama_batch & batch_inp) { return -1; } - if (!batch_allocr->init(batch_inp, model.vocab, memory.get())) { + // when computing embeddings, all tokens are output + const bool embd_all = cparams.embeddings; + + if (!batch_allocr->init(batch_inp, model.vocab, memory.get(), embd_all)) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); return -1; } @@ -911,12 +914,9 @@ int llama_context::decode(const llama_batch & batch_inp) { GGML_ASSERT((!batch.token && batch.embd) || (batch.token && !batch.embd)); // NOLINT - // this indicates we are doing pooled embedding - const bool embd_pooled = cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE; - const uint32_t n_outputs_all = batch_allocr->get_n_outputs(); - if (embd_pooled) { + if (embd_all) { // require that all tokens are output if (n_outputs_all != n_tokens_all) { LLAMA_LOG_ERROR("%s: pooled embedding requires that all tokens are output (n_outputs_all = %d, n_tokens_all = %d)\n", @@ -945,7 +945,7 @@ int llama_context::decode(const llama_batch & batch_inp) { llama_memory_state_ptr mstate; while (true) { - mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled); + mstate = memory->init_batch(batch, cparams.n_ubatch, embd_all); if (!mstate) { return -2; } @@ -1058,7 +1058,7 @@ int llama_context::decode(const llama_batch & batch_inp) { // ggml_graph_dump_dot(gf, NULL, "llama.dot"); //} - auto * t_logits = cparams.embeddings ? nullptr : res->get_logits(); + auto * t_logits = res->get_logits(); auto * t_embd = cparams.embeddings ? res->get_embd() : nullptr; if (t_embd && res->get_embd_pooled()) { @@ -1222,9 +1222,8 @@ uint32_t llama_context::output_reserve(int32_t n_outputs) { const auto n_vocab = vocab.n_tokens(); const auto n_embd = hparams.n_embd; - // TODO: use a per-batch flag for logits presence instead - bool has_logits = !cparams.embeddings; - bool has_embd = cparams.embeddings && (cparams.pooling_type == LLAMA_POOLING_TYPE_NONE); + bool has_logits = true; + bool has_embd = cparams.embeddings; // TODO: hacky enc-dec support if (model.arch == LLM_ARCH_T5) { @@ -2044,14 +2043,11 @@ void llama_context::opt_epoch_iter( n_queued_tokens += n_tokens_all; - // this indicates we are doing pooled embedding - const bool embd_pooled = cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE; - embd_seq.clear(); uint32_t n_outputs_all = n_tokens_all; - auto mstate = memory->init_batch(batch, cparams.n_ubatch, embd_pooled); + auto mstate = memory->init_batch(batch, cparams.n_ubatch, true); if (!mstate || mstate->get_status() != LLAMA_MEMORY_STATUS_SUCCESS) { LLAMA_LOG_ERROR("%s: could not initialize batch\n", __func__); break; diff --git a/src/llama-kv-cache-recurrent.cpp b/src/llama-kv-cache-recurrent.cpp index de23b4ad23bce..8f6f120f682b7 100644 --- a/src/llama-kv-cache-recurrent.cpp +++ b/src/llama-kv-cache-recurrent.cpp @@ -359,9 +359,7 @@ llama_pos llama_kv_cache_recurrent::seq_pos_max(llama_seq_id seq_id) const { return result; } -llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled) { - GGML_UNUSED(embd_pooled); - +llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_all) { auto sbatch = llama_sbatch(batch, hparams.n_embd, false); std::vector ubatches; @@ -369,8 +367,8 @@ llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & while (sbatch.n_tokens > 0) { llama_ubatch ubatch; - if (embd_pooled) { - // Pooled embeddings cannot be split across ubatches (yet) + if (embd_all) { + // if all tokens are output, split by sequence ubatch = sbatch.split_seq(n_ubatch); } else { ubatch = sbatch.split_equal(n_ubatch); diff --git a/src/llama-kv-cache-recurrent.h b/src/llama-kv-cache-recurrent.h index d7c02ea872160..f9b01a6513393 100644 --- a/src/llama-kv-cache-recurrent.h +++ b/src/llama-kv-cache-recurrent.h @@ -32,7 +32,7 @@ class llama_kv_cache_recurrent : public llama_memory_i { llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled) override; + bool embd_all) override; llama_memory_state_ptr init_full() override; diff --git a/src/llama-kv-cache-unified-iswa.cpp b/src/llama-kv-cache-unified-iswa.cpp index 9814f76631203..a4a4c2b1b859d 100644 --- a/src/llama-kv-cache-unified-iswa.cpp +++ b/src/llama-kv-cache-unified-iswa.cpp @@ -95,8 +95,8 @@ llama_pos llama_kv_cache_unified_iswa::seq_pos_max(llama_seq_id seq_id) const { return kv_swa->seq_pos_max(seq_id); } -llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled) { - GGML_UNUSED(embd_pooled); +llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_all) { + GGML_UNUSED(embd_all); // first try simple split do { diff --git a/src/llama-kv-cache-unified-iswa.h b/src/llama-kv-cache-unified-iswa.h index d114c7378fbe9..6e941e1a41b88 100644 --- a/src/llama-kv-cache-unified-iswa.h +++ b/src/llama-kv-cache-unified-iswa.h @@ -34,7 +34,7 @@ class llama_kv_cache_unified_iswa : public llama_memory_i { llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled) override; + bool embd_all) override; llama_memory_state_ptr init_full() override; diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index b17936abdb4c6..3b37679859d39 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -310,8 +310,8 @@ llama_pos llama_kv_cache_unified::seq_pos_max(llama_seq_id seq_id) const { llama_memory_state_ptr llama_kv_cache_unified::init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled) { - GGML_UNUSED(embd_pooled); + bool embd_all) { + GGML_UNUSED(embd_all); do { auto sbatch = llama_sbatch(batch, hparams.n_embd, true); diff --git a/src/llama-kv-cache-unified.h b/src/llama-kv-cache-unified.h index d6dcd19f2507e..d96571d952b81 100644 --- a/src/llama-kv-cache-unified.h +++ b/src/llama-kv-cache-unified.h @@ -59,7 +59,7 @@ class llama_kv_cache_unified : public llama_memory_i { llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled) override; + bool embd_all) override; llama_memory_state_ptr init_full() override; diff --git a/src/llama-memory.h b/src/llama-memory.h index 42e226dc0ed61..24668f861b976 100644 --- a/src/llama-memory.h +++ b/src/llama-memory.h @@ -73,7 +73,7 @@ struct llama_memory_i { virtual llama_memory_state_ptr init_batch( const llama_batch & batch, uint32_t n_ubatch, - bool embd_pooled) = 0; + bool embd_all) = 0; // simulate full cache, used for allocating worst-case compute buffers virtual llama_memory_state_ptr init_full() = 0; diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 626c58bd304ff..c08e421255fce 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -88,6 +88,26 @@ enum error_type { ERROR_TYPE_NOT_SUPPORTED, // custom error }; +static bool server_task_type_need_embd(server_task_type task_type) { + switch (task_type) { + case SERVER_TASK_TYPE_EMBEDDING: + case SERVER_TASK_TYPE_RERANK: + return true; + default: + return false; + } +} + +static bool server_task_type_need_logits(server_task_type task_type) { + switch (task_type) { + case SERVER_TASK_TYPE_COMPLETION: + case SERVER_TASK_TYPE_INFILL: + return true; + default: + return false; + } +} + struct slot_params { bool stream = true; bool cache_prompt = true; // remember the prompt to avoid reprocessing all prompt @@ -1330,13 +1350,16 @@ struct server_slot { n_draft_accepted = 0; } - bool is_non_causal() const { - return task_type == SERVER_TASK_TYPE_EMBEDDING || task_type == SERVER_TASK_TYPE_RERANK; + bool need_embd() const { + return server_task_type_need_embd(task_type); + } + + bool need_logits() const { + return server_task_type_need_logits(task_type); } bool can_batch_with(server_slot & other_slot) const { - return is_non_causal() == other_slot.is_non_causal() - && are_lora_equal(lora, other_slot.lora); + return task_type == other_slot.task_type && are_lora_equal(lora, other_slot.lora); } bool has_budget(const common_params & global_params) { @@ -1480,7 +1503,6 @@ struct server_slot { {"n_ctx", n_ctx}, {"speculative", can_speculate()}, {"is_processing", is_processing()}, - {"non_causal", is_non_causal()}, {"params", params.to_json()}, {"prompt", prompt_tokens.detokenize(ctx, true)}, {"next_token", @@ -1907,6 +1929,14 @@ struct server_context { llama_batch_free(batch); } + // if the context does not have a memory module then all embeddings have to be computed within a single ubatch + // also we cannot split if the pooling would require any past tokens + bool can_split() const { + return + !llama_get_embeddings(ctx) || + (llama_get_memory(ctx) && llama_pooling_type(ctx) == LLAMA_POOLING_TYPE_LAST); + } + bool load_model(const common_params & params) { SRV_INF("loading model '%s'\n", params.model.path.c_str()); @@ -2730,6 +2760,7 @@ struct server_context { queue_tasks.defer(std::move(task)); break; } + if (slot->is_processing()) { // if requested slot is unavailable, we defer this task for processing later SRV_DBG("requested slot is unavailable, defer task, id_task = %d\n", task.id); @@ -3092,7 +3123,14 @@ struct server_context { continue; } - if (slot.is_non_causal()) { + // TODO: support memory-less logits computation + if (slot.need_logits() && !llama_get_memory(ctx)) { + slot.release(); + send_error(slot, "the current context does not logits computation. skipping", ERROR_TYPE_SERVER); + continue; + } + + if (!can_split()) { if (slot.n_prompt_tokens > n_ubatch) { slot.release(); send_error(slot, "input is too large to process. increase the physical batch size", ERROR_TYPE_SERVER); @@ -3227,8 +3265,7 @@ struct server_context { } if (slot.n_past == slot.n_prompt_tokens && slot.n_past > 0) { - // we have to evaluate at least 1 token to generate logits. - SLT_WRN(slot, "need to evaluate at least 1 token to generate logits, n_past = %d, n_prompt_tokens = %d\n", slot.n_past, slot.n_prompt_tokens); + SLT_WRN(slot, "need to evaluate at least 1 token for each active slot, n_past = %d, n_prompt_tokens = %d\n", slot.n_past, slot.n_prompt_tokens); slot.n_past--; } @@ -3236,8 +3273,7 @@ struct server_context { slot.n_prompt_tokens_processed = 0; } - // non-causal tasks require to fit the entire prompt in the physical batch - if (slot.is_non_causal()) { + if (!can_split()) { // cannot fit the prompt in the current batch - will try next iter if (batch.n_tokens + slot.n_prompt_tokens > n_batch) { continue; @@ -3259,8 +3295,7 @@ struct server_context { slot.cache_tokens.keep_first(slot.n_past); // check if we should process the image - if (slot.n_past < slot.n_prompt_tokens - && slot.prompt_tokens[slot.n_past] == LLAMA_TOKEN_NULL) { + if (slot.n_past < slot.n_prompt_tokens && slot.prompt_tokens[slot.n_past] == LLAMA_TOKEN_NULL) { // process the image int32_t new_n_past; int32_t res = slot.prompt_tokens.process_chunk(ctx, mctx, slot.n_past, slot.id, new_n_past); @@ -3291,8 +3326,8 @@ struct server_context { break; // end of text chunk } - // without pooling, we want to output the embeddings for all the tokens in the batch - const bool need_embd = slot.task_type == SERVER_TASK_TYPE_EMBEDDING && llama_pooling_type(slot.ctx) == LLAMA_POOLING_TYPE_NONE; + // embedding requires all tokens in the batch to be output + const bool need_embd = server_task_type_need_embd(slot.task_type); common_batch_add(batch, cur_tok, slot.n_past, { slot.id }, need_embd); slot.cache_tokens.push_back(cur_tok); @@ -3346,17 +3381,15 @@ struct server_context { SRV_DBG("decoding batch, n_tokens = %d\n", batch.n_tokens); if (slot_batched) { - // make sure we're in the right embedding mode - llama_set_embeddings(ctx, slot_batched->is_non_causal()); // apply lora, only need to do it once per batch common_set_adapter_lora(ctx, slot_batched->lora); - } - const bool do_encode = (params_base.embedding || params_base.reranking); + llama_set_embeddings(ctx, slot_batched->need_embd()); + } // pad the batch so that batch.n_tokens >= n_slots // TODO: temporary workaround for https://github.com/ggml-org/llama.cpp/issues/13689 - if (do_encode) { + if (slot_batched->need_embd()) { const int n_slots = slots.size(); if (batch.n_tokens < n_slots) { @@ -3378,8 +3411,11 @@ struct server_context { SRV_WRN("adding %d dummy tokens to the batch, seq_id = %d\n", n_add, seq_id); for (int j = 0; j < n_add; ++j) { - common_batch_add(batch, 0, j, { seq_id }, false); + common_batch_add(batch, 0, j, { seq_id }, true); } + + slots[seq_id].cache_tokens.clear(); + llama_memory_seq_rm(llama_get_memory(ctx), seq_id, -1, -1); } } @@ -4174,11 +4210,6 @@ int main(int argc, char ** argv) { oaicompat_type oaicompat) -> void { GGML_ASSERT(type == SERVER_TASK_TYPE_COMPLETION || type == SERVER_TASK_TYPE_INFILL); - if (ctx_server.params_base.embedding) { - res_error(res, format_error_response("This server does not support completions. Start it without `--embeddings`", ERROR_TYPE_NOT_SUPPORTED)); - return; - } - auto completion_id = gen_chatcmplid(); std::unordered_set task_ids; try { @@ -4433,12 +4464,8 @@ int main(int argc, char ** argv) { OAICOMPAT_TYPE_NONE); // infill is not OAI compatible }; - const auto handle_chat_completions = [&ctx_server, &res_error, &handle_completions_impl](const httplib::Request & req, httplib::Response & res) { + const auto handle_chat_completions = [&ctx_server, &handle_completions_impl](const httplib::Request & req, httplib::Response & res) { LOG_DBG("request: %s\n", req.body.c_str()); - if (ctx_server.params_base.embedding) { - res_error(res, format_error_response("This server does not support completions. Start it without `--embeddings`", ERROR_TYPE_NOT_SUPPORTED)); - return; - } auto body = json::parse(req.body); std::vector files; @@ -4566,13 +4593,18 @@ int main(int argc, char ** argv) { }; const auto handle_embeddings_impl = [&ctx_server, &res_error, &res_ok](const httplib::Request & req, httplib::Response & res, oaicompat_type oaicompat) { - const json body = json::parse(req.body); + if (!ctx_server.params_base.embedding) { + res_error(res, format_error_response("This server does not support embeddings. Start it with `--embeddings`", ERROR_TYPE_NOT_SUPPORTED)); + return; + } if (oaicompat != OAICOMPAT_TYPE_NONE && llama_pooling_type(ctx_server.ctx) == LLAMA_POOLING_TYPE_NONE) { res_error(res, format_error_response("Pooling type 'none' is not OAI compatible. Please use a different pooling type", ERROR_TYPE_INVALID_REQUEST)); return; } + const json body = json::parse(req.body); + // for the shape of input/content, see tokenize_input_prompts() json prompt; if (body.count("input") != 0) { @@ -4662,8 +4694,8 @@ int main(int argc, char ** argv) { }; const auto handle_rerank = [&ctx_server, &res_error, &res_ok](const httplib::Request & req, httplib::Response & res) { - if (!ctx_server.params_base.reranking || ctx_server.params_base.embedding) { - res_error(res, format_error_response("This server does not support reranking. Start it with `--reranking` and without `--embedding`", ERROR_TYPE_NOT_SUPPORTED)); + if (!ctx_server.params_base.embedding || ctx_server.params_base.pooling_type != LLAMA_POOLING_TYPE_RANK) { + res_error(res, format_error_response("This server does not support reranking. Start it with `--reranking`", ERROR_TYPE_NOT_SUPPORTED)); return; } From 7d6d91babfa129906b39c9099eca4234c44f4f1e Mon Sep 17 00:00:00 2001 From: uvos Date: Mon, 16 Jun 2025 13:47:38 +0200 Subject: [PATCH 60/95] HIP: disable rocwmma on gfx12 by default until rocm 7.0 (#14202) --- ggml/CMakeLists.txt | 1 + ggml/src/ggml-cuda/common.cuh | 4 ++-- ggml/src/ggml-hip/CMakeLists.txt | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 727139cf385b7..7b398ae8e30ed 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -172,6 +172,7 @@ option(GGML_HIP "ggml: use HIP" option(GGML_HIP_GRAPHS "ggml: use HIP graph, experimental, slow" OFF) option(GGML_HIP_NO_VMM "ggml: do not try to use HIP VMM" ON) option(GGML_HIP_ROCWMMA_FATTN "ggml: enable rocWMMA for FlashAttention" OFF) +option(GGML_HIP_FORCE_ROCWMMA_FATTN_GFX12 "ggml: enable rocWMMA FlashAttention on GFX12" OFF) option(GGML_VULKAN "ggml: use Vulkan" OFF) option(GGML_VULKAN_CHECK_RESULTS "ggml: run Vulkan op checks" OFF) option(GGML_VULKAN_DEBUG "ggml: enable Vulkan debug output" OFF) diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index 563a7828bdd14..c14a12f54a8d6 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -207,9 +207,9 @@ typedef float2 dfloat2; #define FP16_MMA_AVAILABLE #endif // !(defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= GGML_CUDA_CC_VOLTA -#if defined(GGML_HIP_ROCWMMA_FATTN) && (defined(CDNA) || defined(RDNA3) || defined(RDNA4)) +#if defined(GGML_HIP_ROCWMMA_FATTN) && (defined(CDNA) || defined(RDNA3) || (defined(GGML_HIP_ROCWMMA_FATTN_GFX12) && defined(RDNA4))) #define FP16_MMA_AVAILABLE -#endif // defined(GGML_HIP_ROCWMMA_FATTN) && (defined(CDNA) || defined(RDNA3) || defined(RDNA4)) +#endif // defined(GGML_HIP_ROCWMMA_FATTN) && (defined(CDNA) || defined(RDNA3) || (defined(GGML_HIP_ROCWMMA_FATTN_GFX12) && defined(RDNA4))) #if !(defined(GGML_USE_HIP) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= GGML_CUDA_CC_TURING #define NEW_MMA_AVAILABLE diff --git a/ggml/src/ggml-hip/CMakeLists.txt b/ggml/src/ggml-hip/CMakeLists.txt index 1fe8fe3b8d079..e29df98560e07 100644 --- a/ggml/src/ggml-hip/CMakeLists.txt +++ b/ggml/src/ggml-hip/CMakeLists.txt @@ -113,6 +113,10 @@ if (GGML_HIP_ROCWMMA_FATTN) add_compile_definitions(GGML_HIP_ROCWMMA_FATTN) endif() +if (GGML_HIP_FORCE_ROCWMMA_FATTN_GFX12 OR ${hip_VERSION} VERSION_GREATER_EQUAL 7.0) + add_compile_definitions(GGML_HIP_ROCWMMA_FATTN_GFX12) +endif() + if (NOT GGML_CUDA_FA) add_compile_definitions(GGML_CUDA_NO_FA) endif() From ad590be98c83217fcf1a101d78d9ab389fd5dc0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90inh=20Tr=E1=BB=8Dng=20Huy?= <77562200+huydt84@users.noreply.github.com> Date: Mon, 16 Jun 2025 21:53:41 +0900 Subject: [PATCH 61/95] model : add NeoBERT (#14164) * convert neobert model to gguf * add inference graph * fix flake8 lint * followed reviewer suggestions Co-authored-by: Georgi Gerganov * follow reviewers suggestions Co-authored-by: Georgi Gerganov * override NeoBERT feed-forward length --------- Co-authored-by: dinhhuy Co-authored-by: Georgi Gerganov --- convert_hf_to_gguf.py | 30 ++++++- gguf-py/gguf/constants.py | 14 +++ gguf-py/gguf/tensor_mapping.py | 9 ++ src/llama-arch.cpp | 16 ++++ src/llama-arch.h | 1 + src/llama-model.cpp | 153 +++++++++++++++++++++++++++++++++ 6 files changed, 222 insertions(+), 1 deletion(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 2232a7d82349e..58e455ae645ed 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -519,7 +519,7 @@ def prepare_metadata(self, vocab_only: bool): def set_gguf_parameters(self): self.gguf_writer.add_block_count(self.block_count) - if (n_ctx := self.find_hparam(["max_position_embeddings", "n_ctx", "n_positions"], optional=True)) is not None: + if (n_ctx := self.find_hparam(["max_position_embeddings", "n_ctx", "n_positions", "max_length"], optional=True)) is not None: self.gguf_writer.add_context_length(n_ctx) logger.info(f"gguf: context length = {n_ctx}") @@ -4076,6 +4076,34 @@ def _is_tokenizer_xlmroberta(self) -> bool: raise ValueError(f"unknown tokenizer: {toktyp}") +@ModelBase.register("NeoBERT", "NeoBERTLMHead", "NeoBERTForSequenceClassification") +class NeoBert(BertModel): + model_arch = gguf.MODEL_ARCH.NEO_BERT + + def set_gguf_parameters(self): + super().set_gguf_parameters() + + # NeoBERT uses 2/3 of the intermediate size as feed forward length + self.gguf_writer.add_feed_forward_length(int(2 * self.hparams["intermediate_size"] / 3)) + self.gguf_writer.add_rope_freq_base(10000.0) # default value for NeoBERT + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.NONE) + + f_rms_eps = self.hparams.get("norm_eps", 1e-6) # default value for NeoBERT + self.gguf_writer.add_layer_norm_rms_eps(f_rms_eps) + logger.info(f"gguf: rms norm epsilon = {f_rms_eps}") + + self.gguf_writer.add_pooling_type(gguf.PoolingType.CLS) # https://huggingface.co/chandar-lab/NeoBERT#how-to-use + + def modify_tensors(self, data_torch, name, bid): + if name.startswith("decoder."): + return [] + + if name.startswith("model."): + name = name[6:] + + return super().modify_tensors(data_torch, name, bid) + + @ModelBase.register("XLMRobertaModel", "XLMRobertaForSequenceClassification") class XLMRobertaModel(BertModel): model_arch = gguf.MODEL_ARCH.BERT diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 9b2143c7c2eaa..834a1d5e1a97e 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -291,6 +291,7 @@ class MODEL_ARCH(IntEnum): BERT = auto() NOMIC_BERT = auto() NOMIC_BERT_MOE = auto() + NEO_BERT = auto() JINA_BERT_V2 = auto() BLOOM = auto() STABLELM = auto() @@ -573,6 +574,7 @@ class MODEL_TENSOR(IntEnum): MODEL_ARCH.BERT: "bert", MODEL_ARCH.NOMIC_BERT: "nomic-bert", MODEL_ARCH.NOMIC_BERT_MOE: "nomic-bert-moe", + MODEL_ARCH.NEO_BERT: "neo-bert", MODEL_ARCH.JINA_BERT_V2: "jina-bert-v2", MODEL_ARCH.BLOOM: "bloom", MODEL_ARCH.STABLELM: "stablelm", @@ -1081,6 +1083,18 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.FFN_UP_EXP, MODEL_TENSOR.LAYER_OUT_NORM, ], + MODEL_ARCH.NEO_BERT: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.ATTN_QKV, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.FFN_NORM, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + MODEL_TENSOR.ENC_OUTPUT_NORM, + MODEL_TENSOR.CLS, + MODEL_TENSOR.CLS_OUT, + ], MODEL_ARCH.JINA_BERT_V2: [ MODEL_TENSOR.TOKEN_EMBD, MODEL_TENSOR.TOKEN_EMBD_NORM, diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 5e3f01754bf07..79f044d2a5945 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -31,6 +31,7 @@ class TensorNameMap: "model.embeddings", # rwkv7 "model.word_embeddings", # bailingmoe "language_model.model.embed_tokens", # llama4 + "encoder", # neobert ), # Token type embeddings @@ -134,6 +135,7 @@ class TensorNameMap: "rwkv.blocks.{bid}.ln1", # rwkv6 "model.layers.{bid}.ln1", # rwkv7 "model.layers.{bid}.input_layernorm", # llama4 + "transformer_encoder.{bid}.attention_norm", # neobert ), # Attention norm 2 @@ -161,6 +163,7 @@ class TensorNameMap: "model.layers.{bid}.self_attn.qkv_proj", # phi3 "encoder.layers.{bid}.self_attention.query_key_value", # chatglm "transformer.layers.{bid}.attn.qkv_proj", # openelm + "transformer_encoder.{bid}.qkv", # neobert ), # Attention query @@ -236,6 +239,7 @@ class TensorNameMap: "transformer.layers.{bid}.attn.out_proj", # openelm "transformer.h.{bid}.attn.attention.out_proj", # exaone "model.layers.{bid}.self_attn.o_proj", # llama4 + "transformer_encoder.{bid}.wo", # neobert ), # Attention output norm @@ -276,6 +280,7 @@ class TensorNameMap: "encoder.layers.{bid}.post_attention_layernorm", # chatglm "transformer.layers.{bid}.ffn_norm", # openelm "model.layers.{bid}.post_attention_layernorm", # llama4 + "transformer_encoder.{bid}.ffn_norm", # neobert ), # Post feed-forward norm @@ -340,6 +345,7 @@ class TensorNameMap: "encoder.layers.{bid}.mlp.dense_h_to_4h", # chatglm "transformer.h.{bid}.mlp.c_fc_1", # exaone "model.layers.{bid}.feed_forward.up_proj", # llama4 + "transformer_encoder.{bid}.ffn.w12", # neobert ), MODEL_TENSOR.FFN_UP_EXP: ( @@ -422,6 +428,7 @@ class TensorNameMap: "encoder.layers.{bid}.mlp.dense_4h_to_h", # chatglm "model.layers.h.{bid}.mlp.c_proj", # exaone "model.layers.{bid}.feed_forward.down_proj", # llama4 + "transformer_encoder.{bid}.ffn.w3", # neobert ), MODEL_TENSOR.FFN_DOWN_EXP: ( @@ -832,12 +839,14 @@ class TensorNameMap: # TODO: these do not belong to block_mappings_cfg - move them to mappings_cfg MODEL_TENSOR.ENC_OUTPUT_NORM: ( "encoder.final_layer_norm", # t5 + "layer_norm", # neobert ), MODEL_TENSOR.CLS: ( "classifier", # jina "classifier.dense", # roberta "pre_classifier", # distillbert + "dense", # neobert ), MODEL_TENSOR.CLS_OUT: ( diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index a3e7c861ca02f..de8d289cf967e 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -20,6 +20,7 @@ static const std::map LLM_ARCH_NAMES = { { LLM_ARCH_BERT, "bert" }, { LLM_ARCH_NOMIC_BERT, "nomic-bert" }, { LLM_ARCH_NOMIC_BERT_MOE, "nomic-bert-moe" }, + { LLM_ARCH_NEO_BERT, "neo-bert" }, { LLM_ARCH_JINA_BERT_V2, "jina-bert-v2" }, { LLM_ARCH_BLOOM, "bloom" }, { LLM_ARCH_STABLELM, "stablelm" }, @@ -514,6 +515,21 @@ static const std::map> LLM_TENSOR_N { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, }, }, + { + LLM_ARCH_NEO_BERT, + { + { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, + { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, + { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, + { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, + { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, + { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, + { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, + { LLM_TENSOR_ENC_OUTPUT_NORM, "enc.output_norm" }, + { LLM_TENSOR_CLS, "cls" }, + { LLM_TENSOR_CLS_OUT, "cls.output" }, + }, + }, { LLM_ARCH_JINA_BERT_V2, { diff --git a/src/llama-arch.h b/src/llama-arch.h index 168fdcb401cfd..3e8a61da3c13e 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -24,6 +24,7 @@ enum llm_arch { LLM_ARCH_BERT, LLM_ARCH_NOMIC_BERT, LLM_ARCH_NOMIC_BERT_MOE, + LLM_ARCH_NEO_BERT, LLM_ARCH_JINA_BERT_V2, LLM_ARCH_BLOOM, LLM_ARCH_STABLELM, diff --git a/src/llama-model.cpp b/src/llama-model.cpp index dcc8b0be72563..a5eb122f998d8 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -749,6 +749,16 @@ void llama_model::load_hparams(llama_model_loader & ml) { } } } break; + case LLM_ARCH_NEO_BERT: + { + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); + ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn); + ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type); + + if (hparams.n_layer == 28) { + type = LLM_TYPE_250M; + } + } break; case LLM_ARCH_BLOOM: { ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); @@ -2212,6 +2222,32 @@ bool llama_model::load_tensors(llama_model_loader & ml) { layer.layer_out_norm_b = create_tensor(tn(LLM_TENSOR_LAYER_OUT_NORM, "bias", i), {n_embd}, 0); } } break; + case LLM_ARCH_NEO_BERT: + { + tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); + + cls = create_tensor(tn(LLM_TENSOR_CLS, "weight"), {n_embd, n_embd}, TENSOR_NOT_REQUIRED); + cls_b = create_tensor(tn(LLM_TENSOR_CLS, "bias"), {n_embd}, TENSOR_NOT_REQUIRED); + + cls_out = create_tensor(tn(LLM_TENSOR_CLS_OUT, "weight"), {n_embd, hparams.n_cls_out}, TENSOR_NOT_REQUIRED); + cls_out_b = create_tensor(tn(LLM_TENSOR_CLS_OUT, "bias"), {hparams.n_cls_out}, TENSOR_NOT_REQUIRED); + + output_norm_enc = create_tensor(tn(LLM_TENSOR_ENC_OUTPUT_NORM, "weight"), {n_embd}, 0); + + for (int i = 0; i < n_layer; ++i) { + auto & layer = layers[i]; + + layer.attn_norm = create_tensor(tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, 0); + + layer.wqkv = create_tensor(tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, 0); + layer.wo = create_tensor(tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, 0); + + layer.ffn_norm = create_tensor(tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, 0); + + layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff*2}, 0); + layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0); + } + } break; case LLM_ARCH_JINA_BERT_V2: { tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); // word_embeddings @@ -6182,6 +6218,117 @@ struct llm_build_bert : public llm_graph_context { } }; +struct llm_build_neo_bert : public llm_graph_context { + llm_build_neo_bert(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : llm_graph_context(params) { + const int64_t n_embd_head = hparams.n_embd_head_v; + const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); + + GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); + + ggml_tensor * cur; + ggml_tensor * inpL; + ggml_tensor * inp_pos = build_inp_pos(); + + // construct input embeddings (token, type, position) + inpL = build_inp_embd(model.tok_embd); + cb(inpL, "inp_embd", -1); + + auto * inp_attn = build_attn_inp_no_cache(); + + // iterate layers + for (int il = 0; il < n_layer; ++il) { + ggml_tensor * cur = inpL; + + ggml_tensor * Qcur; + ggml_tensor * Kcur; + ggml_tensor * Vcur; + + // pre-norm + cur = build_norm(inpL, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, il); + + // self-attention + cur = build_lora_mm(model.layers[il].wqkv, cur); + cb(cur, "wqkv", 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_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); + + // RoPE + 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, gf, + model.layers[il].wo, nullptr, + Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + cb(cur, "kqv_out", il); + + if (il == n_layer - 1 && pooling_type == LLAMA_POOLING_TYPE_NONE) { + // skip computing output for unused tokens + ggml_tensor * inp_out_ids = build_inp_out_ids(); + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); + } + + // re-add the layer input + cur = ggml_add(ctx0, cur, inpL); + + ggml_tensor * ffn_inp = cur; + cb(ffn_inp, "ffn_inp", il); + + // pre-norm + cur = build_norm(ffn_inp, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, il); + cb(cur, "ffn_norm", il); + + // feed-forward network + cur = build_ffn(cur, + model.layers[il].ffn_up, + NULL, NULL, NULL, NULL, NULL, + model.layers[il].ffn_down, + NULL, NULL, NULL, + LLM_FFN_SWIGLU, LLM_FFN_SEQ, il); + + // attentions bypass the intermediate layer + cur = ggml_add(ctx0, cur, ffn_inp); + + // input for next layer + inpL = cur; + } + + cur = inpL; + + cur = build_norm(cur, + model.output_norm_enc, NULL, + LLM_NORM_RMS, -1); + + cb(cur, "result_embd", -1); + res->t_embd = cur; + + ggml_build_forward_expand(gf, cur); + } +}; + struct llm_build_bloom : public llm_graph_context { llm_build_bloom(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : llm_graph_context(params) { const int64_t n_embd_head = hparams.n_embd_head_v; @@ -13595,6 +13742,7 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, case LLM_ARCH_JINA_BERT_V2: case LLM_ARCH_NOMIC_BERT: case LLM_ARCH_NOMIC_BERT_MOE: + case LLM_ARCH_NEO_BERT: case LLM_ARCH_WAVTOKENIZER_DEC: { res = nullptr; @@ -13703,6 +13851,10 @@ llm_graph_result_ptr llama_model::build_graph( { llm = std::make_unique(*this, params, gf); } break; + case LLM_ARCH_NEO_BERT: + { + llm = std::make_unique(*this, params, gf); + } break; case LLM_ARCH_BLOOM: { llm = std::make_unique(*this, params, gf); @@ -14082,6 +14234,7 @@ llama_rope_type llama_model_rope_type(const llama_model * model) { case LLM_ARCH_GRANITE_MOE: case LLM_ARCH_CHAMELEON: case LLM_ARCH_BAILINGMOE: + case LLM_ARCH_NEO_BERT: case LLM_ARCH_ARCEE: return LLAMA_ROPE_TYPE_NORM; From 0dbcabde8c006d5cf781ca0fe071c41559572a72 Mon Sep 17 00:00:00 2001 From: bandoti <141645996+bandoti@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:32:13 -0300 Subject: [PATCH 62/95] cmake: clean up external project logic for vulkan-shaders-gen (#14179) * Remove install step for vulkan-shaders-gen * Add install step to normalize msvc with make * Regenerate modified shaders at build-time --- .github/workflows/build.yml | 2 +- ggml/src/ggml-vulkan/CMakeLists.txt | 49 ++++++++----------- .../ggml-vulkan/vulkan-shaders/CMakeLists.txt | 12 ----- 3 files changed, 22 insertions(+), 41 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5422dd81723f9..85c4f3512b0e7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -693,7 +693,7 @@ jobs: - build: 'openblas-x64' defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/x64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_OPENMP=OFF -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' - build: 'vulkan-x64' - defines: '-DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_VULKAN=ON' + defines: '-DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_VULKAN=ON' - build: 'llvm-arm64' defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON' - build: 'llvm-arm64-opencl-adreno' diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index 4a88415f96eae..95e2ebe643732 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -49,15 +49,7 @@ if (Vulkan_FOUND) ../../include/ggml-vulkan.h ) - set(VULKAN_SHADER_GEN_CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - ) - - set(VULKAN_SHADER_GEN_CMAKE_BUILD_ARGS "") - if (CMAKE_BUILD_TYPE AND CMAKE_BUILD_TYPE MATCHES "Debug|Release|MinSizeRel|RelWithDebInfo") - list(APPEND VULKAN_SHADER_GEN_CMAKE_BUILD_ARGS --config=${CMAKE_BUILD_TYPE}) - endif() + set(VULKAN_SHADER_GEN_CMAKE_ARGS "") # Test all shader extensions test_shader_extension_support( @@ -136,42 +128,39 @@ if (Vulkan_FOUND) set(HOST_CMAKE_TOOLCHAIN_FILE "") endif() - # Always use ExternalProject_Add approach include(ExternalProject) - # Add toolchain file if cross-compiling if (CMAKE_CROSSCOMPILING) list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE}) message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}") endif() - # Native build through ExternalProject_Add ExternalProject_Add( vulkan-shaders-gen SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders - CMAKE_ARGS ${VULKAN_SHADER_GEN_CMAKE_ARGS} - BUILD_COMMAND ${CMAKE_COMMAND} --build . ${VULKAN_SHADER_GEN_CMAKE_BUILD_ARGS} - INSTALL_COMMAND ${CMAKE_COMMAND} --install . - INSTALL_DIR ${CMAKE_BINARY_DIR} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/$ + -DCMAKE_INSTALL_BINDIR=. + -DCMAKE_BUILD_TYPE=$ + ${VULKAN_SHADER_GEN_CMAKE_ARGS} + + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $ + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config $ ) ExternalProject_Add_StepTargets(vulkan-shaders-gen build install) set (_ggml_vk_host_suffix $,.exe,>) - set (_ggml_vk_genshaders_cmd ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/vulkan-shaders-gen${_ggml_vk_host_suffix}) - set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp) - set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp) - set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders) - set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv) - - file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp") - set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen) + set (_ggml_vk_genshaders_dir "${CMAKE_BINARY_DIR}/$") + set (_ggml_vk_genshaders_cmd "${_ggml_vk_genshaders_dir}/vulkan-shaders-gen${_ggml_vk_host_suffix}") + set (_ggml_vk_header "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp") + set (_ggml_vk_source "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp") + set (_ggml_vk_input_dir "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders") + set (_ggml_vk_output_dir "${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv") - # Add build and install dependencies for all builds - set(_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install) + file(GLOB _ggml_vk_shader_files CONFIGURE_DEPENDS "${_ggml_vk_input_dir}/*.comp") add_custom_command( OUTPUT ${_ggml_vk_header} - ${_ggml_vk_source} + ${_ggml_vk_source} COMMAND ${_ggml_vk_genshaders_cmd} --glslc ${Vulkan_GLSLC_EXECUTABLE} @@ -181,7 +170,11 @@ if (Vulkan_FOUND) --target-cpp ${_ggml_vk_source} --no-clean - DEPENDS ${_ggml_vk_shader_deps} + DEPENDS ${_ggml_vk_shader_files} + vulkan-shaders-gen + vulkan-shaders-gen-build + vulkan-shaders-gen-install + COMMENT "Generate vulkan shaders" ) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt index e60e9d1e5b5c5..14e9daaa01a25 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt @@ -25,15 +25,3 @@ add_executable(${TARGET} vulkan-shaders-gen.cpp) install(TARGETS ${TARGET} RUNTIME) target_compile_features(${TARGET} PRIVATE cxx_std_17) target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads) - -# Configure output directories for MSVC builds -if(MSVC) - # Get the main project's runtime output directory if possible - if(DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) - foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER ${CONFIG} CONFIG) - set_target_properties(${TARGET} PROPERTIES - RUNTIME_OUTPUT_DIRECTORY_${CONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - endforeach() - endif() -endif() From 6adc3c3ebc029af058ac950a8e2a825fdf18ecc6 Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Mon, 16 Jun 2025 08:11:43 -0700 Subject: [PATCH 63/95] llama : add thread safety test (#14035) * llama : add thread safety test * llamafile : remove global state * llama : better LLAMA_SPLIT_MODE_NONE logic when main_gpu < 0 GPU devices are not used --------- Co-authored-by: Georgi Gerganov --- .github/workflows/build.yml | 1 + ci/run.sh | 2 +- common/common.cpp | 16 ++- ggml/src/ggml-cpu/ggml-cpu-impl.h | 3 + ggml/src/ggml-cpu/ggml-cpu.c | 8 ++ ggml/src/ggml-cpu/llamafile/sgemm.cpp | 8 +- src/llama.cpp | 18 +-- tests/CMakeLists.txt | 2 + tests/test-thread-safety.cpp | 152 ++++++++++++++++++++++++++ 9 files changed, 192 insertions(+), 18 deletions(-) create mode 100644 tests/test-thread-safety.cpp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85c4f3512b0e7..c4783a6df8882 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -778,6 +778,7 @@ jobs: cmake -S . -B build ${{ matrix.defines }} ` -DCURL_LIBRARY="$env:CURL_PATH/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:CURL_PATH/include" cmake --build build --config Release -j ${env:NUMBER_OF_PROCESSORS} + cp $env:CURL_PATH/bin/libcurl-*.dll build/bin/Release - name: Add libopenblas.dll id: add_libopenblas_dll diff --git a/ci/run.sh b/ci/run.sh index 2968a7dd48d42..94005570511b6 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -39,7 +39,7 @@ sd=`dirname $0` cd $sd/../ SRC=`pwd` -CMAKE_EXTRA="-DLLAMA_FATAL_WARNINGS=ON -DLLAMA_CURL=OFF" +CMAKE_EXTRA="-DLLAMA_FATAL_WARNINGS=ON -DLLAMA_CURL=ON" if [ ! -z ${GG_BUILD_METAL} ]; then CMAKE_EXTRA="${CMAKE_EXTRA} -DGGML_METAL=ON -DGGML_METAL_USE_BF16=ON" diff --git a/common/common.cpp b/common/common.cpp index 5b465150f0533..eb80cee0894a6 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -767,6 +767,9 @@ bool fs_validate_filename(const std::string & filename) { return true; } +#include + + // returns true if successful, false otherwise bool fs_create_directory_with_parents(const std::string & path) { #ifdef _WIN32 @@ -784,9 +787,16 @@ bool fs_create_directory_with_parents(const std::string & path) { // process path from front to back, procedurally creating directories while ((pos_slash = path.find('\\', pos_slash)) != std::string::npos) { const std::wstring subpath = wpath.substr(0, pos_slash); - const wchar_t * test = subpath.c_str(); - const bool success = CreateDirectoryW(test, NULL); + pos_slash += 1; + + // skip the drive letter, in some systems it can return an access denied error + if (subpath.length() == 2 && subpath[1] == ':') { + continue; + } + + const bool success = CreateDirectoryW(subpath.c_str(), NULL); + if (!success) { const DWORD error = GetLastError(); @@ -800,8 +810,6 @@ bool fs_create_directory_with_parents(const std::string & path) { return false; } } - - pos_slash += 1; } return true; diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index 9662e4d7b5a6a..ae68cd006336d 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -503,6 +503,9 @@ static __m256 __lasx_xvreplfr2vr_s(const float val) { // TODO: move to ggml-threading void ggml_barrier(struct ggml_threadpool * tp); +void ggml_threadpool_chunk_set(struct ggml_threadpool * tp, int value); +int ggml_threadpool_chunk_add(struct ggml_threadpool * tp, int value); + #ifdef __cplusplus } #endif diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index ff28bf98bc7df..2c12e493bc9b0 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -559,6 +559,14 @@ void ggml_barrier(struct ggml_threadpool * tp) { #endif } +void ggml_threadpool_chunk_set(struct ggml_threadpool * tp, int value) { + atomic_store_explicit(&tp->current_chunk, value, memory_order_relaxed); +} + +int ggml_threadpool_chunk_add(struct ggml_threadpool * tp, int value) { + return atomic_fetch_add_explicit(&tp->current_chunk, value, memory_order_relaxed); +} + #if defined(__gnu_linux__) static cpu_set_t ggml_get_numa_affinity(void) { cpu_set_t cpuset; diff --git a/ggml/src/ggml-cpu/llamafile/sgemm.cpp b/ggml/src/ggml-cpu/llamafile/sgemm.cpp index 1d46158f928c4..1c545f803327b 100644 --- a/ggml/src/ggml-cpu/llamafile/sgemm.cpp +++ b/ggml/src/ggml-cpu/llamafile/sgemm.cpp @@ -53,7 +53,6 @@ #include "ggml-cpu-impl.h" #include "ggml-quants.h" -#include #include #include @@ -394,8 +393,6 @@ class tinyBLAS { template NOINLINE void gemm(int64_t m, int64_t n, int64_t BN) { - static std::atomic current_chunk; - GGML_ASSERT(m % (RM * BM) == 0); const int64_t ytiles = m / (RM * BM); const int64_t xtiles = (n + RN -1) / RN; @@ -410,7 +407,7 @@ class tinyBLAS { if (params->ith == 0) { GGML_ASSERT( jj_BN * SIZE_BN + (NB_BN - jj_BN) * (SIZE_BN - 1) == xtiles); // Every thread starts at ith, so the first unprocessed chunk is nth. This save a bit of coordination right at the start. - std::atomic_store_explicit(¤t_chunk, (int64_t)params->nth, std::memory_order_relaxed); + ggml_threadpool_chunk_set(params->threadpool, params->nth); } ggml_barrier(params->threadpool); @@ -439,8 +436,7 @@ class tinyBLAS { GGML_ASSERT(jj == jj2); } - // next step. - job = std::atomic_fetch_add_explicit(¤t_chunk, (int64_t)1, std::memory_order_relaxed); + job = ggml_threadpool_chunk_add(params->threadpool, 1); } ggml_barrier(params->threadpool); diff --git a/src/llama.cpp b/src/llama.cpp index 2f06e0f8ce12d..34906cdb62844 100644 --- a/src/llama.cpp +++ b/src/llama.cpp @@ -198,14 +198,18 @@ static struct llama_model * llama_model_load_from_file_impl( // if using single GPU mode, remove all except the main GPU if (params.split_mode == LLAMA_SPLIT_MODE_NONE) { - if (params.main_gpu < 0 || params.main_gpu >= (int)model->devices.size()) { - LLAMA_LOG_ERROR("%s: invalid value for main_gpu: %d (available devices: %d)\n", __func__, params.main_gpu, (int)model->devices.size()); - llama_model_free(model); - return nullptr; + if (params.main_gpu < 0) { + model->devices.clear(); + } else { + if (params.main_gpu >= (int)model->devices.size()) { + LLAMA_LOG_ERROR("%s: invalid value for main_gpu: %d (available devices: %zu)\n", __func__, params.main_gpu, model->devices.size()); + llama_model_free(model); + return nullptr; + } + ggml_backend_dev_t main_gpu = model->devices[params.main_gpu]; + model->devices.clear(); + model->devices.push_back(main_gpu); } - ggml_backend_dev_t main_gpu = model->devices[params.main_gpu]; - model->devices.clear(); - model->devices.push_back(main_gpu); } for (auto * dev : model->devices) { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index db4b2cf65cc43..fc1557a2d4065 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -185,6 +185,8 @@ llama_build_and_test(test-json-partial.cpp) llama_build_and_test(test-log.cpp) llama_build_and_test(test-regex-partial.cpp) +llama_build_and_test(test-thread-safety.cpp ARGS -hf ggml-org/models -hff tinyllamas/stories15M-q4_0.gguf -ngl 99 -p "The meaning of life is" -n 128 -c 256 -ub 32 -np 4) + # this fails on windows (github hosted runner) due to curl DLL not found (exit code 0xc0000135) if (NOT WIN32) llama_build_and_test(test-arg-parser.cpp) diff --git a/tests/test-thread-safety.cpp b/tests/test-thread-safety.cpp new file mode 100644 index 0000000000000..d525b7430f9d9 --- /dev/null +++ b/tests/test-thread-safety.cpp @@ -0,0 +1,152 @@ +// thread safety test +// - Loads a copy of the same model on each GPU, plus a copy on the CPU +// - Creates n_parallel (--parallel) contexts per model +// - Runs inference in parallel on each context + +#include +#include +#include +#include "llama.h" +#include "arg.h" +#include "common.h" +#include "log.h" +#include "sampling.h" + +int main(int argc, char ** argv) { + common_params params; + + if (!common_params_parse(argc, argv, params, LLAMA_EXAMPLE_COMMON)) { + return 1; + } + + common_init(); + + llama_backend_init(); + llama_numa_init(params.numa); + + LOG_INF("%s\n", common_params_get_system_info(params).c_str()); + + //llama_log_set([](ggml_log_level level, const char * text, void * /*user_data*/) { + // if (level == GGML_LOG_LEVEL_ERROR) { + // common_log_add(common_log_main(), level, "%s", text); + // } + //}, NULL); + + auto cparams = common_context_params_to_llama(params); + + int dev_count = ggml_backend_dev_count(); + int gpu_dev_count = 0; + for (int i = 0; i < dev_count; ++i) { + auto * dev = ggml_backend_dev_get(i); + if (dev && ggml_backend_dev_type(dev) == GGML_BACKEND_DEVICE_TYPE_GPU) { + gpu_dev_count++; + } + } + const int num_models = gpu_dev_count + 1 + 1; // GPUs + 1 CPU model + 1 layer split + //const int num_models = std::max(1, gpu_dev_count); + const int num_contexts = std::max(1, params.n_parallel); + + std::vector models; + std::vector threads; + std::atomic failed = false; + + for (int m = 0; m < num_models; ++m) { + auto mparams = common_model_params_to_llama(params); + + if (m < gpu_dev_count) { + mparams.split_mode = LLAMA_SPLIT_MODE_NONE; + mparams.main_gpu = m; + } else if (m == gpu_dev_count) { + mparams.split_mode = LLAMA_SPLIT_MODE_NONE; + mparams.main_gpu = -1; // CPU model + } else { + mparams.split_mode = LLAMA_SPLIT_MODE_LAYER;; + } + + 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()); + return 1; + } + + models.emplace_back(model); + } + + for (int m = 0; m < num_models; ++m) { + auto * model = models[m].get(); + for (int c = 0; c < num_contexts; ++c) { + threads.emplace_back([&, m, c, model]() { + LOG_INF("Creating context %d/%d for model %d/%d\n", c + 1, num_contexts, m + 1, num_models); + + llama_context_ptr ctx { llama_init_from_model(model, cparams) }; + if (ctx == NULL) { + LOG_ERR("failed to create context\n"); + failed.store(true); + return; + } + + std::unique_ptr sampler { common_sampler_init(model, params.sampling), common_sampler_free }; + if (sampler == NULL) { + LOG_ERR("failed to create sampler\n"); + failed.store(true); + return; + } + + llama_batch batch = {}; + { + auto prompt = common_tokenize(ctx.get(), params.prompt, true); + if (prompt.empty()) { + LOG_ERR("failed to tokenize prompt\n"); + failed.store(true); + return; + } + batch = llama_batch_get_one(prompt.data(), prompt.size()); + if (llama_decode(ctx.get(), batch)) { + LOG_ERR("failed to decode prompt\n"); + failed.store(true); + return; + } + } + + const auto * vocab = llama_model_get_vocab(model); + std::string result = params.prompt; + + for (int i = 0; i < params.n_predict; i++) { + llama_token token; + if (batch.n_tokens > 0) { + token = common_sampler_sample(sampler.get(), ctx.get(), batch.n_tokens - 1); + } else { + token = llama_vocab_bos(vocab); + } + + result += common_token_to_piece(ctx.get(), token); + + if (llama_vocab_is_eog(vocab, token)) { + break; + } + + batch = llama_batch_get_one(&token, 1); + if (llama_decode(ctx.get(), batch)) { + LOG_ERR("Model %d/%d, Context %d/%d: failed to decode\n", m + 1, num_models, c + 1, num_contexts); + failed.store(true); + return; + } + } + + LOG_INF("Model %d/%d, Context %d/%d: %s\n\n", m + 1, num_models, c + 1, num_contexts, result.c_str()); + }); + } + } + + for (auto & thread : threads) { + thread.join(); + } + + if (failed) { + LOG_ERR("One or more threads failed.\n"); + return 1; + } + + LOG_INF("All threads finished without errors.\n"); + return 0; +} From 89fea80d298184d1cd93564f48e060d9f541f4b4 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 16 Jun 2025 22:33:27 +0300 Subject: [PATCH 64/95] server : fix incorrect usage of llama_get_embeddings() (#14225) * server : fix incorrect usage of llama_get_embeddings() ggml-ci * cont : fix the fix ggml-ci --- include/llama.h | 1 + tools/server/server.cpp | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/include/llama.h b/include/llama.h index b086b68e6d4ea..635508b10f2ff 100644 --- a/include/llama.h +++ b/include/llama.h @@ -965,6 +965,7 @@ extern "C" { LLAMA_API int32_t llama_n_threads_batch(struct llama_context * ctx); // Set whether the context outputs embeddings or not + // TODO: rename to avoid confusion with llama_get_embeddings() LLAMA_API void llama_set_embeddings(struct llama_context * ctx, bool embeddings); // Set whether to use causal attention or not diff --git a/tools/server/server.cpp b/tools/server/server.cpp index c08e421255fce..721d09182845d 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -1358,6 +1358,14 @@ struct server_slot { return server_task_type_need_logits(task_type); } + // if the context does not have a memory module then all embeddings have to be computed within a single ubatch + // also we cannot split if the pooling would require any past tokens + bool can_split() const { + return + !need_embd() || + (llama_get_memory(ctx) && llama_pooling_type(ctx) == LLAMA_POOLING_TYPE_LAST); + } + bool can_batch_with(server_slot & other_slot) const { return task_type == other_slot.task_type && are_lora_equal(lora, other_slot.lora); } @@ -1929,14 +1937,6 @@ struct server_context { llama_batch_free(batch); } - // if the context does not have a memory module then all embeddings have to be computed within a single ubatch - // also we cannot split if the pooling would require any past tokens - bool can_split() const { - return - !llama_get_embeddings(ctx) || - (llama_get_memory(ctx) && llama_pooling_type(ctx) == LLAMA_POOLING_TYPE_LAST); - } - bool load_model(const common_params & params) { SRV_INF("loading model '%s'\n", params.model.path.c_str()); @@ -3130,7 +3130,7 @@ struct server_context { continue; } - if (!can_split()) { + if (!slot.can_split()) { if (slot.n_prompt_tokens > n_ubatch) { slot.release(); send_error(slot, "input is too large to process. increase the physical batch size", ERROR_TYPE_SERVER); @@ -3273,7 +3273,7 @@ struct server_context { slot.n_prompt_tokens_processed = 0; } - if (!can_split()) { + if (!slot.can_split()) { // cannot fit the prompt in the current batch - will try next iter if (batch.n_tokens + slot.n_prompt_tokens > n_batch) { continue; From e434e69183fd9e1031f4445002083178c331a28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Mon, 16 Jun 2025 21:58:42 +0200 Subject: [PATCH 65/95] common : suggest --jinja when autodetection fails (#14222) --- common/chat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/chat.cpp b/common/chat.cpp index 0dad14fba9ba5..7d9aaeb12a190 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -1838,7 +1838,7 @@ static common_chat_params common_chat_templates_apply_legacy( if (res < 0) { // if the custom "tmpl" is not supported, we throw an error // this is a bit redundant (for good), since we're not sure if user validated the custom template with llama_chat_verify_template() - throw std::runtime_error("this custom template is not supported"); + throw std::runtime_error("this custom template is not supported, try using --jinja"); } // if it turns out that our buffer is too small, we resize it From fe9d60e74a6cb71bcaed2029377bfa2872b4abb0 Mon Sep 17 00:00:00 2001 From: R0CKSTAR Date: Tue, 17 Jun 2025 17:48:08 +0800 Subject: [PATCH 66/95] musa: fix build warning (unused variable) (#14231) Signed-off-by: Xiaodong Ye --- ggml/src/ggml-cuda/ggml-cuda.cu | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 0bd2904e1c9d1..898b24341471d 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -2664,7 +2664,9 @@ static void evaluate_and_capture_cuda_graph(ggml_backend_cuda_context * cuda_ctx ggml_backend_buft_is_cuda_split(node->src[j]->buffer->buft) || (integrated && ggml_backend_buft_is_cuda_host(node->src[j]->buffer->buft))); } } -#endif +#else + GGML_UNUSED(integrated); +#endif // NDEBUG bool ok = ggml_cuda_compute_forward(*cuda_ctx, node); if (!ok) { From 860a9e4eeff3eb2e7bd1cc38f65787cc6c8177af Mon Sep 17 00:00:00 2001 From: xctan Date: Tue, 17 Jun 2025 17:58:32 +0800 Subject: [PATCH 67/95] ggml-cpu : remove the weak alias trick (#14221) --- ggml/src/ggml-cpu/apple-fallback.h | 88 -------------- ggml/src/ggml-cpu/arch-fallback.h | 184 +++++++++++++++++++++++++++++ ggml/src/ggml-cpu/ggml-cpu-impl.h | 25 ---- ggml/src/ggml-cpu/quants.c | 28 +---- ggml/src/ggml-cpu/repack.cpp | 17 +-- ggml/src/ggml-cpu/repack.h | 5 - 6 files changed, 186 insertions(+), 161 deletions(-) delete mode 100644 ggml/src/ggml-cpu/apple-fallback.h create mode 100644 ggml/src/ggml-cpu/arch-fallback.h diff --git a/ggml/src/ggml-cpu/apple-fallback.h b/ggml/src/ggml-cpu/apple-fallback.h deleted file mode 100644 index f477505d787a7..0000000000000 --- a/ggml/src/ggml-cpu/apple-fallback.h +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -// Solve alias issue for Apple targets (currently PowerPC, x86, and ARM64). -// Mach-O has a weak alias equivalent but no practical compiler support can -// be found, so we need to do it manually. -// ref: https://stackoverflow.com/questions/42757744 -// -// This file is a complement to native implementations in the `arch` folder. -// A kernel in quants.c or repack.cpp is either: -// - implemented in the `arch` folder, or -// - defined in this file to remove the `_generic` suffix - -#if defined(GGML_CPU_GENERIC) -// quants.c -#define quantize_row_q8_0_generic quantize_row_q8_0 -#define quantize_row_q8_1_generic quantize_row_q8_1 -#define quantize_row_q8_K_generic quantize_row_q8_K -#define ggml_vec_dot_q4_0_q8_0_generic ggml_vec_dot_q4_0_q8_0 -#define ggml_vec_dot_q4_1_q8_1_generic ggml_vec_dot_q4_1_q8_1 -#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_q8_0_q8_0_generic ggml_vec_dot_q8_0_q8_0 -#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 -#define ggml_vec_dot_q3_K_q8_K_generic ggml_vec_dot_q3_K_q8_K -#define ggml_vec_dot_q4_K_q8_K_generic ggml_vec_dot_q4_K_q8_K -#define ggml_vec_dot_q5_K_q8_K_generic ggml_vec_dot_q5_K_q8_K -#define ggml_vec_dot_q6_K_q8_K_generic ggml_vec_dot_q6_K_q8_K -#define ggml_vec_dot_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K -#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K -#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K -#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K -#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K -#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K -#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K -#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0 -#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K -// 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 -#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 -#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 -#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 -#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 -#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K -#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 -#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 -#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 -#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 -#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K -#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 -#elif defined(__aarch64__) || defined(__arm__) -// repack.cpp -#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 -#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K -#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K -#elif defined(__x86_64__) || defined(__i386__) -// repack.cpp -#define ggml_quantize_mat_q8_0_4x4_generic ggml_quantize_mat_q8_0_4x4 -#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 -#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 -#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 -#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 -#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 -#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 -#elif defined(__POWERPC__) -// ref: https://github.com/ggml-org/llama.cpp/pull/14146#issuecomment-2972561679 -// quants.c -#define quantize_row_q8_K_generic quantize_row_q8_K -#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 -// 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 -#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 -#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 -#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 -#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 -#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K -#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 -#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 -#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 -#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 -#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K -#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 -#endif diff --git a/ggml/src/ggml-cpu/arch-fallback.h b/ggml/src/ggml-cpu/arch-fallback.h new file mode 100644 index 0000000000000..10e5342516a9c --- /dev/null +++ b/ggml/src/ggml-cpu/arch-fallback.h @@ -0,0 +1,184 @@ +#pragma once + +// Rename `_generic` functions if no native implementation is available. +// This effectively selects the generic implementation. + +#if defined(GGML_CPU_GENERIC) +// quants.c +#define quantize_row_q8_0_generic quantize_row_q8_0 +#define quantize_row_q8_1_generic quantize_row_q8_1 +#define quantize_row_q8_K_generic quantize_row_q8_K +#define ggml_vec_dot_q4_0_q8_0_generic ggml_vec_dot_q4_0_q8_0 +#define ggml_vec_dot_q4_1_q8_1_generic ggml_vec_dot_q4_1_q8_1 +#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_q8_0_q8_0_generic ggml_vec_dot_q8_0_q8_0 +#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 +#define ggml_vec_dot_q3_K_q8_K_generic ggml_vec_dot_q3_K_q8_K +#define ggml_vec_dot_q4_K_q8_K_generic ggml_vec_dot_q4_K_q8_K +#define ggml_vec_dot_q5_K_q8_K_generic ggml_vec_dot_q5_K_q8_K +#define ggml_vec_dot_q6_K_q8_K_generic ggml_vec_dot_q6_K_q8_K +#define ggml_vec_dot_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K +#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K +#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K +#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K +#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K +#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K +#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K +#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0 +#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__aarch64__) || defined(__arm__) || defined(_M_ARM) || defined(_M_ARM64) +// repack.cpp +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#elif defined(__x86_64__) || defined(__i386__) || defined(_M_IX86) || defined(_M_X64) +// repack.cpp +#define ggml_quantize_mat_q8_0_4x4_generic ggml_quantize_mat_q8_0_4x4 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__POWERPC__) || defined(__powerpc__) +// ref: https://github.com/ggml-org/llama.cpp/pull/14146#issuecomment-2972561679 +// quants.c +#define quantize_row_q8_K_generic quantize_row_q8_K +#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 +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__loongarch64) +// quants.c +#define quantize_row_q8_K_generic quantize_row_q8_K +#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 +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__riscv) +// quants.c +#define quantize_row_q8_K_generic quantize_row_q8_K +#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_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K +#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K +#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K +#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K +#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K +#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K +#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K +#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0 +#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#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 +#define ggml_vec_dot_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K +#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K +#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K +#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K +#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K +#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K +#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#elif defined(__wasm__) +// quants.c +#define ggml_vec_dot_q4_1_q8_1_generic ggml_vec_dot_q4_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_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K +#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K +#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K +#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K +#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K +#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K +#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K +#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0 +#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K +// 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 +#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8 +#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0 +#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0 +#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0 +#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K +#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0 +#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0 +#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0 +#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0 +#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K +#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0 +#endif diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index ae68cd006336d..bbd93c0ef66fe 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -509,28 +509,3 @@ int ggml_threadpool_chunk_add(struct ggml_threadpool * tp, int value); #ifdef __cplusplus } #endif - -#define GGML_DO_PRAGMA_(x) _Pragma (#x) -#define GGML_DO_PRAGMA(x) GGML_DO_PRAGMA_(x) -#if defined(GGML_CPU_GENERIC) || defined(__HIPCC__) || defined(__APPLE__) -// Note for Apple targets: -// - clang: aliases are not supported on darwin -// - all native kernels need to be implemented in both x86 and arm files -// - on iOS, tvOS, and visionOS, if cmake cannot determine the target architecture, all `_generic` names are replaced by defines -# define GGML_WEAK_ALIAS(name, alias) -#elif defined(__GNUC__) -// GCC/Clang on *nix -# define GGML_WEAK_ALIAS(name, alias) GGML_DO_PRAGMA(weak name = alias) // NOLINT -#elif defined(_MSC_VER) && defined(_WIN64) -// MSVC -// Note: C name mangling varies across different calling conventions -// see https://learn.microsoft.com/en-us/cpp/build/reference/decorated-names?view=msvc-170 -# define GGML_WEAK_ALIAS(name, alias) GGML_DO_PRAGMA(comment(linker, "/alternatename:" #name "=" #alias)) -#elif defined(_MSC_VER) && defined(WIN32) -// ref: https://github.com/ggml-org/whisper.cpp/pull/3239#issuecomment-2958224591 -# define GGML_WEAK_ALIAS(name, alias) GGML_DO_PRAGMA(comment(linker, "/alternatename:_" #name "=_" #alias)) -#else -# error "Unsupported compiler for GGML_WEAK_ALIAS" -#endif - -#define GGML_CPU_NATIVE_IMPL(name) GGML_WEAK_ALIAS(name, name ## _generic) diff --git a/ggml/src/ggml-cpu/quants.c b/ggml/src/ggml-cpu/quants.c index 516c5b2ced06d..d2e705f287af5 100644 --- a/ggml/src/ggml-cpu/quants.c +++ b/ggml/src/ggml-cpu/quants.c @@ -5,9 +5,7 @@ #include "ggml-quants.h" #include "quants.h" -#if defined(__APPLE__) -#include "apple-fallback.h" -#endif +#include "arch-fallback.h" #include #include @@ -42,12 +40,10 @@ void quantize_row_q5_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, in void quantize_row_q8_0_generic(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k) { quantize_row_q8_0_ref(x, y, k); } -GGML_CPU_NATIVE_IMPL(quantize_row_q8_0) void quantize_row_q8_1_generic(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k) { quantize_row_q8_1_ref(x, y, k); } -GGML_CPU_NATIVE_IMPL(quantize_row_q8_1) // // 2-6 bit quantization in super-blocks @@ -108,7 +104,6 @@ void quantize_row_tq2_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, void quantize_row_q8_K_generic(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k) { quantize_row_q8_K_ref(x, y, k); } -GGML_CPU_NATIVE_IMPL(quantize_row_q8_K) //===================================== Dot products ================================= @@ -147,7 +142,6 @@ void ggml_vec_dot_q4_0_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, c *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q4_0_q8_0) // TODO: add WASM SIMD void ggml_vec_dot_q4_1_q8_1_generic(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) { @@ -185,7 +179,6 @@ void ggml_vec_dot_q4_1_q8_1_generic(int n, float * GGML_RESTRICT s, size_t bs, c *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q4_1_q8_1) void ggml_vec_dot_q5_0_q8_0_generic(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; @@ -229,7 +222,6 @@ void ggml_vec_dot_q5_0_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, c *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q5_0_q8_0) void ggml_vec_dot_q5_1_q8_1_generic(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; @@ -273,7 +265,6 @@ void ggml_vec_dot_q5_1_q8_1_generic(int n, float * GGML_RESTRICT s, size_t bs, c *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q5_1_q8_1) void ggml_vec_dot_q8_0_q8_0_generic(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; @@ -304,7 +295,6 @@ void ggml_vec_dot_q8_0_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, c *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q8_0_q8_0) void ggml_vec_dot_tq1_0_q8_K_generic(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); @@ -357,7 +347,6 @@ void ggml_vec_dot_tq1_0_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_tq1_0_q8_K) void ggml_vec_dot_tq2_0_q8_K_generic(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); @@ -390,7 +379,6 @@ void ggml_vec_dot_tq2_0_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_tq2_0_q8_K) void ggml_vec_dot_q2_K_q8_K_generic(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); @@ -443,7 +431,6 @@ void ggml_vec_dot_q2_K_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, c } *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q2_K_q8_K) void ggml_vec_dot_q3_K_q8_K_generic(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(n % QK_K == 0); @@ -523,7 +510,6 @@ void ggml_vec_dot_q3_K_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, c for (int l = 0; l < 8; ++l) sumf += sums[l]; *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q3_K_q8_K) void ggml_vec_dot_q4_K_q8_K_generic(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(n % QK_K == 0); @@ -599,7 +585,6 @@ void ggml_vec_dot_q4_K_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, c for (int l = 0; l < 8; ++l) sumf += sums[l]; *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q4_K_q8_K) void ggml_vec_dot_q5_K_q8_K_generic(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(n % QK_K == 0); @@ -680,7 +665,6 @@ void ggml_vec_dot_q5_K_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, c for (int l = 0; l < 8; ++l) sumf += sums[l]; *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q5_K_q8_K) void ggml_vec_dot_q6_K_q8_K_generic(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(n % QK_K == 0); @@ -736,7 +720,6 @@ void ggml_vec_dot_q6_K_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, c for (int l = 0; l < 8; ++l) sumf += sums[l]; *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_q6_K_q8_K) void ggml_vec_dot_iq2_xxs_q8_K_generic(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(n % QK_K == 0); @@ -779,7 +762,6 @@ void ggml_vec_dot_iq2_xxs_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs } *s = 0.125f * sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq2_xxs_q8_K) void ggml_vec_dot_iq2_xs_q8_K_generic(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(n % QK_K == 0); @@ -830,7 +812,6 @@ void ggml_vec_dot_iq2_xs_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, } *s = 0.125f * sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq2_xs_q8_K) void ggml_vec_dot_iq2_s_q8_K_generic(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(n % QK_K == 0); @@ -883,7 +864,6 @@ void ggml_vec_dot_iq2_s_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, *s = 0.125f * sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq2_s_q8_K) void ggml_vec_dot_iq3_xxs_q8_K_generic(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(n % QK_K == 0); @@ -928,7 +908,6 @@ void ggml_vec_dot_iq3_xxs_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs } *s = 0.25f * sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq3_xxs_q8_K) void ggml_vec_dot_iq3_s_q8_K_generic(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(n % QK_K == 0); @@ -985,7 +964,6 @@ void ggml_vec_dot_iq3_s_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, } *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq3_s_q8_K) void ggml_vec_dot_iq1_s_q8_K_generic(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(n % QK_K == 0); @@ -1029,7 +1007,6 @@ void ggml_vec_dot_iq1_s_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq1_s_q8_K) void ggml_vec_dot_iq1_m_q8_K_generic(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(n % QK_K == 0); @@ -1091,7 +1068,6 @@ void ggml_vec_dot_iq1_m_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq1_m_q8_K) void ggml_vec_dot_iq4_nl_q8_0_generic(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); @@ -1121,7 +1097,6 @@ void ggml_vec_dot_iq4_nl_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, } *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq4_nl_q8_0) void ggml_vec_dot_iq4_xs_q8_K_generic(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); @@ -1168,7 +1143,6 @@ void ggml_vec_dot_iq4_xs_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, } *s = sumf; } -GGML_CPU_NATIVE_IMPL(ggml_vec_dot_iq4_xs_q8_K) // ============================ 4-bit non-linear quants diff --git a/ggml/src/ggml-cpu/repack.cpp b/ggml/src/ggml-cpu/repack.cpp index 604ccee907843..5c6715d5c01ea 100644 --- a/ggml/src/ggml-cpu/repack.cpp +++ b/ggml/src/ggml-cpu/repack.cpp @@ -8,9 +8,7 @@ #include "ggml-cpu-impl.h" #include "traits.h" -#if defined(__APPLE__) -#include "apple-fallback.h" -#endif +#include "arch-fallback.h" #include #include @@ -87,7 +85,6 @@ void ggml_quantize_mat_q8_0_4x4_generic(const float * GGML_RESTRICT x, void * GG } } } -GGML_CPU_NATIVE_IMPL(ggml_quantize_mat_q8_0_4x4) void ggml_quantize_mat_q8_0_4x8_generic(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k) { assert(QK8_0 == 32); @@ -126,7 +123,6 @@ void ggml_quantize_mat_q8_0_4x8_generic(const float * GGML_RESTRICT x, void * GG } } } -GGML_CPU_NATIVE_IMPL(ggml_quantize_mat_q8_0_4x8) void ggml_quantize_mat_q8_K_4x8_generic(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k) { assert(QK_K == 256); @@ -178,7 +174,6 @@ void ggml_quantize_mat_q8_K_4x8_generic(const float * GGML_RESTRICT x, void * GG } } } -GGML_CPU_NATIVE_IMPL(ggml_quantize_mat_q8_K_4x8) } // extern "C" @@ -248,7 +243,6 @@ void ggml_gemv_q4_0_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, for (int j = 0; j < ncols_interleaved; j++) s[x * ncols_interleaved + j] = sumf[j]; } } -GGML_CPU_NATIVE_IMPL(ggml_gemv_q4_0_4x4_q8_0) void ggml_gemv_q4_0_4x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -293,7 +287,6 @@ void ggml_gemv_q4_0_4x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, for (int j = 0; j < ncols_interleaved; j++) s[x * ncols_interleaved + j] = sumf[j]; } } -GGML_CPU_NATIVE_IMPL(ggml_gemv_q4_0_4x8_q8_0) void ggml_gemv_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -340,7 +333,6 @@ void ggml_gemv_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, } } } -GGML_CPU_NATIVE_IMPL(ggml_gemv_q4_0_8x8_q8_0) void ggml_gemv_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK_K; @@ -419,7 +411,6 @@ void ggml_gemv_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, } } } -GGML_CPU_NATIVE_IMPL(ggml_gemv_q4_K_8x8_q8_K) void ggml_gemv_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -466,7 +457,6 @@ void ggml_gemv_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs } } } -GGML_CPU_NATIVE_IMPL(ggml_gemv_iq4_nl_4x4_q8_0) void ggml_gemm_q4_0_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -523,7 +513,6 @@ void ggml_gemm_q4_0_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, } } } -GGML_CPU_NATIVE_IMPL(ggml_gemm_q4_0_4x4_q8_0) void ggml_gemm_q4_0_4x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -578,7 +567,6 @@ void ggml_gemm_q4_0_4x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, } } } -GGML_CPU_NATIVE_IMPL(ggml_gemm_q4_0_4x8_q8_0) void ggml_gemm_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -633,7 +621,6 @@ void ggml_gemm_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, } } } -GGML_CPU_NATIVE_IMPL(ggml_gemm_q4_0_8x8_q8_0) void ggml_gemm_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK_K; @@ -723,7 +710,6 @@ void ggml_gemm_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, } } } -GGML_CPU_NATIVE_IMPL(ggml_gemm_q4_K_8x8_q8_K) void ggml_gemm_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc) { const int qk = QK8_0; @@ -780,7 +766,6 @@ void ggml_gemm_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs } } } -GGML_CPU_NATIVE_IMPL(ggml_gemm_iq4_nl_4x4_q8_0) } // extern "C" diff --git a/ggml/src/ggml-cpu/repack.h b/ggml/src/ggml-cpu/repack.h index b13d2d0c73495..4421e5f8e7046 100644 --- a/ggml/src/ggml-cpu/repack.h +++ b/ggml/src/ggml-cpu/repack.h @@ -64,10 +64,6 @@ static_assert(sizeof(block_iq4_nlx4) == 4 * sizeof(ggml_half) + QK4_NL * 2, "wro extern "C" { #endif -// Workaround for clang: -// clang++ complains: ``error: call to 'ggml_gemm_q4_0_4x4_q8_0' is ambiguous'' -// repro: https://godbolt.org/z/oKdeWKonM (ICE), https://godbolt.org/z/1szq6P36v (ambiguous call) -#if defined(GGML_CPU_CLANG_WORKAROUND) || defined(__APPLE__) || !(defined(__GNUC__) && defined(__clang__)) || defined(__HIPCC__) void ggml_quantize_mat_q8_0_4x4(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); void ggml_quantize_mat_q8_0_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); void ggml_quantize_mat_q8_K_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); @@ -81,7 +77,6 @@ void ggml_gemm_q4_0_4x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo void ggml_gemm_q4_0_8x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc); void ggml_gemm_q4_K_8x8_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc); void ggml_gemm_iq4_nl_4x4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc); -#endif // !defined(__clang__) // Native implementations void ggml_quantize_mat_q8_0_4x4_generic(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k); From c46503014db0d63fa7b1b28c58adfb51054e2dec Mon Sep 17 00:00:00 2001 From: bandoti <141645996+bandoti@users.noreply.github.com> Date: Tue, 17 Jun 2025 17:33:25 -0300 Subject: [PATCH 68/95] cmake: remove shader-gen step-targets from ggml-vulkan (#14226) * Remove step-targets from vulkan-shaders-gen * Unset DESTDIR when building vulkan-shaders-gen --- ggml/src/ggml-vulkan/CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index 95e2ebe643732..39f022f33d856 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -144,9 +144,15 @@ if (Vulkan_FOUND) ${VULKAN_SHADER_GEN_CMAKE_ARGS} BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $ - INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config $ + + # NOTE: When DESTDIR is set using Makefile generators and + # "make install" triggers the build step, vulkan-shaders-gen + # would be installed into the DESTDIR prefix, so it is unset + # to ensure that does not happen. + + INSTALL_COMMAND ${CMAKE_COMMAND} -E env --unset=DESTDIR + ${CMAKE_COMMAND} --install . --config $ ) - ExternalProject_Add_StepTargets(vulkan-shaders-gen build install) set (_ggml_vk_host_suffix $,.exe,>) set (_ggml_vk_genshaders_dir "${CMAKE_BINARY_DIR}/$") @@ -172,8 +178,6 @@ if (Vulkan_FOUND) DEPENDS ${_ggml_vk_shader_files} vulkan-shaders-gen - vulkan-shaders-gen-build - vulkan-shaders-gen-install COMMENT "Generate vulkan shaders" ) From c2056ed6d461e6d5432f04f221e221ab795dc652 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 12 Jun 2025 12:27:09 +0200 Subject: [PATCH 69/95] examples : include examples in msvc disable warn (ggml/1270) This commit adds the examples in the "list" of targets to ignore MSVC warnings. The motivation for this is that currently the examples generate a number of warnings that are ignore/disabled for the core ggml project. This makes for a cleaner output when building. --- ggml/CMakeLists.txt | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 7b398ae8e30ed..fe0acc81e6ace 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -368,6 +368,7 @@ if (MSVC) /wd4005 # Macro redefinition /wd4244 # Conversion from one type to another type, possible loss of data /wd4267 # Conversion from 'size_t' to a smaller type, possible loss of data + /wd4566 # Conversion from 'char' to 'wchar_t', possible loss of data /wd4996 # Disable POSIX deprecation warnings /wd4702 # Unreachable code warnings ) @@ -387,4 +388,30 @@ if (MSVC) disable_msvc_warnings(ggml-cpu-skylakex) disable_msvc_warnings(ggml-cpu-icelake) disable_msvc_warnings(ggml-cpu-alderlake) + + if (GGML_BUILD_EXAMPLES) + disable_msvc_warnings(common-ggml) + disable_msvc_warnings(common) + + disable_msvc_warnings(mnist-common) + disable_msvc_warnings(mnist-eval) + disable_msvc_warnings(mnist-train) + + disable_msvc_warnings(gpt-2-ctx) + disable_msvc_warnings(gpt-2-alloc) + disable_msvc_warnings(gpt-2-backend) + disable_msvc_warnings(gpt-2-sched) + disable_msvc_warnings(gpt-2-quantize) + disable_msvc_warnings(gpt-2-batched) + + disable_msvc_warnings(gpt-j) + disable_msvc_warnings(gpt-j-quantize) + + disable_msvc_warnings(magika) + disable_msvc_warnings(yolov3-tiny) + disable_msvc_warnings(sam) + + disable_msvc_warnings(simple-ctx) + disable_msvc_warnings(simple-backend) + endif() endif() From bbe98d27840453c8787d18470963530fdc27d89f Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Fri, 13 Jun 2025 09:05:44 +0200 Subject: [PATCH 70/95] ggml : remove unused ggml_context_container (ggml/1272) This commit removes the unused `ggml_context_container` structure from the ggml library. It looks like the usage of this struct was removed in Commit 4757fe18d56ec11bf9c07feaca6e9d5b5357e7f4 ("ggml : alloc ggml_contexts on the heap (whisper/2525)"). The motivation for this changes is to improve code clarity/readability. --- ggml/src/ggml.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c index 196b7b8f3e2ae..a8edad3778aa9 100644 --- a/ggml/src/ggml.c +++ b/ggml/src/ggml.c @@ -888,12 +888,6 @@ struct ggml_context { struct ggml_object * objects_end; }; -struct ggml_context_container { - bool used; - - struct ggml_context context; -}; - // // data types // From dd8e59f4435342eda93c5b0cf4109e21c9c7d0eb Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Fri, 13 Jun 2025 15:06:42 +0200 Subject: [PATCH 71/95] ggml : disable warnings for tests when using MSVC (ggml/1273) * ggml : disable warnings for tests when using MSVC This commit disables warnings for tests on windows when using MSVC. The motivation for this is that this brings the build output more inline with what Linux/MacOS systems produce. There is still one warning generated for the tests which is: ```console Building Custom Rule C:/ggml/tests/CMakeLists.txt cl : command line warning D9025: overriding '/DNDEBUG' with '/UNDEBUG' [C:\ggml\build\tests\test-arange.vcxproj] test-arange.cpp test-arange.vcxproj -> C:\ggml\build\bin\Release\test-arange.exe ``` * ggml : fix typo in tests disable list --- ggml/CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index fe0acc81e6ace..4e7399f9e68f9 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -368,6 +368,7 @@ if (MSVC) /wd4005 # Macro redefinition /wd4244 # Conversion from one type to another type, possible loss of data /wd4267 # Conversion from 'size_t' to a smaller type, possible loss of data + /wd4305 # Conversion from 'type1' to 'type2', possible loss of data /wd4566 # Conversion from 'char' to 'wchar_t', possible loss of data /wd4996 # Disable POSIX deprecation warnings /wd4702 # Unreachable code warnings @@ -414,4 +415,20 @@ if (MSVC) disable_msvc_warnings(simple-ctx) disable_msvc_warnings(simple-backend) endif() + + if (GGML_BUILD_TESTS) + disable_msvc_warnings(test-mul-mat) + disable_msvc_warnings(test-arange) + disable_msvc_warnings(test-backend-ops) + disable_msvc_warnings(test-cont) + disable_msvc_warnings(test-conv-transpose) + disable_msvc_warnings(test-conv-transpose-1d) + disable_msvc_warnings(test-conv1d) + disable_msvc_warnings(test-conv2d) + disable_msvc_warnings(test-conv2d-dw) + disable_msvc_warnings(test-customop) + disable_msvc_warnings(test-dup) + disable_msvc_warnings(test-opt) + disable_msvc_warnings(test-pool) + endif () endif() From d03172cc797b6adbbc00bfc09caf614fb0f895a0 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 18 Jun 2025 09:58:23 +0300 Subject: [PATCH 72/95] sync : ggml ggml-ci --- 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 914fe47ff6a34..bb5d56a0e0c92 100644 --- a/scripts/sync-ggml.last +++ b/scripts/sync-ggml.last @@ -1 +1 @@ -6a7d170c04789f6ebcf320ed03c1b16973f93bd7 +8cda0a3c19f2c7dc493887353c42f6956bc268b1 From 3865cff4f5b84c16119590efd6ce537789a27715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Wed, 18 Jun 2025 09:52:07 +0200 Subject: [PATCH 73/95] convert : fix null head_dim AutoConfig regression (#14248) --- convert_hf_to_gguf.py | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 58e455ae645ed..b754dd815a2dc 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -556,11 +556,8 @@ def set_gguf_parameters(self): logger.info(f"gguf: experts used count = {n_experts_used}") if (head_dim := self.hparams.get("head_dim")) is not None: - # Workaround for incorrect AutoConfig value for DeepSeekV3 (is set correctly in DeepSeekV2Model class) - # https://github.com/huggingface/transformers/blob/19224c3642705c5b6988c9f5f4251f83323d05ae/src/transformers/models/deepseek_v3/configuration_deepseek_v3.py#L210 - if self.hparams.get("model_type") != "deepseek_v3": - self.gguf_writer.add_key_length(head_dim) - self.gguf_writer.add_value_length(head_dim) + self.gguf_writer.add_key_length(head_dim) + self.gguf_writer.add_value_length(head_dim) self.gguf_writer.add_file_type(self.ftype) logger.info(f"gguf: file type = {self.ftype}") @@ -1901,9 +1898,7 @@ def set_gguf_parameters(self): hparams = self.hparams self.gguf_writer.add_vocab_size(hparams["vocab_size"]) - if "head_dim" in hparams: - rope_dim = hparams["head_dim"] - else: + if (rope_dim := hparams.get("head_dim")) is None: rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"] self.gguf_writer.add_rope_dimension_count(rope_dim) @@ -1985,7 +1980,8 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: if rope_scaling := self.find_hparam(["rope_scaling"], optional=True): if rope_scaling.get("rope_type", '').lower() == "llama3": base = self.hparams.get("rope_theta", 10000.0) - dim = self.hparams.get("head_dim", self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) + if (dim := self.hparams.get("head_dim")) is None: + dim = self.hparams["hidden_size"] // self.hparams["num_attention_heads"] freqs = 1.0 / (base ** (torch.arange(0, dim, 2, dtype=torch.float32) / dim)) factor = rope_scaling.get("factor", 8.0) @@ -2321,9 +2317,7 @@ def set_gguf_parameters(self): hparams = self.hparams self.gguf_writer.add_vocab_size(hparams["vocab_size"]) - if "head_dim" in hparams: - rope_dim = hparams["head_dim"] - else: + if (rope_dim := hparams.get("head_dim")) is None: rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"] self.gguf_writer.add_rope_dimension_count(rope_dim) @@ -2363,7 +2357,8 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: if rope_scaling := self.find_hparam(["rope_scaling"], optional=True): if rope_scaling.get("rope_type", '').lower() == "llama3": base = self.hparams.get("rope_theta", 10000.0) - dim = self.hparams.get("head_dim", self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) + if (dim := self.hparams.get("head_dim")) is None: + dim = self.hparams["hidden_size"] // self.hparams["num_attention_heads"] freqs = 1.0 / (base ** (torch.arange(0, dim, 2, dtype=torch.float32) / dim)) factor = rope_scaling.get("factor", 8.0) @@ -3681,9 +3676,7 @@ def set_gguf_parameters(self): hparams = self.hparams self.gguf_writer.add_vocab_size(hparams["vocab_size"]) - if "head_dim" in hparams: - rope_dim = hparams["head_dim"] - else: + if (rope_dim := hparams.get("head_dim")) is None: rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"] self.gguf_writer.add_rope_dimension_count(rope_dim) @@ -5098,9 +5091,7 @@ def set_vocab(self): def set_gguf_parameters(self): super().set_gguf_parameters() hparams = self.hparams - if "head_dim" in hparams: - rope_dim = hparams["head_dim"] - else: + if (rope_dim := hparams.get("head_dim")) is None: rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"] self.gguf_writer.add_rope_dimension_count(rope_dim) @@ -5990,7 +5981,8 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: if rope_scaling := self.find_hparam(["rope_scaling"], optional=True): if rope_scaling.get("rope_type", '').lower() == "llama3": base = self.hparams.get("rope_theta", 10000.0) - dim = self.hparams.get("head_dim", self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) + if (dim := self.hparams.get("head_dim")) is None: + dim = self.hparams["hidden_size"] // self.hparams["num_attention_heads"] freqs = 1.0 / (base ** (torch.arange(0, dim, 2, dtype=torch.float32) / dim)) factor = rope_scaling.get("factor", 8.0) @@ -6102,7 +6094,8 @@ def set_vocab(self): def set_gguf_parameters(self): super().set_gguf_parameters() hparams = self.hparams - rope_dim = hparams.get("head_dim") or hparams["hidden_size"] // hparams["num_attention_heads"] + if (rope_dim := hparams.get("head_dim")) is None: + rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"] self.gguf_writer.add_rope_dimension_count(rope_dim) rope_scaling = self.hparams.get("rope_scaling") or {} @@ -6134,7 +6127,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter n_head = self.hparams["num_attention_heads"] n_kv_head = self.hparams.get("num_key_value_heads") n_embd = self.hparams["hidden_size"] - head_dim = self.hparams.get("head_dim") or n_embd // n_head + if (head_dim := self.hparams.get("head_dim")) is None: + head_dim = n_embd // n_head output_name = self.format_tensor_name(gguf.MODEL_TENSOR.OUTPUT) From 95402553a5effc61ddc9e29c7bcb56f71311dd4a Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Wed, 18 Jun 2025 09:58:43 +0200 Subject: [PATCH 74/95] llama-chat : fix multiple system message for gemma, orion (#14246) --- 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 bc4fa05a74ef4..0839cad3ee6db 100644 --- a/src/llama-chat.cpp +++ b/src/llama-chat.cpp @@ -333,7 +333,7 @@ int32_t llm_chat_apply_template( std::string role(message->role); if (role == "system") { // there is no system message for gemma, but we will merge it with user prompt, so nothing is broken - system_prompt = trim(message->content); + system_prompt += trim(message->content); continue; } // in gemma, "assistant" is "model" @@ -355,7 +355,7 @@ int32_t llm_chat_apply_template( std::string role(message->role); if (role == "system") { // there is no system message support, we will merge it with user prompt - system_prompt = message->content; + system_prompt += message->content; continue; } else if (role == "user") { ss << "Human: "; From 413977de32e90712ecec84d0b9c738847da8dc02 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Wed, 18 Jun 2025 10:43:57 +0200 Subject: [PATCH 75/95] mtmd : refactor llava-uhd preprocessing logic (#14247) * mtmd : refactor llava-uhd preprocessing logic * fix editorconfig --- tools/mtmd/clip.cpp | 183 ++++++++++++++++++++++++++------------------ tools/mtmd/clip.h | 3 - tools/mtmd/mtmd.cpp | 6 +- 3 files changed, 111 insertions(+), 81 deletions(-) diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index c25bacc17769b..30283d6f1f032 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -187,7 +187,7 @@ struct clip_hparams { float eps = 1e-6; float rope_theta = 0.0; - std::vector image_grid_pinpoints; + std::vector image_res_candidates; // for llava-uhd style models int32_t image_crop_resolution; std::unordered_set vision_feature_layer; int32_t attn_window_size = 0; @@ -2109,8 +2109,7 @@ struct clip_model_loader { if (is_vision) { get_u32(KEY_IMAGE_SIZE, hparams.image_size); get_u32(KEY_PATCH_SIZE, hparams.patch_size); - get_u32(KEY_IMAGE_CROP_RESOLUTION, hparams.image_crop_resolution, false); - get_arr_int(KEY_IMAGE_GRID_PINPOINTS, hparams.image_grid_pinpoints, false); + get_u32(KEY_IMAGE_CROP_RESOLUTION, hparams.image_crop_resolution, false); get_i32(KEY_MINICPMV_VERSION, hparams.minicpmv_version, false); // legacy } else if (is_audio) { @@ -2120,6 +2119,20 @@ struct clip_model_loader { GGML_ASSERT(false && "unknown modality"); } + // for pinpoints, we need to convert it into a list of resolution candidates + { + std::vector pinpoints; + get_arr_int(KEY_IMAGE_GRID_PINPOINTS, pinpoints, false); + if (!pinpoints.empty()) { + for (size_t i = 0; i < pinpoints.size(); i += 2) { + hparams.image_res_candidates.push_back({ + pinpoints[i], + pinpoints[i+1], + }); + } + } + } + // default warmup value hparams.warmup_image_size = hparams.image_size; @@ -2231,16 +2244,7 @@ struct clip_model_loader { { hparams.rope_theta = 10000.0f; get_u32(KEY_PROJ_SCALE_FACTOR, hparams.proj_scale_factor); - - // borrowed from llava-1.6 - const int isize = hparams.image_size; - hparams.image_grid_pinpoints = { - isize, isize*2, // 336, 672 - isize*2, isize, // 672, 336 - isize*2, isize*2, // 672, 672 - isize*3, isize, // 1008, 336 - isize, isize*3, // 336, 1008 - }; + set_llava_uhd_res_candidates(model, 3); } break; case PROJECTOR_TYPE_ULTRAVOX: case PROJECTOR_TYPE_QWEN2A: @@ -2674,6 +2678,21 @@ struct clip_model_loader { output[i] = values[i]; } } + + void set_llava_uhd_res_candidates(clip_model & model, const int max_patches_per_side) { + auto & hparams = model.hparams; + for (int x = 1; x <= max_patches_per_side; x++) { + for (int y = 1; y <= max_patches_per_side; y++) { + if (x == 1 && y == 1) { + continue; // skip the first point + } + hparams.image_res_candidates.push_back(clip_image_size{ + x*hparams.image_size, + y*hparams.image_size, + }); + } + } + } }; struct clip_init_result clip_init(const char * fname, struct clip_context_params ctx_params) { @@ -3028,36 +3047,41 @@ struct llava_uhd { bool padding_refined = false; // if true, refine image will be padded to the grid size (e.g. llava-1.6) }; - static int get_max_slices(struct clip_ctx * ctx) { - if (clip_is_minicpmv(ctx)) { - return 9; - } - return 0; - } - static slice_instructions get_slice_instructions(struct clip_ctx * ctx, const clip_image_size & original_size) { slice_instructions res; const int patch_size = clip_get_patch_size(ctx); const int slice_size = clip_get_image_size(ctx); - const int max_slice_nums = get_max_slices(ctx); const int original_width = original_size.width; const int original_height = original_size.height; - const float log_ratio = log((float)original_width / original_height); - const float ratio = (float)original_width * original_height / (slice_size * slice_size); - const int multiple = fmin(ceil(ratio), max_slice_nums); - const bool has_slices = (multiple > 1); - const bool has_pinpoints = !ctx->model.hparams.image_grid_pinpoints.empty(); + + const bool has_slices = original_size.width > slice_size || original_size.height > slice_size; + const bool has_pinpoints = !ctx->model.hparams.image_res_candidates.empty(); + + if (!has_slices) { + // skip slicing logic + res.overview_size = clip_image_size{slice_size, slice_size}; + res.refined_size = clip_image_size{0, 0}; + res.grid_size = clip_image_size{0, 0}; + + return res; + } if (has_pinpoints) { // has pinpoints, use them to calculate the grid size (e.g. llava-1.6) auto refine_size = llava_uhd::select_best_resolution( - ctx->model.hparams.image_grid_pinpoints, - original_size); + original_size, + ctx->model.hparams.image_res_candidates); res.overview_size = clip_image_size{slice_size, slice_size}; res.refined_size = refine_size; res.grid_size = clip_image_size{0, 0}; res.padding_refined = true; + LOG_DBG("%s: using pinpoints for slicing\n", __func__); + LOG_DBG("%s: original size: %d x %d, overview size: %d x %d, refined size: %d x %d\n", + __func__, original_width, original_height, + res.overview_size.width, res.overview_size.height, + res.refined_size.width, res.refined_size.height); + for (int y = 0; y < refine_size.height; y += slice_size) { for (int x = 0; x < refine_size.width; x += slice_size) { slice_coordinates slice; @@ -3066,13 +3090,16 @@ struct llava_uhd { slice.size.width = std::min(slice_size, refine_size.width - x); slice.size.height = std::min(slice_size, refine_size.height - y); res.slices.push_back(slice); - if (x == 0) { - res.grid_size.width++; - } + LOG_DBG("%s: slice %d: x=%d, y=%d, size=%dx%d\n", + __func__, (int)res.slices.size() - 1, + slice.x, slice.y, slice.size.width, slice.size.height); } - res.grid_size.height++; } + res.grid_size.height = refine_size.height / slice_size; + res.grid_size.width = refine_size.width / slice_size; + LOG_DBG("%s: grid size: %d x %d\n", __func__, res.grid_size.width, res.grid_size.height); + return res; } @@ -3081,17 +3108,23 @@ struct llava_uhd { auto best_size = get_best_resize(original_size, slice_size, patch_size, !has_slices); res.overview_size = best_size; - if (!has_slices) { - // skip slicing logic - res.refined_size = clip_image_size{0, 0}; - res.grid_size = clip_image_size{0, 0}; + { + const int max_slice_nums = 9; // TODO: this is only used by minicpmv, maybe remove it + const float log_ratio = log((float)original_width / original_height); + const float ratio = (float)original_width * original_height / (slice_size * slice_size); + const int multiple = fmin(ceil(ratio), max_slice_nums); - } else { auto best_grid = get_best_grid(max_slice_nums, multiple, log_ratio); auto refine_size = get_refine_size(original_size, best_grid, slice_size, patch_size, true); res.grid_size = best_grid; res.refined_size = refine_size; + LOG_DBG("%s: original size: %d x %d, overview size: %d x %d, refined size: %d x %d, grid size: %d x %d\n", + __func__, original_width, original_height, + res.overview_size.width, res.overview_size.height, + res.refined_size.width, res.refined_size.height, + res.grid_size.width, res.grid_size.height); + int width = refine_size.width; int height = refine_size.height; int grid_x = int(width / best_grid.width); @@ -3108,7 +3141,9 @@ struct llava_uhd { slice.size.width = grid_x; slice.size.height = grid_y; res.slices.push_back(slice); - // LOG_INF("slice %d: %d %d %d %d\n", ic, patches_i, patches_j, grid_x, grid_y); + LOG_DBG("%s: slice %d: x=%d, y=%d, size=%dx%d\n", + __func__, (int)res.slices.size() - 1, + slice.x, slice.y, slice.size.width, slice.size.height); } } } @@ -3166,48 +3201,55 @@ struct llava_uhd { return res; } + static clip_image_size resize_maintain_aspect_ratio(const clip_image_size & orig, const clip_image_size & target_max) { + float scale_width = static_cast(target_max.width) / orig.width; + float scale_height = static_cast(target_max.height) / orig.height; + float scale = std::min(scale_width, scale_height); + return clip_image_size{ + static_cast(orig.width * scale), + static_cast(orig.height * scale), + }; + } + /** * Selects the best resolution from a list of possible resolutions based on the original size. * + * For example, when given a list of resolutions: + * - 100x100 + * - 200x100 + * - 100x200 + * - 200x200 + * + * And an input image of size 111x200, then 100x200 is the best fit (least wasted resolution). + * * @param original_size The original size of the image * @param possible_resolutions A list of possible resolutions * @return The best fit resolution */ static clip_image_size select_best_resolution(const clip_image_size & original_size, const std::vector & possible_resolutions) { - int original_width = original_size.width; - int original_height = original_size.height; clip_image_size best_fit; + int min_wasted_area = std::numeric_limits::max(); int max_effective_resolution = 0; - int min_wasted_resolution = std::numeric_limits::max(); - - for (const auto & resolution : possible_resolutions) { - int width = resolution.width; - int height = resolution.height; - float scale = std::min(static_cast(width) / original_width, static_cast(height) / original_height); - int downscaled_width = static_cast(original_width * scale); - int downscaled_height = static_cast(original_height * scale); - int effective_resolution = std::min(downscaled_width * downscaled_height, original_width * original_height); - int wasted_resolution = (width * height) - effective_resolution; - // LOG_INF("resolution: %d %d, scale: %f, downscaled: %d %d, effective: %d, wasted: %d\n", width, height, scale, downscaled_width, downscaled_height, effective_resolution, wasted_resolution); - if (effective_resolution > max_effective_resolution || (effective_resolution == max_effective_resolution && wasted_resolution < min_wasted_resolution)) { + + for (const clip_image_size & candidate : possible_resolutions) { + auto target_size = resize_maintain_aspect_ratio(original_size, candidate); + int effective_resolution = std::min( + target_size.width * target_size.height, + original_size.width * original_size.height); + int wasted_area = (candidate.width * candidate.height) - effective_resolution; + + if (effective_resolution > max_effective_resolution || (effective_resolution == max_effective_resolution && wasted_area < min_wasted_area)) { max_effective_resolution = effective_resolution; - min_wasted_resolution = wasted_resolution; - best_fit = resolution; + min_wasted_area = wasted_area; + best_fit = candidate; } + + LOG_DBG("%s: candidate: %d x %d, target: %d x %d, wasted: %d, effective: %d\n", __func__, candidate.width, candidate.height, target_size.width, target_size.height, wasted_area, effective_resolution); } return best_fit; } - // used by llava 1.6 with custom list of pinpoints - static clip_image_size select_best_resolution(const std::vector & pinpoints, const clip_image_size & original_size) { - std::vector possible_resolutions; // TODO @ngxson : construct this inside hparams, not here - for (size_t i = 0; i < pinpoints.size(); i += 2) { - possible_resolutions.push_back(clip_image_size{pinpoints[i], pinpoints[i+1]}); - } - return select_best_resolution(original_size, possible_resolutions); - } - static int ensure_divide(int length, int patch_size) { return std::max(static_cast(std::round(static_cast(length) / patch_size) * patch_size), patch_size); } @@ -3331,7 +3373,7 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, str return true; } else if (ctx->proj_type() == PROJECTOR_TYPE_LLAMA4) { - GGML_ASSERT(!params.image_grid_pinpoints.empty()); + GGML_ASSERT(!params.image_res_candidates.empty()); auto const inst = llava_uhd::get_slice_instructions(ctx, original_size); std::vector imgs = llava_uhd::slice_image(img, inst); @@ -3371,7 +3413,7 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, str res_imgs->entries.push_back(std::move(res)); return true; - } else if (!params.image_grid_pinpoints.empty()) { + } else if (!params.image_res_candidates.empty()) { // "spatial_unpad" with "anyres" processing for llava-1.6 auto const inst = llava_uhd::get_slice_instructions(ctx, original_size); std::vector imgs = llava_uhd::slice_image(img, inst); @@ -3431,17 +3473,6 @@ const char * clip_patch_merge_type(const struct clip_ctx * ctx) { return ctx->model.hparams.mm_patch_merge_type == PATCH_MERGE_SPATIAL_UNPAD ? "spatial_unpad" : "flat"; } -const int32_t * clip_image_grid(const struct clip_ctx * ctx) { - if (ctx->model.hparams.image_grid_pinpoints.size()) { - return &ctx->model.hparams.image_grid_pinpoints.front(); - } - return nullptr; -} - -size_t get_clip_image_grid_size(const struct clip_ctx * ctx) { - return ctx->model.hparams.image_grid_pinpoints.size(); -} - int clip_n_output_tokens_x(const struct clip_ctx * ctx, struct clip_image_f32 * img) { const auto & params = ctx->model.hparams; const int n_total = clip_n_output_tokens(ctx, img); diff --git a/tools/mtmd/clip.h b/tools/mtmd/clip.h index cb2eb261fe2e8..08f3efb7b1daf 100644 --- a/tools/mtmd/clip.h +++ b/tools/mtmd/clip.h @@ -46,9 +46,6 @@ int32_t clip_get_hidden_size(const struct clip_ctx * ctx); // TODO: should be enum, not string const char * clip_patch_merge_type(const struct clip_ctx * ctx); -const int32_t * clip_image_grid(const struct clip_ctx * ctx); -size_t get_clip_image_grid_size(const struct clip_ctx * ctx); - int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * img); // for M-RoPE, this will be the number of token positions in X and Y directions diff --git a/tools/mtmd/mtmd.cpp b/tools/mtmd/mtmd.cpp index 8573f11437f1b..e3829738338c3 100644 --- a/tools/mtmd/mtmd.cpp +++ b/tools/mtmd/mtmd.cpp @@ -501,7 +501,10 @@ struct mtmd_tokenizer { || ctx->slice_tmpl == MTMD_SLICE_TMPL_MINICPMV_2_6 || ctx->slice_tmpl == MTMD_SLICE_TMPL_LLAMA4 ) { + const int n_col = batch_f32.grid_x; + const int n_row = batch_f32.grid_y; // split batch into chunks of single images + // NOTE: batch_f32 will be invalidated after this call auto chunks = split_batch_to_chunk(std::move(batch_f32), bitmap->id); GGML_ASSERT(chunks.size() > 0); @@ -521,8 +524,7 @@ struct mtmd_tokenizer { // add slices (or tiles) if (!chunks.empty()) { - const int n_col = batch_f32.grid_x; - const int n_row = batch_f32.grid_y; + GGML_ASSERT((int)chunks.size() == n_row * n_col); if (ctx->tok_slices_start != LLAMA_TOKEN_NULL) { add_text({ctx->tok_slices_start}); } From ef035803eb9dbc306ea9a8ff82e30af12b567cf7 Mon Sep 17 00:00:00 2001 From: Charles Xu Date: Wed, 18 Jun 2025 13:40:07 +0200 Subject: [PATCH 76/95] ggml: Add Apple support for GGML_CPU_ALL_VARIANTS (#14258) --- ggml/src/CMakeLists.txt | 4 ++++ ggml/src/ggml-cpu/CMakeLists.txt | 3 +++ 2 files changed, 7 insertions(+) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 17c9366f4a3cf..0c453741b5d84 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -330,6 +330,10 @@ if (GGML_CPU_ALL_VARIANTS) ggml_add_cpu_backend_variant(android_armv8.2_1 DOTPROD) ggml_add_cpu_backend_variant(android_armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC) ggml_add_cpu_backend_variant(android_armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC MATMUL_INT8) + elseif (APPLE) + ggml_add_cpu_backend_variant(apple_m1 DOTPROD) + ggml_add_cpu_backend_variant(apple_m2_m3 DOTPROD MATMUL_INT8) + ggml_add_cpu_backend_variant(apple_m4 DOTPROD MATMUL_INT8 NOSVE SME) else() message(FATAL_ERROR "Unsupported ARM target OS: ${CMAKE_SYSTEM_NAME}") endif() diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 3bd1b0507e2cb..df00340570baa 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -190,6 +190,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name) set(ARCH_TAGS "${ARCH_TAGS}+sve2") list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2) endif() + if (GGML_INTERNAL_NOSVE) + set(ARCH_TAGS "${ARCH_TAGS}+nosve") + endif() if (GGML_INTERNAL_SME) set(ARM_MCPU "armv9.2-a") set(ARCH_TAGS "${ARCH_TAGS}+sme") From 6231c5cd6d49d61511f328b5f43322407df90a91 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Thu, 19 Jun 2025 01:06:49 +0800 Subject: [PATCH 77/95] ggml-cpu: fix uncaught underscore terminators (#14023) Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/ggml-cpu-impl.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index bbd93c0ef66fe..73a8f93987aa3 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -371,7 +371,7 @@ inline static int32x4_t ggml_vdotq_s32(int32x4_t acc, int8x16_t a, int8x16_t b) #define vec_xor(a, b) ((a) ^ (b)) // Vector XOR #endif -typedef signed char char8x16_t __attribute__((vector_size(16))); +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))); @@ -382,10 +382,10 @@ 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 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 signed long long long64x2_t __attribute__((vector_size(16))); typedef unsigned long long ulong64x2_t __attribute__((vector_size(16))); typedef struct ggml_uint8x16x2_t { From 50d2227953ca9024f04255b4f116d06fcc0db74c Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Thu, 19 Jun 2025 01:10:08 +0800 Subject: [PATCH 78/95] ggml-cpu: reduce asm calls for hsum (#14037) Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/simd-mappings.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-cpu/simd-mappings.h b/ggml/src/ggml-cpu/simd-mappings.h index 2e3669c0186c9..e42364c59aa10 100644 --- a/ggml/src/ggml-cpu/simd-mappings.h +++ b/ggml/src/ggml-cpu/simd-mappings.h @@ -944,10 +944,8 @@ static inline void __lsx_f16x4_store(ggml_fp16_t * x, __m128 y) { for (int i = 0; i < offset; ++i) { \ x[i] = vec_add(x[i], x[offset + i]); \ } \ - res = vec_extract(x[0], 0) + \ - vec_extract(x[0], 1) + \ - vec_extract(x[0], 2) + \ - vec_extract(x[0], 3); \ + float32x4_t tmp = x[0] + vec_reve(x[0]); \ + res = tmp[0] + tmp[1]; \ } #define GGML_F32_VEC GGML_F32x4 From 8d947136546773f6410756f37fcc5d3e65b8135d Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Thu, 19 Jun 2025 01:10:26 +0800 Subject: [PATCH 79/95] docs: add s390x build documentation (#14264) * docs: add s390x-specific build docs Signed-off-by: Aaron Teo * docs: add s390x model conversion steps Signed-off-by: Aaron Teo * docs: s390x build indent Signed-off-by: Aaron Teo * docs: update hyperlinks for s390x docs Signed-off-by: Aaron Teo * docs: update llama.h docs Signed-off-by: Aaron Teo * docs: s390x add accelerator and perf optimizations Signed-off-by: Aaron Teo * docs: s390x indent blocks Signed-off-by: Aaron Teo * docs: revert block indentation Signed-off-by: Aaron Teo * docs: add support information for s390x Signed-off-by: Aaron Teo * docs: s390x reword Signed-off-by: Aaron Teo * docs: remove indentation for accelerator section s390x Signed-off-by: Aaron Teo * docs: remove redundant words s390x Signed-off-by: Aaron Teo * docs: reword for s390x Signed-off-by: Aaron Teo * docs: s390x reword simd Signed-off-by: Aaron Teo * docs: fix trailing whitespace for s390x Signed-off-by: Aaron Teo --------- Signed-off-by: Aaron Teo --- docs/build-s390x.md | 157 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 docs/build-s390x.md diff --git a/docs/build-s390x.md b/docs/build-s390x.md new file mode 100644 index 0000000000000..f44038c586ddc --- /dev/null +++ b/docs/build-s390x.md @@ -0,0 +1,157 @@ +> [!IMPORTANT] +> This build documentation is specific only to IBM Z & LinuxONE mainframes (s390x). You can find the build documentation for other architectures: [build.md](build.md). + +# Build llama.cpp locally (for s390x) + +The main product of this project is the `llama` library. Its C-style interface can be found in [include/llama.h](../include/llama.h). + +The project also includes many example programs and tools using the `llama` library. The examples range from simple, minimal code snippets to sophisticated sub-projects such as an OpenAI-compatible HTTP server. + +**To get the code:** + +```bash +git clone https://github.com/ggml-org/llama.cpp +cd llama.cpp +``` + +## CPU Build with BLAS + +Building llama.cpp with BLAS support is highly recommended as it has shown to provide performance improvements. + +```bash +cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DGGML_BLAS=ON \ + -DGGML_BLAS_VENDOR=OpenBLAS + +cmake --build build --config Release -j $(nproc) +``` + +**Notes**: +- For faster repeated compilation, install [ccache](https://ccache.dev/) +- By default, VXE/VXE2 is enabled. To disable it (not recommended): + + ```bash + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DGGML_BLAS=ON \ + -DGGML_BLAS_VENDOR=OpenBLAS \ + -DGGML_VXE=OFF + + cmake --build build --config Release -j $(nproc) + ``` + +- For debug builds: + + ```bash + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Debug \ + -DGGML_BLAS=ON \ + -DGGML_BLAS_VENDOR=OpenBLAS + + cmake --build build --config Debug -j $(nproc) + ``` + +- For static builds, add `-DBUILD_SHARED_LIBS=OFF`: + + ```bash + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DGGML_BLAS=ON \ + -DGGML_BLAS_VENDOR=OpenBLAS \ + -DBUILD_SHARED_LIBS=OFF + + 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: + +1. **Use pre-converted models verified for use on IBM Z & LinuxONE (easiest)** + + You can find popular models pre-converted and verified at [s390x Ready Models](hf.co/collections/taronaeo/s390x-ready-models-672765393af438d0ccb72a08). + + These models and their respective tokenizers are verified to run correctly on IBM Z & LinuxONE. + +2. **Convert safetensors model to GGUF Big-Endian directly (recommended)** + + ```bash + python3 convert_hf_to_gguf.py \ + --outfile model-name-be.f16.gguf \ + --outtype f16 \ + --bigendian \ + model-directory/ + ``` + + For example, + + ```bash + python3 convert_hf_to_gguf.py \ + --outfile granite-3.3-2b-instruct-be.f16.gguf \ + --outtype f16 \ + --bigendian \ + granite-3.3-2b-instruct/ + ``` + +3. **Convert existing GGUF Little-Endian model to Big-Endian** + + ```bash + python3 gguf-py/gguf/scripts/gguf_convert_endian.py model-name.f16.gguf BIG + ``` + + For example, + ```bash + python3 gguf-py/gguf/scripts/gguf_convert_endian.py granite-3.3-2b-instruct-le.f16.gguf BIG + mv granite-3.3-2b-instruct-le.f16.gguf granite-3.3-2b-instruct-be.f16.gguf + ``` + + **Notes:** + - The GGUF endian conversion script may not support all data types at the moment and may fail for some models/quantizations. When that happens, please try manually converting the safetensors model to GGUF Big-Endian via Step 2. + +## IBM Accelerators + +### 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 or EC13. In such systems, the APIs can still run but will use a scalar implementation. + +### 2. zDNN Accelerator + +*Only available in IBM z16 or later system. No direction at the moment.* + +### 3. Spyre Accelerator + +*No direction at the moment.* + +## Performance Tuning + +### 1. Virtualization Setup + +It is strongly recommended to use only LPAR (Type-1) virtualization to get the most performance. + +Note: Type-2 virtualization is not supported at the moment, while you can get it running, the performance will not be the best. + +### 2. IFL (Core) Count + +It is recommended to allocate a minimum of 8 shared IFLs assigned to the LPAR. Increasing the IFL count past 8 shared IFLs will only improve Prompt Processing performance but not Token Generation. + +Note: IFL count does not equate to vCPU count. + +### 3. SMT vs NOSMT (Simultaneous Multithreading) + +It is strongly recommended to disable SMT via the kernel boot parameters as it negatively affects performance. Please refer to your Linux distribution's guide on disabling SMT via kernel boot parameters. + +### 4. BLAS vs NOBLAS + +IBM VXE/VXE2 SIMD acceleration depends on the BLAS implementation. It is strongly recommended to use BLAS. + +## Getting Help on IBM Z & LinuxONE + +1. **Bugs, Feature Requests** + + Please file an issue in llama.cpp and ensure that the title contains "s390x". + +2. **Other Questions** + + Please reach out directly to [aionz@us.ibm.com](mailto:aionz@us.ibm.com). + From ed3290ab34493fd3d2e0f925f816a401da4f2dfd Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 19 Jun 2025 08:05:21 +0300 Subject: [PATCH 80/95] metal : add mean kernel (#14267) * metal : add mean kernel ggml-ci * cont : dedup implementation ggml-ci --- ggml/src/ggml-metal/ggml-metal.m | 33 ++++++++++++++++--- ggml/src/ggml-metal/ggml-metal.metal | 48 ++++++++++++++++++++++------ 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal.m b/ggml/src/ggml-metal/ggml-metal.m index bc93bc633a49b..4e7f373cb435a 100644 --- a/ggml/src/ggml-metal/ggml-metal.m +++ b/ggml/src/ggml-metal/ggml-metal.m @@ -498,6 +498,7 @@ static void ggml_backend_metal_device_rel(struct ggml_backend_metal_device_conte GGML_METAL_KERNEL_TYPE_COS, GGML_METAL_KERNEL_TYPE_NEG, GGML_METAL_KERNEL_TYPE_SUM_ROWS, + GGML_METAL_KERNEL_TYPE_MEAN, GGML_METAL_KERNEL_TYPE_POOL_2D_AVG_F32, GGML_METAL_KERNEL_TYPE_POOL_2D_MAX_F32, GGML_METAL_KERNEL_TYPE_ARGMAX, @@ -1454,6 +1455,7 @@ @implementation GGMLMetalClass GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_COS, cos, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_NEG, neg, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SUM_ROWS, sum_rows, true); + GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MEAN, mean, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGMAX, argmax, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_POOL_2D_AVG_F32, pool_2d_avg_f32, true); GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_POOL_2D_MAX_F32, pool_2d_max_f32, true); @@ -1653,6 +1655,7 @@ static bool ggml_metal_supports_op(const struct ggml_backend_metal_device_contex case GGML_OP_LOG: return false; // TODO: implement case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: case GGML_OP_SOFT_MAX: case GGML_OP_GROUP_NORM: return has_simdgroup_reduction && ggml_is_contiguous(op->src[0]); @@ -2400,11 +2403,30 @@ static bool ggml_metal_encode_node( [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; } break; case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: { GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type)); - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SUM_ROWS].pipeline; + id pipeline = nil; + + switch (dst->op) { + case GGML_OP_SUM_ROWS: + pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SUM_ROWS].pipeline; + break; + case GGML_OP_MEAN: + pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MEAN].pipeline; + break; + default: + GGML_ABORT("fatal error"); + } + + int nth = 32; // SIMD width + + while (nth < ne00 && nth < (int) pipeline.maxTotalThreadsPerThreadgroup) { + nth *= 2; + } + nth = MIN(nth, ne00); ggml_metal_kargs_sum_rows args = { /*.ne00 =*/ ne00, @@ -2434,11 +2456,12 @@ static bool ggml_metal_encode_node( }; [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&args length:sizeof(args) atIndex:2]; + [encoder setBytes:&args length:sizeof(args) atIndex:0]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:1]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; + [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; case GGML_OP_SOFT_MAX: { diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index 5d7760217f826..3da19879b4b36 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -993,31 +993,61 @@ kernel void kernel_neg( dst[tpig] = -src0[tpig]; } +template kernel void kernel_sum_rows( + constant ggml_metal_kargs_sum_rows & args, device const float * src0, device float * dst, - constant ggml_metal_kargs_sum_rows & args, - uint3 tpig[[thread_position_in_grid]]) { - int64_t i3 = tpig.z; - int64_t i2 = tpig.y; - int64_t i1 = tpig.x; + threadgroup float * shmem_f32 [[threadgroup(0)]], + uint3 tgpig[[threadgroup_position_in_grid]], + ushort3 tpitg[[thread_position_in_threadgroup]], + ushort sgitg[[simdgroup_index_in_threadgroup]], + ushort tiisg[[thread_index_in_simdgroup]], + ushort3 ntg[[threads_per_threadgroup]]) { + int64_t i3 = tgpig.z; + int64_t i2 = tgpig.y; + int64_t i1 = tgpig.x; if (i3 >= args.ne03 || i2 >= args.ne02 || i1 >= args.ne01) { return; } + if (sgitg == 0) { + shmem_f32[tiisg] = 0.0f; + } + device const float * src_row = (device const float *) ((device const char *) src0 + i1*args.nb01 + i2*args.nb02 + i3*args.nb03); device float * dst_row = (device float *) ((device char *) dst + i1*args.nb1 + i2*args.nb2 + i3*args.nb3); - float row_sum = 0; + float sumf = 0; - for (int64_t i0 = 0; i0 < args.ne00; i0++) { - row_sum += src_row[i0]; + for (int64_t i0 = tpitg.x; i0 < args.ne00; i0 += ntg.x) { + sumf += src_row[i0]; } - dst_row[0] = row_sum; + sumf = simd_sum(sumf); + + threadgroup_barrier(mem_flags::mem_threadgroup); + + if (tiisg == 0) { + shmem_f32[sgitg] = sumf; + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + sumf = shmem_f32[tiisg]; + sumf = simd_sum(sumf); + + if (tpitg.x == 0) { + dst_row[0] = norm ? sumf / args.ne00 : sumf; + } } +typedef decltype(kernel_sum_rows) kernel_sum_rows_t; + +template [[host_name("kernel_sum_rows")]] kernel kernel_sum_rows_t kernel_sum_rows; +template [[host_name("kernel_mean")]] kernel kernel_sum_rows_t kernel_sum_rows; + template kernel void kernel_soft_max( device const char * src0, From edc4a29effe716956fdfd2bc5b9cba2a6d8492f8 Mon Sep 17 00:00:00 2001 From: Gabe Goodhart Date: Thu, 19 Jun 2025 00:08:14 -0500 Subject: [PATCH 81/95] memory : Hybrid recurrent cache (#13979) * feat: Add llama_model_is_hybrid API call Also, split llama_model_is_recurrent into llm_arch_is_recurrent in llama-arch with llama_model_is_recurrent delegating to llm_arch_is_recurrent. The same split is done for hybird. This is needed because there are places where the llama_model has not yet been initialized but we need to check if the model is recurrent (specifically for the per-layer recurrent check array in hparams). Branch: GraniteFour Signed-off-by: Gabe Goodhart * feat: Add c++ side constants for attention layer indices hparam Branch: GraniteFour * feat: Add support for distinguishing recurrent vs non-recurrent layers in hparams Branch: GraniteFour Signed-off-by: Gabe Goodhart * feat: Auto-fill hparams.recurrent_layer_arr based on whether the model is recurrent Branch: GraniteFour Signed-off-by: Gabe Goodhart * refactor: rename *_is_hybrid -> *_is_hybrid_recurrent The implementation of the hybrid cache intentionally does not specify the types of the child caches, so there was a naming mismatch with these predicate functions that used "hybrid" to imply "hybrid recurrent." Branch: HybridCache Signed-off-by: Gabe Goodhart * feat: Add layer filter to recurrent cache Branch: HybridCache Signed-off-by: Gabe Goodhart * fix: Use per-layer sizing everywhere in kv caches Branch: GraniteFour Signed-off-by: Gabe Goodhart * feat: First pass at llama_kv_cache_hybrid_recurrent This follows the pattern in iswa where the two child caches are held explicitly to support the case where a model requires a single attention cache and a single recurrent cache where each layer uses exactly one of the caches. This is a rewrite of the more generic approach in the original hybrid cache PR: https://github.com/ggml-org/llama.cpp/pull/13276 Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * feat: Construct hybrid recurrent cache for hybrid recurrent models This includes a refactor of the create_memory logic to avoid needing to use the arch enum explicitly unless a model needs explicit cache instantiation logic beyond the standard logic for recurrent, hybrid, unified, and iswa. Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Fix wrong bool condition for split equal in hybrid cache Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Fix shift logic to defer to unified cache Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * feat: Support hybrid recurrent in llama-graph NOTE: I intentionally did not add support for s_mask since it will be going away soon Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Fix logic for initializing inputs and attn layers for hybrid caches Branch: GraniteFour Signed-off-by: Gabe Goodhart * fix: Update recurrent cache for changes to remove intermediate kv_cache interface Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Fix status for init_update sig for recurrent cache state Branch: GraniteFour Signed-off-by: Gabe Goodhart * fix: Add missing padding to n_ctx for hybrid cache construction Branch: GraniteFour Signed-off-by: Gabe Goodhart * fix: Update clear signature for data argument after rebase Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Remove errant virtual destructor leftover from previous impl attempt Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Use per-layer n_embd_k/v_s calls for mamba (1) layers Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor: Remove n_embd_k/v_s from unified cache No longer needed now that unified isn't also supporting recurrent https://github.com/ggml-org/llama.cpp/pull/13979#discussion_r2140761069 Branch: HybridRecurrentCache * refactor: Remove layer index from n_embd_k/v_s Now that it's not used at all in the unified cache, we don't need to use the layer index to zero it out for attention layers. Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor: Remove n_embd_k/v_gqa from recurrent cache This is no longer needed now that there are separate implementations https://github.com/ggml-org/llama.cpp/pull/13979#discussion_r2140825128 Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * feat: Allow custom layer filters for hybrid recurrent This should help support architectures like Falcon H1 where there is overlap between layers that need attention and recurrent caches. https://github.com/ggml-org/llama.cpp/pull/13979#discussion_r2140748922 Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Remove logits_all after rebase Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Remove llama_model_is_hybrid_Recurrent public API https://github.com/ggml-org/llama.cpp/pull/13979#discussion_r2141728423 Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor: Use llama_memory_state_ptr for child states in hybrid memory state Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * feat: Overhaul build_recurrent_state / build_inp_s_copy to match attention pattern https://github.com/ggml-org/llama.cpp/pull/13979/files#r2141701738 This is a big overhaul to bring consistency between how inputs and per- layer components are created for attention layers and recurrent layers. The main changes are: - Rename class llm_graph_input_s_copy -> llm_graph_input_rs - Add a corresponding llm_graph_input_rs_hybrid_recurrent - Rename build_inp_s_copy -> build_rs_inp_recurrent - Add a corresponding build_rs_inp_hybrid_recurrent - Rename build_recurrent_state -> build_rs to match build_attn w/ llm_graph_input_rs android-build AUTHORS bamba-9b-2.2T.gguf bamba-9b-2.2T.q4_k_m.gguf broken.log build build-rel build-xcframework.sh build.android build.android.bak ci cmake CMakeLists.txt CMakePresets.json CODEOWNERS common common.o CONTRIBUTING.md convert_hf_to_gguf_update.py convert_hf_to_gguf.py convert_llama_ggml_to_gguf.py convert_lora_to_gguf.py debug.log docs examples flake.lock flake.nix ggml ggml-alloc.o ggml-backend.o ggml-metal.o ggml-model-BF16.gguf ggml-model-Q4_K_M.gguf ggml-quants.o ggml.o gguf-py grammar-parser.o grammars include LICENSE licenses llama.log llama.o llamacpp_trace.log main.log Makefile media models mypy.ini pocs poetry.lock prompts pyproject.toml pyrightconfig.json q4_k_m_boot.log q8_0_boot.log quant.log quant2.log README.md requirements requirements.txt sampling.o scripts SECURITY.md src test-grammar-output.tmp test-json-schema-input.tmp tests tools vendor working.log as the first input - Add a corresponding overload of build_rs w/ llm_graph_input_rs_hybrid_recurrent android-build AUTHORS bamba-9b-2.2T.gguf bamba-9b-2.2T.q4_k_m.gguf broken.log build build-rel build-xcframework.sh build.android build.android.bak ci cmake CMakeLists.txt CMakePresets.json CODEOWNERS common common.o CONTRIBUTING.md convert_hf_to_gguf_update.py convert_hf_to_gguf.py convert_llama_ggml_to_gguf.py convert_lora_to_gguf.py debug.log docs examples flake.lock flake.nix ggml ggml-alloc.o ggml-backend.o ggml-metal.o ggml-model-BF16.gguf ggml-model-Q4_K_M.gguf ggml-quants.o ggml.o gguf-py grammar-parser.o grammars include LICENSE licenses llama.log llama.o llamacpp_trace.log main.log Makefile media models mypy.ini pocs poetry.lock prompts pyproject.toml pyrightconfig.json q4_k_m_boot.log q8_0_boot.log quant.log quant2.log README.md requirements requirements.txt sampling.o scripts SECURITY.md src test-grammar-output.tmp test-json-schema-input.tmp tests tools vendor working.log as the first input - Add a llm_graph_input_attn_kv_hybrid_recurrent analogous to llm_graph_input_attn_kv_unified - Add a build_attn override that takes llm_graph_input_attn_kv_hybrid_recurrent android-build AUTHORS bamba-9b-2.2T.gguf bamba-9b-2.2T.q4_k_m.gguf broken.log build build-rel build-xcframework.sh build.android build.android.bak ci cmake CMakeLists.txt CMakePresets.json CODEOWNERS common common.o CONTRIBUTING.md convert_hf_to_gguf_update.py convert_hf_to_gguf.py convert_llama_ggml_to_gguf.py convert_lora_to_gguf.py debug.log docs examples flake.lock flake.nix ggml ggml-alloc.o ggml-backend.o ggml-metal.o ggml-model-BF16.gguf ggml-model-Q4_K_M.gguf ggml-quants.o ggml.o gguf-py grammar-parser.o grammars include LICENSE licenses llama.log llama.o llamacpp_trace.log main.log Makefile media models mypy.ini pocs poetry.lock prompts pyproject.toml pyrightconfig.json q4_k_m_boot.log q8_0_boot.log quant.log quant2.log README.md requirements requirements.txt sampling.o scripts SECURITY.md src test-grammar-output.tmp test-json-schema-input.tmp tests tools vendor working.log as the first input This makes the two paradigms fully consistent. The main drawback is the code duplication in the build_attn and build_rs implementations where the only difference between implementations is how they cast the memory state. Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * fix: Fix resize vs reserve and skip null tensors in size computation https://github.com/ggml-org/llama.cpp/pull/13979/files#r2149469788 Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart Co-Authored-By: @younesbelkada * fix: Fix initialization of child states Since initially writing this PR, the logic in the child state types changed such that using the "init full" signature and keeping the ubatches on the parent struct no longer worked. Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor: Use a common build_recurrent_state method that is cache-agnostic This reduces the code duplication between the different build_rs impls and also retains a similar signature to the previous build_recurrent_state method while standardizing on the input-dispatched build_rs implementation. Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * recurrent : rework graph inputs + add TODOs ggml-ci * refactor: Make status and child states const in hybrid and iswa Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor: Rename llama_kv_cache_[recurrent|hybrid_recurrent] to remove kv cache This removes the notion of "kv" from the interface names for these memory types. There are still many references to kv in the implementation of the recurrent memory which will need further adjustment. Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor!: Rename all k/v related values for recurrent/hybrid to r/s Anywhere that "kv_" is used, I've used the more generic "mem_" prefix. The specifics of "k" (key) translate to "r" (recurrent state) and "v" (value) translate to "s" (state-space embedding states). Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refacor: _recurrent -> _recr for brevity It just _happens_ to have the same number of letters as _attn! Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * style: Fix spacing for ref Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * refactor: recurrent_layer() -> is_recurrent() Branch: HybridRecurrentCache Signed-off-by: Gabe Goodhart * style: Fix spacing for size_s_bytes declaration Co-authored-by: Georgi Gerganov --------- Signed-off-by: Gabe Goodhart Co-authored-by: Georgi Gerganov --- src/CMakeLists.txt | 3 +- src/llama-arch.cpp | 23 ++ src/llama-arch.h | 4 + src/llama-graph.cpp | 265 ++++++++---- src/llama-graph.h | 101 ++++- src/llama-hparams.cpp | 8 +- src/llama-hparams.h | 10 +- src/llama-kv-cache-unified-iswa.cpp | 32 +- src/llama-kv-cache-unified-iswa.h | 8 +- src/llama-kv-cache-unified.cpp | 16 +- src/llama-memory-hybrid.cpp | 247 +++++++++++ src/llama-memory-hybrid.h | 143 +++++++ ...current.cpp => llama-memory-recurrent.cpp} | 389 +++++++++--------- ...e-recurrent.h => llama-memory-recurrent.h} | 70 ++-- src/llama-model.cpp | 228 +++++----- 15 files changed, 1085 insertions(+), 462 deletions(-) create mode 100644 src/llama-memory-hybrid.cpp create mode 100644 src/llama-memory-hybrid.h rename src/{llama-kv-cache-recurrent.cpp => llama-memory-recurrent.cpp} (67%) rename src/{llama-kv-cache-recurrent.h => llama-memory-recurrent.h} (72%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 70be604e4b0d3..8f9cd652447ab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,8 +22,9 @@ add_library(llama llama-io.cpp llama-kv-cache-unified.cpp llama-kv-cache-unified-iswa.cpp - llama-kv-cache-recurrent.cpp llama-memory.cpp + llama-memory-hybrid.cpp + llama-memory-recurrent.cpp llama-mmap.cpp llama-model-loader.cpp llama-model-saver.cpp diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index de8d289cf967e..0bc60565df12c 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -147,6 +147,7 @@ static const std::map LLM_KV_NAMES = { { LLM_KV_ATTENTION_SCALE, "%s.attention.scale" }, { LLM_KV_ATTENTION_KEY_LENGTH_MLA, "%s.attention.key_length_mla" }, { LLM_KV_ATTENTION_VALUE_LENGTH_MLA, "%s.attention.value_length_mla" }, + { LLM_KV_ATTENTION_LAYER_INDICES, "%s.attention.layer_indices" }, { LLM_KV_ROPE_DIMENSION_COUNT, "%s.rope.dimension_count" }, { LLM_KV_ROPE_DIMENSION_SECTIONS, "%s.rope.dimension_sections" }, @@ -1816,3 +1817,25 @@ llm_arch llm_arch_from_string(const std::string & name) { const llm_tensor_info & llm_tensor_info_for(llm_tensor tensor) { return LLM_TENSOR_INFOS.at(tensor); } + +bool llm_arch_is_recurrent(const llm_arch & arch) { + switch (arch) { + case LLM_ARCH_MAMBA: + case LLM_ARCH_RWKV6: + case LLM_ARCH_RWKV6QWEN2: + case LLM_ARCH_RWKV7: + case LLM_ARCH_ARWKV7: + return true; + default: + return false; + } +} + +bool llm_arch_is_hybrid(const llm_arch & arch) { + // TODO: There are currently no hybrid models! Once there are, this will be + // the place to identify them + switch (arch) { + default: + return false; + } +} diff --git a/src/llama-arch.h b/src/llama-arch.h index 3e8a61da3c13e..51b242c66b824 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -151,6 +151,7 @@ enum llm_kv { LLM_KV_ATTENTION_SCALE, LLM_KV_ATTENTION_KEY_LENGTH_MLA, LLM_KV_ATTENTION_VALUE_LENGTH_MLA, + LLM_KV_ATTENTION_LAYER_INDICES, LLM_KV_ROPE_DIMENSION_COUNT, LLM_KV_ROPE_DIMENSION_SECTIONS, @@ -439,3 +440,6 @@ const char * llm_arch_name(llm_arch arch); llm_arch llm_arch_from_string(const std::string & name); const llm_tensor_info & llm_tensor_info_for(llm_tensor tensor); + +bool llm_arch_is_recurrent(const llm_arch & arch); +bool llm_arch_is_hybrid (const llm_arch & arch); diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 337fb5cb0df36..65d98cbbb3987 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -6,7 +6,8 @@ #include "llama-kv-cache-unified.h" #include "llama-kv-cache-unified-iswa.h" -#include "llama-kv-cache-recurrent.h" +#include "llama-memory-hybrid.h" +#include "llama-memory-recurrent.h" #include #include @@ -238,18 +239,18 @@ void llm_graph_input_cls::set_input(const llama_ubatch * ubatch) { } } -void llm_graph_input_s_copy::set_input(const llama_ubatch * ubatch) { +void llm_graph_input_rs::set_input(const llama_ubatch * ubatch) { GGML_UNUSED(ubatch); - const int64_t n_kv = kv_state->get_n_kv(); + const int64_t n_rs = mem_state->get_n_rs(); if (s_copy) { GGML_ASSERT(ggml_backend_buffer_is_host(s_copy->buffer)); int32_t * data = (int32_t *) s_copy->data; // assuming copy destinations ALWAYS happen ONLY on the cells between head and head+n - for (uint32_t i = 0; i < n_kv; ++i) { - data[i] = kv_state->s_copy(i); + for (uint32_t i = 0; i < n_rs; ++i) { + data[i] = mem_state->s_copy(i); } } } @@ -403,6 +404,24 @@ void llm_graph_input_attn_cross::set_input(const llama_ubatch * ubatch) { } } +void llm_graph_input_mem_hybrid::set_input(const llama_ubatch * ubatch) { + if (self_kq_mask) { + mem_state->get_state_attn()->set_input_kq_mask(self_kq_mask, ubatch, cparams.causal_attn); + } + + const int64_t n_rs = mem_state->get_state_recr()->get_n_rs(); + + if (s_copy) { + GGML_ASSERT(ggml_backend_buffer_is_host(s_copy->buffer)); + int32_t * data = (int32_t *) s_copy->data; + + // assuming copy destinations ALWAYS happen ONLY on the cells between head and head+n + for (uint32_t i = 0; i < n_rs; ++i) { + data[i] = mem_state->get_state_recr()->s_copy(i); + } + } +} + // // llm_graph_context // @@ -961,23 +980,6 @@ ggml_tensor * llm_graph_context::build_inp_cls() const { return cur; } -ggml_tensor * llm_graph_context::build_inp_s_copy() const { - const auto * kv_state = static_cast(mstate); - - auto inp = std::make_unique(kv_state); - - const auto n_kv = kv_state->get_n_kv(); - - auto & cur = inp->s_copy; - - cur = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_kv); - ggml_set_input(cur); - - res->add_input(std::move(inp)); - - return cur; -} - ggml_tensor * llm_graph_context::build_inp_cross_embd() const { auto inp = std::make_unique(cross); @@ -1047,6 +1049,33 @@ ggml_tensor * llm_graph_context::build_pos_bias(ggml_tensor * pos_bucket, ggml_t return pos_bias; } +llm_graph_input_mem_hybrid * llm_graph_context::build_inp_mem_hybrid() const { + const auto * mem_state = static_cast(mstate); + + auto inp = std::make_unique(hparams, cparams, mem_state); + + { + GGML_ASSERT(hparams.swa_type == LLAMA_SWA_TYPE_NONE && "Hybrid recurrent is not supported with SWA attention layers"); + + const auto n_kv = inp->mem_state->get_state_attn()->get_n_kv(); + + inp->self_kq_mask = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD)); + //cb(inp->self_kq_mask, "KQ_mask", -1); + ggml_set_input(inp->self_kq_mask); + + inp->self_kq_mask_cnv = cparams.flash_attn ? ggml_cast(ctx0, inp->self_kq_mask, GGML_TYPE_F16) : inp->self_kq_mask; + } + + { + const auto n_rs = mem_state->get_state_recr()->get_n_rs(); + + inp->s_copy = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_rs); + ggml_set_input(inp->s_copy); + } + + return (llm_graph_input_mem_hybrid *) res->add_input(std::move(inp)); +} + ggml_tensor * llm_graph_context::build_attn_mha( ggml_cgraph * gf, ggml_tensor * q, @@ -1291,36 +1320,6 @@ ggml_tensor * llm_graph_context::build_attn( return cur; } -llm_graph_input_attn_kv_unified_iswa * llm_graph_context::build_attn_inp_kv_unified_iswa() const { - const auto * kv_state = static_cast(mstate); - - auto inp = std::make_unique(hparams, cparams, kv_state); - - { - const auto n_kv = kv_state->get_base()->get_n_kv(); - - inp->self_kq_mask = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD)); - //cb(inp->self_kq_mask, "KQ_mask", -1); - ggml_set_input(inp->self_kq_mask); - - inp->self_kq_mask_cnv = cparams.flash_attn ? ggml_cast(ctx0, inp->self_kq_mask, GGML_TYPE_F16) : inp->self_kq_mask; - } - - { - GGML_ASSERT(hparams.swa_type != LLAMA_SWA_TYPE_NONE && "Use llama_kv_cache_unified for non-SWA"); - - const auto n_kv = kv_state->get_swa()->get_n_kv(); - - inp->self_kq_mask_swa = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD)); - //cb(inp->self_kq_mask_swa, "KQ_mask_swa", -1); - ggml_set_input(inp->self_kq_mask_swa); - - 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)); -} - ggml_tensor * llm_graph_context::build_attn( llm_graph_input_attn_kv_unified_iswa * inp, ggml_cgraph * gf, @@ -1430,20 +1429,99 @@ ggml_tensor * llm_graph_context::build_attn( return cur; } -ggml_tensor * llm_graph_context::build_recurrent_state( - ggml_cgraph * gf, - ggml_tensor * s, - ggml_tensor * state_copy, - int32_t state_size, - int32_t n_seqs, - bool avoid_copies) const { - const auto * kv_state = static_cast(mstate); - - const auto n_kv = kv_state->get_n_kv(); - const auto kv_head = kv_state->get_head(); - const auto rs_zero = kv_state->get_rs_z(); +ggml_tensor * llm_graph_context::build_attn( + llm_graph_input_mem_hybrid * inp, + ggml_cgraph * gf, + 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, + float kq_scale, + int il) const { + // these nodes are added to the graph together so that they are not reordered + // by doing so, the number of splits in the graph is reduced + ggml_build_forward_expand(gf, q_cur); + ggml_build_forward_expand(gf, k_cur); + ggml_build_forward_expand(gf, v_cur); + + const auto * kv_state = static_cast(mstate)->get_state_attn(); + + // store to KV cache + { + ggml_build_forward_expand(gf, kv_state->cpy_k(ctx0, k_cur, il)); + ggml_build_forward_expand(gf, kv_state->cpy_v(ctx0, v_cur, il)); + } + + const auto & kq_mask = inp->get_kq_mask(); + + ggml_tensor * q = q_cur; + ggml_tensor * k = kv_state->get_k(ctx0, il); + ggml_tensor * v = kv_state->get_v(ctx0, il); + + ggml_tensor * cur = build_attn_mha(gf, q, k, v, kq_b, kq_mask, v_mla, kq_scale); + cb(cur, "kqv_out", il); + + if (wo) { + cur = build_lora_mm(wo, cur); + if (arch == LLM_ARCH_GLM4) { + // GLM4 seems to have numerical issues with half-precision accumulators + ggml_mul_mat_set_prec(cur, GGML_PREC_F32); + } + } + + if (wo_b) { + cur = ggml_add(ctx0, cur, wo_b); + } + + return cur; +} + +llm_graph_input_attn_kv_unified_iswa * llm_graph_context::build_attn_inp_kv_unified_iswa() const { + const auto * kv_state = static_cast(mstate); + + auto inp = std::make_unique(hparams, cparams, kv_state); - ggml_tensor * states = ggml_reshape_2d(ctx0, s, state_size, kv_state->get_size()); + { + const auto n_kv = kv_state->get_base()->get_n_kv(); + + inp->self_kq_mask = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD)); + //cb(inp->self_kq_mask, "KQ_mask", -1); + ggml_set_input(inp->self_kq_mask); + + inp->self_kq_mask_cnv = cparams.flash_attn ? ggml_cast(ctx0, inp->self_kq_mask, GGML_TYPE_F16) : inp->self_kq_mask; + } + + { + GGML_ASSERT(hparams.swa_type != LLAMA_SWA_TYPE_NONE && "Use llama_kv_cache_unified for non-SWA"); + + const auto n_kv = kv_state->get_swa()->get_n_kv(); + + inp->self_kq_mask_swa = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD)); + //cb(inp->self_kq_mask_swa, "KQ_mask_swa", -1); + ggml_set_input(inp->self_kq_mask_swa); + + 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)); +} + +ggml_tensor * llm_graph_context::build_rs( + ggml_cgraph * gf, + ggml_tensor * s, + ggml_tensor * state_copy, + int32_t state_size, + int32_t n_seqs, + uint32_t n_kv, + uint32_t kv_head, + uint32_t kv_size, + int32_t rs_zero, + bool avoid_copies) const { + + ggml_tensor * states = ggml_reshape_2d(ctx0, s, state_size, kv_size); // Clear a single state which will then be copied to the other cleared states. // Note that this is a no-op when the view is zero-sized. @@ -1474,22 +1552,59 @@ ggml_tensor * llm_graph_context::build_recurrent_state( return output_states; } +llm_graph_input_rs * llm_graph_context::build_rs_inp() const { + const auto * kv_state = static_cast(mstate); + + auto inp = std::make_unique(kv_state); + + const auto n_rs = kv_state->get_n_rs(); + + inp->s_copy = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_rs); + ggml_set_input(inp->s_copy); + + return (llm_graph_input_rs *) res->add_input(std::move(inp)); +} + +ggml_tensor * llm_graph_context::build_rs( + llm_graph_input_rs * inp, + ggml_cgraph * gf, + ggml_tensor * s, + int32_t state_size, + int32_t n_seqs, + bool avoid_copies) const { + const auto * kv_state = static_cast(mstate); + + return build_rs(gf, s, inp->s_copy, state_size, n_seqs, kv_state->get_n_rs(), kv_state->get_head(), kv_state->get_size(), kv_state->get_rs_z(), avoid_copies); +} + +ggml_tensor * llm_graph_context::build_rs( + llm_graph_input_mem_hybrid * inp, + ggml_cgraph * gf, + ggml_tensor * s, + int32_t state_size, + int32_t n_seqs, + bool avoid_copies) const { + const auto * kv_state = static_cast(mstate)->get_state_recr(); + + return build_rs(gf, s, inp->s_copy, state_size, n_seqs, kv_state->get_n_rs(), kv_state->get_head(), kv_state->get_size(), kv_state->get_rs_z(), avoid_copies); +} + ggml_tensor * llm_graph_context::build_rwkv_token_shift_load( - ggml_cgraph * gf, - ggml_tensor * state_copy, - const llama_ubatch & ubatch, + llm_graph_input_rs * inp, + ggml_cgraph * gf, + const llama_ubatch & ubatch, int il) const { - const auto * kv_state = static_cast(mstate); + const auto * kv_state = static_cast(mstate); const auto token_shift_count = hparams.token_shift_count; const int64_t n_seqs = ubatch.n_seqs; - ggml_tensor * token_shift_all = kv_state->get_k_l(il); + ggml_tensor * token_shift_all = kv_state->get_r_l(il); - ggml_tensor * token_shift = build_recurrent_state( - gf, token_shift_all, state_copy, - hparams.n_embd_k_s(), n_seqs); + ggml_tensor * token_shift = build_rs( + inp, gf, token_shift_all, + hparams.n_embd_r(), n_seqs); token_shift = ggml_reshape_3d(ctx0, token_shift, hparams.n_embd, token_shift_count, n_seqs); @@ -1500,7 +1615,7 @@ ggml_tensor * llm_graph_context::build_rwkv_token_shift_store( ggml_tensor * token_shift, const llama_ubatch & ubatch, int il) const { - const auto * kv_state = static_cast(mstate); + const auto * kv_state = static_cast(mstate); const auto token_shift_count = hparams.token_shift_count; const auto n_embd = hparams.n_embd; @@ -1512,7 +1627,7 @@ ggml_tensor * llm_graph_context::build_rwkv_token_shift_store( return ggml_cpy( ctx0, ggml_view_1d(ctx0, token_shift, n_embd * n_seqs * token_shift_count, 0), - ggml_view_1d(ctx0, kv_state->get_k_l(il), hparams.n_embd_k_s()*n_seqs, hparams.n_embd_k_s()*kv_head*ggml_element_size(kv_state->get_k_l(il))) + ggml_view_1d(ctx0, kv_state->get_r_l(il), hparams.n_embd_r()*n_seqs, hparams.n_embd_r()*kv_head*ggml_element_size(kv_state->get_r_l(il))) ); } diff --git a/src/llama-graph.h b/src/llama-graph.h index 87813119b1a3c..58845e284abed 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -21,7 +21,8 @@ struct llama_memory_state_i; class llama_kv_cache_unified_state; class llama_kv_cache_unified_iswa_state; -class llama_kv_cache_recurrent_state; +class llama_memory_recurrent_state; +class llama_memory_hybrid_state; // certain models (typically multi-modal) can produce different types of graphs enum llm_graph_type { @@ -188,16 +189,16 @@ class llm_graph_input_cls : public llm_graph_input_i { const llama_cparams & cparams; }; -class llm_graph_input_s_copy : public llm_graph_input_i { +class llm_graph_input_rs : public llm_graph_input_i { public: - llm_graph_input_s_copy(const llama_kv_cache_recurrent_state * kv_state) : kv_state(kv_state) {} - virtual ~llm_graph_input_s_copy() = default; + llm_graph_input_rs(const llama_memory_recurrent_state * mem_state) : mem_state(mem_state) {} + virtual ~llm_graph_input_rs() = default; void set_input(const llama_ubatch * ubatch) override; ggml_tensor * s_copy; // I32 [kv_size] - const llama_kv_cache_recurrent_state * kv_state; + const llama_memory_recurrent_state * mem_state; }; class llm_graph_input_cross_embd : public llm_graph_input_i { @@ -300,6 +301,33 @@ class llm_graph_input_attn_cross : public llm_graph_input_i { const llama_cross * cross = nullptr; }; +class llm_graph_input_mem_hybrid : public llm_graph_input_i { +public: + llm_graph_input_mem_hybrid( + const llama_hparams & hparams, + const llama_cparams & cparams, + const llama_memory_hybrid_state * mem_state) : + hparams(hparams), + cparams(cparams), + mem_state(mem_state) { + } + virtual ~llm_graph_input_mem_hybrid() = default; + + void set_input(const llama_ubatch * ubatch) override; + + ggml_tensor * s_copy; // I32 [kv_size] + + ggml_tensor * get_kq_mask() const { return self_kq_mask_cnv; } + + ggml_tensor * self_kq_mask = nullptr; // F32 [n_kv, n_batch] + ggml_tensor * self_kq_mask_cnv = nullptr; // [n_kv, n_batch] + + const llama_hparams & hparams; + const llama_cparams & cparams; + + const llama_memory_hybrid_state * mem_state; +}; + // // llm_graph_result // @@ -508,13 +536,14 @@ struct llm_graph_context { ggml_tensor * build_inp_out_ids() const; ggml_tensor * build_inp_mean() const; ggml_tensor * build_inp_cls() const; - ggml_tensor * build_inp_s_copy() const; ggml_tensor * build_inp_cross_embd() const; ggml_tensor * build_inp_pos_bucket_enc() const; ggml_tensor * build_inp_pos_bucket_dec() const; ggml_tensor * build_pos_bias(ggml_tensor * pos_bucket, ggml_tensor * attn_rel_b) const; + llm_graph_input_mem_hybrid * build_inp_mem_hybrid() const; + // // attention // @@ -589,22 +618,62 @@ struct llm_graph_context { float kq_scale, int il) const; + ggml_tensor * build_attn( + llm_graph_input_mem_hybrid * inp, + ggml_cgraph * gf, + 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] + ggml_tensor * v_cur, // [n_embd_head_v, n_head_v, n_tokens] + 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; // // recurrent // - ggml_tensor * build_recurrent_state( - ggml_cgraph * gf, - ggml_tensor * s, - ggml_tensor * state_copy, - int32_t state_size, - int32_t n_seqs, - bool avoid_copies = false) const; + // TODO: avoid notion of "kv" + // TODO: move this implementation to llama_memory_recurrent. + // this is analogous to llama_kv_cache_unified::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` + ggml_tensor * build_rs( + ggml_cgraph * gf, + ggml_tensor * s, + ggml_tensor * state_copy, + int32_t state_size, + int32_t n_seqs, + uint32_t n_kv, + uint32_t kv_head, + uint32_t kv_size, + int32_t rs_zero, + bool avoid_copies = false) const; + + llm_graph_input_rs * build_rs_inp() const; + + ggml_tensor * build_rs( + llm_graph_input_rs * inp, + ggml_cgraph * gf, + ggml_tensor * s, + int32_t state_size, + int32_t n_seqs, + bool avoid_copies = false) const; + + ggml_tensor * build_rs( + llm_graph_input_mem_hybrid * inp, + ggml_cgraph * gf, + ggml_tensor * s, + int32_t state_size, + int32_t n_seqs, + bool avoid_copies = false) const; ggml_tensor * build_rwkv_token_shift_load( - ggml_cgraph * gf, - ggml_tensor * state_copy, - const llama_ubatch & ubatch, + llm_graph_input_rs * inp, + ggml_cgraph * gf, + const llama_ubatch & ubatch, int il) const; ggml_tensor * build_rwkv_token_shift_store( diff --git a/src/llama-hparams.cpp b/src/llama-hparams.cpp index 1499eb08a5dd9..b40566ced99ee 100644 --- a/src/llama-hparams.cpp +++ b/src/llama-hparams.cpp @@ -65,7 +65,7 @@ uint32_t llama_hparams::n_embd_v_gqa(uint32_t il) const { return n_embd_head_v * n_head_kv; } -uint32_t llama_hparams::n_embd_k_s() const { +uint32_t llama_hparams::n_embd_r() const { if (wkv_head_size != 0) { // for RWKV models return token_shift_count * n_embd; @@ -76,7 +76,7 @@ uint32_t llama_hparams::n_embd_k_s() const { return (ssm_d_conv > 0 ? ssm_d_conv - 1 : 0) * ssm_d_inner; } -uint32_t llama_hparams::n_embd_v_s() const { +uint32_t llama_hparams::n_embd_s() const { if (wkv_head_size != 0) { // corresponds to RWKV's wkv_states size return n_embd * wkv_head_size; @@ -86,6 +86,10 @@ uint32_t llama_hparams::n_embd_v_s() const { return ssm_d_state * ssm_d_inner; } +bool llama_hparams::is_recurrent(uint32_t il) const { + return recurrent_layer_arr[il]; +} + bool llama_hparams::is_swa(uint32_t il) const { if (il < n_layer) { return swa_layers[il]; diff --git a/src/llama-hparams.h b/src/llama-hparams.h index b2bcb8b01a18b..82bb5b6084946 100644 --- a/src/llama-hparams.h +++ b/src/llama-hparams.h @@ -115,6 +115,9 @@ struct llama_hparams { uint32_t ssm_d_state = 0; uint32_t ssm_dt_rank = 0; + // for hybrid state space models + std::array recurrent_layer_arr; + bool ssm_dt_b_c_rms = false; float f_clamp_kqv = 0.0f; @@ -181,10 +184,13 @@ struct llama_hparams { // dimension of the rolling state embeddings // corresponds to Mamba's conv_states size or RWKV's token_shift states size - uint32_t n_embd_k_s() const; + uint32_t n_embd_r() const; // dimension of the recurrent state embeddings - uint32_t n_embd_v_s() const; + uint32_t n_embd_s() const; + + // whether or not the given layer is recurrent (for hybrid models) + bool is_recurrent(uint32_t il) const; bool is_swa(uint32_t il) const; }; diff --git a/src/llama-kv-cache-unified-iswa.cpp b/src/llama-kv-cache-unified-iswa.cpp index a4a4c2b1b859d..a869b1de8c2a3 100644 --- a/src/llama-kv-cache-unified-iswa.cpp +++ b/src/llama-kv-cache-unified-iswa.cpp @@ -197,21 +197,19 @@ llama_kv_cache_unified * llama_kv_cache_unified_iswa::get_swa() const { llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state(llama_memory_status status) : status(status) {} llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state( - llama_kv_cache_unified_iswa * kv) : status(LLAMA_MEMORY_STATUS_SUCCESS) { - state_base = kv->get_base()->init_full(); - state_swa = kv->get_swa ()->init_full(); - - status = llama_memory_status_combine(state_base->get_status(), state_swa->get_status()); + llama_kv_cache_unified_iswa * kv) : + state_base(kv->get_base()->init_full()), + state_swa (kv->get_swa ()->init_full()), + status(llama_memory_status_combine(state_base->get_status(), state_swa->get_status())) { } llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state( llama_kv_cache_unified_iswa * kv, llama_context * lctx, - bool optimize) : status(LLAMA_MEMORY_STATUS_SUCCESS) { - state_base = kv->get_base()->init_update(lctx, optimize); - state_swa = kv->get_swa ()->init_update(lctx, optimize); - - status = llama_memory_status_combine(state_base->get_status(), state_swa->get_status()); + bool optimize) : + state_base(kv->get_base()->init_update(lctx, optimize)), + state_swa (kv->get_swa ()->init_update(lctx, optimize)), + status(llama_memory_status_combine(state_base->get_status(), state_swa->get_status())) { } llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state( @@ -219,15 +217,13 @@ llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state( llama_sbatch sbatch, std::vector heads_base, std::vector heads_swa, - std::vector ubatches) - : status(LLAMA_MEMORY_STATUS_SUCCESS), - sbatch(std::move(sbatch)), - ubatches(std::move(ubatches)) { + std::vector ubatches) : + sbatch(std::move(sbatch)), + ubatches(std::move(ubatches)), // note: here we copy the ubatches. not sure if this is ideal - state_base.reset(new llama_kv_cache_unified_state(kv->get_base(), {}, std::move(heads_base), this->ubatches)); - state_swa .reset(new llama_kv_cache_unified_state(kv->get_swa (), {}, std::move(heads_swa), this->ubatches)); - - status = llama_memory_status_combine(state_base->get_status(), state_swa->get_status()); + state_base(new llama_kv_cache_unified_state(kv->get_base(), {}, std::move(heads_base), this->ubatches)), + state_swa (new llama_kv_cache_unified_state(kv->get_swa (), {}, std::move(heads_swa), this->ubatches)), + status(llama_memory_status_combine(state_base->get_status(), state_swa->get_status())) { } llama_kv_cache_unified_iswa_state:: ~llama_kv_cache_unified_iswa_state() = default; diff --git a/src/llama-kv-cache-unified-iswa.h b/src/llama-kv-cache-unified-iswa.h index 6e941e1a41b88..813eaf39b25b0 100644 --- a/src/llama-kv-cache-unified-iswa.h +++ b/src/llama-kv-cache-unified-iswa.h @@ -117,8 +117,6 @@ class llama_kv_cache_unified_iswa_state : public llama_memory_state_i { const llama_kv_cache_unified_state * get_swa() const; private: - llama_memory_status status; - //llama_kv_cache_unified_iswa * kv; llama_sbatch sbatch; @@ -128,6 +126,8 @@ class llama_kv_cache_unified_iswa_state : public llama_memory_state_i { std::vector ubatches; - llama_memory_state_ptr state_base; - llama_memory_state_ptr state_swa; + const llama_memory_state_ptr state_base; + const llama_memory_state_ptr state_swa; + + const llama_memory_status status; }; diff --git a/src/llama-kv-cache-unified.cpp b/src/llama-kv-cache-unified.cpp index 3b37679859d39..d4412288925c3 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -68,8 +68,8 @@ llama_kv_cache_unified::llama_kv_cache_unified( continue; } - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il) + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il); + const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il); const char * dev_name = "CPU"; @@ -1430,7 +1430,7 @@ void llama_kv_cache_unified::state_write_data(llama_io_write_i & io, const std:: for (const auto & layer : layers) { const uint32_t il = layer.il; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il) + hparams.n_embd_k_s(); + const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il); // Write key type const int32_t k_type_i = (int32_t)layer.k->type; @@ -1452,7 +1452,7 @@ void llama_kv_cache_unified::state_write_data(llama_io_write_i & io, const std:: for (const auto & layer : layers) { const uint32_t il = layer.il; - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il); // Write value type const int32_t v_type_i = (int32_t)layer.v->type; @@ -1476,7 +1476,7 @@ void llama_kv_cache_unified::state_write_data(llama_io_write_i & io, const std:: for (const auto & layer : layers) { const uint32_t il = layer.il; - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il); // Write value type const int32_t v_type_i = (int32_t)layer.v->type; @@ -1621,7 +1621,7 @@ bool llama_kv_cache_unified::state_read_data(llama_io_read_i & io, uint32_t cell for (const auto & layer : layers) { const uint32_t il = layer.il; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il) + hparams.n_embd_k_s(); + const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il); // Read type of key int32_t k_type_i_ref; @@ -1651,7 +1651,7 @@ bool llama_kv_cache_unified::state_read_data(llama_io_read_i & io, uint32_t cell for (const auto & layer : layers) { const uint32_t il = layer.il; - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il); // Read type of value int32_t v_type_i_ref; @@ -1681,7 +1681,7 @@ bool llama_kv_cache_unified::state_read_data(llama_io_read_i & io, uint32_t cell for (const auto & layer : layers) { const uint32_t il = layer.il; - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il); // Read type of value int32_t v_type_i_ref; diff --git a/src/llama-memory-hybrid.cpp b/src/llama-memory-hybrid.cpp new file mode 100644 index 0000000000000..d4b260db4c8e7 --- /dev/null +++ b/src/llama-memory-hybrid.cpp @@ -0,0 +1,247 @@ +#include "llama-memory-hybrid.h" + +#include "llama-impl.h" +#include "llama-model.h" +#include "llama-context.h" + +// +// llama_memory_hybrid +// + +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, + /* layer filters */ + layer_filter_cb && filter_attn, + layer_filter_cb && filter_recr) : + hparams(model.hparams), + mem_attn(new llama_kv_cache_unified( + model, + filter_attn == nullptr ? + [&](int32_t il) { return !model.hparams.is_recurrent(il); } + : filter_attn, + type_k, + type_v, + v_trans, + offload, + kv_size, + n_seq_max, + n_pad, + n_swa, + swa_type + )), + mem_recr(new llama_memory_recurrent( + model, + filter_recr == nullptr ? + [&](int32_t il) { return model.hparams.is_recurrent(il); } + : filter_recr, + type_r, + type_s, + offload, + rs_size, + n_seq_max + )) {} + +llama_memory_state_ptr llama_memory_hybrid::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled) { + + // since this includes a recurrent cache, we cannot use split_simple + auto sbatch = llama_sbatch(batch, hparams.n_embd, false); + + // follow the recurrent pattern for creating the ubatch splits + std::vector ubatches; + while (sbatch.n_tokens > 0) { + llama_ubatch ubatch; + + if (embd_pooled) { + // Pooled embeddings cannot be split across ubatches (yet) + ubatch = sbatch.split_seq(n_ubatch); + } else { + ubatch = sbatch.split_equal(n_ubatch); + } + + ubatches.push_back(ubatch); + } + + // prepare the recurrent batches first + if (!mem_recr->prepare(ubatches)) { + // TODO: will the recurrent cache be in an undefined state at this point? + LLAMA_LOG_ERROR("%s: failed to prepare recurrent ubatches\n", __func__); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + } + + // prepare the attention cache + auto heads_attn = mem_attn->prepare(ubatches); + if (heads_attn.empty()) { + LLAMA_LOG_ERROR("%s: failed to prepare attention ubatches\n", __func__); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + } + + return std::make_unique( + this, std::move(sbatch), std::move(heads_attn), std::move(ubatches)); +} + +llama_memory_state_ptr llama_memory_hybrid::init_full() { + return std::make_unique(this); +} + +llama_memory_state_ptr llama_memory_hybrid::init_update(llama_context * lctx, bool optimize) { + return std::make_unique(this, lctx, optimize); +} + +bool llama_memory_hybrid::get_can_shift() const { + // Shifting is trivially supported for recurrent + return mem_attn->get_can_shift(); +} + +void llama_memory_hybrid::clear(bool data) { + mem_attn->clear(data); + mem_recr->clear(data); +} + +bool llama_memory_hybrid::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { + // Try removing from the recurrent cache first since it may fail. If it does + // fail, the cache will not have been mutated. + if (!mem_recr->seq_rm(seq_id, p0, p1)) { + return false; + } + return mem_attn->seq_rm(seq_id, p0, p1); +} + +void llama_memory_hybrid::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { + mem_attn->seq_cp(seq_id_src, seq_id_dst, p0, p1); + mem_recr->seq_cp(seq_id_src, seq_id_dst, p0, p1); +} + +void llama_memory_hybrid::seq_keep(llama_seq_id seq_id) { + mem_attn->seq_keep(seq_id); + mem_recr->seq_keep(seq_id); +} + +void llama_memory_hybrid::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { + mem_attn->seq_add(seq_id, p0, p1, shift); + mem_recr->seq_add(seq_id, p0, p1, shift); +} + +void llama_memory_hybrid::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { + mem_attn->seq_div(seq_id, p0, p1, d); + mem_recr->seq_div(seq_id, p0, p1, d); +} + +llama_pos llama_memory_hybrid::seq_pos_min(llama_seq_id seq_id) const { + // the min of the total cache is the max of the two caches' min values + return std::max(mem_attn->seq_pos_min(seq_id), mem_recr->seq_pos_min(seq_id)); +} + +llama_pos llama_memory_hybrid::seq_pos_max(llama_seq_id seq_id) const { + // the max of the total cache is the min of the two caches' max values + return std::min(mem_attn->seq_pos_max(seq_id), mem_recr->seq_pos_max(seq_id)); +} + +void llama_memory_hybrid::state_write(llama_io_write_i & io, llama_seq_id seq_id) const { + mem_attn->state_write(io, seq_id); + mem_recr->state_write(io, seq_id); +} + +void llama_memory_hybrid::state_read(llama_io_read_i & io, llama_seq_id seq_id) { + mem_attn->state_read(io, seq_id); + mem_recr->state_read(io, seq_id); +} + +llama_kv_cache_unified * llama_memory_hybrid::get_mem_attn() const { + return mem_attn.get(); +} + +llama_memory_recurrent * llama_memory_hybrid::get_mem_recr() const { + return mem_recr.get(); +} + +llama_memory_hybrid_state::llama_memory_hybrid_state(llama_memory_status status) : status(status) {} + +llama_memory_hybrid_state::llama_memory_hybrid_state(llama_memory_hybrid * mem) : + state_attn(mem->get_mem_attn()->init_full()), + state_recr(mem->get_mem_recr()->init_full()), + status(llama_memory_status_combine(state_attn->get_status(), state_recr->get_status())) { +} + +llama_memory_hybrid_state::llama_memory_hybrid_state( + llama_memory_hybrid * mem, + llama_context * lctx, + bool optimize) : + state_attn(mem->get_mem_attn()->init_update(lctx, optimize)), + state_recr(mem->get_mem_recr()->init_update(lctx, optimize)), + status(llama_memory_status_combine(state_attn->get_status(), state_recr->get_status())) { +} + +llama_memory_hybrid_state::llama_memory_hybrid_state( + llama_memory_hybrid * mem, + llama_sbatch sbatch, + std::vector heads_attn, + std::vector ubatches) : + sbatch(std::move(sbatch)), + ubatches(std::move(ubatches)), + // note: here we copy the ubatches. not sure if this is ideal + state_attn(new llama_kv_cache_unified_state(mem->get_mem_attn(), {}, std::move(heads_attn), this->ubatches)), + state_recr(new llama_memory_recurrent_state(mem->get_mem_recr(), {}, this->ubatches)), + status(LLAMA_MEMORY_STATUS_SUCCESS) { +} + +bool llama_memory_hybrid_state::next() { + assert(status == LLAMA_MEMORY_STATUS_SUCCESS); + + state_attn->next(); + state_recr->next(); + + if (++i_next >= ubatches.size()) { + return false; + } + + return true; +} + +bool llama_memory_hybrid_state::apply() { + assert(status == LLAMA_MEMORY_STATUS_SUCCESS); + + bool res = true; + + res = res & state_attn->apply(); + res = res & state_recr->apply(); + + return res; +} + +std::vector & llama_memory_hybrid_state::out_ids() { + assert(status == LLAMA_MEMORY_STATUS_SUCCESS); + + return sbatch.out_ids; +} + +llama_memory_status llama_memory_hybrid_state::get_status() const { + return status; +} + +const llama_ubatch & llama_memory_hybrid_state::get_ubatch() const { + assert(status == LLAMA_MEMORY_STATUS_SUCCESS); + return ubatches[i_next]; +} + +const llama_kv_cache_unified_state * llama_memory_hybrid_state::get_state_attn() const { + return static_cast(state_attn.get()); +} + +const llama_memory_recurrent_state * llama_memory_hybrid_state::get_state_recr() const { + return static_cast(state_recr.get()); +} diff --git a/src/llama-memory-hybrid.h b/src/llama-memory-hybrid.h new file mode 100644 index 0000000000000..b5700c5225f18 --- /dev/null +++ b/src/llama-memory-hybrid.h @@ -0,0 +1,143 @@ +#pragma once + +#include "llama-batch.h" +#include "llama-graph.h" +#include "llama-kv-cache-unified.h" +#include "llama-memory.h" +#include "llama-memory-recurrent.h" + +#include +#include + +// +// llama_memory_hybrid +// + +// utilizes instances of llama_memory_recurrent and llama_kv_cache_unified to +// support models where each layer may be either attention-based or recurrent + +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, + /* layer filters */ + layer_filter_cb && filter_attn = nullptr, + layer_filter_cb && filter_recr = nullptr); + + ~llama_memory_hybrid() = default; + + // + // llama_memory_i + // + + llama_memory_state_ptr init_batch( + const llama_batch & batch, + uint32_t n_ubatch, + bool embd_pooled) override; + + llama_memory_state_ptr init_full() override; + + llama_memory_state_ptr init_update(llama_context * lctx, bool optimize) override; + + bool get_can_shift() const override; + + void clear(bool data) override; + + bool seq_rm (llama_seq_id seq_id, llama_pos p0, llama_pos p1) override; + void seq_cp (llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) override; + void seq_keep(llama_seq_id seq_id) override; + void seq_add (llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) override; + void seq_div (llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) override; + + llama_pos seq_pos_min(llama_seq_id seq_id) const override; + llama_pos seq_pos_max(llama_seq_id seq_id) const override; + + // state write/load + + void state_write(llama_io_write_i & io, llama_seq_id seq_id = -1) const override; + void state_read (llama_io_read_i & io, llama_seq_id seq_id = -1) override; + + // + // llama_memory_hybrid specific API + // + + llama_kv_cache_unified * 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_recr; +}; + +class llama_memory_hybrid_state : public llama_memory_state_i { +public: + // init failure + explicit llama_memory_hybrid_state(llama_memory_status status); + + // init full + explicit llama_memory_hybrid_state(llama_memory_hybrid * mem); + + // init update + explicit llama_memory_hybrid_state( + llama_memory_hybrid * mem, + llama_context * lctx, + bool optimize); + + // init success + llama_memory_hybrid_state( + llama_memory_hybrid * mem, + llama_sbatch sbatch, + std::vector heads_attn, + std::vector ubatches); + + ~llama_memory_hybrid_state() = default; + + bool next() override; + bool apply() override; + + std::vector & out_ids() override; + + llama_memory_status get_status() const override; + const llama_ubatch & get_ubatch() const override; + + // + // llama_memory_hybrid_state + // + + const llama_kv_cache_unified_state * get_state_attn() const; + const llama_memory_recurrent_state * get_state_recr() const; + +private: + llama_sbatch sbatch; + + // the index of the next ubatch to process + size_t i_next = 0; + + std::vector ubatches; + + const llama_memory_state_ptr state_attn; + const llama_memory_state_ptr state_recr; + + const llama_memory_status status; +}; diff --git a/src/llama-kv-cache-recurrent.cpp b/src/llama-memory-recurrent.cpp similarity index 67% rename from src/llama-kv-cache-recurrent.cpp rename to src/llama-memory-recurrent.cpp index 8f6f120f682b7..c4f9a6f1ddc98 100644 --- a/src/llama-kv-cache-recurrent.cpp +++ b/src/llama-memory-recurrent.cpp @@ -1,4 +1,4 @@ -#include "llama-kv-cache-recurrent.h" +#include "llama-memory-recurrent.h" #include "llama-impl.h" #include "llama-io.h" @@ -12,27 +12,28 @@ #include // -// llama_kv_cache_recurrent +// llama_memory_recurrent // -llama_kv_cache_recurrent::llama_kv_cache_recurrent( - const llama_model & model, - ggml_type type_k, - ggml_type type_v, - bool offload, - uint32_t kv_size, - uint32_t n_seq_max) : hparams(model.hparams), n_seq_max(n_seq_max) { +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 int32_t n_layer = hparams.n_layer; - LLAMA_LOG_INFO("%s: kv_size = %u, n_seq_max = %u, type_k = '%s', type_v = '%s', n_layer = %d\n", - __func__, kv_size, n_seq_max, ggml_type_name(type_k), ggml_type_name(type_v), n_layer); + LLAMA_LOG_INFO("%s: mem_size = %u, n_seq_max = %u, type_r = '%s', type_s = '%s', n_layer = %d\n", + __func__, mem_size, n_seq_max, ggml_type_name(type_r), ggml_type_name(type_s), n_layer); head = 0; - size = kv_size; + size = mem_size; used = 0; cells.clear(); - cells.resize(kv_size); + cells.resize(mem_size); // create a context for each buffer type std::map ctx_map; @@ -59,12 +60,14 @@ llama_kv_cache_recurrent::llama_kv_cache_recurrent( return it->second; }; - k_l.reserve(n_layer); - v_l.reserve(n_layer); + r_l.resize(n_layer); + s_l.resize(n_layer); for (int i = 0; i < n_layer; i++) { - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(i) + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(i) + hparams.n_embd_v_s(); + if (filter && !filter(i)) { + LLAMA_LOG_DEBUG("%s: layer %3d: skipped\n", __func__, i); + continue; + } const char * dev_name = "CPU"; @@ -84,12 +87,12 @@ llama_kv_cache_recurrent::llama_kv_cache_recurrent( throw std::runtime_error("failed to create ggml context for kv cache"); } - ggml_tensor * k = ggml_new_tensor_1d(ctx, type_k, n_embd_k_gqa*kv_size); - ggml_tensor * v = ggml_new_tensor_1d(ctx, type_v, n_embd_v_gqa*kv_size); - ggml_format_name(k, "cache_k_l%d", i); - ggml_format_name(v, "cache_v_l%d", i); - k_l.push_back(k); - v_l.push_back(v); + ggml_tensor * r = ggml_new_tensor_1d(ctx, type_r, hparams.n_embd_r()*mem_size); + ggml_tensor * s = ggml_new_tensor_1d(ctx, type_s, hparams.n_embd_s()*mem_size); + ggml_format_name(r, "cache_r_l%d", i); + ggml_format_name(s, "cache_s_l%d", i); + r_l[i] = r; + s_l[i] = s; } // allocate tensors and initialize the buffers to avoid NaNs in the padding @@ -107,17 +110,17 @@ llama_kv_cache_recurrent::llama_kv_cache_recurrent( } { - const size_t memory_size_k = size_k_bytes(); - const size_t memory_size_v = size_v_bytes(); + const size_t memory_size_r = size_r_bytes(); + const size_t memory_size_s = size_s_bytes(); - LLAMA_LOG_INFO("%s: KV self size = %7.2f MiB, K (%s): %7.2f MiB, V (%s): %7.2f MiB\n", __func__, - (float)(memory_size_k + memory_size_v) / (1024.0f * 1024.0f), - ggml_type_name(type_k), (float)memory_size_k / (1024.0f * 1024.0f), - ggml_type_name(type_v), (float)memory_size_v / (1024.0f * 1024.0f)); + LLAMA_LOG_INFO("%s: KV self size = %7.2f MiB, R (%s): %7.2f MiB, S (%s): %7.2f MiB\n", __func__, + (float)(memory_size_r + memory_size_s) / (1024.0f * 1024.0f), + ggml_type_name(type_r), (float)memory_size_r / (1024.0f * 1024.0f), + ggml_type_name(type_s), (float)memory_size_s / (1024.0f * 1024.0f)); } } -void llama_kv_cache_recurrent::clear(bool data) { +void llama_memory_recurrent::clear(bool data) { for (int32_t i = 0; i < (int32_t) size; ++i) { cells[i].pos = -1; cells[i].seq_id.clear(); @@ -135,7 +138,7 @@ void llama_kv_cache_recurrent::clear(bool data) { } } -bool llama_kv_cache_recurrent::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { +bool llama_memory_recurrent::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1) { uint32_t new_head = size; if (p0 < 0) { @@ -154,7 +157,7 @@ bool llama_kv_cache_recurrent::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_p if (0 <= seq_id) { int32_t & tail_id = cells[seq_id].tail; if (tail_id >= 0) { - const kv_cell & cell = cells[tail_id]; + const auto & cell = cells[tail_id]; // partial intersection is invalid if ((0 < p0 && p0 <= cell.pos) || (0 < p1 && p1 <= cell.pos)) { return false; @@ -202,7 +205,7 @@ bool llama_kv_cache_recurrent::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_p return true; } -void llama_kv_cache_recurrent::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { +void llama_memory_recurrent::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { if (seq_id_src == seq_id_dst) { return; } @@ -216,11 +219,11 @@ void llama_kv_cache_recurrent::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_ } if ((uint32_t) seq_id_dst < size && (uint32_t) seq_id_src < size) { - kv_cell & tail_src = cells[seq_id_src]; - kv_cell & tail_dst = cells[seq_id_dst]; + auto & tail_src = cells[seq_id_src]; + auto & tail_dst = cells[seq_id_dst]; if (tail_dst.tail >= 0) { // clear destination seq_id if it wasn't empty - kv_cell & cell_dst = cells[tail_dst.tail]; + auto & cell_dst = cells[tail_dst.tail]; cell_dst.seq_id.erase(seq_id_dst); tail_dst.tail = -1; @@ -231,7 +234,7 @@ void llama_kv_cache_recurrent::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_ } } if (tail_src.tail >= 0) { - kv_cell & cell_src = cells[tail_src.tail]; + auto & cell_src = cells[tail_src.tail]; cell_src.seq_id.insert(seq_id_dst); tail_dst.tail = tail_src.tail; @@ -239,7 +242,7 @@ void llama_kv_cache_recurrent::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_ } } -void llama_kv_cache_recurrent::seq_keep(llama_seq_id seq_id) { +void llama_memory_recurrent::seq_keep(llama_seq_id seq_id) { uint32_t new_head = size; for (uint32_t i = 0; i < size; ++i) { @@ -271,7 +274,7 @@ void llama_kv_cache_recurrent::seq_keep(llama_seq_id seq_id) { } } -void llama_kv_cache_recurrent::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { +void llama_memory_recurrent::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { if (shift == 0) { return; } @@ -293,7 +296,7 @@ void llama_kv_cache_recurrent::seq_add(llama_seq_id seq_id, llama_pos p0, llama_ if (0 <= seq_id && seq_id < (int64_t) size) { const int32_t tail_id = cells[seq_id].tail; if (tail_id >= 0) { - kv_cell & cell = cells[tail_id]; + auto & cell = cells[tail_id]; if (cell.has_seq_id(seq_id) && p0 <= cell.pos && cell.pos < p1) { cell.pos += shift; } @@ -301,7 +304,7 @@ void llama_kv_cache_recurrent::seq_add(llama_seq_id seq_id, llama_pos p0, llama_ } } -void llama_kv_cache_recurrent::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { +void llama_memory_recurrent::seq_div(llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { if (d == 1) { return; } @@ -323,7 +326,7 @@ void llama_kv_cache_recurrent::seq_div(llama_seq_id seq_id, llama_pos p0, llama_ if (0 <= seq_id && seq_id < (int64_t) size) { const int32_t tail_id = cells[seq_id].tail; if (tail_id >= 0) { - kv_cell & cell = cells[tail_id]; + auto & cell = cells[tail_id]; if (cell.has_seq_id(seq_id) && p0 <= cell.pos && cell.pos < p1) { cell.pos /= d; } @@ -331,7 +334,7 @@ void llama_kv_cache_recurrent::seq_div(llama_seq_id seq_id, llama_pos p0, llama_ } } -llama_pos llama_kv_cache_recurrent::seq_pos_min(llama_seq_id seq_id) const { +llama_pos llama_memory_recurrent::seq_pos_min(llama_seq_id seq_id) const { llama_pos result = std::numeric_limits::max(); for (uint32_t i = 0; i < size; ++i) { @@ -347,7 +350,7 @@ llama_pos llama_kv_cache_recurrent::seq_pos_min(llama_seq_id seq_id) const { return result; } -llama_pos llama_kv_cache_recurrent::seq_pos_max(llama_seq_id seq_id) const { +llama_pos llama_memory_recurrent::seq_pos_max(llama_seq_id seq_id) const { llama_pos result = -1; for (uint32_t i = 0; i < size; ++i) { @@ -359,7 +362,7 @@ llama_pos llama_kv_cache_recurrent::seq_pos_max(llama_seq_id seq_id) const { return result; } -llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_all) { +llama_memory_state_ptr llama_memory_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_all) { auto sbatch = llama_sbatch(batch, hparams.n_embd, false); std::vector ubatches; @@ -378,24 +381,24 @@ llama_memory_state_ptr llama_kv_cache_recurrent::init_batch(const llama_batch & } if (!prepare(ubatches)) { - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } - return std::make_unique(LLAMA_MEMORY_STATUS_SUCCESS, this, std::move(sbatch), std::move(ubatches)); + return std::make_unique(this, std::move(sbatch), std::move(ubatches)); } -llama_memory_state_ptr llama_kv_cache_recurrent::init_full() { - return std::make_unique(LLAMA_MEMORY_STATUS_SUCCESS, this); +llama_memory_state_ptr llama_memory_recurrent::init_full() { + return std::make_unique(this); } -llama_memory_state_ptr llama_kv_cache_recurrent::init_update(llama_context * lctx, bool optimize) { +llama_memory_state_ptr llama_memory_recurrent::init_update(llama_context * lctx, bool optimize) { GGML_UNUSED(lctx); GGML_UNUSED(optimize); - return std::make_unique(LLAMA_MEMORY_STATUS_NO_UPDATE); + return std::make_unique(LLAMA_MEMORY_STATUS_NO_UPDATE); } -bool llama_kv_cache_recurrent::prepare(const std::vector & ubatches) { +bool llama_memory_recurrent::prepare(const std::vector & ubatches) { // simply remember the full state because it is very small for this type of cache // TODO: optimize auto org_cells = cells; @@ -419,7 +422,7 @@ bool llama_kv_cache_recurrent::prepare(const std::vector & ubatche return success; } -bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { +bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { const uint32_t n_seqs = ubatch.n_seqs; const uint32_t n_seq_tokens = ubatch.n_seq_tokens; @@ -453,9 +456,9 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { return false; } if (j > 0) { - kv_cell & seq = cells[seq_id]; + auto & seq = cells[seq_id]; if (seq.tail >= 0) { - kv_cell & cell = cells[seq.tail]; + auto & cell = cells[seq.tail]; // clear cells from seq_ids that become shared // (should not normally happen, but let's handle it anyway) cell.seq_id.erase(seq_id); @@ -475,7 +478,7 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { std::vector tails_verif; tails_verif.assign(size, -1); for (uint32_t i = 0; i < size; ++i) { - kv_cell & cell = cells[i]; + auto & cell = cells[i]; for (llama_seq_id seq_id : cell.seq_id) { if (tails_verif[seq_id] != -1) { LLAMA_LOG_ERROR("%s: duplicate tail for seq_id %d in cell %d and %d\n", __func__, seq_id, i, tails_verif[seq_id]); @@ -496,7 +499,7 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { for (uint32_t i = 0; i < size; ++i) { if (next_empty_cell >= size) { next_empty_cell -= size; } - kv_cell & cell = cells[next_empty_cell]; + auto & cell = cells[next_empty_cell]; if (cell.is_empty()) { break; } next_empty_cell += 1; } @@ -504,20 +507,20 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { // find usable cell range for (uint32_t s = 0; s < n_seqs; ++s) { const llama_seq_id seq_id = ubatch.seq_id[s][0]; - kv_cell & seq_meta = cells[seq_id]; + auto & seq_meta = cells[seq_id]; bool has_cell = false; if (seq_meta.tail >= 0) { - kv_cell & cell = cells[seq_meta.tail]; + auto & cell = cells[seq_meta.tail]; GGML_ASSERT(cell.has_seq_id(seq_id)); // does this seq_id "own" the cell? if (cell.seq_id.size() == 1) { has_cell = true; } } if (!has_cell) { - kv_cell & empty_cell = cells[next_empty_cell]; + auto & empty_cell = cells[next_empty_cell]; GGML_ASSERT(empty_cell.is_empty()); // copy old tail into the empty cell if (seq_meta.tail >= 0) { - kv_cell & orig_cell = cells[seq_meta.tail]; + auto & orig_cell = cells[seq_meta.tail]; empty_cell.pos = orig_cell.pos; empty_cell.src = orig_cell.src; orig_cell.seq_id.erase(seq_id); @@ -530,7 +533,7 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { for (uint32_t i = 0; i < size; ++i) { next_empty_cell += 1; if (next_empty_cell >= size) { next_empty_cell -= size; } - kv_cell & cell = cells[next_empty_cell]; + auto & cell = cells[next_empty_cell]; if (cell.is_empty()) { break; } } } @@ -544,8 +547,8 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { const int32_t dst_id = s + min; const int32_t src_id = cells[ubatch.seq_id[s][0]].tail; if (dst_id != src_id) { - kv_cell & dst_cell = cells[dst_id]; - kv_cell & src_cell = cells[src_id]; + auto & dst_cell = cells[dst_id]; + auto & src_cell = cells[src_id]; std::swap(dst_cell.pos, src_cell.pos); std::swap(dst_cell.src, src_cell.src); @@ -567,7 +570,7 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { for (uint32_t s = 0; s < n_seqs; ++s) { const llama_pos last_pos = ubatch.pos[n_seq_tokens * s + n_seq_tokens - 1]; const int32_t cell_id = s + min; - kv_cell & cell = cells[cell_id]; + auto & cell = cells[cell_id]; if (cell.pos >= 0 && last_pos != cell.pos + (llama_pos) n_seq_tokens) { // What should happen when the pos backtracks or skips a value? @@ -620,18 +623,18 @@ bool llama_kv_cache_recurrent::find_slot(const llama_ubatch & ubatch) { head = min; n = max - min + 1; used = std::count_if(cells.begin(), cells.end(), - [](const kv_cell & cell){ return !cell.is_empty(); }); + [](const mem_cell & cell){ return !cell.is_empty(); }); // sanity check return n >= n_seqs; } -bool llama_kv_cache_recurrent::get_can_shift() const { +bool llama_memory_recurrent::get_can_shift() const { // shifting the pos is trivial for recurrent models return true; } -size_t llama_kv_cache_recurrent::total_size() const { +size_t llama_memory_recurrent::total_size() const { size_t size = 0; for (const auto & buf : bufs) { size += ggml_backend_buffer_get_size(buf.get()); @@ -640,27 +643,31 @@ size_t llama_kv_cache_recurrent::total_size() const { return size; } -size_t llama_kv_cache_recurrent::size_k_bytes() const { - size_t size_k_bytes = 0; +size_t llama_memory_recurrent::size_r_bytes() const { + size_t size_r_bytes = 0; - for (const auto & k : k_l) { - size_k_bytes += ggml_nbytes(k); + for (const auto & r : r_l) { + if (r != nullptr) { + size_r_bytes += ggml_nbytes(r); + } } - return size_k_bytes; + return size_r_bytes; } -size_t llama_kv_cache_recurrent::size_v_bytes() const { - size_t size_v_bytes = 0; +size_t llama_memory_recurrent::size_s_bytes() const { + size_t size_s_bytes = 0; - for (const auto & v : v_l) { - size_v_bytes += ggml_nbytes(v); + for (const auto & s : s_l) { + if (s != nullptr) { + size_s_bytes += ggml_nbytes(s); + } } - return size_v_bytes; + return size_s_bytes; } -void llama_kv_cache_recurrent::state_write(llama_io_write_i & io, llama_seq_id seq_id) const { +void llama_memory_recurrent::state_write(llama_io_write_i & io, llama_seq_id seq_id) const { std::vector> cell_ranges; // ranges, from inclusive, to exclusive uint32_t cell_count = 0; @@ -698,7 +705,7 @@ void llama_kv_cache_recurrent::state_write(llama_io_write_i & io, llama_seq_id s state_write_data(io, cell_ranges); } -void llama_kv_cache_recurrent::state_read(llama_io_read_i & io, llama_seq_id seq_id) { +void llama_memory_recurrent::state_read(llama_io_read_i & io, llama_seq_id seq_id) { uint32_t cell_count; io.read_to(&cell_count, sizeof(cell_count)); @@ -717,7 +724,7 @@ void llama_kv_cache_recurrent::state_read(llama_io_read_i & io, llama_seq_id seq } } -void llama_kv_cache_recurrent::state_write_meta(llama_io_write_i & io, const std::vector> & cell_ranges, llama_seq_id seq_id) const { +void llama_memory_recurrent::state_write_meta(llama_io_write_i & io, const std::vector> & cell_ranges, llama_seq_id seq_id) const { for (const auto & range : cell_ranges) { for (uint32_t i = range.first; i < range.second; ++i) { const auto & cell = cells[i]; @@ -736,87 +743,85 @@ void llama_kv_cache_recurrent::state_write_meta(llama_io_write_i & io, const std } } -void llama_kv_cache_recurrent::state_write_data(llama_io_write_i & io, const std::vector> & cell_ranges) const { - const uint32_t v_trans = 0; +void llama_memory_recurrent::state_write_data(llama_io_write_i & io, const std::vector> & cell_ranges) const { + const uint32_t s_trans = 0; const uint32_t n_layer = hparams.n_layer; - io.write(&v_trans, sizeof(v_trans)); - io.write(&n_layer, sizeof(n_layer)); + io.write(&s_trans, sizeof(s_trans)); + io.write(&n_layer, sizeof(n_layer)); std::vector tmp_buf; // Iterate and write all the keys first, each row is a cell // Get whole range at a time for (uint32_t il = 0; il < n_layer; ++il) { - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il) + hparams.n_embd_k_s(); // Write key type - const int32_t k_type_i = (int32_t)k_l[il]->type; - io.write(&k_type_i, sizeof(k_type_i)); + const int32_t r_type_i = (int32_t)r_l[il]->type; + io.write(&r_type_i, sizeof(r_type_i)); // Write row size of key - const uint64_t k_size_row = ggml_row_size(k_l[il]->type, n_embd_k_gqa); - io.write(&k_size_row, sizeof(k_size_row)); + const uint64_t r_size_row = ggml_row_size(r_l[il]->type, hparams.n_embd_r()); + io.write(&r_size_row, sizeof(r_size_row)); // Read each range of cells of k_size length each into tmp_buf and write out for (const auto & range : cell_ranges) { const size_t range_size = range.second - range.first; - const size_t buf_size = range_size * k_size_row; - io.write_tensor(k_l[il], range.first * k_size_row, buf_size); + const size_t buf_size = range_size * r_size_row; + io.write_tensor(r_l[il], range.first * r_size_row, buf_size); } } - if (!v_trans) { + if (!s_trans) { for (uint32_t il = 0; il < n_layer; ++il) { - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); // Write value type - const int32_t v_type_i = (int32_t)v_l[il]->type; - io.write(&v_type_i, sizeof(v_type_i)); + const int32_t s_type_i = (int32_t)s_l[il]->type; + io.write(&s_type_i, sizeof(s_type_i)); // Write row size of value - const uint64_t v_size_row = ggml_row_size(v_l[il]->type, n_embd_v_gqa); - io.write(&v_size_row, sizeof(v_size_row)); + const uint64_t s_size_row = ggml_row_size(s_l[il]->type, hparams.n_embd_s()); + io.write(&s_size_row, sizeof(s_size_row)); - // Read each range of cells of v_size length each into tmp_buf and write out + // Read each range of cells of s_size length each into tmp_buf and write out for (const auto & range : cell_ranges) { const size_t range_size = range.second - range.first; - const size_t buf_size = range_size * v_size_row; - io.write_tensor(v_l[il], range.first * v_size_row, buf_size); + const size_t buf_size = range_size * s_size_row; + io.write_tensor(s_l[il], range.first * s_size_row, buf_size); } } } else { // When v is transposed, we also need the element size and get the element ranges from each row - const uint32_t kv_size = size; + const uint32_t mem_size = size; for (uint32_t il = 0; il < n_layer; ++il) { - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_s = hparams.n_embd_s(); // Write value type - const int32_t v_type_i = (int32_t)v_l[il]->type; - io.write(&v_type_i, sizeof(v_type_i)); + const int32_t s_type_i = (int32_t)s_l[il]->type; + io.write(&s_type_i, sizeof(s_type_i)); // Write element size - const uint32_t v_size_el = ggml_type_size(v_l[il]->type); - io.write(&v_size_el, sizeof(v_size_el)); + const uint32_t s_size_el = ggml_type_size(s_l[il]->type); + io.write(&s_size_el, sizeof(s_size_el)); // Write GQA embedding size - io.write(&n_embd_v_gqa, sizeof(n_embd_v_gqa)); + io.write(&n_embd_s, sizeof(n_embd_s)); // For each row, we get the element values of each cell - for (uint32_t j = 0; j < n_embd_v_gqa; ++j) { + for (uint32_t j = 0; j < n_embd_s; ++j) { // Read each range of cells of v_size_el length each into tmp_buf and write out for (const auto & range : cell_ranges) { const size_t range_size = range.second - range.first; - const size_t src_offset = (range.first + j * kv_size) * v_size_el; - const size_t buf_size = range_size * v_size_el; - io.write_tensor(v_l[il], src_offset, buf_size); + const size_t src_offset = (range.first + j * mem_size) * s_size_el; + const size_t buf_size = range_size * s_size_el; + io.write_tensor(s_l[il], src_offset, buf_size); } } } } } -bool llama_kv_cache_recurrent::state_read_meta(llama_io_read_i & io, uint32_t cell_count, llama_seq_id dest_seq_id) { +bool llama_memory_recurrent::state_read_meta(llama_io_read_i & io, uint32_t cell_count, llama_seq_id dest_seq_id) { if (dest_seq_id != -1) { // single sequence @@ -869,7 +874,7 @@ bool llama_kv_cache_recurrent::state_read_meta(llama_io_read_i & io, uint32_t ce clear(true); for (uint32_t i = 0; i < cell_count; ++i) { - kv_cell & cell = cells[i]; + auto & cell = cells[i]; llama_pos pos; uint32_t n_seq_id; @@ -883,7 +888,7 @@ bool llama_kv_cache_recurrent::state_read_meta(llama_io_read_i & io, uint32_t ce llama_seq_id seq_id; io.read_to(&seq_id, sizeof(seq_id)); - // TODO: llama_kv_cache_recurrent should have a notion of max sequences + // TODO: llama_memory_recurrent should have a notion of max sequences //if (seq_id < 0 || (uint32_t) seq_id >= llama_n_seq_max(ctx)) { if (seq_id < 0) { //LLAMA_LOG_ERROR("%s: invalid seq_id, %d is out of range [0, %u)\n", __func__, seq_id, llama_n_seq_max(ctx)); @@ -915,10 +920,10 @@ bool llama_kv_cache_recurrent::state_read_meta(llama_io_read_i & io, uint32_t ce return true; } -bool llama_kv_cache_recurrent::state_read_data(llama_io_read_i & io, uint32_t cell_count) { - uint32_t v_trans; +bool llama_memory_recurrent::state_read_data(llama_io_read_i & io, uint32_t cell_count) { + uint32_t s_trans; uint32_t n_layer; - io.read_to(&v_trans, sizeof(v_trans)); + io.read_to(&s_trans, sizeof(s_trans)); io.read_to(&n_layer, sizeof(n_layer)); if (n_layer != hparams.n_layer) { @@ -929,102 +934,100 @@ bool llama_kv_cache_recurrent::state_read_data(llama_io_read_i & io, uint32_t ce LLAMA_LOG_ERROR("%s: not enough cells in kv cache to restore state (%u > %u)\n", __func__, cell_count, size); return false; } - if (false != (bool) v_trans) { - LLAMA_LOG_ERROR("%s: incompatible V transposition\n", __func__); + if (false != (bool) s_trans) { + LLAMA_LOG_ERROR("%s: incompatible s transposition\n", __func__); return false; } // For each layer, read the keys for each cell, one row is one cell, read as one contiguous block for (uint32_t il = 0; il < n_layer; ++il) { - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il) + hparams.n_embd_k_s(); // Read type of key - int32_t k_type_i_ref; - io.read_to(&k_type_i_ref, sizeof(k_type_i_ref)); - const int32_t k_type_i = (int32_t) k_l[il]->type; - if (k_type_i != k_type_i_ref) { - LLAMA_LOG_ERROR("%s: mismatched key type (%d != %d, layer %d)\n", __func__, k_type_i, k_type_i_ref, il); + int32_t r_type_i_ref; + io.read_to(&r_type_i_ref, sizeof(r_type_i_ref)); + const int32_t r_type_i = (int32_t) r_l[il]->type; + if (r_type_i != r_type_i_ref) { + LLAMA_LOG_ERROR("%s: mismatched r type (%d != %d, layer %d)\n", __func__, r_type_i, r_type_i_ref, il); return false; } // Read row size of key - uint64_t k_size_row_ref; - io.read_to(&k_size_row_ref, sizeof(k_size_row_ref)); - const size_t k_size_row = ggml_row_size(k_l[il]->type, n_embd_k_gqa); - if (k_size_row != k_size_row_ref) { - LLAMA_LOG_ERROR("%s: mismatched key row size (%zu != %zu, layer %d)\n", __func__, k_size_row, (size_t) k_size_row_ref, il); + uint64_t r_size_row_ref; + io.read_to(&r_size_row_ref, sizeof(r_size_row_ref)); + const size_t r_size_row = ggml_row_size(r_l[il]->type, hparams.n_embd_r()); + if (r_size_row != r_size_row_ref) { + LLAMA_LOG_ERROR("%s: mismatched r row size (%zu != %zu, layer %d)\n", __func__, r_size_row, (size_t) r_size_row_ref, il); return false; } if (cell_count) { // Read and set the keys for the whole cell range - ggml_backend_tensor_set(k_l[il], io.read(cell_count * k_size_row), head * k_size_row, cell_count * k_size_row); + ggml_backend_tensor_set(r_l[il], io.read(cell_count * r_size_row), head * r_size_row, cell_count * r_size_row); } } - if (!v_trans) { + if (!s_trans) { for (uint32_t il = 0; il < n_layer; ++il) { - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); // Read type of value - int32_t v_type_i_ref; - io.read_to(&v_type_i_ref, sizeof(v_type_i_ref)); - const int32_t v_type_i = (int32_t)v_l[il]->type; - if (v_type_i != v_type_i_ref) { - LLAMA_LOG_ERROR("%s: mismatched value type (%d != %d, layer %d)\n", __func__, v_type_i, v_type_i_ref, il); + int32_t s_type_i_ref; + io.read_to(&s_type_i_ref, sizeof(s_type_i_ref)); + const int32_t s_type_i = (int32_t)s_l[il]->type; + if (s_type_i != s_type_i_ref) { + LLAMA_LOG_ERROR("%s: mismatched s type (%d != %d, layer %d)\n", __func__, s_type_i, s_type_i_ref, il); return false; } // Read row size of value - uint64_t v_size_row_ref; - io.read_to(&v_size_row_ref, sizeof(v_size_row_ref)); - const size_t v_size_row = ggml_row_size(v_l[il]->type, n_embd_v_gqa); - if (v_size_row != v_size_row_ref) { - LLAMA_LOG_ERROR("%s: mismatched value row size (%zu != %zu, layer %d)\n", __func__, v_size_row, (size_t) v_size_row_ref, il); + uint64_t s_size_row_ref; + io.read_to(&s_size_row_ref, sizeof(s_size_row_ref)); + const size_t s_size_row = ggml_row_size(s_l[il]->type, hparams.n_embd_s()); + if (s_size_row != s_size_row_ref) { + LLAMA_LOG_ERROR("%s: mismatched s row size (%zu != %zu, layer %d)\n", __func__, s_size_row, (size_t) s_size_row_ref, il); return false; } if (cell_count) { // Read and set the values for the whole cell range - ggml_backend_tensor_set(v_l[il], io.read(cell_count * v_size_row), head * v_size_row, cell_count * v_size_row); + ggml_backend_tensor_set(s_l[il], io.read(cell_count * s_size_row), head * s_size_row, cell_count * s_size_row); } } } else { // For each layer, read the values for each cell (transposed) for (uint32_t il = 0; il < n_layer; ++il) { - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il) + hparams.n_embd_v_s(); + const uint32_t n_embd_s = hparams.n_embd_s(); // Read type of value - int32_t v_type_i_ref; - io.read_to(&v_type_i_ref, sizeof(v_type_i_ref)); - const int32_t v_type_i = (int32_t)v_l[il]->type; - if (v_type_i != v_type_i_ref) { - LLAMA_LOG_ERROR("%s: mismatched value type (%d != %d, layer %d)\n", __func__, v_type_i, v_type_i_ref, il); + int32_t s_type_i_ref; + io.read_to(&s_type_i_ref, sizeof(s_type_i_ref)); + const int32_t s_type_i = (int32_t)s_l[il]->type; + if (s_type_i != s_type_i_ref) { + LLAMA_LOG_ERROR("%s: mismatched s type (%d != %d, layer %d)\n", __func__, s_type_i, s_type_i_ref, il); return false; } // Read element size of value - uint32_t v_size_el_ref; - io.read_to(&v_size_el_ref, sizeof(v_size_el_ref)); - const size_t v_size_el = ggml_type_size(v_l[il]->type); - if (v_size_el != v_size_el_ref) { - LLAMA_LOG_ERROR("%s: mismatched value element size (%zu != %zu, layer %d)\n", __func__, v_size_el, (size_t) v_size_el_ref, il); + uint32_t s_size_el_ref; + io.read_to(&s_size_el_ref, sizeof(s_size_el_ref)); + const size_t s_size_el = ggml_type_size(s_l[il]->type); + if (s_size_el != s_size_el_ref) { + LLAMA_LOG_ERROR("%s: mismatched s element size (%zu != %zu, layer %d)\n", __func__, s_size_el, (size_t) s_size_el_ref, il); return false; } - // Read GQA embedding size - uint32_t n_embd_v_gqa_ref; - io.read_to(&n_embd_v_gqa_ref, sizeof(n_embd_v_gqa_ref)); - if (n_embd_v_gqa != n_embd_v_gqa_ref) { - LLAMA_LOG_ERROR("%s: mismatched GQA embedding size (%u != %u, layer %d)\n", __func__, n_embd_v_gqa, n_embd_v_gqa_ref, il); + // Read state embedding size + uint32_t n_embd_s_ref; + io.read_to(&n_embd_s_ref, sizeof(n_embd_s_ref)); + if (n_embd_s != n_embd_s_ref) { + LLAMA_LOG_ERROR("%s: mismatched s embedding size (%u != %u, layer %d)\n", __func__, n_embd_s, n_embd_s_ref, il); return false; } if (cell_count) { // For each row in the transposed matrix, read the values for the whole cell range - for (uint32_t j = 0; j < n_embd_v_gqa; ++j) { - const size_t dst_offset = (head + j * size) * v_size_el; - ggml_backend_tensor_set(v_l[il], io.read(cell_count * v_size_el), dst_offset, cell_count * v_size_el); + for (uint32_t j = 0; j < n_embd_s; ++j) { + const size_t dst_offset = (head + j * size) * s_size_el; + ggml_backend_tensor_set(s_l[il], io.read(cell_count * s_size_el), dst_offset, cell_count * s_size_el); } } } @@ -1034,25 +1037,23 @@ bool llama_kv_cache_recurrent::state_read_data(llama_io_read_i & io, uint32_t ce } // -// llama_kv_cache_recurrent_state +// llama_memory_recurrent_state // -llama_kv_cache_recurrent_state::llama_kv_cache_recurrent_state(llama_memory_status status) : status(status) {} +llama_memory_recurrent_state::llama_memory_recurrent_state(llama_memory_status status) : status(status) {} -llama_kv_cache_recurrent_state::llama_kv_cache_recurrent_state( - llama_memory_status status, - llama_kv_cache_recurrent * kv) : status(status), kv(kv), is_full(true) { +llama_memory_recurrent_state::llama_memory_recurrent_state( + llama_memory_recurrent * mem) : status(LLAMA_MEMORY_STATUS_SUCCESS), mem(mem), is_full(true) { } -llama_kv_cache_recurrent_state::llama_kv_cache_recurrent_state( - llama_memory_status status, - llama_kv_cache_recurrent * kv, +llama_memory_recurrent_state::llama_memory_recurrent_state( + llama_memory_recurrent * mem, llama_sbatch sbatch, - std::vector ubatches) : status(status), kv(kv), sbatch(std::move(sbatch)), ubatches(std::move(ubatches)) {} + std::vector ubatches) : status(LLAMA_MEMORY_STATUS_SUCCESS), mem(mem), sbatch(std::move(sbatch)), ubatches(std::move(ubatches)) {} -llama_kv_cache_recurrent_state::~llama_kv_cache_recurrent_state() = default; +llama_memory_recurrent_state::~llama_memory_recurrent_state() = default; -bool llama_kv_cache_recurrent_state::next() { +bool llama_memory_recurrent_state::next() { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); if (++i_next >= ubatches.size()) { @@ -1062,54 +1063,54 @@ bool llama_kv_cache_recurrent_state::next() { return true; } -bool llama_kv_cache_recurrent_state::apply() { +bool llama_memory_recurrent_state::apply() { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - kv->find_slot(ubatches[i_next]); + mem->find_slot(ubatches[i_next]); return true; } -std::vector & llama_kv_cache_recurrent_state::out_ids() { +std::vector & llama_memory_recurrent_state::out_ids() { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); return sbatch.out_ids; } -llama_memory_status llama_kv_cache_recurrent_state::get_status() const { +llama_memory_status llama_memory_recurrent_state::get_status() const { return status; } -const llama_ubatch & llama_kv_cache_recurrent_state::get_ubatch() const { +const llama_ubatch & llama_memory_recurrent_state::get_ubatch() const { assert(status == LLAMA_MEMORY_STATUS_SUCCESS); return ubatches[i_next]; } -uint32_t llama_kv_cache_recurrent_state::get_n_kv() const { - return is_full ? kv->size : kv->n; +uint32_t llama_memory_recurrent_state::get_n_rs() const { + return is_full ? mem->size : mem->n; } -uint32_t llama_kv_cache_recurrent_state::get_head() const { - return is_full ? 0 : kv->head; +uint32_t llama_memory_recurrent_state::get_head() const { + return is_full ? 0 : mem->head; } -int32_t llama_kv_cache_recurrent_state::get_rs_z() const { - return is_full ? 0 : kv->rs_z; +int32_t llama_memory_recurrent_state::get_rs_z() const { + return is_full ? 0 : mem->rs_z; } -uint32_t llama_kv_cache_recurrent_state::get_size() const { - return kv->size; +uint32_t llama_memory_recurrent_state::get_size() const { + return mem->size; } -ggml_tensor * llama_kv_cache_recurrent_state::get_k_l(int32_t il) const { - return kv->k_l[il]; +ggml_tensor * llama_memory_recurrent_state::get_r_l(int32_t il) const { + return mem->r_l[il]; } -ggml_tensor * llama_kv_cache_recurrent_state::get_v_l(int32_t il) const { - return kv->v_l[il]; +ggml_tensor * llama_memory_recurrent_state::get_s_l(int32_t il) const { + return mem->s_l[il]; } -int32_t llama_kv_cache_recurrent_state::s_copy(int i) const { - return kv->cells[i + kv->head].src0; +int32_t llama_memory_recurrent_state::s_copy(int i) const { + return mem->cells[i + mem->head].src0; } diff --git a/src/llama-kv-cache-recurrent.h b/src/llama-memory-recurrent.h similarity index 72% rename from src/llama-kv-cache-recurrent.h rename to src/llama-memory-recurrent.h index f9b01a6513393..290cc84ab3fbc 100644 --- a/src/llama-kv-cache-recurrent.h +++ b/src/llama-memory-recurrent.h @@ -8,22 +8,27 @@ #include // -// llama_kv_cache_recurrent +// llama_memory_recurrent // -// TODO: extract the KV cache state used for graph computation into llama_kv_cache_recurrent_state_i +// TODO: extract the cache state used for graph computation into llama_memory_recurrent_state_i // see the implementation of llama_kv_cache_unified_state_i for an example how to do it -class llama_kv_cache_recurrent : public llama_memory_i { +class llama_memory_recurrent : public llama_memory_i { public: - llama_kv_cache_recurrent( - const llama_model & model, - ggml_type type_k, - ggml_type type_v, - bool offload, - uint32_t kv_size, - uint32_t n_seq_max); - ~llama_kv_cache_recurrent() = default; + // 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); + + ~llama_memory_recurrent() = default; // // llama_memory_i @@ -51,7 +56,7 @@ class llama_kv_cache_recurrent : public llama_memory_i { bool prepare(const std::vector & ubatches); - // find a contiguous slot of kv cells and emplace the ubatch there + // find a contiguous slot of memory cells and emplace the ubatch there bool find_slot(const llama_ubatch & ubatch); bool get_can_shift() const override; @@ -72,7 +77,7 @@ class llama_kv_cache_recurrent : public llama_memory_i { int32_t rs_z = -1; // TODO: optimize for recurrent state needs - struct kv_cell { + struct mem_cell { llama_pos pos = -1; int32_t src = -1; // used to know where states should be copied from int32_t src0 = -1; // like src, but only used when setting the inputs (allowing to copy once) @@ -88,15 +93,16 @@ class llama_kv_cache_recurrent : public llama_memory_i { return seq_id.empty(); } - bool is_same_seq(const kv_cell & other) const { + bool is_same_seq(const mem_cell & other) const { return seq_id == other.seq_id; } }; - std::vector cells; + std::vector cells; - std::vector k_l; // per layer - std::vector v_l; + // per layer + std::vector r_l; + std::vector s_l; private: //const llama_model & model; @@ -109,8 +115,8 @@ class llama_kv_cache_recurrent : public llama_memory_i { size_t total_size() const; - size_t size_k_bytes() const; - size_t size_v_bytes() const; + size_t size_r_bytes() const; + size_t size_s_bytes() const; void state_write_meta(llama_io_write_i & io, const std::vector> & cell_ranges, llama_seq_id seq_id = -1) const; void state_write_data(llama_io_write_i & io, const std::vector> & cell_ranges) const; @@ -119,24 +125,22 @@ class llama_kv_cache_recurrent : public llama_memory_i { bool state_read_data(llama_io_read_i & io, uint32_t cell_count); }; -class llama_kv_cache_recurrent_state : public llama_memory_state_i { +class llama_memory_recurrent_state : public llama_memory_state_i { public: // used for errors - llama_kv_cache_recurrent_state(llama_memory_status status); + llama_memory_recurrent_state(llama_memory_status status); // used to create a full-cache state - llama_kv_cache_recurrent_state( - llama_memory_status status, - llama_kv_cache_recurrent * kv); + llama_memory_recurrent_state( + llama_memory_recurrent * mem); // used to create a state from a batch - llama_kv_cache_recurrent_state( - llama_memory_status status, - llama_kv_cache_recurrent * kv, + llama_memory_recurrent_state( + llama_memory_recurrent * mem, llama_sbatch sbatch, std::vector ubatches); - virtual ~llama_kv_cache_recurrent_state(); + virtual ~llama_memory_recurrent_state(); // // llama_memory_state_i @@ -151,23 +155,23 @@ class llama_kv_cache_recurrent_state : public llama_memory_state_i { const llama_ubatch & get_ubatch() const override; // - // llama_kv_cache_recurrent_state specific API + // llama_memory_recurrent_state specific API // - uint32_t get_n_kv() const; + uint32_t get_n_rs() const; uint32_t get_head() const; int32_t get_rs_z() const; uint32_t get_size() const; - ggml_tensor * get_k_l(int32_t il) const; - ggml_tensor * get_v_l(int32_t il) const; + ggml_tensor * get_r_l(int32_t il) const; + ggml_tensor * get_s_l(int32_t il) const; int32_t s_copy(int i) const; private: const llama_memory_status status; - llama_kv_cache_recurrent * kv; + llama_memory_recurrent * mem; llama_sbatch sbatch; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index a5eb122f998d8..a5853f8b12dc0 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -8,7 +8,8 @@ #include "llama-kv-cache-unified.h" #include "llama-kv-cache-unified-iswa.h" -#include "llama-kv-cache-recurrent.h" +#include "llama-memory-hybrid.h" +#include "llama-memory-recurrent.h" #include "ggml-cpp.h" @@ -470,6 +471,10 @@ void llama_model::load_hparams(llama_model_loader & ml) { std::fill(hparams.n_head_arr.begin(), hparams.n_head_arr.end(), 0); std::fill(hparams.n_head_kv_arr.begin(), hparams.n_head_kv_arr.end(), 0); std::fill(hparams.n_ff_arr.begin(), hparams.n_ff_arr.end(), 0); + std::fill( + hparams.recurrent_layer_arr.begin(), + hparams.recurrent_layer_arr.end(), + llm_arch_is_recurrent(ml.get_arch())); std::fill(hparams.rope_sections.begin(), hparams.rope_sections.end(), 0); @@ -9111,7 +9116,7 @@ struct llm_build_mamba : public llm_graph_context { // {n_embd, n_tokens} inpL = build_inp_embd(model.tok_embd); - ggml_tensor * state_copy = build_inp_s_copy(); + auto * rs_inp = build_rs_inp(); for (int il = 0; il < n_layer; ++il) { // norm @@ -9120,7 +9125,7 @@ struct llm_build_mamba : public llm_graph_context { LLM_NORM_RMS, il); cb(cur, "attn_norm", il); - cur = build_mamba_layer(gf, cur, state_copy, ubatch, il); + cur = build_mamba_layer(rs_inp, gf, cur, ubatch, il); if (il == n_layer - 1) { // skip computing output for unused tokens @@ -9158,12 +9163,12 @@ struct llm_build_mamba : public llm_graph_context { // TODO: split ggml_tensor * build_mamba_layer( - ggml_cgraph * gf, - ggml_tensor * cur, - ggml_tensor * state_copy, - const llama_ubatch & ubatch, - int il) const { - const auto * kv_state = static_cast(mstate); + llm_graph_input_rs * inp, + ggml_cgraph * gf, + ggml_tensor * cur, + const llama_ubatch & ubatch, + int il) const { + const auto * kv_state = static_cast(mstate); const auto kv_head = kv_state->get_head(); @@ -9183,17 +9188,17 @@ struct llm_build_mamba : public llm_graph_context { GGML_ASSERT(ubatch.equal_seqs); GGML_ASSERT(ubatch.n_tokens == n_seq_tokens * n_seqs); - ggml_tensor * conv_states_all = kv_state->get_k_l(il); - ggml_tensor * ssm_states_all = kv_state->get_v_l(il); + ggml_tensor * conv_states_all = kv_state->get_r_l(il); + ggml_tensor * ssm_states_all = kv_state->get_s_l(il); // (ab)using the KV cache to store the states - ggml_tensor * conv = build_recurrent_state( - gf, conv_states_all, state_copy, - hparams.n_embd_k_s(), n_seqs); + ggml_tensor * conv = build_rs( + inp, gf, conv_states_all, + hparams.n_embd_r(), n_seqs); conv = ggml_reshape_3d(ctx0, conv, d_conv - 1, d_inner, n_seqs); - ggml_tensor * ssm = build_recurrent_state( - gf, ssm_states_all, state_copy, - hparams.n_embd_v_s(), n_seqs); + ggml_tensor * ssm = build_rs( + inp, gf, ssm_states_all, + hparams.n_embd_s(), n_seqs); ssm = ggml_reshape_3d(ctx0, ssm, d_state, d_inner, n_seqs); // {n_embd, n_tokens} => {n_embd, n_seq_tokens, n_seqs} @@ -11904,13 +11909,13 @@ struct llm_build_rwkv6_base : public llm_graph_context { } ggml_tensor * build_rwkv6_time_mix( + llm_graph_input_rs * inp, ggml_cgraph * gf, ggml_tensor * cur, ggml_tensor * x_prev, - ggml_tensor * state_copy, const llama_ubatch & ubatch, int il) const { - const auto * kv_state = static_cast(mstate); + const auto * kv_state = static_cast(mstate); const auto n_tokens = ubatch.n_tokens; const auto n_seqs = ubatch.n_seqs; @@ -12031,9 +12036,9 @@ struct llm_build_rwkv6_base : public llm_graph_context { k = ggml_sub(ctx0, k, ggml_mul(ctx0, k, w)); } - ggml_tensor * wkv_state = build_recurrent_state( - gf, kv_state->get_v_l(il), state_copy, - hparams.n_embd_v_s(), n_seqs); + ggml_tensor * wkv_state = build_rs( + inp, gf, kv_state->get_s_l(il), + hparams.n_embd_s(), n_seqs); ggml_tensor * wkv_output; if (is_qrwkv) { @@ -12051,9 +12056,9 @@ struct llm_build_rwkv6_base : public llm_graph_context { wkv_state, ggml_view_1d( ctx0, - kv_state->get_v_l(il), - hparams.n_embd_v_s() * n_seqs, - hparams.n_embd_v_s() * kv_head * ggml_element_size(kv_state->get_v_l(il)) + kv_state->get_s_l(il), + hparams.n_embd_s() * n_seqs, + hparams.n_embd_s() * kv_head * ggml_element_size(kv_state->get_s_l(il)) ) ) ); @@ -12087,7 +12092,7 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { inpL = build_inp_embd(model.tok_embd); inpL = build_norm(inpL, model.tok_norm, model.tok_norm_b, LLM_NORM, -1); - ggml_tensor * state_copy = build_inp_s_copy(); + auto * rs_inp = build_rs_inp(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -12097,9 +12102,7 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); - ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, ubatch, il - ); + ggml_tensor * token_shift = build_rwkv_token_shift_load(rs_inp, gf, ubatch, il); ggml_tensor * att_shift = ggml_view_3d(ctx0, token_shift, n_embd, 1, n_seqs, token_shift->nb[1], token_shift->nb[2], 0); ggml_tensor * ffn_shift = ggml_view_3d(ctx0, token_shift, n_embd, 1, n_seqs, token_shift->nb[1], token_shift->nb[2], n_embd * ggml_element_size(token_shift)); @@ -12114,7 +12117,7 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { 1 ); - cur = build_rwkv6_time_mix(gf, att_norm, x_prev, state_copy, ubatch, il); + cur = build_rwkv6_time_mix(rs_inp, gf, att_norm, x_prev, ubatch, il); ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); cb(ffn_inp, "ffn_inp", il); @@ -12177,14 +12180,14 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { // ref: https://huggingface.co/recursal/QRWKV6-32B-Instruct-Preview-v0.1/blob/main/modeling_rwkv6qwen2.py struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { llm_build_rwkv6qwen2(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : llm_build_rwkv6_base(model, params) { - GGML_ASSERT(n_embd == hparams.n_embd_k_s()); + GGML_ASSERT(n_embd == hparams.n_embd_r()); ggml_tensor * cur; ggml_tensor * inpL; inpL = build_inp_embd(model.tok_embd); - ggml_tensor * state_copy = build_inp_s_copy(); + auto * rs_inp = build_rs_inp(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -12194,9 +12197,7 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); - ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, ubatch, il - ); + ggml_tensor * token_shift = build_rwkv_token_shift_load(rs_inp, gf, ubatch, il); ggml_tensor * att_norm = build_norm(inpL, layer->attn_norm, layer->attn_norm_b, LLM_NORM_RMS, il); cb(att_norm, "attn_norm", il); @@ -12208,7 +12209,7 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { 1 ); - cur = build_rwkv6_time_mix(gf, att_norm, x_prev, state_copy, ubatch, il); + cur = build_rwkv6_time_mix(rs_inp, gf, att_norm, x_prev, ubatch, il); token_shift = ggml_view_3d(ctx0, att_norm, n_embd, 1, n_seqs, att_norm->nb[1], att_norm->nb[2], (n_seq_tokens-1)*n_embd*ggml_element_size(att_norm)); ggml_build_forward_expand(gf, build_rwkv_token_shift_store(token_shift, ubatch, il)); @@ -12296,14 +12297,14 @@ struct llm_build_rwkv7_base : public llm_graph_context { } ggml_tensor * build_rwkv7_time_mix( + llm_graph_input_rs * inp, ggml_cgraph * gf, ggml_tensor * cur, ggml_tensor * x_prev, - ggml_tensor * state_copy, ggml_tensor *& first_layer_value, const llama_ubatch & ubatch, int il) const { - const auto * kv_state = static_cast(mstate); + const auto * kv_state = static_cast(mstate); const auto n_tokens = ubatch.n_tokens; const auto n_seqs = ubatch.n_seqs; @@ -12382,9 +12383,9 @@ struct llm_build_rwkv7_base : public llm_graph_context { v = ggml_reshape_3d(ctx0, v, head_size, head_count, n_tokens); a = ggml_reshape_3d(ctx0, a, head_size, head_count, n_tokens); - ggml_tensor * wkv_state = build_recurrent_state( - gf, kv_state->get_v_l(il), state_copy, - hparams.n_embd_v_s(), n_seqs); + ggml_tensor * wkv_state = build_rs( + inp, gf, kv_state->get_s_l(il), + hparams.n_embd_s(), n_seqs); ggml_tensor * wkv_output = ggml_rwkv_wkv7(ctx0, r, w, k, v, ggml_neg(ctx0, kk), ggml_mul(ctx0, kk, a), wkv_state); cur = ggml_view_1d(ctx0, wkv_output, n_embd * n_tokens, 0); @@ -12397,9 +12398,9 @@ struct llm_build_rwkv7_base : public llm_graph_context { wkv_state, ggml_view_1d( ctx0, - kv_state->get_v_l(il), - hparams.n_embd_v_s() * n_seqs, - hparams.n_embd_v_s() * kv_head * ggml_element_size(kv_state->get_v_l(il)) + kv_state->get_s_l(il), + hparams.n_embd_s() * n_seqs, + hparams.n_embd_s() * kv_head * ggml_element_size(kv_state->get_s_l(il)) ) ) ); @@ -12440,7 +12441,7 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { inpL = build_inp_embd(model.tok_embd); inpL = build_norm(inpL, model.tok_norm, model.tok_norm_b, LLM_NORM, -1); - ggml_tensor * state_copy = build_inp_s_copy(); + auto * rs_inp = build_rs_inp(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -12450,9 +12451,7 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); - ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, ubatch, il - ); + ggml_tensor * token_shift = build_rwkv_token_shift_load(rs_inp, gf, ubatch, il); ggml_tensor * att_shift = ggml_view_3d(ctx0, token_shift, n_embd, 1, n_seqs, token_shift->nb[1], token_shift->nb[2], 0); ggml_tensor * ffn_shift = ggml_view_3d(ctx0, token_shift, n_embd, 1, n_seqs, token_shift->nb[1], token_shift->nb[2], n_embd * ggml_element_size(token_shift)); @@ -12467,7 +12466,7 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { 1 ); - cur = build_rwkv7_time_mix(gf, att_norm, x_prev, state_copy, v_first, ubatch, il); + cur = build_rwkv7_time_mix(rs_inp, gf, att_norm, x_prev, v_first, ubatch, il); ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); cb(ffn_inp, "ffn_inp", il); @@ -12525,7 +12524,7 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { struct llm_build_arwkv7 : public llm_build_rwkv7_base { llm_build_arwkv7(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : llm_build_rwkv7_base(model, params) { - GGML_ASSERT(n_embd == hparams.n_embd_k_s()); + GGML_ASSERT(n_embd == hparams.n_embd_r()); ggml_tensor * cur; ggml_tensor * inpL; @@ -12533,7 +12532,7 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { inpL = build_inp_embd(model.tok_embd); - ggml_tensor * state_copy = build_inp_s_copy(); + auto * rs_inp = build_rs_inp(); const auto n_embd = hparams.n_embd; const auto n_seq_tokens = ubatch.n_seq_tokens; @@ -12543,9 +12542,7 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); - ggml_tensor * token_shift = build_rwkv_token_shift_load( - gf, state_copy, ubatch, il - ); + ggml_tensor * token_shift = build_rwkv_token_shift_load(rs_inp, gf, ubatch, il); ggml_tensor * att_norm = build_norm(inpL, layer->attn_norm, layer->attn_norm_b, LLM_NORM_RMS, il); cb(att_norm, "attn_norm", il); @@ -12557,7 +12554,7 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { 1 ); - cur = build_rwkv7_time_mix(gf, att_norm, x_prev, state_copy, v_first, ubatch, il); + cur = build_rwkv7_time_mix(rs_inp, gf, att_norm, x_prev, v_first, ubatch, il); token_shift = ggml_view_3d(ctx0, att_norm, n_embd, 1, n_seqs, att_norm->nb[1], att_norm->nb[2], (n_seq_tokens-1)*n_embd*ggml_element_size(att_norm)); ggml_build_forward_expand(gf, build_rwkv_token_shift_store(token_shift, ubatch, il)); @@ -13738,6 +13735,8 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, llama_memory_i * res; switch (arch) { + // Models that need specific instantiation should be handled in the + // switch statement case LLM_ARCH_BERT: case LLM_ARCH_JINA_BERT_V2: case LLM_ARCH_NOMIC_BERT: @@ -13747,57 +13746,75 @@ llama_memory_i * llama_model::create_memory(const llama_memory_params & params, { res = nullptr; } break; - case LLM_ARCH_MAMBA: - case LLM_ARCH_RWKV6: - case LLM_ARCH_RWKV6QWEN2: - case LLM_ARCH_RWKV7: - case LLM_ARCH_ARWKV7: - { - res = new llama_kv_cache_recurrent( - *this, - GGML_TYPE_F32, - GGML_TYPE_F32, - cparams.offload_kqv, - std::max((uint32_t) 1, cparams.n_seq_max), - cparams.n_seq_max); - } break; + // Models that need standard caching should rely on recurrent/hybrid + // checks default: { - const auto padding = llama_kv_cache_unified::get_padding(cparams); - - cparams.n_ctx = GGML_PAD(cparams.n_ctx, padding); - - LLAMA_LOG_DEBUG("%s: n_ctx = %u (padded)\n", __func__, cparams.n_ctx); - - if (hparams.swa_type != LLAMA_SWA_TYPE_NONE) { - GGML_ASSERT(hparams.is_swa_any()); - - res = new llama_kv_cache_unified_iswa( - *this, - params.type_k, - params.type_v, - !cparams.flash_attn, - cparams.offload_kqv, - params.swa_full, - cparams.n_ctx, - cparams.n_seq_max, - cparams.n_ubatch, - padding); - } else { - GGML_ASSERT(!hparams.is_swa_any()); - - res = new llama_kv_cache_unified( + if (llm_arch_is_recurrent(arch)) { + res = new llama_memory_recurrent( *this, nullptr, - params.type_k, - params.type_v, - !cparams.flash_attn, + GGML_TYPE_F32, + GGML_TYPE_F32, cparams.offload_kqv, - cparams.n_ctx, - cparams.n_seq_max, - padding, - hparams.n_swa, - hparams.swa_type); + 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); + + cparams.n_ctx = GGML_PAD(cparams.n_ctx, padding); + + res = new llama_memory_hybrid( + /* model */ *this, + /* attn_type_k */ params.type_k, + /* attn_type_v */ params.type_v, + /* attn_v_trans */ !cparams.flash_attn, + /* attn_kv_size */ cparams.n_ctx, + /* attn_n_pad */ padding, + /* attn_n_swa */ hparams.n_swa, + /* attn_swa_type */ hparams.swa_type, + /* recurrent_type_k */ GGML_TYPE_F32, + /* recurrent_type_v */ GGML_TYPE_F32, + /* recurrent_kv_size */ std::max((uint32_t) 1, cparams.n_seq_max), + /* n_seq_max */ cparams.n_seq_max, + /* offload */ cparams.offload_kqv); + } else { + const auto padding = llama_kv_cache_unified::get_padding(cparams); + + cparams.n_ctx = GGML_PAD(cparams.n_ctx, padding); + + LLAMA_LOG_DEBUG("%s: n_ctx = %u (padded)\n", __func__, cparams.n_ctx); + + if (hparams.swa_type != LLAMA_SWA_TYPE_NONE) { + GGML_ASSERT(hparams.is_swa_any()); + + res = new llama_kv_cache_unified_iswa( + *this, + params.type_k, + params.type_v, + !cparams.flash_attn, + cparams.offload_kqv, + params.swa_full, + cparams.n_ctx, + cparams.n_seq_max, + cparams.n_ubatch, + padding); + } else { + GGML_ASSERT(!hparams.is_swa_any()); + + res = new llama_kv_cache_unified( + *this, + nullptr, + params.type_k, + params.type_v, + !cparams.flash_attn, + cparams.offload_kqv, + cparams.n_ctx, + cparams.n_seq_max, + padding, + hparams.n_swa, + hparams.swa_type); + } } } } @@ -14377,14 +14394,7 @@ llama_token llama_model_decoder_start_token(const llama_model * model) { } bool llama_model_is_recurrent(const llama_model * model) { - switch (model->arch) { - case LLM_ARCH_MAMBA: return true; - case LLM_ARCH_RWKV6: return true; - case LLM_ARCH_RWKV6QWEN2: return true; - case LLM_ARCH_RWKV7: return true; - case LLM_ARCH_ARWKV7: return true; - default: return false; - } + return llm_arch_is_recurrent(model->arch); } const std::vector> & llama_internal_get_tensor_map(const llama_model * model) { From 10bb545c5b54175ed9874ad8d187effa2bcb4b5f Mon Sep 17 00:00:00 2001 From: 0cc4m Date: Thu, 19 Jun 2025 09:15:42 +0200 Subject: [PATCH 82/95] Vulkan: Set device max size for host memory to avoid OOM warning and fallback to CPU buffer (#14249) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 8d62303aabd7f..1375bfeb9dc50 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -9495,6 +9495,12 @@ static size_t ggml_backend_vk_host_buffer_type_get_alignment(ggml_backend_buffer UNUSED(buft); } +static size_t ggml_backend_vk_host_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) { + return vk_instance.devices[0]->suballocation_block_size; + + UNUSED(buft); +} + // Should be changed to return device-specific host buffer type // but that probably requires changes in llama.cpp ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type() { @@ -9503,7 +9509,7 @@ ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type() { /* .get_name = */ ggml_backend_vk_host_buffer_type_name, /* .alloc_buffer = */ ggml_backend_vk_host_buffer_type_alloc_buffer, /* .get_alignment = */ ggml_backend_vk_host_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX + /* .get_max_size = */ ggml_backend_vk_host_buffer_type_get_max_size, /* .get_alloc_size = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size, /* .is_host = */ ggml_backend_cpu_buffer_type()->iface.is_host, }, From faed5a5f5dde4d816adecdccb4f4682a04126f92 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Thu, 19 Jun 2025 17:48:54 +0800 Subject: [PATCH 83/95] llamafile : support s390x SIMD instruction set (#14273) --- ggml/src/ggml-cpu/llamafile/sgemm.cpp | 55 ++++++++++++++++++++++++++- ggml/src/ggml-cpu/llamafile/sgemm.h | 5 +++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/ggml/src/ggml-cpu/llamafile/sgemm.cpp b/ggml/src/ggml-cpu/llamafile/sgemm.cpp index 1c545f803327b..7ed3874afb87a 100644 --- a/ggml/src/ggml-cpu/llamafile/sgemm.cpp +++ b/ggml/src/ggml-cpu/llamafile/sgemm.cpp @@ -62,7 +62,7 @@ #define NOINLINE __attribute__((__noinline__)) #endif -#if defined(__ARM_NEON) || defined(__AVX512F__) +#if defined(__ARM_NEON) || defined(__AVX512F__) || defined(__VXE__) || defined(__VXE2__) #define VECTOR_REGISTERS 32 #else #define VECTOR_REGISTERS 16 @@ -109,6 +109,12 @@ inline float16x8_t sub(float16x8_t x, float16x8_t y) { return vsubq_f16(x, y); } inline float16x8_t mul(float16x8_t x, float16x8_t y) { return vmulq_f16(x, y); } #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC +#if defined(__VXE__) || defined(__VXE2__) +inline float32x4_t add(float32x4_t x, float32x4_t y) { return vec_add(x, y); } +inline float32x4_t sub(float32x4_t x, float32x4_t y) { return vec_sub(x, y); } +inline float32x4_t mul(float32x4_t x, float32x4_t y) { return vec_mul(x, y); } +#endif + #if defined(__MMA__) typedef vector unsigned char vec_t; typedef __vector_quad acc_t; @@ -162,6 +168,13 @@ inline float16x8_t madd(float16x8_t a, float16x8_t b, float16x8_t c) { #endif #endif +#if defined(__VXE__) || defined(__VXE2__) +template <> +inline float32x4_t madd(float32x4_t a, float32x4_t b, float32x4_t c) { + return vec_madd(a, b, c); +} +#endif + //////////////////////////////////////////////////////////////////////////////////////////////////// // VECTORIZED HORIZONTAL SUM @@ -178,6 +191,13 @@ inline float hsum(float16x8_t x) { } #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC +#if defined(__VXE__) || defined(__VXE2__) +inline float hsum(float32x4_t x) { + float32x4_t tmp = x + vec_reve(x); + return tmp[0] + tmp[1]; +} +#endif + #if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) inline float hsum(__m128 x) { #if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) @@ -227,6 +247,21 @@ template <> inline float32x4_t load(const ggml_fp16_t *p) { #endif // _MSC_VER #endif // __ARM_NEON +#if defined(__VXE__) || defined(__VXE2__) +template <> inline float32x4_t load(const ggml_fp16_t * p) { + float tmp[4]; + + for (int i = 0; i < 4; i++) { + tmp[i] = GGML_FP16_TO_FP32(p[i]); + } + + return vec_xl(0, (const float *)(tmp)); +} +template <> inline float32x4_t load(const float * p) { + return vec_xl(0, p); +} +#endif + #if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) template <> inline __m128 load(const float *p) { return _mm_loadu_ps(p); @@ -3319,6 +3354,14 @@ bool llamafile_sgemm(const struct ggml_compute_params * params, int64_t m, int64 (const float *)B, ldb, (float *)C, ldc}; return tb.matmul(m, n); +#elif defined(__VXE__) || defined(__VXE2__) + if (n < 4) + return false; + tinyBLAS<4, float32x4_t, float32x4_t, float, float, float> tb{ params, + k, (const float *)A, lda, + (const float *)B, ldb, + (float *)C, ldc}; + return tb.matmul(m, n); #elif defined(__MMA__) if (k % 8) return false; @@ -3410,6 +3453,16 @@ bool llamafile_sgemm(const struct ggml_compute_params * params, int64_t m, int64 (float *)C, ldc}; return tb.matmul(m, n); } +#elif defined(__VXE__) || defined(__VXE2__) + if (n < 4) + return false; + if (Btype == GGML_TYPE_F16) { + tinyBLAS<4, float32x4_t, float32x4_t, ggml_fp16_t, ggml_fp16_t, float> tb{ params, + k, (const ggml_fp16_t *)A, lda, + (const ggml_fp16_t *)B, ldb, + (float *)C, ldc}; + return tb.matmul(m, n); + } #endif return false; } diff --git a/ggml/src/ggml-cpu/llamafile/sgemm.h b/ggml/src/ggml-cpu/llamafile/sgemm.h index 3d2909515242a..729e8853d516c 100644 --- a/ggml/src/ggml-cpu/llamafile/sgemm.h +++ b/ggml/src/ggml-cpu/llamafile/sgemm.h @@ -1,6 +1,11 @@ #pragma once #include #include + +#if defined(__VXE__) || defined(__VXE2__) +#include +#endif + #ifdef __cplusplus extern "C" { #endif From 5fc7856815920f828f9e90cb759ac82c7f0c1ea5 Mon Sep 17 00:00:00 2001 From: pqnet <119850+pqnet@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:21:40 +0200 Subject: [PATCH 84/95] convert : fix remote option in Windows (#14100) --- convert_hf_to_gguf.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index b754dd815a2dc..2e08db3457b60 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -6389,8 +6389,8 @@ def parse_args() -> argparse.Namespace: help="model is executed on big endian machine", ) parser.add_argument( - "model", type=Path, - help="directory containing model file", + "model", type=str, + help="directory containing model file or huggingface repository ID (if --remote)", nargs="?", ) parser.add_argument( @@ -6493,18 +6493,20 @@ def main() -> None: else: logging.basicConfig(level=logging.INFO) - dir_model = args.model - if args.remote: + hf_repo_id = args.model from huggingface_hub import snapshot_download local_dir = snapshot_download( - repo_id=str(dir_model), + repo_id=hf_repo_id, allow_patterns=["LICENSE", "*.json", "*.md", "*.txt", "tokenizer.model"]) dir_model = Path(local_dir) logger.info(f"Downloaded config and tokenizer to {local_dir}") + else: + hf_repo_id = None + dir_model = Path(args.model) if not dir_model.is_dir(): - logger.error(f'Error: {args.model} is not a directory') + logger.error(f'Error: {dir_model} is not a directory') sys.exit(1) ftype_map: dict[str, gguf.LlamaFileType] = { @@ -6524,9 +6526,9 @@ def main() -> None: if args.outfile is not None: fname_out = args.outfile - elif args.remote: + elif hf_repo_id: # if remote, use the model ID as the output file name - fname_out = Path("./" + str(args.model).replace("/", "-") + "-{ftype}.gguf") + fname_out = Path("./" + hf_repo_id.replace("/", "-") + "-{ftype}.gguf") else: fname_out = dir_model @@ -6555,7 +6557,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=str(args.model) if args.remote else None) + remote_hf_model_id=hf_repo_id) if args.vocab_only: logger.info("Exporting model vocab...") From fffcce535ebbdc25f81966a15b758658788e7466 Mon Sep 17 00:00:00 2001 From: bashayer hijji Date: Thu, 19 Jun 2025 13:24:12 +0300 Subject: [PATCH 85/95] llama-bench : add --no-warmup flag (#14224) (#14270) Add no_warmup parameter to cmd_params struct and command-line parsing to allow users to skip warmup runs before benchmarking. - Add no_warmup boolean field to cmd_params struct - Add --no-warmup command-line argument parsing - Add help text documentation for the new flag - Wrap existing warmup logic in conditional check - Maintain full backward compatibility (warmup enabled by default) Addresses #14224 --- tools/llama-bench/llama-bench.cpp | 44 ++++++++++++++++++------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/tools/llama-bench/llama-bench.cpp b/tools/llama-bench/llama-bench.cpp index e59d61f195675..b80e984d0245b 100644 --- a/tools/llama-bench/llama-bench.cpp +++ b/tools/llama-bench/llama-bench.cpp @@ -267,6 +267,7 @@ struct cmd_params { int delay; bool verbose; bool progress; + bool no_warmup; output_formats output_format; output_formats output_format_stderr; }; @@ -303,6 +304,7 @@ static const cmd_params cmd_params_defaults = { /* delay */ 0, /* verbose */ false, /* progress */ false, + /* no_warmup */ false, /* output_format */ MARKDOWN, /* output_format_stderr */ NONE, }; @@ -325,6 +327,7 @@ static void print_usage(int /* argc */, char ** argv) { output_format_str(cmd_params_defaults.output_format_stderr)); printf(" -v, --verbose verbose output\n"); printf(" --progress print test progress indicators\n"); + printf(" --no-warmup skip warmup runs before benchmarking\n"); printf("\n"); printf("test parameters:\n"); printf(" -m, --model (default: %s)\n", join(cmd_params_defaults.model, ",").c_str()); @@ -425,6 +428,7 @@ static cmd_params parse_cmd_params(int argc, char ** argv) { params.prio = cmd_params_defaults.prio; params.delay = cmd_params_defaults.delay; params.progress = cmd_params_defaults.progress; + params.no_warmup = cmd_params_defaults.no_warmup; for (int i = 1; i < argc; i++) { arg = argv[i]; @@ -798,6 +802,8 @@ static cmd_params parse_cmd_params(int argc, char ** argv) { params.verbose = true; } else if (arg == "--progress") { params.progress = true; + } else if (arg == "--no-warmup") { + params.no_warmup = true; } else { invalid_param = true; break; @@ -1925,25 +1931,27 @@ int main(int argc, char ** argv) { llama_attach_threadpool(ctx, threadpool, NULL); // warmup run - if (t.n_prompt > 0) { - if (params.progress) { - fprintf(stderr, "llama-bench: benchmark %d/%zu: warmup prompt run\n", params_idx, params_count); - } - //test_prompt(ctx, std::min(t.n_batch, std::min(t.n_prompt, 32)), 0, t.n_batch, t.n_threads); - bool res = test_prompt(ctx, t.n_prompt, t.n_batch, t.n_threads); - if (!res) { - fprintf(stderr, "%s: error: failed to run prompt warmup\n", __func__); - exit(1); - } - } - if (t.n_gen > 0) { - if (params.progress) { - fprintf(stderr, "llama-bench: benchmark %d/%zu: warmup generation run\n", params_idx, params_count); + if (!params.no_warmup) { + if (t.n_prompt > 0) { + if (params.progress) { + fprintf(stderr, "llama-bench: benchmark %d/%zu: warmup prompt run\n", params_idx, params_count); + } + //test_prompt(ctx, std::min(t.n_batch, std::min(t.n_prompt, 32)), 0, t.n_batch, t.n_threads); + bool res = test_prompt(ctx, t.n_prompt, t.n_batch, t.n_threads); + if (!res) { + fprintf(stderr, "%s: error: failed to run prompt warmup\n", __func__); + exit(1); + } } - bool res = test_gen(ctx, 1, t.n_threads); - if (!res) { - fprintf(stderr, "%s: error: failed to run gen warmup\n", __func__); - exit(1); + if (t.n_gen > 0) { + if (params.progress) { + fprintf(stderr, "llama-bench: benchmark %d/%zu: warmup generation run\n", params_idx, params_count); + } + bool res = test_gen(ctx, 1, t.n_threads); + if (!res) { + fprintf(stderr, "%s: error: failed to run gen warmup\n", __func__); + exit(1); + } } } From 600e3e9b50c1f0c9fc4a70356241fd87f00e8e14 Mon Sep 17 00:00:00 2001 From: Anton Mitkov Date: Thu, 19 Jun 2025 11:40:21 +0100 Subject: [PATCH 86/95] sycl: Cleanup codepaths in Get Rows in sycl backend (#14215) Addresses unused reorder path --- ggml/src/ggml-sycl/getrows.cpp | 98 +--------------------------------- 1 file changed, 2 insertions(+), 96 deletions(-) diff --git a/ggml/src/ggml-sycl/getrows.cpp b/ggml/src/ggml-sycl/getrows.cpp index 4a7712781364e..03f8dd907485e 100644 --- a/ggml/src/ggml-sycl/getrows.cpp +++ b/ggml/src/ggml-sycl/getrows.cpp @@ -60,54 +60,6 @@ static void k_get_rows( dst_row[iybs + iqs + y_offset] = v.y(); } -template -static void k_get_rows_reorder( - const void * src0, const void *src0_dq, const int32_t * src1, dst_t * dst, - int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/ - /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/ - /*size_t s0,*/ size_t s1, size_t s2, size_t s3, - /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03, - size_t s10, size_t s11, size_t s12, - const sycl::nd_item<3> &item_ct1/*, size_t s13*/) { - - const int i00 = (item_ct1.get_group(2) * item_ct1.get_local_range(2) + - item_ct1.get_local_id(2)) * - 2; - const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) + - item_ct1.get_local_id(0)) / - ne12; - const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) + - item_ct1.get_local_id(0)) % - ne12; - - if (i00 >= ne00) { - return; - } - auto ncols = ne00; - const int i01 = src1[i10*s10 + i11*s11 + i12*s12]; - - dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3; - - const int src0_off = i01 * ncols + i00; - const int ib = src0_off / QK4_0; // block index - const int iqs = (i00%qk)/qr; // x quant index - const int iybs = i00 - i00%qk; // dst block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - dfloat2 v; - dequantize_kernel_recorder((const void *)src0_dq, ib, (const void *)src0, src0_off/2, v); - - dst_row[iybs + iqs + 0] = v.x(); - dst_row[iybs + iqs + y_offset] = v.y(); - - GGML_UNUSED(nb01); - GGML_UNUSED(nb02); - GGML_UNUSED(nb03); -} - template static void k_get_rows_float( const src0_t * src0, const int32_t * src1, dst_t * dst, @@ -177,47 +129,6 @@ static void get_rows_sycl(ggml_backend_sycl_context & ctx, const ggml_tensor *sr GGML_UNUSED(ctx); } -template -static void get_rows_sycl_reorder(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const void *src0_dd, - const int32_t *src1_dd, float *dst_dd, - queue_ptr stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE); - const int block_num_x = (ne00 + 2*SYCL_GET_ROWS_BLOCK_SIZE - 1) / (2*SYCL_GET_ROWS_BLOCK_SIZE); - const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x); - - // strides in elements - //const size_t s0 = nb0 / ggml_element_size(dst); - const size_t s1 = nb1 / ggml_element_size(dst); - const size_t s2 = nb2 / ggml_element_size(dst); - const size_t s3 = nb3 / ggml_element_size(dst); - - const size_t s10 = nb10 / ggml_element_size(src1); - const size_t s11 = nb11 / ggml_element_size(src1); - const size_t s12 = nb12 / ggml_element_size(src1); - //const size_t s13 = nb13 / ggml_element_size(src1); - - GGML_ASSERT(ne00 % 2 == 0); - - const uint8_t* src0_q = (const uint8_t*)src0_dd; - const size_t ncols = ne00; - const size_t nrows = ne01; - const sycl::half* src0_dq = (const sycl::half*)(src0_q + nrows * ncols / 2); - stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[sycl::reqd_sub_group_size(WARP_SIZE)]]{ - k_get_rows_reorder( - src0_dd, src0_dq, src1_dd, dst_dd, ne00, ne12, s1, s2, - s3, nb01, nb02, nb03, s10, s11, s12, item_ct1); - }); - - GGML_UNUSED(dst); - GGML_UNUSED(ctx); -} - - template static void get_rows_sycl_float(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst, @@ -277,13 +188,8 @@ void ggml_sycl_op_get_rows(ggml_backend_sycl_context & ctx, ggml_tensor * dst) { src1_i32, (float *)dst->data, ctx.stream()); break; case GGML_TYPE_Q4_0: - if (ctx.opt_feature.reorder && dst->op == GGML_OP_MUL_MAT) { - get_rows_sycl_reorder(ctx, dst->src[0], dst->src[1], dst, (const float *)dst->src[0]->data, - src1_i32, (float *)dst->data, ctx.stream()); - } else { - get_rows_sycl(ctx, dst->src[0], dst->src[1], dst, (const float *)dst->src[0]->data, - src1_i32, (float *)dst->data, ctx.stream()); - } + get_rows_sycl(ctx, dst->src[0], dst->src[1], dst, (const float *)dst->src[0]->data, + src1_i32, (float *)dst->data, ctx.stream()); break; case GGML_TYPE_Q4_1: get_rows_sycl(ctx, dst->src[0], dst->src[1], dst, (const float *)dst->src[0]->data, From 456af35eb70177b8dd5779b6d4c21bb020f9cebd Mon Sep 17 00:00:00 2001 From: fanyang Date: Thu, 19 Jun 2025 20:49:48 +0800 Subject: [PATCH 87/95] build : suppress gcc15 compile warnings (#14261) * Change _contains_any() substrs to std::string_view and fix the find comparison logic. --- common/common.cpp | 6 ++++++ ggml/src/ggml-backend-reg.cpp | 5 +++++ src/llama-vocab.cpp | 4 ++-- src/unicode.cpp | 5 +++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index eb80cee0894a6..c2c94e7ae6c08 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -706,11 +706,17 @@ bool fs_validate_filename(const std::string & filename) { // disable C++17 deprecation warning for std::codecvt_utf8 # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif + std::wstring_convert, char32_t> converter; #if defined(__clang__) # pragma clang diagnostic pop +#elif defined(__GNUC__) +# pragma GCC diagnostic pop #endif filename_utf32 = converter.from_bytes(filename); diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp index 405d8e31514b5..2d93771fd1cc0 100644 --- a/ggml/src/ggml-backend-reg.cpp +++ b/ggml/src/ggml-backend-reg.cpp @@ -69,6 +69,9 @@ #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif namespace fs = std::filesystem; @@ -91,6 +94,8 @@ static std::string path_str(const fs::path & path) { #if defined(__clang__) # pragma clang diagnostic pop +#elif defined(__GNUC__) +# pragma GCC diagnostic pop #endif #ifdef _WIN32 diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index dd2251ef3cbef..d90f1d6b1ea63 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -2060,9 +2060,9 @@ void llama_vocab::impl::load(llama_model_loader & ml, const LLM_KV & kv) { //NOTE: Per token attributes are missing from the GGUF file. //TODO: Extract attributes from GGUF file. { - auto _contains_any = [] (const std::string & str, const std::vector & substrs) -> bool { + auto _contains_any = [] (const std::string & str, const std::vector & substrs) -> bool { for (const auto & substr : substrs) { - if (str.find(substr) < std::string::npos) { + if (str.find(substr) != std::string::npos) { return true; } } diff --git a/src/unicode.cpp b/src/unicode.cpp index e63bb4ab085d6..43a4581b961fe 100644 --- a/src/unicode.cpp +++ b/src/unicode.cpp @@ -204,12 +204,17 @@ static inline std::wstring unicode_wstring_from_utf8(const std::string & s) { // disable C++17 deprecation warning for std::codecvt_utf8 # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif std::wstring_convert> conv; #if defined(__clang__) # pragma clang diagnostic pop +#elif defined(__GNUC__) +# pragma GCC diagnostic pop #endif return conv.from_bytes(s); From d67341dc18fc5cc63362880ab2f8f9ecfc7932e7 Mon Sep 17 00:00:00 2001 From: aa956 Date: Thu, 19 Jun 2025 16:01:03 +0300 Subject: [PATCH 88/95] server : add server parameters for draft model cache type (#13782) Co-authored-by: aa956 <27946957+aa956@users.noreply.github.com> --- common/arg.cpp | 26 ++++++++++++++++++++++++++ common/common.h | 3 +++ tools/server/README.md | 2 ++ tools/server/server.cpp | 6 ++---- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 231de227a9122..3dfaa71eff188 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -3210,6 +3210,32 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.speculative.model.path = value; } ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_MODEL_DRAFT")); + add_opt(common_arg( + {"-ctkd", "--cache-type-k-draft"}, "TYPE", + string_format( + "KV cache data type for K for the draft model\n" + "allowed values: %s\n" + "(default: %s)", + get_all_kv_cache_types().c_str(), + ggml_type_name(params.speculative.cache_type_k) + ), + [](common_params & params, const std::string & value) { + params.speculative.cache_type_k = kv_cache_type_from_str(value); + } + ).set_env("LLAMA_ARG_CACHE_TYPE_K_DRAFT")); + add_opt(common_arg( + {"-ctvd", "--cache-type-v-draft"}, "TYPE", + string_format( + "KV cache data type for V for the draft model\n" + "allowed values: %s\n" + "(default: %s)", + get_all_kv_cache_types().c_str(), + ggml_type_name(params.speculative.cache_type_v) + ), + [](common_params & params, const std::string & value) { + params.speculative.cache_type_v = kv_cache_type_from_str(value); + } + ).set_env("LLAMA_ARG_CACHE_TYPE_V_DRAFT")); add_opt(common_arg( {"-mv", "--model-vocoder"}, "FNAME", diff --git a/common/common.h b/common/common.h index 00b6ca03a20b4..5710c4e9735fd 100644 --- a/common/common.h +++ b/common/common.h @@ -199,6 +199,9 @@ struct common_params_speculative { float p_split = 0.1f; // speculative decoding split probability float p_min = 0.75f; // minimum speculative decoding probability (greedy) + ggml_type cache_type_k = GGML_TYPE_F16; // KV cache data type for the K + ggml_type cache_type_v = GGML_TYPE_F16; // KV cache data type for the V + struct cpu_params cpuparams; struct cpu_params cpuparams_batch; diff --git a/tools/server/README.md b/tools/server/README.md index 06533c172e530..43aa65d50ce3f 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -187,6 +187,8 @@ 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) | | `-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) | diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 721d09182845d..9d55b3338bcfe 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -1969,10 +1969,8 @@ struct server_context { params_dft.n_ctx = params_base.speculative.n_ctx == 0 ? params_base.n_ctx / params_base.n_parallel : params_base.speculative.n_ctx; params_dft.n_gpu_layers = params_base.speculative.n_gpu_layers; params_dft.n_parallel = 1; - - // force F16 KV cache for the draft model for extra performance - params_dft.cache_type_k = GGML_TYPE_F16; - params_dft.cache_type_v = GGML_TYPE_F16; + params_dft.cache_type_k = params_base.speculative.cache_type_k; + params_dft.cache_type_v = params_base.speculative.cache_type_v; llama_init_dft = common_init_from_params(params_dft); From 381174bbdaf10d6a80dc2099f284b20544d86962 Mon Sep 17 00:00:00 2001 From: Alex Trotta <44127594+Ahajha@users.noreply.github.com> Date: Thu, 19 Jun 2025 09:56:12 -0400 Subject: [PATCH 89/95] gguf-py : make sentencepiece optional (#14200) * Make sentencepiece optional * Bump to 0.18.0 * Bump patch instead of minor Co-authored-by: compilade --------- Co-authored-by: compilade --- gguf-py/gguf/vocab.py | 8 +++++++- gguf-py/pyproject.toml | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gguf-py/gguf/vocab.py b/gguf-py/gguf/vocab.py index cca0979862a71..44d066ee75a7e 100644 --- a/gguf-py/gguf/vocab.py +++ b/gguf-py/gguf/vocab.py @@ -7,7 +7,10 @@ from pathlib import Path from typing import Any, Callable, Sequence, Mapping, Iterable, Protocol, ClassVar, runtime_checkable -from sentencepiece import SentencePieceProcessor +try: + from sentencepiece import SentencePieceProcessor +except ImportError: + SentencePieceProcessor = None import gguf @@ -302,6 +305,9 @@ class SentencePieceVocab(Vocab): name = "spm" def __init__(self, base_path: Path): + if SentencePieceProcessor is None: + raise RuntimeError("sentencepiece is not installed") + added_tokens: dict[str, int] = {} if (fname_tokenizer := base_path / 'tokenizer.model').exists(): # normal location diff --git a/gguf-py/pyproject.toml b/gguf-py/pyproject.toml index f11351cba1767..0f3a1eeee8304 100644 --- a/gguf-py/pyproject.toml +++ b/gguf-py/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gguf" -version = "0.17.0" +version = "0.17.1" description = "Read and write ML models in GGUF for GGML" authors = ["GGML "] packages = [ @@ -22,7 +22,7 @@ python = ">=3.8" numpy = ">=1.17" tqdm = ">=4.27" pyyaml = ">=5.1" -sentencepiece = ">=0.1.98,<=0.2.0" +sentencepiece = { version = ">=0.1.98,<=0.2.0", optional = true } PySide6 = { version = "^6.9", python = ">=3.9,<3.14", optional = true } [tool.poetry.dev-dependencies] From 8f71d0f3e86ccbba059350058af8758cafed73e6 Mon Sep 17 00:00:00 2001 From: Diego Devesa Date: Thu, 19 Jun 2025 12:24:14 -0700 Subject: [PATCH 90/95] ggml-cpu : remove unnecesary arm feature detection (#14281) Support for Arm runtime feature detection has now been added to GGML_CPU_ALL_VARIANTS. This removes the old and not very functional code. --- ggml/src/ggml-cpu/arch/arm/repack.cpp | 2040 ++++++++++++------------- ggml/src/ggml-cpu/ggml-cpu.c | 95 +- 2 files changed, 1023 insertions(+), 1112 deletions(-) diff --git a/ggml/src/ggml-cpu/arch/arm/repack.cpp b/ggml/src/ggml-cpu/arch/arm/repack.cpp index 9337e01b62390..39a0dd301db08 100644 --- a/ggml/src/ggml-cpu/arch/arm/repack.cpp +++ b/ggml/src/ggml-cpu/arch/arm/repack.cpp @@ -256,45 +256,43 @@ void ggml_gemv_q4_0_4x4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo UNUSED(blocklen); #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) - if (ggml_cpu_has_neon() && ggml_cpu_has_dotprod()) { - const block_q4_0x4 * b_ptr = (const block_q4_0x4 *) vx; - - for (int c = 0; c < nc; c += ncols_interleaved) { - const block_q8_0 * a_ptr = (const block_q8_0 *) vy; - float32x4_t acc = vdupq_n_f32(0); - for (int b = 0; b < nb; b++) { - int8x16_t b0 = vld1q_s8((const int8_t *) b_ptr->qs); - int8x16_t b1 = vld1q_s8((const int8_t *) b_ptr->qs + 16); - int8x16_t b2 = vld1q_s8((const int8_t *) b_ptr->qs + 32); - int8x16_t b3 = vld1q_s8((const int8_t *) b_ptr->qs + 48); - float16x4_t bd = vld1_f16((const __fp16 *) b_ptr->d); - - int8x16_t a0 = vld1q_s8(a_ptr->qs); - int8x16_t a1 = vld1q_s8(a_ptr->qs + qk/2); - float16x4_t ad = vld1_dup_f16((const __fp16 *) &a_ptr->d); - - int32x4_t ret = vdupq_n_s32(0); - - ret = vdotq_laneq_s32(ret, b0 << 4, a0, 0); - ret = vdotq_laneq_s32(ret, b1 << 4, a0, 1); - ret = vdotq_laneq_s32(ret, b2 << 4, a0, 2); - ret = vdotq_laneq_s32(ret, b3 << 4, a0, 3); - - ret = vdotq_laneq_s32(ret, b0 & 0xf0U, a1, 0); - ret = vdotq_laneq_s32(ret, b1 & 0xf0U, a1, 1); - ret = vdotq_laneq_s32(ret, b2 & 0xf0U, a1, 2); - ret = vdotq_laneq_s32(ret, b3 & 0xf0U, a1, 3); - - acc = vfmaq_f32(acc, vcvtq_n_f32_s32(ret, 4), - vmulq_f32(vcvt_f32_f16(ad), vcvt_f32_f16(bd))); - a_ptr++; - b_ptr++; - } - vst1q_f32(s, acc); - s += ncols_interleaved; + const block_q4_0x4 * b_ptr = (const block_q4_0x4 *) vx; + + for (int c = 0; c < nc; c += ncols_interleaved) { + const block_q8_0 * a_ptr = (const block_q8_0 *) vy; + float32x4_t acc = vdupq_n_f32(0); + for (int b = 0; b < nb; b++) { + int8x16_t b0 = vld1q_s8((const int8_t *) b_ptr->qs); + int8x16_t b1 = vld1q_s8((const int8_t *) b_ptr->qs + 16); + int8x16_t b2 = vld1q_s8((const int8_t *) b_ptr->qs + 32); + int8x16_t b3 = vld1q_s8((const int8_t *) b_ptr->qs + 48); + float16x4_t bd = vld1_f16((const __fp16 *) b_ptr->d); + + int8x16_t a0 = vld1q_s8(a_ptr->qs); + int8x16_t a1 = vld1q_s8(a_ptr->qs + qk/2); + float16x4_t ad = vld1_dup_f16((const __fp16 *) &a_ptr->d); + + int32x4_t ret = vdupq_n_s32(0); + + ret = vdotq_laneq_s32(ret, b0 << 4, a0, 0); + ret = vdotq_laneq_s32(ret, b1 << 4, a0, 1); + ret = vdotq_laneq_s32(ret, b2 << 4, a0, 2); + ret = vdotq_laneq_s32(ret, b3 << 4, a0, 3); + + ret = vdotq_laneq_s32(ret, b0 & 0xf0U, a1, 0); + ret = vdotq_laneq_s32(ret, b1 & 0xf0U, a1, 1); + ret = vdotq_laneq_s32(ret, b2 & 0xf0U, a1, 2); + ret = vdotq_laneq_s32(ret, b3 & 0xf0U, a1, 3); + + acc = vfmaq_f32(acc, vcvtq_n_f32_s32(ret, 4), + vmulq_f32(vcvt_f32_f16(ad), vcvt_f32_f16(bd))); + a_ptr++; + b_ptr++; } - return; + vst1q_f32(s, acc); + s += ncols_interleaved; } + return; #endif // #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) float sumf[4]; int sumi; @@ -341,50 +339,48 @@ void ggml_gemv_q4_0_4x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo UNUSED(blocklen); #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) - if (ggml_cpu_has_neon() && ggml_cpu_has_dotprod()) { - const block_q4_0x4 * b_ptr = (const block_q4_0x4 *) vx; - - for (int c = 0; c < nc; c += ncols_interleaved) { - const block_q8_0 * a_ptr = (const block_q8_0 *) vy; - float32x4_t acc = vdupq_n_f32(0); - for (int b = 0; b < nb; b++) { - int8x16_t b0 = vld1q_s8((const int8_t *) b_ptr->qs); - int8x16_t b1 = vld1q_s8((const int8_t *) b_ptr->qs + 16); - int8x16_t b2 = vld1q_s8((const int8_t *) b_ptr->qs + 32); - int8x16_t b3 = vld1q_s8((const int8_t *) b_ptr->qs + 48); - float16x4_t bd = vld1_f16((const __fp16 *) b_ptr->d); - - int8x16_t a0 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs); - int8x16_t a1 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs + 1); - int8x16_t a2 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs + 2); - int8x16_t a3 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs + 3); - float16x4_t ad = vld1_dup_f16((const __fp16 *) &a_ptr->d); - - int32x4_t ret0 = vdupq_n_s32(0); - int32x4_t ret1 = vdupq_n_s32(0); - - ret0 = vdotq_s32(ret0, b0 << 4, a0); - ret1 = vdotq_s32(ret1, b1 << 4, a0); - ret0 = vdotq_s32(ret0, b2 << 4, a1); - ret1 = vdotq_s32(ret1, b3 << 4, a1); - - ret0 = vdotq_s32(ret0, b0 & 0xf0U, a2); - ret1 = vdotq_s32(ret1, b1 & 0xf0U, a2); - ret0 = vdotq_s32(ret0, b2 & 0xf0U, a3); - ret1 = vdotq_s32(ret1, b3 & 0xf0U, a3); - - int32x4_t ret = vpaddq_s32(ret0, ret1); - - acc = vfmaq_f32(acc, vcvtq_n_f32_s32(ret, 4), - vmulq_f32(vcvt_f32_f16(ad), vcvt_f32_f16(bd))); - a_ptr++; - b_ptr++; - } - vst1q_f32(s, acc); - s += ncols_interleaved; + const block_q4_0x4 * b_ptr = (const block_q4_0x4 *) vx; + + for (int c = 0; c < nc; c += ncols_interleaved) { + const block_q8_0 * a_ptr = (const block_q8_0 *) vy; + float32x4_t acc = vdupq_n_f32(0); + for (int b = 0; b < nb; b++) { + int8x16_t b0 = vld1q_s8((const int8_t *) b_ptr->qs); + int8x16_t b1 = vld1q_s8((const int8_t *) b_ptr->qs + 16); + int8x16_t b2 = vld1q_s8((const int8_t *) b_ptr->qs + 32); + int8x16_t b3 = vld1q_s8((const int8_t *) b_ptr->qs + 48); + float16x4_t bd = vld1_f16((const __fp16 *) b_ptr->d); + + int8x16_t a0 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs); + int8x16_t a1 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs + 1); + int8x16_t a2 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs + 2); + int8x16_t a3 = (int8x16_t) vld1q_dup_s64((const int64_t *) a_ptr->qs + 3); + float16x4_t ad = vld1_dup_f16((const __fp16 *) &a_ptr->d); + + int32x4_t ret0 = vdupq_n_s32(0); + int32x4_t ret1 = vdupq_n_s32(0); + + ret0 = vdotq_s32(ret0, b0 << 4, a0); + ret1 = vdotq_s32(ret1, b1 << 4, a0); + ret0 = vdotq_s32(ret0, b2 << 4, a1); + ret1 = vdotq_s32(ret1, b3 << 4, a1); + + ret0 = vdotq_s32(ret0, b0 & 0xf0U, a2); + ret1 = vdotq_s32(ret1, b1 & 0xf0U, a2); + ret0 = vdotq_s32(ret0, b2 & 0xf0U, a3); + ret1 = vdotq_s32(ret1, b3 & 0xf0U, a3); + + int32x4_t ret = vpaddq_s32(ret0, ret1); + + acc = vfmaq_f32(acc, vcvtq_n_f32_s32(ret, 4), + vmulq_f32(vcvt_f32_f16(ad), vcvt_f32_f16(bd))); + a_ptr++; + b_ptr++; } - return; + vst1q_f32(s, acc); + s += ncols_interleaved; } + return; #endif // #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) float sumf[4]; int sumi; @@ -432,7 +428,7 @@ void ggml_gemv_q4_0_8x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) #if defined(__ARM_FEATURE_SVE) - if (ggml_cpu_has_sve() && ggml_cpu_get_sve_cnt() == QK8_0) { + if (ggml_cpu_get_sve_cnt() == QK8_0) { const void * b_ptr = vx; const void * a_ptr = vy; float * res_ptr = s; @@ -547,54 +543,52 @@ void ggml_gemv_iq4_nl_4x4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const UNUSED(blocklen); #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) - if (ggml_cpu_has_neon() && ggml_cpu_has_dotprod()) { - const int8x16_t kvalues = vld1q_s8(kvalues_iq4nl); - const block_q8_0 * a_ptr = (const block_q8_0 *) vy; - float * res_ptr = s; - - for (int x = 0; x < nc / ncols_interleaved; x++) { - const block_iq4_nlx4 * b_ptr = (const block_iq4_nlx4 *) vx + (x * nb); - - float32x4_t sumf = vdupq_n_f32(0); - for (int l = 0; l < nb; l++) { - uint8x16_t b_0 = vld1q_u8(b_ptr[l].qs + 0); - uint8x16_t b_1 = vld1q_u8(b_ptr[l].qs + 16); - uint8x16_t b_2 = vld1q_u8(b_ptr[l].qs + 32); - uint8x16_t b_3 = vld1q_u8(b_ptr[l].qs + 48); - - int8x16_t b_0_hi = vqtbl1q_s8(kvalues, b_0 >> 4); - int8x16_t b_0_lo = vqtbl1q_s8(kvalues, b_0 & 0x0F); - int8x16_t b_1_hi = vqtbl1q_s8(kvalues, b_1 >> 4); - int8x16_t b_1_lo = vqtbl1q_s8(kvalues, b_1 & 0x0F); - int8x16_t b_2_hi = vqtbl1q_s8(kvalues, b_2 >> 4); - int8x16_t b_2_lo = vqtbl1q_s8(kvalues, b_2 & 0x0F); - int8x16_t b_3_hi = vqtbl1q_s8(kvalues, b_3 >> 4); - int8x16_t b_3_lo = vqtbl1q_s8(kvalues, b_3 & 0x0F); - - int8x16_t a_0 = vld1q_s8(a_ptr[l].qs + 0); - int8x16_t a_1 = vld1q_s8(a_ptr[l].qs + 16); - - int32x4_t sumi = vdupq_n_s32(0); - sumi = vdotq_laneq_s32(sumi, b_0_lo, a_0, 0); - sumi = vdotq_laneq_s32(sumi, b_0_hi, a_1, 0); - sumi = vdotq_laneq_s32(sumi, b_1_lo, a_0, 1); - sumi = vdotq_laneq_s32(sumi, b_1_hi, a_1, 1); - sumi = vdotq_laneq_s32(sumi, b_2_lo, a_0, 2); - sumi = vdotq_laneq_s32(sumi, b_2_hi, a_1, 2); - sumi = vdotq_laneq_s32(sumi, b_3_lo, a_0, 3); - sumi = vdotq_laneq_s32(sumi, b_3_hi, a_1, 3); - - float32x4_t a_d = vcvt_f32_f16(vld1_dup_f16((const float16_t *)&a_ptr[l].d)); - float32x4_t b_d = vcvt_f32_f16(vld1_f16((const float16_t *)b_ptr[l].d)); - float32x4_t d = a_d * b_d; + const int8x16_t kvalues = vld1q_s8(kvalues_iq4nl); + const block_q8_0 * a_ptr = (const block_q8_0 *) vy; + float * res_ptr = s; - sumf = vmlaq_f32(sumf, d, vcvtq_f32_s32(sumi)); - } + for (int x = 0; x < nc / ncols_interleaved; x++) { + const block_iq4_nlx4 * b_ptr = (const block_iq4_nlx4 *) vx + (x * nb); - vst1q_f32(res_ptr + x * 4, sumf); + float32x4_t sumf = vdupq_n_f32(0); + for (int l = 0; l < nb; l++) { + uint8x16_t b_0 = vld1q_u8(b_ptr[l].qs + 0); + uint8x16_t b_1 = vld1q_u8(b_ptr[l].qs + 16); + uint8x16_t b_2 = vld1q_u8(b_ptr[l].qs + 32); + uint8x16_t b_3 = vld1q_u8(b_ptr[l].qs + 48); + + int8x16_t b_0_hi = vqtbl1q_s8(kvalues, b_0 >> 4); + int8x16_t b_0_lo = vqtbl1q_s8(kvalues, b_0 & 0x0F); + int8x16_t b_1_hi = vqtbl1q_s8(kvalues, b_1 >> 4); + int8x16_t b_1_lo = vqtbl1q_s8(kvalues, b_1 & 0x0F); + int8x16_t b_2_hi = vqtbl1q_s8(kvalues, b_2 >> 4); + int8x16_t b_2_lo = vqtbl1q_s8(kvalues, b_2 & 0x0F); + int8x16_t b_3_hi = vqtbl1q_s8(kvalues, b_3 >> 4); + int8x16_t b_3_lo = vqtbl1q_s8(kvalues, b_3 & 0x0F); + + int8x16_t a_0 = vld1q_s8(a_ptr[l].qs + 0); + int8x16_t a_1 = vld1q_s8(a_ptr[l].qs + 16); + + int32x4_t sumi = vdupq_n_s32(0); + sumi = vdotq_laneq_s32(sumi, b_0_lo, a_0, 0); + sumi = vdotq_laneq_s32(sumi, b_0_hi, a_1, 0); + sumi = vdotq_laneq_s32(sumi, b_1_lo, a_0, 1); + sumi = vdotq_laneq_s32(sumi, b_1_hi, a_1, 1); + sumi = vdotq_laneq_s32(sumi, b_2_lo, a_0, 2); + sumi = vdotq_laneq_s32(sumi, b_2_hi, a_1, 2); + sumi = vdotq_laneq_s32(sumi, b_3_lo, a_0, 3); + sumi = vdotq_laneq_s32(sumi, b_3_hi, a_1, 3); + + float32x4_t a_d = vcvt_f32_f16(vld1_dup_f16((const float16_t *)&a_ptr[l].d)); + float32x4_t b_d = vcvt_f32_f16(vld1_f16((const float16_t *)b_ptr[l].d)); + float32x4_t d = a_d * b_d; + + sumf = vmlaq_f32(sumf, d, vcvtq_f32_s32(sumi)); } - return; + + vst1q_f32(res_ptr + x * 4, sumf); } + return; #endif // #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) { float sumf[4]; @@ -643,465 +637,463 @@ void ggml_gemm_q4_0_4x4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo UNUSED(ncols_interleaved); UNUSED(blocklen); -#if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) - if (ggml_cpu_has_neon() && ggml_cpu_has_dotprod()) { - const void * b_ptr = vx; - const void * a_ptr = vy; - float * res_ptr = s; - size_t res_stride = bs * sizeof(float); - - __asm__ __volatile__( - "mov x10, %x[nr]\n" - "mov x9, #0x88\n" - "cmp x10, #0x10\n" - "mul x9, %x[nb], x9\n" - "blt 4f\n" - "1:" // Row loop - "add x28, %x[b_ptr], #0x8\n" - "mov x27, %x[nc]\n" - "add x26, %x[res_ptr], %x[res_stride], LSL #4\n" - "2:" // Column loop - "add x25, %x[a_ptr], #0x8\n" - "movi v15.16b, #0x0\n" - "movi v19.16b, #0x0\n" - "mov x24, %x[nb]\n" - "add x23, x25, x9\n" - "movi v18.16b, #0x0\n" - "movi v14.16b, #0x0\n" - "add x22, x23, x9\n" - "movi v11.16b, #0x0\n" - "movi v13.16b, #0x0\n" - "add x21, x22, x9\n" - "movi v23.16b, #0x0\n" - "movi v16.16b, #0x0\n" - "movi v25.16b, #0x0\n" - "movi v7.16b, #0x0\n" - "movi v0.16b, #0x0\n" - "movi v4.16b, #0x0\n" - "movi v5.16b, #0x0\n" - "movi v21.16b, #0x0\n" - "movi v8.16b, #0x0\n" - "movi v1.16b, #0x0\n" - "3:" // Block loop - "ldr q3, [x28, #0x0]\n" - "ldr q31, [x25, #0x0]\n" - "movi v28.16b, #0x4\n" - "movi v10.4s, #0x0\n" - "ldr q22, [x28, #0x10]\n" - "ldr q6, [x25, #0x10]\n" - "movi v29.4s, #0x0\n" - "movi v9.4s, #0x0\n" - "ldr q27, [x28, #0x20]\n" - "ldr q30, [x28, #0x30]\n" - "movi v20.4s, #0x0\n" - "movi v24.16b, #0xf0\n" - "ldr d2, [x25, #-0x8]\n" - "ldr d26, [x23, #-0x8]\n" - "sshl v12.16b, v3.16b, v28.16b\n" - "sub x20, x28, #0x8\n" - "ldr d17, [x20, #0x0]\n" - "and v3.16b, v3.16b, v24.16b\n" - "subs x24, x24, #0x1\n" - "add x28, x28, #0x48\n" - ".inst 0x4f9fe18a // sdot v10.4s, v12.16b, v31.4b[0]\n" - ".inst 0x4fbfe19d // sdot v29.4s, v12.16b, v31.4b[1]\n" - ".inst 0x4f9fe989 // sdot v9.4s, v12.16b, v31.4b[2]\n" - ".inst 0x4fbfe994 // sdot v20.4s, v12.16b, v31.4b[3]\n" - "sshl v31.16b, v22.16b, v28.16b\n" - "and v22.16b, v22.16b, v24.16b\n" - "fcvtl v17.4s, v17.4h\n" - "fcvtl v2.4s, v2.4h\n" - "fcvtl v26.4s, v26.4h\n" - ".inst 0x4f86e3ea // sdot v10.4s, v31.16b, v6.4b[0]\n" - ".inst 0x4fa6e3fd // sdot v29.4s, v31.16b, v6.4b[1]\n" - ".inst 0x4f86ebe9 // sdot v9.4s, v31.16b, v6.4b[2]\n" - ".inst 0x4fa6ebf4 // sdot v20.4s, v31.16b, v6.4b[3]\n" - "sshl v6.16b, v27.16b, v28.16b\n" - "sshl v28.16b, v30.16b, v28.16b\n" - "and v27.16b, v27.16b, v24.16b\n" - "and v30.16b, v30.16b, v24.16b\n" - "ldr q24, [x25, #0x20]\n" - ".inst 0x4f98e0ca // sdot v10.4s, v6.16b, v24.4b[0]\n" - ".inst 0x4fb8e0dd // sdot v29.4s, v6.16b, v24.4b[1]\n" - ".inst 0x4f98e8c9 // sdot v9.4s, v6.16b, v24.4b[2]\n" - ".inst 0x4fb8e8d4 // sdot v20.4s, v6.16b, v24.4b[3]\n" - "ldr q24, [x25, #0x30]\n" - ".inst 0x4f98e38a // sdot v10.4s, v28.16b, v24.4b[0]\n" - ".inst 0x4fb8e39d // sdot v29.4s, v28.16b, v24.4b[1]\n" - ".inst 0x4f98eb89 // sdot v9.4s, v28.16b, v24.4b[2]\n" - ".inst 0x4fb8eb94 // sdot v20.4s, v28.16b, v24.4b[3]\n" - "ldr q24, [x25, #0x40]\n" - ".inst 0x4f98e06a // sdot v10.4s, v3.16b, v24.4b[0]\n" - ".inst 0x4fb8e07d // sdot v29.4s, v3.16b, v24.4b[1]\n" - ".inst 0x4f98e869 // sdot v9.4s, v3.16b, v24.4b[2]\n" - ".inst 0x4fb8e874 // sdot v20.4s, v3.16b, v24.4b[3]\n" - "ldr q24, [x25, #0x50]\n" - ".inst 0x4f98e2ca // sdot v10.4s, v22.16b, v24.4b[0]\n" - ".inst 0x4fb8e2dd // sdot v29.4s, v22.16b, v24.4b[1]\n" - ".inst 0x4f98eac9 // sdot v9.4s, v22.16b, v24.4b[2]\n" - ".inst 0x4fb8ead4 // sdot v20.4s, v22.16b, v24.4b[3]\n" - "ldr q24, [x25, #0x60]\n" - ".inst 0x4f98e36a // sdot v10.4s, v27.16b, v24.4b[0]\n" - ".inst 0x4fb8e37d // sdot v29.4s, v27.16b, v24.4b[1]\n" - ".inst 0x4f98eb69 // sdot v9.4s, v27.16b, v24.4b[2]\n" - ".inst 0x4fb8eb74 // sdot v20.4s, v27.16b, v24.4b[3]\n" - "ldr q24, [x25, #0x70]\n" - "add x25, x25, #0x88\n" - ".inst 0x4f98e3ca // sdot v10.4s, v30.16b, v24.4b[0]\n" - ".inst 0x4fb8e3dd // sdot v29.4s, v30.16b, v24.4b[1]\n" - ".inst 0x4f98ebc9 // sdot v9.4s, v30.16b, v24.4b[2]\n" - ".inst 0x4fb8ebd4 // sdot v20.4s, v30.16b, v24.4b[3]\n" - "fmul v24.4s, v17.4s, v2.s[0]\n" - "scvtf v10.4s, v10.4s, #0x4\n" - "scvtf v29.4s, v29.4s, #0x4\n" - "scvtf v9.4s, v9.4s, #0x4\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "fmla v15.4s, v10.4s, v24.4s\n" - "ldr q24, [x23, #0x0]\n" - "fmul v10.4s, v17.4s, v2.s[1]\n" - "fmla v19.4s, v29.4s, v10.4s\n" - "ldr q10, [x23, #0x10]\n" - "fmul v29.4s, v17.4s, v2.s[2]\n" - "fmul v2.4s, v17.4s, v2.s[3]\n" - "fmla v18.4s, v9.4s, v29.4s\n" - "movi v9.4s, #0x0\n" - "movi v29.4s, #0x0\n" - ".inst 0x4f98e189 // sdot v9.4s, v12.16b, v24.4b[0]\n" - ".inst 0x4fb8e19d // sdot v29.4s, v12.16b, v24.4b[1]\n" - "fmla v14.4s, v20.4s, v2.4s\n" - "movi v20.4s, #0x0\n" - "movi v2.4s, #0x0\n" - ".inst 0x4f98e994 // sdot v20.4s, v12.16b, v24.4b[2]\n" - ".inst 0x4fb8e982 // sdot v2.4s, v12.16b, v24.4b[3]\n" - "ldr q24, [x23, #0x20]\n" - ".inst 0x4f8ae3e9 // sdot v9.4s, v31.16b, v10.4b[0]\n" - ".inst 0x4faae3fd // sdot v29.4s, v31.16b, v10.4b[1]\n" - ".inst 0x4f8aebf4 // sdot v20.4s, v31.16b, v10.4b[2]\n" - ".inst 0x4faaebe2 // sdot v2.4s, v31.16b, v10.4b[3]\n" - "ldr q10, [x23, #0x30]\n" - ".inst 0x4f98e0c9 // sdot v9.4s, v6.16b, v24.4b[0]\n" - ".inst 0x4fb8e0dd // sdot v29.4s, v6.16b, v24.4b[1]\n" - ".inst 0x4f98e8d4 // sdot v20.4s, v6.16b, v24.4b[2]\n" - ".inst 0x4fb8e8c2 // sdot v2.4s, v6.16b, v24.4b[3]\n" - "ldr q24, [x23, #0x40]\n" - ".inst 0x4f8ae389 // sdot v9.4s, v28.16b, v10.4b[0]\n" - ".inst 0x4faae39d // sdot v29.4s, v28.16b, v10.4b[1]\n" - ".inst 0x4f8aeb94 // sdot v20.4s, v28.16b, v10.4b[2]\n" - ".inst 0x4faaeb82 // sdot v2.4s, v28.16b, v10.4b[3]\n" - "ldr q10, [x23, #0x50]\n" - ".inst 0x4f98e069 // sdot v9.4s, v3.16b, v24.4b[0]\n" - ".inst 0x4fb8e07d // sdot v29.4s, v3.16b, v24.4b[1]\n" - ".inst 0x4f98e874 // sdot v20.4s, v3.16b, v24.4b[2]\n" - ".inst 0x4fb8e862 // sdot v2.4s, v3.16b, v24.4b[3]\n" - "ldr q24, [x23, #0x60]\n" - ".inst 0x4f8ae2c9 // sdot v9.4s, v22.16b, v10.4b[0]\n" - ".inst 0x4faae2dd // sdot v29.4s, v22.16b, v10.4b[1]\n" - ".inst 0x4f8aead4 // sdot v20.4s, v22.16b, v10.4b[2]\n" - ".inst 0x4faaeac2 // sdot v2.4s, v22.16b, v10.4b[3]\n" - "ldr q10, [x23, #0x70]\n" - "add x23, x23, #0x88\n" - ".inst 0x4f98e369 // sdot v9.4s, v27.16b, v24.4b[0]\n" - ".inst 0x4fb8e37d // sdot v29.4s, v27.16b, v24.4b[1]\n" - ".inst 0x4f98eb74 // sdot v20.4s, v27.16b, v24.4b[2]\n" - ".inst 0x4fb8eb62 // sdot v2.4s, v27.16b, v24.4b[3]\n" - "ldr q24, [x22, #0x0]\n" - ".inst 0x4f8ae3c9 // sdot v9.4s, v30.16b, v10.4b[0]\n" - ".inst 0x4faae3dd // sdot v29.4s, v30.16b, v10.4b[1]\n" - ".inst 0x4f8aebd4 // sdot v20.4s, v30.16b, v10.4b[2]\n" - ".inst 0x4faaebc2 // sdot v2.4s, v30.16b, v10.4b[3]\n" - "fmul v10.4s, v17.4s, v26.s[0]\n" - "scvtf v9.4s, v9.4s, #0x4\n" - "scvtf v29.4s, v29.4s, #0x4\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "scvtf v2.4s, v2.4s, #0x4\n" - "fmla v11.4s, v9.4s, v10.4s\n" - "ldr q9, [x22, #0x10]\n" - "fmul v10.4s, v17.4s, v26.s[1]\n" - "fmla v13.4s, v29.4s, v10.4s\n" - "ldr d29, [x22, #-0x8]\n" - "fmul v10.4s, v17.4s, v26.s[2]\n" - "fmul v26.4s, v17.4s, v26.s[3]\n" - "fcvtl v29.4s, v29.4h\n" - "fmla v23.4s, v20.4s, v10.4s\n" - "movi v20.4s, #0x0\n" - "movi v10.4s, #0x0\n" - "fmla v16.4s, v2.4s, v26.4s\n" - "movi v26.4s, #0x0\n" - "movi v2.4s, #0x0\n" - ".inst 0x4f98e194 // sdot v20.4s, v12.16b, v24.4b[0]\n" - ".inst 0x4fb8e18a // sdot v10.4s, v12.16b, v24.4b[1]\n" - ".inst 0x4f98e99a // sdot v26.4s, v12.16b, v24.4b[2]\n" - ".inst 0x4fb8e982 // sdot v2.4s, v12.16b, v24.4b[3]\n" - "ldr q24, [x22, #0x20]\n" - ".inst 0x4f89e3f4 // sdot v20.4s, v31.16b, v9.4b[0]\n" - ".inst 0x4fa9e3ea // sdot v10.4s, v31.16b, v9.4b[1]\n" - ".inst 0x4f89ebfa // sdot v26.4s, v31.16b, v9.4b[2]\n" - ".inst 0x4fa9ebe2 // sdot v2.4s, v31.16b, v9.4b[3]\n" - "ldr q9, [x22, #0x30]\n" - ".inst 0x4f98e0d4 // sdot v20.4s, v6.16b, v24.4b[0]\n" - ".inst 0x4fb8e0ca // sdot v10.4s, v6.16b, v24.4b[1]\n" - ".inst 0x4f98e8da // sdot v26.4s, v6.16b, v24.4b[2]\n" - ".inst 0x4fb8e8c2 // sdot v2.4s, v6.16b, v24.4b[3]\n" - "ldr q24, [x22, #0x40]\n" - ".inst 0x4f89e394 // sdot v20.4s, v28.16b, v9.4b[0]\n" - ".inst 0x4fa9e38a // sdot v10.4s, v28.16b, v9.4b[1]\n" - ".inst 0x4f89eb9a // sdot v26.4s, v28.16b, v9.4b[2]\n" - ".inst 0x4fa9eb82 // sdot v2.4s, v28.16b, v9.4b[3]\n" - "ldr q9, [x22, #0x50]\n" - ".inst 0x4f98e074 // sdot v20.4s, v3.16b, v24.4b[0]\n" - ".inst 0x4fb8e06a // sdot v10.4s, v3.16b, v24.4b[1]\n" - ".inst 0x4f98e87a // sdot v26.4s, v3.16b, v24.4b[2]\n" - ".inst 0x4fb8e862 // sdot v2.4s, v3.16b, v24.4b[3]\n" - "ldr q24, [x22, #0x60]\n" - ".inst 0x4f89e2d4 // sdot v20.4s, v22.16b, v9.4b[0]\n" - ".inst 0x4fa9e2ca // sdot v10.4s, v22.16b, v9.4b[1]\n" - ".inst 0x4f89eada // sdot v26.4s, v22.16b, v9.4b[2]\n" - ".inst 0x4fa9eac2 // sdot v2.4s, v22.16b, v9.4b[3]\n" - "ldr q9, [x22, #0x70]\n" - "add x22, x22, #0x88\n" - ".inst 0x4f98e374 // sdot v20.4s, v27.16b, v24.4b[0]\n" - ".inst 0x4fb8e36a // sdot v10.4s, v27.16b, v24.4b[1]\n" - ".inst 0x4f98eb7a // sdot v26.4s, v27.16b, v24.4b[2]\n" - ".inst 0x4fb8eb62 // sdot v2.4s, v27.16b, v24.4b[3]\n" - "ldr q24, [x21, #0x0]\n" - ".inst 0x4f89e3d4 // sdot v20.4s, v30.16b, v9.4b[0]\n" - ".inst 0x4fa9e3ca // sdot v10.4s, v30.16b, v9.4b[1]\n" - ".inst 0x4f89ebda // sdot v26.4s, v30.16b, v9.4b[2]\n" - ".inst 0x4fa9ebc2 // sdot v2.4s, v30.16b, v9.4b[3]\n" - "fmul v9.4s, v17.4s, v29.s[0]\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "scvtf v10.4s, v10.4s, #0x4\n" - "scvtf v26.4s, v26.4s, #0x4\n" - "scvtf v2.4s, v2.4s, #0x4\n" - "fmla v25.4s, v20.4s, v9.4s\n" - "ldr q9, [x21, #0x10]\n" - "fmul v20.4s, v17.4s, v29.s[1]\n" - "fmla v7.4s, v10.4s, v20.4s\n" - "ldr d20, [x21, #-0x8]\n" - "fmul v10.4s, v17.4s, v29.s[2]\n" - "fmul v29.4s, v17.4s, v29.s[3]\n" - "fcvtl v20.4s, v20.4h\n" - "fmla v0.4s, v26.4s, v10.4s\n" - "movi v26.4s, #0x0\n" - "movi v10.4s, #0x0\n" - "fmla v4.4s, v2.4s, v29.4s\n" - "movi v2.4s, #0x0\n" - "movi v29.4s, #0x0\n" - ".inst 0x4f98e19a // sdot v26.4s, v12.16b, v24.4b[0]\n" - ".inst 0x4fb8e18a // sdot v10.4s, v12.16b, v24.4b[1]\n" - ".inst 0x4f98e982 // sdot v2.4s, v12.16b, v24.4b[2]\n" - ".inst 0x4fb8e99d // sdot v29.4s, v12.16b, v24.4b[3]\n" - "ldr q12, [x21, #0x20]\n" - "fmul v24.4s, v17.4s, v20.s[0]\n" - ".inst 0x4f89e3fa // sdot v26.4s, v31.16b, v9.4b[0]\n" - ".inst 0x4fa9e3ea // sdot v10.4s, v31.16b, v9.4b[1]\n" - ".inst 0x4f89ebe2 // sdot v2.4s, v31.16b, v9.4b[2]\n" - ".inst 0x4fa9ebfd // sdot v29.4s, v31.16b, v9.4b[3]\n" - "ldr q9, [x21, #0x30]\n" - "fmul v31.4s, v17.4s, v20.s[1]\n" - ".inst 0x4f8ce0da // sdot v26.4s, v6.16b, v12.4b[0]\n" - ".inst 0x4face0ca // sdot v10.4s, v6.16b, v12.4b[1]\n" - ".inst 0x4f8ce8c2 // sdot v2.4s, v6.16b, v12.4b[2]\n" - ".inst 0x4face8dd // sdot v29.4s, v6.16b, v12.4b[3]\n" - "ldr q12, [x21, #0x40]\n" - "fmul v6.4s, v17.4s, v20.s[2]\n" - "fmul v20.4s, v17.4s, v20.s[3]\n" - ".inst 0x4f89e39a // sdot v26.4s, v28.16b, v9.4b[0]\n" - ".inst 0x4fa9e38a // sdot v10.4s, v28.16b, v9.4b[1]\n" - ".inst 0x4f89eb82 // sdot v2.4s, v28.16b, v9.4b[2]\n" - ".inst 0x4fa9eb9d // sdot v29.4s, v28.16b, v9.4b[3]\n" - "ldr q9, [x21, #0x50]\n" - ".inst 0x4f8ce07a // sdot v26.4s, v3.16b, v12.4b[0]\n" - ".inst 0x4face06a // sdot v10.4s, v3.16b, v12.4b[1]\n" - ".inst 0x4f8ce862 // sdot v2.4s, v3.16b, v12.4b[2]\n" - ".inst 0x4face87d // sdot v29.4s, v3.16b, v12.4b[3]\n" - "ldr q12, [x21, #0x60]\n" - ".inst 0x4f89e2da // sdot v26.4s, v22.16b, v9.4b[0]\n" - ".inst 0x4fa9e2ca // sdot v10.4s, v22.16b, v9.4b[1]\n" - ".inst 0x4f89eac2 // sdot v2.4s, v22.16b, v9.4b[2]\n" - ".inst 0x4fa9eadd // sdot v29.4s, v22.16b, v9.4b[3]\n" - "ldr q17, [x21, #0x70]\n" - "add x21, x21, #0x88\n" - ".inst 0x4f8ce37a // sdot v26.4s, v27.16b, v12.4b[0]\n" - ".inst 0x4face36a // sdot v10.4s, v27.16b, v12.4b[1]\n" - ".inst 0x4f8ceb62 // sdot v2.4s, v27.16b, v12.4b[2]\n" - ".inst 0x4faceb7d // sdot v29.4s, v27.16b, v12.4b[3]\n" - ".inst 0x4f91e3da // sdot v26.4s, v30.16b, v17.4b[0]\n" - ".inst 0x4fb1e3ca // sdot v10.4s, v30.16b, v17.4b[1]\n" - ".inst 0x4f91ebc2 // sdot v2.4s, v30.16b, v17.4b[2]\n" - ".inst 0x4fb1ebdd // sdot v29.4s, v30.16b, v17.4b[3]\n" - "scvtf v26.4s, v26.4s, #0x4\n" - "scvtf v10.4s, v10.4s, #0x4\n" - "fmla v5.4s, v26.4s, v24.4s\n" - "scvtf v2.4s, v2.4s, #0x4\n" - "scvtf v29.4s, v29.4s, #0x4\n" - "fmla v21.4s, v10.4s, v31.4s\n" - "fmla v8.4s, v2.4s, v6.4s\n" - "fmla v1.4s, v29.4s, v20.4s\n" - "bgt 3b\n" - "mov x20, %x[res_ptr]\n" - "subs x27, x27, #0x4\n" - "add %x[res_ptr], %x[res_ptr], #0x10\n" - "str q15, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q19, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q18, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q14, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q11, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q13, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q23, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q16, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q25, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q7, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q0, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q4, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q5, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q21, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q8, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q1, [x20, #0x0]\n" - "bne 2b\n" - "mov x20, #0x4\n" - "sub x10, x10, #0x10\n" - "cmp x10, #0x10\n" - "mov %x[res_ptr], x26\n" - "madd %x[a_ptr], x20, x9, %x[a_ptr]\n" - "bge 1b\n" - "4:" // Row loop skip - "cbz x10, 9f\n" - "5:" // Row tail: Row loop - "add x24, %x[b_ptr], #0x8\n" - "mov x23, %x[nc]\n" - "add x22, %x[res_ptr], %x[res_stride], LSL #2\n" - "6:" // Row tail: Column loop - "movi v15.16b, #0x0\n" - "movi v19.16b, #0x0\n" - "add x25, %x[a_ptr], #0x8\n" - "mov x21, %x[nb]\n" - "movi v18.16b, #0x0\n" - "movi v14.16b, #0x0\n" - "7:" // Row tail: Block loop - "ldr q7, [x24, #0x0]\n" - "ldr q5, [x25, #0x0]\n" - "movi v9.16b, #0x4\n" - "movi v4.4s, #0x0\n" - "ldr q3, [x24, #0x10]\n" - "ldr q2, [x25, #0x10]\n" - "movi v1.4s, #0x0\n" - "movi v0.4s, #0x0\n" - "ldr q13, [x24, #0x20]\n" - "ldr q31, [x25, #0x20]\n" - "movi v30.4s, #0x0\n" - "movi v29.16b, #0xf0\n" - "ldr q28, [x24, #0x30]\n" - "ldr q27, [x25, #0x30]\n" - "sshl v20.16b, v7.16b, v9.16b\n" - "sub x20, x24, #0x8\n" - "ldr q26, [x25, #0x40]\n" - "ldr q25, [x25, #0x50]\n" - "sshl v17.16b, v3.16b, v9.16b\n" - "and v7.16b, v7.16b, v29.16b\n" - "ldr q24, [x25, #0x60]\n" - "ldr q16, [x25, #0x70]\n" - "sshl v22.16b, v13.16b, v9.16b\n" - "and v3.16b, v3.16b, v29.16b\n" - "ldr d21, [x20, #0x0]\n" - "ldr d12, [x25, #-0x8]\n" - ".inst 0x4f85e284 // sdot v4.4s, v20.16b, v5.4b[0]\n" - ".inst 0x4fa5e281 // sdot v1.4s, v20.16b, v5.4b[1]\n" - ".inst 0x4f85ea80 // sdot v0.4s, v20.16b, v5.4b[2]\n" - ".inst 0x4fa5ea9e // sdot v30.4s, v20.16b, v5.4b[3]\n" - "sshl v9.16b, v28.16b, v9.16b\n" - "subs x21, x21, #0x1\n" - "and v13.16b, v13.16b, v29.16b\n" - "and v28.16b, v28.16b, v29.16b\n" - "add x25, x25, #0x88\n" - "add x24, x24, #0x48\n" - "fcvtl v21.4s, v21.4h\n" - "fcvtl v12.4s, v12.4h\n" - ".inst 0x4f82e224 // sdot v4.4s, v17.16b, v2.4b[0]\n" - ".inst 0x4fa2e221 // sdot v1.4s, v17.16b, v2.4b[1]\n" - ".inst 0x4f82ea20 // sdot v0.4s, v17.16b, v2.4b[2]\n" - ".inst 0x4fa2ea3e // sdot v30.4s, v17.16b, v2.4b[3]\n" - "fmul v11.4s, v21.4s, v12.s[0]\n" - "fmul v23.4s, v21.4s, v12.s[1]\n" - "fmul v17.4s, v21.4s, v12.s[2]\n" - ".inst 0x4f9fe2c4 // sdot v4.4s, v22.16b, v31.4b[0]\n" - "fmul v6.4s, v21.4s, v12.s[3]\n" - ".inst 0x4fbfe2c1 // sdot v1.4s, v22.16b, v31.4b[1]\n" - ".inst 0x4f9feac0 // sdot v0.4s, v22.16b, v31.4b[2]\n" - ".inst 0x4fbfeade // sdot v30.4s, v22.16b, v31.4b[3]\n" - ".inst 0x4f9be124 // sdot v4.4s, v9.16b, v27.4b[0]\n" - ".inst 0x4fbbe121 // sdot v1.4s, v9.16b, v27.4b[1]\n" - ".inst 0x4f9be920 // sdot v0.4s, v9.16b, v27.4b[2]\n" - ".inst 0x4fbbe93e // sdot v30.4s, v9.16b, v27.4b[3]\n" - ".inst 0x4f9ae0e4 // sdot v4.4s, v7.16b, v26.4b[0]\n" - ".inst 0x4fbae0e1 // sdot v1.4s, v7.16b, v26.4b[1]\n" - ".inst 0x4f9ae8e0 // sdot v0.4s, v7.16b, v26.4b[2]\n" - ".inst 0x4fbae8fe // sdot v30.4s, v7.16b, v26.4b[3]\n" - ".inst 0x4f99e064 // sdot v4.4s, v3.16b, v25.4b[0]\n" - ".inst 0x4fb9e061 // sdot v1.4s, v3.16b, v25.4b[1]\n" - ".inst 0x4f99e860 // sdot v0.4s, v3.16b, v25.4b[2]\n" - ".inst 0x4fb9e87e // sdot v30.4s, v3.16b, v25.4b[3]\n" - ".inst 0x4f98e1a4 // sdot v4.4s, v13.16b, v24.4b[0]\n" - ".inst 0x4fb8e1a1 // sdot v1.4s, v13.16b, v24.4b[1]\n" - ".inst 0x4f98e9a0 // sdot v0.4s, v13.16b, v24.4b[2]\n" - ".inst 0x4fb8e9be // sdot v30.4s, v13.16b, v24.4b[3]\n" - ".inst 0x4f90e384 // sdot v4.4s, v28.16b, v16.4b[0]\n" - ".inst 0x4fb0e381 // sdot v1.4s, v28.16b, v16.4b[1]\n" - ".inst 0x4f90eb80 // sdot v0.4s, v28.16b, v16.4b[2]\n" - ".inst 0x4fb0eb9e // sdot v30.4s, v28.16b, v16.4b[3]\n" - "scvtf v4.4s, v4.4s, #0x4\n" - "scvtf v1.4s, v1.4s, #0x4\n" - "scvtf v0.4s, v0.4s, #0x4\n" - "fmla v15.4s, v4.4s, v11.4s\n" - "scvtf v30.4s, v30.4s, #0x4\n" - "fmla v19.4s, v1.4s, v23.4s\n" - "fmla v18.4s, v0.4s, v17.4s\n" - "fmla v14.4s, v30.4s, v6.4s\n" - "bgt 7b\n" - "mov x20, %x[res_ptr]\n" - "cmp x10, #0x1\n" - "str q15, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "ble 8f\n" - "cmp x10, #0x2\n" - "str q19, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "ble 8f\n" - "cmp x10, #0x3\n" - "str q18, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "ble 8f\n" - "str q14, [x20, #0x0]\n" - "8:" // Row tail: Accumulator store skip - "subs x23, x23, #0x4\n" - "add %x[res_ptr], %x[res_ptr], #0x10\n" - "bne 6b\n" - "subs x10, x10, #0x4\n" - "add %x[a_ptr], %x[a_ptr], x9\n" - "mov %x[res_ptr], x22\n" - "bgt 5b\n" - "9:" // Row tail: Row loop skip - : [a_ptr] "+&r" (a_ptr), [res_ptr] "+&r" (res_ptr) - : [b_ptr] "r" (b_ptr), [nr] "r" (nr), [nb] "r" (nb), [res_stride] "r" (res_stride), [nc] "r" (nc) - : "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "x9", "x10", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28" - ); - return; - } +#if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) + const void * b_ptr = vx; + const void * a_ptr = vy; + float * res_ptr = s; + size_t res_stride = bs * sizeof(float); + + __asm__ __volatile__( + "mov x10, %x[nr]\n" + "mov x9, #0x88\n" + "cmp x10, #0x10\n" + "mul x9, %x[nb], x9\n" + "blt 4f\n" + "1:" // Row loop + "add x28, %x[b_ptr], #0x8\n" + "mov x27, %x[nc]\n" + "add x26, %x[res_ptr], %x[res_stride], LSL #4\n" + "2:" // Column loop + "add x25, %x[a_ptr], #0x8\n" + "movi v15.16b, #0x0\n" + "movi v19.16b, #0x0\n" + "mov x24, %x[nb]\n" + "add x23, x25, x9\n" + "movi v18.16b, #0x0\n" + "movi v14.16b, #0x0\n" + "add x22, x23, x9\n" + "movi v11.16b, #0x0\n" + "movi v13.16b, #0x0\n" + "add x21, x22, x9\n" + "movi v23.16b, #0x0\n" + "movi v16.16b, #0x0\n" + "movi v25.16b, #0x0\n" + "movi v7.16b, #0x0\n" + "movi v0.16b, #0x0\n" + "movi v4.16b, #0x0\n" + "movi v5.16b, #0x0\n" + "movi v21.16b, #0x0\n" + "movi v8.16b, #0x0\n" + "movi v1.16b, #0x0\n" + "3:" // Block loop + "ldr q3, [x28, #0x0]\n" + "ldr q31, [x25, #0x0]\n" + "movi v28.16b, #0x4\n" + "movi v10.4s, #0x0\n" + "ldr q22, [x28, #0x10]\n" + "ldr q6, [x25, #0x10]\n" + "movi v29.4s, #0x0\n" + "movi v9.4s, #0x0\n" + "ldr q27, [x28, #0x20]\n" + "ldr q30, [x28, #0x30]\n" + "movi v20.4s, #0x0\n" + "movi v24.16b, #0xf0\n" + "ldr d2, [x25, #-0x8]\n" + "ldr d26, [x23, #-0x8]\n" + "sshl v12.16b, v3.16b, v28.16b\n" + "sub x20, x28, #0x8\n" + "ldr d17, [x20, #0x0]\n" + "and v3.16b, v3.16b, v24.16b\n" + "subs x24, x24, #0x1\n" + "add x28, x28, #0x48\n" + ".inst 0x4f9fe18a // sdot v10.4s, v12.16b, v31.4b[0]\n" + ".inst 0x4fbfe19d // sdot v29.4s, v12.16b, v31.4b[1]\n" + ".inst 0x4f9fe989 // sdot v9.4s, v12.16b, v31.4b[2]\n" + ".inst 0x4fbfe994 // sdot v20.4s, v12.16b, v31.4b[3]\n" + "sshl v31.16b, v22.16b, v28.16b\n" + "and v22.16b, v22.16b, v24.16b\n" + "fcvtl v17.4s, v17.4h\n" + "fcvtl v2.4s, v2.4h\n" + "fcvtl v26.4s, v26.4h\n" + ".inst 0x4f86e3ea // sdot v10.4s, v31.16b, v6.4b[0]\n" + ".inst 0x4fa6e3fd // sdot v29.4s, v31.16b, v6.4b[1]\n" + ".inst 0x4f86ebe9 // sdot v9.4s, v31.16b, v6.4b[2]\n" + ".inst 0x4fa6ebf4 // sdot v20.4s, v31.16b, v6.4b[3]\n" + "sshl v6.16b, v27.16b, v28.16b\n" + "sshl v28.16b, v30.16b, v28.16b\n" + "and v27.16b, v27.16b, v24.16b\n" + "and v30.16b, v30.16b, v24.16b\n" + "ldr q24, [x25, #0x20]\n" + ".inst 0x4f98e0ca // sdot v10.4s, v6.16b, v24.4b[0]\n" + ".inst 0x4fb8e0dd // sdot v29.4s, v6.16b, v24.4b[1]\n" + ".inst 0x4f98e8c9 // sdot v9.4s, v6.16b, v24.4b[2]\n" + ".inst 0x4fb8e8d4 // sdot v20.4s, v6.16b, v24.4b[3]\n" + "ldr q24, [x25, #0x30]\n" + ".inst 0x4f98e38a // sdot v10.4s, v28.16b, v24.4b[0]\n" + ".inst 0x4fb8e39d // sdot v29.4s, v28.16b, v24.4b[1]\n" + ".inst 0x4f98eb89 // sdot v9.4s, v28.16b, v24.4b[2]\n" + ".inst 0x4fb8eb94 // sdot v20.4s, v28.16b, v24.4b[3]\n" + "ldr q24, [x25, #0x40]\n" + ".inst 0x4f98e06a // sdot v10.4s, v3.16b, v24.4b[0]\n" + ".inst 0x4fb8e07d // sdot v29.4s, v3.16b, v24.4b[1]\n" + ".inst 0x4f98e869 // sdot v9.4s, v3.16b, v24.4b[2]\n" + ".inst 0x4fb8e874 // sdot v20.4s, v3.16b, v24.4b[3]\n" + "ldr q24, [x25, #0x50]\n" + ".inst 0x4f98e2ca // sdot v10.4s, v22.16b, v24.4b[0]\n" + ".inst 0x4fb8e2dd // sdot v29.4s, v22.16b, v24.4b[1]\n" + ".inst 0x4f98eac9 // sdot v9.4s, v22.16b, v24.4b[2]\n" + ".inst 0x4fb8ead4 // sdot v20.4s, v22.16b, v24.4b[3]\n" + "ldr q24, [x25, #0x60]\n" + ".inst 0x4f98e36a // sdot v10.4s, v27.16b, v24.4b[0]\n" + ".inst 0x4fb8e37d // sdot v29.4s, v27.16b, v24.4b[1]\n" + ".inst 0x4f98eb69 // sdot v9.4s, v27.16b, v24.4b[2]\n" + ".inst 0x4fb8eb74 // sdot v20.4s, v27.16b, v24.4b[3]\n" + "ldr q24, [x25, #0x70]\n" + "add x25, x25, #0x88\n" + ".inst 0x4f98e3ca // sdot v10.4s, v30.16b, v24.4b[0]\n" + ".inst 0x4fb8e3dd // sdot v29.4s, v30.16b, v24.4b[1]\n" + ".inst 0x4f98ebc9 // sdot v9.4s, v30.16b, v24.4b[2]\n" + ".inst 0x4fb8ebd4 // sdot v20.4s, v30.16b, v24.4b[3]\n" + "fmul v24.4s, v17.4s, v2.s[0]\n" + "scvtf v10.4s, v10.4s, #0x4\n" + "scvtf v29.4s, v29.4s, #0x4\n" + "scvtf v9.4s, v9.4s, #0x4\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "fmla v15.4s, v10.4s, v24.4s\n" + "ldr q24, [x23, #0x0]\n" + "fmul v10.4s, v17.4s, v2.s[1]\n" + "fmla v19.4s, v29.4s, v10.4s\n" + "ldr q10, [x23, #0x10]\n" + "fmul v29.4s, v17.4s, v2.s[2]\n" + "fmul v2.4s, v17.4s, v2.s[3]\n" + "fmla v18.4s, v9.4s, v29.4s\n" + "movi v9.4s, #0x0\n" + "movi v29.4s, #0x0\n" + ".inst 0x4f98e189 // sdot v9.4s, v12.16b, v24.4b[0]\n" + ".inst 0x4fb8e19d // sdot v29.4s, v12.16b, v24.4b[1]\n" + "fmla v14.4s, v20.4s, v2.4s\n" + "movi v20.4s, #0x0\n" + "movi v2.4s, #0x0\n" + ".inst 0x4f98e994 // sdot v20.4s, v12.16b, v24.4b[2]\n" + ".inst 0x4fb8e982 // sdot v2.4s, v12.16b, v24.4b[3]\n" + "ldr q24, [x23, #0x20]\n" + ".inst 0x4f8ae3e9 // sdot v9.4s, v31.16b, v10.4b[0]\n" + ".inst 0x4faae3fd // sdot v29.4s, v31.16b, v10.4b[1]\n" + ".inst 0x4f8aebf4 // sdot v20.4s, v31.16b, v10.4b[2]\n" + ".inst 0x4faaebe2 // sdot v2.4s, v31.16b, v10.4b[3]\n" + "ldr q10, [x23, #0x30]\n" + ".inst 0x4f98e0c9 // sdot v9.4s, v6.16b, v24.4b[0]\n" + ".inst 0x4fb8e0dd // sdot v29.4s, v6.16b, v24.4b[1]\n" + ".inst 0x4f98e8d4 // sdot v20.4s, v6.16b, v24.4b[2]\n" + ".inst 0x4fb8e8c2 // sdot v2.4s, v6.16b, v24.4b[3]\n" + "ldr q24, [x23, #0x40]\n" + ".inst 0x4f8ae389 // sdot v9.4s, v28.16b, v10.4b[0]\n" + ".inst 0x4faae39d // sdot v29.4s, v28.16b, v10.4b[1]\n" + ".inst 0x4f8aeb94 // sdot v20.4s, v28.16b, v10.4b[2]\n" + ".inst 0x4faaeb82 // sdot v2.4s, v28.16b, v10.4b[3]\n" + "ldr q10, [x23, #0x50]\n" + ".inst 0x4f98e069 // sdot v9.4s, v3.16b, v24.4b[0]\n" + ".inst 0x4fb8e07d // sdot v29.4s, v3.16b, v24.4b[1]\n" + ".inst 0x4f98e874 // sdot v20.4s, v3.16b, v24.4b[2]\n" + ".inst 0x4fb8e862 // sdot v2.4s, v3.16b, v24.4b[3]\n" + "ldr q24, [x23, #0x60]\n" + ".inst 0x4f8ae2c9 // sdot v9.4s, v22.16b, v10.4b[0]\n" + ".inst 0x4faae2dd // sdot v29.4s, v22.16b, v10.4b[1]\n" + ".inst 0x4f8aead4 // sdot v20.4s, v22.16b, v10.4b[2]\n" + ".inst 0x4faaeac2 // sdot v2.4s, v22.16b, v10.4b[3]\n" + "ldr q10, [x23, #0x70]\n" + "add x23, x23, #0x88\n" + ".inst 0x4f98e369 // sdot v9.4s, v27.16b, v24.4b[0]\n" + ".inst 0x4fb8e37d // sdot v29.4s, v27.16b, v24.4b[1]\n" + ".inst 0x4f98eb74 // sdot v20.4s, v27.16b, v24.4b[2]\n" + ".inst 0x4fb8eb62 // sdot v2.4s, v27.16b, v24.4b[3]\n" + "ldr q24, [x22, #0x0]\n" + ".inst 0x4f8ae3c9 // sdot v9.4s, v30.16b, v10.4b[0]\n" + ".inst 0x4faae3dd // sdot v29.4s, v30.16b, v10.4b[1]\n" + ".inst 0x4f8aebd4 // sdot v20.4s, v30.16b, v10.4b[2]\n" + ".inst 0x4faaebc2 // sdot v2.4s, v30.16b, v10.4b[3]\n" + "fmul v10.4s, v17.4s, v26.s[0]\n" + "scvtf v9.4s, v9.4s, #0x4\n" + "scvtf v29.4s, v29.4s, #0x4\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "scvtf v2.4s, v2.4s, #0x4\n" + "fmla v11.4s, v9.4s, v10.4s\n" + "ldr q9, [x22, #0x10]\n" + "fmul v10.4s, v17.4s, v26.s[1]\n" + "fmla v13.4s, v29.4s, v10.4s\n" + "ldr d29, [x22, #-0x8]\n" + "fmul v10.4s, v17.4s, v26.s[2]\n" + "fmul v26.4s, v17.4s, v26.s[3]\n" + "fcvtl v29.4s, v29.4h\n" + "fmla v23.4s, v20.4s, v10.4s\n" + "movi v20.4s, #0x0\n" + "movi v10.4s, #0x0\n" + "fmla v16.4s, v2.4s, v26.4s\n" + "movi v26.4s, #0x0\n" + "movi v2.4s, #0x0\n" + ".inst 0x4f98e194 // sdot v20.4s, v12.16b, v24.4b[0]\n" + ".inst 0x4fb8e18a // sdot v10.4s, v12.16b, v24.4b[1]\n" + ".inst 0x4f98e99a // sdot v26.4s, v12.16b, v24.4b[2]\n" + ".inst 0x4fb8e982 // sdot v2.4s, v12.16b, v24.4b[3]\n" + "ldr q24, [x22, #0x20]\n" + ".inst 0x4f89e3f4 // sdot v20.4s, v31.16b, v9.4b[0]\n" + ".inst 0x4fa9e3ea // sdot v10.4s, v31.16b, v9.4b[1]\n" + ".inst 0x4f89ebfa // sdot v26.4s, v31.16b, v9.4b[2]\n" + ".inst 0x4fa9ebe2 // sdot v2.4s, v31.16b, v9.4b[3]\n" + "ldr q9, [x22, #0x30]\n" + ".inst 0x4f98e0d4 // sdot v20.4s, v6.16b, v24.4b[0]\n" + ".inst 0x4fb8e0ca // sdot v10.4s, v6.16b, v24.4b[1]\n" + ".inst 0x4f98e8da // sdot v26.4s, v6.16b, v24.4b[2]\n" + ".inst 0x4fb8e8c2 // sdot v2.4s, v6.16b, v24.4b[3]\n" + "ldr q24, [x22, #0x40]\n" + ".inst 0x4f89e394 // sdot v20.4s, v28.16b, v9.4b[0]\n" + ".inst 0x4fa9e38a // sdot v10.4s, v28.16b, v9.4b[1]\n" + ".inst 0x4f89eb9a // sdot v26.4s, v28.16b, v9.4b[2]\n" + ".inst 0x4fa9eb82 // sdot v2.4s, v28.16b, v9.4b[3]\n" + "ldr q9, [x22, #0x50]\n" + ".inst 0x4f98e074 // sdot v20.4s, v3.16b, v24.4b[0]\n" + ".inst 0x4fb8e06a // sdot v10.4s, v3.16b, v24.4b[1]\n" + ".inst 0x4f98e87a // sdot v26.4s, v3.16b, v24.4b[2]\n" + ".inst 0x4fb8e862 // sdot v2.4s, v3.16b, v24.4b[3]\n" + "ldr q24, [x22, #0x60]\n" + ".inst 0x4f89e2d4 // sdot v20.4s, v22.16b, v9.4b[0]\n" + ".inst 0x4fa9e2ca // sdot v10.4s, v22.16b, v9.4b[1]\n" + ".inst 0x4f89eada // sdot v26.4s, v22.16b, v9.4b[2]\n" + ".inst 0x4fa9eac2 // sdot v2.4s, v22.16b, v9.4b[3]\n" + "ldr q9, [x22, #0x70]\n" + "add x22, x22, #0x88\n" + ".inst 0x4f98e374 // sdot v20.4s, v27.16b, v24.4b[0]\n" + ".inst 0x4fb8e36a // sdot v10.4s, v27.16b, v24.4b[1]\n" + ".inst 0x4f98eb7a // sdot v26.4s, v27.16b, v24.4b[2]\n" + ".inst 0x4fb8eb62 // sdot v2.4s, v27.16b, v24.4b[3]\n" + "ldr q24, [x21, #0x0]\n" + ".inst 0x4f89e3d4 // sdot v20.4s, v30.16b, v9.4b[0]\n" + ".inst 0x4fa9e3ca // sdot v10.4s, v30.16b, v9.4b[1]\n" + ".inst 0x4f89ebda // sdot v26.4s, v30.16b, v9.4b[2]\n" + ".inst 0x4fa9ebc2 // sdot v2.4s, v30.16b, v9.4b[3]\n" + "fmul v9.4s, v17.4s, v29.s[0]\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "scvtf v10.4s, v10.4s, #0x4\n" + "scvtf v26.4s, v26.4s, #0x4\n" + "scvtf v2.4s, v2.4s, #0x4\n" + "fmla v25.4s, v20.4s, v9.4s\n" + "ldr q9, [x21, #0x10]\n" + "fmul v20.4s, v17.4s, v29.s[1]\n" + "fmla v7.4s, v10.4s, v20.4s\n" + "ldr d20, [x21, #-0x8]\n" + "fmul v10.4s, v17.4s, v29.s[2]\n" + "fmul v29.4s, v17.4s, v29.s[3]\n" + "fcvtl v20.4s, v20.4h\n" + "fmla v0.4s, v26.4s, v10.4s\n" + "movi v26.4s, #0x0\n" + "movi v10.4s, #0x0\n" + "fmla v4.4s, v2.4s, v29.4s\n" + "movi v2.4s, #0x0\n" + "movi v29.4s, #0x0\n" + ".inst 0x4f98e19a // sdot v26.4s, v12.16b, v24.4b[0]\n" + ".inst 0x4fb8e18a // sdot v10.4s, v12.16b, v24.4b[1]\n" + ".inst 0x4f98e982 // sdot v2.4s, v12.16b, v24.4b[2]\n" + ".inst 0x4fb8e99d // sdot v29.4s, v12.16b, v24.4b[3]\n" + "ldr q12, [x21, #0x20]\n" + "fmul v24.4s, v17.4s, v20.s[0]\n" + ".inst 0x4f89e3fa // sdot v26.4s, v31.16b, v9.4b[0]\n" + ".inst 0x4fa9e3ea // sdot v10.4s, v31.16b, v9.4b[1]\n" + ".inst 0x4f89ebe2 // sdot v2.4s, v31.16b, v9.4b[2]\n" + ".inst 0x4fa9ebfd // sdot v29.4s, v31.16b, v9.4b[3]\n" + "ldr q9, [x21, #0x30]\n" + "fmul v31.4s, v17.4s, v20.s[1]\n" + ".inst 0x4f8ce0da // sdot v26.4s, v6.16b, v12.4b[0]\n" + ".inst 0x4face0ca // sdot v10.4s, v6.16b, v12.4b[1]\n" + ".inst 0x4f8ce8c2 // sdot v2.4s, v6.16b, v12.4b[2]\n" + ".inst 0x4face8dd // sdot v29.4s, v6.16b, v12.4b[3]\n" + "ldr q12, [x21, #0x40]\n" + "fmul v6.4s, v17.4s, v20.s[2]\n" + "fmul v20.4s, v17.4s, v20.s[3]\n" + ".inst 0x4f89e39a // sdot v26.4s, v28.16b, v9.4b[0]\n" + ".inst 0x4fa9e38a // sdot v10.4s, v28.16b, v9.4b[1]\n" + ".inst 0x4f89eb82 // sdot v2.4s, v28.16b, v9.4b[2]\n" + ".inst 0x4fa9eb9d // sdot v29.4s, v28.16b, v9.4b[3]\n" + "ldr q9, [x21, #0x50]\n" + ".inst 0x4f8ce07a // sdot v26.4s, v3.16b, v12.4b[0]\n" + ".inst 0x4face06a // sdot v10.4s, v3.16b, v12.4b[1]\n" + ".inst 0x4f8ce862 // sdot v2.4s, v3.16b, v12.4b[2]\n" + ".inst 0x4face87d // sdot v29.4s, v3.16b, v12.4b[3]\n" + "ldr q12, [x21, #0x60]\n" + ".inst 0x4f89e2da // sdot v26.4s, v22.16b, v9.4b[0]\n" + ".inst 0x4fa9e2ca // sdot v10.4s, v22.16b, v9.4b[1]\n" + ".inst 0x4f89eac2 // sdot v2.4s, v22.16b, v9.4b[2]\n" + ".inst 0x4fa9eadd // sdot v29.4s, v22.16b, v9.4b[3]\n" + "ldr q17, [x21, #0x70]\n" + "add x21, x21, #0x88\n" + ".inst 0x4f8ce37a // sdot v26.4s, v27.16b, v12.4b[0]\n" + ".inst 0x4face36a // sdot v10.4s, v27.16b, v12.4b[1]\n" + ".inst 0x4f8ceb62 // sdot v2.4s, v27.16b, v12.4b[2]\n" + ".inst 0x4faceb7d // sdot v29.4s, v27.16b, v12.4b[3]\n" + ".inst 0x4f91e3da // sdot v26.4s, v30.16b, v17.4b[0]\n" + ".inst 0x4fb1e3ca // sdot v10.4s, v30.16b, v17.4b[1]\n" + ".inst 0x4f91ebc2 // sdot v2.4s, v30.16b, v17.4b[2]\n" + ".inst 0x4fb1ebdd // sdot v29.4s, v30.16b, v17.4b[3]\n" + "scvtf v26.4s, v26.4s, #0x4\n" + "scvtf v10.4s, v10.4s, #0x4\n" + "fmla v5.4s, v26.4s, v24.4s\n" + "scvtf v2.4s, v2.4s, #0x4\n" + "scvtf v29.4s, v29.4s, #0x4\n" + "fmla v21.4s, v10.4s, v31.4s\n" + "fmla v8.4s, v2.4s, v6.4s\n" + "fmla v1.4s, v29.4s, v20.4s\n" + "bgt 3b\n" + "mov x20, %x[res_ptr]\n" + "subs x27, x27, #0x4\n" + "add %x[res_ptr], %x[res_ptr], #0x10\n" + "str q15, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q19, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q18, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q14, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q11, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q13, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q23, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q16, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q25, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q7, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q0, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q4, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q5, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q21, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q8, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q1, [x20, #0x0]\n" + "bne 2b\n" + "mov x20, #0x4\n" + "sub x10, x10, #0x10\n" + "cmp x10, #0x10\n" + "mov %x[res_ptr], x26\n" + "madd %x[a_ptr], x20, x9, %x[a_ptr]\n" + "bge 1b\n" + "4:" // Row loop skip + "cbz x10, 9f\n" + "5:" // Row tail: Row loop + "add x24, %x[b_ptr], #0x8\n" + "mov x23, %x[nc]\n" + "add x22, %x[res_ptr], %x[res_stride], LSL #2\n" + "6:" // Row tail: Column loop + "movi v15.16b, #0x0\n" + "movi v19.16b, #0x0\n" + "add x25, %x[a_ptr], #0x8\n" + "mov x21, %x[nb]\n" + "movi v18.16b, #0x0\n" + "movi v14.16b, #0x0\n" + "7:" // Row tail: Block loop + "ldr q7, [x24, #0x0]\n" + "ldr q5, [x25, #0x0]\n" + "movi v9.16b, #0x4\n" + "movi v4.4s, #0x0\n" + "ldr q3, [x24, #0x10]\n" + "ldr q2, [x25, #0x10]\n" + "movi v1.4s, #0x0\n" + "movi v0.4s, #0x0\n" + "ldr q13, [x24, #0x20]\n" + "ldr q31, [x25, #0x20]\n" + "movi v30.4s, #0x0\n" + "movi v29.16b, #0xf0\n" + "ldr q28, [x24, #0x30]\n" + "ldr q27, [x25, #0x30]\n" + "sshl v20.16b, v7.16b, v9.16b\n" + "sub x20, x24, #0x8\n" + "ldr q26, [x25, #0x40]\n" + "ldr q25, [x25, #0x50]\n" + "sshl v17.16b, v3.16b, v9.16b\n" + "and v7.16b, v7.16b, v29.16b\n" + "ldr q24, [x25, #0x60]\n" + "ldr q16, [x25, #0x70]\n" + "sshl v22.16b, v13.16b, v9.16b\n" + "and v3.16b, v3.16b, v29.16b\n" + "ldr d21, [x20, #0x0]\n" + "ldr d12, [x25, #-0x8]\n" + ".inst 0x4f85e284 // sdot v4.4s, v20.16b, v5.4b[0]\n" + ".inst 0x4fa5e281 // sdot v1.4s, v20.16b, v5.4b[1]\n" + ".inst 0x4f85ea80 // sdot v0.4s, v20.16b, v5.4b[2]\n" + ".inst 0x4fa5ea9e // sdot v30.4s, v20.16b, v5.4b[3]\n" + "sshl v9.16b, v28.16b, v9.16b\n" + "subs x21, x21, #0x1\n" + "and v13.16b, v13.16b, v29.16b\n" + "and v28.16b, v28.16b, v29.16b\n" + "add x25, x25, #0x88\n" + "add x24, x24, #0x48\n" + "fcvtl v21.4s, v21.4h\n" + "fcvtl v12.4s, v12.4h\n" + ".inst 0x4f82e224 // sdot v4.4s, v17.16b, v2.4b[0]\n" + ".inst 0x4fa2e221 // sdot v1.4s, v17.16b, v2.4b[1]\n" + ".inst 0x4f82ea20 // sdot v0.4s, v17.16b, v2.4b[2]\n" + ".inst 0x4fa2ea3e // sdot v30.4s, v17.16b, v2.4b[3]\n" + "fmul v11.4s, v21.4s, v12.s[0]\n" + "fmul v23.4s, v21.4s, v12.s[1]\n" + "fmul v17.4s, v21.4s, v12.s[2]\n" + ".inst 0x4f9fe2c4 // sdot v4.4s, v22.16b, v31.4b[0]\n" + "fmul v6.4s, v21.4s, v12.s[3]\n" + ".inst 0x4fbfe2c1 // sdot v1.4s, v22.16b, v31.4b[1]\n" + ".inst 0x4f9feac0 // sdot v0.4s, v22.16b, v31.4b[2]\n" + ".inst 0x4fbfeade // sdot v30.4s, v22.16b, v31.4b[3]\n" + ".inst 0x4f9be124 // sdot v4.4s, v9.16b, v27.4b[0]\n" + ".inst 0x4fbbe121 // sdot v1.4s, v9.16b, v27.4b[1]\n" + ".inst 0x4f9be920 // sdot v0.4s, v9.16b, v27.4b[2]\n" + ".inst 0x4fbbe93e // sdot v30.4s, v9.16b, v27.4b[3]\n" + ".inst 0x4f9ae0e4 // sdot v4.4s, v7.16b, v26.4b[0]\n" + ".inst 0x4fbae0e1 // sdot v1.4s, v7.16b, v26.4b[1]\n" + ".inst 0x4f9ae8e0 // sdot v0.4s, v7.16b, v26.4b[2]\n" + ".inst 0x4fbae8fe // sdot v30.4s, v7.16b, v26.4b[3]\n" + ".inst 0x4f99e064 // sdot v4.4s, v3.16b, v25.4b[0]\n" + ".inst 0x4fb9e061 // sdot v1.4s, v3.16b, v25.4b[1]\n" + ".inst 0x4f99e860 // sdot v0.4s, v3.16b, v25.4b[2]\n" + ".inst 0x4fb9e87e // sdot v30.4s, v3.16b, v25.4b[3]\n" + ".inst 0x4f98e1a4 // sdot v4.4s, v13.16b, v24.4b[0]\n" + ".inst 0x4fb8e1a1 // sdot v1.4s, v13.16b, v24.4b[1]\n" + ".inst 0x4f98e9a0 // sdot v0.4s, v13.16b, v24.4b[2]\n" + ".inst 0x4fb8e9be // sdot v30.4s, v13.16b, v24.4b[3]\n" + ".inst 0x4f90e384 // sdot v4.4s, v28.16b, v16.4b[0]\n" + ".inst 0x4fb0e381 // sdot v1.4s, v28.16b, v16.4b[1]\n" + ".inst 0x4f90eb80 // sdot v0.4s, v28.16b, v16.4b[2]\n" + ".inst 0x4fb0eb9e // sdot v30.4s, v28.16b, v16.4b[3]\n" + "scvtf v4.4s, v4.4s, #0x4\n" + "scvtf v1.4s, v1.4s, #0x4\n" + "scvtf v0.4s, v0.4s, #0x4\n" + "fmla v15.4s, v4.4s, v11.4s\n" + "scvtf v30.4s, v30.4s, #0x4\n" + "fmla v19.4s, v1.4s, v23.4s\n" + "fmla v18.4s, v0.4s, v17.4s\n" + "fmla v14.4s, v30.4s, v6.4s\n" + "bgt 7b\n" + "mov x20, %x[res_ptr]\n" + "cmp x10, #0x1\n" + "str q15, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "ble 8f\n" + "cmp x10, #0x2\n" + "str q19, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "ble 8f\n" + "cmp x10, #0x3\n" + "str q18, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "ble 8f\n" + "str q14, [x20, #0x0]\n" + "8:" // Row tail: Accumulator store skip + "subs x23, x23, #0x4\n" + "add %x[res_ptr], %x[res_ptr], #0x10\n" + "bne 6b\n" + "subs x10, x10, #0x4\n" + "add %x[a_ptr], %x[a_ptr], x9\n" + "mov %x[res_ptr], x22\n" + "bgt 5b\n" + "9:" // Row tail: Row loop skip + : [a_ptr] "+&r" (a_ptr), [res_ptr] "+&r" (res_ptr) + : [b_ptr] "r" (b_ptr), [nr] "r" (nr), [nb] "r" (nb), [res_stride] "r" (res_stride), [nc] "r" (nc) + : "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "x9", "x10", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28" + ); + return; #endif // #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) { float sumf[4][4]; @@ -1160,404 +1152,402 @@ void ggml_gemm_q4_0_4x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo UNUSED(blocklen); #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_MATMUL_INT8) - if (ggml_cpu_has_neon() && ggml_cpu_has_matmul_int8()) { - const void * b_ptr = vx; - const void * a_ptr = vy; - float * res_ptr = s; - size_t res_stride = bs * sizeof(float); - - __asm__ __volatile__( - "mov x10, %x[nr]\n" - "mov x9, #0x88\n" - "cmp x10, #0x10\n" - "mul x9, %x[nb], x9\n" - "blt 4f\n" - "1:" // Row loop - "add x28, %x[b_ptr], #0x8\n" - "mov x27, %x[nc]\n" - "add x26, %x[res_ptr], %x[res_stride], LSL #4\n" - "2:" // Column loop - "add x25, %x[a_ptr], #0x8\n" - "movi v2.16b, #0x0\n" - "movi v10.16b, #0x0\n" - "mov x24, %x[nb]\n" - "add x23, x25, x9\n" - "movi v12.16b, #0x0\n" - "movi v28.16b, #0x0\n" - "add x22, x23, x9\n" - "movi v11.16b, #0x0\n" - "movi v13.16b, #0x0\n" - "add x21, x22, x9\n" - "movi v22.16b, #0x0\n" - "movi v23.16b, #0x0\n" - "movi v25.16b, #0x0\n" - "movi v5.16b, #0x0\n" - "movi v7.16b, #0x0\n" - "movi v4.16b, #0x0\n" - "movi v6.16b, #0x0\n" - "movi v30.16b, #0x0\n" - "movi v24.16b, #0x0\n" - "movi v14.16b, #0x0\n" - "3:" // Block loop - "ldr q21, [x28, #0x0]\n" - "ldr q16, [x28, #0x10]\n" - "movi v1.16b, #0x4\n" - "movi v19.4s, #0x0\n" - "ldr q27, [x25, #0x0]\n" - "ldr q15, [x25, #0x10]\n" - "movi v26.4s, #0x0\n" - "movi v18.4s, #0x0\n" - "ldr q29, [x28, #0x20]\n" - "ldr q3, [x28, #0x30]\n" - "movi v17.4s, #0x0\n" - "movi v0.16b, #0xf0\n" - "ldr d20, [x25, #-0x8]\n" - "ldr d9, [x23, #-0x8]\n" - "sshl v8.16b, v21.16b, v1.16b\n" - "sshl v31.16b, v16.16b, v1.16b\n" - "and v21.16b, v21.16b, v0.16b\n" - "and v16.16b, v16.16b, v0.16b\n" - "sub x20, x28, #0x8\n" - "subs x24, x24, #0x1\n" - "add x28, x28, #0x48\n" - ".inst 0x4e88a773 // smmla v19.4s, v27.16b, v8.16b\n" - ".inst 0x4e9fa77a // smmla v26.4s, v27.16b, v31.16b\n" - "ldr q27, [x25, #0x20]\n" - ".inst 0x4e88a5f2 // smmla v18.4s, v15.16b, v8.16b\n" - ".inst 0x4e9fa5f1 // smmla v17.4s, v15.16b, v31.16b\n" - "sshl v15.16b, v29.16b, v1.16b\n" - "sshl v1.16b, v3.16b, v1.16b\n" - "and v29.16b, v29.16b, v0.16b\n" - "and v3.16b, v3.16b, v0.16b\n" - "ldr q0, [x25, #0x30]\n" - "fcvtl v20.4s, v20.4h\n" - ".inst 0x4e8fa773 // smmla v19.4s, v27.16b, v15.16b\n" - "fcvtl v9.4s, v9.4h\n" - ".inst 0x4e81a77a // smmla v26.4s, v27.16b, v1.16b\n" - "ldr q27, [x25, #0x40]\n" - ".inst 0x4e8fa412 // smmla v18.4s, v0.16b, v15.16b\n" - ".inst 0x4e81a411 // smmla v17.4s, v0.16b, v1.16b\n" - "ldr q0, [x25, #0x50]\n" - ".inst 0x4e95a773 // smmla v19.4s, v27.16b, v21.16b\n" - ".inst 0x4e90a77a // smmla v26.4s, v27.16b, v16.16b\n" - "ldr q27, [x25, #0x60]\n" - ".inst 0x4e95a412 // smmla v18.4s, v0.16b, v21.16b\n" - ".inst 0x4e90a411 // smmla v17.4s, v0.16b, v16.16b\n" - "ldr q0, [x25, #0x70]\n" - "add x25, x25, #0x88\n" - ".inst 0x4e9da773 // smmla v19.4s, v27.16b, v29.16b\n" - ".inst 0x4e83a77a // smmla v26.4s, v27.16b, v3.16b\n" - "ldr d27, [x20, #0x0]\n" - ".inst 0x4e9da412 // smmla v18.4s, v0.16b, v29.16b\n" - ".inst 0x4e83a411 // smmla v17.4s, v0.16b, v3.16b\n" - "fcvtl v27.4s, v27.4h\n" - "uzp1 v0.2d, v19.2d, v26.2d\n" - "uzp2 v26.2d, v19.2d, v26.2d\n" - "fmul v19.4s, v27.4s, v20.s[0]\n" - "scvtf v0.4s, v0.4s, #0x4\n" - "scvtf v26.4s, v26.4s, #0x4\n" - "fmla v2.4s, v0.4s, v19.4s\n" - "ldr q19, [x23, #0x0]\n" - "uzp1 v0.2d, v18.2d, v17.2d\n" - "uzp2 v18.2d, v18.2d, v17.2d\n" - "fmul v17.4s, v27.4s, v20.s[1]\n" - "scvtf v0.4s, v0.4s, #0x4\n" - "scvtf v18.4s, v18.4s, #0x4\n" - "fmla v10.4s, v26.4s, v17.4s\n" - "ldr q17, [x23, #0x10]\n" - "fmul v26.4s, v27.4s, v20.s[2]\n" - "fmul v20.4s, v27.4s, v20.s[3]\n" - "fmla v12.4s, v0.4s, v26.4s\n" - "ldr d0, [x22, #-0x8]\n" - "ldr d26, [x21, #-0x8]\n" - "fcvtl v0.4s, v0.4h\n" - "fmla v28.4s, v18.4s, v20.4s\n" - "movi v20.4s, #0x0\n" - "movi v18.4s, #0x0\n" - ".inst 0x4e88a674 // smmla v20.4s, v19.16b, v8.16b\n" - ".inst 0x4e9fa672 // smmla v18.4s, v19.16b, v31.16b\n" - "ldr q19, [x23, #0x20]\n" - "fcvtl v26.4s, v26.4h\n" - ".inst 0x4e8fa674 // smmla v20.4s, v19.16b, v15.16b\n" - ".inst 0x4e81a672 // smmla v18.4s, v19.16b, v1.16b\n" - "ldr q19, [x23, #0x40]\n" - ".inst 0x4e95a674 // smmla v20.4s, v19.16b, v21.16b\n" - ".inst 0x4e90a672 // smmla v18.4s, v19.16b, v16.16b\n" - "ldr q19, [x23, #0x60]\n" - ".inst 0x4e9da674 // smmla v20.4s, v19.16b, v29.16b\n" - ".inst 0x4e83a672 // smmla v18.4s, v19.16b, v3.16b\n" - "uzp1 v19.2d, v20.2d, v18.2d\n" - "scvtf v19.4s, v19.4s, #0x4\n" - "uzp2 v20.2d, v20.2d, v18.2d\n" - "fmul v18.4s, v27.4s, v9.s[0]\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "fmla v11.4s, v19.4s, v18.4s\n" - "ldr q18, [x22, #0x0]\n" - "fmul v19.4s, v27.4s, v9.s[1]\n" - "fmla v13.4s, v20.4s, v19.4s\n" - "movi v19.4s, #0x0\n" - "movi v20.4s, #0x0\n" - ".inst 0x4e88a633 // smmla v19.4s, v17.16b, v8.16b\n" - ".inst 0x4e9fa634 // smmla v20.4s, v17.16b, v31.16b\n" - "ldr q17, [x23, #0x30]\n" - ".inst 0x4e8fa633 // smmla v19.4s, v17.16b, v15.16b\n" - ".inst 0x4e81a634 // smmla v20.4s, v17.16b, v1.16b\n" - "ldr q17, [x23, #0x50]\n" - ".inst 0x4e95a633 // smmla v19.4s, v17.16b, v21.16b\n" - ".inst 0x4e90a634 // smmla v20.4s, v17.16b, v16.16b\n" - "ldr q17, [x23, #0x70]\n" - "add x23, x23, #0x88\n" - ".inst 0x4e9da633 // smmla v19.4s, v17.16b, v29.16b\n" - ".inst 0x4e83a634 // smmla v20.4s, v17.16b, v3.16b\n" - "uzp1 v17.2d, v19.2d, v20.2d\n" - "scvtf v17.4s, v17.4s, #0x4\n" - "uzp2 v20.2d, v19.2d, v20.2d\n" - "fmul v19.4s, v27.4s, v9.s[2]\n" - "fmul v9.4s, v27.4s, v9.s[3]\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "fmla v22.4s, v17.4s, v19.4s\n" - "ldr q17, [x22, #0x10]\n" - "movi v19.4s, #0x0\n" - ".inst 0x4e88a653 // smmla v19.4s, v18.16b, v8.16b\n" - "fmla v23.4s, v20.4s, v9.4s\n" - "movi v20.4s, #0x0\n" - "movi v9.4s, #0x0\n" - ".inst 0x4e9fa654 // smmla v20.4s, v18.16b, v31.16b\n" - "ldr q18, [x22, #0x20]\n" - ".inst 0x4e88a629 // smmla v9.4s, v17.16b, v8.16b\n" - ".inst 0x4e8fa653 // smmla v19.4s, v18.16b, v15.16b\n" - ".inst 0x4e81a654 // smmla v20.4s, v18.16b, v1.16b\n" - "ldr q18, [x22, #0x40]\n" - ".inst 0x4e95a653 // smmla v19.4s, v18.16b, v21.16b\n" - ".inst 0x4e90a654 // smmla v20.4s, v18.16b, v16.16b\n" - "ldr q18, [x22, #0x60]\n" - ".inst 0x4e9da653 // smmla v19.4s, v18.16b, v29.16b\n" - ".inst 0x4e83a654 // smmla v20.4s, v18.16b, v3.16b\n" - "movi v18.4s, #0x0\n" - ".inst 0x4e9fa632 // smmla v18.4s, v17.16b, v31.16b\n" - "ldr q17, [x22, #0x30]\n" - ".inst 0x4e8fa629 // smmla v9.4s, v17.16b, v15.16b\n" - ".inst 0x4e81a632 // smmla v18.4s, v17.16b, v1.16b\n" - "ldr q17, [x22, #0x50]\n" - ".inst 0x4e95a629 // smmla v9.4s, v17.16b, v21.16b\n" - ".inst 0x4e90a632 // smmla v18.4s, v17.16b, v16.16b\n" - "ldr q17, [x22, #0x70]\n" - "add x22, x22, #0x88\n" - ".inst 0x4e9da629 // smmla v9.4s, v17.16b, v29.16b\n" - ".inst 0x4e83a632 // smmla v18.4s, v17.16b, v3.16b\n" - "uzp1 v17.2d, v19.2d, v20.2d\n" - "uzp2 v20.2d, v19.2d, v20.2d\n" - "fmul v19.4s, v27.4s, v0.s[0]\n" - "scvtf v17.4s, v17.4s, #0x4\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "fmla v25.4s, v17.4s, v19.4s\n" - "ldr q19, [x21, #0x0]\n" - "fmul v17.4s, v27.4s, v0.s[1]\n" - "fmla v5.4s, v20.4s, v17.4s\n" - "ldr q17, [x21, #0x10]\n" - "uzp1 v20.2d, v9.2d, v18.2d\n" - "uzp2 v9.2d, v9.2d, v18.2d\n" - "fmul v18.4s, v27.4s, v0.s[2]\n" - "fmul v0.4s, v27.4s, v0.s[3]\n" - "scvtf v20.4s, v20.4s, #0x4\n" - "scvtf v9.4s, v9.4s, #0x4\n" - "fmla v7.4s, v20.4s, v18.4s\n" - "movi v20.4s, #0x0\n" - "movi v18.4s, #0x0\n" - ".inst 0x4e88a674 // smmla v20.4s, v19.16b, v8.16b\n" - ".inst 0x4e9fa672 // smmla v18.4s, v19.16b, v31.16b\n" - "ldr q19, [x21, #0x20]\n" - "fmla v4.4s, v9.4s, v0.4s\n" - "movi v9.4s, #0x0\n" - "movi v0.4s, #0x0\n" - ".inst 0x4e88a629 // smmla v9.4s, v17.16b, v8.16b\n" - "fmul v8.4s, v27.4s, v26.s[0]\n" - ".inst 0x4e9fa620 // smmla v0.4s, v17.16b, v31.16b\n" - "ldr q17, [x21, #0x30]\n" - ".inst 0x4e8fa674 // smmla v20.4s, v19.16b, v15.16b\n" - "fmul v31.4s, v27.4s, v26.s[1]\n" - ".inst 0x4e81a672 // smmla v18.4s, v19.16b, v1.16b\n" - "ldr q19, [x21, #0x40]\n" - ".inst 0x4e8fa629 // smmla v9.4s, v17.16b, v15.16b\n" - "fmul v15.4s, v27.4s, v26.s[2]\n" - "fmul v27.4s, v27.4s, v26.s[3]\n" - ".inst 0x4e81a620 // smmla v0.4s, v17.16b, v1.16b\n" - "ldr q1, [x21, #0x50]\n" - ".inst 0x4e95a674 // smmla v20.4s, v19.16b, v21.16b\n" - ".inst 0x4e90a672 // smmla v18.4s, v19.16b, v16.16b\n" - "ldr q26, [x21, #0x60]\n" - ".inst 0x4e95a429 // smmla v9.4s, v1.16b, v21.16b\n" - ".inst 0x4e90a420 // smmla v0.4s, v1.16b, v16.16b\n" - "ldr q21, [x21, #0x70]\n" - "add x21, x21, #0x88\n" - ".inst 0x4e9da754 // smmla v20.4s, v26.16b, v29.16b\n" - ".inst 0x4e83a752 // smmla v18.4s, v26.16b, v3.16b\n" - ".inst 0x4e9da6a9 // smmla v9.4s, v21.16b, v29.16b\n" - ".inst 0x4e83a6a0 // smmla v0.4s, v21.16b, v3.16b\n" - "uzp1 v29.2d, v20.2d, v18.2d\n" - "uzp2 v21.2d, v20.2d, v18.2d\n" - "scvtf v29.4s, v29.4s, #0x4\n" - "uzp1 v18.2d, v9.2d, v0.2d\n" - "uzp2 v16.2d, v9.2d, v0.2d\n" - "scvtf v21.4s, v21.4s, #0x4\n" - "fmla v6.4s, v29.4s, v8.4s\n" - "scvtf v18.4s, v18.4s, #0x4\n" - "scvtf v16.4s, v16.4s, #0x4\n" - "fmla v30.4s, v21.4s, v31.4s\n" - "fmla v24.4s, v18.4s, v15.4s\n" - "fmla v14.4s, v16.4s, v27.4s\n" - "bgt 3b\n" - "mov x20, %x[res_ptr]\n" - "subs x27, x27, #0x4\n" - "add %x[res_ptr], %x[res_ptr], #0x10\n" - "str q2, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q10, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q12, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q28, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q11, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q13, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q22, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q23, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q25, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q5, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q7, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q4, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q6, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q30, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q24, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "str q14, [x20, #0x0]\n" - "bne 2b\n" - "mov x20, #0x4\n" - "sub x10, x10, #0x10\n" - "cmp x10, #0x10\n" - "mov %x[res_ptr], x26\n" - "madd %x[a_ptr], x20, x9, %x[a_ptr]\n" - "bge 1b\n" - "4:" // Row loop skip - "cbz x10, 9f\n" - "5:" // Row tail: Row loop - "add x24, %x[b_ptr], #0x8\n" - "mov x23, %x[nc]\n" - "add x22, %x[res_ptr], %x[res_stride], LSL #2\n" - "6:" // Row tail: Column loop - "movi v2.16b, #0x0\n" - "movi v10.16b, #0x0\n" - "add x25, %x[a_ptr], #0x8\n" - "mov x21, %x[nb]\n" - "movi v12.16b, #0x0\n" - "movi v28.16b, #0x0\n" - "7:" // Row tail: Block loop - "ldr q6, [x24, #0x0]\n" - "ldr q5, [x24, #0x10]\n" - "movi v17.16b, #0x4\n" - "movi v8.4s, #0x0\n" - "ldr q4, [x25, #0x0]\n" - "ldr q13, [x25, #0x10]\n" - "movi v27.4s, #0x0\n" - "movi v0.4s, #0x0\n" - "ldr q31, [x24, #0x20]\n" - "ldr q14, [x24, #0x30]\n" - "movi v29.4s, #0x0\n" - "movi v22.16b, #0xf0\n" - "ldr q11, [x25, #0x20]\n" - "ldr q23, [x25, #0x30]\n" - "sshl v21.16b, v6.16b, v17.16b\n" - "sshl v16.16b, v5.16b, v17.16b\n" - "ldr q20, [x25, #0x40]\n" - "ldr q26, [x25, #0x50]\n" - "and v6.16b, v6.16b, v22.16b\n" - "and v5.16b, v5.16b, v22.16b\n" - "ldr q25, [x25, #0x60]\n" - "ldr q3, [x25, #0x70]\n" - "sshl v19.16b, v31.16b, v17.16b\n" - "sshl v18.16b, v14.16b, v17.16b\n" - "ldr d17, [x25, #-0x8]\n" - ".inst 0x4e95a488 // smmla v8.4s, v4.16b, v21.16b\n" - ".inst 0x4e90a49b // smmla v27.4s, v4.16b, v16.16b\n" - "and v31.16b, v31.16b, v22.16b\n" - ".inst 0x4e95a5a0 // smmla v0.4s, v13.16b, v21.16b\n" - ".inst 0x4e90a5bd // smmla v29.4s, v13.16b, v16.16b\n" - "and v14.16b, v14.16b, v22.16b\n" - "sub x20, x24, #0x8\n" - "ldr d16, [x20, #0x0]\n" - "subs x21, x21, #0x1\n" - "add x25, x25, #0x88\n" - "fcvtl v17.4s, v17.4h\n" - "add x24, x24, #0x48\n" - ".inst 0x4e93a568 // smmla v8.4s, v11.16b, v19.16b\n" - ".inst 0x4e92a57b // smmla v27.4s, v11.16b, v18.16b\n" - ".inst 0x4e93a6e0 // smmla v0.4s, v23.16b, v19.16b\n" - ".inst 0x4e92a6fd // smmla v29.4s, v23.16b, v18.16b\n" - "fcvtl v16.4s, v16.4h\n" - ".inst 0x4e86a688 // smmla v8.4s, v20.16b, v6.16b\n" - ".inst 0x4e85a69b // smmla v27.4s, v20.16b, v5.16b\n" - "fmul v23.4s, v16.4s, v17.s[0]\n" - "fmul v21.4s, v16.4s, v17.s[1]\n" - "fmul v1.4s, v16.4s, v17.s[2]\n" - "fmul v20.4s, v16.4s, v17.s[3]\n" - ".inst 0x4e86a740 // smmla v0.4s, v26.16b, v6.16b\n" - ".inst 0x4e85a75d // smmla v29.4s, v26.16b, v5.16b\n" - ".inst 0x4e9fa728 // smmla v8.4s, v25.16b, v31.16b\n" - ".inst 0x4e8ea73b // smmla v27.4s, v25.16b, v14.16b\n" - ".inst 0x4e9fa460 // smmla v0.4s, v3.16b, v31.16b\n" - ".inst 0x4e8ea47d // smmla v29.4s, v3.16b, v14.16b\n" - "uzp1 v19.2d, v8.2d, v27.2d\n" - "uzp2 v18.2d, v8.2d, v27.2d\n" - "scvtf v19.4s, v19.4s, #0x4\n" - "uzp1 v17.2d, v0.2d, v29.2d\n" - "uzp2 v16.2d, v0.2d, v29.2d\n" - "scvtf v18.4s, v18.4s, #0x4\n" - "fmla v2.4s, v19.4s, v23.4s\n" - "scvtf v17.4s, v17.4s, #0x4\n" - "scvtf v16.4s, v16.4s, #0x4\n" - "fmla v10.4s, v18.4s, v21.4s\n" - "fmla v12.4s, v17.4s, v1.4s\n" - "fmla v28.4s, v16.4s, v20.4s\n" - "bgt 7b\n" - "mov x20, %x[res_ptr]\n" - "cmp x10, #0x1\n" - "str q2, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "ble 8f\n" - "cmp x10, #0x2\n" - "str q10, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "ble 8f\n" - "cmp x10, #0x3\n" - "str q12, [x20, #0x0]\n" - "add x20, x20, %x[res_stride]\n" - "ble 8f\n" - "str q28, [x20, #0x0]\n" - "8:" // Row tail: Accumulator store skip - "subs x23, x23, #0x4\n" - "add %x[res_ptr], %x[res_ptr], #0x10\n" - "bne 6b\n" - "subs x10, x10, #0x4\n" - "add %x[a_ptr], %x[a_ptr], x9\n" - "mov %x[res_ptr], x22\n" - "bgt 5b\n" - "9:" // Row tail: Row loop skip - : [a_ptr] "+&r" (a_ptr), [res_ptr] "+&r" (res_ptr) - : [b_ptr] "r" (b_ptr), [nr] "r" (nr), [nb] "r" (nb), [res_stride] "r" (res_stride), [nc] "r" (nc) - : "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "x9", "x10", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28" - ); - return; - } + const void * b_ptr = vx; + const void * a_ptr = vy; + float * res_ptr = s; + size_t res_stride = bs * sizeof(float); + + __asm__ __volatile__( + "mov x10, %x[nr]\n" + "mov x9, #0x88\n" + "cmp x10, #0x10\n" + "mul x9, %x[nb], x9\n" + "blt 4f\n" + "1:" // Row loop + "add x28, %x[b_ptr], #0x8\n" + "mov x27, %x[nc]\n" + "add x26, %x[res_ptr], %x[res_stride], LSL #4\n" + "2:" // Column loop + "add x25, %x[a_ptr], #0x8\n" + "movi v2.16b, #0x0\n" + "movi v10.16b, #0x0\n" + "mov x24, %x[nb]\n" + "add x23, x25, x9\n" + "movi v12.16b, #0x0\n" + "movi v28.16b, #0x0\n" + "add x22, x23, x9\n" + "movi v11.16b, #0x0\n" + "movi v13.16b, #0x0\n" + "add x21, x22, x9\n" + "movi v22.16b, #0x0\n" + "movi v23.16b, #0x0\n" + "movi v25.16b, #0x0\n" + "movi v5.16b, #0x0\n" + "movi v7.16b, #0x0\n" + "movi v4.16b, #0x0\n" + "movi v6.16b, #0x0\n" + "movi v30.16b, #0x0\n" + "movi v24.16b, #0x0\n" + "movi v14.16b, #0x0\n" + "3:" // Block loop + "ldr q21, [x28, #0x0]\n" + "ldr q16, [x28, #0x10]\n" + "movi v1.16b, #0x4\n" + "movi v19.4s, #0x0\n" + "ldr q27, [x25, #0x0]\n" + "ldr q15, [x25, #0x10]\n" + "movi v26.4s, #0x0\n" + "movi v18.4s, #0x0\n" + "ldr q29, [x28, #0x20]\n" + "ldr q3, [x28, #0x30]\n" + "movi v17.4s, #0x0\n" + "movi v0.16b, #0xf0\n" + "ldr d20, [x25, #-0x8]\n" + "ldr d9, [x23, #-0x8]\n" + "sshl v8.16b, v21.16b, v1.16b\n" + "sshl v31.16b, v16.16b, v1.16b\n" + "and v21.16b, v21.16b, v0.16b\n" + "and v16.16b, v16.16b, v0.16b\n" + "sub x20, x28, #0x8\n" + "subs x24, x24, #0x1\n" + "add x28, x28, #0x48\n" + ".inst 0x4e88a773 // smmla v19.4s, v27.16b, v8.16b\n" + ".inst 0x4e9fa77a // smmla v26.4s, v27.16b, v31.16b\n" + "ldr q27, [x25, #0x20]\n" + ".inst 0x4e88a5f2 // smmla v18.4s, v15.16b, v8.16b\n" + ".inst 0x4e9fa5f1 // smmla v17.4s, v15.16b, v31.16b\n" + "sshl v15.16b, v29.16b, v1.16b\n" + "sshl v1.16b, v3.16b, v1.16b\n" + "and v29.16b, v29.16b, v0.16b\n" + "and v3.16b, v3.16b, v0.16b\n" + "ldr q0, [x25, #0x30]\n" + "fcvtl v20.4s, v20.4h\n" + ".inst 0x4e8fa773 // smmla v19.4s, v27.16b, v15.16b\n" + "fcvtl v9.4s, v9.4h\n" + ".inst 0x4e81a77a // smmla v26.4s, v27.16b, v1.16b\n" + "ldr q27, [x25, #0x40]\n" + ".inst 0x4e8fa412 // smmla v18.4s, v0.16b, v15.16b\n" + ".inst 0x4e81a411 // smmla v17.4s, v0.16b, v1.16b\n" + "ldr q0, [x25, #0x50]\n" + ".inst 0x4e95a773 // smmla v19.4s, v27.16b, v21.16b\n" + ".inst 0x4e90a77a // smmla v26.4s, v27.16b, v16.16b\n" + "ldr q27, [x25, #0x60]\n" + ".inst 0x4e95a412 // smmla v18.4s, v0.16b, v21.16b\n" + ".inst 0x4e90a411 // smmla v17.4s, v0.16b, v16.16b\n" + "ldr q0, [x25, #0x70]\n" + "add x25, x25, #0x88\n" + ".inst 0x4e9da773 // smmla v19.4s, v27.16b, v29.16b\n" + ".inst 0x4e83a77a // smmla v26.4s, v27.16b, v3.16b\n" + "ldr d27, [x20, #0x0]\n" + ".inst 0x4e9da412 // smmla v18.4s, v0.16b, v29.16b\n" + ".inst 0x4e83a411 // smmla v17.4s, v0.16b, v3.16b\n" + "fcvtl v27.4s, v27.4h\n" + "uzp1 v0.2d, v19.2d, v26.2d\n" + "uzp2 v26.2d, v19.2d, v26.2d\n" + "fmul v19.4s, v27.4s, v20.s[0]\n" + "scvtf v0.4s, v0.4s, #0x4\n" + "scvtf v26.4s, v26.4s, #0x4\n" + "fmla v2.4s, v0.4s, v19.4s\n" + "ldr q19, [x23, #0x0]\n" + "uzp1 v0.2d, v18.2d, v17.2d\n" + "uzp2 v18.2d, v18.2d, v17.2d\n" + "fmul v17.4s, v27.4s, v20.s[1]\n" + "scvtf v0.4s, v0.4s, #0x4\n" + "scvtf v18.4s, v18.4s, #0x4\n" + "fmla v10.4s, v26.4s, v17.4s\n" + "ldr q17, [x23, #0x10]\n" + "fmul v26.4s, v27.4s, v20.s[2]\n" + "fmul v20.4s, v27.4s, v20.s[3]\n" + "fmla v12.4s, v0.4s, v26.4s\n" + "ldr d0, [x22, #-0x8]\n" + "ldr d26, [x21, #-0x8]\n" + "fcvtl v0.4s, v0.4h\n" + "fmla v28.4s, v18.4s, v20.4s\n" + "movi v20.4s, #0x0\n" + "movi v18.4s, #0x0\n" + ".inst 0x4e88a674 // smmla v20.4s, v19.16b, v8.16b\n" + ".inst 0x4e9fa672 // smmla v18.4s, v19.16b, v31.16b\n" + "ldr q19, [x23, #0x20]\n" + "fcvtl v26.4s, v26.4h\n" + ".inst 0x4e8fa674 // smmla v20.4s, v19.16b, v15.16b\n" + ".inst 0x4e81a672 // smmla v18.4s, v19.16b, v1.16b\n" + "ldr q19, [x23, #0x40]\n" + ".inst 0x4e95a674 // smmla v20.4s, v19.16b, v21.16b\n" + ".inst 0x4e90a672 // smmla v18.4s, v19.16b, v16.16b\n" + "ldr q19, [x23, #0x60]\n" + ".inst 0x4e9da674 // smmla v20.4s, v19.16b, v29.16b\n" + ".inst 0x4e83a672 // smmla v18.4s, v19.16b, v3.16b\n" + "uzp1 v19.2d, v20.2d, v18.2d\n" + "scvtf v19.4s, v19.4s, #0x4\n" + "uzp2 v20.2d, v20.2d, v18.2d\n" + "fmul v18.4s, v27.4s, v9.s[0]\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "fmla v11.4s, v19.4s, v18.4s\n" + "ldr q18, [x22, #0x0]\n" + "fmul v19.4s, v27.4s, v9.s[1]\n" + "fmla v13.4s, v20.4s, v19.4s\n" + "movi v19.4s, #0x0\n" + "movi v20.4s, #0x0\n" + ".inst 0x4e88a633 // smmla v19.4s, v17.16b, v8.16b\n" + ".inst 0x4e9fa634 // smmla v20.4s, v17.16b, v31.16b\n" + "ldr q17, [x23, #0x30]\n" + ".inst 0x4e8fa633 // smmla v19.4s, v17.16b, v15.16b\n" + ".inst 0x4e81a634 // smmla v20.4s, v17.16b, v1.16b\n" + "ldr q17, [x23, #0x50]\n" + ".inst 0x4e95a633 // smmla v19.4s, v17.16b, v21.16b\n" + ".inst 0x4e90a634 // smmla v20.4s, v17.16b, v16.16b\n" + "ldr q17, [x23, #0x70]\n" + "add x23, x23, #0x88\n" + ".inst 0x4e9da633 // smmla v19.4s, v17.16b, v29.16b\n" + ".inst 0x4e83a634 // smmla v20.4s, v17.16b, v3.16b\n" + "uzp1 v17.2d, v19.2d, v20.2d\n" + "scvtf v17.4s, v17.4s, #0x4\n" + "uzp2 v20.2d, v19.2d, v20.2d\n" + "fmul v19.4s, v27.4s, v9.s[2]\n" + "fmul v9.4s, v27.4s, v9.s[3]\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "fmla v22.4s, v17.4s, v19.4s\n" + "ldr q17, [x22, #0x10]\n" + "movi v19.4s, #0x0\n" + ".inst 0x4e88a653 // smmla v19.4s, v18.16b, v8.16b\n" + "fmla v23.4s, v20.4s, v9.4s\n" + "movi v20.4s, #0x0\n" + "movi v9.4s, #0x0\n" + ".inst 0x4e9fa654 // smmla v20.4s, v18.16b, v31.16b\n" + "ldr q18, [x22, #0x20]\n" + ".inst 0x4e88a629 // smmla v9.4s, v17.16b, v8.16b\n" + ".inst 0x4e8fa653 // smmla v19.4s, v18.16b, v15.16b\n" + ".inst 0x4e81a654 // smmla v20.4s, v18.16b, v1.16b\n" + "ldr q18, [x22, #0x40]\n" + ".inst 0x4e95a653 // smmla v19.4s, v18.16b, v21.16b\n" + ".inst 0x4e90a654 // smmla v20.4s, v18.16b, v16.16b\n" + "ldr q18, [x22, #0x60]\n" + ".inst 0x4e9da653 // smmla v19.4s, v18.16b, v29.16b\n" + ".inst 0x4e83a654 // smmla v20.4s, v18.16b, v3.16b\n" + "movi v18.4s, #0x0\n" + ".inst 0x4e9fa632 // smmla v18.4s, v17.16b, v31.16b\n" + "ldr q17, [x22, #0x30]\n" + ".inst 0x4e8fa629 // smmla v9.4s, v17.16b, v15.16b\n" + ".inst 0x4e81a632 // smmla v18.4s, v17.16b, v1.16b\n" + "ldr q17, [x22, #0x50]\n" + ".inst 0x4e95a629 // smmla v9.4s, v17.16b, v21.16b\n" + ".inst 0x4e90a632 // smmla v18.4s, v17.16b, v16.16b\n" + "ldr q17, [x22, #0x70]\n" + "add x22, x22, #0x88\n" + ".inst 0x4e9da629 // smmla v9.4s, v17.16b, v29.16b\n" + ".inst 0x4e83a632 // smmla v18.4s, v17.16b, v3.16b\n" + "uzp1 v17.2d, v19.2d, v20.2d\n" + "uzp2 v20.2d, v19.2d, v20.2d\n" + "fmul v19.4s, v27.4s, v0.s[0]\n" + "scvtf v17.4s, v17.4s, #0x4\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "fmla v25.4s, v17.4s, v19.4s\n" + "ldr q19, [x21, #0x0]\n" + "fmul v17.4s, v27.4s, v0.s[1]\n" + "fmla v5.4s, v20.4s, v17.4s\n" + "ldr q17, [x21, #0x10]\n" + "uzp1 v20.2d, v9.2d, v18.2d\n" + "uzp2 v9.2d, v9.2d, v18.2d\n" + "fmul v18.4s, v27.4s, v0.s[2]\n" + "fmul v0.4s, v27.4s, v0.s[3]\n" + "scvtf v20.4s, v20.4s, #0x4\n" + "scvtf v9.4s, v9.4s, #0x4\n" + "fmla v7.4s, v20.4s, v18.4s\n" + "movi v20.4s, #0x0\n" + "movi v18.4s, #0x0\n" + ".inst 0x4e88a674 // smmla v20.4s, v19.16b, v8.16b\n" + ".inst 0x4e9fa672 // smmla v18.4s, v19.16b, v31.16b\n" + "ldr q19, [x21, #0x20]\n" + "fmla v4.4s, v9.4s, v0.4s\n" + "movi v9.4s, #0x0\n" + "movi v0.4s, #0x0\n" + ".inst 0x4e88a629 // smmla v9.4s, v17.16b, v8.16b\n" + "fmul v8.4s, v27.4s, v26.s[0]\n" + ".inst 0x4e9fa620 // smmla v0.4s, v17.16b, v31.16b\n" + "ldr q17, [x21, #0x30]\n" + ".inst 0x4e8fa674 // smmla v20.4s, v19.16b, v15.16b\n" + "fmul v31.4s, v27.4s, v26.s[1]\n" + ".inst 0x4e81a672 // smmla v18.4s, v19.16b, v1.16b\n" + "ldr q19, [x21, #0x40]\n" + ".inst 0x4e8fa629 // smmla v9.4s, v17.16b, v15.16b\n" + "fmul v15.4s, v27.4s, v26.s[2]\n" + "fmul v27.4s, v27.4s, v26.s[3]\n" + ".inst 0x4e81a620 // smmla v0.4s, v17.16b, v1.16b\n" + "ldr q1, [x21, #0x50]\n" + ".inst 0x4e95a674 // smmla v20.4s, v19.16b, v21.16b\n" + ".inst 0x4e90a672 // smmla v18.4s, v19.16b, v16.16b\n" + "ldr q26, [x21, #0x60]\n" + ".inst 0x4e95a429 // smmla v9.4s, v1.16b, v21.16b\n" + ".inst 0x4e90a420 // smmla v0.4s, v1.16b, v16.16b\n" + "ldr q21, [x21, #0x70]\n" + "add x21, x21, #0x88\n" + ".inst 0x4e9da754 // smmla v20.4s, v26.16b, v29.16b\n" + ".inst 0x4e83a752 // smmla v18.4s, v26.16b, v3.16b\n" + ".inst 0x4e9da6a9 // smmla v9.4s, v21.16b, v29.16b\n" + ".inst 0x4e83a6a0 // smmla v0.4s, v21.16b, v3.16b\n" + "uzp1 v29.2d, v20.2d, v18.2d\n" + "uzp2 v21.2d, v20.2d, v18.2d\n" + "scvtf v29.4s, v29.4s, #0x4\n" + "uzp1 v18.2d, v9.2d, v0.2d\n" + "uzp2 v16.2d, v9.2d, v0.2d\n" + "scvtf v21.4s, v21.4s, #0x4\n" + "fmla v6.4s, v29.4s, v8.4s\n" + "scvtf v18.4s, v18.4s, #0x4\n" + "scvtf v16.4s, v16.4s, #0x4\n" + "fmla v30.4s, v21.4s, v31.4s\n" + "fmla v24.4s, v18.4s, v15.4s\n" + "fmla v14.4s, v16.4s, v27.4s\n" + "bgt 3b\n" + "mov x20, %x[res_ptr]\n" + "subs x27, x27, #0x4\n" + "add %x[res_ptr], %x[res_ptr], #0x10\n" + "str q2, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q10, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q12, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q28, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q11, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q13, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q22, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q23, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q25, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q5, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q7, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q4, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q6, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q30, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q24, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "str q14, [x20, #0x0]\n" + "bne 2b\n" + "mov x20, #0x4\n" + "sub x10, x10, #0x10\n" + "cmp x10, #0x10\n" + "mov %x[res_ptr], x26\n" + "madd %x[a_ptr], x20, x9, %x[a_ptr]\n" + "bge 1b\n" + "4:" // Row loop skip + "cbz x10, 9f\n" + "5:" // Row tail: Row loop + "add x24, %x[b_ptr], #0x8\n" + "mov x23, %x[nc]\n" + "add x22, %x[res_ptr], %x[res_stride], LSL #2\n" + "6:" // Row tail: Column loop + "movi v2.16b, #0x0\n" + "movi v10.16b, #0x0\n" + "add x25, %x[a_ptr], #0x8\n" + "mov x21, %x[nb]\n" + "movi v12.16b, #0x0\n" + "movi v28.16b, #0x0\n" + "7:" // Row tail: Block loop + "ldr q6, [x24, #0x0]\n" + "ldr q5, [x24, #0x10]\n" + "movi v17.16b, #0x4\n" + "movi v8.4s, #0x0\n" + "ldr q4, [x25, #0x0]\n" + "ldr q13, [x25, #0x10]\n" + "movi v27.4s, #0x0\n" + "movi v0.4s, #0x0\n" + "ldr q31, [x24, #0x20]\n" + "ldr q14, [x24, #0x30]\n" + "movi v29.4s, #0x0\n" + "movi v22.16b, #0xf0\n" + "ldr q11, [x25, #0x20]\n" + "ldr q23, [x25, #0x30]\n" + "sshl v21.16b, v6.16b, v17.16b\n" + "sshl v16.16b, v5.16b, v17.16b\n" + "ldr q20, [x25, #0x40]\n" + "ldr q26, [x25, #0x50]\n" + "and v6.16b, v6.16b, v22.16b\n" + "and v5.16b, v5.16b, v22.16b\n" + "ldr q25, [x25, #0x60]\n" + "ldr q3, [x25, #0x70]\n" + "sshl v19.16b, v31.16b, v17.16b\n" + "sshl v18.16b, v14.16b, v17.16b\n" + "ldr d17, [x25, #-0x8]\n" + ".inst 0x4e95a488 // smmla v8.4s, v4.16b, v21.16b\n" + ".inst 0x4e90a49b // smmla v27.4s, v4.16b, v16.16b\n" + "and v31.16b, v31.16b, v22.16b\n" + ".inst 0x4e95a5a0 // smmla v0.4s, v13.16b, v21.16b\n" + ".inst 0x4e90a5bd // smmla v29.4s, v13.16b, v16.16b\n" + "and v14.16b, v14.16b, v22.16b\n" + "sub x20, x24, #0x8\n" + "ldr d16, [x20, #0x0]\n" + "subs x21, x21, #0x1\n" + "add x25, x25, #0x88\n" + "fcvtl v17.4s, v17.4h\n" + "add x24, x24, #0x48\n" + ".inst 0x4e93a568 // smmla v8.4s, v11.16b, v19.16b\n" + ".inst 0x4e92a57b // smmla v27.4s, v11.16b, v18.16b\n" + ".inst 0x4e93a6e0 // smmla v0.4s, v23.16b, v19.16b\n" + ".inst 0x4e92a6fd // smmla v29.4s, v23.16b, v18.16b\n" + "fcvtl v16.4s, v16.4h\n" + ".inst 0x4e86a688 // smmla v8.4s, v20.16b, v6.16b\n" + ".inst 0x4e85a69b // smmla v27.4s, v20.16b, v5.16b\n" + "fmul v23.4s, v16.4s, v17.s[0]\n" + "fmul v21.4s, v16.4s, v17.s[1]\n" + "fmul v1.4s, v16.4s, v17.s[2]\n" + "fmul v20.4s, v16.4s, v17.s[3]\n" + ".inst 0x4e86a740 // smmla v0.4s, v26.16b, v6.16b\n" + ".inst 0x4e85a75d // smmla v29.4s, v26.16b, v5.16b\n" + ".inst 0x4e9fa728 // smmla v8.4s, v25.16b, v31.16b\n" + ".inst 0x4e8ea73b // smmla v27.4s, v25.16b, v14.16b\n" + ".inst 0x4e9fa460 // smmla v0.4s, v3.16b, v31.16b\n" + ".inst 0x4e8ea47d // smmla v29.4s, v3.16b, v14.16b\n" + "uzp1 v19.2d, v8.2d, v27.2d\n" + "uzp2 v18.2d, v8.2d, v27.2d\n" + "scvtf v19.4s, v19.4s, #0x4\n" + "uzp1 v17.2d, v0.2d, v29.2d\n" + "uzp2 v16.2d, v0.2d, v29.2d\n" + "scvtf v18.4s, v18.4s, #0x4\n" + "fmla v2.4s, v19.4s, v23.4s\n" + "scvtf v17.4s, v17.4s, #0x4\n" + "scvtf v16.4s, v16.4s, #0x4\n" + "fmla v10.4s, v18.4s, v21.4s\n" + "fmla v12.4s, v17.4s, v1.4s\n" + "fmla v28.4s, v16.4s, v20.4s\n" + "bgt 7b\n" + "mov x20, %x[res_ptr]\n" + "cmp x10, #0x1\n" + "str q2, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "ble 8f\n" + "cmp x10, #0x2\n" + "str q10, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "ble 8f\n" + "cmp x10, #0x3\n" + "str q12, [x20, #0x0]\n" + "add x20, x20, %x[res_stride]\n" + "ble 8f\n" + "str q28, [x20, #0x0]\n" + "8:" // Row tail: Accumulator store skip + "subs x23, x23, #0x4\n" + "add %x[res_ptr], %x[res_ptr], #0x10\n" + "bne 6b\n" + "subs x10, x10, #0x4\n" + "add %x[a_ptr], %x[a_ptr], x9\n" + "mov %x[res_ptr], x22\n" + "bgt 5b\n" + "9:" // Row tail: Row loop skip + : [a_ptr] "+&r" (a_ptr), [res_ptr] "+&r" (res_ptr) + : [b_ptr] "r" (b_ptr), [nr] "r" (nr), [nb] "r" (nb), [res_stride] "r" (res_stride), [nc] "r" (nc) + : "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "x9", "x10", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28" + ); + return; #endif // #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_MATMUL_INT8) float sumf[4][4]; int sumi; @@ -1615,7 +1605,7 @@ void ggml_gemm_q4_0_8x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) #if defined(__ARM_FEATURE_SVE) && defined(__ARM_FEATURE_MATMUL_INT8) - if (ggml_cpu_has_sve() && ggml_cpu_has_matmul_int8() && ggml_cpu_get_sve_cnt() == QK8_0) { + if (ggml_cpu_get_sve_cnt() == QK8_0) { const void * b_ptr = vx; const void * a_ptr = vy; float * res_ptr = s; @@ -2083,59 +2073,57 @@ void ggml_gemm_iq4_nl_4x4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const UNUSED(blocklen); #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_DOTPROD) - if (ggml_cpu_has_neon() && ggml_cpu_has_dotprod()) { - const int8x16_t kvalues = vld1q_s8(kvalues_iq4nl); + const int8x16_t kvalues = vld1q_s8(kvalues_iq4nl); - for (int y = 0; y < nr / 4; y++) { - const block_q8_0x4 * a_ptr = (const block_q8_0x4 *) vy + (y * nb); - for (int x = 0; x < nc / ncols_interleaved; x++) { - const block_iq4_nlx4 * b_ptr = (const block_iq4_nlx4 *) vx + (x * nb); + for (int y = 0; y < nr / 4; y++) { + const block_q8_0x4 * a_ptr = (const block_q8_0x4 *) vy + (y * nb); + for (int x = 0; x < nc / ncols_interleaved; x++) { + const block_iq4_nlx4 * b_ptr = (const block_iq4_nlx4 *) vx + (x * nb); - float32x4_t sumf[4]; - for (int m = 0; m < 4; m++) { - sumf[m] = vdupq_n_f32(0); - } + float32x4_t sumf[4]; + for (int m = 0; m < 4; m++) { + sumf[m] = vdupq_n_f32(0); + } - for (int l = 0; l < nb; l++) { - float32x4_t a_d = vcvt_f32_f16(vld1_f16((const float16_t *)a_ptr[l].d)); - float32x4_t b_d = vcvt_f32_f16(vld1_f16((const float16_t *)b_ptr[l].d)); - - int32x4_t sumi_0 = vdupq_n_s32(0); - int32x4_t sumi_1 = vdupq_n_s32(0); - int32x4_t sumi_2 = vdupq_n_s32(0); - int32x4_t sumi_3 = vdupq_n_s32(0); - - for (int k = 0; k < 4; k++) { - int8x16_t a_0 = vld1q_s8(a_ptr[l].qs + 16 * k + 0); - int8x16_t a_1 = vld1q_s8(a_ptr[l].qs + 16 * k + 64); - - uint8x16_t b = vld1q_u8(b_ptr[l].qs + 16 * k); - int8x16_t b_hi = vqtbl1q_s8(kvalues, b >> 4); - int8x16_t b_lo = vqtbl1q_s8(kvalues, b & 0xF); - - sumi_0 = vdotq_laneq_s32(sumi_0, b_lo, a_0, 0); - sumi_1 = vdotq_laneq_s32(sumi_1, b_lo, a_0, 1); - sumi_2 = vdotq_laneq_s32(sumi_2, b_lo, a_0, 2); - sumi_3 = vdotq_laneq_s32(sumi_3, b_lo, a_0, 3); - sumi_0 = vdotq_laneq_s32(sumi_0, b_hi, a_1, 0); - sumi_1 = vdotq_laneq_s32(sumi_1, b_hi, a_1, 1); - sumi_2 = vdotq_laneq_s32(sumi_2, b_hi, a_1, 2); - sumi_3 = vdotq_laneq_s32(sumi_3, b_hi, a_1, 3); - } + for (int l = 0; l < nb; l++) { + float32x4_t a_d = vcvt_f32_f16(vld1_f16((const float16_t *)a_ptr[l].d)); + float32x4_t b_d = vcvt_f32_f16(vld1_f16((const float16_t *)b_ptr[l].d)); - sumf[0] = vmlaq_f32(sumf[0], vmulq_laneq_f32(b_d, a_d, 0), vcvtq_f32_s32(sumi_0)); - sumf[1] = vmlaq_f32(sumf[1], vmulq_laneq_f32(b_d, a_d, 1), vcvtq_f32_s32(sumi_1)); - sumf[2] = vmlaq_f32(sumf[2], vmulq_laneq_f32(b_d, a_d, 2), vcvtq_f32_s32(sumi_2)); - sumf[3] = vmlaq_f32(sumf[3], vmulq_laneq_f32(b_d, a_d, 3), vcvtq_f32_s32(sumi_3)); + int32x4_t sumi_0 = vdupq_n_s32(0); + int32x4_t sumi_1 = vdupq_n_s32(0); + int32x4_t sumi_2 = vdupq_n_s32(0); + int32x4_t sumi_3 = vdupq_n_s32(0); + + for (int k = 0; k < 4; k++) { + int8x16_t a_0 = vld1q_s8(a_ptr[l].qs + 16 * k + 0); + int8x16_t a_1 = vld1q_s8(a_ptr[l].qs + 16 * k + 64); + + uint8x16_t b = vld1q_u8(b_ptr[l].qs + 16 * k); + int8x16_t b_hi = vqtbl1q_s8(kvalues, b >> 4); + int8x16_t b_lo = vqtbl1q_s8(kvalues, b & 0xF); + + sumi_0 = vdotq_laneq_s32(sumi_0, b_lo, a_0, 0); + sumi_1 = vdotq_laneq_s32(sumi_1, b_lo, a_0, 1); + sumi_2 = vdotq_laneq_s32(sumi_2, b_lo, a_0, 2); + sumi_3 = vdotq_laneq_s32(sumi_3, b_lo, a_0, 3); + sumi_0 = vdotq_laneq_s32(sumi_0, b_hi, a_1, 0); + sumi_1 = vdotq_laneq_s32(sumi_1, b_hi, a_1, 1); + sumi_2 = vdotq_laneq_s32(sumi_2, b_hi, a_1, 2); + sumi_3 = vdotq_laneq_s32(sumi_3, b_hi, a_1, 3); } - for (int m = 0; m < 4; m++) { - vst1q_f32(s + (y * 4 + m) * bs + x * 4, sumf[m]); - } + sumf[0] = vmlaq_f32(sumf[0], vmulq_laneq_f32(b_d, a_d, 0), vcvtq_f32_s32(sumi_0)); + sumf[1] = vmlaq_f32(sumf[1], vmulq_laneq_f32(b_d, a_d, 1), vcvtq_f32_s32(sumi_1)); + sumf[2] = vmlaq_f32(sumf[2], vmulq_laneq_f32(b_d, a_d, 2), vcvtq_f32_s32(sumi_2)); + sumf[3] = vmlaq_f32(sumf[3], vmulq_laneq_f32(b_d, a_d, 3), vcvtq_f32_s32(sumi_3)); + } + + for (int m = 0; m < 4; m++) { + vst1q_f32(s + (y * 4 + m) * bs + x * 4, sumf[m]); } } - return; } + return; #endif // #if ! ((defined(_MSC_VER)) && ! defined(__clang__)) && defined(__aarch64__) && defined(__ARM_NEON) { float sumf[4][4]; diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index 2c12e493bc9b0..1bb9c4e367f0f 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -74,13 +74,8 @@ #if defined(__ARM_ARCH) struct ggml_arm_arch_features_type { - int has_neon; - int has_dotprod; - int has_i8mm; - int has_sve; int sve_cnt; - int has_sme; -} ggml_arm_arch_features = {-1, -1, -1, -1, 0, -1}; +} ggml_arm_arch_features = { 0 }; #endif @@ -678,87 +673,15 @@ bool ggml_is_numa(void) { #if defined(__linux__) && defined(__aarch64__) #include -#elif defined(__APPLE__) -#include -#endif - -#if !defined(HWCAP2_I8MM) -#define HWCAP2_I8MM (1 << 13) -#endif - -#if !defined(HWCAP2_SME) -#define HWCAP2_SME (1 << 23) #endif static void ggml_init_arm_arch_features(void) { -#if defined(__linux__) && defined(__aarch64__) - uint32_t hwcap = getauxval(AT_HWCAP); - uint32_t hwcap2 = getauxval(AT_HWCAP2); - - ggml_arm_arch_features.has_neon = !!(hwcap & HWCAP_ASIMD); - ggml_arm_arch_features.has_dotprod = !!(hwcap & HWCAP_ASIMDDP); - ggml_arm_arch_features.has_i8mm = !!(hwcap2 & HWCAP2_I8MM); - ggml_arm_arch_features.has_sve = !!(hwcap & HWCAP_SVE); - ggml_arm_arch_features.has_sme = !!(hwcap2 & HWCAP2_SME); - -#if defined(__ARM_FEATURE_SVE) +#if defined(__linux__) && defined(__aarch64__) && defined(__ARM_FEATURE_SVE) ggml_arm_arch_features.sve_cnt = PR_SVE_VL_LEN_MASK & prctl(PR_SVE_GET_VL); #endif -#elif defined(__APPLE__) - int oldp = 0; - size_t size = sizeof(oldp); - if (sysctlbyname("hw.optional.AdvSIMD", &oldp, &size, NULL, 0) != 0) { - oldp = 0; - } - ggml_arm_arch_features.has_neon = oldp; - - if (sysctlbyname("hw.optional.arm.FEAT_DotProd", &oldp, &size, NULL, 0) != 0) { - oldp = 0; - } - ggml_arm_arch_features.has_dotprod = oldp; - - if (sysctlbyname("hw.optional.arm.FEAT_I8MM", &oldp, &size, NULL, 0) != 0) { - oldp = 0; - } - ggml_arm_arch_features.has_i8mm = oldp; - - if (sysctlbyname("hw.optional.arm.FEAT_SME", &oldp, &size, NULL, 0) != 0) { - oldp = 0; - } - ggml_arm_arch_features.has_sme = oldp; - - ggml_arm_arch_features.has_sve = 0; - ggml_arm_arch_features.sve_cnt = 0; -#else -// Run-time CPU feature detection not implemented for this platform, fallback to compile time -#if defined(__ARM_NEON) - ggml_arm_arch_features.has_neon = 1; -#else - ggml_arm_arch_features.has_neon = 0; -#endif - -#if defined(__ARM_FEATURE_MATMUL_INT8) - ggml_arm_arch_features.has_i8mm = 1; -#else - ggml_arm_arch_features.has_i8mm = 0; -#endif - -#if defined(__ARM_FEATURE_SVE) - ggml_arm_arch_features.has_sve = 1; - ggml_arm_arch_features.sve_cnt = 16; -#else - ggml_arm_arch_features.has_sve = 0; - ggml_arm_arch_features.sve_cnt = 0; -#endif - -#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_SME2) - ggml_arm_arch_features.has_sme = 1; -#else - ggml_arm_arch_features.has_sme = 0; -#endif -#endif } -#endif + +#endif // __ARM_ARCH struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value) { GGML_ASSERT(!ggml_get_no_alloc(ctx)); @@ -3443,7 +3366,7 @@ int ggml_cpu_has_vxe(void) { int ggml_cpu_has_neon(void) { #if defined(__ARM_ARCH) && defined(__ARM_NEON) - return ggml_arm_arch_features.has_neon; + return 1; #else return 0; #endif @@ -3451,7 +3374,7 @@ int ggml_cpu_has_neon(void) { int ggml_cpu_has_dotprod(void) { #if defined(__ARM_ARCH) && defined(__ARM_FEATURE_DOTPROD) - return ggml_arm_arch_features.has_dotprod; + return 1; #else return 0; #endif @@ -3459,7 +3382,7 @@ int ggml_cpu_has_dotprod(void) { int ggml_cpu_has_sve(void) { #if defined(__ARM_ARCH) && defined(__ARM_FEATURE_SVE) - return ggml_arm_arch_features.has_sve; + return 1; #else return 0; #endif @@ -3467,7 +3390,7 @@ int ggml_cpu_has_sve(void) { int ggml_cpu_has_matmul_int8(void) { #if defined(__ARM_ARCH) && defined(__ARM_FEATURE_MATMUL_INT8) - return ggml_arm_arch_features.has_i8mm; + return 1; #else return 0; #endif @@ -3483,7 +3406,7 @@ int ggml_cpu_get_sve_cnt(void) { int ggml_cpu_has_sme(void) { #if defined(__ARM_ARCH) && defined(__ARM_FEATURE_SME) - return ggml_arm_arch_features.has_sme; + return 1; #else return 0; #endif From 9eaa51e7f08593f123f00136591179a8f5956ecd Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Fri, 20 Jun 2025 09:50:24 +0800 Subject: [PATCH 91/95] CUDA: add conv_2d_dw (#14265) * CUDA: add conv_2d_dw * better naming * simplify using template * Review: fix operation ordering in ggml-cuda, use __forceinline__, use more const --- ggml/src/ggml-cuda/conv2d-dw.cu | 161 +++++++++++++++++++++++++++++++ ggml/src/ggml-cuda/conv2d-dw.cuh | 5 + ggml/src/ggml-cuda/ggml-cuda.cu | 5 + 3 files changed, 171 insertions(+) create mode 100644 ggml/src/ggml-cuda/conv2d-dw.cu create mode 100644 ggml/src/ggml-cuda/conv2d-dw.cuh diff --git a/ggml/src/ggml-cuda/conv2d-dw.cu b/ggml/src/ggml-cuda/conv2d-dw.cu new file mode 100644 index 0000000000000..7583233b1b7cd --- /dev/null +++ b/ggml/src/ggml-cuda/conv2d-dw.cu @@ -0,0 +1,161 @@ +#include "conv2d-dw.cuh" + +struct conv_params { + int in_w, in_h; + int out_w, out_h; + int kernel_w, kernel_h; + int stride_x, stride_y; + int padding_x, padding_y; + int dilation_x, dilation_y; + int channels, batches; +}; + +struct kernel_bounds { + int y_min, y_max; + int x_min, x_max; +}; + +__device__ __forceinline__ kernel_bounds calculate_kernel_bounds(int out_x, int out_y, const conv_params & params) { + kernel_bounds bounds; + bounds.y_min = max(0, (params.padding_y - out_y * params.stride_y + params.dilation_y - 1) / params.dilation_y); + bounds.y_max = + min(params.kernel_h, + (params.in_h + params.padding_y - out_y * params.stride_y + params.dilation_y - 1) / params.dilation_y); + bounds.x_min = max(0, (params.padding_x - out_x * params.stride_x + params.dilation_x - 1) / params.dilation_x); + bounds.x_max = + min(params.kernel_w, + (params.in_w + params.padding_x - out_x * params.stride_x + params.dilation_x - 1) / params.dilation_x); + return bounds; +} + +__device__ __forceinline__ int calculate_input_coord(int out_coord, int kern_coord, int stride, int dilation, int padding) { + return out_coord * stride + kern_coord * dilation - padding; +} + +struct whcn_layout { + __device__ static int input_index(int n, int c, int y, int x, const conv_params & params) { + return n * (params.channels * params.in_w * params.in_h) + c * params.in_w * params.in_h + y * params.in_w + x; + } + + __device__ static int kernel_index(int c, int ky, int kx, const conv_params & params) { + return c * params.kernel_h * params.kernel_w + ky * params.kernel_w + kx; + } + + __device__ static int output_index(int n, int c, int y, int x, const conv_params & params) { + return n * (params.channels * params.out_w * params.out_h) + c * params.out_w * params.out_h + + y * params.out_w + x; + } + + __device__ static void unpack_indices(int global_idx, const conv_params & params, int & n, int & c, int & out_y, + int & out_x) { + out_x = global_idx % params.out_w; + out_y = (global_idx / params.out_w) % params.out_h; + c = (global_idx / (params.out_w * params.out_h)) % params.channels; + n = global_idx / (params.out_w * params.out_h * params.channels); + } +}; + +struct cwhn_layout { + __device__ static int input_index(int n, int c, int y, int x, const conv_params & params) { + return n * (params.channels * params.in_w * params.in_h) + (y * params.in_w + x) * params.channels + c; + } + + __device__ static int kernel_index(int c, int ky, int kx, const conv_params & params) { + return (ky * params.kernel_w + kx) * params.channels + c; + } + + __device__ static int output_index(int n, int c, int y, int x, const conv_params & params) { + return n * (params.channels * params.out_w * params.out_h) + y * (params.out_w * params.channels) + + x * params.channels + c; + } + + __device__ static void unpack_indices(int global_idx, const conv_params & params, int & n, int & c, int & out_y, + int & out_x) { + c = global_idx % params.channels; + out_x = (global_idx / params.channels) % params.out_w; + out_y = (global_idx / (params.channels * params.out_w)) % params.out_h; + n = global_idx / (params.channels * params.out_w * params.out_h); + } +}; + +template +__global__ void conv2d_dw_kernel(const T * __restrict__ input, const T * __restrict__ kernel, T * __restrict__ output, + const int in_w, const int in_h, const int out_w, const int out_h, + const int kernel_w, const int kernel_h, const int stride_x, const int stride_y, + const int padding_x, const int padding_y, const int dilation_x, const int dilation_y, + const int channels, const int batches) { + const int global_idx = blockIdx.x * blockDim.x + threadIdx.x; + const int total_elements = batches * channels * out_h * out_w; + + if (global_idx >= total_elements) { + return; + } + + conv_params params = { in_w, in_h, out_w, out_h, kernel_w, kernel_h, stride_x, + stride_y, padding_x, padding_y, dilation_x, dilation_y, channels, batches }; + + int batch_idx, channel_idx, out_y_idx, out_x_idx; + Layout::unpack_indices(global_idx, params, batch_idx, channel_idx, out_y_idx, out_x_idx); + + T accumulator = 0; + kernel_bounds bounds = calculate_kernel_bounds(out_x_idx, out_y_idx, params); + + for (int kern_y = bounds.y_min; kern_y < bounds.y_max; ++kern_y) { + int in_y_idx = calculate_input_coord(out_y_idx, kern_y, params.stride_y, params.dilation_y, params.padding_y); + + for (int kern_x = bounds.x_min; kern_x < bounds.x_max; ++kern_x) { + int in_x_idx = calculate_input_coord(out_x_idx, kern_x, params.stride_x, params.dilation_x, params.padding_x); + + const T input_val = input[Layout::input_index(batch_idx, channel_idx, in_y_idx, in_x_idx, params)]; + const T kernel_val = kernel[Layout::kernel_index(channel_idx, kern_y, kern_x, params)]; + + accumulator += input_val * kernel_val; + } + } + + output[Layout::output_index(batch_idx, channel_idx, out_y_idx, out_x_idx, params)] = accumulator; +} + +void ggml_cuda_op_conv2d_dw(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { + const ggml_tensor * kernel = dst->src[0]; + const ggml_tensor * input = dst->src[1]; + + GGML_ASSERT(kernel->type == GGML_TYPE_F32 && input->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); + const float * w_d = (const float *) kernel->data; + const float * x_d = (const float *) input->data; + float * y_d = (float *) dst->data; + + const int32_t * p = (const int32_t *) dst->op_params; + const int stride_x = p[0]; + const int stride_y = p[1]; + const int padding_x = p[2]; + const int padding_y = p[3]; + const int dilation_x = p[4]; + const int dilation_y = p[5]; + + const int in_w = input->ne[0]; + const int in_h = input->ne[1]; + const int kernel_w = kernel->ne[0]; + const int kernel_h = kernel->ne[1]; + const int out_w = dst->ne[0]; + const int out_h = dst->ne[1]; + const int channels = dst->ne[2]; + const int batches = dst->ne[3]; + + cudaStream_t st = ctx.stream(); + + const int total = batches * channels * out_h * out_w; + const int blocks = (total + CUDA_CONV2D_DW_BLOCK_SIZE - 1) / CUDA_CONV2D_DW_BLOCK_SIZE; + + if (ggml_is_contiguous(input)) { + conv2d_dw_kernel<<>>( + x_d, w_d, y_d, in_w, in_h, out_w, out_h, kernel_w, kernel_h, stride_x, stride_y, padding_x, padding_y, + dilation_x, dilation_y, channels, batches); + } else if (ggml_is_contiguous_channels(input)) { + conv2d_dw_kernel<<>>( + x_d, w_d, y_d, in_w, in_h, out_w, out_h, kernel_w, kernel_h, stride_x, stride_y, padding_x, padding_y, + dilation_x, dilation_y, channels, batches); + } else { + GGML_ABORT("Unsupported memory layout for conv_2d_dw"); + } +} diff --git a/ggml/src/ggml-cuda/conv2d-dw.cuh b/ggml/src/ggml-cuda/conv2d-dw.cuh new file mode 100644 index 0000000000000..b5d5a69d345cf --- /dev/null +++ b/ggml/src/ggml-cuda/conv2d-dw.cuh @@ -0,0 +1,5 @@ +#pragma once +#include "common.cuh" + +#define CUDA_CONV2D_DW_BLOCK_SIZE 256 +void ggml_cuda_op_conv2d_dw(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 898b24341471d..80fe050734dfa 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -11,6 +11,7 @@ #include "ggml-cuda/clamp.cuh" #include "ggml-cuda/concat.cuh" #include "ggml-cuda/conv-transpose-1d.cuh" +#include "ggml-cuda/conv2d-dw.cuh" #include "ggml-cuda/convert.cuh" #include "ggml-cuda/count-equal.cuh" #include "ggml-cuda/cpy.cuh" @@ -2310,6 +2311,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_DW: + ggml_cuda_op_conv2d_dw(ctx, dst); + break; case GGML_OP_CONV_TRANSPOSE_1D: ggml_cuda_op_conv_transpose_1d(ctx,dst); break; @@ -3209,6 +3213,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_DW: case GGML_OP_POOL_2D: case GGML_OP_SUM: case GGML_OP_SUM_ROWS: From 4c9fdfbe1580a66fd7d77c77418ce2c606a29fdd Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 20 Jun 2025 10:14:14 +0300 Subject: [PATCH 92/95] ubatch : new splitting logic (#14217) ggml-ci --- src/llama-batch.cpp | 916 +++++++++++++++++----------- src/llama-batch.h | 168 ++--- src/llama-context.cpp | 133 ++-- src/llama-context.h | 2 +- src/llama-graph.cpp | 270 +++----- src/llama-graph.h | 6 +- src/llama-hparams.cpp | 4 + src/llama-hparams.h | 2 + src/llama-kv-cache-unified-iswa.cpp | 40 +- src/llama-kv-cache-unified-iswa.h | 7 +- src/llama-kv-cache-unified.cpp | 134 ++-- src/llama-kv-cache-unified.h | 7 +- src/llama-kv-cells.h | 4 +- src/llama-memory-hybrid.cpp | 81 ++- src/llama-memory-hybrid.h | 9 +- src/llama-memory-recurrent.cpp | 76 ++- src/llama-memory-recurrent.h | 7 +- src/llama-memory.h | 7 +- tools/server/server.cpp | 32 - 19 files changed, 991 insertions(+), 914 deletions(-) diff --git a/src/llama-batch.cpp b/src/llama-batch.cpp index 8b6d14fe8813c..b3c996e18ab41 100644 --- a/src/llama-batch.cpp +++ b/src/llama-batch.cpp @@ -1,7 +1,6 @@ #include "llama-batch.h" #include "llama-impl.h" -#include "llama-cparams.h" #include "llama-vocab.h" #include "llama-memory.h" @@ -10,282 +9,7 @@ #include #include -llama_ubatch llama_sbatch::reserve_ubatch(size_t n_ubatch, bool has_embd) { - // clear empty sequences - // the previous ubatch is assumed to be gone, - // so nothing should refer to values in these sequences anymore. - for (size_t i = seq.size(); i-- > 0;) { - if (seq[i].length == 0) { - seq.pop_back(); - } else { - break; - } - } - - udatas.push_back({}); - - auto & udata = udatas.back(); - - udata.token.resize(!has_embd ? n_ubatch : 0); - udata.embd.resize(has_embd ? n_embd * n_ubatch : 0); - udata.pos.resize(n_ubatch); - udata.n_seq_id.resize(n_ubatch); - udata.seq_id.resize(n_ubatch); - udata.output.resize(n_ubatch); - - llama_ubatch ubatch = { - /*equal_seqs =*/ true, - /*n_tokens =*/ 0, - /*n_seq_tokens =*/ 0, - /*n_seqs =*/ 0, - /*token =*/ !has_embd ? udata.token.data() : nullptr, - /*embd =*/ has_embd ? udata.embd.data() : nullptr, - /*pos =*/ udata.pos.data(), - /*n_seq_id =*/ udata.n_seq_id.data(), - /*seq_id =*/ udata.seq_id.data(), - /*output =*/ udata.output.data(), - }; - - return ubatch; -} - -void llama_sbatch::add_seq_to_ubatch(llama_ubatch & ubatch, llama_sbatch_seq & seq, size_t length) { - GGML_ASSERT(batch != nullptr); - GGML_ASSERT(length <= seq.length); - // Can only add sequences of equal lengths to a batch, - // otherwise it isn't clear to which sequence a token belongs - GGML_ASSERT(seq.n_seq_id == 0 || ubatch.n_seqs == 0 || length == (size_t) ubatch.n_tokens / ubatch.n_seqs); - GGML_ASSERT((seq.n_seq_id != 0) == ubatch.equal_seqs); - // NOTE: loops are separated for cache-friendliness - if (batch->token) { - if (ubatch.equal_seqs) { - for (size_t i = 0; i < length; ++i) { - ubatch.token[ubatch.n_tokens + i] = batch->token[ids[seq.offset + i]]; - } - } else { - // simple split - ubatch.token = batch->token + seq.offset; - } - } else { - ubatch.token = nullptr; - } - if (batch->embd) { - if (ubatch.equal_seqs) { - for (size_t i = 0; i < length; ++i) { - memcpy( - ubatch.embd + (n_embd * (ubatch.n_tokens + i)), - batch->embd + (n_embd * ids[seq.offset + i]), - n_embd * sizeof(float) - ); - } - } else { - // simple split - ubatch.embd = batch->embd + (n_embd * seq.offset); - } - } else { - ubatch.embd = nullptr; - } - if (ubatch.equal_seqs) { - for (size_t i = 0; i < length; ++i) { - ubatch.pos[ubatch.n_tokens + i] = batch->pos[ids[seq.offset + i]]; - } - } else { - // simple split - ubatch.pos = batch->pos + seq.offset; - } - if (ubatch.equal_seqs) { - ubatch.n_seq_id[ubatch.n_seqs] = seq.n_seq_id; - if (seq.seq_id) { - ubatch.seq_id[ubatch.n_seqs] = seq.seq_id; - } - } else { - // simple split - if (batch->n_seq_id) { - ubatch.n_seq_id = batch->n_seq_id + seq.offset; - } else { - for (size_t i = 0; i < length; ++i) { - ubatch.n_seq_id[ubatch.n_seqs + i] = 1; - } - } - if (batch->seq_id) { - ubatch.seq_id = batch->seq_id + seq.offset; - } - } - if (batch->logits) { - if (ubatch.equal_seqs) { - for (size_t i = 0; i < length; ++i) { - size_t id = ids[seq.offset + i]; - int8_t is_output = batch->logits[id]; - ubatch.output[ubatch.n_tokens + i] = is_output; - if (is_output) { out_ids.push_back(id); } - } - } else { - // simple split - ubatch.output = batch->logits + seq.offset; - for (size_t i = 0; i < length; ++i) { - if (ubatch.output[i] != 0) { out_ids.push_back(seq.offset + i); } - } - } - } else { - // only get last output - for (size_t i = 0; i < length; ++i) { - size_t id = ids[seq.offset + i]; - int8_t is_last = id == ids.size() - 1; - ubatch.output[ubatch.n_tokens + i] = is_last; - if (is_last) { out_ids.push_back(id); } - } - } - if (ubatch.n_tokens == 0 && ubatch.n_seqs == 0) { - ubatch.n_seq_tokens = ubatch.equal_seqs ? length : 1; - } - ubatch.n_tokens += length; - ubatch.n_seqs += ubatch.equal_seqs ? 1 : length; // virtual sequences for simple splits - seq.offset += length; - seq.length -= length; - n_tokens -= length; - GGML_ASSERT(ubatch.n_tokens == ubatch.n_seq_tokens * ubatch.n_seqs); -} - -llama_ubatch llama_sbatch::split_simple(size_t n_ubatch) { - n_ubatch = n_tokens < n_ubatch ? n_tokens : n_ubatch; - llama_ubatch ubatch = reserve_ubatch(n_ubatch, /* has_embd */ batch->embd != nullptr); - ubatch.equal_seqs = false; - if (!seq.empty()) { - llama_sbatch_seq & s = seq[0]; - size_t length = s.length < n_ubatch ? s.length : n_ubatch; - GGML_ASSERT(seq.size() == 1 && s.n_seq_id == 0); // don't mix with other splits - add_seq_to_ubatch(ubatch, s, length); - } - return ubatch; -} - -llama_ubatch llama_sbatch::split_equal(size_t n_ubatch) { - n_ubatch = n_tokens < n_ubatch ? n_tokens : n_ubatch; - llama_ubatch ubatch = reserve_ubatch(n_ubatch, /* has_embd */ batch->embd != nullptr); - if (!seq.empty()) { - size_t length = 0; - size_t n_tokens_in_ubatch = 0; - GGML_ASSERT(seq[0].n_seq_id > 0); // should not be mixed with simple splits - // smallest first, because it's easier to split this way; - // starting from the end to pop in constant time. - for (size_t i = seq.size(); i-- > 0;) { - llama_sbatch_seq & s = seq[i]; - GGML_ASSERT(s.length > 0); - if (length == 0) { - length = s.length < n_ubatch ? s.length : n_ubatch; - } - add_seq_to_ubatch(ubatch, s, length); - n_tokens_in_ubatch += length; - // shared prompts can't be mixed with any of their sequences, - // so it's safer to compute them in their own ubatch - if (s.n_seq_id > 1) { break; } - // stop when there isn't enough space for another sequence - if (length + n_tokens_in_ubatch > n_ubatch) { break; } - } - } - return ubatch; -} - -llama_ubatch llama_sbatch::split_seq(size_t n_ubatch) { - n_ubatch = n_tokens < n_ubatch ? n_tokens : n_ubatch; - llama_ubatch ubatch = reserve_ubatch(n_ubatch, /* has_embd */ batch->embd != nullptr); - if (!seq.empty()) { - llama_sbatch_seq & s = seq[seq.size() - 1]; - size_t length = s.length < n_ubatch ? s.length : n_ubatch; - GGML_ASSERT(s.n_seq_id > 0); // should not be mixed with simple splits - add_seq_to_ubatch(ubatch, s, length); - } - return ubatch; -} - -llama_sbatch::llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split) { - GGML_ASSERT(batch.n_tokens >= 0); - this->batch = &batch; - this->n_embd = n_embd; - - n_tokens = batch.n_tokens; - ids.resize(n_tokens); - out_ids.clear(); - // TODO: reserve out_ids and seq - - for (size_t i = 0; i < n_tokens; ++i) { - ids[i] = i; - } - - if (simple_split) { - seq.resize(1); - llama_sbatch_seq & s = seq[0]; - s.n_seq_id = 0; - s.seq_id = nullptr; - s.offset = 0; - s.length = n_tokens; - return; - } - - std::sort(ids.begin(), ids.end(), - [&batch](size_t a, size_t b) { - int32_t n_seq_a = batch.n_seq_id ? batch.n_seq_id[a] : 1; - int32_t n_seq_b = batch.n_seq_id ? batch.n_seq_id[b] : 1; - // sort by seq_id, then by pos - if (n_seq_a == n_seq_b) { - if (batch.seq_id) { - for (int32_t i = 0; i < n_seq_a; ++i) { - llama_seq_id seq_id_a = batch.seq_id[a][i]; - llama_seq_id seq_id_b = batch.seq_id[b][i]; - // smaller seq_ids go first - if (seq_id_a != seq_id_b) { - return seq_id_a < seq_id_b; - } - } - } - // when all else is equal, sort by pos - if (batch.pos) { - return batch.pos[a] < batch.pos[b]; - } - // no pos, sort by id - return a < b; - } - // shared prompts go first - return n_seq_a > n_seq_b; - } - ); - - // init seq - llama_sbatch_seq * last_seq = nullptr; - - for (size_t i = 0; i < n_tokens; ++i) { - const size_t bi = ids[i]; - const int32_t n_seqs = batch.n_seq_id[bi]; - llama_seq_id * seq_ids = batch.seq_id[bi]; - if (last_seq != nullptr) { - bool same = n_seqs == last_seq->n_seq_id; - for (int32_t j = 0; same && j < n_seqs; ++j) { - if (seq_ids[j] != last_seq->seq_id[j]) { - same = false; - } - } - if (same) { - last_seq->length += 1; - continue; - } - } - llama_sbatch_seq new_seq = {n_seqs, seq_ids, i, 1}; - seq.push_back(new_seq); - last_seq = &seq.back(); - } - - // keep shared prompts first at the end, then sort by length descending. - std::sort(seq.begin(), seq.end(), - [](llama_sbatch_seq & a, llama_sbatch_seq & b) { - if (a.n_seq_id == b.n_seq_id) { - return a.length > b.length; - } - return a.n_seq_id < b.n_seq_id; - } - ); -} - -llama_batch_allocr::llama_batch_allocr() { +llama_batch_allocr::llama_batch_allocr(uint32_t n_pos_per_embd) : n_pos_per_embd(n_pos_per_embd) { const char * LLAMA_BATCH_DEBUG = getenv("LLAMA_BATCH_DEBUG"); debug = LLAMA_BATCH_DEBUG ? atoi(LLAMA_BATCH_DEBUG) : 0; @@ -294,17 +18,22 @@ llama_batch_allocr::llama_batch_allocr() { for (auto & cur : seq_cpl) { cur.resize(LLAMA_MAX_SEQ); } + + seq_idx.resize(LLAMA_MAX_SEQ, -1); } bool llama_batch_allocr::init( const llama_batch & batch_inp, const llama_vocab & vocab, const llama_memory_i * memory, - bool embd_all) { + uint32_t n_embd, + bool output_all) { clear(); batch = batch_inp; + this->vocab = &vocab; + GGML_ASSERT(batch.n_tokens > 0); // @@ -359,6 +88,7 @@ bool llama_batch_allocr::init( llama_pos p0[LLAMA_MAX_SEQ]; for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { if (!memory) { + // if no memory -> start from 0 p0[s] = 0; } else { p0[s] = memory->seq_pos_max(s) + 1; @@ -370,8 +100,11 @@ bool llama_batch_allocr::init( pos[i] = p0[seq_id]; + // update the starting position for all sequences that are assigned to the this token for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { - p0[batch.seq_id[i][s]] = pos[i] + 1; + const llama_seq_id seq_id = batch.seq_id[i][s]; + + p0[seq_id] = pos[i] + 1; } } @@ -379,7 +112,7 @@ bool llama_batch_allocr::init( } if (!batch.logits) { - if (embd_all) { + if (output_all) { // return the output for all tokens output.resize(batch.n_tokens, true); } else { @@ -389,7 +122,7 @@ bool llama_batch_allocr::init( } batch.logits = output.data(); - } else if (embd_all) { + } else if (output_all) { bool warn = false; for (int32_t i = 0; i < batch.n_tokens; ++i) { @@ -410,6 +143,9 @@ bool llama_batch_allocr::init( // compute stats // + this->n_embd = n_embd; + + // count the outputs in this batch for (int32_t i = 0; i < batch.n_tokens; ++i) { n_outputs += batch.logits[i] != 0; } @@ -417,85 +153,86 @@ bool llama_batch_allocr::init( // determine coupled sequences // these are pairs of sequences that have at least one token in the input batch that is assigned to both of them for (int32_t i = 0; i < batch.n_tokens; ++i) { + const llama_seq_id s0 = batch.seq_id[i][0]; + for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { - seq_pos[batch.seq_id[i][s]].insert(batch.pos[i]); + const llama_seq_id s1 = batch.seq_id[i][s]; - if (s > 0) { - const llama_seq_id s0 = batch.seq_id[i][0]; - const llama_seq_id s1 = batch.seq_id[i][s]; + seq_pos[s1].insert(batch.pos[i]); + if (s > 0) { // mark that sequence s1 is coupled to s0 seq_cpl[s1][s0] = true; - // note: the other way around is not necessary for now + // note: tracking the other way around is not necessary for now //seq_cpl[s0][s1] = true; } } } - if (debug > 0) { - LLAMA_LOG_DEBUG("%s: input batch info:\n", __func__); - LLAMA_LOG_DEBUG("%s: n_tokens = %d\n", __func__, batch.n_tokens); - LLAMA_LOG_DEBUG("%s: token = %p\n", __func__, (void *) batch.token); - LLAMA_LOG_DEBUG("%s: embd = %p\n", __func__, (void *) batch.embd); - LLAMA_LOG_DEBUG("%s: pos = %p\n", __func__, (void *) batch.pos); - LLAMA_LOG_DEBUG("%s: n_seq_id = %p\n", __func__, (void *) batch.n_seq_id); - LLAMA_LOG_DEBUG("%s: seq_id = %p\n", __func__, (void *) batch.seq_id); - LLAMA_LOG_DEBUG("%s: logits = %p\n", __func__, (void *) batch.logits); - LLAMA_LOG_DEBUG("%s: n_outputs = %d\n", __func__, n_outputs); + // precompute the sequence sets for each token and determine the unique sequence ids that participate in the batch + { + seq_set_t seq_set_unq; - if (debug > 1) { - int seq_id_max = 0; - for (int32_t i = 0; i < batch.n_tokens; ++i) { - for (int s = 0; s < batch.n_seq_id[i]; ++s) { - for (int s = 0; s < batch.n_seq_id[i]; ++s) { - seq_id_max = std::max(seq_id_max, batch.seq_id[i][s]); - } - } + for (int32_t i = 0; i < batch.n_tokens; ++i) { + seq_set_t cur; + for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { + const llama_seq_id seq_id = batch.seq_id[i][s]; + + cur .set(seq_id); + seq_set_unq.set(seq_id); } - ++seq_id_max; - LLAMA_LOG_DEBUG("%s: token = [\n", __func__); - for (int32_t i = 0; i < batch.n_tokens; ++i) { - std::vector seq_id(seq_id_max); + seq_set.push_back(cur); + seq_set_map[cur].push_back(i); + } - for (int s = 0; s < batch.n_seq_id[i]; ++s) { - seq_id[batch.seq_id[i][s]] = 1; - } + for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { + if (seq_set_unq.test(s)) { + seq_idx[s] = seq_id_unq.size(); + seq_id_unq.push_back(s); + } + } + } - std::stringstream ss; - for (int s = 0; s < seq_id_max; ++s) { - if (seq_id[s]) { - ss << s%10; - } else { - ss << "."; - } - } + if (debug > 0) { + LLAMA_LOG_DEBUG("%s: input batch info:\n", __func__); - LLAMA_LOG_DEBUG("%s: %4d: id = %6d (%16s), pos = %4d, n_seq_id = %2d, seq_id = [%s], output = %d\n", - __func__, i, batch.token[i], vocab.token_to_piece(batch.token[i]).c_str(), - batch.pos[i], batch.n_seq_id[i], ss.str().c_str(), batch.logits[i]); + llama_ubatch ubatch { + /*.equal_seqs =*/ false, + /*.n_tokens =*/ (uint32_t) batch.n_tokens, + /*.n_seq_tokens =*/ (uint32_t) 1, + /*.n_seqs =*/ (uint32_t) batch.n_tokens, + /*.n_seqs_unq =*/ (uint32_t) this->seq_id_unq.size(), + /*.token =*/ batch.token, + /*.embd =*/ batch.embd, + /*.pos =*/ batch.pos, + /*.n_seq_id =*/ batch.n_seq_id, + /*.seq_id =*/ batch.seq_id, + /*.seq_id_unq =*/ this->seq_id_unq.data(), + /*.seq_idx =*/ this->seq_idx.data(), + /*.output =*/ batch.logits, + }; + + ubatch_print(ubatch, debug); + + LLAMA_LOG_DEBUG("%s: seq = [\n", __func__); + for (int s0 = 0; s0 < (int) seq_pos.size(); ++s0) { + if (seq_pos[s0].empty()) { + continue; } - LLAMA_LOG_DEBUG("%s: ]\n", __func__); - - LLAMA_LOG_DEBUG("%s: seq = [\n", __func__); - for (int s0 = 0; s0 < (int) seq_pos.size(); ++s0) { - if (seq_pos[s0].empty()) { - continue; - } - std::stringstream ss; - for (int s1 = 0; s1 < (int) seq_cpl[s0].size(); ++s1) { - if (seq_cpl[s0][s1]) { - ss << s1 << " "; - } + std::stringstream ss; + for (int s1 = 0; s1 < (int) seq_cpl[s0].size(); ++s1) { + if (seq_cpl[s0][s1]) { + ss << s1 << " "; } - - LLAMA_LOG_DEBUG("%s: %4d: pos = [%4d, %4d], cpl = %s\n", - __func__, s0, seq_pos_min(s0), seq_pos_max(s0), ss.str().empty() ? "-" : ss.str().c_str()); } - LLAMA_LOG_DEBUG("%s: ]\n", __func__); + + LLAMA_LOG_DEBUG("%s: %4d: pos = [%4d, %4d], cpl = %s\n", + __func__, s0, seq_pos_min(s0), seq_pos_max(s0), ss.str().empty() ? "-" : ss.str().c_str()); } + LLAMA_LOG_DEBUG("%s: ]\n", __func__); } // @@ -507,9 +244,22 @@ bool llama_batch_allocr::init( continue; } - if (memory && seq_pos_min(s) != memory->seq_pos_max(s) + 1) { - LLAMA_LOG_ERROR("%s: sequence %d does not start from the last position stored in the memory\n", __func__, s); - return false; + if (memory) { + if (batch.token) { + if (seq_pos_min(s) != memory->seq_pos_max(s) + 1) { + LLAMA_LOG_ERROR("%s: sequence %d does not start from the last position stored in the memory\n", __func__, s); + return false; + } + } else { + assert(batch.embd); + + // for embeddings (typically used as vision input), we allow them to have repeating positions + // ref: https://github.com/ggml-org/llama.cpp/issues/13694#issuecomment-2983871762 + if (seq_pos_min(s) != memory->seq_pos_max(s) && seq_pos_min(s) != memory->seq_pos_max(s) + 1) { + LLAMA_LOG_ERROR("%s: sequence %d does not start from the last position stored in the memory\n", __func__, s); + return false; + } + } } if (seq_pos_max(s) - seq_pos_min(s) + 1 > (int) seq_pos[s].size()) { @@ -532,17 +282,120 @@ bool llama_batch_allocr::init( } } + // disallow partial sequence sub-sets: + // + // invalid: x + // i: 0 1 2 ... + // --------------------------------------- + // seq_id[i][0]: 0 0 1 + // seq_id[i][1]: 1 1 2 + // seq_id[i][2]: 2 + // + // disallow decreasing sequence positions: + // + // invalid: x + // i: 0 1 2 3 4 5 6 ... + // --------------------------------------- + // pos[i]: 4 5 0 1 6 2 3 + // seq_id[i][0]: 0 0 1 1 0 1 0 + // + { + seq_set_t cur_seq_set[LLAMA_MAX_SEQ]; + for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { + cur_seq_set[s].set(); + } + + llama_pos cur_seq_pos[LLAMA_MAX_SEQ]; + for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { + cur_seq_pos[s] = -1; + } + + for (int32_t i = 0; i < batch.n_tokens; ++i) { + const llama_pos pos = batch.pos[i]; + + for (int32_t s = 0; s < batch.n_seq_id[i]; ++s) { + const llama_seq_id seq_id = batch.seq_id[i][s]; + + cur_seq_set[seq_id] &= seq_set[i]; + + if (cur_seq_set[seq_id].none()) { + LLAMA_LOG_ERROR("%s: sequence %d belongs to incompatible sequence sets (not allowed)\n", __func__, seq_id); + return false; + } + + if (pos < cur_seq_pos[seq_id]) { + LLAMA_LOG_ERROR("%s: sequence %d positions are decreasing (not allowed)\n", __func__, seq_id); + return false; + } + } + } + } + + split_reset(); + return true; } +llama_ubatch llama_batch_allocr::ubatch_reserve(uint32_t n_seq_tokens, uint32_t n_seqs) { + const uint32_t n_tokens = n_seq_tokens*n_seqs; + + clear(); + split_reset(); + + ubatches.emplace_back(); + + auto & ubatch = ubatches.back(); + + ubatch.token .resize(n_tokens); + ubatch.embd .clear(); + ubatch.pos .resize(n_tokens); + ubatch.n_seq_id .resize(n_tokens); + ubatch.seq_id .resize(n_tokens); + ubatch.seq_id_unq.resize(0); + ubatch.seq_idx .resize(LLAMA_MAX_SEQ, -1); + ubatch.output .resize(n_tokens); + + for (uint32_t s = 0; s < n_seqs; ++s) { + ubatch.seq_idx[s] = s; + ubatch.seq_id_unq.push_back(s); + } + + llama_ubatch res { + /*.equal_seqs =*/ true, + /*.n_tokens =*/ n_tokens, + /*.n_seq_tokens =*/ n_seq_tokens, + /*.n_seqs =*/ n_seqs, + /*.n_seqs_unq =*/ n_seqs, + + /*.token =*/ ubatch.token.data(), + /*.embd =*/ nullptr, + /*.pos =*/ ubatch.pos.data(), + /*.n_seq_id =*/ ubatch.n_seq_id.data(), + /*.seq_id =*/ ubatch.seq_id.data(), + /*.seq_id_unq =*/ ubatch.seq_id_unq.data(), + /*.seq_idx =*/ ubatch.seq_idx.data(), + /*.output =*/ ubatch.output.data(), + }; + + return res; +} + const llama_batch & llama_batch_allocr::get_batch() const { return batch; } +uint32_t llama_batch_allocr::get_n_tokens() const { + return batch.n_tokens; +} + uint32_t llama_batch_allocr::get_n_outputs() const { return n_outputs; } +std::vector & llama_batch_allocr::get_out_ids() { + return out_ids; +} + llama_pos llama_batch_allocr::seq_pos_min(llama_seq_id seq_id) const { return seq_pos[seq_id].empty() ? -1 : *seq_pos[seq_id].begin(); } @@ -551,14 +404,188 @@ llama_pos llama_batch_allocr::seq_pos_max(llama_seq_id seq_id) const { return seq_pos[seq_id].empty() ? -1 : *seq_pos[seq_id].rbegin(); } +void llama_batch_allocr::split_reset() { + out_ids.clear(); + + used.clear(); + used.resize(get_n_tokens(), false); + + ubatches.clear(); +} + +llama_ubatch llama_batch_allocr::split_simple(uint32_t n_ubatch) { + // find the first unused token + uint32_t cur_idx = 0; + while (cur_idx < used.size() && used[cur_idx]) { + ++cur_idx; + } + + // we are done + if (cur_idx >= used.size()) { + return {}; + } + + std::vector idxs; + + while (true) { + idxs.push_back(cur_idx); + + used[cur_idx] = true; + + ++cur_idx; + + if (cur_idx >= used.size()) { + break; + } + + if (idxs.size() >= n_ubatch) { + break; + } + } + + return ubatch_add(idxs, idxs.size(), false); +} + +llama_ubatch llama_batch_allocr::split_equal(uint32_t n_ubatch) { + std::vector cur_seq_set; + + // determine the non-overlapping sequence sets participating in this ubatch + for (int32_t i = 0; i < batch.n_tokens; ++i) { + if (used[i]) { + continue; + } + + bool add = true; + + for (uint32_t s = 0; s < cur_seq_set.size(); ++s) { + // no overlap with existing sequence sets: + if (!(cur_seq_set[s] & seq_set[i]).none()) { + add = false; + break; + } + } + + if (add) { + cur_seq_set.push_back(seq_set[i]); + + if (cur_seq_set.size() > n_ubatch) { + break; + } + } + } + + const uint32_t n_seqs = cur_seq_set.size(); + + // we are done + if (n_seqs == 0) { + return {}; + } + + // the current batch index of each sequence set + std::vector cur_idx(n_seqs, 0); + + for (uint32_t s = 0; s < n_seqs; ++s) { + while (used[seq_set_map[cur_seq_set[s]][cur_idx[s]]]) { + ++cur_idx[s]; + } + } + + // the list of batch indices for each sequence set + // at the end we will concat these to get the final ubatch + std::vector idxs_per_seq(n_seqs); + + while (true) { + // we can only add new n_seq_tokens tokens if all the sequence sets have at least one more unused token and + // if we haven't reached n_ubatch + bool can_expand = true; + + for (uint32_t s = 0; s < n_seqs; ++s) { + if (cur_idx[s] >= (int32_t) seq_set_map[cur_seq_set[s]].size()) { + can_expand = false; + break; + } + } + + if (!can_expand) { + break; + } + + for (uint32_t s = 0; s < n_seqs; ++s) { + const int32_t idx = seq_set_map[cur_seq_set[s]][cur_idx[s]]; + + idxs_per_seq[s].push_back(idx); + + used[idx] = true; + + ++cur_idx[s]; + } + + if ((idxs_per_seq[0].size() + 1)*n_seqs > n_ubatch) { + break; + } + } + + // concat the per-sequence-set lists + std::vector idxs; + + for (uint32_t s = 0; s < n_seqs; ++s) { + idxs.insert(idxs.end(), idxs_per_seq[s].begin(), idxs_per_seq[s].end()); + } + + return ubatch_add(idxs, n_seqs, true); +} + +llama_ubatch llama_batch_allocr::split_seq(uint32_t n_ubatch) { + // find the first unused token + uint32_t cur_idx = 0; + while (cur_idx < used.size() && used[cur_idx]) { + ++cur_idx; + } + + // we are done + if (cur_idx >= used.size()) { + return {}; + } + + // this is the starting sequence set + // we allow adding tokens only if their sequence set is a subset of the current sequence set + auto cur_seq_set = seq_set[cur_idx]; + + std::vector idxs; + + while (true) { + idxs.push_back(cur_idx); + + used[cur_idx] = true; + + if (idxs.size() >= n_ubatch) { + break; + } + + do { + ++cur_idx; + } while (cur_idx < get_n_tokens() && (used[cur_idx] || ((cur_seq_set & seq_set[cur_idx]) != seq_set[cur_idx]))); + + if (cur_idx == get_n_tokens()) { + break; + } + + cur_seq_set = seq_set[cur_idx]; + } + + return ubatch_add(idxs, 1, true); +} + void llama_batch_allocr::clear() { n_outputs = 0; batch = {}; - pos.clear(); - n_seq_id.clear(); - seq_id.clear(); - output.clear(); + + pos .clear(); + n_seq_id .clear(); + seq_id .clear(); + seq_id_unq.clear(); + output .clear(); for (auto & cur : seq_pos) { cur.clear(); @@ -567,6 +594,177 @@ void llama_batch_allocr::clear() { for (auto & cur : seq_cpl) { std::fill(cur.begin(), cur.end(), false); } + + seq_set.clear(); + + seq_set_map.clear(); + + std::fill(seq_idx.begin(), seq_idx.end(), -1); +} + +llama_ubatch llama_batch_allocr::ubatch_add(const std::vector & idxs, uint32_t n_seqs, bool equal_seqs) { + const uint32_t n_tokens = idxs.size(); + + assert(n_tokens%n_seqs == 0); + + ubatches.emplace_back(); + + auto & ubatch = ubatches.back(); + + const int32_t n_pos_cur = batch.embd ? n_pos_per_embd : 1; + + const int64_t n_embd_all = batch.embd ? (int64_t) n_tokens*n_embd : 0; + const int64_t n_pos_all = (int64_t) n_tokens*n_pos_cur; + + ubatch.token .resize(n_tokens); + ubatch.embd .resize(n_embd_all); + ubatch.pos .resize(n_pos_all); + ubatch.n_seq_id .resize(n_tokens); + ubatch.seq_id .resize(n_tokens); + ubatch.seq_id_unq.resize(0); + ubatch.seq_idx .resize(LLAMA_MAX_SEQ, -1); + ubatch.output .resize(n_tokens); + + seq_set_t seq_set_unq; + + for (size_t i = 0; i < idxs.size(); ++i) { + if (batch.token) { + ubatch.token[i] = batch.token[idxs[i]]; + } + + if (batch.embd) { + memcpy(ubatch.embd.data() + i*n_embd, batch.embd + (int64_t) idxs[i]*n_embd, n_embd*sizeof(float)); + } + + for (int j = 0; j < n_pos_cur; ++j) { + ubatch.pos[j*n_tokens + i] = batch.pos[j*batch.n_tokens + idxs[i]]; + } + + ubatch.n_seq_id[i] = batch.n_seq_id[idxs[i]]; + ubatch.seq_id[i] = batch.seq_id[idxs[i]]; + ubatch.output[i] = batch.logits[idxs[i]]; + + for (int s = 0; s < ubatch.n_seq_id[i]; ++s) { + seq_set_unq.set(ubatch.seq_id[i][s]); + } + + if (ubatch.output[i]) { + out_ids.push_back(idxs[i]); + } + } + + for (int32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { + if (seq_set_unq.test(s)) { + ubatch.seq_idx[s] = ubatch.seq_id_unq.size(); + ubatch.seq_id_unq.push_back(s); + } + } + + llama_ubatch res { + /*.equal_seqs =*/ equal_seqs, + /*.n_tokens =*/ n_tokens, + /*.n_seq_tokens =*/ n_tokens/n_seqs, + /*.n_seqs =*/ n_seqs, + /*.n_seqs_unq =*/ (uint32_t) ubatch.seq_id_unq.size(), + + /*.token =*/ batch.token ? ubatch.token.data() : nullptr, + /*.embd =*/ batch.embd ? ubatch.embd.data() : nullptr, + /*.pos =*/ ubatch.pos.data(), + /*.n_seq_id =*/ ubatch.n_seq_id.data(), + /*.seq_id =*/ ubatch.seq_id.data(), + /*.seq_id_unq =*/ ubatch.seq_id_unq.data(), + /*.seq_idx =*/ ubatch.seq_idx.data(), + /*.output =*/ ubatch.output.data(), + }; + + if (debug > 0) { + LLAMA_LOG_DEBUG("%s: added ubatch %d to split:\n", __func__, (int) ubatches.size() - 1); + + ubatch_print(res, debug); + } + + return res; +} + +void llama_batch_allocr::ubatch_print(const llama_ubatch & ubatch, int debug) { + if (debug > 0) { + LLAMA_LOG_DEBUG("%s: equal_seqs = %d\n", __func__, ubatch.equal_seqs); + LLAMA_LOG_DEBUG("%s: n_tokens = %d\n", __func__, ubatch.n_tokens); + LLAMA_LOG_DEBUG("%s: n_seq_tokens = %d\n", __func__, ubatch.n_seq_tokens); + LLAMA_LOG_DEBUG("%s: n_seqs = %d\n", __func__, ubatch.n_seqs); + LLAMA_LOG_DEBUG("%s: n_seqs_unq = %d\n", __func__, ubatch.n_seqs_unq); + + std::stringstream ss_seq_id_unq; + std::stringstream ss_seq_idx; + + ss_seq_id_unq << "[ "; + ss_seq_idx << "["; + + for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) { + ss_seq_id_unq << ubatch.seq_id_unq[s] << " "; + } + + for (uint32_t s = 0; s < LLAMA_MAX_SEQ; ++s) { + if (ubatch.seq_idx[s] >= 0) { + ss_seq_idx << ubatch.seq_idx[s]%10; + } else { + ss_seq_idx << "."; + } + } + + ss_seq_id_unq << "]"; + ss_seq_idx << "]"; + + LLAMA_LOG_DEBUG("%s: token = %p\n", __func__, (void *) ubatch.token); + LLAMA_LOG_DEBUG("%s: embd = %p\n", __func__, (void *) ubatch.embd); + LLAMA_LOG_DEBUG("%s: pos = %p\n", __func__, (void *) ubatch.pos); + LLAMA_LOG_DEBUG("%s: n_seq_id = %p\n", __func__, (void *) ubatch.n_seq_id); + LLAMA_LOG_DEBUG("%s: seq_id = %p\n", __func__, (void *) ubatch.seq_id); + LLAMA_LOG_DEBUG("%s: seq_id_unq = %s\n", __func__, ss_seq_id_unq.str().c_str()); + LLAMA_LOG_DEBUG("%s: seq_idx = %s\n", __func__, ss_seq_idx.str().c_str()); + LLAMA_LOG_DEBUG("%s: output = %p\n", __func__, (void *) ubatch.output); + LLAMA_LOG_DEBUG("%s: n_outputs = %d\n", __func__, n_outputs); + + if (debug > 1) { + int seq_id_max = 0; + for (uint32_t i = 0; i < ubatch.n_tokens; ++i) { + for (int s = 0; s < ubatch.n_seq_id[i]; ++s) { + for (int s = 0; s < ubatch.n_seq_id[i]; ++s) { + seq_id_max = std::max(seq_id_max, ubatch.seq_id[i][s]); + } + } + } + ++seq_id_max; + + LLAMA_LOG_DEBUG("%s: token = [\n", __func__); + for (uint32_t i = 0; i < ubatch.n_tokens; ++i) { + std::vector seq_id(seq_id_max); + + for (int s = 0; s < ubatch.n_seq_id[i]; ++s) { + seq_id[ubatch.seq_id[i][s]] = 1; + } + + std::stringstream ss; + for (int s = 0; s < seq_id_max; ++s) { + if (seq_id[s]) { + ss << s%10; + } else { + ss << "."; + } + } + + if (ubatch.token) { + LLAMA_LOG_DEBUG("%s: %4d: id = %6d (%16s), pos = %4d, n_seq_id = %2d, seq_id = [%s], output = %d\n", + __func__, i, ubatch.token[i], vocab->token_to_piece(ubatch.token[i]).c_str(), + ubatch.pos[i], ubatch.n_seq_id[i], ss.str().c_str(), ubatch.output[i]); + } else { + LLAMA_LOG_DEBUG("%s: %4d: [embd], pos = %4d, n_seq_id = %2d, seq_id = [%s], output = %d\n", + __func__, i, ubatch.pos[i], ubatch.n_seq_id[i], ss.str().c_str(), ubatch.output[i]); + } + } + LLAMA_LOG_DEBUG("%s: ]\n", __func__); + } + } } // @@ -577,25 +775,25 @@ struct llama_batch llama_batch_get_one( llama_token * tokens, int32_t n_tokens) { return { - /*n_tokens =*/ n_tokens, - /*tokens =*/ tokens, - /*embd =*/ nullptr, - /*pos =*/ nullptr, - /*n_seq_id =*/ nullptr, - /*seq_id =*/ nullptr, - /*logits =*/ nullptr, + /*n_tokens =*/ n_tokens, + /*tokens =*/ tokens, + /*embd =*/ nullptr, + /*pos =*/ nullptr, + /*n_seq_id =*/ nullptr, + /*seq_id =*/ nullptr, + /*logits =*/ nullptr, }; } struct llama_batch llama_batch_init(int32_t n_tokens_alloc, int32_t embd, int32_t n_seq_max) { llama_batch batch = { - /*n_tokens =*/ 0, - /*tokens =*/ nullptr, - /*embd =*/ nullptr, - /*pos =*/ nullptr, - /*n_seq_id =*/ nullptr, - /*seq_id =*/ nullptr, - /*logits =*/ nullptr, + /*n_tokens =*/ 0, + /*tokens =*/ nullptr, + /*embd =*/ nullptr, + /*pos =*/ nullptr, + /*n_seq_id =*/ nullptr, + /*seq_id =*/ nullptr, + /*logits =*/ nullptr, }; if (embd) { diff --git a/src/llama-batch.h b/src/llama-batch.h index a555c157234be..d2c5376188a0b 100644 --- a/src/llama-batch.h +++ b/src/llama-batch.h @@ -2,86 +2,44 @@ #include "llama.h" +#include "llama-cparams.h" + #include #include #include +#include +#include -// very similar to llama_batch, -// but has more metadata about sequences +// keep this struct lightweight +// it points to data in `llama_batch_allocr` struct llama_ubatch { bool equal_seqs; // TODO: whole_seqs for embeddings? uint32_t n_tokens; // total tokens (n_seq_tokens * n_seqs) - uint32_t n_seq_tokens; // tokens per sequence - uint32_t n_seqs; - - llama_token * token; // [n_tokens] - float * embd; // [n_embd, n_tokens] - llama_pos * pos; // [n_tokens] - int32_t * n_seq_id; // [n_seqs] - llama_seq_id ** seq_id; // [n_seqs] - int8_t * output; // [n_tokens] -}; - -struct llama_sbatch_seq { - int32_t n_seq_id; - - llama_seq_id * seq_id; - - size_t offset; - size_t length; -}; - -// sequence-length-aware batch splitting -struct llama_sbatch { - // tokens left in this batch - size_t n_tokens; - - size_t n_embd; - - // sorted indices into the batch - std::vector ids; - // batch indices of the output - std::vector out_ids; - std::vector seq; - - const llama_batch * batch = nullptr; - - // buffers for the ubatches - // TODO: very hacky, this needs a complete rework - struct ubatch_data { - std::vector token; - std::vector embd; - std::vector pos; - std::vector n_seq_id; - std::vector seq_id; - std::vector output; - }; - - std::vector udatas; - - llama_ubatch reserve_ubatch(size_t n_ubatch, bool has_embd = false); - - void add_seq_to_ubatch(llama_ubatch & ubatch, llama_sbatch_seq & seq, size_t length); - - // simple split, unknown number of sequences of unequal lengths - llama_ubatch split_simple(size_t n_ubatch); - - // make batches of equal-length sequences - llama_ubatch split_equal(size_t n_ubatch); - - // sequence-wise split - llama_ubatch split_seq(size_t n_ubatch); - - llama_sbatch() = default; - llama_sbatch(const llama_batch & batch, size_t n_embd, bool simple_split = false); + uint32_t n_seq_tokens; // tokens per sequence set + uint32_t n_seqs; // sequence sets in the ubatch + uint32_t n_seqs_unq; // unique sequence ids in the ubatch + + // seq_id_unq: unique sequence ids in the ubatch + // seq_idx: indices of the unique sequence ids in the ubatch in [0, n_seqs_unq) + // used for extracting sequence pooled embeddings + + // // size | idx | val + llama_token * token; // [n_tokens] | i | id, token + float * embd; // [n_embd, n_tokens] | i | embd + llama_pos * pos; // [n_tokens] | i | pos + int32_t * n_seq_id; // [n_tokens] | i | - + llama_seq_id ** seq_id; // [n_tokens] | s | s0, s1, seq_id + llama_seq_id * seq_id_unq; // [n_seqs_unq] | s | seq_id + int32_t * seq_idx; // [LLAMA_MAX_SEQ] | - | seq_idx + int8_t * output; // [n_tokens] | i | - }; -// a helper for sanitizing and fulfilling a batch +// a helper for sanitizing, fulfilling and splitting a batch class llama_batch_allocr { public: - llama_batch_allocr(); + llama_batch_allocr(uint32_t n_pos_per_embd); // sanitize and auto-gen missing data in the input batch // memory is optional. if provided will be used to check for sequence continuity and to determine the positions @@ -89,20 +47,57 @@ class llama_batch_allocr { const llama_batch & batch_inp, const llama_vocab & vocab, const llama_memory_i * memory, - bool embd_all); + uint32_t n_embd, + bool output_all); const llama_batch & get_batch() const; + uint32_t get_n_tokens() const; uint32_t get_n_outputs() const; + // the array of output indices in the order they were encountered during the ubatch splitting + std::vector & get_out_ids(); + + // min/max positions of each sequence in the current ubatch llama_pos seq_pos_min(llama_seq_id seq_id) const; llama_pos seq_pos_max(llama_seq_id seq_id) const; + // call once before splitting the batch to reset the internal state + void split_reset(); + + // simple split, unknown number of sequence sets of unequal lengths + llama_ubatch split_simple(uint32_t n_ubatch); + + // make ubatches of equal-length sequences sets + llama_ubatch split_equal(uint32_t n_ubatch); + + // sequence-set-wise split - each ubatch contains a single sequence-set + llama_ubatch split_seq(uint32_t n_ubatch); + + // a helper method for creating a well-defined ubatch of tokens + // TODO: support embeddings if needed in the future + llama_ubatch ubatch_reserve(uint32_t n_seq_tokens, uint32_t n_seqs); + private: void clear(); + // create the next ubatch based on the provided batch indices (idxs) and the number of sequence sets (n_seqs) + // return llama_ubatch.n_tokens == 0 if the entire batch was consumed + llama_ubatch ubatch_add(const std::vector & idxs, uint32_t n_seqs, bool equal_seqs); + + // for debugging, start with LLAMA_BATCH_DEBUG=2 + void ubatch_print(const llama_ubatch & ubatch, int debug); + llama_batch batch; + // only for debugging purposes + const llama_vocab * vocab; + + // TODO: this is more of a temporary solution until we have a better way to handle multiple positions per token/embd + // ref: https://github.com/ggml-org/llama.cpp/issues/13694#issuecomment-2983871762 + const uint32_t n_pos_per_embd; + + uint32_t n_embd; uint32_t n_outputs; std::array seq_id_0 = { 0 }; // default sequence id @@ -110,10 +105,43 @@ class llama_batch_allocr { std::vector pos; std::vector n_seq_id; std::vector seq_id; + std::vector seq_id_unq; + std::vector seq_idx; std::vector output; - std::vector> seq_pos; // seq_pos[s]: the set of positions in sequence s - std::vector> seq_cpl; // seq_cpl[s0][s1]: if sequence s0 is coupled to sequence s1 + using pos_set_t = std::set; + using seq_cpl_t = std::vector; + + std::vector seq_pos; // seq_pos[s]: the set of positions in sequence s + std::vector seq_cpl; // seq_cpl[s0][s1]: if sequence s0 is coupled to sequence s1 + + using idx_vec_t = std::vector; + using seq_set_t = std::bitset; + + std::vector seq_set; // seq_set[i]: the sequence set of token i + + std::unordered_map seq_set_map; // the indices at which the sequence set appears + + // batch indices of the output + std::vector out_ids; + + // used[i] indicates if token i has already been used in a previous ubatch + std::vector used; + + // llama_ubatch points to this data: + struct ubatch { + std::vector token; + std::vector embd; + std::vector pos; + std::vector n_seq_id; + std::vector seq_id; + std::vector seq_id_unq; + std::vector seq_idx; + std::vector output; + }; + + // current splitting state: + std::vector ubatches; int debug; }; diff --git a/src/llama-context.cpp b/src/llama-context.cpp index f56a58e9b6ec6..5a18a4fb3939a 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -20,7 +20,7 @@ llama_context::llama_context( const llama_model & model, llama_context_params params) : model(model), - batch_allocr(std::make_unique()) { + balloc(std::make_unique(model.hparams.n_pos_per_embd())) { LLAMA_LOG_INFO("%s: constructing llama_context\n", __func__); t_start_us = model.t_start_us; @@ -722,22 +722,26 @@ llm_graph_result_ptr llama_context::process_ubatch(const llama_ubatch & ubatch, } int llama_context::encode(const llama_batch & batch_inp) { + GGML_ASSERT((!batch_inp.token && batch_inp.embd) || (batch_inp.token && !batch_inp.embd)); // NOLINT + if (batch_inp.n_tokens == 0) { LLAMA_LOG_ERROR("%s: n_tokens == 0\n", __func__); return -1; } + const auto & hparams = model.hparams; + + const int64_t n_embd = hparams.n_embd; + // note: during encode, we always pass the full sequence starting from pos = 0 - if (!batch_allocr->init(batch_inp, model.vocab, nullptr, true)) { + if (!balloc->init(batch_inp, model.vocab, nullptr, n_embd, true)) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); return -1; } - const llama_batch & batch = batch_allocr->get_batch(); + const uint32_t n_tokens = balloc->get_n_tokens(); - const uint32_t n_tokens = batch.n_tokens; - - GGML_ASSERT((!batch.token && batch.embd) || (batch.token && !batch.embd)); // NOLINT + const llama_ubatch ubatch = balloc->split_simple(n_tokens); // micro-batching is not possible for non-causal encoding, so we process the batch in a single shot GGML_ASSERT(cparams.n_ubatch >= n_tokens && "encoder requires n_ubatch >= n_tokens"); @@ -751,14 +755,6 @@ int llama_context::encode(const llama_batch & batch_inp) { n_queued_tokens += n_tokens; - const auto & hparams = model.hparams; - - const int64_t n_embd = hparams.n_embd; - - llama_sbatch sbatch = llama_sbatch(batch, n_embd, /* simple_split */ true); - - const llama_ubatch ubatch = sbatch.split_simple(n_tokens); - // reserve output buffer if (output_reserve(n_tokens) < n_tokens) { LLAMA_LOG_ERROR("%s: could not reserve space for batch with %u outputs\n", __func__, n_tokens); @@ -817,34 +813,28 @@ int llama_context::encode(const llama_batch & batch_inp) { { // extract sequence embeddings auto & embd_seq_out = embd_seq; - embd_seq_out.clear(); - GGML_ASSERT(!ubatch.equal_seqs); // TODO: handle equal splits + for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) { + const llama_seq_id seq_id = ubatch.seq_id_unq[s]; + const int32_t seq_idx = ubatch.seq_idx[seq_id]; - // TODO: fix indexing [UBATCH_IDX] - for (uint32_t i = 0; i < n_tokens; i++) { - const llama_seq_id seq_id = ubatch.seq_id[i][0]; - if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { - continue; - } embd_seq_out[seq_id].resize(n_embd); - ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_embd*seq_id)*sizeof(float), n_embd*sizeof(float)); + ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_embd*seq_idx)*sizeof(float), n_embd*sizeof(float)); } } break; case LLAMA_POOLING_TYPE_RANK: { // extract the rerank score - n_cls_out floats per sequence auto & embd_seq_out = embd_seq; + const uint32_t n_cls_out = hparams.n_cls_out; - // TODO: fix indexing [UBATCH_IDX] - for (uint32_t s = 0; s < ubatch.n_seqs; ++s) { - const llama_seq_id seq_id = ubatch.seq_id[s][0]; - if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { - continue; - } + for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) { + const llama_seq_id seq_id = ubatch.seq_id_unq[s]; + const int32_t seq_idx = ubatch.seq_idx[seq_id]; + embd_seq_out[seq_id].resize(n_cls_out); - ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_cls_out*seq_id)*sizeof(float), n_cls_out*sizeof(float)); + ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_cls_out*seq_idx)*sizeof(float), n_cls_out*sizeof(float)); } } break; case LLAMA_POOLING_TYPE_UNSPECIFIED: @@ -869,12 +859,16 @@ int llama_context::encode(const llama_batch & batch_inp) { cross.v_embd.resize(cross.n_embd*cross.n_enc); memcpy(cross.v_embd.data(), embd, ggml_nbytes(t_embd)); + const auto & batch = balloc->get_batch(); + // remember the sequence ids used during the encoding - needed for cross attention later cross.seq_ids_enc.resize(n_tokens); for (uint32_t i = 0; i < n_tokens; i++) { cross.seq_ids_enc[i].clear(); + for (int s = 0; s < batch.n_seq_id[i]; s++) { - llama_seq_id seq_id = batch.seq_id[i][s]; + const llama_seq_id seq_id = batch.seq_id[i][s]; + cross.seq_ids_enc[i].insert(seq_id); } } @@ -884,6 +878,8 @@ int llama_context::encode(const llama_batch & batch_inp) { } int llama_context::decode(const llama_batch & batch_inp) { + GGML_ASSERT((!batch_inp.token && batch_inp.embd) || (batch_inp.token && !batch_inp.embd)); // NOLINT + if (!memory) { LLAMA_LOG_DEBUG("%s: cannot decode batches with this context (calling encode() instead)\n", __func__); return encode(batch_inp); @@ -894,29 +890,24 @@ int llama_context::decode(const llama_batch & batch_inp) { return -1; } - // when computing embeddings, all tokens are output - const bool embd_all = cparams.embeddings; - - if (!batch_allocr->init(batch_inp, model.vocab, memory.get(), embd_all)) { - LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); - return -1; - } - - const llama_batch & batch = batch_allocr->get_batch(); - const auto & vocab = model.vocab; const auto & hparams = model.hparams; const int32_t n_vocab = vocab.n_tokens(); const int64_t n_embd = hparams.n_embd; - const uint32_t n_tokens_all = batch.n_tokens; + // when computing embeddings, all tokens are output + const bool output_all = cparams.embeddings; - GGML_ASSERT((!batch.token && batch.embd) || (batch.token && !batch.embd)); // NOLINT + if (!balloc->init(batch_inp, vocab, memory.get(), n_embd, output_all)) { + LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); + return -1; + } - const uint32_t n_outputs_all = batch_allocr->get_n_outputs(); + const uint32_t n_tokens_all = balloc->get_n_tokens(); + const uint32_t n_outputs_all = balloc->get_n_outputs(); - if (embd_all) { + if (output_all) { // require that all tokens are output if (n_outputs_all != n_tokens_all) { LLAMA_LOG_ERROR("%s: pooled embedding requires that all tokens are output (n_outputs_all = %d, n_tokens_all = %d)\n", @@ -945,7 +936,7 @@ int llama_context::decode(const llama_batch & batch_inp) { llama_memory_state_ptr mstate; while (true) { - mstate = memory->init_batch(batch, cparams.n_ubatch, embd_all); + mstate = memory->init_batch(*balloc, cparams.n_ubatch, output_all); if (!mstate) { return -2; } @@ -966,19 +957,19 @@ int llama_context::decode(const llama_batch & batch_inp) { did_optimize = true; if (kv_self_update(true)) { - LLAMA_LOG_DEBUG("%s: retrying batch size %d after cache optimization\n", __func__, batch.n_tokens); + LLAMA_LOG_DEBUG("%s: retrying batch size %d after cache optimization\n", __func__, balloc->get_n_tokens()); continue; } } - LLAMA_LOG_WARN("%s: failed to find a memory slot for batch of size %d\n", __func__, batch.n_tokens); + LLAMA_LOG_WARN("%s: failed to find a memory slot for batch of size %d\n", __func__, balloc->get_n_tokens()); return 1; } case LLAMA_MEMORY_STATUS_FAILED_COMPUTE: { - LLAMA_LOG_ERROR("%s: compute failed while preparing batch of size %d\n", __func__, batch.n_tokens); + LLAMA_LOG_ERROR("%s: compute failed while preparing batch of size %d\n", __func__, balloc->get_n_tokens()); return -2; } @@ -1005,7 +996,6 @@ int llama_context::decode(const llama_batch & batch_inp) { if (n_outputs_all == n_tokens_all) { n_outputs_new = ubatch.n_tokens; } else { - GGML_ASSERT(ubatch.output); for (uint32_t i = 0; i < ubatch.n_tokens; i++) { n_outputs_new += (int32_t) (ubatch.output[i] != 0); } @@ -1105,27 +1095,27 @@ int llama_context::decode(const llama_batch & batch_inp) { // extract sequence embeddings (cleared before processing each batch) auto & embd_seq_out = embd_seq; - for (uint32_t s = 0; s < ubatch.n_seqs; ++s) { - const llama_seq_id seq_id = ubatch.seq_id[s][0]; - if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { - continue; - } + for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) { + const llama_seq_id seq_id = ubatch.seq_id_unq[s]; + const int32_t seq_idx = ubatch.seq_idx[seq_id]; + embd_seq_out[seq_id].resize(n_embd); - ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_embd*seq_id)*sizeof(float), n_embd*sizeof(float)); + ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_embd*seq_idx)*sizeof(float), n_embd*sizeof(float)); } } break; case LLAMA_POOLING_TYPE_RANK: { - // extract the rerank score - a single float per sequence + // extract the rerank score - n_cls_out floats per sequence auto & embd_seq_out = embd_seq; - for (uint32_t s = 0; s < ubatch.n_seqs; ++s) { - const llama_seq_id seq_id = ubatch.seq_id[s][0]; - if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { - continue; - } - embd_seq_out[seq_id].resize(1); - ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (seq_id)*sizeof(float), sizeof(float)); + const uint32_t n_cls_out = hparams.n_cls_out; + + for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) { + const llama_seq_id seq_id = ubatch.seq_id_unq[s]; + const int32_t seq_idx = ubatch.seq_idx[seq_id]; + + embd_seq_out[seq_id].resize(n_cls_out); + ggml_backend_tensor_get_async(backend_embd, t_embd, embd_seq_out[seq_id].data(), (n_cls_out*seq_idx)*sizeof(float), n_cls_out*sizeof(float)); } } break; case LLAMA_POOLING_TYPE_UNSPECIFIED: @@ -1145,7 +1135,7 @@ int llama_context::decode(const llama_batch & batch_inp) { if (n_outputs > 0) { bool sorted_output = true; - auto & out_ids = mstate->out_ids(); + auto & out_ids = balloc->get_out_ids(); GGML_ASSERT(out_ids.size() == (size_t) n_outputs); @@ -1318,8 +1308,8 @@ ggml_cgraph * llama_context::graph_reserve(uint32_t n_tokens, uint32_t n_seqs, u this->n_outputs = n_outputs; - llama_token token = model.vocab.token_bos(); // not actually used by llama_build_graph, but required to choose between token and embedding inputs graph - llama_ubatch ubatch = { true, n_tokens, n_tokens / n_seqs, n_seqs, &token, nullptr, nullptr, nullptr, nullptr, nullptr}; + llama_batch_allocr balloc(model.hparams.n_pos_per_embd()); + llama_ubatch ubatch = balloc.ubatch_reserve(n_tokens/n_seqs, n_seqs); auto * gf = graph_init(); auto res = graph_build(ctx_compute.get(), gf, ubatch, LLM_GRAPH_TYPE_DEFAULT, mstate); @@ -2039,7 +2029,12 @@ void llama_context::opt_epoch_iter( batch.logits [pos_batch] = true; } - const auto n_tokens_all = batch.n_tokens; + if (!balloc->init(batch, model.vocab, nullptr, model.hparams.n_embd, true)) { + LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); + return; + } + + const uint32_t n_tokens_all = balloc->get_n_tokens(); n_queued_tokens += n_tokens_all; @@ -2047,7 +2042,7 @@ void llama_context::opt_epoch_iter( uint32_t n_outputs_all = n_tokens_all; - auto mstate = memory->init_batch(batch, cparams.n_ubatch, true); + auto mstate = memory->init_batch(*balloc, cparams.n_ubatch, true); if (!mstate || mstate->get_status() != LLAMA_MEMORY_STATUS_SUCCESS) { LLAMA_LOG_ERROR("%s: could not initialize batch\n", __func__); break; diff --git a/src/llama-context.h b/src/llama-context.h index 040f03ae42e65..7d300c14572e9 100644 --- a/src/llama-context.h +++ b/src/llama-context.h @@ -247,7 +247,7 @@ struct llama_context { std::map> embd_seq; // reuse the batch_allocr to avoid unnecessary memory allocations - std::unique_ptr batch_allocr; + std::unique_ptr balloc; uint32_t n_outputs = 0; // number of actually-used outputs in the current ubatch or last logical batch diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 65d98cbbb3987..083366fd68d07 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -130,110 +130,97 @@ void llm_graph_input_mean::set_input(const llama_ubatch * ubatch) { if (cparams.embeddings && cparams.pooling_type == LLAMA_POOLING_TYPE_MEAN) { const int64_t n_tokens = ubatch->n_tokens; const int64_t n_seq_tokens = ubatch->n_seq_tokens; - const int64_t n_seqs = ubatch->n_seqs; + const int64_t n_seqs_unq = ubatch->n_seqs_unq; GGML_ASSERT(mean); GGML_ASSERT(ggml_backend_buffer_is_host(mean->buffer)); float * data = (float *) mean->data; - memset(mean->data, 0, n_tokens * n_tokens * ggml_element_size(mean)); + memset(mean->data, 0, n_tokens*n_seqs_unq*ggml_element_size(mean)); - std::vector sum(n_tokens, 0); + std::vector sums(n_seqs_unq, 0); + for (int i = 0; i < n_tokens; i += n_seq_tokens) { + for (int s = 0; s < ubatch->n_seq_id[i]; ++s) { + const llama_seq_id seq_id = ubatch->seq_id[i][s]; + const int32_t seq_idx = ubatch->seq_idx[seq_id]; - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < n_seqs; ++s) { - const llama_seq_id seq_id = ubatch->seq_id[s][0]; - - // TODO: adapt limits to n_seqs when ubatch->equal_seqs is true - GGML_ASSERT(seq_id < n_tokens && "seq_id cannot be larger than n_tokens with pooling_type == MEAN"); - - sum[seq_id] += ubatch->n_seq_tokens; + sums[seq_idx] += ubatch->n_seq_tokens; + } } - std::vector div(n_tokens, 0.0f); - for (int i = 0; i < n_tokens; ++i) { - const uint64_t s = sum[i]; - if (s > 0) { - div[i] = 1.0f/float(s); + std::vector div(n_seqs_unq, 0.0f); + for (int s = 0; s < n_seqs_unq; ++s) { + const uint64_t sum = sums[s]; + if (sum > 0) { + div[s] = 1.0f/float(sum); } } - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < n_seqs; ++s) { - const llama_seq_id seq_id = ubatch->seq_id[s][0]; + for (int i = 0; i < n_tokens; i += n_seq_tokens) { + for (int s = 0; s < ubatch->n_seq_id[i]; ++s) { + const llama_seq_id seq_id = ubatch->seq_id[i][s]; + const int32_t seq_idx = ubatch->seq_idx[seq_id]; - for (int i = 0; i < n_seq_tokens; ++i) { - data[seq_id*n_tokens + s*n_seq_tokens + i] = div[seq_id]; + for (int j = 0; j < n_seq_tokens; ++j) { + data[seq_idx*n_tokens + i + j] = div[seq_idx]; + } } } } } void llm_graph_input_cls::set_input(const llama_ubatch * ubatch) { - if (cparams.embeddings && ( - cparams.pooling_type == LLAMA_POOLING_TYPE_CLS || - cparams.pooling_type == LLAMA_POOLING_TYPE_RANK)) { - const int64_t n_tokens = ubatch->n_tokens; - const int64_t n_seq_tokens = ubatch->n_seq_tokens; - const int64_t n_seqs = ubatch->n_seqs; + const int64_t n_tokens = ubatch->n_tokens; + const int64_t n_seq_tokens = ubatch->n_seq_tokens; + const int64_t n_seqs_unq = ubatch->n_seqs_unq; + if (cparams.embeddings && ( + cparams.pooling_type == LLAMA_POOLING_TYPE_CLS || + cparams.pooling_type == LLAMA_POOLING_TYPE_RANK + )) { GGML_ASSERT(cls); GGML_ASSERT(ggml_backend_buffer_is_host(cls->buffer)); uint32_t * data = (uint32_t *) cls->data; - memset(cls->data, 0, n_tokens * ggml_element_size(cls)); + memset(cls->data, 0, n_seqs_unq*ggml_element_size(cls)); - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < n_seqs; ++s) { - const llama_seq_id seq_id = ubatch->seq_id[s][0]; + for (int i = 0; i < n_tokens; i += n_seq_tokens) { + for (int s = 0; s < ubatch->n_seq_id[i]; ++s) { + const llama_seq_id seq_id = ubatch->seq_id[i][s]; + const int32_t seq_idx = ubatch->seq_idx[seq_id]; - // TODO: adapt limits to n_seqs when ubatch->equal_seqs is true - GGML_ASSERT(seq_id < n_tokens && "seq_id cannot be larger than n_tokens with pooling_type == CLS or RANK"); - - for (int i = 0; i < n_seq_tokens; ++i) { - const llama_pos pos = ubatch->pos[s*n_seq_tokens + i]; - - if (pos == 0) { - data[seq_id] = s*n_seq_tokens + i; - } + data[seq_idx] = i; } } } if (cparams.embeddings && cparams.pooling_type == LLAMA_POOLING_TYPE_LAST) { - const int64_t n_tokens = ubatch->n_tokens; - const int64_t n_seq_tokens = ubatch->n_seq_tokens; - const int64_t n_seqs = ubatch->n_seqs; - GGML_ASSERT(cls); GGML_ASSERT(ggml_backend_buffer_is_host(cls->buffer)); uint32_t * data = (uint32_t *) cls->data; - memset(cls->data, 0, n_tokens * ggml_element_size(cls)); + memset(cls->data, 0, n_seqs_unq*ggml_element_size(cls)); - std::vector last_pos(n_tokens, -1); - std::vector last_row(n_tokens, -1); + std::vector last_pos(n_seqs_unq, -1); + std::vector last_row(n_seqs_unq, -1); - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < n_seqs; ++s) { - const llama_seq_id seq_id = ubatch->seq_id[s][0]; - - // TODO: adapt limits to n_seqs when ubatch->equal_seqs is true - GGML_ASSERT(seq_id < n_tokens && "seq_id cannot be larger than n_tokens with pooling_type == LAST"); + for (int i = 0; i < n_tokens; ++i) { + const llama_pos pos = ubatch->pos[i]; - for (int i = 0; i < n_seq_tokens; ++i) { - const llama_pos pos = ubatch->pos[s*n_seq_tokens + i]; + for (int s = 0; s < ubatch->n_seq_id[i]; ++s) { + const llama_seq_id seq_id = ubatch->seq_id[i][s]; + const int32_t seq_idx = ubatch->seq_idx[seq_id]; - if (pos >= last_pos[seq_id]) { - last_pos[seq_id] = pos; - last_row[seq_id] = s*n_seq_tokens + i; + if (pos >= last_pos[seq_idx]) { + last_pos[seq_idx] = pos; + last_row[seq_idx] = i; } } } - for (int i = 0; i < n_tokens; ++i) { - if (last_row[i] >= 0) { - data[i] = last_row[i]; + for (int s = 0; s < n_seqs_unq; ++s) { + if (last_row[s] >= 0) { + data[s] = last_row[s]; } } } @@ -266,89 +253,36 @@ void llm_graph_input_cross_embd::set_input(const llama_ubatch * ubatch) { } void llm_graph_input_attn_no_cache::set_input(const llama_ubatch * ubatch) { - if (kq_mask) { - if (cparams.causal_attn) { - const int64_t n_kv = ubatch->n_tokens; - const int64_t n_tokens = ubatch->n_tokens; - const int64_t n_seq_tokens = ubatch->n_seq_tokens; - const int64_t n_seqs = ubatch->n_seqs; - - GGML_ASSERT(ggml_backend_buffer_is_host(kq_mask->buffer)); - float * data = (float *) kq_mask->data; - - for (int h = 0; h < 1; ++h) { - for (int s1 = 0; s1 < n_seqs; ++s1) { - const llama_seq_id seq_id = ubatch->seq_id[s1][0]; - - for (int j = 0; j < n_seq_tokens; ++j) { - const int32_t tj = s1*n_seq_tokens + j; - - for (int s0 = 0; s0 < n_seqs; ++s0) { - for (int i = 0; i < n_seq_tokens; ++i) { - const int32_t ti = s0*n_seq_tokens + i; - float f = -INFINITY; - - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < ubatch->n_seq_id[s0]; ++s) { - if (ubatch->seq_id[s0][s] == seq_id && ubatch->pos[ti] <= ubatch->pos[tj]) { - if (hparams.use_alibi) { - f = -std::abs(ubatch->pos[ti] - ubatch->pos[tj]); - } else { - f = 0.0f; - } - break; - } - } - - data[h*(n_kv*n_tokens) + tj*n_kv + ti] = f; - } - } - } - } - } - } else { - const int64_t n_tokens = ubatch->n_tokens; - const int64_t n_seq_tokens = ubatch->n_seq_tokens; - const int64_t n_seqs = ubatch->n_seqs; - const int64_t n_stride = ubatch->n_tokens; - - GGML_ASSERT(ggml_backend_buffer_is_host(kq_mask->buffer)); - - float * data = (float *) kq_mask->data; - - for (int h = 0; h < 1; ++h) { - for (int s1 = 0; s1 < n_seqs; ++s1) { - const llama_seq_id seq_id = ubatch->seq_id[s1][0]; - - for (int j = 0; j < n_seq_tokens; ++j) { - const int32_t tj = s1*n_seq_tokens + j; - - for (int s0 = 0; s0 < n_seqs; ++s0) { - for (int i = 0; i < n_seq_tokens; ++i) { - const int32_t ti = s0*n_seq_tokens + i; - float f = -INFINITY; - - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < ubatch->n_seq_id[s0]; ++s) { - if (ubatch->seq_id[s0][s] == seq_id) { - if (hparams.use_alibi) { - f = -std::abs(ubatch->pos[ti] - ubatch->pos[tj]); - } else { - f = 0.0f; - } - break; - } - } - - data[h*(n_tokens*n_tokens) + tj*n_stride + ti] = f; - } - } + const int64_t n_kv = ubatch->n_tokens; + const int64_t n_tokens = ubatch->n_tokens; + + GGML_ASSERT(kq_mask); + GGML_ASSERT(ggml_backend_buffer_is_host(kq_mask->buffer)); + + float * data = (float *) kq_mask->data; + + for (int h = 0; h < 1; ++h) { + for (int i1 = 0; i1 < n_tokens; ++i1) { + const llama_seq_id s1 = ubatch->seq_id[i1][0]; + + for (int i0 = 0; i0 < n_tokens; ++i0) { + float f = -INFINITY; + + for (int s = 0; s < ubatch->n_seq_id[i0]; ++s) { + const llama_seq_id s0 = ubatch->seq_id[i0][0]; - for (int i = n_tokens; i < n_stride; ++i) { - data[h*(n_tokens*n_tokens) + tj*n_stride + i] = -INFINITY; + // TODO: reimplement this like in llama_kv_cache_unified + 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]); + } else { + f = 0.0f; } + break; } } + + data[h*(n_kv*n_tokens) + i1*n_kv + i0] = f; } } } @@ -371,34 +305,36 @@ void llm_graph_input_attn_kv_unified_iswa::set_input(const llama_ubatch * ubatch } void llm_graph_input_attn_cross::set_input(const llama_ubatch * ubatch) { - if (cross_kq_mask) { - const int64_t n_enc = cross_kq_mask->ne[0]; - const int64_t n_tokens = ubatch->n_tokens; + GGML_ASSERT(cross_kq_mask); - GGML_ASSERT(ggml_backend_buffer_is_host(cross_kq_mask->buffer)); - GGML_ASSERT(!ubatch->equal_seqs); // TODO: use ubatch->n_seqs instead of failing + const int64_t n_enc = cross_kq_mask->ne[0]; + const int64_t n_tokens = ubatch->n_tokens; - float * data = (float *) cross_kq_mask->data; + GGML_ASSERT(ggml_backend_buffer_is_host(cross_kq_mask->buffer)); + GGML_ASSERT(!ubatch->equal_seqs); // TODO: use ubatch->n_seqs instead of failing - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - for (int i = 0; i < n_enc; ++i) { - float f = -INFINITY; - // TODO: fix indexing [UBATCH_IDX] - for (int s = 0; s < ubatch->n_seq_id[j]; ++s) { - const llama_seq_id seq_id = ubatch->seq_id[j][s]; - if (cross->seq_ids_enc[i].find(seq_id) != cross->seq_ids_enc[i].end()) { - f = 0.0f; - } + float * data = (float *) cross_kq_mask->data; + + for (int h = 0; h < 1; ++h) { + for (int i = 0; i < n_tokens; ++i) { + for (int j = 0; j < n_enc; ++j) { + float f = -INFINITY; + + for (int s = 0; s < ubatch->n_seq_id[i]; ++s) { + const llama_seq_id seq_id = ubatch->seq_id[i][s]; + + if (cross->seq_ids_enc[j].find(seq_id) != cross->seq_ids_enc[j].end()) { + f = 0.0f; } - data[h*(n_enc*n_tokens) + j*n_enc + i] = f; } + + data[h*(n_enc*n_tokens) + i*n_enc + j] = f; } + } - for (int i = n_tokens; i < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++i) { - for (int j = 0; j < n_enc; ++j) { - data[h*(n_enc*n_tokens) + i*n_enc + j] = -INFINITY; - } + for (int i = n_tokens; i < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++i) { + for (int j = 0; j < n_enc; ++j) { + data[h*(n_enc*n_tokens) + i*n_enc + j] = -INFINITY; } } } @@ -467,10 +403,6 @@ llm_graph_context::llm_graph_context(const llm_graph_params & params) : res (std::make_unique()) { } -int64_t llm_graph_context::n_pos_per_embd() const { - return hparams.rope_type == LLAMA_ROPE_TYPE_MROPE ? 4 : 1; -} - void llm_graph_context::cb(ggml_tensor * cur, const char * name, int il) const { if (cb_func) { cb_func(ubatch, cur, name, il); @@ -915,11 +847,11 @@ ggml_tensor * llm_graph_context::build_inp_embd(ggml_tensor * tok_embd) const { } ggml_tensor * llm_graph_context::build_inp_pos() const { - auto inp = std::make_unique(n_pos_per_embd()); + auto inp = std::make_unique(hparams.n_pos_per_embd()); auto & cur = inp->pos; - cur = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens*n_pos_per_embd()); + cur = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, (int64_t)n_tokens*hparams.n_pos_per_embd()); ggml_set_input(cur); res->add_input(std::move(inp)); @@ -959,7 +891,7 @@ ggml_tensor * llm_graph_context::build_inp_mean() const { auto & cur = inp->mean; - cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_tokens, n_tokens); + cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_tokens, ubatch.n_seqs_unq); ggml_set_input(cur); res->add_input(std::move(inp)); @@ -972,7 +904,7 @@ ggml_tensor * llm_graph_context::build_inp_cls() const { auto & cur = inp->cls; - cur = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cur = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, ubatch.n_seqs_unq); ggml_set_input(cur); res->add_input(std::move(inp)); diff --git a/src/llama-graph.h b/src/llama-graph.h index 58845e284abed..9e62fa60720d7 100644 --- a/src/llama-graph.h +++ b/src/llama-graph.h @@ -95,14 +95,14 @@ class llm_graph_input_embd : public llm_graph_input_i { class llm_graph_input_pos : public llm_graph_input_i { public: - llm_graph_input_pos(int64_t n_pos_per_embd) : n_pos_per_embd(n_pos_per_embd) {} + llm_graph_input_pos(uint32_t n_pos_per_embd) : n_pos_per_embd(n_pos_per_embd) {} virtual ~llm_graph_input_pos() = default; void set_input(const llama_ubatch * ubatch) override; ggml_tensor * pos = nullptr; // I32 [n_batch] - const int64_t n_pos_per_embd = 1; + const uint32_t n_pos_per_embd = 1; }; // temperature tuning, used by llama4 @@ -464,8 +464,6 @@ struct llm_graph_context { llm_graph_context(const llm_graph_params & params); - int64_t n_pos_per_embd() const; - void cb(ggml_tensor * cur, const char * name, int il) const; // diff --git a/src/llama-hparams.cpp b/src/llama-hparams.cpp index b40566ced99ee..bba7a12dc5496 100644 --- a/src/llama-hparams.cpp +++ b/src/llama-hparams.cpp @@ -90,6 +90,10 @@ bool llama_hparams::is_recurrent(uint32_t il) const { return recurrent_layer_arr[il]; } +uint32_t llama_hparams::n_pos_per_embd() const { + return rope_type == LLAMA_ROPE_TYPE_MROPE ? 4 : 1; +} + bool llama_hparams::is_swa(uint32_t il) const { if (il < n_layer) { return swa_layers[il]; diff --git a/src/llama-hparams.h b/src/llama-hparams.h index 82bb5b6084946..7b315a9a74b1d 100644 --- a/src/llama-hparams.h +++ b/src/llama-hparams.h @@ -192,6 +192,8 @@ struct llama_hparams { // whether or not the given layer is recurrent (for hybrid models) bool is_recurrent(uint32_t il) const; + uint32_t n_pos_per_embd() const; + bool is_swa(uint32_t il) const; }; diff --git a/src/llama-kv-cache-unified-iswa.cpp b/src/llama-kv-cache-unified-iswa.cpp index a869b1de8c2a3..0ced340dec6c5 100644 --- a/src/llama-kv-cache-unified-iswa.cpp +++ b/src/llama-kv-cache-unified-iswa.cpp @@ -95,19 +95,22 @@ llama_pos llama_kv_cache_unified_iswa::seq_pos_max(llama_seq_id seq_id) const { return kv_swa->seq_pos_max(seq_id); } -llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_all) { +llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { GGML_UNUSED(embd_all); // first try simple split do { - auto sbatch = llama_sbatch(batch, hparams.n_embd, true); + balloc.split_reset(); std::vector ubatches; + while (true) { + auto ubatch = balloc.split_simple(n_ubatch); - while (sbatch.n_tokens > 0) { - auto ubatch = sbatch.split_simple(n_ubatch); + if (ubatch.n_tokens == 0) { + break; + } - ubatches.push_back(ubatch); + ubatches.push_back(std::move(ubatch)); // NOLINT } auto heads_base = kv_base->prepare(ubatches); @@ -123,19 +126,22 @@ llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch assert(heads_base.size() == heads_swa.size()); return std::make_unique( - this, std::move(sbatch), std::move(heads_base), std::move(heads_swa), std::move(ubatches)); + this, std::move(heads_base), std::move(heads_swa), std::move(ubatches)); } while (false); // if it fails, try equal split do { - auto sbatch = llama_sbatch(batch, hparams.n_embd, false); + balloc.split_reset(); std::vector ubatches; + while (true) { + auto ubatch = balloc.split_equal(n_ubatch); - while (sbatch.n_tokens > 0) { - auto ubatch = sbatch.split_equal(n_ubatch); + if (ubatch.n_tokens == 0) { + break; + } - ubatches.push_back(ubatch); + ubatches.push_back(std::move(ubatch)); // NOLINT } auto heads_base = kv_base->prepare(ubatches); @@ -151,7 +157,7 @@ llama_memory_state_ptr llama_kv_cache_unified_iswa::init_batch(const llama_batch assert(heads_base.size() == heads_swa.size()); return std::make_unique( - this, std::move(sbatch), std::move(heads_base), std::move(heads_swa), std::move(ubatches)); + this, std::move(heads_base), std::move(heads_swa), std::move(ubatches)); } while (false); // TODO: if we fail again, we should attempt different splitting strategies @@ -214,15 +220,13 @@ llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state( llama_kv_cache_unified_iswa_state::llama_kv_cache_unified_iswa_state( llama_kv_cache_unified_iswa * kv, - llama_sbatch sbatch, std::vector heads_base, std::vector heads_swa, std::vector ubatches) : - sbatch(std::move(sbatch)), ubatches(std::move(ubatches)), // note: here we copy the ubatches. not sure if this is ideal - state_base(new llama_kv_cache_unified_state(kv->get_base(), {}, std::move(heads_base), this->ubatches)), - state_swa (new llama_kv_cache_unified_state(kv->get_swa (), {}, std::move(heads_swa), this->ubatches)), + state_base(new llama_kv_cache_unified_state(kv->get_base(), std::move(heads_base), this->ubatches)), + state_swa (new llama_kv_cache_unified_state(kv->get_swa (), std::move(heads_swa), this->ubatches)), status(llama_memory_status_combine(state_base->get_status(), state_swa->get_status())) { } @@ -252,12 +256,6 @@ bool llama_kv_cache_unified_iswa_state::apply() { return res; } -std::vector & llama_kv_cache_unified_iswa_state::out_ids() { - assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - - return sbatch.out_ids; -} - llama_memory_status llama_kv_cache_unified_iswa_state::get_status() const { return status; } diff --git a/src/llama-kv-cache-unified-iswa.h b/src/llama-kv-cache-unified-iswa.h index 813eaf39b25b0..071041585db38 100644 --- a/src/llama-kv-cache-unified-iswa.h +++ b/src/llama-kv-cache-unified-iswa.h @@ -32,7 +32,7 @@ class llama_kv_cache_unified_iswa : public llama_memory_i { // llama_memory_state_ptr init_batch( - const llama_batch & batch, + llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) override; @@ -90,7 +90,6 @@ class llama_kv_cache_unified_iswa_state : public llama_memory_state_i { // used to create a state from a batch llama_kv_cache_unified_iswa_state( llama_kv_cache_unified_iswa * kv, - llama_sbatch sbatch, std::vector heads_base, std::vector heads_swa, std::vector ubatches); @@ -104,8 +103,6 @@ class llama_kv_cache_unified_iswa_state : public llama_memory_state_i { bool next() override; bool apply() override; - std::vector & out_ids() override; - llama_memory_status get_status() const override; const llama_ubatch & get_ubatch() const override; @@ -119,8 +116,6 @@ class llama_kv_cache_unified_iswa_state : public llama_memory_state_i { private: //llama_kv_cache_unified_iswa * kv; - llama_sbatch sbatch; - // 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-unified.cpp index d4412288925c3..6897b797153db 100644 --- a/src/llama-kv-cache-unified.cpp +++ b/src/llama-kv-cache-unified.cpp @@ -308,17 +308,23 @@ llama_pos llama_kv_cache_unified::seq_pos_max(llama_seq_id seq_id) const { } llama_memory_state_ptr llama_kv_cache_unified::init_batch( - const llama_batch & batch, + llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { GGML_UNUSED(embd_all); do { - auto sbatch = llama_sbatch(batch, hparams.n_embd, true); + balloc.split_reset(); std::vector ubatches; - while (sbatch.n_tokens > 0) { - ubatches.push_back(sbatch.split_simple(n_ubatch)); + while (true) { + auto ubatch = balloc.split_simple(n_ubatch); + + if (ubatch.n_tokens == 0) { + break; + } + + ubatches.push_back(std::move(ubatch)); // NOLINT } auto heads = prepare(ubatches); @@ -327,7 +333,7 @@ llama_memory_state_ptr llama_kv_cache_unified::init_batch( } return std::make_unique( - this, std::move(sbatch), std::move(heads), std::move(ubatches)); + this, std::move(heads), std::move(ubatches)); } while (false); return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); @@ -644,12 +650,6 @@ int32_t llama_kv_cache_unified::find_slot(const llama_ubatch & ubatch) const { } void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch & ubatch) { - if (debug > 0) { - LLAMA_LOG_DEBUG("%s: ubatch info:\n", __func__); - LLAMA_LOG_DEBUG("%s: n_tokens = %d, equal_seqs = %d\n", __func__, ubatch.n_tokens, ubatch.equal_seqs); - LLAMA_LOG_DEBUG("%s: n_seq_tokens = %d, n_seqs = %d\n", __func__, ubatch.n_seq_tokens, ubatch.n_seqs); - } - // 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]; @@ -657,27 +657,22 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch seq_pos_max_rm[s] = -1; } - for (uint32_t s = 0; s < ubatch.n_seqs; ++s) { - for (uint32_t j = 0; j < ubatch.n_seq_tokens; ++j) { - const uint32_t idx = s*ubatch.n_seq_tokens + j; - - if (!cells.is_empty(head_cur + idx)) { - assert(cells.seq_count(head_cur + idx) == 1); + for (uint32_t i = 0; i < ubatch.n_tokens; ++i) { + if (!cells.is_empty(head_cur + i)) { + assert(cells.seq_count(head_cur + i) == 1); - const llama_seq_id seq_id = cells.seq_get(head_cur + idx); - const llama_pos pos = cells.pos_get(head_cur + idx); + const llama_seq_id seq_id = cells.seq_get(head_cur + i); + const llama_pos pos = cells.pos_get(head_cur + i); - seq_pos_max_rm[seq_id] = std::max(seq_pos_max_rm[seq_id], pos); + seq_pos_max_rm[seq_id] = std::max(seq_pos_max_rm[seq_id], pos); - cells.rm(head_cur + idx); - } + cells.rm(head_cur + i); + } - cells.pos_set(head_cur + idx, ubatch.pos[idx]); + cells.pos_set(head_cur + i, ubatch.pos[i]); - // TODO: fix indexing [UBATCH_IDX] - for (int32_t i = 0; i < ubatch.n_seq_id[s]; i++) { - cells.seq_add(head_cur + idx, ubatch.seq_id[s][i]); - } + for (int32_t s = 0; s < ubatch.n_seq_id[i]; s++) { + cells.seq_add(head_cur + i, ubatch.seq_id[i][s]); } } @@ -696,6 +691,7 @@ void llama_kv_cache_unified::apply_ubatch(uint32_t head_cur, const llama_ubatch seq_rm(s, cells.seq_pos_min(s), seq_pos_max_rm[s] + 1); } } + // move the head at the end of the slot head = head_cur + ubatch.n_tokens; } @@ -792,9 +788,7 @@ ggml_tensor * llama_kv_cache_unified::cpy_v(ggml_context * ctx, ggml_tensor * v_ } void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ubatch * ubatch, bool causal_attn) const { - const uint32_t n_tokens = ubatch->n_tokens; - const uint32_t n_seq_tokens = ubatch->n_seq_tokens; - const uint32_t n_seqs = ubatch->n_seqs; + const uint32_t n_tokens = ubatch->n_tokens; GGML_ASSERT(ggml_backend_buffer_is_host(dst->buffer)); float * data = (float *) dst->data; @@ -814,52 +808,48 @@ void llama_kv_cache_unified::set_input_kq_mask(ggml_tensor * dst, const llama_ub // xxxxx----- // To visualize the mask, see https://github.com/ggml-org/llama.cpp/pull/12615 for (uint32_t h = 0; h < 1; ++h) { - for (uint32_t s = 0; s < n_seqs; ++s) { - const llama_seq_id seq_id = ubatch->seq_id[s][0]; + for (uint32_t i = 0; i < n_tokens; ++i) { + const llama_seq_id seq_id = ubatch->seq_id[i][0]; - for (uint32_t j = 0; j < n_seq_tokens; ++j) { - const uint32_t idx = s*n_seq_tokens + j; + const llama_pos p1 = ubatch->pos[i]; - const llama_pos p1 = ubatch->pos[idx]; + for (uint32_t j = 0; j < n_kv; ++j) { + float f = 0.0f; - for (uint32_t i = 0; i < n_kv; ++i) { - float f = 0.0f; + bool masked = false; - bool masked = false; - - if (cells.is_empty(i)) { - masked = true; - } else { - const llama_pos p0 = cells.pos_get(i); - - // mask the token if not the same sequence - masked = masked || (!cells.seq_has(i, seq_id)); + if (cells.is_empty(j)) { + masked = true; + } else { + const llama_pos p0 = cells.pos_get(j); - // mask future tokens - masked = masked || (causal_attn && p0 > p1); + // mask the token if not the same sequence + masked = masked || (!cells.seq_has(j, seq_id)); - // apply SWA if any - masked = masked || (is_masked_swa(p0, p1)); + // mask future tokens + masked = masked || (causal_attn && p0 > p1); - if (!masked && hparams.use_alibi) { - f = -std::abs(p0 - p1); - } - } + // apply SWA if any + masked = masked || (is_masked_swa(p0, p1)); - if (masked) { - f = -INFINITY; + if (!masked && hparams.use_alibi) { + f = -std::abs(p0 - p1); } + } - data[h*(n_kv*n_tokens) + idx*n_kv + i] = f; + if (masked) { + f = -INFINITY; } + + data[h*(n_kv*n_tokens) + i*n_kv + j] = f; } } // mask padded tokens if (data) { - for (uint32_t j = n_tokens; j < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++j) { - for (uint32_t i = 0; i < n_kv; ++i) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; + for (uint32_t i = n_tokens; i < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++i) { + for (uint32_t j = 0; j < n_kv; ++j) { + data[h*(n_kv*n_tokens) + i*n_kv + j] = -INFINITY; } } } @@ -887,12 +877,12 @@ void llama_kv_cache_unified::set_input_pos_bucket(ggml_tensor * dst, const llama const int32_t n_kv = dst->ne[0]; for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - for (int i = 0; i < n_kv; ++i) { + for (int i = 0; i < n_tokens; ++i) { + for (int j = 0; j < n_kv; ++j) { // the position when the cells is empty is irrelevant - it will be masked out later in the attention - const llama_pos p0 = cells.is_empty(i) ? -1 : cells.pos_get(i); + const llama_pos p0 = cells.is_empty(j) ? -1 : cells.pos_get(j); - data[h*(n_kv*n_tokens) + j*n_kv + i] = llama_relative_position_bucket(p0, ubatch->pos[j], hparams.n_rel_attn_bkts, false); + data[h*(n_kv*n_tokens) + i*n_kv + j] = llama_relative_position_bucket(p0, ubatch->pos[i], hparams.n_rel_attn_bkts, false); } } } @@ -1509,12 +1499,9 @@ bool llama_kv_cache_unified::state_read_meta(llama_io_read_i & io, uint32_t cell seq_rm(dest_seq_id, -1, -1); - llama_sbatch sbatch; - llama_ubatch ubatch = sbatch.reserve_ubatch(cell_count, /* has_embd */ false); + llama_batch_allocr balloc(hparams.n_pos_per_embd()); - ubatch.n_tokens = cell_count; - ubatch.n_seq_tokens = cell_count; - ubatch.n_seqs = 1; + llama_ubatch ubatch = balloc.ubatch_reserve(cell_count, 1); for (uint32_t i = 0; i < cell_count; ++i) { llama_pos pos; @@ -1746,9 +1733,8 @@ llama_kv_cache_unified_state::llama_kv_cache_unified_state( llama_kv_cache_unified_state::llama_kv_cache_unified_state( llama_kv_cache_unified * kv, - llama_sbatch sbatch, llama_kv_cache_unified::ubatch_heads heads, - std::vector ubatches) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv), sbatch(std::move(sbatch)), heads(std::move(heads)), ubatches(std::move(ubatches)) { + std::vector ubatches) : status(LLAMA_MEMORY_STATUS_SUCCESS), kv(kv), heads(std::move(heads)), ubatches(std::move(ubatches)) { } llama_kv_cache_unified_state::~llama_kv_cache_unified_state() = default; @@ -1781,12 +1767,6 @@ bool llama_kv_cache_unified_state::apply() { return true; } -std::vector & llama_kv_cache_unified_state::out_ids() { - assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - - return sbatch.out_ids; -} - llama_memory_status llama_kv_cache_unified_state::get_status() const { return status; } diff --git a/src/llama-kv-cache-unified.h b/src/llama-kv-cache-unified.h index d96571d952b81..1560640045c82 100644 --- a/src/llama-kv-cache-unified.h +++ b/src/llama-kv-cache-unified.h @@ -57,7 +57,7 @@ class llama_kv_cache_unified : public llama_memory_i { // llama_memory_state_ptr init_batch( - const llama_batch & batch, + llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) override; @@ -231,7 +231,6 @@ class llama_kv_cache_unified_state : public llama_memory_state_i { // used to create a decode state from a batch llama_kv_cache_unified_state( llama_kv_cache_unified * kv, - llama_sbatch sbatch, ubatch_heads heads, std::vector ubatches); @@ -244,8 +243,6 @@ class llama_kv_cache_unified_state : public llama_memory_state_i { bool next() override; bool apply() override; - std::vector & out_ids() override; - llama_memory_status get_status() const override; const llama_ubatch & get_ubatch() const override; @@ -286,8 +283,6 @@ class llama_kv_cache_unified_state : public llama_memory_state_i { // batch processing state // - llama_sbatch sbatch; - // the index of the next ubatch to process size_t i_next = 0; diff --git a/src/llama-kv-cells.h b/src/llama-kv-cells.h index 1d4e70f4d3212..349e9032e2484 100644 --- a/src/llama-kv-cells.h +++ b/src/llama-kv-cells.h @@ -384,10 +384,10 @@ class llama_kv_cells_unified { // std::vector shift; - using bits_t = std::bitset; + using seq_set_t = std::bitset; // the bitset seq[i] tells us which sequences are currently occupying the i-th cell - std::vector seq; + std::vector seq; // the set seq_pos[s] tells us which positions are currently present for sequence s // this way seq_pos[s].begin() and seq_pos[s].rbegin() give us the min/max positions currently in the cache diff --git a/src/llama-memory-hybrid.cpp b/src/llama-memory-hybrid.cpp index d4b260db4c8e7..1b16686819eff 100644 --- a/src/llama-memory-hybrid.cpp +++ b/src/llama-memory-hybrid.cpp @@ -32,7 +32,7 @@ llama_memory_hybrid::llama_memory_hybrid( mem_attn(new llama_kv_cache_unified( model, filter_attn == nullptr ? - [&](int32_t il) { return !model.hparams.is_recurrent(il); } + [&](int32_t il) { return !hparams.is_recurrent(il); } : filter_attn, type_k, type_v, @@ -47,7 +47,7 @@ llama_memory_hybrid::llama_memory_hybrid( mem_recr(new llama_memory_recurrent( model, filter_recr == nullptr ? - [&](int32_t il) { return model.hparams.is_recurrent(il); } + [&](int32_t il) { return hparams.is_recurrent(il); } : filter_recr, type_r, type_s, @@ -56,42 +56,49 @@ llama_memory_hybrid::llama_memory_hybrid( n_seq_max )) {} -llama_memory_state_ptr llama_memory_hybrid::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_pooled) { +llama_memory_state_ptr llama_memory_hybrid::init_batch(llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { + do { + balloc.split_reset(); - // since this includes a recurrent cache, we cannot use split_simple - auto sbatch = llama_sbatch(batch, hparams.n_embd, false); + // follow the recurrent pattern for creating the ubatch splits + std::vector ubatches; - // follow the recurrent pattern for creating the ubatch splits - std::vector ubatches; - while (sbatch.n_tokens > 0) { - llama_ubatch ubatch; + while (true) { + llama_ubatch ubatch; - if (embd_pooled) { - // Pooled embeddings cannot be split across ubatches (yet) - ubatch = sbatch.split_seq(n_ubatch); - } else { - ubatch = sbatch.split_equal(n_ubatch); + if (embd_all) { + // if all tokens are output, split by sequence + ubatch = balloc.split_seq(n_ubatch); + } else { + ubatch = balloc.split_equal(n_ubatch); + } + + if (ubatch.n_tokens == 0) { + break; + } + + ubatches.push_back(std::move(ubatch)); // NOLINT } - ubatches.push_back(ubatch); - } + // prepare the recurrent batches first + if (!mem_recr->prepare(ubatches)) { + // TODO: will the recurrent cache be in an undefined state at this point? + LLAMA_LOG_ERROR("%s: failed to prepare recurrent ubatches\n", __func__); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + } - // prepare the recurrent batches first - if (!mem_recr->prepare(ubatches)) { - // TODO: will the recurrent cache be in an undefined state at this point? - LLAMA_LOG_ERROR("%s: failed to prepare recurrent ubatches\n", __func__); - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); - } + // prepare the attention cache + auto heads_attn = mem_attn->prepare(ubatches); + if (heads_attn.empty()) { + LLAMA_LOG_ERROR("%s: failed to prepare attention ubatches\n", __func__); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); + } - // prepare the attention cache - auto heads_attn = mem_attn->prepare(ubatches); - if (heads_attn.empty()) { - LLAMA_LOG_ERROR("%s: failed to prepare attention ubatches\n", __func__); - return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); - } + return std::make_unique( + this, std::move(heads_attn), std::move(ubatches)); + } while(false); - return std::make_unique( - this, std::move(sbatch), std::move(heads_attn), std::move(ubatches)); + return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } llama_memory_state_ptr llama_memory_hybrid::init_full() { @@ -188,15 +195,13 @@ llama_memory_hybrid_state::llama_memory_hybrid_state( llama_memory_hybrid_state::llama_memory_hybrid_state( llama_memory_hybrid * mem, - llama_sbatch sbatch, std::vector heads_attn, std::vector ubatches) : - sbatch(std::move(sbatch)), ubatches(std::move(ubatches)), // note: here we copy the ubatches. not sure if this is ideal - state_attn(new llama_kv_cache_unified_state(mem->get_mem_attn(), {}, std::move(heads_attn), this->ubatches)), - state_recr(new llama_memory_recurrent_state(mem->get_mem_recr(), {}, this->ubatches)), - status(LLAMA_MEMORY_STATUS_SUCCESS) { + state_attn(new llama_kv_cache_unified_state(mem->get_mem_attn(), std::move(heads_attn), this->ubatches)), + state_recr(new llama_memory_recurrent_state(mem->get_mem_recr(), this->ubatches)), + status(llama_memory_status_combine(state_attn->get_status(), state_recr->get_status())) { } bool llama_memory_hybrid_state::next() { @@ -223,12 +228,6 @@ bool llama_memory_hybrid_state::apply() { return res; } -std::vector & llama_memory_hybrid_state::out_ids() { - assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - - return sbatch.out_ids; -} - llama_memory_status llama_memory_hybrid_state::get_status() const { return status; } diff --git a/src/llama-memory-hybrid.h b/src/llama-memory-hybrid.h index b5700c5225f18..4d27ab896aa05 100644 --- a/src/llama-memory-hybrid.h +++ b/src/llama-memory-hybrid.h @@ -50,9 +50,9 @@ class llama_memory_hybrid : public llama_memory_i { // llama_memory_state_ptr init_batch( - const llama_batch & batch, + llama_batch_allocr & balloc, uint32_t n_ubatch, - bool embd_pooled) override; + bool embd_all) override; llama_memory_state_ptr init_full() override; @@ -107,7 +107,6 @@ class llama_memory_hybrid_state : public llama_memory_state_i { // init success llama_memory_hybrid_state( llama_memory_hybrid * mem, - llama_sbatch sbatch, std::vector heads_attn, std::vector ubatches); @@ -116,8 +115,6 @@ class llama_memory_hybrid_state : public llama_memory_state_i { bool next() override; bool apply() override; - std::vector & out_ids() override; - llama_memory_status get_status() const override; const llama_ubatch & get_ubatch() const override; @@ -129,8 +126,6 @@ class llama_memory_hybrid_state : public llama_memory_state_i { const llama_memory_recurrent_state * get_state_recr() const; private: - llama_sbatch sbatch; - // the index of the next ubatch to process size_t i_next = 0; diff --git a/src/llama-memory-recurrent.cpp b/src/llama-memory-recurrent.cpp index c4f9a6f1ddc98..b064da0084c52 100644 --- a/src/llama-memory-recurrent.cpp +++ b/src/llama-memory-recurrent.cpp @@ -362,29 +362,31 @@ llama_pos llama_memory_recurrent::seq_pos_max(llama_seq_id seq_id) const { return result; } -llama_memory_state_ptr llama_memory_recurrent::init_batch(const llama_batch & batch, uint32_t n_ubatch, bool embd_all) { - auto sbatch = llama_sbatch(batch, hparams.n_embd, false); - +llama_memory_state_ptr llama_memory_recurrent::init_batch(llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) { std::vector ubatches; - while (sbatch.n_tokens > 0) { + while (true) { llama_ubatch ubatch; if (embd_all) { // if all tokens are output, split by sequence - ubatch = sbatch.split_seq(n_ubatch); + ubatch = balloc.split_seq(n_ubatch); } else { - ubatch = sbatch.split_equal(n_ubatch); + ubatch = balloc.split_equal(n_ubatch); + } + + if (ubatch.n_tokens == 0) { + break; } - ubatches.push_back(ubatch); + ubatches.push_back(std::move(ubatch)); // NOLINT } if (!prepare(ubatches)) { return std::make_unique(LLAMA_MEMORY_STATUS_FAILED_PREPARE); } - return std::make_unique(this, std::move(sbatch), std::move(ubatches)); + return std::make_unique(this, std::move(ubatches)); } llama_memory_state_ptr llama_memory_recurrent::init_full() { @@ -423,9 +425,8 @@ bool llama_memory_recurrent::prepare(const std::vector & ubatches) } bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { - const uint32_t n_seqs = ubatch.n_seqs; - const uint32_t n_seq_tokens = ubatch.n_seq_tokens; + const uint32_t n_seqs = ubatch.n_seqs; // if we have enough unused cells before the current head -> // better to start searching from the beginning of the cache, hoping to fill it @@ -445,9 +446,11 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { // everything should fit if all seq_ids are smaller than the max for (uint32_t s = 0; s < n_seqs; ++s) { - const uint32_t n_seq_id = ubatch.n_seq_id[s]; + const uint32_t i = s*n_seq_tokens; // first token of sequence set s + const uint32_t n_seq_id = ubatch.n_seq_id[i]; + for (uint32_t j = 0; j < n_seq_id; ++j) { - const llama_seq_id seq_id = ubatch.seq_id[s][j]; + const llama_seq_id seq_id = ubatch.seq_id[i][j]; if (seq_id < 0 || (uint32_t) seq_id >= size) { // too big seq_id @@ -506,7 +509,8 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { // find usable cell range for (uint32_t s = 0; s < n_seqs; ++s) { - const llama_seq_id seq_id = ubatch.seq_id[s][0]; + const uint32_t i = s*n_seq_tokens; + const llama_seq_id seq_id = ubatch.seq_id[i][0]; auto & seq_meta = cells[seq_id]; bool has_cell = false; if (seq_meta.tail >= 0) { @@ -530,7 +534,7 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { seq_meta.tail = next_empty_cell; // find next empty cell if (s + 1 < n_seqs) { - for (uint32_t i = 0; i < size; ++i) { + for (uint32_t j = 0; j < size; ++j) { next_empty_cell += 1; if (next_empty_cell >= size) { next_empty_cell -= size; } auto & cell = cells[next_empty_cell]; @@ -544,8 +548,9 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { // gather and re-order for (uint32_t s = 0; s < n_seqs; ++s) { + const uint32_t i = s*n_seq_tokens; const int32_t dst_id = s + min; - const int32_t src_id = cells[ubatch.seq_id[s][0]].tail; + const int32_t src_id = cells[ubatch.seq_id[i][0]].tail; if (dst_id != src_id) { auto & dst_cell = cells[dst_id]; auto & src_cell = cells[src_id]; @@ -555,8 +560,8 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { std::swap(dst_cell.seq_id, src_cell.seq_id); // swap tails - for (uint32_t i = 0; i < size; ++i) { - int32_t & tail = cells[i].tail; + for (uint32_t j = 0; j < size; ++j) { + int32_t & tail = cells[j].tail; if (tail == src_id) { tail = dst_id; } else if (tail == dst_id) { @@ -568,7 +573,8 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { // update the pos of the used seqs for (uint32_t s = 0; s < n_seqs; ++s) { - const llama_pos last_pos = ubatch.pos[n_seq_tokens * s + n_seq_tokens - 1]; + const uint32_t i = s*n_seq_tokens; + const llama_pos last_pos = ubatch.pos[i + n_seq_tokens - 1]; const int32_t cell_id = s + min; auto & cell = cells[cell_id]; @@ -576,12 +582,12 @@ bool llama_memory_recurrent::find_slot(const llama_ubatch & ubatch) { // What should happen when the pos backtracks or skips a value? // Clearing the state mid-batch would require special-casing which isn't done. LLAMA_LOG_WARN("%s: non-consecutive token position %d after %d for sequence %d with %u new tokens\n", - __func__, last_pos, cell.pos, ubatch.seq_id[s][0], n_seq_tokens); + __func__, last_pos, cell.pos, ubatch.seq_id[i][0], n_seq_tokens); } cell.pos = last_pos; cell.seq_id.clear(); - for (int32_t j = 0; j < ubatch.n_seq_id[s]; ++j) { - const llama_seq_id seq_id = ubatch.seq_id[s][j]; + for (int32_t j = 0; j < ubatch.n_seq_id[i]; ++j) { + const llama_seq_id seq_id = ubatch.seq_id[i][j]; cell.seq_id.insert(seq_id); cells[seq_id].tail = cell_id; } @@ -827,12 +833,9 @@ bool llama_memory_recurrent::state_read_meta(llama_io_read_i & io, uint32_t cell seq_rm(dest_seq_id, -1, -1); - llama_sbatch sbatch; - llama_ubatch batch = sbatch.reserve_ubatch(cell_count, /* has_embd */ false); + llama_batch_allocr balloc(hparams.n_pos_per_embd()); - batch.n_tokens = cell_count; - batch.n_seq_tokens = cell_count; - batch.n_seqs = 1; + llama_ubatch ubatch = balloc.ubatch_reserve(cell_count, 1); for (uint32_t i = 0; i < cell_count; ++i) { llama_pos pos; @@ -846,12 +849,12 @@ bool llama_memory_recurrent::state_read_meta(llama_io_read_i & io, uint32_t cell return false; } - batch.pos[i] = pos; + ubatch.pos[i] = pos; } - batch.n_seq_id[0] = 1; - batch.seq_id[0] = &dest_seq_id; + ubatch.n_seq_id[0] = 1; + ubatch.seq_id[0] = &dest_seq_id; - if (!find_slot(batch)) { + if (!find_slot(ubatch)) { LLAMA_LOG_ERROR("%s: failed to find available cells in kv cache\n", __func__); return false; } @@ -859,8 +862,8 @@ bool llama_memory_recurrent::state_read_meta(llama_io_read_i & io, uint32_t cell // DEBUG CHECK: kv.head should be our first cell, kv.head + cell_count - 1 should be our last cell (verify seq_id and pos values) // Assume that this is one contiguous block of cells GGML_ASSERT(head + cell_count <= size); - GGML_ASSERT(cells[head].pos == batch.pos[0]); - GGML_ASSERT(cells[head + cell_count - 1].pos == batch.pos[cell_count - 1]); + GGML_ASSERT(cells[head].pos == ubatch.pos[0]); + GGML_ASSERT(cells[head + cell_count - 1].pos == ubatch.pos[cell_count - 1]); GGML_ASSERT(cells[head].has_seq_id(dest_seq_id)); GGML_ASSERT(cells[head + cell_count - 1].has_seq_id(dest_seq_id)); } else { @@ -1048,8 +1051,7 @@ llama_memory_recurrent_state::llama_memory_recurrent_state( llama_memory_recurrent_state::llama_memory_recurrent_state( llama_memory_recurrent * mem, - llama_sbatch sbatch, - std::vector ubatches) : status(LLAMA_MEMORY_STATUS_SUCCESS), mem(mem), sbatch(std::move(sbatch)), ubatches(std::move(ubatches)) {} + std::vector ubatches) : status(LLAMA_MEMORY_STATUS_SUCCESS), mem(mem), ubatches(std::move(ubatches)) {} llama_memory_recurrent_state::~llama_memory_recurrent_state() = default; @@ -1071,12 +1073,6 @@ bool llama_memory_recurrent_state::apply() { return true; } -std::vector & llama_memory_recurrent_state::out_ids() { - assert(status == LLAMA_MEMORY_STATUS_SUCCESS); - - return sbatch.out_ids; -} - llama_memory_status llama_memory_recurrent_state::get_status() const { return status; } diff --git a/src/llama-memory-recurrent.h b/src/llama-memory-recurrent.h index 290cc84ab3fbc..be58dae7cfe33 100644 --- a/src/llama-memory-recurrent.h +++ b/src/llama-memory-recurrent.h @@ -35,7 +35,7 @@ class llama_memory_recurrent : public llama_memory_i { // llama_memory_state_ptr init_batch( - const llama_batch & batch, + llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) override; @@ -137,7 +137,6 @@ class llama_memory_recurrent_state : public llama_memory_state_i { // used to create a state from a batch llama_memory_recurrent_state( llama_memory_recurrent * mem, - llama_sbatch sbatch, std::vector ubatches); virtual ~llama_memory_recurrent_state(); @@ -149,8 +148,6 @@ class llama_memory_recurrent_state : public llama_memory_state_i { bool next() override; bool apply() override; - std::vector & out_ids() override; - llama_memory_status get_status() const override; const llama_ubatch & get_ubatch() const override; @@ -173,8 +170,6 @@ class llama_memory_recurrent_state : public llama_memory_state_i { llama_memory_recurrent * mem; - llama_sbatch sbatch; - size_t i_next = 0; std::vector ubatches; diff --git a/src/llama-memory.h b/src/llama-memory.h index 24668f861b976..d2ef0c2a3b4aa 100644 --- a/src/llama-memory.h +++ b/src/llama-memory.h @@ -7,6 +7,8 @@ struct llama_ubatch; +class llama_batch_allocr; + class llama_io_write_i; class llama_io_read_i; @@ -50,9 +52,6 @@ struct llama_memory_state_i { // return false on failure virtual bool apply() = 0; - // TODO: this might get reworked in the future when refactoring llama_batch - virtual std::vector & out_ids() = 0; - // get the current ubatch virtual const llama_ubatch & get_ubatch() const = 0; @@ -71,7 +70,7 @@ struct llama_memory_i { // return a state object containing the ubatches and KV cache state required to process them // check the llama_memory_state_i::get_status() for the result virtual llama_memory_state_ptr init_batch( - const llama_batch & batch, + llama_batch_allocr & balloc, uint32_t n_ubatch, bool embd_all) = 0; diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 9d55b3338bcfe..aa18513e393b4 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -3385,38 +3385,6 @@ struct server_context { llama_set_embeddings(ctx, slot_batched->need_embd()); } - // pad the batch so that batch.n_tokens >= n_slots - // TODO: temporary workaround for https://github.com/ggml-org/llama.cpp/issues/13689 - if (slot_batched->need_embd()) { - const int n_slots = slots.size(); - - if (batch.n_tokens < n_slots) { - std::set seq_ids; - for (int j = 0; j < batch.n_tokens; ++j) { - seq_ids.insert(batch.seq_id[j][0]); - } - - // find unused sequence id - llama_seq_id seq_id = -1; - for (int i = 0; i < n_slots; ++i) { - if (seq_ids.find(i) == seq_ids.end()) { - seq_id = i; - } - } - - const int n_add = n_slots - batch.n_tokens; - - SRV_WRN("adding %d dummy tokens to the batch, seq_id = %d\n", n_add, seq_id); - - for (int j = 0; j < n_add; ++j) { - common_batch_add(batch, 0, j, { seq_id }, true); - } - - slots[seq_id].cache_tokens.clear(); - llama_memory_seq_rm(llama_get_memory(ctx), seq_id, -1, -1); - } - } - int32_t i_next = 0; // process the created batch of tokens From 812939a9e90f99d1bd5bb1bc6b99d12600671d50 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 20 Jun 2025 10:50:27 +0300 Subject: [PATCH 93/95] model : more uniform output id handling (#14275) * model : more uniform output id handling ggml-ci * cont : revert n_outputs < n_tokens optimization ggml-ci * cont : fix out_ids initialization ggml-ci --- src/llama-graph.cpp | 54 +-- src/llama-model.cpp | 839 ++++++++++++++++++++++---------------------- 2 files changed, 455 insertions(+), 438 deletions(-) diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index 083366fd68d07..7e162c5552204 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -92,36 +92,28 @@ void llm_graph_input_pos_bucket_kv::set_input(const llama_ubatch * ubatch) { } void llm_graph_input_out_ids::set_input(const llama_ubatch * ubatch) { - if (hparams.causal_attn || cparams.pooling_type == LLAMA_POOLING_TYPE_NONE) { - //GGML_ASSERT(out_ids && "every model that can must skip unused outputs"); + GGML_ASSERT(out_ids); - if (!out_ids) { - LLAMA_LOG_WARN("%s: 'out_ids' is not created\n", __func__); - } else { - const int64_t n_tokens = ubatch->n_tokens; + const int64_t n_tokens = ubatch->n_tokens; - GGML_ASSERT(ggml_backend_buffer_is_host(out_ids->buffer)); - int32_t * data = (int32_t *) out_ids->data; + GGML_ASSERT(ggml_backend_buffer_is_host(out_ids->buffer)); + int32_t * data = (int32_t *) out_ids->data; - if (n_outputs == n_tokens) { - for (int i = 0; i < n_tokens; ++i) { - data[i] = i; - } - } else if (ubatch->output) { - int32_t n_outputs = 0; - for (int i = 0; i < n_tokens; ++i) { - if (ubatch->output[i]) { - data[n_outputs++] = i; - } - } - // the graph needs to have been passed the correct number of outputs - GGML_ASSERT(n_outputs == n_outputs); - } else if (n_outputs == 1) { - // only keep last output - data[0] = n_tokens - 1; - } else { - GGML_ASSERT(n_outputs == 0); - } + if (n_outputs == n_tokens) { + for (int i = 0; i < n_tokens; ++i) { + data[i] = i; + } + + return; + } + + GGML_ASSERT(ubatch->output); + + int n_outputs = 0; + + for (int i = 0; i < n_tokens; ++i) { + if (ubatch->output[i]) { + data[n_outputs++] = i; } } } @@ -874,6 +866,14 @@ ggml_tensor * llm_graph_context::build_inp_attn_scale() const { } ggml_tensor * llm_graph_context::build_inp_out_ids() const { + // note: when all tokens are output, we could skip this optimization to spare the ggml_get_rows() calls, + // but this would make the graph topology depend on the number of output tokens, which can interere with + // features that require constant topology such as pipline parallelism + // ref: https://github.com/ggml-org/llama.cpp/pull/14275#issuecomment-2987424471 + //if (n_outputs < n_tokens) { + // return nullptr; + //} + auto inp = std::make_unique(hparams, cparams, n_outputs); auto & cur = inp->out_ids; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index a5853f8b12dc0..e2c82017f6890 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -4707,6 +4707,8 @@ struct llm_build_llama : 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; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -4769,9 +4771,7 @@ struct llm_build_llama : public llm_graph_context { cb(cur, "attn_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -4867,6 +4867,8 @@ struct llm_build_llama_iswa : 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; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -4943,9 +4945,7 @@ struct llm_build_llama_iswa : public llm_graph_context { cb(cur, "attn_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -5045,6 +5045,9 @@ struct llm_build_deci : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); 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; const int64_t n_head_kv = hparams.n_head_kv(il); @@ -5118,9 +5121,7 @@ struct llm_build_deci : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -5199,6 +5200,8 @@ struct llm_build_baichuan : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -5250,9 +5253,7 @@ struct llm_build_baichuan : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -5321,6 +5322,8 @@ struct llm_build_xverse : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -5365,9 +5368,7 @@ struct llm_build_xverse : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -5435,6 +5436,8 @@ struct llm_build_falcon : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * attn_norm; @@ -5490,9 +5493,7 @@ struct llm_build_falcon : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); attn_norm = ggml_get_rows(ctx0, attn_norm, inp_out_ids); @@ -5561,6 +5562,8 @@ struct llm_build_grok : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -5620,9 +5623,7 @@ struct llm_build_grok : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -5721,6 +5722,8 @@ struct llm_build_dbrx : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -5771,9 +5774,7 @@ struct llm_build_dbrx : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -5853,6 +5854,8 @@ struct llm_build_starcoder : public llm_graph_context { inpL = ggml_add(ctx0, inpL, pos); cb(inpL, "inpL", -1); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { cur = build_norm(inpL, model.layers[il].attn_norm, @@ -5885,9 +5888,7 @@ struct llm_build_starcoder : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -5952,6 +5953,8 @@ struct llm_build_refact : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -5984,9 +5987,7 @@ struct llm_build_refact : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -6072,78 +6073,79 @@ struct llm_build_bert : public llm_graph_context { auto * inp_attn = build_attn_inp_no_cache(); - // iterate layers + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * cur = inpL; - ggml_tensor * Qcur; - ggml_tensor * Kcur; - ggml_tensor * Vcur; + { + ggml_tensor * Qcur; + ggml_tensor * Kcur; + ggml_tensor * Vcur; - // self-attention - if (model.layers[il].wqkv) { - cur = build_lora_mm(model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); + // self-attention + if (model.layers[il].wqkv) { + cur = build_lora_mm(model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); - if (model.layers[il].bqkv) { - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - } + if (model.layers[il].bqkv) { + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + 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))); - } 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); - } + 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))); + } 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); + } - if (model.layers[il].attn_q_norm) { - Qcur = build_norm(Qcur, - model.layers[il].attn_q_norm, - model.layers[il].attn_q_norm_b, - LLM_NORM, il); - } + if (model.layers[il].attn_q_norm) { + Qcur = build_norm(Qcur, + model.layers[il].attn_q_norm, + model.layers[il].attn_q_norm_b, + LLM_NORM, il); + } - if (model.layers[il].attn_k_norm) { - Kcur = build_norm(Kcur, - model.layers[il].attn_k_norm, - model.layers[il].attn_k_norm_b, - LLM_NORM, il); - } + if (model.layers[il].attn_k_norm) { + Kcur = build_norm(Kcur, + 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); + 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); - // RoPE - if (model.arch == LLM_ARCH_NOMIC_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE) { - 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 - ); + // RoPE + if (model.arch == LLM_ARCH_NOMIC_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE) { + 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 - ); - } + 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); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - cur = build_attn(inp_attn, gf, - model.layers[il].wo, model.layers[il].bo, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); - cb(cur, "kqv_out", il); + cur = build_attn(inp_attn, gf, + model.layers[il].wo, model.layers[il].bo, + Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + cb(cur, "kqv_out", il); + } - if (il == n_layer - 1 && pooling_type == LLAMA_POOLING_TYPE_NONE) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -6240,56 +6242,57 @@ struct llm_build_neo_bert : public llm_graph_context { auto * inp_attn = build_attn_inp_no_cache(); - // iterate layers + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * cur = inpL; - ggml_tensor * Qcur; - ggml_tensor * Kcur; - ggml_tensor * Vcur; - // pre-norm cur = build_norm(inpL, model.layers[il].attn_norm, NULL, LLM_NORM_RMS, il); - // self-attention - cur = build_lora_mm(model.layers[il].wqkv, cur); - cb(cur, "wqkv", 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_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); - - // RoPE - 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 - ); + { + ggml_tensor * Qcur; + ggml_tensor * Kcur; + ggml_tensor * Vcur; - 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 - ); + // self-attention + cur = build_lora_mm(model.layers[il].wqkv, cur); + cb(cur, "wqkv", 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_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); + + // RoPE + 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); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - cur = build_attn(inp_attn, gf, - model.layers[il].wo, nullptr, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); - cb(cur, "kqv_out", il); + cur = build_attn(inp_attn, gf, + model.layers[il].wo, nullptr, + Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); + cb(cur, "kqv_out", il); + } - if (il == n_layer - 1 && pooling_type == LLAMA_POOLING_TYPE_NONE) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -6354,6 +6357,8 @@ struct llm_build_bloom : public llm_graph_context { LLM_NORM, -1); cb(inpL, "inp_norm", -1); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { cur = build_norm(inpL, model.layers[il].attn_norm, @@ -6386,9 +6391,7 @@ struct llm_build_bloom : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -6465,6 +6468,8 @@ struct llm_build_mpt : public llm_graph_context { cb(inpL, "inpL", -1); } + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * attn_norm; @@ -6527,9 +6532,7 @@ struct llm_build_mpt : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -6598,6 +6601,8 @@ struct llm_build_stablelm : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { // norm cur = build_norm(inpL, @@ -6673,9 +6678,7 @@ struct llm_build_stablelm : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); @@ -6750,6 +6753,8 @@ struct llm_build_qwen : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -6796,9 +6801,7 @@ struct llm_build_qwen : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -6867,6 +6870,8 @@ struct llm_build_qwen2 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -6916,9 +6921,7 @@ struct llm_build_qwen2 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -6988,6 +6991,8 @@ struct llm_build_qwen2vl : public llm_graph_context { int sections[4]; std::copy(std::begin(hparams.rope_sections), std::begin(hparams.rope_sections) + 4, sections); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -7037,9 +7042,7 @@ struct llm_build_qwen2vl : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -7106,6 +7109,8 @@ struct llm_build_qwen2moe : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -7164,9 +7169,7 @@ struct llm_build_qwen2moe : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -7265,6 +7268,8 @@ struct llm_build_qwen3 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -7317,9 +7322,7 @@ struct llm_build_qwen3 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -7386,6 +7389,8 @@ struct llm_build_qwen3moe : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -7438,9 +7443,7 @@ struct llm_build_qwen3moe : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -7516,6 +7519,8 @@ struct llm_build_phi2 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { attn_norm_output = build_norm(inpL, model.layers[il].attn_norm, @@ -7578,9 +7583,7 @@ struct llm_build_phi2 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); attn_norm_output = ggml_get_rows(ctx0, attn_norm_output, inp_out_ids); @@ -7652,6 +7655,8 @@ struct llm_build_phi3 : public llm_graph_context { inp_attn = build_attn_inp_kv_unified(); } + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { auto * residual = inpL; @@ -7715,9 +7720,7 @@ struct llm_build_phi3 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor* inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); residual = ggml_get_rows(ctx0, residual, inp_out_ids); } @@ -7803,15 +7806,16 @@ struct llm_build_plamo : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); - for (int il = 0; il < n_layer; ++il) { + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { // norm cur = build_norm(inpL, model.layers[il].attn_norm, NULL, LLM_NORM_RMS, il); cb(cur, "attn_norm", il); - ggml_tensor * attention_norm = cur; + ggml_tensor * sa_inp = cur; // self-attention { @@ -7849,18 +7853,17 @@ struct llm_build_plamo : public llm_graph_context { model.layers[il].wo, NULL, Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - ggml_tensor * sa_out = cur; - - cur = attention_norm; - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); - sa_out = ggml_get_rows(ctx0, sa_out, inp_out_ids); + sa_inp = ggml_get_rows(ctx0, sa_inp, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } + ggml_tensor * sa_out = cur; + + cur = sa_inp; + // feed-forward network { cur = build_ffn(cur, @@ -7925,6 +7928,8 @@ struct llm_build_gpt2 : public llm_graph_context { inpL = ggml_add(ctx0, inpL, pos); cb(inpL, "inpL", -1); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { cur = build_norm(inpL, model.layers[il].attn_norm, @@ -7957,9 +7962,7 @@ struct llm_build_gpt2 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -8029,6 +8032,8 @@ struct llm_build_codeshell : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { cur = build_norm(inpL, model.layers[il].attn_norm, @@ -8073,9 +8078,7 @@ struct llm_build_codeshell : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -8129,128 +8132,128 @@ struct llm_build_codeshell : public llm_graph_context { struct llm_build_orion : public llm_graph_context { llm_build_orion(const llama_model & model, const llm_graph_params & params, ggml_cgraph * gf) : llm_graph_context(params) { - const int64_t n_embd_head = hparams.n_embd_head_v; + 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_ASSERT(n_embd_head == hparams.n_embd_head_k); + GGML_ASSERT(n_embd_head == hparams.n_rot); - ggml_tensor * cur; - ggml_tensor * inpL; + ggml_tensor * cur; + ggml_tensor * inpL; - inpL = build_inp_embd(model.tok_embd); + inpL = build_inp_embd(model.tok_embd); - // inp_pos - contains the positions - ggml_tensor * inp_pos = build_inp_pos(); + // 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_unified(); - for (int il = 0; il < n_layer; ++il) { - ggml_tensor * inpSA = inpL; + ggml_tensor * inp_out_ids = build_inp_out_ids(); - // norm - cur = build_norm(inpL, - model.layers[il].attn_norm, model.layers[il].attn_norm_b, - LLM_NORM, il); - cb(cur, "attn_norm", il); + for (int il = 0; il < n_layer; ++il) { + ggml_tensor * inpSA = inpL; - // 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 - ); + // norm + cur = build_norm(inpL, + model.layers[il].attn_norm, model.layers[il].attn_norm_b, + LLM_NORM, il); + cb(cur, "attn_norm", il); - 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 - ); + // 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); + // } - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", 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); + // } - cur = build_attn(inp_attn, gf, - model.layers[il].wo, NULL, - Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), 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); + // } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } + 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 + ); - ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - // feed-forward network - cur = build_norm(ffn_inp, - model.layers[il].ffn_norm, model.layers[il].ffn_norm_b, - LLM_NORM, il); - cb(cur, "ffn_norm", il); + cur = build_attn(inp_attn, gf, + model.layers[il].wo, NULL, + Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), 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); + 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); + } - cur = ggml_add(ctx0, cur, ffn_inp); + ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); - cur = build_cvec(cur, il); - cb(cur, "l_out", il); + // feed-forward network + cur = build_norm(ffn_inp, + model.layers[il].ffn_norm, model.layers[il].ffn_norm_b, + LLM_NORM, il); + cb(cur, "ffn_norm", il); - // input for next layer - inpL = cur; - } + 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); - cur = inpL; + 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, model.output_norm_b, - LLM_NORM, -1); + cur = build_norm(cur, + model.output_norm, model.output_norm_b, + LLM_NORM, -1); - cb(cur, "result_norm", -1); - res->t_embd = cur; + cb(cur, "result_norm", -1); + res->t_embd = cur; - // lm_head - cur = build_lora_mm(model.output, cur); + // lm_head + cur = build_lora_mm(model.output, cur); - cb(cur, "result_output", -1); - res->t_logits = cur; + cb(cur, "result_output", -1); + res->t_logits = cur; - ggml_build_forward_expand(gf, cur); + ggml_build_forward_expand(gf, cur); } }; @@ -8271,6 +8274,8 @@ struct llm_build_internlm2 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -8329,9 +8334,7 @@ struct llm_build_internlm2 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -8407,6 +8410,8 @@ struct llm_build_minicpm3 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -8526,15 +8531,13 @@ struct llm_build_minicpm3 : public llm_graph_context { q_states, k_states, v_states, nullptr, nullptr, kq_scale, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } // scale_res - scale the hidden states for residual connection - const float scale_res = scale_depth/sqrtf(float(n_layer)); + const float scale_res = scale_depth/sqrtf(float(n_layer)); // TODO: is this correct? cur = ggml_scale(ctx0, cur, scale_res); cb(cur, "hidden_scaled", il); @@ -8611,6 +8614,8 @@ struct llm_build_gemma : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { // norm cur = build_norm(inpL, @@ -8656,9 +8661,7 @@ struct llm_build_gemma : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -8727,6 +8730,8 @@ struct llm_build_gemma2_iswa : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified_iswa(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { // norm cur = build_norm(inpL, @@ -8771,18 +8776,16 @@ struct llm_build_gemma2_iswa : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); } + if (il == n_layer - 1 && inp_out_ids) { + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); + } + cur = build_norm(cur, model.layers[il].attn_post_norm, NULL, LLM_NORM_RMS, il); cb(cur, "attn_post_norm", il); - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - ggml_tensor * sa_out = ggml_add(ctx0, cur, inpL); cb(sa_out, "sa_out", il); @@ -8861,6 +8864,8 @@ struct llm_build_gemma3_iswa : public llm_graph_context { // TODO: is causal == true correct? might need some changes auto * inp_attn = build_attn_inp_kv_unified_iswa(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const float freq_base_l = model.get_rope_freq_base (cparams, il); const float freq_scale_l = model.get_rope_freq_scale(cparams, il); @@ -8913,18 +8918,16 @@ struct llm_build_gemma3_iswa : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f, il); } + if (il == n_layer - 1 && inp_out_ids) { + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); + } + cur = build_norm(cur, model.layers[il].attn_post_norm, NULL, LLM_NORM_RMS, il); cb(cur, "attn_post_norm", il); - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - ggml_tensor * sa_out = ggml_add(ctx0, cur, inpL); cb(sa_out, "sa_out", il); @@ -8995,6 +8998,8 @@ struct llm_build_starcoder2 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -9053,9 +9058,7 @@ struct llm_build_starcoder2 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -9118,6 +9121,8 @@ struct llm_build_mamba : public llm_graph_context { auto * rs_inp = build_rs_inp(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { // norm cur = build_norm(inpL, @@ -9127,9 +9132,7 @@ struct llm_build_mamba : public llm_graph_context { cur = build_mamba_layer(rs_inp, gf, cur, ubatch, il); - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -9311,13 +9314,15 @@ struct llm_build_command_r : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); - for (int il = 0; il < n_layer; ++il) { + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { // norm cur = build_norm(inpL, model.layers[il].attn_norm, NULL, LLM_NORM, il); cb(cur, "attn_norm", il); + ggml_tensor * ffn_inp = cur; // self-attention @@ -9385,9 +9390,7 @@ struct llm_build_command_r : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); @@ -9458,6 +9461,8 @@ struct llm_build_cohere2_iswa : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified_iswa(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const bool is_swa = hparams.is_swa(il); @@ -9520,9 +9525,7 @@ struct llm_build_cohere2_iswa : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); @@ -9593,6 +9596,8 @@ struct llm_build_olmo : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -9651,9 +9656,7 @@ struct llm_build_olmo : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -9721,6 +9724,8 @@ struct llm_build_olmo2 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -9771,18 +9776,16 @@ struct llm_build_olmo2 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), 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); + } + cur = build_norm(cur, model.layers[il].attn_post_norm, NULL, LLM_NORM_RMS, il); cb(cur, "attn_post_norm", il); - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_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); @@ -9850,6 +9853,8 @@ struct llm_build_olmoe : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -9904,9 +9909,7 @@ struct llm_build_olmoe : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -9976,6 +9979,8 @@ struct llm_build_openelm : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const int64_t n_head = hparams.n_head(il); const int64_t n_head_kv = hparams.n_head_kv(il); @@ -10037,11 +10042,9 @@ struct llm_build_openelm : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { residual = ggml_get_rows(ctx0, residual, inp_out_ids); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); + cur = ggml_get_rows(ctx0, cur, inp_out_ids); } ggml_tensor * ffn_inp = ggml_add(ctx0, residual, cur); @@ -10107,6 +10110,8 @@ struct llm_build_gptneox : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { cur = build_norm(inpL, model.layers[il].attn_norm, @@ -10151,9 +10156,7 @@ struct llm_build_gptneox : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -10255,6 +10258,8 @@ struct llm_build_arctic : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -10301,9 +10306,7 @@ struct llm_build_arctic : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -10395,6 +10398,8 @@ struct llm_build_deepseek : 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; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -10456,14 +10461,11 @@ struct llm_build_deepseek : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, kq_scale, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); @@ -10571,6 +10573,8 @@ struct llm_build_deepseek2 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -10720,9 +10724,7 @@ struct llm_build_deepseek2 : public llm_graph_context { } } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -10818,6 +10820,8 @@ struct llm_build_bitnet : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -10900,9 +10904,7 @@ struct llm_build_bitnet : public llm_graph_context { cb(cur, "attn_o_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -10977,6 +10979,8 @@ struct llm_build_t5_enc : public llm_graph_context { auto * inp_attn = build_attn_inp_no_cache(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -11010,9 +11014,7 @@ struct llm_build_t5_enc : public llm_graph_context { cb(cur, "kqv_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -11083,6 +11085,8 @@ struct llm_build_t5_dec : public llm_graph_context { auto * inp_attn_self = build_attn_inp_kv_unified(); auto * inp_attn_cross = build_attn_inp_cross(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -11174,11 +11178,8 @@ struct llm_build_t5_dec : public llm_graph_context { //cb(cur, "kqv_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); inpCA = ggml_get_rows(ctx0, inpCA, inp_out_ids); } @@ -11248,6 +11249,8 @@ struct llm_build_jais : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { cur = build_norm(inpL, model.layers[il].attn_norm, @@ -11280,9 +11283,7 @@ struct llm_build_jais : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/float(n_embd_head), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); } @@ -11346,6 +11347,8 @@ struct llm_build_chatglm : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -11412,9 +11415,7 @@ struct llm_build_chatglm : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -11479,6 +11480,8 @@ struct llm_build_glm4 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -11545,9 +11548,7 @@ struct llm_build_glm4 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -11630,6 +11631,8 @@ struct llm_build_nemotron : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -11689,9 +11692,7 @@ struct llm_build_nemotron : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -11759,6 +11760,8 @@ struct llm_build_exaone : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -11820,9 +11823,7 @@ struct llm_build_exaone : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -12098,6 +12099,8 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { const auto n_seq_tokens = ubatch.n_seq_tokens; const auto n_seqs = ubatch.n_seqs; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); @@ -12139,13 +12142,16 @@ struct llm_build_rwkv6 : public llm_build_rwkv6_base { ); ggml_build_forward_expand(gf, build_rwkv_token_shift_store(token_shift, ubatch, il)); - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - ffn_inp = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens), inp_out_ids); - ffn_norm = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, ffn_norm, n_embd, n_tokens), inp_out_ids); - x_prev = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, x_prev, n_embd, n_tokens), inp_out_ids); - cur = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, cur, n_embd, n_tokens), inp_out_ids); + ffn_inp = ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens); + ffn_norm = ggml_reshape_2d(ctx0, ffn_norm, n_embd, n_tokens); + x_prev = ggml_reshape_2d(ctx0, x_prev, n_embd, n_tokens); + cur = ggml_reshape_2d(ctx0, cur, n_embd, n_tokens); + + if (il == n_layer - 1 && inp_out_ids) { + ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); + ffn_norm = ggml_get_rows(ctx0, ffn_norm, inp_out_ids); + x_prev = ggml_get_rows(ctx0, x_prev, inp_out_ids); + cur = ggml_get_rows(ctx0, cur, inp_out_ids); } cur = build_rwkv6_channel_mix(layer, ffn_norm, x_prev, LLM_ARCH_RWKV6); @@ -12193,6 +12199,8 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { const auto n_seq_tokens = ubatch.n_seq_tokens; const auto n_seqs = ubatch.n_seqs; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); @@ -12217,11 +12225,12 @@ struct llm_build_rwkv6qwen2 : public llm_build_rwkv6_base { ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); cb(ffn_inp, "ffn_inp", il); - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, cur, n_embd, n_tokens), inp_out_ids); - ffn_inp = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens), inp_out_ids); + cur = ggml_reshape_2d(ctx0, cur, n_embd, n_tokens); + ffn_inp = ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens); + + if (il == n_layer - 1 && inp_out_ids) { + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); } // feed-forward network @@ -12447,6 +12456,8 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { const auto n_seq_tokens = ubatch.n_seq_tokens; const auto n_seqs = ubatch.n_seqs; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); @@ -12488,12 +12499,14 @@ struct llm_build_rwkv7 : public llm_build_rwkv7_base { ); ggml_build_forward_expand(gf, build_rwkv_token_shift_store(token_shift, ubatch, il)); - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - ffn_inp = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens), inp_out_ids); - ffn_norm = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, ffn_norm, n_embd, n_tokens), inp_out_ids); - x_prev = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, x_prev, n_embd, n_tokens), inp_out_ids); + ffn_inp = ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens); + ffn_norm = ggml_reshape_2d(ctx0, ffn_norm, n_embd, n_tokens); + x_prev = ggml_reshape_2d(ctx0, x_prev, n_embd, n_tokens); + + if (il == n_layer - 1 && inp_out_ids) { + ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); + ffn_norm = ggml_get_rows(ctx0, ffn_norm, inp_out_ids); + x_prev = ggml_get_rows(ctx0, x_prev, inp_out_ids); } cur = build_rwkv7_channel_mix(layer, ffn_norm, x_prev, LLM_ARCH_RWKV7); @@ -12538,6 +12551,8 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { const auto n_seq_tokens = ubatch.n_seq_tokens; const auto n_seqs = ubatch.n_seqs; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { const llama_layer * layer = &model.layers[il]; inpL = ggml_reshape_3d(ctx0, inpL, n_embd, n_seq_tokens, n_seqs); @@ -12562,11 +12577,12 @@ struct llm_build_arwkv7 : public llm_build_rwkv7_base { ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); cb(ffn_inp, "ffn_inp", il); - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, cur, n_embd, n_tokens), inp_out_ids); - ffn_inp = ggml_get_rows(ctx0, ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens), inp_out_ids); + cur = ggml_reshape_2d(ctx0, cur, n_embd, n_tokens); + ffn_inp = ggml_reshape_2d(ctx0, ffn_inp, n_embd, n_tokens); + + if (il == n_layer - 1 && inp_out_ids) { + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); } // feed-forward network @@ -12635,6 +12651,9 @@ struct llm_build_granite : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); 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; @@ -12697,9 +12716,7 @@ struct llm_build_granite : public llm_graph_context { cb(cur, "attn_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -12818,6 +12835,8 @@ struct llm_build_chameleon : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -12894,21 +12913,19 @@ struct llm_build_chameleon : public llm_graph_context { cur = build_attn(inp_attn, gf, model.layers[il].wo, nullptr, Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); - - if (hparams.swin_norm) { - cur = build_norm(cur, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, il); - } } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } + if (hparams.swin_norm) { + cur = build_norm(cur, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, il); + } + ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); cb(ffn_inp, "ffn_inp", il); @@ -13149,6 +13166,8 @@ struct llm_build_plm : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -13252,9 +13271,7 @@ struct llm_build_plm : public llm_graph_context { q_states, k_states, v_states, nullptr, nullptr, kq_scale, il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -13314,6 +13331,8 @@ struct llm_build_bailingmoe : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -13375,9 +13394,7 @@ struct llm_build_bailingmoe : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_rot)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -13463,6 +13480,8 @@ struct llm_build_dots1 : public llm_graph_context { auto * inp_attn = build_attn_inp_kv_unified(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -13515,9 +13534,7 @@ struct llm_build_dots1 : public llm_graph_context { Qcur, Kcur, Vcur, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } @@ -13615,6 +13632,8 @@ struct llm_build_arcee : 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; + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -13677,9 +13696,7 @@ struct llm_build_arcee : public llm_graph_context { cb(cur, "attn_out", il); } - if (il == n_layer - 1) { - // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); + 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); } From 9230dbe2c757e2d5071329095727d0fa9d4b85c4 Mon Sep 17 00:00:00 2001 From: Charles Xu Date: Fri, 20 Jun 2025 09:51:01 +0200 Subject: [PATCH 94/95] ggml: Update KleidiAI to v1.9.0 (#14277) --- ggml/src/ggml-cpu/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index df00340570baa..52cae778cac18 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -465,9 +465,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name) # Fetch KleidiAI sources: include(FetchContent) - set(KLEIDIAI_COMMIT_TAG "v1.6.0") + set(KLEIDIAI_COMMIT_TAG "v1.9.0") set(KLEIDIAI_DOWNLOAD_URL "https://github.com/ARM-software/kleidiai/archive/refs/tags/${KLEIDIAI_COMMIT_TAG}.tar.gz") - set(KLEIDIAI_ARCHIVE_MD5 "75b4ad68f25ab673dcc01065e5a0b05f") + set(KLEIDIAI_ARCHIVE_MD5 "2a8e1bb55d201557553545536489a017") if (POLICY CMP0135) cmake_policy(SET CMP0135 NEW) From d27b3ca1758dfb1718e333d497ef4b68ad109bc2 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 20 Jun 2025 11:19:15 +0300 Subject: [PATCH 95/95] ggml : fix repack work size for mul_mat_id (#14292) ggml-ci --- ggml/src/ggml-cpu/repack.cpp | 38 ++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/ggml/src/ggml-cpu/repack.cpp b/ggml/src/ggml-cpu/repack.cpp index 5c6715d5c01ea..2907192904a72 100644 --- a/ggml/src/ggml-cpu/repack.cpp +++ b/ggml/src/ggml-cpu/repack.cpp @@ -1163,13 +1163,24 @@ template op) { case GGML_OP_MUL_MAT: - size = ggml_row_size(PARAM_TYPE, ggml_nelements(op->src[1])); - return true; + { + size = ggml_row_size(PARAM_TYPE, ggml_nelements(op->src[1])); + return true; + } case GGML_OP_MUL_MAT_ID: - size = ggml_row_size(PARAM_TYPE, ggml_nelements(op->src[1])); - size = GGML_PAD(size, sizeof(int64_t)); // + padding for next bloc. - size += sizeof(int64_t) * (1+op->src[0]->ne[2]) * op->src[1]->ne[2]; - return true; + { + size = ggml_row_size(PARAM_TYPE, ggml_nelements(op->src[1])); + size = GGML_PAD(size, sizeof(int64_t)); // + padding for next bloc. + + const int64_t ne02 = op->src[0]->ne[2]; // n_as, n_expert + const int64_t ne12 = op->src[1]->ne[2]; // n_tokens + + const size_t sizeof_mmid_row_mapping = sizeof(int64_t); + + size += sizeof_mmid_row_mapping*ne02*(ne12 + 1); + + return true; + } default: // GGML_ABORT("fatal error"); break; @@ -1305,14 +1316,17 @@ template wsize >= (GGML_PAD(nbw3, sizeof(int64_t)) + n_as * sizeof(int64_t) + - n_as * ne12 * sizeof(mmid_row_mapping))); + GGML_ASSERT(params->wsize >= + (GGML_PAD(nbw3, sizeof(int64_t)) + + n_as*(ne12 + 1)*sizeof(mmid_row_mapping)) + ); - auto * wdata = (char *) params->wdata; - auto * wdata_src1_end = (char *) wdata + GGML_PAD(nbw3, sizeof(int64_t)); - auto * matrix_row_counts = (int64_t *) (wdata_src1_end); // [n_as] + auto * wdata = (char *)params->wdata; + auto * wdata_src1_end = (char *)wdata + GGML_PAD(nbw3, sizeof(int64_t)); - struct mmid_row_mapping * matrix_rows = (struct mmid_row_mapping *) (matrix_row_counts + n_as); // [n_as][ne12] + // total of [n_as][ne12 + 1] elemets of type mmid_row_mapping (2*int32_t = int64_t) + auto * matrix_row_counts = (int64_t *) (wdata_src1_end); // [n_as] + struct mmid_row_mapping * matrix_rows = (struct mmid_row_mapping *) (matrix_row_counts + n_as); // [n_as][ne12] // src1: float32 => param type for (int64_t i12 = 0; i12 < ne12; ++i12) {

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℞!y3@@U}V?9 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