見出し画像

Paperspace Gradient で OpenCALM-7B を動かす

本日5月17日にサイバーエージェント社が一般公開した、巷で話題の「OpenCALM-7B」をPaperspace Gradientで動かしてみました。

OpenCALM

OpenCALMとはサイバーエージェント社が一般公開した日本語LLM(大規模言語モデル)です。StableLMやRWKVと違う点は日本語に特化していることで、オープンな日本語データで学習したモデルであることが特徴です。商用利用可能なCC BY-SA 4.0ライセンスで提供されており、2023年5月17日時点では日本国内における公開モデルにおいて最大級のモデルです。ChatGPTのようなファインチューニング済みのモデルではないので、実際の利用時にはファインチューニングが必要です。

OpenCALMはサイズ別に6つのモデルが公開されています。今回動かすOpenCALM-7Bは68億パラメータのモデルで、サイズ感としてはギリギリクラウドGPUサービス(GradientやColabなど)で動かしたりファインチューニングできるぐらいのサイズ感。

Paperspace Gradientで動かす

各所の報告ではOpenCALM-7Bの実行に14.7GBほどのGPUメモリが必要だったとのことで、動かすだけであれば14.7GB以上のGPUを選択すればOKだと思います。今回はたまたまA100が空いていたので、A100を選択しました。

デフォルトで立ち上がるスペースでは各種ライブラリが古いのでアップデートしておきます。また、accelerateライブラリも一緒にインストールします。

!pip install -U transformers torch
!pip install accelerate

実行環境
python 3.9.16
torch v2.0.1
transformers v4.29.2

あとは以下のサンプル通りのコードを入力するだけ。

まずはモデルとトークナイザをロード。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

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

プロンプトを投げ込むための関数を作っておき・・・

def calm(user_input: str, max_token: int = 64, temperature: float = 0.7):
    inputs = tokenizer(user_input, return_tensors="pt").to(model.device)
    with torch.no_grad():
        tokens = model.generate(
            **inputs,
            max_new_tokens=max_token,
            do_sample=True,
            temperature=temperature,
            pad_token_id=tokenizer.pad_token_id,
        )

    output = tokenizer.decode(tokens[0], skip_special_tokens=True)
    return output

プロンプトを引数に入力すれば動作します。インストラクションチューニングされていないモデルなので、質問形式ではなく補完形式でプロンプトを作成しないと、違和感のある出力になります。

以下がそれぞれの出力の違いの例です。

calm("生成AI全盛のこの世の中でプログラマーはこの先生きのこれるか?", 64, 0.5)

生成AI全盛のこの世の中でプログラマーはこの先生きのこれるか?
AI、機械学習、ディープラーニングの違いを説明できますか?機械学習と統計の違いは?
資生堂とアクセンチュアによる「資生堂インタラクティブビューティー」設立の目的とは
2019年、女子中高生の流行語は「ぴえん」「べびたっぴ」/人気アプリは「SODA」【AMF調べ】
「SNSマーケティング=

OpenCALM-7Bによる出力
calm("生成AI全盛のこの世の中でプログラマーは", 64, 0.5)

生成AI全盛のこの世の中でプログラマーは必要とされてるのか?
プログラマーやプログラマーのような職に就く者は、自分の職種、自分の技術、自分の技術、自分の技術、と、自分の技術にばかり執着する。プログラマーが持つべきマインドは、自分を枠にはめて考えるのをやめることだ。プログラマーは、プログラマーが発明したアルゴリズム、プログラマーが

OpenCALM-7Bによる出力

最大トークンを64に設定し、A100(80GB)で100回試行した際のパフォーマンスは以下の通りでした。大体3秒ほど。

平均: 3.0167957016096625 秒
中央: 3.1333273489981366 秒
最大: 3.2093844689952675 秒
最小: 1.2602217169987853 秒
標準偏差: 0.41830925870635927 秒

関連情報

所感

まず英語ベースで出力されるところを日本語で返すように微調整するところからがスタートラインだったものが、まず日本語が返るところからがスタートラインになったのは意義深い。また私たちの眠れない夜が始まる。

現場からは以上です。

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