Uploaded model

  • Developed by: hiroshij
  • License: apache-2.0
  • Finetuned from model : llm-jp/llm-jp-3-13b

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


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

notebookでインタラクティブな表示を可能とする(ただし、うまく動かない場合あり)

!pip install ipywidgets --upgrade

Install Flash Attention 2 for softcapping support

import torch if torch.cuda.get_device_capability()[0] >= 8: !pip install --no-deps packaging ninja einops "flash-attn>=2.6.3"

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

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

model_id = "hiroshij/llm-jp-3-13b-finetune-joga-20241202" new_model_id = "llm-jp-3-13b-finetune-joga-20241202-2" #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, )

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

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

model_id = "hiroshij/llm-jp-3-13b-finetune-joga-20241202" new_model_id = "llm-jp-3-13b-finetune-joga-20241202-2" #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,"My_HF_TOKEN" #@param {type:"string"}

学習に用いるデータセットの指定

from datasets import load_dataset

dataset = load_dataset("json", data_files="/content/complementary-tasks-3.jsonl")

学習時のプロンプトフォーマットの定義

prompt = """### 指示 {}

回答

{}"""

""" formatting_prompts_func: 各データをプロンプトに合わせた形式に合わせる """ EOS_TOKEN = tokenizer.eos_token # トークナイザーのEOSトークン(文末トークン) def formatting_prompts_func(examples): input = examples["text"] # 入力データ 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

データを確認

print(dataset["train"]["formatted_text"][3])

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 = 2, gradient_accumulation_steps = 4, num_train_epochs = 1, logging_steps = 10, warmup_steps = 10, 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 = "none", ), )

#@title 学習実行 trainer_stats = trainer.train()

ELYZA-tasks-100-TVの読み込み。事前にファイルをアップロードしてください

データセットの読み込み。

omnicampusの開発環境では、左にタスクのjsonlをドラッグアンドドロップしてから実行。

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

学習したモデルを用いてタスクを実行

from tqdm import tqdm

推論するためにモデルのモードを変更

FastLanguageModel.for_inference(model)

results = [] for dt in tqdm(datasets): input = dt["input"]

prompt = f"""### 指示\n{input}\n### 回答\n"""

inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)

outputs = model.generate(**inputs, max_new_tokens = 1024, use_cache = True, do_sample=False, repetition_penalty=1.2) #Original 512 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]

results.append({"task_id": dt["task_id"], "input": input, "output": prediction})

jsonlで保存

with open(f"{new_model_id}_output.jsonl", 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) f.write('\n')

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 hiroshij/llm-jp-3-13b-finetune-joga-20231124-2

Finetuned
(1122)
this model

Dataset used to train hiroshij/llm-jp-3-13b-finetune-joga-20231124-2