Fonction torch.is_inference_mode_enabled de PyTorch


Pytorch torch 参考手册Manuel de référence PyTorch torch

torch.is_inference_mode_enabledest une fonction dans PyTorch utilisée pour vérifier si le mode d'inférence est actuellement activé. Elle renvoie si le contexte actuel est dansinference_modeune valeur booléenne du contexte.

Ceci est utile lorsqu'on écrit du code qui doit exécuter une logique différente selon l'état du mode d'inférence.

Définition de fonction

torch.is_inference_mode_enabled()

Parameters:

  • Aucun paramètre.

Valeur de retour:

  • Renvoie un booléen : si le mode d'inférence est actuellement activé, renvoieTrue; sinon renvoieFalse。

Exemples d'utilisation

Exemple 1 : Utilisation de base

Exemple

import torch

# Par défaut, le mode d'inférence est désactivé
print("État par défaut :", torch.is_inference_mode_enabled())

# Dans le contexte inference_mode
with torch.inference_mode():
    print("Dans inference_mode :", torch.is_inference_mode_enabled())

# Rétabli après la sortie
print("Après la sortie :", torch.is_inference_mode_enabled())

Le résultat de sortie est:

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

Exemple 2 : Comparaison de is_grad_enabled et is_inference_mode_enabled

Exemple

import torch

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

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

# État par défaut
print("État par défaut :")
print(" is_grad_enabled:", torch.is_grad_enabled())
print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

Le résultat de sortie est:

在 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

Exemple 3 : Utilisation dans les instructions conditionnelles

Exemple

import torch
import torch.nn as nn

def forward_pass(x, model):
    """Exécuter différentes optimisations en fonction du mode d'inférence"""
    if torch.is_inference_mode_enabled():
        print("Utilisation de l'optimisation en mode d'inférence")
        # Calcul optimisé en mode inférence
        return model(x)
    elif torch.is_grad_enabled():
        print("Training mode")
        return model(x)
    else:
        print("Eval mode")
        return model(x)

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

# Tester différents états
print("=== Training mode ===")
with torch.enable_grad():
    result = forward_pass(x, model)

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

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

Le résultat de sortie est:

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

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

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

Exemple 4 : Détection dans des modules personnalisés

Exemple

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):
        # Détecter le mode inférence et appliquer l'optimisation
        if torch.is_inference_mode_enabled():
            # Mode inférence : utiliser un calcul plus efficace
            return torch.mm(x, self.weight)
        elif torch.is_grad_enabled():
            # Mode entraînement : préserver le calcul du gradient
            return torch.mm(x, self.weight)
        else:
            # Mode évaluation : les gradients ne sont pas nécessaires mais l'optimisation peut être utilisée
            with torch.no_grad():
                return torch.mm(x, self.weight)

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

print("=== Training mode ===")
with torch.enable_grad():
    _ = couche(x)

print("n=== Inference mode ===")
with torch.inference_mode():
    _ = couche(x)

print("n=== Eval mode ===")
with torch.no_grad():
    _ = couche(x)

Le résultat de sortie est:

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

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

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

Fonctions associées

  • torch.inference_mode(): Gestionnaire de contexte qui active le mode inférence.
  • torch.no_grad(): Gestionnaire de contexte qui désactive le calcul du gradient.
  • torch.is_grad_enabled(): Vérifie si le calcul du gradient est activé.

Notes

  • is_inference_mode_enabledC'est une fonction en lecture seule et elle ne modifie aucun état.
  • Elle est spécifiquement utilisée pour détecterinference_mode, nonno_grad。
  • Dansinference_modeLorsqu'on est enis_grad_enabledrenvoie égalementFalse, mais la réciproque n'est pas vraie.
  • Lorsque vous écrivez du code générique, vous pouvez utiliser cette fonction pour distinguer les différents modes d'exécution.

Pytorch torch 参考手册Manuel de référence PyTorch torch

Autres extensions