モデルの概要

このモデルは、LLM2024Autumn最終課題提出のため作成しました。 ベースは「llm-jp/llm-jp-3-13b」です。 このベースモデルをichikara-Instruction、ELIZA-task-100、天元突破データセット(一部)にてSFTしました。 (予選暫定LB 3.28 予選突破ならず。。。。。)

使用方法(python)

以下のコードを実行すると、HuggingFace上の本モデル「satoyutaka/llm-jp-3-13b-ftELZOZ4_lora」を実行して、最終課題用入力データ「elyza-tasks-100-TV_0.jsonl」(課題用オリジナルデータセット)を推論し、その結果を{adapter_id}-outputs.jsonlというファイルに出力できます。

ライブラリーのインストール&セットアップ

関連するライブラリーのインストールとインポートを実施します。(trlはバージョンによって動かないので、バージョンを固定)

!pip install -U bitsandbytes
!pip install -U transformers
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft
!pip install trl==0.12.0

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
)
from peft import PeftModel
import torch
from tqdm import tqdm
import json

Hugging FaceのTokenの指定

Hugging Faceで取得したトークンを設定します。read権限でオッケーです。

HF_TOKEN = "Hugging Face Token" #Hugging Face のAPIキーを入力(read権限です。)

ベースとなるモデルと学習したLoRAのアダプタ

ベースとなるモデルと、本モデルを指定します。本モデルはアダプターのみですので、ベースモデルも必要となります。

base_model_id = "llm-jp/llm-jp-3-13b" 
adapter_id = "satoyutaka/llm-jp-3-13b-ftELZOZ4_lora" # 本モデルのモデル名です。

量子化パラメータの設定

ベースモデルが13Bと大きいので量子化(4bit1)を行います。量子化のパラメータをセットします。

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

ベースモデルをロード

ベースモデルを「model」としてロードします。

model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    quantization_config=bnb_config,
    device_map="auto",
    token = HF_TOKEN
)

トークナイザーをロード

トークナイザーもロードします。モデルの指定はベースモデルです。

tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True, token = HF_TOKEN)

ベースモデルと本モデル(LoRAのアダプタ)を統合

ロードしたベースモデルに、本モデルを統合します。

model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)

データセットの読み込み

最終課題用データセットである「elyza-tasks-100-TV_0.jsonl」を読み込みます。ファイルパスはそれぞれの環境に合わせて変更してください。

datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "r") as f: #ファイルパスはお使いの環境に合わせて実施してください。
    item = ""
    for line in f:
      line = line.strip()
      item += line
      if item.endswith("}"):
        datasets.append(json.loads(item))
        item = ""

推論の実施(かなり時間がかかります。環境にもよりますが、30分以上)

推論を実施します。

results = []
for data in tqdm(datasets):

  input = data["input"]

  prompt = f"""### 指示
  {input} 簡潔に回答してください。
  ### 回答
  """

  tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
  attention_mask = torch.ones_like(tokenized_input)
  with torch.no_grad():
      outputs = model.generate(
          tokenized_input,
          attention_mask=attention_mask,
          max_new_tokens=1000,
          do_sample=False,
          repetition_penalty=1.2,
          pad_token_id=tokenizer.eos_token_id
      )[0]
  output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)

  results.append({"task_id": data["task_id"], "input": input, "output": output})

推論結果のファイル出力と保存

推論結果をJosnl形式でファイル出力し、保存します。ファイル名および保存フォルダーは任意に指定してください。Google Colab の場合、保存場所によっては、セッションが終了するとファイルが消えてしまうので、ご注意ください。

import re
jsonl_id = re.sub(".*/", "", adapter_id) #保存用のパスになります。任意に指定してください。
with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f: #保存用のファイル名になります。任意に指定してください。
    for result in results:
        json.dump(result, f, ensure_ascii=False)  
        f.write('\n')

以上で終了です。お疲れ様でした。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.

Model tree for satoyutaka/llm-jp-3-13b-ftELZOZ4_lora

Finetuned
(1120)
this model