File size: 3,012 Bytes
c3eeb30
 
da663cf
 
 
 
 
 
 
c3eeb30
 
 
 
 
 
da663cf
c3eeb30
da663cf
 
 
6b138da
 
 
c3eeb30
da663cf
c3eeb30
6b138da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da663cf
c330b72
da663cf
6b138da
da663cf
c3eeb30
da663cf
c3eeb30
da663cf
 
 
 
 
 
c3eeb30
da663cf
 
c3eeb30
da663cf
 
 
 
 
 
 
 
 
 
c3eeb30
da663cf
c3eeb30
da663cf
c3eeb30
 
da663cf
c3eeb30
da663cf
c3eeb30
da663cf
c3eeb30
da663cf
c3eeb30
da663cf
 
 
c3eeb30
da663cf
c3eeb30
da663cf
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
---
library_name: transformers
datasets:
- elyza/ELYZA-tasks-100
license: apache-2.0
language:
- ja
base_model:
- llm-jp/llm-jp-3-13b-instruct
---

# Model Card for Model ID

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

## Required Libraries and Their Versions

- trl==0.12.2
- transformers<4.47.0
- tokenizers==0.21.0
- bitsandbytes==0.45.0
- peft==0.14.0
- datasets==3.2.0

## Usage

Google Colaboratory(L4 GPU)にて実行

```py
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    TrainingArguments,
    logging,
)
from peft import (
    LoraConfig,
    PeftModel,
    get_peft_model,
)

import os, torch, gc, json
from tqdm import tqdm
from datasets import load_dataset
import bitsandbytes as bnb
from trl import SFTTrainer
from google.colab import userdata

# Hugging Face Token
os.environ["HF_TOKEN"] = userdata.get("HF_TOKEN")
```

```py
# 推論データ準備
datasets = []

inference_data_path = '/content/drive/MyDrive/your_path'
with open(f"{inference_data_path}/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 = ""

# モデルとトークナイザー準備
new_model_id = "yottan-wywy/llm-jp-3-13b-instruct-finetune_1217"

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

model = AutoModelForCausalLM.from_pretrained(
    new_model_id,
    quantization_config=bnb_config,
    device_map="auto"
)

tokenizer = AutoTokenizer.from_pretrained(new_model_id, trust_remote_code=True)
```

```py
# 推論実行
results = []
system_text = "以下は、タスクを説明する指示です。要求を適切に満たす回答を**簡潔に**書きなさい。"
for data in tqdm(datasets):

  input_text = data["input"]

  prompt = f"""
  {system_text}
  ### 指示
  {input_text}
  ### 応答
  """

  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_text, "output": output})

```


## Model Details

- **Model type:** Transformer-based Language Model

## Datasets

### Instruction tuning

| Language | Dataset | description |
|:---|:---|:---|
|Japanese|[elyza/ELYZA-tasks-100](https://huggingface.co/datasets/elyza/ELYZA-tasks-100)| A manually constructed instruction dataset |

## License

[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)