File size: 5,397 Bytes
19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 19ab866 0b12719 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
---
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」のような文言を記載する必要があります。 |