LLM2024提出モデル

実行方法

1.githubもしくはHuggingFaceのリポジトリより、以下のファイルをダウンロードしてください。

LLM2024_Model_Inference_fewshot2_20241217-L4.ipynb

github: https://github.com/h-godai/llm/blob/main/LLM2024_env/LLM2024_Model_Inference_fewshot2_20241217-L4.ipynb

2."ELYZA-task-100-TV.jsonl"をカレントディレクトリ以下にコピーしてください

3.「すべて実行」で、必要なファイルのインストールとダウンロードが行われ、カレントディレクトリに評価用のjsonlファイルが出力されます。

学習に使用したデータセット

tengentoppa https://huggingface.co/datasets/DeL-TaiseiOzaki/Tengentoppa-sft-v1.0

以上

以下、参考までに上記プログラムのコードを貼っておきます。

# -*- coding: utf-8 -*-
#"""LLM2024_Model_Inference_fewshot2_20241217-L4.ipynb#
#
#Automatically generated by Colab.
#
#Original file is located at
#    https://colab.research.google.com/drive/1kEddvU3WIhShASF95yiua6iOpLDL04jV
#
#評価準備
#
### インストール
#
#* pip installは失敗することがあるので、失敗したらもう一度実行してください
#
#* githubから必要なファイルをコピーしてきます。gitが使える環境が必須です。
#"""
#
# Commented out IPython magic to ensure Python compatibility.
# %%capture
# # 1. ライブラリのインストール
# # 必要なライブラリをインストール
%%capture
!pip install unsloth
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install -U torch
!pip install -U peft

!pip install openai
!pip install unsloth-zoo # Install or update unsloth-zoo package
!pip install --upgrade --no-cache-dir "unsloth-zoo @ git+https://github.com/unslothai/unsloth-zoo.git"

!pip install --upgrade openai
#!pip install --upgrade transformers[olmo2]

!pip install openai #==1.55.3 # This line installs openai==1.55.3
!pip install --upgrade transformers
!pip install --upgrade trl

# 推論&評価用ライブラリ h.godai
!pip install --upgrade git+https://github.com/h-godai/llm

# 必要なファイルをgithubから持ってきます。環境構築した直後に一度だけ実行してください。

!git clone https://github.com/h-godai/llm.git godai_temp
!cp -rv "godai_temp/LLM2024_env/" .
!rm -r godai_temp

#"""2回目以降はここから実行してください。"""

from google.colab import userdata

# 各APIキーの取得
OPENAI_API_KEY = userdata.get('OPENAI_API_KEY')
GEMINI_API_KEY = userdata.get('GEMINI_API_KEY')
HF_TOKEN = userdata.get('HF_TOKEN')

# 必要なライブラリを読み込み
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re

import inference_evaluator.InferenceEvaluator as FireStorm

DataDir = "./LLM2024_env"

# モデルのロード
from huggingface_hub import login
from peft import LoraConfig

adapter_id = None
dpo_adapter_id = None
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "h-godai/llm-jp-3-13b-ft8-cm25k-dpo1.5x2_bad28_3.44_fs2_LoRA" # Release 15,19

model_name = model_id if adapter_id is None else adapter_id


# unslothのFastLanguageModelで元のモデルをロード。
dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は13Bモデルを扱うためTrue

if adapter_id:
  # LoRAと元のモデルを一緒にロード
  model, tokenizer = FastLanguageModel.from_pretrained(
      model_name=adapter_id,
      dtype=dtype,
      load_in_4bit=load_in_4bit,
      trust_remote_code=True,
  )
else:
  # 元モデルのみロード
  model, tokenizer = FastLanguageModel.from_pretrained(
      model_name=model_id,
      dtype=dtype,
      load_in_4bit=load_in_4bit,
      trust_remote_code=True,
  )

model = FastLanguageModel.for_inference(model) # This line is added to fix the error

import json

