Qwen3.8-27B 的 config.json 里全是 qwen3_5:代际关系怎么读

2026-08-16

本文核对日 2026-08-16,对应 Hugging Face 仓库 Qwen/Qwen3.8-27B 的快照 1d4bf0f。所有字段值均来自随仓的文本配置文件与 model card 原文。

打开 Qwen/Qwen3.8-27B 这个仓库,第一眼看到的是 model card 的一级标题 # Qwen3.8-27BREADME.md:7)。往下滚过参数表、翻到随仓的 config.json,第一个键就有点对不上号:architectures 里写的类名是 Qwen3_5ForConditionalGeneration。再往下看,顶层的 model_type"qwen3_5"text_config 里的是 "qwen3_5_text"vision_config 里的还是 "qwen3_5"

这不是需要连蒙带猜才能发现的细节,它就摆在文件的头七行里。下面把这几处逐一摊开,标清位置,然后说清楚哪些话能说、哪些话说不了。

一、四处字面值,一个都不用猜

config.json 一共 4,312 字节、140 行,结构只有三层:顶层、text_configvision_config。带版本号字样的类名与 model_type 分布在这三层里:

位置字段字面值
config.json:2-4architectures["Qwen3_5ForConditionalGeneration"]
config.json:7顶层 model_type"qwen3_5"
config.json:94text_config.model_type"qwen3_5_text"
config.json:130vision_config.model_type"qwen3_5"

对面这一侧则是:model card 的一级标题 # Qwen3.8-27BREADME.md:7),示例代码里的模型名也写作 model="Qwen/Qwen3.8-27B"README.md:292 等处)。

值得一并摆出来的是 model card 自己的一句原话,在 README.md:20Built on the architectural foundation of Qwen3.5。这句话与 config.json 里的 qwen3_5 字样放在一起看,是两份文件里同时出现的 3.5 字样——但这只是并列陈述,我们不推断这两处之间存在什么因果,也不推断命名为什么是现在这个样子。 说完差异就停,是这类观察唯一站得住的写法。

顺带记一个命名上的不对称:text_config.model_type 带了 _text 后缀(config.json:94),而 vision_config.model_type 并没有 _vision 之类的后缀,它的字面值与顶层的 model_typeconfig.json:7)完全相同。

二、跨代的类名不止这一处

如果只盯着 config.json,容易以为这是孤例。把随仓另外几个配置文件一起打开,带版本字样的类名其实分散在好几处,而且分属不同的代际写法:

文件与位置字段字面值
preprocessor_config.json:19processor_class"Qwen3VLProcessor"
preprocessor_config.json:20image_processor_type"Qwen2VLImageProcessorFast"
video_preprocessor_config.json:19processor_class"Qwen3VLProcessor"
video_preprocessor_config.json:20video_processor_type"Qwen3VLVideoProcessor"
tokenizer_config.jsontokenizer_class"Qwen2Tokenizer"

也就是说,同一个 preprocessor_config.json 文件里,相邻两行的两个类名一个带 Qwen3VL、一个带 Qwen2VL;而它们与 config.json:3Qwen3_5ForConditionalGeneration 又不是同一套命名。

还有一处在 model card 的末尾。README.md:575-581 的引用条目里,bibtex 的 title 字段写的是 {Qwen3.8-Max}: A New Bar for Coding and Cowork——而本仓是 Qwen3.8-27B。这同样只是并列一个字面差异,不做延伸。

这几行放在一起看,容易生出各种猜测,但能站得住的表述只有一句:这些是文件里写着的字面值,位置我已经标好,谁都能自己打开去看一眼。至于它们分别指向什么、为什么彼此不同名,本仓的任何一个文件都没有说明,我们也不替它补。

对读者有用的那句实话是:在这个仓库里认字段,请按文件里的字面值去认,不要按模型名去猜类名。想知道 Qwen3_5ForConditionalGeneration 这个类具体是什么,本仓也帮不上忙——这是一个权重与配置仓,README.md:10 原文写的是它装的是 post-trained 模型的 weights and configuration files,仓库里没有建模源码可读

三、名字对不上,数字倒是一条条对得上

名字这一层与参数这一层,最好分开看。把 model card 的 “Model Overview”(README.md:32-53)逐行拿去和 config.json 对照,语言模型侧的数值几乎条条落地:

