Skip to content

Commit 6b5b26d

Browse files
committed
testing for low vran GPUs
1 parent 667e909 commit 6b5b26d

File tree

7 files changed

+438
-235
lines changed

7 files changed

+438
-235
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# IDE
22
.idea/
33

4+
# Data
5+
/data/
6+
47
# Checkpoints
58
/logs/
69
/Solutionnaires/logs/

Laboratoire 8.ipynb

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,7 +1125,7 @@
11251125
"id": "fd5670ec",
11261126
"metadata": {},
11271127
"source": [
1128-
"block_size = 256\n",
1128+
"block_size = 128\n",
11291129
"max_iters = 10_000\n",
11301130
"eval_interval = 1000\n",
11311131
"learning_rate = 3e-4\n",
@@ -1139,7 +1139,7 @@
11391139
"# Model\n",
11401140
"model = TransformerNLP(n_layer, n_embd, n_head, vocab_size, dropout, vocab_size, block_size)\n",
11411141
"# Load a pretrained model\n",
1142-
"model.load_state_dict(torch.load('checkpoints/transformer_nlp.pth'))\n",
1142+
"model.load_state_dict(torch.load('checkpoints/transformer_nlp.pth', weights_only=True))\n",
11431143
"model = model.to(device)\n",
11441144
"\n",
11451145
"optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate)"
@@ -1171,14 +1171,14 @@
11711171
" print(f\"step {i}: train loss {out['train'].item():.4f}, val loss {out['val'].item():.4f}\")\n",
11721172
" iter_loss.append((out['train'].item(), out['val'].item()))\n",
11731173
" model.train()\n",
1174-
" x, y = get_batch('train', block_size, device)\n",
1174+
" x, y = get_batch('train', block_size, device)\n",
11751175
" \n",
1176-
" pred = model(x)\n",
1177-
" loss = model.loss(pred, y)\n",
1176+
" pred = model(x)\n",
1177+
" loss = model.loss(pred, y)\n",
11781178
" \n",
1179-
" optimizer.zero_grad(set_to_none=True)\n",
1180-
" loss.backward()\n",
1181-
" optimizer.step()"
1179+
" optimizer.zero_grad(set_to_none=True)\n",
1180+
" loss.backward()\n",
1181+
" optimizer.step()"
11821182
],
11831183
"outputs": [],
11841184
"execution_count": null
@@ -1245,6 +1245,33 @@
12451245
"outputs": [],
12461246
"execution_count": null
12471247
},
1248+
{
1249+
"metadata": {},
1250+
"cell_type": "code",
1251+
"outputs": [],
1252+
"execution_count": null,
1253+
"source": [
1254+
"# Supprimer le dernier modele\n",
1255+
"def find_cuda_tensors():\n",
1256+
" \"\"\"Finds all Python variables that are tensors on CUDA.\"\"\"\n",
1257+
" cuda_tensors = {}\n",
1258+
" for var_name, var_value in globals().items():\n",
1259+
" if isinstance(var_value, torch.Tensor) and var_value.is_cuda:\n",
1260+
" cuda_tensors[var_name] = var_value\n",
1261+
" return cuda_tensors\n",
1262+
"\n",
1263+
"for tensor_name, tensor in find_cuda_tensors().items():\n",
1264+
" del globals()[tensor_name]\n",
1265+
"\n",
1266+
"if 'model' in globals():\n",
1267+
" del model\n",
1268+
"if 'optimizer' in globals():\n",
1269+
" del optimizer\n",
1270+
"torch.cuda.empty_cache()\n",
1271+
"torch.cuda.reset_peak_memory_stats()\n"
1272+
],
1273+
"id": "45c6409098300c1"
1274+
},
12481275
{
12491276
"cell_type": "code",
12501277
"id": "b056f4a0",
@@ -1328,7 +1355,7 @@
13281355
"id": "d9573bdc",
13291356
"metadata": {},
13301357
"source": [
1331-
"model.load_weights('logs/best_epoch_5.ckpt')\n",
1358+
"model.load_weights('logs/best_epoch_5.ckpt', weights_only=True)\n",
13321359
"test_loss, test_acc = model.evaluate_generator(test_loader)\n",
13331360
"print('Epoch 5: test_loss: {:.4f} test_acc: {:.2f}'.format(test_loss, test_acc))"
13341361
],

Solutionnaires/Laboratoire 8.ipynb

Lines changed: 324 additions & 220 deletions
Large diffs are not rendered by default.

deeplib/training.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import warnings
2+
23
import numpy as np
4+
import poutyne as pt
35
import torch
46
import torch.nn as nn
57
from torch.utils.data import DataLoader
68
from torchvision.transforms import ToTensor
79

8-
import poutyne as pt
9-
10-
from deeplib.history import History
1110
from deeplib.datasets import train_valid_loaders
11+
from deeplib.history import History
1212

1313

1414
def get_model(network, optimizer=None, criterion=None, use_gpu=True, acc=True):
@@ -140,7 +140,7 @@ def train(network, optimizer, dataset, n_epoch, batch_size, *, use_gpu=True, cri
140140
history_callback = HistoryCallback()
141141
callbacks = [history_callback] if callbacks is None else [history_callback] + callbacks
142142

143-
if dataset.transform is None:
143+
if not hasattr(dataset, 'transform') or dataset.transform is None:
144144
dataset.transform = ToTensor()
145145

146146
train_loader, valid_loader = train_valid_loaders(dataset, batch_size=batch_size)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ scipy
1212
Pillow
1313
poutyne
1414
einops
15+
transformers[torch]

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
name='deeplib',
55
version='0.1',
66
packages=['deeplib'],
7-
install_requires=['torch', 'torchvision', 'pandas', 'ipykernel', 'matplotlib',
8-
'scikit-learn', 'graphviz', 'ipython', 'gensim', 'numpy', 'scipy', 'Pillow', 'poutyne', 'einops'],
7+
install_requires=['torch', 'torchvision', 'pandas', 'ipykernel', 'matplotlib', 'scikit-learn', 'graphviz',
8+
'ipython', 'gensim', 'numpy', 'scipy', 'Pillow', 'poutyne', 'einops', 'transformers[torch]'],
99
)

train_huggingface.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import torch
2+
import torchvision
3+
import torchvision.transforms as transforms
4+
from torch.nn import CrossEntropyLoss
5+
from torch.optim import AdamW
6+
from torch.utils.data import DataLoader
7+
from tqdm import tqdm
8+
from transformers import ViTForImageClassification
9+
10+
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
11+
12+
transform = transforms.Compose([
13+
transforms.Resize((224, 224)),
14+
transforms.ToTensor(),
15+
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
16+
])
17+
18+
train_dataset = torchvision.datasets.CIFAR100(
19+
root="./data", train=True, download=True, transform=transform
20+
)
21+
test_dataset = torchvision.datasets.CIFAR100(
22+
root="./data", train=False, download=True, transform=transform
23+
)
24+
25+
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
26+
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
27+
28+
# Load a pretrained ViT model from Hugging Face
29+
model_name = "google/vit-base-patch16-224"
30+
model = ViTForImageClassification.from_pretrained(
31+
model_name, num_labels=100, ignore_mismatched_sizes=True,
32+
)
33+
model.to(device)
34+
35+
optimizer = AdamW(model.parameters(), lr=5e-5)
36+
criterion = CrossEntropyLoss()
37+
38+
# Fine-tuning
39+
epochs = 3
40+
for epoch in range(epochs):
41+
model.train()
42+
total_loss = 0
43+
for images, labels in tqdm(train_loader, desc=f"Epoch {epoch + 1}/{epochs}"):
44+
images, labels = images.to(device), labels.to(device)
45+
46+
optimizer.zero_grad()
47+
outputs = model(pixel_values=images).logits
48+
loss = criterion(outputs, labels)
49+
loss.backward()
50+
optimizer.step()
51+
52+
total_loss += loss.item()
53+
print(f"Epoch {epoch + 1} Loss: {total_loss / len(train_loader):.4f}")
54+
55+
# Evaluation
56+
model.eval()
57+
correct = 0
58+
total = 0
59+
with torch.no_grad():
60+
for images, labels in test_loader:
61+
images, labels = images.to(device), labels.to(device)
62+
outputs = model(pixel_values=images).logits
63+
_, predicted = torch.max(outputs, 1)
64+
total += labels.size(0)
65+
correct += (predicted == labels).sum().item()
66+
67+
accuracy = correct / total
68+
print(f"Test Accuracy: {accuracy * 100:.2f}%")

0 commit comments

Comments
 (0)