--- base_model: llm-jp/llm-jp-3-13b tags: - text-generation-inference - transformers - unsloth license: apache-2.0 language: - ja --- ## 概要 llm-jp-3-13b のファインチューニングモデルです。 (本モデルは松尾研大規模言語モデル講座2024のコンペ用モデルとして作成したものとなります。) ## 提出用ファイルの作成方法 提出用ファイルの作成方法は以下の通りです。 ### 事前準備 事前準備は`推論対象となるファイル`の配置と`ライブラリのインストール`です。 #### ファイルの配置 `elyza-tasks-100-TV_0.jsonl`ファイルをコードを実行するディレクトリに配置してください。 #### 依存ライブラリのインストール ライブラリのインストールを行います。 ```py # 依存ライブラリは次のとおりです。 # - unsloth # - tqdm # - torch # Google Colab で実行する場合は `unsloth` のみインストールしてください。 !pip install unsloth !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" ``` ### ファイル生成 以下のコードでは、課題のタスク(`elyza-tasks-100-TV_0.jsonl`)から提出用ファイル(`llm-jp-3-13b-finetune-LoRA-241124_output.jsonl`)ファイルを出力します。 (なお、Colabでコードを実行する際はランタイムのタイプをL4に変更して行ってください。 ```py # ライブラリのインポート from unsloth import FastLanguageModel from tqdm import tqdm # 進行状況を表示するためのライブラリ import torch import json # モデル名の指定 model_name = "codemafia0000/llm-jp-3-13b-finetune-LoRA-241124" # 提出用ファイル名 output_file_name = model_name.split('/')[-1] # モデル名のみ取得 output_file_name = f"{output_file_name}_output.jsonl" # Hugging Faceのアクセストークンを設定します。自身のトークンに置き換えてください。 HF_TOKEN = "YOUR_TOKEN" # モデルの設定 max_seq_length = 2048 # 入力シーケンスの最大長 dtype = None # データ型(デフォルト) load_in_4bit = True # 4ビット精度でモデルをロードし、メモリ使用量を削減 # モデルとトークナイザーをロードします model, tokenizer = FastLanguageModel.from_pretrained( model_name = model_name, max_seq_length = max_seq_length, dtype = dtype, load_in_4bit = load_in_4bit, token = HF_TOKEN, ) # モデルを推論モードに設定 FastLanguageModel.for_inference(model) # タスクデータの読み込み 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 = "" # 結果を保存するリストを初期化 results = [] # 各タスクに対してモデルを実行 for dt in tqdm(datasets): input = dt["input"] # モデルへの入力プロンプトを作成します prompt = f"""### question\n{input}\n### answer\n""" # トークナイザーを使用してプロンプトをトークン化 inputs = tokenizer([prompt], return_tensors = "pt").to(model.device) # モデルを使用して応答を生成 outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2) # 生成されたトークンをデコードしてテキストに変換、不要な部分を削除 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### answer')[-1] # 結果をリストに追記 results.append({"task_id": dt["task_id"], "input": input, "output": prediction}) # 結果をJSONL形式で保存 with open(output_file_name, 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) f.write('\n') # EOF ``` 以上が提出用ファイルの出力方法となります。