Model Build Sources
CPT like SFT dataset ; epochs = 1
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
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
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