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 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 daichira/llm-jp-3-13b-itnew8

Finetuned
(1124)
this model