Имея всего 61 строку кода, вы можете обучить большую модель с нуля.
Имея всего 61 строку кода, вы можете обучить большую модель с нуля.

👉Введение Тэн Сяоюнь

Эта статья основана не на тонкой настройке модели обучения, а на подробном руководстве по обучению новой модели большого языка с нуля. Прочитав эту статью, вы поймете, что требуется для подготовки большой модели, например, подготовка среды, подготовка данных, генерация сегментации слов, обучение модели и тестирование модели. Удобен для новичков в области искусственного интеллекта. Код из этой статьи можно напрямую запустить на практике. Добро пожаловать в мир чтения.

С помощью этой статьи вы можете предварительно обучить новую большую языковую модель.

Обратите внимание, что это совершенно новая модель, а не доработка.

Преимущество нового обучения заключается в том, что данные обучения и параметры обучения можно изменять. Благодаря отладке и запуску мы можем лучше понять процесс обучения большой модели. Мы можем использовать обучение на определенных типах данных, чтобы завершить вывод определенных типов данных.

Было много статей о больших моделях, больше о точной настройке моделей и очень мало статей о новых предварительно обученных моделях. Лично я считаю, что некоторые из них очень сложны, и код сложно выполнить. Эта статья не сделает ее слишком сложной, а код легко запустить. Всего лишь 61 строка кода позволяет обучить новую большую языковую модель.

В этой статье основное внимание уделяется коду, а для его запуска требуется среда Python.

01. Подготовьте среду обучения

Моя среда обучения основана на графическом процессоре Tencent Cloud.

Адрес: https://cloud.tencent.com/product/gpu

  • Тип графического процессора: GN7.2XLARGE32 T4 Видеокарта: 1 Видеопамять: 16 ГБ;
  • python 3.11;
  • requirements.txt:
Язык кода:javascript
копировать
tokenizers==0.13.3
torch==2.0.1
transformers==4.30.

02. Подготовьте данные для обучения

Сначала нам нужно подготовить данные для обучения. Например, я хочу обучить модель на основе «Романа трех королевств». Адрес для скачивания Романтика трёх королевств:

https://raw.githubusercontent.com/xinzhanguo/hellollm/main/text/sanguoyanyi.txt

03. Обучение сегментатору слов

Токенизация — это процесс разделения входного текста на значимые части (токены). Сгенерируйте новый токенизатор на основе наших данных с помощью следующего кода:

Язык кода:javascript
копировать
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.normalizers import NFKC, Sequence
from tokenizers.pre_tokenizers import ByteLevel
from tokenizers.decoders import ByteLevel as ByteLevelDecoder
from transformers import GPT2TokenizerFast

# Создайте токенизатор GPT2 на основе BPE Реализация алгоритма
tokenizer = Tokenizer(BPE(unk_token="<unk>"))
tokenizer.normalizer = Sequence([NFKC()])
tokenizer.pre_tokenizer = ByteLevel()
tokenizer.decoder = ByteLevelDecoder()

special_tokens = ["<s>","<pad>","</s>","<unk>","<mask>"]
trainer = BpeTrainer(vocab_size=50000, show_progress=True, inital_alphabet=ByteLevel.alphabet(), special_tokens=special_tokens)
# создавать text папку и положить sanguoyanyi.txt Скачайте и поместите в каталог
files = ["text/sanguoyanyi.txt"]
# Начало обучения
tokenizer.train(files, trainer)
# Сохраните обученную сегментацию слов через GPT2 для последующего использования.
newtokenizer = GPT2TokenizerFast(tokenizer_object=tokenizer)
newtokenizer.save_pretrained("./sanguo")

Во время работы отображается следующий рисунок:

После успешного запуска кода мы генерируем следующие файлы в каталоге sanguo:

Язык кода:javascript
копировать
merges.txt
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.json

Теперь мы успешно обучили токенизатор для большой языковой модели.

04. Модель обучения

Используйте следующий код для обучения модели:

