mistral-inference

Official inference library for Mistral models

ノーコード・ローコードOpenAIの代替Apache-2.0
10,759 スター1,035 フォーク
AIによる要約
ひとことで言うと

Mistral社が開発した高性能な対話型AI(人工知能)を、自分のサーバーやパソコン上で無料で動かすためのソフトウェアです。

こんな方におすすめ

・企業:社内の機密情報を外部サービスに送らずに済むため、情報漏えいリスクを抑えながら文章作成や質問応答の自動化、社内ツールへのAI組み込みが実現できます。 ・スタートアップ:ChatGPTなどの有料APIにかかるコストを削減しつつ、コード生成や数学計算に特化したモデルを選んで使い分けることで、開発スピードと費用対効果を両立できます。 ・個人事業主・フリーランス:月額料金なしで会話型AIや画像を読み取れるAIを手元の環境で試せるため、小規模な業務効率化や学習目的での活用が気軽に始められます。

有料サービスとの違い

ChatGPTなどのクラウド型サービスと異なり、データが外部に送信されないため情報管理が自社で完結し、利用量に応じた課金も発生しません。また、用途に合わせて対話・コード生成・数学計算・画像認識など複数の専門モデルを自由に選んで組み合わせられる点も大きな強みです。

ミストラルの推論

このリポジトリには Mistral モデルを実行するための最小限のコードが含まれています。

ブログ7B: https://mistral.ai/news/announcing-mistral-7b/
ブログ8x7B: https://mistral.ai/news/mixtral-of-experts/
ブログ 8x22B: https://mistral.ai/news/mixtral-8x22b/
ブログ・コデストラル22B:https://mistral.ai/news/codestral
ブログ・コーデストラル・マンバ7B: https://mistral.ai/news/codestral-mamba/
ブログ・マスストラル7B:https://mistral.ai/news/mathstral/୧⃛(๑⃙⃘◡̈︎๑⃙⃘) ブログ・ネモ: https://mistral.ai/news/mistral-nemo/ ㊤。 ブログ・ミストラル大2: https://mistral.ai/news/mistral-large-2407/ ˶ଘ ブログ・ピクトラル12B: https://mistral.ai/news/pixtral-12b/ ブログ・ミストラル小3.1: https://mistral.ai/news/mistral-small-3-1/

ディスコードhttps://discord.com/invite/mistralai ドキュメント:https://docs.mistral.ai/ ガードレールhttps://docs.mistral.ai/usage/guardrailing

インストール

注意: mistral-inference のインストールには GPU を使用する。なぜなら、現在 xformers がインストールされている必要があり、xformers 自体がインストールに GPU を必要とするからである。

PyPI

pip install mistral-inference

ローカル

cd $HOME && git clone https://github.com/mistralai/mistral-inference
cd $HOME/mistral-inference && poetry install .

モデルのダウンロード

直接リンク

| モデル名|ダウンロード|md5sum |-------------|-------|-------| | 7Bインストラクト | https://models.mistralcdn.com/mistral-7b-v0-3/mistral-7B-Instruct-v0.3.tar | 80b71fcb6416085bcb4efad86dfb4d52 | | 8x7B インストラクター|https://models.mistralcdn.com/mixtral-8x7b-v0-1/Mixtral-8x7B-v0.1-Instruct.tar (近日アップデートモデル登場!) | 8e2d3930145dc43d3084396f49d38a3f | | 8x22 インストラクト | https://models.mistralcdn.com/mixtral-8x22b-v0-3/mixtral-8x22B-Instruct-v0.3.tar | 471a02a6902706a2f1e44a693813855b | 7B Base | https://models.mistralcdn.com/mistral-7b-v0-3/mistral-7B-v0.3.tar | 0663b293810d7571dad25dae2f2a5806 | | 8x7B | 8x7B | 近日アップデートモデル登場! | - | | 8x22B | https://models.mistralcdn.com/mixtral-8x22b-v0-3/mixtral-8x22B-v0.3.tar | a2fa75117174f87d1197e3a4eb50371a | | コードストラル 22B | https://models.mistralcdn.com/codestral-22b-v0-1/codestral-22B-v0.1.tar | 1ea95d474a1d374b1d1b20a8e0159de3 | | Mathstral 7B | https://models.mistralcdn.com/mathstral-7b-v0-1/mathstral-7B-v0.1.tar | 5f05443e94489c261462794b1016f10b | | コードストラルマンバ 7B | https://models.mistralcdn.com/codestral-mamba-7b-v0-1/codestral-mamba-7B-v0.1.tar | d3993e4024d1395910c55db0d11db163 | | ネモ・ベース|https://models.mistralcdn.com/mistral-nemo-2407/mistral-nemo-base-2407.tar|`c5d079ac4b55fc1ae35f51f0a3c0eb83` |

