From c1e28b827f09d6b54c5dc53836bfdbf0bc8d4c7c Mon Sep 17 00:00:00 2001 From: lxowalle Date: Wed, 3 Dec 2025 15:39:20 +0800 Subject: [PATCH] * add smolvlm demo --- components/llm/include/maix_vlm_smolvlm.hpp | 309 ++++++++ components/llm/src/maixcam2/LLM_SmolVLM.hpp | 683 ++++++++++++++++++ .../maixcam2/maix_vlm_smolvlm_maixcam2.cpp | 364 ++++++++++ .../lib_maixcam2/libmaixcam_lib.so | Bin 415536 -> 415544 bytes examples/nn_vlm_smolvlm/.gitignore | 9 + examples/nn_vlm_smolvlm/README.md | 3 + examples/nn_vlm_smolvlm/main/CMakeLists.txt | 74 ++ examples/nn_vlm_smolvlm/main/Kconfig | 0 examples/nn_vlm_smolvlm/main/include/main.h | 3 + examples/nn_vlm_smolvlm/main/src/main.cpp | 112 +++ 10 files changed, 1557 insertions(+) create mode 100644 components/llm/include/maix_vlm_smolvlm.hpp create mode 100644 components/llm/src/maixcam2/LLM_SmolVLM.hpp create mode 100644 components/llm/src/maixcam2/maix_vlm_smolvlm_maixcam2.cpp create mode 100644 examples/nn_vlm_smolvlm/.gitignore create mode 100644 examples/nn_vlm_smolvlm/README.md create mode 100644 examples/nn_vlm_smolvlm/main/CMakeLists.txt create mode 100644 examples/nn_vlm_smolvlm/main/Kconfig create mode 100644 examples/nn_vlm_smolvlm/main/include/main.h create mode 100644 examples/nn_vlm_smolvlm/main/src/main.cpp diff --git a/components/llm/include/maix_vlm_smolvlm.hpp b/components/llm/include/maix_vlm_smolvlm.hpp new file mode 100644 index 00000000..5bba3539 --- /dev/null +++ b/components/llm/include/maix_vlm_smolvlm.hpp @@ -0,0 +1,309 @@ +/** + * VLM SmolVLM + * @license: Apache-2.0 + * @author: neucrack@sipeed + * @date: 2025-05-30 + */ +#pragma once + +#include "maix_basic.hpp" +#include "maix_image.hpp" +#include "maix_llm_qwen.hpp" + +namespace maix::nn +{ + /** + * SmolVLM model response + * @maixpy maix.nn.SmolVLMResp + */ + class SmolVLMResp + { + public: + SmolVLMResp() + { + err_code = err::ERR_NONE; + err_msg = ""; + } + + /** + * Model response full message. + * @maixpy maix.nn.SmolVLMResp.msg + */ + std::string msg; + + /** + * Model response new message. + * @maixpy maix.nn.SmolVLMResp.msg_new + */ + std::string msg_new; + + /** + * Model response error code, maix.Err type, should be err.Err.ERR_NONE if no error. + * @maixpy maix.nn.SmolVLMResp.err_code + */ + err::Err err_code; + + /** + * Model response error message. + * @maixpy maix.nn.SmolVLMResp.err_msg + */ + std::string err_msg; + }; + + /** + * SmolVLM model post config + * @maixpy maix.nn.SmolVLMPostConfig + */ + class SmolVLMPostConfig + { + public: + SmolVLMPostConfig() + { + enable_temperature = true; + temperature = 0.9; + + enable_repetition_penalty = false; + repetition_penalty = 1.2; + penalty_window = 20; + + enable_top_p_sampling = false; + top_p = 0.8; + + enable_top_k_sampling = true; + top_k = 10; + } + + /** + * Enable temperature sampling + * @maixpy maix.nn.SmolVLMPostConfig.enable_temperature + */ + bool enable_temperature; + + /** + * Temperature sampling value + * @maixpy maix.nn.SmolVLMPostConfig.temperature + */ + float temperature; + + /** + * Enable repetition penalty + * @maixpy maix.nn.SmolVLMPostConfig.enable_repetition_penalty + */ + bool enable_repetition_penalty; + + /** + * Repetition penalty value + * @maixpy maix.nn.SmolVLMPostConfig.repetition_penalty + */ + float repetition_penalty; + + /** + * Repetition penalty window + * @maixpy maix.nn.SmolVLMPostConfig.penalty_window + */ + int penalty_window; + + /** + * Enable diversity penalty + * @maixpy maix.nn.SmolVLMPostConfig.enable_top_p_sampling + */ + bool enable_top_p_sampling; + + /** + * Diversity penalty value + * @maixpy maix.nn.SmolVLMPostConfig.top_p + */ + float top_p; + + /** + * Enable top k sampling + * @maixpy maix.nn.SmolVLMPostConfig.enable_top_k_sampling + */ + bool enable_top_k_sampling; + + /** + * Top k sampling value + * @maixpy maix.nn.SmolVLMPostConfig.top_k + */ + int top_k; + }; + + /** + * SmolVLM model + * @maixpy maix.nn.SmolVLM + */ + class SmolVLM + { + public: + /** + * SmolVLM constructor + * @param[in] model model file path, model format can be MUD(model universal describe file) file. + * If model_path set, will load model from file, load failed will raise err.Exception. + * If model_path not set, you can load model later by load function. + * @maixpy maix.nn.SmolVLM.__init__ + * @maixcdk maix.nn.SmolVLM.SmolVLM + */ + SmolVLM(const std::string &model); + + ~SmolVLM(); + + /** + * Load model from file + * @param[in] model model file path, model format can be MUD(model universal describe file) file. + * @return error code, if load success, return err::ERR_NONE + * @maixpy maix.nn.SmolVLM.load + */ + err::Err load(const std::string &model); + + /** + * Unload model + * @return error code, if unload success, return err::ERR_NONE + * @maixpy maix.nn.SmolVLM.unload + */ + err::Err unload(); + + /** + * Is model loaded + * @return true if model loaded, else false + * @maixpy maix.nn.SmolVLM.loaded + */ + bool loaded() + { + return _loaded; + } + + /** + * Set system prompt + * @param prompt system prompt + * @maixpy maix.nn.SmolVLM.set_system_prompt + */ + void set_system_prompt(const std::string &prompt); + + /** + * Get system prompt + * @return system prompt + * @maixpy maix.nn.SmolVLM.get_system_prompt + */ + std::string get_system_prompt() + { + return _system_prompt; + } + + /** + * Set log level + * @param level log level, @see maix.log.LogLevel + * @param color true to enable color, false to disable color + * @maixpy maix.nn.SmolVLM.set_log_level + */ + void set_log_level(log::LogLevel level, bool color); + + /** + * Set reply callback. + * @param callback reply callback, when token(words) generated, this function will be called, + * so you can get response message in real time in this callback funtion. + * If set to None(nullptr in C++), you can get response after all response message generated. + * @maixpy maix.nn.SmolVLM.set_reply_callback + */ + void set_reply_callback(std::function callback = nullptr) + { + _callback = callback; + } + + /** + * Get reply callback + * @return reply callback + * @maixpy maix.nn.SmolVLM.get_reply_callback + */ + std::function get_reply_callback() + { + return _callback; + } + + /** + * Image input width + * @return input width. + * @maixpy maix.nn.SmolVLM.input_width + */ + int input_width(); + + /** + * Image input height + * @return input height. + * @maixpy maix.nn.SmolVLM.input_height + */ + int input_height(); + + /** + * Image input format + * @return input format. + * @maixpy maix.nn.SmolVLM.input_format + */ + maix::image::Format input_format(); + + /** + * Set image and will encode image. + * You can set image once and call send multiple times. + * @param img the image you want to use. + * @param fit Image resize fit method, only used when img size not equal to model input. + * @return err.Err return err.Err.ERR_NONE is no error happen. + * @maixpy maix.nn.SmolVLM.set_image + */ + err::Err set_image(maix::image::Image &img, maix::image::Fit fit = maix::image::Fit::FIT_CONTAIN); + + /** + * Clear image, SmolVLM2.5 based on Qwen2.5, so you can clear image and only use LLM function. + * @maixpy maix.nn.SmolVLM.clear_image + */ + void clear_image(); + + /** + * Whether image set by set_image + * @return Return true if image set by set_image function, or return false. + * @maixpy maix.nn.SmolVLM.is_image_set + */ + bool is_image_set(); + + /** + * Send message to model + * @param msg message to send + * @return model response + * @maixpy maix.nn.SmolVLM.send + */ + nn::SmolVLMResp send(const std::string &msg); + + /** + * Cancel running + * @maixpy maix.nn.SmolVLM.cancel + */ + void cancel(); + + /** + * Get model version + * @return model version + * @maixpy maix.nn.SmolVLM.version + */ + std::string version() + { + return _version; + } + + public: + /** + * SmolVLM post config, default will read config from model mud file, you can also set it manually here. + * @maixpy maix.nn.SmolVLM.post_config + */ + nn::SmolVLMPostConfig post_config; + + private: + bool _loaded = false; + std::string _system_prompt; + std::string _model_path; + std::string _version; + std::string _tokenizer_type; + std::function _callback = nullptr; + void *_data; // for implementation + }; + +} + + diff --git a/components/llm/src/maixcam2/LLM_SmolVLM.hpp b/components/llm/src/maixcam2/LLM_SmolVLM.hpp new file mode 100644 index 00000000..1985af4b --- /dev/null +++ b/components/llm/src/maixcam2/LLM_SmolVLM.hpp @@ -0,0 +1,683 @@ +#pragma once +#include +#include +#include +#include +#include "bfloat16.hpp" +#include "Tokenizer/Tokenizer.hpp" +#include "LLMEmbedSelector.hpp" +#include "ax_model_runner/ax_model_runner_ax650.hpp" +#include "ax_cmm_utils.hpp" +#include "cqdm.h" +#include "timer.hpp" + +#include +#include "LLMPostprocess.hpp" +#include "maix_vlm_smolvlm.hpp" +#include + +namespace maix::nn::VLM_SmolVLM +{ + +#define ALIGN_DOWN(x, a) ((x) & ~((a) - 1)) + +typedef void (*LLMRuningCallback)(int *p_token, int n_token, const char *p_str, float token_per_sec, void *reserve); + +struct LLMAttrType +{ + std::string system_prompt; + std::string template_filename_axmodel = "tinyllama-int8/tinyllama_l%d.axmodel"; + int axmodel_num = 22; + + // std::string template_prefill_filename_axmodel = "minicpmv/prefill_axmodel/minicpm_p96_l%d.axmodel"; + // int prefill_axmodel_num = 40; + int prefill_token_num = 96; // auto calc + int prefill_max_token_num = 512; + + std::string filename_post_axmodel = "tinyllama-int8/tinyllama_post.axmodel"; + + std::string filename_vpm_encoder_axmodedl = "minicpmv/vpm_resampler_version0_fp16.axmodel"; + std::string filename_vpm_resampler_axmodedl = "minicpmv/vpm_resampler_version0_fp16.axmodel"; + int vpm_width = 280; + int vpm_height = 280; + bool b_vpm_two_stage = false; + + TokenizerType tokenizer_type = TKT_LLaMa; + std::string url_tokenizer_model = "http://127.0.0.1:12345"; + bool b_bos = true, b_eos = false; + std::string filename_tokens_embed = "tinyllama.model.embed_tokens.weight.bfloat16.bin"; + int tokens_embed_num = 32000; + int tokens_embed_size = 2048; + + int max_token_len = 127; // auto calc + + int kv_cache_num = 1024; // auto calc + int kv_cache_size = 256; // auto calc + + int precompute_len = 1202; + std::vector prefill_max_kv_cache_num_grp; + + int prefill_grpid = -1; + + bool b_use_mmap_load_embed = false; + + int vpm_len; + + // bool b_use_mmap_load_layer = true; + + // bool b_live_print = true; + LLMRuningCallback runing_callback = nullptr; + void *reserve = nullptr; +}; + +class LLM +{ +private: + std::shared_ptr tokenizer; + LLaMaEmbedSelector embed_selector; + + LLMAttrType _attr; + + struct LLMLayer + { + ax_runner_ax650 layer; + std::string filename; + MMap layer_buffer; + std::vector layer_buffer_vec; + }; + + std::vector llama_layers; + ax_runner_ax650 llama_post; + + // + int prefill_grpid = 1; + int decode_grpid = 0; + + ax_runner_ax650 vpm_resampler; + + // std::vector> k_caches, v_caches; + + bool b_stop = false; + + LLMPostprocess postprocess; + static int post_process(LLMPostprocess &postprocess, unsigned short *p, int n, std::vector &history, float *val = 0) + { + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstrict-aliasing" + std::vector logits(n); + for (int i = 0; i < n; i++) + { + unsigned int proc = p[i] << 16; + logits[i] = *reinterpret_cast(&proc); + } + #pragma GCC diagnostic pop + + return postprocess.apply(logits, history); + } + +public: + bool Init(LLMAttrType attr, maix::nn::QwenPostConfig &post_config, const std::string &tokenizer_type, int &vpm_w, int &vpm_h) + { + ALOGI("LLM init start"); + t_cqdm cqdm = create_cqdm(attr.axmodel_num + 4, 32); + this->_attr = attr; + tokenizer = CreateTokenizer(attr.tokenizer_type); + if (!tokenizer->Init(attr.url_tokenizer_model, tokenizer_type)) + { + ALOGE("tokenizer.Init(%s) failed", attr.url_tokenizer_model.c_str()); + return false; + } + std::vector _token_ids; + tokenizer->Reset(attr.system_prompt, _token_ids); + update_cqdm(&cqdm, 0, "count", "tokenizer init ok"); + // test code + // { + // std::vector output; + // tokenizer.Encode("Today is National", output); + // // print output + // for (size_t i = 0; i < output.size(); i++) + // { + // printf("%d ", output[i]); + // } + // printf("\n"); + // } + + if (!embed_selector.Init(attr.filename_tokens_embed, attr.tokens_embed_num, attr.tokens_embed_size, attr.b_use_mmap_load_embed)) + { + ALOGE("embed_selector.Init(%s, %d, %d) failed", attr.filename_tokens_embed.c_str(), attr.tokens_embed_num, attr.tokens_embed_size); + return false; + } + update_cqdm(&cqdm, 1, "count", "embed_selector init ok"); + // test code + // { + // std::vector embed = embed_selector.getByIndex(123); + // printf("embed size: %d\n", embed.size()); + // for (int i = 0; i < embed.size(); i++) + // { + // bfloat16 bf16 = bfloat16(embed[i]); + // float val = bf16; + // printf("%d %0.22f\n", embed[i], val); + // } + // } + + llama_layers.resize(attr.axmodel_num); + // prefill_layers.resize(attr.prefill_axmodel_num); + + char axmodel_path[1024]; + for (int i = 0; i < attr.axmodel_num; i++) + { + sprintf(axmodel_path, attr.template_filename_axmodel.c_str(), i); + llama_layers[i].filename = axmodel_path; + + int ret = llama_layers[i].layer.init(llama_layers[i].filename.c_str(), false); + if (ret != 0) + { + ALOGE("init axmodel(%s) failed", llama_layers[i].filename.c_str()); + return false; + } + int remain_cmm = get_remaining_cmm_size(); + sprintf(axmodel_path, "init %d axmodel ok,remain_cmm(%d MB)", i, remain_cmm); + update_cqdm(&cqdm, i + 2, "count", axmodel_path); + } + + int ret = llama_post.init(attr.filename_post_axmodel.c_str(), false); + if (ret != 0) + { + ALOGE("init post axmodel(%s) failed", attr.filename_post_axmodel.c_str()); + return false; + } + int remain_cmm = get_remaining_cmm_size(); + sprintf(axmodel_path, "init post axmodel ok,remain_cmm(%d MB)", remain_cmm); + update_cqdm(&cqdm, attr.axmodel_num + 2, "count", axmodel_path); + + // int remain_cmm = get_remaining_cmm_size(); + // sprintf(axmodel_path, "init vpm axmodel ok,remain_cmm(%d MB)", remain_cmm); + // update_cqdm(&cqdm, attr.axmodel_num + 2, "count", axmodel_path); + + { + ret = vpm_resampler.init(attr.filename_vpm_resampler_axmodedl.c_str(), false); + if (ret != 0) + { + ALOGE("init vpm axmodel(%s) failed", attr.filename_vpm_resampler_axmodedl.c_str()); + return false; + } + _attr.vpm_height = vpm_resampler.get_input(0).vShape[1]; + _attr.vpm_width = vpm_resampler.get_input(0).vShape[2]; + vpm_w = _attr.vpm_width; + vpm_h = _attr.vpm_height; + ALOGD("vpm_width : %d, vpm_height: %d", _attr.vpm_width, _attr.vpm_height); + } + remain_cmm = get_remaining_cmm_size(); + sprintf(axmodel_path, "init vpm axmodel ok,remain_cmm(%d MB)", remain_cmm); + update_cqdm(&cqdm, attr.axmodel_num + 3, "count", axmodel_path); + + { + _attr.max_token_len = llama_layers[0].layer.get_input("mask").nSize / sizeof(unsigned short) - 1; + ALOGI("max_token_len : %d", _attr.max_token_len); + // auto &input_k_cache = llama_layers[0].layer.get_input("K_cache"); + // auto &output_k_cache_out = llama_layers[0].layer.get_output("K_cache_out"); + _attr.kv_cache_size = llama_layers[0].layer.get_output("K_cache_out").nSize / sizeof(unsigned short); + _attr.kv_cache_num = llama_layers[0].layer.get_input("K_cache").nSize / _attr.kv_cache_size / sizeof(unsigned short); + ALOGI("kv_cache_size : %d, kv_cache_num: %d", _attr.kv_cache_size, _attr.kv_cache_num); + if (_attr.max_token_len > _attr.kv_cache_num) + { + ALOGE("max_token_len(%d) > kv_cache_num(%d)", _attr.max_token_len, _attr.kv_cache_num); + return false; + } + + _attr.prefill_token_num = llama_layers[0].layer.get_input(1, "indices").vShape[1]; + ALOGI("prefill_token_num : %d", _attr.prefill_token_num); + } + + if (!postprocess.load_config(post_config)) + { + ALOGW("load postprocess config failed"); + } + + // prepare input + for (int i = 0; i < _attr.axmodel_num; i++) + { + memset(llama_layers[i].layer.get_input(prefill_grpid, "K_cache").pVirAddr, 0, llama_layers[i].layer.get_input(prefill_grpid, "K_cache").nSize); + memset(llama_layers[i].layer.get_input(prefill_grpid, "V_cache").pVirAddr, 0, llama_layers[i].layer.get_input(prefill_grpid, "V_cache").nSize); + memset(llama_layers[i].layer.get_input(decode_grpid, "K_cache").pVirAddr, 0, llama_layers[i].layer.get_input(decode_grpid, "K_cache").nSize); + memset(llama_layers[i].layer.get_input(decode_grpid, "V_cache").pVirAddr, 0, llama_layers[i].layer.get_input(decode_grpid, "V_cache").nSize); + } + + // Reset(); + ALOGI("LLM init ok"); + return true; + } + + LLMAttrType *getAttr() + { + return &_attr; + } + + LLMPostprocess *getPostprocess() + { + return &postprocess; + } + + void Deinit() + { + for (int i = 0; i < _attr.axmodel_num; i++) + { + llama_layers[i].layer.release(); + } + llama_post.release(); + // vpm_encoder.release(); + vpm_resampler.release(); + embed_selector.Deinit(); + } + + void Stop() + { + b_stop = true; + } + + int SetSystemPrompt(std::string system_prompt, std::vector &_token_ids) + { + tokenizer->Reset(system_prompt, _token_ids); + _attr.system_prompt = system_prompt; + // _attr.prefill_max_token_num = _attr.prefill_max_kv_cache_num_grp[_attr.prefill_max_kv_cache_num_grp.size() - 1]; + return 0; + } + + int Encode(maix::image::Image &img, std::vector &img_embed) + { + // encode image + void *data = vpm_resampler.get_input(0).pVirAddr; + memcpy(data, img.data(), img.data_size()); + + vpm_resampler.inference(); + img_embed.resize(vpm_resampler.get_output(0).nSize / sizeof(float)); + AX_SYS_MinvalidateCache(vpm_resampler.get_output(0).phyAddr, vpm_resampler.get_output(0).pVirAddr, vpm_resampler.get_output(0).nSize); + + float *output_data = (float *)vpm_resampler.get_output(0).pVirAddr; + for (size_t i = 0; i < img_embed.size(); i++) + { + img_embed[i] = bfloat16(output_data[i]).data; + } + return 0; + } + + int Encode(std::vector &out_embed, std::vector &img_embed, std::string prompt = "What is in the image?") + { + // encode text + std::string last_reply; + std::vector tokens_ids; + std::vector tokens_diff; + bool have_image = !img_embed.empty(); + if(!tokenizer->Encode(prompt, last_reply, tokens_ids, tokens_diff, have_image, _attr.vpm_len)) + { + ALOGE("encode failed"); + return -1; + } + + // gen embed + constexpr int IMG_CONTEXT = 49190; // SmolVLM 256M + int offset = 0; + if(have_image) + { + for (size_t i = 0; i < tokens_ids.size(); i++) + { + if (tokens_ids[i] == IMG_CONTEXT) + { + offset = i; + break; + } + } + if (offset == 0) + { + ALOGE("img_context offset == 0, tokenizer error"); + return -1; + } + if(tokens_ids[offset + img_embed.size() / _attr.tokens_embed_size - 1] != IMG_CONTEXT || + tokens_ids[offset + _attr.vpm_len - 1] != IMG_CONTEXT + ) + { + ALOGE("vpm encode error, tokenizer return wrong encoded img tag, offset %ld=%d, %d=%d, should be %d", + offset + img_embed.size() / _attr.tokens_embed_size - 1, + tokens_ids[offset + img_embed.size() / _attr.tokens_embed_size - 1], + offset + _attr.vpm_len - 1, + tokens_ids[offset + _attr.vpm_len - 1], + IMG_CONTEXT); + return -1; + } + } + if (tokens_ids.size() > (size_t)_attr.prefill_token_num) + { + ALOGE("tokens_ids(%ld) > prefill_token_num(%d)", tokens_ids.size(), _attr.prefill_token_num); + return -1; + } + out_embed.resize(tokens_ids.size() * _attr.tokens_embed_size); + for (size_t i = 0; i < tokens_ids.size(); i++) + { + if(tokens_ids[i] == IMG_CONTEXT) + continue; + embed_selector.getByIndex(tokens_ids[i], out_embed.data() + i * _attr.tokens_embed_size); + } + if(have_image) + memcpy(out_embed.data() + offset * _attr.tokens_embed_size, img_embed.data(), img_embed.size() * sizeof(unsigned short)); + // ALOGI("have_image: %d, offset: %d, img_embed.size(): %ld", have_image, offset, img_embed.size()); + return 0; + } + + std::string Run(std::vector test_embed) + { + b_stop = false; + std::string final_out; + + bfloat16 bf16 = -65536.f; + std::vector mask(_attr.kv_cache_num + 1, bf16.data); + std::vector mask_p(_attr.prefill_token_num * _attr.prefill_token_num, bf16.data); + + for (int i = 0; i < _attr.prefill_token_num; i++) + { + for (int j = 0; j < i + 1; j++) + { + mask_p[i * _attr.prefill_token_num + j] = 0; + } + } + + std::vector cached_token; + std::vector token_ids; + // std::vector token_ids = tokenizer->Encode(input_str); + // int len_of_input = token_ids.size(); + int input_embed_num = test_embed.size() / _attr.tokens_embed_size; + // ALOGI("input_embed_num(%d)", input_embed_num); + + mask[_attr.kv_cache_num] = 0; + for (int i = 0; i < input_embed_num; i++) + { + mask[i] = 0; + } + timer t_cost; + timer t_tmp; + timer ttft_timer; + ttft_timer.start(); + float decode_t_all = 0; + int decode_req_times = 0; + + for (int m = 0; m < _attr.axmodel_num; m++) + { + if (b_stop) + { + break; + } + + auto &layer = llama_layers[m]; + auto &layer_llama = llama_layers[m]; + + // if (_attr.b_dynamic_load_axmodel_layer) + // { + // int ret; + // if (_attr.b_use_mmap_load_layer) + // { + // ret = layer.layer.init((char *)layer.layer_buffer.data(), layer.layer_buffer.size()); + // } + // else + // { + // ret = layer.layer.init(layer.layer_buffer_vec.data(), layer.layer_buffer_vec.size()); + // } + // if (ret != 0) + // { + // ALOGE("init axmodel(%s) failed", layer.filename.c_str()); + // } + // } + + auto &input_indices = layer.layer.get_input(prefill_grpid, "indices"); + unsigned int *input_indices_ptr = (unsigned int *)input_indices.pVirAddr; + for (int i = 0; i < input_embed_num; i++) + { + input_indices_ptr[i] = i; + } + + auto &input_mask = layer.layer.get_input(prefill_grpid, "mask"); + memcpy(input_mask.pVirAddr, mask_p.data(), mask_p.size() * sizeof(unsigned short)); + + auto &input_input = layer.layer.get_input(prefill_grpid, "input"); + memcpy(input_input.pVirAddr, test_embed.data(), test_embed.size() * sizeof(unsigned short)); + if (m == 0) + { + test_embed.resize(_attr.prefill_token_num * _attr.tokens_embed_size); + } + + layer.layer.inference(prefill_grpid); + + auto &output_k_cache = layer.layer.get_output(prefill_grpid, "K_cache_out"); + AX_SYS_MinvalidateCache(output_k_cache.phyAddr, output_k_cache.pVirAddr, output_k_cache.nSize); + auto &input_k_cache = layer_llama.layer.get_input(decode_grpid, "K_cache"); + memcpy(input_k_cache.pVirAddr, output_k_cache.pVirAddr, sizeof(unsigned short) * _attr.prefill_token_num * _attr.kv_cache_size); + + auto &output_v_cache = layer.layer.get_output(prefill_grpid, "V_cache_out"); + AX_SYS_MinvalidateCache(output_v_cache.phyAddr, output_v_cache.pVirAddr, output_v_cache.nSize); + auto &input_v_cache = layer_llama.layer.get_input(decode_grpid, "V_cache"); + memcpy(input_v_cache.pVirAddr, output_v_cache.pVirAddr, sizeof(unsigned short) * _attr.prefill_token_num * _attr.kv_cache_size); + + auto &output = layer.layer.get_output(prefill_grpid, "output"); + AX_SYS_MinvalidateCache(output.phyAddr, output.pVirAddr, output.nSize); + memcpy(test_embed.data(), output.pVirAddr, test_embed.size() * sizeof(unsigned short)); + // if (_attr.b_dynamic_load_axmodel_layer) + // { + // layer.layer.deinit(); + // } + // ALOGI("%f %f %f %f %f", bfloat16(embed[0]).fp32(), bfloat16(embed[1]).fp32(), bfloat16(embed[2]).fp32(), bfloat16(embed[3]).fp32(), bfloat16(embed[4]).fp32()); + } + + // ALOGI("prefill time cost: %.2f s", t_cost.cost() / 1000); + + // print token_ids + // printf("%s\n", input_str.c_str()); + // for (size_t i = 0; i < token_ids.size(); i++) + // { + // printf("%d ", token_ids[i]); + // } + // printf("\n"); + + int next_token = -1; + t_cqdm cqdm = create_cqdm(_attr.max_token_len, 32); + std::vector embed(_attr.tokens_embed_size, 0); + + memcpy(embed.data(), + test_embed.data() + (input_embed_num - 1) * _attr.tokens_embed_size, + _attr.tokens_embed_size * sizeof(unsigned short)); + + { + + // post process + auto &input = llama_post.get_input("input"); + memcpy(input.pVirAddr, embed.data(), embed.size() * sizeof(unsigned short)); + llama_post.inference(); + int max_index; + // if (_attr.b_use_topk) + // { + // AX_SYS_MinvalidateCache(llama_post.get_output("indices").phyAddr, llama_post.get_output("indices").pVirAddr, llama_post.get_output("indices").nSize); + // max_index = *(int *)llama_post.get_output("indices").pVirAddr; + // } + // else + { + auto &output_post = llama_post.get_output("output"); + AX_SYS_MinvalidateCache(output_post.phyAddr, output_post.pVirAddr, output_post.nSize); + unsigned short *post_out = (unsigned short *)output_post.pVirAddr; + float max_val = FLT_MIN; + max_index = post_process(postprocess, post_out, _attr.tokens_embed_num, token_ids, &max_val); + } + next_token = max_index; + + token_ids.push_back(max_index); + cached_token.push_back(max_index); + ALOGI("ttft: %.2f ms, first predict token: %d", ttft_timer.cost(), max_index); + } + t_cost.start(); + + bool b_hit_eos = false; + for (int indices = input_embed_num; indices < _attr.max_token_len; indices++) + { + if (b_stop) + { + break; + } + + // ALOGI("out %d %d", indices, next_token); + embed_selector.getByIndex(next_token, embed); + // ALOGI("%f %f %f %f %f", bfloat16(embed[0]).fp32(), bfloat16(embed[1]).fp32(), bfloat16(embed[2]).fp32(), bfloat16(embed[3]).fp32(), bfloat16(embed[4]).fp32()); + + for (int m = 0; m < _attr.axmodel_num; m++) + { + if (b_stop) + { + break; + } + + auto &layer = llama_layers[m]; + + // if (_attr.b_dynamic_load_axmodel_layer) + // { + // int ret; + // if (_attr.b_use_mmap_load_layer) + // { + // ret = layer.layer.init((char *)layer.layer_buffer.data(), layer.layer_buffer.size()); + // } + // else + // { + // ret = layer.layer.init(layer.layer_buffer_vec.data(), layer.layer_buffer_vec.size()); + // } + // if (ret != 0) + // { + // ALOGE("init axmodel(%s) failed", layer.filename.c_str()); + // } + // } + + auto &input_k_cache = layer.layer.get_input(decode_grpid, "K_cache"); + unsigned short *input_k_cache_ptr = (unsigned short *)input_k_cache.pVirAddr; + // memcpy(input_k_cache.pVirAddr, k_caches[m].data(), sizeof(unsigned short) * k_caches[m].size()); + auto &input_v_cache = layer.layer.get_input(decode_grpid, "V_cache"); + unsigned short *input_v_cache_ptr = (unsigned short *)input_v_cache.pVirAddr; + // memcpy(input_v_cache.pVirAddr, v_caches[m].data(), sizeof(unsigned short) * v_caches[m].size()); + + auto &input_indices = layer.layer.get_input(decode_grpid, "indices"); + memcpy(input_indices.pVirAddr, &indices, sizeof(indices)); + + auto &input_mask = layer.layer.get_input(decode_grpid, "mask"); + memcpy(input_mask.pVirAddr, mask.data(), mask.size() * sizeof(unsigned short)); + + auto &input_input = layer.layer.get_input(decode_grpid, "input"); + memcpy(input_input.pVirAddr, embed.data(), embed.size() * sizeof(unsigned short)); + + layer.layer.inference(decode_grpid); + + auto &output_k_cache = layer.layer.get_output(decode_grpid, "K_cache_out"); + AX_SYS_MinvalidateCache(output_k_cache.phyAddr, output_k_cache.pVirAddr, output_k_cache.nSize); + memcpy(input_k_cache_ptr + indices * _attr.kv_cache_size, output_k_cache.pVirAddr, sizeof(unsigned short) * _attr.kv_cache_size); + + auto &output_v_cache = layer.layer.get_output(decode_grpid, "V_cache_out"); + AX_SYS_MinvalidateCache(output_v_cache.phyAddr, output_v_cache.pVirAddr, output_v_cache.nSize); + memcpy(input_v_cache_ptr + indices * _attr.kv_cache_size, output_v_cache.pVirAddr, sizeof(unsigned short) * _attr.kv_cache_size); + + auto &output = layer.layer.get_output(decode_grpid, "output"); + AX_SYS_MinvalidateCache(output.phyAddr, output.pVirAddr, output.nSize); + memcpy(embed.data(), output.pVirAddr, embed.size() * sizeof(unsigned short)); + // if (_attr.b_dynamic_load_axmodel_layer) + // { + // layer.layer.deinit(); + // } + // ALOGI("%f %f %f %f %f", bfloat16(embed[0]).fp32(), bfloat16(embed[1]).fp32(), bfloat16(embed[2]).fp32(), bfloat16(embed[3]).fp32(), bfloat16(embed[4]).fp32()); + } + // ALOGI(""); + mask[indices] = 0; + { + // post process + auto &input = llama_post.get_input("input"); + memcpy(input.pVirAddr, embed.data(), embed.size() * sizeof(unsigned short)); + llama_post.inference(); + int max_index; + // if (_attr.b_use_topk) + // { + // AX_SYS_MinvalidateCache(llama_post.get_output("indices").phyAddr, llama_post.get_output("indices").pVirAddr, llama_post.get_output("indices").nSize); + // max_index = *(int *)llama_post.get_output("indices").pVirAddr; + // } + // else + { + auto &output_post = llama_post.get_output("output"); + AX_SYS_MinvalidateCache(output_post.phyAddr, output_post.pVirAddr, output_post.nSize); + unsigned short *post_out = (unsigned short *)output_post.pVirAddr; + float max_val = FLT_MIN; + max_index = post_process(postprocess, post_out, _attr.tokens_embed_num, token_ids, &max_val); + } + next_token = max_index; + + if (tokenizer->isEnd(max_index)) + { + if (cached_token.size() && _attr.runing_callback) + { + float t_cost_ms = t_cost.cost(); + float token_per_sec = token_ids.size() / (t_cost_ms / 1000); + t_tmp.start(); + auto tmp_out = tokenizer->Decode(cached_token); + decode_t_all += t_tmp.cost(); + ++decode_req_times; + final_out += tmp_out; + _attr.runing_callback(cached_token.data(), cached_token.size(), tmp_out.c_str(), token_per_sec, _attr.reserve); + cached_token.clear(); + } + b_hit_eos = true; + break; + } + token_ids.push_back(max_index); + + if (_attr.runing_callback) + { + cached_token.push_back(max_index); + if (cached_token.size() >= 3) + { + float t_cost_ms = t_cost.cost(); + float token_per_sec = token_ids.size() / (t_cost_ms / 1000); + t_tmp.start(); + auto tmp_out = tokenizer->Decode(cached_token); + decode_t_all += t_tmp.cost(); + ++decode_req_times; + final_out += tmp_out; + _attr.runing_callback(cached_token.data(), cached_token.size(), tmp_out.c_str(), token_per_sec, _attr.reserve); + cached_token.clear(); + } + } + } + + if (_attr.runing_callback == nullptr) + update_cqdm(&cqdm, indices, "token", ""); + if (b_hit_eos) + { + break; + } + } + printf("\n\n"); + fflush(stdout); + float t_cost_ms = t_cost.cost(); + ALOGN("hit eos, avg %.2f token/s", token_ids.size() / (t_cost_ms / 1000)); + + if (!_attr.runing_callback) + { + t_tmp.start(); + final_out = tokenizer->Decode(token_ids); + decode_t_all += t_tmp.cost(); + } + ALOGN("decode cost: total %.0fms, avg %.0fms/req, avg %.0fms/token", decode_t_all, decode_t_all / decode_req_times, decode_t_all / token_ids.size()); + + // 去掉 len_of_input 那部分 + // token_ids.erase(token_ids.begin(), token_ids.begin() + len_of_input); + + + for (int i = 0; i < _attr.axmodel_num; i++) + { + // memset(llama_layers[i].layer.get_input(prefill_grpid, "K_cache").pVirAddr, 0, llama_layers[i].layer.get_input(prefill_grpid, "K_cache").nSize); + // memset(llama_layers[i].layer.get_input(prefill_grpid, "V_cache").pVirAddr, 0, llama_layers[i].layer.get_input(prefill_grpid, "V_cache").nSize); + memset(llama_layers[i].layer.get_input(decode_grpid, "K_cache").pVirAddr, 0, llama_layers[i].layer.get_input(decode_grpid, "K_cache").nSize); + memset(llama_layers[i].layer.get_input(decode_grpid, "V_cache").pVirAddr, 0, llama_layers[i].layer.get_input(decode_grpid, "V_cache").nSize); + } + return final_out; + } +}; + +}; // namespace LLM_Qwen + diff --git a/components/llm/src/maixcam2/maix_vlm_smolvlm_maixcam2.cpp b/components/llm/src/maixcam2/maix_vlm_smolvlm_maixcam2.cpp new file mode 100644 index 00000000..2d2b7e3d --- /dev/null +++ b/components/llm/src/maixcam2/maix_vlm_smolvlm_maixcam2.cpp @@ -0,0 +1,364 @@ +/** + * LLM SmolVLM implementation on MaixCam2 + * @license Apache-2.0 + * @author neucrack@sipeed + * @date 2025-06-03 + */ + + #include "maix_vlm_smolvlm.hpp" + #include "maix_nn.hpp" + #include "LLM_SmolVLM.hpp" + #include "ax_middleware.hpp" + #include "tokenizer_service_util.hpp" + + namespace maix::nn + { + class SmolVLMObj + { + public: + MUD mud; + VLM_SmolVLM::LLM lLaMa; + maix::middleware::maixcam2::SYS *ax_sys; + maix::middleware::maixcam2::ENGINE *ax_engine; + std::vector> k_caches, v_caches; + int precompute_len = 0; + SmolVLMResp resp; + SmolVLM *obj; + int image_w; + int image_h; + maix::image::Format image_fmt; + std::vector img_embed; + }; + + SmolVLM::SmolVLM(const std::string &model) + { + _data = new SmolVLMObj(); + ((SmolVLMObj*)_data)->obj = this; + _model_path = model; + _system_prompt = "You are SmolVLM. You are a helpful vision-to-text assistant."; + set_log_level(log::get_log_level(), log::get_log_use_color()); + if(!model.empty()) + { + err::Err e = load(model); + if(e != err::ERR_NONE) + { + char buf[128]; + snprintf(buf, sizeof(buf), "load model %s failed", model.c_str()); + throw err::Exception(e, buf); + } + } + } + + SmolVLM::~SmolVLM() + { + unload(); + if (_data) + { + delete (SmolVLMObj *)_data; + _data = nullptr; + } + } + + static void _on_msg(int *p_token, int n_token, const char *p_str, float token_per_sec, void *reserve) + { + SmolVLMObj *obj = (SmolVLMObj *)reserve; + obj->resp.msg_new = p_str; + obj->resp.msg += p_str; + obj->resp.err_code = err::ERR_NONE; + obj->resp.err_msg = ""; + auto callback = obj->obj->get_reply_callback(); + if (callback) + { + callback(*obj->obj, obj->resp); + } + // fprintf(stdout, "%s", p_str); + // fflush(stdout); + } + + void SmolVLM::set_log_level(log::LogLevel level, bool color) + { + ax_log_use_color = color; + switch(level) + { + case log::LogLevel::LEVEL_DEBUG: + ax_log_level = SAMPLE_LOG_DEBUG; + break; + case log::LogLevel::LEVEL_WARN: + ax_log_level = SAMPLE_LOG_WARN; + break; + case log::LogLevel::LEVEL_ERROR: + ax_log_level = SAMPLE_LOG_ERROR; + break; + default: + ax_log_level = SAMPLE_LOG_INFO; + break; + } + } + + err::Err SmolVLM::load(const std::string &model) + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + _model_path = model; + err::Err e = obj->mud.load(model); + if(e != err::ERR_NONE) + return e; + std::string model_dir = fs::dirname(model); + // init llm model + VLM_SmolVLM::LLMAttrType attr; + attr.system_prompt = _system_prompt; + attr.tokenizer_type = TKT_HTTP; + bool ai_isp_on = app::get_sys_config_kv("npu", "ai_isp", "0") == "1" ? true : false; + if(ai_isp_on) + { + log::warn("npu_ai_isp_on from config is on, but LLM model only support npu model, please not use camera or turn off ai_isp"); + } + try + { + _version = obj->mud.items["extra"]["model_type"]; + _tokenizer_type = _version; + attr.url_tokenizer_model = obj->mud.items["extra"]["tokenizer_url"]; + attr.filename_tokens_embed = fs::join({model_dir, obj->mud.items["extra"]["tokens_embed"]}); + attr.filename_post_axmodel = fs::join({model_dir, obj->mud.items["extra"]["post_model"]}); + attr.template_filename_axmodel = fs::join({model_dir, obj->mud.items["basic"]["model_npu"]}); + attr.axmodel_num = std::stoi(obj->mud.items["extra"]["model_num"]); + attr.tokens_embed_num = std::stoi(obj->mud.items["extra"]["tokens_embed_num"]); + attr.tokens_embed_size = std::stoi(obj->mud.items["extra"]["tokens_embed_size"]); + attr.b_use_mmap_load_embed = (obj->mud.items["extra"]["use_mmap_load_embed"] == "true" || obj->mud.items["extra"]["use_mmap_load_embed"] == "1") ? true : false; + attr.filename_vpm_resampler_axmodedl = fs::join({model_dir, obj->mud.items["extra"]["vpm_resampler_model"]}); + attr.vpm_len = std::stoi(obj->mud.items["extra"]["vpm_len"]); + } + catch(...) + { + log::error("load model failed, key-value error in mud's extra section"); + return err::ERR_ARGS; + } + try + { + post_config.enable_temperature = obj->mud.items["post_config"]["enable_temperature"] == "true" ? true : false; + post_config.temperature = std::stof(obj->mud.items["post_config"]["temperature"]); + post_config.enable_repetition_penalty = obj->mud.items["post_config"]["enable_repetition_penalty"] == "true" ? true : false; + post_config.repetition_penalty = std::stof(obj->mud.items["post_config"]["repetition_penalty"]); + post_config.penalty_window = std::stoi(obj->mud.items["post_config"]["penalty_window"]); + post_config.enable_top_p_sampling = obj->mud.items["post_config"]["enable_top_p_sampling"] == "true" ? true : false; + post_config.top_p = std::stof(obj->mud.items["post_config"]["top_p"]); + post_config.enable_top_k_sampling = obj->mud.items["post_config"]["enable_top_k_sampling"] == "true" ? true : false; + post_config.top_k = std::stoi(obj->mud.items["post_config"]["top_k"]); + } + catch(...) + { + log::error("load model failed, key-value error in mud's post_config section"); + return err::ERR_ARGS; + } + if(obj->mud.items["extra"].find("tokenizer_type") != obj->mud.items["extra"].end()) + { + _tokenizer_type = obj->mud.items["extra"]["tokenizer_type"]; + } + + attr.runing_callback = nullptr; + attr.reserve = obj; + + // init npu engine + log::info("init middleware SYSTEM"); + obj->ax_sys = new middleware::maixcam2::SYS(); + e = obj->ax_sys->init(); + if(e != err::ERR_NONE) + { + log::error("init middleware SYSTEM failed: %s", err::to_str(e).c_str()); + delete obj->ax_sys; + obj->ax_sys = nullptr; + return e; + } + log::info("init middleware NPU ENGINE"); + obj->ax_engine = new middleware::maixcam2::ENGINE(AX_ENGINE_VIRTUAL_NPU_DISABLE); + e = obj->ax_engine->init(); + if(e != err::ERR_NONE) + { + log::error("init middleware ENGINE failed: %s, maybe there's other program using NPU", err::to_str(e).c_str()); + delete obj->ax_engine; + obj->ax_engine = nullptr; + delete obj->ax_sys; + obj->ax_sys = nullptr; + return e; + } + + // check tokenizer service + // find http://127.0.0.1 in obj->mud.items["extra"]["tokenizer_url"] + e = check_start_tokenizer_service(obj->mud.items["extra"]["tokenizer_url"]); + if(e != err::ERR_NONE) + { + delete obj->ax_engine; + obj->ax_engine = nullptr; + delete obj->ax_sys; + obj->ax_sys = nullptr; + return e; + } + + // init llm model + QwenPostConfig config; + config.enable_temperature = post_config.enable_temperature; + config.temperature = post_config.temperature; + config.enable_repetition_penalty = post_config.enable_repetition_penalty; + config.repetition_penalty = post_config.repetition_penalty; + config.penalty_window = post_config.penalty_window; + config.enable_top_p_sampling = post_config.enable_top_p_sampling; + config.top_p = post_config.top_p; + config.enable_top_k_sampling = post_config.enable_top_k_sampling; + config.top_k = post_config.top_k; + if(!obj->lLaMa.Init(attr, config, _tokenizer_type, obj->image_w, obj->image_h)) + { + log::error("SmolVLM Init failed"); + delete obj->ax_engine; + obj->ax_engine = nullptr; + delete obj->ax_sys; + obj->ax_sys = nullptr; + return err::ERR_RUNTIME; + } + + obj->image_fmt = maix::image::Format::FMT_RGB888; + + // print params + log::info("model info:"); + log::print(log::LogLevel::LEVEL_INFO, "\tmodel type: %s\n", _version.c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\tmodel path: %s\n", obj->mud.items["basic"]["model_npu"].c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\tpost model path: %s\n", obj->mud.items["extra"]["post_model"].c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\ttokens embed path: %s\n", obj->mud.items["extra"]["tokens_embed"].c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\tuse_mmap_load_embed: %s\n", obj->mud.items["extra"]["use_mmap_load_embed"].c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\tmodel num: %d\n", attr.axmodel_num); + log::print(log::LogLevel::LEVEL_INFO, "\ttokens embed num: %d\n", attr.tokens_embed_num); + log::print(log::LogLevel::LEVEL_INFO, "\ttokens embed size: %d\n", attr.tokens_embed_size); + log::print(log::LogLevel::LEVEL_INFO, "\ttokenizer url: %s\n", attr.url_tokenizer_model.c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\tinput image size: %d x %d\n", obj->image_w, obj->image_h); + log::print(log::LogLevel::LEVEL_INFO, "\tinput image format: %s\n", maix::image::format_name(obj->image_fmt).c_str()); + log::print(log::LogLevel::LEVEL_INFO, "\n"); + + _loaded = true; + return err::ERR_NONE; + } + + err::Err SmolVLM::unload() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + obj->lLaMa.Stop(); + obj->lLaMa.Deinit(); + if(obj->ax_engine) + { + delete obj->ax_engine; + obj->ax_engine = nullptr; + } + if(obj->ax_sys) + { + delete obj->ax_sys; + obj->ax_sys = nullptr; + } + _loaded = false; + return err::ERR_NONE; + } + + + void SmolVLM::set_system_prompt(const std::string &prompt) + { + _system_prompt = prompt; + if(_loaded) + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + std::vector _token_ids; + obj->lLaMa.SetSystemPrompt(_system_prompt, _token_ids); + } + } + + int SmolVLM::input_width() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + return obj->image_w; + } + + int SmolVLM::input_height() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + return obj->image_h; + } + + maix::image::Format SmolVLM::input_format() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + return obj->image_fmt; + } + + err::Err SmolVLM::set_image(maix::image::Image &img, maix::image::Fit fit) + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + maix::image::Image *p_img = &img; + bool need_free = false; + if(img.width() != obj->image_w || img.height() != obj->image_h) + { + p_img = img.resize(obj->image_w, obj->image_h, fit); + need_free = true; + } + int ret = obj->lLaMa.Encode(*p_img, obj->img_embed); + if (need_free) + delete p_img; + if(ret != 0) + { + log::error("Encode image failed, ret: %d", ret); + return err::ERR_RUNTIME; + } + return err::ERR_NONE; + } + + void SmolVLM::clear_image() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + obj->img_embed.clear(); + } + + bool SmolVLM::is_image_set() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + return !obj->img_embed.empty(); + } + + nn::SmolVLMResp SmolVLM::send(const std::string &msg) + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + obj->resp.msg = ""; + obj->resp.err_code = err::ERR_NONE; + obj->resp.err_msg = ""; + if(msg.empty()) + { + obj->resp.err_code = err::ERR_ARGS; + obj->resp.err_msg = "msg is empty"; + return obj->resp; + } + // check callback + auto attr = obj->lLaMa.getAttr(); + if(_callback) + { + attr->runing_callback = _on_msg; + } + else + { + attr->runing_callback = nullptr; + } + + // run LLM model + std::vector prompt_data; + int ret = obj->lLaMa.Encode(prompt_data, obj->img_embed, msg); + if(ret != 0) + { + log::error("Encode msg failed, ret: %d", ret); + obj->resp.err_code = err::ERR_RUNTIME; + obj->resp.err_msg = "Encode msg failed"; + return obj->resp; + } + /*obj->resp.msg = */obj->lLaMa.Run(prompt_data); + + return obj->resp; + } + + void SmolVLM::cancel() + { + SmolVLMObj *obj = (SmolVLMObj *)_data; + obj->lLaMa.Stop(); + } + + } // namespace maix::nn diff --git a/components/maixcam_lib/lib_maixcam2/libmaixcam_lib.so b/components/maixcam_lib/lib_maixcam2/libmaixcam_lib.so index 9eecf7307744b181ee49ba75b7f8f2eb9a0a2c4b..01d4e8c6b3384a94e082a070beb0c2137f6cadab 100755 GIT binary patch delta 132656 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

