|
Load Model |
|
|
|
```python |
|
import torch |
|
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig |
|
|
|
bnb_config = BitsAndBytesConfig( |
|
load_in_4bit=True, |
|
bnb_4bit_use_double_quant=True, |
|
bnb_4bit_quant_type="nf4", |
|
bnb_4bit_compute_dtype=torch.bfloat16 |
|
) |
|
|
|
tokenizer = AutoTokenizer.from_pretrained("LuuNgoc2k2/Law-Llama-v1", add_eos_token=True, padding_side='right') |
|
model = AutoModelForCausalLM.from_pretrained( |
|
'LuuNgoc2k2/Law-Llama-v1', |
|
torch_dtype=torch.bfloat16, |
|
device_map="auto", |
|
use_cache=True, |
|
) |
|
|
|
tokenizer.pad_token = tokenizer.eos_token |
|
|
|
``` |
|
|
|
|
|
Generate |
|
|
|
```python |
|
PROMPT = """ |
|
### Hướng dẫn: Bạn là một trợ lí Tiếng Việt. Hãy luôn trả lời một cách trung thực và an toàn |
|
Câu trả lời của bạn không nên chứa bất kỳ nội dung gây hại, nguy hiểm hoặc bất hợp pháp nào |
|
Nếu một câu hỏi không có ý nghĩa hoặc không hợp lý về mặt thông tin, hãy giải thích tại sao thay vì trả lời một điều gì đó không chính xác |
|
Nếu bạn không biết câu trả lời cho một câu hỏi, hãy trẳ lời là bạn không biết và vui lòng không chia sẻ thông tin sai lệch. |
|
### Câu hỏi: {input} |
|
""" |
|
|
|
question = """Trình bày về thủ tục li hôn ?""" |
|
|
|
text = PROMPT.format_map({ |
|
'input': question, |
|
}) |
|
|
|
|
|
input_ids = tokenizer(text, return_tensors='pt', add_special_tokens=False).to('cuda') |
|
|
|
generated_ids = model.generate( |
|
input_ids=input_ids['input_ids'], |
|
max_new_tokens=1024, |
|
do_sample=True, |
|
top_p=0.95, |
|
top_k=40, |
|
temperature=0.3, |
|
repetition_penalty=1.1, |
|
no_repeat_ngram_size=7, |
|
num_beams=5, |
|
) |
|
|
|
a = tokenizer.batch_decode(generated_ids)[0] |
|
# print(a.split('### Trả lời:')[1]) |
|
print(a) |
|
``` |
|
|