### 実行手順 以下の手順に従うことで、Hugging Face上のモデル(llm-jp/llm-jp-3-13b + midorikawa/llm-jp-3-13b-it_lora)を用いて 入力データ(elyza-tasks-100-TV_0.jsonl)を推論し、その結果を{model_name}-outputs.jsonlというファイルに出力できます。 ### 前提条件 - Python環境があること(例: Google Colab) - GPUを使用すること - Hugging Faceのアクセストークン (HF_TOKEN) が取得済みであること Usage ### セットアップ - 必要なライブラリのインストールを行います。 ```python !pip install -U bitsandbytes !pip install -U transformers !pip install -U accelerate !pip install -U datasets ``` ### モデル・トークナイザの読み込み ```python # Hugging Faceのトークンを取得 from google.colab import userdata HF_TOKEN=userdata.get('HF_TOKEN') from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, ) import torch from tqdm import tqdm import json # QLoRA用の設定 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=False, ) # モデル読み込み model_name = "midorikawa/llm-jp-3-13b-it_lora" # モデル読み込み model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=bnb_config, device_map="auto", token = HF_TOKEN ) tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, token = HF_TOKEN) ``` ### 入力データの準備 - ./elyza-tasks-100-TV_0.jsonlというファイルからデータセットをロードします。 ```python 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 = "" ``` ### 推論実行 ```python results = [] for data in tqdm(datasets): input_text = data["input"] prompt = f"""### 指示 {input_text} ### 回答: """ # トークナイザーを使用して input_ids と attention_mask を取得 tokenized_input = tokenizer( prompt, add_special_tokens=True, padding='longest', truncation=True, return_tensors="pt" ).to(model.device) with torch.no_grad(): outputs = model.generate( input_ids=tokenized_input["input_ids"], attention_mask=tokenized_input["attention_mask"], max_new_tokens=512, do_sample=False, repetition_penalty=1.2, pad_token_id=tokenizer.eos_token_id )[0] # 出力をデコード output = tokenizer.decode(outputs[tokenized_input["input_ids"].size(1):], skip_special_tokens=True) results.append({"task_id": data["task_id"], "input": input_text, "output": output}) # モデル名の処理 model_name_cleaned = re.sub(".*/", "", model_name) # 結果をファイルに保存 with open(f"./{model_name_cleaned}-outputs.jsonl", 'w', encoding='utf-8') as f: for result in results: json.dump(result, f, ensure_ascii=False) # ensure_ascii=False は非ASCII文字の処理に有効 f.write('\n') ``` 以上の手順で、{model_name}-outputs.jsonlというファイルに推論結果が書き出されます。 ### 出力結果 - llm-jp-3-13b-it_lora-outputs.jsonl --- base_model: llm-jp/llm-jp-3-13b tags: - text-generation-inference - transformers - unsloth - llama - trl license: apache-2.0 language: - en ---