TinyLlama 1.1B - Розмір не має значення

TinyLlama 1.1B – розмір не має значення

Вихідний вузол: 3081711

Вступ

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

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

TinyLlama 1.1B

Мета навчання

  • Отримайте повне розуміння TinyLlama 1.1B
  • Дослідіть складний процес навчання, через який пройшла модель
  • Проаналізуйте продуктивність і порівняльні результати, щоб оцінити його ефективність
  • Дізнайтеся про практичні кроки для реалізації TinyLlama 1.1B за допомогою прикладів кодування

Ця стаття була опублікована як частина Blogathon 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 Оцінка
HellaSwag 59.2
Obqa 36.0
WinoGrande 59.12
ARC_c 30.12
ARC_e 55.25
boolq 57.83
piqa 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, доступний у безкоштовній версії для спільної роботи.
  • Потім встановлюємо llama_cpp_python пакет через pip3
  • Ми навіть завантажуємо huggingface-hub, за допомогою якого ми будемо завантажувати квантований чат 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: Ми вказуємо це, якщо у нас працює графічний процесор, що ми робимо у випадку безкоштовної спільної роботи. Для цього ми передаємо 40, що означає, що ми хочемо розвантажити всю модель у графічний процесор і не хочемо, щоб будь-яка її частина запускалася в системній оперативній пам’яті.
  • Нарешті ми створюємо об’єкт із цього Лама і передати його змінній llm

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

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 Chat. У шаблоні речення після користувача є підказкою користувача, а генерація буде згенерована після помічника.
  • max_tokens: Цій змінній ми передаємо значення, яке визначає максимальну кількість токенів, які може вивести велика мовна модель, коли надається підказка. Наразі ми обмежуємо його до 512 токенів.
  • Стоп: Цій змінній ми передаємо стоп-токен. Маркер зупинки повідомляє моделі великої мови припинити генерацію подальших маркерів. Для TinyLlama 1.1B Chat маркер зупинки є

Коли ми виконуємо це, згенерований текст зберігається у вихідній змінній. Результат генерується у форматі, подібному до виклику OpenAI API. Отже, ми можемо отримати доступ до генерації через даний оператор друку, подібно до того, як ми отримуємо доступ до генерації з відповідей OpenAI. Згенерований результат можна побачити нижче

TinyLlama 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'])
TinyLlama 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 є ідеальним вибором для тих, хто обмежений обмеженим апаратним забезпеченням і хоче точно налаштувати великі мовні моделі на своєму конкретному наборі даних

Потенційні випадки використання та застосування

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

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

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

Крайові обчислення: Для додатків, які отримують вигоду від обробки даних ближче до джерела, а не в централізованому хмарному середовищі, можна ефективно використовувати TinyLlama. Це включає обробку мови в режимі реального часу в автомобільних системах, виробничому обладнанні та інших периферійних пристроях.

Дослідження мови з низьким ресурсом: Завдяки меншому розміру та нижчим обчислювальним вимогам TinyLlama може бути цінним інструментом у лінгвістичних дослідженнях, особливо для мов із недостатнім ресурсом, де навчання великомасштабної моделі неможливе.

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

Генерація контенту для малого бізнесу: Малі підприємства з обмеженими ресурсами можуть використовувати TinyLlama для створення вмісту, як-от описів продуктів, маркетингових текстів і листування клієнтів, без потреби у великій обчислювальній потужності.

Прототипування та експериментування: Розробники та дослідники, які бажають експериментувати з мовними моделями, але не мають доступу до потужних обчислювальних ресурсів, можуть використовувати TinyLlama для прототипування та розробки нових додатків NLP.

Ефективний аналіз даних: TinyLlama можна використовувати для аналізу тексту та вилучення даних у сценаріях, де потрібна швидка та ефективна обробка, як-от аналіз відгуків клієнтів, відповідей на опитування або взаємодії в соціальних мережах.

Висновок

TinyLlama 1.1B є свідченням прогресу в галузі ШІ та обробки природної мови. Його розвиток і широка доступність є життєво важливими для створення ефективніших, невеликих і швидких моделей мови висновків. Поєднуючи менший розмір параметрів із надійною продуктивністю, TinyLlama 1.1B задовольняє критичну потребу в потужних і практичних моделях для широкого спектру застосувань. Його здатність розуміти та генерувати мову схожим на людський спосіб і водночас достатньо легкий для різних обчислювальних середовищ робить його найкращим вибором для людей, яким важко запускати великі мовні моделі на своїх машинах. Модель можна легко налаштувати на наборі даних і її можна навчити з обмеженими обчислювальними ресурсами. 

Основні висновки з цієї статті включають

  • Розроблений для ефективності, TinyLlama 1.1B доступний для ширшої аудиторії, включно з тими з обмеженими обчислювальними ресурсами, що робить його придатним для кількох програм.
  • Модель пройшла інтенсивний процес навчання, включаючи навчання на 3 трильйонах токенів протягом 90 днів з використанням 16 графічних процесорів A100-40G.
  • Незважаючи на менший розмір, TinyLlama 1.1B надає високоякісні відповідні відповіді кількома мовами, що робить його зразком для розгляду.
  • Це хороший вибір для мобільних додатків, обладнання Інтернету речей, навчальних інструментів тощо, його компактні розміри та ефективність дозволяють застосовувати широкі можливості.
  • Його менші вимоги до обчислень роблять його цінним інструментом у лінгвістичних дослідженнях, особливо для мов із недостатнім ресурсом.
  • Модель є гарним вибором для тих, хто експериментує з мовними моделями або розробляє нові NLP-програми, переважно в умовах з обмеженою обчислювальною потужністю.

ЧАСТІ ЗАПИТАННЯ

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. Безсумнівно, це ідеальний вибір для розробників і дослідників, які не мають доступу до потужних обчислювальних ресурсів для створення прототипів і розробки нових програм NLP. Модель TinyLlama можна навіть запускати на машині Raspberry Pi.

Q6 Як TinyLlama 1.1B виконує завдання з математичних міркувань?

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

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

Часова мітка:

Більше від Аналітика Vidhya