VOOZH about

URL: https://huggingface.co/tsuzukia/llm-jp-3-13b-it_lora

⇱ tsuzukia/llm-jp-3-13b-it_lora · Hugging Face


Uploaded model

  • Developed by: tsuzukia
  • License: CC-BY-NC-SA
  • Finetuned from model : llm-jp/llm-jp-3-13b

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

👁 Image

このモデルは、CC-BY-NC-SAライセンスを含むデータセットを使用しているため、CC-BY-NC-SAのライセンスの下で提供されています。 データセットごとのライセンスは以下の通りです:

モデル:apache 2.0

データセット1(LLMのための日本語インストラクションデータ): CC-BY-NC-SA

データセット2(llm-jp/databricks-dolly-15k-ja): CC-BY-SA-3.0

データセット4(kanhatakeyama/wizardlm8x22b-logical-math-coding-sft_additional-ja): apache-2.0

データセット5(kanhatakeyama/AutoMultiTurnByCalm3-22B): apache 2.0/cc-by-sa-3.0/CC0/cc-by-4.0

データセット6(kanhatakeyama/ramdom-to-fixed-multiturn-Calm3): apache 2.0

Uses

松尾研「LLM 2024」最終課題用モデル

実行の仕方は以下の通りです。

サンプルコードで公開されていたModel_Inference_Template_unsloth_20241127.ipynbのデータセットを増やしたものになります。

実行環境はローカルで、VRAM16GBのGPUで約4日間の学習です。

# llm-jp/llm-jp-3-13bを4bit量子化のqLoRA設定でロード。

from unsloth import FastLanguageModel
import torch
max_seq_length = 512 # unslothではRoPEをサポートしているのでコンテキスト長は自由に設定可能
dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は13Bモデルを扱うためTrue

model_id = "llm-jp/llm-jp-3-13b"
new_model_id = "llm-jp-3-13b-it" #Fine-Tuningしたモデルにつけたい名前、it: Instruction Tuning

# FastLanguageModel インスタンスを作成
model, tokenizer = FastLanguageModel.from_pretrained(
 model_name=model_id,
 dtype=dtype,
 load_in_4bit=load_in_4bit,
 trust_remote_code=True,
)

# SFT用のモデルを用意
model = FastLanguageModel.get_peft_model(
 model,
 r = 32,
 target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
 "gate_proj", "up_proj", "down_proj",],
 lora_alpha = 32,
 lora_dropout = 0.05,
 bias = "none",
 use_gradient_checkpointing = "unsloth",
 random_state = 3407,
 use_rslora = False,
 loftq_config = None,
 max_seq_length = max_seq_length,
)

LLMのための日本語インストラクションデータ

from datasets import load_dataset

import json
import ast
from datasets import Dataset, DatasetDict
import pandas as pd
paths = [
 "Distribution20241221_all/ichikara-instruction-003-001-1.json",
 "Distribution20241221_all/ichikara-instruction-003-001-2.1.json",
 "Distribution20241221_all/ichikara-instruction-003-001-2.2.json",
 "Distribution20241221_all/ichikara-instruction-003-001-5.1.json",
 "Distribution20241221_all/ichikara-instruction-003-001-5.2.json",

]

from datasets import load_dataset, concatenate_datasets

datasets_list = []
for path in paths:
 dataset = load_dataset('json', data_files=path)
 datasets_list.append(dataset['train'])
combined_train = concatenate_datasets(datasets_list)
dataset1 = DatasetDict({
 'train': combined_train
})

llm-jp/databricks-dolly-15k-ja

dataset2 = load_dataset("llm-jp/databricks-dolly-15k-ja")
dataset2 = dataset2.rename_column('instruction', 'text')
dataset2 = dataset2.rename_column('response', 'output')

kanhatakeyama/wizardlm8x22b-logical-math-coding-sft_additional-ja

def extract_content(example):
 # messagesから必要な内容を抽出
 text = example['messages'][0]['content'] # userのcontent
 output = example['messages'][1]['content'] # assistantのcontent

 return {
 'text': text,
 'output': output
 }

