From 8079797ade274a86e5d8b6f71dfda9e26f6d72e1 Mon Sep 17 00:00:00 2001 From: Michelle Yu Date: Thu, 17 Sep 2026 09:48:00 -0700 Subject: [PATCH 1/8] checkpoint: cpu reference --- .gitignore | 1 + src/CMakeLists.txt | 1 + src/common/AutoModel/automodel.cpp | 107 +++- src/common/AutoModel/modeling_qwen3_8mtp.cpp | 592 ++++++++++++++++++ src/include/AutoModel/all_models.hpp | 6 + src/include/AutoModel/automodel.hpp | 1 + src/include/AutoModel/modeling_qwen3_8mtp.hpp | 95 +++ src/include/causal_lm.hpp | 46 ++ src/include/minja/minja.hpp | 8 + .../models/qwen3_8mtp/qwen3_8mtp_npu.hpp | 209 +++++++ src/lib/xrt/libqwen3_8mtp_npu.so | Bin 0 -> 276360 bytes src/model_list.json | 32 + src/test/qwen3_8mtp_npu/CMakeLists.txt | 47 ++ src/test/qwen3_8mtp_npu/Makefile | 83 +++ src/test/qwen3_8mtp_npu/activate.sh | 26 + src/test/qwen3_8mtp_npu/test.cpp | 127 ++++ src/xclbins/Qwen3.8-27B-NPU2/MTP_layer.xclbin | Bin 0 -> 426508 bytes 17 files changed, 1358 insertions(+), 23 deletions(-) create mode 100644 src/common/AutoModel/modeling_qwen3_8mtp.cpp create mode 100644 src/include/AutoModel/modeling_qwen3_8mtp.hpp create mode 100644 src/include/models/qwen3_8mtp/qwen3_8mtp_npu.hpp create mode 100755 src/lib/xrt/libqwen3_8mtp_npu.so create mode 100644 src/test/qwen3_8mtp_npu/CMakeLists.txt create mode 100644 src/test/qwen3_8mtp_npu/Makefile create mode 100755 src/test/qwen3_8mtp_npu/activate.sh create mode 100644 src/test/qwen3_8mtp_npu/test.cpp create mode 100644 src/xclbins/Qwen3.8-27B-NPU2/MTP_layer.xclbin diff --git a/.gitignore b/.gitignore index 8bf22b3ef..76327edd6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ __pycache__ _site .jekyll-metadata *.csv +.claude/ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2e19e3471..b9bb1bdff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -414,6 +414,7 @@ target_link_libraries(flm PUBLIC qwen3_5vl_npu qwen3_5_omni_npu qwen3_6_moe_npu + qwen3_8mtp_npu gemma_npu gemma_text_npu gemma4e_npu diff --git a/src/common/AutoModel/automodel.cpp b/src/common/AutoModel/automodel.cpp index 95c717047..364714466 100644 --- a/src/common/AutoModel/automodel.cpp +++ b/src/common/AutoModel/automodel.cpp @@ -294,16 +294,98 @@ std::string AutoModel::_shared_generate(chat_meta_info_t& meta_info, int length_ reason = MAX_LENGTH_REACHED; return result; } + // Speculation is only sound under greedy sampling: the engine accepts a + // draft by comparing it against the base model's argmax, so the tokens it + // returns are argmax tokens. Honouring a temperature, top-p or a + // repetition penalty while taking that path would silently replace the + // user's sampler with greedy decoding -- the output stays fluent, so + // nothing would ever flag it. Anything but top_k == 1 stays on the + // ordinary loop, which is also where sample_greedy() already routes. + // + // supports_speculation() is defaulted to false on causal_lm, so every + // engine but qwen3_8mtp answers false here and keeps the ordinary loop. + // Evaluated once per generate(), not per token. + const bool spec_enabled = + this->lm_engine->supports_speculation() && this->sampler && + this->sampler->top_k == 1 && this->sampler->rep_penalty == 1.0f && + this->sampler->freq_penalty == 0.0f && this->sampler->pre_penalty == 0.0f; + // Draft depth. Named because it is also the hit-rate denominator: if the + // request and the accounting were two separate literals, tuning one would + // silently skew the metric that says whether the tuning helped. + // The engine clamps to its own MTP_STEPS and may draft fewer. + const int SPEC_MAX_DRAFT = 7; + if (spec_enabled) { + header_print("FLM", "Speculative decoding enabled (MTP draft head)"); + } + + // One accepted token, handled exactly as the single-token path handles a + // sampled one. Returns false when the loop must stop. + // + // Shared rather than duplicated on purpose: a speculative branch with its + // own copy of the streaming, history and eos checks is how a batch ends up + // emitting text past a stop token. + auto consume = [&](int token) -> bool { + this->total_tokens++; + last_sampled_token = token; + + this->profiler_list[TKOEN_DECODE_TIME].start(); + if (this->is_normal_token(token)){ // filter out special tokens + std::string token_str = this->tokenizer->run_time_decoder(token); + os << token_str << std::flush; + result += token_str; + } + this->profiler_list[TKOEN_DECODE_TIME].stop(1); + this->token_history.push_back(token); + if (this->is_eos(token)){ + meta_info.generated_tokens++; + if (this->forward_on_eos) { + this->lm_engine->forward(token); + } + return false; + } + meta_info.generated_tokens++; + if ((length_limit > 0) && (meta_info.generated_tokens >= length_limit)){ + reason = MAX_LENGTH_REACHED; + return false; + } + return this->total_tokens < this->MAX_L; + }; + while (this->total_tokens < this->MAX_L){ if (is_cancelled()) { reason = CANCEL_DETECTED; - // reset stream content + // reset stream content buffer_.clear(); current_mode_ = StreamEventType::CONTENT; tool_name_.clear(); is_in_tool_block_ = false; break; } + + if (spec_enabled) { + this->profiler_list[DECODING_TIME].start(); + std::vector accepted = + this->lm_engine->speculate(last_sampled_token, SPEC_MAX_DRAFT); + // Charge the cycle to however many tokens came out of it, so + // tok/s stays comparable with the non-speculative path. + this->profiler_list[DECODING_TIME].stop( + accepted.empty() ? 1 : (int)accepted.size()); + + if (!accepted.empty()) { + // The engine has already committed these to its caches -- they + // must not be re-fed through forward(). An eos mid-batch stops + // here and the rest are dropped. + bool go_on = true; + for (int tok : accepted) { + if (!(go_on = consume(tok))) break; + } + if (!go_on) break; + continue; + } + // Empty means the engine declined this step (head not primed, no + // headroom under MAX_L). Fall through to the ordinary path. + } + this->profiler_list[DECODING_TIME].start(); buffer y = this->lm_engine->forward(last_sampled_token); this->profiler_list[DECODING_TIME].stop(1); @@ -311,29 +393,8 @@ std::string AutoModel::_shared_generate(chat_meta_info_t& meta_info, int length_ this->profiler_list[SAMPLING_TIME].start(); int sampled_token = this->sampler->sample(y); this->profiler_list[SAMPLING_TIME].stop(1); - this->total_tokens++; - last_sampled_token = sampled_token; - this->profiler_list[TKOEN_DECODE_TIME].start(); - if (this->is_normal_token(sampled_token)){ // filter out special tokens - std::string token_str = this->tokenizer->run_time_decoder(sampled_token); - os << token_str << std::flush; - result += token_str; - } - this->profiler_list[TKOEN_DECODE_TIME].stop(1); - this->token_history.push_back(sampled_token); - if (this->is_eos(sampled_token)){ - meta_info.generated_tokens++; - if (this->forward_on_eos) { - this->lm_engine->forward(last_sampled_token); - } - break; - } - meta_info.generated_tokens++; - if ((length_limit > 0) && (meta_info.generated_tokens >= length_limit)){ - reason = MAX_LENGTH_REACHED; - break; - } + if (!consume(sampled_token)) break; } meta_info.decoding_duration = (uint64_t)(time_utils::cast_to_us(this->profiler_list[DECODING_TIME].get_total_time()).first) * 1e3; meta_info.stop_reason = reason; diff --git a/src/common/AutoModel/modeling_qwen3_8mtp.cpp b/src/common/AutoModel/modeling_qwen3_8mtp.cpp new file mode 100644 index 000000000..a6b6ea335 --- /dev/null +++ b/src/common/AutoModel/modeling_qwen3_8mtp.cpp @@ -0,0 +1,592 @@ +/// \file modeling_qwen3_8mtp.cpp +/// \brief Qwen3_8MTP class +/// \author FastFlowLM Team +/// \date 2026-09-16 +/// \version 0.9.28 +/// \note AutoModel wrapper for Qwen3.8-27B. Text-only. +/// \note Speculative decode IS wired up: causal_lm carries the +/// supports_speculation()/speculate() hooks and AutoModel:: +/// _shared_generate() drives them under a greedy sampler. +/// \note generate() therefore delegates its decode loop to _shared_generate() +/// and keeps only the think-preamble replay. It previously carried a +/// private copy of the loop that called forward() + sample() directly, +/// which left speculation dead on the main chat path -- correct output, +/// no speedup, and a hit rate that never printed because no cycle ran. + +#include "AutoModel/modeling_qwen3_8mtp.hpp" + + +/************ Qwen3_8MTP family **************/ +Qwen3_8MTP::Qwen3_8MTP(flm_rt::device* npu_device_inst) : AutoModel(npu_device_inst, "Qwen3_8MTP") {} + +void Qwen3_8MTP::load_model(std::string model_path, json model_info, int default_context_length, bool enable_preemption) { + this->_shared_load_model(model_path, model_info, default_context_length, enable_preemption); + + this->q4nx = std::make_unique(this->model_path); + // lm_config->get("model_type", "") == qwen3_5 + this->lm_engine = std::make_unique(*this->lm_config, this->npu.get(), this->MAX_L); + + this->lm_engine->load_weights(*this->q4nx); + //free the q4nx + this->q4nx.reset(); + this->lm_engine->clear_context(); + this->setup_tokenizer(model_path); + this->sampler.reset(); + + this->enable_tool = true; + + // Qwen3.5-family recommended decoding defaults; the test harness overrides + // these with set_topk(1) when it wants a reproducible stream. + sampler_config config; + config.top_k = 20; + config.top_p = 0.8; + config.min_p = 0.0; + config.temperature = 0.7; + config.rep_penalty = 1.0; + config.freq_penalty = 1.0; + config.pre_penalty = 1.5f; + + this->set_sampler(config); + for (size_t i = 0; i < PROFILER_TYPE_NUM; i++) { + this->profiler_list[i].reset(); + } +} + +void Qwen3_8MTP::setup_tokenizer(std::string model_path) { + // tokenizer_config.json already lists eos_token_id as + // [248044 <|endoftext|>, 248046 <|im_end|>, 248048], and + // _shared_setup_tokenizer registers every entry of that array. config.json + // alone would only give 248044, which the chat template never emits -- + // that mismatch is the runaway-generation failure mode. + auto tokenizer_config = this->_shared_setup_tokenizer(model_path); +} + +std::string Qwen3_8MTP::apply_chat_template(nlohmann::ordered_json& messages, nlohmann::ordered_json tools) { + minja::chat_template_inputs inputs; + inputs.add_generation_prompt = true; + inputs.messages = messages; + inputs.extra_context = this->extra_context; + inputs.extra_context["enable_thinking"] = this->enable_think; + if (!tools.empty() && this->enable_tool) + inputs.tools = tools; + return this->chat_tmpl->apply(inputs); +} + +bool Qwen3_8MTP::insert(chat_meta_info_t& meta_info, lm_uniform_input_t& input, std::function is_cancelled) { + // preprocess + this->profiler_list[TKOEN_ENCODE_TIME].start(); + std::string templated_text; + if (input.messages.empty() && input.prompt.empty()) { + header_print("WARNING", "No messages or prompt provided"); + return false; + } + + // Text-only wrapper. model.q4nx carries no vision tower, so an image would + // be templated into <|vision_start|><|image_pad|>... placeholders that + // nothing ever fills -- the prompt would prefill garbage rather than fail. + // Drop them loudly instead. + if (!input.images.empty()) { + header_print("WARNING", "Qwen3.8-27B is loaded text-only; ignoring " << input.images.size() << " image(s)"); + input.images.clear(); + } + if (!input.audios.empty()) { + header_print("WARNING", "Qwen3.8-27B is loaded text-only; ignoring " << input.audios.size() << " audio clip(s)"); + input.audios.clear(); + } + + if (!input.messages.empty()) { // already a formated messages, usually from REST API + // Strip per-message media keys for the same reason as above. + json text_only_messages = json::array(); + for (const auto& item : input.messages) { + json entry = item; + entry.erase("images"); + entry.erase("audios"); + text_only_messages.push_back(entry); + } + nlohmann::ordered_json ordered_messages = text_only_messages; + templated_text = this->apply_chat_template(ordered_messages, input.tools); + } + else if (!input.prompt.empty()) { // a pure text, usually from the cli + nlohmann::ordered_json messages; + messages.push_back({ {"role", "user"}, {"content", input.prompt} }); + templated_text = this->apply_chat_template(messages); + } + + std::vector tokens = this->tokenizer->encode(templated_text); + + this->profiler_list[TKOEN_ENCODE_TIME].stop(tokens.size()); + + // hardware + int restore_idx = -1; + qwen3_8mtp_npu *qwen3_8mtp_engine = dynamic_cast(this->lm_engine.get()); + + if (meta_info.restore_allowed) { + restore_idx = qwen3_8mtp_engine->restore(); + this->total_tokens = restore_idx; + this->token_history = checkpoint_his; // restore the token history to be consistent with the restored KV cache, which is crucial for correct functioning of _shared_insert's prefix-matching logic + } + + // The chat template's generation prompt ends with the think preamble, and + // generate() re-feeds those exact tokens so it can stream them. Trim them + // here or they get prefilled twice. + // thinking on : "" "\n" -> 2 tokens + // thinking off: "" "\n\n" "" "\n\n" -> 4 tokens + size_t n = tokens.size(); + tokens.resize(n - (this->enable_think ? 2 : 4)); + + bool success = this->_shared_insert(meta_info, tokens, is_cancelled, nullptr); + + checkpoint_his = token_history; + int checkpoint_idx = qwen3_8mtp_engine->checkpoint(); + return success; +} + +std::string Qwen3_8MTP::generate(chat_meta_info_t& meta_info, int length_limit, std::ostream& os, std::function is_cancelled) { + std::string result; + assert(this->last_token != -1); + + // Only the preamble's own forward() calls are charged here; the loop's + // profilers are reset inside _shared_generate(). + this->profiler_list[DECODING_TIME].reset(); + this->profiler_list[TKOEN_DECODE_TIME].reset(); + std::string token_str; + int sampled_token; + // Replay the think preamble insert() trimmed off, so the tokens land in + // both the KV cache and the visible stream. + if(this->enable_think) { + this->token_history.push_back(think_start_id); + this->profiler_list[DECODING_TIME].start(); + this->lm_engine->forward(think_start_id); + this->profiler_list[DECODING_TIME].stop(1); + token_str = this->tokenizer->run_time_decoder(think_start_id); + result += token_str; + os << token_str << std::flush; + + // \n + this->token_history.push_back(198); + this->profiler_list[DECODING_TIME].start(); + buffer y = this->lm_engine->forward(198); + this->profiler_list[DECODING_TIME].stop(1); + token_str = this->tokenizer->run_time_decoder(198); + result += token_str; + sampled_token = this->sampler->sample(y); + os << token_str << std::flush; + } + else{ + this->token_history.push_back(think_start_id); + this->lm_engine->forward(think_start_id); + token_str = this->tokenizer->run_time_decoder(think_start_id); + + // \n\n + this->token_history.push_back(271); + this->profiler_list[DECODING_TIME].start(); + this->lm_engine->forward(271); + this->profiler_list[DECODING_TIME].stop(1); + token_str = this->tokenizer->run_time_decoder(271); + + this->token_history.push_back(think_end_id); + this->profiler_list[DECODING_TIME].start(); + this->lm_engine->forward(think_end_id); + this->profiler_list[DECODING_TIME].stop(1); + token_str = this->tokenizer->run_time_decoder(think_end_id); + + this->token_history.push_back(271); + this->profiler_list[DECODING_TIME].start(); + buffer y = this->lm_engine->forward(271); + this->profiler_list[DECODING_TIME].stop(1); + token_str = this->tokenizer->run_time_decoder(271); + sampled_token = this->sampler->sample(y); + } + if (this->total_tokens >= this->MAX_L){ + header_print("WARNING", "Max length reached, stopping generation..."); + meta_info.stop_reason = MAX_LENGTH_REACHED; + return result; + } + + // Hand the decode loop to the base class rather than running a private + // copy of it. This function used to carry its own while() calling + // forward() + sample() directly, which meant the whole speculative path -- + // and with it the MTP hit rate -- was dead on the main chat path: only + // generate_with_prompt() and the milestone driver ever reached + // speculate(). The preamble above is the only part that is genuinely + // specific to this model, so it stays; the loop is not. + // + // _shared_generate() seeds from this->last_token, emits it, then feeds it + // to forward(). The preamble's final sample is exactly that seed. + this->last_token = sampled_token; + result += this->_shared_generate(meta_info, length_limit, os, is_cancelled); + + // The engine counts every draft/verify cycle, so this prints whenever + // speculation actually ran, and prints nothing otherwise -- a checkpoint + // without an MTP head, or a non-greedy sampler, stays silent. + // + // Worth printing at all because a broken draft path is invisible in the + // text: verify overrides every rejected draft with the base model's own + // argmax, so bad drafting costs only speed. + if (auto* mtp = dynamic_cast(this->lm_engine.get())) { + mtp->report_speculation_stats(); + } + + return result; +} + +std::string Qwen3_8MTP::generate_with_prompt(chat_meta_info_t& meta_info, lm_uniform_input_t& input, int length_limit, std::ostream& os) { + if (!this->insert(meta_info, input)) { + return ""; + } + header_print("FLM", "Prompt inserted, starting generation..."); + if (this->enable_think) { + os << "\n" << std::flush; + } + return this->_shared_generate(meta_info, length_limit, os); +} + +// Non-stream +NonStreamResult Qwen3_8MTP::parse_nstream_content(const std::string response_text) { + NonStreamResult result; + + // Qwen3.5-style tool syntax: + // VALUE + std::string start_tag = ""; + std::string end_tag = ""; + std::string func_end_tag = ""; + std::string func_open = " fallback + size_t func_end_pos = response_text.find(func_end_tag, block_content_start); + if (func_end_pos != std::string::npos) { + block_end = func_end_pos + func_end_tag.length(); + } else { + block_end = response_text.length(); + } + search_from = block_end; + } + + std::string block = response_text.substr(block_content_start, block_end - block_content_start); + + std::string tool_name; + size_t func_start = block.find(func_open); + if (func_start != std::string::npos) { + func_start += func_open.length(); + size_t func_name_end = block.find(">", func_start); + if (func_name_end != std::string::npos) { + tool_name = block.substr(func_start, func_name_end - func_start); + } + } + + nlohmann::json args = nlohmann::json::object(); + size_t pos = 0; + + while (true) { + size_t param_start = block.find(param_open, pos); + if (param_start == std::string::npos) break; + + param_start += param_open.length(); + size_t param_name_end = block.find(">", param_start); + if (param_name_end == std::string::npos) break; + + std::string param_name = block.substr(param_start, param_name_end - param_start); + size_t value_start = param_name_end + 1; + size_t value_end = block.find(param_close, value_start); + + size_t next_param_pos = block.find(param_open, value_start); + size_t func_boundary_pos = block.find(func_end_tag, value_start); + + auto use_earlier_boundary = [&value_end](size_t boundary_pos) { + if (boundary_pos != std::string::npos && (value_end == std::string::npos || boundary_pos < value_end)) { + value_end = boundary_pos; + } + }; + + use_earlier_boundary(next_param_pos); + use_earlier_boundary(func_boundary_pos); + + if (value_end == std::string::npos) { + value_end = block.length(); + } + + std::string param_value = trim_tool_value(block.substr(value_start, value_end - value_start)); + + try { + args[param_name] = nlohmann::json::parse(param_value); + } + catch (...) { + args[param_name] = param_value; + } + + pos = value_end; + if (block.compare(value_end, param_close.length(), param_close) == 0) { + pos += param_close.length(); + } + } + + result.tool_calls_list.emplace_back(tool_name, args.dump()); + } + + if (result.tool_calls_list.empty()) { + size_t content_start = is_reasoning ? think_end_pos + think_end_tag.length() : 0; + result.content = response_text.substr(content_start); + } else { + // Populate legacy single-tool fields from the first call for backward compatibility + result.tool_name = result.tool_calls_list[0].first; + result.tool_args = result.tool_calls_list[0].second; + // Extract content before the first + size_t first_tool = response_text.find(start_tag); + size_t content_start = is_reasoning ? think_end_pos + think_end_tag.length() : 0; + if (first_tool != std::string::npos && first_tool > content_start) { + result.content = trim_tool_value(response_text.substr(content_start, first_tool - content_start)); + } + } + + return result; +} + +// Stream +StreamResult Qwen3_8MTP::parse_stream_content(const std::string content) { + return parse_stream_content_impl(content, false); +} + +StreamResult Qwen3_8MTP::parse_stream_content_final(const std::string content) { + return parse_stream_content_impl(content, true); +} + +StreamResult Qwen3_8MTP::parse_stream_content_impl(const std::string content, bool is_final) { + const std::string MARKER_THINK_START = ""; + const std::string MARKER_THINK_END = ""; + const std::string MARKER_TOOL_START = ""; + const std::string MARKER_TOOL_END = ""; + const std::string MARKER_FUNC_END = ""; + + + StreamResult result; + buffer_ += content; + + while (true) { + if (!is_in_tool_block_) { + size_t stray_end_pos = buffer_.find(MARKER_TOOL_END); + if (stray_end_pos != std::string::npos) { + buffer_.erase(stray_end_pos, MARKER_TOOL_END.length()); + } + } + + if (!is_in_tool_block_) { + size_t tool_start_pos = buffer_.find(MARKER_TOOL_START); + if (tool_start_pos != std::string::npos) { + if (tool_start_pos > 0) { + result.content = buffer_.substr(0, tool_start_pos); + result.type = current_mode_; + buffer_ = buffer_.substr(tool_start_pos); + return result; + } + + is_in_tool_block_ = true; + buffer_ = buffer_.substr(MARKER_TOOL_START.length()); + result.type = StreamEventType::WAITING; + return result; + } + } + + // tool calling process + if (is_in_tool_block_) { + size_t tool_end_pos = buffer_.find(MARKER_TOOL_END); + size_t func_end_pos = buffer_.find(MARKER_FUNC_END); + + if (tool_end_pos != std::string::npos || func_end_pos != std::string::npos || (is_final && !buffer_.empty())) { + size_t actual_end_pos = buffer_.size(); + size_t skip_length = 0; + + if (tool_end_pos != std::string::npos) { + actual_end_pos = tool_end_pos; + skip_length = MARKER_TOOL_END.length(); + } + else if (func_end_pos != std::string::npos) { + actual_end_pos = func_end_pos; + skip_length = MARKER_FUNC_END.length(); + } + + std::string block = buffer_.substr(0, actual_end_pos + skip_length); + buffer_ = buffer_.substr(actual_end_pos + skip_length); + is_in_tool_block_ = false; + + try { + result.type = StreamEventType::TOOL_DONE; + result.tool_id = "call_" + std::to_string(std::time(nullptr)); + + // parse function name + std::string func_open = "", func_start); + if (func_end != std::string::npos) { + result.tool_name = block.substr(func_start, func_end - func_start); + } + } + + // parse parameters + nlohmann::json args = nlohmann::json::object(); + std::string param_open = "", p_start); + if (p_name_end == std::string::npos) break; + std::string param_name = block.substr(p_start, p_name_end - p_start); + + size_t val_start = p_name_end + 1; + if (val_start < block.size() && block[val_start] == '\n') val_start++; + + size_t param_close_pos = block.find(param_close, val_start); + size_t val_end = param_close_pos; + + size_t next_param_pos = block.find(param_open, val_start); + size_t func_boundary_pos = block.find(MARKER_FUNC_END, val_start); + size_t tool_boundary_pos = block.find(MARKER_TOOL_END, val_start); + + auto use_earlier_boundary = [&val_end](size_t boundary_pos) { + if (boundary_pos != std::string::npos && (val_end == std::string::npos || boundary_pos < val_end)) { + val_end = boundary_pos; + } + }; + + use_earlier_boundary(next_param_pos); + use_earlier_boundary(func_boundary_pos); + use_earlier_boundary(tool_boundary_pos); + + if (val_end == std::string::npos && is_final) { + val_end = block.size(); + } + if (val_end == std::string::npos) break; + + std::string param_value = block.substr(val_start, val_end - val_start); + + // Enhanced trim: handle multiple newlines or spaces that the model may generate after a parameter + while(!param_value.empty() && (param_value.back() == '\n' || param_value.back() == '\r' || param_value.back() == ' ')) { + param_value.pop_back(); + } + + try { + // Try to parse as native JSON type (Integer, Float, Boolean, Array, Object) + args[param_name] = nlohmann::json::parse(param_value); + } + catch (...) { + args[param_name] = param_value; + } + + search_pos = param_close_pos != std::string::npos && val_end == param_close_pos + ? val_end + param_close.length() + : val_end; + } + result.tool_args_str = args.dump(); + return result; + } + catch (...) { + result.type = StreamEventType::CONTENT; + result.content = "[Error parsing tool call]"; + return result; + } + } + else { + result.type = StreamEventType::WAITING; + return result; + } + } + + if (current_mode_ == StreamEventType::CONTENT) { + size_t think_start_pos = buffer_.find(MARKER_THINK_START); + if (think_start_pos != std::string::npos) { + if (think_start_pos > 0) { + result.content = buffer_.substr(0, think_start_pos); + result.type = StreamEventType::CONTENT; + buffer_ = buffer_.substr(think_start_pos); + return result; + } + buffer_ = buffer_.substr(MARKER_THINK_START.length()); + current_mode_ = StreamEventType::REASONING; + continue; + } + } + else if (current_mode_ == StreamEventType::REASONING) { + size_t think_end_pos = buffer_.find(MARKER_THINK_END); + if (think_end_pos != std::string::npos) { + if (think_end_pos > 0) { + result.content = buffer_.substr(0, think_end_pos); + result.type = StreamEventType::REASONING; + buffer_ = buffer_.substr(think_end_pos); + return result; + } + buffer_ = buffer_.substr(MARKER_THINK_END.length()); + current_mode_ = StreamEventType::CONTENT; + continue; + } + } + + if (!buffer_.empty()) { + size_t last_lt = buffer_.rfind('<'); + // If '<' appears at the end (possibly an incomplete or tag) + if (last_lt != std::string::npos && (buffer_.length() - last_lt) <= 15) { + if (last_lt > 0) { + // Only output the content before '<' + result.content = buffer_.substr(0, last_lt); + result.type = current_mode_; + buffer_ = buffer_.substr(last_lt); + return result; + } else { + // If '<' is the first character in the buffer, directly wait for the next chunk + result.type = StreamEventType::WAITING; + return result; + } + } + + result.content = buffer_; + result.type = current_mode_; + buffer_.clear(); + return result; + } + + break; + } + + result.type = current_mode_; + return result; +} diff --git a/src/include/AutoModel/all_models.hpp b/src/include/AutoModel/all_models.hpp index 3281a1745..a3657df6c 100644 --- a/src/include/AutoModel/all_models.hpp +++ b/src/include/AutoModel/all_models.hpp @@ -20,6 +20,7 @@ #include "modeling_qwen3_5vl.hpp" #include "modeling_qwen3_5_omni.hpp" #include "modeling_qwen3_6_moe.hpp" +#include "modeling_qwen3_8mtp.hpp" #include "modeling_nanbeige.hpp" #include "modeling_gemma4e.hpp" #include "modeling_hunyuan.hpp" @@ -40,6 +41,7 @@ typedef enum { qwen3_5, qwen3_5_omni, qwen3_6_moe, + qwen3_8mtp, gemma3, gemma3_text, gemma4e, @@ -69,6 +71,7 @@ inline std::pair> get_auto_model(const s {"qwen3.5", SupportedModelFamily::qwen3_5}, {"qwen3.5-omni", SupportedModelFamily::qwen3_5_omni}, {"qwen3.6-moe", SupportedModelFamily::qwen3_6_moe}, + {"qwen3-8mtp", SupportedModelFamily::qwen3_8mtp}, {"gemma3", SupportedModelFamily::gemma3}, {"gemma3-text", SupportedModelFamily::gemma3_text}, {"gemma4e", SupportedModelFamily::gemma4e}, @@ -145,6 +148,9 @@ inline std::pair> get_auto_model(const s case SupportedModelFamily::qwen3_6_moe: auto_chat_engine = std::make_unique(npu_device_inst); break; + case SupportedModelFamily::qwen3_8mtp: + auto_chat_engine = std::make_unique(npu_device_inst); + break; case SupportedModelFamily::lfm2: auto_chat_engine = std::make_unique(npu_device_inst); break; diff --git a/src/include/AutoModel/automodel.hpp b/src/include/AutoModel/automodel.hpp index c5471f86b..53f1531a3 100644 --- a/src/include/AutoModel/automodel.hpp +++ b/src/include/AutoModel/automodel.hpp @@ -26,6 +26,7 @@ #include "models/qwen3vl/qwen3vl_npu.hpp" #include "models/qwen3_5vl/qwen3_5vl_npu.hpp" #include "models/qwen3_6_moe/qwen3_6_moe_npu.hpp" +#include "models/qwen3_8mtp/qwen3_8mtp_npu.hpp" #include "models/gemma/gemma_npu.hpp" #include "models/gemma_text/gemma_text_npu.hpp" #include "models/gemma4e/gemma4e_npu.hpp" diff --git a/src/include/AutoModel/modeling_qwen3_8mtp.hpp b/src/include/AutoModel/modeling_qwen3_8mtp.hpp new file mode 100644 index 000000000..b91bf812a --- /dev/null +++ b/src/include/AutoModel/modeling_qwen3_8mtp.hpp @@ -0,0 +1,95 @@ +/// \file modeling_qwen3_8mtp.hpp +/// \brief Qwen3_8MTP class +/// \author FastFlowLM Team +/// \date 2026-09-16 +/// \version 0.9.28 +/// \note AutoModel wrapper for Qwen3.8-27B (model_type qwen3_5): 64 layers, +/// 48 GatedDeltaNet + 16 full attention, plus a 1-layer MTP draft head. +/// \note Text-only. The checkpoint ships a vision tower but model.q4nx carries +/// no vision weights, so images are rejected rather than silently +/// mis-prefilled. Modelled on Qwen3_5VL minus the image pipeline. +/// \note The think ids are 248068/248069, NOT the 151667/151668 that +/// modeling_qwen3.hpp hardcodes. Copying those gives a model whose +/// reasoning block never closes. + +#pragma once +#include "AutoModel/automodel.hpp" + + +/************ Qwen3_8MTP **************/ +class Qwen3_8MTP : public AutoModel { +private: + + bool enable_think = false; + bool enable_tool = true; + + /// \note Qwen3.8 vocabulary, verified against tokenizer.json: + /// 248068, 248069. The chat template emits + /// "\n" when thinking is on and "\n\n\n\n" + /// when it is off, exactly as Qwen3.5 does. + int think_start_id = 248068; + int think_end_id = 248069; + + void setup_tokenizer(std::string model_path); + +public: + Qwen3_8MTP(flm_rt::device* npu_device_inst); + + void load_model(std::string model_path, json model_inf, int default_context_length = -1, bool enable_preemption = false) override; + bool insert(chat_meta_info_t& meta_info, lm_uniform_input_t& input, std::function is_cancelled = [] { return false; }) override; + std::string generate(chat_meta_info_t& meta_info, int length_limit, std::ostream& os, std::function is_cancelled = [] { return false; }) override; + std::string generate_with_prompt(chat_meta_info_t& meta_info, lm_uniform_input_t& input, int length_limit, std::ostream& os = std::cout) override; + std::string apply_chat_template(nlohmann::ordered_json& messages, nlohmann::ordered_json tools = nlohmann::ordered_json::object()) override; + NonStreamResult parse_nstream_content(const std::string response_text); + StreamResult parse_stream_content(const std::string content); + StreamResult parse_stream_content_final(const std::string content) override; + +private: + StreamResult parse_stream_content_impl(const std::string content, bool is_final); + +public: + + /// \brief Configure a parameter with type-erased value + /// \param parameter_name the name of the parameter + /// \param value the value to set (can be any type) + /// \return true if the parameter was configured successfully, false otherwise + bool configure_parameter(std::string parameter_name, const std::any& value) override { + if (parameter_name == "enable_think") { + try { + this->enable_think = std::any_cast(value); + return true; + } catch (const std::bad_any_cast&) { + return false; + } + } + else if (parameter_name == "reasoning_effort") { + std::string reasoning_effort; + try { + reasoning_effort = std::any_cast(value); + if (reasoning_effort == "high" || reasoning_effort == "medium" || reasoning_effort == "low") + this->enable_think = true; + else if (reasoning_effort == "none") + this->enable_think = false; + else + header_print("WARNING", "Reasoning effort must be 'none', 'low', 'medium' or 'high'!"); + return true; + } catch (const std::bad_any_cast&) { + return false; + } + } + else if (parameter_name == "toggle_think") { + this->enable_think = !this->enable_think; + return true; + } + else if (parameter_name == "system_prompt") { + try { + this->user_system_prompt = std::any_cast(value); + this->extra_context["user_system_prompt"] = this->user_system_prompt; + return true; + } catch (const std::bad_any_cast&) { + return false; + } + } + return AutoModel::configure_parameter(parameter_name, value); + } +}; diff --git a/src/include/causal_lm.hpp b/src/include/causal_lm.hpp index d4682a95a..0f13738f1 100644 --- a/src/include/causal_lm.hpp +++ b/src/include/causal_lm.hpp @@ -61,4 +61,50 @@ class causal_lm { virtual int checkpoint() = 0; virtual int restore() = 0; + + // ---- speculative decoding --------------------------------------------- + // Defaulted, not pure: only engines with a draft head override these, and + // a pure virtual here would fail to compile all 16 other subclasses. + // + // ABI WARNING -- adding a virtual to this class is a lockstep change. + // Every engine .so emits its own vtable for its causal_lm subclass and flm + // loads those .so files prebuilt; flm emits no vtable of its own. Appending + // here renumbers the vtable, so any .so not rebuilt keeps one that is short + // by the number of methods added, and calling a new method reads past its + // end. Measured: these two took the vtable from 120 to 136 bytes, and every + // stale .so segfaulted on its first decode step -- after a clean prefill, + // with no diagnostic. A link check cannot catch it; the vtable symbol still + // resolves, it is merely the wrong size. + // + // So: every .so in src/lib/xrt must be rebuilt and re-copied in the same + // change as any edit to this class. Verify with + // readelf -sW .so | grep _ZTV # all engine vtables must agree + // not with "it compiled" and not with "it linked". + + /// \brief whether speculate() can currently run + /// \return false unless the engine has a draft head and loaded weights for it + /// \note Default false: an engine that does not override this is never + /// asked to speculate and keeps the single-token path exactly. + virtual bool supports_speculation() const { return false; } + + /// \brief propose several tokens at once and return the ones the model agrees with + /// \param last_token the most recently committed token -- the one the caller + /// would otherwise pass to forward() + /// \param max_draft how many tokens to draft; the engine may draft fewer + /// \return the committed tokens, in order, at least one on success; + /// empty means "could not speculate this step" + /// \note An empty return is not an error and not end-of-stream. It is how + /// the engine declines -- no draft head, not enough context, no room + /// under MAX_L -- and the caller must fall back to forward() + + /// sample() for that step. + /// \note PRECONDITION: greedy sampling. Acceptance is an exact integer + /// compare against the base model's argmax, so the tokens returned + /// are argmax tokens. Calling this with top_k != 1, a temperature, or + /// repetition penalties active silently substitutes greedy decoding + /// for the sampler the user configured -- the output stays fluent, so + /// nothing downstream would ever flag it. The caller must gate on its + /// own sampler; the engine cannot see it. + /// \note The engine has already committed these tokens to its caches. The + /// caller must not re-feed them through forward(). + virtual std::vector speculate(int last_token, int max_draft) { return {}; } }; \ No newline at end of file diff --git a/src/include/minja/minja.hpp b/src/include/minja/minja.hpp index 58cdb4176..35757e916 100644 --- a/src/include/minja/minja.hpp +++ b/src/include/minja/minja.hpp @@ -1351,6 +1351,14 @@ class BinaryOpExpr : public Expression { if (name == "iterable") return l.is_iterable(); if (name == "sequence") return l.is_array(); if (name == "defined") return !l.is_null(); + // Upstream minja (commit 3e4c61c) implements `is defined` but not + // its negation, and throws on the test NAME before ever looking at + // the value -- so `x is undefined` fails even when x is set. + // VariableExpr::do_evaluate returns a null Value for a missing + // name, so this is the exact mirror of the line above. + // Qwen3.8-27B's chat template opens with + // `{%- if enable_thinking is undefined or enable_thinking is true %}`. + if (name == "undefined") return l.is_null(); if (name == "true") return l.to_bool(); if (name == "false") return !l.to_bool(); throw std::runtime_error("Unknown type for 'is' operator: " + name); diff --git a/src/include/models/qwen3_8mtp/qwen3_8mtp_npu.hpp b/src/include/models/qwen3_8mtp/qwen3_8mtp_npu.hpp new file mode 100644 index 000000000..5947be681 --- /dev/null +++ b/src/include/models/qwen3_8mtp/qwen3_8mtp_npu.hpp @@ -0,0 +1,209 @@ +/// \file qwen3_8mtp_npu.hpp +/// \brief qwen3_8mtp_npu class +/// \author FastFlowLM Team +/// \date 2026-09-16 +/// \version 0.9.28 +/// \note Qwen3.8-27B: 64 layers, 48 GatedDeltaNet + 16 full attention in the +/// pattern [lin,lin,lin,full] x 16, plus a 1-layer MTP draft head. +/// \note Phase 1 is CPU-only -- no xclbin, no NPU sequence header. The +/// constructor still takes an npu_xclbin_manager* so the signature +/// matches every other engine and Phase 2 needs no call-site change. +/// \note Nothing from detail/ may be included here: the runtime's +/// automodel.hpp pulls this header in. +#pragma once +#include "lm_config.hpp" +#include "npu_utils/npu_utils.hpp" +#include "tensor_utils/q4_npu_eXpress.hpp" +#include "tensor_2d.hpp" +#include "utils/utils.hpp" +#include "causal_lm.hpp" +#if USEAVX2 +#include // For AVX intrinsics +#endif + + +/// \brief optional payload for prefill() +/// \note This is the same `void* payload` seam qwen3_5vl_npu uses for images. +/// Phase 1 needs it for one thing the reference forces: a multimodal +/// window's position ids are NOT 0..L-1. In the dumped prompt 221 tokens +/// occupy only 165 positions, because a 16x16 image block consumes 64 +/// token slots while advancing position by 8. Anything that reproduces a +/// captured window must therefore supply positions explicitly. +/// \note Both pointers are borrowed and only read during the call. +struct qwen3_8mtp_payload_t { + /// [3][L] m-rope position ids, channels t,h,w. Null = pure text, in which + /// case the engine emits ctx..ctx+L-1 on all three channels. + const int32_t* position_ids = nullptr; + /// [L][hidden_size] fp32 hidden states to use instead of the embedding + /// lookup. Null = look every id up in model.embed_tokens. Phase 2's vision + /// encoder writes image rows here; the milestone driver uses it to feed a + /// captured inputs_embeds. + const float* embeds = nullptr; +}; + +/// \note This is the only engine that overrides causal_lm's speculation hooks. +/// They are defaulted in the base, so the other 15 engines keep the +/// single-token path unchanged -- but their .so files must still be +/// rebuilt in lockstep, because the added virtuals renumber the shared +/// vtable. See the ABI warning in causal_lm.hpp. +class qwen3_8mtp_npu : public causal_lm{ +public: + /// \brief initialize the qwen3_8mtp_npu + /// \param config the configuration + /// \param npu_instance the npu instance (unused in phase 1, CPU only) + /// \param MAX_L the maximum context length + qwen3_8mtp_npu(LM_Config config, npu_xclbin_manager *npu_instance, int MAX_L = 4096); + ~qwen3_8mtp_npu(); + + /// \brief forward one token + /// \param ids the token id + /// \return the last-token logits + buffer forward(int ids) override; + + /// \brief prefill a window of tokens + /// \param ids the token ids + /// \param payload reserved for the phase-2 vision path + /// \return the last-token logits + /// \note Appends to the KV/SSM state; never resets. _chunked_insert calls + /// this repeatedly for one prompt. + buffer prefill(std::vector& ids, void* payload = nullptr) override; + + /// \brief set the context length + /// \param L the context length + void set_context_length(int L) override; + + /// \brief load the weights + /// \param q4nx the q4nx + void load_weights(Q4NX& q4nx) override; + + /// \brief clear the context + void clear_context() override; + + /// \brief get the k cache + /// \note dead ceremony; nothing in the runtime calls it + buffer get_k_cache(int layer_idx, int idx) override; + + /// \brief get the v cache + /// \note dead ceremony; nothing in the runtime calls it + buffer get_v_cache(int layer_idx, int idx) override; + + /// \brief update the max length + /// \param MAX_L the max length + void update_max_length(uint32_t MAX_L) override; + + /// \brief get the current context length + /// \return the current context length + int get_current_context_length() override; + int checkpoint() override; + int restore() override; + + /// \brief true once a checkpoint carrying the mtp.* tensors is loaded + /// \note Answers false before load_weights(), and false forever for a + /// checkpoint without an MTP head -- that is still a valid base + /// model, it just decodes one token at a time. + bool supports_speculation() const override; + + /// \brief draft with the MTP head, verify against the full stack, commit + /// \param last_token the token the caller would otherwise pass to forward() + /// \param max_draft draft depth, clamped to MTP_STEPS (7) + /// \return the committed tokens (1..max_draft+1), or {} to decline + /// \note The returned tokens are already in the caches. Feeding them back + /// through forward() would double-append them. + /// \note Greedy only -- see the precondition on causal_lm::speculate. + std::vector speculate(int last_token, int max_draft) override; + + // ---- speculation statistics ------------------------------------------- + // All non-virtual: they add no vtable slot, so unlike the two speculation + // hooks on causal_lm these cost no lockstep rebuild of the other engines. + // + // Worth reporting at all because a broken draft path is SILENT. Verify + // overrides every rejected draft with the base model's own argmax, so bad + // drafting produces correct text and merely burns time -- the hit rate is + // the only outward symptom. Without it a regression here reads as "the + // machine feels slow today". + + /// \brief mean drafts accepted per speculative cycle since load + double mean_accepted_length() const; + + /// \brief fraction of offered drafts the base model agreed with, in [0,1] + /// \note Denominator is drafts actually offered, which is not + /// cycles x MTP_STEPS: k is clamped by max_draft and by the MAX_L + /// headroom check, so short cycles would otherwise be charged full. + /// \note The free token committed at the first mismatch is NOT counted as + /// a hit -- it is the base model's argmax, not a correct draft. + /// Counting it would floor this at 1/k for a head that never once + /// guessed right. + double draft_hit_rate() const; + + /// \brief speculative cycles run since load; 0 means speculation never ran + /// \note Check this before reading a rate: with no cycles the rates are + /// 0.0, which is indistinguishable from "ran and missed everything". + uint64_t speculation_cycles() const; + + /// \brief one-line summary, or "" if no cycle ever ran + std::string speculation_stats() const; + + /// \brief print that summary; prints nothing when no cycle ran + /// \note Engine-side rather than in the runtime decode loop on purpose: + /// this model's AutoModel wrapper has its own generate() that does + /// not go through _shared_generate, so a runtime-side counter would + /// stay silent on the main chat path. + void report_speculation_stats() const; + + /// \brief zero the counters, e.g. between benchmark runs + /// \note Counters are cumulative since load and survive clear_context(), + /// so a per-turn rate needs this at the start of each turn. + void reset_speculation_stats(); + + // ---- phase 2 and 3: MTP draft + verify ------------------------------- + // Not part of causal_lm. The runtime cannot drive speculation yet, so + // these are the engine-side half only, reachable from the milestone + // driver and from a future speculate() override. + + /// \brief the raw hidden states the last prefill()/forward() produced + /// \return [L][hidden_size] fp32, layer 63's output -- BEFORE model.norm. + /// Valid until the next prefill()/forward(). + /// \note This is the layer tap, for scoring against prefill.layer_63_out. + /// It is NOT what the MTP head consumes -- see last_normed_states(). + const float* last_hidden_states(int& L, int& D) const; + + /// \brief the same states with model.norm applied + /// \return [L][hidden_size] fp32, equal to the reference's + /// prefill.final_norm_out. Valid until the next call. + /// \note This is what the MTP head's fusion takes as `prev_hidden`, and + /// the distinction is load-bearing: the dump's mtp.step0.prev_hidden + /// matches final_norm_out exactly (cos 1.0) and the pre-norm tap + /// only to cos 0.94. Feeding the raw tap makes the head fuse + /// unnormalised states -- it still drafts plausible tokens, so the + /// failure shows up only as a quietly poor acceptance rate. + const float* last_normed_states(int& L, int& D); + + /// \brief draft up to k continuations with the MTP head + /// \param ids the window's token ids (k=1 in steady state) + /// \param prev_hidden [T][hidden_size], the states that predicted them + /// \param T window length + /// \param k how many tokens to draft + /// \return the drafted tokens, greedy argmax; empty if no MTP head loaded + /// \note Greedy is not a default, it is the contract: acceptance is an + /// exact integer compare, so a sampled draft would match only by + /// coincidence and the speedup would vanish. + std::vector mtp_draft(const std::vector& ids, + const float* prev_hidden, int T, int k); + + /// \brief run the k+1 verify tokens through all 64 layers and accept + /// \param verify_ids the k+1 tokens: the committed token then the k drafts + /// \param drafts the k drafted tokens, to compare against + /// \param out_argmax receives the base model's argmax at all k+1 positions + /// \return how many drafts were accepted; `accepted + 1` tokens commit + /// \note Snapshots the stack first and rolls back on a partial accept -- + /// the delta-net fold has no inverse, so there is no other way back. + int prefill_verify(const std::vector& verify_ids, + const std::vector& drafts, + std::vector& out_argmax); + + /// \brief whether the checkpoint carried an MTP head + bool has_mtp_head() const; +private: + struct Impl; + Impl* _impl; +}; diff --git a/src/lib/xrt/libqwen3_8mtp_npu.so b/src/lib/xrt/libqwen3_8mtp_npu.so new file mode 100755 index 0000000000000000000000000000000000000000..f813f50a3ffa3f3857acdd3ba342f0bcd45bcb40 GIT binary patch literal 276360 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

6DpuEvbTF3^|BJEOjWUbt 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%0Ans7=|6Qk>6l71Z`qlyWCr< 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⋙^)Q!vb5h7;SstUdZj}^abo)d>(O1w{+;Qha=9t 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:/openmp> + $<$>:-fopenmp> + ) +endif() + +target_link_libraries(test_qwen3_8mtp_npu PUBLIC + qwen3_8mtp_npu + xrt_coreutil +) + +# Link OpenMP if available +if(OpenMP_CXX_FOUND) + target_link_libraries(test_qwen3_8mtp_npu PUBLIC OpenMP::OpenMP_CXX) +endif() + +# Add test target +add_custom_target(test_qwen3_8mtp_npu_target + DEPENDS test_qwen3_8mtp_npu + COMMENT "Building test_qwen3_8mtp_npu executable" +) diff --git a/src/test/qwen3_8mtp_npu/Makefile b/src/test/qwen3_8mtp_npu/Makefile new file mode 100644 index 000000000..92baeb895 --- /dev/null +++ b/src/test/qwen3_8mtp_npu/Makefile @@ -0,0 +1,83 @@ +# ============================================================================= +# Qwen3.8-27B (MTP) NPU Test Makefile +# ============================================================================= +# +# This Makefile builds the standalone test harness for Qwen3.8-27B. +# +# Usage: +# make - Build the test executable +# make clean - Remove all built files +# make test - Build and run with a short prompt +# +# ============================================================================= +-include ../common.mk + + +SOURCES += test.cpp +SOURCES += ../../common/AutoModel/automodel.cpp +SOURCES += ../../common/AutoModel/modeling_qwen3_8mtp.cpp +SOURCES += ../../common/tokenizer/tokenizer.cpp +SOURCES += ../../common/modules/sampler.cpp + +HEADERS += ../../include/models/qwen3_8mtp/qwen3_8mtp_npu.hpp +HEADERS += ../../include/AutoModel/modeling_qwen3_8mtp.hpp + + +ifeq ($(WSL), 0) + +LDFLAGS += -lqwen3_8mtp_npu + +CPP_SOURCES := $(filter %.cpp,$(SOURCES)) +OBJECTS := $(addprefix $(BUILD_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o))) +DEPS := $(OBJECTS:.o=.d) +VPATH := $(sort $(dir $(CPP_SOURCES))) + +all: $(BUILD_DIR)/test_qwen3_8mtp_npu + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +$(BUILD_DIR)/%.o: %.cpp | $(BUILD_DIR) + $(CXX) $(CXX_FLAGS) -c $< -o $@ + +$(BUILD_DIR)/test_qwen3_8mtp_npu: $(OBJECTS) + $(CXX) $(CXX_FLAGS) -o $@ $^ $(LDFLAGS) $(DEPENDENCY_LDFLAGS) + +clean: + rm -rf $(BUILD_DIR) + +# Phase 1 is CPU-only: ~1-2 s/token, so -n stays small. Raise it once the +# NPU offload lands, not before. +test: $(BUILD_DIR)/test_qwen3_8mtp_npu + cp ../../model_list.json $(BUILD_DIR)/model_list.json + cd $(BUILD_DIR) && export LD_LIBRARY_PATH=../../../lib/xrt && ./test_qwen3_8mtp_npu --model qwen3-8mtp:27b -s 1 -n 16 + +-include $(DEPS) +.PHONY: all clean test + +else + +# WSL build environment +# Use CMake to invoke the Visual Studio +PWSH := powershell.exe + +all: directories test + +directories: + mkdir -p $(BUILD_DIR) + +$(BUILD_DIR)/test_qwen3_8mtp_npu.exe: $(SOURCES) + cd $(BUILD_DIR) && $(PWSH) -Command "cmake ../../../test/qwen3_8mtp_npu" + cd $(BUILD_DIR) && $(PWSH) -Command "cmake --build . --config Release --target test_qwen3_8mtp_npu" + +clean: + rm -rf $(BUILD_DIR) + + +test: directories $(BUILD_DIR)/test_qwen3_8mtp_npu.exe + cp ../../model_list.json $(BUILD_DIR)/model_list.json + cd $(BUILD_DIR) && ${PWSH} -Command "\$$env:PATH = '..\..\..\lib;' + \$$env:PATH; .\test_qwen3_8mtp_npu.exe -m qwen3-8mtp:27b -s 1 -p 0 -n 16" + +.PHONY: all clean test directories + +endif diff --git a/src/test/qwen3_8mtp_npu/activate.sh b/src/test/qwen3_8mtp_npu/activate.sh new file mode 100755 index 000000000..113316496 --- /dev/null +++ b/src/test/qwen3_8mtp_npu/activate.sh @@ -0,0 +1,26 @@ +#!/usr/bin/bash + +# Model weights live at $FLM_MODEL_PATH/models/Qwen3.8-27B-NPU2. +# model_list.json's "model_path" is "models", so this must point at the PARENT +# of that directory, not at it. +export FLM_MODEL_PATH="/scratch/$USER" + +# copy src to dst dir only if the contents differ +copy_if_different() { + local src="$1" dst="$2/$(basename "$1")" + if cmp -s "$src" "$dst"; then + echo "unchanged: $dst" + else + cp "$src" "$dst" && echo "updated: $dst" + fi +} + +# copy lib +copy_if_different /scratch/$USER/Projects/FastFlowLM_IRON/FLM_DLL/build/lib/libqwen3_8mtp_npu.so ../../lib/xrt + +# Phase 1 is CPU-only -- no xclbins to stage. The NPU kernel binaries land here +# in phase 2 (dequant_mm / lm_head / layer / GateDeltaNet_prefill), at which +# point add the matching copy_if_different lines for +# ../../xclbins/Qwen3.8-27B-NPU2/. +copy_if_different /scratch/michyu/Projects/FastFlowLM_IRON/FLM_Xclbin/Qwen3_8/MTP_decoding/build/QWEN3_8_27B/xclbins/MTP_layer.xclbin /scratch/michyu/FastFlowLM/src/xclbins/Qwen3.8-27B-NPU2/ + diff --git a/src/test/qwen3_8mtp_npu/test.cpp b/src/test/qwen3_8mtp_npu/test.cpp new file mode 100644 index 000000000..45b00828f --- /dev/null +++ b/src/test/qwen3_8mtp_npu/test.cpp @@ -0,0 +1,127 @@ +#include +#include +#include "utils/utils.hpp" +#include "utils/vm_args.hpp" +#include "AutoModel/modeling_qwen3_8mtp.hpp" +#include "model_list.hpp" + +flm_rt::device npu_device_global; + +int main(int argc, char* argv[]) { + #ifdef __WINDOWS__ + SetConsoleOutputCP(CP_UTF8); + SetConsoleCP(CP_UTF8); + // Set thread priority to low + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST); + #endif + + arg_utils::po::options_description desc("Allowed options"); + arg_utils::po::variables_map vm; + desc.add_options()("model,m", arg_utils::po::value()->required(), "Model file"); + desc.add_options()("Short,s", arg_utils::po::value()->default_value(true), "Short Prompt"); + desc.add_options()("Preemption,p", arg_utils::po::value()->default_value(false), "Preemption"); + desc.add_options()("Think,t", arg_utils::po::value()->default_value(false), "Enable thinking"); + desc.add_options()("Length,n", arg_utils::po::value()->default_value(32), "Max generated tokens"); + arg_utils::po::store(arg_utils::po::parse_command_line(argc, argv, desc), vm); + + std::string tag = vm["model"].as(); + bool short_prompt = vm["Short"].as(); + bool preemption = vm["Preemption"].as(); + bool enable_think = vm["Think"].as(); + int length_limit = vm["Length"].as(); + std::cout << "Model: " << tag << std::endl; + std::string exe_dir = utils::get_executable_directory(); + std::string model_dir = utils::get_models_directory(); + std::string model_list_path = exe_dir + "/model_list.json"; + model_list model_list(model_list_path, model_dir); + + header_print("info", "Initializing chat model..."); + std::string model_path = model_list.get_model_path(tag); + std::pair model_info_pair = model_list.get_model_info(tag); + nlohmann::json model_info = model_info_pair.second; + std::cout << "Model path: " << model_path << std::endl; + + std::unique_ptr chat = std::make_unique(&npu_device_global); + npu_device_global = flm_rt::device(0); + + chat->load_model(model_path, model_info, -1, preemption); + header_print("info", "Model loaded"); + chat_meta_info_t meta_info; + lm_uniform_input_t uniformed_input; + // Greedy. Phase 1 runs the 64-layer stack on the CPU at roughly 1-2 s/token, + // so a deterministic stream is what makes a short run worth comparing + // against the milestone driver at all. + // + // set_topk(1) alone is NOT enough to get greedy decoding here, and it is + // not enough to enable speculation. load_model() installs the Qwen3.5 + // recommended defaults, which include freq_penalty 1.0 and pre_penalty + // 1.5, and sample_greedy() still applies penalties when repeat_last_n != 0 + // -- they reorder the logits before the argmax. So the sampler's argmax is + // not the model's argmax, MTP acceptance is an exact compare against the + // model's argmax, and _shared_generate's gate correctly refuses to + // speculate. Zeroing them is what actually makes this run greedy. + sampler_config greedy; + greedy.top_k = 1; + greedy.rep_penalty = 1.0f; // 1.0 == disabled + greedy.freq_penalty = 0.0f; + greedy.pre_penalty = 0.0f; + chat->set_sampler(greedy); + chat->configure_parameter("enable_think", enable_think); + + if (short_prompt) { + // Keep this SHORT. Decode is the slow path here, not prefill: every + // token streams ~15.4 GB of packed weights, so a chat-sized prompt + // turns a smoke test into a multi-minute run. + uniformed_input.prompt = "What is the capital of France?"; + + std::cout << "Prompt: " << uniformed_input.prompt << std::endl; + std::cout << "Response: " << std::endl; + chat->start_total_timer(); + bool success = chat->insert(meta_info, uniformed_input); + if (!success) { + header_print("ERROR", "Prompt insertion failed"); + return 1; + } + std::string response = chat->generate(meta_info, length_limit, std::cout); + chat->stop_total_timer(); + std::cout << std::endl; + std::cout << std::endl; + std::cout << chat->show_profile() << std::endl; + } + else{ + std::ifstream file("../../../../prompt.txt", std::ios::binary); + if (!file.is_open()) { + std::cout << "Failed to open prompt file" << std::endl; + return 1; + } + uniformed_input.prompt = ""; + file.seekg(0, std::ios::end); + uniformed_input.prompt.resize(file.tellg()); + file.seekg(0, std::ios::beg); + file.read(uniformed_input.prompt.data(), uniformed_input.prompt.size()); + file.close(); + std::cout << "Prompt: " << uniformed_input.prompt << std::endl; + std::cout << "Response: "; + chat->start_total_timer(); + bool success = chat->insert(meta_info, uniformed_input); + if (!success) { + header_print("ERROR", "Prompt insertion failed"); + return 1; + } + std::string response = chat->generate(meta_info, length_limit, std::cout); + chat->stop_total_timer(); + std::cout << std::endl; + std::cout << std::endl; + std::cout << chat->show_profile() << std::endl; + } + + std::pair> history = chat->get_history(); + std::cout << "History length: " << history.second.size() << std::endl; + std::cout << std::endl; + for (auto t: history.second){ + std::cout << t << " "; + } + std::cout << std::endl; + + return 0; +} diff --git a/src/xclbins/Qwen3.8-27B-NPU2/MTP_layer.xclbin b/src/xclbins/Qwen3.8-27B-NPU2/MTP_layer.xclbin new file mode 100644 index 0000000000000000000000000000000000000000..48d6099bf88efb72af5266c100a58cf9bc44277b GIT binary patch literal 426508 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 literal 0 HcmV?d00001 From 4febbb1da769185d480d87846539d50ec68cd84c Mon Sep 17 00:00:00 2001 From: zaneni6 Date: Tue, 22 Sep 2026 14:22:21 -0700 Subject: [PATCH 2/8] feat: add logo on MSI installer --- src/wix/flm.wxs | 20 ++++++++++++++++++-- src/wix/installer.bmp | Bin 0 -> 461814 bytes src/wix/top.bmp | Bin 0 -> 85894 bytes 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/wix/installer.bmp create mode 100644 src/wix/top.bmp diff --git a/src/wix/flm.wxs b/src/wix/flm.wxs index 2d99edebd..f205dd5fd 100644 --- a/src/wix/flm.wxs +++ b/src/wix/flm.wxs @@ -4,7 +4,9 @@ Ports src/inno/flm.iss (Inno Setup) to an MSI package. Build (from src/wix): - wix build Package.wxs -arch x64 -ext WixToolset.UI.wixext -out flm-setup.msi + ./build.ps1 + which stages package\ and then runs + wix build flm.wxs -arch x64 -ext WixToolset.UI.wixext -out flm-setup.msi Not ported 1:1 from flm.iss: - The interactive "model storage location" / "server port" wizard pages are @@ -24,7 +26,7 @@ - + + + diff --git a/src/wix/installer.bmp b/src/wix/installer.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bd7c5eaffe70f95e7c6d6471e5d83c7b2da23ae0 GIT binary patch literal 461814 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