Skip to content

模型制品、模板与可重复加载 ​

本地模型是一个组合:基础权重、架构配置、tokenizer、chat template、推理引擎、量化格式和许可。漏掉模板时,模型可能把角色标签当普通文字续写;只改权重不改tokenizer更可能产生无意义输出。

python
from hashlib import sha256
import json
manifest = {'model':'example-model', 'revision':'frozen-revision',
            'tokenizer':'tok-v1', 'template':'chat-v1', 'quant':'Q4-example',
            'engine':'engine-build-1', 'license_reviewed':True}
def identity(value):
    return sha256(json.dumps(value,sort_keys=True).encode()).hexdigest()
assert identity(manifest) == identity(dict(reversed(list(manifest.items()))))
assert identity(manifest) != identity(dict(manifest,template='chat-v2'))
print(identity(manifest)[:12])

示例值是虚构标识,仅验证制品身份算法;真实manifest填下载源、完整revision与文件摘要。模板改变也要产生新身份,因为相同消息会变成不同token序列。验证哈希能发现文件变化,不能证明来源可信。

模型卡应检查语言与任务、上下文条件、许可证、使用限制、是否需远程自定义代码,以及权重与代码的不同许可。开放权重不自动等于完整开源,也不自动允许任意训练数据用途。不要用模型名字推断所有衍生量化版本有相同许可。

Base模型通常用于续写,Instruct/Chat模型经过对话训练;应用若需要工具调用与JSON,还需单独评估。不同模型的特殊token和stop序列不同,多加或漏掉BOS/EOS会改变输出。先用模型官方模板建立基线,再做应用提示适配。

GGUF是一种模型存储格式,常用于llama.cpp生态;safetensors常用于Python框架权重。文件格式不决定模型支持的所有任务,转换还要匹配架构与tokenizer。未知远程代码在执行前审查,隔离环境只提供必要文件与网络权限。

练习 ​

修改quant但保留revision,要求制品身份改变。为何仅用权重仓库revision作为缓存key不足?

完成后查看本章答案。

下一章:量化、KV缓存与吞吐预算。

用心记录每一步成长