モデル概要
モデル特徴
モデル能力
使用事例
🚀 Mistral-Small-3.2-24B-Instruct-2506
Mistral-Small-3.2-24B-Instruct-2506は、画像テキストからテキストへのモデルであり、Mistral-Small-3.1-24B-Instruct-2503の小規模な更新バージョンです。このモデルは、指示の遵守、繰り返しエラーの削減、関数呼び出しなどの面で改善されており、ユーザーにより正確で効率的なサービスを提供します。
🚀 クイックスタート
このモデルは以下の言語をサポートしています:英語、フランス語、ドイツ語、スペイン語、ポルトガル語、イタリア語、日本語、韓国語、ロシア語、中国語、アラビア語、ペルシャ語、インドネシア語、マレー語、ネパール語、ポーランド語、ルーマニア語、セルビア語、スウェーデン語、トルコ語、ウクライナ語、ベトナム語、ヒンディー語、ベンガル語。
ライセンスはApache - 2.0で、使用するライブラリ名はvllm
です。
✨ 主な機能
Mistral-Small-3.2-24B-Instruct-2506は、以下の点で改善されています:
- 指示の遵守:Small - 3.2は、正確な指示に従う能力が向上しています。
- 繰り返しエラー:Small - 3.2は、無限生成や繰り返しのある回答を減らしています。
- 関数呼び出し:Small - 3.2の関数呼び出しテンプレートはより堅牢です(詳細はこちらと例を参照)。
その他の点では、Small - 3.2はMistral-Small-3.1-24B-Instruct-2503と同等以上の性能を発揮します。
その主要な特性は、Mistral-Small-3.1-24B-Instruct-2503と同じです。
📊 ベンチマーク結果
私たちはMistral-Small-3.2-24BをMistral-Small-3.1-24B-Instruct-2503と比較しました。他の同規模のモデルとの詳細な比較については、Mistral-Small-3.1のベンチマークを参照してください。
テキスト性能
指示の遵守/チャット/語調
モデル | Wildbench v2 | Arena Hard v2 | IF(内部;正解率) |
---|---|---|---|
Small 3.1 24B Instruct | 55.6% | 19.56% | 82.75% |
Small 3.2 24B Instruct | 65.33% | 43.1% | 84.78% |
無限生成の発生率
Small 3.2は、挑戦的で長く繰り返しのあるプロンプトを処理する際、無限生成の発生率を半分に抑えています。
モデル | 無限生成の発生率(内部;数値が低いほど良い) |
---|---|
Small 3.1 24B Instruct | 2.11% |
Small 3.2 24B Instruct | 1.29% |
STEM分野
モデル | MMLU | MMLU Pro(5回少サンプル思考連鎖) | MATH | GPQA Main(5回少サンプル思考連鎖) | GPQA Diamond(5回少サンプル思考連鎖) | MBPP Plus - Pass@5 | HumanEval Plus - Pass@5 | SimpleQA(総正解率) |
---|---|---|---|---|---|---|---|---|
Small 3.1 24B Instruct | 80.62% | 66.76% | 69.30% | 44.42% | 45.96% | 74.63% | 88.99% | 10.43% |
Small 3.2 24B Instruct | 80.50% | 69.06% | 69.42% | 44.22% | 46.13% | 78.33% | 92.90% | 12.10% |
ビジュアル性能
モデル | MMMU | Mathvista | ChartQA | DocVQA | AI2D |
---|---|---|---|---|---|
Small 3.1 24B Instruct | 64.00% | 68.91% | 86.24% | 94.08% | 93.72% |
Small 3.2 24B Instruct | 62.50% | 67.09% | 87.4% | 94.86% | 92.91% |
📦 インストール
vLLM(推奨)
このモデルを実行するには、vLLMの使用をおすすめします。
インストール手順
vLLM >= 0.9.1
をインストールしてください:
pip install vllm --upgrade
これにより、自動的にmistral_common >= 1.6.2
がインストールされるはずです。
インストールが成功したかどうかを確認するには、以下のコマンドを実行します:
python -c "import mistral_common; print(mistral_common.__version__)"
また、既成のDockerイメージを使用することもできますし、Docker Hubから取得することも可能です。
サービスの起動
Mistral-Small-3.2-24B-Instruct-2506は、サーバー/クライアント環境での使用をおすすめします。
- サーバーを起動します:
vllm serve mistralai/Mistral-Small-3.2-24B-Instruct-2506 --tokenizer_mode mistral --config_format mistral --load_format mistral --tool-call-parser mistral --enable-auto-tool-choice --limit_mm_per_prompt 'image=10' --tensor-parallel-size 2
注意:Mistral-Small-3.2-24B-Instruct-2506をGPU上でbf16またはfp16形式で実行するには、約55GBのGPUメモリが必要です。
- クライアントをテストするために、以下の簡単なPythonコードを使用できます。
💻 使用例
基本的な使用法
ビジュアル推論
Mistral-Small-3.2-24B-Instruct-2506のビジュアル機能を利用して、与えられたシチュエーションで最適な選択を行います。
from datetime import datetime, timedelta
from openai import OpenAI
from huggingface_hub import hf_hub_download
# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
TEMP = 0.15
MAX_TOK = 131072
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
def load_system_prompt(repo_id: str, filename: str) -> str:
file_path = hf_hub_download(repo_id=repo_id, filename=filename)
with open(file_path, "r") as file:
system_prompt = file.read()
today = datetime.today().strftime("%Y-%m-%d")
yesterday = (datetime.today() - timedelta(days=1)).strftime("%Y-%m-%d")
model_name = repo_id.split("/")[-1]
return system_prompt.format(name=model_name, today=today, yesterday=yesterday)
model_id = "mistralai/Mistral-Small-3.2-24B-Instruct-2506"
SYSTEM_PROMPT = load_system_prompt(model_id, "SYSTEM_PROMPT.txt")
image_url = "https://static.wikia.nocookie.net/essentialsdocs/images/7/70/Battle.png/revision/latest?cb=20220523172438"
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": [
{
"type": "text",
"text": "What action do you think I should take in this situation? List all the possible actions and explain why you think they are good or bad.",
},
{"type": "image_url", "image_url": {"url": image_url}},
],
},
]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=TEMP,
max_tokens=MAX_TOK,
)
print(response.choices[0].message.content)
# In this situation, you are playing a Pokémon game where your Pikachu (Level 42) is facing a wild Pidgey (Level 17). Here are the possible actions you can take and an analysis of each:
# 1. **FIGHT**:
# - **Pros**: Pikachu is significantly higher level than the wild Pidgey, which suggests that it should be able to defeat Pidgey easily. This could be a good opportunity to gain experience points and possibly items or money.
# - **Cons**: There is always a small risk of Pikachu fainting, especially if Pidgey has a powerful move or a status effect that could hinder Pikachu. However, given the large level difference, this risk is minimal.
# 2. **BAG**:
# - **Pros**: You might have items in your bag that could help in this battle, such as Potions, Poké Balls, or Berries. Using an item could help you capture the Pidgey or heal your Pikachu if needed.
# - **Cons**: Using items might not be necessary given the level difference. It could be more efficient to just fight and defeat the Pidgey quickly.
# 3. **POKÉMON**:
# - **Pros**: You might have another Pokémon in your party that is better suited for this battle or that you want to gain experience. Switching Pokémon could also be a strategic move if you want to train a lower-level Pokémon.
# - **Cons**: Switching Pokémon might not be necessary since Pikachu is at a significant advantage. It could also waste time and potentially give Pidgey a turn to attack.
# 4. **RUN**:
# - **Pros**: Running away could save time and conserve your Pokémon's health and resources. If you are in a hurry or do not need the experience or items, running away is a safe option.
# - **Cons**: Running away means you miss out on the experience points and potential items or money that you could gain from defeating the Pidgey. It also means you do not get the chance to capture the Pidgey if you wanted to.
# ### Recommendation:
# Given the significant level advantage, the best action is likely to **FIGHT**. This will allow you to quickly defeat the Pidgey, gain experience points, and potentially earn items or money. If you are concerned about Pikachu's health, you could use an item from your **BAG** to heal it before or during the battle. Running away or switching Pokémon does not seem necessary in this situation.
高度な使用法
関数呼び出し
Mistral-Small-3.2-24B-Instruct-2506は、vLLMを通じた関数/ツール呼び出しタスクで優れた性能を発揮します。例えば:
from openai import OpenAI
from huggingface_hub import hf_hub_download
# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
TEMP = 0.15
MAX_TOK = 131072
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
def load_system_prompt(repo_id: str, filename: str) -> str:
file_path = hf_hub_download(repo_id=repo_id, filename=filename)
with open(file_path, "r") as file:
system_prompt = file.read()
return system_prompt
model_id = "mistralai/Mistral-Small-3.2-24B-Instruct-2506"
SYSTEM_PROMPT = load_system_prompt(model_id, "SYSTEM_PROMPT.txt")
image_url = "https://huggingface.co/datasets/patrickvonplaten/random_img/resolve/main/europe.png"
tools = [
{
"type": "function",
"function": {
"name": "get_current_population",
"description": "Get the up-to-date population of a given country.",
"parameters": {
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "The country to find the population of.",
},
"unit": {
"type": "string",
"description": "The unit for the population.",
"enum": ["millions", "thousands"],
},
},
"required": ["country", "unit"],
},
},
},
{
"type": "function",
"function": {
"name": "rewrite",
"description": "Rewrite a given text for improved clarity",
"parameters": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "The input text to rewrite",
}
},
},
},
},
]
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": "Could you please make the below article more concise?\n\nOpenAI is an artificial intelligence research laboratory consisting of the non-profit OpenAI Incorporated and its for-profit subsidiary corporation OpenAI Limited Partnership.",
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "bbc5b7ede",
"type": "function",
"function": {
"name": "rewrite",
"arguments": '{"text": "OpenAI is an artificial intelligence research laboratory consisting of the non-profit OpenAI Incorporated and its for-profit subsidiary corporation OpenAI Limited Partnership."}',
},
}
],
},
{
"role": "tool",
"content": '{"action":"rewrite","outcome":"OpenAI is a FOR-profit company."}',
"tool_call_id": "bbc5b7ede",
"name": "rewrite",
},
{
"role": "assistant",
"content": "---\n\nOpenAI is a FOR-profit company.",
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Can you tell me what is the biggest country depicted on the map?",
},
{
"type": "image_url",
"image_url": {
"url": image_url,
},
},
],
}
]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=TEMP,
max_tokens=MAX_TOK,
tools=tools,
tool_choice="auto",
)
assistant_message = response.choices[0].message.content
print(assistant_message)
# The biggest country depicted on the map is Russia.
messages.extend([
{"role": "assistant", "content": assistant_message},
{"role": "user", "content": "What is the population of that country in millions?"},
])
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=TEMP,
max_tokens=MAX_TOK,
tools=tools,
tool_choice="auto",
)
print(response.choices[0].message.tool_calls)
# [ChatCompletionMessageToolCall(id='3e92V6Vfo', function=Function(arguments='{"country": "Russia", "unit": "millions"}', name='get_current_population'), type='function')]
指示の遵守
Mistral-Small-3.2-24B-Instruct-2506は、与えられた指示に厳密に従うことができます。
from openai import OpenAI
from huggingface_hub import hf_hub_download
# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
TEMP = 0.15
MAX_TOK = 131072
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
def load_system_prompt(repo_id: str, filename: str) -> str:
file_path = hf_hub_download(repo_id=repo_id, filename=filename)
with open(file_path, "r") as file:
system_prompt = file.read()
return system_prompt
model_id = "mistralai/Mistral-Small-3.2-24B-Instruct-2506"
SYSTEM_PROMPT = load_system_prompt(model_id, "SYSTEM_PROMPT.txt")
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": "Write me a sentence where every word starts with the next letter in the alphabet - start with 'a' and end with 'z'.",
},
]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=TEMP,
max_tokens=MAX_TOK,
)
assistant_message = response.choices[0].message.content
print(assistant_message)
# Here's a sentence where each word starts with the next letter of the alphabet, starting from 'a' and ending with 'z':
# "Always brave ca
注意事項
⚠️ 重要な注意事項
- 比較的低い温度、例えば
temperature = 0.15
を使用することをおすすめします。- モデルにシステムプロンプトを追加して、より良い結果を得ることができます。このモデルを汎用ヘルパーとして使用する場合は、SYSTEM_PROMPT.txtファイルに記載されているプロンプトを使用することをおすすめします。
📄 ライセンス
このプロジェクトはApache - 2.0ライセンスの下で提供されています。









