--- language: - ja - en tags: - llm - question-answering - text-generation --- ## Overview このモデルは、LLM-JP-3-13Bをベースに、LoRA (Low-Rank Adaptation)を利用してファインチューニングしたモデルです。 ## モデル詳細 - ベースモデル: llm-jp/llm-jp-3-13b - ファインチューニング手法: LoRA (Low-Rank Adaptation) - 量子化: 4ビット量子化 (QLoRA) ## インストール 必要なパッケージのインストール: # Google Colab使用時 ※ローカル環境で実行する場合は、!を付けずにコマンドを実行してください ```bash !pip install -U bitsandbytes !pip install -U transformers !pip install -U accelerate !pip install -U datasets !pip install -U peft !pip install -U trl !pip install ipywidgets --upgrade ``` ### 使用方法 セットアップから推論まで 1.必要なライブラリのインポート: ```python from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, ) from peft import PeftModel import torch from datasets import load_dataset import json from tqdm import tqdm # Hugging Faceのトークン設定 from google.colab import userdata # Google Colab使用時 HF_TOKEN = userdata.get('HF_TOKEN') ``` 2.モデルとトークナイザーの読み込み: ```python # QLoRA設定 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, ) # ベースモデルの読み込み base_model_id = "llm-jp/llm-jp-3-13b" adapter_id = "frhug12og/llm-jp-3-13b-finetune" model = AutoModelForCausalLM.from_pretrained( base_model_id, quantization_config=bnb_config, device_map="auto", token=HF_TOKEN ) tokenizer = AutoTokenizer.from_pretrained( base_model_id, trust_remote_code=True, token=HF_TOKEN ) # LoRAアダプタの適用 model = PeftModel.from_pretrained( model, adapter_id, token=HF_TOKEN ) ``` 3.推論用の関数定義: ```python def generate_response(input_text): prompt = f"""### 指示 {input_text} ### 回答 """ inputs = tokenizer( prompt, return_tensors="pt", return_token_type_ids=False ).to(model.device) with torch.no_grad(): outputs = model.generate( input_ids=inputs['input_ids'], max_new_tokens=512, do_sample=False, repetition_penalty=1.2 ) return tokenizer.decode(outputs[0], skip_special_tokens=True) ``` # ELYZA-tasks-100-TV_0での実行方法 ```python import json from tqdm import tqdm # データの読み込み datasets = [] with open("./elyza-tasks-100-TV_0.jsonl", "r") as f: for line in f: if line.strip(): datasets.append(json.loads(line.strip())) # 推論実行 results = [] for data in tqdm(datasets): input_text = data["input"] output = generate_response(input_text) results.append({ "task_id": data["task_id"], "input": input_text, "output": output }) # 結果の保存 output_file = "results.jsonl" with open(output_file, 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) f.write('\n') ``` ## Notes - Google Colabで実行する場合は、T4 GPU環境を選択してください - メモリ不足が発生した場合は、max_new_tokensの値を調整してください ## Citation このモデルの学習には以下のデータセットを使用しています: ```bibtex @inproceedings{sekine-etal-2024-ichikara, title = "ichikara-instruction: {LLM}のための日本語インストラクションデータの構築", author = "関根 聡 and 安藤 まや and 後藤 美知子 and 鈴木 久美 and 河原 大輔 and 井之上 直也 and 乾 健太郎", booktitle = "言語処理学会第30回年次大会", year = "2024", } ```