File size: 2,953 Bytes
21ca209
 
ecf5522
 
 
21ca209
bb1cac3
 
 
d7f4da9
bb1cac3
1f6f3f0
d7f4da9
 
0fc1eb6
9f2b4e6
d7f4da9
 
 
245ff98
bb1cac3
0fc1eb6
 
 
 
 
aee1080
 
 
9f2b4e6
 
aee1080
 
 
 
 
 
 
 
9f2b4e6
 
aee1080
673a1b8
aee1080
673a1b8
 
 
aee1080
 
673a1b8
 
aee1080
 
 
 
673a1b8
aee1080
 
 
9f2b4e6
 
93a69e2
aee1080
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1b0da1
 
 
 
 
5a0cf70
a1b0da1
8cbb3d6
 
 
 
 
 
 
 
5a0cf70
aee1080
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
---
license: apache-2.0
tags:
- trl
- sft
---

# Model Card for Model ID

## 2023 AIA LLM課程範例
<!-- Provide a quick summary of what the model is/does. -->
- 基礎模型: huggingface平台的Llama-2-7b-chat-hf ( https://huggingface.co/meta-llama/Llama-2-7b-chat-hf)
- 採用8bits精度載入模型權重 (load_in_8bit=True)
- 使用peft library的LoRA訓練方式,進行fine-tuning:

```python
lora_alpha = 16
lora_dropout = 0.1
lora_r = 8
```

### 資料集
(語料包括:英,中,日,韓) HF連結: https://huggingface.co/datasets/timdettmers/openassistant-guanaco

### 訓練環境
使用google colab 免費資源(GPU: T4, 15GB)

### 執行範例
**1.先確認所需library**

```python
#確認安裝所需套件
!pip install -q -U trl transformers accelerate git+https://github.com/huggingface/peft.git

#LlamaTokenizer requires the SentencePiece library
!pip install sentencepiece
```

**2.下載模型**

```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

model_name = "stuser2023/Llama2-7b-finetuned"

quantization_config = BitsAndBytesConfig(load_in_8bit=True)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=quantization_config,
    device_map={'': 0},  # 設定使用的設備,此處指定為 GPU 0
    trust_remote_code=True,
)
model.config.use_cache = False
model=model.eval() #把Dropout功能關掉
```

**3.進行推論(文字生成)**

```python
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path, trust_remote_code=True, padding=True)
tokenizer.pad_token = tokenizer.eos_token

input_ids = tokenizer(['<s>Human: 在未來的2040年,人類社會將進入\n</s><s>Assistant: '], return_tensors="pt",add_special_tokens=False).input_ids.to('cuda')        
generate_input = {
    "input_ids":input_ids,
    "max_new_tokens":384,
    "do_sample":True,
    "top_k":50,
    "top_p":0.95,
    "temperature":0.3,
    "repetition_penalty":1.3,
    "eos_token_id":tokenizer.eos_token_id,
    "bos_token_id":tokenizer.bos_token_id,
    "pad_token_id":tokenizer.pad_token_id
}
generate_ids  = model.generate(**generate_input)
text = tokenizer.decode(generate_ids[0])
print(text)
```

### 目前的生成效果

```python
'''
### Human:在未來的2040年,人類社會將進入一個新的時代。
### Assistant:人類社會在2040年進入一個新的時代,這個時代是一個高度技術和人工智慧的時代。
人類將使用自動駕駛汽車和處理資料,並且人類將使用人工智慧來解決問題。
人類將使用數位貨幣來儲存和交換貨幣,並且人類將使用雷射和激光來傳遞資料。
人類將使用創新的技術來改善生活。
人類將使用處理資料和數位貨幣來儲存和交換資料。
人類將使用雷射和激光來傳遞資料。
人類將使用創新的技術來改善生活。
人類將使用處理資料和數位貨幣來儲存和交換資料
'''
```