--- base_model: llm-jp/llm-jp-3-13b tags: - text-generation-inference - transformers - unsloth - llama - trl license: cc-by-sa-4.0 language: - ja --- # モデル概要 このモデルは、日本語の大規模言語モデル(LLM)であるllm-jp/llm-jp-3-13bをベースにインストラクションチューニングしたLoRAアダプタです。 # 使用したインストラクションデータセット: - [kanhatakeyama/AutoMultiTurnByCalm3-22B](https://huggingface.co/datasets/kanhatakeyama/AutoMultiTurnByCalm3-22B) - [Jaster (llm-jp-eval・CC-BY-SA-4.0のデータのみ)](https://github.com/llm-jp/llm-jp-eval) - [elyza/ELYZA-tasks-100](https://huggingface.co/datasets/elyza/ELYZA-tasks-100) - 独自データセット - # 使用方法例 1. 依存関係のインストール: ```bash # 必要なライブラリをインストール pip install -U bitsandbytes transformers accelerate datasets peft pandas pip install -U unsloth # stable release ``` 2. モデルの読み込み(Unslothというライブラリを使用し4bit量子化して読み込む場合の例): ```python from unsloth import FastLanguageModel from peft import PeftModel # ベースモデルID base_model_id="llm-jp/llm-jp-3-13b" # 本アダプタのID adapter_id="waiyanan/automulti-jaster-myset-r64lr1e5_lora_lora" # Huggingfaceトークン hf_token=<有効なHuggingfaceトークン> # unslothのFastLanguageModelで元のモデルをロード。 dtype = None # Noneにしておけば自動で設定 load_in_4bit = True # 4bit量子化する model, tokenizer = FastLanguageModel.from_pretrained( model_name = base_model_id, dtype = dtype, load_in_4bit = load_in_4bit, trust_remote_code=True, token=hf_token ) model = PeftModel.from_pretrained(model, adapter_id, token=hf_token) ``` 3. 推論(任意のプロンプトで推論する場合) ```python # 最大出力トークン数 max_token = 1024 prompt = "こんにちは!よろしくお願いいたします。" FastLanguageModel.for_inference(model) inputs = tokenizer([prompt], return_tensors = "pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens = max_token, use_cache = True, temperature=0.5, top_p=0.9,do_sample=False, repetition_penalty=1.2) prediction = tokenizer.decode(outputs[0], skip_special_tokens=True) print(prediction) ``` 4. 評価データセット(elyza-tasks-100-TV.jsonl)の読み込みとテスト実行 ```python import pandas as pd from datasets import Dataset from tqdm import tqdm import json datasets = [] # elyza-tasks-100-TV.jsonのファイルパス file_path = # 最大出力トークン数 max_token = 1024 # データセットの読み込み df = pd.read_json(file_path, orient='records', lines=True) # 結果格納用配列 results = [] # モデルを推論モードにする FastLanguageModel.for_inference(model) for _, r in tqdm(df.iterrows(),total=len(df)): input = r["input"] task_id=r["task_id"] prompt = f"""### 指示\n{input} 簡潔に回答してください \n### 回答\n""" inputs = tokenizer([prompt], return_tensors = "pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens = max_token, use_cache = True, temperature=0.5, top_p=0.9,do_sample=False, repetition_penalty=1.2) prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1] results.append({"task_id":task_id, "input": input, "output": prediction}) # 結果をjsonlで保存。 ourput_file_path = with open(ourput_file_path, 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) f.write('\n') ``` This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library.