はじめに
以下のように rinnaさんがチャット形式のハイスコア版 GPTQを公開されていたので、触ってみます
rinnaはLlama 2の日本語継続事前学習モデル「Youri 7B」シリーズを公開しました。
— rinna Research (@rinna_research) 2023年10月31日
①Youri 7B:日英40Bトークンで継続事前学習
②Youri 7B Instruction:高いベンチマークスコア
③Youri 7B Chat:複数ターンの対話に強い
GPTQ 4bit 量子化モデルも公開しています。
詳細↓ https://t.co/J5ghGq7Kme pic.twitter.com/PfkWRVjRVw
環境
- Google Colob T4(ハイメモリ)
実行
基本的にサンプルに準拠しています。
準備
まずは必要なライブラリをインストールしていきます
!pip install torch !pip install transformers sentencepiece bitsandbytes accelerate !pip install auto-gptq --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118/
実行
import torch from transformers import AutoTokenizer from auto_gptq import AutoGPTQForCausalLM tokenizer = AutoTokenizer.from_pretrained("rinna/youri-7b-chat-gptq") model = AutoGPTQForCausalLM.from_quantized("rinna/youri-7b-chat-gptq", use_safetensors=True) instruction = "次の日本語を英語に翻訳してください。" input = "自然言語による指示に基づきタスクが解けるよう学習させることを Instruction tuning と呼びます。" context = [ { "speaker": "設定", "text": instruction }, { "speaker": "ユーザー", "text": input } ] prompt = [ f"{uttr['speaker']}: {uttr['text']}" for uttr in context ] prompt = "\n".join(prompt) prompt = ( prompt + "\n" + "システム: " ) token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt") with torch.no_grad(): output_ids = model.generate( input_ids=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) output = output[len(prompt):-len("</s>")].strip() input = "大規模言語モデル(だいきぼげんごモデル、英: large language model、LLM)は、多数のパラメータ(数千万から数十億)を持つ人工ニューラルネットワークで構成されるコンピュータ言語モデルで、膨大なラベルなしテキストを使用して自己教師あり学習または半教師あり学習によって訓練が行われる。" context.extend([ { "speaker": "システム", "text": output }, { "speaker": "ユーザー", "text": input } ]) prompt = [ f"{uttr['speaker']}: {uttr['text']}" for uttr in context ] prompt = "\n".join(prompt) prompt = ( prompt + "\n" + "システム: " ) token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt") with torch.no_grad(): output_ids = model.generate( input_ids=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)
結果