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

Google Colab で ELYZA-japanese-Llama-2-7b を試す

    「Google Colab」で「ELYZA-japanese-Llama-2-7b」を試したので、まとめました。

    1. ELYZA-japanese-Llama-2-7b

    「ELYZA-japanese-Llama-2-7b」は、東京大学松尾研究室発・AIスタートアップの「ELYZA」が開発した、日本語LLMです。Metaの「Llama 2」に対して日本語による追加事前学習を行なっています。

    2. ELYZA-japanese-Llama-2-7bのモデル

    「ELYZA-japanese-Llama-2-7b」では、次の4種類のモデルが公開されています。

    ・ELYZA-japanese-Llama-2-7b : MetaのLlama-2-7b-chatに約180億トークンの日本語テキストで追加事前学習したモデル。
    ・ELYZA-japanese-Llama-2-7b-instruct : 指示に従い様々なタスクを解くことを目的とした、ELYZA-japanese-Llama-2-7bに事後学習したモデル。
    ・ELYZA-japanese-Llama-2-7b-fast : MetaのLlama-2-7b-chatに日本語の語彙を追加し、約160億トークンの日本語テキストで追加事前学習したモデル。約1.82倍高速に推論。
    ・ELYZA-japanese-Llama-2-7b-fast-instruct : 指示に従い様々なタスクを解くことを目的とした、ELYZA-japanese-Llama-2-7b-fastに事後学習を行したモデル。

    既に130億、700億パラメータのモデルの開発にも着手しており、それらのモデルについても公開を検討しているとのことです。

    3. Colabでの実行

    Colabでの実行手順は、次のとおりです。

    (1) パッケージのインストール。

    # パッケージのインストール
    !pip install transformers accelerate bitsandbytes

    (2) トークナイザーとモデルの準備。
    今回は、高速な指示モデル (elyza/ELYZA-japanese-Llama-2-7b-fast-instruct) を利用しています。

    from transformers import AutoModelForCausalLM, AutoTokenizer
    import torch
    
    # トークナイザーとモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        "elyza/ELYZA-japanese-Llama-2-7b-instruct"
    )
    model = AutoModelForCausalLM.from_pretrained(
        "elyza/ELYZA-japanese-Llama-2-7b-instruct", 
        torch_dtype=torch.float16,
        device_map="auto"
    )

    (3) 推論の実行。

    # プロンプトの準備
    prompt = """<s>[INST] <<SYS>>
    あなたは誠実で優秀な日本人のアシスタントです。
    <</SYS>>
    
    まどか☆マギカでは誰が一番かわいい? [/INST]"""
    
    # 推論の実行
    with torch.no_grad():
        token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
        output_ids = model.generate(
            token_ids.to(model.device),
            max_new_tokens=256,
            pad_token_id=tokenizer.pad_token_id,
            eos_token_id=tokenizer.eos_token_id,
        )
    output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
    print(output)
    まどか☆マギカに登場するキャラクターの中で、誰が一番かわいいか、私の意見を述べます。
    
    私は人間である冬木高校の暁美ほむらが一番かわいいと考えます。
    
    ほむらは物語の冒頭、幼い頃に事故で両親を亡くし、兄の憂木凛と二人で暮らしています。彼女は明るく元気な性格で、周りの人からも愛されています。しかし、彼女は自分の運命を変えるため、魔法少女になるための試練に挑むことを決意します。
    
    ほむらは魔法少女になるために、魔法少


    プロンプトの書式は、「Llama 2」と同様です。

    <s>[INST] <<SYS>>
    {システムメッセージ}

    <</SYS>>

    {ユーザーメッセージ} [/INST]

    4. ストリーミング出力

    ストリーミング出力するには、TextIteratorStreamerを使います。

    from transformers import TextIteratorStreamer
    from threading import Thread
    
    # ストリーミング出力
    with torch.no_grad():
        streamer = TextIteratorStreamer(tokenizer)
        token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
        generation_kwargs = dict(
            input_ids=token_ids.to(model.device),
            max_new_tokens=256,
            pad_token_id=tokenizer.pad_token_id,
            eos_token_id=tokenizer.eos_token_id,
            streamer=streamer, 
        )
        thread = Thread(target=model.generate, kwargs=generation_kwargs)
        thread.start()
    
    # 出力
    for new_text in streamer:
        print(new_text.replace(" ", ""), end="")

    5. ELYZA Tasks 100

    日本語LLMの性能評価を行うための、多様な日本語タスクからなるデータセットも提供されています。

    6. 公式解説記事



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