Architektur validieren
Wenn Sie eine Architektur bereitstellen möchten, die der in dieser Lösung dargestellten ähnelt, sollten Sie sie gemäß den Kriterien in den folgenden Themen validieren. Berücksichtigen Sie GPU-Auswahl, Cluster-Setup, Verteilung und Bereitstellung, Autoscaling, Performancetests, Sicherheit und Kosten.
GPUs auswählen
Sie müssen einen GPU-gestützten Inferenzservice bereitstellen, um Textsegmente in Sprache zu konvertieren und so Performance, Skalierbarkeit und Kosteneffizienz sicherzustellen. Sie können GPU-Modelle (A10, A100, L40S) auswerten, um die beste Passform für den Anwendungsfall zu ermitteln.
Sie können Benchmarking-Tests mit verschiedenen GPU-Typen durchführen. Die folgende Tabelle enthält eine Vorlage. Geben Sie Werte für "X" und "Y" ein, und vergleichen Sie anhand dieser Daten Ihre tatsächliche Leistung mit den Kosten.
GPU-Typ | Durchschn. Latenz (pro 250 Segmente) | Durchsatz (Segmente/Sek.) | Hinweise: |
---|---|---|---|
A10 | X ms | J | Geringere Kosten, geeignet für Entwicklung/Test |
A100 | X ms | J | Hohe Leistung, höhere Kosten |
L40S | X ms | J | Gutes Gleichgewicht zwischen Preis/Leistung |
- Empfehlung: Wählen Sie GPU basierend auf Workload-Größe, SLA-Latenzanforderungen und Budget aus.
- Optimierung: Wird mit FP16/gemischter Genauigkeit (sofern unterstützt) ausgeführt, um die Latenz zu reduzieren.
OKE-Cluster entwerfen
Entwerfen Sie Ihre OKE-Cluster entsprechend Ihrem Deployment.
In diesem Beispiel wird ein Cluster-Setup mit zwei Knotenpools verwendet:
- NodePool 1 (CPU-Knoten): Führt UI, Worker, RabbitMQ und interne DB aus
- NodePool 2 (GPU-Knoten): Führt TorchServe-Inferenzpods aus
Stellen Sie ausreichend BV auf den GPU-Knoten sicher.
Beschriften Sie die Knotenpools:
nodepool=cpu
auf CPU-Knotennodepool-gpu
undnvidia.com/gpu.present=true
auf GPU-Knoten
Stellen Sie sicher, dass das OKE NVIDIA-Geräte-Plug-in-Add-on auf GPU-Knoten aktiviert ist und dass nvidia-smi
funktioniert.
GPUs validieren
Um sicherzustellen, dass GPUs sowohl für den OKE-Knoten als auch für TorchServe-Pods verfügbar sind, führen Sie die folgenden Validierungsschritte aus.
Designmodellverteilung
Sie haben zwei Optionen, um das Modell .mar
für Inferenzpods verfügbar zu machen.
- Verwenden Sie OCI Object Storage-Buckets als Persistent Volume Claim (PVC) mit dem Container Storage Interface-(CSI-)Treiber.
- Übertragen Sie Ihr Modell mit Secure Copy Protocol (SCP) in OCI File Storage, und verwenden Sie das Dateisystem als Mount Point für einen PVC. Beispiel:
scp -i /path/to/private_key /path/to/local/model.mar opc@<file_storage_instance_ip>:/path/to/destination/mount/point/models/
Wir empfehlen OCI Object Storage aus Gründen der Einfachheit oder OCI File Storage, wenn mehrere Modelle mit häufigen Updates vorhanden sind.
TorchServe bereitstellen
Validieren Sie die Methode für das Deployment von TorchServe.
Die folgenden YAML-Dateien enthalten Beispiele für Deployment und Konfiguration.
- Verwenden Sie OCI Load Balancing (Ingress zu OKE zu TorchServe-Pods).
- Sicher mit TLS am Load Balancer.
-
Setzen Sie den TorchServe-Verwaltungsport (8081) niemals dem öffentlichen Internet frei.
Hinweis:
- Ändern Sie die
image:
-Anweisung des Containers so, dass sie auf den tatsächlichen Speicherort und die tatsächliche Version des TorchServe-Containers verweist. multispk_20250121_tts
ist ein benutzerdefinierter Modellname, der hier als Beispiel verwendet wird. Sie können ihn durch den Namen Ihres eigenen Modells und die Datei.mar
ersetzen.
Taschenlampe deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: torchserve
labels:
app: torchserve
spec:
replicas: 1
selector:
matchLabels:
app: torchserve
template:
metadata:
labels:
app: torchserve
spec:
nodeSelector:
nodepool: torchserve
tolerations:
- key: "nvidia.com/gpu"
operator: "Exists"
effect: "NoSchedule"
imagePullSecrets:
- name: ocir-creds
containers:
- name: torchserve
image: ocir.<your-region>.oci.oraclecloud.com/<tenancy-namespace>/<torchserve_image>:<version>
ports:
- containerPort: 8080
- containerPort: 8081
- containerPort: 8082
- containerPort: 7070
- containerPort: 7071
env:
- name: GPUS__DEVICES
value: "0"
- name: METRICS_MODE
value: "logical" # or "endpoint"
- name: ENABLE_METRICS_API
value: "true"
resources:
limits:
nvidia.com/gpu: 1
volumeMounts:
- name: models-volume
mountPath: /home/model-server/model-store
volumes:
- name: models-volume
persistentVolumeClaim:
claimName: fss-voiceengine-models
configmap-torchserve.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-properties
namespace: default # Adjust the namespace as necessary
data:
config.properties: |
inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081
metrics_address=http://0.0.0.0:8082
number_of_netty_threads=32
job_queue_size=1000
model_store=/home/model-server/model-store
workflow_store=/home/model-server/wf-store
install_py_dep_per_model=true
max_request_size=196605000
max_response_size=196605000
default_workers_per_model=1
job_queue_size=100
metrics_mode=logical
load_models=/home/model-server/model-store/multispk_20250121_tts.mar
Autoscaling einrichten
Autoscaling auf Pod- und Mitarbeiterebene einrichten
Richten Sie Autoscaling auf Pod-Ebene ein, indem Sie Kubernetes Event-driven Autoscaler (KEDA) mit Prometheus-Metriken verwenden, um TorchServe-Pods basierend auf der Tiefe der Anforderungswarteschlange oder benutzerdefinierten Metriken oder der CPU/GPU-Auslastung zu skalieren.
Richten Sie Autoscaling auf Mitarbeiterebene ein (TorchServe).
Hinweis:
In den folgenden Beispielen wird TorchServe Model Lifecycle mitmultispk_20250121_tts
verwendet.
Überlegungen zur Sicherheit und Kostenoptimierung
Berücksichtigen Sie bei der Validierung Ihres Designs Sicherheits- und Kostenoptimierungsfaktoren:
- Sicherheitsbetrachtungen:
- Erzwingen Sie die TLS-Beendigung beim Load Balancer oder Ingress.
- Behalten Sie die TorchServe-Management-API nur intern bei.
- Mit OCI Identity and Access Management und Netzwerksicherheitsgruppen können Sie den Zugriff einschränken.
- Überlegungen zur Kostenoptimierung:
- Wählen Sie Ihren GPU-Typ basierend auf einem Gleichgewicht zwischen Service Level Agreement (SLA) und Kosten aus.
- Geplante Skalierung verwenden (GPU-Knotenpool außerhalb der Spitzenzeiten horizontal skalieren).
- Verwenden Sie OCI Object Storage über OCI File Storage, wenn Ihre Modelle selten aktualisiert werden.
- Inferenz läuft nicht immer 24×7. Teilen Sie nicht verwendete GPUs mit Trainings-Workloads in Leerlaufphasen, um die Auslastung zu maximieren und Kosten zu senken.