Язык кода:javascript
копировать
from transformers import GPT2Config, GPT2LMHeadModel, GPT2Tokenizer
# Загрузить токенизатор
tokenizer = GPT2Tokenizer.from_pretrained("./sanguo")
tokenizer.add_special_tokens({
  "eos_token": "</s>",
  "bos_token": "<s>",
  "unk_token": "<unk>",
  "pad_token": "<pad>",
  "mask_token": "<mask>"
})
# Настройка параметров GPT2Model
config = GPT2Config(
  vocab_size=tokenizer.vocab_size,
  bos_token_id=tokenizer.bos_token_id,
  eos_token_id=tokenizer.eos_token_id
)
# создавать Модель
model = GPT2LMHeadModel(config)
# Для обучения данных мы используем разделение строк
from transformers import LineByLineTextDataset
dataset = LineByLineTextDataset(
    tokenizer=tokenizer,
    file_path="./text/sanguoyanyi.txt",
    block_size=32,
  # Если во время тренировки не хватает видеопамяти
  # Можно отрегулировать соответствующим образом block_size
)
from transformers import DataCollatorForLanguageModeling
data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer, mlm=False, mlm_probability=0.15
)

from transformers import Trainer, TrainingArguments
# Настройка параметров обучения
training_args = TrainingArguments(
    output_dir="./output",
    overwrite_output_dir=True,
    num_train_epochs=20,
    per_gpu_train_batch_size=16,
    save_steps=2000,
    save_total_limit=2,
)
trainer = Trainer(
    model=model,
    args=training_args,
    data_collator=data_collator,
    train_dataset=dataset,)
trainer.train()
# 保存Модель
model.save_pretrained('./sanguo')

Операция занимает относительно много времени, а данные обучения отображаются, как показано ниже:

После успешного запуска кода мы обнаружили, что в каталоге sanguo есть еще три файла:

Язык кода:javascript
копировать
config.json
generation_config.json
pytorch_model.bin

Теперь мы успешно сгенерировали и обучили большую языковую модель на основе «Романа трех королевств».

05. Тестовая модель

Мы используем генерацию текста для тестирования модели. Код выглядит следующим образом:

Язык кода:javascript
копировать
from transformers import pipeline, set_seed
generator = pipeline('text-generation', model='./sanguo')
set_seed(42)
txt = генератор("Лу Бу", max_length=10)
print(txt)

Модель бегущего дисплея выводит текст, связанный с Тремя Королевствами: «Двенадцать глав Люй Бу, Чжан Иде, Время Чжан Иде, Цао Цао, У Хоу Цзи Цзи Цзи».

Еще один тест:

Язык кода:javascript
копировать
txt = генератор("Воспроизвести музыку", max_length=10)
print(txt)

«Затем заиграла музыка, но было сказано, что Цао Цао возглавил армию из-за двух человек»

На этот контент трудно смотреть. Если мы хотим оптимизировать, мы также можем выполнить тонкую настройку обучения на основе новой модели, мы также можем соответствующим образом настроить параметры обучения для достижения лучших результатов;

06. Полный код

Ниже приводится полный код, адрес кода:

https://github.com/xinzhanguo/hellollm/blob/main/sanguo.py

Как запустить в Linux:

Язык кода:javascript
копировать
# создаватьсреда
python3 -m venv ~/.env
# Загрузить среду
source ~/.env/bin/activate
# Скачать код
git clone git@github.com:xinzhanguo/hellollm.git
cd hellollm
# Установить зависимости
pip install -r requirements.txt
# запустить код
python sanguo.py

Выше мы завершили обучение совершенно новой модели. Всего имеется 61 строка кода, не считая пустых строк комментариев.

Модель кода в этой статье основана на GPT2. Конечно, вы также можете реализовать новую модель большого языка на основе таких моделей, как LLama или Bert.

Несмотря на то, что кода не так много, вы можете столкнуться со многими проблемами, если попытаетесь запустить его в первый раз, например, с настройкой среды. Чтобы избежать других неприятностей, рекомендую запускать код с помощью докера:

