TinyLlama 1.1B - Rozmiar nie ma znaczenia

TinyLlama 1.1B – Rozmiar nie ma znaczenia

Węzeł źródłowy: 3081711

Wprowadzenie

W szybko rozwijającym się krajobrazie sztucznej inteligencji i uczenia maszynowego TinyLlama 1.1B jawi się jako godny uwagi rozwój. W epoce, w której ograniczenia obliczeniowe stanowią wyzwanie dla uruchamiania bardziej złożonych modeli, TinyLlama wyróżnia się tym, że przeciwstawia się oczekiwaniom. Pokazuje niezwykłą wydajność modeli kompaktowych.

Celem tego artykułu jest przedstawienie analizy TinyLlama 1.1B, kompaktowego modelu dużego języka. Zagłębimy się w jego podstawowe aspekty, takie jak szkolenie w zakresie testów wydajności i praktycznego wdrożenia przy użyciu platformy Hugging Face. Uruchomimy nawet ten model w bezpłatnej aplikacji Google Colab i przetestujemy jego zdolności matematyczne i rozumowanie.

TinyLama 1.1B

Cele kształcenia

  • Zdobądź wszechstronne zrozumienie TinyLlama 1.1B
  • Poznaj skomplikowany proces szkolenia, przez który przeszedł model
  • Przeanalizuj wydajność i wyniki testów porównawczych, aby ocenić jego skuteczność
  • Poznaj praktyczne kroki wdrożenia TinyLlama 1.1B, korzystając z przykładów kodowania

Ten artykuł został opublikowany jako część Blogathon nauki o danych.

Spis treści

Co to jest TinyLlama 1.1B?

TinyLlama 1.1B, część szerszego projektu Llama, jest świadectwem postępu w modelowaniu języka. Jest to model z 1.1 miliarda parametrów, wytrenowany na oszałamiających 3 bilionach tokenów, co stawia go na wyjątkowej pozycji w krajobrazie sztucznej inteligencji. W przeciwieństwie do swoich większych odpowiedników, TinyLlama 1.1B została zaprojektowana tak, aby była bardziej wydajna i łatwiejsza w zarządzaniu, co czyni go dobrym wyborem do zastosowań o ograniczonych zasobach obliczeniowych.

Ten model open source demokratyzuje dostęp do najnowocześniejszej technologii sztucznej inteligencji, umożliwiając wielu programistom i badaczom odkrywanie i wprowadzanie innowacji w dziedzinie przetwarzania języka naturalnego. Jest to model znany ze swojej zdolności do równoważenia wydajności i zużycia zasobów, co jest kluczowym czynnikiem w dzisiejszych zróżnicowanych środowiskach obliczeniowych.

Proces szkoleniowy TinyLlama 1.1B

Proces uczenia TinyLlama 1.1B jest fascynujący, podobnie jak sam model. Szkolenie TinyLlama trwało zaledwie 90 dni i było trenowane na 16 procesorach graficznych A100-40G. Szkolenie wstępne odbyło się na 3 bilionach tokenów, a zespół TinyLlama opublikował model pośredni pomiędzy każdym pół biliardem. 

Jeśli chodzi o dane, Slimpajama i Starcoderdata zostały pobrane z łącznej wielkości zbioru danych wynoszącej 950 miliardów tokenów. Stosunek języka naturalnego do kodu utrzymywano na poziomie 7:3, co oznacza, że ​​70% danych stanowił język naturalny, a 30% kod. Zatem, aby osiągnąć poziom 3 bilionów tokenów w zakresie dostrajania, TinyLlama przeszła 3 epoki szkolenia dla tego zbioru danych. 

Dostępna jest nawet wersja czatu TinyLlama zwana TinyLlama-Chat. Początkowo model ten został udoskonalony na zbiorze danych UltraChat, który zawiera różnorodne syntetyczne konwersacje wygenerowane przez ChatGPT. Ten krok był kluczowy dla dostosowania modelu do różnych kontekstów i stylów konwersacji.