dataset4 = load_dataset("kanhatakeyama/wizardlm8x22b-logical-math-coding-sft_additional-ja")
dataset4 = dataset4.map(extract_content)
dataset4 = dataset4.select_columns(['text', 'output'])

kanhatakeyama/AutoMultiTurnByCalm3-22B

dataset5 = load_dataset("kanhatakeyama/AutoMultiTurnByCalm3-22B")
dataset5 = dataset5.rename_column('q1', 'text')
dataset5 = dataset5.rename_column('a1', 'output')
dataset5 = dataset5.select_columns(['text', 'output'])

kanhatakeyama/ramdom-to-fixed-multiturn-Calm3

from datasets import load_dataset, DatasetDict
def extract_content(example):
 # messagesから必要な内容を抽出
 text = example['messages'][0]['content'] # userのcontent
 output = example['messages'][1]['content'] # assistantのcontent
 return {
 'text': text,
 'output': output
 }

dataset6 = load_dataset("kanhatakeyama/ramdom-to-fixed-multiturn-Calm3")
dataset6 = dataset6.rename_column('text', 'text_old')
dataset6 = DatasetDict({
 'train': dataset6['20240806filtered']
})
dataset6 = dataset6.map(extract_content)
dataset6 = dataset6.select_columns(['text', 'output'])
from datasets import concatenate_datasets

dataset = DatasetDict({
 'train': concatenate_datasets([
 dataset1['train'],
 dataset2['train'],
 # dataset3['train'],
 dataset4['train'],
 dataset5['train'],
 dataset6['train'],
 ])
})
dataset
# 学習時のプロンプトフォーマットの定義
prompt = """### 指示
{}
### 回答
{}"""


"""
formatting_prompts_func: 各データをプロンプトに合わせた形式に合わせる
"""
prompt_with_context = """### 指示
コンテキストを参考に答えてください。
{}
### コンテキスト
{}
### 回答
{}"""


"""
formatting_prompts_func: 各データをプロンプトに合わせた形式に合わせる
"""
EOS_TOKEN = tokenizer.eos_token # トークナイザーのEOSトークン(文末トークン)
def formatting_prompts_func(examples):
 input = examples["text"] # 入力データ
 output = examples["output"] # 出力データ
 try:
 context = examples["context"]
 except KeyError:
 context = None
 if context:
 text = prompt_with_context.format(input, context,output) + EOS_TOKEN # プロンプトの作成
 else:
 text = prompt.format(input, output) + EOS_TOKEN # プロンプトの作成
 return { "formatted_text" : text, } # 新しいフィールド "formatted_text" を返す
pass

# # 各データにフォーマットを適用
dataset = dataset.map(
 formatting_prompts_func,
 num_proc= 4, # 並列処理数を指定
)
from trl import SFTTrainer
from transformers import TrainingArguments
from unsloth import is_bfloat16_supported

trainer = SFTTrainer(
 model = model,
 tokenizer = tokenizer,
 train_dataset=dataset["train"],
 # eval_dataset=dataset["test"],
 max_seq_length = max_seq_length,
 dataset_text_field="formatted_text",
 packing = False,
 args = TrainingArguments(
 per_device_train_batch_size = 16,
 gradient_accumulation_steps = 4,
 gradient_checkpointing = True,
 num_train_epochs = 2,
 logging_steps = 5,
 warmup_steps = 50,
 save_steps=100,
 save_total_limit=2,
 max_steps=-1,
 learning_rate = 2e-4,
 fp16 = not is_bfloat16_supported(),
 bf16 = is_bfloat16_supported(),
 group_by_length=True,
 # seed = 3407,
 output_dir = "outputs",
 report_to = "wandb",
 run_name="matsuo-lab",
 ),
)
#@title 学習実行
trainer_stats = trainer.train()
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for tsuzukia/llm-jp-3-13b-it_lora

Finetuned
(1082)
this model

Datasets used to train tsuzukia/llm-jp-3-13b-it_lora