Valider une architecture
Si vous souhaitez déployer une architecture similaire à celle décrite dans cette solution, vous devez la valider en fonction des critères décrits dans les rubriques suivantes. Envisagez la sélection de processeurs graphiques, la configuration des grappes, la distribution et le déploiement, l'ajustement automatique, les tests de performance, la sécurité et le coût.
Sélectionner des GPU
Vous devez déployer un service d'inférence alimenté par GPU pour convertir des segments de texte en discours, assurant ainsi performances, évolutivité et rentabilité. Vous pouvez évaluer les modèles GPU (A10, A100, L40S) pour déterminer la meilleure correspondance pour le cas d'utilisation.
Vous pouvez effectuer des tests de benchmarking avec différents types de GPU. Le tableau suivant présente un modèle. Entrez des valeurs pour X et Y et utilisez ces données pour comparer votre rendement réel au coût.
Type de GPU | Latence moyenne (pour 250 segments) | Débit (segments/s) | Notes |
---|---|---|---|
A10 | X ms | Y | Coût réduit, adapté au développement/test |
A100 | X ms | Y | Haute performance, coût plus élevé |
L40S | X ms | Y | Bon équilibre entre prix/performance |
- Recommandation : Sélectionnez un processeur graphique en fonction de la taille de la charge de travail, des exigences de latence du CNS et du budget.
- Optimisation : Exécutez avec une précision FP16/mixte (lorsqu'elle est prise en charge) pour une latence réduite.
Concevoir des grappes OKE
Concevez vos grappes OKE en fonction de votre déploiement.
Dans cet exemple, nous utilisons une configuration de grappe avec deux groupes de noeuds :
- NodePool 1 (Noeuds d'UC) : Exécute l'interface utilisateur, les programmes, 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.
Intitulez les groupes de noeuds :
nodepool=cpu
sur les noeuds d'UCnodepool-gpu
etnvidia.com/gpu.present=true
sur les noeuds GPU
Assurez-vous que le module complémentaire de plugiciel de périphérique OKE NVIDIA est activé 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.
Répartition du modèle de conception
Vous disposez de deux options pour rendre le modèle .mar
disponible pour les pods d'inférence.
- Utilisez des seaux de stockage d'objets OCI en tant que revendication de volume persistant à l'aide du pilote CSI (Container Storage Interface).
- Transférez votre modèle vers le service Stockage de fichiers OCI à l'aide du protocole SCP (Secure Copy Protocol) et utilisez le système de fichiers comme point de montage pour une revendication de volume persistant. Par exemple :
scp -i /path/to/private_key /path/to/local/model.mar opc@<file_storage_instance_ip>:/path/to/destination/mount/point/models/
Nous vous recommandons de simplifier le stockage d'objets OCI ou le stockage de fichiers OCI si vous avez plusieurs modèles avec des mises à jour fréquentes.
Déployer TorchServe
Validez votre méthode pour déployer TorchServe.
Les fichiers YAML suivants fournissent des exemples de déploiement et de configuration.
- Présenter à l'aide de l'équilibrage de charge OCI (trafic entrant vers les pods OKE vers TorchServe).
- Sécuriser avec TLS au niveau de l'équilibreur de charge.
-
N'exposez jamais le port de gestion TorchServe (8081) à l'Internet public.
Note :
- Modifiez l'énoncé
image:
du conteneur pour qu'il pointe vers l'emplacement et la version réels du conteneur TorchServe. multispk_20250121_tts
est un nom de modèle personnalisé utilisé ici à titre d'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 l'ajustement automatique
Configurez l'ajustement automatique au niveau du pod et du travailleur.
Configurez l'ajustement automatique au niveau du pod à l'aide du composant d'ajustement automatique basé sur les événements de Kubernetes avec les mesures Prometheus pour ajuster les pods TorchServe en fonction de la profondeur de la file d'attente des demandes, des mesures personnalisées ou de l'utilisation d'UC/de processeur graphique.
Configurez l'ajustement automatique au niveau du travailleur (TorchServe).
Note :
Dans les exemples suivants, nous utilisons TorchServe Model Lifecycle avecmultispk_20250121_tts
.
Considérations relatives à 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 :
- Considérations relatives à la sécurité :
- Appliquer l'arrêt TLS au niveau de l'équilibreur de charge ou du trafic entrant.
- Conservez l'API de gestion TorchServe à l'interne seulement.
- Utilisez le service de gestion des identités et des accès OCI et les groupes de sécurité de 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 le contrat de niveau de service (CNS) et le coût.
- Utiliser l'ajustement programmé (réduire le groupe de noeuds GPU en dehors des heures de pointe).
- Utilisez le stockage d'objets OCI sur le stockage de fichiers OCI si vos modèles sont rarement mis à jour.
- L'inférence ne fonctionne pas toujours 24×7. Partager les processeurs graphiques inutilisés avec les charges de travail d'entraînement pendant les périodes d'inactivité pour optimiser l'utilisation et réduire les coûts.