OSS Connector pour l'IA/ML accélère le chargement des modèles depuis OSS grâce à des lectures directes basées sur LD_PRELOAD, avec préchargement et mise en cache. Aucune modification du code n'est requise. Compatible avec les conteneurs et les principaux frameworks d'inférence.
Hautes performances
OSS Connector pour l'IA/ML améliore considérablement le chargement des grands modèles depuis OSS. Avec une bande passante suffisante, le débit peut dépasser 10 Go/s. Tests de performance.
Fonctionnement
OSS Connector pour l'IA/ML résout les goulots d'étranglement liés aux performances lors du chargement de grands modèles depuis OSS.
Les solutions de montage basées sur FUSE ne parviennent souvent pas à exploiter pleinement la bande passante d'OSS, ce qui ralentit le chargement des modèles. OSS Connector intercepte les requêtes d'E/S du framework d'inférence et les convertit directement en requêtes HTTP(s) vers OSS.
Grâce à
LD_PRELOAD, il précharge et met en cache les données du modèle en mémoire, sans aucune modification du code de votre application d'inférence.
Environnement de déploiement
Système d'exploitation : Linux x86-64
glibc : >=2,17
Installer OSS Connector
-
Téléchargez le package d'installation.
-
oss-connector-lib-1.1.0rc7.x86_64.rpm : Pour les distributions Linux basées sur Red Hat
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.rpm -
oss-connector-lib-1.1.0rc7.x86_64.deb : Pour les distributions Linux basées sur Debian
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
-
-
Installez OSS Connector.
Utilisez le package .rpm ou .deb téléchargé pour l'installation. La bibliothèque
libossc_preload.soest installée dans/usr/local/lib/.-
Installation de oss-connector-lib-1.1.0rc7.x86_64.rpm
yum install -y oss-connector-lib-1.1.0rc7.x86_64.rpm -
Installation de oss-connector-lib-1.1.0rc7.x86_64.deb
dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb
-
-
Vérifiez que
/usr/local/lib/libossc_preload.soexiste et que la version est correcte.nm -D /usr/local/lib/libossc_preload.so | grep version
Configurer OSS Connector
-
Fichier de configuration
Le fichier de configuration contrôle la sortie des journaux, la politique de cache et la simultanéité du préchargement.
Configuration par défaut située dans
/etc/oss-connector/config.json:{ "logLevel": 1, "logPath": "/var/log/oss-connector/connector.log", "auditPath": "/var/log/oss-connector/audit.log", "expireTimeSec": 120, "prefetch": { "vcpus": 16, "workers": 16 } }Paramètre
Description
logLevel
Contrôle le niveau de détail de la sortie des journaux.
logPath
Chemin de sortie des journaux d'exécution.
auditPath
Chemin des journaux d'audit pour le suivi de la sécurité et de la conformité.
expireTimeSec
Délai de libération des fichiers en cache (en secondes) après la fermeture de toutes les références. Valeur par défaut : 120.
prefetch.vcpus
Nombre de vCPU pour le préchargement. Valeur par défaut : 16.
prefetch.workers
Nombre de workers par vCPU pour la simultanéité. Valeur par défaut : 16.
-
Configurez les variables d'environnement
Clé de variable d'environnement
Description
OSS_ACCESS_KEY_ID
Paire AccessKey d'un compte Alibaba Cloud ou d'un utilisateur RAM.
Lors de l'utilisation d'un jeton d'accès temporaire, définissez ces valeurs sur la paire AccessKey des identifiants temporaires.
OSS Connector nécessite l'autorisation
oss:ListObjectssur le répertoire du bucket cible. Pour les buckets accessibles anonymement, laissezOSS_ACCESS_KEY_IDetOSS_ACCESS_KEY_SECRETnon définis ou vides.OSS_ACCESS_KEY_SECRET
OSS_SESSION_TOKEN
Jeton d'accès temporaire. Requis lors de l'utilisation d'identifiants temporaires STS pour accéder à OSS.
Définissez cette valeur sur une chaîne vide lors de l'utilisation d'identifiants AccessKey permanents.
OSS_ENDPOINT
Endpoint OSS. Exemple :
http://oss-cn-beijing-internal.aliyuncs.com. HTTPS est utilisé par défaut si aucun protocole n'est spécifié. Utilisez HTTP sur les réseaux internes pour de meilleures performances.OSS_REGION
ID de région OSS. Exemple : cn-beijing. L'authentification peut échouer si cette valeur n'est pas spécifiée.
OSS_PATH
Chemin du modèle sur OSS. Format :
oss://bucketname/path/. Exemple :oss://examplebucket/qwen/Qwen3-8B/.MODEL_DIR
Répertoire local du modèle pour le framework d'inférence. Videz le répertoire avant utilisation. Les données temporaires téléchargées pendant le chargement peuvent être supprimées par la suite.
Remarque-
Le chemin
MODEL_DIRdoit correspondre au chemin du modèle du framework d'inférence (--modelpour vllm,--model-pathpour sglang). -
MODEL_DIRnécessite des autorisations en lecture/écriture. Sa structure de répertoire reflète celle deOSS_PATH. -
Les fichiers de modèle sont préchargés et mis en cache en mémoire pendant le chargement. Le cache est libéré après 120 secondes par défaut (configurable via
expireTimeSec). -
Utilisez ce répertoire exclusivement pour le chargement des modèles via le connecteur.
-
Ne créez pas ce répertoire sur un montage OSS existant (tel qu'ossfs).
LD_PRELOAD
Chemin de la bibliothèque préchargée :
/usr/local/lib/libossc_preload.so. Définissez-le comme variable d'environnement temporaire. Exemple :LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ./myappENABLE_CONNECTOR
Rôle du processus OSS Connector. Définissez-le comme variable d'environnement temporaire.
-
ENABLE_CONNECTOR=1: Rôle de connecteur principal. -
ENABLE_CONNECTOR=2: Rôle de connecteur secondaire.
Chaque instance n'autorise qu'un seul processus de connecteur principal. Attribuez le rôle principal au processus principal (point d'entrée). Tous les autres processus de connecteur doivent utiliser le rôle secondaire. l'exemple ray+vllm pour le démarrage multi-nœuds.
-
Démarrer le service de modèle
Démarrage sur un seul nœud
vllm API Server
LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m vllm.entrypoints.openai.api_server --model /tmp/model --trust-remote-code --tensor-parallel-size 1 --disable-custom-all-reduce
sglang API Server
LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m sglang.launch_server --model-path /tmp/model --port 8000
Démarrage multi-nœuds
ray+vllm
Variables d'environnement courantes :
export OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID}
export OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET}
export OSS_ENDPOINT=${OSS_ENDPOINT}
export OSS_REGION=${OSS_REGION}
export OSS_PATH=oss://examplebucket/
export MODEL_DIR=/tmp/models
Les variables OSS_PATH et MODEL_DIR doivent correspondre. Par exemple, si le chemin du modèle sur OSS est oss://examplebucket/qwen/Qwen2___5-72B/, le répertoire local du modèle est /tmp/models/qwen/Qwen2___5-72B/.
Le pod A démarre le nœud head ray :
LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --head --dashboard-host 0.0.0.0 --block
Le pod B démarre ray et rejoint le cluster :
LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --address='172.24.176.137:6379' --block // 172.24.176.137 is the pod IP. Change this to the IP address of the head pod. The command to join the cluster is provided in the output after you run `ray start` on Pod A.
Démarrez le serveur API vllm :
LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=2 python3 -m vllm.entrypoints.openai.api_server --model ${MODEL_DIR}/qwen/Qwen2___5-72B/ --trust-remote-code --served-model-name ds --max-model-len 2048 --gpu-memory-utilization 0.98 --tensor-parallel-size 32
sglang
Configurez les variables d'environnement pour le processus sglang sur chaque nœud.
Démarrage du nœud principal :
LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m sglang.launch_server --model-path /tmp/model --port 8000 --dist-init-addr 192.168.1.1:20000 --nnodes 2 --node-rank 0
Démarrage du nœud secondaire :
LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m sglang.launch_server --model-path /tmp/model --port 8000 --dist-init-addr 192.168.1.1:20000 --nnodes 2 --node-rank 1
Déploiement Kubernetes
Créez une image avec le connecteur installé et poussez-la vers un référentiel. Exemple de YAML de déploiement de pod :
apiVersion: v1
kind: ConfigMap
metadata:
name: connector-config
data:
config.json: |
{
"logLevel": 1,
"logPath": "/var/log/oss-connector/connector.log",
"auditPath": "/var/log/oss-connector/audit.log",
"expireTimeSec": 120,
"prefetch": {
"vcpus": 16,
"workers": 16
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: model-connector-deployment
spec:
selector:
matchLabels:
app: model-connector
template:
metadata:
labels:
app: model-connector
spec:
imagePullSecrets:
- name: acr-credential-beijing
hostNetwork: true
containers:
- name: container-name
image: {IMAGE_ADDRESS}
imagePullPolicy: Always
resources:
requests:
cpu: "24"
memory: "700Gi"
limits:
cpu: "128"
memory: "900Gi"
command:
- bash
- -c
- ENABLE_CONNECTOR=1 python3 -m vllm.entrypoints.openai.api_server --model /var/model --trust-remote-code --tensor-parallel-size 1 --disable-custom-all-reduce
env:
- name: LD_PRELOAD
value: "/usr/local/lib/libossc_preload.so"
- name: OSS_ENDPOINT
value: "oss-cn-beijing-internal.aliyuncs.com"
- name: OSS_REGION
value: "cn-beijing"
- name: OSS_PATH
value: "oss://examplebucket/qwen/Qwen1.5-7B-Chat/"
- name: MODEL_DIR
value: "/var/model/"
- name: OSS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: oss-access-key-connector
key: key
- name: OSS_ACCESS_KEY_SECRET
valueFrom:
secretKeyRef:
name: oss-access-key-connector
key: secret
volumeMounts:
- name: connector-config
mountPath: /etc/oss-connector/
terminationGracePeriodSeconds: 10
volumes:
- name: connector-config
configMap:
name: connector-config
Tests de performance
Test de chargement de modèle sur un seul nœud
Environnement de test
|
Métrique |
Description |
|
OSS |
Pékin, bande passante de téléchargement sur réseau interne de 250 Gbps |
|
Nœud de test |
ecs.g7nex.32xlarge, bande passante réseau de 160 Gbps (80 Gbps × 2) |
Métriques statistiques
|
Métrique |
Description |
|
Téléchargement du modèle |
Temps nécessaire pour télécharger les fichiers de modèle via le connecteur. |
|
Bout en bout |
Temps nécessaire pour que le serveur API vllm (version CPU) démarre et soit prêt. |
Résultats des tests
|
Nom du modèle |
Taille du modèle (Go) |
Temps de téléchargement du modèle (secondes) |
Temps bout en bout (secondes) |
|
Qwen2,5-14B |
27 522 |
1,7721 |
20,48 |
|
Qwen2,5-72B |
135 437 |
10,57 |
30,09 |
|
Qwen3-8B |
15 271 |
0,97 |
18,88 |
|
Qwen3-32B |
61 039 |
3,99 |
22,97 |