欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > llama.cpp 去掉打印,只显示推理结果

llama.cpp 去掉打印,只显示推理结果

2024/10/25 20:56:33 来源:https://blog.csdn.net/WMX843230304WMX/article/details/143136652  浏览:    关键词:llama.cpp 去掉打印,只显示推理结果

llama.cpp 去掉打印,只显示推理结果

1 llama.cpp/common/log.h

#define LOG_INF(...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  0,                 __VA_ARGS__)
#define LOG_WRN(...) LOG_TMPL(GGML_LOG_LEVEL_WARN,  0,                 __VA_ARGS__)
#define LOG_ERR(...) LOG_TMPL(GGML_LOG_LEVEL_ERROR, 0,                 __VA_ARGS__)
#define LOG_DBG(...) LOG_TMPL(GGML_LOG_LEVEL_DEBUG, LOG_DEFAULT_DEBUG, __VA_ARGS__)
#define LOG_CNT(...) LOG_TMPL(GGML_LOG_LEVEL_CONT,  0,                 __VA_ARGS__)#define LOG_INFV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  verbosity, __VA_ARGS__)
#define LOG_WRNV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_WARN,  verbosity, __VA_ARGS__)
#define LOG_ERRV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_ERROR, verbosity, __VA_ARGS__)
#define LOG_DBGV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_DEBUG, verbosity, __VA_ARGS__)
#define LOG_CNTV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_CONT,  verbosity, __VA_ARGS__)

修改为:

#ifndef NDEBUG // 如果没有定义NDEBUG(即处于调试模式)#define LOG_INF(...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  0,                 __VA_ARGS__)
#define LOG_WRN(...) LOG_TMPL(GGML_LOG_LEVEL_WARN,  0,                 __VA_ARGS__)
#define LOG_ERR(...) LOG_TMPL(GGML_LOG_LEVEL_ERROR, 0,                 __VA_ARGS__)
#define LOG_DBG(...) LOG_TMPL(GGML_LOG_LEVEL_DEBUG, LOG_DEFAULT_DEBUG, __VA_ARGS__)
#define LOG_CNT(...) LOG_TMPL(GGML_LOG_LEVEL_CONT,  0,                 __VA_ARGS__)#define LOG_INFV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_INFO,  verbosity, __VA_ARGS__)
#define LOG_WRNV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_WARN,  verbosity, __VA_ARGS__)
#define LOG_ERRV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_ERROR, verbosity, __VA_ARGS__)
#define LOG_DBGV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_DEBUG, verbosity, __VA_ARGS__)
#define LOG_CNTV(verbosity, ...) LOG_TMPL(GGML_LOG_LEVEL_CONT,  verbosity, __VA_ARGS__)#else // 如果定义了NDEBUG(即处于发布模式)
#define LOG_INF(...)
#define LOG_WRN(...)
#define LOG_ERR(...)
#define LOG_DBG(...)
#define LOG_CNT(...)#define LOG_INFV(verbosity, ...) 
#define LOG_WRNV(verbosity, ...) 
#define LOG_ERRV(verbosity, ...) 
#define LOG_DBGV(verbosity, ...) 
#define LOG_CNTV(verbosity, ...) #endif

2 语言模型部分,已经存在参数

语言模型部分 ,命令行参数:
--log-disable
禁止所有打印

3 视觉模型部分,以 llava-cli 为例

1 修改代码
llama.cpp/examples/llava/llava.cpp :
llama.cpp/examples/llava/clip.cpp :

#define LOG_INF(...) do { fprintf(stdout, __VA_ARGS__); } while (0)
#define LOG_WRN(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
#define LOG_ERR(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
#define LOG_DBG(...) do { fprintf(stderr, __VA_ARGS__); } while (0)

改为如下:

#ifndef NDEBUG // 如果没有定义NDEBUG(即处于调试模式)#define LOG_INF(...) do { fprintf(stdout, __VA_ARGS__); } while (0)
#define LOG_WRN(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
#define LOG_ERR(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
#define LOG_DBG(...) do { fprintf(stderr, __VA_ARGS__); } while (0)#else // 如果定义了NDEBUG(即处于发布模式)
#define LOG_INF(...)
#define LOG_WRN(...)
#define LOG_ERR(...)
#define LOG_DBG(...)
#define LOG_CNT(...)#endif

2 examples/llava/llava-cli.cpp :
process_prompt()函数内部:
LOG("%s", tmp);
改为
std::cout<<tmp;

3 examples/llava/CMakeLists.txt
添加宏定义 -DNDEBUG

set(TARGET llama-llava-cli)
add_executable(${TARGET} llava-cli.cpp)
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME llama-llava-cli)
install(TARGETS ${TARGET} RUNTIME)
target_link_libraries(${TARGET} PRIVATE common llava ${CMAKE_THREAD_LIBS_INIT})
target_compile_features(${TARGET} PRIVATE cxx_std_11)
# 为特定目标添加 NDEBUG 定义
target_compile_definitions(${TARGET} PRIVATE -DNDEBUG)

编译之后,推理测试:

1.png
请添加图片描述

model_dir=/huggingface_cache/Bunny-v1_0-4B-gguf/ggml-model-f16.gguf
mmproj_dir=/huggingface_cache/Bunny-v1_0-4B-gguf/mmproj-model-f16.gguf
prompt=" A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: <image>\nWhy is the image funny? ASSISTANT:"image=/media/wmx/soft1/huggingface_cache/1.png/media/llama.cpp/build/bin/llama-llava-cli \
-m $model_dir \
--mmproj $mmproj_dir \
--image ${image} \
-p $prompt

只输出:

在海滩上,一位女士和她的狗正在进行一个友好的互动。狗伸出前爪,
似乎在与女士进行握手,这是人类和动物之间常见的问候方式。
女士坐在沙滩上,面带微笑,似乎在享受和狗狗的时光。背景是晴朗的天空和远处的海洋,

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com