Uploaded model

  • Developed by: daichira
  • License: cc-by-nc-sa-4.0
  • Finetuned from model : llm-jp/llm-jp-3-13b

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

README

# LLM-JP-3-13B-ITNEW8

## **概要**
このモデルは、日本語対応の大規模言語モデル (LLM) `llm-jp/llm-jp-3-13b` を基に、指示応答タスク向けに微調整を施したモデルです。4bit量子化 (qLoRA) を活用し、Unsloth と Hugging Face の TRL ライブラリを使用して効率的な微調整を実現しました。

---

## **特徴**
- **モデル名:** `llm-jp-3-13b-itnew8`
- **ベースモデル:** `llm-jp/llm-jp-3-13b`
- **微調整目的:** 日本語での指示応答能力を強化。
- **量子化:** 4bit qLoRA によりメモリ効率を向上。

---

## **微調整の詳細**

### **使用データセット**
1. **主要データセット:** `ichikara-instruction-003-001-1.json`
2. **追加データセット:** `DeL-TaiseiOzaki/Tengentoppa-sft-v1.0`  
   (この中から30,000件を抽出して微調整に使用)

**データフォーマット例:**
```plaintext
### 指示
文章の要約を生成してください。
### 回答
この文章の要約です。

ハードウェアと設定

  • 使用GPU: NVIDIA L4 24GB
  • シーケンス長: 1024(RoPE対応)
  • 有効バッチサイズ: 24
  • 学習率: 3e-4
  • エポック数: 1

モデル構造

  • 量子化: 4bit qLoRA
  • LoRAパラメータ設定:
    • r=32
    • lora_alpha=32
    • lora_dropout=0.05
  • LoRA適用対象モジュール:
    • q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj

使用方法

以下のコードを使用して、日本語の指示応答を生成できます。

from transformers import AutoTokenizer, AutoModelForCausalLM

# モデルとトークナイザーのロード
model_name = "your-hf-username/llm-jp-3-13b-itnew9"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 指示応答の生成
instruction = "次の文章を要約してください。"
prompt = f"### 指示\n{instruction}\n### 回答\n"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=128)

# 応答を表示
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

参考

このモデルは以下を活用して開発されました:


ライセンス

本モデルは CC-BY-NC-SA 4.0 ライセンスのもとで提供されています。このため、商用利用は制限されています。また、ベースモデル(llm-jp/llm-jp-3-13b)およびデータセットのライセンス条件も遵守してください。


注意点と制約

  • 本モデルは日本語の指示応答タスクに最適化されています。他のタスクや言語では性能が十分でない可能性があります。
  • 現在のライセンス条件により、商用利用は許可されていません。



#以下、実行コード

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

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from unsloth import FastLanguageModel
import torch
#max_seq_length = 512 # unslothではRoPEをサポートしているのでコンテキスト長は自由に設定可能
max_seq_length = 1024 # unslothではRoPEをサポートしているのでコンテキスト長は自由に設定可能

dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は8Bクラスのモデルを扱うためTrue

#model_id = "llm-jp/llm-jp-3-13b"
model_id = "daichira/llm-jp-3-13b-finetune2"

#llm-jp-3-13b-finetune-2:ichikara-instruction-003-001-1.jsonでsft
#llm-jp-3-13b-itnew8:llm-jp-3-13b-finetune2をベースにDeL-TaiseiOzaki/Tengentoppa-sft-v1.0から3万行抽出してsft 

new_model_id = "llm-jp-3-13b-itnew9" #Fine-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,
)
from google.colab import output
output.disable_custom_widget_manager()

import os
from datasets import load_dataset

# データセットをロード
dataset = load_dataset("DeL-TaiseiOzaki/Tengentoppa-sft-v1.0", split="train")

# 1ファイルあたりの行数
chunk_size = 30000

# データセットを分割して保存
output_dir = "/content/tengentoppa_chunks"  # 保存先ディレクトリ
os.makedirs(output_dir, exist_ok=True)

# 全データを分割し、番号付きでJSON形式で保存
total_rows = len(dataset)
num_chunks = (total_rows + chunk_size - 1) // chunk_size  # 切り上げでチャンク数を計算

for i in range(num_chunks):
    start_idx = i * chunk_size
    end_idx = min(start_idx + chunk_size, total_rows)
    chunk = dataset.select(range(start_idx, end_idx))  # 分割部分を選択
    chunk_file = f"{output_dir}/tengentoppa_chunk_{i+1}.json"
    chunk.to_json(chunk_file)  # JSON形式で保存
    print(f"Saved chunk {i+1}/{num_chunks} to {chunk_file}")

print("All chunks have been saved!")


# Step 2: JSON形式で保存
json_path = "/content/tengentoppa_chunks/tengentoppa_chunk_3.json"
#subset.to_json(json_path)

# Step 3: JSON形式で再読み込み
from datasets import load_dataset

# JSONファイルをロード
dataset = load_dataset("json", data_files=json_path)

# データセット内容の確認
print(dataset)

# 学習時のプロンプトフォーマットの定義
prompt = """### 指示
{}
### 回答
{}"""

"""
formatting_prompts_func: 各データをプロンプトに合わせた形式に合わせる
"""
EOS_TOKEN = tokenizer.eos_token # トークナイザーのEOSトークン(文末トークン)
def formatting_prompts_func(examples):

#    input = examples["text"] # 入力データ
    input = examples["instruction"] # 入力データ
    output = examples["output"] # 出力データ
    text = prompt.format(input, output) + EOS_TOKEN # プロンプトの作成
    return { "formatted_text" : text, } # 新しいフィールド "formatted_text" を返す
pass

# # 各データにフォーマットを適用
dataset = dataset.map(
    formatting_prompts_func,
    num_proc= 4, # 並列処理数を指定
)

dataset

from trl import SFTTrainer
from transformers import TrainingArguments
from unsloth import is_bfloat16_supported

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset["train"],
    max_seq_length=max_seq_length,
    dataset_text_field="formatted_text",
    packing=False,
    args=TrainingArguments(
        per_device_train_batch_size=6,  # デバイスごとのバッチサイズ
        gradient_accumulation_steps=4,  # 勾配蓄積
        num_train_epochs=1,  # エポック数
        logging_steps=50,  # ログ記録の間隔
        warmup_steps=500,  # ウォームアップステップ
        save_steps=500,  # チェックポイント保存間隔
        save_total_limit=2,  # 保存するモデルの数
        max_steps=-1,  # 全データを1エポック分学習する設定
        learning_rate=3e-4,  # 学習率
        fp16=not is_bfloat16_supported(),  # FP16使用
        bf16=is_bfloat16_supported(),  # BF16使用
        group_by_length=True,  # シーケンス長でバッチをグループ化
        seed=3407,  # ランダムシード
        output_dir="outputs",  # 出力先ディレクトリ
    ),
)


# 学習実行前にCUDAキャッシュをクリア
torch.cuda.empty_cache()
#@title 学習実行
trainer_stats = trainer.train()


Downloads last month

-

Downloads are not tracked for this model. How to track
Inference API
Unable to determine this model’s pipeline type. Check the docs .

Model tree for daichira/llm-jp-3-13b-itnew8

Finetuned
(1140)
this model