File size: 3,807 Bytes
f3c437e 98b71f2 |
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 |
---
language:
- ms
---
# QLORA Malaysian Llama2 13B 32k chat completions
QLORA https://huggingface.co/mesolitica/llama-13b-hf-32768-fpf on translated UltraChat, https://huggingface.co/datasets/mesolitica/google-translate-ultrachat.
We use exact Llama2 chat template.
README at https://github.com/mesolitica/malaya/tree/5.1/session/llama2#13b-16384-context-length-flash-attention-2
## how-to
```python
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
import torch
TORCH_DTYPE = 'bfloat16'
nf4_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type='nf4',
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=getattr(torch, TORCH_DTYPE)
)
tokenizer = AutoTokenizer.from_pretrained('mesolitica/malaysian-llama2-13b-32k-instructions')
model = AutoModelForCausalLM.from_pretrained(
'mesolitica/malaysian-llama2-13b-32k-instructions',
use_flash_attention_2 = True,
quantization_config = nf4_config
)
def parse_llama_chat(messages):
system = messages[0]['content']
user_query = messages[-1]['content']
users, assistants = [], []
for q in messages[1:-1]:
if q['role'] == 'user':
users.append(q['content'])
elif q['role'] == 'assistant':
assistants.append(q['content'])
texts = [f'<s>[INST] <<SYS>>\n{system}\n<</SYS>>\n\n']
for u, a in zip(users, assistants):
texts.append(f'{u.strip()} [/INST] {a.strip()} </s><s>[INST] ')
texts.append(f'{user_query.strip()} [/INST]')
prompt = ''.join(texts).strip()
return prompt
messages = [
{'role': 'system', 'content': 'awak adalah AI yang mampu jawab segala soalan'},
{'role': 'user', 'content': 'kwsp tu apa'}
]
prompt = parse_llama_chat(messages)
inputs = tokenizer([prompt], return_tensors='pt', add_special_tokens=False).to('cuda')
generate_kwargs = dict(
inputs,
max_new_tokens=1024,
top_p=0.95,
top_k=50,
temperature=0.9,
do_sample=True,
num_beams=1,
)
r = model.generate(**generate_kwargs)
tokenizer.decode(r[0])
```
```text
'<s> [INST] <<SYS>>
awak adalah AI yang mampu jawab segala soalan
<</SYS>>
kwsp tu apa [/INST] Kumpulan Wang Simpanan Pekerja (KWSP) merupakan sebuah badan berkanun yang ditubuhkan di bawah Akta Kumpulan Wang Simpanan Pekerja 1991 untuk menguruskan simpanan persaraan pekerja dan melaksanakan program persaraan kepada pekerja dan tanggungan mereka. Visi KWSP adalah untuk menjadi pihak berkuasa persaraan terkemuka dalam membina dan membangunkan simpanan untuk masa depan yang lebih baik. </s>'
```
```python
messages = [
{'role': 'system', 'content': 'awak adalah AI yang mampu jawab segala soalan'},
{'role': 'user', 'content': 'awat malaysia ada jabatan koko, malaysia bukan buat keluaq koko banyak pun'}
]
prompt = parse_llama_chat(messages)
inputs = tokenizer([prompt], return_tensors='pt', add_special_tokens=False).to('cuda')
generate_kwargs = dict(
inputs,
max_new_tokens=1024,
top_p=0.95,
top_k=50,
temperature=0.9,
do_sample=True,
num_beams=1,
)
r = model.generate(**generate_kwargs)
print(tokenizer.decode(r[0]))
```
```text
<s> [INST] <<SYS>>
awak adalah AI yang mampu jawab segala soalan
<</SYS>>
awat malaysia ada jabatan koko, malaysia bukan buat keluaq koko banyak pun [/INST] Jabatan Koko Malaysia ialah agensi kerajaan yang bertanggungjawab untuk pembangunan dan pengawalseliaan industri koko Malaysia. Sementara itu, pengeluaran koko adalah sebahagian kecil daripada ekonomi Malaysia. Antara faktor yang menyumbang kepada ini ialah kos tenaga buruh yang tinggi, kekurangan tanah untuk penanaman koko, dan kekurangan penglibatan dalam sektor hiliran. Walau bagaimanapun, industri koko Malaysia mempunyai potensi besar untuk berkembang dan memacu pertumbuhan ekonomi. </s>
``` |