Wstęp

W Azurro konsekwentnie używamy technologii Open Source – dotyczy to zarówno naszych projektów, jak i codziennych, rutynowych aktywności. Dlatego postanowiliśmy podzielić się wynikami naszych wysiłków i udostępnić nasz kolejny wytrenowany od podstaw model językowy – APT2-1B-Base. Wierzymy, że modele językowe o mniejszych rozmiarach posiadają ogromny potencjał, a ich dostępność dla każdego zainteresowanego przyczynia się do rozwoju tej dynamicznie zmieniającej się dziedziny.

Założenia

Trenowanie dużych modeli językowych wymaga ogromnej mocy obliczeniowej i jest zarezerwowane dla dużych graczy na rynku. Ale czy to znaczy, że pojedyncza osoba czy mała firma nie może trenować modeli językowych, które będą w stanie wykonywać określone zadania? Postanowiliśmy odpowiedzieć na to pytanie i wytrenować własny model językowy od podstaw.

Postawiliśmy sobie następujące założenia:

  • – używamy 1 konsumenckiej karty graficznej
  • – trenujemy tylko na korpusie języka polskiego
  • – trenujemy na ręcznie wyselekcjonowanym tekście wysokiej jakości

Dlaczego właśnie takie założenia?

Na wstępie trzeba zaznaczyć, że trening modelu wymaga minimum kilka razy więcej zasobów niż późniejsze jego używanie. W uproszczeniu można przyjąć, że jest to minimum około 3-4 razy więcej. Dlatego jeśli model da się uruchomić na karcie graficznej, która ma 6 GB VRAM, to do wytrenowania tego modelu będziemy potrzebować co najmniej około 24 GB VRAM.

Wiele konsumenckich komputerów wyposażonych jest w dobre karty graficzne, które mogą być wykorzystane do trenowania modelu w domowych warunkach. Dlatego zdecydowaliśmy się wykorzystać topową konsumencką kartę graficzną RTX 4090 24GB VRAM firmy Nvidia.

Wszystkie dostępne obecnie modele językowe zostały wytrenowane na korpusach głównie anglojęzycznych, z niewielką domieszką innych języków, w tym języka polskiego. Skutkiem tego jest nienajlepsze radzenie sobie z naszym ojczystym językiem. Nawet popularne modele GPT od OpenAI czy Bard od Google często mają problem z poprawnymi odmianami czy sformułowaniami. Dlatego zdecydowaliśmy się przygotować model tylko w oparciu o korpus języka polskiego. Dodatkowym argumentem był rozmiar samego modelu – dla mniejszego modelu lepiej skupić się na jednym języku.

Modele są tak dobre, jak dane, na jakich są wytrenowane. Mając na uwadze mały rozmiar modelu, postanowiliśmy nauczyć go starannie wyselekcjonowanym tekstem. Dlatego nie bazowaliśmy na dostępnych korpusach takich jak Common Crawl, które zawierają dużo słabej jakości danych. Dzięki bliskiej współpracy i poradom od zespołu Speakleash, nasz zespół przygotował ponad 285 GB korpusu tekstowego w języku polskim, który został następnie przetworzony i wykorzystany do szkolenia modelu. Dodatkowo, wyjątkową cechą naszego modelu jest to, że został on wytrenowany na największej ilości tekstu spośród wszystkich dostępnych modeli dla języka polskiego.

Model

Model APT3-1B-Base został wytrenowany przy pomocy autorskiego frameworka open source ALLaMo, który pozwala na szybki i efektywny trening modeli językowych podobnych do modeli z serii LLaMA od Meta AI.

Model APT3-1B-Base jest autoregresywnym modelem językowym zbudowanym w oparciu o architekturę transformer. Został wytrenowany na danych zebranych do końca grudnia 2023.

Dostępna jest także wersja instruct tego modelu (APT3-1B-Instruct-v1) na HuggingFace.

Zestaw treningowy (korpus języka polskiego) zawiera ponad 60 miliardów tokenów, wszystkie z nich zostały użyte do treningu na 1 epoce.

Na potrzeby treningu modeli z serii APT3 został przygotowany i wytrenowany dedykowany tokenizer.

Opis modelu:

  • developed by: Azurro 
  • language: Polish
  • model type: causal decoder-only
  • license: CC BY NC 4.0 (non-commercial use)
  • – available at: HuggingFace

Szczegóły modelu:

HyperparameterValue
Model Parameters1041M
Sequence Length2048
Vocabulary Size31980
Layers18
Heads32
d_head64
d_model1024
Dropout0.0
BiasNo
Positional EncodingRoPE
Activation FunctionSwiGLU
Normalizing FunctionRMSNorm
Intermediate Size5504
Norm Epsilon1e-06

