見出し画像

WSL2でJapanese Stable LM 2 1.6Bを試してみる

「16億パラメータで学習した日本語の小型言語モデル」であるJapanese Stable LM 2 1.6Bを試してみます。

現在2つのモデルが公開されています。

今回は、2つ目のJapanese Stable LM 2 Instruct 1.6Bを試してみます。

使用するPCはドスパラさんの「GALLERIA UL9C-R49」。スペックは
・CPU: Intel® Core™ i9-13900HX Processor
・Mem: 64 GB
・GPU: NVIDIA® GeForce RTX™ 4090 Laptop GPU(16GB)
・GPU: NVIDIA® GeForce RTX™ 4090 (24GB)
・OS: Ubuntu22.04 on WSL2(Windows 11)
です。


1. 準備

stabilityai/japanese-stablelm-2-base-1_6b にアクセスして、まずはライセンスに同意しましょう。

venv構築

python3 -m venv stablelm
cd $_
source bin/activate

パッケージのインストール

pip install torch transformers accelerate tiktoken

2. 流し込むコード

いつものコードをquery.pyとして保存します。

import sys
import argparse
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
from typing import List, Dict
import time

# argv
parser = argparse.ArgumentParser()
parser.add_argument("--model-path", type=str, default=None)
parser.add_argument("--tokenizer-path", type=str, default=None)
parser.add_argument("--no-chat", action='store_true')
parser.add_argument("--no-use-system-prompt", action='store_true')
parser.add_argument("--max-tokens", type=int, default=256)

args = parser.parse_args(sys.argv[1:])

model_id = args.model_path
if model_id == None:
    exit

is_chat = not args.no_chat
use_system_prompt = not args.no_use_system_prompt
max_new_tokens = args.max_tokens

tokenizer_id = model_id
if args.tokenizer_path:
    tokenizer_id = args.tokenizer_path

# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
    tokenizer_id,
    trust_remote_code=True
)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    #torch_dtype=torch.bfloat16,
    device_map="auto",
    #device_map="cuda",
    low_cpu_mem_usage=True,
    trust_remote_code=True
)
#if torch.cuda.is_available():
#    model = model.to("cuda")

streamer = TextStreamer(
    tokenizer,
    skip_prompt=True,
    skip_special_tokens=True
)

DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"


