Model Build Sources


CPT like SFT dataset ; epochs = 1

  • kajuma/CC-news-2024-July-October-cleaned odc-by
    • Use after August

SFT dataset ; epochs = 8

  • elyza/ELYZA-tasks-100+α
  • iam-ajaymeena/Self-Instruct-Japanese-Qwen1.5-14B"
  • ichikara-instruction: LLMのための日本語インストラクションデータの構築
    • 003-001 Series

DPO dataset; epochs = 1

  • weblab-GENIAC/aya-ja-nemotron-dpo-masked CC-BY-4.0

target_module

target_modules =  [ "gate_proj", "up_proj", "down_proj"
         "q_proj", "k_proj", "v_proj", "o_proj",],

Uses

ライブラリー

!pip install unsloth
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"

モデル読み込み

from unsloth import FastLanguageModel
import torch

model_name = "y-ohtani/gemma-2-27b-bnb_dpo2"
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_name,
    dtype= None, # Noneにしておけば自動で設定,
    load_in_4bit=True,
    trust_remote_code=True,
)
model.cuda()
FastLanguageModel.for_inference(model)

プロンプト出力関数 output_text=generate_prediction(input_text)

from functools import reduce

prompt_template = """以下の問題に対して回答するための手順に従って要求を適切に満たす回答を200文字でおしえてください。


# 問題

{input_text}


# 回答するための手順

{process_text}
- 日本語を使って回答する。


# 回答"""

prompt_process = """以下の問題に対して回答するためのCoT(Chain of Thought)でのシンプルな手順を考えて。
プロセスはpythonで実施するのではなく、言葉で考えた結果を手順として出力すること。
-手順は問題のカテゴリーに合わせて臨機応変に考えること、
-日本語で出力すること。

# 問題

{input_text}


# 回答するための手順"""

def generate_response_BD(prompt_template, **kwargs):
    prompt = prompt_template.format(**kwargs)
    response=""
    ct=0
    useSample=False
    input_ids = tokenizer(prompt, return_tensors="pt").to(device)
    while len(response.strip() ) < 10 and ct < 20:
        outputs = model.generate(input_ids=input_ids.input_ids,max_new_tokens=2040, do_sample=useSample, repetition_penalty=1.1,)
        response = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)
        replacements = {"<br>": "\n","<eos>":"\n"}
        response = reduce(lambda text, pair: text.replace(*pair), replacements.items(), response)
        ct+=1
        useSample=True
    return response

def generate_prediction_D(input_text):
    replacements = {"。": "。\n", " - ": "\n  - "}
    input_text = reduce(lambda text, pair: text.replace(*pair), replacements.items(), input_text)

    # First response generation
    processes = generate_response(prompt_template=prompt_process, input_text=input_text)

    # Second response for verification
    response = generate_response(
        prompt_template=prompt_template,
        input_text=input_text,
        process_text=processes
    )

    return response


def generate_prediction_B(input_text):
    replacements = {"。": "。\n", " - ": "\n  - "}
    input_text = reduce(lambda text, pair: text.replace(*pair), replacements.items(), input_text)
    prompt = f"""以下の問題に対して要求を適切に満たす回答を200文字でおしえてください。

# 以下は要求を適切に満たす回答行うための手順です。
1. 問題を読む前に目的を明確にする。
2. 問題をSTEP BY STEP で考える。
3. 目的に沿って分類、整理する。
4. 回答は指示内容にしたがって明確にする。
- 日本語を使って回答する。
- 回答は散文で回答する。

# 問題
{input_text}

# 回答"""

    input_ids = tokenizer(prompt, return_tensors="pt").to(device)
    response=""
    ct=0
    useSample=False
    while len(response.strip() ) < 2 and ct < 3:
        outputs = model.generate(**input_ids, max_new_tokens=512, do_sample=useSample, repetition_penalty=1.1,)
        response = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)
        replacements = {"<br>": "\n","<eos>":"\n"}
        response = reduce(lambda text, pair: text.replace(*pair), replacements.items(), response)
        ct+=1
        useSample=True
    if not (1 <= len(response) <= 2000):
        response=generate_response_BD(input_text)
    return response
    
def generate_prediction(input_text):
    return generate_prediction_B(input_text)

使用方法(参考)

# output_text = generate_prediction(input_text):

elyza-tasks-100-TV_0.jsonlの出力結果(report.jsonl)の作成


from tqdm import tqdm
import json
import re

datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "r", encoding="UTF-8") as f:
    item = ""
    for line in f:
        line = line.strip()
        item += line
        if item.endswith("}"):
            datasets.append(json.loads(item))
            item = ""

results = []
for data in tqdm(datasets):
    input = data["input"]
    output = generate_prediction(input)
    results.append({"task_id": data["task_id"], "input": input, "output": output})

with open("report.jsonl", "w", encoding="utf-8") as f:
    for i, result in enumerate(results):
        try:
            json.dump(
                result, f, ensure_ascii=False
            )  # ensure_ascii=False for handling non-ASCII characters
            f.write("\n")
        except:
            print(i)
            pass

Downloads last month
20
Safetensors
Model size
27.2B params
Tensor type
BF16
·
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.

Model tree for y-ohtani/gemma-2-27b-bnb_dpo2

Base model

google/gemma-2-27b
Finetuned
(33)
this model