Я сталкиваюсь с контринтуальной проблемой VRAM в Pytorch при применении адаптера LORA к вложенному NN.Module и хотел бы объяснить объяснение базового механизма. Только добавляет небольшой (~ 100 МБ) адаптер LORA к этой модели клипа.import torch
import torch.nn as nn
from peft import PeftModel # For demonstration
# Inner Module (Base Model)
class CLIP(nn.Module):
def __init__(self, arch='ViT-H-14-quickgelu', pretrained='dfn5b', device=torch.device('cuda:0')):
super().__init__()
self.model, self.train_transform, self.test_transform = open_clip.create_model_and_transforms(arch, pretrained=pretrained)
self.tokenizer = open_clip.get_tokenizer(arch)
try: self.image_size, _ = self.model.visual.image_size
except TypeError: self.image_size = self.model.visual.image_size
self.device = device
self.model.eval()
self.model.to(self.device) #
# Outer Wrapper Class
class TTD(nn.Module):
def __init__(self, arch, backbone, lora_path, device=torch.device('cuda:0'), pamr=False):
super().__init__()
self.model = CLIP(arch, backbone, device=device)
lora_utils.apply_lora_v3(self.model.model.visual, 64)
self.model.load_state_dict(torch.load(lora_path))
self.eval()
self.to(device)
self.arch = arch
self.device = device
self.denorm_fn = T.Denormalize()
self.image_transform = T.Compose([T.Normalize(), T.ToTensor()])
def to(self, device):
super().to(device)
self.device = device
self.model = self.model.to(device)
return self
...
< /code>
#defined TTD
class TTDModel:
def __init__(self) -> None:
self.model = TTD_networks.TTD(
'ViT-H-14-quickgelu',
'dfn2b',
device=torch.device('cuda'),
tag_path=f'{APP_DIR}data/250818_OGQxMYBOX_tag_embedding.json'
)
...
< /code>
The Phenomenon:
When I run the code with the self.model.to(device) line inside CLIP.__init__, использование VRAM не является ожидаемым 4,1 ГБ. Вместо этого, он задумывается до ~ 8 ГБ. Я предполагаю, что начальный вызов (device) в клипе помещает базовую модель в GPU, а затем окончательный Self.to (Device) Call в TTD каким-то образом создает вторую, отдельную копию модели PEFT, нанесенной в PEFT, на GPU. проблема. Тем не менее, я хочу понять основную причину такого поведения. Каков внутренний механизм, который не позволяет модели PEFT просто повторно использовать память уже на базовой модели-GPU, а вместо этого выделяет совершенно новый блок 4 ГБ? < /P>
open_clip_torch==2.32.0
torch==2.3.1
cuda\>=12.1
Подробнее здесь: https://stackoverflow.com/questions/797 ... l-is-moved
Почему применение двойного использования адаптера LORA, когда базовая модель заранее перемещена в графический процессор? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Tensorflow не может выбрать графический процессор, хотя графический процессор распознан
Anonymous » » в форуме Python - 0 Ответы
- 97 Просмотры
-
Последнее сообщение Anonymous
-