ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 zipalign 与 ZipOS 制作单一文件 Whisperfile:把 whisper 模型权重打包进可执行文件

使用 zipalign 与 ZipOS 制作单一文件 Whisperfile:把 whisper 模型权重打包进可执行文件 使用 zipalign 与 ZipOS 制作单一文件 Whisperfile把 whisper 模型权重打包进可执行文件【免费下载链接】llamafileDistribute and run LLMs with a single file.项目地址: https://gitcode.com/GitHub_Trending/ll/llamafileWhisperfile 是 llamafile 项目中面向语音转文字speech-to-text的单一文件解决方案可执行文件本身同时是合法的 ZIP 归档借助 Cosmopolitan Libc 的 ZipOS 只读文件系统模型权重与默认参数可以直接嵌入二进制内部最终交付给用户的只是一个开箱即跑的单文件程序。本文以 docs/whisperfile/packaging.md 为主线结合仓库源码讲解如何把 whisper 模型权重和.args默认参数打包进 whisperfile 可执行文件读完即可亲手制作一个免参数、免安装的自包含语音转文字工具。为什么 whisperfile 能“单文件分发”ZipOS 只读文件系统Whisperfile 的核心思想来自 Cosmopolitan Libc 的 ZipOS 机制由 cosmo 工具链链接出的可执行文件在其文件末尾可以追加一个合法的 ZIP 归档因此同一个文件既是可执行程序也是 ZIP 压缩包。运行时Cosmopolitan 会把嵌入的文件暴露在一个合成的/zip/...路径前缀下程序内部可以像读取普通文件一样读取它们。从源码结构看这一点在构建层面被刻意保证在 whisperfile/BUILD.mk 中whisperfile可执行文件链接了o/$(MODE)/llamafile/llamafile.o、o/$(MODE)/llamafile/zip.o、o/$(MODE)/llamafile/check_cpu.o等 llamafile 基础设施对象其中zip.o正是提供 ZIP/ZipOS 支持的部分。因此无论模型权重是 31 MB 的 tiny 还是 3.1 GB 的 large都能以“嵌入”而非“外置”的方式随程序分发。向可执行文件尾部追加 ZIP 条目需要谨慎处理 ZIP 中央目录central directory这正是zipalign工具存在的意义它可以在不破坏可执行文件 ZIP 结构的前提下把文件安全地嵌入进去。前置条件构建 zipalign 与 whisperfile开始打包前需要准备两样东西嵌入工具zipalign和 whisperfile 可执行文件本体。1. 构建 zipalign 工具.cosmocc/4.0.2/bin/make -j8 o//third_party/zipalign构建产物位于o//third_party/zipalign/zipalign。在仓库根 Makefile 中zipalign同时是默认构建目标o/$(MODE)/third_party/zipalign的一部分并且安装阶段会通过make install把它安装到$(PREFIX)/bin/zipalign因此也可以直接作为系统命令使用。2. 获取 whisperfile 可执行文件两种途径任选其一从项目的 releases 页面下载预编译的whisperfile可执行文件从源码构建推荐可自定义.cosmocc/4.0.2/bin/make -j8 o//whisperfile # 用更明确的名称复制一份便于区分不同模型版本 cp o//whisperfile/whisperfile whisper-tiny构建产物o//whisperfile/whisperfile由 whisperfile/BUILD.mk 定义它将 whisperfile 自己的入口源码与whisper.cpp/examples/cli/cli.whisperfile.cpp.o、whisper.cpp/whisper.cpp.a以及 llamafile 对象链接在一起。同一构建目标还会产出whisper-server、stream、mic2txt、mic2raw等工具。第一步下载模型权重以最小的 tiny 量化模型q5_1为例它足够快、对打包演示也最直观curl -LO https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en-q5_1.bin模型越大转写越准确但速度越慢。仓库文档 docs/whisperfile/getting-started.md 给出过参考tiny 约 31 MB、medium 约 1.5 GB、large 约 3.1 GB。medium / large 等大模型同样可以使用本文的打包流程只是嵌入后单文件体积相应增大。第二步用 zipalign 嵌入模型权重o//third_party/zipalign/zipalign -0 whisper-tiny ggml-tiny.en-q5_1.bin这里-0是必须注意的关键参数它禁用 PKZIP DEFLATE 压缩。对于模型权重这类二进制数据压缩几乎没有收益还可能拖慢启动时的解压因此直接以 store不压缩方式嵌入是推荐做法。嵌入完成后可以用标准的unzip命令验证——因为 whisperfile 本身就是合法 ZIPunzip -vl whisper-tiny你应该能在归档列表里看到ggml-tiny.en-q5_1.bin这个条目。Cosmopolitan 会把嵌入文件暴露在/zip/...路径下所以名为ggml-tiny.en-q5_1.bin的文件在程序内部对应路径/zip/ggml-tiny.en-q5_1.bin。立即用仓库自带的示例音频验证whisperfile/jfk.wav是一段约翰·肯尼迪演讲的短音频样本./whisper-tiny -m /zip/ggml-tiny.en-q5_1.bin -f whisper.cpp/samples/jfk.wav现在权重已经“长在”二进制里了可以安全删除磁盘上的原始权重文件rm -f ggml-tiny.en-q5_1.bin第三步用.args文件烘焙默认参数每次运行都要手动传-m /zip/ggml-tiny.en-q5_1.bin显然不够“单文件”。whisperfile 支持.args文件约定把默认参数逐行写入一个名为.args的文本文件每行一个参数无需 shell 引号再把它同样嵌入二进制即可。-m /zip/ggml-tiny.en-q5_1.bin ...末尾的...是一个特殊 token运行时会被用户附加的命令行参数原样替换。也就是说-m /zip/ggml-tiny.en-q5_1.bin成为内置默认值而用户随后传入的任何参数如-f audio.wav都会被追加到末尾生效。嵌入.args文件o//third_party/zipalign/zipalign whisper-tiny .args rm -f .args注意这次没有加-0标志文本类型的.args文件很小使用默认的 DEFLATE 压缩也无妨实际上 zipalign 对嵌入文件的处理方式由参数决定-0仅用于二进制权重场景。完成之后这就是一个完全自包含的 whisperfile./whisper-tiny -f whisper.cpp/samples/jfk.wav用户不再需要知道模型路径、不必关心/zip/前缀只需提供音频文件即可完成转写。源码级原理.args与/zip/.args的加载调用链.args机制并非魔法而是由入口代码显式加载的。在 whisperfile/whisperfile.cpp 中main()的流程清晰可见int main(int argc, char ** argv) { llamafile_check_cpu(); ShowCrashReports(); if (llamafile_has(argv, --version)) { puts(whisperfile v LLAMAFILE_VERSION_STRING); return 0; } // Load default arguments from embedded .args file (for packaged whisperfiles) argc cosmo_args(/zip/.args, argv); return whisper_cli_main(argc, argv); }程序先做 CPU 特性检查与崩溃报告初始化--version在解析其他参数之前被提前处理关键行cosmo_args(/zip/.args, argv)如果二进制内嵌入了.args文件ZIP 条目路径为/zip/.argsCosmopolitan 会读取它、按行拆分成参数与用户运行时传入的参数合并后重建argc/argv...token 在这里被替换为用户附加参数合并后的参数交给whisper_cli_main即 whisper.cpp 的 CLI 主函数编译时通过-DWHISPERFILE重命名以避免冲突。同样的模式也用于 llamafile 本体在 llamafile/main.cpp 中同样调用cosmo_args(/zip/.args, argv)来支持打包后的 llamafile。这说明.args是 llamafile 家族llamafile / whisperfile / diffusionfile / transcribefile共用的“单文件分发”约定理解它即可触类旁通。进阶打包后还能做什么完成打包后whisper-tiny就是一个普通可执行文件可以继续享受 whisperfile 的其他能力GPU 加速运行时可传--gpu auto自动探测 Apple Metal / NVIDIA CUDA / AMD ROCm未发现 GPU 时静默回退 CPU详见 docs/whisperfile/gpu.mdHTTP 服务仓库还提供whisper-server同样由 whisperfile/BUILD.mk 构建暴露/health、/inference、/load等 REST 接口接口细节见 docs/whisperfile/server.md。server 与 CLI 的打包思路完全一致同样可以嵌入模型与.args系统安装如果希望把打包好的程序安装为系统命令仓库根 Makefile 提供了make install会安装whisperfile、whisper-server、zipalign及对应 man pagewhisperfile/whisperfile.1、whisperfile/whisper-server.1。完整流程速览把整个打包过程浓缩为一份可直接照做的清单# 1. 构建工具与程序 .cosmocc/4.0.2/bin/make -j8 o//third_party/zipalign .cosmocc/4.0.2/bin/make -j8 o//whisperfile cp o//whisperfile/whisperfile whisper-tiny # 2. 下载模型 curl -LO https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en-q5_1.bin # 3. 嵌入权重-0 关闭压缩适用于二进制 o//third_party/zipalign/zipalign -0 whisper-tiny ggml-tiny.en-q5_1.bin unzip -vl whisper-tiny # 验证 ZIP 条目 rm -f ggml-tiny.en-q5_1.bin # 4. 编写并嵌入默认参数.args 每行一个参数末尾 ... 表示用户附加参数 printf -- -m\n/zip/ggml-tiny.en-q5_1.bin\n...\n .args o//third_party/zipalign/zipalign whisper-tiny .args rm -f .args # 5. 分发与使用 ./whisper-tiny -f whisper.cpp/samples/jfk.wav至此你得到了一个包含程序、模型权重与默认参数的单一可执行文件它可以在 Linux、macOS、Windows 上直接运行无需安装任何依赖也不需要用户记住任何模型参数——这正是 Whisperfile 作为“单一文件语音转文字解决方案”的核心价值所在。【免费下载链接】llamafileDistribute and run LLMs with a single file.项目地址: https://gitcode.com/GitHub_Trending/ll/llamafile创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表