|
--- |
|
base_model: Aratako/Llama-Gemma-2-27b-ORPO-iter3 |
|
library_name: transformers |
|
tags: |
|
- axolotl |
|
- trl |
|
- orpo |
|
- exl2 |
|
license: |
|
- llama3.1 |
|
- gemma |
|
--- |
|
|
|
# Llama-Gemma-2-27b-ORPO-iter3-5.8bpw |
|
|
|
## 概要 |
|
|
|
[Aratako/Llama-Gemma-2-27b-ORPO-iter3](https://huggingface.co/Aratako/Llama-Gemma-2-27b-ORPO-iter3)を[ExLlamaV2](https://github.com/turboderp/exllamav2)を使って5.8 bpwに量子化したモデルです。 |
|
|
|
[松尾研大規模言語モデル講座2024](https://weblab.t.u-tokyo.ac.jp/lecture/course-list/large-language-model/)のコンペ用の提出モデル作成の一環として作成・公開しています。 |
|
|
|
This model is built with Llama and Qwen. |
|
|
|
学習データ等の詳細については元モデルの概要をご確認ください。 |
|
|
|
## 推論方法 |
|
|
|
[松尾研大規模言語モデル講座2024](https://weblab.t.u-tokyo.ac.jp/lecture/course-list/large-language-model/)のコンペのタスクの推論方法を以下に記載します。 |
|
|
|
1. 以下のようにして推論の環境を準備します。 |
|
```bash |
|
git clone https://github.com/turboderp/exllamav2 |
|
cd exllamav2 |
|
pip install -r requirements.txt |
|
|
|
# PyTorchやCUDA、Pythonのバージョンを合わせてExLlamaV2をインストール |
|
# ここではCUDA 12.2、PyTorch 2.5.1、Python 3.10の環境が初期状態だと仮定する |
|
pip install https://github.com/turboderp/exllamav2/releases/download/v0.2.5/exllamav2-0.2.5+cu121.torch2.5.0-cp310-cp310-linux_x86_64.whl |
|
pip install torch==2.5.0 |
|
pip install -U --no-build-isolation flash-attn |
|
|
|
# モデルの用意 |
|
huggingface-cli download Aratako/Llama-Gemma-2-27b-ORPO-iter3-5.8bpw --local-dir ./Llama-Gemma-2-27b-ORPO-iter3-5.8bpw |
|
``` |
|
|
|
2. 以下のようなPythonファイルをelyza_tasks_100_tv_exllamav2.pyとして作成します。また、elyza-tasks-100-TV_0.jsonlを同じディレクトリに配置します。 |
|
|
|
<details><summary>elyza_tasks_100_tv_exllamav2.py</summary> |
|
|
|
```python |
|
import argparse |
|
import json |
|
from transformers import AutoTokenizer |
|
from exllamav2 import ExLlamaV2, ExLlamaV2Config, ExLlamaV2Cache_Q8, ExLlamaV2Tokenizer |
|
from exllamav2.generator import ExLlamaV2DynamicGenerator, ExLlamaV2Sampler |
|
from datasets import load_dataset |
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
parser.add_argument("-m", "--model", help="評価するモデル", required=True) |
|
parser.add_argument("-t", "--tokenizer", help="使用するトークナイザ") |
|
parser.add_argument("-o", "--output", help="出力jsonlファイルの名前") |
|
|
|
args = parser.parse_args() |
|
|
|
if args.tokenizer is None: |
|
args.tokenizer = args.model |
|
|
|
if args.output is None: |
|
args.output = f"answers-{args.model.split('/')[-1]}.jsonl" |
|
|
|
ds = load_dataset("json", data_files="./elyza-tasks-100-TV_0.jsonl", split="train") |
|
hf_tokenizer = AutoTokenizer.from_pretrained(args.model) |
|
|
|
# ExLlamaV2の設定 |
|
config = ExLlamaV2Config(args.model) |
|
config.arch_compat_overrides() |
|
model = ExLlamaV2(config) |
|
cache = ExLlamaV2Cache_Q8(model, max_seq_len=2304, lazy=True) |
|
model.load_autosplit(cache, progress=True) |
|
tokenizer = ExLlamaV2Tokenizer(config) |
|
|
|
generator = ExLlamaV2DynamicGenerator( |
|
model=model, |
|
cache=cache, |
|
tokenizer=tokenizer, |
|
) |
|
|
|
# 推論パラメータ |
|
gen_settings = ExLlamaV2Sampler.Settings.greedy() |
|
|
|
# 入力が768tokenを超える場合エラーになるはずなのでその場合はここを256ずつ減らしてください。 |
|
max_tokens = 1536 |
|
|
|
def apply_chat_template(item): |
|
messages = [ |
|
{"role": "user", "content": item["input"]} |
|
] |
|
item["prompt"] = hf_tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) |
|
return item |
|
|
|
ds = ds.map(apply_chat_template, batched=False) |
|
|
|
def generate_answer(batch): |
|
outputs = generator.generate( |
|
prompt=batch["prompt"], |
|
max_new_tokens=max_tokens, |
|
stop_conditions=[tokenizer.eos_token_id], |
|
gen_settings=gen_settings, |
|
encode_special_tokens=True, |
|
) |
|
# 入力部分も含めて返ってくるので出力部分だけを取り出す |
|
outputs = [text.split("<start_of_turn>model\n", 1)[-1] for text in outputs] |
|
print(outputs) |
|
batch["output"] = outputs |
|
return batch |
|
|
|
ds = ds.map(generate_answer, batched=True, batch_size=10) |
|
ds = ds.remove_columns("prompt") |
|
|
|
with open(args.output, "w", encoding="utf-8") as f: |
|
for row in ds: |
|
json.dump(row, f, ensure_ascii=False) |
|
f.write("\n") |
|
``` |
|
|
|
</details><br> |
|
|
|
3. 以下のように推論を実行します。推論が完了するとデフォルトではanswers-Llama-Gemma-2-27b-ORPO-iter3-5.8bpw.jsonlに回答が保存されます。 |
|
|
|
```bash |
|
python elyza_tasks_100_tv_exllamav2.py -m Llama-Gemma-2-27b-ORPO-iter3-5.8bpw |
|
``` |
|
|
|
## ライセンス |
|
|
|
本モデルは学習に利用したデータの関係で以下のライセンスの影響を受けます。 |
|
|
|
- [META LLAMA 3.1 COMMUNITY LICENSE](https://www.llama.com/llama3_1/license/)を継承します。 |
|
- [Gemma Terms of Use](https://ai.google.dev/gemma/terms)を継承します。 |
|
- [Qwen LICENSE AGREEMENT](https://huggingface.co/Qwen/Qwen2.5-72B-Instruct/blob/main/LICENSE)の影響を受けます。ライセンスは継承しませんが、「Built with Qwen」のような文言を記載する必要があります。 |