以下は、READMEの内容を他の人が見てもわかりやすいように整理した例です。なお、アクセストークンの直書きは避け、環境変数や別ファイルから読み込む方法に変更しています(それ以外の構成は元のREADMEに準じています)。
llm-jp-3-13b-DM8推論手順
本ドキュメントでは、llm-jp/llm-jp-3-13b のベースモデルに学習済みLoRAアダプタを組み合わせて推論を行う手順を示します。
前提条件
- Python 3.10 以上の環境
- GPU環境(推奨)
- Hugging Faceのアクセストークンを取得済み
想定ファイル・ノートブック
- 推論対象データ:
elyza-tasks-100-TV_0.jsonl- タスクIDと入力文(
input)が含まれている想定です。
- タスクIDと入力文(
インストール(例)
!pip install -U ipywidgets
!pip install transformers==4.46.3
!pip install -U bitsandbytes
!pip install -U accelerate
!pip install -U datasetsF
!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-DM8"
# 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など) の挙動が変わる場合があります。実行環境に合わせて設定してください。
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support