Skip to content

PyTorch (pytorch)

pytorch 模型 flavor 可以記錄和載入 PyTorch 模型。

mlflow.pytorch 模組定義了用於保存和載入具有 pytorch 風格的 MLflow 模型的實用程式。您可以使用 mlflow.pytorch.save_model()mlflow.pytorch.log_model() 方法以 MLflow 格式儲存 PyTorch 模型;這兩個函數都使用 torch.save() 方法來序列化 PyTorch 模型。此外,您可以使用 mlflow.pytorch.load_model() 方法將具有 pytorch 風格的 MLflow 模型載入為 PyTorch 模型物件。

這個載入的 PyFunc 模型可以使用 DataFrame 輸入和 numpy 陣列輸入進行評分。最後,由 mlflow.pytorch.save_model()mlflow.pytorch.log_model() 產生的模型包含 python_function 風格,可讓您將它們載入為通用 Python 函數,以便透過 mlflow.pyfunc.load_model() 進行推理。

Info

使用 PyTorch flavor 時,如果 GPU 在預測時可用,則會使用預設 GPU 來執行推理。若要停用此行為,使用者可以使用 MLFLOW_DEFAULT_PREDICTION_DEVICE 或透過預測函數的裝置參數傳入裝置。

PyTorch pyfunc usage

對於最小 PyTorch 模型,pyfunc Predict() 方法的範例配置是:

import numpy as np
import mlflow
from mlflow.models import infer_signature
import torch
from torch import nn

# 構建一個小模型
net = nn.Linear(6, 1)

# 定義 loss function
loss_function = nn.L1Loss()

# 選擇優化器
optimizer = torch.optim.Adam(net.parameters(), lr=1e-4)

# 訓練用樣本數據
X = torch.randn(6)
y = torch.randn(1)

# 定義訓練的 epoch
epochs = 5

# 進行模型訓練
for epoch in range(epochs):
    optimizer.zero_grad()
    outputs = net(X)

    loss = loss_function(outputs, y)
    loss.backward()

    optimizer.step()

# 使用 MLflow 來追蹤記錄
with mlflow.start_run() as run:
    # 推導出模型的 input 與 output 的資料結構
    signature = infer_signature(X.numpy(), net(X).detach().numpy())
    # 記錄模型
    model_info = mlflow.pytorch.log_model(net, "model", signature=signature)

# 載入模型
pytorch_pyfunc = mlflow.pyfunc.load_model(model_uri=model_info.model_uri)

# 進行推論
predictions = pytorch_pyfunc.predict(torch.randn(6).numpy())

# 打印結果
print(predictions)

有關更多信息,請參閱 mlflow.pytorch