Buckets:

rtrm's picture
|
download
raw
9.33 kB
# పూర్తి శిక్షణ లూప్[[a-full-training]]
ఇప్పుడు `Trainer` క్లాస్ ఉపయోగించకుండా, మునుపటి సెక్షన్‌లో చూపిన అదే ఫలితాలను సాధించే విధంగా పూర్తి శిక్షణ లూప్‌ను PyTorchలో అమలు చేద్దాం. మళ్లీ చెప్తున్నాం – మీరు సెక్షన్ 2లో డేటా ప్రాసెసింగ్ పూర్తి చేసి ఉన్నారని అనుకుంటున్నాం.
> [!TIP]
> 🏗️ **మాన్యువల్ శిక్షణ**: PyTorchలో ట్రైనింగ్ లూప్ మరియు బెస్ట్ ప్రాక్టీస్ల కోసం [🤗 Transformers training documentation](https://huggingface.co/docs/transformers/main/en/training#train-in-native-pytorch) మరియు [custom training cookbook](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu#model) చూడండి.
```py
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorWithPadding
raw_datasets = load_dataset("glue", "mrpc")
checkpoint = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
def tokenize_function(example):
return tokenizer(example["sentence1"], example["sentence2"], truncation=True)
tokenized_datasets = raw_datasets.map(tokenize_function, batched=True)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
```
### శిక్షణకు సిద్ధం చేయడం[[prepare-for-training]]
`Trainer` ఆటోమేటిక్‌గా చేసే కొన్ని దశలను మనం మాన్యువల్‌గా చేయాలి:
```py
tokenized_datasets = tokenized_datasets.remove_columns(["sentence1", "sentence2", "idx"])
tokenized_datasets = tokenized_datasets.rename_column("label", "labels")
tokenized_datasets.set_format("torch")
tokenized_datasets["train"].column_names
```
```python out
["attention_mask", "input_ids", "labels", "token_type_ids"]
```
ఇప్పుడు DataLoaderలు తయారు చేయవచ్చు:
```py
from torch.utils.data import DataLoader
train_dataloader = DataLoader(
tokenized_datasets["train"], shuffle=True, batch_size=8, collate_fn=data_collator
)
eval_dataloader = DataLoader(
tokenized_datasets["validation"], batch_size=8, collate_fn=data_collator
)
```
ఒక బ్యాచ్ చూద్దాం:
```py
for batch in train_dataloader:
break
{k: v.shape for k, v in batch.items()}
```
```python out
{'attention_mask': torch.Size([8, 65]),
'input_ids': torch.Size([8, 65]),
'labels': torch.Size([8]),
'token_type_ids': torch.Size([8, 65])}
```
మోడల్:
```py
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
```
టెస్ట్:
```py
outputs = model(**batch)
print(outputs.loss, outputs.logits.shape)
```
```python out
tensor(0.5441, grad_fn=) torch.Size([8, 2])
```
ఆప్టిమైజర్:
```py
from torch.optim import AdamW
optimizer = AdamW(model.parameters(), lr=5e-5, weight_decay=0.01)
```
లెర్నింగ్ రేట్ షెడ్యూలర్:
```py
from transformers import get_scheduler
num_epochs = 3
num_training_steps = num_epochs * len(train_dataloader)
lr_scheduler = get_scheduler(
"linear",
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps,
)
print(num_training_steps)
```
```python out
1377
```
GPUకి తరలించడం:
```py
import torch
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model.to(device)
print(device)
```
```python out
device(type='cuda')
```
### శిక్షణ లూప్[[the-training-loop]]
```py
from tqdm.auto import tqdm
progress_bar = tqdm(range(num_training_steps))
model.train()
for epoch in range(num_epochs):
for batch in train_dataloader:
batch = {k: v.to(device) for k, v in batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
# Gradient clipping (optional)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(1)
```
> [!TIP]
> 💡 **అడ్వాన్స్డ్ శిక్షణ టిప్స్**:
>
> * మిక్స్డ్ ప్రెసిషన్: `torch.cuda.amp.autocast()` మరియు `GradScaler` వాడండి
> * గ్రేడియంట్ అక్యుమ్యులేషన్: ఎక్కువ బ్యాచ్ సైజ్ సిమ్యులేషన్ కోసం గ్రేడియంట్స్ ను accumulate చేయండి
> * Checkpointing: మధ్యలో మోడల్ సేవ్ చేయండి
### ఎవాల్యుయేషన్ లూప్[[the-evaluation-loop]]
```py
import evaluate
metric = evaluate.load("glue", "mrpc")
model.eval()
for batch in eval_dataloader:
batch = {k: v.to(device) for k, v in batch.items()}
with torch.no_grad():
outputs = model(**batch)
logits = outputs.logits
predictions = torch.argmax(logits, dim=-1)
metric.add_batch(predictions=predictions, references=batch["labels"])
metric.compute()
```
```python out
{'accuracy': 0.8431372549019608, 'f1': 0.8907849829351535}
```
### 🤗 Accelerateతో శిక్షణ లూప్[[supercharge-your-training-loop-with-accelerate]]
```py
from accelerate import Accelerator
from transformers import get_scheduler
from torch.optim import AdamW
from tqdm.auto import tqdm
accelerator = Accelerator()
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
optimizer = AdamW(model.parameters(), lr=3e-5)
train_dl, eval_dl, model, optimizer = accelerator.prepare(
train_dataloader, eval_dataloader, model, optimizer
)
num_epochs = 3
num_training_steps = num_epochs * len(train_dl)
lr_scheduler = get_scheduler(
"linear",
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(
range(num_training_steps), disable=not accelerator.is_local_main_process
)
model.train()
for epoch in range(num_epochs):
for batch in train_dl:
outputs = model(**batch)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(1)
```
ఈ కోడ్‌ను `train.py`లో సేవ్ చేసి కింది కమాండ్‌లతో రన్ చేయవచ్చు:
```bash
accelerate config
accelerate launch train.py
```
Colabలో టెస్ట్ చేయాలంటే:
```py
from accelerate import notebook_launcher
notebook_launcher(training_function)
```
### మరిన్ని బెస్ట్ ప్రాక్టీస్స్[[next-steps-and-best-practices]]
* **Model Evaluation**: Accuracyతో పాటు ఇతర మెట్రిక్స్‌తో కూడా మోడల్ ఎవాల్యుయేట్ చేయండి
* **Hyperparameter Tuning**: Optuna లేదా Ray Tune వంటివి వాడి హైపర్‌పారామీటర్స్ optimize చేయండి
* **Model Monitoring**: Training metrics, learning curves, validation performance ట్రాక్ చేయండి
* **Model Sharing**: Hugging Face Hubలో మోడల్ share చేయండి
* **Efficiency**: Gradient checkpointing, LoRA, AdaLoRA, quantization techniques వాడి పెద్ద మోడల్ కోసం efficiency పెంచండి
### సెక్షన్ క్విజ్[[section-quiz]]
### 1. Adam మరియు AdamW మధ్య ప్రధాన తేడా ఏమిటి?
### 2. Training loop లో operations సరైన క్రమం ఏమిటి?
### 3. 🤗 Accelerate library ప్రధాన ఉపయోగం ఏమిటి?
### 4. Training loop లో batches deviceకి ఎందుకు తరలిస్తారు?
### 5. Evaluation ముందు `model.eval()` ఏమి చేస్తుంది?
### 6. Evaluation లో `torch.no_grad()` ఉపయోగం ఏమిటి?
### 7. 🤗 Accelerate వాడితే training loop లో ఏమి మారుతుంది?
> [!TIP]
> 💡 **Key Takeaways**:
>
> * మాన్యువల్ training loops పూర్తి control ఇస్తాయి; proper sequence: forward → backward → optimizer step → scheduler step → zero gradients
> * AdamW weight decay తో transformer modelsకి recommended
> * Evaluation లో model.eval() మరియు torch.no_grad() తప్పనిసరి
> * 🤗 Accelerate distributed training minimal changes తో
> * Device management (GPU/CPU tensors) PyTorch లో crucial
> * Mixed precision, gradient accumulation, gradient clipping efficiency పెంచుతాయి

Xet Storage Details

Size:
9.33 kB
·
Xet hash:
9b099a387e82ba9d3e86670b9c0a99050686f3c3f38194c75e1e0e7f668b2869

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.