SunX45 commited on
Commit
e8d85ea
·
1 Parent(s): 9527f77

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -31
app.py CHANGED
@@ -1,36 +1,57 @@
1
  import torch
2
  from transformers import GPTNeoForCausalLM, GPT2Tokenizer, Trainer, TrainingArguments
 
3
 
4
- # Загружаем модель и токенизатор
5
- model = GPTNeoForCausalLM.from_pretrained("EleutherAI/gpt-neo-1.3B")
6
- tokenizer = GPT2Tokenizer.from_pretrained("EleutherAI/gpt-neo-1.3B")
7
-
8
- # Читаем данные
9
- with open("dataset.txt", "r") as f:
10
- data = f.read()
11
-
12
- # Токенизируем данные
13
- encoded_data = tokenizer.encode(data, return_tensors='pt')
14
-
15
- # Создаем аргументы для обучения
16
- training_args = TrainingArguments(
17
- output_dir="./results", # путь к каталогу, где будут сохранены результаты обучения
18
- num_train_epochs=10, # количество эпох обучения
19
- per_device_train_batch_size=16, # размер пакета для обучения
20
- per_device_eval_batch_size=64, # размер пакета для оценки
21
- warmup_steps=500, # количество шагов для разогрева
22
- weight_decay=0.01, # весовой распад
23
- logging_dir='./logs', # путь к каталогу для логирования
24
- )
25
-
26
- # Создаем Trainer и начинаем обучение
27
- trainer = Trainer(
28
- model=model, # модель для обучения
29
- args=training_args, # аргументы обучения
30
- train_dataset=encoded_data, # обучающий датасет
31
- )
32
 
33
- trainer.train()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
- # Сохраняем модель
36
- model.save_pretrained("model_directory")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import torch
2
  from transformers import GPTNeoForCausalLM, GPT2Tokenizer, Trainer, TrainingArguments
3
+ from torch.utils.data import Dataset
4
 
5
+ class TextDataset(Dataset):
6
+ def __init__(self, text, tokenizer):
7
+ self.tokenizer = tokenizer
8
+ self.input_ids = []
9
+ self.attn_masks = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
+ for i in range(0, len(text) - 1024 + 1, 1024): # GPT-Neo has a max length of 1024
12
+ inputs = tokenizer.encode_plus(text[i:i + 1024], truncation=True, max_length=1024, padding="max_length", return_tensors='pt')
13
+ self.input_ids.append(inputs['input_ids'])
14
+ self.attn_masks.append(inputs['attention_mask'])
15
+
16
+ def __len__(self):
17
+ return len(self.input_ids)
18
+
19
+ def __getitem__(self, idx):
20
+ return self.input_ids[idx], self.attn_masks[idx]
21
+
22
+ class GPTNeoTrainer:
23
+ def __init__(self, model_name, dataset_path):
24
+ self.model = GPTNeoForCausalLM.from_pretrained(model_name)
25
+ self.tokenizer = GPT2Tokenizer.from_pretrained(model_name)
26
+
27
+ with open(dataset_path, "r") as f:
28
+ data = f.read()
29
+
30
+ self.dataset = TextDataset(data, self.tokenizer)
31
 
32
+ self.training_args = TrainingArguments(
33
+ output_dir="./results",
34
+ num_train_epochs=10,
35
+ per_device_train_batch_size=16,
36
+ per_device_eval_batch_size=64,
37
+ warmup_steps=500,
38
+ weight_decay=0.01,
39
+ logging_dir='./logs',
40
+ )
41
+
42
+ def train(self):
43
+ trainer = Trainer(
44
+ model=self.model,
45
+ args=self.training_args,
46
+ train_dataset=self.dataset,
47
+ )
48
+
49
+ trainer.train()
50
+
51
+ def save_model(self, output_dir):
52
+ self.model.save_pretrained(output_dir)
53
+
54
+ # Использование класса
55
+ trainer = GPTNeoTrainer("EleutherAI/gpt-neo-1.3B", "dataset.txt")
56
+ trainer.train()
57
+ trainer.save_model("model_directory")