File size: 4,290 Bytes
98e742b
7a22495
8e133d9
 
 
 
 
 
 
 
 
 
496d21a
41f0ab0
 
7a22495
 
fc08875
 
afa4f8e
 
41f0ab0
 
 
fc08875
 
 
 
 
 
 
41f0ab0
 
fc08875
 
 
 
 
 
 
 
 
 
c5110d5
 
 
fc08875
c5110d5
 
 
 
 
 
 
 
 
 
 
fc08875
afa4f8e
fc08875
 
13deebd
fc08875
 
 
 
 
 
 
 
 
 
 
 
 
 
13deebd
41f0ab0
fc08875
 
aaedf39
 
 
 
afa4f8e
fc08875
 
 
 
 
 
 
 
 
 
 
afa4f8e
fc08875
 
 
 
 
 
 
 
 
 
 
 
69bbf49
 
 
fc08875
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85a4ec7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309e496
 
940e314
 
85a4ec7
 
d79d63c
85a4ec7
 
 
940e314
 
 
 
 
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
---
license: gpl-3.0
datasets:
- Jumtra/oasst1_ja
- Jumtra/jglue_jsquads_with_input
- Jumtra/dolly_oast_jglue_ja
- Aruno/guanaco_jp
- yahma/alpaca-cleaned
- databricks/databricks-dolly-15k
language:
- en
- ja
pipeline_tag: text2text-generation
---

This model is finetune on Japanese and English prompt

# Usage:

## Init model:

To use in code:

```python
import torch
import peft
from transformers import LlamaTokenizer, LlamaForCausalLM, GenerationConfig

tokenizer = LlamaTokenizer.from_pretrained(
    "decapoda-research/llama-7b-hf"
    )

model = LlamaForCausalLM.from_pretrained(
    "tamdiep106/alpaca_lora_ja_en_emb-7b",
    load_in_8bit=False,
    device_map="auto",
    torch_dtype=torch.float16
    )

tokenizer.pad_token_id = 0  # unk. we want this to be different from the eos token
tokenizer.bos_token_id = 1
tokenizer.eos_token_id = 2
```

## Try this model

To try out this model, use this colab space
[GOOGLE COLAB LINK](https://colab.research.google.com/drive/1kVcN0L_n5lwhFlIqDkNbLNURboifgbBO?usp=sharing)

### Recommend Generation parameters:

- temperature: 0.5~0.7

- top p: 0.65~1.0

- top k: 30~50

- repeat penalty: 1.03~1.17

## Japanese prompt:

```python
instruction_input_JP = 'あなたはアシスタントです。以下に、タスクを説明する指示と、さらなるコンテキストを提供する入力を組み合わせます。 リクエストを適切に完了するレスポンスを作成します。'
instruction_no_input_JP = 'あなたはアシスタントです。以下はタスクを説明する指示です。 リクエストを適切に完了するレスポンスを作成します。'

prompt = """{}
### Instruction:
{}

### Response:"""

if input=='':
    prompt = prompt.format(
        instruction_no_input_JP, instruction
        )
else:
    prompt = prompt.format("{}\n\n### input:\n{}""").format(
        instruction_input_JP, instruction, input
        )
```

result:
![Japanese result](image/363534374_1451622835571215_2216121698904551333_n.png)


## English prompt:

```python
instruction_input_EN = 'You are an Assistant, below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.'
instruction_no_input_EN = 'You are an Assistant, below is an instruction that describes a task. Write a response that appropriately completes the request.'

prompt = """{}
### Instruction:
{}

### Response:"""

instruction = "write an email for my boss letting him know that i will resign from the position" #@param {type:"string"}
input = "" #@param {type:"string"}

if input=='':
    prompt = prompt.format(
        instruction_no_input_EN, instruction
        )
else:
    prompt = prompt.format("{}\n\n### input:\n{}""").format(
        instruction_input_EN, instruction, input
        )
```

result:
![English result](image/364172227_1350824475786534_5932806966648424463_n.png)

Use this code to decode output of model

```python
for s in generation_output.sequences:
    result = tokenizer.decode(s).strip()
    result = result.replace(prompt, '')
    result = result.replace("<s>", "")
    result = result.replace("</s>", "")
    if result=='':
        print('No output')
        print(prompt)
        print(result)
        continue
    print('\nResponse: ')

    print(result)

```

# Training:

## Dataset:

- Jumtra/oasst1_ja

- Jumtra/jglue_jsquads_with_input

- Jumtra/dolly_oast_jglue_ja

- Aruno/guanaco_jp

- yahma/alpaca-cleaned

- databricks/databricks-dolly-15k

with about 750k entries, 2k entries used for evaluate process

## Training setup

I trained this model on an instance from **vast.ai**

- 1 NVIDIA RTX 4090

- 90 GB Storage

- Time spend about 3 and a half days

- use ```python export.py``` to merge weight

- Training script: https://github.com/Tamminhdiep97/alpaca-lora_finetune/tree/master

## Result

- Training loss

![training loss chart](image/train_loss_chart.png)

- Eval loss chart

![eval loss chart](image/eval_loss.png)

# Acknowledgement

- Special thank to [KBlueLeaf](https://huggingface.co/KBlueLeaf) and the repo https://huggingface.co/KBlueLeaf/guanaco-7b-leh-v2 that helped and inspired me to train this model, without this help, i wouldn't never thought that i could finetune a llm myself