📖
楽天AI 2.0 miniを試してみた
SMLとは
SML (Small Language Model) とは、LLM(大規模言語モデル)を小型化したものです。クライアントサイドでも生成AIを使用できるように設計されており、オフライン環境でも動作可能などのメリットがあります。
実行環境
MacBook pro 2020
cpu i7(10世代)
メモリ 32g
GPU cpu内蔵
環境構築
pythonをインストール
3.11.8を使用しました。
⚠️3.13 だとPyTorchが対応していなかったため、エラーが出ました(intelcpuの場合)
必要パッケージ
accelerate==1.3.0
blobfile==3.0.0
certifi==2025.1.31
charset-normalizer==3.4.1
colorama==0.4.6
filelock==3.17.0
fsspec==2025.2.0
huggingface-hub==0.28.1
idna==3.10
Jinja2==3.1.4
lxml==5.3.1
MarkupSafe==2.1.5
mpmath==1.3.0
networkx==3.3
numpy<2
packaging==24.2
pillow==11.0.0
protobuf==5.29.3
psutil==7.0.0
pycryptodomex==3.21.0
PyYAML==6.0.2
regex==2024.11.6
requests==2.32.3
safetensors==0.5.2
sentencepiece==0.2.0
sympy==1.13.1
tiktoken==0.9.0
transformers==4.48.3
torch==2.2.2
torchaudio==2.2.2
torchvision==0.17.2
tqdm==4.67.1
typing_extensions==4.12.2
urllib3==2.3.0
をrequirements.txtとして保存してください
venv作成
python -m venv venv
有効化
source venv/bin/activate
パッケージインストール
pip install --upgrade pip
pip install -r requirements.txt
main.py
import time
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# モデルとトークナイザーのロード
MODEL_PATH = "Rakuten/RakutenAI-2.0-mini-instruct"
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH, torch_dtype=torch.float16, device_map="auto"
)
model.eval()
SYSTEM_PROMPT = (
"人間のユーザーと人工知能アシスタントのチャット。\n"
"アシスタントはユーザーの問いかけに対し、役に立つ丁寧な回答を提供します。"
)
def chat(msg: str) -> str:
""" ユーザーの入力に対してモデルから応答を生成する """
chat_history = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": msg},
]
input_ids = tokenizer.apply_chat_template(
chat_history, tokenize=True, add_generation_prompt=True, return_tensors="pt"
).to(device=model.device)
attention_mask = input_ids.ne(tokenizer.pad_token_id).long()
print("\n生成中...", end="", flush=True)
start_time = time.time()
tokens = model.generate(
input_ids,
max_length=2048,
do_sample=False,
num_beams=1,
pad_token_id=tokenizer.eos_token_id,
attention_mask=attention_mask,
)
elapsed_time = time.time() - start_time
print(f"\n推論時間: {elapsed_time:.2f} 秒")
return tokenizer.decode(tokens[0][len(input_ids[0]):], skip_special_tokens=True)
def main():
""" ユーザーとの対話ループ """
print("Chatbot 起動 - メッセージを入力してください(Enter で終了)")
try:
while True:
msg = input(f"\n{'#' * 50}\nメッセージを入力: ")
if not msg.strip():
break
response = chat(msg)
print(f"\n🗨️ AIの応答:\n{response}\n")
except KeyboardInterrupt:
print("\n💡 終了しました。")
if __name__ == "__main__":
main()
実行
python3 main.py
Discussion