PEFT
Japanese
File size: 4,862 Bytes
5a023c8
 
1a5bb04
 
 
 
5a023c8
1a5bb04
e04ff45
 
1a5bb04
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692c679
1a5bb04
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5a023c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1a5bb04
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
---
library_name: peft
datasets:
- waddledee/three_line_summarization_for_japanese_news_articles
language:
- ja
---

"elyza/ELYZA-japanese-Llama-2-7b-instruct"をベースモデルとして、3行要約タスクでLoRAチューニングしたモデルです。

## Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel, PeftConfig
import torch

peft_model_id = "waddledee/three-line-summarization-ja"
config = PeftConfig.from_pretrained(peft_model_id)
model_name = config.base_model_name_or_path  # this is the base model name

tokenizer = AutoTokenizer.from_pretrained(peft_model_id)

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
)
# Load the base model in 4bit
model_4bit = AutoModelForCausalLM.from_pretrained(
    model_name, 
    quantization_config=bnb_config, 
    trust_remote_code=True
)
model_4bit.config.use_cache = False 

# this will make new learnable parameters for specialized tokens
model_4bit.resize_token_embeddings(len(tokenizer))

model_from_hub = PeftModel.from_pretrained(
    model_4bit,
    peft_model_id, 
    torch_dtype=torch.float16,   
    device_map={'':0}
)

def gen(text, model):
    prompt = f"""<s>[INST] <<SYS>>
あなたは誠実で優秀な日本人のアシスタントです。
<</SYS>>

以下の入力文を3行で要約しなさい。
入力文:
{text} [/INST] [R_START] 
"""
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt", truncation=True, max_length=4096)
    token_ids.to("cuda")

    with torch.no_grad():
        output_ids =model.generate(
            inputs = token_ids,
            do_sample=False,
            pad_token_id=tokenizer.eos_token_id,
            eos_token_id=tokenizer.eos_token_id,
            max_new_tokens=256
        )
    output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
    return(output)

text = "2013年に「一帯一路」は、中国が世界経済の中心的地位を占めていた次代の古代シルクロードの再現を意識したものとされ、陸上と海上の双方において中国と中央アジア、欧州までを結ぶ構想だ。中国メディアの中国網はこのほど、一帯一路構想の実現に向け、中国は日本とどのように対峙すべきかを論じる記事を掲載。中国社科院世界経済政治研究所の研究員の分析として、日本は一帯一路構想の実現における競合として中国の前に立ちはだかると主張した。日本が中国の競合となると主張した1つ目の理由は、「シルクロード文化に最も興味を示しているのは日本である」ことだという。日本にはシルクロードを題材にした小説やドキュメンタリーが多く、シルクロードに対する熱意は中国をも凌ぐゆえだ。確かに日本ではシルクロードを題材とした小説などは多いが、これは納得できない理由だ。記事が挙げた2つ目の理由は「冷戦後、もっとも早くシルクロードに商機を見出したのが日本」であることだという。日本は1997年に当時の橋本総理が「対シルクロード地域外交」を打ち出したが、これはどの国よりも早くシルクロードの重要性に注目した結果であると指摘した。3つ目の点は「中国に対して、もっとも競争力を有しているのが日本である」ことで、日本が中国主導のアジアインフラ投資銀行(AIIB)に対抗して、1100億ドルのインフラ投資をアジアで行う方針を打ち出したことを指摘。また、日本は一帯一路構想に対する「破壊力」も有しているうえ、日本は経済面、政治外交面、軍事面で「もっとも中国に対して懐疑的」であることから、中国の一帯一路構想について、日本が何らかの形で対抗策を打ち出してくるのではないかと警戒感を示した。"
gen(text,model_from_hub)

>> '3行要約:\n中国メディアが日本が一帯一路構想に対抗するのかを論じた\n日本がシルクロード文化に最も興味を示していると指摘\n日本は経済面、政治外交面、軍事面で中国に対して懐疑的   '
```

## Training procedure


The following `bitsandbytes` quantization config was used during training:
- load_in_8bit: False
- load_in_4bit: True
- llm_int8_threshold: 6.0
- llm_int8_skip_modules: None
- llm_int8_enable_fp32_cpu_offload: False
- llm_int8_has_fp16_weight: False
- bnb_4bit_quant_type: nf4
- bnb_4bit_use_double_quant: False
- bnb_4bit_compute_dtype: float16
### Framework versions


- PEFT 0.5.0.dev0