TinyLlama 1.1B — размер не имеет значения

TinyLlama 1.1B – размер не имеет значения

Исходный узел: 3081711

Введение

В быстро растущем мире искусственного интеллекта и машинного обучения TinyLlama 1.1B становится примечательной разработкой. В эпоху, когда вычислительные ограничения создают проблемы для запуска более сложных моделей, TinyLlama выделяется тем, что бросает вызов ожиданиям. Он демонстрирует замечательные характеристики компактных моделей.

Целью этой статьи является анализ TinyLlama 1.1B, компактной модели большого языка. Мы углубимся в его основные аспекты, например, как оно было обучено тестированию производительности и практической реализации с использованием платформы Hugging Face. Мы даже запустим эту модель в бесплатном Google Colab и проверим ее математические и логические способности.

Крошечная Лама 1.1B

Цели обучения

  • Получите полное представление о TinyLlama 1.1B.
  • Изучите сложный процесс обучения, который прошла модель.
  • Проанализируйте производительность и результаты тестов, чтобы оценить ее эффективность.
  • Изучите практические шаги по реализации TinyLlama 1.1B на примерах кодирования.

Эта статья была опубликована в рамках Блогатон по Data Science.

Содержание

Что такое TinyLlama 1.1B?

TinyLlama 1.1B, часть более широкого проекта Llama, является свидетельством достижений в области языкового моделирования. Это модель с 1.1 миллиарда параметров, обученная на ошеломляющих 3 триллионах токенов, что ставит ее в уникальное положение в сфере искусственного интеллекта. В отличие от своих более крупных аналогов, TinyLlama 1.1B спроектирован более эффективным и управляемым, что делает его хорошим выбором для приложений с ограниченными вычислительными ресурсами.

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

Процесс обучения TinyLlama 1.1B

Процесс обучения TinyLlama 1.1B увлекателен, как и сама модель. Обучение TinyLlama проходило всего 90 дней на 16 графических процессорах A100-40G. Предварительное обучение проводилось на 3 триллионах токенов, и команда TinyLlama опубликовала промежуточную модель между каждыми полутриллионами. 

Что касается данных, Slimpajama и Starcoderdata были взяты с общим размером набора данных в 950 миллиардов токенов. Соотношение естественного языка и кода сохранялось на уровне 7:3, т.е. 70% данных представляли собой естественный язык, а 30% — код. Таким образом, чтобы достичь отметки в 3 триллиона токенов для тонкой настройки, TinyLlama прошла 3 эпохи обучения для этого набора данных. 

Существует даже чат-версия TinyLlama под названием TinyLlama-Chat. Первоначально эта модель подверглась тонкой настройке на наборе данных UltraChat, который содержит разнообразные синтетические разговоры, генерируемые ChatGPT. Этот шаг имел решающее значение для создания модели, способной обрабатывать различные контексты и стили разговора.

Дальнейшее уточнение было достигнуто с использованием DPOTrainer в наборе данных UltraFeedback. На этом этапе обучения основное внимание уделялось приведению ответов модели в соответствие с человеческими моделями разговора. В результате получается модель, которая не только собирает информацию по различным темам, но и взаимодействует естественным и увлекательным образом.

Вы также можете прочитать: Начало работы с LlaMA 2: руководство для начинающих

Результаты производительности и тестов

Оценка производительности TinyLlama 1.1B показывает ее способность быстро предоставлять высококачественные ответы. Обучение наделило его способностью обслуживать многоязычные приложения, что является важной особенностью в нашем глобализированном мире. Несмотря на меньший размер, TinyLlama 1.1B по-прежнему догоняет своих более крупных аналогов по качеству и скорости отклика, что делает его мощным инструментом в различных приложениях искусственного интеллекта.

Тесты TinyLlama 1.1B, хотя и менее обширные, чем тесты для более крупных моделей, все же демонстрируют ее способность решать сложные языковые задачи. Его способность генерировать последовательные и контекстуально релевантные ответы на нескольких языках особенно впечатляет​​. Модель тестировалась на разных бенчмарках, таких как HellaSwag, WinoGrande, ARC, MMLU и других. Общий средний балл составил 52.99. Это намного лучше, чем другая модель с 1 миллиардом параметров, то есть Pythia 1B, средняя оценка которой составила 48.3. В таблице показаны отдельные оценки каждого теста.

эталонный тест TinyLlama Оценка 1.1B
ХеллаСваг 59.2
Обка 36.0
ВиноГранде 59.12
ARC_c 30.12
ARC_e 55.25
булк 57.83
пика 73.29
средний 52.9

TinyLlama – Начало работы

Здесь, в этом разделе, мы скачаем квантованную версию TinyLlama Chat и запустим ее в Google Colab. Прежде чем загружать модель, нам необходимо загрузить и установить следующие пакеты Python.

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip3 install llama-cpp-python 
!pip3 install huggingface-hub 
  • Ассоциация CMAKE_ARGS="-DLLAMA_CUBLAS=вкл" и FORCE_CMAKE=1, позволит llama_cpp_python использовать графический процессор Nvidia, доступный в бесплатной версии Colab.
  • Затем мы устанавливаем llama_cpp_python пакет через pip3
  • Мы даже скачиваем Huggingface-концентратор, с помощью которого мы будем скачивать квантованный чат TinyLlama 1.1B.

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

