Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
rbelew opened this issue Nov 1, 2024 · 0 comments

Comments

@rbelew
Copy link

rbelew commented Nov 1, 2024

❓ 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant