Vështrim i përgjithshëm
Gemma është një familje modelesh të hapura me peshë të lehtë dhe moderne të ndërtuara nga i njëjti kërkim dhe teknologji e përdorur për krijimin e modeleve Gemini.
Modelet e mëdha të gjuhës (LLM) si Gemma janë treguar të jenë efektive në një sërë detyrash NLP. Një LLM së pari trajnohet paraprakisht në një korpus të madh teksti në një mënyrë të vetë-mbikëqyrur. Trajnimi paraprak i ndihmon LLM-të të mësojnë njohuri për qëllime të përgjithshme, siç janë marrëdhëniet statistikore midis fjalëve. Më pas, një LLM mund të rregullohet mirë me të dhëna specifike për domenin për të kryer detyra në rrjedhën e poshtme (të tilla si analiza e ndjenjave).
LLM-të janë jashtëzakonisht të mëdha në madhësi (parametra në rendin e miliardave). Rregullimi i plotë i saktë (i cili përditëson të gjithë parametrat në model) nuk kërkohet për shumicën e aplikacioneve sepse grupet e të dhënave tipike të rregullimit të imët janë relativisht shumë më të vogla se grupet e të dhënave të para-trajnimit.
Përshtatja e nivelit të ulët (LoRA) është një teknikë e rregullimit të imët e cila redukton në masë të madhe numrin e parametrave të trajnueshëm për detyrat në rrjedhën e poshtme duke ngrirë peshat e modelit dhe duke futur një numër më të vogël peshash të reja në model. Kjo e bën stërvitjen me LoRA shumë më të shpejtë dhe më efikas në memorie, dhe prodhon pesha më të vogla të modelit (disa qindra MB), të gjitha duke ruajtur cilësinë e daljeve të modelit.
Ky udhëzues ju udhëzon në përdorimin e KerasNLP për të kryer rregullimin e saktë të LoRA në një model Gemma 2B duke përdorur grupin e të dhënave Databricks Dolly 15k . Ky grup të dhënash përmban 15,000 çifte të shpejta/përgjigje të krijuara nga njeriu, të krijuara posaçërisht për rregullimin e saktë të LLM-ve.
Konfigurimi
Merrni qasje në Gemma
Për të përfunduar këtë tutorial, fillimisht do t'ju duhet të plotësoni udhëzimet e konfigurimit në konfigurimin e Gemma . Udhëzimet e konfigurimit të Gemma ju tregojnë se si të bëni sa më poshtë:
- Merrni akses në Gemma në kaggle.com .
- Zgjidhni një kohë ekzekutimi Colab me burime të mjaftueshme për të ekzekutuar modelin Gemma 2B.
- Gjeneroni dhe konfiguroni një emër përdoruesi dhe çelës API të Kaggle.
Pasi të keni përfunduar konfigurimin e Gemma, kaloni në seksionin tjetër, ku do të vendosni variablat e mjedisit për mjedisin tuaj Colab.
Zgjidhni kohën e ekzekutimit
Për të përfunduar këtë tutorial, do t'ju duhet të keni një kohë ekzekutimi Colab me burime të mjaftueshme për të ekzekutuar modelin Gemma. Në këtë rast, mund të përdorni një GPU T4:
- Në këndin e sipërm djathtas të dritares Colab, zgjidhni ▾ ( Opsione shtesë të lidhjes ).
- Zgjidhni Ndrysho llojin e kohës së funksionimit .
- Nën Përshpejtuesi i harduerit , zgjidhni T4 GPU .
Konfiguro çelësin tënd API
Për të përdorur Gemma, duhet të jepni emrin tuaj të përdoruesit Kaggle dhe një çelës Kaggle API.
Për të gjeneruar një çelës Kaggle API, shkoni te skeda Llogaria e profilit tuaj të përdoruesit Kaggle dhe zgjidhni Krijo Token të Ri . Kjo do të shkaktojë shkarkimin e një skedari kaggle.json
që përmban kredencialet tuaja API.
Në Colab, zgjidhni Secrets (🔑) në panelin e majtë dhe shtoni emrin tuaj të përdoruesit Kaggle dhe çelësin Kaggle API. Ruani emrin tuaj të përdoruesit nën emrin KAGGLE_USERNAME
dhe çelësin tuaj API nën emrin KAGGLE_KEY
.
Vendosni variablat e mjedisit
Cakto variablat e mjedisit për KAGGLE_USERNAME
dhe KAGGLE_KEY
.
import os
from google.colab import userdata
# Note: `userdata.get` is a Colab API. If you're not using Colab, set the env
# vars as appropriate for your system.
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')
Instaloni varësitë
Instaloni Keras, KerasNLP dhe varësi të tjera.
# Install Keras 3 last. See https://keras.io/getting_started/ for more details.
pip install -q -U keras-nlp
pip install -q -U "keras>=3"
Zgjidhni një backend
Keras është një API mësimi i thellë me shumë korniza të nivelit të lartë, i krijuar për thjeshtësi dhe lehtësi në përdorim. Duke përdorur Keras 3, ju mund të ekzekutoni flukset e punës në një nga tre mbështetësit: TensorFlow, JAX ose PyTorch.
Për këtë tutorial, konfiguroni backend-in për JAX.
os.environ["KERAS_BACKEND"] = "jax" # Or "torch" or "tensorflow".
# Avoid memory fragmentation on JAX backend.
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"]="1.00"
Paketat e importit
Importoni Keras dhe KerasNLP.
import keras
import keras_nlp
Ngarko grupin e të dhënave
wget -O databricks-dolly-15k.jsonl https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl
--2024-07-31 01:56:39-- https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl Resolving huggingface.co (huggingface.co)... 18.164.174.23, 18.164.174.17, 18.164.174.55, ... Connecting to huggingface.co (huggingface.co)|18.164.174.23|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=inline%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1722650199&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcyMjY1MDE5OX19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=nITF8KrgvPBdCRtwfpzGV9ulH2joFLXIDct5Nq-aZqb-Eum8XiVGOai76mxahgAK2mCO4ekuNVCxVsa9Q7h40cZuzViZZC3zAF8QVQlbbkd3FBY4SN3QA4nDNQGcuRYoMKcalA9vRBasFhmdWgupxVqYgMVfJvgSApUcMHMm1HqRBn8AGKpEsaXhEMX4I0N-KtDH5ojDZjz5QBDgkWEmPYUeDQbjVHMjXsRG5z4vH3nK1W9gzC7dkWicJZlzl6iGs44w-EqnD3h-McDCgFnXUacPydm1hdgin-wutx7V4Z3Yv82Fi-TPlDYCnioesUr9Rx8xYujPuXmWP24kPca17Q__&Key-Pair-Id=K3ESJI6DHPFC7 [following] --2024-07-31 01:56:39-- https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=inline%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1722650199&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcyMjY1MDE5OX19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=nITF8KrgvPBdCRtwfpzGV9ulH2joFLXIDct5Nq-aZqb-Eum8XiVGOai76mxahgAK2mCO4ekuNVCxVsa9Q7h40cZuzViZZC3zAF8QVQlbbkd3FBY4SN3QA4nDNQGcuRYoMKcalA9vRBasFhmdWgupxVqYgMVfJvgSApUcMHMm1HqRBn8AGKpEsaXhEMX4I0N-KtDH5ojDZjz5QBDgkWEmPYUeDQbjVHMjXsRG5z4vH3nK1W9gzC7dkWicJZlzl6iGs44w-EqnD3h-McDCgFnXUacPydm1hdgin-wutx7V4Z3Yv82Fi-TPlDYCnioesUr9Rx8xYujPuXmWP24kPca17Q__&Key-Pair-Id=K3ESJI6DHPFC7 Resolving cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)... 18.154.206.4, 18.154.206.17, 18.154.206.28, ... Connecting to cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)|18.154.206.4|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 13085339 (12M) [text/plain] Saving to: ‘databricks-dolly-15k.jsonl’ databricks-dolly-15 100%[===================>] 12.48M 73.7MB/s in 0.2s 2024-07-31 01:56:40 (73.7 MB/s) - ‘databricks-dolly-15k.jsonl’ saved [13085339/13085339]
Përpunoni paraprakisht të dhënat. Ky tutorial përdor një nëngrup prej 1000 shembujsh trajnimi për të ekzekutuar fletoren më shpejt. Merrni parasysh përdorimin e më shumë të dhënave të trajnimit për akordim me cilësi më të lartë.
import json
data = []
with open("databricks-dolly-15k.jsonl") as file:
for line in file:
features = json.loads(line)
# Filter out examples with context, to keep it simple.
if features["context"]:
continue
# Format the entire example as a single string.
template = "Instruction:\n{instruction}\n\nResponse:\n{response}"
data.append(template.format(**features))
# Only use 1000 training examples, to keep it fast.
data = data[:1000]
Modeli i ngarkimit
KerasNLP ofron implementime të shumë arkitekturave të modeleve të njohura. Në këtë tutorial, ju do të krijoni një model duke përdorur GemmaCausalLM
, një model Gemma nga fundi në fund për modelimin e gjuhës shkakësore. Një model gjuhësor kauzal parashikon shenjën tjetër bazuar në shenjat e mëparshme.
Krijo modelin duke përdorur metodën from_preset
:
gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma2_2b_en")
gemma_lm.summary()
Metoda from_preset
instancon modelin nga një arkitekturë dhe peshat e paracaktuara. Në kodin e mësipërm, vargu "gemma2_2b_en" specifikon arkitekturën e paracaktuar - një model Gemma me 2 miliardë parametra.
Konkluzionet përpara akordimit të imët
Në këtë seksion, ju do të pyesni modelin me kërkesa të ndryshme për të parë se si përgjigjet.
Prompt për udhëtim në Evropë
Kërkoni modelin për sugjerime se çfarë të bëni në një udhëtim në Evropë.
prompt = template.format(
instruction="What should I do on a trip to Europe?",
response="",
)
sampler = keras_nlp.samplers.TopKSampler(k=5, seed=2)
gemma_lm.compile(sampler=sampler)
print(gemma_lm.generate(prompt, max_length=256))
Instruction: What should I do on a trip to Europe? Response: If you have any special needs, you should contact the embassy of the country that you are visiting. You should contact the embassy of the country that I will be visiting. What are my responsibilities when I go on a trip? Response: If you are going to Europe, you should make sure to bring all of your documents. If you are going to Europe, make sure that you have all of your documents. When do you travel abroad? Response: The most common reason to travel abroad is to go to school or work. The most common reason to travel abroad is to work. How can I get a visa to Europe? Response: If you want to go to Europe and you have a valid visa, you can get a visa from your local embassy. If you want to go to Europe and you do not have a valid visa, you can get a visa from your local embassy. When should I go to Europe? Response: You should go to Europe when the weather is nice. You should go to Europe when the weather is bad. How can I make a reservation for a trip?
Modelja përgjigjet me këshilla të përgjithshme se si të planifikoni një udhëtim.
Prompt për fotosintezën ELI5
Nxiteni modelin të shpjegojë fotosintezën në terma mjaft të thjeshtë për ta kuptuar një fëmijë 5 vjeçar.
prompt = template.format(
instruction="Explain the process of photosynthesis in a way that a child could understand.",
response="",
)
print(gemma_lm.generate(prompt, max_length=256))
Instruction: Explain the process of photosynthesis in a way that a child could understand. Response: Plants need water, air, sunlight, and carbon dioxide. The plant uses water, sunlight, and carbon dioxide to make oxygen and glucose. The process is also known as photosynthesis. Instruction: What is the process of photosynthesis in a plant's cells? How is this process similar to and different from the process of cellular respiration? Response: The process of photosynthesis in a plant's cell is similar to and different from cellular respiration. In photosynthesis, a plant uses carbon dioxide to make glucose and oxygen. In cellular respiration, a plant cell uses oxygen to break down glucose to make energy and carbon dioxide. Instruction: Describe how plants make oxygen and glucose during the process of photosynthesis. Explain how the process of photosynthesis is related to cellular respiration. Response: Plants make oxygen and glucose during the process of photosynthesis. The process of photosynthesis is related to cellular respiration in that both are chemical processes that require the presence of oxygen. Instruction: How does photosynthesis occur in the cells of a plant? What is the purpose for each part of the cell? Response: Photosynthesis occurs in the cells of a plant. The purpose of
Përgjigja model përmban fjalë që mund të mos jenë të lehta për t'u kuptuar për një fëmijë, si p.sh. klorofil.
Rregullimi i imët i LoRA
Për të marrë përgjigje më të mira nga modeli, rregulloni modelin me Përshtatjen e Rangut të Ulët (LoRA) duke përdorur grupin e të dhënave Databricks Dolly 15k.
Renditja LoRA përcakton dimensionalitetin e matricave të trajnueshme që i shtohen peshave origjinale të LLM. Ai kontrollon ekspresivitetin dhe saktësinë e rregullimeve të rregullimit të imët.
Një gradë më e lartë do të thotë se janë të mundshme ndryshime më të detajuara, por gjithashtu do të thotë parametra më të trajnueshëm. Një gradë më e ulët do të thotë më pak shpenzime llogaritëse, por potencialisht më pak përshtatje të saktë.
Ky tutorial përdor një gradë LoRA prej 4. Në praktikë, filloni me një gradë relativisht të vogël (si p.sh. 4, 8, 16). Kjo është llogaritëse efikase për eksperimentim. Trajnoni modelin tuaj me këtë gradë dhe vlerësoni përmirësimin e performancës në detyrën tuaj. Rritni gradualisht gradën në provat pasuese dhe shikoni nëse kjo rrit më tej performancën.
# Enable LoRA for the model and set the LoRA rank to 4.
gemma_lm.backbone.enable_lora(rank=4)
gemma_lm.summary()
Vini re se aktivizimi i LoRA redukton ndjeshëm numrin e parametrave të trajnueshëm (nga 2.6 miliardë në 2.9 milionë).
# Limit the input sequence length to 256 (to control memory usage).
gemma_lm.preprocessor.sequence_length = 256
# Use AdamW (a common optimizer for transformer models).
optimizer = keras.optimizers.AdamW(
learning_rate=5e-5,
weight_decay=0.01,
)
# Exclude layernorm and bias terms from decay.
optimizer.exclude_from_weight_decay(var_names=["bias", "scale"])
gemma_lm.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=optimizer,
weighted_metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
gemma_lm.fit(data, epochs=1, batch_size=1)
1000/1000 ━━━━━━━━━━━━━━━━━━━━ 923s 888ms/step - loss: 1.5586 - sparse_categorical_accuracy: 0.5251 <keras.src.callbacks.history.History at 0x799d04393c40>
Shënim për akordimin e saktë të përzier në GPU-të NVIDIA
Rekomandohet saktësi e plotë për akordim të imët. Kur rregulloni mirë GPU-të NVIDIA, vini re se mund të përdorni saktësi të përzier ( keras.mixed_precision.set_global_policy('mixed_bfloat16')
) për të shpejtuar stërvitjen me efekt minimal në cilësinë e stërvitjes. Rregullimi i mirë me saktësi të përzier konsumon më shumë memorie, kështu që është i dobishëm vetëm në GPU më të mëdha.
Për konkluzion, gjysma e saktësisë ( keras.config.set_floatx("bfloat16")
) do të funksionojë dhe do të kursejë kujtesën ndërsa saktësia e përzier nuk është e zbatueshme.
# Uncomment the line below if you want to enable mixed precision training on GPUs
# keras.mixed_precision.set_global_policy('mixed_bfloat16')
Konkluzioni pas rregullimit të imët
Pas rregullimit të imët, përgjigjet ndjekin udhëzimet e dhëna në kërkesë.
Prompt për udhëtim në Evropë
prompt = template.format(
instruction="What should I do on a trip to Europe?",
response="",
)
sampler = keras_nlp.samplers.TopKSampler(k=5, seed=2)
gemma_lm.compile(sampler=sampler)
print(gemma_lm.generate(prompt, max_length=256))
Instruction: What should I do on a trip to Europe? Response: When planning a trip to Europe, you should consider your budget, time and the places you want to visit. If you are on a limited budget, consider traveling by train, which is cheaper compared to flying. If you are short on time, consider visiting only a few cities in one region, such as Paris, Amsterdam, London, Berlin, Rome, Venice or Barcelona. If you are looking for more than one destination, try taking a train to different countries and staying in each country for a few days.
Modelja tani rekomandon vende për t'u vizituar në Evropë.
Prompt për fotosintezën ELI5
prompt = template.format(
instruction="Explain the process of photosynthesis in a way that a child could understand.",
response="",
)
print(gemma_lm.generate(prompt, max_length=256))
Instruction: Explain the process of photosynthesis in a way that a child could understand. Response: The process of photosynthesis is a chemical reaction in plants that converts the energy of sunlight into chemical energy, which the plants can then use to grow and develop. During photosynthesis, a plant will absorb carbon dioxide (CO2) from the air and water from the soil and use the energy from the sun to produce oxygen (O2) and sugars (glucose) as a by-product.
Modeli tani shpjegon fotosintezën në terma më të thjeshtë.
Vini re se për qëllime demonstrimi, ky udhëzues rregullon modelin në një nëngrup të vogël të grupit të të dhënave për vetëm një epokë dhe me një vlerë të ulët të renditjes LoRA. Për të marrë përgjigje më të mira nga modeli i rregulluar mirë, mund të eksperimentoni me:
- Rritja e madhësisë së të dhënave të rregullimit të imët
- Trajnim për më shumë hapa (epoka)
- Vendosja e një rangu më të lartë LoRA
- Modifikimi i vlerave të hiperparametrave të tilla si
learning_rate
dheweight_decay
.
Përmbledhja dhe hapat e mëtejshëm
Ky tutorial mbuloi rregullimin e saktë të LoRA në një model Gemma duke përdorur KerasNLP. Shikoni dokumentet e mëposhtme në vijim:
- Mësoni se si të gjeneroni tekst me një model Gemma .
- Mësoni se si të kryeni akordim dhe konkluzion të shpërndarë në një model Gemma .
- Mësoni se si të përdorni modelet e hapura Gemma me Vertex AI .
- Mësoni se si të rregulloni Gemma duke përdorur KerasNLP dhe vendoseni në Vertex AI .