语言:
- 代码
许可证: 其他
标签:
- 代码
推理: 否
许可证名称: MNPL
许可证链接: https://mistral.ai/licences/MNPL-0.1.md
额外授权说明: 若想了解我们如何处理您的个人数据,请阅读我们的隐私政策。
Codestral-22B-v0.1模型卡
使用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="用一句话解释机器学习。")])
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)
result = tokenizer.decode(generated_ids[0].tolist())
print(result)
[!提示]
欢迎提交PR修正transformers
分词器,使其与mistral_common
参考实现完全一致!
Codestral-22B-v0.1在80多种编程语言的多样化数据集上训练,包括Python、Java、C、C++、JavaScript和Bash等最流行的语言(详见博客文章)。该模型可用于:
- 指令模式,例如回答关于代码片段的问题(编写文档、解释、重构)或根据特定指示生成代码
- 中间填充(FIM)模式,预测前缀和后缀之间的中间标记(对VS Code等软件开发插件非常有用)
安装
建议使用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)
聊天
安装mistral_inference
后,环境中应可使用mistral-chat
命令行工具。
mistral-chat $HOME/mistral_models/Codestral-22B-v0.1 --instruct --max_tokens 256
将生成"用Rust编写计算斐波那契数列的函数"的答案,输出类似以下内容:
好的,这是一个简单的Rust实现斐波那契数列的函数。该函数接收整数`n`作为参数,返回第`n`个斐波那契数。
fn fibonacci(n: u32) -> u32 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
fn main() {
let n = 10;
println!("第{}个斐波那契数是: {}", n, fibonacci(n));
}
这个函数使用递归计算斐波那契数。但这不是最高效的解决方案,因为它执行了大量冗余计算。更高效的解决方案是使用循环迭代计算斐波那契数。
中间填充(FIM)
安装mistral_inference
并确保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):
# 两数相加
sum = num1 + num2
# 返回和
使用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 = "你好我的名字是"
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
许可证发布。
Mistral AI团队
阿尔伯特·蒋、亚历山大·萨布莱罗尔、亚历克西斯·塔克内、安托万·鲁、亚瑟·门施、奥黛丽·赫布林-斯图普、巴蒂斯特·布特、博杜安·德莫尼科尔、布兰奇·萨瓦里、Bam4d、卡罗琳·费尔德曼、德文德拉·辛格·查普洛特、迭戈·德拉斯卡萨斯、埃莱奥诺尔·阿尔塞兰、艾玛·布·汉娜、艾蒂安·梅茨格、吉安娜·伦杰尔、纪尧姆·布尔、纪尧姆·兰普勒、哈里佐·拉贾奥纳、亨利·鲁塞兹、让-马洛·德利尼翁、贾力、贾斯特斯·穆尔克、卡蒂克·坎德尔瓦尔、劳伦斯·斯图尔特、路易·马丁、路易·泰尔农、吕西尔·索尔尼耶、莱利奥·勒纳尔·拉沃、玛格丽特·詹宁斯、玛丽·佩拉、玛丽·托雷利、玛丽-安娜·拉绍、玛乔丽·贾尼维茨、米凯尔·塞兹内克、尼古拉·舒尔、帕特里克·冯·普拉滕、罗曼·索维斯特尔、皮埃尔·斯托克、桑迪普·苏布拉马尼安、索菲亚·杨、希蒙·安东尼阿克、泰文·勒·斯卡奥、蒂博·拉维尔、蒂博·舒勒、蒂莫泰·拉克鲁瓦、泰奥菲勒·热尔韦、托马斯·王、瓦莱拉·涅梅奇尼科娃、温迪·尚、威廉·埃尔·赛义德、威廉·马歇尔