| ミストラル ラージ2 | https://models.mistralcdn.com/mistral-large-2407/mistral-large-instruct-2407.tar | fc602155f9e39151fba81fcaab2fa7c4 |

注意

  • 重要**です:
  • 上記のモデルはすべて関数呼び出しをサポートしています。例えば、Mistral 7B Base/Instruct v3 は Mistral 7B Base/Instruct v2 のマイナーアップデートで、関数呼び出し機能が追加されています。
  • 近日発売」のモデルにも関数呼び出し機能が追加される予定です。
  • 旧バージョンのモデルはdocsからダウンロードできます。

ハギング・フェイス・ハブより

名前 ID URL
ピクストラル ラージ インストラクト|mistralai/ピクストラル ラージ インストラクト-2411|https://huggingface.co/mistralai/Pixtral-Large-Instruct-2411|
ピクストラル12Bベース|mistralai/Pixtral-12B-Base-2409|https://huggingface.co/mistralai/Pixtral-12B-Base-2409|
Pixtral 12B mistralai/Pixtral-12B-2409 https://huggingface.co/mistralai/Pixtral-12B-2409
ミストラル・スモール3.1 24Bベース mistralai/Mistral-Small-3.1-24B-Base-2503 https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Base-2503
ミストラル・スモール 3.1 24B インストラクト|mistralai/ミストラライ/Mistral-Small-3.1-24B-Instruct-2503|https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Instruct-2503

使用方法

**ニュース!ミストラル・ラージ2が発表された。その能力についてはこちらをお読みください。

モデルを保存するローカルフォルダを作成する

export MISTRAL_MODEL=$HOME/mistral_models
mkdir -p $MISTRAL_MODEL

上記のリンクのいずれかをダウンロードし、内容を展開する:

以下のようにする。 export 12B_DIR=$MISTRAL_MODEL/12B_Nemo wget https://models.mistralcdn.com/mistral-nemo-2407/mistral-nemo-instruct-2407.tar mkdir -p $12B_DIR tar -xf mistral-nemo-instruct-2407.tar -C $12B_DIR


または

または
export M8x7B_DIR=$MISTRAL_MODEL/8x7b_instruct
wget https://models.mistralcdn.com/mixtral-8x7b-v0-1/Mixtral-8x7B-v0.1-Instruct.tar
mkdir -p $M8x7B_DIR
tar -xf Mixtral-8x7B-v0.1-Instruct.tar -C $M8x7B_DIR

Hugging Faceモデルのウェイトについては、Mistral Small 3.1 24B Instructをダウンロードする例があります:

python from pathlib import Path from huggingface_hub import snapshot_download

mistral_models_path = Path.home().joinpath("mistral_models")

model_path = mistral_models_path / "mistral-small-3.1-instruct" model_path.mkdir(parents=True, exist_ok=True)

repo_id = "mistralai/Mistral-Small-3.1-24B-Instruct-2503" です。

snapshot_download( repo_id=repo_id、 allow_patterns=["params.json", "consolidated.safetensors", "tekken.json"]、 local_dir=model_path、 )


## 使い方

以下のセクションでは、コマンドラインインターフェイス(CLI)から、またはPython内で直接モデルを実行する方法の概要を説明します。

### CLI

- デモ

あなたのセットアップでモデルが動作するかテストするには、`mistral-demo`コマンドを実行します。
*例えば、12B Mistral-Nemo モデルは、以下のようにシングル GPU でテストすることができます:

以下のようにします。
mistral-demo $12B_DIR

8x7B8x22B**のような大きなモデルは、マルチGPUセットアップで実行する必要があります。 これらのモデルでは、以下のコマンドを使用することができます:

sh torchrun --nproc-per-node 2 --no-python mistral-demo $M8x7B_DIR


*注意*:もし利用可能であれば、`--nproc-per-node` をより多くの GPU に変更してください。

- チャット

モデルとインタラクティブにチャットを行うには、`mistral-chat` コマンドを使用します。

``sh
mistral-chat $12B_DIR --instruct --max_tokens 1024 --temperature 0.35

大規模なモデルの場合は、torchrun を利用することができる。

