Qwen3.8-27B 的权重怎么组织:18 个分片、索引文件与 crc32

2026-08-16

翻一个模型仓,最先看到的往往不是 model card 的第一段,而是文件列表:一长串 model-0000X-of-00018.safetensors,旁边跟着 model.safetensors.index.jsoncrc32.txt。很多人会顺手把分片数当成规模指标,再往下推一层「那大概要多少显存」。这篇不干这件事,一个字都不推。

先把这篇能讲什么、讲不了什么划清楚。

一、我们没有下载任何一个分片

截至 2026-08-16,我们对 Qwen/Qwen3.8-27B 取到的快照是 1d4bf0f。取的是文本文件:model card、协议、配置、分词器配置、聊天模板,一共 8 个。18 个 .safetensors 分片、model.safetensors.index.jsoncrc32.txt 我们都没有下载

所以这篇不会出现单片体积、权重总大小、加载后占多少显存、量化到某精度大概多少 GB 这类数字——不是不愿意写,是我们手上根本没有这些文件,写出来就只能是算的。model card 在 Model Overview 里写参数量是 27B(README.md:37),而 config.json 里没有任何一个字段直接写参数量,我们逐个 key 看过。由 27B 去反推体积,属于我们自己的推导,不是仓库里写的字。

二、仓库侧的文件清单(截至 2026-08-16)

按用途分,Hugging Face 仓库侧的文件是这么几类:

类别文件
权重分片model-00001-of-00018.safetensorsmodel-00018-of-00018.safetensors,共 18 个
分片索引model.safetensors.index.json
校验清单crc32.txt
模型配置config.jsongeneration_config.json
多模态预处理preprocessor_config.jsonvideo_preprocessor_config.json
分词器tokenizer_config.jsontokenizer.jsonmerges.txtvocab.json
对话模板chat_template.jinja
文档与协议README.mdLICENSE

「18 个分片」这个数字来自文件名本身的 -of-00018 后缀,是可以直接从清单上数出来的。它就到此为止了:分片是怎么切的、每片装了哪些张量、切分依据是什么,本文一概不写:文件清单里的 model.safetensors.index.jsoncrc32.txt,我们只知道这两个文件名存在,内容一行都没有读过,所以不描述它们的格式,也不描述里面有什么。

这就是本篇最别扭的地方,也是必须讲明白的地方:标题问「权重是怎么组织的」,而真正回答这个问题的两个文件,恰好是我们没取到的那两个。能讲的部分只有外圈——清单、配置、以及配置与文档对不对得上。

三、本地快照实况:8 个文本文件

我们在本地快照目录里用 Python 列了一遍文件,得到 8 个,逐个记下字节数、行数与换行符:

文件字节数行数CRLF 行数
LICENSE11,544202201
README.md65,012583582
chat_template.jinja8,9521700
config.json4,3121400
generation_config.json202130
preprocessor_config.json390210
tokenizer_config.json17,9283060
video_preprocessor_config.json385210

有两处小细节值得记一笔。

其一,README.mdLICENSE 是 CRLF 换行(分别 582 和 201 个 \r\n),其余六个文件是 LF(0 个 \r\n)。同一个仓库里换行风格不统一,这在写脚本按行处理时是会踩到的。

其二,字节数是对得上的:LICENSE 解码后纯文本 11,343 字节,加上 201 个 \r,正好是 11,544 字节;README.md 的 65,012 字节,也与 Hugging Face 元数据里记的 model card 体积一致。这是我们能做的最基本的一次核对——不是校验权重,只是确认取到的文本没缺没多。

本地没有的文件,本批任何文章都不描述其内容tokenizer.jsonmerges.txtvocab.jsonmodel.safetensors.index.jsoncrc32.txt,以及全部 18 个分片。词表细节因此也核不了,tokenizer_config.json 里能查到的只有 added_tokens_decoder 的 33 条记录(id 是 248044–248076 的连续区间)。

四、反直觉的一处:model card 通篇不提 safetensors,也不提 crc32

我们用 Python 逐行检索 README.md 全文(65,012 字节、583 行),结果是:

  • safetensors:0 命中
  • crc32:0 命中
  • modelscope / ModelScope / huggingface:0 命中
  • download:全文只有 1 处命中,在 README.md:178,那是 Benchmark 表的脚注,说的是评测时禁用了 pip download 等命令,与「怎么下载这个模型」无关

也就是说,model card 里没有给出任何权重下载命令——没有 huggingface-cli download,没有 git lfs clone,也没有其它获取入口的命令。## QuickstartREADME.md:225)的第一句写的是 For streamlined integration, we recommend using Qwen3.8 via APIs.README.md:227),随后 ### Serving Qwen3.8README.md:229-241)列了 SGLang、vLLM、TokenSpeed 三个框架各自的官方文档入口(README.md:238-240),再往下就直接进 #### Chat Completions API 的示例(README.md:270 起)了。

这只是照实描述文档结构:文件清单里躺着 18 个分片和一份校验清单,而 model card 从头到尾没有把它们当成读者要打交道的对象来讲。为什么这么安排,我们不推断。

