Valider une architecture
Si vous souhaitez déployer une architecture similaire à celle illustrée dans cette solution, vous devez la valider en fonction des critères indiqués dans les rubriques suivantes. Tenez compte de la sélection des GPU, de la configuration, de la distribution et du déploiement des clusters, du redimensionnement automatique, des tests de performances, de la sécurité et des coûts.
Sélectionner des GPU
Vous devez déployer un service d'inférence alimenté par GPU pour convertir les segments de texte en discours, garantissant les performances, l'évolutivité et la rentabilité. Vous pouvez évaluer les modèles GPU (A10, A100, L40S) afin de déterminer le meilleur ajustement pour le cas d'utilisation.
Vous pouvez effectuer des tests d'évaluation avec différents types de GPU. Le tableau suivant fournit un modèle. Entrez des valeurs pour X et Y et utilisez ces données pour comparer vos performances réelles au coût.
Type de GPU | Latence moyenne (par 250 segments) | Débit (segments/s) | Remarques |
---|---|---|---|
A10 | X ms | Y (Oui) | Coût réduit, adapté au développement/test |
A100 | X ms | Y (Oui) | Hautes performances, coût plus élevé |
L40S | X ms | Y (Oui) | Bon équilibre entre prix et performance |
- Recommandation : sélectionnez un GPU en fonction de la taille de la charge globale, des exigences de latence du contrat de niveau de service et du budget.
- Optimisation : exécution avec FP16/précision mixte (si prise en charge) pour une latence réduite.
Concevoir des clusters OKE
Concevez vos clusters OKE en fonction de votre déploiement.
Dans cet exemple, nous utilisons une configuration de cluster avec deux pools de noeuds :
- NodePool 1 (noeuds CPU) : exécute l'interface utilisateur, les processus actifs, RabbitMQ et la base de données interne.
- NodePool 2 (noeuds GPU) : exécute les pods d'inférence TorchServe.
Assurez-vous que la valeur BV est suffisante sur les noeuds GPU.
Nommer les pools de noeuds :
nodepool=cpu
sur les noeuds d'UCnodepool-gpu
etnvidia.com/gpu.present=true
sur les noeuds GPU
Assurez-vous que l'extension de module d'extension de périphérique OKE NVIDIA est activée sur les noeuds GPU et que nvidia-smi
fonctionne.
Valider les GPU
Pour vous assurer que les GPU sont disponibles pour le noeud OKE et les pods TorchServe, exécutez les étapes de validation suivantes.
Distribution des modèles de conception
Vous avez deux options pour rendre le modèle .mar
disponible pour les pods d'inférence.
- Utilisez des buckets OCI Object Storage en tant que demande de volume persistante à l'aide du pilote Container Storage Interface (CSI).
- Transférez votre modèle vers OCI File Storage à l'aide du protocole SCP (Secure Copy Protocol) et utilisez le système de fichiers comme point de montage pour une demande de volume persistant. Exemple :
scp -i /path/to/private_key /path/to/local/model.mar opc@<file_storage_instance_ip>:/path/to/destination/mount/point/models/
Nous recommandons OCI Object Storage pour plus de simplicité, ou OCI File Storage si vous disposez de plusieurs modèles avec des mises à jour fréquentes.
Déployer TorchServe
Validez votre méthode de déploiement de TorchServe.
Les fichiers YAML suivants fournissent des exemples de déploiement et de configuration.
- Exposer à l'aide d'OCI Load Balancing (entrée vers OKE vers des pods TorchServe).
- Sécuriser avec TLS sur l'équilibreur de charge.
-
N'exposez jamais le port de gestion TorchServe (8081) au réseau Internet public.
Remarques :
- Modifiez l'instruction
image:
de conteneur afin qu'elle pointe vers votre version et votre emplacement de conteneur TorchServe réels. multispk_20250121_tts
est un nom de modèle personnalisé utilisé ici comme exemple. Vous pouvez le remplacer par le nom de votre propre modèle et le fichier.mar
.
torchserve-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
Configurer le redimensionnement automatique
Configurez le redimensionnement automatique au niveau du pod et du salarié.
Configurez le redimensionnement automatique au niveau du pod à l'aide de l'outil de redimensionnement automatique basé sur les événements (KEDA) Kubernetes avec des mesures Prometheus pour redimensionner les pods TorchServe en fonction de la profondeur de la file d'attente des demandes ou des mesures personnalisées ou de l'utilisation de l'UC/GPU.
Configurez le redimensionnement automatique au niveau du salarié (TorchServe).
Remarques :
Dans les exemples suivants, nous utilisons le cycle de vie du modèle TorchServe avecmultispk_20250121_tts
.
Remarques concernant la sécurité et l'optimisation des coûts
Lors de la validation de votre conception, tenez compte des facteurs de sécurité et d'optimisation des coûts :
- Points à prendre en compte pour la sécurité :
- Imposez la terminaison TLS sur l'équilibreur de charge ou l'entrée.
- Conservez l'API de gestion TorchServe en interne uniquement.
- Utilisez OCI Identity and Access Management et les groupes de sécurité réseau pour limiter l'accès.
- Considérations relatives à l'optimisation des coûts :
- Choisissez votre type de GPU en fonction d'un équilibre entre contrat de niveau de service (SLA) et coût.
- Utilisez le redimensionnement programmé (réduisez le pool de noeuds GPU en dehors des heures de pointe).
- Utilisez OCI Object Storage sur OCI File Storage si vos modèles sont rarement mis à jour.
- L'inférence ne fonctionne pas toujours en 24×7. Partagez des GPU inutilisés avec des charges de travail d'entraînement pendant les périodes d'inactivité afin d'optimiser l'utilisation et de réduire les coûts.