Skip to content

How much memory required for LLMGradientAttribution.attribute() on LLama2 tutorial? #1430

Open
@rbelew

Description

❓ Questions and Help

I have an 8G NVIDIA GeForce RTX 3050 and it is able to run the LLama2 demo but only until it tries to build the LLMGradientAttribution. It then dies with torch.OutOfMemoryError: CUDA out of memory. (full trace below.). Is there a way to estimate the memory required for the LLMGradientAttribution?

	Traceback (most recent call last):
	File ".../Llama2_LLM_Attribution.py", line 254, in <module>
	attr_res = llm_attr.attribute(inp, target=target)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/captum/attr/_core/llm_attr.py", line 533, in attribute
	attr = self.attr_method.attribute(
	^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/captum/log/__init__.py", line 42, in wrapper
	return func(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/captum/attr/_core/layer/layer_integrated_gradients.py", line 496, in attribute
	attributions = self.ig.attribute.__wrapped__(  # type: ignore
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/captum/attr/_core/integrated_gradients.py", line 286, in attribute
	attributions = self._attribute(
	^^^^^^^^^^^^^^^^
	File ".../site-packages/captum/attr/_core/integrated_gradients.py", line 351, in _attribute
	grads = self.gradient_func(
	^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/captum/attr/_core/layer/layer_integrated_gradients.py", line 472, in gradient_func
	output = _run_forward(
	^^^^^^^^^^^^^
	File ".../site-packages/captum/_utils/common.py", line 531, in _run_forward
	output = forward_func(
	^^^^^^^^^^^^^
	File ".../site-packages/captum/attr/_core/llm_attr.py", line 458, in _forward_func
	output_logits = self.model(new_input_tensor)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1553, in _wrapped_call_impl
	return self._call_impl(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1562, in _call_impl
	return forward_call(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/accelerate/hooks.py", line 170, in new_forward
	output = module._old_forward(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/transformers/models/llama/modeling_llama.py", line 1189, in forward
	outputs = self.model(
	^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1553, in _wrapped_call_impl
	return self._call_impl(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1562, in _call_impl
	return forward_call(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/accelerate/hooks.py", line 170, in new_forward
	output = module._old_forward(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/transformers/models/llama/modeling_llama.py", line 1001, in forward
	layer_outputs = decoder_layer(
	^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1553, in _wrapped_call_impl
	return self._call_impl(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1562, in _call_impl
	return forward_call(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/accelerate/hooks.py", line 170, in new_forward
	output = module._old_forward(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/transformers/models/llama/modeling_llama.py", line 750, in forward
	hidden_states = self.mlp(hidden_states)
	^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1553, in _wrapped_call_impl
	return self._call_impl(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1562, in _call_impl
	return forward_call(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/accelerate/hooks.py", line 170, in new_forward
	output = module._old_forward(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/transformers/models/llama/modeling_llama.py", line 309, in forward
	down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1553, in _wrapped_call_impl
	return self._call_impl(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/nn/modules/module.py", line 1562, in _call_impl
	return forward_call(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/accelerate/hooks.py", line 170, in new_forward
	output = module._old_forward(*args, **kwargs)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/bitsandbytes/nn/modules.py", line 484, in forward
	out = bnb.matmul_4bit(x, self.weight.t(), bias=bias, quant_state=self.weight.quant_state)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/bitsandbytes/autograd/_functions.py", line 579, in matmul_4bit
	return MatMul4Bit.apply(A, B, out, bias, quant_state)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/torch/autograd/function.py", line 574, in apply
	return super().apply(*args, **kwargs)  # type: ignore[misc]
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	File ".../site-packages/bitsandbytes/autograd/_functions.py", line 509, in forward
	output = torch.nn.functional.linear(A, F.dequantize_4bit(B, quant_state).to(A.dtype).t(), bias)
	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 136.00 MiB. GPU 0 has a total capacity of 7.78 GiB of which 19.12 MiB is free. Including non-PyTorch memory, this process has 7.62 GiB memory in use. Of the allocated memory 7.34 GiB is allocated by PyTorch, and 170.50 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions