ファインチューニング済みモデル

このモデルは、llm-jp/llm-jp-3-13b をベースに、LoRAを使用してファインチューニングされています。

モデルの詳細

  • ベースモデル: llm-jp/llm-jp-3-13b
  • ファインチューニング手法: LoRA
  • データセット: ichikara-instruction-003-001-1.json

使用方法(推論用コード)

Model_Inference_Template_20241127と同じです。

!pip install -U bitsandbytes
!pip install -U transformers
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft

# notebookでインタラクティブな表示を可能とする(ただし、うまく動かない場合あり)
!pip install ipywidgets --upgrade

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

# Hugging Faceで取得したTokenをこちらに貼る。
HF_TOKEN = ""

# ベースとなるモデルと学習したLoRAのアダプタ。
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "hifumi-shiopan/llm-jp-3-13b-it-new-8bit-v4" # こちらにアップロードしたHugging FaceのIDを指定してください。

# 量子化の設定
# 以下のいずれかの量子化設定のコメントアウトを外してください。

# 4bit量子化
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

# 8bit量子化
# bnb_config = BitsAndBytesConfig(
#     load_in_8bit=True,
# )

# 量子化なし
# bnb_config = None

# モデルの読み込み
if bnb_config is not None:
    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        quantization_config=bnb_config,
        device_map="auto",
        token=HF_TOKEN
    )
else:
    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        device_map="auto",
        token=HF_TOKEN
    )

# トークナイザーの読み込み
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token=HF_TOKEN)

# 元のモデルにLoRAのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)

# データセットの読み込み。
# omnicampusの開発環境では、左にタスクの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 = ""

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

    input = data["input"]
    prompt = f"""### 指示
    {input}
    ### 回答
    """

    input_ids = tokenizer(
        prompt,
        return_tensors="pt"
    ).to(model.device)

    outputs = model.generate(
        **input_ids,
        max_new_tokens=512,
        do_sample=False,
        repetition_penalty=1.2,
    )

    output = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)

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

# llmjp
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=512,
          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})

# こちらで生成されたjsolを提出してください。
# 本コードではinputとeval_aspectも含んでいますが、なくても問題ありません。
# 必須なのはtask_idとoutputとなります。
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)  # ensure_ascii=False for handling non-ASCII characters
        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 pipeline_tag.