ARTICLE DETAIL

资讯详情

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

FastVLM 端侧推理 iOS/macOS 演示应用指南:模型下载、灵活提示与 TTFT 实时可视化

FastVLM 端侧推理 iOS/macOS 演示应用指南:模型下载、灵活提示与 TTFT 实时可视化 人工智能大模型多模态计算机视觉NLP预训练模型优化本地部署【免费下载链接】ml-fastvlmThis repository contains the official implementation of FastVLM: Efficient Vision Encoding for Vision Language Models - CVPR 2025项目地址https://gitcode.com/gh_mirrors/ml/ml-fastvlm点击查看免费下载FastVLM 官方仓库内置了一个完整的 iOS / macOS 演示应用位于app/目录用于在 iPhone、iPad 与 Mac 上以纯端侧方式演示视觉问答Visual Question Answering能力。本文以 app/README.md 为骨架结合仓库源码与配置完整讲解如何下载三种预训练模型、通过 Xcode 构建运行、使用内置提示与自定义提示进行交互并深入解读连续摄像头推理、TTFTTime-To-First-Token计时与端侧隐私架构的实现细节。读完本文你将能独立把 FastVLM 跑在自己的 Apple 设备上并理解整个端侧推理链路的关键源码。应用概览与平台要求该演示应用的核心目标是在设备端实时展示 FastVLM 模型的视觉问答性能。它支持将摄像头画面或单帧图像直接送入模型模型在本地完成推理并即时返回文本描述。按 app/README.md 的说明应用具备以下关键特性支持平台iOS 18.2 与 macOS 15.2TTFT 可视化每次推理都会展示 Time-To-First-Token首 Token 延迟指标让用户直观感知看到画面到模型吐出第一个词的端到端速度端侧隐私所有预测均由设备端模型本地处理图像与文本都不会离开设备全程私有安全。运行效果数数、手写识别等场景可在仓库 docs 目录 中查看这些 GIF 正是应用真实运行画面的记录从源码结构看应用由三部分协作构成app/Video/负责摄像头采集与帧分发app/FastVLM/承载 MLX 模型注册与推理内核app/FastVLM App/是 SwiftUI 界面层。三者通过ContentView.swift串联形成摄像头 → 图像预处理 → 端侧推理 → 文本输出的完整链路。三种预训练模型选型与量化说明app/README.md 提供 3 个预训练尺寸的 FastVLM 模型均面向 Apple 设备MLX 格式发布模型定位权重精度由下载脚本标注FastVLM 0.5B小巧快速适合对速度敏感的移动设备FP16FastVLM 1.5B均衡之选适合对速度与精度都有要求的大屏设备INT8FastVLM 7B快速且准确适合精度优先于速度的场景INT4从 get_pretrained_mlx_model.sh 的模型映射逻辑第 57-65 行可以看到三种模型对应的完整名称这也印证了精度信息0.5b) modelllava-fastvithd_0.5b_stage3_llm.fp16 ;; 1.5b) modelllava-fastvithd_1.5b_stage3_llm.int8 ;; 7b) modelllava-fastvithd_7b_stage3_llm.int4 ;;可见 0.5B 以 FP16 全精度提供、1.5B 为 INT8、7B 为 INT4——模型越大量化越深这正是为了在保持精度的同时把大模型压进端侧内存。模型的命名沿用了 LLaVA 训练流水线的 stage3 结构下载脚本将其解压后放入app/FastVLM/model目录Xcode 构建时即可直接加载无需额外步骤。下载模型脚本用法与内部机制app/README.md 给出了三步下载流程这里结合脚本源码逐条展开。1. 赋予脚本可执行权限chmod x app/get_pretrained_mlx_model.sh2. 下载指定模型app/get_pretrained_mlx_model.sh --model 0.5b --dest app/FastVLM/model脚本支持两个必填参数与一个帮助参数参数说明见脚本内的show_help第 9-32 行参数取值说明--model0.5b/1.5b/7b指定要下载的模型尺寸非法值会报错并打印帮助--dest任意目录路径模型解压后的存放目录目录不存在时自动创建--help—打印完整用法说明并正常退出脚本的执行流程download_model第 71-119 行大致如下目标目录检查若--dest目录已存在且非空脚本会交互式询问Do you want to clear it and continue? [y/N]确认后才会清空旧内容再继续。这与 app/README.md 中下载或拷贝新模型前请先清空app/FastVLM/model目录的提醒是同一套机制临时下载脚本在mktemp -d创建的临时目录中通过wget从https://ml-site.cdn-apple.com/datasets/fastvlm/拉取对应 zip 包解压与搬运unzip解压后用cp -r将模型文件复制到--dest结果校验最后检查目标目录存在且非空否则报Model extraction failed并退出脚本同时以trap cleanup EXIT INT TERM保证临时文件被清理第 67-69、122 行。注意仓库是只读的下载脚本会把模型写入本机磁盘若需更换模型尺寸只需重新执行脚本并选择新的--model再在 Xcode 中重新构建即可。3. 在 Xcode 中构建并运行用 Xcode 打开 app/FastVLM.xcodeproj工程文件位于app/下选择目标设备iOS 模拟器/真机或 Mac执行Build and Run。模型已就位于app/FastVLM/model应用启动后会自动加载。灵活提示Flexible Promptingapp/README.md 特别强调应用内置了一套灵活提示能力帮助用户快速上手点击右上角的Prompts按钮可浏览内置提示列表选中某个提示会立即更新当前输入选择Prompts菜单中的Customize…可新建或编辑自定义提示。结合 ContentView.swift 源码第 255-273 行内置提示在代码中体现为三组主提示 后缀组合每个都针对一种典型场景内置提示主提示prompt后缀promptSuffix适用场景Describe imageDescribe the image in English.Output should be brief, about 15 words or less.通用图像描述Facial expressionWhat is this persons facial expression?Output only one or two words.表情识别限简短输出Read textWhat is written in this image?Output only the text in the image.文字识别OCR 类其中后缀promptSuffix是一种实用的工程技巧通过限定输出长度15 words or less或输出形式only one or two words在生成参数之外进一步约束模型输出既缩短了 TTFT 与生成耗时也提升了连续摄像头模式下的交互流畅度。在 iOS 上点击Customize…会进入 Prompt / Prompt Suffix 两个文本编辑区promptForm第 302-345 行自定义内容即改即生效。两种推理模式单帧与连续应用通过 CameraType.swift 定义两种摄像头模式并在界面顶部以分段选择器切换ContentView 第 61-72 行continuous连续对摄像头每一帧持续执行推理输出随画面滚动更新single单帧仅对当前取景帧执行一次推理。帧分发逻辑集中在ContentView.distributeVideoFrames()第 379-428 行摄像头通过AsyncStreamCMSampleBuffer缓冲策略为bufferingNewest(1)即只保留最新帧把帧同时送入显示流与分析流仅在 continuous 模式下帧才会被送入analyzeVideoFrames逐帧生成推理任务并在每帧推理之间用FRAME_DELAY1 毫秒节流第 16、362-377 行。切换到 single 模式时processSingleFrame只处理用户触发的那一帧第 432-448 行切换模式还会主动取消在途请求第 69-72 行。摄像头底层由 CameraController.swift 基于AVCaptureSession实现支持前后摄切换与设备列表管理预设vga640x480因此在界面上以 4:3 比例显示并通过checkPermission处理相机权限。TTFT 指标的源码级实现TTFT 是应用展示的核心性能指标。FastVLMModel.swift 中模型封装FastVLMModel负责整个推理生命周期TTFT 的测量方式如下在modelContainer.perform回调中以let llmStart Date()记录起点第 114 行调用context.processor.prepare(input: userInput)完成图像预处理与提示词组装这段耗时也计入 llmStart 之后在MLXLMCommon.generate的逐 token 回调中第一次收到 token 时!seenFirstToken计算Date().timeIntervalSince(llmStart)换算为毫秒写入promptTime第 128-139 行并立刻在画面顶部以TTFT xxx ms徽标展示ContentView 第 87-101 行每次生成的输出由displayEveryNTokens 4控制刷新频率——源码注释指出若每个 token 都更新界面吞吐量会下降约 15%因此每 4 个 token 才解码刷新一次文本第 34-37、143-148 行。与 TTFT 配套的生成参数同样体现在源码中第 31-32 行GenerateParameters(temperature: 0.0)贪心解码输出确定性高与maxTokens 240单次回答上限。每次推理前还会以当前时间为种子调用MLXRandom.seed保证每次生成都获得新的随机状态第 102 行。加载模型时还会把 GPU 缓存上限设为 20 MBMLX.GPU.set(cacheLimit: 20 * 1024 * 1024)第 58 行这是端侧显存预算管理的典型做法。界面通过evaluationStateIdle / Processing Prompt / Generating Response实时呈现模型状态预处理阶段显示黄色 转圈、生成阶段变绿、空闲为灰色ContentView 第 41-54 行。端侧架构与隐私保障从 FastVLM.swift 可以看到Swift 端实现的 FastVLM 本质是Qwen2 语言模型 FastViTHD 视觉塔 多模态投影器的组合源码注释FastVLM is Qwen2VL with a custom vision tower视觉编码走 CoreMLVisionModelCoreML第 260-310 行包装由 Core ML 编译的fastvithd模型图像以[1, 3, H, W]的 float32MLMultiArray送入输出固定形状[1, 256, 3072]的图像特征即每图 256 个视觉 Token语言模型走 MLXQwen2 解码器、注意力含多模态分段 RoPE、MLP 均由 MLX 实现多模态投影器FastVLMMultiModalProjector第 428-452 行按 LLaVA 风格以Linear → GELU → Linear结构把视觉特征投影到语言模型隐藏维度模型注册FastVLM.register(modelFactory:)第 467-479 行向VLMModelFactory注册llava_qwen2模型类型与LlavaProcessor处理器应用启动即调用FastVLMModel 第 51 行。图像预处理流水线在FastVLMProcessor.preprocess第 341-361 行中实现与 LLaVA 的image_processing_clip.py对齐先按用户设置缩放可选→ 按最短边fitIn缩放 → 双三次重采样 → 中心裁剪到crop_size→ 按image_mean/image_std归一化最终转为 MLX 数组。提示词组装则复刻 LLaVA 的聊天模板用|im_start|/|im_end|包裹消息第 363-398 行并按(高/64) × (宽/64)计算image占位 token 数。隐私保障除模型本地推理外还体现在工程配置上应用沙盒开启com.apple.security.app-sandbox、仅授予相机与用户选中文件读取权限并申请了内核内存上限提升com.apple.developer.kernel.increased-memory-limit见 FastVLM.entitlements。整套链路没有任何网络推理调用。自定义模型量化与微调后的导入除内置的 3 个预训练模型外app/README.md 指出用户可以自行量化或微调 FastVLM使其更贴合自身需求相关说明指向 model_export/README.md仓库中即包含export_vision_encoder.py与 fastvlm_mlx-vlm.patch 等导出工具。导出到 Apple Silicon 可运行格式的核心流程如下# 1. 安装打了 FastVLM 补丁的 mlx-vlm并导出 LLM python -m mlx_vlm.convert --hf-path /path/to/fastvlm-checkpoint \ --mlx-path /path/to/exported-fastvlm \ --only-llm # 2. 需要量化时用 --q-bits 指定每权重比特数4 或 8 python -m mlx_vlm.convert --hf-path /path/to/fastvlm-checkpoint \ --mlx-path /path/to/exported-fastvlm \ --only-llm -q --q-bits 8 # 3. 导出后的模型可先在 Python 环境验证推理 python -m mlx_vlm.generate --model /path/to/exported-fastvlm \ --image /path/to/image.png \ --prompt Describe the image. \ --max-tokens 256 \ --temp 0.0自定义模型导出完成后同样放入app/FastVLM/model目录即可被 App 加载。请注意两点前置条件务必先清空app/FastVLM/model中的旧模型再拷贝新模型下载脚本同样会做非空目录确认导出文档还提示了一个常见坑LLaVA 的config.json有时会把tie_word_embeddings设错导致转换时报ValueError: Received parameters not in model: language_model.lm_head.weight.此时需将该字段按实际情况修正后重试。常见问题与实用建议换模型太慢直接重跑app/get_pretrained_mlx_model.sh --model size --dest app/FastVLM/model脚本会先询问是否清空旧目录确认后自动下载解压然后回到 Xcode 重新 Build 即可无需改动任何工程配置输出过长影响连续模式流畅度建议沿用内置提示的后缀约束技巧把回答限制在 1-2 个词或 15 词以内可显著降低单帧推理时长想看更多源码细节推理内核见 app/FastVLM/FastVLM.swift生成与 TTFT 逻辑见 app/FastVLM App/FastVLMModel.swift摄像头与帧分发见 app/Video/模型训练与导出背景可参考仓库根目录 README.md。总之FastVLM 演示应用把高效视觉编码 端侧 MLX 推理 设备摄像头串成了一条开箱即用的端侧 VLM 实践链路本文覆盖了从模型下载、构建运行、提示交互到 TTFT 源码剖析的完整路径读者可在此基础上进一步尝试自定义量化与微调模型。赞分享人工智能大模型多模态计算机视觉NLP预训练模型优化本地部署【免费下载链接】ml-fastvlmThis repository contains the official implementation of FastVLM: Efficient Vision Encoding for Vision Language Models - CVPR 2025项目地址https://gitcode.com/gh_mirrors/ml/ml-fastvlm点击查看免费下载相关推荐MagicMirror²日历模块实战如何接入ICS订阅并绕开时区与夏令时的经典大坑MagicMirror²日历模块实战如何接入ICS订阅并绕开时区与夏令时的经典大坑 MagicMirror² 是一个开源模块化智能镜像平台其内置的 日历模块物联网桌面应用智能家居LiteRT-LM Swift API 实战在 iOS 与 macOS 应用中集成端侧大模型LiteRT LM Swift API 实战在 iOS 与 macOS 应用中集成端侧大模型 本文以仓库 samples/ios_and_mac/README大模型人工智能本地部署多模态MobaXterm-Customizer模式揭秘如何深度定制你的SSH终端环境MobaXterm Customizer模式揭秘如何深度定制你的SSH终端环境 MobaXterm是一款功能强大的SSH终端工具它集成了丰富的网络工具和 U逆向工程开发工具上一篇Devstral-Small-2-24B-Instruct-2512-bf16核心功能全揭秘从图像理解到超长文本生成下一篇如何为Project Sandcastle重建Android应用16kB页大小兼容性完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表