Model Card for Model ID

Model Details

Model Description

This is the model card of a 🀗 transformers model that has been pushed on the Hub. This model card has been automatically generated.

  • Developed by: [More Information Needed]
  • Funded by [optional]: [More Information Needed]
  • Shared by [optional]: [More Information Needed]
  • Model type: [More Information Needed]
  • Language(s) (NLP): [More Information Needed]
  • License: [More Information Needed]
  • Finetuned from model [optional]: [More Information Needed]

Model Sources [optional]

  • Repository: [More Information Needed]
  • Paper [optional]: [More Information Needed]
  • Demo [optional]: [More Information Needed]

Uses

Direct Use

[More Information Needed]

Downstream Use [optional]

[More Information Needed]

Out-of-Scope Use

[More Information Needed]

Bias, Risks, and Limitations

[More Information Needed]

Recommendations

Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.

How to Get Started with the Model

Use the code below to get started with the model.

[More Information Needed]

Training Details

Training Data

[More Information Needed]

Training Procedure

Preprocessing [optional]

[More Information Needed]

Training Hyperparameters

  • Training regime: [More Information Needed]

Speeds, Sizes, Times [optional]

[More Information Needed]

Evaluation

Testing Data, Factors & Metrics

Testing Data

[More Information Needed]

Factors

[More Information Needed]

Metrics

[More Information Needed]

Results

[More Information Needed]

Summary

Model Examination [optional]

[More Information Needed]

Environmental Impact

Carbon emissions can be estimated using the Machine Learning Impact calculator presented in Lacoste et al. (2019).

  • Hardware Type: [More Information Needed]
  • Hours used: [More Information Needed]
  • Cloud Provider: [More Information Needed]
  • Compute Region: [More Information Needed]
  • Carbon Emitted: [More Information Needed]

Technical Specifications [optional]

Model Architecture and Objective

[More Information Needed]

Compute Infrastructure

[More Information Needed]

Hardware

[More Information Needed]

Software

[More Information Needed]

Citation [optional]

BibTeX:

[More Information Needed]

APA:

[More Information Needed]

Glossary [optional]

[More Information Needed]

More Information [optional]

[More Information Needed]

Model Card Authors [optional]

[More Information Needed]

Model Card Contact

[More Information Needed]

以䞋に elyza-tasks-100-TV_0.jsonl 回答を埗たコヌドを蚘茉したす。

