Fonction torch.is_inference_mode_enabled de PyTorch
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é, renvoie
True; 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())
# 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())
# 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)
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)
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étecter
inference_mode, nonno_grad。 - Dans
inference_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.
Autres extensions