Функция PyTorch torch.is_inference_mode_enabled


Pytorch torch 参考手册Справочное руководство PyTorch torch

torch.is_inference_mode_enabled— это функция в PyTorch, используемая для проверки, включён ли в данный момент режим инференса. Она возвращает, находится ли текущий контекст вinference_modeлогическое значение контекста.

Это полезно при написании кода, которому нужно выполнять различную логику в зависимости от состояния режима инференса.

Определение функции

torch.is_inference_mode_enabled()

Parameters:

  • Нет параметров.

Возвращаемое значение:

  • Возвращает логическое значение: если режим инференса в данный момент включён, возвращаетTrue; в противном случае возвращаетFalse。

Примеры использования

Пример 1: Базовое использование

Пример

import torch

# По умолчанию режим инференса отключён
print("Состояние по умолчанию:", torch.is_inference_mode_enabled())

# Внутри контекста inference_mode
with torch.inference_mode():
    print("Внутри inference_mode:", torch.is_inference_mode_enabled())

# Восстановлено после выхода
print("После выхода:", torch.is_inference_mode_enabled())

Результат вывода:

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

Пример 2: Сравнение is_grad_enabled и is_inference_mode_enabled

Пример

import torch

# Внутри no_grad
with torch.no_grad():
    print("Внутри no_grad:")
    print(" is_grad_enabled:", torch.is_grad_enabled())
    print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

# Внутри inference_mode
with torch.inference_mode():
    print("Внутри inference_mode:")
    print(" is_grad_enabled:", torch.is_grad_enabled())
    print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

# Состояние по умолчанию
print("Состояние по умолчанию:")
print(" is_grad_enabled:", torch.is_grad_enabled())
print(" is_inference_mode_enabled:", torch.is_inference_mode_enabled())

Результат вывода:

在 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

Пример 3: Использование в условных проверках

Пример

import torch
import torch.nn as nn

def forward_pass(x, model):
    """Выполняет различные оптимизации в зависимости от режима вывода"""
    if torch.is_inference_mode_enabled():
        print("Использование оптимизации режима вывода")
        # Оптимизированные вычисления в режиме инференса
        return model(x)
    elif torch.is_grad_enabled():
        print("Режим обучения")
        return model(x)
    else:
        print("Режим оценки")
        return model(x)

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

# Проверка различных состояний
print("=== Режим обучения ===")
with torch.enable_grad():
    result = forward_pass(x, model)

print("n=== Режим инференса ===")
with torch.inference_mode():
    result = forward_pass(x, model)

print("n=== Режим оценки ===")
with torch.no_grad():
    result = forward_pass(x, model)

Результат вывода:

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

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

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

Пример 4: Обнаружение в пользовательских модулях

Пример

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):
        # Обнаружить режим инференса и применить оптимизацию
        if torch.is_inference_mode_enabled():
            # Режим инференса: использовать более эффективные вычисления
            return torch.mm(x, self.weight)
        elif torch.is_grad_enabled():
            # Режим обучения: сохранять вычисление градиентов
            return torch.mm(x, self.weight)
        else:
            # Режим оценки: градиенты не нужны, но оптимизация может использоваться
            with torch.no_grad():
                return torch.mm(x, self.weight)

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

print("=== Режим обучения ===")
with torch.enable_grad():
    _ = слой(x)

print("n=== Режим инференса ===")
with torch.inference_mode():
    _ = слой(x)

print("n=== Режим оценки ===")
with torch.no_grad():
    _ = слой(x)

Результат вывода:

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

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

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

Связанные функции

  • torch.inference_mode(): Контекстный менеджер, который включает режим инференса.
  • torch.no_grad(): Контекстный менеджер, который отключает вычисление градиентов.
  • torch.is_grad_enabled(): Проверяет, включено ли вычисление градиентов.

Примечания

  • is_inference_mode_enabledЭто функция только для чтения, и она не изменяет никакое состояние.
  • Она специально используется для обнаруженияinference_mode, а неno_grad。
  • Вinference_modeКогда вis_grad_enabledтакже возвращаетFalse, но обратное неверно.
  • При написании обобщённого кода можно использовать эту функцию для различения разных режимов выполнения.

Pytorch torch 参考手册Справочное руководство PyTorch torch

Другие расширения