Dalsze udoskonalenia osiągnięto przy użyciu narzędzia DPOTrainer w zestawie danych UltraFeedback. Ta faza szkoleniowa skupiała się na dostosowaniu odpowiedzi modelu do ludzkich wzorców konwersacji. W rezultacie powstał model, który nie tylko gromadzi informacje na różne tematy, ale nawet wchodzi w interakcję w naturalny i wciągający sposób.

Możesz także przeczytać: Pierwsze kroki z LlaMA 2: Przewodnik dla początkujących

Wyniki wydajności i testów porównawczych

Ocena wydajności TinyLlama 1.1B ujawnia jego zdolność do szybkiego dostarczania wysokiej jakości odpowiedzi. Szkolenie umożliwiło mu obsługę aplikacji wielojęzycznych, co jest ważną cechą w naszym zglobalizowanym świecie. Pomimo mniejszych rozmiarów TinyLlama 1.1B wciąż dorównuje swoim większym odpowiednikom pod względem jakości i szybkości reakcji, co czyni go potężnym narzędziem w różnych zastosowaniach sztucznej inteligencji.

Testy porównawcze dla TinyLlama 1.1B, choć mniej rozbudowane niż te dla większych modeli, nadal pokazują jego biegłość w radzeniu sobie ze złożonymi zadaniami językowymi. Szczególnie imponująca jest jego zdolność do generowania spójnych i odpowiednich kontekstowo odpowiedzi w wielu językach. Model był testowany w różnych benchmarkach, takich jak HellaSwag, WinoGrande, ARC, MMLU i inne. Łączny średni wynik wyniósł 52.99. To wynik znacznie lepszy od innego modelu 1 miliarda parametrów, czyli Pythii 1B, który uzyskał średni wynik 48.3. Tabela przedstawia indywidualne wyniki każdego testu porównawczego

Benchmark Wynik TinyLlama 1.1B
HellaSwag 59.2
Obqa 36.0
WinoGrande 59.12
ŁUK_c 30.12
ARC_e 55.25
boolq 57.83
pika 73.29
Średnia 52.9

TinyLlama – Pierwsze kroki

Tutaj, w tej sekcji, pobierzemy skwantyzowaną wersję TinyLlama Chat i uruchomimy ją w Google Colab. Przed pobraniem modelu musimy pobrać i zainstalować następujące pakiety Pythona

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip3 install llama-cpp-python 
!pip3 install huggingface-hub 
  • Połączenia CMAKE_ARGS=”-DLLAMA_CUBLAS=wł.” i FORCE_CMAKE=1, pozwoli llama_cpp_pythonowi korzystać z procesora graficznego Nvidia dostępnego w bezpłatnej wersji colab.
  • Następnie instalujemy lama_cpp_python pakiet przez pip3
  • Pobieramy nawet huggingface-hub, za pomocą którego będziemy pobierać skwantowany czat TinyLlama 1.1B

Aby przetestować model TinyLlama 1.1B Chat, musimy najpierw pobrać jego skwantyzowaną wersję. Aby go pobrać, uruchomimy następujący kod

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)

Tutaj hugging_face_hub Biblioteka zajmie się procesem pobierania skwantowanego modelu. W tym celu importujemy plik hf_hub_pobierz który przyjmuje następujące parametry:

  • Nazwa modelu: Do tej zmiennej przekazujemy model, który chcemy pobrać. Tutaj chcemy pobrać model TinyLlama 1.1B Chat GGUF.
  • plik_modelu: Tutaj określamy typ skwantowanego modelu, który chcemy pobrać. Tutaj pobierzemy 8-bitową, skwantyzowaną wersję czatu TinyLlama 1.1B.
  • Na koniec przekazujemy te parametry do hf_hub_pobierz, który pobiera te parametry i pobiera określony model. Po pobraniu zwraca ścieżkę, z której pobierany jest model.
  • Zwrócona ścieżka jest zapisywana w pliku ścieżka_modelu zmienna.

