想在本地用天马 AI 写中文小说,能不能跑起来主要卡在三件事:显存够不够、量化档位选哪一档、上下文能开到多长。这三件事有先后关系,硬件基线没确认之前,量化档位和上下文长度都是猜的。比较稳妥的顺序是先把显卡型号、显存容量和驱动状态查清楚,再用“参数量×精度”的思路倒推量化档位方向,然后让程序正确读到权重目录,最后用一个最短生成请求测出自己机器的上下文上限,并把结论固化到本地配置里。
判断方向:先确认本机显存和加速后端,再按参数量与每权重比特数估算权重占用,KV 缓存和运行时开销要从余量里扣。量化档位越激进,显存压力越小,但中文长文本的成文质量也可能下降。适用场景是单机本地写作;验证方式是启动日志能看到已加载模型、nvidia-smi 显存随上下文增长而变化;边界是估算只给方向,实际显存以项目文档和本机日志为准。
在系统里确认显卡型号、显存和驱动状态
这一步的目的是拿到本机硬件基线,避免后面反复换量化档位试错。先查显卡和驱动,NVIDIA 平台常用:
nvidia-smi
nvidia-smi `--query-gpu`=name,memory.total,driver_version `--format`=csvAMD 平台可以用 rocm-smi 查看设备与显存,Windows 上也可以用 dxdiag 的显示页,或在设备管理器里看适配器信息。Linux 下如果不想装厂商工具,可以先看 lspci | grep -i vga 拿到型号,再决定装哪个运行时。
需要记录下来的是三项:显存总容量、驱动版本、可用的加速后端。加速后端指的是程序能实际调用的那套运行时,CUDA、ROCm 或纯 CPU 推理。后端是否可用不能只看驱动装没装,通常要在启动日志里确认程序已经识别到 GPU,例如日志里出现设备名或显存相关行。如果只有 CPU 被识别到,后面所有显存估算都不适用,需要先解决运行时问题再谈量化档位。这里不写死具体版本号,因为驱动和运行时之间存在兼容区间,以项目文档给出的要求为准。
把量化档位换算成显存占用的估算方向
量化档位对显存要求的影响,可以用一个通用思路估算:权重占用约等于参数量乘以每个权重占用的字节数。
- 非量化权重通常按 2 字节/参数估算。
- Q8 一类的档位约 1 字节/参数,Q6、Q5 更低,Q4、Q3、Q2 依次再降。
例如一个参数量为 N 的模型,选择 4 bit 档位时,权重部分大致是 N 的四分之一字节量级,再按 GiB 换算。这个结果只是权重部分的量级,实际还要加上上下文缓存、激活值和运行时自身占用。上下文越长,缓存增长越明显,这部分往往不是线性的直觉,需要靠实测确认。
建议先用估算判断“有没有可能装下”,比如显存余量明显小于权重估算值,那就要往更低的量化档位走,或者换更小的参数规模。具体每档的显存说明,以项目文档和模型发布方的说明为准,不同实现、不同后端下的开销并不一致,不要直接套用别处的数字。
指定模型权重路径,让程序能读到
部署完成后最常见的问题是程序启动了但找不到模型,通常不是模型文件坏了,而是路径没指对。方式有两种,配置文件或环境变量,二选一或同时使用都可以。
环境变量的通用骨架:
export MODEL_DIR=/data/models/tianma
export MODEL_NAME=tianma-novel-q4配置文件的通用骨架,字段名按你所用项目的实际键名替换:
model:
name: tianma-novel-q4
path: /data/models/tianma
backend: auto
server:
host: 127.0.0.1
port: 8000路径建议使用绝对路径,避免从不同工作目录启动时解析错误。验证方式是启动后看两处:启动日志里是否打印出模型加载过程和模型名,以及如果项目提供模型列表接口,调用后能否列出已加载的模型。日志里出现明确的加载耗时和模型标识,基本可以确认读到了权重;只有服务端口起来但没有加载行,通常是路径或文件名不匹配。
跑一次最短生成,记录上下文能撑到多长
先求跑通,再求跑长。用一条最小生成请求确认链路通畅,参数示例:
{
"model": "tianma-novel-q4",
"prompt": "写一段中文小说开头,两百字以内。",
"max_tokens": 64,
"temperature": 0.8,
"context_length": 4096
}这条请求的用途是验证基础推理可用,输出长度故意压短,避免一上来就因为长输出把显存吃满。确认能正常返回后,再逐步加大 context_length,例如从 4096 往上试 8192、16384,每次只改一个参数。每次请求可以在另一个终端里同时观察显存变化:
watch -n 1 nvidia-smi当显存接近上限、出现明显卡顿或进程被终止时,说明这个上下文长度在当前量化档位下已经吃紧,把上一次能稳定返回的长度记为可用值。中文小说的提示词往往偏长,测试时可以用一段接近实际长度的中文文本,而不是用几个字的短提示,这样得到的基线更接近真实写作场景。温度参数只影响输出风格,对显存占用影响很小,可以固定一个写作时习惯的值。
把可用参数固化成一份本地配置
测出来的可用参数如果每次启动都手动调,很容易忘了上次是用哪个组合跑稳的。把结果写进一份本地配置文件,命名建议能一眼看出用途,例如 local.tianma.yaml 或 .env.local,放在项目根目录或专门的配置目录,不要和示例配置混在一起。
配置项命名建议覆盖这几类:模型标识与权重路径、量化档位、上下文长度、最大输出长度、服务监听地址与端口、以及显存相关的上限设置。示例骨架:
model:
name: tianma-novel-q4
path: /data/models/tianma
quantization: q4
context_length: 8192
generation:
max_tokens: 512
temperature: 0.8验证方式是重启服务,观察启动日志里打印的上下文长度和模型名是否与配置文件一致,再发一次最小生成请求确认参数生效。如果启动后被命令行参数或其他配置文件覆盖,日志里通常会显示最终生效值,以日志为准调整优先级。这样下次写作时直接启动即可,不用重复试参。