model card 原文(行号)config.json 字段(行号)
Hidden Dimension: 5120(README.md:38hidden_size: 5120config.json:18
Token Embedding: 248,320 (Padded)(README.md:39vocab_size: 248320config.json:117
Number of Layers: 64(README.md:40num_hidden_layers: 64config.json:98
Linear Attention Heads: 48 for V and 16 for QK(README.md:43linear_num_value_heads: 48config.json:90)、linear_num_key_heads: 16config.json:89
Attention Heads: 24 for Q and 4 for KV(README.md:46num_attention_heads: 24config.json:97)、num_key_value_heads: 4config.json:99
Gated Attention Head Dimension: 256(README.md:47head_dim: 256config.json:16
Intermediate Dimension: 17,408(README.md:50intermediate_size: 17408config.json:20
Context Length: 262,144 natively(README.md:53max_position_embeddings: 262144config.json:93

README.md:37 写的 Number of Parameters: 27B 是个例外:config.json 里没有任何字段承载参数量,这个数字只能作为 model card 自述来引用,无法在本仓的文件里核对。同理,README.md:53 后半句的 extensible up to 1,000,000 tokens,在发布的 config.json 里也找不到承载它的字段——rope_parameters.rope_type"default"config.json:113),该对象里没有 factor、也没有 original_max_position_embeddings。开箱配置写的就是 262,144,tokenizer_config.jsonmodel_max_length 同样是 262144

顺着这张表还能看出一件事:model card 的 Model Overview 从头到尾只有语言模型侧的条目,视觉编码器只在 README.md:34 用一句 Causal Language Model with Vision Encoder 带过,之后一个视觉参数都没给。而 config.json:122-137vision_config 里躺着 14 个键,包括 depth: 27hidden_size: 1152num_heads: 16intermediate_size: 4304num_position_embeddings: 2304。这几个数在 model card 全文里都查不到。所以真要看视觉侧的结构,只能翻配置文件,参数表帮不上忙。

四、顺手对一遍 Hidden Layout 与 layer_types

既然名字对不上而数值对得上,那顺着数值再往下核一层是划算的。README.md:41 那行公式原文是:

Hidden Layout: 16 × (3 × (Gated DeltaNet → FFN) → 1 × (Gated Attention → FFN))

config.json 这边对应的是 text_config.layer_typesconfig.json:21-86),一个长度 64 的字符串数组,取值只有两种。数出来的结果是:linear_attention 48 项、full_attention 16 项;full_attention 的 0 基下标是 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63,相邻下标差恒为 4;第 1 层是 linear_attention,第 64 层是 full_attention。另有一个字段 full_attention_interval: 4config.json:15),而 64 ÷ 4 = 16,与 full_attention 的出现次数相同。

在「块数 16」「块内 3:1」「块内先 linear 后 full」这三点上,公式与数组是吻合的。但有两条边界必须跟着写:

  • 公式里的 FFNlayer_types 数组里没有任何对应元素,数组只装两种注意力类型的取值。README 说每个单元后面跟一个 FFN,这一点无法从这个数组核对。
  • 公式里的 Gated DeltaNetGated Attention 这两个名词,在 config.json一次都没出现;config 对应位置的字符串是 "linear_attention""full_attention"。把两组名词对上,靠的是数量与顺序的吻合,这是名称层面的对应,不是 config 里写明的映射。config 里另有 attn_output_gate: trueconfig.json:11)与 output_gate_type: "swish"config.json:100),它们与 README 里的 “Gated” 字样是不是指同一件事,本仓文件没有说明,我们不推断。

五、想自己核一遍,两条命令就够

config.json 放在当前目录下,先看三层各有多少个键:

python -c "
import json
d=json.load(open('config.json',encoding='utf-8'))
print('n top', len(d.keys()), 'n text', len(d['text_config'].keys()), 'n vision', len(d['vision_config'].keys()))
"

输出是 n top 11 n text 34 n vision 14。再数一遍 layer_types

python -c "
import json
d=json.load(open('config.json',encoding='utf-8'))
lt=d['text_config']['layer_types']
full=[i for i,v in enumerate(lt) if v=='full_attention']
print('len',len(lt)); print('full count',len(full)); print('full idx',full)
print('all %4==3 ?', all(i%4==3 for i in full))
print('groups of 4:', [lt[k*4:(k+1)*4] for k in range(2)])
"

至于 model_type 这条线索本身,直接看文件头七行即可,不需要任何工具。Windows 下用 PowerShell 或任意编辑器打开都一样,这几个键都在文件开头;Linux / macOS 下同理。上面两条命令是只读统计,不加载模型、不下载权重。

六、这条线索推不出来的东西

写到这里,最需要克制的是「所以呢」。有几条必须说明白:

  • 不能由这处命名差异去评价项目、团队或可信度,也不能推断作者为什么这么写、是不是漏了同步。可写的只有「A 处是 X、B 处是 Y」。
  • 不能推断它对加载行为的影响。我们没有下载权重、没有加载过模型、也没有推理过一个 token;Qwen3_5ForConditionalGeneration 的实现不在本仓,full_attention_intervalattn_output_gatemamba_ssm_dtypedeepstack_visual_indexes 这些字段究竟如何被使用,我们一律没能确认,只能登记取值。
  • 更不能由 27B、64 层、262,144 去推显存、体积、能不能跑得动。这些数字之间没有本仓文件支持的换算关系,任何一句这类推算都是我们自己编的。

还有几处该带上的限定,一并说清:config.json:120transformers_version 值是 "5.8.0.dev0",字面上带 .dev0 后缀;我们检索 model card 全文,AutoModel / AutoProcessor 零命中,也没有任何一处写出所需的 transformers 版本号。vision_config.deepstack_visual_indexes 是一个空数组 []config.json:123),而 deepstack 这个词在 model card 里零命中——键存在不等于功能可用,这一条按字面记录,不做解释。README.md:15-16 提到官方有一个名为 Qwen Cloud 的 API 服务,并写明 27B 的托管版本 The service is coming soon,即该服务尚未提供,托管版本被描述的那些特性也不是这个权重仓的能力。

最后一个数字带上时间锚点:截至 2026-08-16,该仓库的下载量为 267,725、点赞数为 10,284。这两个数字与本文谈的命名差异是并列的事实,不能由它们推导质量、成熟度或任何结论

延伸阅读


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

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