^Sg`^}SC}t?*4;tA@(RCuq4;c&4m) zLR}T&hPDpZpO5kyb(B2ygc_-8&@$xc6BOG4^~l*L)TAlFcT(>WeCw+l!hBeMhxsXi z?$|iOYew=@H(Zl*;BMJa%3`4cY8}OQs`3&2Aa9ncQ8vBdseZJ4Qi}73-K7f)*+GLO zLi1$S4mEyp2DB)WZ#Q*e9D44~{U=({KhesxCZF%%zUtyE8vaT2)_U!`K}(@k2Caow8?+5tW6(Zmt)^rA@6`&U@4<=3^5v=DN~7Hq(84d$QqZgy zX&Gp}(R_zHAg$hI)OC@jceQyh(#p_UqtDB~d(?_MRw38y<~3P1w4dCTr>e1qC7h&;W7E)pR<1xR zL5m)s)uMUO29BU6QybVrdUsVZ@dj$$XayIgwcPL5*8JdcO*o>Ph2P^J%sjuJiMtWy+2+E)+#HRjPbYM(@-@o$`H| zS~AS_0Es5BQAH5Qsv>j-27KSi)A0wmP=Lo zuauK}xxK1@^Zsowb!mZGBvM#S^h4`oWu*`!9up(vVd1?&{ew&sGtSE|96Yp5Ahxbl zhMX0q<|b%`j3{R%X{D&1DRO-|sT1KvvbCJ6au&4iN_k1k9(aVDE$6vp6SOK$M($(w z?Sq%g(tUazKv^wQ<^Fxd*88{;555ss!KOrO$ z!-5~u>yLH&)zy(6!YXH6@Tho#tI*2i(0;u&Q z?5dUAOJ(fSw3G#VI%e>DMqF}BABNA9?N94x4d`}xl_;tlS|DFOP0u$%%VlT~N8R>?0UU$K5wfRnLikBS(t6XS-yaBb9Lz`0NPX}n+W_YZOI!KHZ zw}0h#P+cCGsp(uc3y_CCbo1n)rO4d}sgt(eE(Z>(c~M?eCo!Em8b=I&l>}E;$yW#U z0&z2fjCh91xuA)fUL|?Y@Wjc@dCsZ}lY-x+v?e=r^d@MzoQB%^pna?5+h^3Yg>hSO zx;1PqAz!ZiF$b&%FAIERs0V_J@Jzy^bvTD^hD@~VHRt_LM*PqGN)U>O6zq>e4Zu`t zk}vxzSpa&Vwfq;Kl{8Qz+%7{8vGTNH1|Lmms_WvAJ%^YNN}v()@gYoZfR;=kpgg=fOtMC(Q-(gPu8mCJip#RK(_bYl(JmZOs9Sr(vp9Vkv}2YW zd{!-5+ey@>oA5`X1ZtnWdr&G%AJ)^0hv*gv{xue7vc*Kl;m}$%TI>MLftG;gkm*${ z>Gh7o{+r~^Dm6E%8eX4h4hf>^Y;ucm#zZ+;g>QEe&KvP6X0@-J{%Z^bxy1pA9>-pFR@!3oFqN z$U^5x+g3d@GZ z$nhF3Nu5N^#N|K>@t) zMmckg*fsD>`R*9SbwE8b{UvGZ zwd%^@DbVIRbB0Y>I$(xv*~x`>vwwyi+yk$F{qM5ofSSBM`bl!yd|`6YLrZVK^rFSV z^`W&Cv>voT-)k)cE&Wk*g}`|Xf4OM=o8`{qxV#6RC_9d;F_E=UCs6}g>ZnaRxtu<( z#)ou4!|2U?nWZ1!_aEmeTeL^Ja^wjvhkD~=+m`e4cejcT^?x?1cTNV&-6!ZCy*smd zi@bC~CEKduDX+=5Cv<1-(&?wZ!dr|qsP({wd0Cg9tu?uo;K3!(xMFii)N#VCz$*-i zQmm>imd{>c28eiy%hEP>NJeRxh z9;las1Ffd94%3?-lR>Yl*@KgI(+mgB%gk%l)WNx&BphTla;=)9GB6`ej=aiXD1#Qr z=dbEV!)3JczR`J;THL>p28AEPY1K! z;Ng4`G(tANp_ii2GCB4J?$HLVe@5R$`yaw~y`jQF`q5mK?B+9?!hTXk*b>Td(&uEx zN$QmiFOyqO(jg9ts*r6b)so0o)cWTxxNI~=bfVei^OGzpt^4$B6!a!Da|eksW%`@6 zdNyk9vm}zQuTkSebs7&+^Ru$^OK&(-xPTOdiQ4~_Pxb$<*!rDi6l zK)vkywfX~%ftrDqz$WH_S}t1504;|2MQBwgWXmb8Syk}vqjLBZ?N)-x>GJU@wQxp6 z1s1aJd0Q`E z3{U4XZ2uku|GZRAVCgY`uY@$fD~XsXBO2AH(QEz@QCFsmz*YitjOV!hzg1z%eoz-Z zv=O)Hrm3=Iej{$1j~XHOHR7v!OKPqhYE)y^H9<>iFU&Q%q4Z8wtp&sNp|x%_H(In` zF*M6FxWNET+Y^pvml3Dcq{t*_4BNT`Np!1NFgHzBoo2z31noW{+fUPrdGG`|by{Cm zEA<8G`_nX5n?Le|x2cDP;(1~4Hdk1^zqYAXw!F>NJ_~M@V_NPYox4_EdXt%4@08`e z#ye{KwN9eokT-cot^9U3ST%2yfhurBE(gQ}PH z!`3JXYhv}^LRfvHL^W}R53bbn&blVbcR-s@%VSMU7J2YAIn_kp*FgDVzDefZl`mB~8e^Rm=^?WYHO_mJKhKThA~e zJ<#rVWv5?0Y+-sju49)$o6pD>XVfy)0e8vt-!U2H9O1fCW7MPQcdY*PcHx>9ekOpF z`bgrh5-mm!{EmL;fbuORNmayi+G$5M(=Q{f7Dtn5P$X@d5C zq?dXAM~I&_vx?|NV>W7L$_js8XE5SDHD+oew1qw9tOE2>I_p5#!6C`JLw^x?GOgVy zgE)z@?maarst8*9d$T7Ais!Ekt^fD()O%{$+$MMrJJofs299uu7d`mnAL`mAd(pFA zc>SCA)cu1-lm%PbgP8Nn23f0vEwzLCUVpGfEw@H_M_ZZ(TiZtS5Z2l<+R{7NTE)L1 z#Y4UFNvryMRLy8hwO?x(Y_0Ie>bt_y5>hm@=Jo&jNSzM1xmN`79op+B{-i#cQ0RFi z$Zwe=&A|Tk2DWD!Sf6EJ+U*9Wo7iNcCEL(b?=Z0ZP6G?>F|g@A1MLqQm}+8qf&ctE zOPfI~_J_>~CVEVCng#~iFK+l?KTV1l~m{?`f;IoUSt*!2)x(SGe#H%2lUfFqIa0O=ZE=RW|{hh{B5{x zTxi!fh9UjmVDS|r8_jsJe>G&sU$rb*c3beB4QA9<6ZHJs z{z!r?KcbiYh<@}(^fyi2sPLRXJ6bFs{~+Lk9%z}47mc2<9=mM!te{bnFwz!0B)rBD z;|=lhKyBhoJ>864q$4MpqT7rdXZlx~saKhiTXp1YQ*1FK2b{6M)O*dyF_#m$)D)v% z^4oTKiJ5bysizpaBc;jD&UOx#x!o zEekIST zG3tjS&t;xh-D{-pGO;PwIBzyF>we?B@;(F0>LpU1qw>2mIkfEU5wE!Pnm(Wjh!& zvhqq}0v>9blvX8=jJCZMuRrT3nPr zANh|+TVzm~1Vv$s$IRQTm?gqY<62_mReY_1m8LfbhD3pBgJYEu9&FYr%}keJo@bfp zFqfUIc6tW4j7#fm`E&U zhH+*A0mFjLjI+!P1A2yOsMTQ<)Me&dYhuOUhepXp0g@)7n%dQ5xD&FTg6qxZ(!MsLbD z%?n(hQ_S;va~`WTtJQ4IS23nD*v)y}VOA&347Z!z7$~OJY{dxKN^vU+Oe-qP8KT6@ zKElj4u!syK4|f`^mtl5NK<8=Lc-#2GMsv=;L|ACKLH2?3FTeiz=TgpqKVAPX z?E>Vd>;I+n{-3V@KaKxOJO0=H|Gx7{cztSuZM+)v-ygiba*l1;SRNkly52T(?+rG) zv|evZ7;$lde0g_+ZRSX){%K5(0NOL<`WtLBLer{@r`bG<-hP8^ZfKr)o>wLB>+_0W z<0*PYu!N@D=0-YrEw7INhFAMfEtcJzhp@*h-DVF>{TCxj>c70cJ>B+LP>@STthdb! sNk}lBlqATC^|pB-S>_|nOnH30?b;xI3=Rl+a*fTO;h*L7eB1c{3y@j|*Z=?k delta 131326 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 QCq>R_@fd$D#5&{u0R8DUBme*a diff --git a/examples/nn_vlm_smolvlm/.gitignore b/examples/nn_vlm_smolvlm/.gitignore new file mode 100644 index 00000000..7171eaac --- /dev/null +++ b/examples/nn_vlm_smolvlm/.gitignore @@ -0,0 +1,9 @@ +build +dist +.config.mk +.flash.conf.json +data + +/CMakeLists.txt + +__pycache__ diff --git a/examples/nn_vlm_smolvlm/README.md b/examples/nn_vlm_smolvlm/README.md new file mode 100644 index 00000000..40a0f1ec --- /dev/null +++ b/examples/nn_vlm_smolvlm/README.md @@ -0,0 +1,3 @@ +VLM SmolVLM Project based on MaixCDK +==== + diff --git a/examples/nn_vlm_smolvlm/main/CMakeLists.txt b/examples/nn_vlm_smolvlm/main/CMakeLists.txt new file mode 100644 index 00000000..19f9d520 --- /dev/null +++ b/examples/nn_vlm_smolvlm/main/CMakeLists.txt @@ -0,0 +1,74 @@ +############### Add include ################### +list(APPEND ADD_INCLUDE "include" + ) +list(APPEND ADD_PRIVATE_INCLUDE "") +############################################### + +############ Add source files ################# +# list(APPEND ADD_SRCS "src/main.c" +# "src/test.c" +# ) +append_srcs_dir(ADD_SRCS "src") # append source file in src dir to var ADD_SRCS +# list(REMOVE_ITEM COMPONENT_SRCS "src/test2.c") +# FILE(GLOB_RECURSE EXTRA_SRC "src/*.c") +# FILE(GLOB EXTRA_SRC "src/*.c") +# list(APPEND ADD_SRCS ${EXTRA_SRC}) +# aux_source_directory(src ADD_SRCS) # collect all source file in src dir, will set var ADD_SRCS +# append_srcs_dir(ADD_SRCS "src") # append source file in src dir to var ADD_SRCS +# list(REMOVE_ITEM COMPONENT_SRCS "src/test.c") +# set(ADD_ASM_SRCS "src/asm.S") +# list(APPEND ADD_SRCS ${ADD_ASM_SRCS}) +# SET_PROPERTY(SOURCE ${ADD_ASM_SRCS} PROPERTY LANGUAGE C) # set .S ASM file as C language +# SET_SOURCE_FILES_PROPERTIES(${ADD_ASM_SRCS} PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp -D BBBBB") +############################################### + +###### Add required/dependent components ###### +list(APPEND ADD_REQUIREMENTS basic llm) +############################################### + +###### Add link search path for requirements/libs ###### +# list(APPEND ADD_LINK_SEARCH_PATH "${CONFIG_TOOLCHAIN_PATH}/lib") +# list(APPEND ADD_REQUIREMENTS pthread m) # add system libs, pthread and math lib for example here +# set (OpenCV_DIR opencv/lib/cmake/opencv4) +# find_package(OpenCV REQUIRED) +############################################### + +############ Add static libs ################## +# list(APPEND ADD_STATIC_LIB "lib/libtest.a") +############################################### + +#### Add compile option for this component #### +#### Just for this component, won't affect other +#### modules, including component that depend +#### on this component +# list(APPEND ADD_DEFINITIONS_PRIVATE -DAAAAA=1) + +#### Add compile option for this component +#### and components depend on this component +# list(APPEND ADD_DEFINITIONS -DAAAAA222=1 +# -DAAAAA333=1) +############################################### + +############ Add static libs ################## +#### Update parent's variables like CMAKE_C_LINK_FLAGS +# set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--start-group libmaix/libtest.a -ltest2 -Wl,--end-group" PARENT_SCOPE) +############################################### + +######### Add files need to download ######### +# list(APPEND ADD_FILE_DOWNLOADS "{ +# 'url': 'https://*****/abcde.tar.xz', +# 'urls': [], # backup urls, if url failed, will try urls +# 'sites': [], # download site, user can manually download file and put it into dl_path +# 'sha256sum': '', +# 'filename': 'abcde.tar.xz', +# 'path': 'toolchains/xxxxx', +# 'check_files': [] +# }" +# ) +# +# then extracted file in ${DL_EXTRACTED_PATH}/toolchains/xxxxx, +# you can directly use then, for example use it in add_custom_command +############################################## + +# register component, DYNAMIC or SHARED flags will make component compiled to dynamic(shared) lib +register_component() diff --git a/examples/nn_vlm_smolvlm/main/Kconfig b/examples/nn_vlm_smolvlm/main/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/examples/nn_vlm_smolvlm/main/include/main.h b/examples/nn_vlm_smolvlm/main/include/main.h new file mode 100644 index 00000000..45dcbb04 --- /dev/null +++ b/examples/nn_vlm_smolvlm/main/include/main.h @@ -0,0 +1,3 @@ +#pragma once + + diff --git a/examples/nn_vlm_smolvlm/main/src/main.cpp b/examples/nn_vlm_smolvlm/main/src/main.cpp new file mode 100644 index 00000000..75b587c3 --- /dev/null +++ b/examples/nn_vlm_smolvlm/main/src/main.cpp @@ -0,0 +1,112 @@ + +#include "maix_basic.hpp" +#include "main.h" +#include "maix_vlm_smolvlm.hpp" +#include + +using namespace maix; + +void on_reply(nn::SmolVLM &obj, const nn::SmolVLMResp &resp) +{ + printf("%s", resp.msg_new.c_str()); + fflush(stdout); +} + +int _main(int argc, char* argv[]) +{ + log::info("Program start"); + + if (argc < 2) + { + log::error("Usage: %s [system prompt]", argv[0]); + return -1; + } + std::string model_path = argv[1]; + log::set_log_level(log::LogLevel::LEVEL_INFO, true); + nn::SmolVLM smolvlm(model_path); + const char *system_prompt = "You are SmolVLM, a multimodal model and a helpful vision-to-text assistant."; + if (argc > 2) + { + system_prompt = argv[2]; + } + log::info("System prompt: %s", system_prompt); + smolvlm.set_system_prompt(system_prompt); + smolvlm.set_reply_callback(on_reply); + log::info("Input image path and prompt, you can set image once and ask multiple times."); + log::info("'q' to quit"); + std::string image_path; + while(!app::need_exit()) + { + // 1. input image path + std::string input; + printf("image path: >> "); + fflush(stdout); + std::getline(std::cin, input); + if (input == "exit" || input == "quit" || input == "q") + break; + if(!input.empty()) + { + image::Image *img = image::load(input); + if(!img) + { + log::error("load image %s failed", input.c_str()); + continue; + } + err::Err e = smolvlm.set_image(*img, maix::image::Fit::FIT_CONTAIN); + delete img; + if(e != err::Err::ERR_NONE) + { + log::error("set image failed, error: %s", err::to_str(e).c_str()); + continue; + } + image_path = input; + } + else if(!smolvlm.is_image_set()) + { + log::info("image not set, only text input mode"); + } + else + { + log::info("image remain use last set: %s", image_path.c_str()); + } + + // 2. input prompt + std::string prompt; + printf("prompt: >> "); + fflush(stdout); + std::getline(std::cin, prompt); + if (prompt.empty()) + continue; + if (prompt == "exit" || prompt == "quit" || prompt == "q") + break; + + // send message to InterVL + nn::SmolVLMResp resp = smolvlm.send(prompt); + if (resp.err_code != err::Err::ERR_NONE) + { + if(resp.err_code == err::Err::ERR_BUFF_FULL) + { + log::error("context buffer full, please clear context"); + continue; + } + log::error("Error: %s, %s", err::to_str(resp.err_code).c_str(), resp.err_msg.c_str()); + break; + } + // log::info("%s", resp.msg.c_str()); + } + log::info("Program exit"); + return 0; +} + +int main(int argc, char* argv[]) +{ + // Catch signal and process + sys::register_default_signal_handle(); + + // Use CATCH_EXCEPTION_RUN_RETURN to catch exception, + // if we don't catch exception, when program throw exception, the objects will not be destructed. + // So we catch exception here to let resources be released(call objects' destructor) before exit. + CATCH_EXCEPTION_RUN_RETURN(_main, -1, argc, argv); +} + +