Mistral Small 24B Instruct 2501 Quantized.w8a8
Model Overview
Model Features
Model Capabilities
Use Cases
🚀 Mistral-Small-24B-Instruct-2501 量子化モデル(w8a8)
このプロジェクトでは、量子化処理された Mistral-Small-24B-Instruct-2501 モデルを提供しています。このモデルは、最適化によりGPUメモリの要件を大幅に削減し、計算スループットを向上させており、様々な自然言語処理シーンに適用可能です。
サポート言語
以下の言語をサポートしています。
- 英語、フランス語、ドイツ語、スペイン語、ポルトガル語、イタリア語、日本語、韓国語、ロシア語、中国語、アラビア語、ペルシャ語、インドネシア語、マレー語、ネパール語、ポーランド語、ルーマニア語、セルビア語、スウェーデン語、トルコ語、ウクライナ語、ベトナム語、ヒンディー語、ベンガル語
ライセンス
Apache-2.0 ライセンスを採用しています。
ライブラリ名
vllm
ベースモデル
- mistralai/Mistral-Small-24B-Instruct-2501
タスクタイプ
画像テキストからテキストへ
タグ
- neuralmagic、redhat、llmcompressor、quantized、int8
🚀 クイックスタート
このモデルは vLLM バックエンドを使用して効率的にデプロイできます。以下はサンプルコードです。
from vllm import LLM, SamplingParams
from transformers import AutoProcessor
model_id = "RedHatAI/Mistral-Small-24B-Instruct-2501-FP8-quantized.w8a8"
number_gpus = 1
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, max_tokens=256)
processor = AutoProcessor.from_pretrained(model_id)
messages = [{"role": "user", "content": "Give me a short introduction to large language model."}]
prompts = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
llm = LLM(model=model_id, tensor_parallel_size=number_gpus)
outputs = llm.generate(prompts, sampling_params)
generated_text = outputs[0].outputs[0].text
print(generated_text)
vLLM は OpenAI 互換のサービスもサポートしています。詳細は ドキュメント を参照してください。
✨ 主な機能
モデル概要
- モデルアーキテクチャ:Mistral3ForConditionalGeneration
- 入力:テキスト/画像
- 出力:テキスト
- モデル最適化:
- 活性化量子化:INT8
- 重み量子化:INT8
- 想定使用例:
- 高速応答の対話エージェント。
- 低遅延の関数呼び出し。
- 微調整による特定分野の専門知識の実現。
- 機密データを扱う愛好者や組織向けのローカル推論。
- プログラミングと数学的推論。
- 長文書理解。
- 視覚理解。
- 不適用シーン:適用される法令(貿易コンプライアンス法を含む)に違反する方法での使用。モデルが正式にサポートしていない言語環境での使用。
- リリース日:2025年3月3日
- バージョン:1.0
- モデル開発者:Red Hat (Neural Magic)
モデル最適化の詳細
このモデルは、Mistral-Small-24B-Instruct-2501 の活性化と重みを INT8 データ型に量子化することで得られました。この最適化により、重みと活性化に必要なビット数が16ビットから8ビットに減少し、GPUメモリの要件が約50%削減され、行列乗算の計算スループットが約2倍に向上します。重みの量子化により、ディスク空間の要件も約50%削減されます。
Transformerブロック内の線形演算子の重みと活性化のみが量子化されます。重みは対称的な静的チャネルごとのスキームで量子化され、活性化は対称的な動的トークンごとのスキームで量子化されます。量子化プロセスには、SmoothQuant と GPTQ アルゴリズムの組み合わせが適用されており、具体的な実装は llm-compressor ライブラリにあります。
📦 インストール
Red Hat AI 推論サーバーへのデプロイ
podman run --rm -it --device nvidia.com/gpu=all -p 8000:8000 \
--ipc=host \
--env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
--env "HF_HUB_OFFLINE=0" -v ~/.cache/vllm:/home/vllm/.cache \
--name=vllm \
registry.access.redhat.com/rhaiis/rh-vllm-cuda \
vllm serve \
--tensor-parallel-size 8 \
--max-model-len 32768 \
--enforce-eager --model RedHatAI/Mistral-Small-24B-Instruct-2501-quantized.w8a8
詳細は Red Hat AI 推論サーバーのドキュメント を参照してください。
Red Hat Enterprise Linux AI へのデプロイ
# Red Hat レジストリから docker を通じてモデルをダウンロード
# 注意:--model-dir を指定しない限り、モデルは ~/.cache/instructlab/models にダウンロードされます
ilab model download --repository docker://registry.redhat.io/rhelai1/mistral-small-24b-instruct-2501-quantized-w8a8:1.5
# ilab を通じてモデルをサーブ
ilab model serve --model-path ~/.cache/instructlab/models/mistral-small-24b-instruct-2501-quantized-w8a8
# モデルと対話
ilab model chat --model ~/.cache/instructlab/models/mistral-small-24b-instruct-2501-quantized-w8a8
詳細は Red Hat Enterprise Linux AI のドキュメント を参照してください。
Red Hat Openshift AI へのデプロイ
# ServingRuntime を使用して vllm サーバーを設定
# 保存先: vllm-servingruntime.yaml
apiVersion: serving.kserve.io/v1alpha1
kind: ServingRuntime
metadata:
name: vllm-cuda-runtime # 任意の変更: 一意の名前を設定
annotations:
openshift.io/display-name: vLLM NVIDIA GPU ServingRuntime for KServe
opendatahub.io/recommended-accelerators: '["nvidia.com/gpu"]'
labels:
opendatahub.io/dashboard: 'true'
spec:
annotations:
prometheus.io/port: '8080'
prometheus.io/path: '/metrics'
multiModel: false
supportedModelFormats:
- autoSelect: true
name: vLLM
containers:
- name: kserve-container
image: quay.io/modh/vllm:rhoai-2.20-cuda # 必要に応じて変更。AMDの場合は: quay.io/modh/vllm:rhoai-2.20-rocm
command:
- python
- -m
- vllm.entrypoints.openai.api_server
args:
- "--port=8080"
- "--model=/mnt/models"
- "--served-model-name={{.Name}}"
env:
- name: HF_HOME
value: /tmp/hf_home
ports:
- containerPort: 8080
protocol: TCP
# モデルを vllm サーバーにアタッチ。これは NVIDIA のテンプレートです
# 保存先: inferenceservice.yaml
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
annotations:
openshift.io/display-name: mistral-small-24b-instruct-2501-quantized-w8a8 # 任意の変更
serving.kserve.io/deploymentMode: RawDeployment
name: mistral-small-24b-instruct-2501-quantized-w8a8 # モデル名を指定。この値はペイロードでモデルを呼び出す際に使用されます
labels:
opendatahub.io/dashboard: 'true'
spec:
predictor:
maxReplicas: 1
minReplicas: 1
model:
modelFormat:
name: vLLM
name: ''
resources:
limits:
cpu: '2' # これはモデル固有の設定です
memory: 8Gi # これはモデル固有の設定です
nvidia.com/gpu: '1' # これはアクセラレータ固有の設定です
requests: # このブロックも同様です
cpu: '1'
memory: 4Gi
nvidia.com/gpu: '1'
runtime: vllm-cuda-runtime # 上記の ServingRuntime 名と一致する必要があります
storageUri: oci://registry.redhat.io/rhelai1/modelcar-mistral-small-24b-instruct-2501-quantized-w8a8:1.5
tolerations:
- effect: NoSchedule
key: nvidia.com/gpu
operator: Exists
# まず、モデルをデプロイするプロジェクトに移動することを確認してください
# oc project <プロジェクト名>
# モデルを実行するために2つのリソースを適用します
# ServingRuntime を適用
oc apply -f vllm-servingruntime.yaml
# InferenceService を適用
oc apply -f qwen-inferenceservice.yaml
# 以下の <推論サービス名> と <クラスターエントリードメイン名> を置き換えてください。
# - わからない場合は、`oc get inferenceservice` を実行して URL を探してください。
# curl を使用してサーバーを呼び出す:
curl https://<推論サービス名>-predictor-default.<ドメイン名>/v1/chat/completions
-H "Content-Type: application/json" \
-d '{
"model": "mistral-small-24b-instruct-2501-quantized-w8a8",
"stream": true,
"stream_options": {
"include_usage": true
},
"max_tokens": 1,
"messages": [
{
"role": "user",
"content": "How can a bee fly when its wings are so small?"
}
]
}'
詳細は Red Hat Openshift AI のドキュメント を参照してください。
🔧 技術詳細
モデル作成
このモデルは llm-compressor を使用して作成されました。以下は作成コードです。
from transformers import AutoTokenizer, AutoModelForCausalLM
from llmcompressor.modifiers.quantization import GPTQModifier
from llmcompressor.modifiers.smoothquant import SmoothQuantModifier
from llmcompressor.transformers import oneshot
from datasets import load_dataset
# モデルをロード
model_stub = "mistralai/Mistral-Small-24B-Instruct-2501"
model_name = model_stub.split("/")[-1]
num_samples = 1024
max_seq_len = 8192
tokenizer = AutoTokenizer.from_pretrained(model_stub)
model = AutoModelForCausalLM.from_pretrained(
model_stub,
device_map="auto",
torch_dtype="auto",
)
# データ処理
def preprocess_text(example):
text = tokenizer.apply_chat_template(example["messages"], tokenize=False, add_generation_prompt=False)
return tokenizer(text, padding=False, max_length=max_seq_len, truncation=True)
ds = load_dataset("neuralmagic/calibration", name="LLM", split="train").select(range(num_samples))
ds = ds.map(preprocess_text, remove_columns=ds.column_names)
# 量子化アルゴリズムとスキームを設定
recipe = [
SmoothQuantModifier(
smoothing_strength=0.9,
mappings=[
[["re:.*q_proj", "re:.*k_proj", "re:.*v_proj"], "re:.*input_layernorm"],
[["re:.*gate_proj", "re:.*up_proj"], "re:.*post_attention_layernorm"],
[["re:.*down_proj"], "re:.*up_proj"],
],
),
GPTQModifier(
ignore=["lm_head"],
sequential_targets=["MistralDecoderLayer"],
dampening_frac=0.1,
targets="Linear",
scheme="W8A8",
),
]
# 量子化を適用
oneshot(
model=model,
dataset=ds,
recipe=recipe,
max_seq_length=max_seq_len,
num_calibration_samples=num_samples
)
# 圧縮テンソル形式でディスクに保存
save_path = model_name + "-quantized.w8a8"
model.save_pretrained(save_path)
processor.save_pretrained(save_path)
print(f"モデルとトークナイザーが保存されました: {save_path}")
モデル評価
このモデルは、OpenLLM ランキング V1 と V2 で評価されています。以下のコマンドを使用しています。
OpenLLM ランキング V1
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Mistral-Small-24B-Instruct-2501-FP8-Dynamic",dtype=auto,add_bos_token=True,max_model_len=4096,tensor_parallel_size=1,gpu_memory_utilization=0.8,enable_chunked_prefill=True,trust_remote_code=True \
--tasks openllm \
--write_out \
--batch_size auto \
--output_path output_dir \
--show_config
OpenLLM ランキング V2
lm_eval \
--model vllm \
--model_args pretrained="neuralmagic/Mistral-Small-24B-Instruct-2501-FP8-Dynamic",dtype=auto,add_bos_token=False,max_model_len=4096,tensor_parallel_size=1,gpu_memory_utilization=0.8,enable_chunked_prefill=True,trust_remote_code=True \
--apply_chat_template \
--fewshot_as_multiturn \
--tasks leaderboard \
--write_out \
--batch_size auto \
--output_path output_dir \
--show_config
正確性
OpenLLM ランキング V1 評価スコア
指標 | mistralai/Mistral-Small-24B-Instruct-2501 | nm-testing/Mistral-Small-24B-Instruct-2501-quantized.w8a8 |
---|---|---|
ARC-Challenge (Acc-Norm, 25-shot) | 72.18 | 68.86 |
GSM8K (Strict-Match, 5-shot) | 90.14 | 90.00 |
HellaSwag (Acc-Norm, 10-shot) | 85.05 | 85.06 |
MMLU (Acc, 5-shot) | 80.69 | 80.25 |
TruthfulQA (MC2, 0-shot) | 65.55 | 65.69 |
Winogrande (Acc, 5-shot) | 83.11 | 81.69 |
平均スコア | 79.45 | 78.59 |
回復率 (%) | 100.00 | 98.92 |
📄 ライセンス
このプロジェクトは、Apache-2.0 ライセンスを採用しています。



