Uploaded model

  • Developed by: nishimura999
  • 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.

usage

-import

# 必要なライブラリを読み込み
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
)
from peft import PeftModel
import torch
from tqdm import tqdm
import json

-setting

# Hugging Faceで取得したToken
HF_TOKEN = "{Your hugging face token}"

# モデルのID、LoRAのアダプタ名、DPOアダプタ名
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "nishimura999/llm-jp-3-13b-it-v103_lora"
adapter_dpo_id = "llm-jp-3-13b-dpo-v200"

-load

# QLoRA config
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)
# Load model
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto",
    token = HF_TOKEN
)
# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token = HF_TOKEN)
# 元のモデルにLoRAのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
# LoRAのモデルにDPOのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_dpo_id, token = HF_TOKEN)

-dataset

# データセットの読み込み。
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 = ""

-generate

# モデルを用いてタスクの推論。
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=100,
          max_new_tokens=1024,
          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})

-output

# 結果をjsonlで保存。
import re
jsonl_id = re.sub(".*/", "", adapter_dpo_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')

ref

本モデルは下記のデータを使ってファインチューニングしております。ここでデータ提供者に感謝申し上げます。

(https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/) 関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎. ichikara-instruction: LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024)

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 nishimura999/llm-jp-3-13b-dpo-v200

Finetuned
(1119)
this model

Dataset used to train nishimura999/llm-jp-3-13b-dpo-v200