皆さんこんにちは。テンソル単位およびニューロン単位でデータのデバッグをしている最中に、MoEモデルのテンソル層にあるニューロンが死んでいる(値がゼロになっている)ことを見つけました。ここにログがあります。
たとえば、Qwen3.6 35B A3B Q8_0 の量子化における blk.0.ffn_gate_exps.weight と blk.0.ffn_up_exps.weight です:
私は ゼロのニューロンが40% あることを確認しました。
Qwen3.5 9Bではゼロのブロックはいっさい見つかりませんでした。そこにあるすべてのブロックには値があります。
なぜこのようなことが起きているのかは分かりません。私は自分でLLMの学習は一度もしていませんが、この問題は存在します。私が面接を受けているある会社も、別の検出手法を用いて、これらの結果を独自に確認しました。ですが、学習中にLLMが劣化する主な理由はこれだと思っています。
Google CollabのFree TierのCPU上で、バイナリレベルの範囲で可能な限りモデルを修正しました。そして、健康な隣接ニューロンから死んだニューロンへバイナリの重みデータをコピー&ペーストし、さらに線形補間を行うことで、テンソル内の死んだニューロンを復元しました(Q8量子化で750万個のゼロブロック)。
修正済みのGGUFモデルはこちら: https://huggingface.co/LuffyTheFox/Qwen3.6-35B-A3B-Plus-Uncensored-Wasserstein-GGUF
また、ユーザーによるベンチマーク: https://huggingface.co/LuffyTheFox/Qwen3.6-35B-A3B-Plus-Uncensored-Wasserstein-GGUF/discussions/1#69e772a7b01172a7d35fb655
そして .safetensors の fp8_e4m3fn バージョン: https://huggingface.co/LuffyTheFox/Qwen3.6-35B-A3B-Plus-Uncensored-Wasserstein-Safetensors
このスクリプトで Q8_0 を .safetensors に変換しました: https://huggingface.co/LuffyTheFox/Qwen3.6-35B-A3B-Plus-Uncensored-Wasserstein-Safetensors/raw/main/gguf_to_safetensors.py
.safetensors 内の非検閲版FP8バージョンは学習可能(trainable)です――そこにはゼロなしでグラディエントが生きています。
モデルはこのものをベースにしています: https://huggingface.co/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive 。素晴らしい仕事をしてくれた HauhauCS に感謝します。
システムプロンプト: https://pastebin.com/pU25DVnB
チャットテンプレート: https://pastebin.com/Dy2fmmpN
推奨クォント: MXFP4_MOE and Q8_0
推奨設定(LM Studio):
| パラメータ | 値 |
|---|---|
| Temperature | 0.7 |
| Top K Sampling | 20 |
| Presence Penalty | 1.5 |
| Repeat Penalty | 無効 |
| Top P Sampling | 0.8 |
| Min P Sampling | 0 |
| Seed | 42 |
楽しんでください ^_^
PS:Qwenチームが3.6 27B版をリリースしました。私のRTX 3060 12GBでは使えませんが、HauhauCSの27B非検閲版のリリース後に、コミュニティ向けに修復して公開します。
[link] [comments]
