使用OSS Connector for AI/ML提升模型部署效率

OSS Connector for AI/ML 提供免改造、无侵入的模型加载方案,通过 LD_PRELOAD 实现高性能OSS直读,支持预取与缓存,显著提升模型加载速度,适用于容器及主流推理框架。

高性能

OSS Connector for AI/ML能显著提升从OSS加载大模型的性能。在带宽充足的条件下,吞吐量可超过10 GB/s。有关性能详情,请参见性能测试

工作原理

OSS Connector for AI/ML旨在解决云环境下加载大型模型时的性能瓶颈,尤其是模型存储在OSS中的场景。

  • 传统基于FUSEPOSIX挂载方案,往往无法充分发挥OSS的高带宽优势,导致模型加载速度缓慢。OSS Connector通过拦截推理框架的I/O请求,并将其直接转换为对 OSS 的 HTTP(s) 请求,有效提升了数据访问效率。

  • 采用 LD_PRELOAD 机制,无需对推理应用程序进行任何代码修改,即可将模型数据预取并缓存到内存中,从而显著加快模型加载速度。

部署环境

  • 操作系统:Linux x86-64

  • glibc:>=2.17

安装OSS Connector

  1. 下载完整安装包。

    • oss-connector-lib-1.1.0rc7.x86_64.rpm:适用于Red Hat系列的Linux发行版

      https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.rpm
    • oss-connector-lib-1.1.0rc7.x86_64.deb:适用于Debian系列的Linux发行版

      https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
  2. 安装OSS Connector。

    通过 .rpm 或 .deb 安装包安装OSS Connector,动态库文件libossc_preload.so会自动安装到 /usr/local/lib/ 目录下。

    • 安装oss-connector-lib-1.1.0rc7.x86_64.rpm

      yum install -y oss-connector-lib-1.1.0rc7.x86_64.rpm
    • 安装oss-connector-lib-1.1.0rc7.x86_64.deb

      dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb
  3. 安装后检查/usr/local/lib/libossc_preload.so是否存在及版本是否正确。

    nm -D /usr/local/lib/libossc_preload.so | grep version

配置OSS Connector

  • 配置文件

    配置文件主要用于控制OSS Connector的日志输出、缓存策略和预取并发能力。合理设置配置文件的部分参数可以提升系统性能和可维护性。

    配置文件路径为 /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
        }
    }
    

    参数

    说明

    logLevel

    日志级别,控制日志输出的详细程度。

    logPath

    日志文件路径,指定运行日志的输出位置。

    auditPath

    审计日志文件路径,记录操作审计信息,便于安全合规追踪。

    expireTimeSec

    缓存文件的延迟释放时间(秒),无引用时延迟释放,默认120秒。

    prefetch.vcpus

    预取时使用的虚拟CPU数(并发CPU核心数),默认值16。

    prefetch.workers

    每个vCPU下的协程(worker)数量,用于提升并发度,默认值16。

  • 配置环境变量

    环境变量 KEY

    说明

    OSS_ACCESS_KEY_ID

    阿里云账号或者RAM用户的AccessKey IDAccessKey Secret。

    使用临时访问令牌进行权限配置时,请设置为临时访问凭证的AccessKey IDAccessKey Secret。

    使用OSS Connector需要具有目标Bucket对应目录的oss:ListObjects 权限。如果访问的Bucket及文件支持匿名访问,可以不设置 OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET环境变量,或设置为空字符串。

    OSS_ACCESS_KEY_SECRET

    OSS_SESSION_TOKEN

    临时访问令牌。当使用从STS获取的临时访问凭证访问OSS时,需要设置此参数。

    使用阿里云账号或者RAM用户的AccessKey IDAccessKey Secret进行权限配置时,将该字段设置为空字符串。

    OSS_ENDPOINT

    指定OSS服务Endpoint,示例值为http://oss-cn-beijing-internal.aliyuncs.com。当不指定协议类型时,默认使用HTTPS协议。建议在内网等安全环境中使用HTTP协议,以达到更好的性能。

    OSS_REGION

    指定OSS Region ID,示例值为 cn-beijing。如不指定则可能出现鉴权失败。

    OSS_PATH

    OSS模型目录,格式为 oss://bucketname/path/,示例值为oss://examplebucket/qwen/Qwen3-8B/

    MODEL_DIR

    本地模型目录,传递给vllm 或其他推理框架。建议先清空目录,使用过程中会下载临时数据,使用后可以删除。

    说明
    • MODEL_DIR 路径需与推理框架的模型路径保持一致,例如vllm的--model 参数或sglang的 --model-path 参数。

    • MODEL_DIR 需要有读写权限。MODEL_DIR的目录结构与OSS_PATH相互对应。

    • 模型加载过程中会在内存中预取和缓存模型文件,模型加载后缓存会延迟释放,默认延迟 120 秒。可通过配置文件中的expireTimeSec参数进行调整。

    • 本地模型目录仅限用于Connector加载模型场景,其他用途无效。

    • 本地模型目录不应创建于其他OSS挂载点(如ossfs挂载点)之上。

    LD_PRELOAD

    需预加载的动态库路径,通常为/usr/local/lib/libossc_preload.so。建议使用临时环境变量进行配置。例如LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ./myapp

    ENABLE_CONNECTOR

    设置OSS Connector进程角色。请使用临时环境变量注入方式使其生效。

    • ENABLE_CONNECTOR=1:主Connector角色。

    • ENABLE_CONNECTOR=2 :从Connector角色。

    单个运行实例内有且只能有一个进程为主Connector角色,建议用于主进程(如entrypoint)。其余使用Connector的进程需指定为从Connector角色。使用方法,请参见多节点启动下的ray+vllm案例

启动模型服务

单节点启动

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 

多节点启动

ray+vllm

公共环境变量:

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
重要

OSS_PATH 与 MODEL_DIR存在对应关系,如OSS 上模型地址为 oss://examplebucket/qwen/Qwen2___5-72B/,则本地模型目录为 /tmp/models/qwen/Qwen2___5-72B/。

Pod A 启动 ray head:

LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --head --dashboard-host 0.0.0.0 --block

Pod B 启动 ray 加入集群:

LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --address='172.24.176.137:6379' --block     // 172.24.176.137 是 podip改成head pod ip ,pod A 上 ray start 之后会有输出,加入集群的命令

启动 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

为每个节点的 sglang 进程配置环境变量。

主节点启动:

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 

从节点启动:

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 

Kubernetes部署

Kubernetes 环境部署 POD时,要求提前构建好安装了Connector的镜像,并推送到指定仓库。以下是一个 Kubernetes 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

性能测试

单节点模型加载测试

测试环境

指标

说明

OSS

北京,内网下载带宽 250Gbps

测试节点

ecs.g7nex.32xlarge,网络带宽 160Gbps (80Gbps*2)

统计指标

指标

说明

模型下载

模型文件通过 connector 下载开始到结束的时间。

端到端

CPU 版 vllm api server 启动到服务就绪时间。

测试结果

模型名称

模型大小(GB)

模型下载时间(秒)

端到端时间(秒)

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