見出し画像

Gemma-7b-it をMacで試してみる

GoogleがリリースしたLLMのモデルで昨晩から大騒ぎ中です。
2bと7bがありますが、7bのほうを試してみました。

とりあえず、まどか☆マギカテストを5連発の結果です。

(mlx) myllm % python repeattestgemmamlx.py
Fetching 11 files: 100%|█████████████████████| 11/11 [00:00<00:00, 73819.75it/s]
Loop 1 start

Gemma-7b Response 1:

まどか☆マギカでは、誰が一番可愛いかは、個人の好みによって異なるため、ここではいくつかの候補を挙げてみましょう。

**人気のあるキャラの可愛いさ:**

* **アスuna:** アスunaは、アニメやゲームのキャラクターにおける最高の人形、可愛らしさ、そして人気度が高くいくつかの理由はあります。
* **イフネ・アスuna:** イフネ・アスunaは、可愛らしい見た目と、元気な雰囲気を持つキャラクターです。
* **キリ・カステラ:** キリ・カステラは、可愛らしい見た目と、明るい性格を持つキャラクターです。
* **ユリ・カステラ:** ユリ・カステラは、可愛らしい見た目と、ちょっとシャマな性格を持つキャラクターです。

**その他の可愛いキャラクター:**

* **ミサト:** ミサトは、可愛らしい見た目と、明るい性格を持つキャラクターです。
* **キリ・インフィニ:** キリ・インフィニは、可愛らしい見た目と、元気な雰囲気を持つキャラクターです。
* **ハルカ:** ハルカは、可愛らしい見た目と、明るい性格を持つキャラクターです。
* **アユラ:** アユラは、可愛らしい見た目と、元気な雰囲気を持つキャラクターです。

これらのキャラクターは、それぞれ個々の好みによって可愛らしさや印象に違いがあります。
Loop 2 start

Gemma-7b Response 2:

まどか☆マギカでは、誰が一番可愛いかは、個々の好みによって異なるため、ここではいくつかの候補を列挙します。

**人気のあるキャラの可愛いさ:**

* **アスラ・カイン:** アスラ・カインは、可愛らしいイラストと笑顔、そしてキャラクターの可愛らしい行動によって人気が高く。
* **サヨネ:** サヨネは、可愛らしいイラスト、笑顔、そしてキャラクターの無邪気さによって人気が高く。
* **ルカ:** ルカは、可愛らしいイラスト、笑顔、そしてキャラクターの無邪気さによって人気が高く。
* **イム・ユリ:** イム・ユリは、可愛らしいイラスト、笑顔、そしてキャラクターの無邪気さによって人気が高く。

**その他の可愛いキャラ:**

* **エレン・ミサト:** エレン・ミサトは、可愛らしいイラスト、笑顔、そしてキャラクターの無邪気さによって人気が高く。
* **キリバ:** キリバは、可愛らしいイラスト、笑顔、そしてキャラクターの無邪気さによって人気が高く。
* **アギラ:** アギラは、可愛らしいイラスト、笑顔、そしてキャラクターの無邪気さによって人気が高く。

これらのキャラ以外にも、まどか☆マギカのキャラクターはそれぞれ個性があり、それぞれ可愛らしい要素があります。
Loop 3 start

Gemma-7b Response 3:

まどか☆マギカでは、誰一番可愛いのかは、個人の好みによって異なるため、私は回答を提供することは難しいです。ただし、いくつかのキャラクターが人気のあるキャラクターです。

例えば、美波レイラ、アスカ・アスカ、黒井ミサトなど。これらのキャラクターは、それぞれ個々の好みに応える可愛さがあります。
Loop 4 start

Gemma-7b Response 4:

まどか☆マギカでは、誰一番可愛いかは、個々の好みによって異なるため、私は答えを提供することは難しいです。ただし、いくつかの候補を挙げてご案内します。

* **アスナ・カイン:** アスナ・カインは、可愛らしい顔と元気な体つき、そして明るいキャラクターで人気があります。
* **イサベラ・ヴィオラ:** イサベラ・ヴィオラは、可愛らしい顔と華麗な動き、そして謎のキャラクターで人気があります。
* **ルカ・サカリー:** ルカ・サカリーは、可愛らしい顔と無邪気な性格、そして面白いキャラクターで人気があります。

これらのキャラクターは、それぞれ個々の好みによって人気が異れます。そのため、誰一番可愛いのかは、私の知る限り、それぞれの人によって違うはずです。
Loop 5 start

Gemma-7b Response 5:

