LLaMA, OpenLLaMA ja XGen on tipptasemel genereerivad tehisintellekti mudelid. Need mudelid annavad veelgi paremaid tulemusi, kui neid peenhäälestada teie enda andmetega. Selles artiklis vaatame, kuidas neid mudeleid nii GPUs kui ka TPUs peenhäälestada, kasutades JAXi ja EasyLMi raamatukogu.
LLaMA-mudeli andis Meta välja veebruaris 2023. See genereeriv tehisintellekti mudel on avatud lähtekoodiga mudel, mida on pakutud mitmes suuruses: 7B parameetriga, 13B parameetriga, 33B parameetriga ja 65B parameetriga.
2021. aasta juunis, kui ilmus GPT-J, hakkas maailm mõistma, et avatud lähtekoodiga genereeriva tehisintellekti mudelid võivad tõsiselt konkureerida OpenAI GPT-3-ga. Nüüd on LLaMAga latt taas selgelt kõrgemale tõstetud ja see mudel näib olevat väga hea avatud lähtekoodiga alternatiiv OpenAI ChatGPT-le ja GPT-4-le.
LLaMA litsents ei ole siiski ärisõbralik: seda mudelit ei saa kasutada ärilistel eesmärkidel... Aga hea uudis on see, et nüüd on olemas teised mudelid.
OpenLLaMA, mis avaldati juunis 2023, on Berkeley AI Researchi meeskonna poolt välja töötatud LLaMA alternatiivne versioon, mis annab väga häid tulemusi ja mida saab kasutada äris. Selle artikli kirjutamise ajal on saadaval 2 versiooni: 7B parameetriga ja 13B parameetriga.
XGen, mille Salesforce avaldas juunis 2023, on teine väga võimas alusmudel, mida saab kasutada ärirakendustes. Selle kirjutamise ajal on saadaval ainult 7B parameetrite versioon. Väärib märkimist, et see mudel toetab 8k tokensi konteksti, samas kui LLaMA ja OpenLLaMA toetavad ainult 2k tokensi sisu.
Eespool nimetatud mudelid on alusmudelid, mis tähendab, et need on treenitud suure tekstikorpuse põhjal, ilma et neid oleks jälgitud.
Need põhilised tehisintellekti mudelid on tavaliselt hea alus, kuid neid tuleb häälestada, et nad mõistaksid korralikult, mida soovite, ja annaksid häid tulemusi. Kõige lihtsam viis selle saavutamiseks on kasutada väheste löökide õppimist (tuntud ka kui "prompt engineering"). Lugege julgelt meie spetsiaalset paari pildi õppimisjuhendit siin.
Väheseid õppimisi on mugav kasutada, sest neid saab teha jooksvalt, ilma et peaks looma uut versiooni genereerivast tehisintellekti mudelist, kuid mõnikord ei piisa sellest.
Selleks, et saada tipptasemel tulemusi, soovite tehisintellekti mudelit oma kasutusjuhtumi jaoks peenhäälestada. Peenhäälestamine tähendab, et te muudate mudelis mõningaid parameetreid oma andmete põhjal ja saate seejärel oma versiooni mudelist.
Peenhäälestamine on palju odavam kui genereeriva tehisintellekti mudeli treenimine nullist, kuid see nõuab siiski arvutusvõimsust, seega on vaja täiustatud riistvara, et oma mudelit peenhäälestada. Mõned hiljutised alternatiivsed peenhäälestusmeetodid nõuavad vähem arvutusvõimsust (vt p-tuning, prompt tuning, soft tuning, parameetrite tõhus peenhäälestus, adapterid, LoRA, QLoRA...), kuid seni ei ole meil õnnestunud nende meetoditega sama kvaliteeti saavutada, mistõttu me neid käesolevas õpetuses ei maini.
Selles õpetuses keskendume LLaMA peenhäälestamisele koos Berkeley AI Researchi meeskonna poolt välja antud EasyLM raamatukoguga: https://github.com/young-geng/EasyLM. This library is based on JAX which makes the fine-tuning process fast and compatible with both GPUs and Google TPUs.
Sama tehnikat kasutades saate ka OpenLLaMA või XGeni peenhäälestada.
Me häälestame LLaMA 7B siin Google TPU V3-8-l, kuid te saate sama teha ka A100 GPU-l (lugege lihtsalt hoolikalt EasyLM-i dokumentatsiooni osa "Paigaldamine", mis on veidi erinev). Loomulikult saab peenhäälestada ka LLaMA suuremaid versioone (13B, 33B, 65B...), kuid selleks on vaja palju rohkem kui TPU V3-8 või üks A100 GPU.
Siin me läheme!
Kõigepealt looge oma kasutusjuhtumi jaoks tekstigenereerimise andmekogum JSONL-vormingus, kasutades iga näite võtmena "text". Siin on lihtne sentimentaalanalüüsi andmestik:
{"text":"[Content]: I love NLP Cloud, this company is awesome!\n[Sentiment]: Positive"}
{"text":"[Content]: Training LLMs is a complex but rewarding process.\n[Sentiment]: Neutral"}
{"text":"[Content]: My fine-tuning keeps crashing because of an OOM error! It just does not work at all!\n[Sentiment]: Negative"}
Palun pange tähele paari olulist asja. Esiteks sisaldab see andmekogum lihtsuse huvides ainult 3 näidet, kuid tegelikus elus on vaja palju rohkem näiteid. 300 näidet on tavaliselt hea algus. Teiseks, kui te kasutate oma peenhäälestatud mudelit järelduste tegemiseks, peate rangelt järgima sama vormingut, kasutades eesliiteid "[Content]:" ja "[Sentiment]:". Viimasena on märgend "</s>" oluline, sest see tähendab, et mudel peaks siinkohal lõpetama genereerimise. Rohkem andmekogumi näiteid leiate NLP Cloudi dokumentatsioonist: Lisateave siin.
Looge TPU V3-8 VM Google Cloudis koos V2 Alpha tarkvaraversiooniga:
SSH VM-i ja installige EasyLM:
git clone https://github.com/young-geng/EasyLM
cd EasyLM
bash ./scripts/tpu_vm_setup.sh
Nüüd saate LLaMA kaalud alla laadida ja teisendada. Esimene võimalus on küsida ametlikke kaalusid Meta'lt: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/. Seejärel konverteerige kaalud EasyLM-i selle skripti abil: https://github.com/young-geng/EasyLM/blob/main/EasyLM/models/llama/convert_torch_to_easylm.py. Teine võimalus on kasutada LLaMA kaalude kasutamist HuggingFace'is: https://huggingface.co/decapoda-research/llama-7b-hf. Seejärel konverteerige kaalud EasyLM-i selle skripti abil: https://github.com/young-geng/EasyLM/blob/main/EasyLM/models/llama/convert_hf_to_easylm.py.
Laadige oma andmestik VM-i, loendage, kui palju märgendeid see sisaldab, kasutades HF LLaMA märgendajaid:
pip install -U transformers
python -c "from transformers import LlamaTokenizer; tokenizer = LlamaTokenizer.from_pretrained('decapoda-research/llama-7b-hf'); f = open('/path/to/your/dataset', 'r'); print(len(tokenizer.encode(f.read())))"
Kui treenite oma mudelit 1024 märgi jaoks, peate tagastatud märkide arvu jagama 1024-ga.
Kui treenite oma mudelit 2048 märgi jaoks, peate tagastatud märkide arvu jagama 2048-ga.
See number on sammude arv epohhi kohta. Seega, kui soovite näiteks treenida 5 epohhi jooksul (mis on tavaliselt hea seade), peate selle arvu korrutama 5-ga ja sisestama saadud väärtuse allpool olevasse --total_steps.
Siin on konkreetne näide: kui teie andmestik sisaldab 100 000 tokenit ja te soovite 1024 tokeni konteksti ja 5 epohhi, siis on teie sammude koguarv (100 000/1024)*5 = 488.
Sõltuvalt kontekstipikkusest määra --train_dataset.json_dataset.seq_length alljärgnevalt 1024 või 2048. Pange tähele, et mudeli peenhäälestamine 2048 tokeni konteksti jaoks nõuab rohkem mälu, nii et kui see ei ole tingimata vajalik, soovitame jääda 1024 tokeni konteksti juurde.
Nüüd saate käivitada peenhäälestusprotsessi:
nohup python -u EasyLM/EasyLM/models/llama/llama_train.py \
--total_steps=your number of steps \
--save_model_freq=usually same as your number of steps \
--optimizer.adamw_optimizer.lr_warmup_steps=usually 10% of total steps \
--train_dataset.json_dataset.path='/path/to/your/dataset' \
--train_dataset.json_dataset.seq_length=1024 or 2048 \
--load_checkpoint='params::/path/to/converted/model' \
--tokenizer.vocab_file='/path/to/tokenizer' \
--logger.output_dir=/path/to/output \
--mesh_dim='1,4,2' \
--load_llama_config='7b' \
--train_dataset.type='json' \
--train_dataset.text_processor.fields='text' \
--optimizer.type='adamw' \
--optimizer.accumulate_gradient_steps=1 \
--optimizer.adamw_optimizer.lr=0.002 \
--optimizer.adamw_optimizer.end_lr=0.002 \
--optimizer.adamw_optimizer.lr_decay_steps=100000000 \
--optimizer.adamw_optimizer.weight_decay=0.001 \
--optimizer.adamw_optimizer.multiply_by_parameter_scale=True \
--optimizer.adamw_optimizer.bf16_momentum=True &
Mõned selgitused:
--save_model_freq: kui tihti soovite oma mudelit protsessi käigus salvestada. Kui te ainult peenhäälestate väikestel andmekogumitel, võite salvestada ainult protsessi lõpus ja sel juhul on see väärtus võrdne --total_steps.
--optimizer.adamw_optimizer.lr_warmup_steps: 10% kõigist sammudest on tavaliselt hea väärtus.
--tokenizer.vocab_file: tee tokenizer.model faili juurde. Näiteks kui te kasutate decapoda repositooriumi HuggingFace'is, siis on siin link tokenizerile: https://huggingface.co/decapoda-research/llama-7b-hf/resolve/main/tokenizer.model.
--logger.output_dir: tee lõpliku mudeli ja logide juurde
Muud parameetrid võib jätta muutmata.
Kui peenhäälestusprotsess on lõppenud, saate oma mudeli kätte --logger.output_dir'ile määratud teekonnast.
Teil on nüüd oma peenhäälestatud mudel ja te tahate seda muidugi kasutada!
Esimene strateegia on kasutada järelduste tegemiseks EasyLM raamatukogu. Sellisel juhul saate järelduste serveri käivitada järgmiselt:
python EasyLM/EasyLM/models/llama/llama_serve.py \
--mesh_dim='1,1,-1' \
--load_llama_config='7b' \
--load_checkpoint='params::/path/to/your/model' \
--tokenizer.vocab_file='/path/to/tokenizer'
Siis lihtsalt saatke oma päringud cURL-i abil niimoodi:
curl "http://0.0.0.0:5007/generate" \
-H "Content-Type: application/json" \
-X POST -d '{"prefix_text":["[Content]: EasyLM works really well!\n[Sentiment]:"]}'
Teine strateegia on eksportida oma mudel HuggingFace-vormingusse, et teha järeldusi mõne teise raamistikuga. Siin on toodud, kuidas seda eksportida:
python EasyLM/EasyLM/models/llama/convert_easylm_to_hf.py \
--load_checkpoint='params::/path/to/output/model/streaming_params' \
--tokenizer_path='/path/to/tokenizer' \
--model_size='7b' \
--output_dir='/path/to/converted/model'
2023 on olnud avatud lähtekoodiga genereerivate tehisintellekti mudelite jaoks suur verstapost. Alates sellest kirjutamisest saab igaüks kasutada suurepäraseid mudeleid nagu LLaMA, OpenLLaMA, XGen, Orca, Falcon,...
Nende mudelite peenhäälestamine on parim viis saada tipptasemel tulemusi, mis on kohandatud teie enda kasutusjuhtumile ja mis võivad märkimisväärselt edestada parimaid omaloodud AI-mudeleid, nagu ChatGPT (GPT-3.5), GPT-4, Claude...
Selles juhendis näitasin teile, kuidas LLaMA, OpenLLaMA ja XGeni peenhäälestada. Kui teil on küsimusi, võtke minuga ühendust, ja kui soovite hõlpsasti peenhäälestada ja kasutada täiustatud genereerivaid AI-mudeleid ilma tehnilise keerukuseta, siis palun võtke minuga ühendust, kui soovite lihtsalt peenhäälestada ja kasutada täiustatud genereerivaid AI-mudeleid ilma tehnilise keerukuseta, have a look at the NLP Cloud dedicated documentation!
Mark
Masinõppe insener NLP Cloudis