メインコンテンツへスキップ
見出し画像

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

     
     
    未来から来た、AIとVRとGPUのUXをエンタメにするホワイトハッカー作家。 年間700本以上の記事を書きながら、生成AI時代の「つくる人」の技術を 「難しいまま、面白く」社会に実装しています。 講演依頼なども歓迎です https://akihiko.shirai.as