Wie protokolliert man die auf einer GPU während der Ausführung von Python-Code ausgeführten Vorgänge?Python

Python-Programme
Anonymous
 Wie protokolliert man die auf einer GPU während der Ausführung von Python-Code ausgeführten Vorgänge?

Post by Anonymous »

Ich bin auf ein besonderes Problem gestoßen, als ich eine Funktion aus der Transformers-Bibliothek von Huggingface auf einem Intel-GPU-Fackelrad ausgeführt habe. Da ich etwas tue, was ich normalerweise nicht tun sollte, da Intel-GPUs anscheinend nur minimale Unterstützung für Transformatoren bieten. Ich habe einige sehr grundlegende Diagnosen durchgeführt und die Inkompatibilität festgestellt, die zu Folgendem führt:

Code: Select all

Traceback (most recent call last):
File "/home/cemc/Desktop/python.py.tar/Python Stuff/Group Policy Gradient and Relative Policy Optimization.py", line 22, in 
sequences = model.generate(**inputs, max_new_tokens=32)
File "/home/cemc/.local/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 120, in decorate_context
return func(*args, **kwargs)
File "/home/cemc/.local/lib/python3.10/site-packages/transformers/generation/utils.py", line 2564, in generate
result = decoding_method(
File "/home/cemc/.local/lib/python3.10/site-packages/transformers/generation/utils.py", line 2784, in _sample
outputs = self(**model_inputs, return_dict=True)
File "/home/cemc/.local/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1775, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "/home/cemc/.local/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1786, in _call_impl
return forward_call(*args, **kwargs)
File "/home/cemc/.local/lib/python3.10/site-packages/transformers/models/gpt2/modeling_gpt2.py", line 1068, in forward
transformer_outputs = self.transformer(
File "/home/cemc/.local/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1775, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "/home/cemc/.local/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1786, in _call_impl
return forward_call(*args, **kwargs)
File "/home/cemc/.local/lib/python3.10/site-packages/transformers/models/gpt2/modeling_gpt2.py", line 873, in forward
causal_mask = create_causal_mask(
File "/home/cemc/.local/lib/python3.10/site-packages/transformers/masking_utils.py", line 788, in create_causal_mask
early_exit, attention_mask, packed_sequence_mask, kv_length, kv_offset = _preprocess_mask_arguments(
File "/home/cemc/.local/lib/python3.10/site-packages/transformers/masking_utils.py", line 723, in _preprocess_mask_arguments
attention_mask = attention_mask.to(device=cache_position.device, dtype=torch.bool)
RuntimeError: UR error: 45 (UR_RESULT_ERROR_INVALID_ARGUMENT)
Wurde tatsächlich nicht durch eine Datentypinkompatibilität verursacht. Also dachte ich, es läge daran, dass

Code: Select all

attention_mask = attention_mask.to(device=cache_position.device, dtype=torch.bool)
Methode versucht, meiner GPU zu befehlen, etwas zu tun, was sie nicht kann. Aus diesem Grund wollte ich protokollieren, was diese Funktion von meiner GPU verlangt, damit ich ihre Funktion manuell patchen oder ändern kann. Ich weiß nicht, wo ich suchen soll.
Ich habe ChatGPT um eine Lösung für das genaue Problem im Titel gebeten, da ich echte Menschen mit echten Jobs nicht mit diesem kleinen Problem belästigen wollte, es gab Methoden, die nicht funktionieren. Ich habe auch einige leitende Entwickler gefragt, wo ich ein Praktikum mache. Sie sagten mir, es gäbe eine Möglichkeit, die CPU-/GPU-Nutzung zu protokollieren, sie wüssten jedoch nicht, wie man Vorgänge protokolliert. Ich verwende ein Intel iRISx^e und mein Betriebssystem ist Ubuntu. Ich führe den Code im Terminal aus.
Ich habe überprüft, ob der betreffende Fehler auf eine Datentypinkompatibilität zurückzuführen ist, indem ich Folgendes ausgeführt habe:

Code: Select all

device = torch.device("xpu:0")
dtypes = [torch.float32, torch.float16, torch.bfloat16, torch.int32, torch.bool]
for dt in dtypes:

try:
t = torch.zeros(1, dtype=dt, device=device)
print(f"{dt} -> supported")
except Exception as e:
print(f"{dt} -> not supported ({e})")
Dies wurde zurückgegeben

Code: Select all

torch.float32 -> supported
torch.float16 -> supported
torch.bfloat16 -> supported
torch.int32 -> supported
torch.bool -> supported
Ich kam zu dem Schluss, dass keine Datentypinkompatibilität bestand und die fragliche Inkompatibilität auf von der Funktion angeordnete Operationen zurückzuführen war.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post