mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
Рефакторинг и улучшение компонентов
Основные изменения в коде:
1. Токенизатор (bpe.py):
- Добавлен прогресс-бар через tqdm в метод fit()
- Улучшено логирование процесса обучения
- Добавлена обработка edge-cases для vocab_size
2. Генерация текста (generate_text.py):
- Полный рефакторинг скрипта
- Добавлены проверки модели перед загрузкой
- Поддержка уменьшенных моделей (seq_len=32)
- Подробное логирование процесса генерации
3. Обучение GPT (train_gpt_model.py):
- Автоподбор параметров под размер данных
- Уменьшенные параметры модели по умолчанию
- Контроль памяти и устройств (CPU/MPS)
4. Токенизация корпуса (tokenize_corpus.py):
- Добавлены проверки входных данных
- Подробное логирование процесса
- Обработка ошибок загрузки файлов
Исправления:
- Синхронизация размеров слоёв в GPT
- Корректная работа с малыми наборами данных
- Исправление загрузки моделей на MPS
Обновление README.md
- Добавлены обязательные зависимости: dill и tqdm
- Добавлен раздел 'Цель проекта' с описанием задач
- Добавлен раздел 'Участие в разработке' для контрибьюторов
- Добавлен раздел 'Лицензия' с условиями MIT
Рефакторинг основных скриптов и обновление данных
Основные изменения:
1. Скрипты в bin/:
- Оптимизация generate_text.py (генерация текста)
- Улучшение tokenize_corpus.py (обработка корпуса)
- Рефакторинг train_gpt_model.py (обучение модели)
- Обновление train_tokenizer.py (алгоритм BPE)
2. Данные:
- Удалены устаревшие артефакты:
* simple_llm_gpt.pth (модель)
* bpe_tokenizer.json (токенизатор)
* corpus_tokens.pkl (токены)
- Подготовка к генерации новых данных
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import dill
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import List, Dict
|
||||
|
||||
@@ -84,4 +85,37 @@ class BPE(ABC):
|
||||
tokens.append(self.id2token[id])
|
||||
else:
|
||||
tokens.append('') # Специальное значение
|
||||
return tokens
|
||||
return tokens
|
||||
|
||||
def save(self, filename):
|
||||
with open(filename, 'wb') as f:
|
||||
dill.dump(self, f)
|
||||
print(f"Объект сохранён в {filename}")
|
||||
|
||||
|
||||
@classmethod
|
||||
def load(cls, filename):
|
||||
"""Загружает токенизатор из файла.
|
||||
|
||||
Args:
|
||||
filename (str): Путь к файлу с сохраненным токенизатором
|
||||
|
||||
Returns:
|
||||
BPE: Загруженный экземпляр токенизатора
|
||||
|
||||
Пример:
|
||||
>>> tokenizer = BPE.load("bpe_tokenizer.pkl")
|
||||
"""
|
||||
"""Load trained tokenizer from file.
|
||||
|
||||
Args:
|
||||
filename (str): Path to saved tokenizer
|
||||
|
||||
Returns:
|
||||
BPE: Loaded tokenizer instance
|
||||
"""
|
||||
with open(filename, 'rb') as f:
|
||||
obj = dill.load(f)
|
||||
|
||||
print(f"Объект загружен из {filename}")
|
||||
return obj
|
||||
Reference in New Issue
Block a user