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/

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference API
Unable to determine this model’s pipeline type. Check the docs .

Model tree for shu1122/llm-jp-3-13b-ichikara_lora

Finetuned
(1139)
this model