Teraz możemy załadować ten model poprzez lama_cpp_python biblioteka. Kod ładowania modelu będzie taki jak ten poniżej.

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
)

Importujemy Lama klasa z lama_cpp, który przyjmuje następujące parametry

  • ścieżka_modelu: Ta zmienna przyjmuje ścieżkę, w której przechowywany jest nasz model. Uzyskaliśmy ścieżkę z poprzedniego kroku, którą tutaj podamy
  • n_ctx: Tutaj podajemy długość kontekstu dla modelu. Na razie udostępniamy 512 tokenów jako długość kontekstu
  • n_wątków: Tutaj podajemy liczbę wątków, które mają być używane przez Lama klasa
  • n_gpu_layers: Określamy to, jeśli mamy działający procesor graficzny, co robimy w przypadku bezpłatnego colabu. Do tego przechodzimy 40, co oznacza, że ​​chcemy przeładować cały model do GPU i nie chcemy, aby jakakolwiek jego część działała w systemowej pamięci RAM
  • Na koniec tworzymy z tego obiekt Lama klasę i podaj ją zmiennej llm

Uruchomienie tego kodu spowoduje załadowanie skwantowanego modelu TinyLlama 1.1B Chat na procesor graficzny i ustawienie odpowiedniej długości kontekstu. Czas teraz wyciągnąć pewne wnioski na temat tego modelu. W tym celu pracujemy z poniższym kodem

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

Aby wywnioskować model, przekazujemy do LLM następujące parametry:

  • szablon podpowiedzi/czatu: To jest szablon podpowiedzi potrzebny do rozmowy z modelem. Powyższy szablon(tj , ) to ten, który działa w modelu TinyLlama 1.1B Chat. W szablonie zdanie po Użytkowniku to Podpowiedź Użytkownika, a generacja zostanie wygenerowana po Asystencie.
  • max_tokens: Do tej zmiennej przekazujemy wartość, która definiuje maksymalną liczbę tokenów, które model dużego języka może wyprowadzić po wydaniu monitu. Na razie ograniczamy go do 512 tokenów.
  • przestań Do tej zmiennej przekazujemy token stopu. Token zatrzymania informuje model dużego języka, aby przestał generować dalsze tokeny. W przypadku czatu TinyLlama 1.1B znacznikiem zatrzymania jest

Po uruchomieniu wygenerowany tekst jest przechowywany w zmiennej wyjściowej. Wynik jest generowany w formacie podobnym do wywołania API OpenAI. W związku z tym możemy uzyskać dostęp do generacji poprzez daną instrukcję print, podobnie jak uzyskujemy dostęp do generacji z odpowiedzi OpenAI. Wygenerowane dane wyjściowe można zobaczyć poniżej

TinyLama 1.1B

Jak na model tej wielkości, generowana reakcja jest na najwyższym poziomie. Jest to nieoczekiwane w przypadku modelu tej wielkości; gramatyka i ton wyglądają doskonale i nie ma śladów powtarzania zdań. Spróbujmy przetestować możliwości rozumowania modelu

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'])
TinyLama 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'])
"

Jak na razie dobrze. Z przykładów, które widzieliśmy, model generuje dobre odpowiedzi. Może to jednak nie być prawdą we wszystkich przypadkach, ponieważ testujemy to tylko na ograniczonej liczbie pytań. Przetestujmy nawet model pod kątem jego możliwości rozumowania matematycznego

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'])
"

Z przykładów, które widzieliśmy, jasno wynika, że ​​TinyLlamaChat radzi sobie wyjątkowo słabo, odpowiadając na proste pytania dotyczące umiejętności matematycznych. Jest to oczekiwane, ponieważ model nie został wstępnie przeszkolony na żadnym zbiorze danych matematycznych. Jakość generowania można poprawić, dostosowując je do zbioru danych matematycznych

