YAML Metadata Warning: empty or missing yaml metadata in repo card (https://huggingface.co/docs/hub/model-cards#model-card-metadata)

概要

llm-jp/llm-jp-3-13b を4ビットでunslothライブラリを活用してSFTしたモデルです。
松尾研大規模言語モデル講座2024 のコンペ用の提出モデル作成の一環として作成・公開しています。

モデル詳細

ベースモデル: llm-jp/llm-jp-3-13b
アダプタモデル: kazutaka/llm-nishimae-it-finetune-30_lora
SFT学習データセット:DeL-TaiseiOzaki/Tengentoppa-sft-v1.0  

前提条件

・Google Colabであること(サーバやローカルPCの場合、各自インストールをお願いします。)
・ランライムのタイプのGPU設定は、L4であること
・Hugging Faceのアクセストークン (YOUR-HF-TOKEN) が取得済みであること

推論方法

1.ライブラリをインストールします。(Google Colabのみ実行してください。サーバやローカルPCの場合スキップしても問題ありません)

# 必要なライブラリをインストール
!pip install unsloth
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install -U torch
!pip install -U peft

2.以下のコードを実行して推論結果をjsonlファイル出力させます。
注意:elyza-tasks-100-TV_0.jsonlを同じディレクトリに配置します。配置パスが違う場合コード修正して実行をお願いします。

# 必要なライブラリを読み込み
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re

# ベースとなるモデルと学習したLoRAのアダプタ(Hugging FaceのIDを指定)。
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "kazutaka/llm-nishimae-it-finetune-30_lora"

HF_TOKEN = "YOUR-HF-TOKEN"

# unslothのFastLanguageModelで元のモデルをロード。
dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は13Bモデルを扱うためTrue

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_id,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
    trust_remote_code=True,
)

# 元のモデルにLoRAのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)

# タスクとなるデータの読み込み。
# 事前にデータをアップロードしてください。(アップしたjsonlのパスをしてください)
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 = ""

# モデルを用いてタスクの推論。
# 推論するためにモデルのモードを変更
FastLanguageModel.for_inference(model)

results = []
for dt in tqdm(datasets):
  input = dt["input"]
  prompt = f"""### 指示\n{input}\n### 回答\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### 回答')[-1]
  results.append({"task_id": dt["task_id"], "input": input, "output": prediction})


# 結果をjsonlで保存。

# ここではadapter_idを元にファイル名を決定しているが、ファイル名は任意で問題なし。
json_file_id = re.sub(".*/", "", adapter_id)
with open(f"./{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)
        f.write('\n')

モデル詳細

本モデルは学習に利用したデータの関係で以下のライセンスの影響を受けます。
CC BY-SA 4.0 を継承します。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.