Paul Rock commited on
Commit
13f3831
1 Parent(s): 98e99db

Code sample and examples added

Browse files
Files changed (1) hide show
  1. README.md +130 -0
README.md CHANGED
@@ -33,6 +33,136 @@ Welcome to the adapter-only version of ruGPT-3.5 13B LoRA. This model is built u
33
 
34
  > Note: If you prefer, you can opt to use the ruGPT-3.5 13B fp16 base model.
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  ## 📚 Training Datasets
37
 
38
  The datasets utilized for training this model are consistent with those used for [Saiga-2](https://github.com/IlyaGusev/rulm).
 
33
 
34
  > Note: If you prefer, you can opt to use the ruGPT-3.5 13B fp16 base model.
35
 
36
+ ## Code sample
37
+
38
+ ```python
39
+ import torch
40
+ from peft import PeftModel, PeftConfig
41
+ from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
42
+
43
+ MODEL_NAME = "evilfreelancer/ruGPT-3.5-13B-lora"
44
+ DEFAULT_MESSAGE_TEMPLATE = "<s>{role}\n{content}</s>\n"
45
+ DEFAULT_SYSTEM_PROMPT = "Ты — ruGPT-3.5, русскоязычный автоматический ассистент на 13 миллиардов параметров. Ты разговариваешь с людьми и помогаешь им."
46
+
47
+ class Conversation:
48
+ def __init__(
49
+ self,
50
+ message_template=DEFAULT_MESSAGE_TEMPLATE,
51
+ system_prompt=DEFAULT_SYSTEM_PROMPT,
52
+ start_token_id=2,
53
+ bot_token_id=46787
54
+ ):
55
+ self.message_template = message_template
56
+ self.start_token_id = start_token_id
57
+ self.bot_token_id = bot_token_id
58
+ self.messages = [{
59
+ "role": "system",
60
+ "content": system_prompt
61
+ }]
62
+
63
+ def get_start_token_id(self):
64
+ return self.start_token_id
65
+
66
+ def get_bot_token_id(self):
67
+ return self.bot_token_id
68
+
69
+ def add_user_message(self, message):
70
+ self.messages.append({
71
+ "role": "user",
72
+ "content": message
73
+ })
74
+
75
+ def add_bot_message(self, message):
76
+ self.messages.append({
77
+ "role": "bot",
78
+ "content": message
79
+ })
80
+
81
+ def get_prompt(self, tokenizer):
82
+ final_text = ""
83
+ for message in self.messages:
84
+ message_text = self.message_template.format(**message)
85
+ final_text += message_text
86
+ final_text += tokenizer.decode([self.start_token_id, self.bot_token_id])
87
+ return final_text.strip()
88
+
89
+
90
+ def generate(model, tokenizer, prompt, generation_config):
91
+ data = tokenizer(prompt, return_tensors="pt")
92
+ data = {k: v.to(model.device) for k, v in data.items()}
93
+ output_ids = model.generate(
94
+ **data,
95
+ generation_config=generation_config
96
+ )[0]
97
+ output_ids = output_ids[len(data["input_ids"][0]):]
98
+ output = tokenizer.decode(output_ids, skip_special_tokens=True)
99
+ return output.strip()
100
+
101
+ config = PeftConfig.from_pretrained(MODEL_NAME)
102
+ model = AutoModelForCausalLM.from_pretrained(
103
+ config.base_model_name_or_path,
104
+ load_in_8bit=True,
105
+ torch_dtype=torch.float16,
106
+ device_map="auto"
107
+ )
108
+ model = PeftModel.from_pretrained(
109
+ model,
110
+ MODEL_NAME,
111
+ torch_dtype=torch.float16
112
+ )
113
+ model.eval()
114
+
115
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, use_fast=False)
116
+ generation_config = GenerationConfig.from_pretrained(MODEL_NAME)
117
+ print(generation_config)
118
+
119
+ conversation = Conversation()
120
+ while True:
121
+ user_message = input("User: ")
122
+ if user_message.strip() == "/reset":
123
+ conversation = Conversation()
124
+ print("History reset completed!")
125
+ continue
126
+ conversation.add_user_message(user_message)
127
+ prompt = conversation.get_prompt(tokenizer)
128
+ output = generate(
129
+ model=model,
130
+ tokenizer=tokenizer,
131
+ prompt=prompt,
132
+ generation_config=generation_config
133
+ )
134
+ conversation.add_bot_message(output)
135
+ print("ruGPT-3.5:", output)
136
+ print()
137
+ print("==============================")
138
+ print()
139
+ ```
140
+
141
+ ## Examples
142
+
143
+ ```text
144
+ User: Привет! Почему трава зелёная?
145
+ ruGPT-3.5: Трава зелёная благодаря хлорофиллу - пигменту растений, который поглощает световые волны определенной длины и преобразует их в энергию химических связей. Хлорофилл также обеспечивает растения питательными веществами из почвы через фотосинтез.
146
+ ```
147
+
148
+ ```text
149
+ User: Придумай стишок про нейросети.
150
+ ruGPT-3.5: Нейросеть – это чудо науки,
151
+ Она способна решать любые задачи.
152
+ И если ты хочешь стать программистом,
153
+ То лучше всего изучать нейронные сети.
154
+ ```
155
+
156
+ ```text
157
+ User: Высота самой высокой горы на Земле?
158
+ ruGPT-3.5: Самая высокая гора на Земле находится в Гималаях и называется Эверест (8848 метров).
159
+ ```
160
+
161
+ ```text
162
+ User: Сколько максимум лет может прожить галопогосская черепаха?
163
+ ruGPT-3.5: Галопогосские черепахи могут жить до 100 лет и более. Они являются одними из самых долгоживущих животных на планете.
164
+ ```
165
+
166
  ## 📚 Training Datasets
167
 
168
  The datasets utilized for training this model are consistent with those used for [Saiga-2](https://github.com/IlyaGusev/rulm).