模型概述
模型特點
模型能力
使用案例
🚀 Codestral-22B-v0.1模型卡片
Codestral-22B-v0.1是一個在80多種編程語言的多樣化數據集上訓練的模型,涵蓋了Python、Java、C、C++、JavaScript和Bash等最流行的語言。它可用於編碼解碼、推理等任務,能處理指令查詢和中間填充(FIM)等場景。
🚀 快速開始
安裝指南
建議使用 mistral-inference 來使用 mistralai/Codestral-22B-v0.1
。
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)
✨ 主要特性
- 支持80多種編程語言,可用於編碼解碼和推理任務。
- 支持指令查詢,如回答代碼片段相關問題、生成代碼等。
- 支持中間填充(FIM),可預測前綴和後綴之間的中間標記。
💻 使用示例
基礎用法
使用 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))
⚠️ 重要提示 歡迎提交PR來修正
transformers
分詞器,使其結果與mistral_common
參考實現完全一致!
💡 使用建議 默認情況下,
transformers
會以全精度加載模型。因此,你可能有興趣通過我們在HF生態系統中提供的優化來進一步降低運行模型的內存要求。
📚 詳細文檔
Codestral-22B-v0.1在多種編程語言的數據集上進行訓練,可用於編碼、解碼和推理任務。它支持指令查詢和中間填充(FIM)功能。更多詳細信息可參考 博客文章。
🔧 技術細節
Codestral-22B-v0.1沒有任何審核機制。我們期待與社區合作,使模型更好地遵守規則,以便在需要審核輸出的環境中部署。
📄 許可證
Codestral-22B-v0.1基於 MNLP-0.1
許可證發佈。你可以在 這裡 查看完整的許可證內容。
開發團隊
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
如果你想了解更多關於我們如何處理你的個人數據的信息,請閱讀我們的 隱私政策。



