模型简介
模型特点
模型能力
使用案例
🚀 SILMA AI
SILMA.AI 是一家领先的生成式人工智能初创公司,致力于为阿拉伯语使用者提供最先进的人工智能解决方案。
🚀 我们的旗舰模型:SILMA 1.0 🚀
- SILMA 1.0 是截至 2025 年 2 月排名第一的开源权重阿拉伯语大语言模型(LLM),拥有令人印象深刻的 90 亿参数规模,超越了比它大七倍以上的模型 🏆
💡 重要提示
对于检索增强生成(RAG)用例,请使用 SILMA Kashif v1.0,因为它是专门为问答任务训练的。
✨ 主要特性
- SIMLA 是一个小型语言模型,在大多数阿拉伯语任务中超越了 72B 模型,因此更适用于商业用例。
- SILMA 基于谷歌 Gemma 强大的基础模型构建,结合了两者的优势,为您提供无与伦比的性能。
- SILMA 是一个开源权重模型,可根据我们的开源许可证免费使用。
👥 我们的团队
我们是一群经验丰富的 阿拉伯语人工智能专家,了解阿拉伯语的细微差别和文化考量,使我们能够构建真正与阿拉伯语用户产生共鸣的解决方案。
作者:silma.ai
📦 安装指南
下面我们将分享一些代码片段,展示如何快速开始运行该模型。首先,使用以下命令安装 Transformers 库:
pip install -U transformers sentencepiece
然后,从与您用例相关的部分复制代码片段。
💻 使用示例
基础用法
使用 pipeline
API 运行
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="silma-ai/SILMA-9B-Instruct-v1.0",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda", # 若要在 Mac 设备上运行,请替换为 "mps"
)
messages = [
{"role": "user", "content": "اكتب رسالة تعتذر فيها لمديري في العمل عن الحضور اليوم لأسباب مرضية."},
]
outputs = pipe(messages, max_new_tokens=256)
assistant_response = outputs[0]["generated_text"][-1]["content"].strip()
print(assistant_response)
- 响应:
السلام عليكم ورحمة الله وبركاته
أودّ أن أعتذر عن عدم الحضور إلى العمل اليوم بسبب مرضي. أشعر بالسوء الشديد وأحتاج إلى الراحة. سأعود إلى العمل فور تعافيي.
شكراً لتفهمكم.
مع تحياتي،
[اسمك]
在单 GPU 或多 GPU 上运行模型
pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_id = "silma-ai/SILMA-9B-Instruct-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype=torch.bfloat16,
)
messages = [
{"role": "system", "content": "أنت مساعد ذكي للإجابة عن أسئلة المستخدمين."},
{"role": "user", "content": "أيهما أبعد عن الأرض, الشمس أم القمر؟"},
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True).to("cuda")
outputs = model.generate(**input_ids, max_new_tokens=256)
print(tokenizer.decode(outputs[0]))
- 响应:
الشمس
您可以使用 tokenizer.apply_chat_template
来确保应用正确的聊天模板,如下所示:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_id = "silma-ai/SILMA-9B-Instruct-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype=torch.bfloat16,
)
messages = [
{"role": "system", "content": "أنت مساعد ذكي للإجابة عن أسئلة المستخدمين."},
{"role": "user", "content": "اكتب كود بايثون لتوليد متسلسلة أرقام زوجية."},
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True).to("cuda")
outputs = model.generate(**input_ids, max_new_tokens=256)
print(tokenizer.decode(outputs[0]).split("<start_of_turn>model")[-1])
- 响应:
def generate_even_numbers(n):
"""
This function generates a list of even numbers from 1 to n.
Args:
n: The upper limit of the range.
Returns:
A list of even numbers.
"""
return [i for i in range(1, n + 1) if i % 2 == 0]
# Example usage
n = 10
even_numbers = generate_even_numbers(n)
print(f"The first {n} even numbers are: {even_numbers}")
通过 bitsandbytes
进行量化版本
使用 8 位精度(int8)
pip install bitsandbytes accelerate
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
model_id = "silma-ai/SILMA-9B-Instruct-v1.0"
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=quantization_config,
)
messages = [
{"role": "system", "content": "أنت مساعد ذكي للإجابة عن أسئلة المستخدمين."},
{"role": "user", "content": "اذكر خمس انواع فواكه بها نسب عالية من فيتامين ج."},
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True).to("cuda")
outputs = model.generate(**input_ids, max_new_tokens=256)
print(tokenizer.decode(outputs[0]).split("<start_of_turn>model")[-1])
- 响应:
الليمون، البرتقال، الموز، الكيوي، الفراولة
使用 4 位精度
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
model_id = "silma-ai/SILMA-9B-Instruct-v1.0"
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=quantization_config,
)
messages = [
{"role": "system", "content": "أنت مساعد ذكي للإجابة عن أسئلة المستخدمين."},
{"role": "user", "content": "في أي عام توفى صلاح الدين الأيوبي؟"},
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True).to("cuda")
outputs = model.generate(**input_ids, max_new_tokens=256)
print(tokenizer.decode(outputs[0]).split("<start_of_turn>model")[-1])
- 响应:
1193
高级用法
Torch compile
Torch compile 是一种加速 PyTorch 模块推理的方法。通过利用 torch compile,Silma 模型的运行速度可以提高多达 6 倍。
请注意,在实现完整的推理速度之前,需要进行两个预热步骤:
import os
os.environ["TOKENIZERS_PARALLELISM"] = "false"
from transformers import AutoTokenizer, Gemma2ForCausalLM
from transformers.cache_utils import HybridCache
import torch
torch.set_float32_matmul_precision("high")
# 加载模型和分词器
model_id = "silma-ai/SILMA-9B-Instruct-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = Gemma2ForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16)
model.to("cuda")
# 应用 torch compile 转换
model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True)
# 预处理输入
messages = [
{"role": "system", "content": "أنت مساعد ذكي للإجابة عن أسئلة المستخدمين."},
{"role": "user", "content": "من الرئيس الذي تولى المنصب في أمريكا بعد دونالد ترامب؟"},
]
model_inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True).to("cuda")
input_text = "من الرئيس الذي تولى المنصب في أمريكا بعد دونالد ترامب؟"
model_inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
prompt_length = model_inputs.input_ids.shape[1]
# 设置键值缓存
past_key_values = HybridCache(
config=model.config,
max_batch_size=1,
max_cache_len=model.config.max_position_embeddings,
device=model.device,
dtype=model.dtype
)
# 启用将键值缓存传递给生成过程
model._supports_cache_class = True
model.generation_config.cache_implementation = None
# 两个预热步骤
for idx in range(2):
outputs = model.generate(**model_inputs, past_key_values=past_key_values, do_sample=True, temperature=1.0, max_new_tokens=128)
past_key_values.reset()
# 快速运行
outputs = model.generate(**model_inputs, past_key_values=past_key_values, do_sample=True, temperature=1.0, max_new_tokens=128)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
- 响应:
جو بايدن
更多详细信息,请参考 Transformers 文档。
聊天模板
经过指令微调的模型使用一种聊天模板,在进行对话时必须遵循该模板。应用它的最简单方法是使用分词器的内置聊天模板,如以下代码片段所示。
让我们加载模型并将聊天模板应用于对话。在这个例子中,我们将从单个用户交互开始:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "silma-ai/SILMA-9B-Instruct-v1.0"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
torch_dtype=dtype,)
chat = [
{ "role": "user", "content": "ما اشهر اطارات العمل في البايثون لبناء نماذج الذكاء الاصطناعي؟" },
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
此时,提示包含以下文本:
<bos><start_of_turn>user
ما اشهر اطارات العمل في البايثون لبناء نماذج الذكاء الاصطناعي؟<end_of_turn>
<start_of_turn>model
如您所见,每个回合都以 <start_of_turn>
分隔符开头,然后是实体的角色(user
表示用户提供的内容,model
表示大语言模型的响应)。回合以 <end_of_turn>
标记结束。
如果您需要在不使用分词器的聊天模板的情况下手动构建提示,可以遵循此格式。
提示准备好后,可以按如下方式进行生成:
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=150)
print(tokenizer.decode(outputs[0]))
输入和输出
- 输入:文本字符串,例如问题、提示或要总结的文档。
- 输出:针对输入生成的阿拉伯语或英语文本,例如问题的答案或文档的摘要。
GPU 要求
以下是运行推理所需的最低/推荐 GPU 要求:
属性 | 详情 |
---|---|
推荐配置 | 至少一个具有至少 48 GB GPU 内存的 GPU,例如 Nvidia A40、L40、RTX A6000 |
最低配置 | 至少一个具有 16 - 24 GB GPU 内存的 GPU,例如 Nvidia RTX 4090、RTX 4000、L4。假设模型以 8 位或 4 位 量化模式 加载 |
引用
@article{silma_01_2024,
title={Silma},
url={https://www.silma.ai},
publisher={Silma},
author={Silma Team},
year={2024}
}
📚 详细文档
使用和限制
这些模型有一些用户应该了解的限制。
预期用途
开源大语言模型(LLMs)在各个行业和领域都有广泛的应用。以下潜在用途列表并不全面。此列表的目的是提供有关模型创建者在模型训练和开发过程中考虑的可能用例的上下文信息。
- 内容创作与沟通
- 文本生成:这些模型可用于生成创意文本格式,如诗歌、脚本、代码、营销文案和电子邮件草稿。
- 聊天机器人和对话式人工智能:为客户服务、虚拟助手或交互式应用程序提供对话界面。
- 文本摘要:生成文本语料库、研究论文或报告的简洁摘要。
- 研究与教育
- 自然语言处理(NLP)研究:这些模型可以为研究人员提供基础,用于实验 NLP 技术、开发算法并推动该领域的发展。
- 语言学习工具:支持交互式语言学习体验,帮助进行语法纠正或提供写作练习。
- 知识探索:通过生成摘要或回答特定主题的问题,协助研究人员探索大量文本。
限制
- 训练数据
- 训练数据的质量和多样性会显著影响模型的能力。训练数据中的偏差或差距可能导致模型响应的局限性。
- 训练数据集的范围决定了模型能够有效处理的主题领域。
- 上下文和任务复杂性
- 大语言模型更擅长可以用清晰提示和说明来构建的任务。开放式或高度复杂的任务可能具有挑战性。
- 模型的性能可能会受到提供的上下文数量的影响(在一定程度上,更长的上下文通常会导致更好的输出)。
- 语言歧义与细微差别
- 自然语言本质上是复杂的。大语言模型可能难以理解微妙的细微差别、讽刺或比喻语言。
- 事实准确性
- 大语言模型根据从训练数据集中学到的信息生成响应,但它们不是知识库。它们可能会生成不正确或过时的事实陈述。
- 常识
- 大语言模型依赖于语言中的统计模式。它们可能在某些情况下缺乏应用常识推理的能力。
伦理考量与风险
大语言模型(LLMs)的开发引发了一些伦理问题。在创建开源模型时,我们仔细考虑了以下几点:
- 偏差与公平性
- 在大规模真实世界文本数据上训练的大语言模型可能反映训练材料中嵌入的社会文化偏差。
- 错误信息与滥用
- 大语言模型可被滥用来生成虚假、误导或有害的文本。
- 为模型的负责任使用提供了指南,请参阅 [负责任生成式人工智能工具包][rai-toolkit]。
- 透明度与问责制
- 本模型卡片总结了模型的架构、能力、限制和评估过程的详细信息。
- 一个负责任开发的开源模型为在整个人工智能生态系统中与开发者和研究人员共享创新提供了机会,使大语言模型技术更易获取。
已识别的风险和缓解措施:
- 偏差的延续:鼓励在模型训练、微调及其他用例中进行持续监测(使用评估指标、人工审查)并探索去偏技术。
- 有害内容的生成:内容安全机制和指南至关重要。鼓励开发者根据其特定的产品政策和应用用例谨慎行事并实施适当的内容安全保障措施。
- 隐私侵犯:模型在过滤掉个人身份信息(PII)的数据上进行训练。鼓励开发者遵守隐私法规并采用隐私保护技术。
📄 许可证
许可证为 gemma。



