GoogleColobでstabilityai/japanese-stablelm-2-instruct-1_6bを動かす

初めに

Stability AIから新しいLLMモデルが出たので試していきます。

今回は、Instruct tuningされているモデルを試します。

huggingface.co

環境

準備

以下のライブラリをインストールします

!pip install tiktoken
!pip install accelerate

またColobのシークレットで、hugginfaceのキーをonにします

モデルのロード

以下でモデルのロードをします

from google.colab import userdata

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "stabilityai/japanese-stablelm-2-instruct-1_6b"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True,use_auth_token = userdata.get('huggingface'))

# The next line may need to be modified depending on the environment
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    low_cpu_mem_usage=True, 
    device_map="auto",
    trust_remote_code=True,
    use_auth_token=userdata.get('huggingface'),
)

推論

サンプルプロンプト

以下でサンプルプロンプトを実行します

prompt = [
    {"role": "system", "content": "あなたは役立つアシスタントです。"},
    {"role": "user", "content": "「情けは人のためならず」ということわざの意味を小学生でも分かるように教えてください。"},
]
inputs = tokenizer.apply_chat_template(
    prompt,
    add_generation_prompt=True,
    return_tensors="pt",
).to(model.device)

# this is for reproducibility.
# feel free to change to get different result
seed = 23
torch.manual_seed(seed)

tokens = model.generate(
    inputs,
    max_new_tokens=128,
    temperature=0.99,
    top_p=0.95,
    do_sample=True,
)

out = tokenizer.decode(tokens[0], skip_special_tokens=False)
print(out)

結果

<|system|>
あなたは役立つアシスタントです。<|endoftext|>
<|user|>
「情けは人のためならず」ということわざの意味を小学生でも分かるように教えてください。<|endoftext|>
<|assistant|>
「情けは人のためならず」とは、どんなに親切にするときも、自分にとってはそれ以上の報いやいいことがあるということを表すことわざです。例えば、困っている人を助けるときに、その人が助けられたことであなたに幸運が舞い戻ってきたときのことを考えてみてください。親切にした

まどマギプロンプト

prompt = [
    {"role": "system", "content": "あなたはアニメ好きなオタクです"},
    {"role": "user", "content": "まどマギで一番可愛いキャラはなんですか?"},
]
inputs = tokenizer.apply_chat_template(
    prompt,
    add_generation_prompt=True,
    return_tensors="pt",
).to(model.device)

# this is for reproducibility.
# feel free to change to get different result
seed = 23
torch.manual_seed(seed)

tokens = model.generate(
    inputs,
    max_new_tokens=128,
    temperature=0.99,
    top_p=0.95,
    do_sample=True,
)

out = tokenizer.decode(tokens[0], skip_special_tokens=False)
print(out)

結果

<|system|>
あなたはアニメ好きなオタクです<|endoftext|>
<|user|>
まどマギで一番可愛いキャラはなんですか?<|endoftext|>
<|assistant|>
もちろん、まどかですよね!まどかはやっぱり、見た目の可愛さもですが、それ以上に内面の可愛らしさがありますから。自分が可愛いと思っているのはもちろん、他人を大切にしたり、自分を守るために大胆な行動をとったりするところも素敵です。<|endoftext|>