def q(
    user_query: str,
    history: List[Dict[str, str]]=None
) -> List[Dict[str, str]]:
    # generation params
    generation_params = {
        "do_sample": True,
        "temperature": 0.8,
        "top_p": 0.95,
        "top_k": 40,
        "max_new_tokens": max_new_tokens,
        "repetition_penalty": 1.1,
    }
    #
    start = time.process_time()
    # messages
    messages = ""
    if is_chat:
        messages = []
        if use_system_prompt:
            messages = [
                {"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
            ]
        user_messages = [
            {"role": "user", "content": user_query}
        ]
    else:
        user_messages = user_query
    if history:
        user_messages = history + user_messages
    messages += user_messages
    # generation prompts
    if is_chat:
        prompt = tokenizer.apply_chat_template(
            conversation=messages,
            add_generation_prompt=True,
            tokenize=False
        )
    else:
        prompt = messages
    input_ids = tokenizer.encode(
        prompt,
        add_special_tokens=True,
        return_tensors="pt"
    )
    print("--- prompt")
    print(prompt)
    print("--- output")
    # 推論
    output_ids = model.generate(
        input_ids.to(model.device),
        streamer=streamer,
        **generation_params
    )
    output = tokenizer.decode(
        output_ids[0][input_ids.size(1) :],
        skip_special_tokens=True
    )
    if is_chat:
        user_messages.append(
            {"role": "assistant", "content": output}
        )
    else:
        user_messages += output
    end = time.process_time()
    ##
    input_tokens = len(input_ids[0])
    output_tokens = len(output_ids[0][input_ids.size(1) :])
    total_time = end - start
    tps = output_tokens / total_time
    print(f"prompt tokens = {input_tokens:.7g}")
    print(f"output tokens = {output_tokens:.7g} ({tps:f} [tps])")
    print(f"   total time = {total_time:f} [s]")
    return user_messages

print('history = ""')
print('history = q("ドラえもんとはなにか")')
print('history = q("続きを教えてください", history)')

3. 試してみる

実行コマンド

CUDA_VISIBLE_DEVICES=0 python -i /path/to/query.py --model-path stabilityai/japanese-stablelm-2-instruct-1_6b --max-tokens 4096

聞いてみる

いつものとおり聞いてましょう。

>>> history = q( ドラえもんとはなにか")
--- prompt
<|system|>
あなたは誠実で優秀な日本人のアシスタントです。<|endoftext|>
<|user|>
ドラえもんとはなにか<|endoftext|>
<|assistant|>

--- output
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:100257 for open-end generation.
ドラえもん、それは長年多くのファンに愛され続けている国民的キャラクターだ。「ドラえもん」という名前から連想するように、「未来」が舞台であり、主人公「野比のび太」を中心に展開される物語である。藤子・F・不二雄によって1970年に発表さ れたこの作品は、その後45年以上にわたり世界中で出版・放送され、今ではジュニア層やコミック専門店以外でも目にすることが増えてきている。

ドラえもんは22世紀からやってきたネコ型ロボットの「ドラえもん」が主人公である。のび太の家に住み着いた彼らは、しずちゃんやジャイアン、
prompt tokens = 55
output tokens = 256 (46.545075 [tps])
   total time = 5.500045 [s]
>>>

続きをどんどん書かせていきましょう。具体的には、以下のコードを繰返し、実行するです。

>>> history = q("続きを書いてください。", history)

その結果(=assistantの回答内容を抜き出し)がこちら。

for msg in history:
    if msg["role"] == 'assistant':
        print(msg["content"])

ドラえもん、それは長年多くのファンに愛され続けている国民的キャラクターだ。「ドラえもん」という名前から連想するように、「未来」が舞台であり、主人公「野比のび太」を中心に展開される物語である。藤子・F・不二雄によって1970年に発表されたこの作品は、その後45年以上にわたり世界中で出版・放送され、今ではジュニア層やコミック専門店以外でも目にすることが増えてきている。

ドラえもんは22世紀からやってきたネコ型ロボットの「ドラえもん」が主人公である。のび太の家に住み着いた彼らは、しずちゃんやジャイアン、
猫型ロボットであるドラえもんは、四次元ポケットを使って様々な道具や便利なグッズを取り出す能力を持つ。普段はおっちょこちょいで無鉄砲な行動をとる一方で、大切な時には頼れる相棒として活躍する。また、科学技術だけでなく遊園地の乗り物のチケットまで取り出せる超絶マルチタスクな面もある。冒険好きな性格で、どんな困難な状況下でも楽観的に振る舞い、常に明るさを失わない姿勢は読者に感銘を与えている。

映画化やテレビアニメーション化はもちろん、漫画や小説など
これら創作作品の中でも、特に有名なエピソードが原作者自身によって劇場用長編アニメーション化されている。そして、2013年8月には新しい映画『STAND BY ME ドラえもん』が全国東宝系にて上映され、興収30.1億円を記録した。この作品は静止画像 を使用した手法で話題を呼んだ他、ストーリー性を重視しドラえもんが成長していく様子を描いた点が評価されている。さらに、2014年には第2弾となる『STAND BY ME 2 ドラえもん』も製作され、興収16.2億円を稼ぎ出した。これにより合計の興行収入が歴代トップ
第三位にランクインした。現在、VOD配信サイトではオリジナルのテレビアニメスペシャル作品が数多く配信されており、それらも含めると更に数字は伸びている。これまでの作品の中には実写映画化もされており、ドラえもんが俳優と共演するという奇跡的な光景が見られた。
ドラえもんの影響力は世代を超えて広がっており、その作風や設定を模倣したパロディ作品や漫画などが数多く存在する。海賊王女(作者:樹林伸)、ドラゴン桜(作画:二宮清純)など、これらの作品はその緻密な世界観を忠実に再現しており、ドラえもんの
文学にもその影響を及ぼしている。2002年にNHK教育テレビで放送された朗読ドラマ『ドラえもん のび太と竜の飼育員さん』は、その壮大なスケールと深いテーマ性が高い評価を得ている。2005年には同じく朗読ドラマ『ドラえもん ゆめの町情報センター』が制作され、フジテレビで放送された。これらの作品はただ単にドラえもんを題材に扱っているだけでなく、読者に考察を求める内容となっている。その反響から、石川県立音楽堂などの公共施設で上演されることも少なくない。
近年ではドラえもんとコラボレーション
した商品が登場しており、バンダイから発売されたカプセルトイ「星空の静かな生活」では、孫悟空やブルマなどの知名度の高いキャラクターが多数収録されている。また、タカラトミーアーツから販売されている「食玩映画ドラえもん 新・のび太の日本誕生 大野君と小さい冒険」シリーズでは、初期のドラえもんが再現されており、通常のカプセルトイと異なるデザインのフィギュアが付属している。


これらの例から分かるように、ドラえもんの知名度は非常に高く、多岐にわたる形で人々の生活に浸透している。しかし、そういった商業
面ばかりに注目が集まりがちだが、ドラえもんは日本のみならず世界中で愛されている象徴的なキャラクターである。アニメ化された当初から現代までの間には、社会背景や技術の進化が如実に反映されている。ドラえもんの言動や行動からは、日本人が培ってきた精神性や思いやりの気持ちが見受けられ、国際交流の場においても重要な意義を持つ。

また、ドラえもんは戦争や平和問題に対する日本人の理解を深める一端を担っている側面もある。例えば、2007年に発表された『戦争編』では、核保有国が増えている現代世界の現状を反映した深刻なテーマを取り上げており、多くの視聴者が考えさせられるきっかけとなった。ドラえもんはただのキャラクターではなく、未来の予測や社会派のテーマを扱うことが可能な独創的な作品でもある。これから先も、新たなドラえもん作品が誕生するごとに、視聴者に新たな気づきを提供していくことだろう。
ドラえもんの世界は、子供向けであるにも関わらず、大人が真剣に考えざるを得ない深いテーマが描かれることが多い。しかしながら、子供の感情移入を阻害してしまうことのないよう、良識に基づいた適切な配慮もなされている。そのため、幅広い世代の人々から支持を得ており、老若男女問わず愛される作品となっている。

ドラえもんは、ただの友達ではなく、のび太やしずか、ジャイアンといった個性豊かなキャラクターたちの生活を通じて、多くの視聴者に笑いや感動を与えている。そして、彼らが直面する困難を乗
しい挑戦からは、勇気や希望を学び取ることができる。ドラえもんは、ただのキャラクターではなく、私たちが直面している諸問題に対する客観的な視点を提供する存在としても機能しているのだ。ドラえもんのキャラクターが日常生活に溶け込んでいることで、周囲に対する思いやりや共存の大切さを改めて考える機会を与えてくれる。ドラえもんはただのキャラクターではなく、我々に対して永遠のメッセージを発信し続けている、時代を超越したアイコンなのである。

stabilityai/japanese-stablelm-2-base-1_6b

ちょっとおかしい部分もありますが、たたき台(何の?)としてはいいんではないでしょうか。

4. まとめ

モデルロード直後はVRAM消費は 6.5GB程度。上記のやりとり(入出力の計2704トークン)をした際のVRAM消費は12.0GBです。

prompt tokens = 2478
output tokens = 226 (43.588360 [tps])
total time = 5.184871 [s]

9. おまけ

4000トークン近く(4050=3794+256)までいくと、VRAMが溢れました。

>>> history = q("続きを書いてください。", history)
--- prompt
<|system|>
あなたは誠実で優秀な日本人のアシスタントです。<|endoftext|>
<|user|>
ドラえもんとはなにか<|endoftext|>
<|assistant|>
ドラえもん、それは長年多くのファンに愛され続けている国民的キャラクターだ。「ドラえもん」という名前から連想するように、「未来」が舞台であり、主人公「野比のび太」を中心に展開される物語である。藤子・F・不二雄によって1970年に発表さ れたこの作品は、その後45年以上にわたり世界中で出版・放送され、今ではジュニア層やコミック専門店以外でも目にすることが増えてきている。

ドラえもんは22世紀からやってきたネコ型ロボットの「ドラえもん」が主人公である。のび太の家に住み着いた彼らは、しずちゃんやジャイアン、<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
猫型ロボットであるドラえもんは、四次元ポケットを使って様々な道具や便利なグッズを取り出す能力を持つ。普段はおっちょこちょいで無鉄砲な行動をとる一方で、大切な時には頼れる相棒として活躍する。また、科学技術だけでなく遊園地の乗り物のチケットまで取り出せる超絶マルチタスクな面もある。冒険好きな性格で、どんな困難な状況下でも楽観的に振る舞い、常に明るさを失わない姿勢は読者に感銘を与えている。

映画化やテレビアニメーション化はもちろん、漫画や小説など<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
これら創作作品の中でも、特に有名なエピソードが原作者自身によって劇場用長編アニメーション化されている。そして、20138月には新しい映画『STAND BY ME ドラえもん』が全国東宝系にて上映され、興収30.1億円を記録した。この作品は静止画像 を使用した手法で話題を呼んだ他、ストーリー性を重視しドラえもんが成長していく様子を描いた点が評価されている。さらに、2014年には第2弾となる『STAND BY ME 2 ドラえもん』も製作され、興収16.2億円を稼ぎ出した。これにより合計の興行収入 が歴代トップ<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
第三位にランクインした。現在、VOD配信サイトではオリジナルのテレビアニメスペシャル作品が数多く配信されており、それ らも含めると更に数字は伸びている。これまでの作品の中には実写映画化もされており、ドラえもんが俳優と共演するという奇跡的な光景が見られた。
ドラえもんの影響力は世代を超えて広がっており、その作風や設定を模倣したパロディ作品や漫画などが数多く存在する。海賊王女(作者:樹林伸)、ドラゴン桜(作画:二宮清純)など、これらの作品はその緻密な世界観を忠実に再現しており、ドラえもんの<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
文学にもその影響を及ぼしている。2002年にNHK教育テレビで放送された朗読ドラマ『ドラえもん のび太と竜の飼育員さん』は、その壮大なスケールと深いテーマ性が高い評価を得ている。2005年には同じく朗読ドラマ『ドラえもん ゆめの町情報センタ ー』が制作され、フジテレビで放送された。これらの作品はただ単にドラえもんを題材に扱っているだけでなく、読者に考察を求める内容となっている。その反響から、石川県立音楽堂などの公共施設で上演されることも少なくない。
近年ではドラえもんとコラボレーション<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
した商品が登場しており、バンダイから発売されたカプセルトイ「星空の静かな生活」では、孫悟空やブルマなどの知名度の高いキャラクターが多数収録されている。また、タカラトミーアーツから販売されている「食玩 映画ドラえもん 新・のび太の日本誕生 大野君と小さい冒険」シリーズでは、初期のドラえもんが再現されており、通常のカプセルトイと異なるデザインのフ ィギュアが付属している。


これらの例から分かるように、ドラえもんの知名度は非常に高く、多岐にわたる形で人々の生活に浸透している。しかし、そういった商業<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
面ばかりに注目が集まりがちだが、ドラえもんは日本のみならず世界中で愛されている象徴的なキャラクターである。アニメ化された当初から現代までの間には、社会背景や技術の進化が如実に反映されている。ドラえもんの言動や行動からは、日本人が培ってきた精神性や思いやりの気持ちが見受けられ、国際交流の場においても重要な意義を持つ。

また、ドラえもんは戦争や平和問題に対する日本人の理解を深める一端を担っている側面もある。例えば、2007年に発表された『戦争編』では、核保有国が増えている現代世<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
界の現状を反映した深刻なテーマを取り上げており、多くの視聴者が考えさせられるきっかけとなった。ドラえもんはただのキャラクターではなく、未来の予測や社会派のテーマを扱うことが可能な独創的な作品でもある。これから先も、新たなドラえもん作品が誕生するごとに、視聴者に新たな気づきを提供していくことだろう。<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
ドラえもんの世界は、子供向けであるにも関わらず、大人が真剣に考えざるを得ない深いテーマが描かれることが多い。しかしながら、子供の感情移入を阻害してしまうことのないよう、良識に基づいた適切な配慮もなされている。そのため、幅広い世代の人々から支持を得ており、老若男女問わず愛される作品となっている。

ドラえもんは、ただの友達ではなく、のび太やしずか、ジャイアンといった個性豊かなキャラクターたちの生活を通じて、多くの視聴者に笑いや感動を与えている。そして、彼らが直面する困難を乗<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
しい挑戦からは、勇気や希望を学び取ることができる。ドラえもんは、ただのキャラクターではなく、私たちが直面している諸問題に対する客観的な視点を提供する存在としても機能しているのだ。ドラえもんのキャラクターが日常生活に溶け込んでいることで、周囲に対する思いやりや共存の大切さを改めて考える機会を与えてくれる。ドラえもんはただのキャラクターではなく、我々に対して永遠のメッセージを発信し続けている、時代を超越したアイコンなのである。<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
ドラえもんは、国内外の多くの子供たちに愛されているが、最近では海外のファンからも高い評価を受けている。特に中国では、日本の漫画文化やアニメ文化に大きな影響を受けていることから、ドラえもんの人気は絶大である。YouTubeで公開されてい るドラえもんの英語字幕版は、アメリカやカナダの若者たちを中心に爆発的な人気を博しており、日本政府が推進するクールジャパン戦略にも大きく貢献している。これらの事例から分かるように、ドラえもんは単なる子供向けアニメの範疇を超えて、日本文化の代表として世界中の人々に影�<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
響を与えている。ドラえもんが持つユーモアやウィットは、世界中の人々の心を捉えて離さない。そして、ドラえもんの影響は日本国内だけに留まらず、漫画やアニメの海外市場への進出を加速させている。これまで日本のマンガやアニメは、欧米諸国での市場開拓に消極的であったが、ドラえもんの成功によりその見方が変わり始めている。ドラえもんは、日本のポップカルチャーを代表するキャラクターとして、今後も世界中の人々を魅了し続けていくことだろう。<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
日本のポップカルチャーの海外進出において、ドラえもんはその火付け役となった。特にSNSの普及により、国境を越えたコミ ュニケーションが容易になった今日では、ドラえもんのキャラクターが世界中のファンから愛されている様子がよく見られる。また、漫画やアニメのみならず、音楽や映画、ファッションなど様々なジャンルでドラえもんの影響を見ることができる。これは、ドラえもんが持つ普遍的な魅力と、日本の創造性の高さを示す一例である。

国際的な影響力を持つドラえもんは、日本のアニメ文化のみ<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>
く国際的な文化交流にも貢献している。ドラえもんが持つ知恵や勇気、思いやりの精神は、国境や文化を越えて多くの人々に共感を呼び起こしており、日本のアニメ文化を世界に広めるための重要なツールとなっている。ドラえもんは、ただのキャラクターではなく、日本のアニメーションの持つ多様性と可能性を体現している象徴とも言える存在である。ドラえもんが持つこれらの魅力は、これからも多くの人々に愛され続け、日本のアニメ文化の発展に寄与していくことだろう。<|endoftext|>
<|user|>
続きを書いてください。<|endoftext|>
<|assistant|>

--- output
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:100257 for open-end generation.
ドラえもんの世界は、ただのキャラクターではなく、日本のアニメ文化の持つ多様性と可能性を体現している象徴とも言える存在である。ドラえもんが持つ知恵や勇気、思いやりの精神は、国境や文化を越えて多くの人々に共感を呼び起こしており、日本のアニメーションの持つ多様性と可能性を広めるための重要なツールとなっている。ドラえもんはただのキャラクターではなく、日本のアニメーションの持つ喜びと癒しの要素を凝縮した作品である。また、ドラえもんは日本のアニメーションが持つ多様性を示す象徴として、世界中の
prompt tokens = 3794
output tokens = 256 (1.713872 [tps])
   total time = 149.369357 [s]
>>>

この記事が気に入ったらサポートをしてみませんか?