PyTorch-Modellbereitstellung
Modell-Deployment ist der Prozess, trainierte Machine-Learning-Modelle in praktische Anwendungen zu integrieren. PyTorch bietet verschiedene Tools und Methoden, um dieses Ziel zu erreichen.
Warum Modell-Deployment benötigt wird
- Anwendungsintegration: KI-Funktionen in Web-, Mobile- oder Embedded-Systeme integrieren
- Leistungsoptimierung: Modell-Inferenzgeschwindigkeit für Produktionsumgebungen optimieren
- Ressourcenverwaltung: Rechenressourcen effektiv nutzen, um hochparallele Dienste zu ermöglichen
Überblick über den Deployment-Prozess

Modellvorbereitung und -optimierung
Modell-Exportformate
PyTorch unterstützt hauptsächlich die folgenden Exportformate:
| Format | Funktionen | Geeignete Szenarien |
|---|---|---|
| TorchScript | PyTorch-natives Format, behält dynamische Graph-Funktionen bei | Wird innerhalb des PyTorch-Ökosystems verwendet |
| ONNX | Offener Standard, frameworkübergreifend kompatibel | Multi-Framework-Kollaborationsumgebung |
| Torch-TensorRT | NVIDIA-optimiertes Format | GPU-Inferenzbeschleunigung |
Exportieren als TorchScript
Beispiel
import torchvision
# Vortrainiertes Modell laden
model = torchvision.models.resnet18(pretrained=True)
model.eval()
# Beispiel-Eingabe
example_input = torch.rand(1, 3, 224, 224)
# Methode 1: Export durch Tracing
traced_script = torch.jit.trace(model, example_input)
traced_script.save("resnet18_traced.pt")
# Methode 2: Export über Skripting
scripted_model = torch.jit.script(model)
scripted_model.save("resnet18_scripted.pt")
Hinweise:
torch.jit.traceBesser geeignet für Modelle ohne Kontrollflusstorch.jit.scriptKann Modelle mit komplexer Logik wie bedingten Anweisungen verarbeiten- Vor dem Export unbedingt aufrufen
model.eval()
Auswahl einer Deployment-Lösung
Lokale Deployment-Lösungen
LibTorch (C++ API)
Beispiel
int main() {
// Modell laden
torch::jit::script::Module module;
module = torch::jit::load("resnet18.pt");
// Eingabe vorbereiten
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::ones({1, 3, 224, 224}));
// Inferenz ausführen
auto output = module.forward(inputs).toTensor();
std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << '\n';
}
ONNX Runtime
Beispiel
# Inferenzsitzung erstellen
sess = ort.InferenceSession("model.onnx")
# Eingabe vorbereiten
input_name = sess.get_inputs()[0].name
input_data = np.random.rand(1, 3, 224, 224).astype(np.float32)
# Inferenz ausführen
outputs = sess.run(None, {input_name: input_data})
Cloud-Bereitstellungslösungen
TorchServe (Offizielles Serving-Framework)
Beispiel
pip install torchserve torch-model-archiver
# Modell paketieren
torch-model-archiver --model-name resnet18 \
--version 1.0 \
--serialized-file model.pth \
--extra-files index_to_name.json \
--handler image_classifier \
--export-path model_store
# Service starten
torchserve --start --model-store model_store --models resnet18=resnet18.mar
Erstellen einer REST-API mit FastAPI
Beispiel
from PIL import Image
import io
import torch
app = FastAPI()
model = torch.jit.load("model.pt")
@app.post("/predict")
async def predict(image: UploadFile = File(...)):
img_data = await image.read()
img = Image.open(io.BytesIO(img_data))
# Vorverarbeitung...
with torch.no_grad():
output = model(img_tensor)
return {"prediction": output.argmax().item()}
Tipps zur Leistungsoptimierung
Quantisierungsbeschleunigung
Beispiel
quantized_model = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear}, dtype=torch.qint8)
# Statische Quantisierung
model.qconfig = torch.quantization.get_default_qconfig('fbgemm')
torch.quantization.prepare(model, inplace=True)
# Kalibrierung...
torch.quantization.convert(model, inplace=True)
TensorRT zur Beschleunigung verwenden
Beispiel
# Kompilierungsoptimierung
trt_model = torch_tensorrt.compile(model,
inputs=[torch_tensorrt.Input((1, 3, 224, 224))],
enabled_precisions={torch.float32} # Oder {torch.float16}
)
# Optimiertes Modell speichern
torch.jit.save(trt_model, "model_trt.pt")
FAQ
F1: Was sollte ich tun, wenn während der Bereitstellung Probleme mit der Versionskompatibilität auftreten?A: Es wird empfohlen, Docker-Container zu verwenden, um Umgebungsversionen festzulegen, oder durchcondaErstellen Sie eine dedizierte Umgebung.
F2: Wie überwache ich die Leistung bereitgestellter Modelle?A: Sie können Monitoring-Tools wie Prometheus integrieren, um Latenz, Durchsatz und Ressourcennutzung zu verfolgen.
F3: Wie erreiche ich Hot-Updates nach der Modellbereitstellung?A: TorchServe unterstützt Modellversionsverwaltung und A/B-Tests, wodurch Modellversionen über die API dynamisch gewechselt werden können.
Andere Erweiterungen