File size: 4,453 Bytes
2c24bce
 
b6c49d0
 
 
 
 
 
2c24bce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b6c49d0
 
 
 
 
2c24bce
 
 
 
b6c49d0
2c24bce
b6c49d0
 
 
 
 
 
 
 
2c24bce
 
b6c49d0
 
 
 
 
 
 
 
 
 
2c24bce
 
 
b6c49d0
 
2c24bce
 
 
 
b6c49d0
 
 
 
 
 
 
2c24bce
 
 
 
b6c49d0
 
 
 
 
 
2c24bce
 
 
 
 
b6c49d0
 
 
 
 
 
 
2c24bce
b6c49d0
 
2c24bce
 
b6c49d0
 
2c24bce
b6c49d0
 
2c24bce
b6c49d0
 
 
 
 
 
 
 
 
 
 
2c24bce
b6c49d0
 
 
2c24bce
b6c49d0
2c24bce
b6c49d0
 
 
 
2c24bce
b6c49d0
 
 
 
 
 
 
 
 
 
 
 
2c24bce
b6c49d0
2c24bce
b6c49d0
 
 
 
 
 
 
 
 
 
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
142
143
144
145
146
147
148
149
150
151
152
---
library_name: transformers
datasets:
- weblab-GENIAC/aya-ja-evol-instruct-calm3-dpo-masked
language:
- ja
base_model:
- llm-jp/llm-jp-3-13b
---

# Model Card for Model ID

<!-- Provide a quick summary of what the model is/does. -->



## Model Details

### Model Description

<!-- Provide a longer summary of what this model is. -->

This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated.

- **Developed by:** yuki-2000
- **Model type:** LLM
- **Language(s) (NLP):** Japanese
- **License:** base_model:Apache License, Version 2.0, CC-BY-NC-SA  datasets: Apache 2.0
- **Finetuned from model :** llm-jp/llm-jp-3-13b



## Uses
実行の仕方は以下の通りです。 以下は、Model_Inference_Template_DPO_20241207.ipynbについて、モデルidのみを変えたものになっています。 omnicampus上での演習環境での使用を想定しています。

```
!pip install -U ipywidgets
!pip install transformers
!pip install -U bitsandbytes
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft
```


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



# Hugging Faceで取得したTokenをこちらに貼る。
HF_TOKEN = "your_token"




# ベースとなるモデルと学習したLoRAのアダプタ。
# model_idの値はomnicampusの環境におけるモデルのパスを表しており、それ以外の環境で実行する場合は変更の必要があります。
model_id = "models/models--llm-jp--llm-jp-3-13b/snapshots/cd3823f4c1fcbb0ad2e2af46036ab1b0ca13192a"
# omnicampus以外の環境をご利用の方は以下をご利用ください。
# base_model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "yuki-2000/llm-jp-3-13b-finetune5" # こちらにアップロードしたLoRAアダプタのHugging FaceのIDを指定してください。
adapter_dpo_id = "yuki-2000/llm-jp-3-13b-finetune5-dpo7" # こちらにアップロードしたDPOアダプタのHugging FaceのIDを指定してください。




# QLoRA config
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)





# Load model
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto",
    token = HF_TOKEN
)

# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token = HF_TOKEN)


# 元のモデルにLoRAのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)

# LoRAのモデルにDPOのアダプタを統合。
model = PeftModel.from_pretrained(model, adapter_dpo_id, token = HF_TOKEN)

# データセットの読み込み。
# 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 = ""

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

  input = data["input"]

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

  tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
  attention_mask = torch.ones_like(tokenized_input)
  with torch.no_grad():
      outputs = model.generate(
          tokenized_input,
          attention_mask=attention_mask,
          max_new_tokens=100,
          do_sample=False,
          repetition_penalty=1.2,
          pad_token_id=tokenizer.eos_token_id
      )[0]
  output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)

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

# こちらで生成されたjsolを提出してください。
# 本コードではinputも含んでいますが、なくても問題ありません。
# 必須なのはtask_idとoutputとなります。
import re
jsonl_id = re.sub(".*/", "", adapter_dpo_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')
```