torchrun --nproc-per-node 2 --no-python mistral-chat $M8x7B_DIR --instruct

注意:注意*: 必要であれば --nproc-per-node をより多くの GPU に変更してください (*8x22B の場合など)。

  • Codestral**とチャットする。

Codestral](https://mistral.ai/news/codestral/)をコーディングアシスタントとして使用するには、`mistral-chat`を使って以下のコマンドを実行します。 M22B_CODESTRALがダウンロードしたcodestralフォルダへの有効なパス、例えば$HOME/mistral_models/Codestral-22B-v0.1`に設定されていることを確認してください。

sh mistral-chat $M22B_CODESTRAL --instruct --max_tokens 256


Rustでフィボナッチを計算する関数を書いてくれ」*とプロンプトを出すと、モデルは以下のようなものを生成するはずです:

sh
確かに、ここにRustでフィボナッチ数列を計算する関数の簡単な実装があります。この関数は整数 `n` を引数にとり、フィボナッチ数 `n` 番目を返します。

fn fibonacci(n: u32) -> u32 { { フィボナッチ数列を計算する。
    n { にマッチ
        0 => 0,
        1 => 1,
        _ => fibonacci(n - 1) + fibonacci(n - 2)、
    }
}

fn main() {
    let n = 10;
    println!("The {}th Fibonacci number is: {}", n, fibonacci(n));
}

この関数は再帰を使ってフィボナッチ数を計算する。しかし、多くの冗長な計算を行うため、最も効率的な解決策とは言えません。より効率的な解決策は、ループを使ってフィボナッチ数を繰り返し計算することである。

この後、*"Translate it to Python "*などでチャットを続けることができます。

  • Codestral-Mamba**とチャットする。

Codestral-Mamba](https://mistral.ai/news/codestral-mamba/) をコーディングアシスタントとして使用するには、mistral-chat を使って以下のコマンドを実行します。 このとき、$7B_CODESTRAL_MAMBA にダウンロードした codestral-mamba フォルダの有効なパスが設定されていることを確認してください (例 $HOME/mistral_models/mamba-codestral-7B-v0.1)。

さらに、以下のパッケージをインストールする必要があります:

pip install パッケージング mamba-ssm causal-conv1d transformers

をインストールしてください:

sh mistral-chat $7B_CODESTRAL_MAMBA --instruct --max_tokens 256


- Mathstral**とチャットする。

Mathstral](https://mistral.ai/news/mathstral/)をアシスタントとして使用するには、`mistral-chat` を使って以下のコマンドを実行します。
このとき、`$7B_MATHSTRAL` がダウンロードした codestral フォルダへの有効なパス (例 `$HOME/mistral_models/mathstral-7B-v0.1`) に設定されていることを確認してください。

sh
mistral-chat $7B_MATHSTRAL --instruct --max_tokens 256

アルバートは毎週サーフィンをするのが好きだ。1回のサーフィンは4時間で、1時間あたり20ドルかかります。アルバートは5週間でいくら使いますか?"*と促すと、モデルは正しい計算で答えてくれるはずです。

その後、*"Albert would spend how much in a year? "*でチャットを続けることができます。

  • Mistral Small 3.1 24B Instruct とチャットする。

Mistral Small 3.1 24B Instruct](https://mistral.ai/news/mistral-small-3-1/) をアシスタントとして使うには、mistral-chat を使って以下のコマンドを実行します。 MISTRAL_SMALL_3_1_INSTRUCTが、ダウンロードした Mistral Small フォルダの有効なパス、例えば$HOME/mistral_models/mistral-small-3.1-instruct` に設定されていることを確認してください。

``sh mistral-chat $MISTRAL_SMALL_3_1_INSTRUCT --instruct --max_tokens 256


上の画像はどの公園の画像ですか?公園を特定するためのヒントを与えてください。"*と次の画像のURL *https://huggingface.co/datasets/patrickvonplaten/random_img/resolve/main/yosemite.png*でプロンプトを出すと、モデルはヨセミテ公園と答え、それを特定するためのヒントを与えるはずです。

その後、*例えば*"画像の湖の名前は何ですか?"*とチャットを続けることができます。モデルは湖ではなく川だと答えるはずだ。

### パイソン

- 次の指示:

``py
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest


tokenizer = MistralTokenizer.from_file("./mistral-nemo-instruct-v0.1/tekken.json") # 抽出したトークナイザーファイルに変更します。
model = Transformer.from_folder("./mistral-nemo-instruct-v0.1") # 抽出したモデルのディレクトリに変更する。

prompt = "窓拭き業者にパリ中の窓の掃除を頼むとしたら、いくらかかるか。米ドルで妥当な金額を推測してください。"

completion_request = ChatCompletionRequest(messages=[UserMessage(content=prompt)])

トークン = tokenizer.encode_chat_completion(completion_request).tokens

out_tokens, _ = generate([tokens], model, max_tokens=1024, temperature=0.35, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])

print(result)
  • Multimodal Instruction Following

python from pathlib import Path

from huggingface_hub import snapshot_download from mistral_common.protocol.instruct.messages import ImageURLChunk, TextChunk from mistral_common.tokens.tokenizers.mistral import MistralTokenizer from mistral_inference.generate import generate from mistral_inference.transformer import トランスフォーマー

model_path = Path.home().joinpath("mistral_models") / "mistral-small-3.1-instruct" # 抽出したモデルに変更する。

tokenizer = MistralTokenizer.from_file(model_path / "tekken.json") model = Transformer.from_folder(model_path)

url = "https://huggingface.co/datasets/patrickvonplaten/random_img/resolve/main/yosemite.png" prompt = "上の画像はどの公園の画像ですか?公園を特定するヒントを与えてください。"

user_content = [ImageURLChunk(image_url=url), TextChunk(text=prompt)].

tokens, images = tokenizer.instruct_tokenizer.encode_user_content(user_content, False)

out_tokens, _ = generate( [トークン]、 model、 images=[images]、 max_tokens=256、 temperature=0.15、 eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id、 ) result = tokenizer.decode(out_tokens[0])

print("Prompt:", prompt) print("完了:", result)


- 関数呼び出し*:

``py
from mistral_common.protocol.instruct.tool_calls import Function, Tool

completion_request = ChatCompletionRequest(
    tools=[
        ツール(
            function=Function(
                name="get_current_weather"、
                description="現在の天気を取得"、
                parameters={
                    「type":object": "オブジェクト"、
                    「プロパティ":{
                        「location":{
                            "type":"string": "文字列"、
                            "description":「例えば、カリフォルニア州サンフランシスコなど、
                        },
                        "format":{
                            "type":「文字列
                            「enum":enum": ["celsius", "fahrenheit"]、
                            "description":"使用する温度単位。ユーザーの位置情報から推測する、
                        },
                    },
                    "required":[location", "format"]、
                },
            )
        )
    ],
    messages=[
        UserMessage(content="What's the weather like today in Paris?")、
        ],
)