class FewShotGenerator:

  def __init__(self, fewshot_prompt = None):
    self.fewshot_prompt = fewshot_prompt

  def save(self, path):
    with open(path, 'w', encoding='utf-8') as f:
      json.dump(self.fewshot_prompt, f, indent=2, ensure_ascii=False)

  def load(self, path):
    with open(path, 'r', encoding='utf-8') as f:
      self.fewshot_prompt = json.load(f)

  # [{ "keywords": [<keyword[:Group]>,...], "fewshot1": <fewshot>, "endshot": <tailshot> }]
  # Group指定がある場合、同一グループのいずれかがマッチすればOK
  # それ以外は全マッチが必要
  #
  def input_prompt_hook(self, eval, prompt):
    for fsp in self.fewshot_prompt:
      kwlen = len(fsp["keywords"])
      ok = True
      group = {}
      for keyword in fsp["keywords"]:
        if ':' in keyword:
          # group付、group内のいずれかでOK
          words = keyword.split(':')
          keyword = words[0]
          gr = words[1]
          hit = keyword in prompt
          if gr not in group:
            group[gr] = 0
          if hit:
            group[gr] += 1
        else:
          # groupなし。全て一致する必要あり
          if keyword not in prompt:
            ok = False; # 一つでもなければNG
          pass
        pass
      pass # for keyword in
      if ok:
        # グループに0があればNG
        for gr in group:
          if group[gr] == 0:
            ok = False;
            break
          pass
        pass
      pass
      if ok and fsp["fewshot1"] is not None:
        if 'endshot' in fsp:
          return f"{fsp['fewshot1']}\n### 指示\n{prompt}\n\n{fsp['endshot']}\n### 回答\n"
        else:
          return f"{fsp['fewshot1']}\n### 指示\n{prompt}\n\n### 回答\n"
    pass # for fsp in
    # ない場合はデフォルト
    return f"{eval.prefix_prompt_}\n### 指示\n{prompt}\n\n### 回答\n"
  pass # def
pass  # class

fsg = FewShotGenerator()
fsg.load(f"{DataDir}/fewshot_prompt.json")


# ここら↓は、LLM2024提出用のJsonl出力

# データセットの読み込み。
# omnicampusの開発環境では、左にタスクのjsonlをドラッグアンドドロップしてから実行。
datasets = []
with open(f"./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 = ""

# 推論開始

import inference_evaluator.InferenceEvaluator as FireStorm

FastLanguageModel.for_inference(model)

evaltask = FireStorm.InferenceEvaluator(model, None) # inference only
evaltask.tokenizer_ = tokenizer
evaltask.max_tokens_ = 1408 # 1024 # max_tokens
evaltask.temperature_ = 0.2 # temperature
evaltask.repetition_penalty_ = 1.2 # repetition_penalty
evaltask.do_sample_ = evaltask.temperature_ > 0
evaltask.top_p = 0.9 # top_p

evaltask.prefix_prompt_ = "" # "以下の指示に厳密に従って、正確に回答してください。\n"
evaltask.suffix_prompt_ = ""
evaltask.input_prompt_hook_ = fsg.input_prompt_hook # few shot hook

results = []
for data in datasets:
  print(f"TaskId: {evaltask.eval_count_}")
  input = data["input"]
  output = evaltask.inference(input)
  print(output)
  results.append({"task_id": data["task_id"], "input": input, "output": output})
  evaltask.eval_count_ += 1

# こちらで生成されたjsolを提出してください。
import re
import datetime
import pytz
now = datetime.datetime.now(pytz.timezone("Asia/Tokyo")).strftime('%Y%m%d_%H%M%S')
with open(f"./outputs-{now}.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
      print(result)
      json.dump(result, f, ensure_ascii=False)  
      f.write('\n')

Uploaded model

  • Developed by: h-godai
  • License: apache-2.0
  • Finetuned from model : llm-jp/llm-jp-3-13b

This llama model was trained 2x faster with Unsloth and Huggingface's TRL library.

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 pipeline_tag.

Model tree for h-godai/llm-jp-3-13b-ft8-cm25k-dpo1.5x2_bad28_3.44_fs2_LoRA

Finetuned
(1121)
this model