Язык кода:javascript
копировать
# Скачать код
git clone git@github.com:xinzhanguo/hellollm.git
cd hellollm
# Скомпилировать изображение
docker build -t hellollm:beta .
# Возможность запуска в режиме графического процессора
# docker run -it --gpus all hellollm:beta sh
docker run -it hellollm:beta sh
python sanguo.py

Дополнительные коды см. в разделе: Привет, LLM!

https://github.com/xinzhanguo/hellollm

Выше приведено все содержание этой статьи. Добро пожаловать, чтобы пересылать и делиться.

-End-

Автор оригинала|Синь Чжанго

Технический редактор|jipingjia

ты думаешь, оно большое?Модель Каковы сценарии применения??Добро пожаловать вОблачный разработчик TencentОфициальный аккаунт评论区讨论。мы выберем1самый значимый обмен,отправить Облачный разработчик Tencent - 1 кружка (см. картинку ниже). Розыгрыш лотереи состоится в 12:00 24 июля.

🌟Дополнительные преимущества

Поделитесь этой статьей со своим кругом друзей, сделайте снимок экрана, ответьте [61] на заднем фоне официального аккаунта, и вы сможете принять участие в розыгрыше кружки (3 места).

* Розыгрыш благотворительной акции завершится в 12:00 26 июля 2023 г.

➤ Инженеры-алгоритмы глубоко деконструируют технологию ChatGPT

➤ С этой волной все в порядке. Наконец, эксперт подробно объяснил GPT-4.

➤ Углубленный анализ ChatGPT: эволюционная история семейства GPT

➤ По сравнению с ChatGPT, здесь появился новый AI-помощник Клод.

➤ Научно-популярная тема на просторечии: разберитесь в принципах рисования с помощью искусственного интеллекта с нуля за 10 минут.

➤ Эксперты из Echang объясняют стратегию генерации и декодирования текста AI, а также реализацию кода.

➤ Практика парного программирования GPT4, реальный опыт исследований и разработок Goose Factory.

➤ Минимальный код в сочетании с разработкой ChatGPT, дающий вам дополнительный час рыбалки каждый день

➤ Как программисты Goose Factory используют ChatGPT? Как эффективно использовать подсказку?

➤ Пусть ИИ работает на вас? Руководство GPT по повышению эффективности разработки

➤ Можно ли зарабатывать миллион в год, не написав код? Практика разработки Prompt+ с низким кодом

➤ От игрушек к инструментам|Фантастические операции, которые социальные программисты используют ИИ для повышения эффективности

➤ Я ​​дал ИИ предложение требований, а он мне его фактически вернул.

➤ Вы все еще используете ChatGPT, который не понимает человеческую речь?

➤ Под волной AIGC, реальный опыт работы нового поколения фронтенд-менеджеров в Goose Factory

➤ Кто стоит за GPT и обеспечит максимальную вычислительную мощность для обучения больших моделей?

➤ QQGC? Раскрытие технологии искусственного интеллекта QQ для рисования больших моделей

➤ Для новичков, которые хотят играть в AIGC: научим вас создавать графический и видео-сайт с нуля.

➤ Собирайте скорее! Научите вас шаг за шагом, как рисовать с помощью ИИ

➤ 3 часа на разработку апплета ChatGPT WeChat

➤ Десять вопросов ChatGPT: начинается новая эра

➤ 154-страничный отчет GPT-4 заполняет экран: упоминаются эти новые возможности и недостатки.

➤ Ночной чат экспертов TVP: всех разработчиков, которые не используют ChatGPT, следует уволить.

➤ С ростом популярности ИИ-программирования low-code, нужно ли вам изучать программное обеспечение спустя 23 года?

Темы знаний AIGC постоянно обновляются...

Следите за разработчиками Tencent Cloud и отмечайте их

Будьте первым, кто увидит технологию гусиного завода и практические навыки AIGC

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода