PyTorch torch.is_inference_mode_enabled 関数


Pytorch torch 参考手册Pytorch torch リファレンスマニュアル

torch.is_inference_mode_enabledは、PyTorch で現在推論モードが有効かどうかを確認するための関数です。現在の状態を返します。inference_modeコンテキストのブール値。

これは、推論モードの状態に応じて異なるロジックを実行する必要があるコードを書く場合に非常に便利です。

関数定義

torch.is_inference_mode_enabled()

パラメータ:

  • パラメータなし。

戻り値:

  • ブール値を返します。現在推論モードが有効な場合は、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("eval モード")
        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=== eval モード ===")
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:
            # eval モード: 勾配は不要だが最適化は使用可能
            with torch.no_grad():
                return torch.mm(x, self.weight)

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

print("=== トレーニングモード ===")
with torch.enable_grad():
    _ = layer(x)

print("n=== 推論モード ===")
with torch.inference_mode():
    _ = layer(x)

print("n=== eval モード ===")
with torch.no_grad():
    _ = layer(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 リファレンスマニュアル

その他の拡張機能