Szczegóły tokenizera:

  • – type: BPE
  • – special tokens: 8
  • – alphabet size: 113
  • – vocabulary size: 31980

Trening:

Hiperparametry treningu:

HyperparameterValue
Micro Batch Size1
Gradient Accumulation Steps1024
Batch Size2097152
Learning Rate (cosine)2e-04 -> 2e-05
Warmup Iterations1000
All Iterations28900
OptimizerAdamW
β1, β20.9, 0.95
Adam_eps1e−8
Weight Decay0.1
Grad Clip1.0
Precisionbfloat16

Dane treningowe

Zebranie dużej ilości wysokiej jakości danych treningowych jest niemałym wyzwaniem. Na przestrzeni ostatnich lat zrealizowaliśmy w Azurro wiele projektów związanych z przetwarzaniem dużych zbiorów danych (Big Data), dlatego wykorzystując nasze bogate doświadczenie byliśmy w stanie szybko i efektywnie przygotować starannie wyselekcjonowany zbiór uczący.

Nasza ścisła współpraca z zespołem Speakleash zaowocowała stworzeniem ponad 285 GB korpusu tekstu w języku polskim. Proces przygotowania zbioru treningowego obejmował przekształcanie dokumentów poprzez zastosowanie różnych reguł, a następnie wybór dokumentów o odpowiedniej jakości.

W skład naszego zbioru uczącego wchodziły:

  • – 150 zestawów danych od Speakleash – 93%
  • – inne publicznie dostępne i pozyskane z przeszukiwania internetowego dane – 6%
  • – polska Wikipedia – 1%

Uruchomienie modelu

Model może być szybko załadowany przy użyciu funkcjonalności AutoModelForCausalLM:

from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = „Azurro/APT3-1B-Base”

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

W celu redukcji zużycia pamięci można przejść na mniejszą precyzję (bfloat16):

import torch

model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16)

Następnie można użyć Hugging Face Pipelines do generowania tekstu:

import transformers

text = „Najważniejszym celem człowieka na ziemi jest”

pipeline = transformers.pipeline(„text-generation”, model=model, tokenizer=tokenizer)
sequences = pipeline(max_new_tokens=100, do_sample=True, top_k=50, eos_token_id=tokenizer.eos_token_id, text_inputs=text)
for seq in sequences:
print(f”Result: {seq[’generated_text’]}”)

Wygenerowany tekst:

„Najważniejszym celem człowieka na ziemi jest życie w pokoju, harmonii i miłości. Dla każdego z nas bardzo ważne jest, aby otaczać się kochanymi osobami.”

Ograniczenia

APT3-1B-Base nie jest przeznaczony do wdrożenia bez przeprowadzenia fine-tuningu. Ten model nie powinien być wykorzystywany do bezpośrednich interakcji z człowiekiem bez dodatkowych zabezpieczeń i zgody użytkownika.

APT3-1B-Base może generować niepoprawne wyniki i nie powinno się na nim polegać, jeśli chodzi o informacje zgodne z prawdą. APT3-1B-Base został wytrenowany na różnych publicznych zbiorach danych. Dołożyliśmy wszelkich starań, aby odpowiednio przygotować dane do trenowania, jednak możliwe jest, że ten model może tworzyć niemoralne, tendencyjne lub w inny sposób obraźliwe treści.

Licencja

Ze względu na niejasną sytuację prawną zdecydowaliśmy się opublikować model na licencji CC BY NC 4.0, która pozwala nie niekomercyjne użycie. Model może być wykorzystany do celów naukowych, jak również do prywatnego użytku z zachowaniem warunków licencji.

Zastrzeżenie

Licencja, na której został opublikowany ten model nie stanowi porady prawnej. Nie bierzemy odpowiedzialności za czyny osób trzecich używających tego modelu.

Odwołanie się do modelu APT3-1B-Base

Przy odwoływaniu się do naszego modelu prosimy o użycie poniższego formatu:

@online{AzurroAPT3Base1B,

    author    = {Krzysztof Ociepa, Azurro},

    title     = {APT3-1B-Base: polski otwarty model językowy},

    year      = {2024},

    url       = {www.azurro.pl/apt3-1b-base-pl},

    note      = {Accessed: 2024-01-04}, % change this date

    urldate   = {2024-01-04} % change this date

}

Specjalne podziękowania

Chcielibyśmy szczególnie podziękować zespołowi Speakleash za zebranie i udostępnienie tekstów w języku polskim, a także za wsparcie, na które zawsze mogliśmy liczyć podczas przygotowywania zestawu treningowego dla naszego modelu. Bez Was on by nie powstał. Dziękujemy!

Zespół Azurro

Możesz dowiedzieć się więcej o naszym zespole na naszej stronie głównej.

Skontaktuj się z nami

Jeśli masz jakiekolwiek pytania lub sugestie, wyślij nam e-mail na [email protected].