以下は、READMEの内容を他の人が見てもわかりやすいように整理した例です。なお、アクセストークンの直書きは避け、環境変数や別ファイルから読み込む方法に変更しています(それ以外の構成は元のREADMEに準じています)。


llm-jp-3-13b-DM7 推論手順

本ドキュメントでは、llm-jp/llm-jp-3-13b のベースモデルに学習済みLoRAアダプタを組み合わせて推論を行う手順を示します。

前提条件

  • Python 3.10 以上の環境
  • GPU環境(推奨)
  • Hugging Faceのアクセストークンを取得済み

想定ファイル・ノートブック

  • 推論対象データ: elyza-tasks-100-TV_0.jsonl
    • タスクIDと入力文(input)が含まれている想定です。

インストール(例)

!pip install -U ipywidgets
!pip install transformers==4.46.3
!pip install -U bitsandbytes
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft

補足: ご利用の環境によっては、transformers バージョンやbitsandbytes のバージョンが合わない場合があります。適宜調整してください。

推論用コード例

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
)
from peft import PeftModel
import torch
from tqdm import tqdm
import json
import os

# 1. Hugging Faceのアクセストークンを取得(環境変数から読み込む例)
HF_TOKEN = os.getenv("HF_TOKEN", "YOUR_HF_TOKEN_PLACEHOLDER")

# 2. ベースとなるモデルと学習したLoRAのアダプタを指定
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "mcmurphy55/llm-jp-3-13b-DM7"

# 3. 4bit量子化の設定
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

# 4. モデルのロード
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto",
    token=HF_TOKEN  # または use_auth_token=HF_TOKEN
)

# 5. トークナイザーのロード
tokenizer = AutoTokenizer.from_pretrained(
    model_id,
    trust_remote_code=True,
    token=HF_TOKEN  # または use_auth_token=HF_TOKEN
)

# 6. LoRAアダプタを適用
model = PeftModel.from_pretrained(
    model,
    adapter_id,
    token=HF_TOKEN  # または use_auth_token=HF_TOKEN
)

# 7. 推論するデータセットの読み込み(JSON Lines形式)
datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "r", encoding="utf-8") as f:
    item = ""
    for line in f:
        line = line.strip()
        item += line
        if item.endswith("}"):
            datasets.append(json.loads(item))
            item = ""

# 8. 推論の実行
results = []
for data in tqdm(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
    })

# 9. 推論結果の保存(JSON Lines形式)
jsonl_id = "outputs"
with open(f"./{jsonl_id}.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)
        f.write('\n')

注意点

  • アクセストークンの管理: セキュリティ上の観点から、ソースコードに直接書き込むのではなく、環境変数や .env ファイル等を利用してください。
  • ファイル名: 推論結果は outputs.jsonl という形で書き出されます。別のファイル名に変更したい場合は jsonl_id を書き換えてください。
  • バージョンの整合性: 利用するライブラリのバージョンによって、量子化 (4bit/8bitなど) の挙動が変わる場合があります。実行環境に合わせて設定してください。
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support