msmodelslim について
msModelSlimは、Huawei Ascend AIプロセッサ向けのモデル圧縮ツールです。LLM、MoE、マルチモーダルモデルを扱う開発者向けに、複数の量子化方式、感度分析、精度調整を提供し、対応モデルには一括設定を利用できます。
主な機能
- 01LLM・MoE・マルチモーダルモデルの量子化
- 02設定ファイルによる一括量子化
- 03複数の量子化形式とアルゴリズム
- 04感度の高いレイヤーの分析と精度調整
- 05カスタムモデルアダプターの追加
活用シーン
- 01Ascend推論向けのモデル圧縮
- 02長いシーケンス処理向けの量子化方式選定
- 03感度分析後の精度調整
- 04カスタムモデルの対応追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ascend-ai-coding/ awesome-ascend-skills --skill msmodelslimインストール後、Claude Code で/msmodelslimを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/quant_config_pdmix.yamlquant_config_sparse.yamlquant_config_w4a8.yamlquant_config_w8a8.yamlreferences/deployment.mddocker-setup.mdexample-scripts.mdinstallation.mdmodel-integration.mdmodel-support.mdprecision-tuning.mdquantization-algorithms.mdscripts/check_env.shmodel_adapter_template.pyquantize_model.sh詳細
msModelSlim - Ascend モデル圧縮ツール
MindStudio ModelSlim(msModelSlim)は、Huawei Ascend AI プロセッサ向けに最適化されたモデル圧縮ツールです。LLM、MoE モデル、マルチモーダルモデルの量子化と圧縮に対応しています。
クイックスタート
ワンクリック量子化(V1 - 推奨)
V1 の自動量子化では、lab_practice/ ディレクトリ内の設定ファイルを使用します。
# Basic W8A8 quantization for Qwen2.5-7B-Instruct
# Config files located at: lab_practice/<model_series>/<model>-<quant_type>-v1.yaml
msmodelslim quant \
--model_path /path/to/Qwen2.5-7B-Instruct \
--save_path /path/to/output \
--device npu \
--model_type Qwen2.5-7B-Instruct \
--config_path /path/to/msmodelslim/lab_practice/qwen2.5/qwen2.5-7b-w8a8-v1.yaml \
--trust_remote_code True
# MoE model quantization (Qwen3-30B-A3B W4A8)
msmodelslim quant \
--model_path /path/to/Qwen3-30B-A3B \
--save_path /path/to/output \
--device npu \
--model_type Qwen3-30B \
--config_path /path/to/msmodelslim/lab_practice/qwen3_moe/qwen3-30b-w4a8-v1.yaml \
--trust_remote_code True
# Multi-device distributed quantization
msmodelslim quant \
--model_path /path/to/model \
--save_path /path/to/output \
--device npu:0,1,2,3 \
--model_type Qwen2.5-72B-Instruct \
--config_path /path/to/msmodelslim/lab_practice/qwen2.5/qwen2.5-72b-w8a8c8-v1.yaml \
--trust_remote_code True
注:msmodelslim リポジトリの
lab_practice/ディレクトリにある設定ファイルを確認してください。
- 構成:
lab_practice/<model_series>/<model>-<quant_type>-v1.yaml- 例:
lab_practice/qwen2.5/qwen2.5-7b-w8a8-v1.yaml
従来の量子化(V0)
cd msmodelslim
python3 example/Qwen/quant_qwen.py \
--model_path /path/to/Qwen2.5-7B-Instruct \
--save_directory /path/to/output \
--calib_file example/common/boolq.jsonl \
--w_bit 8 --a_bit 8 \
--device_type npu \
--trust_remote_code True
インストール
前提条件
- Python:3.8 以降(一部の環境では 3.9 以降を推奨)
- CANN:8.2.RC1 以降(8.3.RC1 または 8.5.0 を推奨)
- PyTorch Ascend:PyTorch 用 Ascend 拡張機能
インストール手順
# 1. Clone repository
git clone https://gitcode.com/Ascend/msmodelslim.git
cd msmodelslim
# 2. Run installation script
bash install.sh
# 3. For Atlas 300I Duo (sparse quantization support)
cd ${PYTHON_SITE_PACKAGES}/msmodelslim/pytorch/weight_compression/compress_graph/
sudo bash build.sh ${CANN_INSTALL_PATH}/ascend-toolkit/latest
chmod -R 550 build
注:モジュールパスの競合を避けるため、ソースディレクトリ内から
msmodelslimコマンドを実行しないでください。
環境設定の詳細については、references/installation.mdを参照してください。
量子化タイプ
| タイプ | 重み | アクティベーション | 説明 | 使用例 |
|---|---|---|---|---|
| W8A8 | INT8 | INT8 | 標準的な 8 ビット量子化 | 汎用、精度と性能のバランス |
| W8A16 | INT8 | FP16 | 重みのみの量子化 | より高い精度が必要な場合(MindIE のみ) |
| W4A8 | INT4 | INT8 | 低ビット重み量子化 | より高い圧縮率 |
| W8A8C8 | INT8 | INT8 + KV Cache | KV Cache 量子化あり | 長いシーケンスの推論 |
| W8A8S | INT8 Sparse | INT8 | スパース量子化 | Atlas 300I Duo の最適化 |
| W16A16S | FP16 Sparse | FP16 | 浮動小数点スパース量子化 | 高い圧縮率が必要な場合 |
量子化タイプの選択
| 優先事項 | 推奨タイプ |
|---|---|
| 精度優先 | W8A16 > W8A8 > W4A8 |
| メモリ優先 | W4A8 > W8A8 > W8A16 |
| 長いシーケンス | W8A8C8(KV Cache 量子化あり) |
| Atlas 300I Duo | W8A8S または W16A16S |
BFLOAT16 モデルに関する注意事項
torch_dtype=bfloat16 の重みを持つモデル(例:Qwen3-30B-A3B)について:
AclNN_Parameter_Error(EZ1001): Tensor self not implemented for DT_BFLOAT16 が発生した場合、msmodelslim の制限ではなく、Docker イメージの問題である可能性があります。
簡易診断:
# Test if torch_npu works correctly
python3 -c "import torch; import torch_npu; a = torch.tensor(1).npu(); print('NPU OK')"
これが失敗する場合、Docker イメージに互換性の問題があります。次の方法をお試しください。
- 別の、または更新済みの Docker イメージを使用する
- CANN のバージョンに合った torch_npu を再インストールする
- BF16 をサポートする CANN 8.3.RC1 以降を使用する
コンテナの設定:NPU デバイスのマッピングを含む適切な Docker コンテナの作成方法については、ascend-dockerを参照してください。msmodelslim 固有のコンテナ設定については、references/docker-setup.mdを参照してください。
アルゴリズムの選択
外れ値抑制アルゴリズム
| アルゴリズム | 説明 | 使用する状況 |
|---|---|---|
| SmoothQuant | アクティベーションと重みを協調スケーリング | 標準的な外れ値抑制 |
| QuaRot | 直交回転行列 | 高い精度が求められる場合 |
| Iterative Smooth | 反復的な平滑化 | 複雑な分布 |
| Flex Smooth | 最適な alpha/beta をグリッド検索 | アーキテクチャが異なる場合 |
| KV Smooth | KV Cache の平滑化 | KV Cache の量子化 |
量子化アルゴリズム
| アルゴリズム | 説明 | 使用する状況 |
|---|---|---|
| AutoRound | 丸め処理のための SignSGD 最適化 | 4 ビット超低ビット量子化 |
| GPTQ | 列単位の最適化 | 高精度の重み量子化 |
| SSZ | スケール/オフセットの反復探索 | 重み分布に偏りがある場合 |
| PDMIX | 動的(prefill)+ 静的(decode) | 大規模モデルの推論 |
| FA3 | ヘッドごとの INT8 アテンション | 長いシーケンス、MLA モデル |
| MinMax | 最小値と最大値の範囲統計 | 基本的な量子化 |
| Histogram | ヒストグラム分布の分析 | 外れ値の除外 |
クイック選択ガイド
- 初心者:
--config_pathにlab_practice/の設定ファイルを指定して、ワンクリック量子化を使用します - 精度優先:QuaRot + AutoRound
- 長いシーケンス:FA3 + KVCache Quant
- カスタムモデル:references/model-integration.md を参照してください
アルゴリズムの詳細は、references/quantization-algorithms.md を参照してください。
対応モデル
大規模言語モデル
| モデルシリーズ | ワンクリック | V0 スクリプト | 備考 |
|---|---|---|---|
| Qwen3 | ✓ | example/Qwen/ | Qwen3-8B/14B/32B |
| Qwen2.5 | ✓ | example/Qwen/ | 7B/32B/72B/Coder |
| Qwen2 | - | example/Qwen/ | 7B/72B |
| DeepSeek-V3 | ✓ | example/DeepSeek/ | V3/V3.1/V3.2、R1 |
| LLaMA | - | example/Llama/ | LLaMA2、LLaMA3.1 |
| GLM | - | example/GLM/ | GLM-4、GLM-5 |
| InternLM2 | - | example/InternLM2/ | InternLM2-20B |
| Kimi | - | example/Kimi/ | Kimi K2 |
| HunYuan | - | example/HunYuan/ | HunYuan-A52B |
MoE モデル
| モデル | ワンクリック | 備考 |
|---|---|---|
| Qwen3-MoE | ✓ | Qwen3-30B-A3B、Qwen3-235B-A22B |
| DeepSeek MoE | ✓ | DeepSeek-V2、V3 シリーズ |
マルチモーダルモデル
| 種類 | モデル | サンプルスクリプト |
|---|---|---|
| 視覚・言語 | Qwen-VL、Qwen2-VL、Qwen3-VL、InternVL2、LLaVA、GLM-4.1V | example/multimodal_vlm/ |
| 生成 | FLUX、SD3、HunyuanVideo、OpenSoraPlan、Wan2.1 | example/multimodal_sd/ |
完全な対応状況一覧は、references/model-support.md を参照してください。
カスタムモデルの統合
クイック概要
- アダプターファイルを作成:
msmodelslim/model/my_model/model_adapter.py - アダプタークラスを定義:
TransformersModelとインターフェースクラスを継承します - インターフェースを実装:
handle_dataset、init_model、generate_model_visitなど - モデルを登録:
config/config.iniに追加します
例
from msmodelslim.model.interface_hub import ModelSlimPipelineInterfaceV1
from msmodelslim.model.common.transformers import TransformersModel
class MyModelAdapter(TransformersModel, ModelSlimPipelineInterfaceV1):
def handle_dataset(self, dataset, device):
return self._get_tokenized_data(dataset, device)
def init_model(self, device):
return self._load_model(device)
def generate_model_visit(self, model):
from msmodelslim.model.common.layer_wise_forward import generated_decoder_layer_visit_func
yield from generated_decoder_layer_visit_func(model)
def generate_model_forward(self, model, inputs):
from msmodelslim.model.common.layer_wise_forward import transformers_generated_forward_func
yield from transformers_generated_forward_func(model, inputs)
詳しい手順は、references/model-integration.md と scripts/model_adapter_template.py を参照してください。
精度の自動調整
敏感なレイヤーの分析
# Analyze model sensitivity
msmodelslim analyze --model_path /path/to/model --model_type Qwen2.5-7B-Instruct
分析アルゴリズム:
- std:標準偏差ベース(一般的な用途に推奨)
- quantile:分位数/IQR ベース(裾の長い分布向け)
- kurtosis:尖度ベース(極端な値の検出向け)
自動調整戦略
Standing High:精度を維持しながら、フォールバックレイヤーを最小限に抑えるための二分探索です。
# Use auto-tuning config
msmodelslim quant \
--model_path /path/to/model \
--save_path /path/to/output \
--model_type Qwen2.5-7B-Instruct \
--config_path /path/to/auto_tuning_config.yaml
調整戦略については、references/precision-tuning.md を参照してください。
デプロイ
vLLM-Ascend
# Online service
vllm serve /path/to/quantized-model \
--served-model-name "Qwen2.5-7B-w8a8" \
--max-model-len 4096 \
--quantization ascend
# Offline inference (Python)
from vllm import LLM, SamplingParams
llm = LLM(
model="/path/to/quantized-model",
max_model_len=4096,
quantization="ascend"
)
outputs = llm.generate(["Hello"], SamplingParams(temperature=0.6))
MindIE
# Deploy with MindIE
# See MindIE documentation for details
重みの変換
# Convert to AutoAWQ/AutoGPTQ format
python3 example/common/ms_to_vllm.py --input /path/to/quantized --output /path/to/converted
デプロイの詳細は、references/deployment.md を参照してください。
出力ファイル
量子化後、出力ディレクトリには次のファイルが含まれます。
output/
├── config.json # Original model config
├── generation_config.json # Generation config
├── quant_model_description.json # Quantization description
├── quant_model_weight_w8a8.safetensors # Quantized weights
├── tokenizer_config.json # Tokenizer config
├── tokenizer.json # Tokenizer vocabulary
└── vocab.json # Vocabulary (if applicable)
トラブルシューティング
よくある問題
Q: 量子化中にメモリ不足になりますか?
# Use layer-by-layer quantization (default in V1)
# Or use CPU quantization
msmodelslim quant --device cpu ...
Q: 量子化後に精度が低下しました。
- より高精度な型を使用します(W4A8 ではなく W8A8)
- ベストプラクティスの設定については、
lab_practice/を確認します - 外れ値抑制アルゴリズムを有効にします
- references/precision-tuning.md を参照してください
Q: モデルの種類がサポートされていません。
- references/model-support.md を確認します
- カスタムアダプターを実装します:references/model-integration.md
Q: デバッグログを有効にするにはどうすればよいですか?
export MSMODELSLIM_LOG_LEVEL=DEBUG
msmodelslim quant ...
スクリプトとアセット
スクリプト
- scripts/check_env.sh - 環境チェック
- scripts/quantize_model.sh - 量子化テンプレート
- scripts/model_adapter_template.py - モデルアダプターテンプレート
設定テンプレート(assets/)
- assets/quant_config_w8a8.yaml - W8A8 設定
- assets/quant_config_w4a8.yaml - W4A8 設定
- assets/quant_config_sparse.yaml - スパース量子化
- assets/quant_config_pdmix.yaml - PDMIX 設定
公式リファレンス
- ドキュメント: https://msmodelslim.readthedocs.io/zh-cn/latest/
- GitCode リポジトリ: https://gitcode.com/Ascend/msmodelslim
- vLLM-Ascend: https://docs.vllm.ai/projects/ascend/en/latest/
- Huawei Ascend: https://www.hiascend.com/document
関連スキル
- atc-model-converter - Ascend 向けモデル変換
- npu-smi - NPU デバイス管理
- hccl-test - HCCL パフォーマンステスト