模型概述
模型特點
模型能力
使用案例
🚀 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。



