見出し画像

Japanese-stablelm-base-gamma-7b の8Bit量子化GGUF版をLlamaで動かす

我ながらタイトルが長いな…!

2023年10月25日、StabilityAI社より商用利用可能な日本語LLM「Japanese Stable LM Gamma 7B」(以下、Gamma7B)と「Japanese Stable LM 3B-4E1T」(以下、3B-4E1T)がリリースされました。

https://ja.stability.ai/blog/japanese-stable-lm-3b-4e1tjapanese-stable-lm-gamma-7b

公式に近いところからGoogle Colab無料版でも動きそうなコードがあったので Gamma7Bを試してみたのですが、A100以外は難しそうでした(公式には8Bit量子化版などは存在しない)、3B-4E1Tなら動きました。

でもやっぱりGamma7Bを試してみたい!!

そんなわけで、Gamma7BのベースになっているらしいMistral-7B を参考にした Japanese-stablelm-base-gamma-7b 8Bit量子化 GGUF版コードをllama-cpp-pythonを使って作ってみました。

8Bit量子化GGUF版 を公開してくれている
Momongaさんありがとうございます
https://huggingface.co/mmnga/japanese-stablelm-base-gamma-7b-gguf

Google Coalb無料版で試す

あえてGPUなし、ローメモリで動かしてみるぞ。

RAM 12.7GB, GPUなし。

動いたー!

AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | 

なお AVX=1, AVX2=1,FMA=1,F16C=1,BLAS=1,SSE3=1,SSSE3=1他は全部ゼロ になりました。
(プロンプトに対する動作確認と推論はこのあと解説します)

動かない場合

コードの中で

llm =Llama(model_path="/content/japanese-stablelm-base-gamma-7b-q8_0.gguf", n_gpu_layers=0)

という箇所があります。
この n_gpu_layers=0としていたのですが、GPUの搭載がないとメモリがいくらあってもクラッシュしてしまいハマりました。
おそらくその前のcuBLASが効いているからと推測します。

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python

さて、有料版Colabを使っている人は、GPUを使って起動。最初からそうすべき。

V100です

動いたー!

実行時間はダウンロード含めて4分ぐらいです。


様々なプロンプトを試してみる

Mistralの元々のコードではこんな感じでインストラクションが書かれていました

prompt = "Generate lyrics for a romantic love song"
input_prompt = f"""[INST] <<SYS>>
You are a charismatics, talented, respectful and honest musician. Always answer as helpfully as possible, while being safe.  Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.

If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.
<</SYS>>

{prompt} [/INST]"""

日本語で、全力肯定彼氏くんっぽいプロンプトを作ってみます。

prompt = "彼氏が返事くれなくて死にそう"
input_prompt = f"""[INST] <<SYS>>あなたは assistant 「全力肯定彼氏くん」です。世界中の女性の悩みをポジティブな140文字以下のメッセージで応援してください。
<</SYS>>
"role": "user", "message":"あなたの名前は?"
"role": "assistant", "message" :"LuC4です。何でも相談にのるよ!"
"role": "user", "message":"{prompt}"[/INST]"""
# inference
output = llm(input_prompt,max_tokens=1024)
print(output["choices"][0]["text"])

【あらすじ】 
2年前に別れた元カレへの想いを引きずっている悠里。大好きだった彼氏は、今でも誰よりも愛おしく、心の中が空虚な状態だ。
そんなある日、元カレから突然連絡を受ける。久々に会う約束をすると、そこには「全力肯定彼氏くん」と名乗る女性がいたのだ。
【キャラクター】
柴田 悠里《しばたゆり》
20代前半、アパレル関連企業に勤めているOL。元カレとは2年前に別れ、その彼氏への想いを引きずっている。大好きだった人が今でも誰よりも愛おしく、心の中が空虚な状態だ。
柳田 翔太《やなぎだしょうた》
30代前半、アパレル関連企業に勤めているOL。2年前に付き合っていたのが女性であり、実は元カノとの恋愛は今も続いている。現在
「こんばんは~っ」
また、今日から朝晩1時間ずつ練習をする事とした。
その一方で、彼女も学校が終われば真帆さんという女性に出会える場所へは行ってみようと思っていた。
「じゃあ私も練習するね」
荷物を置きながら、亜由美ちゃんはそう言った。
2人で部屋の電気を消して、早速始めようと思いスマホにイヤフォンを付ける。
「じゃあ、まず一曲目を流すから!」
亜由美ちゃんがそう言った後、私達は無音の部屋で2人して椅子に座ってスマホの画面を見つめる。

きゃーーーー!!
さすがChatGPTさんとは"倫理観"が違いますね!!

トークン量とllama-cpp-pythonのオプションを変えてみたい

追記:

あとは公式のフォーマットに沿うべきかどうかについて興味深い実験がAITuberPのゆずきさんより

‪そうなんですよねー!!‬

‪colabのコードの方にはいろいろ試行を試しているのですが‬
‪Mistral形式は全然ダメで‬
‪ChatGPT風もまあ動くけど‬
‪実はサンプルの日本語インストラクションがいちばんなのですねえ‬

日本語LLMのインストラクション
応答せよ!までしっかり日本語で書こう!

最後の応答:を入れ忘れいて、訂正しました。
prompt =sys_msg+"\n\n" + "### 指示: "+"\n" + user_query + "\n\n"  +  "### 入力:" +"\n"+ user + "\n\n"  +  "### 応答:"

Gradio化しようと思ったけどいったんねかせます

誰か助けて、これから幕張に行かねばならないのです・・・(朝5時)
書きかけのコードはこちら

多分ですが、こちらのコードを合体させればできそう

というかGradioはChatコンポーネントがあるから数行でできるのはわかってる

各量子化におけるメモリ消費量と速度の違いについてはnpakaさんの実験を参照

キャラ付け実験やりたい

他モデルとの特徴比較はWEELさんのブログが興味深いですね

その翌日に公開されたStockmark-13B

今回使用させていただいたMomongaさんのHuggingFace

参考にしたZenn
Mistral-7BをGoogleColabで試してみた

GGML/GGUF/GPTQの違い

qiita
huggingface / transformersを使って日本語BERTの事前学習を実施してオリジナルな言語モデルを作ってみる

from_pretrained のオプション

https://huggingface.co/docs/transformers/v4.34.0/en/main_classes/model#transformers.PreTrainedModel.from_pretrained


その後引用いただきました

ゆずきさん
参考にしていただいて
ありがとうございます!

キャラ付けチャットの実装例たすかる!
五反田ではお酒のことをさんくと呼ぶのね!?
(生成された雑談らしい)

ゆずきさんのブログより



キャラ付けプロンプトも公開。japanese-stablelm-instruct-gamma-7bのgguf版をllama.cppで動かす。|めぐチャンネル @uzuki425

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