From 8f83d6c271d194bde2d410145a0ce73bc42e85cd Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Mon, 8 Jun 2026 13:40:12 +0200 Subject: [PATCH 01/23] mtmd : add video input support (#24269) * wip * ok: lazy bitmap API * remember to free lazy text * wip * add mtmd_helper_video * support video input on server (base64 input) * add MTMD_VIDEO config * add timestamp * update CLI * cli: allow auto-completion for video * add --video arg * fix build * update docs * rename as suggested --- common/arg.cpp | 4 +- common/common.h | 2 +- tests/test-mtmd-c-api.c | 6 + tools/cli/cli.cpp | 9 +- tools/mtmd/CMakeLists.txt | 7 + tools/mtmd/mtmd-cli.cpp | 19 +- tools/mtmd/mtmd-helper.cpp | 506 +++++++++++++++++++++++++++++++- tools/mtmd/mtmd-helper.h | 82 +++++- tools/mtmd/mtmd.cpp | 167 +++++++++-- tools/mtmd/mtmd.h | 31 ++ tools/mtmd/test-3.mp4 | Bin 0 -> 661813 bytes tools/server/README.md | 4 + tools/server/server-common.cpp | 40 +-- tools/server/server-common.h | 1 + tools/server/server-context.cpp | 5 +- tools/server/server-context.h | 1 + 16 files changed, 807 insertions(+), 77 deletions(-) create mode 100644 tools/mtmd/test-3.mp4 diff --git a/common/arg.cpp b/common/arg.cpp index 1b6884781..0213a67c8 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2221,8 +2221,8 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } ).set_examples(mmproj_examples).set_env("LLAMA_ARG_MMPROJ_OFFLOAD")); add_opt(common_arg( - {"--image", "--audio"}, "FILE", - "path to an image or audio file. use with multimodal models, use comma-separated values for multiple files\n", + {"--image", "--audio", "--video"}, "FILE", + "path to an image, audio, or video file. use with multimodal models, use comma-separated values for multiple files\n", [](common_params & params, const std::string & value) { for (const auto & item : parse_csv_row(value)) { params.image.emplace_back(item); diff --git a/common/common.h b/common/common.h index 13f387271..b732a2087 100644 --- a/common/common.h +++ b/common/common.h @@ -571,7 +571,7 @@ struct common_params { struct common_params_model mmproj; bool mmproj_use_gpu = true; // use GPU for multimodal model bool no_mmproj = false; // explicitly disable multimodal model - std::vector image; // path to image file(s) + std::vector image; // path to image file(s) ; TODO: change the name to "media" int image_min_tokens = -1; int image_max_tokens = -1; diff --git a/tests/test-mtmd-c-api.c b/tests/test-mtmd-c-api.c index b49498c87..46a038f4a 100644 --- a/tests/test-mtmd-c-api.c +++ b/tests/test-mtmd-c-api.c @@ -2,6 +2,7 @@ #include #include "mtmd.h" +#include "mtmd-helper.h" int main(void) { printf("\n\nTesting libmtmd C API...\n"); @@ -17,6 +18,11 @@ int main(void) { return 1; } + // simple test for the helper + size_t n_tokens_total = mtmd_helper_get_n_tokens(chunks); + printf("Total tokens in chunks: %zu\n", n_tokens_total); + assert(n_tokens_total > 0); + size_t n_chunks = mtmd_input_chunks_size(chunks); printf("Number of chunks: %zu\n", n_chunks); assert(n_chunks > 0); diff --git a/tools/cli/cli.cpp b/tools/cli/cli.cpp index a164b3bb9..3ed345bf0 100644 --- a/tools/cli/cli.cpp +++ b/tools/cli/cli.cpp @@ -235,7 +235,7 @@ struct cli_context { }; // TODO?: Make this reusable, enums, docs -static const std::array cmds = { +static const std::array cmds = { "/audio ", "/clear", "/exit", @@ -243,6 +243,7 @@ static const std::array cmds = { "/image ", "/read ", "/regen", + "/video ", }; static std::vector> auto_completion_callback(std::string_view line, size_t cursor_byte_pos) { @@ -457,6 +458,9 @@ int llama_cli(int argc, char ** argv) { if (inf.has_inp_audio) { console::log(" /audio add an audio file\n"); } + if (inf.has_inp_video) { + console::log(" /video add a video file\n"); + } console::log("\n"); // interactive loop @@ -553,7 +557,8 @@ int llama_cli(int argc, char ** argv) { continue; } else if ( (string_starts_with(buffer, "/image ") && inf.has_inp_image) || - (string_starts_with(buffer, "/audio ") && inf.has_inp_audio)) { + (string_starts_with(buffer, "/audio ") && inf.has_inp_audio) || + (string_starts_with(buffer, "/video ") && inf.has_inp_video)) { // just in case (bad copy-paste for example), we strip all trailing/leading spaces std::string fname = string_strip(buffer.substr(7)); std::string marker = ctx_cli.load_input_file(fname, true); diff --git a/tools/mtmd/CMakeLists.txt b/tools/mtmd/CMakeLists.txt index 20c531786..09b62357f 100644 --- a/tools/mtmd/CMakeLists.txt +++ b/tools/mtmd/CMakeLists.txt @@ -1,5 +1,8 @@ # mtmd +set(MTMD_VIDEO ON CACHE BOOL "enable video support in mtmd (requires ffmpeg binary in PATH)") +# TODO: add MTMD_VIDEO_METHOD in the future to select between ffmpeg and other backends + find_package(Threads REQUIRED) add_library(mtmd @@ -63,6 +66,10 @@ target_include_directories(mtmd PRIVATE ../..) target_include_directories(mtmd PRIVATE ../../vendor) target_compile_features (mtmd PRIVATE cxx_std_17) +if (MTMD_VIDEO) + target_compile_definitions(mtmd PRIVATE MTMD_VIDEO) +endif() + if (BUILD_SHARED_LIBS) set_target_properties (mtmd PROPERTIES POSITION_INDEPENDENT_CODE ON) target_compile_definitions(mtmd PRIVATE LLAMA_BUILD) diff --git a/tools/mtmd/mtmd-cli.cpp b/tools/mtmd/mtmd-cli.cpp index bd7f9871c..a3cad7cd0 100644 --- a/tools/mtmd/mtmd-cli.cpp +++ b/tools/mtmd/mtmd-cli.cpp @@ -77,6 +77,7 @@ struct mtmd_cli_context { int n_batch; mtmd::bitmaps bitmaps; + std::vector videos; // chat template common_chat_templates_ptr tmpls; @@ -166,11 +167,14 @@ struct mtmd_cli_context { } bool load_media(const std::string & fname) { - mtmd::bitmap bmp(mtmd_helper_bitmap_init_from_file(ctx_vision.get(), fname.c_str(), false)); - if (!bmp.ptr) { + auto res = mtmd_helper_bitmap_init_from_file(ctx_vision.get(), fname.c_str(), false); + if (!res.bitmap) { return false; } - bitmaps.entries.push_back(std::move(bmp)); + bitmaps.entries.emplace_back(res.bitmap); + if (res.video_ctx) { + videos.emplace_back(res.video_ctx); + } return true; } }; @@ -253,6 +257,7 @@ static int eval_message(mtmd_cli_context & ctx, common_chat_msg & msg) { } ctx.bitmaps.entries.clear(); + ctx.videos.clear(); llama_pos new_n_past; if (mtmd_helper_eval_chunks(ctx.ctx_vision.get(), @@ -373,6 +378,9 @@ int main(int argc, char ** argv) { if (mtmd_support_audio(ctx.ctx_vision.get())) { LOG("\n /audio load an audio"); } + if (mtmd_helper_support_video(ctx.ctx_vision.get())) { + LOG("\n /video load a video"); + } LOG("\n /clear clear the chat history"); LOG("\n /quit or /exit exit the program"); LOG("\n"); @@ -407,14 +415,15 @@ int main(int argc, char ** argv) { g_is_generating = true; bool is_image = line == "/image" || line.find("/image ") == 0; bool is_audio = line == "/audio" || line.find("/audio ") == 0; - if (is_image || is_audio) { + bool is_video = line == "/video" || line.find("/video ") == 0; + if (is_image || is_audio || is_video) { if (line.size() < 8) { LOG_ERR("ERR: Missing media filename\n"); continue; } std::string media_path = line.substr(7); if (ctx.load_media(media_path)) { - LOG("%s %s loaded\n", media_path.c_str(), is_image ? "image" : "audio"); + LOG("%s %s loaded\n", media_path.c_str(), is_image ? "image" : is_audio ? "audio" : "video"); content += mtmd_default_marker(); } // else, error is already printed by libmtmd diff --git a/tools/mtmd/mtmd-helper.cpp b/tools/mtmd/mtmd-helper.cpp index 94ad01511..18440f06e 100644 --- a/tools/mtmd/mtmd-helper.cpp +++ b/tools/mtmd/mtmd-helper.cpp @@ -36,6 +36,11 @@ #error "mtmd-helper is a public library outside of mtmd. it must not include internal headers" #endif +#ifdef MTMD_VIDEO +#include "sheredom/subprocess.h" +#include +#endif + // // internal logging functions // @@ -79,6 +84,7 @@ struct mtmd_helper_logger { } } g_logger; +#define LOG_DBG(...) g_logger.log(GGML_LOG_LEVEL_DEBUG, __VA_ARGS__) #define LOG_INF(...) g_logger.log(GGML_LOG_LEVEL_INFO, __VA_ARGS__) #define LOG_WRN(...) g_logger.log(GGML_LOG_LEVEL_WARN, __VA_ARGS__) #define LOG_ERR(...) g_logger.log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__) @@ -478,42 +484,94 @@ static bool decode_audio_from_buf(const unsigned char * buf_in, size_t len, int } // namespace audio_helpers -mtmd_bitmap * mtmd_helper_bitmap_init_from_buf(mtmd_context * ctx, const unsigned char * buf, size_t len, bool placeholder) { +// Computes FNV-1a hash of the data +static std::string fnv_hash(const uint8_t * data, size_t len) { + const uint64_t fnv_prime = 0x100000001b3ULL; + uint64_t hash = 0xcbf29ce484222325ULL; + + for (size_t i = 0; i < len; ++i) { + hash ^= data[i]; + hash *= fnv_prime; + } + return std::to_string(hash); +} + +mtmd_helper_bitmap_wrapper mtmd_helper_bitmap_init_from_buf(mtmd_context * ctx, const unsigned char * buf, size_t len, bool placeholder) { + // calculate the hash if needed + std::string id; + mtmd_bitmap * result = nullptr; + + if (!placeholder) { + id = fnv_hash(buf, len); + } + if (audio_helpers::is_audio_file((const char *)buf, len)) { std::vector pcmf32; const int sample_rate = mtmd_get_audio_sample_rate(ctx); if (sample_rate < 0) { LOG_ERR("This model does not support audio input\n"); - return nullptr; + return {nullptr, nullptr}; } if (!audio_helpers::decode_audio_from_buf(buf, len, sample_rate, pcmf32)) { LOG_ERR("Unable to read WAV audio file from buffer\n"); - return nullptr; + return {nullptr, nullptr}; } - return mtmd_bitmap_init_from_audio(pcmf32.size(), placeholder ? nullptr : pcmf32.data()); + result = mtmd_bitmap_init_from_audio(pcmf32.size(), placeholder ? nullptr : pcmf32.data()); + mtmd_bitmap_set_id(result, id.empty() ? nullptr : id.c_str()); + return {result, nullptr}; } // otherwise, we assume it's an image - mtmd_bitmap * result = nullptr; - { + if (!result) { int nx, ny, nc; auto * data = stbi_load_from_memory(buf, len, &nx, &ny, &nc, 3); - if (!data) { - LOG_ERR("%s: failed to decode image bytes\n", __func__); - return nullptr; + if (data) { + result = mtmd_bitmap_init(nx, ny, placeholder ? nullptr : data); + mtmd_bitmap_set_id(result, id.empty() ? nullptr : id.c_str()); + stbi_image_free(data); + return {result, nullptr}; } - result = mtmd_bitmap_init(nx, ny, placeholder ? nullptr : data); - stbi_image_free(data); + // otherwise, fallthrough to video decoding (if supported) } - return result; + + // last try: load as video +#ifdef MTMD_VIDEO + if (!result) { + auto params = mtmd_helper_video_init_params_default(); + auto video_ctx = mtmd_helper_video_init_from_buf(ctx, buf, len, params); + if (!video_ctx) { + LOG_ERR("%s: failed to decode buffer as either image/audio/video\n", __func__); + return {nullptr, nullptr}; + } + result = mtmd_bitmap_init_lazy(ctx, + id.empty() ? nullptr : id.c_str(), + video_ctx, + [](size_t, void * user_data, mtmd_bitmap ** out_bitmap, char ** out_text) -> int { + auto * vctx = static_cast(user_data); + char * text = nullptr; + int ret = mtmd_helper_video_read_next(vctx, out_bitmap, &text); + *out_text = text; // heap-allocated by read_next; freed automatically by mtmd + return ret; + }); + return {result, video_ctx}; + } +#else + if (!result) { + LOG_ERR("%s: failed to decode buffer as either image or audio (video support not compiled in)\n", __func__); + return {nullptr, nullptr}; + } +#endif + + // should not reach here + return {nullptr, nullptr}; } -mtmd_bitmap * mtmd_helper_bitmap_init_from_file(mtmd_context * ctx, const char * fname, bool placeholder) { +mtmd_helper_bitmap_wrapper mtmd_helper_bitmap_init_from_file(mtmd_context * ctx, const char * fname, bool placeholder) { std::vector buf; FILE * f = fopen(fname, "rb"); if (!f) { LOG_ERR("Unable to open file %s: %s\n", fname, strerror(errno)); - return nullptr; + return {nullptr, nullptr}; } fseek(f, 0, SEEK_END); @@ -522,7 +580,7 @@ mtmd_bitmap * mtmd_helper_bitmap_init_from_file(mtmd_context * ctx, const char * if (file_size < 0) { LOG_ERR("Failed to get file size of %s\n", fname); fclose(f); - return nullptr; + return {nullptr, nullptr}; } buf.resize(file_size); @@ -530,9 +588,425 @@ mtmd_bitmap * mtmd_helper_bitmap_init_from_file(mtmd_context * ctx, const char * fclose(f); if (n_read != (size_t)file_size) { LOG_ERR("Failed to read entire file %s", fname); - return nullptr; + return {nullptr, nullptr}; } return mtmd_helper_bitmap_init_from_buf(ctx, buf.data(), buf.size(), placeholder); } +bool mtmd_helper_support_video(mtmd_context * ctx) { +#ifdef MTMD_VIDEO + return mtmd_support_vision(ctx); +#else + return false; +#endif +} + +// +// Video input helpers +// + +#ifdef MTMD_VIDEO + +struct mtmd_helper_video { + mtmd_context * mctx; + std::string path; + std::vector input_buf; // non-empty when initialized from buffer + std::string ffmpeg_bin; + std::string ffprobe_bin; + float fps_target = 0.0f; + mtmd_helper_video_info info = {}; + + struct subprocess_s proc = {}; + bool proc_alive = false; + int32_t current_frame = 0; + std::thread feeder_thread; + + std::string prompt_start = "Video:"; + int32_t timestamp_interval_ms = 5000; // emit a timestamp text every N ms (0 = disabled) + float next_timestamp_ms = 0.0f; // next elapsed-ms threshold at which to emit + + std::vector frame_buf; + std::string pending_text; // text queued to be returned before the next frame + bool start_emitted = false; + + bool is_buf_input() const { return !input_buf.empty(); } + + // must run in a separate thread alongside stdout reading to avoid pipe deadlock + void feed_stdin(struct subprocess_s * sp) { + FILE * f = subprocess_stdin(sp); + if (!f) { + LOG_DBG("%s: subprocess has no stdin pipe\n", __func__); + return; + } + LOG_DBG("%s: feeding %zu bytes to stdin\n", __func__, input_buf.size()); + size_t written = fwrite(input_buf.data(), 1, input_buf.size(), f); + LOG_DBG("%s: wrote %zu bytes, closing stdin\n", __func__, written); + fclose(f); + } + + bool probe(float fps_target_arg) { + const char * input_arg = is_buf_input() ? "pipe:0" : path.c_str(); + const char * cmd[] = { + ffprobe_bin.c_str(), + "-v", "quiet", + "-show_entries", "stream=width,height,r_frame_rate,nb_frames,duration", + "-select_streams", "v:0", + "-of", "default=noprint_wrappers=1", + input_arg, + nullptr, + }; + + LOG_DBG("%s: launching:", __func__); + for (size_t i = 0; cmd[i]; i++) { LOG_DBG(" %s", cmd[i]); } + LOG_DBG("\n"); + + struct subprocess_s fprobe; + if (subprocess_create(cmd, + subprocess_option_search_user_path | subprocess_option_inherit_environment, + &fprobe) != 0) { + LOG_ERR("%s: failed to launch ffprobe\n", __func__); + return false; + } + + std::thread probe_feeder; + if (is_buf_input()) { + probe_feeder = std::thread([this, &fprobe]() { feed_stdin(&fprobe); }); + } + + uint32_t width = 0; + uint32_t height = 0; + float orig_fps = 0.0f; + float duration = -1.0f; + int32_t n_frames_orig = -1; + char line[256]; + FILE * fp = subprocess_stdout(&fprobe); + + while (fgets(line, sizeof(line), fp)) { + char * eq = strchr(line, '='); + if (!eq) continue; + *eq = '\0'; + const char * key = line; + const char * val = eq + 1; + char * nl = (char *)strchr(val, '\n'); + if (nl) *nl = '\0'; + + if (strcmp(key, "width") == 0) { + width = (uint32_t)atoi(val); + } else if (strcmp(key, "height") == 0) { + height = (uint32_t)atoi(val); + } else if (strcmp(key, "r_frame_rate") == 0) { + orig_fps = parse_rational(val); + } else if (strcmp(key, "nb_frames") == 0 && strcmp(val, "N/A") != 0) { + n_frames_orig = atoi(val); + } else if (strcmp(key, "duration") == 0 && strcmp(val, "N/A") != 0) { + duration = (float)atof(val); + } + } + + if (probe_feeder.joinable()) { + probe_feeder.join(); + } + + int ret_code; + subprocess_join(&fprobe, &ret_code); + subprocess_destroy(&fprobe); + + if (width == 0 || height == 0 || orig_fps <= 0.0f) { + return false; + } + + if (duration < 0.0f && n_frames_orig > 0) { + duration = (float)n_frames_orig / orig_fps; + } + + fps_target = fps_target_arg > 0.0f ? fps_target_arg : orig_fps; + info.width = width; + info.height = height; + info.fps = fps_target; + LOG_DBG("%s: %ux%u fps=%.2f duration=%.2fs n_frames=%d\n", + __func__, width, height, fps_target, duration, info.n_frames); + info.n_frames = duration > 0.0f ? (int32_t)(duration * fps_target + 0.5f) : -1; + frame_buf.resize((size_t)width * height * 3); + return true; + } + + bool start_ffmpeg(float seek_seconds) { + char seek_buf[64]; + char fps_buf[64]; + + std::vector cmd; + cmd.push_back(ffmpeg_bin.c_str()); + + if (!is_buf_input() && seek_seconds > 0.0f) { + // input-side seek: fast, keyframe-accurate; only valid for seekable file inputs + snprintf(seek_buf, sizeof(seek_buf), "%.6f", seek_seconds); + cmd.push_back("-ss"); + cmd.push_back(seek_buf); + } + + cmd.push_back("-i"); + // cache:pipe:0 wraps stdin with a seekable in-memory cache, letting ffmpeg seek + // backwards for container headers (e.g. MP4 moov atom at end of file) + cmd.push_back(is_buf_input() ? "cache:pipe:0" : path.c_str()); + + if (seek_seconds > 0.0f && is_buf_input()) { + // output-side seek: frame-accurate but decodes and discards frames up to seek point + snprintf(seek_buf, sizeof(seek_buf), "%.6f", seek_seconds); + cmd.push_back("-ss"); + cmd.push_back(seek_buf); + } + + if (fps_target > 0.0f) { + snprintf(fps_buf, sizeof(fps_buf), "fps=%.6f", fps_target); + cmd.push_back("-vf"); + cmd.push_back(fps_buf); + } + + cmd.push_back("-f"); + cmd.push_back("rawvideo"); + cmd.push_back("-pix_fmt"); + cmd.push_back("rgb24"); + cmd.push_back("pipe:1"); + cmd.push_back("-loglevel"); + cmd.push_back("error"); + cmd.push_back(nullptr); + + LOG_DBG("%s: launching:", __func__); + for (size_t i = 0; cmd[i]; i++) { + LOG_DBG(" %s", cmd[i]); + } + LOG_DBG("\n"); + + int ret = subprocess_create( + cmd.data(), + subprocess_option_search_user_path | subprocess_option_inherit_environment, + &proc); + + proc_alive = (ret == 0); + LOG_DBG("%s: subprocess_create ret=%d proc_alive=%d\n", __func__, ret, (int)proc_alive); + + if (proc_alive && is_buf_input()) { + LOG_DBG("%s: starting feeder thread for %zu-byte buffer\n", __func__, input_buf.size()); + feeder_thread = std::thread([this]() { feed_stdin(&proc); }); + } + + return proc_alive; + } + + void stop_ffmpeg() { + if (proc_alive) { + subprocess_terminate(&proc); + subprocess_destroy(&proc); + proc_alive = false; + } + if (feeder_thread.joinable()) { + feeder_thread.join(); + } + } + + mtmd_bitmap * read_next_frame() { + if (!proc_alive) return nullptr; + + FILE * fp = subprocess_stdout(&proc); + const size_t frame_size = (size_t)info.width * info.height * 3; + LOG_DBG("%s: reading frame %d, expecting %zu bytes (%ux%u)\n", + __func__, current_frame, frame_size, info.width, info.height); + + size_t total_read = 0; + while (total_read < frame_size) { + size_t n = fread(frame_buf.data() + total_read, 1, frame_size - total_read, fp); + if (n == 0) { + // clean EOF only if no bytes read yet; partial frame is an error + LOG_DBG("%s: fread returned 0 after %zu/%zu bytes (ferror=%d)\n", + __func__, total_read, frame_size, ferror(fp)); + proc_alive = false; + return nullptr; + } + total_read += n; + } + + LOG_DBG("%s: frame %d read OK\n", __func__, current_frame); + current_frame++; + return mtmd_bitmap_init(info.width, info.height, frame_buf.data()); + } + + int32_t read_next(mtmd_bitmap ** out_bitmap, char ** out_text) { + *out_bitmap = nullptr; + *out_text = nullptr; + + if (!pending_text.empty()) { + *out_text = strdup(pending_text.c_str()); + pending_text.clear(); + return *out_text ? 0 : -2; + } + + LOG_DBG("%s: proc_alive=%d start_emitted=%d current_frame=%d\n", + __func__, (int)proc_alive, (int)start_emitted, current_frame); + + if (!proc_alive) { + return (current_frame == 0) ? -2 : -1; + } + + if (!start_emitted) { + start_emitted = true; + if (!prompt_start.empty()) { + *out_text = strdup(prompt_start.c_str()); + return *out_text ? 0 : -2; + } + } + + mtmd_bitmap * frame = read_next_frame(); + if (!frame) return -1; + *out_bitmap = frame; + + if (timestamp_interval_ms > 0) { + // current_frame was already incremented by read_next_frame(); undo for elapsed calc + float elapsed_ms = (float)(current_frame - 1) / info.fps * 1000.0f; + if (elapsed_ms >= next_timestamp_ms) { + char ts_buf[32]; + float elapsed_s = elapsed_ms / 1000.0f; + int minutes = (int)(elapsed_s / 60); + float seconds = elapsed_s - minutes * 60.0f; + snprintf(ts_buf, sizeof(ts_buf), "[%dm%.2fs]", minutes, seconds); + pending_text = ts_buf; + next_timestamp_ms += (float)timestamp_interval_ms; + } + } + + return 0; + } + + static float parse_rational(const char * s) { + int num = 0, den = 1; + if (sscanf(s, "%d/%d", &num, &den) == 2 && den > 0) { + return (float)num / (float)den; + } + float val; + if (sscanf(s, "%f", &val) == 1) { + return val; + } + return 0.0f; + } +}; +#endif + +mtmd_helper_video_init_params mtmd_helper_video_init_params_default() { + return { + /* fps_target */ 4.0f, + /* ffmpeg_bin_dir */ nullptr, + /* timestamp_interval_ms */ 5000, + }; +} + +static std::string video_resolve_bin(const char * bin_dir, const char * name) { + if (!bin_dir || bin_dir[0] == '\0') { + return name; // rely on PATH + } + std::string result = bin_dir; + char last = result.back(); + if (last != '/' && last != '\\') { +#ifdef _WIN32 + result += '\\'; +#else + result += '/'; +#endif + } + result += name; +#ifdef _WIN32 + result += ".exe"; +#endif + return result; +} + +mtmd_helper_video * mtmd_helper_video_init( + mtmd_context * mctx, + const char * path, + mtmd_helper_video_init_params params) { +#ifdef MTMD_VIDEO + auto * ctx = new mtmd_helper_video(); + + ctx->mctx = mctx; + ctx->path = path; + ctx->ffmpeg_bin = video_resolve_bin(params.ffmpeg_bin_dir, "ffmpeg"); + ctx->ffprobe_bin = video_resolve_bin(params.ffmpeg_bin_dir, "ffprobe"); + ctx->timestamp_interval_ms = params.timestamp_interval_ms; + + if (!ctx->probe(params.fps_target)) { + LOG_ERR("%s: ffprobe failed for '%s' (is ffprobe in PATH?)\n", __func__, path); + delete ctx; + return nullptr; + } + + if (!ctx->start_ffmpeg(0.0f)) { + LOG_ERR("%s: failed to start ffmpeg for '%s' (is ffmpeg in PATH?)\n", __func__, path); + delete ctx; + return nullptr; + } + + return ctx; +#else + LOG_ERR("%s: video is not supported in this build (MTMD_VIDEO is set to OFF)\n", __func__); + return nullptr; +#endif +} + +mtmd_helper_video * mtmd_helper_video_init_from_buf( + mtmd_context * mctx, + const unsigned char * buf, size_t len, + mtmd_helper_video_init_params params) { +#ifdef MTMD_VIDEO + auto * ctx = new mtmd_helper_video(); + + ctx->mctx = mctx; + ctx->input_buf.assign(buf, buf + len); + ctx->ffmpeg_bin = video_resolve_bin(params.ffmpeg_bin_dir, "ffmpeg"); + ctx->ffprobe_bin = video_resolve_bin(params.ffmpeg_bin_dir, "ffprobe"); + ctx->timestamp_interval_ms = params.timestamp_interval_ms; + + if (!ctx->probe(params.fps_target)) { + LOG_ERR("%s: ffprobe failed on buffer (is ffprobe in PATH?)\n", __func__); + delete ctx; + return nullptr; + } + + if (!ctx->start_ffmpeg(0.0f)) { + LOG_ERR("%s: failed to start ffmpeg on buffer (is ffmpeg in PATH?)\n", __func__); + delete ctx; + return nullptr; + } + + return ctx; +#else + LOG_ERR("%s: video is not supported in this build (MTMD_VIDEO is set to OFF)\n", __func__); + return nullptr; +#endif +} + +void mtmd_helper_video_free(mtmd_helper_video * ctx) { +#ifdef MTMD_VIDEO + if (!ctx) return; + ctx->stop_ffmpeg(); + delete ctx; +#else + LOG_ERR("%s: video is not supported in this build (MTMD_VIDEO is set to OFF)\n", __func__); +#endif +} + +mtmd_helper_video_info mtmd_helper_video_get_info(const mtmd_helper_video * ctx) { +#ifdef MTMD_VIDEO + return ctx->info; +#else + GGML_ASSERT(false && "video is not supported in this build (MTMD_VIDEO is set to OFF)"); +#endif +} + +int32_t mtmd_helper_video_read_next(mtmd_helper_video * ctx, + mtmd_bitmap ** out_bitmap, char ** out_text) { +#ifdef MTMD_VIDEO + if (!ctx) return -2; + return ctx->read_next(out_bitmap, out_text); +#else + GGML_ASSERT(false && "video is not supported in this build (MTMD_VIDEO is set to OFF)"); +#endif +} diff --git a/tools/mtmd/mtmd-helper.h b/tools/mtmd/mtmd-helper.h index 7eecbb067..164b7c668 100644 --- a/tools/mtmd/mtmd-helper.h +++ b/tools/mtmd/mtmd-helper.h @@ -20,25 +20,39 @@ extern "C" { // BREAKING CHANGES are expected. // +struct mtmd_helper_video; +typedef struct mtmd_helper_video mtmd_helper_video; + // Set callback for all future logging events. // If this is not called, or NULL is supplied, everything is output on stderr. // Note: this also call mtmd_log_set() internally MTMD_API void mtmd_helper_log_set(ggml_log_callback log_callback, void * user_data); +// Returns true if this build includes video support (MTMD_VIDEO was ON at compile time). +MTMD_API bool mtmd_helper_support_video(mtmd_context * ctx); + +struct mtmd_helper_bitmap_wrapper { + mtmd_bitmap * bitmap; + mtmd_helper_video * video_ctx; +}; + // helper function to construct a mtmd_bitmap from a file // it calls mtmd_helper_bitmap_init_from_buf() internally // returns nullptr on failure // this function is thread-safe -MTMD_API mtmd_bitmap * mtmd_helper_bitmap_init_from_file(mtmd_context * ctx, const char * fname, bool placeholder); +MTMD_API struct mtmd_helper_bitmap_wrapper mtmd_helper_bitmap_init_from_file(mtmd_context * ctx, const char * fname, bool placeholder); // helper function to construct a mtmd_bitmap from a buffer containing a file // supported formats: // image: formats supported by stb_image: jpg, png, bmp, gif, etc. // audio: formats supported by miniaudio: wav, mp3, flac -// note: audio files will be auto-detected based on magic bytes +// note: +// - for now, video input is only supported via C++ helper functions +// - audio files will be auto-detected based on magic bytes +// - output bitmap will have FNV hash as the ID // returns nullptr on failure // this function is thread-safe -MTMD_API mtmd_bitmap * mtmd_helper_bitmap_init_from_buf(mtmd_context * ctx, const unsigned char * buf, size_t len, bool placeholder); +MTMD_API struct mtmd_helper_bitmap_wrapper mtmd_helper_bitmap_init_from_buf(mtmd_context * ctx, const unsigned char * buf, size_t len, bool placeholder); // helper to count the total number of tokens from a list of chunks, useful to keep track of KV cache MTMD_API size_t mtmd_helper_get_n_tokens(const mtmd_input_chunks * chunks); @@ -89,6 +103,56 @@ MTMD_API int32_t mtmd_helper_decode_image_chunk(mtmd_context * ctx, int32_t n_batch, llama_pos * new_n_past); +// +// video input helpers (requires ffmpeg/ffprobe installed on the system) +// the notion of video only exists at the helper level, it is not visible to the core mtmd library +// +// NOTE: this implementation is model-agnostic, it can be used with any vision-capable model +// however, it may not be accurate for some specific models +// (this is expected for now, to keep the implementation simple) +// + +struct mtmd_helper_video_info { + uint32_t width; + uint32_t height; + float fps; // effective fps (fps_target if set, else original video fps) + int32_t n_frames; // estimated total frames at effective fps (-1 if unknown) +}; + +struct mtmd_helper_video_init_params { + float fps_target; // desired output fps; <= 0 means use the video's native fps, defaulted to 4.0f + const char * ffmpeg_bin_dir; // directory containing ffmpeg/ffprobe binaries; NULL means search PATH + int64_t timestamp_interval_ms; // interval for adding timestamp as text chunk (example: "[10m50.5s]"); <= 0 means no timestamp, defaulted to 5000ms + // TODO @ngxson : allow "placeholder" bitmap output for counting tokens +}; + +MTMD_API struct mtmd_helper_video_init_params mtmd_helper_video_init_params_default(void); + +// returns NULL on failure (ffprobe not found, file unreadable, etc.) +MTMD_API mtmd_helper_video * mtmd_helper_video_init( + struct mtmd_context * mctx, + const char * path, + struct mtmd_helper_video_init_params params); + +// Same as mtmd_helper_video_init(), but reads from an in-memory buffer. +// The buffer is copied internally; the caller does not need to keep it alive. +// Note: pipe input is not seekable, so seeking will use output-side seeking +// (ffmpeg decodes and discards frames up to the target position). +MTMD_API mtmd_helper_video * mtmd_helper_video_init_from_buf( + struct mtmd_context * mctx, + const unsigned char * buf, size_t len, + struct mtmd_helper_video_init_params params); +MTMD_API void mtmd_helper_video_free(mtmd_helper_video * ctx); +MTMD_API struct mtmd_helper_video_info mtmd_helper_video_get_info(const mtmd_helper_video * ctx); + +// Read the next item from the video stream; exactly one of out_bitmap or out_text is set per call. +// *out_bitmap - heap-allocated; caller must free with mtmd_bitmap_free() +// *out_text - heap-allocated (always via strdup/malloc); caller must free with free() +// returns 0 on success, -1 on EOF, -2 on error +MTMD_API int32_t mtmd_helper_video_read_next(mtmd_helper_video * ctx, + mtmd_bitmap ** out_bitmap, + char ** out_text); + #ifdef __cplusplus } // extern "C" #endif @@ -97,4 +161,16 @@ MTMD_API int32_t mtmd_helper_decode_image_chunk(mtmd_context * ctx, // C++ wrappers // +#ifdef __cplusplus +namespace mtmd_helper { + +// video-related C++ wrappers +struct mtmd_helper_video_deleter { + void operator()(mtmd_helper_video * val) { mtmd_helper_video_free(val); } +}; +using video_ptr = std::unique_ptr; + +} // namespace mtmd_helper +#endif + #endif diff --git a/tools/mtmd/mtmd.cpp b/tools/mtmd/mtmd.cpp index c93fb1e0a..4140a3c4a 100644 --- a/tools/mtmd/mtmd.cpp +++ b/tools/mtmd/mtmd.cpp @@ -35,6 +35,10 @@ struct mtmd_bitmap { std::string id; // optional user-defined id, for ex: can be set to image hash, useful for KV cache tracking bool is_audio = false; // true if the bitmap is audio + // lazy-loaded bitmap + mtmd_bitmap_lazy_callback lazy_callback = nullptr; + void * lazy_user_data = nullptr; + mtmd_bitmap(const unsigned char * data, uint32_t nx, uint32_t ny) : nx(nx), ny(ny), is_audio(false) { if (data) { @@ -732,30 +736,111 @@ void mtmd_free(mtmd_context * ctx) { struct mtmd_tokenizer { mtmd_context * ctx; - std::vector bitmaps; std::string input_text; bool add_special; bool parse_special; const llama_vocab * vocab; + struct part { + std::string text; + const mtmd_bitmap * bitmap; + }; + std::vector parts; + // these will be freed when mtmd_tokenizer finishes + std::vector bm_from_lazy; // TODO @ngxson : refactor, free bm_from_lazy progressively + std::vector text_from_lazy; + mtmd_input_chunks cur; uint32_t n_images_added = 0; // 0-based index assigned to the next image chunk + ~mtmd_tokenizer() { + // note: mtmd::bitmap is already RAII + for (auto & str : text_from_lazy) { + free((void *)str); + } + } + mtmd_tokenizer(mtmd_context * ctx, const mtmd_input_text * text, - const mtmd_bitmap ** bitmaps, - size_t n_bitmaps) : ctx(ctx), bitmaps(bitmaps, bitmaps + n_bitmaps) { + const mtmd_bitmap ** bmps, + size_t n_bitmaps) : ctx(ctx) { add_special = text->add_special; parse_special = text->parse_special; input_text = text->text; vocab = ctx->vocab; + + std::vector bitmaps(bmps, bmps + n_bitmaps); + auto parts_str = split_text(input_text, ctx->media_marker); + size_t i_bm = 0; + for (const auto & part : parts_str) { + if (part == ctx->media_marker) { + if (i_bm >= bitmaps.size()) { + throw std::runtime_error(string_format("number of media markers in text (%zu) exceeds number of bitmaps (%zu)", i_bm + 1, bitmaps.size())); + } + parts.push_back({"", bitmaps[i_bm++]}); + } else { + parts.push_back({std::move(part), nullptr}); + } + } + + size_t n_markers = 0; + for (const auto & part : parts) { + if (part.bitmap != nullptr) { + n_markers++; + } + } + if (n_markers != bitmaps.size()) { + throw std::runtime_error(string_format("number of media markers in text (%zu) does not match number of bitmaps (%zu)", n_markers, bitmaps.size())); + } + + expand_lazy_bitmaps(); + } + + void expand_lazy_bitmaps() { + std::vector expanded; + expanded.reserve(parts.size()); + for (auto & p : parts) { + if (p.bitmap != nullptr && p.bitmap->lazy_callback) { + LOG_DBG("%s: expanding lazy bitmap\n", __func__); + for (size_t i = 0;; i++) { + char * out_str = nullptr; + mtmd_bitmap * out_bm = nullptr; + int res = p.bitmap->lazy_callback(i, + p.bitmap->lazy_user_data, + &out_bm, + &out_str); + if (out_bm && out_str) { + throw std::runtime_error(string_format("lazy callback cannot return both bitmap and text")); + } + if (res == 0) { + // OK, append the returned chunk; lazy part is not yet added + if (out_bm) { + auto & ptr = bm_from_lazy.emplace_back(out_bm); // remember to free it later + expanded.push_back({"", ptr.ptr.get()}); + LOG_DBG("%s: lazy callback returned bitmap with dimensions %d x %d\n", __func__, out_bm->nx, out_bm->ny); + } else if (out_str) { + auto & ptr = text_from_lazy.emplace_back(out_str); // remember to free it later + expanded.push_back({ptr, nullptr}); + LOG_DBG("%s: lazy callback returned text: %s\n", __func__, out_str); + } + } else if (res == -1) { + // EOF: lazy part removes itself (not added to expanded) + break; + } else if (res == -2) { + // error + throw std::runtime_error(string_format("lazy callback returned error")); + } + } + } else { + expanded.push_back(std::move(p)); + } + } + parts = std::move(expanded); } int32_t tokenize(mtmd_input_chunks * output) { cur.entries.clear(); - std::vector parts = split_text(input_text, ctx->media_marker); - size_t i_bm = 0; // index of the current bitmap // [QWEN_VIDEO] handle frame merging for models that support it (i.e. qwen-vl) int n_merge_frames = 1; @@ -764,53 +849,50 @@ struct mtmd_tokenizer { GGML_ASSERT(n_merge_frames <= 2 && "we only support merging maximum 2 images for now; open an issue if this model supports merging more"); } + // Build merged_bitmaps: each entry is a group of 1 or 2 bitmaps. + // For consecutive mergeable bitmap parts, merge them and collapse the second part out of this->parts. std::vector> merged_bitmaps; if (n_merge_frames > 1) { - size_t i_bm_scan = 0; for (size_t i = 0; i < parts.size(); ++i) { - if (parts[i] != ctx->media_marker) { + if (parts[i].bitmap == nullptr) { continue; } - if (i + 1 < parts.size() - && parts[i + 1] == ctx->media_marker - && i_bm_scan + 1 < bitmaps.size()) { - const mtmd_bitmap * bm_a = bitmaps[i_bm_scan]; - const mtmd_bitmap * bm_b = bitmaps[i_bm_scan + 1]; + if (i + 1 < parts.size() && parts[i + 1].bitmap != nullptr) { + const mtmd_bitmap * bm_a = parts[i].bitmap; + const mtmd_bitmap * bm_b = parts[i + 1].bitmap; if (bm_a->can_batch_with(*bm_b)) { - LOG_DBG("%s: merging 2 frames at bitmap index %zu and %zu\n", __func__, i_bm_scan, i_bm_scan + 1); + LOG_DBG("%s: merging 2 frames at part index %zu and %zu\n", __func__, i, i + 1); merged_bitmaps.push_back({bm_a, bm_b}); - parts.erase(parts.begin() + i + 1); // remove the second marker - i_bm_scan += 2; + parts.erase(parts.begin() + i + 1); // collapse the second bitmap part continue; } } - LOG_DBG("%s: no merging for bitmap index %zu\n", __func__, i_bm_scan); - merged_bitmaps.push_back({bitmaps[i_bm_scan]}); - ++i_bm_scan; + LOG_DBG("%s: no merging for part index %zu\n", __func__, i); + merged_bitmaps.push_back({parts[i].bitmap}); } } else { - for (size_t i = 0; i < bitmaps.size(); ++i) { - merged_bitmaps.push_back({bitmaps[i]}); + for (const auto & p : parts) { + if (p.bitmap != nullptr) { + merged_bitmaps.push_back({p.bitmap}); + } } } - i_bm = 0; - for (auto & part : parts) { - if (part == ctx->media_marker) { - // this is a marker, we should add the next bitmap + size_t i_bm = 0; + for (const auto & p : parts) { + if (p.bitmap != nullptr) { if (i_bm >= merged_bitmaps.size()) { LOG_ERR("%s: error: number of bitmaps (%zu) does not match number of markers (%zu)\n", __func__, merged_bitmaps.size(), parts.size() - 1); return 1; } - auto & bmps = merged_bitmaps[i_bm++]; + auto bmps = merged_bitmaps[i_bm++]; int32_t res = add_media(bmps); if (res != 0) { return res; } } else { - // this is a text part, we should add it as text - add_text(part, parse_special); + add_text(p.text, parse_special); } } @@ -1236,8 +1318,13 @@ int32_t mtmd_tokenize(mtmd_context * ctx, const mtmd_input_text * text, const mtmd_bitmap ** bitmaps, size_t n_bitmaps) { - mtmd_tokenizer tokenizer(ctx, text, bitmaps, n_bitmaps); - return tokenizer.tokenize(output); + try { + mtmd_tokenizer tokenizer(ctx, text, bitmaps, n_bitmaps); + return tokenizer.tokenize(output); + } catch (const std::exception & e) { + LOG_ERR("%s: error: %s\n", __func__, e.what()); + return 2; + } } int32_t mtmd_encode_chunk(mtmd_context * ctx, const mtmd_input_chunk * chunk) { @@ -1373,6 +1460,10 @@ int mtmd_get_audio_sample_rate(const mtmd_context * ctx) { return clip_get_hparams(ctx->ctx_a)->audio_sample_rate; } +const char * mtmd_get_marker(const mtmd_context * ctx) { + return ctx->media_marker.c_str(); +} + // // public API functions // @@ -1405,10 +1496,16 @@ uint32_t mtmd_bitmap_get_ny(const mtmd_bitmap * bitmap) { } const unsigned char * mtmd_bitmap_get_data(const mtmd_bitmap * bitmap) { + if (bitmap->is_placeholder()) { + return nullptr; + } return bitmap->get_ro_buf().data(); } size_t mtmd_bitmap_get_n_bytes(const mtmd_bitmap * bitmap) { + if (bitmap->is_placeholder()) { + return 0; + } return bitmap->get_ro_buf().size(); } @@ -1428,6 +1525,18 @@ void mtmd_bitmap_set_id(mtmd_bitmap * bitmap, const char * id) { } } +mtmd_bitmap * mtmd_bitmap_init_lazy(mtmd_context * ctx, + const char * id, + void * user_data, + mtmd_bitmap_lazy_callback callback) { + GGML_UNUSED(ctx); // reserved for future use + mtmd_bitmap * bitmap = new mtmd_bitmap(nullptr, 0, 0); + bitmap->lazy_callback = callback; + bitmap->lazy_user_data = user_data; + mtmd_bitmap_set_id(bitmap, id); + return bitmap; +} + void mtmd_bitmap_free(mtmd_bitmap * bitmap) { if (bitmap) { delete bitmap; diff --git a/tools/mtmd/mtmd.h b/tools/mtmd/mtmd.h index 128fb1826..a76a6ec2b 100644 --- a/tools/mtmd/mtmd.h +++ b/tools/mtmd/mtmd.h @@ -128,6 +128,9 @@ MTMD_API bool mtmd_support_audio(const mtmd_context * ctx); // return -1 if audio is not supported MTMD_API int mtmd_get_audio_sample_rate(const mtmd_context * ctx); +// get the current marker string +MTMD_API const char * mtmd_get_marker(const mtmd_context * ctx); + // mtmd_bitmap // // if bitmap is image: @@ -156,6 +159,34 @@ MTMD_API void mtmd_bitmap_free (mtmd_bitmap * bitmap); MTMD_API const char * mtmd_bitmap_get_id(const mtmd_bitmap * bitmap); MTMD_API void mtmd_bitmap_set_id(mtmd_bitmap * bitmap, const char * id); +// mtmd_bitmap lazy +// +// this is a special bitmap that: +// - does not hold the actual data +// - can be expanded into one or more chunks (either media to text chunks) +// user must provide a callback to fill in the data when mtmd_tokenize() is called +// this is useful for large video inputs: +// - allow reading video frame by frame, without loading the entire video into memory +// - allow tracking the whole video with a single ID (for example, the file hash) + +// set (*out_bitmap) to non-nullptr to emit a bitmap chunk; it will be freed automatically +// set (*out_text) to non-nullptr to emit a text chunk; it must be heap-allocated, null-terminated and will be freed automatically +// either out_bitmap or out_text can be set, but not both +// out_bitmap cannot be another lazy bitmap (no nested lazy allowed) +// return value: +// 0 on success +// -1 on EOF (signal to mtmd_tokenize to move on) +// -2 on error (signal to mtmd_tokenize to abort) +typedef int(* mtmd_bitmap_lazy_callback)( + size_t chunk_idx, + void * user_data, + mtmd_bitmap ** out_bitmap, + char ** out_text); + +MTMD_API mtmd_bitmap * mtmd_bitmap_init_lazy(mtmd_context * ctx, + const char * id, // usually set to file hash + void * user_data, + mtmd_bitmap_lazy_callback callback); // mtmd_input_chunks // diff --git a/tools/mtmd/test-3.mp4 b/tools/mtmd/test-3.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..fedf3975be3471a777b1104e0e6cf5385f7fced1 GIT binary patch literal 661813 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

AGF@|l5xGj6v__kN&`<~Fw`V= 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

jm;BWg=lY0FBchPKQssC z4rQq(>igFF4+m2(j`ljlO4iYlsS(MPJMjBQlE0hHVVbh*Bv$vf zO$Xu6pkno|;_)_ohTYs}Y*g2t|U3IIpw z_(w&n3Ao5sSDELbCRrJ13yAEpW8`MP+DwzDq3)1~*WU_E@vsj#c9A31eo&+EbXi9Oba2S07t8ueCA-+QD>V3&2D#&yWPoB z5m@;jrD@eE3=IoUA`c2uCZ-^!L&DI}LZXn|6p{MQg0QqE<;6TigXWp*oOtO9e2n?Y zOxEkyWTAdmNK1M!E4N9!AbxNM9hT_e9bvL2O@W{JaFORjg|vlfVX&ilm&4X4CV0+K(Q0;19$B(I61Fl6I2&TS<-o%g{{^q z@#q^K*oXzzMeOmgvt#dDGJ-75uk&DPY2we|V2>n-6-P+#Lb+k6Dm4;{Kc80bW!-Zg zM*X+v^`_gmaVONYO&k~0!NMap+UzYym~){sHL^T@mNxy=1h*#-5IN#~7asC*O&!I=HsL>LtSV-@A|@t*E=A z%VZZ?rhhN$N?&1K^<_)~y=viaojQ3sA$@6DlAxS^EtTF z7sjPzotp6Ao1-}?M+Bo$<;cr@VUsO;8E5YAgmV|9Xt4G2we0F_=R!`FnV!2z`<-|27?Qs;P{^Lch? z+%RE)i!*swQnaZu%$l9A$Y8Q(o;>{obQUi-I@3j7dk(l~e=yb;5an{9zl^au4PrTG zi5Gr=AbW-dw=KseP18)tlS>-s`Js++NKle`XLA7Dg4>4>30!HSf7e{OT2wUWA}f|& z7{k^F)Q*7*LB(~`DIQ!ug^mQjx?iKOx$G`>^w&5ARGmJC_opo zWh*Bs{1iZ-_%v1{4FxdBJ48{>s~LW)*3hYI%T$7J8{2_Fz)jNlX9&U>c{Mo?svZ`G56|g*l#E3~v@q_iA#WDr<) z;P`DTDD+Ibo`_>a$U}Q@7jBG^>yJ*HJcsU?{E5j2bK<+jW2tSgV&Y>m7bs~X6Y@nx z6@L5eL{ZiZfZ)>bk>h|Z+AqZZ>mC^+%1xVD*eW-%`;qrD){-oRzCB4ZLTOtWuNOte zk>TCI+1?=P0KD$6AVrR%6YM{nL8Z66pS#Ywxndw^&rz6Q^WZN$CpcOy)N2Ws;`Z?I zrE1=*JQ!G`;)>)Jmc`Fk`;-;6^GS}af}(+CWf+t{riAqwVThwGHAA>OA?Z)d?{Qs} z(6D!8N^!f+H_`j(*kQQ))stq)yO;yb&NTu-WIj)3+>xA-PIP%Qi&h#YIzK(v34NGx zE|Z?1OSKv!9(86Td95XhtidAcZ|4;F8z+6cEJI7ci2*|7tChi?RhG3UMh+Id3z#Ou z1)^OSm73NWj`U{P4xzMu**gRYe9km-)4yU7lG7AiKM9ZoDD@yGuebbP)-$VXa&qE7 zNix}S{YN>MC7@%d$6zWX6B)1wa6YX<%IP@Ff6JmZxaS=hCL~%w1(7yP0@nE{bSWdG z(Fg+HNM;7Y30XHtex=z~;l@3pgtkro;T>WLScb+4aYDeJA48m=%X0VZKOg5l_}vs# zkO|Z*_>o%p=4_$&MpAGrE6xBq0Alx7wtD(5ILGMf6mrd)V?}v*H%i*yy-A&qL|AAc z4X*PNev3_Ycbsp`zu-dI4&EE?))n1`W>U0_CT`|bZ@X5Z3Mo5&iaZt@s<*VCb(b8; zgL}eDk(C|13yQaOaVhU)Bn!DxhRU&Fu&M2aDl?;geYb4uOOs264Fy8|y}2}^Le8+a zh_7fHj984MGq+;^9%HKC6&0N$(#LI}M&10&A)pYsi=Q`=P>h18=r$zIEp;ZM3aMTX zG7R}>VMp>w+DoiCrm@+Ev`25kd7JU3|NLJa)rwI~t{|&ed~OB?Fg{s>nFF`ST1zTJB(gM`X)93kkUozeW`a<=q~nu!0|}#n+N{I(;#-8B$4-w*2S_HG#m=`* zB!)WT(@{F`szxujWZ7zQKL*@B!iyo{osNE9{Lvxe<1(Um6zC@EDJR`vxhirENE#ke zT--O*qMU#DrNL)Q$;&5KRC9&;tvEf-P|d46aSXqYvcd&_{?ha> z@F8G-rSULZ%qZmraDbmN%K)j*#aZZ2tk3MZ3CT+ZF6OQ8GsTj8n%C6GZmt{o5ph(T_a<@9$14{7M+X)* z`ZkY{hs}6@>oji)DwSO3B9t46!BOGBYkQL^x5OU)?KOfWMgyFlTLMnH!Hqfx@sIH} zWzeN`MJ;=lI9Z)Sv-4!Nv{_ENs*pntVO1+fpFqd?lb4OUk9SVt@ZYD%Ap=X&HiKEO zimyT(HUWJ!5(2D%ZxRp=tON^|nx}-NvxYNNvA{|90$)OXe9;Z zK;+jrED#6XO6b2KJ2D31^|iE7Cj91G@_{!n!9Luo9gohB(AT>-Ka)cAp30q)Z~X2_ zC_3hS8a-G%(B16706}`icV}|xIUDI}RULX!5V5PBsJ`@dh%%neKj~@eV!OMCdSZUp zERH2byBJ9F0GA?Kv8)p)J~U~1%mjbN{!?LNp>{b^e>q=)2~Cvrc);PpdFN9Tr~*Hl1>|gk84xcBCE!yfzByW-!L}Q3CdMWO$ySRlx@H zC?QT}|D6BZ@M~euU5LyTn&J&3AgZ{K**?8j z3ggUOUorRzY}0m0zH}_W=$j{piJ5+%x3btaK`CwtQt~k%d+%(mRD6cFXsj8V5D!A9 zzZ)6%hKnN{4zp$hN4{fnM^$(pw_?}etIVa)mey?gh%;}11<%TeCDq9`gczYO^=u8o zC31pvcd9;mzloh97zZ1ityMnmep}$B37(pw5g3d*(!KG{(B3jrV~`9)0E#3}Za9V- zPB*ZbB$Kws|DfmsgVrQ4D>|yhLCaZkG6vg2U0b*3+v|d|>*eqJvc>IhJ&?ryfl0ajG43K?ag=2rvE@ zX0VI@#Tpks`6H*JTWX{1lJo`jwAv?hZk!=(6%C%4&P0KS0wgIFxL88e(o3A!9)DcQ zS^$tM;+oIgy)g4V$w)zOY2h=L4Q#b(amHVFy+=D` zxy*l%oq5P(0RlE-NrJuEV~vtizm?Z{>jt9_Alllf%d)FDB|2`Vns2Km4ZIIzmNU`M zt6h5|w{V~cikwzb>+)~Pj$OXqtE<)DO3`=nM&)KXZD%ex=xnaSdb~K&ca)d5D3Uu; zQ3Gh`!8E>kN@%Aza(d%YzOdS2W{)_6M$)dW(FR9$4F!$;4Bde6hgs4 z2tg+6Q;t?)9c(dw8}-&iefyXhe@dec%->VmSFF9haK~h9Gwn+1I9n6?F%;Y_uFdaN zb>Sos1EIi?`7_(E9k`ggj04>4Ibz5&iYaR@bqihS5T(0{O32hEteaAM6g3b*EuC*@ z2)n))NDT<>lxMSDeP}8#JL5|svZknY&f!jjS-7C4oMKiXiGADoqJYn{fkx000E00iV)DCI9!Xe!UxgB=Vg3y__jmUqm>Hg2*kz zeNF@)nHAnPlvYD$eAg(Dq1u4|$9o1TqVKS^4=WInx%JP-(q*dsl^3i#nSYv|Fue(Gdqfxx(;~mmJ46cw zwIKSt`y+H=o`khmicdljKcGPHK5Y-N#|PQ?pVIpRY_4sk0CRB1Su1g5Ro%dDsO?c} z#rk*KW~yP0HUn?q>slZKBZAE~02V^nY*vLa2xzd}L2*t)Iyl9*=uR8!2b!-= z_&-_H(4s6xeh21!M}V_9&G?YOzJI^|!+@zldvULVF|7ofouc1#Uso zATRsYUNIhiB)FZ(+$p$5>K^e6_4eu0ERCedj-TCg27)$~2fw5W!uy?nQ$NtJu5st2 zAbEr%ELx8~VGPN548jQ{_f=K(YgDy+92nYt-zFAllqrhh|+SL)A zSq0r9iJVjv`M!wE=Ot)PYG%}xW_9s#3BhqR;wwMHyXZPQ`iQ@oGb~7iT^dGZK0n+y zbC-kfcI^x`Tn{gRpD8ogy@M3(!Jy(pm#MiV%;IYx9d<>ct@>+l5v)QVuNgwkGmAQ_;8rw?~+~8>StJVQowaE@OAC5q%~q(P}d9!ZP_U=}mb` z&U+nART@vwsftzg(D-&RJjIDR8hMrd!Q`(=f8w<6G`7Z zH7Z?2ElR@haTFT%=hEV&RP(sVx`GvKENigSUHzABj`CvRa%-!IiR8LQ2#plic~x~} z7t+kM%Zk5#Wu-H`bV$CRMP7)0R+7C%>kn@H@4(!`@0ko}7$UMv1x4P&PbfMLhoL%? zf|E!Xf}2vJ5X6>XWE>O!Mv6)61^o~f5!RDR8Ub8EOIV&4SZMn!hNqFc>Jo^L=#!cD zORQP}{bU`GlD;HXeB(PXUK0^;@$^{^It(R!>6x~Gf1)vNsg9fmHN1jby@jTPU4#}E zFpx$=<3$`V8If&VVM;IRB>JLCO1@kQi>HX+<;M-htj+hMM~W_Dj}4#`-ed#-EQjsB zfv_HJK1TC(fllOm!?17^b1{gf?;aO3OkME)v(@eXRZO&6)99i-o?0;>1IxiBm)A`@ zGEa|xXIJRb$F_f| zxTbhY>T0J~uYhdWBeDiL`mKXP;`O2lepg5fH{e&8j;EJCr}%K6N3n4inYOQDjB3nU zS$(T___YN%I9kAVnqld$zJ%h4sii>dR>LkOQ7zXWm2pX908$z>B^$KKF)fKyua?#Q zu>W;yp7~}zyH?L|)up>VN<{)8BBOvJhEFw#-oHK+_fvMf@JL}9WeF70v#eZ55%7y! zW7ZVha+)FZ3{Jjl&R|syOO<@=%31q5E>y}i+Yw`w7?|1HiW5%W2e}K?-PuqAT}aGj z=iMj-*aZ2S0C%f~pnFtdtDk#I{rxTH4-KN;6;Yrm;sun8EFOx*Od!xqa1kgNLJ&l; zrkgzcv)j=e0CxH3`1PgR_LBcW9f>~L4V-LMZI`6jV=A_4&Ty*jBa~LIax5Ar>(X}| zUU@tqTr#N6U_B(!9x-sD;#?sN6+Mcl31g60C@?dP^`;)!;~pZkOI>6_n!11$(!b@n zb@@GC0!QI-za8RQ;wpk0y?g>%d6kSkoV&%or)xxtu?3L<>D7gWSM8CqW=d#L2rGfE zBLAim#*}2%ccTVX%TT`^0t74rj_}ZZs`*GyY1B;!S(P1S);4+!fW$)GMglV9N*>x+ANn$vhH-OO2v3ftsVJYnyG=DBZ*Io@|D`|UGSnJtW1pn2(+U{WCox{2`wxD z0d;-Wie(_bb4La*YWh=bBbb;1I|?Ogn9x>K1kQHXfHK`H;c2**V#1%|*8 zlNC6HIYCD{(jRdmH7fK`_+3ajfgNj0j)_-`fYji6+fa_-LVHbJ%4}9otKk3hI}8A? zVSHcZkT?D|4*y%lWd+o82?1T!TrZT~4QXh6?`_;EtNMMQSPsaz-DY|1CD zWfM4k)=0oBT}az1pE#%3hJ8YRCymwi^NYqn$pXS|{vr6VFy8z;E@Q%=TwH05A&XD+ zV8;T|N`c7Y7Q-@2`PEotXo{+$C1tl*dbzyMX!?u_xgk^t$tuI?l0 zU|tC^E%r$bXIoB}v*l{($guv;S~BcR%c7Fk>|bLqA=`jsR+vtD8f_G($UTISEcx|{9D+n`DWggGu~HuQgG zaQf*-V*|isbl-5>6uwrgwkuAOUBIE@5>+G{6X=-JE9w+HH+Kh3>5{3cl&auH)siqD1m`ko2_<|j3=BRYnNC3#|`X|P%Hj7kZt#}+0;gRha zSxoh^QW}w9@{kmUJq+NK{N4b)?z!(H$9tK$)8M>a`eW*|GMOJK1pD&qLQ~lKEQZpm zdKr0r;8~zg(=k!AJ6QImgS+NTAyqL*p@NMpvG5s4qLejEs2HsL)ynhx z(cLa2&|6FcNY@K?7-dJ`gfatg%C)A6)3Xbm7T%iJx5TB{C*dNpzfLItpQS>eG|NuOVv27gy|dzTv=04Z(Fc z68J$tCw4iZvAEV*7IM3qvu+mE*9`XU7M?lzXX%nsPs9a(23l^fo``O@Yp8qJ)!Y4cgT5iA^IVap4A;ATNYK-!{!R;vlx$ewxisvd0FB#-^=E|*)dl;yIq;s&jS;v z!%?b0T1A(}#fm(2B0?G&`ti#mxrng0Ikk`9jEdT08wL&QYD$}8QV6EgkNV};D=;cNLfBE2HySwm z{~UugMG*EeV-CMaWZ_dC2&QMa1o##_R%OpJFTVxm`LMpdV#saS@7v5X*6fKsG62%wGg|&IO%z>72v-UP~lWCGmprhWjeVR5e!9?2ndj z5A^1|xQw)QPO&fCk*AUV$szjWp%ZQrduzpHac|2RN>>IzDgMVUxrex2&g3q%esOJ< zJ{JcIya`NJpSp&*+&Fz0A|7{xcGqM0Vd7r>-NCe`9Z`8q!c&@UV!f@@_?TSS;(yEL zLW`K^Ll<(5Fi37W@F+VDwP-M=U{L5GKQ%QEU^e!)1;{k2kx5!y+dF@lnn|yYHW#lK z7Kge0hDatENjeNoub8p(D7K_k?*c0k*eWeb>DHGL9^dsBG6OBunY21^FYLo;{si}Z z-MLiMxh=$R>oP6fnOk=6kI8@#F!1XS=vpJ~m4N;|0m7gMqbfPJCg7zKU+x3XX7S*U zh~ZbWk=r4bcsdqZHA??WFAq#LDI++O5MZ0?c3OQg?pu0Z^_9vFqXCbw(>9)cI+<0r6BJ$cO934&1__^WAOyPY76f&@ufd`T&+WT-j< zp*c$V%DL~*jsn3a5ORES7k5eJft5*#`tZky+Cy?n_~@V;|#pkY# zt-))RM1$U-iFNUURrL3{!lk^6Xay*~rw2>wb_SwFG2*cq_Ur4=?Ew%KF+)S=2GMVv zguPxXEJMU^SxXNF_B5p&^pV0|$)d#lsIqmz9CD>F#m!7(c1(A|=f`t0a2E|ab z0dvt{b+mc$u2johCG|BtyEyAacm*_OKZfG~Bu-%OYbl!OpPcA0KHe<0qY!vJaV`c> z(haHuCP$&fkPa?8xZ;vTPs+{InG|Jx9dujd+YE7~ep)dyFt~xLI!pc!U7AG6lqVFK zHY%b(G9_$e;x~2ua|Yw&(S~a&p{H&e$w6NIvgb zs6vxd{<+>Bw;Y|Fj%6X&Za3N3_UgwxjQ!66J46_%vNfS{OYa4_JOv>8;0 zD#A)xF92%x@_uNM`GXnbUkQ}j^E>Zo?G^qT>10mjL(kdlRaT}NYVuns1+iA-#VbcI z`%NybO$D@AW?>{UT0=CfLo->WGFTcY$|a7|8Z1#ClpgmK(FtWNm1rYPTu(*vedHGN zS7d>1Zra*!Svy@Yz@)&pI<2!~62_peQjs01=Ss`O+G3XY8(jfPaf*4OqDhBeQ180H zP+L1C*{RuWjG`H~)ZMzMn<0|D-3HmG37%jC#?T9vjCNPeF@dW@I*^)yP&oa*B{4H~ zbl-@X5C3E#ICMOz*f(W?-Vo~b=Ida_U2~9Ttt(!$RorkVqzA5NP?fyxiW0^FFw8(9 z2vqsIX(Y0C_)gd-GcZV;n1{H9q8$F6^l|ClZi-sly+bd>u=M6hy6u>*yNUhg05M40 z6^nattn|Nw6Ps|$;8N*QieD|{LKbiU00dP5pY%lE^gl^?Y+t>IRr~X{B(DOfT%6Jk zY5@i);JN@wZ{>9-CRRHzMy!=Fm4Y^9x;(Y1+64@KL}c&rJ!SsefbGJH5v0NQRES8* zwq`vqx{l+3000x3X65Df`G$R+!J(P==bpxm=xblPfyK(T;!3BEK|16xRo&GJ_7QTI zMd7lqut&)Pu1DXOU*LXkjceW8`s?rIB8DTu6Bk0m^eXKZk;TSTJ_NP4%f%2~Z)jH` z%rP$3{d~PDsgEJDUt)=^DexHc_)+4e6%cBWz$vP{P;i|9x9wuqoe^lb-rW+AIkyw5 zUie6L!irFUDH`0h=xRF;zn^owADRA+Ziw4c@EnKFNOet(dhZzUKe5Dv$pQiDU1Plk zkE|bCxkcw-hf2RaA$_cj>6CU|QY|kIbN?J@6G;*;iXxS(%*T18!fh@IDeOml2e*n` z9wz+6sFHL4zxsGueMkU96kq-*5PKahWX&zK<7?+92dLq|9+3n0nqdT5pAEjKF=;$- zo{K}L(G}Y@#yq7)ZUQ*L)th&_6#ef{umn* zd)Q6wuX?zSd%V>VyOXd{nHr-8N(B@T(=b`Nxd72@6JrAVXsbh)U70zcgczw|_+<8Y zRW0$BU>LI(mFe>OMLvxPPkv6&?I7mQ$Wt+FEYPuNhhz83K+(v8fqT4^s4qk2fkO`tRtomS zjKn=}T;82M)gFxLxM`4A5P@-gB`llGGTD5ASA6S!Lu8^_GD{A6t{uroW zsqp=ToBLG?#AQDHY&YZH#pNn|7O7xi>952@6RT$i%`R-gFafpo?LS8FxgnmW&6668 zA(kNGb>WWYHl`lZe%9h(MlA6P69dl}ul5J?4b-ai>YwGV(z1ohDvGbnA~KNqm`&m(!1=VYO%;Ve?C@4f`}OA+aiI z+;zP327k%ZUh73&kem7dbD=gy{U9%lu1|nA-1P6^rTe_1Z|7RHz=l^rAq*7#im1&) zfsN(l*Anj=sWoQmLJ$pF2_Cg=2P~MSeRxYz`tI*M*r@KOUnj8BG1k4%ZoIKm8ykw; zcvb6D^eK}m+ms2H+SHT@b%xuD8mKTB$i4@9e<>^EoZ8q`#0v-0`m2F!7qa z>zk?zEU8M4D#p6E&U+>_>KkovHERke5rzsWET?6zqR%_%eDmGo6IXs=J$RMe@RpuX zz}8tL@KsbA%}nYMt4{`~;pgbxfh?iC9mbmmgec|m1kvRej0P*bvfWqjHU7RWR3A>= zFl4`brnd8X6f`Sd!Lglr+cYRh!4QU?`r>7A-&O5~a^Igj5zTVitDUtC%egZ0oE^I4 zqIJo@FEXO9diwu;&SgUwR^(*Z099gGVmPSttponOyBouFf_QLnAq*7-mYE1)Kv+-~ z5(R=mV4*j!Gh}y>bJ!>6KuG@zksm08-u4wR2 zzCu`FBE^laF9$+h^75nEJlHMY%vQHr&Iq@ne(rXuslwS0R9SVdOz)IJt4|@R$*rc@ zD@TOQ9_?-^F308R z&gzvqlu2s9I{6##=jgESq;QU_WrgM&6xQWk=B$*$APhnncL$$;k6#+bJPriph#l!S zY^pLgyzhnq>^?rZpom6kl*5?SpDUKKpWijDE=nmW1~}KHOd8B|1SoCOHx{Hv+`wPc z1h@bI45&ey`4}U={-Rw2ynOBT)nRo9L$aRh_Geu)4>3ovXgLfFf5MnJB7^j;hx4f(X# zs)jA9OM>o5owICeMlHM^^xH~iY`i2sT0@nC6*<=)IsJIJ<*-SvM?4a00Imjr;dfHe z)1My0H`8PaPPqj$Ieje()@`00bw=BRDdXh?nJjrA#IZ2-&k^briElZ40SUr|$nvfC z_)K|pA7pMEghG`VRy7{!={%03&R=+mQM%w3BIG2+q7lS47g6$E3sN@(?>S@y`&{d# zQ*0w5+|4FF+%deAE<+P`{pA6!BCVaJYu5(wZaLyp_Eb@{XcZtpG+JZQk{0$~Dl0l7 z>`-`kK{>N3Y`!@Q(S1xWSH9Xr{L<>=flgYP)R+&hs_-o!xj+`ldHMy_Q*De-tswl5 zf=@%4IV*9VDiC^XUC&U5vXNSM%!dxl%0ewb>TVy1j?ogq*nh?oR58GcYWl^srOvij z6W5~en&Ws9@`w^Zm?<449Q=3@cc1c|cIGtOQS34WAj49?#ZW4+ zYmcjUigE=K1p1#Y_@_YtH~3y68JWaCK~}E@`YfCwtUsh8*q|AXc92ccidsO^vB2l2e^9sD`x@IzmG~wzG z$6#O<*=mdEZ3|WY3E^!t7Qlh5E|cz5O02i`F_xL9J~41oqqqi{G#|%fGZ%$FEtU8+ z`j%d6Z*ZH_m5RyX$J27%nAs6{@a|1u-w4R`XhN9bwMw+&JCXs^3XOu`3gZGCn(kaX4FPydH$%8=%Ah&C@GG6`O~Q{t zpX$yZ7S;-BPNsrxHw<6PW-HxubwiiGqX$TxrQf6){6$V0`Oe}rcC=5ebbfS~fQ4-p zD#ce)v`jPSW$MO>IWH7aGPEU`mGt?dM(Mx+{kqagku(W6n_#BH9Wa2*p@!N{G?XV3 z!+&!b9rVavStlX~DyiuPpqp!(aQVXy0Ig!$MI|0RutK=3?*A%!lTs+YU-WesQnU5vk zqFLw3)B(5w6DKG2$*1} zZOpE(bEfOTCLPS(%DffMdRN!q9ig`Hl#?M<$>IUU`Y3~z3hZhLWfCRuU>Z3*1%!Ut z$^6nkN=|(!Mj_~_H0Mb3IYx`VJ5&kfC@*Ync}4NfLP#+N0q8QUd{WlW5j_bMBH1GpvGZ>RVSrBh^_#bAE6IeOl1-Z!-Hv4g)%=0|A-E%0nQj!Z!L3($$ z&Nw$C&xP;{3!%|FWG66JrE#_LvnZW9>GEnd-Y#ieHZEpKf~i`6t%BoBt0ePJj#8)B z3NM3lO9Mu zyCx~=p`%WNw@Uhuls{F4AjWa-Myl=qy{PKB^HjA2cOMVeP3M?jPTR#hZ9`ksad;VR z5=!hl_$QoE+-9%e)}ch1_^m>3OWe=B1#<-5uTj-|EX6%i+Dxs4 zw35?(8uxtLk{0gb_17J;@pLLO!-EbZCwLGF6bB=^ zwhn9%>r0WSU%R2F$dRis7rOtATK68D3$(XfJG|f=7R?=UNw?k7F+rUSx$RmeC_92M zbvTNcMp4zPf}R1vU7BbwoIbctFfT3nOAis<0!rRC)KO#@IX=Vf(isM z!CE=Lj)9Ya`jG4iOXTvP@NI*-Wb`k1eH}#BZE%;Z#L$9Wj_k$dd|l9%@STrm*#dgz z*%GZ(8$TNGnX%>+m82$pUN4B4<4=0^l9(2eyua&jDz-L9#PuoC&?@I%2n=qb20CmXsjVPqY9gr$GdYcID>(;C?U?2#|)s z2r<|&UB*woKYvyM=&^!deGVu0u<0ayE(Z|Ffv6ebi=h<}lho48e{P7x%D)|LN6-(jOd)+$FF%{I)S6vcOv{Uo) z1@)!Im6+yDM~~#zAQwFH_8t;Q4oGvk%$Nrqc~P7555sA7*MUxS_PU<)lL$(j*hOl>P9SV8M0K=`7gK$` zFRVmy>z$cSZnhZ#q)zEG5qLL1#5I71=&*;9lcl>Ubw^rL^31Pg`N0GHdx+A_CLvZJ zxuu4a5}%M3k(@jwIQJRo&JLLUD-hC!|Hl2Re4^m8U~ozJC5-gC6c)R9v4aCG@YV(F zNG(izVWsfuC!i5jwT{xFW8=lV=uBs5wHB$QFeQyL*B?;stC4>C}>7k z%o0cibT4=C%k$gLo}<82Yb`|R%wc0ie26Md{* zDH-6L8pdkF$(Q#$;&;408Jj&QGQ1!Z0qa^Kg8X-R-h`?oQeE%$b2}cSdZaSV#lcfr zPDE#SAWoBrj&--5g_i0K;6Vi?y?r4p6&0GE(Lw=>gQ7*V1f(l`NjJe_!wBudB2^Cu zv!dRiRcRT!K4CD2u6wrk{*b#_{WiUf;V||iD^OL*xz{gx#p7)A+&yqjB*n%8c+~Y2 z%%;P|i1)zb$vix=P3EjkQT{=akf@x!Tr9h3TDNWE*g5ZGuWp2+`@+6DyxXSVCb_5G zBj}q+%<_w_D@PvMhnGTAH)Tl>V9YNhUh=Ms?ducA7K_^&a+v2>}U{rZG!(q3u|c^vb)t{${_Ks;KrAC-8Qv26@@Dh(u!8$)q-|; zOb5R-&FpQ038F|`{$PMp+Kj#-PWw(-h}j4$H5$QE3C56`oM-m>k&4xz^eAL+H1I}? zv<~@Q7T58gx*Pb_oQS`c^EKS)>G7@zud!LA*6Fk2k^I?x18aBRqjfmxO_7A1tWe69 z?=9Ke-KPqRqoL}F+US>^3<}f8*HK!>h5(VbKIEw5lhaKoB=XwVA*zdoW&}u0eRG)6 zI)bpsqM5YCQ|oI~3VGV&#?U8d2s1#iz%Nm79Z~_jTi!4aAmf9ZA07SJrY1SUm7wq& zE9dNX8LjHgI2*oQHg6y_j*CU9{#mJ3>H9RYR?H?MLkR^* zSVbm*E|D`NThM?Sl;V?=jMT}w7XK;q+hn_$;D`t$W^N6 zv^lRZxSX;gMlnDD03cQbd9)5tRk;1!{iV`LM-n$+lf5#7UD z6;9rGowqTF|DR zn}=5|Jwx|DZP5plA;*Z`6n$q-t&4@f@nC0Z#dF4HSWgdr3rdo4@17T;mIa1XhbUs` ztdmD==x*ftja_S_<~O=Z-vpZ{TD|8~mT2Lz^e+_@gByMI-j6QIqfO-&AAR8vvqVr) z>;UcU``jv!_Pp5c0BBugjKB7@<%1??m5m(tkKSP;YR}GfmZWIaD(eYW$1}XQq68gx z2n>8ei%?WoF1>b7A7$g!#o&|oI#%jnw{{|d5d}n!I{;&5r_PdgRJ@126UoKWPHuL| zJjcqR+`Lb$8f!J6ItoWRTwmJ#HzQJXMgC(HbK~w-rk|u)rGNRhIOyj*-ar(|TtoTB zr!c@quVTZc0}uqI&Nz$k-@BS-Sz8q|oaT_#D*X~|53jPbH6u07Sa!m}Um>~j(5WxM zwWYsd`ZF7EldxWYaLw>+vd3MU^7rY2xdK54vyVx=oc#}YC5t;mJpJswSWcDHltd|B zCJ8giPmeNrA1)>9Yq~L-e7G5Hzv7-UJA#8er|`pC5eABiztJxlGC{)X4(fx9i5+}x z1F#MF_COzLs+}xxuW6dB**A7UzoR9+8O^dSQ6>P*Fw{Gx81?#28yrQdC30Yx{|US- zMcQBqdpvd-Ti7gH^gS*l_Gmvj6q<%1IC9Bi@Ek!aq%`}bCpDz8|HsmQWH}px^Oc77 zs%kq%vgII_4f_xba)t) z+Lmf?@(AX?GuD_kiOx{q97RE+a} z82vqAz>e;Qi~+(Sb(PR_6qYJPuQuLHe)M3s`Rof@SgUw^bC>Lk;wxCn-&_~C8vr>B z{FsL-&_CkV^0kH^^~ka!Jrm9TUWl)TVw0GU^eq^>We!cb0LY@k2q0*5)PtIpHlV{#jV_!#q_&@(P%U(6k(%Wmj>Mj_t=yWm)8iRUt z`qxv~Q<rqAphmK^NQ+`fU_+q>?QAE7wxbzTVS?&Gvnl-R+Xpl z`X0s@A9r(#`kbB!{&fG`O@AE9p`{eCT2O59y2d+eFl$#$bandiS`>o;ea&(kKOkBM z^b&yNlP*x#4LSmjb8{d$f0FC2<$mqUov68Zx!uQb?(Vi>hLM8HM-bZ!hb(+3KlG@T z-#WfO~)r4E9M1=Z)CWPC6+8R$Ja@MO*sR@Q+U6k4`h7le-n9z|K}EPRCF=b)WWe= zMws~cI_-^O?lN>vUBaMCABi-j)HiP0_UO9?iR6uZMCv+VcU`QabK6-7HH;9f(mP$m zy7mF%l(Hl^2IpzgoH14MRBMnbqFc(Rn6#fM;%Rf>vYbjl-B6Y~fAl8JQu;=#i1|Y7 z5T$eUi-_r5PSvJBKYPg@OBkOiEU4z5?j|ei2F+RlGtSI&h8H==my?x0z^I6aTECx| zy`XU8!q~nkBc5q_Hg3&V>| zr*u8z9so*naN(vu?oJvr+Ok#*&TXT2tj0^3E}&9C|O}D+o@%mLL|K` z+Rtb8PDT13R_e#>3cwfdIE7J$_Wg&d=luNo6Es`Zle!aA{)>;VT^>b zh&+Bf>gVUL22Lh&9@fKm&K!g);-Uih;*HDIZqSO-D6<2nTz_ELc!)k<-O{`aSb!ko zf+tN=FE%@yl6tf=x|!f1PP+g9{6FCG_G+@CtQDF~V6z2oGA1CAnBFT(_TJm!&rvr* zre1Uj2(30MV^dkIx7weQm+v{w6Fq4eelbwVHpv_hlE0uL+B*-9rG#J%-ktv1Rh)SyOW? zi0urxP68Iah)j}lfcv|yKy!Ks;C9HQ%NXJvQ3`>keZ~y=V ztpT1kbV48gc>S>ZHU(hxo+2xU0yKL15fxUgZZX(!QywE)IMfa$HXJ zRVdRV-He0jdK*M(x=Dz8xV+B>#2tt%OW~dUXRofdU&Gd9SH#0|^pH0^QXLm*xYW=r zcXl;_>s|Z+h=Q7jm{z`^oapJiH}X$)h53!ymAWZ=x3<7lB?_Ky z`av-C|K8Hh#`y^5md||5jwvYME>`OdvQaMqz`s34vC!qw${#Mr9*1WhFB&BeR$*s4dK6gOz_G|2xA6E z#cw&}bK|s{hcGefSeu-r!Zwx2$(ZNZS1h0uL?|C#i1DNkh!D{txyHGlN6o4%2yZJ5 zO_kXvoHdAT{aKY4Joaay@^ik5G1F3e3IO?El8zFpRK%;XD`WdNx9Fu3=F32yt77o& zj?}qT{hIYgdsV41+v5}!8|?=gP?D;D&9^6}idFf+bEI<)$PNy4oGU-pTjH>3Pf$E_ z2OSw^L<(nbZ|_9!$N{{g^BtZ!*omXjEvovv8^uNMQ`xKi4qF|~+@8=m_m4Ya@+1D$Q!;!p1C_~| zct|{bt=}Q_%n5SE2yz{60QnV$xuT!>aIEBKLcAgSRPsR8d@l~Yb|A#jky3kCg=vH{ zA*oQdmr3iGutE`W-9McJTjc+olNQ*Hb?WxVB<#d`TjLw}diQ#rzEjN89yFjms>8=KTz6s z7^p0FVcfy?23bK|RJgl|>*+Ian%@%oN>rhC>|;<MH5!+uUk#BxvhiCulKkK)>xXUWle^sKe&oxfeSM4+TpTkeC+xq=?>{<@# z>(9}3J>F)Kl?XPuBwBK{07|#PJR{+EmY?dZGuL3RtH4BD+zt8KA8YasXuLC{$^A~p zh-^~dirDh!;#8PL;cBHZp^S+`M!YVNa>~`jE{auEY|(iYkxqN$#jD>$WZ@JdLLVr* zY0;-0exW*XSGq5kv3+!FlZn&LXmC?tlnM$kEm7UyiPIxjShx_Sq(C`rEf@J@iz2GQ zgq3S<$&;slule?T$>Y_$beAQGYbL*dmj8g3nEwGB_yO_LB&eP)r~!5-6|Kt$`2Q&Q z;-$c0FB5+|oiy`G^pL3C-R|F0(Y=9)J-J)7>z7C(HrY=-eJ0=`Y!Cnc`~ZLbEsC8A zVZd1kKrzmj8=Ne5(sG420#w5wQu2ZdML>NIBW7<8*S?FW@!q#N=u0J8CMsoV09TYr7pK7>bt|D1CR&`QD ztH~flcgulyL`a{lx{i?439P3JC4rfds!8ERZ?`}oZQa@MRWSbYo@SJ+;*hFeHO%<8H=|Vsk!LD+4WM^)r`b#Y>$6*l;apR4Vx8{aAEo;kh+?Fe0H^eXA)G=al$n|>{V`I1{Z?hQW})MDSq4>V9G+laciie z6fe{42ww)Yxo3?xD17T7dBS8`AIKxdtdU*5LYpO5c;6Yps#QwlQz-{K*|7>v!(bp8 z70AgBlO4Up3Wdrb!V5uQ7T^KS!#p4O1pYilMWI8^A;kmUq!Y&TLQ6)Ok10Hdggs5k zZ}mz_KuYxuLL8k*iQxx|=lBBPbJYkaF7l(FQd))Lm-WjIdW!aMU|KIKlBwj@`0+#> zc(qNxTf`nIjA1_b+rMU?d2O5weARySW)`?3z)Zv}C+rwRRT8n7=MOCW#e9TdV=F4M zJ9K_iQM>nSFwpr6(ArQ;9%>ahr<`I&eYT$Q)1O-Bkgv_&Oi|sACkr!@u0P!x%y*sh zbWgBBJ^sdxv)u)7Ah^SXYbJq-;Qp3Hz(dp=PF#c2I#sUSh0;}{hoI@aaM%r+R&Yjx z51=*h5iYp0aY$gDge)&jEZmzGE5kk*8dre_*<~l1J3NI+2!&)yl{^dh(yNTW-(;to z!3v%;IZgtJ#lZjdvP_|)h?U~eaGOJ-UsRD&fs&}czwn=vJ#?CFoYmezgf0ik!1hpB zhwBF>2X4l*TKqhu?nkf2ZyYE>BwgbYP)-d>b1wx?BoiVQd z+GCCK_d!M@%P?p@muH(KKC|>c=4+f$<&GuH2vowm6&uHSnUn`oyO+8q20179{&qbR zl@8lSb5Po}J8$cw3M;^|Tif3VsaX)dzP8~JC-l7j49j)rBMRw}MgDf0st0?sp-Zug zZ1?;bbc@h?bSs_)Q-ma1N?Pl>rjpLa`}!Vj>KYrl-3d-Ez7@SQYDSk*BGdgJEo^dM z0FrRMazC9hHm#5jIT|gtZ_G^`mq0WRN&q_l{s%%~fE@Qs{X_N*`Ta~Tk(goI0ks9W z7q0KasJD=9$(?oVorCGJc;h6}oY7nDHk=^u?*ahDV`@M43K-<&ETY02FcerS)hlDM z94$uO6{{cg#xWQii-EzL_9S*QS%TU$hd9LIYY{|BQCm>()HM0OLMxD({7`k~mZzgB z(|m?fHZdiK0ipA(s@}X9Vmn<+aJS^1OBU&BrwWO|1?`6)<^NnWD8G*UD{qZ}6pthI ze;)iLB;S=(mQ5NDZEE*-+HMVy$F4HxX^vL-!)LW2wEW$v{Wx_cUHwb)VN~RbrdD z@VFad34VA?)nR1Jwt*0EO$8o%*<2cWC$r2?_N90_z`jN{{vNutj&FH?eL1u^}p=SeQ(-FyE+Ux0yPY zQUP!dVgS}kAc71al?h+Nqf90Aq$U8IUR+dCV{%T0LI`^x@j$LnXTR@WYes$VzX0dm zKB3Iko(`sG=Gy5$(^8rCO-;(rs*GmF$#`(qKyEMapu zP?FLsZ4`DP2ovfAJ|0(}KS=Jy=Y3QJss$*=@tpG(o;}{-j;t!F_{hU`9TT*%_HDz! zz-AIpiQ6eawm< zdlf~NAraG#O#VUvdgGp!Is1%Jht8YVd@u#_Fk_Be-e2|9G$OXVmo2pFA^*5;rYeUN zg(azJ2j#jhZz&iT}2G&4J*dm|XdPNHxcuqkmaDdCbc*BkL z6Jr_KRui|tg(%g+mAp>K&}T3ijTx}3QQT9G$oBpIGCNz5uv@_>4&}UDc}OQ-!L|&>E1ewh2qa5D(~h)T?u&q83I&gp&er@U zp??j)#%@_KhO0Zm7f)-k?`K(g)Y8|xLxC6=Fj9+%|1XyC=RLTaz@eC)ZS&COI;^N9G`u2) I>~HyABsu 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
+
From 1e912561dd3e9d65c588a33a86643091dd30702f Mon Sep 17 00:00:00 2001 From: jacekpoplawski <67507230+jacekpoplawski@users.noreply.github.com> Date: Tue, 9 Jun 2026 12:09:07 +0200 Subject: [PATCH 16/23] server: log prompts to directory (#22031) * server: log prompts to directory Add `--log-prompts-dir` to write each prompt to a separate text file in the specified directory. * Apply suggestion from @ngxson --------- Co-authored-by: Xuan-Son Nguyen --- common/arg.cpp | 7 +++++++ common/common.h | 1 + tools/server/server-context.cpp | 11 +++++++++++ 3 files changed, 19 insertions(+) diff --git a/common/arg.cpp b/common/arg.cpp index df506d2d0..55795d357 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -3333,6 +3333,13 @@ common_params_context common_params_parser_init(common_params & params, llama_ex common_log_set_file(common_log_main(), value.c_str()); } ).set_env("LLAMA_ARG_LOG_FILE")); + add_opt(common_arg( + {"--log-prompts-dir"}, "PATH", + "Log prompts to directory (only used for debugging, default: disabled)", + [](common_params & params, const std::string & value) { + params.path_prompts_log_dir = value; + } + ).set_examples({LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( {"--log-colors"}, "[on|off|auto]", "Set colored logging ('on', 'off', or 'auto', default: 'auto')\n" diff --git a/common/common.h b/common/common.h index b732a2087..4864186f6 100644 --- a/common/common.h +++ b/common/common.h @@ -489,6 +489,7 @@ struct common_params { std::string input_prefix = ""; // string to prefix user inputs with // NOLINT std::string input_suffix = ""; // string to suffix user inputs with // NOLINT std::string logits_file = ""; // file for saving *all* logits // NOLINT + std::string path_prompts_log_dir = ""; // directory with logged prompts // NOLINT // llama-debug specific options std::string logits_output_dir = "data"; // directory for saving logits output files // NOLINT diff --git a/tools/server/server-context.cpp b/tools/server/server-context.cpp index a7c4f7b56..bdfa51718 100644 --- a/tools/server/server-context.cpp +++ b/tools/server/server-context.cpp @@ -27,6 +27,7 @@ #include #include #include +#include // fix problem with std::min and std::max #if defined(_WIN32) @@ -3719,6 +3720,16 @@ std::unique_ptr server_routes::handle_completions_impl( // TODO: this log can become very long, put it behind a flag or think about a more compact format //SRV_DBG("Prompt: %s\n", prompt.is_string() ? prompt.get().c_str() : prompt.dump(2).c_str()); + if (!params.path_prompts_log_dir.empty()) { + const auto file_path = std::filesystem::path(params.path_prompts_log_dir) / string_format("%012" PRId64 ".txt", ggml_time_ms()); + std::ofstream f(file_path); + if (f) { + f << (prompt.is_string() ? prompt.get().c_str() : prompt.dump(2).c_str()); + } else { + SRV_ERR("failed to create %s\n", file_path.string().c_str()); + } + } + // process prompt std::vector inputs; From 9682e351b8a81179679c875ad31faddcb3ef18fb Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Tue, 9 Jun 2026 12:15:12 +0200 Subject: [PATCH 17/23] mtmd: refactor video subproc handling (#24316) * mtmd: refactor video subproc handling * Update tools/mtmd/mtmd-helper.cpp Co-authored-by: Mikko Juola --------- Co-authored-by: Mikko Juola --- tools/mtmd/mtmd-helper.cpp | 113 ++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 47 deletions(-) diff --git a/tools/mtmd/mtmd-helper.cpp b/tools/mtmd/mtmd-helper.cpp index 18440f06e..2d11a3380 100644 --- a/tools/mtmd/mtmd-helper.cpp +++ b/tools/mtmd/mtmd-helper.cpp @@ -617,10 +617,52 @@ struct mtmd_helper_video { float fps_target = 0.0f; mtmd_helper_video_info info = {}; - struct subprocess_s proc = {}; - bool proc_alive = false; + // RAII wrapper for managing subprocess + struct subprocess_handle { + struct subprocess_s proc = {}; + bool alive = false; + std::thread feeder; + + subprocess_handle() = default; + subprocess_handle(const subprocess_handle &) = delete; + subprocess_handle & operator=(const subprocess_handle &) = delete; + ~subprocess_handle() { stop(); } + + void stop() { + if (alive) { + subprocess_terminate(&proc); + } + // join before destroy: feeder holds a FILE* from subprocess_stdin; + // subprocess_destroy closes it, so the thread must finish first + if (feeder.joinable()) { + feeder.join(); + } + if (alive) { + subprocess_destroy(&proc); + alive = false; + } + } + + FILE * stdout_pipe() { + return subprocess_stdout(&proc); + } + + // buf is tied to lifetime of mtmd_helper_video, so it's guaranteed to outlive the feeder thread + void start_feeder(const std::vector & buf) { + feeder = std::thread([this, &buf]() { + FILE * f = subprocess_stdin(&proc); + if (!f) { + return; + } + fwrite(buf.data(), 1, buf.size(), f); + fclose(f); + proc.stdin_file = nullptr; // prevent double-close in subprocess_destroy + }); + } + }; + + subprocess_handle sp; int32_t current_frame = 0; - std::thread feeder_thread; std::string prompt_start = "Video:"; int32_t timestamp_interval_ms = 5000; // emit a timestamp text every N ms (0 = disabled) @@ -630,19 +672,8 @@ struct mtmd_helper_video { std::string pending_text; // text queued to be returned before the next frame bool start_emitted = false; - bool is_buf_input() const { return !input_buf.empty(); } - - // must run in a separate thread alongside stdout reading to avoid pipe deadlock - void feed_stdin(struct subprocess_s * sp) { - FILE * f = subprocess_stdin(sp); - if (!f) { - LOG_DBG("%s: subprocess has no stdin pipe\n", __func__); - return; - } - LOG_DBG("%s: feeding %zu bytes to stdin\n", __func__, input_buf.size()); - size_t written = fwrite(input_buf.data(), 1, input_buf.size(), f); - LOG_DBG("%s: wrote %zu bytes, closing stdin\n", __func__, written); - fclose(f); + bool is_buf_input() const { + return !input_buf.empty(); } bool probe(float fps_target_arg) { @@ -661,17 +692,17 @@ struct mtmd_helper_video { for (size_t i = 0; cmd[i]; i++) { LOG_DBG(" %s", cmd[i]); } LOG_DBG("\n"); - struct subprocess_s fprobe; + subprocess_handle probe_sp; if (subprocess_create(cmd, subprocess_option_search_user_path | subprocess_option_inherit_environment, - &fprobe) != 0) { + &probe_sp.proc) != 0) { LOG_ERR("%s: failed to launch ffprobe\n", __func__); return false; } + probe_sp.alive = true; - std::thread probe_feeder; if (is_buf_input()) { - probe_feeder = std::thread([this, &fprobe]() { feed_stdin(&fprobe); }); + probe_sp.start_feeder(input_buf); } uint32_t width = 0; @@ -680,7 +711,7 @@ struct mtmd_helper_video { float duration = -1.0f; int32_t n_frames_orig = -1; char line[256]; - FILE * fp = subprocess_stdout(&fprobe); + FILE * fp = probe_sp.stdout_pipe(); while (fgets(line, sizeof(line), fp)) { char * eq = strchr(line, '='); @@ -704,13 +735,7 @@ struct mtmd_helper_video { } } - if (probe_feeder.joinable()) { - probe_feeder.join(); - } - - int ret_code; - subprocess_join(&fprobe, &ret_code); - subprocess_destroy(&fprobe); + probe_sp.stop(); if (width == 0 || height == 0 || orig_fps <= 0.0f) { return false; @@ -745,6 +770,7 @@ struct mtmd_helper_video { cmd.push_back(seek_buf); } + cmd.push_back("-nostdin"); cmd.push_back("-i"); // cache:pipe:0 wraps stdin with a seekable in-memory cache, letting ffmpeg seek // backwards for container headers (e.g. MP4 moov atom at end of file) @@ -781,34 +807,27 @@ struct mtmd_helper_video { int ret = subprocess_create( cmd.data(), subprocess_option_search_user_path | subprocess_option_inherit_environment, - &proc); + &sp.proc); - proc_alive = (ret == 0); - LOG_DBG("%s: subprocess_create ret=%d proc_alive=%d\n", __func__, ret, (int)proc_alive); + sp.alive = (ret == 0); + LOG_DBG("%s: subprocess_create ret=%d proc_alive=%d\n", __func__, ret, (int)sp.alive); - if (proc_alive && is_buf_input()) { + if (sp.alive && is_buf_input()) { LOG_DBG("%s: starting feeder thread for %zu-byte buffer\n", __func__, input_buf.size()); - feeder_thread = std::thread([this]() { feed_stdin(&proc); }); + sp.start_feeder(input_buf); } - return proc_alive; + return sp.alive; } void stop_ffmpeg() { - if (proc_alive) { - subprocess_terminate(&proc); - subprocess_destroy(&proc); - proc_alive = false; - } - if (feeder_thread.joinable()) { - feeder_thread.join(); - } + sp.stop(); } mtmd_bitmap * read_next_frame() { - if (!proc_alive) return nullptr; + if (!sp.alive) return nullptr; - FILE * fp = subprocess_stdout(&proc); + FILE * fp = sp.stdout_pipe(); const size_t frame_size = (size_t)info.width * info.height * 3; LOG_DBG("%s: reading frame %d, expecting %zu bytes (%ux%u)\n", __func__, current_frame, frame_size, info.width, info.height); @@ -820,7 +839,7 @@ struct mtmd_helper_video { // clean EOF only if no bytes read yet; partial frame is an error LOG_DBG("%s: fread returned 0 after %zu/%zu bytes (ferror=%d)\n", __func__, total_read, frame_size, ferror(fp)); - proc_alive = false; + sp.alive = false; return nullptr; } total_read += n; @@ -842,9 +861,9 @@ struct mtmd_helper_video { } LOG_DBG("%s: proc_alive=%d start_emitted=%d current_frame=%d\n", - __func__, (int)proc_alive, (int)start_emitted, current_frame); + __func__, (int)sp.alive, (int)start_emitted, current_frame); - if (!proc_alive) { + if (!sp.alive) { return (current_frame == 0) ? -2 : -1; } From ae735b13148db250911ce9d07663d1b95474e7b0 Mon Sep 17 00:00:00 2001 From: Nick Towle Date: Tue, 9 Jun 2026 03:52:20 -0700 Subject: [PATCH 18/23] ui: Fix excessive style recalculation on hover (#24243) --- tools/ui/src/app.css | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/ui/src/app.css b/tools/ui/src/app.css index aa96bac32..9254a96df 100644 --- a/tools/ui/src/app.css +++ b/tools/ui/src/app.css @@ -148,7 +148,6 @@ * { scrollbar-width: thin; scrollbar-color: transparent transparent; - transition: scrollbar-color 0.2s ease; } *:hover { From b4e3dc613baa92a3884d4151e3d631395c81934a Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Tue, 9 Jun 2026 13:27:04 +0200 Subject: [PATCH 19/23] vulkan: add `v_dot2_f32_f16` support in matrix-matrix multiplication and Flash Attention (#24123) * vulkan: add support for valve fp16 dot2 extension * use macro for dot2 path choice * properly check for the feature * add dot_product abstraction to reduce preprocessor branching --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 84 ++++++++++++++++--- .../vulkan-shaders/dot_product_funcs.glsl | 27 ++++++ .../vulkan-shaders/flash_attn.comp | 5 +- .../ggml-vulkan/vulkan-shaders/mul_mm.comp | 12 +-- .../vulkan-shaders/vulkan-shaders-gen.cpp | 46 ++++++---- 5 files changed, 139 insertions(+), 35 deletions(-) create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/dot_product_funcs.glsl diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 2dd8cd2fb..c4ea0b105 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -113,6 +113,21 @@ typedef struct VkPhysicalDeviceShaderBfloat16FeaturesKHR { } VkPhysicalDeviceShaderBfloat16FeaturesKHR; #endif +#if !defined(VK_VALVE_shader_mixed_float_dot_product) +#define VK_VALVE_shader_mixed_float_dot_product 1 +#define VK_VALVE_SHADER_MIXED_FLOAT_DOT_PRODUCT_SPEC_VERSION 1 +#define VK_VALVE_SHADER_MIXED_FLOAT_DOT_PRODUCT_EXTENSION_NAME "VK_VALVE_shader_mixed_float_dot_product" +#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE ((VkStructureType)1000673000) +typedef struct VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE { + VkStructureType sType; + void* pNext; + VkBool32 shaderMixedFloatDotProductFloat16AccFloat32; + VkBool32 shaderMixedFloatDotProductFloat16AccFloat16; + VkBool32 shaderMixedFloatDotProductBFloat16Acc; + VkBool32 shaderMixedFloatDotProductFloat8AccFloat32; +} VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE; +#endif + #define ROUNDUP_POW2(M, N) (((M) + (N) - 1) & ~((N) - 1)) #define CEIL_DIV(M, N) (((M) + (N)-1) / (N)) static bool is_pow2(uint32_t x) { return x > 1 && (x & (x-1)) == 0; } @@ -705,6 +720,8 @@ struct vk_device_struct { bool coopmat2_bf16_support {}; bool coopmat2_decode_vector; + bool dot2_f16 {}; + bool pipeline_executable_properties_support {}; size_t idx; @@ -3920,8 +3937,13 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { name = aligned ? "flash_attn_f32_f16_aligned" : "flash_attn_f32_f16"; } else { if (device->fp16) { - if (f32acc) { spv_data = flash_attn_f32_f16_data; spv_size = flash_attn_f32_f16_len; } - else { spv_data = flash_attn_f32_f16_f16acc_data; spv_size = flash_attn_f32_f16_f16acc_len; } + if (device->dot2_f16) { + if (f32acc) { spv_data = flash_attn_f32_f16_dot2_data; spv_size = flash_attn_f32_f16_dot2_len; } + else { spv_data = flash_attn_f32_f16_dot2_f16acc_data; spv_size = flash_attn_f32_f16_dot2_f16acc_len; } + } else { + if (f32acc) { spv_data = flash_attn_f32_f16_data; spv_size = flash_attn_f32_f16_len; } + else { spv_data = flash_attn_f32_f16_f16acc_data; spv_size = flash_attn_f32_f16_f16acc_len; } + } } else { spv_data = flash_attn_f32_f16_fp32_data; spv_size = flash_attn_f32_f16_fp32_len; @@ -4215,7 +4237,23 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { #endif // defined(VK_KHR_cooperative_matrix) && defined(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) if (device->fp16) { // Create 6 variants, {s,m,l}x{unaligned,aligned} + // Selects dot2 SPIR-V variant at runtime when device->dot2_f16 is true #define CREATE_MM(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ + if (device->mul_mat ## ID ## _l[TYPE]) \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->l, #NAMELC #F16ACC "_l", (device->dot2_f16 ? NAMELC ## _dot2 ## F16ACC ## _len : NAMELC ## F16ACC ## _len), (device->dot2_f16 ? NAMELC ## _dot2 ## F16ACC ## _data : NAMELC ## F16ACC ## _data), "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ + if (device->mul_mat ## ID ## _m[TYPE]) \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->m, #NAMELC #F16ACC "_m", (device->dot2_f16 ? NAMELC ## _dot2 ## F16ACC ## _len : NAMELC ## F16ACC ## _len), (device->dot2_f16 ? NAMELC ## _dot2 ## F16ACC ## _data : NAMELC ## F16ACC ## _data), "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ + if (device->mul_mat ## ID ## _s[TYPE]) \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->s, #NAMELC #F16ACC "_s", (device->dot2_f16 ? NAMELC ## _dot2 ## F16ACC ## _len : NAMELC ## F16ACC ## _len), (device->dot2_f16 ? NAMELC ## _dot2 ## F16ACC ## _data : NAMELC ## F16ACC ## _data), "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ + if (device->mul_mat ## ID ## _l[TYPE]) \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_l, #NAMELC #F16ACC "_aligned_l", (device->dot2_f16 ? NAMELC ## _dot2_aligned ## F16ACC ## _len : NAMELC ## _aligned ## F16ACC ## _len), (device->dot2_f16 ? NAMELC ## _dot2_aligned ## F16ACC ## _data : NAMELC ## _aligned ## F16ACC ## _data), "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, l_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ + if (device->mul_mat ## ID ## _m[TYPE]) \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_m, #NAMELC #F16ACC "_aligned_m", (device->dot2_f16 ? NAMELC ## _dot2_aligned ## F16ACC ## _len : NAMELC ## _aligned ## F16ACC ## _len), (device->dot2_f16 ? NAMELC ## _dot2_aligned ## F16ACC ## _data : NAMELC ## _aligned ## F16ACC ## _data), "main", PARAMCOUNT, sizeof(PUSHCONST), m_ ## WG_DENOMS, m_ ## WARPTILE, m_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ + if (device->mul_mat ## ID ## _s[TYPE]) \ + ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->a_s, #NAMELC #F16ACC "_aligned_s", (device->dot2_f16 ? NAMELC ## _dot2_aligned ## F16ACC ## _len : NAMELC ## _aligned ## F16ACC ## _len), (device->dot2_f16 ? NAMELC ## _dot2_aligned ## F16ACC ## _data : NAMELC ## _aligned ## F16ACC ## _data), "main", PARAMCOUNT, sizeof(PUSHCONST), s_ ## WG_DENOMS, s_ ## WARPTILE, s_align, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ + + // bf16 scalar path promotes to f32, no dot2 variant +#define CREATE_MM_NODOT2(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ if (device->mul_mat ## ID ## _l[TYPE]) \ ggml_vk_create_pipeline(device, device-> PIPELINE_NAME ->l, #NAMELC #F16ACC "_l", NAMELC ## F16ACC ## _len, NAMELC ## F16ACC ## _data, "main", PARAMCOUNT, sizeof(PUSHCONST), l_ ## WG_DENOMS, l_ ## WARPTILE, 1, false, REQSUBGROUPSIZE > 0, REQSUBGROUPSIZE); \ if (device->mul_mat ## ID ## _m[TYPE]) \ @@ -4250,7 +4288,7 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_f16, matmul_f16, wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_f16_f32, matmul_f16_f32, wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); + CREATE_MM_NODOT2(GGML_TYPE_BF16, pipeline_matmul_bf16, matmul_bf16, , wg_denoms, warptile, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_Q1_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q1_0], matmul_q1_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0], matmul_q4_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); @@ -4258,7 +4296,6 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { CREATE_MM2(GGML_TYPE_Q5_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0], matmul_q5_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_Q5_1, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1], matmul_q5_1_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0], matmul_q8_0_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); - CREATE_MM2(GGML_TYPE_Q2_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K], matmul_q2_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_Q3_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K], matmul_q3_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); CREATE_MM2(GGML_TYPE_Q4_K, pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K], matmul_q4_k_f32, mmq_wg_denoms, warptile_mmq, vk_mat_mat_push_constants, 3, , 0); @@ -4298,8 +4335,7 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_subgroup_f32_f32, , wg_denoms, warptile_id, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size_16); CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_subgroup_f16, wg_denoms, warptile_id, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size_16); CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_subgroup_f16_f32, wg_denoms, warptile_id, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size_16); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_subgroup_bf16, , wg_denoms, warptile_id, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size_16); - + CREATE_MM_NODOT2(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_subgroup_bf16, , wg_denoms, warptile_id, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size_16); CREATE_MM2(GGML_TYPE_Q1_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q1_0], matmul_id_subgroup_q1_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size); CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_subgroup_q4_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size); CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_subgroup_q4_1_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, mul_mat_subgroup_size); @@ -4344,8 +4380,7 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { CREATE_MM(GGML_TYPE_F32, pipeline_matmul_id_f32, matmul_id_f32_f32, , wg_denoms, warptile, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16, matmul_id_f16, wg_denoms, warptile, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); CREATE_MM2(GGML_TYPE_F16, pipeline_matmul_id_f16_f32, matmul_id_f16_f32, wg_denoms, warptile, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); - CREATE_MM(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); - + CREATE_MM_NODOT2(GGML_TYPE_BF16, pipeline_matmul_id_bf16, matmul_id_bf16, , wg_denoms, warptile, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); CREATE_MM2(GGML_TYPE_Q1_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q1_0], matmul_id_q1_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); CREATE_MM2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0], matmul_id_q4_0_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); CREATE_MM2(GGML_TYPE_Q4_1, pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1], matmul_id_q4_1_f32, mmq_wg_denoms, warptile_mmqid, vk_mat_mat_id_push_constants, mul_mat_id_param_count, _id, 0); @@ -4390,6 +4425,7 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { #undef CREATE_MM2 #undef CREATE_MMQ #undef CREATE_MM +#undef CREATE_MM_NODOT2 } else { // Create 6 variants, {s,m,l}x{unaligned,aligned} #define CREATE_MM(TYPE, PIPELINE_NAME, NAMELC, F16ACC, WG_DENOMS, WARPTILE, PUSHCONST, PARAMCOUNT, ID, REQSUBGROUPSIZE) \ @@ -5453,6 +5489,7 @@ static vk_device ggml_vk_get_device(size_t idx) { device->integer_dot_product = false; device->shader_64b_indexing = false; bool bfloat16_support = false; + bool dot2_f16_support = false; for (const auto& properties : ext_props) { if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) { @@ -5495,6 +5532,9 @@ static vk_device ggml_vk_get_device(size_t idx) { !getenv("GGML_VK_DISABLE_BFLOAT16")) { bfloat16_support = true; #endif + } else if (strcmp("VK_VALVE_shader_mixed_float_dot_product", properties.extensionName) == 0 && + !getenv("GGML_VK_DISABLE_DOT2")) { + dot2_f16_support = true; } else if (strcmp("VK_KHR_pipeline_executable_properties", properties.extensionName) == 0) { pipeline_executable_properties_support = true; } else if (strcmp("VK_EXT_memory_priority", properties.extensionName) == 0 && @@ -5802,6 +5842,14 @@ static vk_device ggml_vk_get_device(size_t idx) { device_extensions.push_back("VK_KHR_shader_integer_dot_product"); } + VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE dot2_features {}; + dot2_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE; + if (dot2_f16_support) { + last_struct->pNext = (VkBaseOutStructure *)&dot2_features; + last_struct = (VkBaseOutStructure *)&dot2_features; + device_extensions.push_back("VK_VALVE_shader_mixed_float_dot_product"); + } + VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR pep_features {}; pep_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR; if (pipeline_executable_properties_support) { @@ -5836,6 +5884,8 @@ static vk_device ggml_vk_get_device(size_t idx) { device->bf16 = false; #endif + device->dot2_f16 = dot2_f16_support && dot2_features.shaderMixedFloatDotProductFloat16AccFloat32; + device->pipeline_robustness = pl_robustness_features.pipelineRobustness; device->multi_add = vk12_props.shaderRoundingModeRTEFloat16 && @@ -6250,6 +6300,7 @@ static void ggml_vk_print_gpu_info(size_t idx) { bool coopmat2_decode_vector_support = false; bool integer_dot_product = false; bool bfloat16_support = false; + bool dot2_f16_support = false; for (auto properties : ext_props) { if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) { @@ -6279,6 +6330,9 @@ static void ggml_vk_print_gpu_info(size_t idx) { !getenv("GGML_VK_DISABLE_BFLOAT16")) { bfloat16_support = true; #endif + } else if (strcmp("VK_VALVE_shader_mixed_float_dot_product", properties.extensionName) == 0 && + !getenv("GGML_VK_DISABLE_DOT2")) { + dot2_f16_support = true; } } @@ -6369,6 +6423,13 @@ static void ggml_vk_print_gpu_info(size_t idx) { last_struct = (VkBaseOutStructure *)&coopmat2_decode_vector_features; } + VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE dot2_features {}; + dot2_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE; + if (dot2_f16_support) { + last_struct->pNext = (VkBaseOutStructure *)&dot2_features; + last_struct = (VkBaseOutStructure *)&dot2_features; + } + vkGetPhysicalDeviceFeatures2(physical_device, &device_features2); fp16 = fp16 && vk12_features.shaderFloat16; @@ -6415,9 +6476,12 @@ static void ggml_vk_print_gpu_info(size_t idx) { : coopmat_support ? "KHR_coopmat" : "none"; + bool dot2_f16 = dot2_f16_support && dot2_features.shaderMixedFloatDotProductFloat16AccFloat32; + const char *fp16_str = fp16 ? (dot2_f16 ? "dot2" : "1") : "0"; + std::string device_name = props2.properties.deviceName.data(); - GGML_LOG_DEBUG("ggml_vulkan: %zu = %s (%s) | uma: %d | fp16: %d | bf16: %d | warp size: %zu | shared memory: %d | int dot: %d | matrix cores: %s\n", - idx, device_name.c_str(), driver_props.driverName.data(), uma, fp16, bf16, subgroup_size, + GGML_LOG_DEBUG("ggml_vulkan: %zu = %s (%s) | uma: %d | fp16: %s | bf16: %d | warp size: %zu | shared memory: %d | int dot: %d | matrix cores: %s\n", + idx, device_name.c_str(), driver_props.driverName.data(), uma, fp16_str, bf16, subgroup_size, props2.properties.limits.maxComputeSharedMemorySize, integer_dot_product, matrix_cores.c_str()); if (props2.properties.deviceType == vk::PhysicalDeviceType::eCpu) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dot_product_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/dot_product_funcs.glsl new file mode 100644 index 000000000..c474bfe09 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dot_product_funcs.glsl @@ -0,0 +1,27 @@ +#ifdef DOT2_F16 +#extension GL_EXT_spirv_intrinsics : require + +spirv_instruction(extensions = ["SPV_VALVE_mixed_float_dot_product"], + capabilities = [6912], id = 6916) +float v_dot2_f32_f16(f16vec2 a, f16vec2 b, float acc); + +ACC_TYPE dot_product(f16vec4 a, f16vec4 b, ACC_TYPE acc) { + return ACC_TYPE(v_dot2_f32_f16(a.zw, b.zw, v_dot2_f32_f16(a.xy, b.xy, float(acc)))); +} + +ACC_TYPE dot_product(f16vec2 a, f16vec2 b, ACC_TYPE acc) { + return ACC_TYPE(v_dot2_f32_f16(a, b, float(acc))); +} + +#else + +ACC_TYPE dot_product(FLOAT_TYPEV4 a, FLOAT_TYPEV4 b, ACC_TYPE acc) { + return fma(ACC_TYPE(a.x), ACC_TYPE(b.x), fma(ACC_TYPE(a.y), ACC_TYPE(b.y), + fma(ACC_TYPE(a.z), ACC_TYPE(b.z), fma(ACC_TYPE(a.w), ACC_TYPE(b.w), acc)))); +} + +ACC_TYPE dot_product(FLOAT_TYPEV2 a, FLOAT_TYPEV2 b, ACC_TYPE acc) { + return fma(ACC_TYPE(a.x), ACC_TYPE(b.x), fma(ACC_TYPE(a.y), ACC_TYPE(b.y), acc)); +} + +#endif diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp index 6ac095489..91fb07c93 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/flash_attn.comp @@ -21,6 +21,7 @@ #extension GL_KHR_shader_subgroup_vote : enable #include "types.glsl" +#include "dot_product_funcs.glsl" #include "flash_attn_base.glsl" #include "flash_attn_dequant.glsl" @@ -318,7 +319,7 @@ void main() { K_Tf = FLOAT_TYPEV4(data_kv4[k_offset / 4 + (j * Bc + c * cols_per_iter + col_tid) * k_stride / 4 + d * D_split + d_tid]); } [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { - Sf[r][c] += dot(ACC_TYPEV4(Q_cache[r]), ACC_TYPEV4(K_Tf)); + Sf[r][c] = dot_product(Q_cache[r], K_Tf, Sf[r][c]); } } } @@ -341,7 +342,7 @@ void main() { K_Tf = FLOAT_TYPEV4(data_kv4[k_offset / 4 + (j * Bc + c * cols_per_iter + col_tid) * k_stride / 4 + d * D_split + d_tid]); } [[unroll]] for (uint32_t r = 0; r < rows_per_thread; ++r) { - Sf[r][c] += dot(ACC_TYPEV4(Qf[tile_row(r) * qf_stride + d * D_split + d_tid]), ACC_TYPEV4(K_Tf)); + Sf[r][c] = dot_product(Qf[tile_row(r) * qf_stride + d * D_split + d_tid], K_Tf, Sf[r][c]); } } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index 89346e48e..f39410d74 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -29,6 +29,7 @@ #endif #include "types.glsl" +#include "dot_product_funcs.glsl" #ifndef LOAD_VEC_A #define LOAD_VEC_A 1 @@ -329,15 +330,8 @@ void main() { [[unroll]] for (uint cr = 0; cr < TM / 2; cr++) { // [WNITER][TN][WMITER][TM / 2] -> [wsic][cc][wsir][cr] const uint sums_idx = (wsic * TN + cc) * WMITER * (TM / 2) + wsir * (TM / 2) + cr; - #if defined(DATA_A_F32) || defined(DATA_A_F16) - sums[sums_idx].x = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].y), ACC_TYPE(cache_b.y), - fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].z), ACC_TYPE(cache_b.z), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].w), ACC_TYPE(cache_b.w), sums[sums_idx].x)))); - sums[sums_idx].y = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].y), ACC_TYPE(cache_b.y), - fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].z), ACC_TYPE(cache_b.z), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].w), ACC_TYPE(cache_b.w), sums[sums_idx].y)))); - #else - sums[sums_idx].x = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].y), ACC_TYPE(cache_b.y), sums[sums_idx].x)); - sums[sums_idx].y = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].y), ACC_TYPE(cache_b.y), sums[sums_idx].y)); - #endif + sums[sums_idx].x = dot_product(cache_a[wsir * TM + 2 * cr ], cache_b, sums[sums_idx].x); + sums[sums_idx].y = dot_product(cache_a[wsir * TM + 2 * cr + 1], cache_b, sums[sums_idx].y); } } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index 8fc003628..7bcb14608 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -336,7 +336,8 @@ void string_to_spv_func(std::string name, std::string in_path, std::string out_p // disable spirv-opt for coopmat shaders for https://github.com/ggml-org/llama.cpp/issues/10734 // disable spirv-opt for bf16 shaders for https://github.com/ggml-org/llama.cpp/issues/15344 // disable spirv-opt for rope shaders for https://github.com/ggml-org/llama.cpp/issues/16860 - if (!coopmat && name.find("bf16") == std::string::npos && name.find("rope") == std::string::npos) { + // disable spirv-opt for dot2 shaders (spirv-opt doesn't recognize SPV_VALVE_mixed_float_dot_product capability) + if (!coopmat && name.find("bf16") == std::string::npos && name.find("rope") == std::string::npos && name.find("_dot2") == std::string::npos) { cmd.push_back("-O"); } @@ -427,10 +428,11 @@ void string_to_spv(std::string name, const std::string& source, const std::map base_dict; std::string shader_name = "matmul"; @@ -463,6 +465,10 @@ void matmul_shaders(bool fp16, MatMulIdType matmul_id_type, bool coopmat, bool c } #endif + if (dot2) { + base_dict["DOT2_F16"] = "1"; + } + const std::string source_name = coopmat2 ? "mul_mm_cm2.comp" : "mul_mm.comp"; auto const &FLOAT_TYPE = [&](int vec, const std::string &t) -> std::string { @@ -528,11 +534,11 @@ void matmul_shaders(bool fp16, MatMulIdType matmul_id_type, bool coopmat, bool c }; // Shaders with f16 B_TYPE - string_to_spv(shader_name + "_f32_f16", source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F32", "1"}, {"B_TYPE", "float16_t"}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, }), fp16, coopmat, coopmat2, f16acc); - string_to_spv(shader_name + "_f32_f16_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F32", "1"}, {"LOAD_VEC_A", load_vec}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f16}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_f32_f16" + dot2_sfx, source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F32", "1"}, {"B_TYPE", "float16_t"}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, }), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_f32_f16" + dot2_sfx + "_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F32", "1"}, {"LOAD_VEC_A", load_vec}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f16}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); - string_to_spv(shader_name + "_f16", source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F16", "1"}, {"B_TYPE", "float16_t"}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}}), fp16, coopmat, coopmat2, f16acc); - string_to_spv(shader_name + "_f16_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F16", "1"}, {"LOAD_VEC_A", load_vec}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f16}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_f16" + dot2_sfx, source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F16", "1"}, {"B_TYPE", "float16_t"}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_f16" + dot2_sfx + "_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict_f16), {{"DATA_A_F16", "1"}, {"LOAD_VEC_A", load_vec}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f16}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); // bf16 { @@ -553,8 +559,10 @@ void matmul_shaders(bool fp16, MatMulIdType matmul_id_type, bool coopmat, bool c if (!(coopmat || coopmat2)) #endif { - string_to_spv(shader_name + "_bf16", source_name, merge_maps(merge_maps(base_dict, float_type_dict_bf16), {{"TO_FLOAT_TYPE", to_float_type}, {"DATA_A_BF16", "1"}, {"B_TYPE", coopmat2 ? "bfloat16_t" : "uint16_t"}, {"B_TYPEV4", "bf16vec4"}, {"D_TYPE", "float"}, {"B_IS_FLOAT", "1"}, {"DATA_B_BF16", "1"}}), fp16, coopmat, coopmat2, f16acc); - string_to_spv(shader_name + "_bf16_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict_bf16), {{"TO_FLOAT_TYPE", to_float_type}, {"DATA_A_BF16", "1"}, {"LOAD_VEC_A", load_vec_a}, {"LOAD_VEC_B", "4"}, {"B_TYPE", coopmat2 ? "bfloat16_t" : "u16vec4"}, {"B_TYPEV4", "bf16vec4"}, {"D_TYPE", "float"}, {"B_IS_FLOAT", "1"}, {"DATA_B_BF16", "1"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); + if (!dot2) { + string_to_spv(shader_name + "_bf16", source_name, merge_maps(merge_maps(base_dict, float_type_dict_bf16), {{"TO_FLOAT_TYPE", to_float_type}, {"DATA_A_BF16", "1"}, {"B_TYPE", coopmat2 ? "bfloat16_t" : "uint16_t"}, {"B_TYPEV4", "bf16vec4"}, {"D_TYPE", "float"}, {"B_IS_FLOAT", "1"}, {"DATA_B_BF16", "1"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_bf16_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict_bf16), {{"TO_FLOAT_TYPE", to_float_type}, {"DATA_A_BF16", "1"}, {"LOAD_VEC_A", load_vec_a}, {"LOAD_VEC_B", "4"}, {"B_TYPE", coopmat2 ? "bfloat16_t" : "u16vec4"}, {"B_TYPEV4", "bf16vec4"}, {"D_TYPE", "float"}, {"B_IS_FLOAT", "1"}, {"DATA_B_BF16", "1"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); + } } } @@ -584,18 +592,18 @@ void matmul_shaders(bool fp16, MatMulIdType matmul_id_type, bool coopmat, bool c // don't generate f32 variants for coopmat2 if (!coopmat2) { - string_to_spv(shader_name + "_" + tname + "_f32", source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a_unaligned}, {"B_TYPE", "float"}, {"B_TYPEV4", "vec4"}, {"D_TYPE", "float"}}), fp16, coopmat, coopmat2, f16acc); - string_to_spv(shader_name + "_" + tname + "_f32_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f32}, {"B_TYPEV4", "vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_" + tname + "_f32" + dot2_sfx, source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a_unaligned}, {"B_TYPE", "float"}, {"B_TYPEV4", "vec4"}, {"D_TYPE", "float"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_" + tname + "_f32" + dot2_sfx + "_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f32}, {"B_TYPEV4", "vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); } if (tname != "f16" && tname != "f32") { - string_to_spv(shader_name + "_" + tname + "_f16", source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a_unaligned}, {"B_TYPE", "float16_t"}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}}), fp16, coopmat, coopmat2, f16acc); - string_to_spv(shader_name + "_" + tname + "_f16_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f16}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_" + tname + "_f16" + dot2_sfx, source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a_unaligned}, {"B_TYPE", "float16_t"}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}}), fp16, coopmat, coopmat2, f16acc); + string_to_spv(shader_name + "_" + tname + "_f16" + dot2_sfx + "_aligned", source_name, merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"LOAD_VEC_A", load_vec_a}, {"LOAD_VEC_B", load_vec}, {"B_TYPE", aligned_b_type_f16}, {"B_TYPEV4", "f16vec4"}, {"D_TYPE", "float"}, {"ALIGNED", "1"}}), fp16, coopmat, coopmat2, f16acc); } #if defined(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) - // Integer dot mmq performs better with f32 accumulators - if (!f16acc && !coopmat && !coopmat2 && (is_legacy_quant(tname) || is_k_quant(tname) || tname == "mxfp4")) { + // Integer dot mmq performs better with f32 accumulators (different shader, skip for dot2) + if (!f16acc && !coopmat && !coopmat2 && !dot2 && (is_legacy_quant(tname) || is_k_quant(tname) || tname == "mxfp4")) { string_to_spv(shader_name + "_" + tname + "_q8_1", "mul_mmq.comp", merge_maps(merge_maps(base_dict, float_type_dict), {{data_a_key, "1"}, {"D_TYPE", "float"},}), fp16, coopmat, coopmat2, f16acc); } #endif @@ -613,6 +621,10 @@ void process_shaders() { matmul_shaders(true, matmul_id_type, false, false, false); matmul_shaders(true, matmul_id_type, false, false, true); + // dot2 variants (scalar fp16 only) + matmul_shaders(true, matmul_id_type, false, false, false, true); + matmul_shaders(true, matmul_id_type, false, false, true, true); + if (matmul_id_type != MatMulIdType::DEFAULT) { #if defined(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) // Coopmat, fp32acc and fp16acc @@ -660,6 +672,12 @@ void process_shaders() { string_to_spv("flash_attn_f32_f16", "flash_attn.comp", merge_maps(fa_base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"D_TYPEV4", "vec4"}}), fp16, false, false, f16acc); + + if (fp16) { + string_to_spv("flash_attn_f32_f16_dot2", "flash_attn.comp", + merge_maps(fa_base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"D_TYPEV4", "vec4"}, {"DOT2_F16", "1"}}), fp16, false, false, f16acc); + } + #if defined(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) string_to_spv("flash_attn_f32_f16", "flash_attn.comp", merge_maps(fa_base_dict, {{"Q_TYPE", "float"}, {"D_TYPE", "float"}, {"D_TYPEV4", "vec4"}, {"MMQ", "1"}, {"FA_MMQ_MIXED", "1"}}), fp16, false, false, f16acc, "_int8"); From d6d0ce8215a1c324e8de04b52f9dd65c5edc129f Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Tue, 9 Jun 2026 06:27:38 -0500 Subject: [PATCH 20/23] vulkan: reduce iq1 shared memory usage for mul_mm (#24287) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 4 +++- ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp | 1 + ggml/src/ggml-vulkan/vulkan-shaders/types.glsl | 8 +++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index c4ea0b105..22405f234 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -3394,7 +3394,9 @@ static bool ggml_vk_matmul_shmem_support(const vk_device& device, const std::vec switch (src0_type) { case GGML_TYPE_IQ1_S: case GGML_TYPE_IQ1_M: - lut_size = 2*2048 + 4*2048; + // Regular matmul uses the compact uint16_t IQ1 grid; the expanded + // uint32_t grid is only enabled for the q8_1/int-dot vector path. + lut_size = 2*2048; break; case GGML_TYPE_IQ2_XXS: lut_size = 8*256; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp index 6fe3e2dc0..fd84c3c91 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq.comp @@ -4,6 +4,7 @@ #extension GL_EXT_integer_dot_product : require #define MMQ +#define NEEDS_IQ1S_GRID_GPU #define B_TYPE block_q8_1_x4 #include "mul_mat_vec_base.glsl" diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl index f84d6f873..8c6b20c68 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl @@ -598,9 +598,10 @@ const uint[1024] iq1s_grid_const = { 0x55dd55df, 0x55d555d7, 0x5503550c, 0x557f5501, 0x5577557d, 0x55405575, 0x555d555f, 0x55555557 }; +#if defined(NEEDS_IQ1S_GRID_GPU) // Same content as iq1s_grid_const except each 2-bit value is expanded to 4-bit // and has 1 added to it (allows packed values to be extracted with & 0x0F0F0F0F -// and 0xF0F0F0F0). +// and 0xF0F0F0F0). This is only used by the q8_1/int-dot vector path. const uint32_t[2048] iq1s_grid_gpu_const = { 0x00000000, 0x00000002, 0x00000101, 0x00000200, 0x00000202, 0x00010001, 0x00010101, 0x00020000, 0x00020002, 0x00020200, 0x00020202, 0x01000101, 0x01010001, 0x01010100, 0x01010102, 0x01020101, @@ -859,9 +860,12 @@ const uint32_t[2048] iq1s_grid_gpu_const = { 0x20222020, 0x20222022, 0x20222220, 0x20222222, 0x21212021, 0x21212120, 0x21212122, 0x22202020, 0x22202022, 0x22202220, 0x22202222, 0x22212121, 0x22222020, 0x22222022, 0x22222220, 0x22222222, }; +#endif shared uint16_t iq1s_grid[2048]; +#if defined(NEEDS_IQ1S_GRID_GPU) shared uint32_t iq1s_grid_gpu[2048]; +#endif #define NEEDS_INIT_IQ_SHMEM void init_iq_shmem(uvec3 wgsize) @@ -875,12 +879,14 @@ void init_iq_shmem(uvec3 wgsize) iq1s_grid[2*idx+1] = g.y; } } +#if defined(NEEDS_IQ1S_GRID_GPU) [[unroll]] for (uint i = 0; i < iq1s_grid_gpu_const.length(); i += wgsize.x) { uint idx = i + gl_LocalInvocationIndex.x; if (iq1s_grid_gpu_const.length() % wgsize.x == 0 || idx < iq1s_grid_gpu_const.length()) { iq1s_grid_gpu[idx] = iq1s_grid_gpu_const[idx]; } } +#endif barrier(); } #endif From 49f354219059fc22316ae3efa54e54ba37f77860 Mon Sep 17 00:00:00 2001 From: Saba Fallah <10401143+sfallah@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:32:08 +0200 Subject: [PATCH 21/23] mtmd: build_vit batching (#24352) --- tools/mtmd/clip.cpp | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index bd33f4306..02e7a3a8f 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -314,11 +314,17 @@ ggml_tensor * clip_graph::build_vit( std::function add_pos, const build_vit_opts & opts ) { + // batch dim: inp is [n_embd, n_pos] (B==1) or [n_embd, n_pos, B] (multi-tile encode) + const int64_t B = inp->ne[2]; + if (learned_pos_embd) { inp = ggml_add(ctx0, inp, learned_pos_embd); cb(inp, "pos_embed", -1); } + // flatten batch; unflatten again in attention + inp = ggml_reshape_2d(ctx0, inp, n_embd, n_pos * B); + ggml_tensor * inpL = inp; // pre-layernorm @@ -348,20 +354,24 @@ ggml_tensor * clip_graph::build_vit( cur = ggml_add(ctx0, cur, layer.qkv_b); } - Qcur = ggml_view_3d(ctx0, cur, d_head, n_head, n_pos, - /* nb1 */ ggml_row_size(cur->type, d_head), - /* nb2 */ cur->nb[1], - /* offset */ 0); + // Q/K/V as [d_head, n_head, n_pos, B], the batch stride is cur->nb[1]*n_pos. + Qcur = ggml_view_4d(ctx0, cur, d_head, n_head, n_pos, B, + /* nb1 */ ggml_row_size(cur->type, d_head), + /* nb2 */ cur->nb[1], + /* nb3 */ cur->nb[1] * n_pos, + /* offset */ 0); - Kcur = ggml_view_3d(ctx0, cur, d_head, n_head, n_pos, - /* nb1 */ ggml_row_size(cur->type, d_head), - /* nb2 */ cur->nb[1], - /* offset */ ggml_row_size(cur->type, n_embd)); + Kcur = ggml_view_4d(ctx0, cur, d_head, n_head, n_pos, B, + /* nb1 */ ggml_row_size(cur->type, d_head), + /* nb2 */ cur->nb[1], + /* nb3 */ cur->nb[1] * n_pos, + /* offset */ ggml_row_size(cur->type, n_embd)); - Vcur = ggml_view_3d(ctx0, cur, d_head, n_head, n_pos, - /* nb1 */ ggml_row_size(cur->type, d_head), - /* nb2 */ cur->nb[1], - /* offset */ ggml_row_size(cur->type, 2 * n_embd)); + Vcur = ggml_view_4d(ctx0, cur, d_head, n_head, n_pos, B, + /* nb1 */ ggml_row_size(cur->type, d_head), + /* nb2 */ cur->nb[1], + /* nb3 */ cur->nb[1] * n_pos, + /* offset */ ggml_row_size(cur->type, 2 * n_embd)); if (layer.q_norm) { GGML_ASSERT(layer.q_norm->ne[0] == Qcur->ne[0]); @@ -406,9 +416,9 @@ ggml_tensor * clip_graph::build_vit( } } - Qcur = ggml_reshape_3d(ctx0, Qcur, d_head, n_head, n_pos); - Kcur = ggml_reshape_3d(ctx0, Kcur, d_head, n_head_kv, n_pos); - Vcur = ggml_reshape_3d(ctx0, Vcur, d_head, n_head_kv, n_pos); + Qcur = ggml_reshape_4d(ctx0, Qcur, d_head, n_head, n_pos, B); + Kcur = ggml_reshape_4d(ctx0, Kcur, d_head, n_head_kv, n_pos, B); + Vcur = ggml_reshape_4d(ctx0, Vcur, d_head, n_head_kv, n_pos, B); if (norm_per_head) { if (layer.q_norm) { @@ -438,6 +448,7 @@ ggml_tensor * clip_graph::build_vit( cb(Vcur, "Vcur_normed", il); } + // build_attn returns a flat 2D [n_embd, n_pos*B] cur = build_attn(layer.o_w, layer.o_b, Qcur, Kcur, Vcur, opts.attn_mask, kq_scale, il); cb(cur, "attn_out", il); @@ -509,6 +520,10 @@ ggml_tensor * clip_graph::build_vit( if (model.post_ln_w) { inpL = build_norm(inpL, model.post_ln_w, model.post_ln_b, norm_t, eps, -1); } + + // restore the batch dim + GGML_ASSERT(inpL->ne[1] % B == 0); + inpL = ggml_reshape_3d(ctx0, inpL, n_embd, inpL->ne[1] / B, B); return inpL; } From 483609509d58c3a09f77ff10d1b2acfca42977d2 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 9 Jun 2026 18:02:31 +0200 Subject: [PATCH 22/23] ui: add opt-in run_javascript frontend tool (#24244) * ui: add opt-in run_javascript frontend tool Expose a run_javascript tool to the model, executed entirely in the browser through the existing agentic loop. Code runs in a Web Worker inside a sandboxed iframe with an opaque origin, isolated from the WebUI and its API. Console output, errors and the return value are fed back as the tool result. The parent enforces a hard timeout by removing the iframe, which terminates the worker. Disabled by default, toggle in Settings > Developer. * ui: address review feedback from allozaur Use the JsonSchemaType enum for the tool definition parameter types instead of raw string literals, extending it with STRING and NUMBER. Move the worker shim and the iframe harness html into their own files so the service no longer carries inline source blobs. Replace the remaining magic strings with constants: SANDBOX_EMPTY_OUTPUT and SANDBOX_TRUNCATION_NOTICE, and reuse NEWLINE_SEPARATOR for joins. * ui: move sandbox worker shim to a raw imported file Replace the inline worker template string with a real sandbox-worker.js imported as raw text, and build the iframe harness from it in sandbox-harness.ts. The raw worker ships as a string, not a module, so it is excluded from eslint and the typecheck program. --- tools/ui/eslint.config.js | 9 +- tools/ui/src/lib/constants/index.ts | 1 + tools/ui/src/lib/constants/sandbox.ts | 39 ++++++ tools/ui/src/lib/constants/settings-keys.ts | 1 + .../ui/src/lib/constants/settings-registry.ts | 8 ++ tools/ui/src/lib/constants/tools.ts | 6 +- tools/ui/src/lib/enums/mcp.enums.ts | 4 +- tools/ui/src/lib/enums/tools.enums.ts | 3 +- tools/ui/src/lib/services/index.ts | 20 ++++ tools/ui/src/lib/services/sandbox-harness.ts | 25 ++++ tools/ui/src/lib/services/sandbox-worker.js | 30 +++++ tools/ui/src/lib/services/sandbox.service.ts | 112 ++++++++++++++++++ tools/ui/src/lib/stores/agentic.svelte.ts | 8 ++ tools/ui/src/lib/stores/tools.svelte.ts | 20 ++++ tools/ui/tsconfig.json | 3 +- 15 files changed, 283 insertions(+), 6 deletions(-) create mode 100644 tools/ui/src/lib/constants/sandbox.ts create mode 100644 tools/ui/src/lib/services/sandbox-harness.ts create mode 100644 tools/ui/src/lib/services/sandbox-worker.js create mode 100644 tools/ui/src/lib/services/sandbox.service.ts diff --git a/tools/ui/eslint.config.js b/tools/ui/eslint.config.js index 6b3b1b5c0..b90376b6c 100644 --- a/tools/ui/eslint.config.js +++ b/tools/ui/eslint.config.js @@ -46,7 +46,14 @@ export default ts.config( }, { // Exclude generated build output and Storybook files from ESLint - ignores: ['dist/**', 'build/**', '.svelte-kit/**', 'test-results/**', '.storybook/**/*'] + ignores: [ + 'dist/**', + 'build/**', + '.svelte-kit/**', + 'test-results/**', + '.storybook/**/*', + 'src/lib/services/sandbox-worker.js' + ] }, storybook.configs['flat/recommended'] ); diff --git a/tools/ui/src/lib/constants/index.ts b/tools/ui/src/lib/constants/index.ts index c4334132c..9ab864cd0 100644 --- a/tools/ui/src/lib/constants/index.ts +++ b/tools/ui/src/lib/constants/index.ts @@ -37,6 +37,7 @@ export * from './model-id'; export * from './precision'; export * from './processing-info'; export * from './routes'; +export * from './sandbox'; export * from './settings-keys'; export * from './settings-registry'; export * from './supported-file-types'; diff --git a/tools/ui/src/lib/constants/sandbox.ts b/tools/ui/src/lib/constants/sandbox.ts new file mode 100644 index 000000000..30e769509 --- /dev/null +++ b/tools/ui/src/lib/constants/sandbox.ts @@ -0,0 +1,39 @@ +import { JsonSchemaType, ToolCallType } from '$lib/enums'; +import type { OpenAIToolDefinition } from '$lib/types'; + +export const SANDBOX_TOOL_NAME = 'run_javascript'; + +export const SANDBOX_TIMEOUT_MS_DEFAULT = 10000; + +export const SANDBOX_TIMEOUT_MS_MAX = 30000; + +export const SANDBOX_OUTPUT_MAX_CHARS = 8192; + +export const SANDBOX_EMPTY_OUTPUT = '(no output)'; + +export const SANDBOX_TRUNCATION_NOTICE = '[output truncated]'; + +export const SANDBOX_TOOL_DEFINITION: OpenAIToolDefinition = { + type: ToolCallType.FUNCTION, + function: { + name: SANDBOX_TOOL_NAME, + description: + 'Execute JavaScript in a sandboxed browser worker (no DOM, no page access). ' + + 'Top level await is supported. Use console.log to print intermediate values; ' + + 'a top level return statement is captured as the result.', + parameters: { + type: JsonSchemaType.OBJECT, + properties: { + code: { + type: JsonSchemaType.STRING, + description: 'JavaScript source to execute' + }, + timeout_ms: { + type: JsonSchemaType.NUMBER, + description: `Execution timeout in milliseconds, default ${SANDBOX_TIMEOUT_MS_DEFAULT}, max ${SANDBOX_TIMEOUT_MS_MAX}` + } + }, + required: ['code'] + } + } +}; diff --git a/tools/ui/src/lib/constants/settings-keys.ts b/tools/ui/src/lib/constants/settings-keys.ts index 5fff9f94c..3e19166df 100644 --- a/tools/ui/src/lib/constants/settings-keys.ts +++ b/tools/ui/src/lib/constants/settings-keys.ts @@ -69,6 +69,7 @@ export const SETTINGS_KEYS = { ENABLE_THINKING: 'enableThinking', SHOW_RAW_OUTPUT_SWITCH: 'showRawOutputSwitch', // PY_INTERPRETER_ENABLED: 'pyInterpreterEnabled', + JS_SANDBOX_ENABLED: 'jsSandboxEnabled', CUSTOM_JSON: 'customJson', CUSTOM_CSS: 'customCss' } as const; diff --git a/tools/ui/src/lib/constants/settings-registry.ts b/tools/ui/src/lib/constants/settings-registry.ts index 9246b9703..910e5c2df 100644 --- a/tools/ui/src/lib/constants/settings-registry.ts +++ b/tools/ui/src/lib/constants/settings-registry.ts @@ -690,6 +690,14 @@ const SETTINGS_REGISTRY: Record = { paramType: SyncableParameterType.BOOLEAN } }, + { + key: SETTINGS_KEYS.JS_SANDBOX_ENABLED, + label: 'JavaScript sandbox tool', + help: 'Expose a run_javascript tool to the model. Code runs in a Web Worker inside a sandboxed iframe with an opaque origin, isolated from the WebUI and its API, with a hard timeout.', + defaultValue: false, + type: SettingsFieldType.CHECKBOX, + section: SETTINGS_SECTION_SLUGS.DEVELOPER + }, { key: SETTINGS_KEYS.CUSTOM_JSON, label: 'Custom JSON', diff --git a/tools/ui/src/lib/constants/tools.ts b/tools/ui/src/lib/constants/tools.ts index efc3476cd..4d9385f9f 100644 --- a/tools/ui/src/lib/constants/tools.ts +++ b/tools/ui/src/lib/constants/tools.ts @@ -2,10 +2,12 @@ import { ToolSource } from '$lib/enums/tools.enums'; export const TOOL_GROUP_LABELS = { [ToolSource.BUILTIN]: 'Built-in', - [ToolSource.CUSTOM]: 'JSON Schema' + [ToolSource.CUSTOM]: 'JSON Schema', + [ToolSource.FRONTEND]: 'Browser' } as const; export const TOOL_SERVER_LABELS = { [ToolSource.BUILTIN]: 'Built-in Tools', - [ToolSource.CUSTOM]: 'Custom Tools' + [ToolSource.CUSTOM]: 'Custom Tools', + [ToolSource.FRONTEND]: 'Browser Tools' } as const; diff --git a/tools/ui/src/lib/enums/mcp.enums.ts b/tools/ui/src/lib/enums/mcp.enums.ts index d2c27e1a0..3d9a2070d 100644 --- a/tools/ui/src/lib/enums/mcp.enums.ts +++ b/tools/ui/src/lib/enums/mcp.enums.ts @@ -54,7 +54,9 @@ export enum MCPContentType { * JSON Schema types used in MCP tool definitions */ export enum JsonSchemaType { - OBJECT = 'object' + OBJECT = 'object', + STRING = 'string', + NUMBER = 'number' } /** diff --git a/tools/ui/src/lib/enums/tools.enums.ts b/tools/ui/src/lib/enums/tools.enums.ts index 4b2cdab32..120c1d471 100644 --- a/tools/ui/src/lib/enums/tools.enums.ts +++ b/tools/ui/src/lib/enums/tools.enums.ts @@ -1,7 +1,8 @@ export enum ToolSource { BUILTIN = 'builtin', MCP = 'mcp', - CUSTOM = 'custom' + CUSTOM = 'custom', + FRONTEND = 'frontend' } export enum ToolPermissionDecision { diff --git a/tools/ui/src/lib/services/index.ts b/tools/ui/src/lib/services/index.ts index 475e6419b..386f740b8 100644 --- a/tools/ui/src/lib/services/index.ts +++ b/tools/ui/src/lib/services/index.ts @@ -261,6 +261,26 @@ export { ParameterSyncService } from './parameter-sync.service'; */ export { MCPService } from './mcp.service'; +/** + * **SandboxService** - Frontend JavaScript execution in a browser sandbox + * + * Stateless executor for the run_javascript frontend tool. Model generated + * code runs in a Web Worker spawned inside a sandboxed iframe with an opaque + * origin: no access to the app origin, its storage or its API, and outgoing + * requests carry a null origin. The code never touches a main thread, so the + * parent enforces the timeout by removing the iframe, which terminates the + * worker at the browser level. + * + * **Architecture & Relationships:** + * - **SandboxService** (this class): Stateless sandbox execution + * - **toolsStore**: Exposes the tool definition when the sandbox is enabled + * - **agenticStore**: Dispatches ToolSource.FRONTEND calls here + * + * @see SANDBOX_TOOL_DEFINITION in constants/sandbox.ts - tool schema sent to the LLM + * @see agenticStore in stores/agentic.svelte.ts - tool dispatch + */ +export { SandboxService } from './sandbox.service'; + /** * **RouterService** — Dynamic route URL construction utility * diff --git a/tools/ui/src/lib/services/sandbox-harness.ts b/tools/ui/src/lib/services/sandbox-harness.ts new file mode 100644 index 000000000..27b05e24b --- /dev/null +++ b/tools/ui/src/lib/services/sandbox-harness.ts @@ -0,0 +1,25 @@ +import WORKER_SHIM from './sandbox-worker.js?raw'; + +/** + * Harness loaded as srcdoc into a sandboxed iframe (allow-scripts only). + * The opaque origin is the security boundary: no access to the app origin, + * its storage or its API. The harness spawns a worker so model code never + * runs on a main thread, which makes the parent timeout enforceable by + * removing the iframe. + */ +export const SANDBOX_HARNESS_HTML = ``; diff --git a/tools/ui/src/lib/services/sandbox-worker.js b/tools/ui/src/lib/services/sandbox-worker.js new file mode 100644 index 000000000..689b9211e --- /dev/null +++ b/tools/ui/src/lib/services/sandbox-worker.js @@ -0,0 +1,30 @@ +const logs = []; +const fmt = (value) => { + if (typeof value === 'string') return value; + try { + return JSON.stringify(value); + } catch { + return String(value); + } +}; +const capture = + (level, prefix) => + (...args) => { + logs.push(prefix + args.map(fmt).join(' ')); + }; +console.log = capture('log', ''); +console.info = capture('info', ''); +console.debug = capture('debug', ''); +console.warn = capture('warn', 'warn: '); +console.error = capture('error', 'error: '); +self.onmessage = async (event) => { + const reply = { logs, result: null, error: null }; + try { + const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor; + const value = await new AsyncFunction(event.data.code)(); + if (value !== undefined) reply.result = fmt(value); + } catch (err) { + reply.error = err instanceof Error ? err.stack || err.message : String(err); + } + self.postMessage(reply); +}; diff --git a/tools/ui/src/lib/services/sandbox.service.ts b/tools/ui/src/lib/services/sandbox.service.ts new file mode 100644 index 000000000..ef0e6cf4e --- /dev/null +++ b/tools/ui/src/lib/services/sandbox.service.ts @@ -0,0 +1,112 @@ +import { + NEWLINE_SEPARATOR, + SANDBOX_EMPTY_OUTPUT, + SANDBOX_OUTPUT_MAX_CHARS, + SANDBOX_TIMEOUT_MS_DEFAULT, + SANDBOX_TIMEOUT_MS_MAX, + SANDBOX_TOOL_NAME, + SANDBOX_TRUNCATION_NOTICE +} from '$lib/constants'; +import { SANDBOX_HARNESS_HTML } from './sandbox-harness'; +import type { ToolExecutionResult } from '$lib/types'; + +interface SandboxReply { + logs?: unknown; + result?: unknown; + error?: unknown; +} + +function formatReply(reply: SandboxReply): ToolExecutionResult { + const lines: string[] = []; + + if (Array.isArray(reply.logs)) { + for (const line of reply.logs) lines.push(String(line)); + } + + if (reply.error != null) { + lines.push(`Error: ${String(reply.error)}`); + } else if (reply.result != null) { + lines.push(`=> ${String(reply.result)}`); + } + + let content = lines.join(NEWLINE_SEPARATOR); + if (!content) content = SANDBOX_EMPTY_OUTPUT; + if (content.length > SANDBOX_OUTPUT_MAX_CHARS) { + content = `${content.slice(0, SANDBOX_OUTPUT_MAX_CHARS)}${NEWLINE_SEPARATOR}${SANDBOX_TRUNCATION_NOTICE}`; + } + + return { content, isError: reply.error != null }; +} + +export class SandboxService { + /** + * Execute a frontend sandbox tool call and return its output. + * One disposable iframe per execution, removed on completion, + * timeout or abort. Removing the iframe terminates the worker + * at the browser level, so runaway code cannot outlive it. + */ + static executeTool( + toolName: string, + params: Record, + signal?: AbortSignal + ): Promise { + if (toolName !== SANDBOX_TOOL_NAME) { + return Promise.resolve({ content: `Unknown frontend tool: ${toolName}`, isError: true }); + } + + const code = typeof params.code === 'string' ? params.code : ''; + if (!code) { + return Promise.resolve({ content: 'Missing required parameter: code', isError: true }); + } + + const requested = Number(params.timeout_ms); + const timeoutMs = + Number.isFinite(requested) && requested > 0 + ? Math.min(requested, SANDBOX_TIMEOUT_MS_MAX) + : SANDBOX_TIMEOUT_MS_DEFAULT; + + return new Promise((resolve, reject) => { + const iframe = document.createElement('iframe'); + iframe.setAttribute('sandbox', 'allow-scripts'); + iframe.style.display = 'none'; + iframe.srcdoc = SANDBOX_HARNESS_HTML; + + let settled = false; + + const cleanup = () => { + settled = true; + clearTimeout(timer); + window.removeEventListener('message', onMessage); + signal?.removeEventListener('abort', onAbort); + iframe.remove(); + }; + + const finish = (result: ToolExecutionResult) => { + if (settled) return; + cleanup(); + resolve(result); + }; + + const onAbort = () => { + if (settled) return; + cleanup(); + reject(new DOMException('Sandbox execution aborted', 'AbortError')); + }; + + const onMessage = (event: MessageEvent) => { + if (event.source !== iframe.contentWindow) return; + finish(formatReply((event.data ?? {}) as SandboxReply)); + }; + + const timer = setTimeout( + () => finish({ content: `Execution timed out after ${timeoutMs} ms`, isError: true }), + timeoutMs + ); + + window.addEventListener('message', onMessage); + signal?.addEventListener('abort', onAbort); + iframe.onload = () => iframe.contentWindow?.postMessage({ code }, '*'); + document.body.appendChild(iframe); + }); + } +} diff --git a/tools/ui/src/lib/stores/agentic.svelte.ts b/tools/ui/src/lib/stores/agentic.svelte.ts index 947737d7c..5579cc1e5 100644 --- a/tools/ui/src/lib/stores/agentic.svelte.ts +++ b/tools/ui/src/lib/stores/agentic.svelte.ts @@ -29,6 +29,7 @@ import { permissionsStore } from '$lib/stores/permissions.svelte'; import { ToolSource, ToolPermissionDecision } from '$lib/enums'; import { SvelteMap } from 'svelte/reactivity'; import { ToolsService } from '$lib/services/tools.service'; +import { SandboxService } from '$lib/services/sandbox.service'; import { isAbortError } from '$lib/utils'; import { DEFAULT_AGENTIC_CONFIG, NEWLINE_SEPARATOR } from '$lib/constants'; import { @@ -784,6 +785,13 @@ class AgenticStore { result = executionResult.content; + if (executionResult.isError) toolSuccess = false; + } else if (toolSource === ToolSource.FRONTEND) { + const args = this.parseToolArguments(toolCall.function.arguments); + const executionResult = await SandboxService.executeTool(toolName, args, signal); + + result = executionResult.content; + if (executionResult.isError) toolSuccess = false; } else { const mcpCall: MCPToolCall = { diff --git a/tools/ui/src/lib/stores/tools.svelte.ts b/tools/ui/src/lib/stores/tools.svelte.ts index 82e41f0bf..9f0101a82 100644 --- a/tools/ui/src/lib/stores/tools.svelte.ts +++ b/tools/ui/src/lib/stores/tools.svelte.ts @@ -5,6 +5,7 @@ import { HealthCheckStatus, JsonSchemaType, ToolCallType, ToolSource } from '$li import { config } from '$lib/stores/settings.svelte'; import { DISABLED_TOOL_KEYS_LOCALSTORAGE_KEY, + SANDBOX_TOOL_DEFINITION, TOOL_GROUP_LABELS, TOOL_SERVER_LABELS } from '$lib/constants'; @@ -18,6 +19,8 @@ function toolKey(source: ToolSource, name: string, serverId?: string): string { return serverId ? `mcp-${serverId}:${name}` : `mcp:${name}`; case ToolSource.CUSTOM: return `custom:${name}`; + case ToolSource.FRONTEND: + return `frontend:${name}`; default: return `builtin:${name}`; } @@ -82,6 +85,10 @@ class ToolsStore { return mcpStore.getToolDefinitionsForLLM(); } + get frontendTools(): OpenAIToolDefinition[] { + return config().jsSandboxEnabled ? [SANDBOX_TOOL_DEFINITION] : []; + } + get customTools(): OpenAIToolDefinition[] { const raw = config().customJson; if (!raw || typeof raw !== 'string') return []; @@ -156,6 +163,15 @@ class ToolsStore { push({ source: ToolSource.BUILTIN, key: toolKey(ToolSource.BUILTIN, name), definition: def }); } + for (const def of this.frontendTools) { + const name = def.function.name; + push({ + source: ToolSource.FRONTEND, + key: toolKey(ToolSource.FRONTEND, name), + definition: def + }); + } + for (const { serverId, serverName, definition } of this.mcpEntries()) { const name = definition.function.name; push({ @@ -208,6 +224,8 @@ class ToolsStore { return entry.serverName ?? ''; case ToolSource.CUSTOM: return TOOL_GROUP_LABELS[ToolSource.CUSTOM]; + case ToolSource.FRONTEND: + return TOOL_GROUP_LABELS[ToolSource.FRONTEND]; default: return TOOL_GROUP_LABELS[ToolSource.BUILTIN]; } @@ -237,6 +255,7 @@ class ToolsStore { }; for (const def of this._builtinTools) take(def); + for (const def of this.frontendTools) take(def); for (const def of mcpStore.getToolDefinitionsForLLM()) take(def); for (const def of this.customTools) take(def); @@ -346,6 +365,7 @@ class ToolsStore { if (entry.serverName) return mcpStore.getServerDisplayName(entry.serverName); if (entry.source === ToolSource.BUILTIN) return TOOL_SERVER_LABELS[ToolSource.BUILTIN]; if (entry.source === ToolSource.CUSTOM) return TOOL_SERVER_LABELS[ToolSource.CUSTOM]; + if (entry.source === ToolSource.FRONTEND) return TOOL_SERVER_LABELS[ToolSource.FRONTEND]; return ''; } diff --git a/tools/ui/tsconfig.json b/tools/ui/tsconfig.json index 7c585f4db..51f55971e 100644 --- a/tools/ui/tsconfig.json +++ b/tools/ui/tsconfig.json @@ -24,7 +24,8 @@ "tests/**/*.svelte", ".storybook/**/*.ts", ".storybook/**/*.svelte" - ] + ], + "exclude": ["src/lib/services/sandbox-worker.js"] // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files // From e25a32e98c15a1118a976685af0f4d2c1f380079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 9 Jun 2026 18:42:23 +0200 Subject: [PATCH 23/23] ci : fix windows release (#24369) --- .github/workflows/release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3559f82e3..b656900e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -504,7 +504,7 @@ jobs: needs: [check-release] if: ${{ needs.check-release.outputs.should_release == 'true' }} - runs-on: windows-2025 + runs-on: windows-2025-vs2026 permissions: actions: write @@ -535,12 +535,12 @@ jobs: - name: ccache uses: ggml-org/ccache-action@v1.2.21 with: - key: release-windows-2025-${{ matrix.arch }}-cpu + key: release-windows-2025-vs2026-${{ matrix.arch }}-cpu - name: Build shell: cmd run: | - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch == 'x64' && 'x64' || 'amd64_arm64' }} + call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch == 'x64' && 'x64' || 'amd64_arm64' }} cmake -S . -B build -G "Ninja Multi-Config" ^ -D CMAKE_TOOLCHAIN_FILE=cmake/${{ matrix.arch }}-windows-llvm.cmake ^ -DLLAMA_BUILD_BORINGSSL=ON ^ @@ -554,12 +554,12 @@ jobs: - name: ccache-clear uses: ./.github/actions/ccache-clear with: - key: release-windows-2025-${{ matrix.arch }}-cpu + key: release-windows-2025-vs2026-${{ matrix.arch }}-cpu - name: Pack artifacts id: pack_artifacts run: | - Copy-Item "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Redist\MSVC\14.44.35112\debug_nonredist\${{ matrix.arch }}\Microsoft.VC143.OpenMP.LLVM\libomp140.${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}.dll" .\build\bin\Release\ + Copy-Item "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Redist\MSVC\14.51.36231\debug_nonredist\${{ matrix.arch }}\Microsoft.VC145.OpenMP.LLVM\libomp140.${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}.dll" .\build\bin\Release\ 7z a -snl llama-bin-win-cpu-${{ matrix.arch }}.zip .\build\bin\Release\* - name: Upload artifacts

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 z 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 & files, bool is_placeholder) { + // these will be freed upon going out of scope mtmd::bitmaps bitmaps; + std::vector videos; for (auto & file : files) { - mtmd::bitmap bmp(mtmd_helper_bitmap_init_from_buf(mctx, file.data(), file.size(), is_placeholder)); - if (!bmp.ptr) { + auto out = mtmd_helper_bitmap_init_from_buf(mctx, file.data(), file.size(), is_placeholder); + if (!out.bitmap) { throw std::runtime_error("Failed to load image or audio file"); } - // calculate bitmap hash (for KV caching) - std::string hash = fnv_hash(bmp.data(), bmp.n_bytes()); - bmp.set_id(hash.c_str()); - bitmaps.entries.push_back(std::move(bmp)); + bitmaps.entries.emplace_back(out.bitmap); + if (out.video_ctx) { + videos.emplace_back(out.video_ctx); + } } // process prompt std::vector inputs; @@ -1023,6 +1013,20 @@ json oaicompat_chat_params_parse( p["text"] = get_media_marker(); p.erase("input_audio"); + } else if (type == "input_video") { + if (!opt.allow_video) { + throw std::runtime_error("video input is not supported - hint: if this is unexpected, you may need to provide the mmproj"); + } + + json input_video = json_value(p, "input_video", json::object()); + std::string data = json_value(input_video, "data", std::string()); + auto decoded_data = base64_decode(data); // expected to be base64 encoded + out_files.push_back(decoded_data); + + p["type"] = "media_marker"; + p["text"] = get_media_marker(); + p.erase("input_video"); + } else if (type != "text") { throw std::invalid_argument("unsupported content[].type"); } diff --git a/tools/server/server-common.h b/tools/server/server-common.h index 51b161317..249b97c2f 100644 --- a/tools/server/server-common.h +++ b/tools/server/server-common.h @@ -294,6 +294,7 @@ struct server_chat_params { common_chat_templates_ptr tmpls; bool allow_image; bool allow_audio; + bool allow_video; bool enable_thinking = true; int reasoning_budget = -1; std::string reasoning_budget_message; diff --git a/tools/server/server-context.cpp b/tools/server/server-context.cpp index 07759f417..6fa302e13 100644 --- a/tools/server/server-context.cpp +++ b/tools/server/server-context.cpp @@ -1247,6 +1247,7 @@ private: /* tmpls */ std::move(chat_templates), /* allow_image */ mctx ? mtmd_support_vision(mctx) : false, /* allow_audio */ mctx ? mtmd_support_audio (mctx) : false, + /* allow_video */ mctx ? mtmd_helper_support_video(mctx) : false, /* enable_thinking */ enable_thinking, /* reasoning_budget */ params_base.sampling.reasoning_budget_tokens, /* reasoning_budget_msg */ params_base.sampling.reasoning_budget_message, @@ -3586,6 +3587,7 @@ server_context_meta server_context::get_meta() const { /* has_mtmd */ impl->mctx != nullptr, /* has_inp_image */ impl->chat_params.allow_image, /* has_inp_audio */ impl->chat_params.allow_audio, + /* has_inp_video */ impl->chat_params.allow_video, /* json_ui_settings */ impl->json_ui_settings, /* json_webui_settings */ impl->json_webui_settings, // Deprecated /* slot_n_ctx */ impl->get_slot_n_ctx(), @@ -4183,6 +4185,7 @@ void server_routes::init_routes() { { "model_path", meta->model_path }, { "modalities", json { {"vision", meta->has_inp_image}, + {"video", meta->has_inp_video}, {"audio", meta->has_inp_audio}, } }, { "media_marker", get_media_marker() }, @@ -4976,7 +4979,7 @@ std::unique_ptr server_routes::handle_count_tokens(const l n_tokens = tokenize_mixed(vocab, prompt, true, true).size(); } - json response = {{"input_tokens", static_cast(n_tokens)}}; + json response = {{"input_tokens", static_cast(n_tokens)}}; if (is_oai) { response["object"] = "response.input_tokens"; } diff --git a/tools/server/server-context.h b/tools/server/server-context.h index 72a1f40e0..0e84785af 100644 --- a/tools/server/server-context.h +++ b/tools/server/server-context.h @@ -21,6 +21,7 @@ struct server_context_meta { bool has_mtmd; bool has_inp_image; bool has_inp_audio; + bool has_inp_video; json json_ui_settings; // Primary: new name json json_webui_settings; // Deprecated: use json_ui_settings instead (kept for backward compat) int slot_n_ctx; From 3ebe862b5d3d1d2d26cd7c431ae16b5d4b4b6bd8 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Mon, 8 Jun 2026 16:59:57 +0200 Subject: [PATCH 02/23] docker: install ffmpeg in the released image (#24302) --- .devops/cpu.Dockerfile | 2 +- .devops/cuda.Dockerfile | 2 +- .devops/intel.Dockerfile | 2 +- .devops/musa.Dockerfile | 2 +- .devops/openvino.Dockerfile | 2 +- .devops/rocm.Dockerfile | 2 +- .devops/vulkan.Dockerfile | 2 +- .devops/zendnn.Dockerfile | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.devops/cpu.Dockerfile b/.devops/cpu.Dockerfile index c19b7038b..a6dd6a516 100644 --- a/.devops/cpu.Dockerfile +++ b/.devops/cpu.Dockerfile @@ -53,7 +53,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 curl \ + && apt-get install -y libgomp1 curl ffmpeg \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ diff --git a/.devops/cuda.Dockerfile b/.devops/cuda.Dockerfile index 621fe8b6a..825df2a58 100644 --- a/.devops/cuda.Dockerfile +++ b/.devops/cuda.Dockerfile @@ -59,7 +59,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 curl \ + && apt-get install -y libgomp1 curl ffmpeg \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ diff --git a/.devops/intel.Dockerfile b/.devops/intel.Dockerfile index e5d0f02eb..93fd4fa5a 100644 --- a/.devops/intel.Dockerfile +++ b/.devops/intel.Dockerfile @@ -85,7 +85,7 @@ RUN mkdir /tmp/neo/ && cd /tmp/neo/ \ && dpkg --install *.deb RUN apt-get update \ - && apt-get install -y libgomp1 curl \ + && apt-get install -y libgomp1 curl ffmpeg \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ diff --git a/.devops/musa.Dockerfile b/.devops/musa.Dockerfile index 3194294b3..ddc29b278 100644 --- a/.devops/musa.Dockerfile +++ b/.devops/musa.Dockerfile @@ -64,7 +64,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 curl \ + && apt-get install -y libgomp1 curl ffmpeg \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ diff --git a/.devops/openvino.Dockerfile b/.devops/openvino.Dockerfile index 6dabdb323..ab14288ce 100644 --- a/.devops/openvino.Dockerfile +++ b/.devops/openvino.Dockerfile @@ -107,7 +107,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 libtbb12 curl wget ocl-icd-libopencl1 \ + && apt-get install -y libgomp1 libtbb12 curl wget ffmpeg ocl-icd-libopencl1 \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ diff --git a/.devops/rocm.Dockerfile b/.devops/rocm.Dockerfile index 3fdf7a8e4..2209ab661 100644 --- a/.devops/rocm.Dockerfile +++ b/.devops/rocm.Dockerfile @@ -76,7 +76,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 curl \ + && apt-get install -y libgomp1 curl ffmpeg \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ diff --git a/.devops/vulkan.Dockerfile b/.devops/vulkan.Dockerfile index 138a50d7d..f26c7c45b 100644 --- a/.devops/vulkan.Dockerfile +++ b/.devops/vulkan.Dockerfile @@ -49,7 +49,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 curl libvulkan1 mesa-vulkan-drivers \ + && apt-get install -y libgomp1 curl ffmpeg libvulkan1 mesa-vulkan-drivers \ libglvnd0 libgl1 libglx0 libegl1 libgles2 \ && apt autoremove -y \ && apt clean -y \ diff --git a/.devops/zendnn.Dockerfile b/.devops/zendnn.Dockerfile index 76299b49e..c25d7e4d3 100644 --- a/.devops/zendnn.Dockerfile +++ b/.devops/zendnn.Dockerfile @@ -46,7 +46,7 @@ LABEL org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.source=$IMAGE_SOURCE RUN apt-get update \ - && apt-get install -y libgomp1 libnuma1 curl \ + && apt-get install -y libgomp1 libnuma1 curl ffmpeg \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ From 3b3da01dc21dc68e958efb898ab739c65ed08ca2 Mon Sep 17 00:00:00 2001 From: Nikhil Jain Date: Mon, 8 Jun 2026 08:07:15 -0700 Subject: [PATCH 03/23] [ggml-webgpu] Implement 2D workgroups for scale, binary, and unary ops (#24044) * Only run webgpu CI on my fork * Add webgpu only workflow * Implement 2d workgroups for more operations * fix * Fix type * Move back to global_invocation_id --- ggml/src/ggml-webgpu/ggml-webgpu.cpp | 32 ++++++++++++------- ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl | 13 +++++--- ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl | 10 +++--- ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl | 11 ++++--- 4 files changed, 41 insertions(+), 25 deletions(-) diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index c6cfb0bbb..94a108dfa 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -621,10 +621,11 @@ static void ggml_backend_webgpu_buffer_memset(webgpu_global_context & ctx, uint32_t value, size_t offset, size_t size) { - std::vector params = { (uint32_t) offset, (uint32_t) size, value }; - std::vector entries = { ggml_webgpu_make_bind_group_entry(0, buf, 0, buf.GetSize()) }; - size_t bytes_per_wg = ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup * ctx->capabilities.memset_bytes_per_thread; - uint32_t wg_x = CEIL_DIV(size + 3, bytes_per_wg); + std::vector params = { (uint32_t) offset, (uint32_t) size, value }; + std::vector entries = { ggml_webgpu_make_bind_group_entry(0, buf, 0, buf.GetSize()) }; + size_t bytes_per_wg = + ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup * ctx->capabilities.memset_bytes_per_thread; + uint32_t wg_x = CEIL_DIV(size + 3, bytes_per_wg); ctx->queue.WriteBuffer(ctx->memset_params_buf, 0, params.data(), params.size() * sizeof(uint32_t)); @@ -1362,7 +1363,7 @@ static webgpu_encoded_op ggml_webgpu_get_rows(webgpu_context & ctx, shader_lib_ctx.src0 = src; shader_lib_ctx.src1 = nullptr; shader_lib_ctx.dst = dst; - shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; + shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; webgpu_pipeline pipeline = ctx->shader_lib->get_get_rows_pipeline(shader_lib_ctx); auto * decisions = static_cast(pipeline.context.get()); @@ -2169,8 +2170,10 @@ static webgpu_encoded_op ggml_webgpu_unary_op(webgpu_context & ctx, ggml_tensor entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); } - uint32_t wg_x = CEIL_DIV(ne, decisions->wg_size); - return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x); + uint32_t wg_x, wg_y; + uint32_t total_wg = CEIL_DIV(ggml_nelements(dst), decisions->wg_size); + compute_2d_workgroups(total_wg, ctx->global_ctx->capabilities.limits.maxComputeWorkgroupsPerDimension, wg_x, wg_y); + return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, wg_y); } static webgpu_encoded_op ggml_webgpu_binary_op(webgpu_context & ctx, @@ -2244,8 +2247,10 @@ static webgpu_encoded_op ggml_webgpu_binary_op(webgpu_context & ctx, } } - uint32_t wg_x = CEIL_DIV(ne, decisions->wg_size); - return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x); + uint32_t wg_x, wg_y; + uint32_t total_wg = CEIL_DIV(ggml_nelements(dst), decisions->wg_size); + compute_2d_workgroups(total_wg, ctx->global_ctx->capabilities.limits.maxComputeWorkgroupsPerDimension, wg_x, wg_y); + return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, wg_y); } static webgpu_encoded_op ggml_webgpu_add_id(webgpu_context & ctx, @@ -2673,8 +2678,10 @@ static webgpu_encoded_op ggml_webgpu_scale(webgpu_context & ctx, ggml_tensor * s entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); } - uint32_t wg_x = CEIL_DIV(ggml_nelements(dst), decisions->wg_size); - return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x); + uint32_t wg_x, wg_y; + uint32_t total_wg = CEIL_DIV(ggml_nelements(dst), decisions->wg_size); + compute_2d_workgroups(total_wg, ctx->global_ctx->capabilities.limits.maxComputeWorkgroupsPerDimension, wg_x, wg_y); + return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, wg_y); } static webgpu_encoded_op ggml_webgpu_soft_max(webgpu_context & ctx, @@ -3751,7 +3758,8 @@ static ggml_guid_t ggml_backend_webgpu_guid(void) { static void ggml_webgpu_init_memset_pipeline(webgpu_global_context & ctx) { // we use the maximum workgroup size for the memset pipeline - size_t max_threads = ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup * ctx->capabilities.limits.maxComputeWorkgroupsPerDimension; + size_t max_threads = ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup * + ctx->capabilities.limits.maxComputeWorkgroupsPerDimension; // Size the bytes_per_thread so that the largest buffer size can be handled ctx->capabilities.memset_bytes_per_thread = CEIL_DIV(ctx->capabilities.limits.maxStorageBufferBindingSize, max_threads); diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl index 605de7aa7..f262c4a8f 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl @@ -130,10 +130,13 @@ fn update(dst_i: u32, src0_i: u32, src1_i: u32) { } @compute @workgroup_size(WG_SIZE) -fn main(@builtin(global_invocation_id) gid: vec3) { - if (gid.x < params.ne) { - let src0_i = params.offset_src0 + src0_index(gid.x); - let src1_i = params.offset_src1 + src1_index(gid.x); - update(params.offset_dst + gid.x, src0_i, src1_i); +fn main(@builtin(global_invocation_id) gid: vec3, + @builtin(num_workgroups) num_wg: vec3) { + let threads_per_group = u32(WG_SIZE); + let i = gid.x + (num_wg.x * threads_per_group) * gid.y; + if (i < params.ne) { + let src0_i = params.offset_src0 + src0_index(i); + let src1_i = params.offset_src1 + src1_index(i); + update(params.offset_dst + i, src0_i, src1_i); } } diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl index 3b70a876d..6c76ed69e 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/scale.wgsl @@ -43,12 +43,14 @@ struct Params { var src: array; @compute @workgroup_size(WG_SIZE) -fn main(@builtin(global_invocation_id) gid: vec3) { - if (gid.x >= params.ne) { +fn main( + @builtin(global_invocation_id) gid: vec3, + @builtin(num_workgroups) num_wg: vec3) { + let threads_per_group = u32(WG_SIZE); + var i = gid.x + (num_wg.x * threads_per_group) * gid.y; + if (i >= params.ne) { return; } - - var i = gid.x; let i3 = i / (params.ne2 * params.ne1 * params.ne0); i = i % (params.ne2 * params.ne1 * params.ne0); let i2 = i / (params.ne1 * params.ne0); diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl index 8e34e1c9c..cb342c472 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/unary.wgsl @@ -66,11 +66,14 @@ fn erf_approx(x: TYPE) -> TYPE { } @compute @workgroup_size(WG_SIZE) -fn main(@builtin(global_invocation_id) gid: vec3) { - if (gid.x >= params.ne) { +fn main(@builtin(global_invocation_id) gid: vec3, + @builtin(num_workgroups) num_wg: vec3) { + let threads_per_group = u32(WG_SIZE); + let flat_i = gid.x + (num_wg.x * threads_per_group) * gid.y; + if (flat_i >= params.ne) { return; } - var i = gid.x; + var i = flat_i; let ne2 = params.ne2; #ifdef DIAG let ne1 = params.ne0; @@ -205,6 +208,6 @@ fn main(@builtin(global_invocation_id) gid: vec3) { #ifdef INPLACE src[params.offset_src + src_idx] = res; #else - dst[params.offset_dst + gid.x] = res; + dst[params.offset_dst + flat_i] = res; #endif } From 1705d434f6b3a7bf69763fe9689b790b46253edd Mon Sep 17 00:00:00 2001 From: Nikhil Jain Date: Mon, 8 Jun 2026 08:07:31 -0700 Subject: [PATCH 04/23] [ggml-webgpu] Handle buffer overlap / buffer aliasing for concat operator (#24000) * Only run webgpu CI on my fork * Add webgpu only workflow * handle buffer overlap case for concat operator * restore build-webgpu.yml Co-Authored-By: Claude Sonnet 4.6 * Run clang-format * Update ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl --------- Co-authored-by: Claude Sonnet 4.6 Co-authored-by: Reese Levine --- .../ggml-webgpu/ggml-webgpu-shader-lib.hpp | 17 ++++- ggml/src/ggml-webgpu/ggml-webgpu.cpp | 75 ++++++++++++------- ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl | 20 ++++- 3 files changed, 79 insertions(+), 33 deletions(-) diff --git a/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp b/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp index a5e7de785..c75a98a8d 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp @@ -448,15 +448,19 @@ struct ggml_webgpu_upscale_pipeline_key_hash { /** Concat **/ struct ggml_webgpu_concat_pipeline_key { - int type; + int type; + bool src_overlap; - bool operator==(const ggml_webgpu_concat_pipeline_key & other) const { return type == other.type; } + bool operator==(const ggml_webgpu_concat_pipeline_key & other) const { + return type == other.type && src_overlap == other.src_overlap; + } }; struct ggml_webgpu_concat_pipeline_key_hash { size_t operator()(const ggml_webgpu_concat_pipeline_key & key) const { size_t seed = 0; ggml_webgpu_hash_combine(seed, key.type); + ggml_webgpu_hash_combine(seed, key.src_overlap); return seed; } }; @@ -2634,6 +2638,7 @@ class ggml_webgpu_shader_lib { webgpu_pipeline get_concat_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_concat_pipeline_key key = {}; key.type = context.dst->type; + key.src_overlap = ggml_webgpu_tensor_overlap(context.src0, context.src1); auto it = concat_pipelines.find(key); if (it != concat_pipelines.end()) { @@ -2656,11 +2661,17 @@ class ggml_webgpu_shader_lib { GGML_ABORT("Unsupported type for concat shader"); } + if (key.src_overlap) { + defines.push_back("SRC_OVERLAP"); + variant += "_src_overlap"; + } + defines.push_back(std::string("WG_SIZE=") + std::to_string(context.max_wg_size)); auto processed = preprocessor.preprocess(wgsl_concat, defines); - auto decisions = std::make_shared(); + auto decisions = std::make_shared(); decisions->wg_size = context.max_wg_size; + decisions->src_overlap = key.src_overlap; webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); pipeline.context = decisions; concat_pipelines[key] = pipeline; diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index 94a108dfa..79d513802 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -2310,33 +2310,6 @@ static webgpu_encoded_op ggml_webgpu_concat(webgpu_context & ctx, uint32_t ne = (uint32_t) ggml_nelements(dst); uint32_t dim = (uint32_t) dst->op_params[0]; - std::vector params = { - ne, - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)), - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)), - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), - (uint32_t) (src0->nb[0] / ggml_type_size(src0->type)), - (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), - (uint32_t) (src0->nb[2] / ggml_type_size(src0->type)), - (uint32_t) (src0->nb[3] / ggml_type_size(src0->type)), - (uint32_t) (src1->nb[0] / ggml_type_size(src1->type)), - (uint32_t) (src1->nb[1] / ggml_type_size(src1->type)), - (uint32_t) (src1->nb[2] / ggml_type_size(src1->type)), - (uint32_t) (src1->nb[3] / ggml_type_size(src1->type)), - (uint32_t) dst->ne[0], - (uint32_t) dst->ne[1], - (uint32_t) dst->ne[2], - (uint32_t) dst->ne[3], - dim, - (uint32_t) src0->ne[dim] - }; - - std::vector entries = { - ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, src0), - ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, src1), - ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, dst), - }; - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; shader_lib_ctx.src0 = src0; shader_lib_ctx.src1 = src1; @@ -2344,8 +2317,52 @@ static webgpu_encoded_op ggml_webgpu_concat(webgpu_context & ctx, shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; webgpu_pipeline pipeline = ctx->shader_lib->get_concat_pipeline(shader_lib_ctx); - auto * decisions = static_cast(pipeline.context.get()); - uint32_t wg_x = CEIL_DIV(ne, decisions->wg_size); + auto * decisions = static_cast(pipeline.context.get()); + + uint32_t offset_src0 = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)); + uint32_t offset_src1 = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)); + size_t merged_offset = 0; + size_t merged_size = 0; + if (decisions->src_overlap) { + const ggml_webgpu_merged_binding_range merged_range = + ggml_webgpu_tensor_merged_binding_range(ctx, { src0, src1 }); + merged_offset = merged_range.offset; + merged_size = merged_range.size; + offset_src0 = ggml_webgpu_tensor_merged_element_offset(src0, merged_range); + offset_src1 = ggml_webgpu_tensor_merged_element_offset(src1, merged_range); + } + + std::vector params = { ne, + offset_src0, + offset_src1, + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), + (uint32_t) (src0->nb[0] / ggml_type_size(src0->type)), + (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), + (uint32_t) (src0->nb[2] / ggml_type_size(src0->type)), + (uint32_t) (src0->nb[3] / ggml_type_size(src0->type)), + (uint32_t) (src1->nb[0] / ggml_type_size(src1->type)), + (uint32_t) (src1->nb[1] / ggml_type_size(src1->type)), + (uint32_t) (src1->nb[2] / ggml_type_size(src1->type)), + (uint32_t) (src1->nb[3] / ggml_type_size(src1->type)), + (uint32_t) dst->ne[0], + (uint32_t) dst->ne[1], + (uint32_t) dst->ne[2], + (uint32_t) dst->ne[3], + dim, + (uint32_t) src0->ne[dim] }; + + std::vector entries = {}; + if (decisions->src_overlap) { + entries.push_back( + ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(src0), merged_offset, merged_size)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); + } else { + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, src0)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, src1)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, dst)); + } + + uint32_t wg_x = CEIL_DIV(ne, decisions->wg_size); return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x); } diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl index a22d245d2..eb901bf05 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/concat.wgsl @@ -31,6 +31,16 @@ struct Params { #define DataType i32 #endif +#ifdef SRC_OVERLAP +@group(0) @binding(0) +var merged_src: array; + +@group(0) @binding(1) +var dst: array; + +@group(0) @binding(2) +var params: Params; +#else @group(0) @binding(0) var src0: array; @@ -42,7 +52,7 @@ var dst: array; @group(0) @binding(3) var params: Params; - +#endif @compute @workgroup_size(WG_SIZE) fn main(@builtin(global_invocation_id) gid: vec3) { @@ -62,14 +72,22 @@ fn main(@builtin(global_invocation_id) gid: vec3) { ni[1] * params.stride_src0_1 + ni[2] * params.stride_src0_2 + ni[3] * params.stride_src0_3; +#ifdef SRC_OVERLAP + dst[params.offset_dst + gid.x] = merged_src[params.offset_src0 + src_i]; +#else dst[params.offset_dst + gid.x] = src0[params.offset_src0 + src_i]; +#endif } else { ni[params.dim] -= params.src0_nedim; let src_i = ni[0] * params.stride_src1_0 + ni[1] * params.stride_src1_1 + ni[2] * params.stride_src1_2 + ni[3] * params.stride_src1_3; +#ifdef SRC_OVERLAP + dst[params.offset_dst + gid.x] = merged_src[params.offset_src1 + src_i]; +#else dst[params.offset_dst + gid.x] = src1[params.offset_src1 + src_i]; +#endif } } } From a66d50588b105ef81fe6c2debd19440f5a8ab97a Mon Sep 17 00:00:00 2001 From: Pascal Date: Mon, 8 Jun 2026 19:20:28 +0200 Subject: [PATCH 05/23] graph: guard iswa kq_mask on its own buffer (#24294) A SWA-only draft head (e.g. StepFun MTP) leaves the base sub-cache empty, so its kq_mask buffer stays null and asserts at load. Guard each mask on its own buffer in set_input and can_reuse, base and swa. Co-authored-by: Georgi Gerganov --- src/llama-graph.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index da7a92955..4cc4a4a16 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -567,7 +567,10 @@ void llm_graph_input_attn_kv_iswa::set_input(const llama_ubatch * ubatch) { mctx->get_base()->set_input_v_idxs(self_v_idxs, ubatch); } - mctx->get_base()->set_input_kq_mask(self_kq_mask, ubatch, cparams.causal_attn); + // the kq mask guards on its own buffer: shared cells leave idxs unbacked while the mask stays live + if (self_kq_mask && self_kq_mask->buffer) { + mctx->get_base()->set_input_kq_mask(self_kq_mask, ubatch, cparams.causal_attn); + } // swa tensors may not be allocated if there are no SWA attention layers if (self_k_idxs_swa && self_k_idxs_swa->buffer) { @@ -575,7 +578,9 @@ void llm_graph_input_attn_kv_iswa::set_input(const llama_ubatch * ubatch) { mctx->get_swa()->set_input_v_idxs(self_v_idxs_swa, ubatch); } - mctx->get_swa()->set_input_kq_mask(self_kq_mask_swa, ubatch, cparams.causal_attn); + if (self_kq_mask_swa && self_kq_mask_swa->buffer) { + mctx->get_swa()->set_input_kq_mask(self_kq_mask_swa, ubatch, cparams.causal_attn); + } if (self_k_rot) { mctx->get_base()->set_input_k_rot(self_k_rot); @@ -607,7 +612,9 @@ bool llm_graph_input_attn_kv_iswa::can_reuse(const llm_graph_params & params) { //res &= self_v_idxs->ne[0] == params.ubatch.n_tokens; // TODO: need to move this to the unified cache and check there } - res &= can_reuse_kq_mask(self_kq_mask, mctx->get_base(), params.ubatch, params.cparams); + if (self_kq_mask && self_kq_mask->buffer) { + res &= can_reuse_kq_mask(self_kq_mask, mctx->get_base(), params.ubatch, params.cparams); + } // swa tensors may not be allocated if there are no SWA attention layers if (self_k_idxs_swa && self_k_idxs_swa->buffer) { @@ -615,7 +622,9 @@ bool llm_graph_input_attn_kv_iswa::can_reuse(const llm_graph_params & params) { //res &= self_v_idxs_swa->ne[0] == params.ubatch.n_tokens; // TODO: need to move this to the unified cache and check there } - res &= can_reuse_kq_mask(self_kq_mask_swa, mctx->get_swa(), params.ubatch, params.cparams); + if (self_kq_mask_swa && self_kq_mask_swa->buffer) { + res &= can_reuse_kq_mask(self_kq_mask_swa, mctx->get_swa(), params.ubatch, params.cparams); + } return res; } From 42a0afd59431815585ef8daa3277f9206b235531 Mon Sep 17 00:00:00 2001 From: Aldehir Rojas Date: Mon, 8 Jun 2026 13:32:41 -0500 Subject: [PATCH 06/23] server : do not parse when flushing http headers (#24281) --- tools/server/server-task.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/server/server-task.cpp b/tools/server/server-task.cpp index 842be2ad3..72a4bd076 100644 --- a/tools/server/server-task.cpp +++ b/tools/server/server-task.cpp @@ -1393,6 +1393,9 @@ json server_task_result_cmpl_final::to_json_anthropic_stream() { // void server_task_result_cmpl_partial::update(task_result_state & state) { is_updated = true; + if (is_begin) { + return; // begin marker only flushes headers, skip parsing + } state.update_chat_msg(content, true, oaicompat_msg_diffs); // Copy current state for use in to_json_*() (reflects state BEFORE this chunk) From 7d2b45b4f7b663cda74f23fbc3ce6dc3bd4f6545 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Mon, 8 Jun 2026 13:48:52 -0700 Subject: [PATCH 07/23] mtp: support for gemma-4 E2B and E4B assistants (#24282) * models: update converter to support smaller assistants * models: add masked_embd tensors to gemma4-assist arch * gemma-4: remove temp debug for conversion * gemma-4-mtp: filter out masked_embedding tensors during conversion --- conversion/gemma.py | 10 ++++++++++ gguf-py/gguf/constants.py | 6 ++++++ gguf-py/gguf/tensor_mapping.py | 8 ++++++++ src/llama-arch.cpp | 4 ++++ src/llama-arch.h | 3 +++ src/models/gemma4-assistant.cpp | 3 +++ 6 files changed, 34 insertions(+) diff --git a/conversion/gemma.py b/conversion/gemma.py index d8cf8be57..5b4ca5c58 100644 --- a/conversion/gemma.py +++ b/conversion/gemma.py @@ -789,6 +789,16 @@ class Gemma4UnifiedModel(Gemma4Model): class Gemma4AssistantModel(Gemma4Model): model_arch = gguf.MODEL_ARCH.GEMMA4_ASSISTANT + @classmethod + def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Callable[[], Tensor]] | None: + name, gen = item + + if "masked_embedding" in name: + logger.debug(f"Skipping get tensor {name!r} in safetensors so that convert can end normally.") + return None + + return super().filter_tensors(item) + def set_gguf_parameters(self): super().set_gguf_parameters() self.gguf_writer.add_embedding_length_out(self.hparams["backbone_hidden_size"]) diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index bd6246137..584594097 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -538,6 +538,8 @@ class VISION_PROJECTOR_TYPE(IntEnum): class MODEL_TENSOR(IntEnum): TOKEN_EMBD = auto() TOKEN_EMBD_NORM = auto() + MASKED_EMBD_CENTROIDS= auto() + MASKED_EMBD_ORDERING = auto() TOKEN_TYPES = auto() POS_EMBD = auto() OUTPUT = auto() @@ -1087,6 +1089,8 @@ TENSOR_NAMES: dict[MODEL_TENSOR, str] = { MODEL_TENSOR.TOKEN_EMBD: "token_embd", MODEL_TENSOR.TOKEN_EMBD_NORM: "token_embd_norm", MODEL_TENSOR.TOKEN_TYPES: "token_types", + MODEL_TENSOR.MASKED_EMBD_CENTROIDS: "masked_embd_centroids", + MODEL_TENSOR.MASKED_EMBD_ORDERING: "masked_embd_ordering", MODEL_TENSOR.POS_EMBD: "position_embd", MODEL_TENSOR.OUTPUT_NORM: "output_norm", MODEL_TENSOR.OUTPUT: "output", @@ -2586,6 +2590,8 @@ MODEL_TENSORS: dict[MODEL_ARCH, list[MODEL_TENSOR]] = { MODEL_ARCH.GEMMA4_ASSISTANT: [ MODEL_TENSOR.ROPE_FREQS, MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.MASKED_EMBD_CENTROIDS, + MODEL_TENSOR.MASKED_EMBD_ORDERING, MODEL_TENSOR.OUTPUT_NORM, MODEL_TENSOR.NEXTN_PROJ_PRE, MODEL_TENSOR.NEXTN_PROJ_POST, diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index a9537983d..5f1e28818 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -37,6 +37,14 @@ class TensorNameMap: "model.embed", # talkie ), + # Masked embeddings + MODEL_TENSOR.MASKED_EMBD_CENTROIDS: ( + "masked_embedding.centroids", # gemma-4 E2B/E4B assistants + ), + MODEL_TENSOR.MASKED_EMBD_ORDERING: ( + "masked_embedding.token_ordering", # gemma-4 E2B/E4B assistants + ), + # Token type embeddings MODEL_TENSOR.TOKEN_TYPES: ( "embeddings.token_type_embeddings", # bert nomic-bert diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index 6a5d5f8d2..680b5fc64 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -559,6 +559,8 @@ static const std::map LLM_TENSOR_NAMES = { { LLM_TENSOR_INDEXER_PROJ, "blk.%d.indexer.proj" }, { LLM_TENSOR_INDEXER_ATTN_K, "blk.%d.indexer.attn_k" }, { LLM_TENSOR_INDEXER_ATTN_Q_B, "blk.%d.indexer.attn_q_b" }, + { LLM_TENSOR_MASKED_EMBD_CENTROIDS, "masked_embd_centroids" }, + { LLM_TENSOR_MASKED_EMBD_ORDERING, "masked_embd_ordering" }, }; // declare information about the model weight tensors: @@ -783,6 +785,8 @@ static const std::map LLM_TENSOR_INFOS = { // latent projections feed ggml_mul_mat, the buft probe must use MUL_MAT to keep them on GPU {LLM_TENSOR_FFN_LATENT_DOWN, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}}, {LLM_TENSOR_FFN_LATENT_UP, {LLM_TENSOR_LAYER_REPEATING, GGML_OP_MUL_MAT}}, + {LLM_TENSOR_MASKED_EMBD_CENTROIDS, {LLM_TENSOR_LAYER_INPUT, GGML_OP_NONE}}, + {LLM_TENSOR_MASKED_EMBD_ORDERING, {LLM_TENSOR_LAYER_INPUT, GGML_OP_NONE}}, }; LLM_KV::LLM_KV(llm_arch arch, const char * suffix) : arch(arch), suffix(suffix) {} diff --git a/src/llama-arch.h b/src/llama-arch.h index 03b1a265d..b65fce72e 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -566,8 +566,11 @@ enum llm_tensor { LLM_TENSOR_NEXTN_HNORM, LLM_TENSOR_NEXTN_SHARED_HEAD_HEAD, LLM_TENSOR_NEXTN_SHARED_HEAD_NORM, + LLM_TENSOR_MASKED_EMBD_CENTROIDS, + LLM_TENSOR_MASKED_EMBD_ORDERING, }; + enum llm_tensor_layer { LLM_TENSOR_LAYER_INPUT, LLM_TENSOR_LAYER_REPEATING, diff --git a/src/models/gemma4-assistant.cpp b/src/models/gemma4-assistant.cpp index 5b7a25a5a..6378130e7 100644 --- a/src/models/gemma4-assistant.cpp +++ b/src/models/gemma4-assistant.cpp @@ -39,6 +39,9 @@ void llama_model_gemma4_assistant::load_arch_tensors(llama_model_loader &) { output_norm = create_tensor(tn(LLM_TENSOR_OUTPUT_NORM, "weight"), { n_embd }, 0); + create_tensor(tn(LLM_TENSOR_MASKED_EMBD_CENTROIDS, "weight"), {}, TENSOR_NOT_REQUIRED); + create_tensor(tn(LLM_TENSOR_MASKED_EMBD_ORDERING), {}, TENSOR_NOT_REQUIRED); + const int64_t n_embd_backbone = hparams.n_embd_inp(); nextn_proj_post = create_tensor(tn(LLM_TENSOR_NEXTN_PROJ_POST, "weight"), { n_embd, n_embd_backbone }, 0); From 1e1aca09dab40318c9e0c2c0c47ce239876adc53 Mon Sep 17 00:00:00 2001 From: Masashi Yoshimura Date: Tue, 9 Jun 2026 07:19:56 +0900 Subject: [PATCH 08/23] ggml-webgpu: Improve prefill speeds for k-quants + refactor matmul for Q4/Q5/Q8 and k-quants (#24225) * ggml-webgpu: Improve prefill speeds + refactor matmul for quants * Fixes for editroconfig checker --- .../wgsl-shaders/mul_mat_decls.tmpl | 794 ++++++------------ 1 file changed, 259 insertions(+), 535 deletions(-) diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl index 72991504d..ed4a6b13b 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl @@ -98,72 +98,50 @@ fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u3 } #endif // INIT_SRC0_SHMEM_Q1_0 -#ifdef INIT_SRC0_SHMEM_Q4_0 +#if defined(INIT_SRC0_SHMEM_Q4_0) || defined(INIT_SRC0_SHMEM_Q4_1) || defined(INIT_SRC0_SHMEM_Q5_0) || defined(INIT_SRC0_SHMEM_Q5_1) || defined(INIT_SRC0_SHMEM_Q8_0) || defined(INIT_SRC0_SHMEM_Q8_1) || defined(INIT_SRC0_SHMEM_MXFP4) const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 18u; // the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. override BLOCKS_K = TILE_K/BLOCK_SIZE; const NQ = 16u; +#if defined(INIT_SRC0_SHMEM_Q8_0) || defined(INIT_SRC0_SHMEM_Q8_1) +const BYTES_PER_THREAD = 16u; // NQ(16) weights use 16 bytes of q +#else const BYTES_PER_THREAD = 8u; // NQ(16) weights use 8 bytes of q +#endif const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; + let block_idx = i / BLOCK_SIZE; let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; + let shmem_idx = block_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - let tile_m = blck_idx / BLOCKS_K; + let tile_m = block_idx / BLOCKS_K; let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; + let block_k = block_idx % BLOCKS_K; let global_block_k = k_outer / BLOCK_SIZE + block_k; if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; + +#ifdef INIT_SRC0_SHMEM_Q4_0 + let block_byte_base = src0_idx * 18u; // BLOCK_SIZE_BYTES = 18u; let d = load_f16_at_src0(block_byte_base); - // store NQ(16) weights + // load NQ(16) weights for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { - let q_byte_offset = block_byte_base + 2u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; let q_packed = load_u32_at_src0(q_byte_offset); dequant_q4_0_packed_to_shmem(q_packed, d, shmem_idx + j * BYTES_PER_INNER_LOOP); } - } - } -} -#endif // INIT_SRC0_SHMEM_Q4_0 +#elif INIT_SRC0_SHMEM_Q4_1 + let block_byte_base = src0_idx * 20u; // BLOCK_SIZE_BYTES = 20u; + let dm = unpack2x16float(load_u32_at_src0_aligned(block_byte_base)); + let d = f16(dm[0]); + let m = f16(dm[1]); -#ifdef INIT_SRC0_SHMEM_Q4_1 -const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 20u; -// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. -override BLOCKS_K = TILE_K/BLOCK_SIZE; -const NQ = 16u; -const BYTES_PER_THREAD = 8u; // NQ(16) weights use 8 bytes of q -const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; - let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - - let tile_m = blck_idx / BLOCKS_K; - let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; - let global_block_k = k_outer / BLOCK_SIZE + block_k; - - if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { - let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - let d = load_f16_at_src0(block_byte_base); - let m = load_f16_at_src0(block_byte_base + 2u); - - // store NQ(16) weights + // load NQ(16) weights for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { - let q_byte_offset = block_byte_base + 4u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; let q_packed = load_u32_at_src0(q_byte_offset); @@ -175,41 +153,13 @@ fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u3 shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k + 16u] = q_hi; } } - } - } -} -#endif // INIT_SRC0_SHMEM_Q4_1 - -#ifdef INIT_SRC0_SHMEM_Q5_0 -const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 22u; -// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. -// tile_k is defined as 32u, so blocks_k ends up being 1 always -override BLOCKS_K = TILE_K / BLOCK_SIZE; -const NQ = 16u; -const BYTES_PER_THREAD = 8u; // NQ(16) weights use 8 bytes of q -const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - - for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; - let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - - let tile_m = blck_idx / BLOCKS_K; - let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; - let global_block_k = k_outer / BLOCK_SIZE + block_k; - - if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { - let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; +#elif INIT_SRC0_SHMEM_Q5_0 + let block_byte_base = src0_idx * 22u; // BLOCK_SIZE_BYTES = 22u; let d = load_f16_at_src0(block_byte_base); let qh_packed = load_u32_at_src0(block_byte_base + 2u); - // store NQ(16) weights + // load NQ(16) weights for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { let q_byte_offset = block_byte_base + 6u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; let q_packed = load_u32_at_src0(q_byte_offset); @@ -226,44 +176,18 @@ fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u3 shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k + 16u] = q_hi; } } - } - } -} -#endif // INIT_SRC0_SHMEM_Q5_0 +#elif INIT_SRC0_SHMEM_Q5_1 + let block_byte_base = src0_idx * 24u; // BLOCK_SIZE_BYTES = 24u; -#ifdef INIT_SRC0_SHMEM_Q5_1 -const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 24u; -// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. -override BLOCKS_K = TILE_K / BLOCK_SIZE; -const NQ = 16u; -const BYTES_PER_THREAD = 8u; // NQ(16) weights use 8 bytes of q -const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) + let dm = unpack2x16float(load_u32_at_src0_aligned(block_byte_base)); + let d = f16(dm[0]); + let m = f16(dm[1]); + let qh_packed = load_u32_at_src0_aligned(block_byte_base + 4u); -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - - for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; - let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - - let tile_m = blck_idx / BLOCKS_K; - let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; - let global_block_k = k_outer / BLOCK_SIZE + block_k; - - if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { - let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - - let d = load_f16_at_src0(block_byte_base); - let m = load_f16_at_src0(block_byte_base + 2u); - let qh_packed = load_u32_at_src0(block_byte_base + 4u); - - // store NQ(16) weights + // load NQ(16) weights for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { let q_byte_offset = block_byte_base + 8u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; - let q_packed = load_u32_at_src0(q_byte_offset); + let q_packed = load_u32_at_src0_aligned(q_byte_offset); for (var k = 0u; k < BYTES_PER_INNER_LOOP; k++) { let q_byte = get_byte(q_packed, k); @@ -277,461 +201,306 @@ fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u3 shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k + 16u] = q_hi; } } - } - } -} -#endif // INIT_SRC0_SHMEM_Q5_1 - -#ifdef INIT_SRC0_SHMEM_Q8_0 -const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 34u; -// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. -override BLOCKS_K = TILE_K/BLOCK_SIZE; -const NQ = 16u; -const BYTES_PER_THREAD = 16u; // NQ(16) weights use 16 bytes of q -const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; - let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - - let tile_m = blck_idx / BLOCKS_K; - let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; - let global_block_k = k_outer / BLOCK_SIZE + block_k; - - if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { - let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; +#elif INIT_SRC0_SHMEM_Q8_0 + let block_byte_base = src0_idx * 34u; // BLOCK_SIZE_BYTES = 34u; let d = load_f16_at_src0(block_byte_base); - // store NQ(16) weights + // load NQ(16) weights for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { let q_byte_offset = block_byte_base + 2u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; let q_packed = load_u32_at_src0(q_byte_offset); dequant_q8_0_packed_to_shmem(q_packed, d, shmem_idx + j * BYTES_PER_INNER_LOOP); } - } - } -} -#endif // INIT_SRC0_SHMEM_Q8_0 +#elif INIT_SRC0_SHMEM_Q8_1 + let block_byte_base = src0_idx * 36u; // BLOCK_SIZE_BYTES = 36u; + let dm = unpack2x16float(load_u32_at_src0_aligned(block_byte_base)); + let d = f16(dm[0]); + let m = f16(dm[1]); -#ifdef INIT_SRC0_SHMEM_Q8_1 -const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 36u; -// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. -override BLOCKS_K = TILE_K/BLOCK_SIZE; -const NQ = 16u; -const BYTES_PER_THREAD = 16u; // NQ(16) weights use 16 bytes of q -const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; - let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - - let tile_m = blck_idx / BLOCKS_K; - let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; - let global_block_k = k_outer / BLOCK_SIZE + block_k; - - if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { - let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - let d = load_f16_at_src0(block_byte_base); - let m = load_f16_at_src0(block_byte_base + 2u); - - // store NQ(16) weights + // load NQ(16) weights for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { let q_byte_offset = block_byte_base + 4u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; let q_packed = load_u32_at_src0(q_byte_offset); for (var k = 0u; k < BYTES_PER_INNER_LOOP; k++) { let q_byte = get_byte_i32(q_packed, k); - let q_val = f16(q_byte) * d + m; shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k] = q_val; } } +#elif INIT_SRC0_SHMEM_MXFP4 + let block_byte_base = src0_idx * 17u; + let eu8 = get_byte(load_u32_at_src0_aligned(block_byte_base), block_byte_base & 3u); + let e = ldexp(1.0, i32(eu8) - 128); + + // load NQ(16) weights + for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { + let q_byte_offset = block_byte_base + 1u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; + let q_packed = load_u32_at_src0(q_byte_offset); + for (var k = 0u; k < BYTES_PER_INNER_LOOP; k++) { + let q_byte = get_byte(q_packed, k); + let q_hi = f32(kvalues_mxfp4[(q_byte >> 4) & 0xF]) * e; + let q_lo = f32(kvalues_mxfp4[q_byte & 0xF]) * e; + shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k] = f16(q_lo); + shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k + 16u] = f16(q_hi); + } + } +#endif } } } -#endif // INIT_SRC0_SHMEM_Q8_1 +#endif + +// k-quants +#if defined(INIT_SRC0_SHMEM_Q2_K) || defined(INIT_SRC0_SHMEM_Q3_K) || defined(INIT_SRC0_SHMEM_Q4_K) || defined(INIT_SRC0_SHMEM_Q5_K) || defined(INIT_SRC0_SHMEM_Q6_K) +const BLOCK_SIZE = 256u; +const NQ = 4u; + +fn store_shmem_kquants(val: vec4, idx: u32) { + shmem[idx] = val.x; + shmem[idx + 1] = val.y; + shmem[idx + 2] = val.z; + shmem[idx + 3] = val.w; +} + +fn load_byte_at_src0_aligned(byte_offset: u32) -> u32 { + return get_byte(load_u32_at_src0_aligned(byte_offset), byte_offset % 4u); +} + +fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { + for (var elem_idx = thread_id * NQ; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE * NQ) { + let tile_m = elem_idx / TILE_K; + let tile_k = elem_idx % TILE_K; + + let global_m = offset_m + tile_m; + let global_k = k_outer + tile_k; + + if (global_m >= params.m || global_k >= params.k) { + store_shmem_kquants(vec4(f16(0.0), f16(0.0), f16(0.0), f16(0.0)), elem_idx); + continue; + } + + let block_k = global_k / BLOCK_SIZE; + let k_in_block = global_k % BLOCK_SIZE; // k_in_block % 4 == 0; + + let src0_idx = batch_offset + global_m * params.stride_01 + block_k; #ifdef INIT_SRC0_SHMEM_Q2_K -const BLOCK_SIZE = 256u; -const BLOCK_SIZE_BYTES = 84u; + let block_byte_base = src0_idx * 84u; // BLOCK_SIZE_BYTES = 84u; + let scales_byte_base = block_byte_base; + let qs_byte_base = block_byte_base + 16u; + let dm_byte_base = block_byte_base + 80u; -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - // Use standard thread layout instead of lane/row_group - for (var elem_idx = thread_id; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE) { - let tile_m = elem_idx / TILE_K; - let tile_k = elem_idx % TILE_K; + let d_packed = unpack2x16float(load_u32_at_src0_aligned(dm_byte_base)); + let d = f16(d_packed[0]); + let dmin = f16(d_packed[1]); - let global_m = offset_m + tile_m; - let global_k = k_outer + tile_k; + let chunk = k_in_block / 128u; + let pos_in_chunk = k_in_block % 32u; + let sub_block = k_in_block / 16u; + let shift_phase = (k_in_block % 128u) / 32u; - if (global_m >= params.m || global_k >= params.k) { - shmem[elem_idx] = f16(0.0); - continue; - } + // whole 2 bits (4 elems) + let qs_word = load_u32_at_src0_aligned(qs_byte_base + 32u * chunk + 1u * pos_in_chunk); + let qs_vec4 = vec4( + f16((qs_word >> (2u * shift_phase + 0u)) & 0x3u), + f16((qs_word >> (2u * shift_phase + 8u)) & 0x3u), + f16((qs_word >> (2u * shift_phase + 16u)) & 0x3u), + f16((qs_word >> (2u * shift_phase + 24u)) & 0x3u), + ); - let block_k = global_k / BLOCK_SIZE; - let k_in_block = global_k % BLOCK_SIZE; + let scale = load_byte_at_src0_aligned(scales_byte_base + sub_block); - let src0_idx = batch_offset + global_m * params.stride_01 + block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; + let dl = d * f16(scale & 0xFu); + let ml = dmin * f16(scale >> 4u); - let d = load_f16_at_src0(block_byte_base + 80u); - let dmin = load_f16_at_src0(block_byte_base + 82u); + store_shmem_kquants(qs_vec4 * dl - ml, elem_idx); +#elif INIT_SRC0_SHMEM_Q3_K + let block_byte_base = src0_idx * 110u; // BLOCK_SIZE_BYTES = 110u; + let hmask_byte_base = block_byte_base + 0u; + let qs_byte_base = block_byte_base + 32u; + let scales_byte_base = block_byte_base + 96u; - // Decode the element at position k_in_block - let block_of_32 = k_in_block / 32u; - let pos_in_32 = k_in_block % 32u; + let d_all = load_f16_at_src0(block_byte_base + 108u); - let q_b_idx = (block_of_32 / 4u) * 32u; - let shift = (block_of_32 % 4u) * 2u; - let k = (pos_in_32 / 16u) * 16u; - let l = pos_in_32 % 16u; + let chunk = k_in_block / 128u; + let pos_in_chunk = k_in_block % 32u; + let sub_block = k_in_block / 16u; + let shift_phase = (k_in_block % 128u) / 32u; - let is = k_in_block / 16u; + let hmask_block = pos_in_chunk; + let hmask_shift_phase = k_in_block / 32u; - let sc_packed = load_u32_at_src0(block_byte_base + 4u * (is / 4u)); - let sc = get_byte(sc_packed, is % 4u); + // low 2 bits (4 elems) + let q_lo2_word = load_u32_at_src0(qs_byte_base + 32u * chunk + 1u * hmask_block); + let q_lo2_vec4 = vec4( + f16((q_lo2_word >> (2u * shift_phase + 0u)) & 3u), + f16((q_lo2_word >> (2u * shift_phase + 8u)) & 3u), + f16((q_lo2_word >> (2u * shift_phase + 16u)) & 3u), + f16((q_lo2_word >> (2u * shift_phase + 24u)) & 3u) + ); - let dl = d * f16(sc & 0xFu); - let ml = dmin * f16(sc >> 4u); + // high 1 bit (4 elems) + let q_hi1_word = load_u32_at_src0(hmask_byte_base + pos_in_chunk); + let q_hi1_vec4 = vec4( + f16(select(4.0, 0.0, ((q_hi1_word >> (1u * hmask_shift_phase + 0u)) & 1u) == 1u)), + f16(select(4.0, 0.0, ((q_hi1_word >> (1u * hmask_shift_phase + 8u)) & 1u) == 1u)), + f16(select(4.0, 0.0, ((q_hi1_word >> (1u * hmask_shift_phase + 16u)) & 1u) == 1u)), + f16(select(4.0, 0.0, ((q_hi1_word >> (1u * hmask_shift_phase + 24u)) & 1u) == 1u)) + ); - let q_idx = q_b_idx + k + l; - let q_packed = load_u32_at_src0(block_byte_base + 16u + 4u * (q_idx / 4u)); - let q_byte = get_byte(q_packed, q_idx % 4u); - let qs_val = (q_byte >> shift) & 3u; + let q_vec4 = q_lo2_vec4 - q_hi1_vec4; - let q_val = f16(qs_val) * dl - ml; - shmem[elem_idx] = q_val; - } -} -#endif // INIT_SRC0_SHMEM_Q2_K + let scale_low4 = (load_byte_at_src0_aligned(scales_byte_base + (sub_block % 8u)) >> (4u * (sub_block / 8u))) & 0xFu; + let scale_hi2 = (load_byte_at_src0_aligned(scales_byte_base + 8u + (sub_block % 4u)) >> (2u * (sub_block / 4u))) & 3u; + let dl = d_all * (f16((scale_hi2 << 4u) | scale_low4) - 32.0); -#ifdef INIT_SRC0_SHMEM_Q3_K -const BLOCK_SIZE = 256u; -const BLOCK_SIZE_BYTES = 110u; + store_shmem_kquants(dl * q_vec4, elem_idx); +#elif INIT_SRC0_SHMEM_Q4_K + let block_byte_base = src0_idx * 144u; // BLOCK_SIZE_BYTES = 144u; + let dm_byte_base = block_byte_base + 0u; + let scale_byte_base = block_byte_base + 4u; + let qs_byte_base = block_byte_base + 16u; -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var elem_idx = thread_id; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE) { - let tile_m = elem_idx / TILE_K; - let tile_k = elem_idx % TILE_K; + let dm = unpack2x16float(load_u32_at_src0_aligned(dm_byte_base)); + let d = f16(dm[0]); + let dmin = f16(dm[1]); - let global_m = offset_m + tile_m; - let global_k = k_outer + tile_k; + let chunk = k_in_block / 64u; + let pos_in_chunk = (k_in_block % 64u) % 32u; + let sub_block = k_in_block / 32u; + let shift_phase = sub_block & 1u; - if (global_m >= params.m || global_k >= params.k) { - shmem[elem_idx] = f16(0.0); - continue; - } - - let block_k = global_k / BLOCK_SIZE; - let k_in_block = global_k % BLOCK_SIZE; - - let src0_idx = batch_offset + global_m * params.stride_01 + block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - - let d = load_f16_at_src0(block_byte_base + 108u); - - // Load and unpack scales - let kmask1: u32 = 0x03030303u; - let kmask2: u32 = 0x0f0f0f0fu; - - var scale_vals: array; - for (var i: u32 = 0u; i < 4u; i++) { - scale_vals[i] = load_u32_at_src0(block_byte_base + 96u + 4u * i); - } - - var tmp: u32 = scale_vals[2]; - scale_vals[2] = ((scale_vals[0] >> 4u) & kmask2) | (((tmp >> 4u) & kmask1) << 4u); - scale_vals[3] = ((scale_vals[1] >> 4u) & kmask2) | (((tmp >> 6u) & kmask1) << 4u); - scale_vals[0] = (scale_vals[0] & kmask2) | ((tmp & kmask1) << 4u); - scale_vals[1] = (scale_vals[1] & kmask2) | (((tmp >> 2u) & kmask1) << 4u); - - // Load hmask and qs arrays - var hmask_vals: array; - for (var i: u32 = 0u; i < 8u; i++) { - hmask_vals[i] = load_u32_at_src0(block_byte_base + 4u * i); - } - - var qs_vals: array; - for (var i: u32 = 0u; i < 16u; i++) { - qs_vals[i] = load_u32_at_src0(block_byte_base + 32u + 4u * i); - } - - let half = k_in_block / 128u; // 0 or 1 - let pos_in_half = k_in_block % 128u; // 0-127 - let shift_group = pos_in_half / 32u; // 0-3 - let pos_in_32 = pos_in_half % 32u; // 0-31 - let k_group = pos_in_32 / 16u; // 0 or 1 - let l = pos_in_32 % 16u; // 0-15 - - let q_b_idx = half * 32u; // 0 or 32 - let shift = shift_group * 2u; // 0, 2, 4, 6 - let k = k_group * 16u; // 0 or 16 - let is = k_in_block / 16u; // 0-15 - - // m increments every 32 elements across entire 256 element block - let m_shift = k_in_block / 32u; // 0-7 - let m: u32 = 1u << m_shift; // 1,2,4,8,16,32,64,128 - - let sc = get_byte(scale_vals[is / 4u], is % 4u); - let dl = d * (f16(sc) - 32.0); - - let q_idx = q_b_idx + k + l; - let hm_idx = k + l; - - let q_byte = get_byte(qs_vals[q_idx / 4u], q_idx % 4u); - let hmask_byte = get_byte(hmask_vals[hm_idx / 4u], hm_idx % 4u); - - let hm = select(4.0, 0.0, (hmask_byte & m) != 0); - let qs_val = (q_byte >> shift) & 3u; - - let q_val = (f16(qs_val) - f16(hm)) * dl; - shmem[elem_idx] = q_val; - } -} - -#endif // INIT_SRC0_SHMEM_Q3_K - -#ifdef INIT_SRC0_SHMEM_Q4_K -const BLOCK_SIZE = 256u; -const BLOCK_SIZE_BYTES = 144u; - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var elem_idx = thread_id; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE) { - let tile_m = elem_idx / TILE_K; - let tile_k = elem_idx % TILE_K; - - let global_m = offset_m + tile_m; - let global_k = k_outer + tile_k; - - if (global_m >= params.m || global_k >= params.k) { - shmem[elem_idx] = f16(0.0); - continue; - } - - let block_k = global_k / BLOCK_SIZE; - let k_in_block = global_k % BLOCK_SIZE; - - let src0_idx = batch_offset + global_m * params.stride_01 + block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - - let d = load_f16_at_src0(block_byte_base); - let dmin = load_f16_at_src0(block_byte_base + 2u); - - // Map k_in_block to loop structure: - // Outer loop over 64-element groups (alternating q_b_idx) - // Inner loop over 2 shifts per group - let group_of_64 = k_in_block / 64u; // 0-3 (maps to q_b_idx) - let pos_in_64 = k_in_block % 64u; // 0-63 - let shift_group = pos_in_64 / 32u; // 0 or 1 - let l = pos_in_64 % 32u; // 0-31 - - let q_b_idx = group_of_64 * 32u; // 0, 32, 64, 96 - let shift = shift_group * 4u; // 0 or 4 - let is = k_in_block / 32u; // 0-7 + // whole 4 bits (4 elems) + let qs_word = load_u32_at_src0_aligned(qs_byte_base + 32u * chunk + 1u * pos_in_chunk); + let qs_vec4 = vec4( + f16((qs_word >> (4u * shift_phase + 0u)) & 0xFu), + f16((qs_word >> (4u * shift_phase + 8u)) & 0xFu), + f16((qs_word >> (4u * shift_phase + 16u)) & 0xFu), + f16((qs_word >> (4u * shift_phase + 24u)) & 0xFu) + ); var sc: u32; var mn: u32; - let scale_base = block_byte_base + 4u; - - if (is < 4u) { - let sc_byte = get_byte(load_u32_at_src0(scale_base), is % 4u); - let min_byte = get_byte(load_u32_at_src0(scale_base + 4), is % 4u); - sc = sc_byte & 63u; - mn = min_byte & 63u; + if (sub_block < 4u) { + let sc_byte = get_byte(load_u32_at_src0_aligned(scale_byte_base), sub_block % 4u); + let min_byte = get_byte(load_u32_at_src0_aligned(scale_byte_base + 4), sub_block % 4u); + sc = sc_byte & 63u; + mn = min_byte & 63u; } else { - let sc_min_lo = get_byte(load_u32_at_src0(scale_base + 8), (is + 4u) % 4u); - let sc_hi = get_byte(load_u32_at_src0(scale_base), (is - 4u) % 4u); - let min_hi = get_byte(load_u32_at_src0(scale_base + 4), is % 4u); - - sc = (sc_min_lo & 0xFu) | ((sc_hi >> 6u) << 4u); - mn = (sc_min_lo >> 4u) | ((min_hi >> 6u) << 4u); + let sc_min_lo = get_byte(load_u32_at_src0_aligned(scale_byte_base + 8), (sub_block + 4u) % 4u); + let sc_hi = get_byte(load_u32_at_src0_aligned(scale_byte_base), (sub_block - 4u) % 4u); + let min_hi = get_byte(load_u32_at_src0_aligned(scale_byte_base + 4), sub_block % 4u); + sc = (sc_min_lo & 0xFu) | ((sc_hi >> 6u) << 4u); + mn = (sc_min_lo >> 4u) | ((min_hi >> 6u) << 4u); } let dl = d * f16(sc); let ml = dmin * f16(mn); - let q_idx = q_b_idx + l; - let q_packed = load_u32_at_src0(block_byte_base + 16u + 4u * (q_idx / 4u)); + store_shmem_kquants(dl * qs_vec4 - vec4(ml, ml, ml, ml), elem_idx); +#elif INIT_SRC0_SHMEM_Q5_K + let block_byte_base = src0_idx * 176u; // BLOCK_SIZE_BYTES = 176u; + let dm_byte_base = block_byte_base + 0u; + let scale_byte_base = block_byte_base + 4u; + let qh_byte_base = block_byte_base + 16u; + let qs_byte_base = block_byte_base + 48u; - let q_byte = get_byte(q_packed, q_idx % 4u); - let qs_val = (q_byte >> shift) & 0xFu; + let dm = unpack2x16float(load_u32_at_src0_aligned(dm_byte_base)); + let d = f16(dm[0]); + let dmin = f16(dm[1]); - let q_val = f16(qs_val) * dl - ml; - shmem[elem_idx] = q_val; - } -} -#endif // INIT_SRC0_SHMEM_Q4_K + let chunk = k_in_block / 64u; + let pos_in_chunk = (k_in_block % 64u) % 32u; + let sub_block = k_in_block / 32u; + let shift_phase = sub_block & 1u; -#ifdef INIT_SRC0_SHMEM_Q5_K -const BLOCK_SIZE = 256u; -const BLOCK_SIZE_BYTES = 176u; + let qh_block = k_in_block % 32u; + let qh_shift_phase = sub_block; -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var elem_idx = thread_id; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE) { - let tile_m = elem_idx / TILE_K; - let tile_k = elem_idx % TILE_K; + // low 4 bits (4 elems) + let qs_word = load_u32_at_src0_aligned(qs_byte_base + 32u * chunk + 1u * pos_in_chunk); + let qs_lo4_vec4 = vec4( + f16((qs_word >> (4u * shift_phase + 0u)) & 0xFu), + f16((qs_word >> (4u * shift_phase + 8u)) & 0xFu), + f16((qs_word >> (4u * shift_phase + 16u)) & 0xFu), + f16((qs_word >> (4u * shift_phase + 24u)) & 0xFu) + ); - let global_m = offset_m + tile_m; - let global_k = k_outer + tile_k; - - if (global_m >= params.m || global_k >= params.k) { - shmem[elem_idx] = f16(0.0); - continue; - } - - let block_k = global_k / BLOCK_SIZE; - let k_in_block = global_k % BLOCK_SIZE; - - let src0_idx = batch_offset + global_m * params.stride_01 + block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - - let d = load_f16_at_src0(block_byte_base); - let dmin = load_f16_at_src0(block_byte_base + 2u); - - - // The original loop processes elements in groups of 64 - // Each group of 64: q_b_idx cycles through [0,32,64,96], shift cycles [0,4] - // But u increments EVERY 32 elements (after each l loop) - let group_of_64 = k_in_block / 64u; // 0-3 - let pos_in_64 = k_in_block % 64u; // 0-63 - let shift_group = pos_in_64 / 32u; // 0 or 1 - let l = pos_in_64 % 32u; // 0-31 - - let q_b_idx = group_of_64 * 32u; // 0, 32, 64, 96 - let shift = shift_group * 4u; // 0 or 4 - let is = k_in_block / 32u; // 0-7 - - // u increments every 32 elements (0->1, 1->2, 2->4, 3->8, 4->16, 5->32, 6->64, 7->128) - let u_shift = k_in_block / 32u; // 0-7 - let u: u32 = 1u << u_shift; + // high 1 bit (4 elems) + let qh_word = load_u32_at_src0_aligned(qh_byte_base + qh_block); + let qh_vec4 = vec4( + f16(select(0.0, 16.0, ((qh_word >> (1u * qh_shift_phase + 0u)) & 1u) == 1u)), + f16(select(0.0, 16.0, ((qh_word >> (1u * qh_shift_phase + 8u)) & 1u) == 1u)), + f16(select(0.0, 16.0, ((qh_word >> (1u * qh_shift_phase + 16u)) & 1u) == 1u)), + f16(select(0.0, 16.0, ((qh_word >> (1u * qh_shift_phase + 24u)) & 1u) == 1u)) + ); var sc: u32; var mn: u32; - let scale_base = block_byte_base + 4u; - - if (is < 4u) { - let sc_byte = get_byte(load_u32_at_src0(scale_base), is % 4u); - let min_byte = get_byte(load_u32_at_src0(scale_base + 4), is % 4u); - sc = sc_byte & 63u; - mn = min_byte & 63u; + if (sub_block < 4u) { + let sc_byte = get_byte(load_u32_at_src0_aligned(scale_byte_base), sub_block % 4u); + let min_byte = get_byte(load_u32_at_src0_aligned(scale_byte_base + 4), sub_block % 4u); + sc = sc_byte & 63u; + mn = min_byte & 63u; } else { - let sc_min_lo = get_byte(load_u32_at_src0(scale_base + 8), (is + 4u) % 4u); - let sc_hi = get_byte(load_u32_at_src0(scale_base), (is - 4u) % 4u); - let min_hi = get_byte(load_u32_at_src0(scale_base + 4), is % 4u); - - sc = (sc_min_lo & 0xFu) | ((sc_hi >> 6u) << 4u); - mn = (sc_min_lo >> 4u) | ((min_hi >> 6u) << 4u); + let sc_min_lo = get_byte(load_u32_at_src0_aligned(scale_byte_base + 8), (sub_block + 4u) % 4u); + let sc_hi = get_byte(load_u32_at_src0_aligned(scale_byte_base), (sub_block - 4u) % 4u); + let min_hi = get_byte(load_u32_at_src0_aligned(scale_byte_base + 4), sub_block % 4u); + sc = (sc_min_lo & 0xFu) | ((sc_hi >> 6u) << 4u); + mn = (sc_min_lo >> 4u) | ((min_hi >> 6u) << 4u); } let dl = d * f16(sc); let ml = dmin * f16(mn); - let q_idx = q_b_idx + l; - let q_packed = load_u32_at_src0(block_byte_base + 48u + 4u * (q_idx / 4u)); + store_shmem_kquants((qh_vec4 + qs_lo4_vec4) * dl - vec4(ml, ml, ml, ml), elem_idx); +#elif INIT_SRC0_SHMEM_Q6_K + let block_byte_base = src0_idx * 210u; // BLOCK_SIZE_BYTES = 210u; + let ql_byte_base = block_byte_base; + let qh_byte_base = block_byte_base + 128u; + let scales_byte_base = block_byte_base + 192u; + let d_byte_base = block_byte_base + 208u; - let q_byte = get_byte(q_packed, q_idx % 4u); + let d = load_f16_at_src0(d_byte_base); - let qh_packed = load_u32_at_src0(block_byte_base + 16u + 4u * (l / 4u)); + let chunk = k_in_block / 128u; + let ql_pos_in_chunk = (k_in_block % 128u) % 64u; + let qh_pos_in_chunk = (k_in_block % 128u) % 32u; + let sub_block = k_in_block / 16u; + let ql_shift_phase = (k_in_block % 128u) / 64u; + let qh_shift_phase = (k_in_block % 128u) / 32u; - let qh_byte = get_byte(qh_packed, l % 4u); + // low 4 bits (4 elems) + let ql_word = load_u32_at_src0(ql_byte_base + 64u * chunk + 1u * ql_pos_in_chunk); + let ql_lo4_vec4 = vec4( + (ql_word >> (4u * ql_shift_phase + 0u)) & 0xFu, + (ql_word >> (4u * ql_shift_phase + 8u)) & 0xFu, + (ql_word >> (4u * ql_shift_phase + 16u)) & 0xFu, + (ql_word >> (4u * ql_shift_phase + 24u)) & 0xFu + ); - let qs_val = (q_byte >> shift) & 0xFu; - let qh_val = select(0.0, 16.0, (qh_byte & u) != 0); + // hi 2 bits (4 elems) + let qh_word = load_u32_at_src0(qh_byte_base + 32u * chunk + 1u * qh_pos_in_chunk); + let qh_hi2_vec4 = vec4( + ((qh_word >> (2u * qh_shift_phase + 0u)) & 0x3u) << 4u, + ((qh_word >> (2u * qh_shift_phase + 8u)) & 0x3u) << 4u, + ((qh_word >> (2u * qh_shift_phase + 16u)) & 0x3u) << 4u, + ((qh_word >> (2u * qh_shift_phase + 24u)) & 0x3u) << 4u, + ); - let q_val = (f16(qs_val) + f16(qh_val)) * dl - ml; - shmem[elem_idx] = q_val; + let q_vec4 = vec4(qh_hi2_vec4 | ql_lo4_vec4) - vec4(32.0, 32.0, 32.0, 32.0); + + let scale_byte = scales_byte_base + 1u * sub_block; + let scale_word = load_u32_at_src0_aligned(scale_byte); + let scale = get_byte_i32(scale_word, scale_byte & 3u); + + store_shmem_kquants(d * q_vec4 * f16(scale), elem_idx); +#endif } } - -#endif // INIT_SRC0_SHMEM_Q5_K - -#ifdef INIT_SRC0_SHMEM_Q6_K -const BLOCK_SIZE = 256u; -const BLOCK_SIZE_BYTES = 210u; - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var elem_idx = thread_id; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE) { - let tile_m = elem_idx / TILE_K; - let tile_k = elem_idx % TILE_K; - - let global_m = offset_m + tile_m; - let global_k = k_outer + tile_k; - - if (global_m >= params.m || global_k >= params.k) { - shmem[elem_idx] = f16(0.0); - continue; - } - - let block_k = global_k / BLOCK_SIZE; - let k_in_block = global_k % BLOCK_SIZE; - - let src0_idx = batch_offset + global_m * params.stride_01 + block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - - let half = k_in_block / 128u; - let pos_in_half = k_in_block % 128u; - let quarter = pos_in_half / 32u; - let l = pos_in_half % 32u; - - let ql_b_idx = half * 64u; - let qh_b_idx = half * 32u; - let sc_b_idx = half * 8u; - - // Load only ql13 word needed - let ql13_flat = ql_b_idx + l; - let ql13 = load_u32_at_src0(block_byte_base + ql13_flat); - let ql13_b = get_byte(ql13, 0u); - - // Load only ql24 word needed - let ql24_flat = ql_b_idx + l + 32u; - let ql24 = load_u32_at_src0(block_byte_base + ql24_flat); - let ql24_b = get_byte(ql24, 0u); - - // Load only qh word needed - let qh_flat = qh_b_idx + l; - let qh = load_u32_at_src0(block_byte_base + 128u + qh_flat); - let qh_b = get_byte(qh, 0u); - - let q1 = f16((ql13_b & 0xFu) | ((qh_b & 3u) << 4u)) - f16(32.0); - let q2 = f16((ql24_b & 0xFu) | (((qh_b >> 2u) & 3u) << 4u)) - f16(32.0); - let q3 = f16((ql13_b >> 4u) | (((qh_b >> 4u) & 3u) << 4u)) - f16(32.0); - let q4 = f16((ql24_b >> 4u) | (((qh_b >> 6u) & 3u) << 4u)) - f16(32.0); - - // Load only the scale word needed - let is = l / 16u; - let sc_idx = sc_b_idx + is + quarter * 2u; - let sc = load_u32_at_src0(block_byte_base + 192u + sc_idx); - let sc_val = get_byte_i32(sc, 0u); - - let d = load_f16_at_src0(block_byte_base + 208u); - - var q_val: f16; - if (quarter == 0u) { - q_val = q1; - } else if (quarter == 1u) { - q_val = q2; - } else if (quarter == 2u) { - q_val = q3; - } else { - q_val = q4; - } - - shmem[elem_idx] = d * f16(sc_val) * q_val; - } -} -#endif // INIT_SRC0_SHMEM_Q6_K +#endif // k-quants #ifdef INIT_SRC0_SHMEM_IQ4_NL const BLOCK_SIZE = 32u; @@ -1155,48 +924,3 @@ fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u3 } } #endif // INIT_SRC0_SHMEM_IQ3_S - -#ifdef INIT_SRC0_SHMEM_MXFP4 -const BLOCK_SIZE = 32u; -const BLOCK_SIZE_BYTES = 17u; -// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. -override BLOCKS_K = TILE_K/BLOCK_SIZE; -const NQ = 16u; -const BYTES_PER_THREAD = 8u; // NQ(16) weights uses 8 bytes of q -const BYTES_PER_INNER_LOOP = 4u; // == sizeof(q_packed) - -fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { - for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { - let blck_idx = i / BLOCK_SIZE; - let block_offset = (i % BLOCK_SIZE) / NQ; - let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * BYTES_PER_THREAD; - - let tile_m = blck_idx / BLOCKS_K; - let global_m = offset_m + tile_m; - let block_k = blck_idx % BLOCKS_K; - let global_block_k = k_outer / BLOCK_SIZE + block_k; - - if (global_m < params.m && global_block_k < params.k / BLOCK_SIZE) { - let src0_idx = batch_offset + global_m * params.stride_01 + global_block_k; - let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; - let eu8 = get_byte(load_u32_at_src0(block_byte_base), 0); - let e = ldexp(1.0, i32(eu8) - 128); - - // store NQ(16) weights - for (var j = 0u; j < BYTES_PER_THREAD / BYTES_PER_INNER_LOOP; j += 1) { - - let q_byte_offset = block_byte_base + 1u + block_offset * BYTES_PER_THREAD + j * BYTES_PER_INNER_LOOP; - let q_packed = load_u32_at_src0(q_byte_offset); - - for (var k = 0u; k < BYTES_PER_INNER_LOOP; k++) { - let q_byte = get_byte(q_packed, k); - let q_hi = f32(kvalues_mxfp4[(q_byte >> 4) & 0xF]) * e; - let q_lo = f32(kvalues_mxfp4[q_byte & 0xF]) * e; - shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k] = f16(q_lo); - shmem[shmem_idx + j * BYTES_PER_INNER_LOOP + k + 16u] = f16(q_hi); - } - } - } - } -} -#endif // INIT_SRC0_SHMEM_MXFP4 From 3ac3c20c968cc6d485d89382f202ec440767875a Mon Sep 17 00:00:00 2001 From: Reese Levine Date: Mon, 8 Jun 2026 20:54:24 -0700 Subject: [PATCH 09/23] ggml-webgpu: Add clang-format job (#24308) * Add clang-format job * try local formatting --- .github/workflows/build-webgpu.yml | 23 +++++++++++++++++++ .../ggml-webgpu/ggml-webgpu-shader-lib.hpp | 19 ++++++++------- ggml/src/ggml-webgpu/ggml-webgpu.cpp | 6 ++--- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-webgpu.yml b/.github/workflows/build-webgpu.yml index bade95c6a..0f5ade7af 100644 --- a/.github/workflows/build-webgpu.yml +++ b/.github/workflows/build-webgpu.yml @@ -35,6 +35,29 @@ env: LLAMA_ARG_LOG_TIMESTAMPS: 1 jobs: + format: + runs-on: ubuntu-24.04 + + steps: + - name: Clone + uses: actions/checkout@v6 + + - name: Install clang-format 22 + run: | + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | + sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc > /dev/null + sudo add-apt-repository -y \ + "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-22 main" + sudo apt-get update + sudo apt-get install -y clang-format-22 + + - name: Check formatting + run: | + find ggml/src/ggml-webgpu \ + -type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.h' \) \ + -print0 | + xargs -0 clang-format-22 --dry-run --Werror + macos: runs-on: macos-latest diff --git a/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp b/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp index c75a98a8d..6f877f15c 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp @@ -644,7 +644,8 @@ inline size_t ggml_webgpu_flash_attn_tensor_offset(const ggml_tensor * tensor) { inline bool ggml_webgpu_flash_attn_float_vec4_aligned(const ggml_tensor * K, size_t storage_offset_alignment) { const uint32_t offset_elems = - (uint32_t) ((ggml_webgpu_flash_attn_tensor_offset(K) & (storage_offset_alignment - 1)) / ggml_type_size(K->type)); + (uint32_t) ((ggml_webgpu_flash_attn_tensor_offset(K) & (storage_offset_alignment - 1)) / + ggml_type_size(K->type)); return offset_elems % GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH == 0u; } @@ -655,8 +656,10 @@ inline bool ggml_webgpu_flash_attn_float_vec4_aligned(const ggml_tensor * K, ggml_webgpu_flash_attn_float_vec4_aligned(V, storage_offset_alignment); } -inline bool ggml_webgpu_flash_attn_kv_direct( - const ggml_tensor * Q, const ggml_tensor * K, const ggml_tensor * V, uint32_t kv_direct_align) { +inline bool ggml_webgpu_flash_attn_kv_direct(const ggml_tensor * Q, + const ggml_tensor * K, + const ggml_tensor * V, + uint32_t kv_direct_align) { return K->type == GGML_TYPE_F16 && V->type == GGML_TYPE_F16 && (Q->ne[0] % kv_direct_align == 0) && (K->ne[1] % GGML_WEBGPU_KV_SEQ_PAD == 0); } @@ -671,10 +674,10 @@ inline ggml_webgpu_flash_attn_common_pipeline_key ggml_webgpu_flash_attn_make_co key.dst_type = context.dst->type; key.head_dim_qk = (uint32_t) context.src0->ne[0]; key.head_dim_v = (uint32_t) context.src2->ne[0]; - key.kv_direct = ggml_webgpu_flash_attn_kv_direct(context.src0, context.src1, context.src2, kv_direct_align); - key.kv_overlap = ggml_webgpu_tensor_overlap(context.src1, context.src2); - key.has_mask = context.src3 != nullptr; - key.has_sinks = context.src4 != nullptr; + key.kv_direct = ggml_webgpu_flash_attn_kv_direct(context.src0, context.src1, context.src2, kv_direct_align); + key.kv_overlap = ggml_webgpu_tensor_overlap(context.src1, context.src2); + key.has_mask = context.src3 != nullptr; + key.has_sinks = context.src4 != nullptr; key.uses_logit_softcap = ggml_get_op_params_f32(context.dst, 2) != 0.0f; return key; } @@ -1727,7 +1730,7 @@ class ggml_webgpu_shader_lib { key.type = context.dst->type; key.d_state = (int) context.src0->ne[0]; key.xbc_overlap = ggml_webgpu_tensor_overlap(context.src1, context.src4) && - ggml_webgpu_tensor_overlap(context.src1, context.src5); + ggml_webgpu_tensor_overlap(context.src1, context.src5); auto it = ssm_scan_pipelines.find(key); if (it != ssm_scan_pipelines.end()) { diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index 79d513802..538e587bb 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -4253,9 +4253,9 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const const uint32_t q_tile = use_subgroup_matrix ? capabilities.sg_mat_m : GGML_WEBGPU_FLASH_ATTN_TILE_Q_TILE; const uint32_t kv_granularity = use_subgroup_matrix ? capabilities.sg_mat_n : 1u; - const bool kv_direct = use_subgroup_matrix ? - ggml_webgpu_flash_attn_kv_direct(src0, src1, src2, capabilities.sg_mat_k) : - false; + const bool kv_direct = use_subgroup_matrix ? + ggml_webgpu_flash_attn_kv_direct(src0, src1, src2, capabilities.sg_mat_k) : + false; const uint32_t max_kv_tile = ggml_webgpu_flash_attn_max_kv_tile( capabilities.limits.maxComputeWorkgroupStorageSize, q_tile, kv_granularity, (uint32_t) src0->ne[0], (uint32_t) src2->ne[0], op->src[3] != nullptr, kv_direct); From e3471b3e7306fe120dc8f38a2263c1293fc2add7 Mon Sep 17 00:00:00 2001 From: ravel7524 <58877666+ravel7524@users.noreply.github.com> Date: Tue, 9 Jun 2026 07:46:23 +0200 Subject: [PATCH 10/23] Remove case for GGML_TYPE_Q4_K in mvvq.cu (#23528) --- ggml/src/ggml-cuda/mmvq.cu | 1 - 1 file changed, 1 deletion(-) diff --git a/ggml/src/ggml-cuda/mmvq.cu b/ggml/src/ggml-cuda/mmvq.cu index bdfbfd2d3..fe44a58da 100644 --- a/ggml/src/ggml-cuda/mmvq.cu +++ b/ggml/src/ggml-cuda/mmvq.cu @@ -411,7 +411,6 @@ static constexpr __host__ __device__ int calc_nwarps(ggml_type type, int ncols_d case GGML_TYPE_Q5_0: case GGML_TYPE_Q5_1: case GGML_TYPE_Q8_0: - case GGML_TYPE_Q4_K: return 8; case GGML_TYPE_Q6_K: return 2; From fd3271e0b4d8422ca1d16a850edb4222f7392013 Mon Sep 17 00:00:00 2001 From: Yash Raj Pandey <55940078+devYRPauli@users.noreply.github.com> Date: Tue, 9 Jun 2026 03:24:27 -0400 Subject: [PATCH 11/23] ggml-cpu : fix rms_norm_back wrong output under in-place aliasing (#24305) * ggml-cpu : fix rms_norm_back wrong output under in-place aliasing * cont : clean-up comment --------- Co-authored-by: Georgi Gerganov --- ggml/src/ggml-cpu/ops.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index 3a1912ae9..becac9d6e 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -4008,12 +4008,12 @@ static void ggml_compute_forward_rms_norm_back_f32( // dx := scale(dx, rrms) float * dx = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); - // dx[i00] = (x*(-sum_xdz/sum_eps) + dz) / sqrtf(mean_eps) - ggml_vec_cpy_f32 (ne00, dx, x); - // ggml_vec_scale_f32(ne00, dx, -mean_xdz/mean_eps); - ggml_vec_scale_f32(ne00, dx, (float)(-sum_xdz)/sum_eps); - ggml_vec_acc_f32 (ne00, dx, dz); - ggml_vec_scale_f32(ne00, dx, rrms); + // dx[i00] = (dz + x*(-sum_xdz/sum_eps)) * rrms + // note: https://github.com/ggml-org/ggml/issues/1491 + const float scale_x = (float) (-sum_xdz) / sum_eps; + for (int64_t i00 = 0; i00 < ne00; i00++) { + dx[i00] = (dz[i00] + x[i00] * scale_x) * rrms; + } } } } From f0152efe401acd5b329b5f62d87dc070a6d069f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 9 Jun 2026 09:26:44 +0200 Subject: [PATCH 12/23] models : fix plamo2 attention_key/value_length regression (#24317) --- src/models/plamo2.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/models/plamo2.cpp b/src/models/plamo2.cpp index b93cf48bc..0b81513c3 100644 --- a/src/models/plamo2.cpp +++ b/src/models/plamo2.cpp @@ -11,6 +11,10 @@ void llama_model_plamo2::load_arch_hparams(llama_model_loader & ml) { ml.get_key(LLM_KV_SSM_TIME_STEP_RANK, hparams.ssm_dt_rank); ml.get_key(LLM_KV_SSM_GROUP_COUNT, hparams.ssm_n_group); + // Load attention parameters + ml.get_key(LLM_KV_ATTENTION_KEY_LENGTH, hparams.n_embd_head_k_full, false); + ml.get_key(LLM_KV_ATTENTION_VALUE_LENGTH, hparams.n_embd_head_v_full, false); + for (uint32_t i = 0; i < hparams.n_layer(); ++i) { hparams.is_recr_impl[i] = hparams.n_head_kv(i) == 0; } @@ -273,7 +277,7 @@ ggml_tensor * llama_model_plamo2::graph::build_plamo2_mamba_layer(llm_graph_inpu GGML_ASSERT(n_seqs != 0); GGML_ASSERT(ubatch.equal_seqs()); GGML_ASSERT(ubatch.n_tokens == n_seq_tokens * n_seqs); - GGML_ASSERT(d_inner % n_head == 0); + GGML_ASSERT(d_inner % n_heads == 0); GGML_ASSERT(n_group == 0); ggml_tensor * conv_states_all = mctx_cur->get_r_l(il); From 961e9a3e46ca4cf7e6e86cfceb5b5e32084bf5f0 Mon Sep 17 00:00:00 2001 From: fiesh Date: Tue, 9 Jun 2026 09:45:16 +0200 Subject: [PATCH 13/23] server : do not clear slots without unified KV cache (#24190) * Always export idle slots to RAM Without this, a slot's VRAM cache may not be written to RAM. If this slot happens to be busy then later on, this triggers needless preprocessing in another slot. * cont : clean-up --------- Co-authored-by: Christoph Weiss Co-authored-by: Georgi Gerganov --- common/arg.cpp | 2 +- tools/server/README.md | 2 +- tools/server/server-context.cpp | 57 +++++++++++++++++---------------- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 0213a67c8..df506d2d0 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -1360,7 +1360,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex add_opt(common_arg( {"--cache-idle-slots"}, {"--no-cache-idle-slots"}, - "save and clear idle slots on new task (default: enabled, requires unified KV and cache-ram)", + "save idle slots to the prompt cache on new task, and clear them when using unified KV (default: enabled, requires cache-ram)", [](common_params & params, bool value) { params.cache_idle_slots = value; } diff --git a/tools/server/README.md b/tools/server/README.md index f507b8c18..b41491059 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -165,7 +165,7 @@ For the full list of features, please refer to [server's changelog](https://gith | `-cms, --checkpoint-min-step N` | minimum spacing between context checkpoints in tokens (default: 256, 0 = no minimum)
(env: LLAMA_ARG_CHECKPOINT_MIN_SPACING_NT) | | `-cram, --cache-ram N` | set the maximum cache size in MiB (default: 8192, -1 - no limit, 0 - disable)[(more info)](https://github.com/ggml-org/llama.cpp/pull/16391)
(env: LLAMA_ARG_CACHE_RAM) | | `-kvu, --kv-unified, -no-kvu, --no-kv-unified` | use single unified KV buffer shared across all sequences (default: enabled if number of slots is auto)
(env: LLAMA_ARG_KV_UNIFIED) | -| `--cache-idle-slots, --no-cache-idle-slots` | save and clear idle slots on new task (default: enabled, requires unified KV and cache-ram)
(env: LLAMA_ARG_CACHE_IDLE_SLOTS) | +| `--cache-idle-slots, --no-cache-idle-slots` | save idle slots to the prompt cache on new task, and clear them when using unified KV (default: enabled, requires cache-ram)
(env: LLAMA_ARG_CACHE_IDLE_SLOTS) | | `--context-shift, --no-context-shift` | whether to use context shift on infinite text generation (default: disabled)
(env: LLAMA_ARG_CONTEXT_SHIFT) | | `-r, --reverse-prompt PROMPT` | halt generation at PROMPT, return control in interactive mode | | `-sp, --special` | special tokens output enabled (default: false) | diff --git a/tools/server/server-context.cpp b/tools/server/server-context.cpp index 6fa302e13..a7c4f7b56 100644 --- a/tools/server/server-context.cpp +++ b/tools/server/server-context.cpp @@ -127,7 +127,11 @@ struct server_slot { server_prompt prompt; - void prompt_save(server_prompt_cache & prompt_cache) const { + bool prompt_save(server_prompt_cache & prompt_cache) const { + if (prompt.tokens.size() == 0) { + return false; + } + GGML_ASSERT(prompt.data.size() == 0); const size_t cur_size_tgt = llama_state_seq_get_size_ext(ctx_tgt, id, LLAMA_STATE_SEQ_FLAGS_NONE); @@ -140,13 +144,15 @@ struct server_slot { auto * cur = prompt_cache.alloc(prompt, cur_size_tgt, cur_size_dft); if (cur == nullptr) { - return; + return false; } llama_state_seq_get_data_ext(ctx_tgt, cur->data.main.data(), cur_size_tgt, id, LLAMA_STATE_SEQ_FLAGS_NONE); if (ctx_dft) { llama_state_seq_get_data_ext(ctx_dft, cur->data.drft.data(), cur_size_dft, id, LLAMA_STATE_SEQ_FLAGS_NONE); } + + return true; } bool prompt_load(server_prompt_cache & prompt_cache, const server_tokens & tokens) { @@ -739,17 +745,6 @@ private: llama_batch_free(batch); } - void slot_save_and_clear(server_slot & slot) { - if (slot.prompt.n_tokens() == 0) { - return; - } - SLT_INF(slot, "%s", "saving idle slot to prompt cache\n"); - SLT_DBG(slot, "%s", "__TEST_TAG_CACHE_IDLE_SLOT__\n"); - slot.prompt_save(*prompt_cache); - slot.prompt_clear(false); - prompt_cache->update(); - } - void handle_sleeping_state(bool new_state) { GGML_ASSERT(sleeping != new_state); if (new_state) { @@ -1186,14 +1181,17 @@ private: metrics.init(); if (params_base.cache_idle_slots) { - if (!params_base.kv_unified) { - SRV_WRN("%s", "--cache-idle-slots requires --kv-unified, disabling\n"); - params_base.cache_idle_slots = false; - } else if (params_base.cache_ram_mib == 0) { + if (params_base.cache_ram_mib == 0) { SRV_WRN("%s", "--cache-idle-slots requires --cache-ram, disabling\n"); params_base.cache_idle_slots = false; } else { - SRV_INF("%s", "idle slots will be saved to prompt cache and cleared upon starting a new task\n"); + if (params_base.kv_unified) { + SRV_INF("%s", "idle slots will be saved to prompt cache and cleared upon starting a new task\n"); + } else { + // without a unified KV cache, clearing a slot frees no reusable room, so we only + // publish a RAM-cache copy of idle slots (their KV stays in VRAM) [TAG_IDLE_SLOT_CLEAR] + SRV_INF("%s", "idle slots will be saved to prompt cache upon starting a new task\n"); + } SRV_DBG("%s", "__TEST_TAG_CACHE_IDLE_SLOTS_ENABLED__\n"); } } @@ -1357,8 +1355,6 @@ private: } if (ret) { - const auto & tokens = ret->prompt.tokens; - update_cache = update_cache && prompt_cache; // cache prompts only for completion tasks @@ -1369,10 +1365,7 @@ private: const int64_t t_start = ggml_time_us(); - // don't save the slot's state if its context is empty - if (tokens.size() > 0) { - ret->prompt_save(*prompt_cache); - } + ret->prompt_save(*prompt_cache); if (!ret->prompt_load(*prompt_cache, task.tokens)) { ret->prompt_clear(false); @@ -2120,9 +2113,19 @@ private: } if (params_base.cache_idle_slots) { - for (auto & s : slots) { - if (!s.is_processing()) { - slot_save_and_clear(s); + for (auto & slot : slots) { + if (!slot.is_processing()) { + SLT_INF(slot, "%s", "saving idle slot to prompt cache\n"); + + if (slot.prompt_save(*prompt_cache)) { + SLT_DBG(slot, "%s", "__TEST_TAG_CACHE_IDLE_SLOT__\n"); + prompt_cache->update(); + } + + if (params_base.kv_unified) { + // [TAG_IDLE_SLOT_CLEAR] + slot.prompt_clear(false); + } } } } From 26021699bc31abfa5458326d4e0e4e964d4a48f5 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 9 Jun 2026 11:01:37 +0200 Subject: [PATCH 14/23] ggml : add GGML_OP_COL2IM_1D (#24206) * cpu: add GGML_OP_COL2IM_1D Add the overlap-add (scatter-add) step of a 1D transposed convolution. A ConvTranspose1d factorizes as a GEMM followed by col2im: a weight pre-permuted to [IC, K*OC] is contracted against the [IC, T_in] input with mul_mat to produce a column matrix [K*OC, T_in], and col2im_1d scatters those columns back into the [T_out, OC] signal, with T_out = (T_in - 1)*s0 + K - 2*p0. Keeping the contraction as a plain mul_mat leaves the heavy work on the optimized (and quantizable) matmul kernels, so col2im_1d only does the cheap overlap-add. CPU uses a gather formulation parallelized over output channels, supporting F32, F16 and BF16 with an F32 accumulator. * tests: add backend coverage for GGML_OP_COL2IM_1D Add test_col2im_1d next to the conv_transpose_1d cases, covering F32, F16 and BF16 across eight geometries: the canonical kernel = 2*stride DAC upsampling shape, overlap, no overlap, cropping (p0 = 1 and p0 = stride/2), kernel < stride with zeroed gaps, kernel not a multiple of stride, and a single column unfold. Perf mode gets three real vocoder stage shapes reporting memory bandwidth. max_nmse_err relaxes to 5e-4 for F16 and BF16. * cpu: harden GGML_OP_COL2IM_1D ggml_col2im_1d validates s0, oc, p0 and input contiguity at graph build time, before the oc division, protecting every backend at once. The kernel asserts the contiguity its flat indexing assumes and its doc states the full output length including the crop term. The kernel parallelizes over the time axis: the split stays balanced down to OC = 1, where the previous channel split was single threaded. Values are bit identical on the three real vocoder chains, two out of three improve. * tests: extend the GGML_OP_COL2IM_1D grid The eval grid grows to eleven geometries: OC = 1 (mono output stage), K = 1 with stride > 1 (sparse scatter, every gap position zeroed) and a crop down to T_out = 2 where all the gather bounds act at once. * tests: add col2im_1d equivalence test tests/test-col2im-1d.cpp proves mul_mat + col2im_1d matches the native ggml_conv_transpose_1d on the CPU backend, F32 bit exact, F16 and BF16 through casts of the column matrix. test-backend-ops cannot cover this for a CPU only op since the CPU backend is its own reference there. * rpc: bump protocol patch version for GGML_OP_COL2IM_1D GGML_OP_COUNT goes from 96 to 97 with the new op, which trips the static_assert in ggml-rpc.h. Bump RPC_PROTO_PATCH_VERSION since the op is appended and no existing op code shifts. --- ggml/include/ggml-rpc.h | 4 +- ggml/include/ggml.h | 11 +++ ggml/src/ggml-cpu/ggml-cpu.c | 5 ++ ggml/src/ggml-cpu/ops.cpp | 72 ++++++++++++++++ ggml/src/ggml-cpu/ops.h | 1 + ggml/src/ggml.c | 41 ++++++++- tests/CMakeLists.txt | 1 + tests/test-backend-ops.cpp | 53 ++++++++++++ tests/test-col2im-1d.cpp | 159 +++++++++++++++++++++++++++++++++++ 9 files changed, 343 insertions(+), 4 deletions(-) create mode 100644 tests/test-col2im-1d.cpp diff --git a/ggml/include/ggml-rpc.h b/ggml/include/ggml-rpc.h index 6fcf5a433..5ad121ae5 100644 --- a/ggml/include/ggml-rpc.h +++ b/ggml/include/ggml-rpc.h @@ -8,10 +8,10 @@ extern "C" { #define RPC_PROTO_MAJOR_VERSION 4 #define RPC_PROTO_MINOR_VERSION 0 -#define RPC_PROTO_PATCH_VERSION 0 +#define RPC_PROTO_PATCH_VERSION 1 #ifdef __cplusplus -static_assert(GGML_OP_COUNT == 96, "GGML_OP_COUNT has changed - update RPC_PROTO_PATCH_VERSION"); +static_assert(GGML_OP_COUNT == 97, "GGML_OP_COUNT has changed - update RPC_PROTO_PATCH_VERSION"); #endif #define GGML_RPC_MAX_SERVERS 16 diff --git a/ggml/include/ggml.h b/ggml/include/ggml.h index f67252655..374934aac 100644 --- a/ggml/include/ggml.h +++ b/ggml/include/ggml.h @@ -535,6 +535,7 @@ extern "C" { GGML_OP_IM2COL, GGML_OP_IM2COL_BACK, GGML_OP_IM2COL_3D, + GGML_OP_COL2IM_1D, GGML_OP_CONV_2D, GGML_OP_CONV_3D, GGML_OP_CONV_2D_DW, @@ -2007,6 +2008,16 @@ extern "C" { int d1, // dilation dimension 1 bool is_2D); + // col2im_1d: scatter-add GEMM columns back to 1D signal + // a: [K*OC, T_in] (columns from matmul, K = a->ne[0]/OC) + // result: [T_out, OC] where T_out = (T_in - 1)*s0 + K - 2*p0 + GGML_API struct ggml_tensor * ggml_col2im_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, // columns [K*OC, T_in] + int s0, // stride + int oc, // output channels + int p0); // padding to crop from both sides + GGML_API struct ggml_tensor * ggml_conv_1d( struct ggml_context * ctx, struct ggml_tensor * a, // convolution kernel diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index cd5c61a81..af7827aec 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -1912,6 +1912,10 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm { ggml_compute_forward_im2col_3d(params, tensor); } break; + case GGML_OP_COL2IM_1D: + { + ggml_compute_forward_col2im_1d(params, tensor); + } break; case GGML_OP_CONV_2D: { ggml_compute_forward_conv_2d(params, tensor); @@ -2343,6 +2347,7 @@ static int ggml_get_n_tasks(struct ggml_tensor * node, int n_threads) { case GGML_OP_CONV_2D: case GGML_OP_CONV_3D: case GGML_OP_CONV_2D_DW: + case GGML_OP_COL2IM_1D: case GGML_OP_CONV_TRANSPOSE_1D: case GGML_OP_CONV_TRANSPOSE_2D: { diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index becac9d6e..86842e554 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -6730,6 +6730,78 @@ static inline int64_t ggml_wrap_around(int64_t coord, int64_t size) { return (coord + size) % size; // adding size avoids negative number weirdness } +// ggml_compute_forward_col2im_1d +// +// Scatter-add columns [K*OC, T_in] -> signal [T_out, OC] +// where T_out = (T_in - 1)*s + K - 2*p. Gather approach: each output reads ceil(K/s) inputs. +// Parallelized over the time axis so the split stays balanced whatever OC is. +// Supports F32, F16, BF16 input/output (same type), F32 accumulator. + +template +static void ggml_compute_forward_col2im_1d_impl( + const ggml_compute_params * params, + ggml_tensor * dst) { + + const ggml_tensor * src = dst->src[0]; // [K*OC, T_in] + + GGML_ASSERT(ggml_is_contiguous(src)); + GGML_ASSERT(ggml_is_contiguous(dst)); + + const int32_t s0 = ((const int32_t *)(dst->op_params))[0]; + const int32_t OC = ((const int32_t *)(dst->op_params))[1]; + const int32_t p0 = ((const int32_t *)(dst->op_params))[2]; + + const int64_t K_OC = src->ne[0]; + const int64_t T_in = src->ne[1]; + const int64_t K = K_OC / OC; + const int64_t T_out = dst->ne[0]; + + const elem_t * col_data = (const elem_t *) src->data; + elem_t * dst_data = (elem_t *) dst->data; + + const int ith = params->ith; + const int nth = params->nth; + + // Parallelize over the time axis: the split stays balanced whatever OC is, + // down to OC = 1 for mono audio, and threads read disjoint column bands + const int64_t dr = (T_out + nth - 1) / nth; + const int64_t it0 = dr * ith; + const int64_t it1 = it0 + dr < T_out ? it0 + dr : T_out; + + for (int64_t oc = 0; oc < OC; oc++) { + for (int64_t t_out = it0; t_out < it1; t_out++) { + const int64_t t_abs = t_out + p0; // absolute position in uncropped signal + // Gather: find all (t_in, k) where t_in * s + k == t_abs, 0 <= k < K + int64_t t_in_min = (t_abs - K + 1 + s0 - 1) / s0; // ceil((t_abs-K+1)/s) + if (t_in_min < 0) t_in_min = 0; + int64_t t_in_max = t_abs / s0; + if (t_in_max >= T_in) t_in_max = T_in - 1; + + float sum = 0.0f; + for (int64_t t_in = t_in_min; t_in <= t_in_max; t_in++) { + int64_t k = t_abs - t_in * s0; + if (k >= 0 && k < K) { + // col layout: [K*OC, T_in], element (oc*K+k, t_in) + sum += type_conversion_table::to_f32(col_data[(oc * K + k) + t_in * K_OC]); + } + } + // dst layout: [T_out, OC], element (t_out, oc) + dst_data[t_out + oc * T_out] = type_conversion_table::from_f32(sum); + } + } +} + +void ggml_compute_forward_col2im_1d( + const ggml_compute_params * params, + ggml_tensor * dst) { + switch (dst->src[0]->type) { + case GGML_TYPE_F32: ggml_compute_forward_col2im_1d_impl (params, dst); break; + case GGML_TYPE_F16: ggml_compute_forward_col2im_1d_impl(params, dst); break; + case GGML_TYPE_BF16: ggml_compute_forward_col2im_1d_impl(params, dst); break; + default: GGML_ABORT("col2im_1d: unsupported type %d", dst->src[0]->type); + } +} + // ggml_compute_forward_conv_2d diff --git a/ggml/src/ggml-cpu/ops.h b/ggml/src/ggml-cpu/ops.h index 7398e5618..a8e18c716 100644 --- a/ggml/src/ggml-cpu/ops.h +++ b/ggml/src/ggml-cpu/ops.h @@ -68,6 +68,7 @@ void ggml_compute_forward_conv_transpose_1d(const struct ggml_compute_params * p void ggml_compute_forward_im2col(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_im2col_back_f32(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_im2col_3d(const struct ggml_compute_params * params, struct ggml_tensor * dst); +void ggml_compute_forward_col2im_1d(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_conv_2d(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_conv_3d(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_conv_transpose_2d(const struct ggml_compute_params * params, struct ggml_tensor * dst); diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c index 8815c67d8..18a5ebd2a 100644 --- a/ggml/src/ggml.c +++ b/ggml/src/ggml.c @@ -1031,6 +1031,7 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "IM2COL", "IM2COL_BACK", "IM2COL_3D", + "COL2IM_1D", "CONV_2D", "CONV_3D", "CONV_2D_DW", @@ -1080,7 +1081,7 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "GLU", }; -static_assert(GGML_OP_COUNT == 96, "GGML_OP_COUNT != 96"); +static_assert(GGML_OP_COUNT == 97, "GGML_OP_COUNT != 97"); static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "none", @@ -1141,6 +1142,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "im2col(x)", "im2col_back(x)", "im2col_3d(x)", + "col2im_1d(x)", "conv_2d(x)", "conv_3d(x)", "conv_2d_dw(x)", @@ -1190,7 +1192,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "glu(x)", }; -static_assert(GGML_OP_COUNT == 96, "GGML_OP_COUNT != 96"); +static_assert(GGML_OP_COUNT == 97, "GGML_OP_COUNT != 97"); static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2"); @@ -4541,6 +4543,41 @@ struct ggml_tensor * ggml_conv_1d_dw_ph( return ggml_conv_1d_dw(ctx, a, b, s0, a->ne[0] / 2, d0); } +// ggml_col2im_1d + +struct ggml_tensor * ggml_col2im_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int s0, + int oc, + int p0) { + GGML_ASSERT(ggml_is_matrix(a)); + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(a->type == GGML_TYPE_F32 || a->type == GGML_TYPE_F16 || a->type == GGML_TYPE_BF16); + GGML_ASSERT(s0 > 0); + GGML_ASSERT(oc > 0); + GGML_ASSERT(p0 >= 0); + + const int64_t K_OC = a->ne[0]; + const int64_t T_in = a->ne[1]; + const int64_t K = K_OC / oc; + const int64_t T_out = (T_in - 1) * s0 + K - 2 * p0; + + GGML_ASSERT(K_OC == K * oc); // a->ne[0] must be a whole number of oc blocks + GGML_ASSERT(K > 0 && T_out > 0); + + const int64_t ne[4] = { T_out, oc, 1, 1 }; + struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, 2, ne); + + int32_t params[] = { s0, (int32_t)oc, (int32_t)p0 }; + ggml_set_op_params(result, params, sizeof(params)); + + result->op = GGML_OP_COL2IM_1D; + result->src[0] = a; + + return result; +} + // ggml_conv_transpose_1d static int64_t ggml_calc_conv_transpose_1d_output_size(int64_t ins, int64_t ks, int s, int p, int d) { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 33ae3b303..e284a58d1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -265,6 +265,7 @@ if (NOT GGML_BACKEND_DL) llama_build_and_test(test-quantize-fns.cpp) llama_build_and_test(test-quantize-perf.cpp) llama_build_and_test(test-rope.cpp) + llama_build_and_test(test-col2im-1d.cpp) endif() # libmtmd diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index f561d09b5..c30b4e981 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -5098,6 +5098,39 @@ struct test_conv_transpose_1d : public test_case { } }; +// GGML_OP_COL2IM_1D +struct test_col2im_1d : public test_case { + const ggml_type type; + const int64_t K; // kernel size + const int64_t OC; // output channels + const int64_t T_in; // input length (number of columns) + const int s0; // stride + const int p0; // padding cropped from both sides + + std::string vars() override { + return VARS_TO_STR6(type, K, OC, T_in, s0, p0); + } + + double max_nmse_err() override { + return type == GGML_TYPE_F32 ? 1e-7 : 5e-4; + } + + test_col2im_1d(ggml_type type = GGML_TYPE_F32, + int64_t K = 4, int64_t OC = 3, int64_t T_in = 7, + int s0 = 2, int p0 = 0) + : type(type), K(K), OC(OC), T_in(T_in), s0(s0), p0(p0) {} + + ggml_tensor * build_graph(ggml_context * ctx) override { + ggml_tensor * cols = ggml_new_tensor_2d(ctx, type, K*OC, T_in); + ggml_set_name(cols, "cols"); + + ggml_tensor * out = ggml_col2im_1d(ctx, cols, s0, (int) OC, p0); + ggml_set_name(out, "out"); + + return out; + } +}; + // GGML_OP_CONV_TRANSPOSE_2D struct test_conv_transpose_2d : public test_case { // Dimensions @@ -8013,6 +8046,21 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_conv_transpose_1d({3,2,1,1}, {3,1,2,1}, 1, 0, 1)); test_cases.emplace_back(new test_conv_transpose_1d({2,1,1,1}, {3,1,1,1}, 1, 0, 1)); + for (ggml_type type : {GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_BF16}) { + // ConvTranspose1d expressed as mul_mat + col2im (DAC decoder upsampling) + test_cases.emplace_back(new test_col2im_1d(type, 16, 32, 197, 8, 0)); // kernel = 2*stride + test_cases.emplace_back(new test_col2im_1d(type, 4, 3, 7, 2, 0)); + test_cases.emplace_back(new test_col2im_1d(type, 1, 5, 13, 1, 0)); // stride 1, no overlap + test_cases.emplace_back(new test_col2im_1d(type, 6, 4, 11, 3, 1)); // with cropping + test_cases.emplace_back(new test_col2im_1d(type, 2, 3, 9, 3, 0)); // kernel < stride, gap positions are zeroed + test_cases.emplace_back(new test_col2im_1d(type, 5, 4, 11, 2, 0)); // kernel not a multiple of stride, alternating overlap + test_cases.emplace_back(new test_col2im_1d(type, 8, 4, 13, 4, 2)); // padding = stride/2 (DAC causal cropping) + test_cases.emplace_back(new test_col2im_1d(type, 4, 3, 1, 2, 0)); // single column, pure kernel unfold + test_cases.emplace_back(new test_col2im_1d(type, 16, 1, 197, 8, 0)); // OC = 1, mono output stage + test_cases.emplace_back(new test_col2im_1d(type, 1, 5, 13, 3, 0)); // K = 1 with stride > 1, sparse scatter + test_cases.emplace_back(new test_col2im_1d(type, 8, 2, 3, 2, 5)); // cropping eats most of the signal, T_out = 2 + } + for (ggml_type kernel_type : {GGML_TYPE_F32, GGML_TYPE_F16}) { test_cases.emplace_back(new test_conv_transpose_2d({3, 2, 3, 1}, {2, 2, 1, 3}, 1, kernel_type)); test_cases.emplace_back(new test_conv_transpose_2d({10, 10, 9, 1}, {3, 3, 1, 9}, 2, kernel_type)); @@ -9366,6 +9414,11 @@ static std::vector> make_test_cases_perf() { test_cases.emplace_back(new test_conv_transpose_2d({10, 10, 9, 1}, {3, 3, 1, 9}, 2, kernel_type)); } + // Memory bound overlap-add of the GEMM + col2im_1d transposed conv path, real vocoder stage shapes + test_cases.emplace_back(new test_col2im_1d(GGML_TYPE_F32, 16, 512, 2048, 8, 0)); + test_cases.emplace_back(new test_col2im_1d(GGML_TYPE_F32, 4, 128, 65536, 2, 0)); + test_cases.emplace_back(new test_col2im_1d(GGML_TYPE_F16, 16, 512, 2048, 8, 0)); + test_cases.emplace_back(new test_mean(GGML_TYPE_F32, {256, 256, 3, 1})); diff --git a/tests/test-col2im-1d.cpp b/tests/test-col2im-1d.cpp new file mode 100644 index 000000000..f1d36479b --- /dev/null +++ b/tests/test-col2im-1d.cpp @@ -0,0 +1,159 @@ +// test-col2im-1d.cpp: validate GGML_OP_COL2IM_1D against ggml_conv_transpose_1d. +// +// A ConvTranspose1d factorizes as a GEMM followed by an overlap-add: +// conv_transpose_1d(w, x) equals col2im_1d(mul_mat(w_perm, x_t), s0, OC, p0) +// with w_perm the [IC, K*OC] permutation of the [K, OC, IC] kernel and x_t the +// [IC, T_in] transpose of the [T_in, IC] input. The test derives both alternative +// layouts from one logical weight and one logical input with graph ops only +// (permute + cont + reshape), runs the two paths on the CPU backend, and compares +// them in F32. The F16 and BF16 kernels are exercised by casting the column +// matrix before the scatter. Cropping (p0 > 0) is checked against the shifted +// slice of the uncropped reference, which conv_transpose_1d cannot express. + +#include "ggml.h" +#include "ggml-cpu.h" + +#include +#include +#include +#include +#include + +// One geometry: kernel size, output channels, input length, stride, crop +struct col2im_case { + int64_t K; + int64_t OC; + int64_t T_in; + int s0; + int p0; +}; + +// Mirrors the eval grid of test-backend-ops +static const col2im_case CASES[] = { + { 16, 32, 197, 8, 0 }, // kernel = 2*stride, DAC upsampling shape + { 4, 3, 7, 2, 0 }, + { 1, 5, 13, 1, 0 }, // stride 1, no overlap + { 6, 4, 11, 3, 1 }, // with cropping + { 2, 3, 9, 3, 0 }, // kernel < stride, gap positions are zeroed + { 5, 4, 11, 2, 0 }, // kernel not a multiple of stride, alternating overlap + { 8, 4, 13, 4, 2 }, // padding = stride/2, DAC causal cropping + { 4, 3, 1, 2, 0 }, // single column, pure kernel unfold + { 16, 1, 197, 8, 0 }, // OC = 1, mono output stage + { 1, 5, 13, 3, 0 }, // K = 1 with stride > 1, sparse scatter + { 8, 2, 3, 2, 5 }, // cropping eats most of the signal, T_out = 2 +}; + +// Input channels of the GEMM, shared by every case +static const int64_t IC = 7; + +// Deterministic LCG mapped to [-1, 1] +static uint64_t g_rng = 0x12345678ULL; +static float frand(void) { + g_rng = g_rng * 6364136223846793005ULL + 1442695040888963407ULL; + return (float)((g_rng >> 33) & 0xffffff) / (float)0x800000 - 1.0f; +} + +// Read a F32/F16/BF16 tensor back as a flat F32 vector +static std::vector tensor_to_f32(const struct ggml_tensor * t) { + const int64_t n = ggml_nelements(t); + std::vector out(n); + if (t->type == GGML_TYPE_F32) { + memcpy(out.data(), t->data, n * sizeof(float)); + } else if (t->type == GGML_TYPE_F16) { + for (int64_t i = 0; i < n; i++) { + out[i] = ggml_fp16_to_fp32(((const ggml_fp16_t *) t->data)[i]); + } + } else { + for (int64_t i = 0; i < n; i++) { + out[i] = ggml_bf16_to_fp32(((const ggml_bf16_t *) t->data)[i]); + } + } + return out; +} + +// NMSE of the cropped output against the p0 shifted slice of the full reference +static double nmse_cropped(const float * y, const float * ref, int64_t T_out, int64_t T_ref, int64_t OC, int p0) { + double num = 0.0; + double den = 0.0; + for (int64_t oc = 0; oc < OC; oc++) { + for (int64_t t = 0; t < T_out; t++) { + const double a = y [t + oc * T_out]; + const double b = ref[t + p0 + oc * T_ref]; + num += (a - b) * (a - b); + den += b * b; + } + } + return num / (den + 1e-30); +} + +int main(void) { + int fails = 0; + + for (const col2im_case & c : CASES) { + const int64_t T_ref = (c.T_in - 1) * c.s0 + c.K; + const int64_t T_out = T_ref - 2 * c.p0; + + struct ggml_init_params params = { + /* .mem_size = */ (size_t) 64 << 20, + /* .mem_base = */ NULL, + /* .no_alloc = */ false, + }; + struct ggml_context * ctx = ggml_init(params); + + // One logical weight and one logical input feed both paths + struct ggml_tensor * w = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, c.K, c.OC, IC); + struct ggml_tensor * x = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, c.T_in, IC); + for (int64_t i = 0; i < ggml_nelements(w); i++) { + ((float *) w->data)[i] = frand(); + } + for (int64_t i = 0; i < ggml_nelements(x); i++) { + ((float *) x->data)[i] = frand(); + } + + // Reference path: the native op, uncropped + struct ggml_tensor * y_ref = ggml_conv_transpose_1d(ctx, w, x, c.s0, 0, 1); + + // Decomposed path: [K, OC, IC] -> [IC, K, OC] -> [IC, K*OC], k fastest inside each oc block + struct ggml_tensor * w_perm = ggml_cont(ctx, ggml_permute(ctx, w, 1, 2, 0, 3)); + w_perm = ggml_reshape_2d(ctx, w_perm, IC, c.K * c.OC); + struct ggml_tensor * x_t = ggml_cont(ctx, ggml_transpose(ctx, x)); + struct ggml_tensor * col = ggml_mul_mat(ctx, w_perm, x_t); + struct ggml_tensor * y32 = ggml_col2im_1d(ctx, col, c.s0, (int) c.OC, c.p0); + + // Half precision kernels: the same columns cast before the scatter + struct ggml_tensor * y16 = ggml_col2im_1d(ctx, ggml_cast(ctx, col, GGML_TYPE_F16), c.s0, (int) c.OC, c.p0); + struct ggml_tensor * ybf = ggml_col2im_1d(ctx, ggml_cast(ctx, col, GGML_TYPE_BF16), c.s0, (int) c.OC, c.p0); + + GGML_ASSERT(y_ref->ne[0] == T_ref && y_ref->ne[1] == c.OC); + GGML_ASSERT(y32->ne[0] == T_out && y32->ne[1] == c.OC); + + struct ggml_cgraph * gf = ggml_new_graph(ctx); + ggml_build_forward_expand(gf, y_ref); + ggml_build_forward_expand(gf, y32); + ggml_build_forward_expand(gf, y16); + ggml_build_forward_expand(gf, ybf); + ggml_graph_compute_with_ctx(ctx, gf, 4); + + const std::vector f32 = tensor_to_f32(y32); + const std::vector f16 = tensor_to_f32(y16); + const std::vector fbf = tensor_to_f32(ybf); + const float * ref = (const float *) y_ref->data; + + const double e32 = nmse_cropped(f32.data(), ref, T_out, T_ref, c.OC, c.p0); + const double e16 = nmse_cropped(f16.data(), ref, T_out, T_ref, c.OC, c.p0); + const double ebf = nmse_cropped(fbf.data(), ref, T_out, T_ref, c.OC, c.p0); + + // Same thresholds as test-backend-ops: 1e-7 full precision, 5e-4 half + const bool ok = e32 <= 1e-7 && e16 <= 5e-4 && ebf <= 5e-4; + if (!ok) { + fails++; + } + printf("col2im_1d K=%2d OC=%2d T_in=%3d s0=%d p0=%d: nmse f32=%.2e f16=%.2e bf16=%.2e %s\n", + (int) c.K, (int) c.OC, (int) c.T_in, c.s0, c.p0, e32, e16, ebf, ok ? "OK" : "FAIL"); + + ggml_free(ctx); + } + + printf(fails == 0 ? "all col2im_1d checks passed\n" : "%d col2im_1d checks FAILED\n", fails); + return fails == 0 ? 0 : 1; +} From efbacf8d21ee91daacc77cc285106e965d69564e Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 9 Jun 2026 11:12:58 +0200 Subject: [PATCH 15/23] ui: fix mobile chat form overflow and bust stale bundle cache (#24158) --- tools/ui/scripts/vite-plugin-llama-cpp-build.ts | 8 +++++--- tools/ui/src/routes/+layout.svelte | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/ui/scripts/vite-plugin-llama-cpp-build.ts b/tools/ui/scripts/vite-plugin-llama-cpp-build.ts index 01c714a24..74e3de9ba 100644 --- a/tools/ui/scripts/vite-plugin-llama-cpp-build.ts +++ b/tools/ui/scripts/vite-plugin-llama-cpp-build.ts @@ -46,10 +46,12 @@ export function llamaCppBuildPlugin(): Plugin { content = content.replace(/\r/g, ''); content = GUIDE_FOR_FRONTEND + '\n' + content; - content = content.replace(/\/_app\/immutable\/bundle\.[^"]+\.js/g, './bundle.js'); + + // Keep the Vite hash as a query string so each build busts the browser cache + content = content.replace(/\/_app\/immutable\/bundle\.([^".]+)\.js/g, './bundle.js?$1'); content = content.replace( - /\/_app\/immutable\/assets\/bundle\.[^"]+\.css/g, - './bundle.css' + /\/_app\/immutable\/assets\/bundle\.([^".]+)\.css/g, + './bundle.css?$1' ); content = content.replace(/__sveltekit_[a-z0-9]+/g, '__sveltekit__'); diff --git a/tools/ui/src/routes/+layout.svelte b/tools/ui/src/routes/+layout.svelte index be474109a..aa023840b 100644 --- a/tools/ui/src/routes/+layout.svelte +++ b/tools/ui/src/routes/+layout.svelte @@ -254,7 +254,7 @@ /> -

slzmVFRRTaW>65pk+?!(|f{Ig@@7GP9j; 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