顺带说一句 model card 顶部的 > [!Tip]README.md:14-16):它提到官方有一个名为 Qwen Cloud 的 API 服务,并写明 27B 的托管版本 The service is coming soon——服务尚未提供。同一句里出现的 1M context length by default 说的是那个托管版本的特性,不是这个开源权重仓的能力,别混到一起。

五、能核到的「组织方式」,都在配置侧

既然分片索引读不了,那在可核范围内,关于这个模型「怎么组织」的信息就只剩 config.json 这 140 行了。它描述的是结构,不是文件切分:

  • num_hidden_layers: 64config.json:98),与 Model Overview 的 Number of Layers 64(README.md:40)一致;
  • text_config.layer_types 是一个长度 64 的字符串数组(config.json:21-86),我们用 Python 统计,linear_attention 出现 48 次,full_attention 出现 16 次,后者所在下标(0 起)为 3、7、11、15……63;同一份配置里另有 full_attention_interval: 4config.json:15);
  • 视觉侧的参数只在 vision_configconfig.json:122-137)里,比如 depth: 27config.json:124)、hidden_size: 1152:126)、out_hidden_size: 5120:133)——而 Model Overview(README.md:32-53)只在第 34 行用一句 Causal Language Model with Vision Encoder 带过,没有列出任何一条视觉编码器参数。

这些字段是「模型长什么样」,跟「权重被切成几片、每片放什么」不是一回事。config.json 的内容就是两块——text_configconfig.json:8-118)与 vision_configconfig.json:122-137),我们逐项记下来的字段全是结构与位置编码一类的参数,分片信息不在其中。至于 full_attention_intervalattn_output_gatemamba_ssm_dtype 这些字段具体如何影响推理,这是权重仓、不含建模代码,我们没有源码可读,因此只登记字面值,不作解释。

六、顺手记下几处名字对不上的地方

翻文件的时候会撞见几处世代名不一致,都只并列陈述,不推断哪个是对的、也不据此评价什么:

  1. README 的一级标题是 # Qwen3.8-27BREADME.md:7),而 config.jsonmodel_typeqwen3_5config.json:7),architectures["Qwen3_5ForConditionalGeneration"]config.json:2-4);README 自己在 README.md:20Built on the architectural foundation of Qwen3.5
  2. preprocessor_config.json 同一个文件里,processor_classQwen3VLProcessorimage_processor_typeQwen2VLImageProcessorFastvideo_preprocessor_config.jsonvideo_processor_typeQwen3VLVideoProcessortokenizer_config.jsontokenizer_classQwen2Tokenizer
  3. config.json:120transformers_version 值是 "5.8.0.dev0",字面上是一个 dev 版本号;README 全文没有写最低 transformers 版本要求,关于 transformers 只有第 10、12 行的兼容性表述和 frontmatter 第 2 行的 library_name
  4. README.md:575-581 的 bibtex 条目里,title 写的是 {Qwen3.8-Max}: A New Bar for Coding and Cowork,而本仓是 Qwen3.8-27B。

对文件组织这件事来说,第 2 条最实际:如果你要按类名去对照上游实现,仓库里这四处字面值是不一样的,照抄哪个都得先看清是哪个文件里的。

七、想自己数一遍

上面这些统计不需要下载权重,只作用于文本文件。列清单与换行符的口径是:

python -c "
import os
files=sorted(os.listdir('.'))
print('LOCAL FILE COUNT', len(files))
for f in files:
    b=open(f,'rb').read()
    print(f, len(b), 'bytes,', b.count(b'\n')+1, 'lines, crlf=', b.count(b'\r\n'))
"

layer_types 的口径是:

python -c "
import io,json
from collections import Counter
c=json.load(io.open('config.json',encoding='utf-8'))
lt=c['text_config']['layer_types']
print('len', len(lt), Counter(lt))
print('full idx', [i for i,x in enumerate(lt) if x=='full_attention'])
"

两段都在放着这些文本文件的目录(<你存放模型仓文本文件的目录>)下执行,Windows 与 Linux/macOS 都是同一条 python -c,差别只在 shell 对引号的处理:上面这种写法在 Git Bash、PowerShell 与 bash 下的引号转义行为不同,如果报语法错,把脚本存成 .py 再跑最省事。这属于通用做法,不是该模型仓官方文档的内容。

最后重复一遍这篇的边界:文件清单可数,配置可读,字节数可核;而 18 个分片的内部、model.safetensors.index.json 的映射关系、crc32.txt 的校验值,我们一样都没有。谁要是在别处看到由「18 个分片」推出来的显存结论,先问一句那个数是从哪个文件读出来的。

延伸阅读


本文依据 Hugging Face 仓库 Qwen/Qwen3.8-27B 的 model card 与随仓配置文件 (config.jsongeneration_config.jsonpreprocessor_config.jsonchat_template.jinja 等)整理, 核对日 2026-08-16,对应仓库快照 1d4bf0f。 本文内容为 model card 与配置文件口径,我们没有下载权重、没有部署、也没有推理过这个模型, 因此不涉及生成质量、推理速度与显存占用的任何描述;文中所有评测数字均为 model card 自述,我们没有复现。 模型仓库内容随上游更新而变动,请以官方最新说明为准。 许可条款请以官方 LICENSE 原文为准,本文不构成法律意见。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。