HuggingFaceTB/SmolLM2-135M 解析記録

要旨

  • 規模:約1億3,500万個の数値(パラメータ)から成る。保存ファイルの大きさは約270MB。
  • 構成:入力のたびに全パラメータを用いる密(Dense)モデルである。パラメータの約6割は知識を保持する部分(FFN)、約2割は語彙の辞書(埋め込み)、約2割は文脈を参照する部分(アテンション)に割り当てられている。
  • 日本語の扱い:日本語は1文字あたり約1.8個の単位(トークン)に分割される。英語では1トークンに約4.1文字が収まる。同じ文字数を処理するのに、日本語は英語の約7.6倍のトークンを要する。語彙約5万語のうち、かな・漢字を含む語は89語である。
  • 一度に扱える長さ:上限は8,192トークンであり、日本語でおよそ4,500字、英語でおよそ34,000字に相当する。
  • 数値の偏り:モデル内部の数値は576個を1組として流れる。そのうち番号100の位置は、全30層すべてで、外れ値(極端に大きな値)が多く現れる位置に入っていた。番号100は、正規化層の重みが極端な値をとる位置の集計にも現れた(61個の正規化層のうち39個)。この種の偏りは、一般に、モデルを圧縮(量子化)した際の精度低下の要因とされる。

一行要約:密(Dense)、llama、30層、総パラメータ 134.52M、GQA(3:1)、文脈長 8,192、語彙 49,152

基本情報

仕組み(段階0)

部位別パラメータ数

safetensors のヘッダにある形状から数えた値(実測)。

部位別パラメータ数

部位 パラメータ数 割合
FFN(密) 79,626,240 59.20%
埋め込み 28,311,552 21.05%
アテンション 26,542,080 19.73%
正規化 35,136 0.03%

構造

config.json の値。

項目 値
model_type / architectures llama / LlamaForCausalLM
層数 30
隠れ次元 576
FFN 中間次元 1,536
アテンション方式 GQA(3:1)
ヘッド数 / KV ヘッド数 / ヘッド次元 9 / 3 / 64
スライディングウィンドウ —(use_sliding_window=—)
層の種類(layer_types) —
RoPE θ 100,000
RoPE スケーリング —
部分回転(partial_rotary_factor) —
文脈長(max_position_embeddings) 8,192
入出力埋め込みの共有 はい
活性化関数 silu
正規化の ε 1.000e-05

MoE の構成

対象外(MoE ではない)。

config と実体の突き合わせ

config.json の値と、実際のテンソル形状を並べたもの(実測)。

項目 config 実体 一致 実体の出どころ
vocab_size 49,152 49,152 はい model.embed_tokens.weight
hidden_size 576 576 はい model.embed_tokens.weight
num_hidden_layers 30 30 はい 最大の層番号+1(MTP層を除く)
num_key_value_heads×head_dim 192 192 はい model.layers.0.self_attn.k_proj.weight
num_attention_heads×head_dim 576 576 はい model.layers.0.self_attn.q_proj.weight
intermediate_size 1,536 1,536 はい model.layers.0.mlp.gate_proj.weight
tie_word_embeddings(出力層テンソルが無い) はい はい はい テンソル一覧

トークナイザ

固定の日本語文・英語文(測定条件を参照)を、特殊トークンを付けずに分割した結果(実測)。「文字の途中で切れたトークン」は、1トークン単独で復号すると壊れた文字(U+FFFD)になるトークンの割合。

文 文字数 トークン数 文字/トークン バイト/トークン 文字の途中で切れたトークン 復号で元に戻る
日本語 449 825 0.544 1.63 86.1% はい
英語 1,201 291 4.127 4.223 0.0% はい

語彙 49,152 個のうち、かな・漢字を1文字以上含むもの 89 個(0.18%)、2文字以上含むもの 3 個(読み込み:tokenizers)。

特殊トークンとチャット書式

特殊トークン 17 個。BOS:<|endoftext|>、EOS:<|endoftext|>。チャットテンプレート:なし。 思考タグ:いいえ、ツール呼び出し:いいえ、FIM:いいえ、画像用トークン:いいえ(特殊トークン名とテンプレート中の文字列を探した結果)。

特殊トークン一覧

<|endoftext|>, <|im_start|>, <|im_end|>, <repo_name>, <reponame>, <file_sep>, <filename>, <gh_stars>, <issue_start>, <issue_comment>, <issue_closed>, <jupyter_start>, <jupyter_text>, <jupyter_code>, <jupyter_output>, <jupyter_script>, <empty_output>

重み(段階1)

全 272 テンソルのうち 272 個を解析(計算時間 1 秒)。各テンソルを fp32 に変換して計算した。

