PyTorch torch.is_inference_mode_enabled Funktion


Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

torch.is_inference_mode_enabledist eine Funktion in PyTorch, mit der überprüft wird, ob der Inferenzmodus derzeit aktiviert ist. Sie gibt zurück, ob sich der aktuelle Kontext ininference_modeeinem booleschen Wert des Kontexts befindet.

Dies ist nützlich beim Schreiben von Code, der abhängig vom Zustand des Inferenzmodus unterschiedliche Logik ausführen muss.

Funktionsdefinition

torch.is_inference_mode_enabled()

Parameters:

  • Keine Parameter.

Rückgabewert:

  • Gibt einen booleschen Wert zurück: Wenn der Inferenzmodus derzeit aktiviert ist, wird zurückgegebenTrue; andernfalls wird zurückgegebenFalse。

Anwendungsbeispiele

Beispiel 1: Grundlegende Verwendung

Beispiel

import torch

# Standardmäßig ist der Inferenzmodus deaktiviert
print("Standardzustand:", torch.is_inference_mode_enabled())

# Innerhalb des inference_mode-Kontexts
with torch.inference_mode():
    print("Innerhalb von inference_mode:", torch.is_inference_mode_enabled())

# Nach dem Verlassen wiederhergestellt
print("Nach dem Verlassen:", torch.is_inference_mode_enabled())

Das Ausgabeergebnis ist:

默认状态: False
在 inference_mode 中: True
退出后: False

Beispiel 2: Vergleich von is_grad_enabled und is_inference_mode_enabled

Beispiel

import torch

# Innerhalb von no_grad
with torch.no_grad():
    print("Innerhalb von no_grad:")
    print(" is_grad_enabled:", torch.is_grad_enabled())
    print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

# Innerhalb von inference_mode
with torch.inference_mode():
    print("Innerhalb von inference_mode:")
    print(" is_grad_enabled:", torch.is_grad_enabled())
    print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

# Standardzustand
print("Standardzustand:")
print(" is_grad_enabled:", torch.is_grad_enabled())
print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

Das Ausgabeergebnis ist:

在 no_grad 中:
  is_grad_enabled: False
  is_inference_mode_enabled: False
在 inference_mode 中:
  is_grad_enabled: False
  is_inference_mode_enabled: True
默认状态:
  is_grad_enabled: True
  is_inference_mode_enabled: False

Beispiel 3: Verwendung in bedingten Entscheidungen

Beispiel

import torch
import torch.nn as nn

def forward_pass(x, model):
    """Führe abhängig vom inference_mode unterschiedliche Optimierungen aus"""
    if torch.is_inference_mode_enabled():
        print("Verwendung der inference_mode-Optimierung")
        # Optimierte Berechnung im Inferenzmodus
        return model(x)
    elif torch.is_grad_enabled():
        print("Trainingsmodus")
        return model(x)
    else:
        print("Eval-Modus")
        return model(x)

model = nn.Linear(10, 5)
x = torch.randn(5, 10)

# Verschiedene Zustände testen
print("=== Trainingsmodus ===")
with torch.enable_grad():
    result = forward_pass(x, model)

print("n=== Inferenzmodus ===")
with torch.inference_mode():
    result = forward_pass(x, model)

print("n=== Eval-Modus ===")
with torch.no_grad():
    result = forward_pass(x, model)

Das Ausgabeergebnis ist:

=== 训练模式 ===
训练模式

=== 推理模式 ===
使用推理模式优化

=== eval 模式 ===
eval 模式

Beispiel 4: Erkennung in benutzerdefinierten Modulen

Beispiel

import torch
import torch.nn as nn

class OptimizedLayer(nn.Module):
    def __init__(self):
        super().__init__()
        self.weight = nn.Parameter(torch.randn(20, 10))

    def forward(self, x):
        # Inferenzmodus erkennen und Optimierung anwenden
        if torch.is_inference_mode_enabled():
            # Inferenzmodus: effizientere Berechnung verwenden
            return torch.mm(x, self.weight)
        elif torch.is_grad_enabled():
            # Trainingsmodus: Gradientenberechnung beibehalten
            return torch.mm(x, self.weight)
        else:
            # Eval-Modus: Gradienten nicht erforderlich, aber Optimierung kann verwendet werden
            with torch.no_grad():
                return torch.mm(x, self.weight)

layer = OptimizedLayer()
x = torch.randn(5, 10)

print("=== Trainingsmodus ===")
with torch.enable_grad():
    _ = Schicht(x)

print("n=== Inferenzmodus ===")
with torch.inference_mode():
    _ = Schicht(x)

print("n=== Eval-Modus ===")
with torch.no_grad():
    _ = Schicht(x)

Das Ausgabeergebnis ist:

=== 训练模式 ===
训练模式

=== 推理模式 ===
推理模式:使用更高效的计算方式

=== eval 模式 ===
eval 模式

Verwandte Funktionen

  • torch.inference_mode(): Kontextmanager, der den Inferenzmodus aktiviert.
  • torch.no_grad(): Kontextmanager, der die Gradientenberechnung deaktiviert.
  • torch.is_grad_enabled(): Prüft, ob die Gradientenberechnung aktiviert ist.

Hinweise

  • is_inference_mode_enabledEs ist eine schreibgeschützte Funktion und ändert keinen Zustand.
  • Sie wird speziell verwendet, um zu erkenneninference_mode, nichtno_grad。
  • Ininference_modeWenn inis_grad_enabledgibt auch zurückFalse, aber die Umkehrung gilt nicht.
  • Wenn Sie generischen Code schreiben, können Sie diese Funktion verwenden, um verschiedene Ausführungsmodi zu unterscheiden.

Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

Andere Erweiterungen