Ognuno è Open Sourcing i propri modelli linguistici, così fa questo motore di ricerca russo
YaLM 100B è una rete neurale simile a GPT per la generazione e l’elaborazione di testo
Di recente, la società russa Yandex ha aperto YaLM 100B, una rete neurale bilingue per la generazione e l’elaborazione di testo.
“Rendendo YaLM 100B pubblicamente disponibile, speriamo di dare slancio all’ulteriore sviluppo delle reti neurali generative”, ha affermato Petr Popov, CEO di Yandex Technologies.
Lo sviluppo arriva in un momento in cui diverse grandi aziende come Meta, Google e OpenAI hanno reso open source alcuni dei loro grandi modelli basati su trasformatori. All’inizio del 2021, i ricercatori di Google Brain hanno reso open source il modello di intelligenza artificiale Switch Transformer, l’elaborazione del linguaggio naturale (NLP). EleutherAI ha reso open source il suo Large Language Model (LLM) GPT-NeoX-20B nell’aprile 2022, seguito da Meta AI open-sourcing della prima versione di OPT-175B.
Cos’è YaLM 100B?
YaLM 100B è una rete neurale simile a GPT per la generazione e l’elaborazione di testo. È il modello linguistico più grande della famiglia YaLM. I modelli linguistici YaLM aiutano a determinare i principi di costruzione dei testi e a generarne di nuovi basati sulle regole della linguistica e sulla loro conoscenza del mondo. YaLM può non solo creare testi, ma anche classificarli in base agli stili di discorso.
Yandex ha utilizzato le reti neurali YaLM nel suo assistente vocale, Alice e nel suo motore di ricerca Yandex Search.
YaLM 100B è stato rilasciato con la licenza Apache 2.0, che consente la ricerca e l’uso commerciale.
Allenare il modello
La formazione di modelli linguistici su larga scala richiede molte risorse. “La formazione delle reti neurali generative richiede risorse sostanziali, professionisti esperti e anni di lavoro. Ed è importante per noi che non solo le più grandi aziende IT abbiano accesso alle moderne tecnologie, ma l’intera comunità di ricercatori e sviluppatori”, ha affermato Popov.
Gli sviluppatori di Yandex hanno addestrato YaLM 100B su un cluster di 800 schede grafiche A100 per 65 giorni. Durante l’addestramento, la rete neurale ha consumato 300 miliardi di token ed elaborato 1,7 TB di testi in inglese e russo. I set di dati utilizzati per l’addestramento di YaLM 100B includono approssimativamente il 25% del testo del set di dati Pile ( set di dati in inglese aperto dal team di EleutherAI) e il 75% del testo in lingua russa da varie fonti come Wikipedia, dialoghi preelaborati dai social media, Taiga Dataset, russo Set di dati del Thesaurus distributivo e indice di ricerca Yandex.
Gli sviluppatori hanno utilizzato DeepSpeed , una libreria di ottimizzazione del deep learning, per addestrare il modello. DeepSpeed rende l’addestramento distribuito e l’inferenza facili, efficienti ed efficaci.
I ricercatori hanno spiegato come hanno addestrato il modello e suggerito modi per accelerare l’addestramento del modello. Secondo loro, un aumento del 10% della velocità di allenamento può ridurre di una settimana il tempo di esecuzione su un cluster di alto valore.
Le iterazioni di training di solito includono i seguenti passaggi:
Preparazione del lotto
Calcolo delle funzioni di attivazione e di perdita eseguendo la propagazione in avanti
Calcolo dei gradienti eseguendo la propagazione all’indietro
Esecuzione della fase di passaggio per modificare i pesi del modello
Accelerare l’addestramento del modello
Per accelerare la formazione del modello, gli sviluppatori suggeriscono quanto segue:
Alla ricerca di colli di bottiglia: il team consiglia di utilizzare un profiler per identificare i colli di bottiglia delle prestazioni nei modelli. L’uso di un profiler ti aiuta a capire come viene speso il tempo di formazione. Ad esempio, i ricercatori potrebbero analizzare perché un’operazione ha richiesto quasi il 50% dell’intero tempo di formazione. Pertanto, potrebbero ridurre le dimensioni di incorporamento del token per evitare un’eccessiva moltiplicazione della matrice alla fine della rete. Ciò ha contribuito ad accelerare il processo di formazione.
Utilizzo di tipi di dati veloci: i tipi di dati utilizzati per archiviare il modello ed eseguire i calcoli necessari determinano la velocità di addestramento e inferenza. Pertanto, gli sviluppatori consigliano di utilizzare tipi di dati veloci. Ad esempio, sulle schede grafiche A100 e più recenti, i tipi di dati a 16 bit come fp16 e bfloat16 sono cinque volte più veloci di fp32 (formato a precisione singola) e 2,5 volte più veloci del tipo di dati a 19 bit tf32 (formato TensorFloat). Tuttavia, le schede grafiche meno recenti non supportano i tipi di dati bf16 e tf32 e fp16 è solo due volte più veloce di fp32.
Accelerazione delle operazioni GPU: puoi utilizzare appieno le GPU aumentando le dimensioni del batch. L’aumento della dimensione del lotto aiuta ad accelerare la velocità di addestramento. Per ridurre al minimo l’interazione con la memoria, gli sviluppatori suggeriscono di fondere i kernel utilizzando torch.jit.script, scrivendo i propri kernel CUDA o utilizzando kernel CUDA già pronti disponibili nelle librerie Megatron-LM e DeepSpeed. Ad esempio, utilizzando lo script torch.jit. gli sviluppatori hanno fuso tre operazioni: aggiunta del tensore, eliminazione e un altro aggiunta del tensore che li ha aiutati ad aumentare il tasso di apprendimento del 5%. Per l’addestramento accelerato di YaLM, gli sviluppatori hanno utilizzato diversi tipi di kernel fusi che hanno accelerato l’addestramento di quasi 1,5 volte. Se hai molti dati e nessuna riqualificazione al dropout == 0, disabilita i dropout! Ciò ha aumentato la loro velocità di elaborazione del 15%.
La libreria NVIDIA NCCL ha contribuito a garantire la massima velocità di comunicazione consentendo alle GPU di comunicare efficacemente sulla rete senza intermediari della CPU. Inoltre, l’utilizzo di Zero Redundancy Optimizer (ZeRO) ha accelerato ulteriormente la comunicazione.
Sebbene ZeRO abbia contribuito a risparmiare enormi quantità di memoria, ha portato complessità aggiungendo nuove operazioni pesanti. Per ovviare a questo, gli sviluppatori hanno raccolto i diversi livelli in modo asincrono uno dopo l’altro. Questa tecnica ha aiutato gli sviluppatori a ottenere l’80% di velocità nell’addestramento dei loro modelli .
Strategie di divergenza e stabilizzazione
Il modello era soggetto a divergenza. Quando si verifica una divergenza, un modello di apprendimento automatico dimentica gradualmente ciò che ha appreso. Per far fronte a questo, gli sviluppatori hanno implementato le seguenti strategie di stabilizzazione.
Adottato Bf16 come tipo principale per i pesi.
Ha eseguito calcoli critici per la precisione in tf32
Introdotto Pre-LayerNorm e, dopo gli incorporamenti, hanno aggiunto LayerNorm.
Utilizzato Curriculum Learning, una strategia di formazione che addestra un modello di machine learning da dati più semplici a dati più complessi. Aiuta a migliorare la capacità di generalizzazione e il tasso di convergenza di vari modelli.