Jeśli chodzi o dostrajanie, TinyLlama jest idealnym wyborem dla tych, którzy mają ograniczone możliwości sprzętowe i chcą dostroić duże modele językowe w swoim konkretnym zestawie danych

Potencjalne przypadki użycia i zastosowania

Biorąc pod uwagę kompaktowy rozmiar MalutkaLama, który może poszczycić się 1.1 miliarda parametrów, jego zastosowania są dostosowane głównie do środowisk, w których większe modele mogą nie być tak wykonalne ze względu na ograniczenia sprzętowe lub większą wydajność. Oto kilka konkretnych przypadków użycia, biorąc pod uwagę jego rozmiar:

Aplikacje mobilne: Mniejszy rozmiar TinyLlama sprawia, że ​​jest to dobry wybór do integracji z aplikacjami mobilnymi, w których konieczne jest przetwarzanie na urządzeniu. Obejmuje to aplikacje do tłumaczenia języków, funkcje asystenta osobistego i chatboty, które mogą skutecznie działać na smartfonach.

Systemy wbudowane w urządzeniach IoT: W obszarze Internetu rzeczy (IoT) zasoby obliczeniowe są często ograniczone; TinyLlama może zostać wykorzystana do dodania możliwości inteligentnego przetwarzania języka do różnych urządzeń, takich jak inteligentni asystenci domowi, urządzenia do noszenia i inne tego typu podłączone urządzenia.

Przetwarzanie brzegowe: W przypadku aplikacji, które korzystają z przetwarzania danych bliżej źródła, a nie w scentralizowanym środowisku chmurowym, można skutecznie zastosować TinyLlama. Obejmuje to przetwarzanie języka w czasie rzeczywistym w systemach motoryzacyjnych, sprzęcie produkcyjnym i innych urządzeniach brzegowych.

Badania językowe wymagające niskich zasobów: Ze względu na mniejszy rozmiar i mniejsze wymagania obliczeniowe TinyLlama może być cennym narzędziem w badaniach lingwistycznych, szczególnie w przypadku języków, w których brakuje zasobów, gdzie nie jest możliwe szkolenie modeli na dużą skalę.

Narzędzia edukacyjne: W placówkach edukacyjnych, zwłaszcza tych z ograniczonym dostępem do zaawansowanych zasobów komputerowych, TinyLlama może być wykorzystywana do tworzenia aplikacji do nauki języków, interaktywnych narzędzi edukacyjnych i innych pomocy edukacyjnych.

Generowanie treści dla małych firm: Małe firmy z ograniczonymi zasobami mogą używać TinyLlama do generowania treści, takich jak opisy produktów, teksty marketingowe i korespondencja z klientami, bez potrzeby posiadania dużej mocy obliczeniowej.

Prototypowanie i eksperymentowanie: Programiści i badacze, którzy chcą eksperymentować z modelami językowymi, ale nie mają dostępu do zasobów obliczeniowych o dużej mocy, mogą używać TinyLlama do prototypowania i opracowywania nowych aplikacji NLP.

Efektywna analiza danych: TinyLlama może być używana do analizy tekstu i ekstrakcji danych w scenariuszach, w których potrzebne jest szybkie i wydajne przetwarzanie, takich jak analiza opinii klientów, odpowiedzi na ankiety lub interakcje w mediach społecznościowych.

Wnioski

TinyLlama 1.1B jest świadectwem postępu w dziedzinie sztucznej inteligencji i przetwarzania języka naturalnego. Jego rozwój i powszechna dostępność są niezbędne do tworzenia bardziej wydajnych, małych i szybkich modeli języka wnioskowania. Równoważąc mniejsze parametry z solidną wydajnością, TinyLlama 1.1B zaspokaja krytyczne zapotrzebowanie na wydajne i praktyczne modele do szerokiego zakresu zastosowań. Jego zdolność do rozumienia i generowania języka w sposób podobny do ludzkiego, a jednocześnie będąc wystarczająco lekkim dla różnych środowisk komputerowych, sprawia, że ​​jest to doskonały wybór dla osób mających problemy z uruchamianiem dużych modeli językowych na swoich komputerach. Model można łatwo dostroić na zbiorze danych i można go trenować przy ograniczonych zasobach obliczeniowych. 