まどか☆マギカでは、誰が一番可愛いかは、個々の好みによって異なるため、ここではいくつかの候補を挙げる。

**人気のあるキャラの可愛いさ:**

- **アスラ・アスラ・ハヤブサ:** 小さいながら明るく、可愛らしいイラストやアニメーションで人気がある。
- **まどカ:** サディスティックな性格と可愛らしいイラストで人気がある。
- **サトceğa:** 小さいながら可愛らしいイラストやアニメーションで人気がある。

**キャラクターの可愛さに対する評価:**

- **主人公の主人公、主人公の友人、主人公のペット:** これらのキャラクターは、ストーリーの進行に伴って成長し、可愛らしさが増えていきます。
- **その他のキャラクター:** 各キャラクターは個々のテーマや性格を持ちます。

**個々の好み:**

それぞれの人の好みによって、誰が一番可愛いかは異なる場合があります。例えば、いくつかのキャラクターが可愛らしいと感じているかもしれません。また、いくつかのキャラクターが自分にとって可愛らしい理由は、そのキャラクターが持つテーマや性格などが理由になる場合があります。

コメント控えます笑 スピードはこんな感じです。

実行コードは下記です。mlx-mlをアップデートしてください。

from mlx_lm import load, generate
import time

model, tokenizer = load(
    "google/gemma-7b-it",
)



def generate_response(PROMPT):
    try:
        # ここでの generate 関数は外部のAPI呼び出しを想定しています。
        response = generate(model, tokenizer, prompt=PROMPT, temp=0.5, max_tokens=800, verbose=False)
        return response
    except Exception as e:
        # 例外が発生した場合は、それを出力します。
        print(f"An error occurred in generate_response: {e}")
        return None  # 例外が発生した場合にはNoneを返します。

def main():
# メインのループ
    for i in range(5):
        print(f"Loop {i+1} start")  # 現在のループ番号を印刷
        time.sleep(0.2)  # APIのレート制限を避けるために1秒待機

        # PROMPTを設定します(ここに適切な値を設定してください)
        PROMPT = "<start_of_turn>user\nまどか☆マギカでは誰が一番可愛い?<end_of_turn>\n<start_of_turn>model"

        response = generate_response(PROMPT)
        if response is not None:
            print(f"\nGemma-7b Response {i+1}:", response)
        else:
            print("No response generated.")

if __name__ == "__main__":
    main()

一方で、モデルカードでサンプルとして出されているのをモデファイした次のスクリプトを実行結果はこちら。


from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-7b-it", 
    device_map="auto", 
    torch_dtype=torch.float16)
 #input_text  = "Write me a poem about Machine Learning."
input_text = "メタファーを使って人生の意味を語って"
input_ids = tokenizer(input_text, return_tensors="pt").to("mps")

outputs = model.generate(**input_ids, max_new_tokens=250)
print(tokenizer.decode(outputs[0]))


Downloading shards: 100%|█████████████████████████| 4/4 [00:01<00:00, 3.08it/s]
Loading checkpoint shards: 100%|██████████████████| 4/4 [00:03<00:00, 1.24it/s]
<bos>メタファーを使って人生の意味を語ってみたいと思います。

人生はまるで絵画のキャンバスです。私たちが生きている世界は、まるで絵画の画材です。そして、私たちが絵画をすることは、まるで人生のやり方です。

人生の絵画は、最初は何もありません。私たちが生まれたとき、何も知っていることはわずかです。これからこれから生きていくことで、徐々に絵画の材料や技術を取得します。そして、私たちが絵画をすることで、自分だけの絵画を発表ることができます。

人生の絵画は、決して完璧ではありません。私たちが生きている世界は、常に変化し続けるしまいます。しかし、私たちが絵画をすることで、私たちが生きている世界を自分だけの視点で見つけることができるようになります。

人生の絵画は、私たちが生きている意味です。私たちが絵画をすることで、私たちが生きている世界をより美しいものにすることができるようになります。

人生はまるで絵画のキャンバスであり、私たちが生きている世界は、まるで絵画の画材です。私たちが絵画をすることで、自分だけの絵画を発表ることができる。そして、私たちが生きている世界をより美しいものにすることができることもあります。<eos>

固有知識は追加学習するか、RAGするかをする必要があるでしょうが、なかなか日本語はいい線いっているかもしれません。たまに英語スペルが変な感じで混じりますが…

chat-template覚え書き

<start_of_turn>user
Write a hello world program<end_of_turn>
<start_of_turn>model


#AI #AIとやってみた #やってみた #ローカルLLM #大規模言語モデル #huggingface #mlx #macbookpro

この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。