如何用 ggml 转换 Google Magika 模型并识别文件类型
如何用 ggml 转换 Google Magika 模型并识别文件类型【免费下载链接】ggmlTensor library for machine learning项目地址: https://gitcode.com/GitHub_Trending/gg/ggml这篇文章解决一个具体任务把 Google Magika 的文件类型检测模型转成 GGUF 格式然后用 ggml 仓库自带的magika示例程序对任意文件做类型识别。完成后的结果是给出一批文件路径程序对每个文件输出最可能的 5 种文件类型及置信度。前提是你能从源码构建 ggmlCMake 构建并且本地有 Python 环境用于运行模型转换脚本。准备条件构建 ggml 与安装转换脚本依赖构建 ggml。按 README.md 的 Quick start 步骤在 ggml 源码根目录下执行mkdir build cd build cmake .. cmake --build . --config Release -j 8构建完成后magika可执行文件位于build/bin/magika。注意 examples/CMakeLists.txt 中magika子目录只有在未开启GGML_BACKEND_DL默认为 OFF时才会加入构建所以默认配置下就会生成该程序。安装转换脚本的 Python 依赖。convert.py 通过from tensorflow import keras和import gguf加载 H5 模型并写出 GGUF 文件需要安装tensorflow/keras和gguf两个包。仓库根目录的 requirements.txt 中对应的版本是tensorflow2.20.0、keras3.10.0、gguf0.1.0可以直接pip install -r requirements.txt也可以只安装这两个包。获取 Magika 模型并转换为 GGUFexamples/magika/README.md 要求先获取 H5 格式的 Magika 模型文档中固定了版本地址standard_v1https://github.com/google/magika/blob/4460acb5d3f86807c3b53223229dee2afa50c025/assets_generation/models/standard_v1/model.h5把下载到的model.h5放到本地任意路径然后从 ggml 仓库根目录运行转换脚本python examples/magika/convert.py /path/to/model.h5/path/to/model.h5替换为你实际保存的 H5 文件路径不传参数时脚本默认使用当前目录下的model.h5。转换过程会遍历 Keras 模型的所有 layer把带权重的 tensor 逐个写出终端会依次打印每个权重的名称、形状和 dtype例如[dense/kernel:0] ...成功完成时最后会打印Model converted and saved to /path/to/model.h5.gguf输出的 GGUF 文件名是输入文件名加.gguf后缀model_name .gguf例如model.h5对应model.h5.gguf。后续运行程序时使用这个 GGUF 文件。运行 magika 程序识别文件类型程序用法为magika model file1 [file2 ...]即第一个参数是 GGUF 模型文件后面跟一个或多个待识别文件。README 给出的完整示例命令build/bin/magika model.h5.gguf examples/sam/example.jpg examples/magika/convert.py README.md src/ggml.c /bin/gcc write.exe jfk.wav其中model.h5.gguf替换为你实际转换出的模型文件文件列表中examples/sam/example.jpg、README.md、src/ggml.c是仓库内的文件/bin/gcc、write.exe、jfk.wav是文档示例中临时使用的本地文件你可以换成自己的任意文件。文档示例输出各文件对应的类型与百分比会因文件内容不同而不同以下数值仅作为格式示例examples/sam/example.jpg : jpeg (100.00%) pptx (0.00%) smali (0.00%) shell (0.00%) sevenzip (0.00%) examples/magika/convert.py : python (99.99%) javascript (0.00%) txt (0.00%) asm (0.00%) scala (0.00%) README.md : markdown (100.00%) txt (0.00%) yaml (0.00%) ppt (0.00%) shell (0.00%) src/ggml.c : c (99.95%) txt (0.04%) asm (0.01%) yaml (0.00%) html (0.00%) /bin/gcc : elf (99.98%) odex (0.02%) pptx (0.00%) smali (0.00%) shell (0.00%) write.exe : pebin (100.00%) ppt (0.00%) smali (0.00%) shell (0.00%) sevenzip (0.00%) jfk.wav : wav (100.00%) ppt (0.00%) shell (0.00%) sevenzip (0.00%) scala (0.00%)理解输出与判断成功结合 main.cpp 可以看到结果是怎么来的程序内置 113 个候选类型标签magika_labelsn_label 113覆盖 jpeg、python、markdown、elf、pebin、wav 等常见文件类型也包括unknown。对每个文件程序读取头部 512 字节、中部 512 字节和尾部 512 字节共 1536 字节beg_size/mid_size/end_size均为 512block_size为 4096不足部分用 padding token256填充再转成 one-hot 输入送入计算图。模型输出经 softmax 后程序按概率降序打印每个文件的前 5 个标签top_n 5及百分比因此文档示例中每行都是 5 个类型。判断是否成功的依据就是能否得到上面这种文件名 top-5 类型及概率的每文件一行输出。如果运行失败对照 main.cpp 中的报错信息定位报错信息原因usage: ... model file1 [file2 ...]参数不足至少需要模型文件加一个待识别文件magika_model_load() failed模型文件无法按 GGUF 加载或其中缺少程序需要的 tensor如dense/kernel:0等通常是转换出的文件不对或路径写错fopen() failed命令行中某个文件路径打不开可选分支GPU 加速magika/CMakeLists.txt 显示当构建时开启了GGML_CUDA或GGML_METAL会分别为magika目标添加GGML_USE_CUDA/GGML_USE_METAL编译定义用于 GPU offloading。也就是说在cmake ..阶段带上-DGGML_CUDAON或-DGGML_METALON需要对应的工具链重新构建即可使用 GPU 路径不关心性能时跳过此节即可。相关文档examples/magika/README.md本示例的模型获取、转换与运行说明examples/magika/convert.pyH5 转 GGUF 的转换脚本examples/magika/main.cpp模型加载、前向图构建与结果打印的实现【免费下载链接】ggmlTensor library for machine learning项目地址: https://gitcode.com/GitHub_Trending/gg/ggml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考