from huggingface_hub import hf_hub_download

# specifying the model name
model_name = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
# specifying the type of quantization of the model
model_file = "tinyllama-1.1b-chat-v1.0.Q8_0.gguf"

# download the model by specifying the model name and quantized model name
model_path = hf_hub_download(model_name, filename=model_file)

Здесь Hugging_face_hub библиотека позаботится о процессе загрузки квантованной модели. Для этого мы импортируем hf_hub_download который принимает следующие параметры:

  • название модели: В эту переменную мы передаем модель, которую хотим загрузить. Здесь мы хотим скачать модель TinyLlama 1.1B Chat GGUF.
  • файл_модели: Здесь мы указываем тип квантованной модели, которую хотим загрузить. Здесь мы загрузим 8-битную квантованную версию чата TinyLlama 1.1B.
  • Наконец, мы передаем эти параметры в hf_hub_download, который принимает эти параметры и загружает указанную модель. После загрузки он возвращает путь, по которому загружается модель.
  • Возвращенный путь сохраняется в папке модель_путь Переменная.

Теперь мы можем загрузить эту модель через llama_cpp_python библиотека. Код загрузки модели будет выглядеть так, как показано ниже.

from llama_cpp import Llama
llm = Llama(
    model_path=model_path,
    n_ctx=512,  # the number of i/p tokens the model can take
    n_threads=8, # the number of threads to use
    n_gpu_layers=40# how many layers of the model to offload to the GPU
)

Мы импортируем Лама класс из llama_cpp, который принимает следующие параметры

  • путь_модели: Эта переменная принимает путь, по которому хранится наша модель. Мы получили путь из предыдущего шага, который мы предоставим здесь.
  • n_ctx: Здесь мы указываем длину контекста для модели. На данный момент мы предоставляем 512 токенов в качестве длины контекста.
  • n_threads: Здесь мы упоминаем количество потоков, которые будут использоваться Лама класс
  • n_gpu_layers: Мы указываем это, если у нас есть работающий графический процессор, что мы и делаем в случае бесплатной Colab. Для этого мы передаем 40, что означает, что мы хотим выгрузить всю модель в графический процессор и не хотим, чтобы какая-либо ее часть запускалась в системной оперативной памяти.
  • Наконец, мы создаем объект из этого Лама класс и передать его в переменную llm

Запуск этого кода загрузит квантованную модель чата TinyLlama 1.1B в графический процессор и установит соответствующую длину контекста. Теперь пришло время сделать некоторые выводы по этой модели. Для этого мы работаем с приведенным ниже кодом

output = llm(
  "<|im_start|>usernWho are you?<|im_end|>n<|im_start|>assistantn", # User Prompt
  max_tokens=512,  # Number of output tokens generated
  stop=["</s>"],   # Token which tells the LLM to stop
)
print(output['choices'][0]['text']) # Model generated text

Чтобы вывести модель, мы передаем в LLM следующие параметры:

  • шаблон подсказки/чата: Это шаблон подсказки, необходимый для общения с моделью. Вышеупомянутый шаблон(т.е. , ) — тот, который работает для модели чата TinyLlama 1.1B. В шаблоне предложение после «Пользователь» — это «Подсказка пользователю», а генерация будет сгенерирована после «Помощника».
  • макс_токены: В эту переменную мы передаем значение, которое определяет максимальное количество токенов, которые может вывести модель большого языка при подсказке. На данный момент мы ограничиваем его 512 токенами.
  • стоп: В эту переменную мы передаем стоп-токен. Токен остановки сообщает модели большого языка о прекращении генерации дальнейших токенов. Для чата TinyLlama 1.1B стоп-токен

Сгенерированный текст сохраняется в выходной переменной, когда мы запускаем это. Результат генерируется в формате, аналогичном вызову API OpenAI. Следовательно, мы можем получить доступ к генерации через данный оператор печати, аналогично тому, как мы получаем доступ к генерации из ответов OpenAI. Полученный результат можно увидеть ниже.

Крошечная Лама 1.1B

Для модели такого размера ее генерируемый отклик является первоклассным. Это неожиданно для модели такого размера; грамматика и тон выглядят прекрасно, нет никаких признаков повторения предложений. Давайте попробуем протестировать способности модели к рассуждению.

