Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
bffaa94
support multi images for vlm test
wgzintel May 12, 2025
cdd8f90
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 13, 2025
9edc628
code format
wgzintel May 13, 2025
e512c31
using ov::genai::images to convert images
wgzintel May 13, 2025
9fccf73
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel May 13, 2025
eed1dd7
fix none Type
wgzintel May 13, 2025
82aa6aa
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 13, 2025
503b74e
fix NoneTyPE in optimim-intel pipeline
wgzintel May 13, 2025
7c48e7e
Merge branch 'guozhong/support_multi_files_for_vlm_test' of https://g…
wgzintel May 13, 2025
fa68faa
Support read images from dir
wgzintel May 14, 2025
98e90e4
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 14, 2025
8e62754
fix cmake_list.txt
wgzintel May 15, 2025
3c8b091
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel May 15, 2025
5585335
Output token size in benchmark_genai.cpp
wgzintel May 15, 2025
2c13704
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 16, 2025
fd8c859
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 18, 2025
771e928
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 20, 2025
e902812
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 21, 2025
f70ab0d
print ov version
wgzintel May 21, 2025
b6240fd
using load_image() in optimum pipeline
wgzintel May 21, 2025
36e3dad
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel May 22, 2025
e004cea
Make it an error if prompt_file and prompt are given at the same time
wgzintel May 22, 2025
537e2d6
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel May 22, 2025
10c9940
revert get prompt from default args
wgzintel May 22, 2025
65f5c02
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel May 22, 2025
9bb9081
Remove redundant code
wgzintel May 22, 2025
e1e5326
get prompt token size from shape[1]
wgzintel May 22, 2025
8a88215
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel May 22, 2025
6688a09
remove if
wgzintel May 23, 2025
16faddc
Update samples/cpp/text_generation/benchmark_genai.cpp
wgzintel May 23, 2025
f48ae43
Update samples/cpp/visual_language_chat/benchmark_vlm.cpp
wgzintel May 23, 2025
9c7fa07
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 24, 2025
0936b50
Update benchmark_genai.py, benchmark_vlm.py and readme
wgzintel May 27, 2025
2dbba1b
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 27, 2025
9d8aa7f
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel May 30, 2025
d9000a9
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 2, 2025
41ce10c
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
peterchen-intel Jun 7, 2025
ac12a98
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 10, 2025
72e999f
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
peterchen-intel Jun 12, 2025
1348dd1
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
peterchen-intel Jun 13, 2025
9980152
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 13, 2025
8ac1fc5
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 13, 2025
f484244
Update samples/cpp/text_generation/read_prompt_from_file.cpp
wgzintel Jun 13, 2025
cb07e0b
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 13, 2025
507f48a
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 16, 2025
624e8fc
default values
wgzintel Jun 17, 2025
013fac4
Merge branch 'guozhong/support_multi_files_for_vlm_test' of https://g…
wgzintel Jun 17, 2025
689d264
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel Jun 17, 2025
5121bfb
Use the regular assignment for scheduler_config
wgzintel Jun 17, 2025
4537a2b
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel Jun 17, 2025
d4da4b6
Update samples/cpp/text_generation/read_prompt_from_file.cpp
wgzintel Jun 18, 2025
1b8ecba
Update tools/llm_bench/task/visual_language_generation.py
wgzintel Jun 18, 2025
9cc975b
Update tools/llm_bench/task/visual_language_generation.py
wgzintel Jun 18, 2025
cf910e0
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 18, 2025
3e3a321
print input image nums for vlm
wgzintel Jun 18, 2025
2c6872f
Remove the corresponding return
wgzintel Jun 18, 2025
1a13411
remove if input_data.get("media", None)
wgzintel Jun 18, 2025
9b692e3
Merge branch 'master' into guozhong/support_multi_files_for_vlm_test
wgzintel Jun 19, 2025
ed896f5
Merge branch 'master' of https://github.com/openvinotoolkit/openvino.…
wgzintel Jun 19, 2025
61a2f22
Merge branch 'guozhong/support_multi_files_for_vlm_test' of https://g…
wgzintel Jun 19, 2025
62e627a
resolve conflict
wgzintel Jun 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion samples/cpp/text_generation/benchmark_genai.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,28 @@

#include "openvino/genai/llm_pipeline.hpp"
#include <cxxopts.hpp>
#include <fstream>
#include <sstream>

std::string read_prompt(const std::string& file_path) {
std::string prompt;
std::ifstream file(file_path);
if (file.is_open()) {
std::stringstream buffer;
buffer << file.rdbuf();
prompt = buffer.str();
file.close();
}
return prompt;
}

