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なし、ローメモリで動かしてみるぞ。
動いたー!
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を使って起動。最初からそうすべき。
動いたー!
実行時間はダウンロード含めて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
この記事が気に入ったらサポートをしてみませんか?