rinna/nekomata-14b-instructionを動かす(4bit量子化を含む)

はじめに

公開されたので、触っていきます

環境

準備

ライブラリを入れます

!pip install tiktoken
!pip install transformers_stream_generator
!pip install transformers
!pip install torch

推論

モデルのロード

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("rinna/nekomata-14b-instruction", trust_remote_code=True)

# Use GPU with fp16
model = AutoModelForCausalLM.from_pretrained("rinna/nekomata-14b-instruction", device_map="auto", trust_remote_code=True, fp16=True)

翻訳プロンプト

instruction = "次の日本語を英語に翻訳してください。"
input = "大規模言語モデル(だいきぼげんごモデル、英: large language model、LLM)は、多数のパラメータ(数千万から数十億)を持つ人工ニューラルネットワークで構成されるコンピュータ言語モデルで、膨大なラベルなしテキストを使用して自己教師あり学習または半教師あり学習によって訓練が行われる。"
prompt = f"""
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
{instruction}

### 入力:
{input}

### 応答:
"""
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=200,
        do_sample=True,
        temperature=0.5,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id
    )

output = tokenizer.decode(output_ids.tolist()[0])
print(output)

結果

以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
次の日本語を英語に翻訳してください。

### 入力:
大規模言語モデル(だいきぼげんごモデル、英: large language model、LLM)は、多数のパラメータ(数千万から数十億)を持つ人工ニューラルネットワークで構成されるコンピュータ言語モデルで、膨大なラベルなしテキストを使用して自己教師あり学習または半教師あり学習によって訓練が行われる。

### 応答:
Large language models (LLM) are computer language models consisting of artificial neural networks with millions to billions of parameters that are trained by self-supervised or semi-supervised learning using massive unlabeled text.<|endoftext|>
'\n以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。\n\n### 指示:\n次の日本語を英語に翻訳してください。\n\n### 入力:\n大規模言語モデル(だいきぼげんごモデル、英: large language model、LLM)は、多数のパラメータ(数千万から数十億)を持つ人工ニューラルネットワークで構成されるコンピュータ言語モデルで、膨大なラベルなしテキストを使 用して自己教師あり学習または半教師あり学習によって訓練が行われる。\n\n### 応答:\n A large language model (LLM) is a computer language model composed of artificial neural networks with many parameters (from tens of millions to billions) trained by self-supervised learning or semi-supervised learning using a large amount of unlabeled text.<|endoftext|>\n'

まどマギプロンプト

instruction = "以下の内容に対して情報を提示してください。"
input = "まどマギで一番可愛いキャラはなんですか?"
prompt = f"""
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
{instruction}

### 入力:
{input}

### 応答:
"""
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

with torch.no_grad():
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=200,
        do_sample=True,
        temperature=0.5,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id
    )

output = tokenizer.decode(output_ids.tolist()[0])
print(output)

結果

以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
以下の内容に対して情報を提示してください。

### 入力:
まどマギで一番可愛いキャラはなんですか?

### 応答:
一番可愛いキャラは、まどマギのヒロインである鹿目まどかです。彼女は、優しい性格と、時に弱さを見せる少女らしい一面を持っています。しかし、彼女の本当の強さは、魔法少女としての力を発揮した時です。彼女は、魔法少女としての力を発揮し、世界を救うことに成功しました。彼女のストーリーは、多くのファンに愛されています。また、彼女は、魔法少女としての力を発揮した時、その美しさを最大限に発揮することができます。彼女の美しい姿は、多くのファンを魅了しています。<|endoftext|>

使用リソース

使用したGPU RAMは20GBほどでした

4bit量子化

追加ライブラリ

!pip install accelerate bitsandbytes

モデルのロードの設定

引数に load_in_4bit=True を入れます

model = AutoModelForCausalLM.from_pretrained("rinna/nekomata-14b-instruction", device_map="auto", trust_remote_code=True,load_in_4bit=True)

推論

プロンプトは上記と同じまどマギテストで行います

結果

以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
以下の内容に対して情報を提示してください。

### 入力:
まどマギで一番可愛いキャラはなんですか?

### 応答:
まどマギで一番可愛いキャラは、新編集版のマギアレコードで登場する、まどかの妹の「環いろは」です。<|endoftext|>

使用リソース

使用したGPU RAMは12GBでした