int main(int argc, char* argv[]) try {
cxxopts::Options options("benchmark_vanilla_genai", "Help command");

options.add_options()
("m,model", "Path to model and tokenizers base directory", cxxopts::value<std::string>())
("p,prompt", "Prompt", cxxopts::value<std::string>()->default_value("The Sky is blue because"))
("pf,promptfile", "Prompt from file")
("nw,num_warmup", "Number of warmup iterations", cxxopts::value<size_t>()->default_value(std::to_string(1)))
("n,num_iter", "Number of iterations", cxxopts::value<size_t>()->default_value(std::to_string(3)))
("mt,max_new_tokens", "Maximal number of new tokens", cxxopts::value<size_t>()->default_value(std::to_string(20)))
Expand All @@ -36,10 +51,18 @@ int main(int argc, char* argv[]) try {
size_t num_warmup = result["num_warmup"].as<size_t>();
size_t num_iter = result["num_iter"].as<size_t>();

if (result.count("promptfile")) {
prompt = read_prompt(result["promptfile"].as<std::string>());
}

ov::genai::GenerationConfig config;
config.max_new_tokens = result["max_new_tokens"].as<size_t>();

ov::genai::LLMPipeline pipe(models_path, device);
ov::genai::SchedulerConfig scheduler_config;
scheduler_config.enable_prefix_caching = false;
scheduler_config.max_num_batched_tokens = 2147483647;

ov::genai::LLMPipeline pipe(models_path, device, ov::genai::scheduler_config(scheduler_config));

for (size_t i = 0; i < num_warmup; i++)
pipe.generate(prompt, config);
Expand Down
29 changes: 24 additions & 5 deletions samples/cpp/visual_language_chat/benchmark_vlm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,23 @@

#include <cxxopts.hpp>
#include <filesystem>
#include <sstream>
#include <iostream>

#include "load_image.hpp"
#include <openvino/genai/visual_language/pipeline.hpp>

std::vector<ov::Tensor> parse_all_images(const std::string &input) {
std::vector<ov::Tensor> images;
std::stringstream ss(input);
std::string image_path;
while (std::getline(ss, image_path, ';')) {
ov::Tensor image = utils::load_image(image_path);
images.push_back(image);
std::cout << "input image:" << image_path << std::endl;
}
return images;
}

int main(int argc, char* argv[]) try {
cxxopts::Options options("benchmark_vlm", "Help command");
Expand Down Expand Up @@ -41,20 +54,26 @@ int main(int argc, char* argv[]) try {
std::string device = result["device"].as<std::string>();
size_t num_warmup = result["num_warmup"].as<size_t>();
size_t num_iter = result["num_iter"].as<size_t>();
ov::Tensor image = utils::load_image(image_path);
std::vector<ov::Tensor> images;
images = parse_all_images(image_path);

ov::genai::GenerationConfig config;
config.max_new_tokens = result["max_new_tokens"].as<size_t>();
config.ignore_eos = true;

ov::genai::SchedulerConfig scheduler_config;
scheduler_config.enable_prefix_caching = false;
scheduler_config.max_num_batched_tokens = 2147483647;

ov::genai::VLMPipeline pipe(models_path, device);
ov::genai::VLMPipeline pipe(models_path, device, ov::genai::scheduler_config(scheduler_config));

for (size_t i = 0; i < num_warmup; i++)
pipe.generate(prompt, ov::genai::image(image), ov::genai::generation_config(config));
pipe.generate(prompt, ov::genai::image(images), ov::genai::generation_config(config));

auto res = pipe.generate(prompt, ov::genai::image(image), ov::genai::generation_config(config));
auto res = pipe.generate(prompt, ov::genai::image(images), ov::genai::generation_config(config));
auto metrics = res.perf_metrics;
for (size_t i = 0; i < num_iter - 1; i++) {
res = pipe.generate(prompt, ov::genai::image(image), ov::genai::generation_config(config));
res = pipe.generate(prompt, ov::genai::image(images), ov::genai::generation_config(config));
metrics = metrics + res.perf_metrics;
}

Expand Down
14 changes: 9 additions & 5 deletions tools/llm_bench/llm_bench_utils/model_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -321,11 +321,15 @@ def init_timestamp(num_iters, prompt_list, prompt_idx_list):


def resolve_media_file_path(file_path, prompt_file_path):
if not file_path:
return file_path
if not (file_path.startswith("http://") or file_path.startswith("https://")):
return os.path.join(os.path.dirname(prompt_file_path), file_path.replace("./", ""))
return file_path
paths_ori = file_path.split(';')
paths_new = []
for path in paths_ori:
if not path:
continue
if not (path.startswith("http://") or path.startswith("https://")):
paths_new.append(os.path.join(os.path.dirname(prompt_file_path), path.replace("./", "")))
new_file_path = ";".join(paths_new)
return new_file_path


def get_version_in_format_to_pars(version):
Expand Down
9 changes: 7 additions & 2 deletions tools/llm_bench/task/visual_language_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,9 @@ def run_visual_language_generation_genai(
inputs = [inputs] if not isinstance(inputs, (list, tuple)) else inputs
for input_data in inputs:
if "media" in input_data:
images.append(load_image_genai(input_data["media"]))
image_paths = input_data["media"].split(';')
for path in image_paths:
images.append(load_image_genai(path))
prompts.append(input_data["prompt"])
if args["output_dir"] is not None and num == 0:
for bs_index, in_text in enumerate(prompts):
Expand All @@ -221,7 +223,10 @@ def run_visual_language_generation_genai(
if hasattr(gen_config, 'apply_chat_template'):
gen_config.apply_chat_template = False
kwargs = {}
if len(images) >= 1:
if len(images) > 1:
# multi images
kwargs["images"] = images
elif len(images) == 1:
kwargs["images"] = images[0]
start = time.perf_counter()
generation_result = model.generate(prompts[0], generation_config=gen_config, **kwargs)
Expand Down
Loading