Downloads · 30 days
0
mcmurphy55/llm-jp-3-13b-DM7
llm-jp-3-13b-DM7 is a machine learning model from mcmurphy55. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for transformers.
以下は、READMEの内容を他の人が見てもわかりやすいように整理した例です。なお、アクセストークンの直書きは避け、環境変数や別ファイルから読み込む方法に変更しています(それ以外の構成は元のREADMEに準じています)。
Downloads · 30 days
0
Access
Public
Updated Dec 25, 2024
Repo size
250 MB
Likes
0
Public
Click a slice to open those files.
.safetensors250 MB · 98%
From the Hugging Face model README
以下は、READMEの内容を他の人が見てもわかりやすいように整理した例です。なお、アクセストークンの直書きは避け、環境変数や別ファイルから読み込む方法に変更しています(それ以外の構成は元のREADMEに準じています)。
本ドキュメントでは、llm-jp/llm-jp-3-13b のベースモデルに学習済みLoRAアダプタを組み合わせて推論を行う手順を示します。
elyza-tasks-100-TV_0.jsonl
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')
outputs.jsonl という形で書き出されます。別のファイル名に変更したい場合は jsonl_id を書き換えてください。