Почему применение двойного использования адаптера LORA, когда базовая модель заранее перемещена в графический процессор?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему применение двойного использования адаптера LORA, когда базовая модель заранее перемещена в графический процессор?

Сообщение Anonymous »

Я сталкиваюсь с контринтуальной проблемой 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»