Uploaded model
- Developed by: shu1122
- License: CC-BY-NC-SA
- Finetuned from model : llm-jp/llm-jp-3-13b
This llama model was trained 2x faster with Unsloth and Huggingface's TRL library.
How to Use
このモデルを使用するにあたって必要なライブラリは以下のpyproject.tomlを参考にするとよい(なおモデル開発用のライブラリが含まれている)。
[project]
name = "llm"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"accelerate>=1.1.1",
"bitsandbytes>=0.44.1",
"datasets>=3.1.0",
"einops>=0.8.0",
"flash-attn>=2.6.3",
"google-generativeai>=0.8.3",
"huggingface-hub[cli]>=0.26.3",
"ipykernel>=6.29.5",
"ipython>=8.29.0",
"ipywidgets>=8.1.5",
"ninja>=1.11.1.2",
"packaging>=24.2",
"peft>=0.13.2",
"tenacity>=9.0.0",
"torch>=2.5.1",
"tqdm>=4.67.1",
"transformers>=4.46.3",
"trl>=0.12.1",
"unsloth>=2024.11.11",
"vllm>=0.6.4.post1",
"wandb>=0.18.7",
]
ライブラリのインストール例として、uvを使う方法をのせておく。 なおDocker(FROM nvcr.io/nvidia/pytorch:23.07-py3)を使用し、uvをインストールしていることが前提である。
まず
uv init llm
cd llm
とした後、pyproject.tomlを上のように書き換えたうえで
uv sync
とすれば、自動でライブラリのインストールが進行する。
ライブラリのインストールが終わったら、以下のコードを用いると推論できる。ここでは、推論用のタスクとして"./elyza-tasks-100-TV_0.jsonl"を配置している。
# %% [markdown]
# # 推論用コード
# Hugging Faceにアップロードしたモデルを用いてELYZA-tasks-100-TVの出力を得るためのコードである。
# このコードはunslothライブラリを用いてモデルを読み込み、推論するためのコードである。
# 以下のコードは必要に応じて実行すること。
# %%capture
# !pip install unsloth
# !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
# %%
from unsloth import FastLanguageModel
import torch
import json
# %%
model_id = "llm-jp-3-13b-ichikara_lora"
model_name = f"shu1122/{model_id}"
# %%
max_seq_length = 2048
dtype = None
load_in_4bit = True
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = model_name,
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
FastLanguageModel.for_inference(model)
# %%
# データセットの読み込み。
# omnicampusの開発環境では、左にタスクの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 = ""
# %%
# 学習したモデルを用いてタスクを実行
from tqdm import tqdm
# 推論するためにモデルのモードを変更
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.1,
temperature=0.4,
)
prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split(
"\n### 回答"
)[-1]
results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
# %%
# jsonlで保存
with open(f"./result/{model_id}_TV_output.jsonl", 'w', encoding='utf-8') as f:
for result in results:
json.dump(result, f, ensure_ascii=False)
f.write('\n')
Credit
Dataset: 関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎. ichikara-instruction: LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024) https://liat-aip.sakura.ne.jp/wp/llm%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e4%bd%9c%e6%88%90/llm%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf-%e5%85%ac%e9%96%8b/
Model tree for shu1122/llm-jp-3-13b-ichikara_lora
Base model
llm-jp/llm-jp-3-13b