output = llm(
  "<|im_start|>usernIf all students who study hard get good grades, 
  and John got good grades, can we conclude that John studied hard?
  <|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
Крошечная Лама 1.1B
output = llm(
  "<|im_start|>usernHow fast can a snake fly?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

Все идет нормально. Судя по рассмотренным нами примерам, модель дает хорошие ответы. Но это может быть не во всех случаях так, потому что мы проверяем это только на ограниченном количестве вопросов. Давайте даже проверим модель на ее математические способности.

output = llm(
  "<|im_start|>usernJohn is twice as old as Sarah, and Sarah is three years 
  older than Mary. If Mary is 10 years old, how old is John?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"
output = llm(
  "<|im_start|>usernWhat is the missing number in this pattern: 
  1, 4, 9, 16, __, 36?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

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

Что касается тонкой настройки, TinyLlama — идеальный выбор для тех, кто ограничен ограниченным аппаратным обеспечением и хочет точно настроить большие языковые модели для своего конкретного набора данных.

Потенциальные варианты использования и приложения

Учитывая компактные размеры КрошечныйЛама, который может похвастаться 1.1 миллиарда параметров, его приложения в основном подходят для сред, где более крупные модели могут оказаться невозможными из-за аппаратных ограничений или большей эффективности. Вот несколько конкретных случаев использования с учетом его размера:

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

Встроенные системы в устройствах Интернета вещей: В сфере Интернета вещей (IoT) вычислительные ресурсы часто ограничены; TinyLlama можно использовать для добавления возможностей интеллектуальной обработки языка к различному оборудованию, такому как умные домашние помощники, носимые устройства и другое подобное подключенное оборудование.

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

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

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

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

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

Эффективный анализ данных: TinyLlama можно использовать для анализа текста и извлечения данных в сценариях, где необходима быстрая и эффективная обработка, например, анализ отзывов клиентов, ответов на опросы или взаимодействия в социальных сетях.

Заключение

TinyLlama 1.1B — это свидетельство достижений в области искусственного интеллекта и обработки естественного языка. Его развитие и широкая доступность жизненно важны для создания более эффективных, небольших и быстрых языковых моделей вывода. Сочетая меньший объем параметров с высокой производительностью, TinyLlama 1.1B удовлетворяет острую потребность в мощных и практичных моделях для широкого спектра приложений. Его способность понимать и генерировать язык так же, как это делает человек, и при этом он достаточно легок для различных вычислительных сред, что делает его идеальным выбором для людей, пытающихся запускать большие языковые модели на своих машинах. Модель можно легко настроить на наборе данных и обучить с использованием ограниченных вычислительных ресурсов. 

Ключевые выводы из этой статьи включают:

  • Разработанная для обеспечения эффективности, TinyLlama 1.1B доступна для более широкой аудитории, в том числе для тех, у кого ограничены вычислительные ресурсы, что делает ее подходящей для нескольких приложений.
  • Модель прошла обширный процесс обучения, включая обучение на 3 триллионах токенов в течение 90 дней с использованием 16 графических процессоров A100-40G.
  • Несмотря на свой меньший размер, TinyLlama 1.1B предоставляет высококачественные, контекстуально релевантные ответы на нескольких языках, что делает ее моделью, на которую стоит обратить внимание.
  • Это хороший выбор для мобильных приложений, IoT-оборудования, образовательных инструментов и многого другого. Его компактный размер и эффективность позволяют использовать его в широком диапазоне.
  • Его более низкие вычислительные требования делают его ценным инструментом в лингвистических исследованиях, особенно для языков с ограниченными ресурсами.
  • Эта модель является хорошим выбором для тех, кто экспериментирует с языковыми моделями или разрабатывает новые приложения НЛП, главным образом в условиях ограниченной вычислительной мощности.

Часто задаваемые вопросы

Q1. Что такое TinyLlama 1.1B?

A. TinyLlama 1.1B — это компактная, эффективная модель большого языка с 1.1 миллиарда параметров, обученная на 3 триллионах токенов и подходящая для приложений с ограниченными вычислительными ресурсами.

Q2. Как обучалась TinyLlama 1.1B?

A. Он обучался в течение 90 дней с использованием 16 графических процессоров A100-40G на наборах данных, включая Slimpajama и Starcoderdata, с соотношением естественного языка к коду 7:3.

Q3. Каковы тесты производительности TinyLlama 1.1B?

A. TinyLlama 1.1B демонстрирует свои навыки решения сложных языковых задач, набрав в среднем 52.99 баллов в таких тестах, как HellaSwag, MMLU и WinoGrande.

Q4. Каковы потенциальные варианты использования TinyLlama 1.1B?

A. Он подходит для приложений, где размер и скорость являются важными вопросами. К ним относятся мобильные приложения, оборудование Интернета вещей, такое как устройства домашней автоматизации, создание контента для малого бизнеса и эффективный анализ данных.

Q5. Подходит ли TinyLlama 1.1B разработчикам с ограниченными ресурсами?

A. Безусловно, это идеальный выбор для разработчиков и исследователей, у которых нет доступа к мощным вычислительным ресурсам для прототипирования и разработки новых приложений НЛП. Модель TinyLlama можно запустить даже на машине Raspberry Pi.

Q6. Как TinyLlama 1.1B справляется с математическими задачами?

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

Материалы, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению Автора.

Отметка времени:

Больше от Аналитика Видхья