O OSS Connector for AI/ML acelera o carregamento de modelos do OSS por meio de leituras diretas baseadas em LD_PRELOAD, com prefetch e cache. Não é necessário alterar o código. Compatível com containers e os principais frameworks de inferência.
Alto desempenho
O OSS Connector for AI/ML melhora significativamente o carregamento de modelos grandes a partir do OSS. Com largura de banda suficiente, o throughput pode ultrapassar 10 GB/s. Testes de desempenho.
Como funciona
O OSS Connector for AI/ML resolve gargalos de desempenho no carregamento de modelos grandes diretamente do OSS.
Soluções de montagem baseadas em FUSE frequentemente não aproveitam totalmente a largura de banda do OSS, resultando em carregamento lento de modelos. O OSS Connector intercepta as requisições de I/O do framework de inferência e as converte diretamente em requisições HTTP(s) para o OSS.
Por meio de
LD_PRELOAD, ele faz prefetch e armazena dados do modelo em cache na memória, sem exigir alterações no código da sua aplicação de inferência.
Ambiente de implantação
Sistema operacional: Linux x86-64
glibc: >=2,17
Instale o OSS Connector
-
Baixe o pacote de instalação.
-
oss-connector-lib-1.1.0rc7.x86_64.rpm: Para distribuições Linux baseadas em 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: Para distribuições Linux baseadas em Debian
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
-
-
Instale o OSS Connector.
Use o pacote .rpm ou .deb baixado para a instalação. A biblioteca
libossc_preload.soserá instalada em/usr/local/lib/.-
Instale o oss-connector-lib-1.1.0rc7.x86_64.rpm
yum install -y oss-connector-lib-1.1.0rc7.x86_64.rpm -
Instale o oss-connector-lib-1.1.0rc7.x86_64.deb
dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb
-
-
Verifique se o arquivo
/usr/local/lib/libossc_preload.soexiste e se a versão está correta.nm -D /usr/local/lib/libossc_preload.so | grep version
Configure o OSS Connector
-
Arquivo de configuração
Este arquivo controla a saída de log, a política de cache e a concorrência de prefetch.
Configuração padrão em
/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 } }Parâmetro
Descrição
logLevel
Defina o nível de detalhe da saída de log.
logPath
Caminho para a saída de logs de execução.
auditPath
Caminho do log de auditoria para rastreamento de segurança e conformidade.
expireTimeSec
Atraso em segundos para liberação de arquivos de cache após o fechamento de todas as referências. Padrão: 120.
prefetch.vcpus
Quantidade de vCPUs dedicadas ao prefetch. Padrão: 16.
prefetch.workers
Número de workers por vCPU para concorrência. Padrão: 16.
-
Configure as variáveis de ambiente
CHAVE da variável de ambiente
Descrição
OSS_ACCESS_KEY_ID
Par de AccessKey de uma conta Alibaba Cloud ou usuário RAM.
Ao usar um token de acesso temporário, defina estes campos com o par de AccessKey da credencial temporária.
O OSS Connector exige a permissão
oss:ListObjectsno diretório do bucket de destino. Para buckets com acesso anônimo, deixeOSS_ACCESS_KEY_IDeOSS_ACCESS_KEY_SECRETindefinidos ou vazios.OSS_ACCESS_KEY_SECRET
OSS_SESSION_TOKEN
Token de acesso temporário. Obrigatório ao usar credenciais temporárias STS para acessar o OSS.
Defina como string vazia ao usar credenciais permanentes de AccessKey.
OSS_ENDPOINT
Endpoint do OSS. Exemplo:
http://oss-cn-beijing-internal.aliyuncs.com. Usa HTTPS por padrão se nenhum protocolo for especificado. Em redes internas, prefira HTTP para melhor desempenho.OSS_REGION
ID da região do OSS. Exemplo: cn-beijing. A autenticação pode falhar caso este campo não seja especificado.
OSS_PATH
Caminho do modelo no OSS. Formato:
oss://bucketname/path/. Exemplo:oss://examplebucket/qwen/Qwen3-8B/.MODEL_DIR
Diretório local do modelo para o framework de inferência. Esvazie o diretório antes do uso. Você pode excluir dados temporários baixados durante o carregamento posteriormente.
Nota-
O caminho em
MODEL_DIRdeve corresponder ao caminho do modelo no framework de inferência (--modelpara vllm,--model-pathpara sglang). -
O
MODEL_DIRrequer permissões de leitura e escrita. Sua estrutura de diretórios espelha a deOSS_PATH. -
Os arquivos do modelo passam por prefetch e são armazenados em cache na memória durante o carregamento. Por padrão, o cache é liberado após 120 segundos (configurável via
expireTimeSec). -
Use este diretório exclusivamente para o carregamento de modelos pelo connector.
-
Não crie este diretório em uma montagem OSS existente (como ossfs).
LD_PRELOAD
Caminho para a biblioteca pré-carregada:
/usr/local/lib/libossc_preload.so. Defina como variável de ambiente temporária. Exemplo:LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ./myappENABLE_CONNECTOR
Função do processo do OSS Connector. Defina como variável de ambiente temporária.
-
ENABLE_CONNECTOR=1: Função primária do connector. -
ENABLE_CONNECTOR=2: Função secundária do connector.
Cada instância permite apenas um processo de connector primário. Atribua a função primária ao processo principal (entrypoint). Todos os demais processos do connector devem usar a função secundária. Consulte o exemplo ray+vllm para inicialização multi-nó.
-
Execute o serviço de modelo
Inicialização em nó único
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
Inicialização multi-nó
ray+vllm
Variáveis de ambiente comuns:
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
As variáveis OSS_PATH e MODEL_DIR devem corresponder entre si. Por exemplo, se o caminho do modelo no OSS for oss://examplebucket/qwen/Qwen2___5-72B/, o diretório local do modelo deverá ser /tmp/models/qwen/Qwen2___5-72B/.
O Pod A inicia o head do ray:
LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --head --dashboard-host 0.0.0.0 --block
O Pod B inicia o ray e entra no 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.
Execute o vllm API Server:
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
Configure as variáveis de ambiente para o processo sglang em cada nó.
Inicialização do nó primário:
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
Inicialização do nó secundário:
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
Implantação no Kubernetes
Crie uma imagem com o connector instalado e envie-a para um repositório. Exemplo de YAML para implantação 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
Testes de desempenho
Teste de carregamento de modelo em nó único
Ambiente de teste
|
Métrica |
Descrição |
|
OSS |
Pequim, largura de banda de download em rede interna de 250 Gbps |
|
Nó de teste |
ecs.g7nex.32xlarge, largura de banda de rede de 160 Gbps (80 Gbps × 2) |
Métricas estatísticas
|
Métrica |
Descrição |
|
Download do modelo |
Tempo para baixar os arquivos do modelo via connector. |
|
Ponta a ponta |
Tempo para o servidor de API vllm (versão CPU) iniciar e ficar pronto. |
Resultados dos testes
|
Nome do modelo |
Tamanho do modelo (GB) |
Tempo de download do modelo (segundos) |
Tempo ponta a ponta (segundos) |
|
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 |