Najważniejsze wnioski z tego artykułu obejmują

  • Zaprojektowany z myślą o wydajności, TinyLlama 1.1B jest dostępny dla szerszego grona odbiorców, w tym tych z ograniczonymi zasobami obliczeniowymi, dzięki czemu nadaje się do kilku zastosowań.
  • Model przeszedł rozbudowany proces szkoleniowy, obejmujący szkolenie na 3 bilionach tokenów w ciągu 90 dni przy użyciu 16 procesorów graficznych A100-40G.
  • Pomimo mniejszych rozmiarów TinyLlama 1.1B zapewnia wysokiej jakości, kontekstowo dopasowane odpowiedzi w wielu językach, co czyni go modelem wartym rozważenia.
  • Jest to dobry wybór do zastosowań mobilnych, sprzętu IoT, narzędzi edukacyjnych i nie tylko, a jego kompaktowy rozmiar i wydajność pozwalają na szerokie zastosowania.
  • Niższe wymagania obliczeniowe sprawiają, że jest to cenne narzędzie w badaniach lingwistycznych, zwłaszcza w przypadku języków, na które brakuje zasobów.
  • Model jest dobrym wyborem dla osób eksperymentujących z modelami językowymi lub tworzących nowe aplikacje NLP, głównie w środowiskach o ograniczonej mocy obliczeniowej.

Często Zadawane Pytania

Q1. Co to jest TinyLlama 1.1B?

A. TinyLlama 1.1B to kompaktowy, wydajny model wielkojęzykowy z 1.1 miliardem parametrów, wyszkolony na 3 bilionach tokenów, odpowiedni do aplikacji o ograniczonych zasobach obliczeniowych.

Q2. Jak trenowano TinyLlamę 1.1B?

A. Był trenowany przez 90 dni przy użyciu 16 procesorów graficznych A100-40G na zestawach danych, w tym Slimpajama i Starcoderdata, ze stosunkiem języka naturalnego do kodu wynoszącym 7:3.

Q3. Jakie są testy wydajności TinyLlama 1.1B?

A. TinyLlama 1.1B pokazuje swoje umiejętności w obsłudze złożonych zadań językowych, uzyskując średnio 52.99 punktów w testach porównawczych takich jak HellaSwag, MMLU i WinoGrande.

Q4. Jakie są potencjalne przypadki użycia TinyLlama 1.1B?

A. Nadaje się do zastosowań, w których rozmiar i prędkość są ważnymi kwestiami. Należą do nich aplikacje mobilne, sprzęt IoT, taki jak urządzenia automatyki domowej, generowanie treści dla małych firm i wydajna analiza danych.

Q5. Czy TinyLlama 1.1B jest odpowiednia dla programistów z ograniczonymi zasobami?

A. Absolutnie jest to idealny wybór dla programistów i badaczy, którzy nie mają dostępu do zasobów obliczeniowych o dużej mocy do tworzenia prototypów i opracowywania nowych aplikacji NLP. Model TinyLlama można nawet uruchomić na maszynie Raspberry Pi.

Q6. Jak TinyLlama 1.1B radzi sobie z zadaniami matematycznymi?

A. Chociaż naprawdę doskonale radzi sobie z różnymi zadaniami językowymi, wykazuje ograniczenia w rozumowaniu matematycznym, które można ulepszyć poprzez dostrojenie odpowiednich zbiorów danych.

Media pokazane w tym artykule nie są własnością Analytics Vidhya i są wykorzystywane według uznania Autora.

Znak czasu:

Więcej z Analityka Widhja