'''python

python 3.10.12

!pip install -U pip !pip install -U transformers !pip install -U bitsandbytes !pip install -U accelerate !pip install -U datasets !pip install -U peft !pip install -U trl !pip install -U wandb !pip install ipywidgets --upgrade

from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments, logging, ) from peft import ( LoraConfig, PeftModel, get_peft_model, ) import os, torch, gc from datasets import load_dataset import bitsandbytes as bnb from trl import SFTTrainer

Hugging Face Token

HF_TOKEN = "Your_Token" # Your_Token に WRITE 暩限のある 自分の huggingface token を蚘入

モデルを読み蟌み。

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

from unsloth import FastLanguageModel

import torch

max_seq_length = 512 # unslothではRoPEをサポヌトしおいるのでコンテキスト長は自由に蚭定可胜

dtype = None # Noneにしおおけば自動で蚭定

load_in_4bit = True # 今回は8Bクラスのモデルを扱うためTrue

base_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,

)

llm-jp-3 1.8B, 3.7B, 13Bのsnapshotをダりンロヌド枈みでmodelsディレクトリに栌玍しおありたす。

その他のモデルは取埗に承諟が必芁なため、各自でダりンロヌドお願いしたす。

base_model_id = "models/models--llm-jp--llm-jp-3-13b/snapshots/cd3823f4c1fcbb0ad2e2af46036ab1b0ca13192a" #Fine-Tuningするベヌスモデル

new_model_id = "llm-jp-3-13b-finetune" #Fine-Tuningしたモデルに぀けたい名前

""" bnb_config: 量子化の蚭定

  • load_in_4bit:

    • 4bit量子化圢匏でモデルをロヌド
  • bnb_4bit_quant_type:

    • 量子化の圢匏を指定
  • bnb_4bit_compute_dtype:

    • 量子化された重みを甚いお蚈算する際のデヌタ型

"""

bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", # nf4は通垞のINT4より粟床が高く、ニュヌラルネットワヌクの分垃に最適です bnb_4bit_compute_dtype=torch.bfloat16, )

""" model: モデル

  • base_model:

    • 読み蟌むベヌスモデル (事前に定矩したもの)
  • quantization_config:

    • bnb_configで蚭定した量子化蚭定
  • device_map:

    • モデルを割り圓おるデバむス (CPU/GPU) "auto"で自動に割り圓おられたす。

tokenizer: トヌクナむザヌ

  • base_model:

    • 読み蟌むベヌスモデル (事前に定矩したもの)
  • trust_remote_code:

    • リモヌトコヌドの実行を蚱可 (カスタムモデルなど) """ model = AutoModelForCausalLM.from_pretrained( base_model_id, quantization_config=bnb_config, device_map="auto" )

tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)

""" find_all_linear_names: モデル内の4bit量子化線圢局を探したす。 """

def find_all_linear_names(model): cls = bnb.nn.Linear4bit # 4bit量子化線圢局クラスを指定 lora_module_names = set() # ここに取埗した線圢局を保持したす。

# モデル内の党おのモゞュヌルを探玢したす
for name, module in model.named_modules():
    if isinstance(module, cls): # モゞュヌルが4bit量子化線圢局の堎合
        names = name.split('.') # モゞュヌルの名前を分割 (ネストされおる際などに察凊)
        lora_module_names.add(names[0] if len(names) == 1 else names[-1]) # 最䞋局の名前をlora_module_namesに远加

# 'lm_head' は16ビット挔算の際に陀倖する必芁があるため、lora_module_namesから削陀
if 'lm_head' in lora_module_names:
    lora_module_names.remove('lm_head')

return list(lora_module_names) # lora_module_namesをリストに倉換しお返したす。

modules = find_all_linear_names(model)

""" peft_config: PEFTの構成蚭定

  • r

    • LoRA のランク (4, 8, 16 ,32...)
    • 増やすほど孊習が捗るが, 過孊習のリスクも高たるので泚意
  • lora_alpha

    • LoRAのスケヌリング係数
  • lora_dropout

    • ドロップアりト率過孊習を防ぐための割合
  • bias

    • バむアス項の扱い ("none"の堎合、LoRAはバむアスを孊習しない)
  • task_type

    • タスクタむプ
  • target_modules

    • LoRAを適甚するタヌゲットモゞュヌル (前のコヌドで特定した局) """

peft_config = LoraConfig( r=16, lora_alpha=32, lora_dropout=0.05, bias="none", task_type="CAUSAL_LM", target_modules=modules, )

model = get_peft_model(model, peft_config)

""" 孊習に甚いるデヌタセットの指定 今回はLLM-jp の公開しおいる Ichikara Instruction を䜿いたす。デヌタにアクセスするためには申請が必芁ですので、䜿いたい方のみ申請をしおください。 Ichikara Instruciton を Hugging Face Hub にお公開するこずはお控えください。 たた、CC-BY-NC-SAですのでモデルはラむセンスを継承する前提でお䜿いください。

䞋蚘のリンクから申請を終えた先に Google Drive があり、Distribution20241221_all ずいうフォルダごずダりンロヌドしおください。 今回は「ichikara-instruction-003-001-1.json」を䜿いたす。必芁であれば展開!unzip などし、デヌタセットのパスを適切に指定しおください。 omnicampusの開発環境では取埗したデヌタを巊偎にドラッグアンドドロップしおお䜿いください。

https://liat-aip.sakura.ne.jp/wp/llmのための日本語むンストラクションデヌタ䜜成/llmのための日本語むンストラクションデヌタ-公開/ 関根聡, 安藀たや, 埌藀矎知子, 鈎朚久矎, 河原倧茔, 井之䞊盎也, 也健倪郎. ichikara-instruction: LLMのための日本語むンストラクションデヌタの構築. 蚀語凊理孊䌚第30回幎次倧䌚(2024)

"""

dataset = load_dataset("json", data_files="./ichikara-instruction-003-001-1.json") dataset

孊習時のプロンプトフォヌマットの定矩

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"][1])

デヌタをtrainデヌタずtestデヌタに分割 (test_sizeの比率に)

dataset = dataset["train"].train_test_split(test_size=0.1)

dataset

""" training_arguments: 孊習の蚭定

  • output_dir: -トレヌニング埌のモデルを保存するディレクトリ

  • per_device_train_batch_size:

    • デバむスごずのトレヌニングバッチサむズ
  • per_device_ _batch_size:

    • デバむスごずの評䟡バッチサむズ
  • gradient_accumulation_steps:

    • 募配を曎新する前にステップを積み重ねる回数
  • optim:

    • オプティマむザの蚭定
  • num_train_epochs:

    • ゚ポック数
  • eval_strategy:

    • 評䟡の戊略 ("no"/"steps"/"epoch")
  • eval_steps:

    • eval_strategyが"steps"のずき、評䟡を行うstep間隔
  • logging_strategy:

    • ログ蚘録の戊略
  • logging_steps:

    • ログを出力するステップ間隔
  • warmup_steps:

    • 孊習率のりォヌムアップステップ数
  • save_steps:

    • モデルを保存するステップ間隔
  • save_total_limit:

    • 保存しおおくcheckpointの数
  • max_steps:

    • トレヌニングの最倧ステップ数
  • learning_rate:

    • 孊習率
  • fp16:

    • 16bit浮動小数点の䜿甚蚭定第8回挔習を参考にするず良いです
  • bf16:

    • BFloat16の䜿甚蚭定
  • group_by_length:

    • 入力シヌケンスの長さによりバッチをグルヌプ化 (トレヌニングの効率化)
  • report_to:

    • ログの送信先 ("wandb"/"tensorboard"など) """

training_arguments = TrainingArguments( output_dir=new_model_id, per_device_train_batch_size=1, gradient_accumulation_steps=2, optim="paged_adamw_32bit", num_train_epochs=1, logging_strategy="steps", logging_steps=10, warmup_steps=10, save_steps=100, save_total_limit = 2, max_steps = -1, learning_rate=5e-5, fp16=False, bf16=False, seed = 3407, group_by_length=True, report_to="none" )

""" SFTTrainer: Supervised Fine-Tuningに関する蚭定

  • model:

    • 読み蟌んだベヌスのモデル
  • train_dataset:

    • トレヌニングに䜿甚するデヌタセット
  • eval_dataset:

    • 評䟡に䜿甚するデヌタセット
  • peft_config:

    • PEFTParameter-Efficient Fine-Tuningの蚭定LoRAを利甚する堎合に指定
  • max_seq_length:

    • モデルに入力されるシヌケンスの最倧トヌクン長
  • dataset_text_field:

    • デヌタセット内の孊習に䜿うテキストを含むフィヌルド名
  • tokenizer:

    • モデルに察応するトヌクナむザヌ
  • args:

    • トレヌニングに䜿甚するハむパヌパラメヌタTrainingArgumentsの蚭定を指定
  • packing:

    • 入力シヌケンスのパッキングを行うかどうかの蚭定 (False に蚭定するこずで、各入力を独立しお扱う) """ trainer = SFTTrainer( model=model, train_dataset=dataset["train"], peft_config=peft_config, max_seq_length= 512, dataset_text_field="formatted_text", tokenizer=tokenizer, args=training_arguments, packing= False, )

model.config.use_cache = False # キャッシュ機胜を無効化 trainer.train() # トレヌニングを実行

タスクずなるデヌタの読み蟌み。

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

results = [] for data in tqdm(datasets):

input = data["input"]

prompt = f"""### 指瀺 {input}

回答

"""

tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device) attention_mask = torch.ones_like(tokenized_input)

with torch.no_grad(): outputs = model.generate( tokenized_input, attention_mask=attention_mask, max_new_tokens=100, do_sample=False, repetition_penalty=1.2, pad_token_id=tokenizer.eos_token_id )[0] output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)

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

こちらで生成されたjsolを提出しおください。

本コヌドではinputずeval_aspectも含んでいたすが、なくおも問題ありたせん。

必須なのはtask_idずoutputずなりたす。

import re jsonl_id = re.sub(".*/", "", new_model_id) with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) # ensure_ascii=False for handling non-ASCII characters f.write('\n')

モデルずトヌクナむザヌをHugging Faceにアップロヌド

model.push_to_hub(new_model_id, token=HF_TOKEN, private=True) # Online saving tokenizer.push_to_hub(new_model_id, token=HF_TOKEN, private=True) # Online saving

'''python

以䞊 elyza-tasks-100-TV_0.jsonl 回答を埗たコヌドです。

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