モデル概要
モデル特徴
モデル能力
使用事例
🚀 Codestral-22B-v0.1 モデルカード
Codestral-22B-v0.1は、80種類以上のプログラミング言語の多様なデータセットで学習されたモデルです。Python、Java、C、C++、JavaScript、Bashなどの人気のある言語も含まれています。このモデルは、コードに関する質問に回答したり、特定の指示に従ってコードを生成したりすることができます。
🚀 クイックスタート
インストール
mistralai/Codestral-22B-v0.1
を使用するには、mistral-inferenceを推奨します。
pip install mistral_inference
モデルのダウンロード
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', 'Codestral-22B-v0.1')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Codestral-22B-v0.1", allow_patterns=["params.json", "consolidated.safetensors", "tokenizer.model.v3"], local_dir=mistral_models_path)
✨ 主な機能
- コード生成:特定の指示に従ってコードを生成することができます。
- コード説明:コードの説明やドキュメントを生成することができます。
- FIM(Fill in the Middle):プレフィックスとサフィックスの間のトークンを予測することができます。
💻 使用例
基本的な使用法
mistral_common
を使用したエンコードとデコード
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
mistral_models_path = "MISTRAL_MODELS_PATH"
tokenizer = MistralTokenizer.v3()
completion_request = ChatCompletionRequest(messages=[UserMessage(content="Explain Machine Learning to me in a nutshell.")])
tokens = tokenizer.encode_chat_completion(completion_request).tokens
mistral_inference
を使用した推論
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
model = Transformer.from_folder(mistral_models_path)
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)
Hugging Faceのtransformers
を使用した推論
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("mistralai/Codestral-22B-v0.1")
model.to("cuda")
generated_ids = model.generate(tokens, max_new_tokens=1000, do_sample=True)
# decode with mistral tokenizer
result = tokenizer.decode(generated_ids[0].tolist())
print(result)
高度な使用法
チャット
mistral_inference
をインストールした後、mistral-chat
CLIコマンドが環境に利用可能になります。
mistral-chat $HOME/mistral_models/Codestral-22B-v0.1 --instruct --max_tokens 256
これは、「Write me a function that computes fibonacci in Rust」という質問に対する回答を生成し、以下のような結果を返します。
Sure, here's a simple implementation of a function that computes the Fibonacci sequence in Rust. This function takes an integer `n` as an argument and returns the `n`th Fibonacci number.
fn fibonacci(n: u32) -> u32 {
match 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));
}
This function uses recursion to calculate the Fibonacci number. However, it's not the most efficient solution because it performs a lot of redundant calculations. A more efficient solution would use a loop to iteratively calculate the Fibonacci numbers.
フィルインザミドル(FIM)
mistral_inference
をインストールし、pip install --upgrade mistral_common
を実行して、mistral_common>=1.2
がインストールされていることを確認します。
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.v3()
model = Transformer.from_folder("~/codestral-22B-240529")
prefix = """def add("""
suffix = """ return sum"""
request = FIMRequest(prompt=prefix, suffix=suffix)
tokens = 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)
これは、以下のような結果を返します。
num1, num2):
# Add two numbers
sum = num1 + num2
# return the sum
transformers
ライブラリを使用した推論
このモデルは、transformers
ライブラリと互換性があります。まず、pip install -U transformers
を実行してから、以下のスニペットを使用してすぐに始めることができます。
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "mistralai/Codestral-22B-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
text = "Hello my name is"
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
デフォルトでは、transformers
はモデルをフル精度でロードします。そのため、HFエコシステムで提供されている最適化機能を使用して、モデルを実行するためのメモリ要件をさらに削減することができます。
🔧 制限事項
Codestral-22B-v0.1には、モデレーションメカニズムがありません。モデルがガードレールをきめ細かく遵守し、モデレートされた出力が必要な環境でのデプロイを可能にする方法について、コミュニティと協力して取り組むことを期待しています。
📄 ライセンス
Codestral-22B-v0.1は、MNLP-0.1
ライセンスの下でリリースされています。
ミストラルAIチーム
Albert Jiang, Alexandre Sablayrolles, Alexis Tacnet, Antoine Roux, Arthur Mensch, Audrey Herblin-Stoop, Baptiste Bout, Baudouin de Monicault, Blanche Savary, Bam4d, Caroline Feldman, Devendra Singh Chaplot, Diego de las Casas, Eleonore Arcelin, Emma Bou Hanna, Etienne Metzger, Gianna Lengyel, Guillaume Bour, Guillaume Lample, Harizo Rajaona, Henri Roussez, Jean-Malo Delignon, Jia Li, Justus Murke, Kartik Khandelwal, Lawrence Stewart, Louis Martin, Louis Ternon, Lucile Saulnier, Lélio Renard Lavaud, Margaret Jennings, Marie Pellat, Marie Torelli, Marie-Anne Lachaux, Marjorie Janiewicz, Mickael Seznec, Nicolas Schuhl, Patrick von Platen, Romain Sauvestre, Pierre Stock, Sandeep Subramanian, Saurabh Garg, Sophia Yang, Szymon Antoniak, Teven Le Scao, Thibaut Lavril, Thibault Schueller, Timothée Lacroix, Théophile Gervet, Thomas Wang, Valera Nemychnikova, Wendy Shang, William El Sayed, William Marshall
⚠️ 重要提示
あなたの個人情報の処理方法について詳しく知りたい場合は、プライバシーポリシーをご覧ください。
💡 使用アドバイス
transformers
トークナイザを修正して、mistral_common
のリファレンス実装と1対1で同じ結果を得るPRは大歓迎です!



