gemma-2-27b-20241214_2009

本モデルは、Googleが公開しているgemma-2-27b[1]を、同じくLLM-jpが公開しているオープンなデータセットllm-jp/databricks-dolly-15k-ja[2]を用いてファインチューニングしたモデルです。
[1]: HuggingFaceにて公開されています。https://huggingface.co/google/gemma-2-27b
[2]: Creative Commons Attribution-ShareAlike 3.0 Unported License (CC BY-SA 3.0)として公開されており、商用利用も可能です。

短時間でファインチューニングを終えるために、データセットから90サンプルだけ取り出してファインチューニングしています。

使い方の概要

本リポジトリには、ベースモデルgemma-2-27bとLoRAでファインチューニングした後のモデルの間の「差分」のみアップロードしております。したがって、ご利用頂くためには、ベースモデルと本モデルの両者をダウンロードする必要があります。トークナイザーはベースモデルのトークナイザーを使って下さい。

.jsonlに記載したタスクの実行と記録保存のしかた

ここでは、

{"task_id": 0, "input": "タスク記述0"}
{"task_id": 1, "input": "タスク記述1"}
{"task_id": 2, "input": "タスク記述2"}
{"task_id": 3, "input": "タスク記述3"}
    ...

のフォーマットでyour_tasks.jsonlにタスクが保存されている場合の実行方法を示します。
GPUを使用可能な環境でお試しください。
HF_TOKEN、およびyour_tasks.jsonlはご自身の環境に合わせて書き換えて下さい。

!pip install -U pip
!pip install -U transformers
!pip install -U bitsandbytes
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft
!pip install -U trl

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

# HuggingFaceからベースモデルとトークナイザーをロード
HF_TOKEN = 'your HuggingFace Token'
model_id = "google/gemma-2-27b"
adapter_id = "MsanMsan/gemma-2-27b-20241214_2009"
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto",
    token = HF_TOKEN
)
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token = HF_TOKEN)

# 本モデルをロードしベースモデルに接合
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)

# データセットの読み込み。
datasets = []
with open("./your_tasks.jsonl", "r") as f:
    item = ""
    for line in f:
      line = line.strip()
      item += line
      if item.endswith("}"):
        datasets.append(json.loads(item))
        item = ""

# gemma
results = []
for data in tqdm(datasets):

  input = data["input"]
  prompt = f"""### 指示
  {input}
  ### 回答
  """

# 推論実行 (your_tasks.jsonlに記載されたタスクを順に実行)  
  input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)
  outputs = model.generate(**input_ids, max_new_tokens=512, do_sample=False, repetition_penalty=1.2,)
  output = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)

  results.append({"task_id": data["task_id"], "input": input, "output": output})

# 結果をjsonl形式で出力
import re
jsonl_id = re.sub(".*/", "", adapter_id)
with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)  # ensure_ascii=False for handling non-ASCII characters
        f.write('\n')
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no pipeline_tag.