Wstęp

W Azurro konsekwentnie stawiamy na wykorzystanie technologii Open Source zarówno w naszych projektach, jak i na co dzień. Postanowiliśmy udostępnić wytrenowany przez nas bazowy model językowy. Jesteśmy przekonani, że mniejsze modele językowe mają ogromny potencjał, a bezpośredni dostęp do nich dla wszystkich zainteresowanych jeszcze bardziej demokratyzuje tę ważną i dynamicznie zmieniającą się dziedzinę.

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 popularny model GPT-3.5 od OpenAI często ma 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. Nasz zespół opracował zbiór źródeł, które zostały następnie przetworzone i wykorzystane podczas trenowania modelu.

Model – informacje techniczne

Model APT-1B-Base jest modelem bazowym otwierającym nowa serię modeli APT (Azurro Pretrained Transformer). 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 APT-1B-Base jest autoregresywnym modelem językowym zbudowanym w oparciu o architekturę transformer. Został wytrenowany na danych zebranych do kwietnia 2023.

Do trenowania użyto 20 miliardów tokenów, a sam zbiór uczący (korpus języka polskiego) miał wielkość ponad 3 miliardów tokenów. Zachowana została tym samym zgodność z prawem skalowalności Chinchilla (20 tokenów na każdy parametr modelu). 

Na potrzeby treningu modelu 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
  • – demo: HuggingFace Spaces

Szczegóły modelu:

  • – model parameters: 1060M
  • – sequence length: 2048
  • – vocabulary size: 8000
  • – layers: 20
  • – heads: 16
  • – d_head: 128
  • – d_model: 2048
  • – dropout: 0.0
  • – no bias
  • – positional encoding: RoPE
  • – activation function: SwiGLU
  • – normalizing function: RMSNorm 
  • – intermediate size: 5632
  • – norm epsilon: 1e-06

Hiperparametry treningu:

  • – micro batch size: 1
  • – gradient accumulation steps: 264
  • – batch size: 540672 = 1 * 264 * 2048
  • – learning rate: 3e-04
  • – optimizer: AdamW, (β1, β2) = (0.9, 0.95), adam_eps = 1e−8
  • – weight decay: 0.1
  • – grad clip: 1.0

Szczegóły tokenizera:

  • – type: BPE
  • – special tokens: 7
  • – alphabet size: 112 
  • – vocabulary size: 8000

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. 

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

  • – e-books: 1354 mln tokenów
  • – Polish Wikipedia: 970 mln tokenów
  • – web crawl data: 813 mln tokenów

Uruchomienie modelu

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

from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = „Azurro/APT-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_length=100, do_sample=True, top_k=10, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)
for seq in sequences:
print(f”Result: {seq[’generated_text’]}”)

Przykłady

Poniżej podane są przykłady tego, co można uzyskać przy pomocy modelu APT-1B-Base (kliknij w obrazek, aby go powiększyć):

Ograniczenia

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

APT-1B-Base może generować niepoprawne wyniki i nie powinno się na nim polegać, jeśli chodzi o informacje zgodne z prawdą. APT-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 APT-1B-Base

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

@online{AzurroAPT1BBase,

    author    = {Krzysztof Ociepa, Azurro},

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

    year      = {2023},

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

    note      = {Accessed: 2023-06-14}, % change this date

    urldate   = {2023-06-14} % change this date

}