層ごとの推移

RMS は要素の二乗平均の平方根。最大絶対値÷RMS は、最も大きい要素が典型的な大きさの何倍か。超過尖度は分布の裾の重さで、正規分布なら 0(いずれも実測)。

RMS

最大絶対値÷RMS

超過尖度

最大値を取った行列:最大絶対値÷RMS 52.021(model.layers.27.mlp.gate_proj.weight)、超過尖度 25.005(model.layers.0.self_attn.o_proj.weight)、外れ値の割合 0.111%(model.layers.17.self_attn.k_proj.weight)。

外れ値と突出チャネル

外れ値は、同じ行列の標準偏差の 6 倍を超える要素。隠れ次元を入力に取る行列ごとに外れ値の多い列(上位 16 列)を拾い、同じ列が何層に現れたかを数えた(実測)。

隠れ次元の列 現れた層数(全 30 層中)
100 30
260 25
446 22
371 21
261 20
8 19
507 18
109 16
230 16
247 16

正規化層の重み

正規化層 61 個それぞれで、中央値から最も離れた次元(上位 16 個)を拾い、同じ次元が何個の正規化層に現れたかを数えた(実測)。

次元 現れた正規化層の数
258 41
100 39
507 38
162 37
247 34
490 34
127 33
397 33
446 32
8 30

上の突出チャネル上位10列と重なる次元:8, 100, 247, 446, 507。

実効ランク

安定ランク=(フロベニウスノルムの二乗)÷(最大特異値の二乗)。行列の短辺で割り、0〜1 にそろえた。最大特異値はべき乗法(30 回)で求めた近似値(推定)。

実効ランク

部位ごとの安定ランク÷短辺:

部位 行列数 最小 中央値 最大 最小の行列
アテンション 120 0.0068 0.1148 0.4742 model.layers.0.self_attn.q_proj.weight
FFN(密) 90 0.0287 0.1162 0.3189 model.layers.28.mlp.up_proj.weight
埋め込み 1 0.0034 0.0034 0.0034 model.embed_tokens.weight

埋め込みの行

語彙ごとの埋め込み行ベクトルの長さ(ノルム)の分布と、ノルムの小さい行(下位 0.1%)(実測)。

model.embed_tokens.weight(49,152 行)

最小 下位0.1% 下位1% 中央値 上位1% 最大
1.7569 1.9437 2.1338 3.1309 4.9269 7.4676

ノルムの小さい行(下位 0.1% の 50 行のうち小さい順に20件):7937:' Michael'(1.7569)、2322:' John'(1.7763)、3214:' CO'(1.7876)、5259:' David'(1.8027)、5622:' IN'(1.8095)、8581:' Tom'(1.8238)、6356:' Robert'(1.8255)、5455:' Paul'(1.8283)、7288:' Peter'(1.8366)、18452:' Chris'(1.8477)、4967:' William'(1.8493)、5457:' Sam'(1.8533)、2974:' Car'(1.8572)、5037:' James'(1.8633)、1166:' Ar'(1.8738)、5370:' George'(1.8768)、5325:' Alex'(1.8811)、4098:' anti'(1.8843)、788:'In'(1.8936)、1053:' Pro'(1.8979)

ノルムが小さいことは、そのトークンが重要でない、あるいは学習されていないことを意味しない。

エキスパートどうしの似かた

対象外(MoE ではない)。

測定条件

  • mbscope 0.1.3(結果の形式 v1)、Python 3.14.4、torch 2.13.0+cu130、safetensors 0.8.0、huggingface_hub 0.36.2、tokenizers 0.21.4、transformers 4.49.0
  • 推定の基準:outlier_sigma=6.0、embed_low_pct=0.1、power_iters=30、sketch_dim=32、top_channels=16、seed=20261002
  • 入力文:ja(夏目漱石『吾輩は猫である』冒頭(青空文庫 789_ruby_5639、底本:夏目漱石全集1 ちくま文庫)、sha256 先頭 5d6b40f79b6a)、en(Jane Austen, Pride and Prejudice, Chapter 1 冒頭(Project Gutenberg eBook #1342)、sha256 先頭 0a714a270435)
  • 実行:2026-10-02T11:31:00+09:00 〜 2026-10-02T11:31:13+09:00、計算は GPU NVIDIA GeForce RTX 3090(CUDA 13.0、TF32 無効)・fp32
  • この記録の文面は mbscope 0.2.0 で作成(測定は 0.1.3)

コメント

…

コメントは公開されます。個人情報は書かないでください。不適切なものは削除することがあります。

← 記録の一覧へ