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
基本情報
- モデル:HuggingFaceTB/SmolLM2-135M(リビジョン
93efa2f097d5、config.json) - ライセンス:apache-2.0
- base_model の宣言:なし
- 保存形式:BF16 134.52M
仕組み(段階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 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)
コメント
…