--- license: cc-by-nc-sa-4.0 datasets: - kinokokoro/ichikara-instruction-003 language: - ja base_model: - llm-jp/llm-jp-3-13b pipeline_tag: text-generation library_name: transformers --- # llm-jp-3-13b-finetune 使用方法ガイド ## 必要な環境 - Python 3.10以上 - CUDA対応GPU(推奨) - 必要なライブラリ: - transformers - bitsandbytes - accelerate - torch - peft ## インストール手順 ```bash pip install -U pip pip install -U transformers pip install -U bitsandbytes pip install -U accelerate pip install -U peft pip install -U torch ``` ## 基本的な使用方法 ### 1. シンプルな使用方法 ```python from transformers import pipeline # パイプラインの作成 generator = pipeline( "text-generation", model="harataku/llm-jp-3-13b-finetune", device=0 # GPU使用 ) # テキスト生成 prompt = """### 指示 好きな食べ物について教えてください ### 回答 """ response = generator(prompt, max_length=200, num_return_sequences=1) print(response[0]['generated_text']) ``` ### 2. 詳細な設定による使用方法 ```python from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig ) import torch # モデルの設定 model_id = "harataku/llm-jp-3-13b-finetune" # 量子化の設定 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, ) # モデルとトークナイザーの読み込み model = AutoModelForCausalLM.from_pretrained( model_id, quantization_config=bnb_config, device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained(model_id) # 推論用の関数 def generate_response(input_text): prompt = f"""### 指示 {input_text} ### 回答 """ 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] response = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True) return response # 使用例 input_text = "好きな食べ物について教えてください" response = generate_response(input_text) print(response) ``` ## タスク出力用JSONLファイルの生成方法 ### コード実装 ```python import json import torch from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig def generate_jsonl_outputs(model, tokenizer, input_jsonl_path, output_jsonl_path): # 入力データの読み込み datasets = [] with open(input_jsonl_path, "r") as f: item = "" for line in f: line = line.strip() item += line if item.endswith("}"): datasets.append(json.loads(item)) item = "" # 出力の生成 results = [] for data in datasets: input_text = data["input"] prompt = f"""### 指示 {input_text} ### 回答 """ 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_text, "output": output }) # 結果をJSONL形式で保存 with open(output_jsonl_path, 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) f.write('\n') # 使用例 def main(): # 入出力パスの設定 input_path = "path/to/input.jsonl" output_path = "path/to/output.jsonl" # モデルとトークナイザーの準備 model_id = "harataku/llm-jp-3-13b-finetune" bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, ) model = AutoModelForCausalLM.from_pretrained( model_id, quantization_config=bnb_config, device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained(model_id) # JSONL出力の生成 generate_jsonl_outputs(model, tokenizer, input_path, output_path) if __name__ == "__main__": main() ``` ### 出力形式 生成されるJSONLファイルの各行は以下の形式になります: ```json {"task_id": "タスクID", "input": "入力テキスト", "output": "モデルの出力"} ``` ### 使用手順 1. 必要なライブラリのインストール ```bash pip install transformers torch accelerate bitsandbytes ``` 2. 入力JSONLファイルの準備 - 各行が有効なJSON形式である必要があります - 各JSONには少なくとも "task_id" と "input" フィールドが必要です 3. スクリプトの実行 - 適切なパスを設定してスクリプトを実行します - 出力されたJSONLファイルを確認します ## パラメータの説明 ### モデル生成時のパラメータ - `max_new_tokens`: 生成する最大トークン数(デフォルト: 100) - `do_sample`: サンプリングを行うかどうか(デフォルト: False) - `repetition_penalty`: 繰り返しを抑制するためのペナルティ(デフォルト: 1.2) ### 入力フォーマット 入力は以下の形式で行います: ``` ### 指示 [入力テキスト] ### 回答 ``` ## トラブルシューティング 1. メモリエラーが発生する場合: ```python # より少ないメモリ使用量の設定 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.float16 # bfloat16からfloat16に変更 ) ``` 2. GPUが利用できない場合: ```python # CPUでの実行設定 model = AutoModelForCausalLM.from_pretrained( model_id, device_map="cpu", low_cpu_mem_usage=True ) ```