MLX-VLM 本地 Hugging Face 缓存模型清单:hf-cache-models 技能与--model-discovery hf-cache实战指南
【免费下载链接】mlx-vlmMLX-VLM is a package for inference and fine-tuning of Vision Language Models (VLMs) on your Mac using MLX.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-vlm
本指南围绕 mlx-vlm 仓库中skills/skills/hf-cache-models/SKILL.md定义的工作流,系统讲解如何列出、筛选并上报本地 Hugging Face 缓存中可以被 MLX-VLM 服务器暴露的模型候选。你将掌握配套脚本list_supported_hf_cache_models.py的全部参数用法、服务器端--model-discovery hf-cache的底层过滤逻辑(mlx_vlm/server/app.py),以及如何通过curl /v1/models交叉验证结果并产出可用于 issue 报告的模型清单。
技能定位:什么时候使用 hf-cache-models
MLX-VLM 服务器默认只通过/v1/models暴露由当前进程显式加载(served)的模型。但如果你希望把共享 Hugging Face 缓存目录中"看起来可以被 MLX-VLM 加载"的模型也一并纳入发现列表,就需要显式开启服务器的hf-cache发现模式。
hf-cache-models技能就是为这一场景设计的:当用户需要列出、检查或上报本地 Hugging Face 缓存中的 MLX-VLM 模型候选,包括服务器的 opt-in hf-cache 发现模式、cache-dir 覆盖、JSON 输出,或生成可直接用于 issue 的缓存模型清单时,使用该技能(对应技能元数据description字段)。
需要强调的是,这个工作流是纯缓存/文件存在性检查:它不加载模型、不证明生成能力正常、也不影响默认的served列表。它镜像的是服务器端 opt-in 的hf-cache发现模式(实现在mlx_vlm/server/app.py)。
支持的模型判定规则
无论使用脚本还是服务器端发现模式,判定一个缓存仓库是否为"受支持的模型候选"都遵循同一套五条规则:
- 仓库类型(
repo_type)为model; - 缓存中存在
main修订版本(mainrevision); - 存在
config.json; - 存在
tokenizer_config.json; - 存在
model.safetensors.index.json,或至少存在一个*.safetensors权重文件。
这五条规则在脚本中对应is_supported_model()(skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py#L25-L29),在服务器端对应models_endpoint()内部的probably_mlx_lm()过滤函数(mlx_vlm/server/app.py#L1012-L1019),两者逻辑完全一致。
# 脚本中的核心判定逻辑 REQUIRED_FILES = {"config.json", "tokenizer_config.json"} def is_supported_model(files: dict[str, Path]) -> bool: has_weights = "model.safetensors.index.json" in files or any( name.endswith(".safetensors") for name in files ) return REQUIRED_FILES.issubset(files) and has_weights注意:满足以上规则只代表"文件齐全,像是一个可加载的模型",即cache candidate。若想进一步缩小为probably loadable(很可能可加载),需要配合--check-arch做架构校验,见下文。
使用配套脚本:四种常用调用方式
SKILL.md 明确要求使用仓库自带的脚本而非重写缓存扫描逻辑,原因在于脚本与服务器端共享同一套过滤语义,且不会引入重复代码。
1. 基础列出
uv run python skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py输出为每行一个模型 ID,末尾打印统计行:
Qwen/Qwen2.5-VL-7B-Instruct 1 supported model(s)2. JSON 输出
uv run python skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py --json每个模型条目包含四个字段(对应脚本supported_models()中构造的字典,scripts/list_supported_hf_cache_models.py#L77-L82):
[ { "id": "Qwen/Qwen2.5-VL-7B-Instruct", "repo_type": "model", "last_modified": 1733908800, "cache_dir": "/home/user/.cache/huggingface/hub" } ]id:Hugging Face 仓库 ID(如org/model-name);repo_type:当前恒为model(已按规则过滤);last_modified:缓存修订的最近修改时间戳(Unix 秒);cache_dir:实际使用的缓存目录(便于排查非默认目录场景)。
3. 架构校验:从"文件齐全"到"很可能可加载"
uv run python skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py --check-arch--check-arch会额外要求:从缓存仓库的config.json中读取model_type(若缺失则回退到speculators_model_type,见_config_model_type()),并要求该model_type能在mlx_vlm/models/下找到同名目录。实现上,脚本通过importlib.util.find_spec("mlx_vlm")定位包路径并枚举models子目录(_mlx_vlm_model_types()),刻意不导入 mlx_vlm,从而避免引入 mlx 等重依赖,保持脚本轻量快速。
开启--check-arch后:
- 列表被收窄为"既文件齐全、又有对应架构目录"的模型,统计标签从
supported变为loadable; - JSON 输出会额外增加
model_type字段。
重要限制(SKILL.md 明确提醒):该检查是文件夹名匹配,并不解析MODEL_REMAPPING别名映射(定义于mlx_vlm/utils.py#L37)。因此:
- 命中 = 强提示,表示很可能可加载;
- 未命中 = "可能不可加载",而非绝对结论;
- 判定结果只能作为强提示(strong hint),不能当作证明(proof)。
4. 指定自定义缓存目录
uv run python skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py \ --cache-dir /path/to/huggingface/cache默认使用huggingface_hub的HF_HUB_CACHE常量(即标准缓存位置~/.cache/huggingface/hub),脚本内部通过Path(cache_dir or HF_HUB_CACHE).expanduser()解析(scripts/list_supported_hf_cache_models.py#L64)。当缓存目录不存在(CacheNotFound)时,脚本返回空列表而非报错。
三个参数可自由组合,例如同时使用 JSON 输出、架构校验与自定义缓存目录:
uv run python skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py \ --json --check-arch --cache-dir /data/models/hf_cache服务器端原理:--model-discovery hf-cache与/v1/models
脚本的判定逻辑镜像自服务器端实现,理解服务端行为有助于解释"脚本与服务器结果为何应一致"。
模式定义与参数入口
发现模式通过环境变量MLX_VLM_MODEL_DISCOVERY控制,合法值为served与hf-cache两种(mlx_vlm/server/runtime.py#L6-L7):
MODEL_DISCOVERY_ENV = "MLX_VLM_MODEL_DISCOVERY" MODEL_DISCOVERY_MODES = ("served", "hf-cache")CLI 侧通过--model-discovery参数映射到该环境变量(mlx_vlm/server/cli.py#L84-L93、#L312-L313),即:
python -m mlx_vlm.server --model-discovery hf-cache等价于:
MLX_VLM_MODEL_DISCOVERY=hf-cache python -m mlx_vlm.server默认值为served:/v1/models只列出当前进程显式加载的模型。若传入非法的模式值,_model_discovery_mode()会记录警告并安全回退到served(mlx_vlm/server/app.py#L108-L117)。
/v1/models端点如何合并缓存模型
models_endpoint()(mlx_vlm/server/app.py#L994-L1035)同时注册在/models与/v1/models两个路径下,其执行流程为:
- 先构造
served模型字典(_served_model_entries()); - 若发现模式为
hf-cache,则调用scan_cache_dir()扫描缓存,对每个仓库执行probably_mlx_lm()判定(即上文五条规则); - 通过判定的仓库,若其
repo_id尚未出现在served列表中,则以repo_id为id、last_modified为created合并进结果; - 最终按模型 ID 小写排序返回,响应结构为 OpenAI 风格的
{"object": "list", "data": [...]}。
因此,若某个模型同时被服务器加载且存在于缓存中,只会出现一次,不会重复。
交叉验证与结果上报
用服务器验证 hf-cache 发现
SKILL.md 给出的验证路径是:以hf-cache模式启动服务器,再与脚本输出对比:
# 终端 1:启动服务器(启用 hf-cache 发现) python -m mlx_vlm.server --model-discovery hf-cache # 终端 2:对比脚本输出 uv run python skills/skills/hf-cache-models/scripts/list_supported_hf_cache_models.py # 终端 3:查询服务器暴露的模型 curl http://127.0.0.1:8080/v1/models注意默认端口为 8080(以实际启动日志为准);两个来源的差异通常来自--cache-dir覆盖或served与缓存模型去重等场景,是排查发现模式是否生效的常用手段。
上报时应包含的要素
根据 SKILL.md 的 Reporting 要求,汇报结果时必须包含:
- 使用的缓存目录(若非默认目录,必须显式说明);
- 受支持模型的数量;
- 确切的模型 ID 列表;
- 数据来源:是来自脚本(
list_supported_hf_cache_models.py),还是来自curl http://127.0.0.1:8080/v1/models。
与 bug 报告流程的衔接
SKILL.md 明确建议:如果该检查成为 bug 报告的一部分,应切换到Skill("mlx-vlm-skills:reproducible-github-issues")技能,以确保报告具备可复现性(对应仓库中的skills/skills/reproducible-github-issues/)。这说明 hf-cache-models 的定位是"前置排查与事实收集",而正式的 issue 提交流程由专门的技能接管。
常见误用与边界提醒
- 不要把候选当结论:脚本与服务器都只做文件存在性检查,不保证模型能成功加载或生成正常。需要真正验证可加载性时,应加载模型实际推理(或借助
--check-arch作为强提示)。 --check-arch不解析别名:MODEL_REMAPPING(mlx_vlm/utils.py)中记录的模型类型别名不会被脚本解析,判定结果需谨慎解读。- 环境变量优先级:
--model-discovery会覆盖MLX_VLM_MODEL_DISCOVERY环境变量(CLI 赋值发生在解析参数之后,mlx_vlm/server/cli.py#L312-L313);非法值会被安全回退到served。 - 默认只列 served:未开启
hf-cache时,缓存模型不会出现在/v1/models,这是预期行为而非故障。
小结
hf-cache-models技能为 MLX-VLM 提供了一个轻量、与服务器语义一致的本机缓存模型盘点方案:脚本list_supported_hf_cache_models.py负责离线列出候选并支持 JSON、架构校验与自定义缓存目录;服务器端--model-discovery hf-cache在/v1/models中按同一规则做在线暴露;两者配合curl交叉验证即可得到可信的模型清单。其核心价值在于:在不加载任何模型的前提下,快速回答"本机缓存里有哪些模型可被 MLX-VLM 服务器暴露",并为后续加载、验证或 issue 上报提供事实依据。
【免费下载链接】mlx-vlmMLX-VLM is a package for inference and fine-tuning of Vision Language Models (VLMs) on your Mac using MLX.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-vlm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考