今回はサイバーさんの
大規模日本語モデルを
Google Colabで試してみることにしました

解説動画はこちら



はじめに

サイバーエージェントから日本語LLM
OpenCALMが発表されたので
Google Colabで動かしてみることとします

最大68億パラメータの
日本語LLM(大規模言語モデル)

オープンなデータで学習した
商用利用可能なモデルとのことです

詳細はこちら

chatGPTなどとは違い
入力した文章の
続きとなる文章を生成してくれる
LLMになっています

モデルの性能も
いくつか種類がある様で

Model Params Layers Dim Heads Dev ppl
cyberagent/open-calm-small 160M 12 768 12 19.7
cyberagent/open-calm-medium 400M 24 1024 16 13.8
cyberagent/open-calm-large 830M 24 1536 16 11.3
cyberagent/open-calm-1b 1.4B 24 2048 16 10.3
cyberagent/open-calm-3b 2.7B 32 2560 32 9.7
cyberagent/open-calm-7b 6.8B 32 4096 32 8.2

こんな感じのモデル構成になっています
今回は一番小さい small モデルを試します


必要なもの

Google Colabで動かすのに必要なのは
1.「ランタイムタイプの変更」:GPUに変更する
2.必要なライブラリのインストール
3.ライブラリやモデルのインポート
です


・「ランタイムタイプの変更」:GPUに変更する

Colabのメニューから「ランタイムタイプの変更」で
GPUに変更しておきましょう




・必要なライブラリのインストール

Google Colabのライブラリだけでは
動かないので次の2つをインストールしましょう
!pip install transformers

!pip install accelerate

1分くらいでインストール出来ます


・ライブラリやモデルのインポート

次のコードでライブラリと
モデルをセットアップ出来ます
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("cyberagent/open-calm-small", device_map="auto", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/open-calm-small")

エラーはライブラリなどが
インストール出来ていない場合に起きるので
先にインストール確認しておきましょう


次のコードは入力用の関数です
先に実行しておきましょう
# 入力用の関数を定義
def make_text(input_text):
    inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
    with torch.no_grad():
        tokens = model.generate(
            **inputs,
            max_new_tokens=64,
            do_sample=True,
            temperature=0.7,
            pad_token_id=tokenizer.pad_token_id,
        )
    return tokenizer.decode(tokens[0], skip_special_tokens=True)


ここまで揃ったらあとは実行のみです
文章を入力して実行してみましょう
input_text = "文章を入力、"
out = make_text(input_text)
print(out)

次のような文章が生成されました

吾輩は猫である、つまり猫である。
猫が猫であるということは、
すなわち猫であるということは、
つまり猫であるということである。

これは、猫に人間が従うという前提が、
猫に人間を従わせるという前提が前提になっているからである。

猫は、人間に従属する、従属関係にある。
猫は、人間に従属する



諦めたらそこで試合終了ですよ、
正直、今、プロでも勝てる試合もそんなにない。
しかも、まだ2試合あるし。

まあ、その状態は、
プロでも通用しないってことですよね。

で、その状態での、
4連敗は、
かなり、ヤバい。
もう、
負けると、
もう、




俺は高校生探偵、工藤新一。
幼馴染と遊園地へ遊びに行って、
黒ずくめの男の怪しげな取引現場を目撃した、
同級生の阿久津。

そして、阿久津は、ある事件の犯人に成りすまして、
美人でかっこいい高校生探偵・工藤新一と名乗り、
高校生探偵事務所を開いたのだ。

その依頼を受けた新一は、阿久津に、
事件の詳細を尋ねた。
それは「工藤新一」という同級生の阿久津


勝手に色々な物語を生成してくれます

正直な話
精度に関しては良く分かりません

実行毎に結果は変わるので
良いものが出るまで
繰り返してみることをお勧めします


今回はサイバーエージェントのLLMを
ご紹介しました

それでは