トークン = tokenizer.encode_chat_completion(completion_request).tokens

out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])

print(result)
  • フィル・イン・ザ・ミドル(FIM)*:

mistral-common >= 1.2.0` がインストールされていることを確認してください:

pip install --upgrade mistral-common

次のようにして、コード補完のインフィルをシミュレートできます。

``py from mistral_inference.transformer import Transformer from mistral_inference.generate import generate from mistral_common.tokens.tokenizers.mistral import MistralTokenizer from mistral_common.tokens.instruct.request import FIMRequest

tokenizer = MistralTokenizer.from_model("codestral-22b") model = Transformer.from_folder("./mistral_22b_codestral")

prefix = """def add("") suffix = """ return sum""

request = FIMRequest(prompt=prefix, suffix=suffix)

トークン = tokenizer.encode_fim(request).tokens

out_tokens, _ = generate([tokens], model, max_tokens=256, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id) result = tokenizer.decode(out_tokens[0])

middle = result.split(suffix)[0].strip() print(middle)


### テスト

ロジットの等価性を実行する:

python -m pytest tests


## 配備

deploy` フォルダには、Mistral AI モデルに必要な依存関係を持つ [vLLM](https://M7B_DIR.com/vllm-project/vllm) イメージをビルドするコードが含まれています。このイメージでは、リファレンス実装の代わりに [transformers](https://github.com/huggingface/transformers/) ライブラリが使用されます。ビルドするには

bash
docker build deploy --build-arg MAX_JOBS=8

イメージの実行方法は公式ドキュメントにある。

モデルプラットフォーム

参考文献

[1]:LoRA:大規模言語モデルの低ランク適応, Hu et al.

ライセンス

本ライブラリは Apache 2.0 License に基づいてライセンスされています。詳細はLICENCEファイルを参照してください。

*あなたは、知的財産権を含む第三者の権利を侵害、流用、またはその他の方法で、本ライブラリまたは私たちのモデルを使用してはなりません。